├── .gitignore ├── .npmignore ├── README.md ├── package.json ├── pnpm-lock.yaml ├── src ├── fileOperation.ts └── index.ts ├── tsconfig.json ├── tsup.config.ts └── www ├── .gitignore ├── README.md ├── components.json ├── eslint.config.js ├── index.html ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public ├── logo.svg └── og.png ├── src ├── App.tsx ├── assets │ └── react.svg ├── components │ ├── demo.tsx │ ├── features.tsx │ ├── footer.tsx │ ├── landing-page.tsx │ └── ui │ │ └── button.tsx ├── index.css ├── lib │ └── utils.ts ├── main.tsx └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /dist 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /src 2 | /node_modules 3 | /www 4 | 5 | 6 | .env 7 | .DS_Store 8 | 9 | tsconfig.json 10 | tsup.config.ts 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tidyup 2 | 3 | **tidyup** is a powerful command-line tool that organizes files in a specified directory into categorized subfolders. It offers multiple options to customize the organization process, ensuring your directories remain clean and structured. 4 | 5 | --- 6 | 7 | ## Features 8 | 9 | - Organizes files into subfolders by: 10 | - **File Extensions** (e.g., `mp4`, `pdf`). 11 | - **Starting Names** (e.g., `project-a`, `report`). 12 | - **Creation Dates** (e.g., `2024-12-24`). 13 | - Handles file naming conflicts automatically. 14 | - Provides a detailed summary of the organization process. 15 | - Compatible with Windows, macOS, and Linux. 16 | 17 | --- 18 | 19 | ## Installation 20 | 21 | First, ensure you have Node.js installed on your system. 22 | 23 | 1. Install `tidyup` globally via npm: 24 | 25 | ```bash 26 | npm install -g tidyup 27 | ``` 28 | 29 | 2. Verify the installation: 30 | 31 | ```bash 32 | tidyup --version 33 | ``` 34 | 35 | --- 36 | 37 | ## Usage 38 | 39 | Run the `tidyup` command, specifying the directory to organize and the desired options. 40 | 41 | ```bash 42 | tidyup [directory] [options] 43 | ``` 44 | 45 | If no directory is specified, the current directory (`.`) is used by default. 46 | 47 | ### Options 48 | 49 | - `--ext`: Organize files into folders based on their **file extensions**. 50 | - `--name`: Group files by their **starting names**. 51 | - `--date`: Group files by their **creation dates**. 52 | - `--ignore-dotfiles`: Ignore dotfiles when organizing. 53 | 54 | > **Note**: Some of these options cannot be used together. For example, you cannot use `--ext` and `--name` simultaneously, but you can use `--ignore-dotfiles` with any one other option. 55 | 56 | --- 57 | 58 | ## Examples 59 | 60 | ### Organize by File Extensions 61 | 62 | ```bash 63 | tidyup /path/to/directory --ext 64 | ``` 65 | 66 | Example output: 67 | 68 | ``` 69 | Organization Summary for '/path/to/directory': 70 | - Folder: mp4 71 | - Created 72 | - Files added: 3 73 | - Folder: pdf 74 | - Already existed 75 | - Files added: 1 76 | ``` 77 | 78 | ### Group Files by Starting Names 79 | 80 | ```bash 81 | tidyup /path/to/directory --name 82 | ``` 83 | 84 | Example output: 85 | 86 | ``` 87 | Organization Summary for '/path/to/directory': 88 | - Folder: project-a 89 | - Created 90 | - Files added: 4 91 | - Folder: report 92 | - Already existed 93 | - Files added: 2 94 | ``` 95 | 96 | ### Organize by Creation Dates 97 | 98 | ```bash 99 | tidyup /path/to/directory --date 100 | ``` 101 | 102 | Example output: 103 | 104 | ``` 105 | Organization Summary for '/path/to/directory': 106 | - Folder: 2024-12-23 107 | - Created 108 | - Files added: 2 109 | - Folder: 2024-12-24 110 | - Already existed 111 | - Files added: 3 112 | ``` 113 | 114 | ### Organize by Name and Ignore Dotfiles 115 | ```bash 116 | tidyup /path/to/directory --name --ignore-dotfiles 117 | ``` 118 | 119 | Example output: 120 | 121 | ``` 122 | Organization Summary for '/path/to/directory': 123 | - Folder: project-a 124 | - Created 125 | - Files added: 4 126 | - Folder: report 127 | - Already existed 128 | - Files added: 2 129 | ``` 130 | 131 | ### Invalid Option Combination 132 | 133 | ```bash 134 | tidyup /path/to/directory --ext --name 135 | ``` 136 | 137 | Error output: 138 | 139 | ``` 140 | The --ext, --name, and --date options cannot be used together. 141 | ``` 142 | 143 | --- 144 | 145 | ## Development 146 | 147 | 1. Clone the repository: 148 | 149 | ```bash 150 | git clone https://github.com/code-env/tidyup.git 151 | ``` 152 | 153 | 2. Navigate to the project directory: 154 | 155 | ```bash 156 | cd tidyup 157 | ``` 158 | 159 | 3. Install dependencies: 160 | 161 | ```bash 162 | npm install 163 | ``` 164 | 165 | 4. Build the project: 166 | 167 | ```bash 168 | npm run build 169 | ``` 170 | 171 | 5. Test locally: 172 | 173 | ```bash 174 | node ./dist/index.js [options] 175 | ``` 176 | 177 | --- 178 | 179 | ## Contributing 180 | 181 | We welcome contributions! To contribute: 182 | 183 | 1. Fork the repository. 184 | 2. Create a new branch for your feature or bug fix. 185 | 3. Submit a pull request with your changes. 186 | 187 | --- 188 | 189 | ## License 190 | 191 | This project is licensed under the **ISC License**. See the LICENSE file for more details. 192 | 193 | --- 194 | 195 | ## Author 196 | 197 | **tidyup** is developed and maintained by [Bossadi Zenith](https://github.com/code-env). 198 | 199 | --- 200 | 201 | Happy organizing! 🎉 202 | 203 | Let me know if this aligns with your requirements or needs further customization. 204 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tidyup", 3 | "version": "0.0.7", 4 | "description": "A simple CLI tool to organize files in a directory into categorized subfolders based on file types.", 5 | "main": "./dist/index.js", 6 | "module": "./dist/index.mjs", 7 | "types": "./dist/index.d.ts", 8 | "scripts": { 9 | "build": "tsup", 10 | "start": "node ./dist/index.js", 11 | "dev": "ts-node ./src/index.ts", 12 | "lint": "eslint . --ext .ts", 13 | "test": "jest" 14 | }, 15 | "bin": { 16 | "tidyup": "./dist/index.js" 17 | }, 18 | "keywords": [ 19 | "directory-organizer", 20 | "file-management", 21 | "cli-tool", 22 | "file-organization", 23 | "file-sorter", 24 | "nodejs" 25 | ], 26 | "author": { 27 | "name": "bossadizenith", 28 | "email": "hello@bossadizenith.me", 29 | "url": "https://github.com/code-env" 30 | }, 31 | "repository": { 32 | "type": "git", 33 | "url": "https://github.com/code-env/tidyup.git" 34 | }, 35 | "bugs": { 36 | "url": "https://github.com/code-env/tidyup/issues" 37 | }, 38 | "homepage": "https://tidyup.bossadizenith.me", 39 | "license": "ISC", 40 | "engines": { 41 | "node": ">=16.0.0" 42 | }, 43 | "devDependencies": { 44 | "@types/node": "^22.10.0", 45 | "eslint": "^8.54.0", 46 | "jest": "^29.7.0", 47 | "ts-node": "^10.9.2", 48 | "tsup": "^8.3.5", 49 | "typescript": "^5.7.2" 50 | }, 51 | "dependencies": { 52 | "commander": "^12.1.0" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/fileOperation.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | 3 | import { promisify } from "util"; 4 | const mkdir = promisify(fs.mkdir); 5 | const rename = promisify(fs.rename); 6 | 7 | class Operation { 8 | private dryRun: boolean; 9 | private summary: Record; 10 | /** 11 | * 12 | * @param dryRun - If true, operations will be simulated without making changes. 13 | */ 14 | constructor(dryRun: boolean) { 15 | this.dryRun = dryRun; 16 | this.summary = {}; 17 | 18 | } 19 | 20 | async rename(oldPath: string, newPath: string): Promise { 21 | if (this.dryRun) { 22 | this.summary[this.extractFileName(oldPath)] = this.extractFileWithParentDir(newPath); 23 | } else { 24 | await rename(oldPath, newPath); 25 | console.log(`Renamed: ${oldPath} -> ${newPath}`); 26 | } 27 | } 28 | 29 | async mkdir(dirPath: string): Promise { 30 | if (this.dryRun) { 31 | console.log(`[Dry Run] directory will be create ${dirPath}`); 32 | } else { 33 | await mkdir(dirPath); 34 | } 35 | } 36 | getSummary() { 37 | return this.summary; 38 | } 39 | private extractFileName(filePath: string): string { 40 | const parts = filePath.split("/"); 41 | return parts[parts.length - 1]; 42 | } 43 | private extractFileWithParentDir(filePath: string): string { 44 | const parts = filePath.split("/"); 45 | return parts[parts.length - 2] + "/" + parts[parts.length - 1]; 46 | } 47 | } 48 | 49 | export default Operation; -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import { Command } from "commander"; 4 | import fs from "fs"; 5 | import path from "path"; 6 | import { promisify } from "util"; 7 | import { version } from "../package.json"; 8 | import Operation from "./fileOperation"; 9 | 10 | const readdir = promisify(fs.readdir); 11 | const stat = promisify(fs.stat); 12 | 13 | type Options = { 14 | ext: boolean; 15 | name: boolean; 16 | ignoreDotfiles: boolean; 17 | dryrun: boolean; 18 | }; 19 | 20 | // Define mappings for file types to folder names 21 | const FILE_TYPE_MAP: Record = { 22 | ".png": "images-png", 23 | ".jpg": "images-jpg", 24 | ".jpeg": "images-jpeg", 25 | ".mp4": "videos-mp4", 26 | ".avi": "videos-avi", 27 | ".pdf": "documents-pdf", 28 | }; 29 | 30 | const program = new Command(); 31 | let fileOperation: Operation; 32 | program 33 | .version(version) 34 | .argument("[directory]", "Directory to tidy up", ".") // Default to current directory 35 | .description("Organize files in a directory based on their extensions") 36 | .option("--ext", "Use the file extensions as folder names") 37 | .option("--name", "Group files by starting name") 38 | .option("--dryrun", "Show what would be done without making changes", false) 39 | .option("--ignore-dotfiles", "Ignore dotfiles", true) 40 | .action(async (inputDir: string, options: Options) => { 41 | const dirPath = path.resolve(inputDir); 42 | console.log(`Organizing files in directory: ${dirPath}`); 43 | try { 44 | if (options.dryrun) { 45 | console.log("Running in dry run mode. No changes will be made."); 46 | fileOperation = new Operation(true); 47 | } 48 | else { 49 | console.log("Running in normal mode. Changes will be made."); 50 | fileOperation = new Operation(false); 51 | } 52 | 53 | if (options.ext && options.name) { 54 | console.error("Only one of --ext or --name can be used at a time"); 55 | process.exit(1); 56 | } 57 | 58 | const dirStat = await stat(dirPath); 59 | if (!dirStat.isDirectory()) { 60 | console.error(`The provided path is not a directory: ${dirPath}`); 61 | process.exit(1); 62 | } 63 | 64 | await organizeFiles(dirPath, options); 65 | } catch (error: any) { 66 | console.error("An error occurred:", error.message); 67 | process.exit(1); 68 | } 69 | }); 70 | 71 | program.parse(process.argv); 72 | 73 | /** 74 | * Check if a file is a dotfile (starts with a dot). 75 | * @param fileName - The name of the file to check. 76 | * @returns True if the file is a dotfile, false otherwise. 77 | */ 78 | function isDotFile(fileName: string): boolean { 79 | return fileName.startsWith("."); 80 | } 81 | 82 | /** 83 | * Get all file types present in a directory. 84 | * @param dirPath - The path to the directory. 85 | * @param options - User-specified options. 86 | * @returns A record where keys are file extensions and values are file paths. 87 | */ 88 | async function getFileTypes( 89 | dirPath: string, 90 | options: Options 91 | ): Promise> { 92 | const files = await readdir(dirPath); 93 | const fileTypes: Record = {}; 94 | 95 | for (const file of files) { 96 | if (options.ignoreDotfiles && isDotFile(file)) { 97 | continue; // Skip hidden files if ignoreDotfiles is true 98 | } 99 | 100 | const filePath = path.join(dirPath, file); 101 | const fileStat = await stat(filePath); 102 | 103 | if (fileStat.isFile()) { 104 | const ext = path.extname(file).toLowerCase(); 105 | if (!fileTypes[ext]) { 106 | fileTypes[ext] = []; 107 | } 108 | fileTypes[ext].push(filePath); 109 | } 110 | } 111 | 112 | return fileTypes; 113 | } 114 | 115 | /** 116 | * Get all file name groups based on starting names. 117 | * @param dirPath - The path to the directory. 118 | * @param options - User-specified options. 119 | * @returns A record where keys are base names and values are file paths. 120 | */ 121 | async function getFileNameGroups( 122 | dirPath: string, 123 | options: Options 124 | ): Promise> { 125 | const files = await readdir(dirPath); 126 | const nameGroups: Record = {}; 127 | 128 | for (const file of files) { 129 | if (options.ignoreDotfiles && isDotFile(file)) { 130 | continue; // Skip hidden files if ignoreDotfiles is true 131 | } 132 | 133 | const filePath = path.join(dirPath, file); 134 | const fileStat = await stat(filePath); 135 | 136 | if (fileStat.isFile()) { 137 | const baseName = path.parse(file).name.slice(0, 10); 138 | if (!nameGroups[baseName]) { 139 | nameGroups[baseName] = []; 140 | } 141 | nameGroups[baseName].push(filePath); 142 | } 143 | } 144 | 145 | return nameGroups; 146 | } 147 | 148 | /** 149 | * Organize files into folders based on their extensions or names. 150 | * @param dirPath - The directory path to organize. 151 | * @param options - User-specified options. 152 | */ 153 | async function organizeFiles(dirPath: string, options: Options): Promise { 154 | let fileTypes: Record; 155 | if (options.name) { 156 | fileTypes = await getFileNameGroups(dirPath, options); 157 | } else { 158 | fileTypes = await getFileTypes(dirPath, options); 159 | } 160 | 161 | const summary: { folder: string; created: boolean; filesAdded: number }[] = 162 | []; 163 | 164 | for (const [ext, filePaths] of Object.entries(fileTypes)) { 165 | const newFolder = ext.split(".")[1]; 166 | 167 | const folderName = options.ext 168 | ? newFolder 169 | : FILE_TYPE_MAP[ext] || `others-${ext.replace(".", "")}`; 170 | const folderPath = path.join(dirPath, folderName); 171 | let folderCreated = false; 172 | 173 | if (!fs.existsSync(folderPath)) { 174 | await fileOperation.mkdir(folderPath); 175 | folderCreated = true; 176 | } 177 | let filesAdded = 0; 178 | for (const filePath of filePaths) { 179 | const fileName = path.basename(filePath); 180 | let newFilePath = path.join(folderPath, fileName); 181 | // Check if file already exists and resolve conflicts 182 | if (fs.existsSync(newFilePath)) { 183 | const fileBase = path.parse(fileName).name; 184 | const fileExt = path.extname(fileName); 185 | let counter = 1; 186 | while (fs.existsSync(newFilePath)) { 187 | const newFileName = `${fileBase}(${counter})${fileExt}`; 188 | newFilePath = path.join(folderPath, newFileName); 189 | counter++; 190 | } 191 | } 192 | await fileOperation.rename(filePath, newFilePath); 193 | filesAdded++; 194 | } 195 | summary.push({ folder: folderName, created: folderCreated, filesAdded }); 196 | } 197 | 198 | const lastPath = dirPath.split("/"); 199 | const lastDir = lastPath[lastPath.length - 1]; 200 | 201 | console.log(`Organization Summary for '${lastDir}':`); 202 | 203 | if (options.dryrun) { 204 | console.log("Dry Run Output:"); 205 | const dryRunFilePath = path.join("dryrun.json"); 206 | const data = fileOperation.getSummary(); 207 | fs.writeFileSync(dryRunFilePath, JSON.stringify(data, null, 2), "utf-8"); 208 | for (const file in data){ 209 | console.log(`- ${file} -> ${data[file]}`); 210 | 211 | } 212 | } 213 | else{ 214 | for (const { folder, created, filesAdded } of summary) { 215 | console.log(`- Folder: ${folder}`); 216 | console.log(` - ${created ? "Created" : "Already existed"}`); 217 | console.log(` - Files added: ${filesAdded}`); 218 | } 219 | } 220 | 221 | } 222 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "noImplicitAny": true, 5 | "esModuleInterop": true, 6 | "strictNullChecks": true, 7 | "target": "ES2022", 8 | "moduleResolution": "Node10", 9 | "module": "CommonJS", 10 | "resolveJsonModule": true, 11 | "declaration": true, 12 | "isolatedModules": true, 13 | "noEmit": true, 14 | "outDir": "dist" 15 | }, 16 | "include": ["src"], 17 | "exclude": ["node_modules"] 18 | } 19 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig({ 4 | format: ["cjs", "esm"], 5 | entry: ["./src/index.ts"], 6 | dts: true, 7 | shims: true, 8 | skipNodeModulesBundle: true, 9 | clean: true, 10 | }); 11 | -------------------------------------------------------------------------------- /www/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | .vercel 26 | -------------------------------------------------------------------------------- /www/README.md: -------------------------------------------------------------------------------- 1 | # React + TypeScript + Vite 2 | 3 | This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. 4 | 5 | Currently, two official plugins are available: 6 | 7 | - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh 8 | - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh 9 | 10 | ## Expanding the ESLint configuration 11 | 12 | If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: 13 | 14 | - Configure the top-level `parserOptions` property like this: 15 | 16 | ```js 17 | export default tseslint.config({ 18 | languageOptions: { 19 | // other options... 20 | parserOptions: { 21 | project: ['./tsconfig.node.json', './tsconfig.app.json'], 22 | tsconfigRootDir: import.meta.dirname, 23 | }, 24 | }, 25 | }) 26 | ``` 27 | 28 | - Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` 29 | - Optionally add `...tseslint.configs.stylisticTypeChecked` 30 | - Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: 31 | 32 | ```js 33 | // eslint.config.js 34 | import react from 'eslint-plugin-react' 35 | 36 | export default tseslint.config({ 37 | // Set the react version 38 | settings: { react: { version: '18.3' } }, 39 | plugins: { 40 | // Add the react plugin 41 | react, 42 | }, 43 | rules: { 44 | // other rules... 45 | // Enable its recommended rules 46 | ...react.configs.recommended.rules, 47 | ...react.configs['jsx-runtime'].rules, 48 | }, 49 | }) 50 | ``` 51 | -------------------------------------------------------------------------------- /www/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.js", 8 | "css": "src/index.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } -------------------------------------------------------------------------------- /www/eslint.config.js: -------------------------------------------------------------------------------- 1 | import js from '@eslint/js' 2 | import globals from 'globals' 3 | import reactHooks from 'eslint-plugin-react-hooks' 4 | import reactRefresh from 'eslint-plugin-react-refresh' 5 | import tseslint from 'typescript-eslint' 6 | 7 | export default tseslint.config( 8 | { ignores: ['dist'] }, 9 | { 10 | extends: [js.configs.recommended, ...tseslint.configs.recommended], 11 | files: ['**/*.{ts,tsx}'], 12 | languageOptions: { 13 | ecmaVersion: 2020, 14 | globals: globals.browser, 15 | }, 16 | plugins: { 17 | 'react-hooks': reactHooks, 18 | 'react-refresh': reactRefresh, 19 | }, 20 | rules: { 21 | ...reactHooks.configs.recommended.rules, 22 | 'react-refresh/only-export-components': [ 23 | 'warn', 24 | { allowConstantExport: true }, 25 | ], 26 | }, 27 | }, 28 | ) 29 | -------------------------------------------------------------------------------- /www/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 14 | 15 | 16 | 17 | Tidyup 18 | 19 | 20 |
21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /www/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "www", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc -b && vite build", 9 | "lint": "eslint .", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "@radix-ui/react-slot": "^1.1.1", 14 | "class-variance-authority": "^0.7.1", 15 | "clsx": "^2.1.1", 16 | "lucide-react": "^0.469.0", 17 | "motion": "^11.15.0", 18 | "prism-react-renderer": "^2.4.1", 19 | "react": "^18.3.1", 20 | "react-dom": "^18.3.1", 21 | "react-use-measure": "^2.1.1", 22 | "tailwind-merge": "^2.6.0", 23 | "tailwindcss-animate": "^1.0.7" 24 | }, 25 | "devDependencies": { 26 | "@eslint/js": "^9.17.0", 27 | "@types/node": "^22.10.2", 28 | "@types/react": "^18.3.18", 29 | "@types/react-dom": "^18.3.5", 30 | "@vitejs/plugin-react": "^4.3.4", 31 | "autoprefixer": "^10.4.20", 32 | "eslint": "^9.17.0", 33 | "eslint-plugin-react-hooks": "^5.0.0", 34 | "eslint-plugin-react-refresh": "^0.4.16", 35 | "globals": "^15.14.0", 36 | "postcss": "^8.4.49", 37 | "tailwindcss": "^3.4.17", 38 | "typescript": "~5.6.2", 39 | "typescript-eslint": "^8.18.2", 40 | "vite": "^6.0.5" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /www/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@radix-ui/react-slot': 12 | specifier: ^1.1.1 13 | version: 1.1.1(@types/react@18.3.18)(react@18.3.1) 14 | class-variance-authority: 15 | specifier: ^0.7.1 16 | version: 0.7.1 17 | clsx: 18 | specifier: ^2.1.1 19 | version: 2.1.1 20 | lucide-react: 21 | specifier: ^0.469.0 22 | version: 0.469.0(react@18.3.1) 23 | motion: 24 | specifier: ^11.15.0 25 | version: 11.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 26 | prism-react-renderer: 27 | specifier: ^2.4.1 28 | version: 2.4.1(react@18.3.1) 29 | react: 30 | specifier: ^18.3.1 31 | version: 18.3.1 32 | react-dom: 33 | specifier: ^18.3.1 34 | version: 18.3.1(react@18.3.1) 35 | react-use-measure: 36 | specifier: ^2.1.1 37 | version: 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 38 | tailwind-merge: 39 | specifier: ^2.6.0 40 | version: 2.6.0 41 | tailwindcss-animate: 42 | specifier: ^1.0.7 43 | version: 1.0.7(tailwindcss@3.4.17) 44 | devDependencies: 45 | '@eslint/js': 46 | specifier: ^9.17.0 47 | version: 9.17.0 48 | '@types/node': 49 | specifier: ^22.10.2 50 | version: 22.10.2 51 | '@types/react': 52 | specifier: ^18.3.18 53 | version: 18.3.18 54 | '@types/react-dom': 55 | specifier: ^18.3.5 56 | version: 18.3.5(@types/react@18.3.18) 57 | '@vitejs/plugin-react': 58 | specifier: ^4.3.4 59 | version: 4.3.4(vite@6.0.5(@types/node@22.10.2)(jiti@1.21.7)(yaml@2.6.1)) 60 | autoprefixer: 61 | specifier: ^10.4.20 62 | version: 10.4.20(postcss@8.4.49) 63 | eslint: 64 | specifier: ^9.17.0 65 | version: 9.17.0(jiti@1.21.7) 66 | eslint-plugin-react-hooks: 67 | specifier: ^5.0.0 68 | version: 5.1.0(eslint@9.17.0(jiti@1.21.7)) 69 | eslint-plugin-react-refresh: 70 | specifier: ^0.4.16 71 | version: 0.4.16(eslint@9.17.0(jiti@1.21.7)) 72 | globals: 73 | specifier: ^15.14.0 74 | version: 15.14.0 75 | postcss: 76 | specifier: ^8.4.49 77 | version: 8.4.49 78 | tailwindcss: 79 | specifier: ^3.4.17 80 | version: 3.4.17 81 | typescript: 82 | specifier: ~5.6.2 83 | version: 5.6.3 84 | typescript-eslint: 85 | specifier: ^8.18.2 86 | version: 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 87 | vite: 88 | specifier: ^6.0.5 89 | version: 6.0.5(@types/node@22.10.2)(jiti@1.21.7)(yaml@2.6.1) 90 | 91 | packages: 92 | 93 | '@alloc/quick-lru@5.2.0': 94 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 95 | engines: {node: '>=10'} 96 | 97 | '@ampproject/remapping@2.3.0': 98 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 99 | engines: {node: '>=6.0.0'} 100 | 101 | '@babel/code-frame@7.26.2': 102 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 103 | engines: {node: '>=6.9.0'} 104 | 105 | '@babel/compat-data@7.26.3': 106 | resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} 107 | engines: {node: '>=6.9.0'} 108 | 109 | '@babel/core@7.26.0': 110 | resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} 111 | engines: {node: '>=6.9.0'} 112 | 113 | '@babel/generator@7.26.3': 114 | resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} 115 | engines: {node: '>=6.9.0'} 116 | 117 | '@babel/helper-compilation-targets@7.25.9': 118 | resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} 119 | engines: {node: '>=6.9.0'} 120 | 121 | '@babel/helper-module-imports@7.25.9': 122 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 123 | engines: {node: '>=6.9.0'} 124 | 125 | '@babel/helper-module-transforms@7.26.0': 126 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 127 | engines: {node: '>=6.9.0'} 128 | peerDependencies: 129 | '@babel/core': ^7.0.0 130 | 131 | '@babel/helper-plugin-utils@7.25.9': 132 | resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} 133 | engines: {node: '>=6.9.0'} 134 | 135 | '@babel/helper-string-parser@7.25.9': 136 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 137 | engines: {node: '>=6.9.0'} 138 | 139 | '@babel/helper-validator-identifier@7.25.9': 140 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 141 | engines: {node: '>=6.9.0'} 142 | 143 | '@babel/helper-validator-option@7.25.9': 144 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 145 | engines: {node: '>=6.9.0'} 146 | 147 | '@babel/helpers@7.26.0': 148 | resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} 149 | engines: {node: '>=6.9.0'} 150 | 151 | '@babel/parser@7.26.3': 152 | resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} 153 | engines: {node: '>=6.0.0'} 154 | hasBin: true 155 | 156 | '@babel/plugin-transform-react-jsx-self@7.25.9': 157 | resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} 158 | engines: {node: '>=6.9.0'} 159 | peerDependencies: 160 | '@babel/core': ^7.0.0-0 161 | 162 | '@babel/plugin-transform-react-jsx-source@7.25.9': 163 | resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} 164 | engines: {node: '>=6.9.0'} 165 | peerDependencies: 166 | '@babel/core': ^7.0.0-0 167 | 168 | '@babel/template@7.25.9': 169 | resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} 170 | engines: {node: '>=6.9.0'} 171 | 172 | '@babel/traverse@7.26.4': 173 | resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} 174 | engines: {node: '>=6.9.0'} 175 | 176 | '@babel/types@7.26.3': 177 | resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} 178 | engines: {node: '>=6.9.0'} 179 | 180 | '@esbuild/aix-ppc64@0.24.0': 181 | resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} 182 | engines: {node: '>=18'} 183 | cpu: [ppc64] 184 | os: [aix] 185 | 186 | '@esbuild/android-arm64@0.24.0': 187 | resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} 188 | engines: {node: '>=18'} 189 | cpu: [arm64] 190 | os: [android] 191 | 192 | '@esbuild/android-arm@0.24.0': 193 | resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} 194 | engines: {node: '>=18'} 195 | cpu: [arm] 196 | os: [android] 197 | 198 | '@esbuild/android-x64@0.24.0': 199 | resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} 200 | engines: {node: '>=18'} 201 | cpu: [x64] 202 | os: [android] 203 | 204 | '@esbuild/darwin-arm64@0.24.0': 205 | resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} 206 | engines: {node: '>=18'} 207 | cpu: [arm64] 208 | os: [darwin] 209 | 210 | '@esbuild/darwin-x64@0.24.0': 211 | resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} 212 | engines: {node: '>=18'} 213 | cpu: [x64] 214 | os: [darwin] 215 | 216 | '@esbuild/freebsd-arm64@0.24.0': 217 | resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} 218 | engines: {node: '>=18'} 219 | cpu: [arm64] 220 | os: [freebsd] 221 | 222 | '@esbuild/freebsd-x64@0.24.0': 223 | resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} 224 | engines: {node: '>=18'} 225 | cpu: [x64] 226 | os: [freebsd] 227 | 228 | '@esbuild/linux-arm64@0.24.0': 229 | resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} 230 | engines: {node: '>=18'} 231 | cpu: [arm64] 232 | os: [linux] 233 | 234 | '@esbuild/linux-arm@0.24.0': 235 | resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} 236 | engines: {node: '>=18'} 237 | cpu: [arm] 238 | os: [linux] 239 | 240 | '@esbuild/linux-ia32@0.24.0': 241 | resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} 242 | engines: {node: '>=18'} 243 | cpu: [ia32] 244 | os: [linux] 245 | 246 | '@esbuild/linux-loong64@0.24.0': 247 | resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} 248 | engines: {node: '>=18'} 249 | cpu: [loong64] 250 | os: [linux] 251 | 252 | '@esbuild/linux-mips64el@0.24.0': 253 | resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} 254 | engines: {node: '>=18'} 255 | cpu: [mips64el] 256 | os: [linux] 257 | 258 | '@esbuild/linux-ppc64@0.24.0': 259 | resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} 260 | engines: {node: '>=18'} 261 | cpu: [ppc64] 262 | os: [linux] 263 | 264 | '@esbuild/linux-riscv64@0.24.0': 265 | resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} 266 | engines: {node: '>=18'} 267 | cpu: [riscv64] 268 | os: [linux] 269 | 270 | '@esbuild/linux-s390x@0.24.0': 271 | resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} 272 | engines: {node: '>=18'} 273 | cpu: [s390x] 274 | os: [linux] 275 | 276 | '@esbuild/linux-x64@0.24.0': 277 | resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} 278 | engines: {node: '>=18'} 279 | cpu: [x64] 280 | os: [linux] 281 | 282 | '@esbuild/netbsd-x64@0.24.0': 283 | resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} 284 | engines: {node: '>=18'} 285 | cpu: [x64] 286 | os: [netbsd] 287 | 288 | '@esbuild/openbsd-arm64@0.24.0': 289 | resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} 290 | engines: {node: '>=18'} 291 | cpu: [arm64] 292 | os: [openbsd] 293 | 294 | '@esbuild/openbsd-x64@0.24.0': 295 | resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} 296 | engines: {node: '>=18'} 297 | cpu: [x64] 298 | os: [openbsd] 299 | 300 | '@esbuild/sunos-x64@0.24.0': 301 | resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} 302 | engines: {node: '>=18'} 303 | cpu: [x64] 304 | os: [sunos] 305 | 306 | '@esbuild/win32-arm64@0.24.0': 307 | resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} 308 | engines: {node: '>=18'} 309 | cpu: [arm64] 310 | os: [win32] 311 | 312 | '@esbuild/win32-ia32@0.24.0': 313 | resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} 314 | engines: {node: '>=18'} 315 | cpu: [ia32] 316 | os: [win32] 317 | 318 | '@esbuild/win32-x64@0.24.0': 319 | resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} 320 | engines: {node: '>=18'} 321 | cpu: [x64] 322 | os: [win32] 323 | 324 | '@eslint-community/eslint-utils@4.4.1': 325 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 326 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 327 | peerDependencies: 328 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 329 | 330 | '@eslint-community/regexpp@4.12.1': 331 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 332 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 333 | 334 | '@eslint/config-array@0.19.1': 335 | resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} 336 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 337 | 338 | '@eslint/core@0.9.1': 339 | resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} 340 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 341 | 342 | '@eslint/eslintrc@3.2.0': 343 | resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} 344 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 345 | 346 | '@eslint/js@9.17.0': 347 | resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} 348 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 349 | 350 | '@eslint/object-schema@2.1.5': 351 | resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} 352 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 353 | 354 | '@eslint/plugin-kit@0.2.4': 355 | resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} 356 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 357 | 358 | '@humanfs/core@0.19.1': 359 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 360 | engines: {node: '>=18.18.0'} 361 | 362 | '@humanfs/node@0.16.6': 363 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 364 | engines: {node: '>=18.18.0'} 365 | 366 | '@humanwhocodes/module-importer@1.0.1': 367 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 368 | engines: {node: '>=12.22'} 369 | 370 | '@humanwhocodes/retry@0.3.1': 371 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 372 | engines: {node: '>=18.18'} 373 | 374 | '@humanwhocodes/retry@0.4.1': 375 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} 376 | engines: {node: '>=18.18'} 377 | 378 | '@isaacs/cliui@8.0.2': 379 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 380 | engines: {node: '>=12'} 381 | 382 | '@jridgewell/gen-mapping@0.3.8': 383 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 384 | engines: {node: '>=6.0.0'} 385 | 386 | '@jridgewell/resolve-uri@3.1.2': 387 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 388 | engines: {node: '>=6.0.0'} 389 | 390 | '@jridgewell/set-array@1.2.1': 391 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 392 | engines: {node: '>=6.0.0'} 393 | 394 | '@jridgewell/sourcemap-codec@1.5.0': 395 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 396 | 397 | '@jridgewell/trace-mapping@0.3.25': 398 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 399 | 400 | '@nodelib/fs.scandir@2.1.5': 401 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 402 | engines: {node: '>= 8'} 403 | 404 | '@nodelib/fs.stat@2.0.5': 405 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 406 | engines: {node: '>= 8'} 407 | 408 | '@nodelib/fs.walk@1.2.8': 409 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 410 | engines: {node: '>= 8'} 411 | 412 | '@pkgjs/parseargs@0.11.0': 413 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 414 | engines: {node: '>=14'} 415 | 416 | '@radix-ui/react-compose-refs@1.1.1': 417 | resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} 418 | peerDependencies: 419 | '@types/react': '*' 420 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 421 | peerDependenciesMeta: 422 | '@types/react': 423 | optional: true 424 | 425 | '@radix-ui/react-slot@1.1.1': 426 | resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} 427 | peerDependencies: 428 | '@types/react': '*' 429 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 430 | peerDependenciesMeta: 431 | '@types/react': 432 | optional: true 433 | 434 | '@rollup/rollup-android-arm-eabi@4.29.1': 435 | resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} 436 | cpu: [arm] 437 | os: [android] 438 | 439 | '@rollup/rollup-android-arm64@4.29.1': 440 | resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} 441 | cpu: [arm64] 442 | os: [android] 443 | 444 | '@rollup/rollup-darwin-arm64@4.29.1': 445 | resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} 446 | cpu: [arm64] 447 | os: [darwin] 448 | 449 | '@rollup/rollup-darwin-x64@4.29.1': 450 | resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} 451 | cpu: [x64] 452 | os: [darwin] 453 | 454 | '@rollup/rollup-freebsd-arm64@4.29.1': 455 | resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} 456 | cpu: [arm64] 457 | os: [freebsd] 458 | 459 | '@rollup/rollup-freebsd-x64@4.29.1': 460 | resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} 461 | cpu: [x64] 462 | os: [freebsd] 463 | 464 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1': 465 | resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} 466 | cpu: [arm] 467 | os: [linux] 468 | 469 | '@rollup/rollup-linux-arm-musleabihf@4.29.1': 470 | resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} 471 | cpu: [arm] 472 | os: [linux] 473 | 474 | '@rollup/rollup-linux-arm64-gnu@4.29.1': 475 | resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} 476 | cpu: [arm64] 477 | os: [linux] 478 | 479 | '@rollup/rollup-linux-arm64-musl@4.29.1': 480 | resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} 481 | cpu: [arm64] 482 | os: [linux] 483 | 484 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1': 485 | resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} 486 | cpu: [loong64] 487 | os: [linux] 488 | 489 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': 490 | resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} 491 | cpu: [ppc64] 492 | os: [linux] 493 | 494 | '@rollup/rollup-linux-riscv64-gnu@4.29.1': 495 | resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} 496 | cpu: [riscv64] 497 | os: [linux] 498 | 499 | '@rollup/rollup-linux-s390x-gnu@4.29.1': 500 | resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} 501 | cpu: [s390x] 502 | os: [linux] 503 | 504 | '@rollup/rollup-linux-x64-gnu@4.29.1': 505 | resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} 506 | cpu: [x64] 507 | os: [linux] 508 | 509 | '@rollup/rollup-linux-x64-musl@4.29.1': 510 | resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} 511 | cpu: [x64] 512 | os: [linux] 513 | 514 | '@rollup/rollup-win32-arm64-msvc@4.29.1': 515 | resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} 516 | cpu: [arm64] 517 | os: [win32] 518 | 519 | '@rollup/rollup-win32-ia32-msvc@4.29.1': 520 | resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} 521 | cpu: [ia32] 522 | os: [win32] 523 | 524 | '@rollup/rollup-win32-x64-msvc@4.29.1': 525 | resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} 526 | cpu: [x64] 527 | os: [win32] 528 | 529 | '@types/babel__core@7.20.5': 530 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 531 | 532 | '@types/babel__generator@7.6.8': 533 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 534 | 535 | '@types/babel__template@7.4.4': 536 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 537 | 538 | '@types/babel__traverse@7.20.6': 539 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 540 | 541 | '@types/estree@1.0.6': 542 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 543 | 544 | '@types/json-schema@7.0.15': 545 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 546 | 547 | '@types/node@22.10.2': 548 | resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} 549 | 550 | '@types/prismjs@1.26.5': 551 | resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} 552 | 553 | '@types/prop-types@15.7.14': 554 | resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} 555 | 556 | '@types/react-dom@18.3.5': 557 | resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} 558 | peerDependencies: 559 | '@types/react': ^18.0.0 560 | 561 | '@types/react@18.3.18': 562 | resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} 563 | 564 | '@typescript-eslint/eslint-plugin@8.18.2': 565 | resolution: {integrity: sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==} 566 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 567 | peerDependencies: 568 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 569 | eslint: ^8.57.0 || ^9.0.0 570 | typescript: '>=4.8.4 <5.8.0' 571 | 572 | '@typescript-eslint/parser@8.18.2': 573 | resolution: {integrity: sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==} 574 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 575 | peerDependencies: 576 | eslint: ^8.57.0 || ^9.0.0 577 | typescript: '>=4.8.4 <5.8.0' 578 | 579 | '@typescript-eslint/scope-manager@8.18.2': 580 | resolution: {integrity: sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==} 581 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 582 | 583 | '@typescript-eslint/type-utils@8.18.2': 584 | resolution: {integrity: sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==} 585 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 586 | peerDependencies: 587 | eslint: ^8.57.0 || ^9.0.0 588 | typescript: '>=4.8.4 <5.8.0' 589 | 590 | '@typescript-eslint/types@8.18.2': 591 | resolution: {integrity: sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==} 592 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 593 | 594 | '@typescript-eslint/typescript-estree@8.18.2': 595 | resolution: {integrity: sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==} 596 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 597 | peerDependencies: 598 | typescript: '>=4.8.4 <5.8.0' 599 | 600 | '@typescript-eslint/utils@8.18.2': 601 | resolution: {integrity: sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==} 602 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 603 | peerDependencies: 604 | eslint: ^8.57.0 || ^9.0.0 605 | typescript: '>=4.8.4 <5.8.0' 606 | 607 | '@typescript-eslint/visitor-keys@8.18.2': 608 | resolution: {integrity: sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==} 609 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 610 | 611 | '@vitejs/plugin-react@4.3.4': 612 | resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} 613 | engines: {node: ^14.18.0 || >=16.0.0} 614 | peerDependencies: 615 | vite: ^4.2.0 || ^5.0.0 || ^6.0.0 616 | 617 | acorn-jsx@5.3.2: 618 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 619 | peerDependencies: 620 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 621 | 622 | acorn@8.14.0: 623 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 624 | engines: {node: '>=0.4.0'} 625 | hasBin: true 626 | 627 | ajv@6.12.6: 628 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 629 | 630 | ansi-regex@5.0.1: 631 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 632 | engines: {node: '>=8'} 633 | 634 | ansi-regex@6.1.0: 635 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 636 | engines: {node: '>=12'} 637 | 638 | ansi-styles@4.3.0: 639 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 640 | engines: {node: '>=8'} 641 | 642 | ansi-styles@6.2.1: 643 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 644 | engines: {node: '>=12'} 645 | 646 | any-promise@1.3.0: 647 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 648 | 649 | anymatch@3.1.3: 650 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 651 | engines: {node: '>= 8'} 652 | 653 | arg@5.0.2: 654 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 655 | 656 | argparse@2.0.1: 657 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 658 | 659 | autoprefixer@10.4.20: 660 | resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} 661 | engines: {node: ^10 || ^12 || >=14} 662 | hasBin: true 663 | peerDependencies: 664 | postcss: ^8.1.0 665 | 666 | balanced-match@1.0.2: 667 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 668 | 669 | binary-extensions@2.3.0: 670 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 671 | engines: {node: '>=8'} 672 | 673 | brace-expansion@1.1.11: 674 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 675 | 676 | brace-expansion@2.0.1: 677 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 678 | 679 | braces@3.0.3: 680 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 681 | engines: {node: '>=8'} 682 | 683 | browserslist@4.24.3: 684 | resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} 685 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 686 | hasBin: true 687 | 688 | callsites@3.1.0: 689 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 690 | engines: {node: '>=6'} 691 | 692 | camelcase-css@2.0.1: 693 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 694 | engines: {node: '>= 6'} 695 | 696 | caniuse-lite@1.0.30001690: 697 | resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} 698 | 699 | chalk@4.1.2: 700 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 701 | engines: {node: '>=10'} 702 | 703 | chokidar@3.6.0: 704 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 705 | engines: {node: '>= 8.10.0'} 706 | 707 | class-variance-authority@0.7.1: 708 | resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} 709 | 710 | clsx@2.1.1: 711 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 712 | engines: {node: '>=6'} 713 | 714 | color-convert@2.0.1: 715 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 716 | engines: {node: '>=7.0.0'} 717 | 718 | color-name@1.1.4: 719 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 720 | 721 | commander@4.1.1: 722 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 723 | engines: {node: '>= 6'} 724 | 725 | concat-map@0.0.1: 726 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 727 | 728 | convert-source-map@2.0.0: 729 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 730 | 731 | cross-spawn@7.0.6: 732 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 733 | engines: {node: '>= 8'} 734 | 735 | cssesc@3.0.0: 736 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 737 | engines: {node: '>=4'} 738 | hasBin: true 739 | 740 | csstype@3.1.3: 741 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 742 | 743 | debounce@1.2.1: 744 | resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} 745 | 746 | debug@4.4.0: 747 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 748 | engines: {node: '>=6.0'} 749 | peerDependencies: 750 | supports-color: '*' 751 | peerDependenciesMeta: 752 | supports-color: 753 | optional: true 754 | 755 | deep-is@0.1.4: 756 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 757 | 758 | didyoumean@1.2.2: 759 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 760 | 761 | dlv@1.1.3: 762 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 763 | 764 | eastasianwidth@0.2.0: 765 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 766 | 767 | electron-to-chromium@1.5.76: 768 | resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} 769 | 770 | emoji-regex@8.0.0: 771 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 772 | 773 | emoji-regex@9.2.2: 774 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 775 | 776 | esbuild@0.24.0: 777 | resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} 778 | engines: {node: '>=18'} 779 | hasBin: true 780 | 781 | escalade@3.2.0: 782 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 783 | engines: {node: '>=6'} 784 | 785 | escape-string-regexp@4.0.0: 786 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 787 | engines: {node: '>=10'} 788 | 789 | eslint-plugin-react-hooks@5.1.0: 790 | resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} 791 | engines: {node: '>=10'} 792 | peerDependencies: 793 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 794 | 795 | eslint-plugin-react-refresh@0.4.16: 796 | resolution: {integrity: sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==} 797 | peerDependencies: 798 | eslint: '>=8.40' 799 | 800 | eslint-scope@8.2.0: 801 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 802 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 803 | 804 | eslint-visitor-keys@3.4.3: 805 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 806 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 807 | 808 | eslint-visitor-keys@4.2.0: 809 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 810 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 811 | 812 | eslint@9.17.0: 813 | resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} 814 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 815 | hasBin: true 816 | peerDependencies: 817 | jiti: '*' 818 | peerDependenciesMeta: 819 | jiti: 820 | optional: true 821 | 822 | espree@10.3.0: 823 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 824 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 825 | 826 | esquery@1.6.0: 827 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 828 | engines: {node: '>=0.10'} 829 | 830 | esrecurse@4.3.0: 831 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 832 | engines: {node: '>=4.0'} 833 | 834 | estraverse@5.3.0: 835 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 836 | engines: {node: '>=4.0'} 837 | 838 | esutils@2.0.3: 839 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 840 | engines: {node: '>=0.10.0'} 841 | 842 | fast-deep-equal@3.1.3: 843 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 844 | 845 | fast-glob@3.3.2: 846 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 847 | engines: {node: '>=8.6.0'} 848 | 849 | fast-json-stable-stringify@2.1.0: 850 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 851 | 852 | fast-levenshtein@2.0.6: 853 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 854 | 855 | fastq@1.18.0: 856 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} 857 | 858 | file-entry-cache@8.0.0: 859 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 860 | engines: {node: '>=16.0.0'} 861 | 862 | fill-range@7.1.1: 863 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 864 | engines: {node: '>=8'} 865 | 866 | find-up@5.0.0: 867 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 868 | engines: {node: '>=10'} 869 | 870 | flat-cache@4.0.1: 871 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 872 | engines: {node: '>=16'} 873 | 874 | flatted@3.3.2: 875 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 876 | 877 | foreground-child@3.3.0: 878 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 879 | engines: {node: '>=14'} 880 | 881 | fraction.js@4.3.7: 882 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 883 | 884 | framer-motion@11.15.0: 885 | resolution: {integrity: sha512-MLk8IvZntxOMg7lDBLw2qgTHHv664bYoYmnFTmE0Gm/FW67aOJk0WM3ctMcG+Xhcv+vh5uyyXwxvxhSeJzSe+w==} 886 | peerDependencies: 887 | '@emotion/is-prop-valid': '*' 888 | react: ^18.0.0 || ^19.0.0 889 | react-dom: ^18.0.0 || ^19.0.0 890 | peerDependenciesMeta: 891 | '@emotion/is-prop-valid': 892 | optional: true 893 | react: 894 | optional: true 895 | react-dom: 896 | optional: true 897 | 898 | fsevents@2.3.3: 899 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 900 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 901 | os: [darwin] 902 | 903 | function-bind@1.1.2: 904 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 905 | 906 | gensync@1.0.0-beta.2: 907 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 908 | engines: {node: '>=6.9.0'} 909 | 910 | glob-parent@5.1.2: 911 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 912 | engines: {node: '>= 6'} 913 | 914 | glob-parent@6.0.2: 915 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 916 | engines: {node: '>=10.13.0'} 917 | 918 | glob@10.4.5: 919 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 920 | hasBin: true 921 | 922 | globals@11.12.0: 923 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 924 | engines: {node: '>=4'} 925 | 926 | globals@14.0.0: 927 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 928 | engines: {node: '>=18'} 929 | 930 | globals@15.14.0: 931 | resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} 932 | engines: {node: '>=18'} 933 | 934 | graphemer@1.4.0: 935 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 936 | 937 | has-flag@4.0.0: 938 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 939 | engines: {node: '>=8'} 940 | 941 | hasown@2.0.2: 942 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 943 | engines: {node: '>= 0.4'} 944 | 945 | ignore@5.3.2: 946 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 947 | engines: {node: '>= 4'} 948 | 949 | import-fresh@3.3.0: 950 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 951 | engines: {node: '>=6'} 952 | 953 | imurmurhash@0.1.4: 954 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 955 | engines: {node: '>=0.8.19'} 956 | 957 | is-binary-path@2.1.0: 958 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 959 | engines: {node: '>=8'} 960 | 961 | is-core-module@2.16.1: 962 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 963 | engines: {node: '>= 0.4'} 964 | 965 | is-extglob@2.1.1: 966 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 967 | engines: {node: '>=0.10.0'} 968 | 969 | is-fullwidth-code-point@3.0.0: 970 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 971 | engines: {node: '>=8'} 972 | 973 | is-glob@4.0.3: 974 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 975 | engines: {node: '>=0.10.0'} 976 | 977 | is-number@7.0.0: 978 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 979 | engines: {node: '>=0.12.0'} 980 | 981 | isexe@2.0.0: 982 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 983 | 984 | jackspeak@3.4.3: 985 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 986 | 987 | jiti@1.21.7: 988 | resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} 989 | hasBin: true 990 | 991 | js-tokens@4.0.0: 992 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 993 | 994 | js-yaml@4.1.0: 995 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 996 | hasBin: true 997 | 998 | jsesc@3.1.0: 999 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1000 | engines: {node: '>=6'} 1001 | hasBin: true 1002 | 1003 | json-buffer@3.0.1: 1004 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1005 | 1006 | json-schema-traverse@0.4.1: 1007 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1008 | 1009 | json-stable-stringify-without-jsonify@1.0.1: 1010 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1011 | 1012 | json5@2.2.3: 1013 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1014 | engines: {node: '>=6'} 1015 | hasBin: true 1016 | 1017 | keyv@4.5.4: 1018 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1019 | 1020 | levn@0.4.1: 1021 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1022 | engines: {node: '>= 0.8.0'} 1023 | 1024 | lilconfig@3.1.3: 1025 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1026 | engines: {node: '>=14'} 1027 | 1028 | lines-and-columns@1.2.4: 1029 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1030 | 1031 | locate-path@6.0.0: 1032 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1033 | engines: {node: '>=10'} 1034 | 1035 | lodash.merge@4.6.2: 1036 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1037 | 1038 | loose-envify@1.4.0: 1039 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1040 | hasBin: true 1041 | 1042 | lru-cache@10.4.3: 1043 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1044 | 1045 | lru-cache@5.1.1: 1046 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1047 | 1048 | lucide-react@0.469.0: 1049 | resolution: {integrity: sha512-28vvUnnKQ/dBwiCQtwJw7QauYnE7yd2Cyp4tTTJpvglX4EMpbflcdBgrgToX2j71B3YvugK/NH3BGUk+E/p/Fw==} 1050 | peerDependencies: 1051 | react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 1052 | 1053 | merge2@1.4.1: 1054 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1055 | engines: {node: '>= 8'} 1056 | 1057 | micromatch@4.0.8: 1058 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1059 | engines: {node: '>=8.6'} 1060 | 1061 | minimatch@3.1.2: 1062 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1063 | 1064 | minimatch@9.0.5: 1065 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1066 | engines: {node: '>=16 || 14 >=14.17'} 1067 | 1068 | minipass@7.1.2: 1069 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1070 | engines: {node: '>=16 || 14 >=14.17'} 1071 | 1072 | motion-dom@11.14.3: 1073 | resolution: {integrity: sha512-lW+D2wBy5vxLJi6aCP0xyxTxlTfiu+b+zcpVbGVFUxotwThqhdpPRSmX8xztAgtZMPMeU0WGVn/k1w4I+TbPqA==} 1074 | 1075 | motion-utils@11.14.3: 1076 | resolution: {integrity: sha512-Xg+8xnqIJTpr0L/cidfTTBFkvRw26ZtGGuIhA94J9PQ2p4mEa06Xx7QVYZH0BP+EpMSaDlu+q0I0mmvwADPsaQ==} 1077 | 1078 | motion@11.15.0: 1079 | resolution: {integrity: sha512-iZ7dwADQJWGsqsSkBhNHdI2LyYWU+hA1Nhy357wCLZq1yHxGImgt3l7Yv0HT/WOskcYDq9nxdedyl4zUv7UFFw==} 1080 | peerDependencies: 1081 | '@emotion/is-prop-valid': '*' 1082 | react: ^18.0.0 || ^19.0.0 1083 | react-dom: ^18.0.0 || ^19.0.0 1084 | peerDependenciesMeta: 1085 | '@emotion/is-prop-valid': 1086 | optional: true 1087 | react: 1088 | optional: true 1089 | react-dom: 1090 | optional: true 1091 | 1092 | ms@2.1.3: 1093 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1094 | 1095 | mz@2.7.0: 1096 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1097 | 1098 | nanoid@3.3.8: 1099 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 1100 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1101 | hasBin: true 1102 | 1103 | natural-compare@1.4.0: 1104 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1105 | 1106 | node-releases@2.0.19: 1107 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 1108 | 1109 | normalize-path@3.0.0: 1110 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1111 | engines: {node: '>=0.10.0'} 1112 | 1113 | normalize-range@0.1.2: 1114 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 1115 | engines: {node: '>=0.10.0'} 1116 | 1117 | object-assign@4.1.1: 1118 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1119 | engines: {node: '>=0.10.0'} 1120 | 1121 | object-hash@3.0.0: 1122 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1123 | engines: {node: '>= 6'} 1124 | 1125 | optionator@0.9.4: 1126 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1127 | engines: {node: '>= 0.8.0'} 1128 | 1129 | p-limit@3.1.0: 1130 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1131 | engines: {node: '>=10'} 1132 | 1133 | p-locate@5.0.0: 1134 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1135 | engines: {node: '>=10'} 1136 | 1137 | package-json-from-dist@1.0.1: 1138 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1139 | 1140 | parent-module@1.0.1: 1141 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1142 | engines: {node: '>=6'} 1143 | 1144 | path-exists@4.0.0: 1145 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1146 | engines: {node: '>=8'} 1147 | 1148 | path-key@3.1.1: 1149 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1150 | engines: {node: '>=8'} 1151 | 1152 | path-parse@1.0.7: 1153 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1154 | 1155 | path-scurry@1.11.1: 1156 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1157 | engines: {node: '>=16 || 14 >=14.18'} 1158 | 1159 | picocolors@1.1.1: 1160 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1161 | 1162 | picomatch@2.3.1: 1163 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1164 | engines: {node: '>=8.6'} 1165 | 1166 | pify@2.3.0: 1167 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1168 | engines: {node: '>=0.10.0'} 1169 | 1170 | pirates@4.0.6: 1171 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1172 | engines: {node: '>= 6'} 1173 | 1174 | postcss-import@15.1.0: 1175 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1176 | engines: {node: '>=14.0.0'} 1177 | peerDependencies: 1178 | postcss: ^8.0.0 1179 | 1180 | postcss-js@4.0.1: 1181 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1182 | engines: {node: ^12 || ^14 || >= 16} 1183 | peerDependencies: 1184 | postcss: ^8.4.21 1185 | 1186 | postcss-load-config@4.0.2: 1187 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 1188 | engines: {node: '>= 14'} 1189 | peerDependencies: 1190 | postcss: '>=8.0.9' 1191 | ts-node: '>=9.0.0' 1192 | peerDependenciesMeta: 1193 | postcss: 1194 | optional: true 1195 | ts-node: 1196 | optional: true 1197 | 1198 | postcss-nested@6.2.0: 1199 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 1200 | engines: {node: '>=12.0'} 1201 | peerDependencies: 1202 | postcss: ^8.2.14 1203 | 1204 | postcss-selector-parser@6.1.2: 1205 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 1206 | engines: {node: '>=4'} 1207 | 1208 | postcss-value-parser@4.2.0: 1209 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1210 | 1211 | postcss@8.4.49: 1212 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 1213 | engines: {node: ^10 || ^12 || >=14} 1214 | 1215 | prelude-ls@1.2.1: 1216 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1217 | engines: {node: '>= 0.8.0'} 1218 | 1219 | prism-react-renderer@2.4.1: 1220 | resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==} 1221 | peerDependencies: 1222 | react: '>=16.0.0' 1223 | 1224 | punycode@2.3.1: 1225 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1226 | engines: {node: '>=6'} 1227 | 1228 | queue-microtask@1.2.3: 1229 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1230 | 1231 | react-dom@18.3.1: 1232 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1233 | peerDependencies: 1234 | react: ^18.3.1 1235 | 1236 | react-refresh@0.14.2: 1237 | resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} 1238 | engines: {node: '>=0.10.0'} 1239 | 1240 | react-use-measure@2.1.1: 1241 | resolution: {integrity: sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==} 1242 | peerDependencies: 1243 | react: '>=16.13' 1244 | react-dom: '>=16.13' 1245 | 1246 | react@18.3.1: 1247 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1248 | engines: {node: '>=0.10.0'} 1249 | 1250 | read-cache@1.0.0: 1251 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1252 | 1253 | readdirp@3.6.0: 1254 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1255 | engines: {node: '>=8.10.0'} 1256 | 1257 | resolve-from@4.0.0: 1258 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1259 | engines: {node: '>=4'} 1260 | 1261 | resolve@1.22.10: 1262 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1263 | engines: {node: '>= 0.4'} 1264 | hasBin: true 1265 | 1266 | reusify@1.0.4: 1267 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1268 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1269 | 1270 | rollup@4.29.1: 1271 | resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} 1272 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1273 | hasBin: true 1274 | 1275 | run-parallel@1.2.0: 1276 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1277 | 1278 | scheduler@0.23.2: 1279 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1280 | 1281 | semver@6.3.1: 1282 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1283 | hasBin: true 1284 | 1285 | semver@7.6.3: 1286 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1287 | engines: {node: '>=10'} 1288 | hasBin: true 1289 | 1290 | shebang-command@2.0.0: 1291 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1292 | engines: {node: '>=8'} 1293 | 1294 | shebang-regex@3.0.0: 1295 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1296 | engines: {node: '>=8'} 1297 | 1298 | signal-exit@4.1.0: 1299 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1300 | engines: {node: '>=14'} 1301 | 1302 | source-map-js@1.2.1: 1303 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1304 | engines: {node: '>=0.10.0'} 1305 | 1306 | string-width@4.2.3: 1307 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1308 | engines: {node: '>=8'} 1309 | 1310 | string-width@5.1.2: 1311 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1312 | engines: {node: '>=12'} 1313 | 1314 | strip-ansi@6.0.1: 1315 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1316 | engines: {node: '>=8'} 1317 | 1318 | strip-ansi@7.1.0: 1319 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1320 | engines: {node: '>=12'} 1321 | 1322 | strip-json-comments@3.1.1: 1323 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1324 | engines: {node: '>=8'} 1325 | 1326 | sucrase@3.35.0: 1327 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1328 | engines: {node: '>=16 || 14 >=14.17'} 1329 | hasBin: true 1330 | 1331 | supports-color@7.2.0: 1332 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1333 | engines: {node: '>=8'} 1334 | 1335 | supports-preserve-symlinks-flag@1.0.0: 1336 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1337 | engines: {node: '>= 0.4'} 1338 | 1339 | tailwind-merge@2.6.0: 1340 | resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} 1341 | 1342 | tailwindcss-animate@1.0.7: 1343 | resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} 1344 | peerDependencies: 1345 | tailwindcss: '>=3.0.0 || insiders' 1346 | 1347 | tailwindcss@3.4.17: 1348 | resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} 1349 | engines: {node: '>=14.0.0'} 1350 | hasBin: true 1351 | 1352 | thenify-all@1.6.0: 1353 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1354 | engines: {node: '>=0.8'} 1355 | 1356 | thenify@3.3.1: 1357 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1358 | 1359 | to-regex-range@5.0.1: 1360 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1361 | engines: {node: '>=8.0'} 1362 | 1363 | ts-api-utils@1.4.3: 1364 | resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} 1365 | engines: {node: '>=16'} 1366 | peerDependencies: 1367 | typescript: '>=4.2.0' 1368 | 1369 | ts-interface-checker@0.1.13: 1370 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1371 | 1372 | tslib@2.8.1: 1373 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1374 | 1375 | type-check@0.4.0: 1376 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1377 | engines: {node: '>= 0.8.0'} 1378 | 1379 | typescript-eslint@8.18.2: 1380 | resolution: {integrity: sha512-KuXezG6jHkvC3MvizeXgupZzaG5wjhU3yE8E7e6viOvAvD9xAWYp8/vy0WULTGe9DYDWcQu7aW03YIV3mSitrQ==} 1381 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1382 | peerDependencies: 1383 | eslint: ^8.57.0 || ^9.0.0 1384 | typescript: '>=4.8.4 <5.8.0' 1385 | 1386 | typescript@5.6.3: 1387 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 1388 | engines: {node: '>=14.17'} 1389 | hasBin: true 1390 | 1391 | undici-types@6.20.0: 1392 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1393 | 1394 | update-browserslist-db@1.1.1: 1395 | resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} 1396 | hasBin: true 1397 | peerDependencies: 1398 | browserslist: '>= 4.21.0' 1399 | 1400 | uri-js@4.4.1: 1401 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1402 | 1403 | util-deprecate@1.0.2: 1404 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1405 | 1406 | vite@6.0.5: 1407 | resolution: {integrity: sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==} 1408 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1409 | hasBin: true 1410 | peerDependencies: 1411 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1412 | jiti: '>=1.21.0' 1413 | less: '*' 1414 | lightningcss: ^1.21.0 1415 | sass: '*' 1416 | sass-embedded: '*' 1417 | stylus: '*' 1418 | sugarss: '*' 1419 | terser: ^5.16.0 1420 | tsx: ^4.8.1 1421 | yaml: ^2.4.2 1422 | peerDependenciesMeta: 1423 | '@types/node': 1424 | optional: true 1425 | jiti: 1426 | optional: true 1427 | less: 1428 | optional: true 1429 | lightningcss: 1430 | optional: true 1431 | sass: 1432 | optional: true 1433 | sass-embedded: 1434 | optional: true 1435 | stylus: 1436 | optional: true 1437 | sugarss: 1438 | optional: true 1439 | terser: 1440 | optional: true 1441 | tsx: 1442 | optional: true 1443 | yaml: 1444 | optional: true 1445 | 1446 | which@2.0.2: 1447 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1448 | engines: {node: '>= 8'} 1449 | hasBin: true 1450 | 1451 | word-wrap@1.2.5: 1452 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1453 | engines: {node: '>=0.10.0'} 1454 | 1455 | wrap-ansi@7.0.0: 1456 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1457 | engines: {node: '>=10'} 1458 | 1459 | wrap-ansi@8.1.0: 1460 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1461 | engines: {node: '>=12'} 1462 | 1463 | yallist@3.1.1: 1464 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1465 | 1466 | yaml@2.6.1: 1467 | resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} 1468 | engines: {node: '>= 14'} 1469 | hasBin: true 1470 | 1471 | yocto-queue@0.1.0: 1472 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1473 | engines: {node: '>=10'} 1474 | 1475 | snapshots: 1476 | 1477 | '@alloc/quick-lru@5.2.0': {} 1478 | 1479 | '@ampproject/remapping@2.3.0': 1480 | dependencies: 1481 | '@jridgewell/gen-mapping': 0.3.8 1482 | '@jridgewell/trace-mapping': 0.3.25 1483 | 1484 | '@babel/code-frame@7.26.2': 1485 | dependencies: 1486 | '@babel/helper-validator-identifier': 7.25.9 1487 | js-tokens: 4.0.0 1488 | picocolors: 1.1.1 1489 | 1490 | '@babel/compat-data@7.26.3': {} 1491 | 1492 | '@babel/core@7.26.0': 1493 | dependencies: 1494 | '@ampproject/remapping': 2.3.0 1495 | '@babel/code-frame': 7.26.2 1496 | '@babel/generator': 7.26.3 1497 | '@babel/helper-compilation-targets': 7.25.9 1498 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) 1499 | '@babel/helpers': 7.26.0 1500 | '@babel/parser': 7.26.3 1501 | '@babel/template': 7.25.9 1502 | '@babel/traverse': 7.26.4 1503 | '@babel/types': 7.26.3 1504 | convert-source-map: 2.0.0 1505 | debug: 4.4.0 1506 | gensync: 1.0.0-beta.2 1507 | json5: 2.2.3 1508 | semver: 6.3.1 1509 | transitivePeerDependencies: 1510 | - supports-color 1511 | 1512 | '@babel/generator@7.26.3': 1513 | dependencies: 1514 | '@babel/parser': 7.26.3 1515 | '@babel/types': 7.26.3 1516 | '@jridgewell/gen-mapping': 0.3.8 1517 | '@jridgewell/trace-mapping': 0.3.25 1518 | jsesc: 3.1.0 1519 | 1520 | '@babel/helper-compilation-targets@7.25.9': 1521 | dependencies: 1522 | '@babel/compat-data': 7.26.3 1523 | '@babel/helper-validator-option': 7.25.9 1524 | browserslist: 4.24.3 1525 | lru-cache: 5.1.1 1526 | semver: 6.3.1 1527 | 1528 | '@babel/helper-module-imports@7.25.9': 1529 | dependencies: 1530 | '@babel/traverse': 7.26.4 1531 | '@babel/types': 7.26.3 1532 | transitivePeerDependencies: 1533 | - supports-color 1534 | 1535 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': 1536 | dependencies: 1537 | '@babel/core': 7.26.0 1538 | '@babel/helper-module-imports': 7.25.9 1539 | '@babel/helper-validator-identifier': 7.25.9 1540 | '@babel/traverse': 7.26.4 1541 | transitivePeerDependencies: 1542 | - supports-color 1543 | 1544 | '@babel/helper-plugin-utils@7.25.9': {} 1545 | 1546 | '@babel/helper-string-parser@7.25.9': {} 1547 | 1548 | '@babel/helper-validator-identifier@7.25.9': {} 1549 | 1550 | '@babel/helper-validator-option@7.25.9': {} 1551 | 1552 | '@babel/helpers@7.26.0': 1553 | dependencies: 1554 | '@babel/template': 7.25.9 1555 | '@babel/types': 7.26.3 1556 | 1557 | '@babel/parser@7.26.3': 1558 | dependencies: 1559 | '@babel/types': 7.26.3 1560 | 1561 | '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': 1562 | dependencies: 1563 | '@babel/core': 7.26.0 1564 | '@babel/helper-plugin-utils': 7.25.9 1565 | 1566 | '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': 1567 | dependencies: 1568 | '@babel/core': 7.26.0 1569 | '@babel/helper-plugin-utils': 7.25.9 1570 | 1571 | '@babel/template@7.25.9': 1572 | dependencies: 1573 | '@babel/code-frame': 7.26.2 1574 | '@babel/parser': 7.26.3 1575 | '@babel/types': 7.26.3 1576 | 1577 | '@babel/traverse@7.26.4': 1578 | dependencies: 1579 | '@babel/code-frame': 7.26.2 1580 | '@babel/generator': 7.26.3 1581 | '@babel/parser': 7.26.3 1582 | '@babel/template': 7.25.9 1583 | '@babel/types': 7.26.3 1584 | debug: 4.4.0 1585 | globals: 11.12.0 1586 | transitivePeerDependencies: 1587 | - supports-color 1588 | 1589 | '@babel/types@7.26.3': 1590 | dependencies: 1591 | '@babel/helper-string-parser': 7.25.9 1592 | '@babel/helper-validator-identifier': 7.25.9 1593 | 1594 | '@esbuild/aix-ppc64@0.24.0': 1595 | optional: true 1596 | 1597 | '@esbuild/android-arm64@0.24.0': 1598 | optional: true 1599 | 1600 | '@esbuild/android-arm@0.24.0': 1601 | optional: true 1602 | 1603 | '@esbuild/android-x64@0.24.0': 1604 | optional: true 1605 | 1606 | '@esbuild/darwin-arm64@0.24.0': 1607 | optional: true 1608 | 1609 | '@esbuild/darwin-x64@0.24.0': 1610 | optional: true 1611 | 1612 | '@esbuild/freebsd-arm64@0.24.0': 1613 | optional: true 1614 | 1615 | '@esbuild/freebsd-x64@0.24.0': 1616 | optional: true 1617 | 1618 | '@esbuild/linux-arm64@0.24.0': 1619 | optional: true 1620 | 1621 | '@esbuild/linux-arm@0.24.0': 1622 | optional: true 1623 | 1624 | '@esbuild/linux-ia32@0.24.0': 1625 | optional: true 1626 | 1627 | '@esbuild/linux-loong64@0.24.0': 1628 | optional: true 1629 | 1630 | '@esbuild/linux-mips64el@0.24.0': 1631 | optional: true 1632 | 1633 | '@esbuild/linux-ppc64@0.24.0': 1634 | optional: true 1635 | 1636 | '@esbuild/linux-riscv64@0.24.0': 1637 | optional: true 1638 | 1639 | '@esbuild/linux-s390x@0.24.0': 1640 | optional: true 1641 | 1642 | '@esbuild/linux-x64@0.24.0': 1643 | optional: true 1644 | 1645 | '@esbuild/netbsd-x64@0.24.0': 1646 | optional: true 1647 | 1648 | '@esbuild/openbsd-arm64@0.24.0': 1649 | optional: true 1650 | 1651 | '@esbuild/openbsd-x64@0.24.0': 1652 | optional: true 1653 | 1654 | '@esbuild/sunos-x64@0.24.0': 1655 | optional: true 1656 | 1657 | '@esbuild/win32-arm64@0.24.0': 1658 | optional: true 1659 | 1660 | '@esbuild/win32-ia32@0.24.0': 1661 | optional: true 1662 | 1663 | '@esbuild/win32-x64@0.24.0': 1664 | optional: true 1665 | 1666 | '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@1.21.7))': 1667 | dependencies: 1668 | eslint: 9.17.0(jiti@1.21.7) 1669 | eslint-visitor-keys: 3.4.3 1670 | 1671 | '@eslint-community/regexpp@4.12.1': {} 1672 | 1673 | '@eslint/config-array@0.19.1': 1674 | dependencies: 1675 | '@eslint/object-schema': 2.1.5 1676 | debug: 4.4.0 1677 | minimatch: 3.1.2 1678 | transitivePeerDependencies: 1679 | - supports-color 1680 | 1681 | '@eslint/core@0.9.1': 1682 | dependencies: 1683 | '@types/json-schema': 7.0.15 1684 | 1685 | '@eslint/eslintrc@3.2.0': 1686 | dependencies: 1687 | ajv: 6.12.6 1688 | debug: 4.4.0 1689 | espree: 10.3.0 1690 | globals: 14.0.0 1691 | ignore: 5.3.2 1692 | import-fresh: 3.3.0 1693 | js-yaml: 4.1.0 1694 | minimatch: 3.1.2 1695 | strip-json-comments: 3.1.1 1696 | transitivePeerDependencies: 1697 | - supports-color 1698 | 1699 | '@eslint/js@9.17.0': {} 1700 | 1701 | '@eslint/object-schema@2.1.5': {} 1702 | 1703 | '@eslint/plugin-kit@0.2.4': 1704 | dependencies: 1705 | levn: 0.4.1 1706 | 1707 | '@humanfs/core@0.19.1': {} 1708 | 1709 | '@humanfs/node@0.16.6': 1710 | dependencies: 1711 | '@humanfs/core': 0.19.1 1712 | '@humanwhocodes/retry': 0.3.1 1713 | 1714 | '@humanwhocodes/module-importer@1.0.1': {} 1715 | 1716 | '@humanwhocodes/retry@0.3.1': {} 1717 | 1718 | '@humanwhocodes/retry@0.4.1': {} 1719 | 1720 | '@isaacs/cliui@8.0.2': 1721 | dependencies: 1722 | string-width: 5.1.2 1723 | string-width-cjs: string-width@4.2.3 1724 | strip-ansi: 7.1.0 1725 | strip-ansi-cjs: strip-ansi@6.0.1 1726 | wrap-ansi: 8.1.0 1727 | wrap-ansi-cjs: wrap-ansi@7.0.0 1728 | 1729 | '@jridgewell/gen-mapping@0.3.8': 1730 | dependencies: 1731 | '@jridgewell/set-array': 1.2.1 1732 | '@jridgewell/sourcemap-codec': 1.5.0 1733 | '@jridgewell/trace-mapping': 0.3.25 1734 | 1735 | '@jridgewell/resolve-uri@3.1.2': {} 1736 | 1737 | '@jridgewell/set-array@1.2.1': {} 1738 | 1739 | '@jridgewell/sourcemap-codec@1.5.0': {} 1740 | 1741 | '@jridgewell/trace-mapping@0.3.25': 1742 | dependencies: 1743 | '@jridgewell/resolve-uri': 3.1.2 1744 | '@jridgewell/sourcemap-codec': 1.5.0 1745 | 1746 | '@nodelib/fs.scandir@2.1.5': 1747 | dependencies: 1748 | '@nodelib/fs.stat': 2.0.5 1749 | run-parallel: 1.2.0 1750 | 1751 | '@nodelib/fs.stat@2.0.5': {} 1752 | 1753 | '@nodelib/fs.walk@1.2.8': 1754 | dependencies: 1755 | '@nodelib/fs.scandir': 2.1.5 1756 | fastq: 1.18.0 1757 | 1758 | '@pkgjs/parseargs@0.11.0': 1759 | optional: true 1760 | 1761 | '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@18.3.1)': 1762 | dependencies: 1763 | react: 18.3.1 1764 | optionalDependencies: 1765 | '@types/react': 18.3.18 1766 | 1767 | '@radix-ui/react-slot@1.1.1(@types/react@18.3.18)(react@18.3.1)': 1768 | dependencies: 1769 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) 1770 | react: 18.3.1 1771 | optionalDependencies: 1772 | '@types/react': 18.3.18 1773 | 1774 | '@rollup/rollup-android-arm-eabi@4.29.1': 1775 | optional: true 1776 | 1777 | '@rollup/rollup-android-arm64@4.29.1': 1778 | optional: true 1779 | 1780 | '@rollup/rollup-darwin-arm64@4.29.1': 1781 | optional: true 1782 | 1783 | '@rollup/rollup-darwin-x64@4.29.1': 1784 | optional: true 1785 | 1786 | '@rollup/rollup-freebsd-arm64@4.29.1': 1787 | optional: true 1788 | 1789 | '@rollup/rollup-freebsd-x64@4.29.1': 1790 | optional: true 1791 | 1792 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1': 1793 | optional: true 1794 | 1795 | '@rollup/rollup-linux-arm-musleabihf@4.29.1': 1796 | optional: true 1797 | 1798 | '@rollup/rollup-linux-arm64-gnu@4.29.1': 1799 | optional: true 1800 | 1801 | '@rollup/rollup-linux-arm64-musl@4.29.1': 1802 | optional: true 1803 | 1804 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1': 1805 | optional: true 1806 | 1807 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': 1808 | optional: true 1809 | 1810 | '@rollup/rollup-linux-riscv64-gnu@4.29.1': 1811 | optional: true 1812 | 1813 | '@rollup/rollup-linux-s390x-gnu@4.29.1': 1814 | optional: true 1815 | 1816 | '@rollup/rollup-linux-x64-gnu@4.29.1': 1817 | optional: true 1818 | 1819 | '@rollup/rollup-linux-x64-musl@4.29.1': 1820 | optional: true 1821 | 1822 | '@rollup/rollup-win32-arm64-msvc@4.29.1': 1823 | optional: true 1824 | 1825 | '@rollup/rollup-win32-ia32-msvc@4.29.1': 1826 | optional: true 1827 | 1828 | '@rollup/rollup-win32-x64-msvc@4.29.1': 1829 | optional: true 1830 | 1831 | '@types/babel__core@7.20.5': 1832 | dependencies: 1833 | '@babel/parser': 7.26.3 1834 | '@babel/types': 7.26.3 1835 | '@types/babel__generator': 7.6.8 1836 | '@types/babel__template': 7.4.4 1837 | '@types/babel__traverse': 7.20.6 1838 | 1839 | '@types/babel__generator@7.6.8': 1840 | dependencies: 1841 | '@babel/types': 7.26.3 1842 | 1843 | '@types/babel__template@7.4.4': 1844 | dependencies: 1845 | '@babel/parser': 7.26.3 1846 | '@babel/types': 7.26.3 1847 | 1848 | '@types/babel__traverse@7.20.6': 1849 | dependencies: 1850 | '@babel/types': 7.26.3 1851 | 1852 | '@types/estree@1.0.6': {} 1853 | 1854 | '@types/json-schema@7.0.15': {} 1855 | 1856 | '@types/node@22.10.2': 1857 | dependencies: 1858 | undici-types: 6.20.0 1859 | 1860 | '@types/prismjs@1.26.5': {} 1861 | 1862 | '@types/prop-types@15.7.14': {} 1863 | 1864 | '@types/react-dom@18.3.5(@types/react@18.3.18)': 1865 | dependencies: 1866 | '@types/react': 18.3.18 1867 | 1868 | '@types/react@18.3.18': 1869 | dependencies: 1870 | '@types/prop-types': 15.7.14 1871 | csstype: 3.1.3 1872 | 1873 | '@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3)': 1874 | dependencies: 1875 | '@eslint-community/regexpp': 4.12.1 1876 | '@typescript-eslint/parser': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 1877 | '@typescript-eslint/scope-manager': 8.18.2 1878 | '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 1879 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 1880 | '@typescript-eslint/visitor-keys': 8.18.2 1881 | eslint: 9.17.0(jiti@1.21.7) 1882 | graphemer: 1.4.0 1883 | ignore: 5.3.2 1884 | natural-compare: 1.4.0 1885 | ts-api-utils: 1.4.3(typescript@5.6.3) 1886 | typescript: 5.6.3 1887 | transitivePeerDependencies: 1888 | - supports-color 1889 | 1890 | '@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3)': 1891 | dependencies: 1892 | '@typescript-eslint/scope-manager': 8.18.2 1893 | '@typescript-eslint/types': 8.18.2 1894 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.3) 1895 | '@typescript-eslint/visitor-keys': 8.18.2 1896 | debug: 4.4.0 1897 | eslint: 9.17.0(jiti@1.21.7) 1898 | typescript: 5.6.3 1899 | transitivePeerDependencies: 1900 | - supports-color 1901 | 1902 | '@typescript-eslint/scope-manager@8.18.2': 1903 | dependencies: 1904 | '@typescript-eslint/types': 8.18.2 1905 | '@typescript-eslint/visitor-keys': 8.18.2 1906 | 1907 | '@typescript-eslint/type-utils@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3)': 1908 | dependencies: 1909 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.3) 1910 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 1911 | debug: 4.4.0 1912 | eslint: 9.17.0(jiti@1.21.7) 1913 | ts-api-utils: 1.4.3(typescript@5.6.3) 1914 | typescript: 5.6.3 1915 | transitivePeerDependencies: 1916 | - supports-color 1917 | 1918 | '@typescript-eslint/types@8.18.2': {} 1919 | 1920 | '@typescript-eslint/typescript-estree@8.18.2(typescript@5.6.3)': 1921 | dependencies: 1922 | '@typescript-eslint/types': 8.18.2 1923 | '@typescript-eslint/visitor-keys': 8.18.2 1924 | debug: 4.4.0 1925 | fast-glob: 3.3.2 1926 | is-glob: 4.0.3 1927 | minimatch: 9.0.5 1928 | semver: 7.6.3 1929 | ts-api-utils: 1.4.3(typescript@5.6.3) 1930 | typescript: 5.6.3 1931 | transitivePeerDependencies: 1932 | - supports-color 1933 | 1934 | '@typescript-eslint/utils@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3)': 1935 | dependencies: 1936 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@1.21.7)) 1937 | '@typescript-eslint/scope-manager': 8.18.2 1938 | '@typescript-eslint/types': 8.18.2 1939 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.3) 1940 | eslint: 9.17.0(jiti@1.21.7) 1941 | typescript: 5.6.3 1942 | transitivePeerDependencies: 1943 | - supports-color 1944 | 1945 | '@typescript-eslint/visitor-keys@8.18.2': 1946 | dependencies: 1947 | '@typescript-eslint/types': 8.18.2 1948 | eslint-visitor-keys: 4.2.0 1949 | 1950 | '@vitejs/plugin-react@4.3.4(vite@6.0.5(@types/node@22.10.2)(jiti@1.21.7)(yaml@2.6.1))': 1951 | dependencies: 1952 | '@babel/core': 7.26.0 1953 | '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) 1954 | '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) 1955 | '@types/babel__core': 7.20.5 1956 | react-refresh: 0.14.2 1957 | vite: 6.0.5(@types/node@22.10.2)(jiti@1.21.7)(yaml@2.6.1) 1958 | transitivePeerDependencies: 1959 | - supports-color 1960 | 1961 | acorn-jsx@5.3.2(acorn@8.14.0): 1962 | dependencies: 1963 | acorn: 8.14.0 1964 | 1965 | acorn@8.14.0: {} 1966 | 1967 | ajv@6.12.6: 1968 | dependencies: 1969 | fast-deep-equal: 3.1.3 1970 | fast-json-stable-stringify: 2.1.0 1971 | json-schema-traverse: 0.4.1 1972 | uri-js: 4.4.1 1973 | 1974 | ansi-regex@5.0.1: {} 1975 | 1976 | ansi-regex@6.1.0: {} 1977 | 1978 | ansi-styles@4.3.0: 1979 | dependencies: 1980 | color-convert: 2.0.1 1981 | 1982 | ansi-styles@6.2.1: {} 1983 | 1984 | any-promise@1.3.0: {} 1985 | 1986 | anymatch@3.1.3: 1987 | dependencies: 1988 | normalize-path: 3.0.0 1989 | picomatch: 2.3.1 1990 | 1991 | arg@5.0.2: {} 1992 | 1993 | argparse@2.0.1: {} 1994 | 1995 | autoprefixer@10.4.20(postcss@8.4.49): 1996 | dependencies: 1997 | browserslist: 4.24.3 1998 | caniuse-lite: 1.0.30001690 1999 | fraction.js: 4.3.7 2000 | normalize-range: 0.1.2 2001 | picocolors: 1.1.1 2002 | postcss: 8.4.49 2003 | postcss-value-parser: 4.2.0 2004 | 2005 | balanced-match@1.0.2: {} 2006 | 2007 | binary-extensions@2.3.0: {} 2008 | 2009 | brace-expansion@1.1.11: 2010 | dependencies: 2011 | balanced-match: 1.0.2 2012 | concat-map: 0.0.1 2013 | 2014 | brace-expansion@2.0.1: 2015 | dependencies: 2016 | balanced-match: 1.0.2 2017 | 2018 | braces@3.0.3: 2019 | dependencies: 2020 | fill-range: 7.1.1 2021 | 2022 | browserslist@4.24.3: 2023 | dependencies: 2024 | caniuse-lite: 1.0.30001690 2025 | electron-to-chromium: 1.5.76 2026 | node-releases: 2.0.19 2027 | update-browserslist-db: 1.1.1(browserslist@4.24.3) 2028 | 2029 | callsites@3.1.0: {} 2030 | 2031 | camelcase-css@2.0.1: {} 2032 | 2033 | caniuse-lite@1.0.30001690: {} 2034 | 2035 | chalk@4.1.2: 2036 | dependencies: 2037 | ansi-styles: 4.3.0 2038 | supports-color: 7.2.0 2039 | 2040 | chokidar@3.6.0: 2041 | dependencies: 2042 | anymatch: 3.1.3 2043 | braces: 3.0.3 2044 | glob-parent: 5.1.2 2045 | is-binary-path: 2.1.0 2046 | is-glob: 4.0.3 2047 | normalize-path: 3.0.0 2048 | readdirp: 3.6.0 2049 | optionalDependencies: 2050 | fsevents: 2.3.3 2051 | 2052 | class-variance-authority@0.7.1: 2053 | dependencies: 2054 | clsx: 2.1.1 2055 | 2056 | clsx@2.1.1: {} 2057 | 2058 | color-convert@2.0.1: 2059 | dependencies: 2060 | color-name: 1.1.4 2061 | 2062 | color-name@1.1.4: {} 2063 | 2064 | commander@4.1.1: {} 2065 | 2066 | concat-map@0.0.1: {} 2067 | 2068 | convert-source-map@2.0.0: {} 2069 | 2070 | cross-spawn@7.0.6: 2071 | dependencies: 2072 | path-key: 3.1.1 2073 | shebang-command: 2.0.0 2074 | which: 2.0.2 2075 | 2076 | cssesc@3.0.0: {} 2077 | 2078 | csstype@3.1.3: {} 2079 | 2080 | debounce@1.2.1: {} 2081 | 2082 | debug@4.4.0: 2083 | dependencies: 2084 | ms: 2.1.3 2085 | 2086 | deep-is@0.1.4: {} 2087 | 2088 | didyoumean@1.2.2: {} 2089 | 2090 | dlv@1.1.3: {} 2091 | 2092 | eastasianwidth@0.2.0: {} 2093 | 2094 | electron-to-chromium@1.5.76: {} 2095 | 2096 | emoji-regex@8.0.0: {} 2097 | 2098 | emoji-regex@9.2.2: {} 2099 | 2100 | esbuild@0.24.0: 2101 | optionalDependencies: 2102 | '@esbuild/aix-ppc64': 0.24.0 2103 | '@esbuild/android-arm': 0.24.0 2104 | '@esbuild/android-arm64': 0.24.0 2105 | '@esbuild/android-x64': 0.24.0 2106 | '@esbuild/darwin-arm64': 0.24.0 2107 | '@esbuild/darwin-x64': 0.24.0 2108 | '@esbuild/freebsd-arm64': 0.24.0 2109 | '@esbuild/freebsd-x64': 0.24.0 2110 | '@esbuild/linux-arm': 0.24.0 2111 | '@esbuild/linux-arm64': 0.24.0 2112 | '@esbuild/linux-ia32': 0.24.0 2113 | '@esbuild/linux-loong64': 0.24.0 2114 | '@esbuild/linux-mips64el': 0.24.0 2115 | '@esbuild/linux-ppc64': 0.24.0 2116 | '@esbuild/linux-riscv64': 0.24.0 2117 | '@esbuild/linux-s390x': 0.24.0 2118 | '@esbuild/linux-x64': 0.24.0 2119 | '@esbuild/netbsd-x64': 0.24.0 2120 | '@esbuild/openbsd-arm64': 0.24.0 2121 | '@esbuild/openbsd-x64': 0.24.0 2122 | '@esbuild/sunos-x64': 0.24.0 2123 | '@esbuild/win32-arm64': 0.24.0 2124 | '@esbuild/win32-ia32': 0.24.0 2125 | '@esbuild/win32-x64': 0.24.0 2126 | 2127 | escalade@3.2.0: {} 2128 | 2129 | escape-string-regexp@4.0.0: {} 2130 | 2131 | eslint-plugin-react-hooks@5.1.0(eslint@9.17.0(jiti@1.21.7)): 2132 | dependencies: 2133 | eslint: 9.17.0(jiti@1.21.7) 2134 | 2135 | eslint-plugin-react-refresh@0.4.16(eslint@9.17.0(jiti@1.21.7)): 2136 | dependencies: 2137 | eslint: 9.17.0(jiti@1.21.7) 2138 | 2139 | eslint-scope@8.2.0: 2140 | dependencies: 2141 | esrecurse: 4.3.0 2142 | estraverse: 5.3.0 2143 | 2144 | eslint-visitor-keys@3.4.3: {} 2145 | 2146 | eslint-visitor-keys@4.2.0: {} 2147 | 2148 | eslint@9.17.0(jiti@1.21.7): 2149 | dependencies: 2150 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@1.21.7)) 2151 | '@eslint-community/regexpp': 4.12.1 2152 | '@eslint/config-array': 0.19.1 2153 | '@eslint/core': 0.9.1 2154 | '@eslint/eslintrc': 3.2.0 2155 | '@eslint/js': 9.17.0 2156 | '@eslint/plugin-kit': 0.2.4 2157 | '@humanfs/node': 0.16.6 2158 | '@humanwhocodes/module-importer': 1.0.1 2159 | '@humanwhocodes/retry': 0.4.1 2160 | '@types/estree': 1.0.6 2161 | '@types/json-schema': 7.0.15 2162 | ajv: 6.12.6 2163 | chalk: 4.1.2 2164 | cross-spawn: 7.0.6 2165 | debug: 4.4.0 2166 | escape-string-regexp: 4.0.0 2167 | eslint-scope: 8.2.0 2168 | eslint-visitor-keys: 4.2.0 2169 | espree: 10.3.0 2170 | esquery: 1.6.0 2171 | esutils: 2.0.3 2172 | fast-deep-equal: 3.1.3 2173 | file-entry-cache: 8.0.0 2174 | find-up: 5.0.0 2175 | glob-parent: 6.0.2 2176 | ignore: 5.3.2 2177 | imurmurhash: 0.1.4 2178 | is-glob: 4.0.3 2179 | json-stable-stringify-without-jsonify: 1.0.1 2180 | lodash.merge: 4.6.2 2181 | minimatch: 3.1.2 2182 | natural-compare: 1.4.0 2183 | optionator: 0.9.4 2184 | optionalDependencies: 2185 | jiti: 1.21.7 2186 | transitivePeerDependencies: 2187 | - supports-color 2188 | 2189 | espree@10.3.0: 2190 | dependencies: 2191 | acorn: 8.14.0 2192 | acorn-jsx: 5.3.2(acorn@8.14.0) 2193 | eslint-visitor-keys: 4.2.0 2194 | 2195 | esquery@1.6.0: 2196 | dependencies: 2197 | estraverse: 5.3.0 2198 | 2199 | esrecurse@4.3.0: 2200 | dependencies: 2201 | estraverse: 5.3.0 2202 | 2203 | estraverse@5.3.0: {} 2204 | 2205 | esutils@2.0.3: {} 2206 | 2207 | fast-deep-equal@3.1.3: {} 2208 | 2209 | fast-glob@3.3.2: 2210 | dependencies: 2211 | '@nodelib/fs.stat': 2.0.5 2212 | '@nodelib/fs.walk': 1.2.8 2213 | glob-parent: 5.1.2 2214 | merge2: 1.4.1 2215 | micromatch: 4.0.8 2216 | 2217 | fast-json-stable-stringify@2.1.0: {} 2218 | 2219 | fast-levenshtein@2.0.6: {} 2220 | 2221 | fastq@1.18.0: 2222 | dependencies: 2223 | reusify: 1.0.4 2224 | 2225 | file-entry-cache@8.0.0: 2226 | dependencies: 2227 | flat-cache: 4.0.1 2228 | 2229 | fill-range@7.1.1: 2230 | dependencies: 2231 | to-regex-range: 5.0.1 2232 | 2233 | find-up@5.0.0: 2234 | dependencies: 2235 | locate-path: 6.0.0 2236 | path-exists: 4.0.0 2237 | 2238 | flat-cache@4.0.1: 2239 | dependencies: 2240 | flatted: 3.3.2 2241 | keyv: 4.5.4 2242 | 2243 | flatted@3.3.2: {} 2244 | 2245 | foreground-child@3.3.0: 2246 | dependencies: 2247 | cross-spawn: 7.0.6 2248 | signal-exit: 4.1.0 2249 | 2250 | fraction.js@4.3.7: {} 2251 | 2252 | framer-motion@11.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2253 | dependencies: 2254 | motion-dom: 11.14.3 2255 | motion-utils: 11.14.3 2256 | tslib: 2.8.1 2257 | optionalDependencies: 2258 | react: 18.3.1 2259 | react-dom: 18.3.1(react@18.3.1) 2260 | 2261 | fsevents@2.3.3: 2262 | optional: true 2263 | 2264 | function-bind@1.1.2: {} 2265 | 2266 | gensync@1.0.0-beta.2: {} 2267 | 2268 | glob-parent@5.1.2: 2269 | dependencies: 2270 | is-glob: 4.0.3 2271 | 2272 | glob-parent@6.0.2: 2273 | dependencies: 2274 | is-glob: 4.0.3 2275 | 2276 | glob@10.4.5: 2277 | dependencies: 2278 | foreground-child: 3.3.0 2279 | jackspeak: 3.4.3 2280 | minimatch: 9.0.5 2281 | minipass: 7.1.2 2282 | package-json-from-dist: 1.0.1 2283 | path-scurry: 1.11.1 2284 | 2285 | globals@11.12.0: {} 2286 | 2287 | globals@14.0.0: {} 2288 | 2289 | globals@15.14.0: {} 2290 | 2291 | graphemer@1.4.0: {} 2292 | 2293 | has-flag@4.0.0: {} 2294 | 2295 | hasown@2.0.2: 2296 | dependencies: 2297 | function-bind: 1.1.2 2298 | 2299 | ignore@5.3.2: {} 2300 | 2301 | import-fresh@3.3.0: 2302 | dependencies: 2303 | parent-module: 1.0.1 2304 | resolve-from: 4.0.0 2305 | 2306 | imurmurhash@0.1.4: {} 2307 | 2308 | is-binary-path@2.1.0: 2309 | dependencies: 2310 | binary-extensions: 2.3.0 2311 | 2312 | is-core-module@2.16.1: 2313 | dependencies: 2314 | hasown: 2.0.2 2315 | 2316 | is-extglob@2.1.1: {} 2317 | 2318 | is-fullwidth-code-point@3.0.0: {} 2319 | 2320 | is-glob@4.0.3: 2321 | dependencies: 2322 | is-extglob: 2.1.1 2323 | 2324 | is-number@7.0.0: {} 2325 | 2326 | isexe@2.0.0: {} 2327 | 2328 | jackspeak@3.4.3: 2329 | dependencies: 2330 | '@isaacs/cliui': 8.0.2 2331 | optionalDependencies: 2332 | '@pkgjs/parseargs': 0.11.0 2333 | 2334 | jiti@1.21.7: {} 2335 | 2336 | js-tokens@4.0.0: {} 2337 | 2338 | js-yaml@4.1.0: 2339 | dependencies: 2340 | argparse: 2.0.1 2341 | 2342 | jsesc@3.1.0: {} 2343 | 2344 | json-buffer@3.0.1: {} 2345 | 2346 | json-schema-traverse@0.4.1: {} 2347 | 2348 | json-stable-stringify-without-jsonify@1.0.1: {} 2349 | 2350 | json5@2.2.3: {} 2351 | 2352 | keyv@4.5.4: 2353 | dependencies: 2354 | json-buffer: 3.0.1 2355 | 2356 | levn@0.4.1: 2357 | dependencies: 2358 | prelude-ls: 1.2.1 2359 | type-check: 0.4.0 2360 | 2361 | lilconfig@3.1.3: {} 2362 | 2363 | lines-and-columns@1.2.4: {} 2364 | 2365 | locate-path@6.0.0: 2366 | dependencies: 2367 | p-locate: 5.0.0 2368 | 2369 | lodash.merge@4.6.2: {} 2370 | 2371 | loose-envify@1.4.0: 2372 | dependencies: 2373 | js-tokens: 4.0.0 2374 | 2375 | lru-cache@10.4.3: {} 2376 | 2377 | lru-cache@5.1.1: 2378 | dependencies: 2379 | yallist: 3.1.1 2380 | 2381 | lucide-react@0.469.0(react@18.3.1): 2382 | dependencies: 2383 | react: 18.3.1 2384 | 2385 | merge2@1.4.1: {} 2386 | 2387 | micromatch@4.0.8: 2388 | dependencies: 2389 | braces: 3.0.3 2390 | picomatch: 2.3.1 2391 | 2392 | minimatch@3.1.2: 2393 | dependencies: 2394 | brace-expansion: 1.1.11 2395 | 2396 | minimatch@9.0.5: 2397 | dependencies: 2398 | brace-expansion: 2.0.1 2399 | 2400 | minipass@7.1.2: {} 2401 | 2402 | motion-dom@11.14.3: {} 2403 | 2404 | motion-utils@11.14.3: {} 2405 | 2406 | motion@11.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2407 | dependencies: 2408 | framer-motion: 11.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2409 | tslib: 2.8.1 2410 | optionalDependencies: 2411 | react: 18.3.1 2412 | react-dom: 18.3.1(react@18.3.1) 2413 | 2414 | ms@2.1.3: {} 2415 | 2416 | mz@2.7.0: 2417 | dependencies: 2418 | any-promise: 1.3.0 2419 | object-assign: 4.1.1 2420 | thenify-all: 1.6.0 2421 | 2422 | nanoid@3.3.8: {} 2423 | 2424 | natural-compare@1.4.0: {} 2425 | 2426 | node-releases@2.0.19: {} 2427 | 2428 | normalize-path@3.0.0: {} 2429 | 2430 | normalize-range@0.1.2: {} 2431 | 2432 | object-assign@4.1.1: {} 2433 | 2434 | object-hash@3.0.0: {} 2435 | 2436 | optionator@0.9.4: 2437 | dependencies: 2438 | deep-is: 0.1.4 2439 | fast-levenshtein: 2.0.6 2440 | levn: 0.4.1 2441 | prelude-ls: 1.2.1 2442 | type-check: 0.4.0 2443 | word-wrap: 1.2.5 2444 | 2445 | p-limit@3.1.0: 2446 | dependencies: 2447 | yocto-queue: 0.1.0 2448 | 2449 | p-locate@5.0.0: 2450 | dependencies: 2451 | p-limit: 3.1.0 2452 | 2453 | package-json-from-dist@1.0.1: {} 2454 | 2455 | parent-module@1.0.1: 2456 | dependencies: 2457 | callsites: 3.1.0 2458 | 2459 | path-exists@4.0.0: {} 2460 | 2461 | path-key@3.1.1: {} 2462 | 2463 | path-parse@1.0.7: {} 2464 | 2465 | path-scurry@1.11.1: 2466 | dependencies: 2467 | lru-cache: 10.4.3 2468 | minipass: 7.1.2 2469 | 2470 | picocolors@1.1.1: {} 2471 | 2472 | picomatch@2.3.1: {} 2473 | 2474 | pify@2.3.0: {} 2475 | 2476 | pirates@4.0.6: {} 2477 | 2478 | postcss-import@15.1.0(postcss@8.4.49): 2479 | dependencies: 2480 | postcss: 8.4.49 2481 | postcss-value-parser: 4.2.0 2482 | read-cache: 1.0.0 2483 | resolve: 1.22.10 2484 | 2485 | postcss-js@4.0.1(postcss@8.4.49): 2486 | dependencies: 2487 | camelcase-css: 2.0.1 2488 | postcss: 8.4.49 2489 | 2490 | postcss-load-config@4.0.2(postcss@8.4.49): 2491 | dependencies: 2492 | lilconfig: 3.1.3 2493 | yaml: 2.6.1 2494 | optionalDependencies: 2495 | postcss: 8.4.49 2496 | 2497 | postcss-nested@6.2.0(postcss@8.4.49): 2498 | dependencies: 2499 | postcss: 8.4.49 2500 | postcss-selector-parser: 6.1.2 2501 | 2502 | postcss-selector-parser@6.1.2: 2503 | dependencies: 2504 | cssesc: 3.0.0 2505 | util-deprecate: 1.0.2 2506 | 2507 | postcss-value-parser@4.2.0: {} 2508 | 2509 | postcss@8.4.49: 2510 | dependencies: 2511 | nanoid: 3.3.8 2512 | picocolors: 1.1.1 2513 | source-map-js: 1.2.1 2514 | 2515 | prelude-ls@1.2.1: {} 2516 | 2517 | prism-react-renderer@2.4.1(react@18.3.1): 2518 | dependencies: 2519 | '@types/prismjs': 1.26.5 2520 | clsx: 2.1.1 2521 | react: 18.3.1 2522 | 2523 | punycode@2.3.1: {} 2524 | 2525 | queue-microtask@1.2.3: {} 2526 | 2527 | react-dom@18.3.1(react@18.3.1): 2528 | dependencies: 2529 | loose-envify: 1.4.0 2530 | react: 18.3.1 2531 | scheduler: 0.23.2 2532 | 2533 | react-refresh@0.14.2: {} 2534 | 2535 | react-use-measure@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2536 | dependencies: 2537 | debounce: 1.2.1 2538 | react: 18.3.1 2539 | react-dom: 18.3.1(react@18.3.1) 2540 | 2541 | react@18.3.1: 2542 | dependencies: 2543 | loose-envify: 1.4.0 2544 | 2545 | read-cache@1.0.0: 2546 | dependencies: 2547 | pify: 2.3.0 2548 | 2549 | readdirp@3.6.0: 2550 | dependencies: 2551 | picomatch: 2.3.1 2552 | 2553 | resolve-from@4.0.0: {} 2554 | 2555 | resolve@1.22.10: 2556 | dependencies: 2557 | is-core-module: 2.16.1 2558 | path-parse: 1.0.7 2559 | supports-preserve-symlinks-flag: 1.0.0 2560 | 2561 | reusify@1.0.4: {} 2562 | 2563 | rollup@4.29.1: 2564 | dependencies: 2565 | '@types/estree': 1.0.6 2566 | optionalDependencies: 2567 | '@rollup/rollup-android-arm-eabi': 4.29.1 2568 | '@rollup/rollup-android-arm64': 4.29.1 2569 | '@rollup/rollup-darwin-arm64': 4.29.1 2570 | '@rollup/rollup-darwin-x64': 4.29.1 2571 | '@rollup/rollup-freebsd-arm64': 4.29.1 2572 | '@rollup/rollup-freebsd-x64': 4.29.1 2573 | '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 2574 | '@rollup/rollup-linux-arm-musleabihf': 4.29.1 2575 | '@rollup/rollup-linux-arm64-gnu': 4.29.1 2576 | '@rollup/rollup-linux-arm64-musl': 4.29.1 2577 | '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 2578 | '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 2579 | '@rollup/rollup-linux-riscv64-gnu': 4.29.1 2580 | '@rollup/rollup-linux-s390x-gnu': 4.29.1 2581 | '@rollup/rollup-linux-x64-gnu': 4.29.1 2582 | '@rollup/rollup-linux-x64-musl': 4.29.1 2583 | '@rollup/rollup-win32-arm64-msvc': 4.29.1 2584 | '@rollup/rollup-win32-ia32-msvc': 4.29.1 2585 | '@rollup/rollup-win32-x64-msvc': 4.29.1 2586 | fsevents: 2.3.3 2587 | 2588 | run-parallel@1.2.0: 2589 | dependencies: 2590 | queue-microtask: 1.2.3 2591 | 2592 | scheduler@0.23.2: 2593 | dependencies: 2594 | loose-envify: 1.4.0 2595 | 2596 | semver@6.3.1: {} 2597 | 2598 | semver@7.6.3: {} 2599 | 2600 | shebang-command@2.0.0: 2601 | dependencies: 2602 | shebang-regex: 3.0.0 2603 | 2604 | shebang-regex@3.0.0: {} 2605 | 2606 | signal-exit@4.1.0: {} 2607 | 2608 | source-map-js@1.2.1: {} 2609 | 2610 | string-width@4.2.3: 2611 | dependencies: 2612 | emoji-regex: 8.0.0 2613 | is-fullwidth-code-point: 3.0.0 2614 | strip-ansi: 6.0.1 2615 | 2616 | string-width@5.1.2: 2617 | dependencies: 2618 | eastasianwidth: 0.2.0 2619 | emoji-regex: 9.2.2 2620 | strip-ansi: 7.1.0 2621 | 2622 | strip-ansi@6.0.1: 2623 | dependencies: 2624 | ansi-regex: 5.0.1 2625 | 2626 | strip-ansi@7.1.0: 2627 | dependencies: 2628 | ansi-regex: 6.1.0 2629 | 2630 | strip-json-comments@3.1.1: {} 2631 | 2632 | sucrase@3.35.0: 2633 | dependencies: 2634 | '@jridgewell/gen-mapping': 0.3.8 2635 | commander: 4.1.1 2636 | glob: 10.4.5 2637 | lines-and-columns: 1.2.4 2638 | mz: 2.7.0 2639 | pirates: 4.0.6 2640 | ts-interface-checker: 0.1.13 2641 | 2642 | supports-color@7.2.0: 2643 | dependencies: 2644 | has-flag: 4.0.0 2645 | 2646 | supports-preserve-symlinks-flag@1.0.0: {} 2647 | 2648 | tailwind-merge@2.6.0: {} 2649 | 2650 | tailwindcss-animate@1.0.7(tailwindcss@3.4.17): 2651 | dependencies: 2652 | tailwindcss: 3.4.17 2653 | 2654 | tailwindcss@3.4.17: 2655 | dependencies: 2656 | '@alloc/quick-lru': 5.2.0 2657 | arg: 5.0.2 2658 | chokidar: 3.6.0 2659 | didyoumean: 1.2.2 2660 | dlv: 1.1.3 2661 | fast-glob: 3.3.2 2662 | glob-parent: 6.0.2 2663 | is-glob: 4.0.3 2664 | jiti: 1.21.7 2665 | lilconfig: 3.1.3 2666 | micromatch: 4.0.8 2667 | normalize-path: 3.0.0 2668 | object-hash: 3.0.0 2669 | picocolors: 1.1.1 2670 | postcss: 8.4.49 2671 | postcss-import: 15.1.0(postcss@8.4.49) 2672 | postcss-js: 4.0.1(postcss@8.4.49) 2673 | postcss-load-config: 4.0.2(postcss@8.4.49) 2674 | postcss-nested: 6.2.0(postcss@8.4.49) 2675 | postcss-selector-parser: 6.1.2 2676 | resolve: 1.22.10 2677 | sucrase: 3.35.0 2678 | transitivePeerDependencies: 2679 | - ts-node 2680 | 2681 | thenify-all@1.6.0: 2682 | dependencies: 2683 | thenify: 3.3.1 2684 | 2685 | thenify@3.3.1: 2686 | dependencies: 2687 | any-promise: 1.3.0 2688 | 2689 | to-regex-range@5.0.1: 2690 | dependencies: 2691 | is-number: 7.0.0 2692 | 2693 | ts-api-utils@1.4.3(typescript@5.6.3): 2694 | dependencies: 2695 | typescript: 5.6.3 2696 | 2697 | ts-interface-checker@0.1.13: {} 2698 | 2699 | tslib@2.8.1: {} 2700 | 2701 | type-check@0.4.0: 2702 | dependencies: 2703 | prelude-ls: 1.2.1 2704 | 2705 | typescript-eslint@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3): 2706 | dependencies: 2707 | '@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 2708 | '@typescript-eslint/parser': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 2709 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 2710 | eslint: 9.17.0(jiti@1.21.7) 2711 | typescript: 5.6.3 2712 | transitivePeerDependencies: 2713 | - supports-color 2714 | 2715 | typescript@5.6.3: {} 2716 | 2717 | undici-types@6.20.0: {} 2718 | 2719 | update-browserslist-db@1.1.1(browserslist@4.24.3): 2720 | dependencies: 2721 | browserslist: 4.24.3 2722 | escalade: 3.2.0 2723 | picocolors: 1.1.1 2724 | 2725 | uri-js@4.4.1: 2726 | dependencies: 2727 | punycode: 2.3.1 2728 | 2729 | util-deprecate@1.0.2: {} 2730 | 2731 | vite@6.0.5(@types/node@22.10.2)(jiti@1.21.7)(yaml@2.6.1): 2732 | dependencies: 2733 | esbuild: 0.24.0 2734 | postcss: 8.4.49 2735 | rollup: 4.29.1 2736 | optionalDependencies: 2737 | '@types/node': 22.10.2 2738 | fsevents: 2.3.3 2739 | jiti: 1.21.7 2740 | yaml: 2.6.1 2741 | 2742 | which@2.0.2: 2743 | dependencies: 2744 | isexe: 2.0.0 2745 | 2746 | word-wrap@1.2.5: {} 2747 | 2748 | wrap-ansi@7.0.0: 2749 | dependencies: 2750 | ansi-styles: 4.3.0 2751 | string-width: 4.2.3 2752 | strip-ansi: 6.0.1 2753 | 2754 | wrap-ansi@8.1.0: 2755 | dependencies: 2756 | ansi-styles: 6.2.1 2757 | string-width: 5.1.2 2758 | strip-ansi: 7.1.0 2759 | 2760 | yallist@3.1.1: {} 2761 | 2762 | yaml@2.6.1: {} 2763 | 2764 | yocto-queue@0.1.0: {} 2765 | -------------------------------------------------------------------------------- /www/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /www/public/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /www/public/og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-env/tidyup/406e531440475ee0184542f7620b5a9df565b481/www/public/og.png -------------------------------------------------------------------------------- /www/src/App.tsx: -------------------------------------------------------------------------------- 1 | import Footer from "./components/footer"; 2 | import LandingPage from "./components/landing-page"; 3 | 4 | function App() { 5 | return ( 6 |
7 | 8 |
9 |
10 | ); 11 | } 12 | 13 | export default App; 14 | -------------------------------------------------------------------------------- /www/src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /www/src/components/demo.tsx: -------------------------------------------------------------------------------- 1 | import { motion } from "motion/react"; 2 | 3 | export function Demo() { 4 | return ( 5 |
9 | 15 |
16 |
17 |
18 |
19 |
20 |
21 | 26 | 27 | Downloads 28 | tidyup . 29 | 30 | 31 | 37 | 🔍 Scanning directory... 38 | 39 | 44 | 📦 Found 127 files 45 | 46 | 51 | 🎯 Organizing files by type... 52 | 53 | 58 | ✨ Created categories: 59 | 60 | 66 | 📸 Images (43 files) 67 | 68 | 74 | 📄 Documents (35 files) 75 | 76 | 82 | 🎵 Audio (22 files) 83 | 84 | 90 | 🎬 Video (15 files) 91 | 92 | 98 | 💾 Archives (12 files) 99 | 100 | 106 | ✅ All done! Your files are now organized. 107 | 108 |
109 | 110 |
111 | ); 112 | } 113 | -------------------------------------------------------------------------------- /www/src/components/features.tsx: -------------------------------------------------------------------------------- 1 | import { motion } from "motion/react"; 2 | import { FolderTree, Zap, Shield, Terminal } from "lucide-react"; 3 | 4 | const features = [ 5 | { 6 | name: "Smart Categorization", 7 | description: 8 | "Automatically sorts files into appropriate categories based on file types.", 9 | icon: FolderTree, 10 | }, 11 | { 12 | name: "Lightning Fast", 13 | description: 14 | "Organize hundreds of files in seconds with efficient processing.", 15 | icon: Zap, 16 | }, 17 | { 18 | name: "Non-destructive", 19 | description: 20 | "Safe operation with built-in safeguards to prevent accidental file loss.", 21 | icon: Shield, 22 | }, 23 | { 24 | name: "Simple CLI", 25 | description: "Easy to use command-line interface with intuitive commands.", 26 | icon: Terminal, 27 | }, 28 | ]; 29 | 30 | const containerVariants = { 31 | hidden: { opacity: 0 }, 32 | visible: { 33 | opacity: 1, 34 | transition: { 35 | staggerChildren: 0.2, 36 | }, 37 | }, 38 | }; 39 | 40 | const itemVariants = { 41 | hidden: { opacity: 0, y: 20 }, 42 | visible: { 43 | opacity: 1, 44 | y: 0, 45 | }, 46 | }; 47 | 48 | export function Features() { 49 | return ( 50 |
51 |
52 | 58 |

59 | Everything you need 60 |

61 |

62 | Powerful file organization made simple 63 |

64 |
65 | 72 |
73 | {features.map((feature) => ( 74 | 79 |
80 |
81 |
86 | {feature.name} 87 |
88 |
89 | {feature.description} 90 |
91 |
92 | ))} 93 |
94 |
95 |
96 |
97 | ); 98 | } 99 | -------------------------------------------------------------------------------- /www/src/components/footer.tsx: -------------------------------------------------------------------------------- 1 | const Footer = () => { 2 | return ( 3 | 32 | ); 33 | }; 34 | 35 | export default Footer; 36 | -------------------------------------------------------------------------------- /www/src/components/landing-page.tsx: -------------------------------------------------------------------------------- 1 | import { AnimatePresence, motion, MotionConfig } from "motion/react"; 2 | import { useCallback, useState } from "react"; 3 | import { Demo } from "./demo"; 4 | import { Button } from "./ui/button"; 5 | 6 | const LandingPage = () => { 7 | return ( 8 |
9 |
10 |
11 | tidyup logo 16 |

Tidyup

17 |
18 |

19 | A simple CLI tool to organize your folders and files. 20 |

21 |
22 | 31 | 40 |
41 |
42 |
43 |

Installation

44 | 45 |
46 |
47 |

Usage

48 | 49 |
50 |
51 |
52 |
53 | ); 54 | }; 55 | 56 | const Installation = () => { 57 | const [copying, setCopying] = useState(0); 58 | const variants = { 59 | visible: { opacity: 1, scale: 1 }, 60 | hidden: { opacity: 0, scale: 0.5 }, 61 | }; 62 | const onCopy = useCallback(() => { 63 | navigator.clipboard.writeText("npm install -g tidyup"); 64 | setCopying((c) => c + 1); 65 | setTimeout(() => { 66 | setCopying((c) => c - 1); 67 | }, 2000); 68 | }, []); 69 | 70 | return ( 71 |
72 | 73 | npm install -g tidyup 74 | 130 | 131 |
132 | ); 133 | }; 134 | 135 | export default LandingPage; 136 | -------------------------------------------------------------------------------- /www/src/components/ui/button.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import { Slot } from "@radix-ui/react-slot" 3 | import { cva, type VariantProps } from "class-variance-authority" 4 | 5 | import { cn } from "@/lib/utils" 6 | 7 | const buttonVariants = cva( 8 | "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", 9 | { 10 | variants: { 11 | variant: { 12 | default: 13 | "bg-primary text-primary-foreground shadow hover:bg-primary/90", 14 | destructive: 15 | "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", 16 | outline: 17 | "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", 18 | secondary: 19 | "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", 20 | ghost: "hover:bg-accent hover:text-accent-foreground", 21 | link: "text-primary underline-offset-4 hover:underline", 22 | }, 23 | size: { 24 | default: "h-9 px-4 py-2", 25 | sm: "h-8 rounded-md px-3 text-xs", 26 | lg: "h-10 rounded-md px-8", 27 | icon: "h-9 w-9", 28 | }, 29 | }, 30 | defaultVariants: { 31 | variant: "default", 32 | size: "default", 33 | }, 34 | } 35 | ) 36 | 37 | export interface ButtonProps 38 | extends React.ButtonHTMLAttributes, 39 | VariantProps { 40 | asChild?: boolean 41 | } 42 | 43 | const Button = React.forwardRef( 44 | ({ className, variant, size, asChild = false, ...props }, ref) => { 45 | const Comp = asChild ? Slot : "button" 46 | return ( 47 | 52 | ) 53 | } 54 | ) 55 | Button.displayName = "Button" 56 | 57 | export { Button, buttonVariants } 58 | -------------------------------------------------------------------------------- /www/src/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Hanken+Grotesk:ital,wght@0,100..900;1,100..900&display=swap"); 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; 5 | @layer base { 6 | :root { 7 | --background: 0 0% 100%; 8 | --foreground: 0 0% 3.9%; 9 | --card: 0 0% 100%; 10 | --card-foreground: 0 0% 3.9%; 11 | --popover: 0 0% 100%; 12 | --popover-foreground: 0 0% 3.9%; 13 | --primary: 0 0% 9%; 14 | --primary-foreground: 0 0% 98%; 15 | --secondary: 0 0% 96.1%; 16 | --secondary-foreground: 0 0% 9%; 17 | --muted: 0 0% 96.1%; 18 | --muted-foreground: 0 0% 45.1%; 19 | --accent: 0 0% 96.1%; 20 | --accent-foreground: 0 0% 9%; 21 | --destructive: 0 84.2% 60.2%; 22 | --destructive-foreground: 0 0% 98%; 23 | --border: 0 0% 89.8%; 24 | --input: 0 0% 89.8%; 25 | --ring: 0 0% 3.9%; 26 | --chart-1: 12 76% 61%; 27 | --chart-2: 173 58% 39%; 28 | --chart-3: 197 37% 24%; 29 | --chart-4: 43 74% 66%; 30 | --chart-5: 27 87% 67%; 31 | --radius: 0.5rem; 32 | --gray1: hsl(0, 0%, 99%); 33 | --gray2: hsl(0, 0%, 97.3%); 34 | } 35 | .dark { 36 | --background: 0 0% 3.9%; 37 | --foreground: 0 0% 98%; 38 | --card: 0 0% 3.9%; 39 | --card-foreground: 0 0% 98%; 40 | --popover: 0 0% 3.9%; 41 | --popover-foreground: 0 0% 98%; 42 | --primary: 0 0% 98%; 43 | --primary-foreground: 0 0% 9%; 44 | --secondary: 0 0% 14.9%; 45 | --secondary-foreground: 0 0% 98%; 46 | --muted: 0 0% 14.9%; 47 | --muted-foreground: 0 0% 63.9%; 48 | --accent: 0 0% 14.9%; 49 | --accent-foreground: 0 0% 98%; 50 | --destructive: 0 62.8% 30.6%; 51 | --destructive-foreground: 0 0% 98%; 52 | --border: 0 0% 14.9%; 53 | --input: 0 0% 14.9%; 54 | --ring: 0 0% 83.1%; 55 | --chart-1: 220 70% 50%; 56 | --chart-2: 160 60% 45%; 57 | --chart-3: 30 80% 55%; 58 | --chart-4: 280 65% 60%; 59 | --chart-5: 340 75% 55%; 60 | } 61 | } 62 | @layer base { 63 | * { 64 | @apply border-border; 65 | /* font-family: "Hanken Grotesk", sans-serif; */ 66 | } 67 | body { 68 | @apply bg-background text-foreground; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /www/src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /www/src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react' 2 | import { createRoot } from 'react-dom/client' 3 | import './index.css' 4 | import App from './App.tsx' 5 | 6 | createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /www/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /www/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | darkMode: ["class"], 4 | content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], 5 | theme: { 6 | extend: { 7 | borderRadius: { 8 | lg: "var(--radius)", 9 | md: "calc(var(--radius) - 2px)", 10 | sm: "calc(var(--radius) - 4px)", 11 | }, 12 | colors: { 13 | background: "hsl(var(--background))", 14 | foreground: "hsl(var(--foreground))", 15 | gr1: "var(--gray1)", 16 | gr2: "var(--gray2)", 17 | card: { 18 | DEFAULT: "hsl(var(--card))", 19 | foreground: "hsl(var(--card-foreground))", 20 | }, 21 | popover: { 22 | DEFAULT: "hsl(var(--popover))", 23 | foreground: "hsl(var(--popover-foreground))", 24 | }, 25 | primary: { 26 | DEFAULT: "hsl(var(--primary))", 27 | foreground: "hsl(var(--primary-foreground))", 28 | }, 29 | secondary: { 30 | DEFAULT: "hsl(var(--secondary))", 31 | foreground: "hsl(var(--secondary-foreground))", 32 | }, 33 | muted: { 34 | DEFAULT: "hsl(var(--muted))", 35 | foreground: "hsl(var(--muted-foreground))", 36 | }, 37 | accent: { 38 | DEFAULT: "hsl(var(--accent))", 39 | foreground: "hsl(var(--accent-foreground))", 40 | }, 41 | destructive: { 42 | DEFAULT: "hsl(var(--destructive))", 43 | foreground: "hsl(var(--destructive-foreground))", 44 | }, 45 | border: "hsl(var(--border))", 46 | input: "hsl(var(--input))", 47 | ring: "hsl(var(--ring))", 48 | chart: { 49 | 1: "hsl(var(--chart-1))", 50 | 2: "hsl(var(--chart-2))", 51 | 3: "hsl(var(--chart-3))", 52 | 4: "hsl(var(--chart-4))", 53 | 5: "hsl(var(--chart-5))", 54 | }, 55 | }, 56 | }, 57 | }, 58 | plugins: [require("tailwindcss-animate")], 59 | }; 60 | -------------------------------------------------------------------------------- /www/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 4 | "target": "ES2020", 5 | "useDefineForClassFields": true, 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "module": "ESNext", 8 | "skipLibCheck": true, 9 | 10 | /* Bundler mode */ 11 | "moduleResolution": "bundler", 12 | "allowImportingTsExtensions": true, 13 | "isolatedModules": true, 14 | "moduleDetection": "force", 15 | "noEmit": true, 16 | "jsx": "react-jsx", 17 | 18 | /* Linting */ 19 | "strict": true, 20 | "noUnusedLocals": true, 21 | "noUnusedParameters": true, 22 | "noFallthroughCasesInSwitch": true, 23 | "noUncheckedSideEffectImports": true, 24 | "baseUrl": ".", 25 | "paths": { 26 | "@/*": ["./src/*"] 27 | } 28 | }, 29 | "include": ["src"] 30 | } 31 | -------------------------------------------------------------------------------- /www/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.app.json" }, 5 | { "path": "./tsconfig.node.json" } 6 | ], 7 | "compilerOptions": { 8 | "baseUrl": ".", 9 | "paths": { 10 | "@/*": ["./src/*"] 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /www/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 | "target": "ES2022", 5 | "lib": ["ES2023"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "isolatedModules": true, 13 | "moduleDetection": "force", 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "strict": true, 18 | "noUnusedLocals": true, 19 | "noUnusedParameters": true, 20 | "noFallthroughCasesInSwitch": true, 21 | "noUncheckedSideEffectImports": true 22 | }, 23 | "include": ["vite.config.ts"] 24 | } 25 | -------------------------------------------------------------------------------- /www/vite.config.ts: -------------------------------------------------------------------------------- 1 | import path from "path"; 2 | import react from "@vitejs/plugin-react"; 3 | import { defineConfig } from "vite"; 4 | 5 | export default defineConfig({ 6 | plugins: [react()], 7 | resolve: { 8 | alias: { 9 | "@": path.resolve(__dirname, "./src"), 10 | }, 11 | }, 12 | }); 13 | --------------------------------------------------------------------------------