this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: shacdn

+5262 -104
+25
components.json
··· 1 + { 2 + "$schema": "https://ui.shadcn.com/schema.json", 3 + "style": "base-maia", 4 + "rsc": true, 5 + "tsx": true, 6 + "tailwind": { 7 + "config": "", 8 + "css": "src/app/globals.css", 9 + "baseColor": "neutral", 10 + "cssVariables": true, 11 + "prefix": "" 12 + }, 13 + "iconLibrary": "hugeicons", 14 + "rtl": false, 15 + "aliases": { 16 + "components": "@/components", 17 + "utils": "@/lib/utils", 18 + "ui": "@/components/ui", 19 + "lib": "@/lib", 20 + "hooks": "@/hooks" 21 + }, 22 + "menuColor": "default", 23 + "menuAccent": "subtle", 24 + "registries": {} 25 + }
+9 -1
package.json
··· 10 10 "format": "biome format --write" 11 11 }, 12 12 "dependencies": { 13 + "@base-ui/react": "^1.1.0", 14 + "@hugeicons/core-free-icons": "^3.1.1", 15 + "@hugeicons/react": "^1.1.5", 16 + "class-variance-authority": "^0.7.1", 17 + "clsx": "^2.1.1", 13 18 "next": "16.1.6", 14 19 "react": "19.2.3", 15 - "react-dom": "19.2.3" 20 + "react-dom": "19.2.3", 21 + "shadcn": "^3.8.4", 22 + "tailwind-merge": "^3.4.0", 23 + "tw-animate-css": "^1.4.0" 16 24 }, 17 25 "devDependencies": { 18 26 "@biomejs/biome": "2.2.0",
+2822 -4
pnpm-lock.yaml
··· 8 8 9 9 .: 10 10 dependencies: 11 + '@base-ui/react': 12 + specifier: ^1.1.0 13 + version: 1.1.0(@types/react@19.2.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) 14 + '@hugeicons/core-free-icons': 15 + specifier: ^3.1.1 16 + version: 3.1.1 17 + '@hugeicons/react': 18 + specifier: ^1.1.5 19 + version: 1.1.5(react@19.2.3) 20 + class-variance-authority: 21 + specifier: ^0.7.1 22 + version: 0.7.1 23 + clsx: 24 + specifier: ^2.1.1 25 + version: 2.1.1 11 26 next: 12 27 specifier: 16.1.6 13 - version: 16.1.6(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) 28 + version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) 14 29 react: 15 30 specifier: 19.2.3 16 31 version: 19.2.3 17 32 react-dom: 18 33 specifier: 19.2.3 19 34 version: 19.2.3(react@19.2.3) 35 + shadcn: 36 + specifier: ^3.8.4 37 + version: 3.8.4(@types/node@20.19.33)(typescript@5.9.3) 38 + tailwind-merge: 39 + specifier: ^3.4.0 40 + version: 3.4.0 41 + tw-animate-css: 42 + specifier: ^1.4.0 43 + version: 1.4.0 20 44 devDependencies: 21 45 '@biomejs/biome': 22 46 specifier: 2.2.0 ··· 49 73 resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 50 74 engines: {node: '>=10'} 51 75 76 + '@antfu/ni@25.0.0': 77 + resolution: {integrity: sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA==} 78 + hasBin: true 79 + 80 + '@babel/code-frame@7.29.0': 81 + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} 82 + engines: {node: '>=6.9.0'} 83 + 84 + '@babel/compat-data@7.29.0': 85 + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} 86 + engines: {node: '>=6.9.0'} 87 + 88 + '@babel/core@7.29.0': 89 + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} 90 + engines: {node: '>=6.9.0'} 91 + 92 + '@babel/generator@7.29.1': 93 + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} 94 + engines: {node: '>=6.9.0'} 95 + 96 + '@babel/helper-annotate-as-pure@7.27.3': 97 + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} 98 + engines: {node: '>=6.9.0'} 99 + 100 + '@babel/helper-compilation-targets@7.28.6': 101 + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} 102 + engines: {node: '>=6.9.0'} 103 + 104 + '@babel/helper-create-class-features-plugin@7.28.6': 105 + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} 106 + engines: {node: '>=6.9.0'} 107 + peerDependencies: 108 + '@babel/core': ^7.0.0 109 + 110 + '@babel/helper-globals@7.28.0': 111 + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} 112 + engines: {node: '>=6.9.0'} 113 + 114 + '@babel/helper-member-expression-to-functions@7.28.5': 115 + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} 116 + engines: {node: '>=6.9.0'} 117 + 118 + '@babel/helper-module-imports@7.28.6': 119 + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} 120 + engines: {node: '>=6.9.0'} 121 + 122 + '@babel/helper-module-transforms@7.28.6': 123 + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} 124 + engines: {node: '>=6.9.0'} 125 + peerDependencies: 126 + '@babel/core': ^7.0.0 127 + 128 + '@babel/helper-optimise-call-expression@7.27.1': 129 + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} 130 + engines: {node: '>=6.9.0'} 131 + 132 + '@babel/helper-plugin-utils@7.28.6': 133 + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} 134 + engines: {node: '>=6.9.0'} 135 + 136 + '@babel/helper-replace-supers@7.28.6': 137 + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} 138 + engines: {node: '>=6.9.0'} 139 + peerDependencies: 140 + '@babel/core': ^7.0.0 141 + 142 + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': 143 + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} 144 + engines: {node: '>=6.9.0'} 145 + 52 146 '@babel/helper-string-parser@7.27.1': 53 147 resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 54 148 engines: {node: '>=6.9.0'} ··· 57 151 resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 58 152 engines: {node: '>=6.9.0'} 59 153 154 + '@babel/helper-validator-option@7.27.1': 155 + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 156 + engines: {node: '>=6.9.0'} 157 + 158 + '@babel/helpers@7.28.6': 159 + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} 160 + engines: {node: '>=6.9.0'} 161 + 162 + '@babel/parser@7.29.0': 163 + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} 164 + engines: {node: '>=6.0.0'} 165 + hasBin: true 166 + 167 + '@babel/plugin-syntax-jsx@7.28.6': 168 + resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} 169 + engines: {node: '>=6.9.0'} 170 + peerDependencies: 171 + '@babel/core': ^7.0.0-0 172 + 173 + '@babel/plugin-syntax-typescript@7.28.6': 174 + resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} 175 + engines: {node: '>=6.9.0'} 176 + peerDependencies: 177 + '@babel/core': ^7.0.0-0 178 + 179 + '@babel/plugin-transform-modules-commonjs@7.28.6': 180 + resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} 181 + engines: {node: '>=6.9.0'} 182 + peerDependencies: 183 + '@babel/core': ^7.0.0-0 184 + 185 + '@babel/plugin-transform-typescript@7.28.6': 186 + resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} 187 + engines: {node: '>=6.9.0'} 188 + peerDependencies: 189 + '@babel/core': ^7.0.0-0 190 + 191 + '@babel/preset-typescript@7.28.5': 192 + resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} 193 + engines: {node: '>=6.9.0'} 194 + peerDependencies: 195 + '@babel/core': ^7.0.0-0 196 + 197 + '@babel/runtime@7.28.6': 198 + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} 199 + engines: {node: '>=6.9.0'} 200 + 201 + '@babel/template@7.28.6': 202 + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} 203 + engines: {node: '>=6.9.0'} 204 + 205 + '@babel/traverse@7.29.0': 206 + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} 207 + engines: {node: '>=6.9.0'} 208 + 60 209 '@babel/types@7.29.0': 61 210 resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} 62 211 engines: {node: '>=6.9.0'} 212 + 213 + '@base-ui/react@1.1.0': 214 + resolution: {integrity: sha512-ikcJRNj1mOiF2HZ5jQHrXoVoHcNHdBU5ejJljcBl+VTLoYXR6FidjTN86GjO6hyshi6TZFuNvv0dEOgaOFv6Lw==} 215 + engines: {node: '>=14.0.0'} 216 + peerDependencies: 217 + '@types/react': ^17 || ^18 || ^19 218 + react: ^17 || ^18 || ^19 219 + react-dom: ^17 || ^18 || ^19 220 + peerDependenciesMeta: 221 + '@types/react': 222 + optional: true 223 + 224 + '@base-ui/utils@0.2.4': 225 + resolution: {integrity: sha512-smZwpMhjO29v+jrZusBSc5T+IJ3vBb9cjIiBjtKcvWmRj9Z4DWGVR3efr1eHR56/bqY5a4qyY9ElkOY5ljo3ng==} 226 + peerDependencies: 227 + '@types/react': ^17 || ^18 || ^19 228 + react: ^17 || ^18 || ^19 229 + react-dom: ^17 || ^18 || ^19 230 + peerDependenciesMeta: 231 + '@types/react': 232 + optional: true 63 233 64 234 '@biomejs/biome@2.2.0': 65 235 resolution: {integrity: sha512-3On3RSYLsX+n9KnoSgfoYlckYBoU6VRM22cw1gB4Y0OuUVSYd/O/2saOJMrA4HFfA1Ff0eacOvMN1yAAvHtzIw==} ··· 114 284 cpu: [x64] 115 285 os: [win32] 116 286 287 + '@dotenvx/dotenvx@1.52.0': 288 + resolution: {integrity: sha512-CaQcc8JvtzQhUSm9877b6V4Tb7HCotkcyud9X2YwdqtQKwgljkMRwU96fVYKnzN3V0Hj74oP7Es+vZ0mS+Aa1w==} 289 + hasBin: true 290 + 291 + '@ecies/ciphers@0.2.5': 292 + resolution: {integrity: sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A==} 293 + engines: {bun: '>=1', deno: '>=2', node: '>=16'} 294 + peerDependencies: 295 + '@noble/ciphers': ^1.0.0 296 + 117 297 '@emnapi/runtime@1.8.1': 118 298 resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} 299 + 300 + '@floating-ui/core@1.7.4': 301 + resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} 302 + 303 + '@floating-ui/dom@1.7.5': 304 + resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} 305 + 306 + '@floating-ui/react-dom@2.1.7': 307 + resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==} 308 + peerDependencies: 309 + react: '>=16.8.0' 310 + react-dom: '>=16.8.0' 311 + 312 + '@floating-ui/utils@0.2.10': 313 + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} 314 + 315 + '@hono/node-server@1.19.9': 316 + resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} 317 + engines: {node: '>=18.14.1'} 318 + peerDependencies: 319 + hono: ^4 320 + 321 + '@hugeicons/core-free-icons@3.1.1': 322 + resolution: {integrity: sha512-UpS2lUQFi5sKyJSWwM6rO+BnPLvVz1gsyCpPHeZyVuZqi89YH8ksliza4cwaODqKOZyeXmG8juo1ty4QtQofkg==} 323 + 324 + '@hugeicons/react@1.1.5': 325 + resolution: {integrity: sha512-JX/iDz3oO7hWdVqbjwFwRrAjHk8h2vI+mBkNzp4JcXG3t4idoupfjon73nLOA7cr27m0M8hrRC1Q2h6nEBGKVA==} 326 + peerDependencies: 327 + react: '>=16.0.0' 119 328 120 329 '@img/colour@1.0.0': 121 330 resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} ··· 254 463 cpu: [x64] 255 464 os: [win32] 256 465 466 + '@inquirer/ansi@1.0.2': 467 + resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} 468 + engines: {node: '>=18'} 469 + 470 + '@inquirer/confirm@5.1.21': 471 + resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} 472 + engines: {node: '>=18'} 473 + peerDependencies: 474 + '@types/node': '>=18' 475 + peerDependenciesMeta: 476 + '@types/node': 477 + optional: true 478 + 479 + '@inquirer/core@10.3.2': 480 + resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} 481 + engines: {node: '>=18'} 482 + peerDependencies: 483 + '@types/node': '>=18' 484 + peerDependenciesMeta: 485 + '@types/node': 486 + optional: true 487 + 488 + '@inquirer/figures@1.0.15': 489 + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} 490 + engines: {node: '>=18'} 491 + 492 + '@inquirer/type@3.0.10': 493 + resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} 494 + engines: {node: '>=18'} 495 + peerDependencies: 496 + '@types/node': '>=18' 497 + peerDependenciesMeta: 498 + '@types/node': 499 + optional: true 500 + 501 + '@isaacs/balanced-match@4.0.1': 502 + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} 503 + engines: {node: 20 || >=22} 504 + 505 + '@isaacs/brace-expansion@5.0.1': 506 + resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} 507 + engines: {node: 20 || >=22} 508 + 257 509 '@jridgewell/gen-mapping@0.3.13': 258 510 resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 259 511 ··· 270 522 '@jridgewell/trace-mapping@0.3.31': 271 523 resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 272 524 525 + '@modelcontextprotocol/sdk@1.26.0': 526 + resolution: {integrity: sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==} 527 + engines: {node: '>=18'} 528 + peerDependencies: 529 + '@cfworker/json-schema': ^4.1.1 530 + zod: ^3.25 || ^4.0 531 + peerDependenciesMeta: 532 + '@cfworker/json-schema': 533 + optional: true 534 + 535 + '@mswjs/interceptors@0.41.2': 536 + resolution: {integrity: sha512-7G0Uf0yK3f2bjElBLGHIQzgRgMESczOMyYVasq1XK8P5HaXtlW4eQhz9MBL+TQILZLaruq+ClGId+hH0w4jvWw==} 537 + engines: {node: '>=18'} 538 + 273 539 '@next/env@16.1.6': 274 540 resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} 275 541 ··· 321 587 cpu: [x64] 322 588 os: [win32] 323 589 590 + '@noble/ciphers@1.3.0': 591 + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} 592 + engines: {node: ^14.21.3 || >=16} 593 + 594 + '@noble/curves@1.9.7': 595 + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} 596 + engines: {node: ^14.21.3 || >=16} 597 + 598 + '@noble/hashes@1.8.0': 599 + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} 600 + engines: {node: ^14.21.3 || >=16} 601 + 602 + '@nodelib/fs.scandir@2.1.5': 603 + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 604 + engines: {node: '>= 8'} 605 + 606 + '@nodelib/fs.stat@2.0.5': 607 + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 608 + engines: {node: '>= 8'} 609 + 610 + '@nodelib/fs.walk@1.2.8': 611 + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 612 + engines: {node: '>= 8'} 613 + 614 + '@open-draft/deferred-promise@2.2.0': 615 + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} 616 + 617 + '@open-draft/logger@0.3.0': 618 + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} 619 + 620 + '@open-draft/until@2.1.0': 621 + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} 622 + 623 + '@sec-ant/readable-stream@0.4.1': 624 + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} 625 + 626 + '@sindresorhus/merge-streams@4.0.0': 627 + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} 628 + engines: {node: '>=18'} 629 + 324 630 '@swc/helpers@0.5.15': 325 631 resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} 326 632 ··· 412 718 '@tailwindcss/postcss@4.1.18': 413 719 resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==} 414 720 721 + '@ts-morph/common@0.27.0': 722 + resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==} 723 + 415 724 '@types/node@20.19.33': 416 725 resolution: {integrity: sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==} 417 726 ··· 423 732 '@types/react@19.2.13': 424 733 resolution: {integrity: sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==} 425 734 735 + '@types/statuses@2.0.6': 736 + resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} 737 + 738 + '@types/validate-npm-package-name@4.0.2': 739 + resolution: {integrity: sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==} 740 + 741 + accepts@2.0.0: 742 + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} 743 + engines: {node: '>= 0.6'} 744 + 745 + agent-base@7.1.4: 746 + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} 747 + engines: {node: '>= 14'} 748 + 749 + ajv-formats@3.0.1: 750 + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} 751 + peerDependencies: 752 + ajv: ^8.0.0 753 + peerDependenciesMeta: 754 + ajv: 755 + optional: true 756 + 757 + ajv@8.17.1: 758 + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} 759 + 760 + ansi-regex@5.0.1: 761 + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 762 + engines: {node: '>=8'} 763 + 764 + ansi-regex@6.2.2: 765 + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} 766 + engines: {node: '>=12'} 767 + 768 + ansi-styles@4.3.0: 769 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 770 + engines: {node: '>=8'} 771 + 772 + ansis@4.2.0: 773 + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} 774 + engines: {node: '>=14'} 775 + 776 + argparse@2.0.1: 777 + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 778 + 779 + ast-types@0.16.1: 780 + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} 781 + engines: {node: '>=4'} 782 + 426 783 babel-plugin-react-compiler@1.0.0: 427 784 resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==} 428 785 ··· 430 787 resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} 431 788 hasBin: true 432 789 790 + body-parser@2.2.2: 791 + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} 792 + engines: {node: '>=18'} 793 + 794 + braces@3.0.3: 795 + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 796 + engines: {node: '>=8'} 797 + 798 + browserslist@4.28.1: 799 + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} 800 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 801 + hasBin: true 802 + 803 + bundle-name@4.1.0: 804 + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} 805 + engines: {node: '>=18'} 806 + 807 + bytes@3.1.2: 808 + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 809 + engines: {node: '>= 0.8'} 810 + 811 + call-bind-apply-helpers@1.0.2: 812 + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 813 + engines: {node: '>= 0.4'} 814 + 815 + call-bound@1.0.4: 816 + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 817 + engines: {node: '>= 0.4'} 818 + 819 + callsites@3.1.0: 820 + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 821 + engines: {node: '>=6'} 822 + 433 823 caniuse-lite@1.0.30001769: 434 824 resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} 435 825 826 + chalk@5.6.2: 827 + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} 828 + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 829 + 830 + class-variance-authority@0.7.1: 831 + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} 832 + 833 + cli-cursor@5.0.0: 834 + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} 835 + engines: {node: '>=18'} 836 + 837 + cli-spinners@2.9.2: 838 + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} 839 + engines: {node: '>=6'} 840 + 841 + cli-width@4.1.0: 842 + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} 843 + engines: {node: '>= 12'} 844 + 436 845 client-only@0.0.1: 437 846 resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 438 847 848 + cliui@8.0.1: 849 + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 850 + engines: {node: '>=12'} 851 + 852 + clsx@2.1.1: 853 + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 854 + engines: {node: '>=6'} 855 + 856 + code-block-writer@13.0.3: 857 + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} 858 + 859 + color-convert@2.0.1: 860 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 861 + engines: {node: '>=7.0.0'} 862 + 863 + color-name@1.1.4: 864 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 865 + 866 + commander@11.1.0: 867 + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} 868 + engines: {node: '>=16'} 869 + 870 + commander@14.0.3: 871 + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} 872 + engines: {node: '>=20'} 873 + 874 + content-disposition@1.0.1: 875 + resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} 876 + engines: {node: '>=18'} 877 + 878 + content-type@1.0.5: 879 + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 880 + engines: {node: '>= 0.6'} 881 + 882 + convert-source-map@2.0.0: 883 + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 884 + 885 + cookie-signature@1.2.2: 886 + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} 887 + engines: {node: '>=6.6.0'} 888 + 889 + cookie@0.7.2: 890 + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 891 + engines: {node: '>= 0.6'} 892 + 893 + cookie@1.1.1: 894 + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} 895 + engines: {node: '>=18'} 896 + 897 + cors@2.8.6: 898 + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} 899 + engines: {node: '>= 0.10'} 900 + 901 + cosmiconfig@9.0.0: 902 + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} 903 + engines: {node: '>=14'} 904 + peerDependencies: 905 + typescript: '>=4.9.5' 906 + peerDependenciesMeta: 907 + typescript: 908 + optional: true 909 + 910 + cross-spawn@7.0.6: 911 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 912 + engines: {node: '>= 8'} 913 + 914 + cssesc@3.0.0: 915 + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 916 + engines: {node: '>=4'} 917 + hasBin: true 918 + 439 919 csstype@3.2.3: 440 920 resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} 441 921 922 + data-uri-to-buffer@4.0.1: 923 + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} 924 + engines: {node: '>= 12'} 925 + 926 + debug@4.4.3: 927 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 928 + engines: {node: '>=6.0'} 929 + peerDependencies: 930 + supports-color: '*' 931 + peerDependenciesMeta: 932 + supports-color: 933 + optional: true 934 + 935 + dedent@1.7.1: 936 + resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==} 937 + peerDependencies: 938 + babel-plugin-macros: ^3.1.0 939 + peerDependenciesMeta: 940 + babel-plugin-macros: 941 + optional: true 942 + 943 + deepmerge@4.3.1: 944 + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 945 + engines: {node: '>=0.10.0'} 946 + 947 + default-browser-id@5.0.1: 948 + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} 949 + engines: {node: '>=18'} 950 + 951 + default-browser@5.5.0: 952 + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} 953 + engines: {node: '>=18'} 954 + 955 + define-lazy-prop@3.0.0: 956 + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} 957 + engines: {node: '>=12'} 958 + 959 + depd@2.0.0: 960 + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 961 + engines: {node: '>= 0.8'} 962 + 442 963 detect-libc@2.1.2: 443 964 resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 444 965 engines: {node: '>=8'} 445 966 967 + diff@8.0.3: 968 + resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} 969 + engines: {node: '>=0.3.1'} 970 + 971 + dotenv@17.2.4: 972 + resolution: {integrity: sha512-mudtfb4zRB4bVvdj0xRo+e6duH1csJRM8IukBqfTRvHotn9+LBXB8ynAidP9zHqoRC/fsllXgk4kCKlR21fIhw==} 973 + engines: {node: '>=12'} 974 + 975 + dunder-proto@1.0.1: 976 + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 977 + engines: {node: '>= 0.4'} 978 + 979 + eciesjs@0.4.17: 980 + resolution: {integrity: sha512-TOOURki4G7sD1wDCjj7NfLaXZZ49dFOeEb5y39IXpb8p0hRzVvfvzZHOi5JcT+PpyAbi/Y+lxPb8eTag2WYH8w==} 981 + engines: {bun: '>=1', deno: '>=2', node: '>=16'} 982 + 983 + ee-first@1.1.1: 984 + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 985 + 986 + electron-to-chromium@1.5.286: 987 + resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} 988 + 989 + emoji-regex@10.6.0: 990 + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} 991 + 992 + emoji-regex@8.0.0: 993 + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 994 + 995 + encodeurl@2.0.0: 996 + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 997 + engines: {node: '>= 0.8'} 998 + 446 999 enhanced-resolve@5.19.0: 447 1000 resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} 448 1001 engines: {node: '>=10.13.0'} 449 1002 1003 + env-paths@2.2.1: 1004 + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} 1005 + engines: {node: '>=6'} 1006 + 1007 + error-ex@1.3.4: 1008 + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} 1009 + 1010 + es-define-property@1.0.1: 1011 + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 1012 + engines: {node: '>= 0.4'} 1013 + 1014 + es-errors@1.3.0: 1015 + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 1016 + engines: {node: '>= 0.4'} 1017 + 1018 + es-object-atoms@1.1.1: 1019 + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 1020 + engines: {node: '>= 0.4'} 1021 + 1022 + escalade@3.2.0: 1023 + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 1024 + engines: {node: '>=6'} 1025 + 1026 + escape-html@1.0.3: 1027 + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 1028 + 1029 + esprima@4.0.1: 1030 + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1031 + engines: {node: '>=4'} 1032 + hasBin: true 1033 + 1034 + etag@1.8.1: 1035 + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 1036 + engines: {node: '>= 0.6'} 1037 + 1038 + eventsource-parser@3.0.6: 1039 + resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} 1040 + engines: {node: '>=18.0.0'} 1041 + 1042 + eventsource@3.0.7: 1043 + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} 1044 + engines: {node: '>=18.0.0'} 1045 + 1046 + execa@5.1.1: 1047 + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1048 + engines: {node: '>=10'} 1049 + 1050 + execa@9.6.1: 1051 + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} 1052 + engines: {node: ^18.19.0 || >=20.5.0} 1053 + 1054 + express-rate-limit@8.2.1: 1055 + resolution: {integrity: sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==} 1056 + engines: {node: '>= 16'} 1057 + peerDependencies: 1058 + express: '>= 4.11' 1059 + 1060 + express@5.2.1: 1061 + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} 1062 + engines: {node: '>= 18'} 1063 + 1064 + fast-deep-equal@3.1.3: 1065 + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1066 + 1067 + fast-glob@3.3.3: 1068 + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1069 + engines: {node: '>=8.6.0'} 1070 + 1071 + fast-uri@3.1.0: 1072 + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} 1073 + 1074 + fastq@1.20.1: 1075 + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} 1076 + 1077 + fdir@6.5.0: 1078 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 1079 + engines: {node: '>=12.0.0'} 1080 + peerDependencies: 1081 + picomatch: ^3 || ^4 1082 + peerDependenciesMeta: 1083 + picomatch: 1084 + optional: true 1085 + 1086 + fetch-blob@3.2.0: 1087 + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} 1088 + engines: {node: ^12.20 || >= 14.13} 1089 + 1090 + figures@6.1.0: 1091 + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} 1092 + engines: {node: '>=18'} 1093 + 1094 + fill-range@7.1.1: 1095 + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1096 + engines: {node: '>=8'} 1097 + 1098 + finalhandler@2.1.1: 1099 + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} 1100 + engines: {node: '>= 18.0.0'} 1101 + 1102 + formdata-polyfill@4.0.10: 1103 + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} 1104 + engines: {node: '>=12.20.0'} 1105 + 1106 + forwarded@0.2.0: 1107 + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 1108 + engines: {node: '>= 0.6'} 1109 + 1110 + fresh@2.0.0: 1111 + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} 1112 + engines: {node: '>= 0.8'} 1113 + 1114 + fs-extra@11.3.3: 1115 + resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} 1116 + engines: {node: '>=14.14'} 1117 + 1118 + function-bind@1.1.2: 1119 + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1120 + 1121 + fuzzysort@3.1.0: 1122 + resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==} 1123 + 1124 + fzf@0.5.2: 1125 + resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==} 1126 + 1127 + gensync@1.0.0-beta.2: 1128 + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1129 + engines: {node: '>=6.9.0'} 1130 + 1131 + get-caller-file@2.0.5: 1132 + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1133 + engines: {node: 6.* || 8.* || >= 10.*} 1134 + 1135 + get-east-asian-width@1.4.0: 1136 + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} 1137 + engines: {node: '>=18'} 1138 + 1139 + get-intrinsic@1.3.0: 1140 + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 1141 + engines: {node: '>= 0.4'} 1142 + 1143 + get-own-enumerable-keys@1.0.0: 1144 + resolution: {integrity: sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==} 1145 + engines: {node: '>=14.16'} 1146 + 1147 + get-proto@1.0.1: 1148 + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 1149 + engines: {node: '>= 0.4'} 1150 + 1151 + get-stream@6.0.1: 1152 + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1153 + engines: {node: '>=10'} 1154 + 1155 + get-stream@9.0.1: 1156 + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} 1157 + engines: {node: '>=18'} 1158 + 1159 + glob-parent@5.1.2: 1160 + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1161 + engines: {node: '>= 6'} 1162 + 1163 + gopd@1.2.0: 1164 + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 1165 + engines: {node: '>= 0.4'} 1166 + 450 1167 graceful-fs@4.2.11: 451 1168 resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 452 1169 1170 + graphql@16.12.0: 1171 + resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} 1172 + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} 1173 + 1174 + has-symbols@1.1.0: 1175 + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 1176 + engines: {node: '>= 0.4'} 1177 + 1178 + hasown@2.0.2: 1179 + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1180 + engines: {node: '>= 0.4'} 1181 + 1182 + headers-polyfill@4.0.3: 1183 + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} 1184 + 1185 + hono@4.11.9: 1186 + resolution: {integrity: sha512-Eaw2YTGM6WOxA6CXbckaEvslr2Ne4NFsKrvc0v97JD5awbmeBLO5w9Ho9L9kmKonrwF9RJlW6BxT1PVv/agBHQ==} 1187 + engines: {node: '>=16.9.0'} 1188 + 1189 + http-errors@2.0.1: 1190 + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} 1191 + engines: {node: '>= 0.8'} 1192 + 1193 + https-proxy-agent@7.0.6: 1194 + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} 1195 + engines: {node: '>= 14'} 1196 + 1197 + human-signals@2.1.0: 1198 + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1199 + engines: {node: '>=10.17.0'} 1200 + 1201 + human-signals@8.0.1: 1202 + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} 1203 + engines: {node: '>=18.18.0'} 1204 + 1205 + iconv-lite@0.7.2: 1206 + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} 1207 + engines: {node: '>=0.10.0'} 1208 + 1209 + ignore@5.3.2: 1210 + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1211 + engines: {node: '>= 4'} 1212 + 1213 + import-fresh@3.3.1: 1214 + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1215 + engines: {node: '>=6'} 1216 + 1217 + inherits@2.0.4: 1218 + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1219 + 1220 + ip-address@10.0.1: 1221 + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} 1222 + engines: {node: '>= 12'} 1223 + 1224 + ipaddr.js@1.9.1: 1225 + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 1226 + engines: {node: '>= 0.10'} 1227 + 1228 + is-arrayish@0.2.1: 1229 + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1230 + 1231 + is-docker@3.0.0: 1232 + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} 1233 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1234 + hasBin: true 1235 + 1236 + is-extglob@2.1.1: 1237 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1238 + engines: {node: '>=0.10.0'} 1239 + 1240 + is-fullwidth-code-point@3.0.0: 1241 + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1242 + engines: {node: '>=8'} 1243 + 1244 + is-glob@4.0.3: 1245 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1246 + engines: {node: '>=0.10.0'} 1247 + 1248 + is-in-ssh@1.0.0: 1249 + resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==} 1250 + engines: {node: '>=20'} 1251 + 1252 + is-inside-container@1.0.0: 1253 + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 1254 + engines: {node: '>=14.16'} 1255 + hasBin: true 1256 + 1257 + is-interactive@2.0.0: 1258 + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} 1259 + engines: {node: '>=12'} 1260 + 1261 + is-node-process@1.2.0: 1262 + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} 1263 + 1264 + is-number@7.0.0: 1265 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1266 + engines: {node: '>=0.12.0'} 1267 + 1268 + is-obj@3.0.0: 1269 + resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} 1270 + engines: {node: '>=12'} 1271 + 1272 + is-plain-obj@4.1.0: 1273 + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 1274 + engines: {node: '>=12'} 1275 + 1276 + is-promise@4.0.0: 1277 + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} 1278 + 1279 + is-regexp@3.1.0: 1280 + resolution: {integrity: sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==} 1281 + engines: {node: '>=12'} 1282 + 1283 + is-stream@2.0.1: 1284 + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1285 + engines: {node: '>=8'} 1286 + 1287 + is-stream@4.0.1: 1288 + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} 1289 + engines: {node: '>=18'} 1290 + 1291 + is-unicode-supported@1.3.0: 1292 + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} 1293 + engines: {node: '>=12'} 1294 + 1295 + is-unicode-supported@2.1.0: 1296 + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} 1297 + engines: {node: '>=18'} 1298 + 1299 + is-wsl@3.1.0: 1300 + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} 1301 + engines: {node: '>=16'} 1302 + 1303 + isexe@2.0.0: 1304 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1305 + 1306 + isexe@3.1.4: 1307 + resolution: {integrity: sha512-jCErc4h4RnTPjFq53G4whhjAMbUAqinGrCrTT4dmMNyi4zTthK+wphqbRLJtL4BN/Mq7Zzltr0m/b1X0m7PGFQ==} 1308 + engines: {node: '>=20'} 1309 + 453 1310 jiti@2.6.1: 454 1311 resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 455 1312 hasBin: true 456 1313 1314 + jose@6.1.3: 1315 + resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} 1316 + 1317 + js-tokens@4.0.0: 1318 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1319 + 1320 + js-yaml@4.1.1: 1321 + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} 1322 + hasBin: true 1323 + 1324 + jsesc@3.1.0: 1325 + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1326 + engines: {node: '>=6'} 1327 + hasBin: true 1328 + 1329 + json-parse-even-better-errors@2.3.1: 1330 + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1331 + 1332 + json-schema-traverse@1.0.0: 1333 + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 1334 + 1335 + json-schema-typed@8.0.2: 1336 + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} 1337 + 1338 + json5@2.2.3: 1339 + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1340 + engines: {node: '>=6'} 1341 + hasBin: true 1342 + 1343 + jsonfile@6.2.0: 1344 + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} 1345 + 1346 + kleur@3.0.3: 1347 + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1348 + engines: {node: '>=6'} 1349 + 1350 + kleur@4.1.5: 1351 + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1352 + engines: {node: '>=6'} 1353 + 457 1354 lightningcss-android-arm64@1.30.2: 458 1355 resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} 459 1356 engines: {node: '>= 12.0.0'} ··· 524 1421 resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} 525 1422 engines: {node: '>= 12.0.0'} 526 1423 1424 + lines-and-columns@1.2.4: 1425 + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1426 + 1427 + log-symbols@6.0.0: 1428 + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} 1429 + engines: {node: '>=18'} 1430 + 1431 + lru-cache@5.1.1: 1432 + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1433 + 527 1434 magic-string@0.30.21: 528 1435 resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 1436 + 1437 + math-intrinsics@1.1.0: 1438 + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1439 + engines: {node: '>= 0.4'} 1440 + 1441 + media-typer@1.1.0: 1442 + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} 1443 + engines: {node: '>= 0.8'} 1444 + 1445 + merge-descriptors@2.0.0: 1446 + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} 1447 + engines: {node: '>=18'} 1448 + 1449 + merge-stream@2.0.0: 1450 + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1451 + 1452 + merge2@1.4.1: 1453 + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1454 + engines: {node: '>= 8'} 1455 + 1456 + micromatch@4.0.8: 1457 + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1458 + engines: {node: '>=8.6'} 1459 + 1460 + mime-db@1.54.0: 1461 + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} 1462 + engines: {node: '>= 0.6'} 1463 + 1464 + mime-types@3.0.2: 1465 + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} 1466 + engines: {node: '>=18'} 1467 + 1468 + mimic-fn@2.1.0: 1469 + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1470 + engines: {node: '>=6'} 1471 + 1472 + mimic-function@5.0.1: 1473 + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} 1474 + engines: {node: '>=18'} 1475 + 1476 + minimatch@10.1.2: 1477 + resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} 1478 + engines: {node: 20 || >=22} 1479 + 1480 + minimist@1.2.8: 1481 + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1482 + 1483 + ms@2.1.3: 1484 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1485 + 1486 + msw@2.12.9: 1487 + resolution: {integrity: sha512-NYbi51C6M3dujGmcmuGemu68jy12KqQPoVWGeroKToLGsBgrwG5ErM8WctoIIg49/EV49SEvYM9WSqO4G7kNeQ==} 1488 + engines: {node: '>=18'} 1489 + hasBin: true 1490 + peerDependencies: 1491 + typescript: '>= 4.8.x' 1492 + peerDependenciesMeta: 1493 + typescript: 1494 + optional: true 1495 + 1496 + mute-stream@2.0.0: 1497 + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} 1498 + engines: {node: ^18.17.0 || >=20.5.0} 529 1499 530 1500 nanoid@3.3.11: 531 1501 resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 532 1502 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 533 1503 hasBin: true 534 1504 1505 + negotiator@1.0.0: 1506 + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} 1507 + engines: {node: '>= 0.6'} 1508 + 535 1509 next@16.1.6: 536 1510 resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==} 537 1511 engines: {node: '>=20.9.0'} ··· 553 1527 sass: 554 1528 optional: true 555 1529 1530 + node-domexception@1.0.0: 1531 + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 1532 + engines: {node: '>=10.5.0'} 1533 + deprecated: Use your platform's native DOMException instead 1534 + 1535 + node-fetch@3.3.2: 1536 + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} 1537 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1538 + 1539 + node-releases@2.0.27: 1540 + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} 1541 + 1542 + npm-run-path@4.0.1: 1543 + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1544 + engines: {node: '>=8'} 1545 + 1546 + npm-run-path@6.0.0: 1547 + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} 1548 + engines: {node: '>=18'} 1549 + 1550 + object-assign@4.1.1: 1551 + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1552 + engines: {node: '>=0.10.0'} 1553 + 1554 + object-inspect@1.13.4: 1555 + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1556 + engines: {node: '>= 0.4'} 1557 + 1558 + object-treeify@1.1.33: 1559 + resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} 1560 + engines: {node: '>= 10'} 1561 + 1562 + on-finished@2.4.1: 1563 + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 1564 + engines: {node: '>= 0.8'} 1565 + 1566 + once@1.4.0: 1567 + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1568 + 1569 + onetime@5.1.2: 1570 + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1571 + engines: {node: '>=6'} 1572 + 1573 + onetime@7.0.0: 1574 + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} 1575 + engines: {node: '>=18'} 1576 + 1577 + open@11.0.0: 1578 + resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} 1579 + engines: {node: '>=20'} 1580 + 1581 + ora@8.2.0: 1582 + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} 1583 + engines: {node: '>=18'} 1584 + 1585 + outvariant@1.4.3: 1586 + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} 1587 + 1588 + package-manager-detector@1.6.0: 1589 + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} 1590 + 1591 + parent-module@1.0.1: 1592 + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1593 + engines: {node: '>=6'} 1594 + 1595 + parse-json@5.2.0: 1596 + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1597 + engines: {node: '>=8'} 1598 + 1599 + parse-ms@4.0.0: 1600 + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} 1601 + engines: {node: '>=18'} 1602 + 1603 + parseurl@1.3.3: 1604 + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 1605 + engines: {node: '>= 0.8'} 1606 + 1607 + path-browserify@1.0.1: 1608 + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 1609 + 1610 + path-key@3.1.1: 1611 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1612 + engines: {node: '>=8'} 1613 + 1614 + path-key@4.0.0: 1615 + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1616 + engines: {node: '>=12'} 1617 + 1618 + path-to-regexp@6.3.0: 1619 + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} 1620 + 1621 + path-to-regexp@8.3.0: 1622 + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} 1623 + 556 1624 picocolors@1.1.1: 557 1625 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 558 1626 1627 + picomatch@2.3.1: 1628 + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1629 + engines: {node: '>=8.6'} 1630 + 1631 + picomatch@4.0.3: 1632 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1633 + engines: {node: '>=12'} 1634 + 1635 + pkce-challenge@5.0.1: 1636 + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} 1637 + engines: {node: '>=16.20.0'} 1638 + 1639 + postcss-selector-parser@7.1.1: 1640 + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} 1641 + engines: {node: '>=4'} 1642 + 559 1643 postcss@8.4.31: 560 1644 resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 561 1645 engines: {node: ^10 || ^12 || >=14} ··· 564 1648 resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 565 1649 engines: {node: ^10 || ^12 || >=14} 566 1650 1651 + powershell-utils@0.1.0: 1652 + resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} 1653 + engines: {node: '>=20'} 1654 + 1655 + pretty-ms@9.3.0: 1656 + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} 1657 + engines: {node: '>=18'} 1658 + 1659 + prompts@2.4.2: 1660 + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1661 + engines: {node: '>= 6'} 1662 + 1663 + proxy-addr@2.0.7: 1664 + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 1665 + engines: {node: '>= 0.10'} 1666 + 1667 + qs@6.14.1: 1668 + resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} 1669 + engines: {node: '>=0.6'} 1670 + 1671 + queue-microtask@1.2.3: 1672 + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1673 + 1674 + range-parser@1.2.1: 1675 + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 1676 + engines: {node: '>= 0.6'} 1677 + 1678 + raw-body@3.0.2: 1679 + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} 1680 + engines: {node: '>= 0.10'} 1681 + 567 1682 react-dom@19.2.3: 568 1683 resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} 569 1684 peerDependencies: ··· 573 1688 resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} 574 1689 engines: {node: '>=0.10.0'} 575 1690 1691 + recast@0.23.11: 1692 + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} 1693 + engines: {node: '>= 4'} 1694 + 1695 + require-directory@2.1.1: 1696 + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1697 + engines: {node: '>=0.10.0'} 1698 + 1699 + require-from-string@2.0.2: 1700 + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 1701 + engines: {node: '>=0.10.0'} 1702 + 1703 + reselect@5.1.1: 1704 + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} 1705 + 1706 + resolve-from@4.0.0: 1707 + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1708 + engines: {node: '>=4'} 1709 + 1710 + restore-cursor@5.1.0: 1711 + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} 1712 + engines: {node: '>=18'} 1713 + 1714 + rettime@0.10.1: 1715 + resolution: {integrity: sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==} 1716 + 1717 + reusify@1.1.0: 1718 + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1719 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1720 + 1721 + router@2.2.0: 1722 + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} 1723 + engines: {node: '>= 18'} 1724 + 1725 + run-applescript@7.1.0: 1726 + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} 1727 + engines: {node: '>=18'} 1728 + 1729 + run-parallel@1.2.0: 1730 + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1731 + 1732 + safer-buffer@2.1.2: 1733 + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1734 + 576 1735 scheduler@0.27.0: 577 1736 resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} 578 1737 1738 + semver@6.3.1: 1739 + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1740 + hasBin: true 1741 + 579 1742 semver@7.7.4: 580 1743 resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} 581 1744 engines: {node: '>=10'} 582 1745 hasBin: true 583 1746 1747 + send@1.2.1: 1748 + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} 1749 + engines: {node: '>= 18'} 1750 + 1751 + serve-static@2.2.1: 1752 + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} 1753 + engines: {node: '>= 18'} 1754 + 1755 + setprototypeof@1.2.0: 1756 + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 1757 + 1758 + shadcn@3.8.4: 1759 + resolution: {integrity: sha512-pSad/m1+PGzB0aLsRBV0EkyGg9al1nJqYUuucg6d8v8xZspPZ5/ehGNEp5M4b1KQYqdO5/gGPbkhVbgmXqG9Pw==} 1760 + hasBin: true 1761 + 584 1762 sharp@0.34.5: 585 1763 resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} 586 1764 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 587 1765 1766 + shebang-command@2.0.0: 1767 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1768 + engines: {node: '>=8'} 1769 + 1770 + shebang-regex@3.0.0: 1771 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1772 + engines: {node: '>=8'} 1773 + 1774 + side-channel-list@1.0.0: 1775 + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1776 + engines: {node: '>= 0.4'} 1777 + 1778 + side-channel-map@1.0.1: 1779 + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1780 + engines: {node: '>= 0.4'} 1781 + 1782 + side-channel-weakmap@1.0.2: 1783 + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1784 + engines: {node: '>= 0.4'} 1785 + 1786 + side-channel@1.1.0: 1787 + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1788 + engines: {node: '>= 0.4'} 1789 + 1790 + signal-exit@3.0.7: 1791 + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1792 + 1793 + signal-exit@4.1.0: 1794 + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1795 + engines: {node: '>=14'} 1796 + 1797 + sisteransi@1.0.5: 1798 + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1799 + 588 1800 source-map-js@1.2.1: 589 1801 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 590 1802 engines: {node: '>=0.10.0'} 591 1803 1804 + source-map@0.6.1: 1805 + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1806 + engines: {node: '>=0.10.0'} 1807 + 1808 + statuses@2.0.2: 1809 + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} 1810 + engines: {node: '>= 0.8'} 1811 + 1812 + stdin-discarder@0.2.2: 1813 + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} 1814 + engines: {node: '>=18'} 1815 + 1816 + strict-event-emitter@0.5.1: 1817 + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} 1818 + 1819 + string-width@4.2.3: 1820 + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1821 + engines: {node: '>=8'} 1822 + 1823 + string-width@7.2.0: 1824 + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} 1825 + engines: {node: '>=18'} 1826 + 1827 + stringify-object@5.0.0: 1828 + resolution: {integrity: sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==} 1829 + engines: {node: '>=14.16'} 1830 + 1831 + strip-ansi@6.0.1: 1832 + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1833 + engines: {node: '>=8'} 1834 + 1835 + strip-ansi@7.1.2: 1836 + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} 1837 + engines: {node: '>=12'} 1838 + 1839 + strip-bom@3.0.0: 1840 + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1841 + engines: {node: '>=4'} 1842 + 1843 + strip-final-newline@2.0.0: 1844 + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1845 + engines: {node: '>=6'} 1846 + 1847 + strip-final-newline@4.0.0: 1848 + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} 1849 + engines: {node: '>=18'} 1850 + 592 1851 styled-jsx@5.1.6: 593 1852 resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} 594 1853 engines: {node: '>= 12.0.0'} ··· 602 1861 babel-plugin-macros: 603 1862 optional: true 604 1863 1864 + tabbable@6.4.0: 1865 + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} 1866 + 1867 + tagged-tag@1.0.0: 1868 + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} 1869 + engines: {node: '>=20'} 1870 + 1871 + tailwind-merge@3.4.0: 1872 + resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} 1873 + 605 1874 tailwindcss@4.1.18: 606 1875 resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} 607 1876 ··· 609 1878 resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} 610 1879 engines: {node: '>=6'} 611 1880 1881 + tiny-invariant@1.3.3: 1882 + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} 1883 + 1884 + tinyexec@1.0.2: 1885 + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} 1886 + engines: {node: '>=18'} 1887 + 1888 + tldts-core@7.0.22: 1889 + resolution: {integrity: sha512-KgbTDC5wzlL6j/x6np6wCnDSMUq4kucHNm00KXPbfNzmllCmtmvtykJHfmgdHntwIeupW04y8s1N/43S1PkQDw==} 1890 + 1891 + tldts@7.0.22: 1892 + resolution: {integrity: sha512-nqpKFC53CgopKPjT6Wfb6tpIcZXHcI6G37hesvikhx0EmUGPkZrujRyAjgnmp1SHNgpQfKVanZ+KfpANFt2Hxw==} 1893 + hasBin: true 1894 + 1895 + to-regex-range@5.0.1: 1896 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1897 + engines: {node: '>=8.0'} 1898 + 1899 + toidentifier@1.0.1: 1900 + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 1901 + engines: {node: '>=0.6'} 1902 + 1903 + tough-cookie@6.0.0: 1904 + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} 1905 + engines: {node: '>=16'} 1906 + 1907 + ts-morph@26.0.0: 1908 + resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} 1909 + 1910 + tsconfig-paths@4.2.0: 1911 + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} 1912 + engines: {node: '>=6'} 1913 + 612 1914 tslib@2.8.1: 613 1915 resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 614 1916 1917 + tw-animate-css@1.4.0: 1918 + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} 1919 + 1920 + type-fest@5.4.4: 1921 + resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==} 1922 + engines: {node: '>=20'} 1923 + 1924 + type-is@2.0.1: 1925 + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} 1926 + engines: {node: '>= 0.6'} 1927 + 615 1928 typescript@5.9.3: 616 1929 resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 617 1930 engines: {node: '>=14.17'} ··· 620 1933 undici-types@6.21.0: 621 1934 resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 622 1935 1936 + unicorn-magic@0.3.0: 1937 + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} 1938 + engines: {node: '>=18'} 1939 + 1940 + universalify@2.0.1: 1941 + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 1942 + engines: {node: '>= 10.0.0'} 1943 + 1944 + unpipe@1.0.0: 1945 + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 1946 + engines: {node: '>= 0.8'} 1947 + 1948 + until-async@3.0.2: 1949 + resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} 1950 + 1951 + update-browserslist-db@1.2.3: 1952 + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} 1953 + hasBin: true 1954 + peerDependencies: 1955 + browserslist: '>= 4.21.0' 1956 + 1957 + use-sync-external-store@1.6.0: 1958 + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} 1959 + peerDependencies: 1960 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 1961 + 1962 + util-deprecate@1.0.2: 1963 + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1964 + 1965 + validate-npm-package-name@7.0.2: 1966 + resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} 1967 + engines: {node: ^20.17.0 || >=22.9.0} 1968 + 1969 + vary@1.1.2: 1970 + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 1971 + engines: {node: '>= 0.8'} 1972 + 1973 + web-streams-polyfill@3.3.3: 1974 + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} 1975 + engines: {node: '>= 8'} 1976 + 1977 + which@2.0.2: 1978 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1979 + engines: {node: '>= 8'} 1980 + hasBin: true 1981 + 1982 + which@4.0.0: 1983 + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} 1984 + engines: {node: ^16.13.0 || >=18.0.0} 1985 + hasBin: true 1986 + 1987 + wrap-ansi@6.2.0: 1988 + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 1989 + engines: {node: '>=8'} 1990 + 1991 + wrap-ansi@7.0.0: 1992 + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1993 + engines: {node: '>=10'} 1994 + 1995 + wrappy@1.0.2: 1996 + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1997 + 1998 + wsl-utils@0.3.1: 1999 + resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} 2000 + engines: {node: '>=20'} 2001 + 2002 + y18n@5.0.8: 2003 + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2004 + engines: {node: '>=10'} 2005 + 2006 + yallist@3.1.1: 2007 + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 2008 + 2009 + yargs-parser@21.1.1: 2010 + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 2011 + engines: {node: '>=12'} 2012 + 2013 + yargs@17.7.2: 2014 + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 2015 + engines: {node: '>=12'} 2016 + 2017 + yoctocolors-cjs@2.1.3: 2018 + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} 2019 + engines: {node: '>=18'} 2020 + 2021 + yoctocolors@2.1.2: 2022 + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} 2023 + engines: {node: '>=18'} 2024 + 2025 + zod-to-json-schema@3.25.1: 2026 + resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} 2027 + peerDependencies: 2028 + zod: ^3.25 || ^4 2029 + 2030 + zod@3.25.76: 2031 + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} 2032 + 623 2033 snapshots: 624 2034 625 2035 '@alloc/quick-lru@5.2.0': {} 626 2036 2037 + '@antfu/ni@25.0.0': 2038 + dependencies: 2039 + ansis: 4.2.0 2040 + fzf: 0.5.2 2041 + package-manager-detector: 1.6.0 2042 + tinyexec: 1.0.2 2043 + 2044 + '@babel/code-frame@7.29.0': 2045 + dependencies: 2046 + '@babel/helper-validator-identifier': 7.28.5 2047 + js-tokens: 4.0.0 2048 + picocolors: 1.1.1 2049 + 2050 + '@babel/compat-data@7.29.0': {} 2051 + 2052 + '@babel/core@7.29.0': 2053 + dependencies: 2054 + '@babel/code-frame': 7.29.0 2055 + '@babel/generator': 7.29.1 2056 + '@babel/helper-compilation-targets': 7.28.6 2057 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) 2058 + '@babel/helpers': 7.28.6 2059 + '@babel/parser': 7.29.0 2060 + '@babel/template': 7.28.6 2061 + '@babel/traverse': 7.29.0 2062 + '@babel/types': 7.29.0 2063 + '@jridgewell/remapping': 2.3.5 2064 + convert-source-map: 2.0.0 2065 + debug: 4.4.3 2066 + gensync: 1.0.0-beta.2 2067 + json5: 2.2.3 2068 + semver: 6.3.1 2069 + transitivePeerDependencies: 2070 + - supports-color 2071 + 2072 + '@babel/generator@7.29.1': 2073 + dependencies: 2074 + '@babel/parser': 7.29.0 2075 + '@babel/types': 7.29.0 2076 + '@jridgewell/gen-mapping': 0.3.13 2077 + '@jridgewell/trace-mapping': 0.3.31 2078 + jsesc: 3.1.0 2079 + 2080 + '@babel/helper-annotate-as-pure@7.27.3': 2081 + dependencies: 2082 + '@babel/types': 7.29.0 2083 + 2084 + '@babel/helper-compilation-targets@7.28.6': 2085 + dependencies: 2086 + '@babel/compat-data': 7.29.0 2087 + '@babel/helper-validator-option': 7.27.1 2088 + browserslist: 4.28.1 2089 + lru-cache: 5.1.1 2090 + semver: 6.3.1 2091 + 2092 + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': 2093 + dependencies: 2094 + '@babel/core': 7.29.0 2095 + '@babel/helper-annotate-as-pure': 7.27.3 2096 + '@babel/helper-member-expression-to-functions': 7.28.5 2097 + '@babel/helper-optimise-call-expression': 7.27.1 2098 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) 2099 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 2100 + '@babel/traverse': 7.29.0 2101 + semver: 6.3.1 2102 + transitivePeerDependencies: 2103 + - supports-color 2104 + 2105 + '@babel/helper-globals@7.28.0': {} 2106 + 2107 + '@babel/helper-member-expression-to-functions@7.28.5': 2108 + dependencies: 2109 + '@babel/traverse': 7.29.0 2110 + '@babel/types': 7.29.0 2111 + transitivePeerDependencies: 2112 + - supports-color 2113 + 2114 + '@babel/helper-module-imports@7.28.6': 2115 + dependencies: 2116 + '@babel/traverse': 7.29.0 2117 + '@babel/types': 7.29.0 2118 + transitivePeerDependencies: 2119 + - supports-color 2120 + 2121 + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': 2122 + dependencies: 2123 + '@babel/core': 7.29.0 2124 + '@babel/helper-module-imports': 7.28.6 2125 + '@babel/helper-validator-identifier': 7.28.5 2126 + '@babel/traverse': 7.29.0 2127 + transitivePeerDependencies: 2128 + - supports-color 2129 + 2130 + '@babel/helper-optimise-call-expression@7.27.1': 2131 + dependencies: 2132 + '@babel/types': 7.29.0 2133 + 2134 + '@babel/helper-plugin-utils@7.28.6': {} 2135 + 2136 + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': 2137 + dependencies: 2138 + '@babel/core': 7.29.0 2139 + '@babel/helper-member-expression-to-functions': 7.28.5 2140 + '@babel/helper-optimise-call-expression': 7.27.1 2141 + '@babel/traverse': 7.29.0 2142 + transitivePeerDependencies: 2143 + - supports-color 2144 + 2145 + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': 2146 + dependencies: 2147 + '@babel/traverse': 7.29.0 2148 + '@babel/types': 7.29.0 2149 + transitivePeerDependencies: 2150 + - supports-color 2151 + 627 2152 '@babel/helper-string-parser@7.27.1': {} 628 2153 629 2154 '@babel/helper-validator-identifier@7.28.5': {} 630 2155 2156 + '@babel/helper-validator-option@7.27.1': {} 2157 + 2158 + '@babel/helpers@7.28.6': 2159 + dependencies: 2160 + '@babel/template': 7.28.6 2161 + '@babel/types': 7.29.0 2162 + 2163 + '@babel/parser@7.29.0': 2164 + dependencies: 2165 + '@babel/types': 7.29.0 2166 + 2167 + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': 2168 + dependencies: 2169 + '@babel/core': 7.29.0 2170 + '@babel/helper-plugin-utils': 7.28.6 2171 + 2172 + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': 2173 + dependencies: 2174 + '@babel/core': 7.29.0 2175 + '@babel/helper-plugin-utils': 7.28.6 2176 + 2177 + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': 2178 + dependencies: 2179 + '@babel/core': 7.29.0 2180 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) 2181 + '@babel/helper-plugin-utils': 7.28.6 2182 + transitivePeerDependencies: 2183 + - supports-color 2184 + 2185 + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': 2186 + dependencies: 2187 + '@babel/core': 7.29.0 2188 + '@babel/helper-annotate-as-pure': 7.27.3 2189 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) 2190 + '@babel/helper-plugin-utils': 7.28.6 2191 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 2192 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) 2193 + transitivePeerDependencies: 2194 + - supports-color 2195 + 2196 + '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': 2197 + dependencies: 2198 + '@babel/core': 7.29.0 2199 + '@babel/helper-plugin-utils': 7.28.6 2200 + '@babel/helper-validator-option': 7.27.1 2201 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) 2202 + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) 2203 + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) 2204 + transitivePeerDependencies: 2205 + - supports-color 2206 + 2207 + '@babel/runtime@7.28.6': {} 2208 + 2209 + '@babel/template@7.28.6': 2210 + dependencies: 2211 + '@babel/code-frame': 7.29.0 2212 + '@babel/parser': 7.29.0 2213 + '@babel/types': 7.29.0 2214 + 2215 + '@babel/traverse@7.29.0': 2216 + dependencies: 2217 + '@babel/code-frame': 7.29.0 2218 + '@babel/generator': 7.29.1 2219 + '@babel/helper-globals': 7.28.0 2220 + '@babel/parser': 7.29.0 2221 + '@babel/template': 7.28.6 2222 + '@babel/types': 7.29.0 2223 + debug: 4.4.3 2224 + transitivePeerDependencies: 2225 + - supports-color 2226 + 631 2227 '@babel/types@7.29.0': 632 2228 dependencies: 633 2229 '@babel/helper-string-parser': 7.27.1 634 2230 '@babel/helper-validator-identifier': 7.28.5 635 2231 2232 + '@base-ui/react@1.1.0(@types/react@19.2.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': 2233 + dependencies: 2234 + '@babel/runtime': 7.28.6 2235 + '@base-ui/utils': 0.2.4(@types/react@19.2.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) 2236 + '@floating-ui/react-dom': 2.1.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) 2237 + '@floating-ui/utils': 0.2.10 2238 + react: 19.2.3 2239 + react-dom: 19.2.3(react@19.2.3) 2240 + reselect: 5.1.1 2241 + tabbable: 6.4.0 2242 + use-sync-external-store: 1.6.0(react@19.2.3) 2243 + optionalDependencies: 2244 + '@types/react': 19.2.13 2245 + 2246 + '@base-ui/utils@0.2.4(@types/react@19.2.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': 2247 + dependencies: 2248 + '@babel/runtime': 7.28.6 2249 + '@floating-ui/utils': 0.2.10 2250 + react: 19.2.3 2251 + react-dom: 19.2.3(react@19.2.3) 2252 + reselect: 5.1.1 2253 + use-sync-external-store: 1.6.0(react@19.2.3) 2254 + optionalDependencies: 2255 + '@types/react': 19.2.13 2256 + 636 2257 '@biomejs/biome@2.2.0': 637 2258 optionalDependencies: 638 2259 '@biomejs/cli-darwin-arm64': 2.2.0 ··· 668 2289 '@biomejs/cli-win32-x64@2.2.0': 669 2290 optional: true 670 2291 2292 + '@dotenvx/dotenvx@1.52.0': 2293 + dependencies: 2294 + commander: 11.1.0 2295 + dotenv: 17.2.4 2296 + eciesjs: 0.4.17 2297 + execa: 5.1.1 2298 + fdir: 6.5.0(picomatch@4.0.3) 2299 + ignore: 5.3.2 2300 + object-treeify: 1.1.33 2301 + picomatch: 4.0.3 2302 + which: 4.0.0 2303 + 2304 + '@ecies/ciphers@0.2.5(@noble/ciphers@1.3.0)': 2305 + dependencies: 2306 + '@noble/ciphers': 1.3.0 2307 + 671 2308 '@emnapi/runtime@1.8.1': 672 2309 dependencies: 673 2310 tslib: 2.8.1 674 2311 optional: true 2312 + 2313 + '@floating-ui/core@1.7.4': 2314 + dependencies: 2315 + '@floating-ui/utils': 0.2.10 2316 + 2317 + '@floating-ui/dom@1.7.5': 2318 + dependencies: 2319 + '@floating-ui/core': 1.7.4 2320 + '@floating-ui/utils': 0.2.10 2321 + 2322 + '@floating-ui/react-dom@2.1.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': 2323 + dependencies: 2324 + '@floating-ui/dom': 1.7.5 2325 + react: 19.2.3 2326 + react-dom: 19.2.3(react@19.2.3) 2327 + 2328 + '@floating-ui/utils@0.2.10': {} 2329 + 2330 + '@hono/node-server@1.19.9(hono@4.11.9)': 2331 + dependencies: 2332 + hono: 4.11.9 2333 + 2334 + '@hugeicons/core-free-icons@3.1.1': {} 2335 + 2336 + '@hugeicons/react@1.1.5(react@19.2.3)': 2337 + dependencies: 2338 + react: 19.2.3 675 2339 676 2340 '@img/colour@1.0.0': 677 2341 optional: true ··· 770 2434 '@img/sharp-win32-x64@0.34.5': 771 2435 optional: true 772 2436 2437 + '@inquirer/ansi@1.0.2': {} 2438 + 2439 + '@inquirer/confirm@5.1.21(@types/node@20.19.33)': 2440 + dependencies: 2441 + '@inquirer/core': 10.3.2(@types/node@20.19.33) 2442 + '@inquirer/type': 3.0.10(@types/node@20.19.33) 2443 + optionalDependencies: 2444 + '@types/node': 20.19.33 2445 + 2446 + '@inquirer/core@10.3.2(@types/node@20.19.33)': 2447 + dependencies: 2448 + '@inquirer/ansi': 1.0.2 2449 + '@inquirer/figures': 1.0.15 2450 + '@inquirer/type': 3.0.10(@types/node@20.19.33) 2451 + cli-width: 4.1.0 2452 + mute-stream: 2.0.0 2453 + signal-exit: 4.1.0 2454 + wrap-ansi: 6.2.0 2455 + yoctocolors-cjs: 2.1.3 2456 + optionalDependencies: 2457 + '@types/node': 20.19.33 2458 + 2459 + '@inquirer/figures@1.0.15': {} 2460 + 2461 + '@inquirer/type@3.0.10(@types/node@20.19.33)': 2462 + optionalDependencies: 2463 + '@types/node': 20.19.33 2464 + 2465 + '@isaacs/balanced-match@4.0.1': {} 2466 + 2467 + '@isaacs/brace-expansion@5.0.1': 2468 + dependencies: 2469 + '@isaacs/balanced-match': 4.0.1 2470 + 773 2471 '@jridgewell/gen-mapping@0.3.13': 774 2472 dependencies: 775 2473 '@jridgewell/sourcemap-codec': 1.5.5 ··· 789 2487 '@jridgewell/resolve-uri': 3.1.2 790 2488 '@jridgewell/sourcemap-codec': 1.5.5 791 2489 2490 + '@modelcontextprotocol/sdk@1.26.0(zod@3.25.76)': 2491 + dependencies: 2492 + '@hono/node-server': 1.19.9(hono@4.11.9) 2493 + ajv: 8.17.1 2494 + ajv-formats: 3.0.1(ajv@8.17.1) 2495 + content-type: 1.0.5 2496 + cors: 2.8.6 2497 + cross-spawn: 7.0.6 2498 + eventsource: 3.0.7 2499 + eventsource-parser: 3.0.6 2500 + express: 5.2.1 2501 + express-rate-limit: 8.2.1(express@5.2.1) 2502 + hono: 4.11.9 2503 + jose: 6.1.3 2504 + json-schema-typed: 8.0.2 2505 + pkce-challenge: 5.0.1 2506 + raw-body: 3.0.2 2507 + zod: 3.25.76 2508 + zod-to-json-schema: 3.25.1(zod@3.25.76) 2509 + transitivePeerDependencies: 2510 + - supports-color 2511 + 2512 + '@mswjs/interceptors@0.41.2': 2513 + dependencies: 2514 + '@open-draft/deferred-promise': 2.2.0 2515 + '@open-draft/logger': 0.3.0 2516 + '@open-draft/until': 2.1.0 2517 + is-node-process: 1.2.0 2518 + outvariant: 1.4.3 2519 + strict-event-emitter: 0.5.1 2520 + 792 2521 '@next/env@16.1.6': {} 793 2522 794 2523 '@next/swc-darwin-arm64@16.1.6': ··· 814 2543 815 2544 '@next/swc-win32-x64-msvc@16.1.6': 816 2545 optional: true 2546 + 2547 + '@noble/ciphers@1.3.0': {} 2548 + 2549 + '@noble/curves@1.9.7': 2550 + dependencies: 2551 + '@noble/hashes': 1.8.0 2552 + 2553 + '@noble/hashes@1.8.0': {} 2554 + 2555 + '@nodelib/fs.scandir@2.1.5': 2556 + dependencies: 2557 + '@nodelib/fs.stat': 2.0.5 2558 + run-parallel: 1.2.0 2559 + 2560 + '@nodelib/fs.stat@2.0.5': {} 2561 + 2562 + '@nodelib/fs.walk@1.2.8': 2563 + dependencies: 2564 + '@nodelib/fs.scandir': 2.1.5 2565 + fastq: 1.20.1 2566 + 2567 + '@open-draft/deferred-promise@2.2.0': {} 2568 + 2569 + '@open-draft/logger@0.3.0': 2570 + dependencies: 2571 + is-node-process: 1.2.0 2572 + outvariant: 1.4.3 2573 + 2574 + '@open-draft/until@2.1.0': {} 2575 + 2576 + '@sec-ant/readable-stream@0.4.1': {} 2577 + 2578 + '@sindresorhus/merge-streams@4.0.0': {} 817 2579 818 2580 '@swc/helpers@0.5.15': 819 2581 dependencies: ··· 888 2650 postcss: 8.5.6 889 2651 tailwindcss: 4.1.18 890 2652 2653 + '@ts-morph/common@0.27.0': 2654 + dependencies: 2655 + fast-glob: 3.3.3 2656 + minimatch: 10.1.2 2657 + path-browserify: 1.0.1 2658 + 891 2659 '@types/node@20.19.33': 892 2660 dependencies: 893 2661 undici-types: 6.21.0 ··· 900 2668 dependencies: 901 2669 csstype: 3.2.3 902 2670 2671 + '@types/statuses@2.0.6': {} 2672 + 2673 + '@types/validate-npm-package-name@4.0.2': {} 2674 + 2675 + accepts@2.0.0: 2676 + dependencies: 2677 + mime-types: 3.0.2 2678 + negotiator: 1.0.0 2679 + 2680 + agent-base@7.1.4: {} 2681 + 2682 + ajv-formats@3.0.1(ajv@8.17.1): 2683 + optionalDependencies: 2684 + ajv: 8.17.1 2685 + 2686 + ajv@8.17.1: 2687 + dependencies: 2688 + fast-deep-equal: 3.1.3 2689 + fast-uri: 3.1.0 2690 + json-schema-traverse: 1.0.0 2691 + require-from-string: 2.0.2 2692 + 2693 + ansi-regex@5.0.1: {} 2694 + 2695 + ansi-regex@6.2.2: {} 2696 + 2697 + ansi-styles@4.3.0: 2698 + dependencies: 2699 + color-convert: 2.0.1 2700 + 2701 + ansis@4.2.0: {} 2702 + 2703 + argparse@2.0.1: {} 2704 + 2705 + ast-types@0.16.1: 2706 + dependencies: 2707 + tslib: 2.8.1 2708 + 903 2709 babel-plugin-react-compiler@1.0.0: 904 2710 dependencies: 905 2711 '@babel/types': 7.29.0 906 2712 907 2713 baseline-browser-mapping@2.9.19: {} 908 2714 2715 + body-parser@2.2.2: 2716 + dependencies: 2717 + bytes: 3.1.2 2718 + content-type: 1.0.5 2719 + debug: 4.4.3 2720 + http-errors: 2.0.1 2721 + iconv-lite: 0.7.2 2722 + on-finished: 2.4.1 2723 + qs: 6.14.1 2724 + raw-body: 3.0.2 2725 + type-is: 2.0.1 2726 + transitivePeerDependencies: 2727 + - supports-color 2728 + 2729 + braces@3.0.3: 2730 + dependencies: 2731 + fill-range: 7.1.1 2732 + 2733 + browserslist@4.28.1: 2734 + dependencies: 2735 + baseline-browser-mapping: 2.9.19 2736 + caniuse-lite: 1.0.30001769 2737 + electron-to-chromium: 1.5.286 2738 + node-releases: 2.0.27 2739 + update-browserslist-db: 1.2.3(browserslist@4.28.1) 2740 + 2741 + bundle-name@4.1.0: 2742 + dependencies: 2743 + run-applescript: 7.1.0 2744 + 2745 + bytes@3.1.2: {} 2746 + 2747 + call-bind-apply-helpers@1.0.2: 2748 + dependencies: 2749 + es-errors: 1.3.0 2750 + function-bind: 1.1.2 2751 + 2752 + call-bound@1.0.4: 2753 + dependencies: 2754 + call-bind-apply-helpers: 1.0.2 2755 + get-intrinsic: 1.3.0 2756 + 2757 + callsites@3.1.0: {} 2758 + 909 2759 caniuse-lite@1.0.30001769: {} 910 2760 2761 + chalk@5.6.2: {} 2762 + 2763 + class-variance-authority@0.7.1: 2764 + dependencies: 2765 + clsx: 2.1.1 2766 + 2767 + cli-cursor@5.0.0: 2768 + dependencies: 2769 + restore-cursor: 5.1.0 2770 + 2771 + cli-spinners@2.9.2: {} 2772 + 2773 + cli-width@4.1.0: {} 2774 + 911 2775 client-only@0.0.1: {} 912 2776 2777 + cliui@8.0.1: 2778 + dependencies: 2779 + string-width: 4.2.3 2780 + strip-ansi: 6.0.1 2781 + wrap-ansi: 7.0.0 2782 + 2783 + clsx@2.1.1: {} 2784 + 2785 + code-block-writer@13.0.3: {} 2786 + 2787 + color-convert@2.0.1: 2788 + dependencies: 2789 + color-name: 1.1.4 2790 + 2791 + color-name@1.1.4: {} 2792 + 2793 + commander@11.1.0: {} 2794 + 2795 + commander@14.0.3: {} 2796 + 2797 + content-disposition@1.0.1: {} 2798 + 2799 + content-type@1.0.5: {} 2800 + 2801 + convert-source-map@2.0.0: {} 2802 + 2803 + cookie-signature@1.2.2: {} 2804 + 2805 + cookie@0.7.2: {} 2806 + 2807 + cookie@1.1.1: {} 2808 + 2809 + cors@2.8.6: 2810 + dependencies: 2811 + object-assign: 4.1.1 2812 + vary: 1.1.2 2813 + 2814 + cosmiconfig@9.0.0(typescript@5.9.3): 2815 + dependencies: 2816 + env-paths: 2.2.1 2817 + import-fresh: 3.3.1 2818 + js-yaml: 4.1.1 2819 + parse-json: 5.2.0 2820 + optionalDependencies: 2821 + typescript: 5.9.3 2822 + 2823 + cross-spawn@7.0.6: 2824 + dependencies: 2825 + path-key: 3.1.1 2826 + shebang-command: 2.0.0 2827 + which: 2.0.2 2828 + 2829 + cssesc@3.0.0: {} 2830 + 913 2831 csstype@3.2.3: {} 914 2832 2833 + data-uri-to-buffer@4.0.1: {} 2834 + 2835 + debug@4.4.3: 2836 + dependencies: 2837 + ms: 2.1.3 2838 + 2839 + dedent@1.7.1: {} 2840 + 2841 + deepmerge@4.3.1: {} 2842 + 2843 + default-browser-id@5.0.1: {} 2844 + 2845 + default-browser@5.5.0: 2846 + dependencies: 2847 + bundle-name: 4.1.0 2848 + default-browser-id: 5.0.1 2849 + 2850 + define-lazy-prop@3.0.0: {} 2851 + 2852 + depd@2.0.0: {} 2853 + 915 2854 detect-libc@2.1.2: {} 916 2855 2856 + diff@8.0.3: {} 2857 + 2858 + dotenv@17.2.4: {} 2859 + 2860 + dunder-proto@1.0.1: 2861 + dependencies: 2862 + call-bind-apply-helpers: 1.0.2 2863 + es-errors: 1.3.0 2864 + gopd: 1.2.0 2865 + 2866 + eciesjs@0.4.17: 2867 + dependencies: 2868 + '@ecies/ciphers': 0.2.5(@noble/ciphers@1.3.0) 2869 + '@noble/ciphers': 1.3.0 2870 + '@noble/curves': 1.9.7 2871 + '@noble/hashes': 1.8.0 2872 + 2873 + ee-first@1.1.1: {} 2874 + 2875 + electron-to-chromium@1.5.286: {} 2876 + 2877 + emoji-regex@10.6.0: {} 2878 + 2879 + emoji-regex@8.0.0: {} 2880 + 2881 + encodeurl@2.0.0: {} 2882 + 917 2883 enhanced-resolve@5.19.0: 918 2884 dependencies: 919 2885 graceful-fs: 4.2.11 920 2886 tapable: 2.3.0 921 2887 2888 + env-paths@2.2.1: {} 2889 + 2890 + error-ex@1.3.4: 2891 + dependencies: 2892 + is-arrayish: 0.2.1 2893 + 2894 + es-define-property@1.0.1: {} 2895 + 2896 + es-errors@1.3.0: {} 2897 + 2898 + es-object-atoms@1.1.1: 2899 + dependencies: 2900 + es-errors: 1.3.0 2901 + 2902 + escalade@3.2.0: {} 2903 + 2904 + escape-html@1.0.3: {} 2905 + 2906 + esprima@4.0.1: {} 2907 + 2908 + etag@1.8.1: {} 2909 + 2910 + eventsource-parser@3.0.6: {} 2911 + 2912 + eventsource@3.0.7: 2913 + dependencies: 2914 + eventsource-parser: 3.0.6 2915 + 2916 + execa@5.1.1: 2917 + dependencies: 2918 + cross-spawn: 7.0.6 2919 + get-stream: 6.0.1 2920 + human-signals: 2.1.0 2921 + is-stream: 2.0.1 2922 + merge-stream: 2.0.0 2923 + npm-run-path: 4.0.1 2924 + onetime: 5.1.2 2925 + signal-exit: 3.0.7 2926 + strip-final-newline: 2.0.0 2927 + 2928 + execa@9.6.1: 2929 + dependencies: 2930 + '@sindresorhus/merge-streams': 4.0.0 2931 + cross-spawn: 7.0.6 2932 + figures: 6.1.0 2933 + get-stream: 9.0.1 2934 + human-signals: 8.0.1 2935 + is-plain-obj: 4.1.0 2936 + is-stream: 4.0.1 2937 + npm-run-path: 6.0.0 2938 + pretty-ms: 9.3.0 2939 + signal-exit: 4.1.0 2940 + strip-final-newline: 4.0.0 2941 + yoctocolors: 2.1.2 2942 + 2943 + express-rate-limit@8.2.1(express@5.2.1): 2944 + dependencies: 2945 + express: 5.2.1 2946 + ip-address: 10.0.1 2947 + 2948 + express@5.2.1: 2949 + dependencies: 2950 + accepts: 2.0.0 2951 + body-parser: 2.2.2 2952 + content-disposition: 1.0.1 2953 + content-type: 1.0.5 2954 + cookie: 0.7.2 2955 + cookie-signature: 1.2.2 2956 + debug: 4.4.3 2957 + depd: 2.0.0 2958 + encodeurl: 2.0.0 2959 + escape-html: 1.0.3 2960 + etag: 1.8.1 2961 + finalhandler: 2.1.1 2962 + fresh: 2.0.0 2963 + http-errors: 2.0.1 2964 + merge-descriptors: 2.0.0 2965 + mime-types: 3.0.2 2966 + on-finished: 2.4.1 2967 + once: 1.4.0 2968 + parseurl: 1.3.3 2969 + proxy-addr: 2.0.7 2970 + qs: 6.14.1 2971 + range-parser: 1.2.1 2972 + router: 2.2.0 2973 + send: 1.2.1 2974 + serve-static: 2.2.1 2975 + statuses: 2.0.2 2976 + type-is: 2.0.1 2977 + vary: 1.1.2 2978 + transitivePeerDependencies: 2979 + - supports-color 2980 + 2981 + fast-deep-equal@3.1.3: {} 2982 + 2983 + fast-glob@3.3.3: 2984 + dependencies: 2985 + '@nodelib/fs.stat': 2.0.5 2986 + '@nodelib/fs.walk': 1.2.8 2987 + glob-parent: 5.1.2 2988 + merge2: 1.4.1 2989 + micromatch: 4.0.8 2990 + 2991 + fast-uri@3.1.0: {} 2992 + 2993 + fastq@1.20.1: 2994 + dependencies: 2995 + reusify: 1.1.0 2996 + 2997 + fdir@6.5.0(picomatch@4.0.3): 2998 + optionalDependencies: 2999 + picomatch: 4.0.3 3000 + 3001 + fetch-blob@3.2.0: 3002 + dependencies: 3003 + node-domexception: 1.0.0 3004 + web-streams-polyfill: 3.3.3 3005 + 3006 + figures@6.1.0: 3007 + dependencies: 3008 + is-unicode-supported: 2.1.0 3009 + 3010 + fill-range@7.1.1: 3011 + dependencies: 3012 + to-regex-range: 5.0.1 3013 + 3014 + finalhandler@2.1.1: 3015 + dependencies: 3016 + debug: 4.4.3 3017 + encodeurl: 2.0.0 3018 + escape-html: 1.0.3 3019 + on-finished: 2.4.1 3020 + parseurl: 1.3.3 3021 + statuses: 2.0.2 3022 + transitivePeerDependencies: 3023 + - supports-color 3024 + 3025 + formdata-polyfill@4.0.10: 3026 + dependencies: 3027 + fetch-blob: 3.2.0 3028 + 3029 + forwarded@0.2.0: {} 3030 + 3031 + fresh@2.0.0: {} 3032 + 3033 + fs-extra@11.3.3: 3034 + dependencies: 3035 + graceful-fs: 4.2.11 3036 + jsonfile: 6.2.0 3037 + universalify: 2.0.1 3038 + 3039 + function-bind@1.1.2: {} 3040 + 3041 + fuzzysort@3.1.0: {} 3042 + 3043 + fzf@0.5.2: {} 3044 + 3045 + gensync@1.0.0-beta.2: {} 3046 + 3047 + get-caller-file@2.0.5: {} 3048 + 3049 + get-east-asian-width@1.4.0: {} 3050 + 3051 + get-intrinsic@1.3.0: 3052 + dependencies: 3053 + call-bind-apply-helpers: 1.0.2 3054 + es-define-property: 1.0.1 3055 + es-errors: 1.3.0 3056 + es-object-atoms: 1.1.1 3057 + function-bind: 1.1.2 3058 + get-proto: 1.0.1 3059 + gopd: 1.2.0 3060 + has-symbols: 1.1.0 3061 + hasown: 2.0.2 3062 + math-intrinsics: 1.1.0 3063 + 3064 + get-own-enumerable-keys@1.0.0: {} 3065 + 3066 + get-proto@1.0.1: 3067 + dependencies: 3068 + dunder-proto: 1.0.1 3069 + es-object-atoms: 1.1.1 3070 + 3071 + get-stream@6.0.1: {} 3072 + 3073 + get-stream@9.0.1: 3074 + dependencies: 3075 + '@sec-ant/readable-stream': 0.4.1 3076 + is-stream: 4.0.1 3077 + 3078 + glob-parent@5.1.2: 3079 + dependencies: 3080 + is-glob: 4.0.3 3081 + 3082 + gopd@1.2.0: {} 3083 + 922 3084 graceful-fs@4.2.11: {} 923 3085 3086 + graphql@16.12.0: {} 3087 + 3088 + has-symbols@1.1.0: {} 3089 + 3090 + hasown@2.0.2: 3091 + dependencies: 3092 + function-bind: 1.1.2 3093 + 3094 + headers-polyfill@4.0.3: {} 3095 + 3096 + hono@4.11.9: {} 3097 + 3098 + http-errors@2.0.1: 3099 + dependencies: 3100 + depd: 2.0.0 3101 + inherits: 2.0.4 3102 + setprototypeof: 1.2.0 3103 + statuses: 2.0.2 3104 + toidentifier: 1.0.1 3105 + 3106 + https-proxy-agent@7.0.6: 3107 + dependencies: 3108 + agent-base: 7.1.4 3109 + debug: 4.4.3 3110 + transitivePeerDependencies: 3111 + - supports-color 3112 + 3113 + human-signals@2.1.0: {} 3114 + 3115 + human-signals@8.0.1: {} 3116 + 3117 + iconv-lite@0.7.2: 3118 + dependencies: 3119 + safer-buffer: 2.1.2 3120 + 3121 + ignore@5.3.2: {} 3122 + 3123 + import-fresh@3.3.1: 3124 + dependencies: 3125 + parent-module: 1.0.1 3126 + resolve-from: 4.0.0 3127 + 3128 + inherits@2.0.4: {} 3129 + 3130 + ip-address@10.0.1: {} 3131 + 3132 + ipaddr.js@1.9.1: {} 3133 + 3134 + is-arrayish@0.2.1: {} 3135 + 3136 + is-docker@3.0.0: {} 3137 + 3138 + is-extglob@2.1.1: {} 3139 + 3140 + is-fullwidth-code-point@3.0.0: {} 3141 + 3142 + is-glob@4.0.3: 3143 + dependencies: 3144 + is-extglob: 2.1.1 3145 + 3146 + is-in-ssh@1.0.0: {} 3147 + 3148 + is-inside-container@1.0.0: 3149 + dependencies: 3150 + is-docker: 3.0.0 3151 + 3152 + is-interactive@2.0.0: {} 3153 + 3154 + is-node-process@1.2.0: {} 3155 + 3156 + is-number@7.0.0: {} 3157 + 3158 + is-obj@3.0.0: {} 3159 + 3160 + is-plain-obj@4.1.0: {} 3161 + 3162 + is-promise@4.0.0: {} 3163 + 3164 + is-regexp@3.1.0: {} 3165 + 3166 + is-stream@2.0.1: {} 3167 + 3168 + is-stream@4.0.1: {} 3169 + 3170 + is-unicode-supported@1.3.0: {} 3171 + 3172 + is-unicode-supported@2.1.0: {} 3173 + 3174 + is-wsl@3.1.0: 3175 + dependencies: 3176 + is-inside-container: 1.0.0 3177 + 3178 + isexe@2.0.0: {} 3179 + 3180 + isexe@3.1.4: {} 3181 + 924 3182 jiti@2.6.1: {} 3183 + 3184 + jose@6.1.3: {} 3185 + 3186 + js-tokens@4.0.0: {} 3187 + 3188 + js-yaml@4.1.1: 3189 + dependencies: 3190 + argparse: 2.0.1 3191 + 3192 + jsesc@3.1.0: {} 3193 + 3194 + json-parse-even-better-errors@2.3.1: {} 3195 + 3196 + json-schema-traverse@1.0.0: {} 3197 + 3198 + json-schema-typed@8.0.2: {} 3199 + 3200 + json5@2.2.3: {} 3201 + 3202 + jsonfile@6.2.0: 3203 + dependencies: 3204 + universalify: 2.0.1 3205 + optionalDependencies: 3206 + graceful-fs: 4.2.11 3207 + 3208 + kleur@3.0.3: {} 3209 + 3210 + kleur@4.1.5: {} 925 3211 926 3212 lightningcss-android-arm64@1.30.2: 927 3213 optional: true ··· 972 3258 lightningcss-win32-arm64-msvc: 1.30.2 973 3259 lightningcss-win32-x64-msvc: 1.30.2 974 3260 3261 + lines-and-columns@1.2.4: {} 3262 + 3263 + log-symbols@6.0.0: 3264 + dependencies: 3265 + chalk: 5.6.2 3266 + is-unicode-supported: 1.3.0 3267 + 3268 + lru-cache@5.1.1: 3269 + dependencies: 3270 + yallist: 3.1.1 3271 + 975 3272 magic-string@0.30.21: 976 3273 dependencies: 977 3274 '@jridgewell/sourcemap-codec': 1.5.5 978 3275 3276 + math-intrinsics@1.1.0: {} 3277 + 3278 + media-typer@1.1.0: {} 3279 + 3280 + merge-descriptors@2.0.0: {} 3281 + 3282 + merge-stream@2.0.0: {} 3283 + 3284 + merge2@1.4.1: {} 3285 + 3286 + micromatch@4.0.8: 3287 + dependencies: 3288 + braces: 3.0.3 3289 + picomatch: 2.3.1 3290 + 3291 + mime-db@1.54.0: {} 3292 + 3293 + mime-types@3.0.2: 3294 + dependencies: 3295 + mime-db: 1.54.0 3296 + 3297 + mimic-fn@2.1.0: {} 3298 + 3299 + mimic-function@5.0.1: {} 3300 + 3301 + minimatch@10.1.2: 3302 + dependencies: 3303 + '@isaacs/brace-expansion': 5.0.1 3304 + 3305 + minimist@1.2.8: {} 3306 + 3307 + ms@2.1.3: {} 3308 + 3309 + msw@2.12.9(@types/node@20.19.33)(typescript@5.9.3): 3310 + dependencies: 3311 + '@inquirer/confirm': 5.1.21(@types/node@20.19.33) 3312 + '@mswjs/interceptors': 0.41.2 3313 + '@open-draft/deferred-promise': 2.2.0 3314 + '@types/statuses': 2.0.6 3315 + cookie: 1.1.1 3316 + graphql: 16.12.0 3317 + headers-polyfill: 4.0.3 3318 + is-node-process: 1.2.0 3319 + outvariant: 1.4.3 3320 + path-to-regexp: 6.3.0 3321 + picocolors: 1.1.1 3322 + rettime: 0.10.1 3323 + statuses: 2.0.2 3324 + strict-event-emitter: 0.5.1 3325 + tough-cookie: 6.0.0 3326 + type-fest: 5.4.4 3327 + until-async: 3.0.2 3328 + yargs: 17.7.2 3329 + optionalDependencies: 3330 + typescript: 5.9.3 3331 + transitivePeerDependencies: 3332 + - '@types/node' 3333 + 3334 + mute-stream@2.0.0: {} 3335 + 979 3336 nanoid@3.3.11: {} 980 3337 981 - next@16.1.6(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): 3338 + negotiator@1.0.0: {} 3339 + 3340 + next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): 982 3341 dependencies: 983 3342 '@next/env': 16.1.6 984 3343 '@swc/helpers': 0.5.15 ··· 987 3346 postcss: 8.4.31 988 3347 react: 19.2.3 989 3348 react-dom: 19.2.3(react@19.2.3) 990 - styled-jsx: 5.1.6(react@19.2.3) 3349 + styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.3) 991 3350 optionalDependencies: 992 3351 '@next/swc-darwin-arm64': 16.1.6 993 3352 '@next/swc-darwin-x64': 16.1.6 ··· 1003 3362 - '@babel/core' 1004 3363 - babel-plugin-macros 1005 3364 3365 + node-domexception@1.0.0: {} 3366 + 3367 + node-fetch@3.3.2: 3368 + dependencies: 3369 + data-uri-to-buffer: 4.0.1 3370 + fetch-blob: 3.2.0 3371 + formdata-polyfill: 4.0.10 3372 + 3373 + node-releases@2.0.27: {} 3374 + 3375 + npm-run-path@4.0.1: 3376 + dependencies: 3377 + path-key: 3.1.1 3378 + 3379 + npm-run-path@6.0.0: 3380 + dependencies: 3381 + path-key: 4.0.0 3382 + unicorn-magic: 0.3.0 3383 + 3384 + object-assign@4.1.1: {} 3385 + 3386 + object-inspect@1.13.4: {} 3387 + 3388 + object-treeify@1.1.33: {} 3389 + 3390 + on-finished@2.4.1: 3391 + dependencies: 3392 + ee-first: 1.1.1 3393 + 3394 + once@1.4.0: 3395 + dependencies: 3396 + wrappy: 1.0.2 3397 + 3398 + onetime@5.1.2: 3399 + dependencies: 3400 + mimic-fn: 2.1.0 3401 + 3402 + onetime@7.0.0: 3403 + dependencies: 3404 + mimic-function: 5.0.1 3405 + 3406 + open@11.0.0: 3407 + dependencies: 3408 + default-browser: 5.5.0 3409 + define-lazy-prop: 3.0.0 3410 + is-in-ssh: 1.0.0 3411 + is-inside-container: 1.0.0 3412 + powershell-utils: 0.1.0 3413 + wsl-utils: 0.3.1 3414 + 3415 + ora@8.2.0: 3416 + dependencies: 3417 + chalk: 5.6.2 3418 + cli-cursor: 5.0.0 3419 + cli-spinners: 2.9.2 3420 + is-interactive: 2.0.0 3421 + is-unicode-supported: 2.1.0 3422 + log-symbols: 6.0.0 3423 + stdin-discarder: 0.2.2 3424 + string-width: 7.2.0 3425 + strip-ansi: 7.1.2 3426 + 3427 + outvariant@1.4.3: {} 3428 + 3429 + package-manager-detector@1.6.0: {} 3430 + 3431 + parent-module@1.0.1: 3432 + dependencies: 3433 + callsites: 3.1.0 3434 + 3435 + parse-json@5.2.0: 3436 + dependencies: 3437 + '@babel/code-frame': 7.29.0 3438 + error-ex: 1.3.4 3439 + json-parse-even-better-errors: 2.3.1 3440 + lines-and-columns: 1.2.4 3441 + 3442 + parse-ms@4.0.0: {} 3443 + 3444 + parseurl@1.3.3: {} 3445 + 3446 + path-browserify@1.0.1: {} 3447 + 3448 + path-key@3.1.1: {} 3449 + 3450 + path-key@4.0.0: {} 3451 + 3452 + path-to-regexp@6.3.0: {} 3453 + 3454 + path-to-regexp@8.3.0: {} 3455 + 1006 3456 picocolors@1.1.1: {} 1007 3457 3458 + picomatch@2.3.1: {} 3459 + 3460 + picomatch@4.0.3: {} 3461 + 3462 + pkce-challenge@5.0.1: {} 3463 + 3464 + postcss-selector-parser@7.1.1: 3465 + dependencies: 3466 + cssesc: 3.0.0 3467 + util-deprecate: 1.0.2 3468 + 1008 3469 postcss@8.4.31: 1009 3470 dependencies: 1010 3471 nanoid: 3.3.11 ··· 1017 3478 picocolors: 1.1.1 1018 3479 source-map-js: 1.2.1 1019 3480 3481 + powershell-utils@0.1.0: {} 3482 + 3483 + pretty-ms@9.3.0: 3484 + dependencies: 3485 + parse-ms: 4.0.0 3486 + 3487 + prompts@2.4.2: 3488 + dependencies: 3489 + kleur: 3.0.3 3490 + sisteransi: 1.0.5 3491 + 3492 + proxy-addr@2.0.7: 3493 + dependencies: 3494 + forwarded: 0.2.0 3495 + ipaddr.js: 1.9.1 3496 + 3497 + qs@6.14.1: 3498 + dependencies: 3499 + side-channel: 1.1.0 3500 + 3501 + queue-microtask@1.2.3: {} 3502 + 3503 + range-parser@1.2.1: {} 3504 + 3505 + raw-body@3.0.2: 3506 + dependencies: 3507 + bytes: 3.1.2 3508 + http-errors: 2.0.1 3509 + iconv-lite: 0.7.2 3510 + unpipe: 1.0.0 3511 + 1020 3512 react-dom@19.2.3(react@19.2.3): 1021 3513 dependencies: 1022 3514 react: 19.2.3 ··· 1024 3516 1025 3517 react@19.2.3: {} 1026 3518 3519 + recast@0.23.11: 3520 + dependencies: 3521 + ast-types: 0.16.1 3522 + esprima: 4.0.1 3523 + source-map: 0.6.1 3524 + tiny-invariant: 1.3.3 3525 + tslib: 2.8.1 3526 + 3527 + require-directory@2.1.1: {} 3528 + 3529 + require-from-string@2.0.2: {} 3530 + 3531 + reselect@5.1.1: {} 3532 + 3533 + resolve-from@4.0.0: {} 3534 + 3535 + restore-cursor@5.1.0: 3536 + dependencies: 3537 + onetime: 7.0.0 3538 + signal-exit: 4.1.0 3539 + 3540 + rettime@0.10.1: {} 3541 + 3542 + reusify@1.1.0: {} 3543 + 3544 + router@2.2.0: 3545 + dependencies: 3546 + debug: 4.4.3 3547 + depd: 2.0.0 3548 + is-promise: 4.0.0 3549 + parseurl: 1.3.3 3550 + path-to-regexp: 8.3.0 3551 + transitivePeerDependencies: 3552 + - supports-color 3553 + 3554 + run-applescript@7.1.0: {} 3555 + 3556 + run-parallel@1.2.0: 3557 + dependencies: 3558 + queue-microtask: 1.2.3 3559 + 3560 + safer-buffer@2.1.2: {} 3561 + 1027 3562 scheduler@0.27.0: {} 3563 + 3564 + semver@6.3.1: {} 1028 3565 1029 3566 semver@7.7.4: 1030 3567 optional: true 1031 3568 3569 + send@1.2.1: 3570 + dependencies: 3571 + debug: 4.4.3 3572 + encodeurl: 2.0.0 3573 + escape-html: 1.0.3 3574 + etag: 1.8.1 3575 + fresh: 2.0.0 3576 + http-errors: 2.0.1 3577 + mime-types: 3.0.2 3578 + ms: 2.1.3 3579 + on-finished: 2.4.1 3580 + range-parser: 1.2.1 3581 + statuses: 2.0.2 3582 + transitivePeerDependencies: 3583 + - supports-color 3584 + 3585 + serve-static@2.2.1: 3586 + dependencies: 3587 + encodeurl: 2.0.0 3588 + escape-html: 1.0.3 3589 + parseurl: 1.3.3 3590 + send: 1.2.1 3591 + transitivePeerDependencies: 3592 + - supports-color 3593 + 3594 + setprototypeof@1.2.0: {} 3595 + 3596 + shadcn@3.8.4(@types/node@20.19.33)(typescript@5.9.3): 3597 + dependencies: 3598 + '@antfu/ni': 25.0.0 3599 + '@babel/core': 7.29.0 3600 + '@babel/parser': 7.29.0 3601 + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) 3602 + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) 3603 + '@dotenvx/dotenvx': 1.52.0 3604 + '@modelcontextprotocol/sdk': 1.26.0(zod@3.25.76) 3605 + '@types/validate-npm-package-name': 4.0.2 3606 + browserslist: 4.28.1 3607 + commander: 14.0.3 3608 + cosmiconfig: 9.0.0(typescript@5.9.3) 3609 + dedent: 1.7.1 3610 + deepmerge: 4.3.1 3611 + diff: 8.0.3 3612 + execa: 9.6.1 3613 + fast-glob: 3.3.3 3614 + fs-extra: 11.3.3 3615 + fuzzysort: 3.1.0 3616 + https-proxy-agent: 7.0.6 3617 + kleur: 4.1.5 3618 + msw: 2.12.9(@types/node@20.19.33)(typescript@5.9.3) 3619 + node-fetch: 3.3.2 3620 + open: 11.0.0 3621 + ora: 8.2.0 3622 + postcss: 8.5.6 3623 + postcss-selector-parser: 7.1.1 3624 + prompts: 2.4.2 3625 + recast: 0.23.11 3626 + stringify-object: 5.0.0 3627 + tailwind-merge: 3.4.0 3628 + ts-morph: 26.0.0 3629 + tsconfig-paths: 4.2.0 3630 + validate-npm-package-name: 7.0.2 3631 + zod: 3.25.76 3632 + zod-to-json-schema: 3.25.1(zod@3.25.76) 3633 + transitivePeerDependencies: 3634 + - '@cfworker/json-schema' 3635 + - '@types/node' 3636 + - babel-plugin-macros 3637 + - supports-color 3638 + - typescript 3639 + 1032 3640 sharp@0.34.5: 1033 3641 dependencies: 1034 3642 '@img/colour': 1.0.0 ··· 1061 3669 '@img/sharp-win32-x64': 0.34.5 1062 3670 optional: true 1063 3671 3672 + shebang-command@2.0.0: 3673 + dependencies: 3674 + shebang-regex: 3.0.0 3675 + 3676 + shebang-regex@3.0.0: {} 3677 + 3678 + side-channel-list@1.0.0: 3679 + dependencies: 3680 + es-errors: 1.3.0 3681 + object-inspect: 1.13.4 3682 + 3683 + side-channel-map@1.0.1: 3684 + dependencies: 3685 + call-bound: 1.0.4 3686 + es-errors: 1.3.0 3687 + get-intrinsic: 1.3.0 3688 + object-inspect: 1.13.4 3689 + 3690 + side-channel-weakmap@1.0.2: 3691 + dependencies: 3692 + call-bound: 1.0.4 3693 + es-errors: 1.3.0 3694 + get-intrinsic: 1.3.0 3695 + object-inspect: 1.13.4 3696 + side-channel-map: 1.0.1 3697 + 3698 + side-channel@1.1.0: 3699 + dependencies: 3700 + es-errors: 1.3.0 3701 + object-inspect: 1.13.4 3702 + side-channel-list: 1.0.0 3703 + side-channel-map: 1.0.1 3704 + side-channel-weakmap: 1.0.2 3705 + 3706 + signal-exit@3.0.7: {} 3707 + 3708 + signal-exit@4.1.0: {} 3709 + 3710 + sisteransi@1.0.5: {} 3711 + 1064 3712 source-map-js@1.2.1: {} 1065 3713 1066 - styled-jsx@5.1.6(react@19.2.3): 3714 + source-map@0.6.1: {} 3715 + 3716 + statuses@2.0.2: {} 3717 + 3718 + stdin-discarder@0.2.2: {} 3719 + 3720 + strict-event-emitter@0.5.1: {} 3721 + 3722 + string-width@4.2.3: 3723 + dependencies: 3724 + emoji-regex: 8.0.0 3725 + is-fullwidth-code-point: 3.0.0 3726 + strip-ansi: 6.0.1 3727 + 3728 + string-width@7.2.0: 3729 + dependencies: 3730 + emoji-regex: 10.6.0 3731 + get-east-asian-width: 1.4.0 3732 + strip-ansi: 7.1.2 3733 + 3734 + stringify-object@5.0.0: 3735 + dependencies: 3736 + get-own-enumerable-keys: 1.0.0 3737 + is-obj: 3.0.0 3738 + is-regexp: 3.1.0 3739 + 3740 + strip-ansi@6.0.1: 3741 + dependencies: 3742 + ansi-regex: 5.0.1 3743 + 3744 + strip-ansi@7.1.2: 3745 + dependencies: 3746 + ansi-regex: 6.2.2 3747 + 3748 + strip-bom@3.0.0: {} 3749 + 3750 + strip-final-newline@2.0.0: {} 3751 + 3752 + strip-final-newline@4.0.0: {} 3753 + 3754 + styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.3): 1067 3755 dependencies: 1068 3756 client-only: 0.0.1 1069 3757 react: 19.2.3 3758 + optionalDependencies: 3759 + '@babel/core': 7.29.0 3760 + 3761 + tabbable@6.4.0: {} 3762 + 3763 + tagged-tag@1.0.0: {} 3764 + 3765 + tailwind-merge@3.4.0: {} 1070 3766 1071 3767 tailwindcss@4.1.18: {} 1072 3768 1073 3769 tapable@2.3.0: {} 1074 3770 3771 + tiny-invariant@1.3.3: {} 3772 + 3773 + tinyexec@1.0.2: {} 3774 + 3775 + tldts-core@7.0.22: {} 3776 + 3777 + tldts@7.0.22: 3778 + dependencies: 3779 + tldts-core: 7.0.22 3780 + 3781 + to-regex-range@5.0.1: 3782 + dependencies: 3783 + is-number: 7.0.0 3784 + 3785 + toidentifier@1.0.1: {} 3786 + 3787 + tough-cookie@6.0.0: 3788 + dependencies: 3789 + tldts: 7.0.22 3790 + 3791 + ts-morph@26.0.0: 3792 + dependencies: 3793 + '@ts-morph/common': 0.27.0 3794 + code-block-writer: 13.0.3 3795 + 3796 + tsconfig-paths@4.2.0: 3797 + dependencies: 3798 + json5: 2.2.3 3799 + minimist: 1.2.8 3800 + strip-bom: 3.0.0 3801 + 1075 3802 tslib@2.8.1: {} 1076 3803 3804 + tw-animate-css@1.4.0: {} 3805 + 3806 + type-fest@5.4.4: 3807 + dependencies: 3808 + tagged-tag: 1.0.0 3809 + 3810 + type-is@2.0.1: 3811 + dependencies: 3812 + content-type: 1.0.5 3813 + media-typer: 1.1.0 3814 + mime-types: 3.0.2 3815 + 1077 3816 typescript@5.9.3: {} 1078 3817 1079 3818 undici-types@6.21.0: {} 3819 + 3820 + unicorn-magic@0.3.0: {} 3821 + 3822 + universalify@2.0.1: {} 3823 + 3824 + unpipe@1.0.0: {} 3825 + 3826 + until-async@3.0.2: {} 3827 + 3828 + update-browserslist-db@1.2.3(browserslist@4.28.1): 3829 + dependencies: 3830 + browserslist: 4.28.1 3831 + escalade: 3.2.0 3832 + picocolors: 1.1.1 3833 + 3834 + use-sync-external-store@1.6.0(react@19.2.3): 3835 + dependencies: 3836 + react: 19.2.3 3837 + 3838 + util-deprecate@1.0.2: {} 3839 + 3840 + validate-npm-package-name@7.0.2: {} 3841 + 3842 + vary@1.1.2: {} 3843 + 3844 + web-streams-polyfill@3.3.3: {} 3845 + 3846 + which@2.0.2: 3847 + dependencies: 3848 + isexe: 2.0.0 3849 + 3850 + which@4.0.0: 3851 + dependencies: 3852 + isexe: 3.1.4 3853 + 3854 + wrap-ansi@6.2.0: 3855 + dependencies: 3856 + ansi-styles: 4.3.0 3857 + string-width: 4.2.3 3858 + strip-ansi: 6.0.1 3859 + 3860 + wrap-ansi@7.0.0: 3861 + dependencies: 3862 + ansi-styles: 4.3.0 3863 + string-width: 4.2.3 3864 + strip-ansi: 6.0.1 3865 + 3866 + wrappy@1.0.2: {} 3867 + 3868 + wsl-utils@0.3.1: 3869 + dependencies: 3870 + is-wsl: 3.1.0 3871 + powershell-utils: 0.1.0 3872 + 3873 + y18n@5.0.8: {} 3874 + 3875 + yallist@3.1.1: {} 3876 + 3877 + yargs-parser@21.1.1: {} 3878 + 3879 + yargs@17.7.2: 3880 + dependencies: 3881 + cliui: 8.0.1 3882 + escalade: 3.2.0 3883 + get-caller-file: 2.0.5 3884 + require-directory: 2.1.1 3885 + string-width: 4.2.3 3886 + y18n: 5.0.8 3887 + yargs-parser: 21.1.1 3888 + 3889 + yoctocolors-cjs@2.1.3: {} 3890 + 3891 + yoctocolors@2.1.2: {} 3892 + 3893 + zod-to-json-schema@3.25.1(zod@3.25.76): 3894 + dependencies: 3895 + zod: 3.25.76 3896 + 3897 + zod@3.25.76: {}
-1
public/file.svg
··· 1 - <svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
-1
public/globe.svg
··· 1 - <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
-1
public/next.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
-1
public/vercel.svg
··· 1 - <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
-1
public/window.svg
··· 1 - <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
+114 -15
src/app/globals.css
··· 1 1 @import "tailwindcss"; 2 + @import "tw-animate-css"; 3 + @import "shadcn/tailwind.css"; 4 + 5 + @custom-variant dark (&:is(.dark *)); 2 6 3 7 :root { 4 - --background: #ffffff; 5 - --foreground: #171717; 8 + --background: oklch(1 0 0); 9 + --foreground: oklch(0.145 0 0); 10 + --card: oklch(1 0 0); 11 + --card-foreground: oklch(0.145 0 0); 12 + --popover: oklch(1 0 0); 13 + --popover-foreground: oklch(0.145 0 0); 14 + --primary: oklch(0.205 0 0); 15 + --primary-foreground: oklch(0.985 0 0); 16 + --secondary: oklch(0.97 0 0); 17 + --secondary-foreground: oklch(0.205 0 0); 18 + --muted: oklch(0.97 0 0); 19 + --muted-foreground: oklch(0.556 0 0); 20 + --accent: oklch(0.97 0 0); 21 + --accent-foreground: oklch(0.205 0 0); 22 + --destructive: oklch(0.58 0.22 27); 23 + --border: oklch(0.922 0 0); 24 + --input: oklch(0.922 0 0); 25 + --ring: oklch(0.708 0 0); 26 + --chart-1: oklch(0.809 0.105 251.813); 27 + --chart-2: oklch(0.623 0.214 259.815); 28 + --chart-3: oklch(0.546 0.245 262.881); 29 + --chart-4: oklch(0.488 0.243 264.376); 30 + --chart-5: oklch(0.424 0.199 265.638); 31 + --radius: 0.625rem; 32 + --sidebar: oklch(0.985 0 0); 33 + --sidebar-foreground: oklch(0.145 0 0); 34 + --sidebar-primary: oklch(0.205 0 0); 35 + --sidebar-primary-foreground: oklch(0.985 0 0); 36 + --sidebar-accent: oklch(0.97 0 0); 37 + --sidebar-accent-foreground: oklch(0.205 0 0); 38 + --sidebar-border: oklch(0.922 0 0); 39 + --sidebar-ring: oklch(0.708 0 0); 40 + } 41 + 42 + .dark { 43 + --background: oklch(0.145 0 0); 44 + --foreground: oklch(0.985 0 0); 45 + --card: oklch(0.205 0 0); 46 + --card-foreground: oklch(0.985 0 0); 47 + --popover: oklch(0.205 0 0); 48 + --popover-foreground: oklch(0.985 0 0); 49 + --primary: oklch(0.87 0 0); 50 + --primary-foreground: oklch(0.205 0 0); 51 + --secondary: oklch(0.269 0 0); 52 + --secondary-foreground: oklch(0.985 0 0); 53 + --muted: oklch(0.269 0 0); 54 + --muted-foreground: oklch(0.708 0 0); 55 + --accent: oklch(0.371 0 0); 56 + --accent-foreground: oklch(0.985 0 0); 57 + --destructive: oklch(0.704 0.191 22.216); 58 + --border: oklch(1 0 0 / 10%); 59 + --input: oklch(1 0 0 / 15%); 60 + --ring: oklch(0.556 0 0); 61 + --chart-1: oklch(0.809 0.105 251.813); 62 + --chart-2: oklch(0.623 0.214 259.815); 63 + --chart-3: oklch(0.546 0.245 262.881); 64 + --chart-4: oklch(0.488 0.243 264.376); 65 + --chart-5: oklch(0.424 0.199 265.638); 66 + --sidebar: oklch(0.205 0 0); 67 + --sidebar-foreground: oklch(0.985 0 0); 68 + --sidebar-primary: oklch(0.488 0.243 264.376); 69 + --sidebar-primary-foreground: oklch(0.985 0 0); 70 + --sidebar-accent: oklch(0.269 0 0); 71 + --sidebar-accent-foreground: oklch(0.985 0 0); 72 + --sidebar-border: oklch(1 0 0 / 10%); 73 + --sidebar-ring: oklch(0.556 0 0); 6 74 } 7 75 8 76 @theme inline { 9 - --color-background: var(--background); 77 + --font-sans: var(--font-sans); 78 + --color-sidebar-ring: var(--sidebar-ring); 79 + --color-sidebar-border: var(--sidebar-border); 80 + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); 81 + --color-sidebar-accent: var(--sidebar-accent); 82 + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); 83 + --color-sidebar-primary: var(--sidebar-primary); 84 + --color-sidebar-foreground: var(--sidebar-foreground); 85 + --color-sidebar: var(--sidebar); 86 + --color-chart-5: var(--chart-5); 87 + --color-chart-4: var(--chart-4); 88 + --color-chart-3: var(--chart-3); 89 + --color-chart-2: var(--chart-2); 90 + --color-chart-1: var(--chart-1); 91 + --color-ring: var(--ring); 92 + --color-input: var(--input); 93 + --color-border: var(--border); 94 + --color-destructive: var(--destructive); 95 + --color-accent-foreground: var(--accent-foreground); 96 + --color-accent: var(--accent); 97 + --color-muted-foreground: var(--muted-foreground); 98 + --color-muted: var(--muted); 99 + --color-secondary-foreground: var(--secondary-foreground); 100 + --color-secondary: var(--secondary); 101 + --color-primary-foreground: var(--primary-foreground); 102 + --color-primary: var(--primary); 103 + --color-popover-foreground: var(--popover-foreground); 104 + --color-popover: var(--popover); 105 + --color-card-foreground: var(--card-foreground); 106 + --color-card: var(--card); 10 107 --color-foreground: var(--foreground); 11 - --font-sans: var(--font-geist-sans); 12 - --font-mono: var(--font-geist-mono); 108 + --color-background: var(--background); 109 + --radius-sm: calc(var(--radius) - 4px); 110 + --radius-md: calc(var(--radius) - 2px); 111 + --radius-lg: var(--radius); 112 + --radius-xl: calc(var(--radius) + 4px); 113 + --radius-2xl: calc(var(--radius) + 8px); 114 + --radius-3xl: calc(var(--radius) + 12px); 115 + --radius-4xl: calc(var(--radius) + 16px); 13 116 } 14 117 15 - @media (prefers-color-scheme: dark) { 16 - :root { 17 - --background: #0a0a0a; 18 - --foreground: #ededed; 118 + @layer base { 119 + * { 120 + @apply border-border outline-ring/50; 19 121 } 20 - } 21 - 22 - body { 23 - background: var(--background); 24 - color: var(--foreground); 25 - font-family: Arial, Helvetica, sans-serif; 122 + body { 123 + @apply bg-background text-foreground; 124 + } 26 125 }
+4 -16
src/app/layout.tsx
··· 1 1 import type { Metadata } from "next"; 2 - import { Geist, Geist_Mono } from "next/font/google"; 3 2 import "./globals.css"; 4 - 5 - const geistSans = Geist({ 6 - variable: "--font-geist-sans", 7 - subsets: ["latin"], 8 - }); 3 + import { Figtree } from "next/font/google"; 9 4 10 - const geistMono = Geist_Mono({ 11 - variable: "--font-geist-mono", 12 - subsets: ["latin"], 13 - }); 5 + const figtree = Figtree({ subsets: ["latin"], variable: "--font-sans" }); 14 6 15 7 export const metadata: Metadata = { 16 8 title: "Create Next App", ··· 23 15 children: React.ReactNode; 24 16 }>) { 25 17 return ( 26 - <html lang="en"> 27 - <body 28 - className={`${geistSans.variable} ${geistMono.variable} antialiased`} 29 - > 30 - {children} 31 - </body> 18 + <html lang="en" className={figtree.variable}> 19 + <body>{children}</body> 32 20 </html> 33 21 ); 34 22 }
+3 -63
src/app/page.tsx
··· 1 - import Image from "next/image"; 1 + import { ComponentExample } from "@/components/component-example"; 2 2 3 - export default function Home() { 4 - return ( 5 - <div className="flex min-h-screen items-center justify-center bg-zinc-50 font-sans dark:bg-black"> 6 - <main className="flex min-h-screen w-full max-w-3xl flex-col items-center justify-between py-32 px-16 bg-white dark:bg-black sm:items-start"> 7 - <Image 8 - className="dark:invert" 9 - src="/next.svg" 10 - alt="Next.js logo" 11 - width={100} 12 - height={20} 13 - priority 14 - /> 15 - <div className="flex flex-col items-center gap-6 text-center sm:items-start sm:text-left"> 16 - <h1 className="max-w-xs text-3xl font-semibold leading-10 tracking-tight text-black dark:text-zinc-50"> 17 - To get started, edit the page.tsx file. 18 - </h1> 19 - <p className="max-w-md text-lg leading-8 text-zinc-600 dark:text-zinc-400"> 20 - Looking for a starting point or more instructions? Head over to{" "} 21 - <a 22 - href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" 23 - className="font-medium text-zinc-950 dark:text-zinc-50" 24 - > 25 - Templates 26 - </a>{" "} 27 - or the{" "} 28 - <a 29 - href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" 30 - className="font-medium text-zinc-950 dark:text-zinc-50" 31 - > 32 - Learning 33 - </a>{" "} 34 - center. 35 - </p> 36 - </div> 37 - <div className="flex flex-col gap-4 text-base font-medium sm:flex-row"> 38 - <a 39 - className="flex h-12 w-full items-center justify-center gap-2 rounded-full bg-foreground px-5 text-background transition-colors hover:bg-[#383838] dark:hover:bg-[#ccc] md:w-[158px]" 40 - href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" 41 - target="_blank" 42 - rel="noopener noreferrer" 43 - > 44 - <Image 45 - className="dark:invert" 46 - src="/vercel.svg" 47 - alt="Vercel logomark" 48 - width={16} 49 - height={16} 50 - /> 51 - Deploy Now 52 - </a> 53 - <a 54 - className="flex h-12 w-full items-center justify-center rounded-full border border-solid border-black/[.08] px-5 transition-colors hover:border-transparent hover:bg-black/[.04] dark:border-white/[.145] dark:hover:bg-[#1a1a1a] md:w-[158px]" 55 - href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" 56 - target="_blank" 57 - rel="noopener noreferrer" 58 - > 59 - Documentation 60 - </a> 61 - </div> 62 - </main> 63 - </div> 64 - ); 3 + export default function Page() { 4 + return <ComponentExample />; 65 5 }
+531
src/components/component-example.tsx
··· 1 + "use client"; 2 + 3 + import * as React from "react"; 4 + 5 + import { Example, ExampleWrapper } from "@/components/example"; 6 + import { 7 + AlertDialog, 8 + AlertDialogAction, 9 + AlertDialogCancel, 10 + AlertDialogContent, 11 + AlertDialogDescription, 12 + AlertDialogFooter, 13 + AlertDialogHeader, 14 + AlertDialogMedia, 15 + AlertDialogTitle, 16 + AlertDialogTrigger, 17 + } from "@/components/ui/alert-dialog"; 18 + import { Badge } from "@/components/ui/badge"; 19 + import { Button } from "@/components/ui/button"; 20 + import { 21 + Card, 22 + CardAction, 23 + CardContent, 24 + CardDescription, 25 + CardFooter, 26 + CardHeader, 27 + CardTitle, 28 + } from "@/components/ui/card"; 29 + import { 30 + Combobox, 31 + ComboboxContent, 32 + ComboboxEmpty, 33 + ComboboxInput, 34 + ComboboxItem, 35 + ComboboxList, 36 + } from "@/components/ui/combobox"; 37 + import { 38 + DropdownMenu, 39 + DropdownMenuCheckboxItem, 40 + DropdownMenuContent, 41 + DropdownMenuGroup, 42 + DropdownMenuItem, 43 + DropdownMenuLabel, 44 + DropdownMenuPortal, 45 + DropdownMenuRadioGroup, 46 + DropdownMenuRadioItem, 47 + DropdownMenuSeparator, 48 + DropdownMenuShortcut, 49 + DropdownMenuSub, 50 + DropdownMenuSubContent, 51 + DropdownMenuSubTrigger, 52 + DropdownMenuTrigger, 53 + } from "@/components/ui/dropdown-menu"; 54 + import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"; 55 + import { Input } from "@/components/ui/input"; 56 + import { 57 + Select, 58 + SelectContent, 59 + SelectGroup, 60 + SelectItem, 61 + SelectTrigger, 62 + SelectValue, 63 + } from "@/components/ui/select"; 64 + import { Textarea } from "@/components/ui/textarea"; 65 + import { HugeiconsIcon } from "@hugeicons/react"; 66 + import { 67 + PlusSignIcon, 68 + BluetoothIcon, 69 + MoreVerticalCircle01Icon, 70 + FileIcon, 71 + FolderIcon, 72 + FolderOpenIcon, 73 + CodeIcon, 74 + MoreHorizontalCircle01Icon, 75 + SearchIcon, 76 + FloppyDiskIcon, 77 + DownloadIcon, 78 + EyeIcon, 79 + LayoutIcon, 80 + PaintBoardIcon, 81 + SunIcon, 82 + MoonIcon, 83 + ComputerIcon, 84 + UserIcon, 85 + CreditCardIcon, 86 + SettingsIcon, 87 + KeyboardIcon, 88 + LanguageCircleIcon, 89 + NotificationIcon, 90 + MailIcon, 91 + ShieldIcon, 92 + HelpCircleIcon, 93 + File01Icon, 94 + LogoutIcon, 95 + } from "@hugeicons/core-free-icons"; 96 + 97 + export function ComponentExample() { 98 + return ( 99 + <ExampleWrapper> 100 + <CardExample /> 101 + <FormExample /> 102 + </ExampleWrapper> 103 + ); 104 + } 105 + 106 + function CardExample() { 107 + return ( 108 + <Example title="Card" className="items-center justify-center"> 109 + <Card className="relative w-full max-w-sm overflow-hidden pt-0"> 110 + <div className="bg-primary absolute inset-0 z-30 aspect-video opacity-50 mix-blend-color" /> 111 + <img 112 + src="https://images.unsplash.com/photo-1604076850742-4c7221f3101b?q=80&w=1887&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" 113 + alt="Photo by mymind on Unsplash" 114 + title="Photo by mymind on Unsplash" 115 + className="relative z-20 aspect-video w-full object-cover brightness-60 grayscale" 116 + /> 117 + <CardHeader> 118 + <CardTitle>Observability Plus is replacing Monitoring</CardTitle> 119 + <CardDescription> 120 + Switch to the improved way to explore your data, with natural 121 + language. Monitoring will no longer be available on the Pro plan in 122 + November, 2025 123 + </CardDescription> 124 + </CardHeader> 125 + <CardFooter> 126 + <AlertDialog> 127 + <AlertDialogTrigger render={<Button />}> 128 + <HugeiconsIcon 129 + icon={PlusSignIcon} 130 + strokeWidth={2} 131 + data-icon="inline-start" 132 + /> 133 + Show Dialog 134 + </AlertDialogTrigger> 135 + <AlertDialogContent size="sm"> 136 + <AlertDialogHeader> 137 + <AlertDialogMedia> 138 + <HugeiconsIcon icon={BluetoothIcon} strokeWidth={2} /> 139 + </AlertDialogMedia> 140 + <AlertDialogTitle>Allow accessory to connect?</AlertDialogTitle> 141 + <AlertDialogDescription> 142 + Do you want to allow the USB accessory to connect to this 143 + device? 144 + </AlertDialogDescription> 145 + </AlertDialogHeader> 146 + <AlertDialogFooter> 147 + <AlertDialogCancel>Don&apos;t allow</AlertDialogCancel> 148 + <AlertDialogAction>Allow</AlertDialogAction> 149 + </AlertDialogFooter> 150 + </AlertDialogContent> 151 + </AlertDialog> 152 + <Badge variant="secondary" className="ml-auto"> 153 + Warning 154 + </Badge> 155 + </CardFooter> 156 + </Card> 157 + </Example> 158 + ); 159 + } 160 + 161 + const frameworks = [ 162 + "Next.js", 163 + "SvelteKit", 164 + "Nuxt.js", 165 + "Remix", 166 + "Astro", 167 + ] as const; 168 + 169 + const roleItems = [ 170 + { label: "Developer", value: "developer" }, 171 + { label: "Designer", value: "designer" }, 172 + { label: "Manager", value: "manager" }, 173 + { label: "Other", value: "other" }, 174 + ]; 175 + 176 + function FormExample() { 177 + const [notifications, setNotifications] = React.useState({ 178 + email: true, 179 + sms: false, 180 + push: true, 181 + }); 182 + const [theme, setTheme] = React.useState("light"); 183 + 184 + return ( 185 + <Example title="Form"> 186 + <Card className="w-full max-w-md"> 187 + <CardHeader> 188 + <CardTitle>User Information</CardTitle> 189 + <CardDescription>Please fill in your details below</CardDescription> 190 + <CardAction> 191 + <DropdownMenu> 192 + <DropdownMenuTrigger 193 + render={<Button variant="ghost" size="icon" />} 194 + > 195 + <HugeiconsIcon 196 + icon={MoreVerticalCircle01Icon} 197 + strokeWidth={2} 198 + /> 199 + <span className="sr-only">More options</span> 200 + </DropdownMenuTrigger> 201 + <DropdownMenuContent align="end" className="w-56"> 202 + <DropdownMenuGroup> 203 + <DropdownMenuLabel>File</DropdownMenuLabel> 204 + <DropdownMenuItem> 205 + <HugeiconsIcon icon={FileIcon} strokeWidth={2} /> 206 + New File 207 + <DropdownMenuShortcut>⌘N</DropdownMenuShortcut> 208 + </DropdownMenuItem> 209 + <DropdownMenuItem> 210 + <HugeiconsIcon icon={FolderIcon} strokeWidth={2} /> 211 + New Folder 212 + <DropdownMenuShortcut>⇧⌘N</DropdownMenuShortcut> 213 + </DropdownMenuItem> 214 + <DropdownMenuSub> 215 + <DropdownMenuSubTrigger> 216 + <HugeiconsIcon icon={FolderOpenIcon} strokeWidth={2} /> 217 + Open Recent 218 + </DropdownMenuSubTrigger> 219 + <DropdownMenuPortal> 220 + <DropdownMenuSubContent> 221 + <DropdownMenuGroup> 222 + <DropdownMenuLabel>Recent Projects</DropdownMenuLabel> 223 + <DropdownMenuItem> 224 + <HugeiconsIcon icon={CodeIcon} strokeWidth={2} /> 225 + Project Alpha 226 + </DropdownMenuItem> 227 + <DropdownMenuItem> 228 + <HugeiconsIcon icon={CodeIcon} strokeWidth={2} /> 229 + Project Beta 230 + </DropdownMenuItem> 231 + <DropdownMenuSub> 232 + <DropdownMenuSubTrigger> 233 + <HugeiconsIcon 234 + icon={MoreHorizontalCircle01Icon} 235 + strokeWidth={2} 236 + /> 237 + More Projects 238 + </DropdownMenuSubTrigger> 239 + <DropdownMenuPortal> 240 + <DropdownMenuSubContent> 241 + <DropdownMenuItem> 242 + <HugeiconsIcon 243 + icon={CodeIcon} 244 + strokeWidth={2} 245 + /> 246 + Project Gamma 247 + </DropdownMenuItem> 248 + <DropdownMenuItem> 249 + <HugeiconsIcon 250 + icon={CodeIcon} 251 + strokeWidth={2} 252 + /> 253 + Project Delta 254 + </DropdownMenuItem> 255 + </DropdownMenuSubContent> 256 + </DropdownMenuPortal> 257 + </DropdownMenuSub> 258 + </DropdownMenuGroup> 259 + <DropdownMenuSeparator /> 260 + <DropdownMenuGroup> 261 + <DropdownMenuItem> 262 + <HugeiconsIcon icon={SearchIcon} strokeWidth={2} /> 263 + Browse... 264 + </DropdownMenuItem> 265 + </DropdownMenuGroup> 266 + </DropdownMenuSubContent> 267 + </DropdownMenuPortal> 268 + </DropdownMenuSub> 269 + <DropdownMenuSeparator /> 270 + <DropdownMenuItem> 271 + <HugeiconsIcon icon={FloppyDiskIcon} strokeWidth={2} /> 272 + Save 273 + <DropdownMenuShortcut>⌘S</DropdownMenuShortcut> 274 + </DropdownMenuItem> 275 + <DropdownMenuItem> 276 + <HugeiconsIcon icon={DownloadIcon} strokeWidth={2} /> 277 + Export 278 + <DropdownMenuShortcut>⇧⌘E</DropdownMenuShortcut> 279 + </DropdownMenuItem> 280 + </DropdownMenuGroup> 281 + <DropdownMenuSeparator /> 282 + <DropdownMenuGroup> 283 + <DropdownMenuLabel>View</DropdownMenuLabel> 284 + <DropdownMenuCheckboxItem 285 + checked={notifications.email} 286 + onCheckedChange={(checked) => 287 + setNotifications({ 288 + ...notifications, 289 + email: checked === true, 290 + }) 291 + } 292 + > 293 + <HugeiconsIcon icon={EyeIcon} strokeWidth={2} /> 294 + Show Sidebar 295 + </DropdownMenuCheckboxItem> 296 + <DropdownMenuCheckboxItem 297 + checked={notifications.sms} 298 + onCheckedChange={(checked) => 299 + setNotifications({ 300 + ...notifications, 301 + sms: checked === true, 302 + }) 303 + } 304 + > 305 + <HugeiconsIcon icon={LayoutIcon} strokeWidth={2} /> 306 + Show Status Bar 307 + </DropdownMenuCheckboxItem> 308 + <DropdownMenuSub> 309 + <DropdownMenuSubTrigger> 310 + <HugeiconsIcon icon={PaintBoardIcon} strokeWidth={2} /> 311 + Theme 312 + </DropdownMenuSubTrigger> 313 + <DropdownMenuPortal> 314 + <DropdownMenuSubContent> 315 + <DropdownMenuGroup> 316 + <DropdownMenuLabel>Appearance</DropdownMenuLabel> 317 + <DropdownMenuRadioGroup 318 + value={theme} 319 + onValueChange={setTheme} 320 + > 321 + <DropdownMenuRadioItem value="light"> 322 + <HugeiconsIcon icon={SunIcon} strokeWidth={2} /> 323 + Light 324 + </DropdownMenuRadioItem> 325 + <DropdownMenuRadioItem value="dark"> 326 + <HugeiconsIcon icon={MoonIcon} strokeWidth={2} /> 327 + Dark 328 + </DropdownMenuRadioItem> 329 + <DropdownMenuRadioItem value="system"> 330 + <HugeiconsIcon 331 + icon={ComputerIcon} 332 + strokeWidth={2} 333 + /> 334 + System 335 + </DropdownMenuRadioItem> 336 + </DropdownMenuRadioGroup> 337 + </DropdownMenuGroup> 338 + </DropdownMenuSubContent> 339 + </DropdownMenuPortal> 340 + </DropdownMenuSub> 341 + </DropdownMenuGroup> 342 + <DropdownMenuSeparator /> 343 + <DropdownMenuGroup> 344 + <DropdownMenuLabel>Account</DropdownMenuLabel> 345 + <DropdownMenuItem> 346 + <HugeiconsIcon icon={UserIcon} strokeWidth={2} /> 347 + Profile 348 + <DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut> 349 + </DropdownMenuItem> 350 + <DropdownMenuItem> 351 + <HugeiconsIcon icon={CreditCardIcon} strokeWidth={2} /> 352 + Billing 353 + </DropdownMenuItem> 354 + <DropdownMenuSub> 355 + <DropdownMenuSubTrigger> 356 + <HugeiconsIcon icon={SettingsIcon} strokeWidth={2} /> 357 + Settings 358 + </DropdownMenuSubTrigger> 359 + <DropdownMenuPortal> 360 + <DropdownMenuSubContent> 361 + <DropdownMenuGroup> 362 + <DropdownMenuLabel>Preferences</DropdownMenuLabel> 363 + <DropdownMenuItem> 364 + <HugeiconsIcon 365 + icon={KeyboardIcon} 366 + strokeWidth={2} 367 + /> 368 + Keyboard Shortcuts 369 + </DropdownMenuItem> 370 + <DropdownMenuItem> 371 + <HugeiconsIcon 372 + icon={LanguageCircleIcon} 373 + strokeWidth={2} 374 + /> 375 + Language 376 + </DropdownMenuItem> 377 + <DropdownMenuSub> 378 + <DropdownMenuSubTrigger> 379 + <HugeiconsIcon 380 + icon={NotificationIcon} 381 + strokeWidth={2} 382 + /> 383 + Notifications 384 + </DropdownMenuSubTrigger> 385 + <DropdownMenuPortal> 386 + <DropdownMenuSubContent> 387 + <DropdownMenuGroup> 388 + <DropdownMenuLabel> 389 + Notification Types 390 + </DropdownMenuLabel> 391 + <DropdownMenuCheckboxItem 392 + checked={notifications.push} 393 + onCheckedChange={(checked) => 394 + setNotifications({ 395 + ...notifications, 396 + push: checked === true, 397 + }) 398 + } 399 + > 400 + <HugeiconsIcon 401 + icon={NotificationIcon} 402 + strokeWidth={2} 403 + /> 404 + Push Notifications 405 + </DropdownMenuCheckboxItem> 406 + <DropdownMenuCheckboxItem 407 + checked={notifications.email} 408 + onCheckedChange={(checked) => 409 + setNotifications({ 410 + ...notifications, 411 + email: checked === true, 412 + }) 413 + } 414 + > 415 + <HugeiconsIcon 416 + icon={MailIcon} 417 + strokeWidth={2} 418 + /> 419 + Email Notifications 420 + </DropdownMenuCheckboxItem> 421 + </DropdownMenuGroup> 422 + </DropdownMenuSubContent> 423 + </DropdownMenuPortal> 424 + </DropdownMenuSub> 425 + </DropdownMenuGroup> 426 + <DropdownMenuSeparator /> 427 + <DropdownMenuGroup> 428 + <DropdownMenuItem> 429 + <HugeiconsIcon icon={ShieldIcon} strokeWidth={2} /> 430 + Privacy & Security 431 + </DropdownMenuItem> 432 + </DropdownMenuGroup> 433 + </DropdownMenuSubContent> 434 + </DropdownMenuPortal> 435 + </DropdownMenuSub> 436 + </DropdownMenuGroup> 437 + <DropdownMenuSeparator /> 438 + <DropdownMenuGroup> 439 + <DropdownMenuItem> 440 + <HugeiconsIcon icon={HelpCircleIcon} strokeWidth={2} /> 441 + Help & Support 442 + </DropdownMenuItem> 443 + <DropdownMenuItem> 444 + <HugeiconsIcon icon={File01Icon} strokeWidth={2} /> 445 + Documentation 446 + </DropdownMenuItem> 447 + </DropdownMenuGroup> 448 + <DropdownMenuSeparator /> 449 + <DropdownMenuGroup> 450 + <DropdownMenuItem variant="destructive"> 451 + <HugeiconsIcon icon={LogoutIcon} strokeWidth={2} /> 452 + Sign Out 453 + <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut> 454 + </DropdownMenuItem> 455 + </DropdownMenuGroup> 456 + </DropdownMenuContent> 457 + </DropdownMenu> 458 + </CardAction> 459 + </CardHeader> 460 + <CardContent> 461 + <form> 462 + <FieldGroup> 463 + <div className="grid grid-cols-2 gap-4"> 464 + <Field> 465 + <FieldLabel htmlFor="small-form-name">Name</FieldLabel> 466 + <Input 467 + id="small-form-name" 468 + placeholder="Enter your name" 469 + required 470 + /> 471 + </Field> 472 + <Field> 473 + <FieldLabel htmlFor="small-form-role">Role</FieldLabel> 474 + <Select items={roleItems} defaultValue={null}> 475 + <SelectTrigger id="small-form-role"> 476 + <SelectValue /> 477 + </SelectTrigger> 478 + <SelectContent> 479 + <SelectGroup> 480 + {roleItems.map((item) => ( 481 + <SelectItem key={item.value} value={item.value}> 482 + {item.label} 483 + </SelectItem> 484 + ))} 485 + </SelectGroup> 486 + </SelectContent> 487 + </Select> 488 + </Field> 489 + </div> 490 + <Field> 491 + <FieldLabel htmlFor="small-form-framework"> 492 + Framework 493 + </FieldLabel> 494 + <Combobox items={frameworks}> 495 + <ComboboxInput 496 + id="small-form-framework" 497 + placeholder="Select a framework" 498 + required 499 + /> 500 + <ComboboxContent> 501 + <ComboboxEmpty>No frameworks found.</ComboboxEmpty> 502 + <ComboboxList> 503 + {(item) => ( 504 + <ComboboxItem key={item} value={item}> 505 + {item} 506 + </ComboboxItem> 507 + )} 508 + </ComboboxList> 509 + </ComboboxContent> 510 + </Combobox> 511 + </Field> 512 + <Field> 513 + <FieldLabel htmlFor="small-form-comments">Comments</FieldLabel> 514 + <Textarea 515 + id="small-form-comments" 516 + placeholder="Add any additional comments" 517 + /> 518 + </Field> 519 + <Field orientation="horizontal"> 520 + <Button type="submit">Submit</Button> 521 + <Button variant="outline" type="button"> 522 + Cancel 523 + </Button> 524 + </Field> 525 + </FieldGroup> 526 + </form> 527 + </CardContent> 528 + </Card> 529 + </Example> 530 + ); 531 + }
+56
src/components/example.tsx
··· 1 + import { cn } from "@/lib/utils"; 2 + 3 + function ExampleWrapper({ className, ...props }: React.ComponentProps<"div">) { 4 + return ( 5 + <div className="bg-background w-full"> 6 + <div 7 + data-slot="example-wrapper" 8 + className={cn( 9 + "mx-auto grid min-h-screen w-full max-w-5xl min-w-0 content-center items-start gap-8 p-4 pt-2 sm:gap-12 sm:p-6 md:grid-cols-2 md:gap-8 lg:p-12 2xl:max-w-6xl", 10 + 11 + className, 12 + )} 13 + {...props} 14 + /> 15 + </div> 16 + ); 17 + } 18 + 19 + function Example({ 20 + title, 21 + children, 22 + className, 23 + containerClassName, 24 + ...props 25 + }: React.ComponentProps<"div"> & { 26 + title?: string; 27 + containerClassName?: string; 28 + }) { 29 + return ( 30 + <div 31 + data-slot="example" 32 + className={cn( 33 + "mx-auto flex w-full max-w-lg min-w-0 flex-col gap-1 self-stretch lg:max-w-none", 34 + containerClassName, 35 + )} 36 + {...props} 37 + > 38 + {title && ( 39 + <div className="text-muted-foreground px-1.5 py-2 text-xs font-medium"> 40 + {title} 41 + </div> 42 + )} 43 + <div 44 + data-slot="example-content" 45 + className={cn( 46 + "bg-background text-foreground flex min-w-0 flex-1 flex-col items-start gap-6 border border-dashed p-4 sm:p-6 *:[div:not([class*='w-'])]:w-full", 47 + className, 48 + )} 49 + > 50 + {children} 51 + </div> 52 + </div> 53 + ); 54 + } 55 + 56 + export { ExampleWrapper, Example };
+187
src/components/ui/alert-dialog.tsx
··· 1 + "use client"; 2 + 3 + import * as React from "react"; 4 + import { AlertDialog as AlertDialogPrimitive } from "@base-ui/react/alert-dialog"; 5 + 6 + import { cn } from "@/lib/utils"; 7 + import { Button } from "@/components/ui/button"; 8 + 9 + function AlertDialog({ ...props }: AlertDialogPrimitive.Root.Props) { 10 + return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} />; 11 + } 12 + 13 + function AlertDialogTrigger({ ...props }: AlertDialogPrimitive.Trigger.Props) { 14 + return ( 15 + <AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} /> 16 + ); 17 + } 18 + 19 + function AlertDialogPortal({ ...props }: AlertDialogPrimitive.Portal.Props) { 20 + return ( 21 + <AlertDialogPrimitive.Portal data-slot="alert-dialog-portal" {...props} /> 22 + ); 23 + } 24 + 25 + function AlertDialogOverlay({ 26 + className, 27 + ...props 28 + }: AlertDialogPrimitive.Backdrop.Props) { 29 + return ( 30 + <AlertDialogPrimitive.Backdrop 31 + data-slot="alert-dialog-overlay" 32 + className={cn( 33 + "data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 isolate z-50", 34 + className, 35 + )} 36 + {...props} 37 + /> 38 + ); 39 + } 40 + 41 + function AlertDialogContent({ 42 + className, 43 + size = "default", 44 + ...props 45 + }: AlertDialogPrimitive.Popup.Props & { 46 + size?: "default" | "sm"; 47 + }) { 48 + return ( 49 + <AlertDialogPortal> 50 + <AlertDialogOverlay /> 51 + <AlertDialogPrimitive.Popup 52 + data-slot="alert-dialog-content" 53 + data-size={size} 54 + className={cn( 55 + "data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/5 gap-6 rounded-4xl p-6 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 outline-none", 56 + className, 57 + )} 58 + {...props} 59 + /> 60 + </AlertDialogPortal> 61 + ); 62 + } 63 + 64 + function AlertDialogHeader({ 65 + className, 66 + ...props 67 + }: React.ComponentProps<"div">) { 68 + return ( 69 + <div 70 + data-slot="alert-dialog-header" 71 + className={cn( 72 + "grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]", 73 + className, 74 + )} 75 + {...props} 76 + /> 77 + ); 78 + } 79 + 80 + function AlertDialogFooter({ 81 + className, 82 + ...props 83 + }: React.ComponentProps<"div">) { 84 + return ( 85 + <div 86 + data-slot="alert-dialog-footer" 87 + className={cn( 88 + "flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end", 89 + className, 90 + )} 91 + {...props} 92 + /> 93 + ); 94 + } 95 + 96 + function AlertDialogMedia({ 97 + className, 98 + ...props 99 + }: React.ComponentProps<"div">) { 100 + return ( 101 + <div 102 + data-slot="alert-dialog-media" 103 + className={cn( 104 + "bg-muted mb-2 inline-flex size-16 items-center justify-center rounded-full sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8", 105 + className, 106 + )} 107 + {...props} 108 + /> 109 + ); 110 + } 111 + 112 + function AlertDialogTitle({ 113 + className, 114 + ...props 115 + }: React.ComponentProps<typeof AlertDialogPrimitive.Title>) { 116 + return ( 117 + <AlertDialogPrimitive.Title 118 + data-slot="alert-dialog-title" 119 + className={cn( 120 + "text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", 121 + className, 122 + )} 123 + {...props} 124 + /> 125 + ); 126 + } 127 + 128 + function AlertDialogDescription({ 129 + className, 130 + ...props 131 + }: React.ComponentProps<typeof AlertDialogPrimitive.Description>) { 132 + return ( 133 + <AlertDialogPrimitive.Description 134 + data-slot="alert-dialog-description" 135 + className={cn( 136 + "text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3", 137 + className, 138 + )} 139 + {...props} 140 + /> 141 + ); 142 + } 143 + 144 + function AlertDialogAction({ 145 + className, 146 + ...props 147 + }: React.ComponentProps<typeof Button>) { 148 + return ( 149 + <Button 150 + data-slot="alert-dialog-action" 151 + className={cn(className)} 152 + {...props} 153 + /> 154 + ); 155 + } 156 + 157 + function AlertDialogCancel({ 158 + className, 159 + variant = "outline", 160 + size = "default", 161 + ...props 162 + }: AlertDialogPrimitive.Close.Props & 163 + Pick<React.ComponentProps<typeof Button>, "variant" | "size">) { 164 + return ( 165 + <AlertDialogPrimitive.Close 166 + data-slot="alert-dialog-cancel" 167 + className={cn(className)} 168 + render={<Button variant={variant} size={size} />} 169 + {...props} 170 + /> 171 + ); 172 + } 173 + 174 + export { 175 + AlertDialog, 176 + AlertDialogAction, 177 + AlertDialogCancel, 178 + AlertDialogContent, 179 + AlertDialogDescription, 180 + AlertDialogFooter, 181 + AlertDialogHeader, 182 + AlertDialogMedia, 183 + AlertDialogOverlay, 184 + AlertDialogPortal, 185 + AlertDialogTitle, 186 + AlertDialogTrigger, 187 + };
+52
src/components/ui/badge.tsx
··· 1 + import { mergeProps } from "@base-ui/react/merge-props"; 2 + import { useRender } from "@base-ui/react/use-render"; 3 + import { cva, type VariantProps } from "class-variance-authority"; 4 + 5 + import { cn } from "@/lib/utils"; 6 + 7 + const badgeVariants = cva( 8 + "h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3! inline-flex items-center justify-center w-fit whitespace-nowrap shrink-0 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive overflow-hidden group/badge", 9 + { 10 + variants: { 11 + variant: { 12 + default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80", 13 + secondary: 14 + "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80", 15 + destructive: 16 + "bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20", 17 + outline: 18 + "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground bg-input/30", 19 + ghost: 20 + "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50", 21 + link: "text-primary underline-offset-4 hover:underline", 22 + }, 23 + }, 24 + defaultVariants: { 25 + variant: "default", 26 + }, 27 + }, 28 + ); 29 + 30 + function Badge({ 31 + className, 32 + variant = "default", 33 + render, 34 + ...props 35 + }: useRender.ComponentProps<"span"> & VariantProps<typeof badgeVariants>) { 36 + return useRender({ 37 + defaultTagName: "span", 38 + props: mergeProps<"span">( 39 + { 40 + className: cn(badgeVariants({ className, variant })), 41 + }, 42 + props, 43 + ), 44 + render, 45 + state: { 46 + slot: "badge", 47 + variant, 48 + }, 49 + }); 50 + } 51 + 52 + export { Badge, badgeVariants };
+58
src/components/ui/button.tsx
··· 1 + "use client"; 2 + 3 + import { Button as ButtonPrimitive } from "@base-ui/react/button"; 4 + import { cva, type VariantProps } from "class-variance-authority"; 5 + 6 + import { cn } from "@/lib/utils"; 7 + 8 + const buttonVariants = cva( 9 + "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-4xl border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none", 10 + { 11 + variants: { 12 + variant: { 13 + default: "bg-primary text-primary-foreground hover:bg-primary/80", 14 + outline: 15 + "border-border bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground", 16 + secondary: 17 + "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground", 18 + ghost: 19 + "hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground", 20 + destructive: 21 + "bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30", 22 + link: "text-primary underline-offset-4 hover:underline", 23 + }, 24 + size: { 25 + default: 26 + "h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5", 27 + xs: "h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3", 28 + sm: "h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", 29 + lg: "h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3", 30 + icon: "size-9", 31 + "icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3", 32 + "icon-sm": "size-8", 33 + "icon-lg": "size-10", 34 + }, 35 + }, 36 + defaultVariants: { 37 + variant: "default", 38 + size: "default", 39 + }, 40 + }, 41 + ); 42 + 43 + function Button({ 44 + className, 45 + variant = "default", 46 + size = "default", 47 + ...props 48 + }: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) { 49 + return ( 50 + <ButtonPrimitive 51 + data-slot="button" 52 + className={cn(buttonVariants({ variant, size, className }))} 53 + {...props} 54 + /> 55 + ); 56 + } 57 + 58 + export { Button, buttonVariants };
+100
src/components/ui/card.tsx
··· 1 + import * as React from "react"; 2 + 3 + import { cn } from "@/lib/utils"; 4 + 5 + function Card({ 6 + className, 7 + size = "default", 8 + ...props 9 + }: React.ComponentProps<"div"> & { size?: "default" | "sm" }) { 10 + return ( 11 + <div 12 + data-slot="card" 13 + data-size={size} 14 + className={cn( 15 + "ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-2xl py-6 text-sm ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col", 16 + className, 17 + )} 18 + {...props} 19 + /> 20 + ); 21 + } 22 + 23 + function CardHeader({ className, ...props }: React.ComponentProps<"div">) { 24 + return ( 25 + <div 26 + data-slot="card-header" 27 + className={cn( 28 + "gap-2 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]", 29 + className, 30 + )} 31 + {...props} 32 + /> 33 + ); 34 + } 35 + 36 + function CardTitle({ className, ...props }: React.ComponentProps<"div">) { 37 + return ( 38 + <div 39 + data-slot="card-title" 40 + className={cn("text-base font-medium", className)} 41 + {...props} 42 + /> 43 + ); 44 + } 45 + 46 + function CardDescription({ className, ...props }: React.ComponentProps<"div">) { 47 + return ( 48 + <div 49 + data-slot="card-description" 50 + className={cn("text-muted-foreground text-sm", className)} 51 + {...props} 52 + /> 53 + ); 54 + } 55 + 56 + function CardAction({ className, ...props }: React.ComponentProps<"div">) { 57 + return ( 58 + <div 59 + data-slot="card-action" 60 + className={cn( 61 + "col-start-2 row-span-2 row-start-1 self-start justify-self-end", 62 + className, 63 + )} 64 + {...props} 65 + /> 66 + ); 67 + } 68 + 69 + function CardContent({ className, ...props }: React.ComponentProps<"div">) { 70 + return ( 71 + <div 72 + data-slot="card-content" 73 + className={cn("px-6 group-data-[size=sm]/card:px-4", className)} 74 + {...props} 75 + /> 76 + ); 77 + } 78 + 79 + function CardFooter({ className, ...props }: React.ComponentProps<"div">) { 80 + return ( 81 + <div 82 + data-slot="card-footer" 83 + className={cn( 84 + "rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4 flex items-center", 85 + className, 86 + )} 87 + {...props} 88 + /> 89 + ); 90 + } 91 + 92 + export { 93 + Card, 94 + CardHeader, 95 + CardFooter, 96 + CardTitle, 97 + CardAction, 98 + CardDescription, 99 + CardContent, 100 + };
+321
src/components/ui/combobox.tsx
··· 1 + "use client"; 2 + 3 + import * as React from "react"; 4 + import { Combobox as ComboboxPrimitive } from "@base-ui/react"; 5 + 6 + import { cn } from "@/lib/utils"; 7 + import { Button } from "@/components/ui/button"; 8 + import { 9 + InputGroup, 10 + InputGroupAddon, 11 + InputGroupButton, 12 + InputGroupInput, 13 + } from "@/components/ui/input-group"; 14 + import { HugeiconsIcon } from "@hugeicons/react"; 15 + import { 16 + ArrowDown01Icon, 17 + Cancel01Icon, 18 + Tick02Icon, 19 + } from "@hugeicons/core-free-icons"; 20 + 21 + const Combobox = ComboboxPrimitive.Root; 22 + 23 + function ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) { 24 + return <ComboboxPrimitive.Value data-slot="combobox-value" {...props} />; 25 + } 26 + 27 + function ComboboxTrigger({ 28 + className, 29 + children, 30 + ...props 31 + }: ComboboxPrimitive.Trigger.Props) { 32 + return ( 33 + <ComboboxPrimitive.Trigger 34 + data-slot="combobox-trigger" 35 + className={cn("[&_svg:not([class*='size-'])]:size-4", className)} 36 + {...props} 37 + > 38 + {children} 39 + <HugeiconsIcon 40 + icon={ArrowDown01Icon} 41 + strokeWidth={2} 42 + className="text-muted-foreground size-4 pointer-events-none" 43 + /> 44 + </ComboboxPrimitive.Trigger> 45 + ); 46 + } 47 + 48 + function ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) { 49 + return ( 50 + <ComboboxPrimitive.Clear 51 + data-slot="combobox-clear" 52 + render={<InputGroupButton variant="ghost" size="icon-xs" />} 53 + className={cn(className)} 54 + {...props} 55 + > 56 + <HugeiconsIcon 57 + icon={Cancel01Icon} 58 + strokeWidth={2} 59 + className="pointer-events-none" 60 + /> 61 + </ComboboxPrimitive.Clear> 62 + ); 63 + } 64 + 65 + function ComboboxInput({ 66 + className, 67 + children, 68 + disabled = false, 69 + showTrigger = true, 70 + showClear = false, 71 + ...props 72 + }: ComboboxPrimitive.Input.Props & { 73 + showTrigger?: boolean; 74 + showClear?: boolean; 75 + }) { 76 + return ( 77 + <InputGroup className={cn("w-auto", className)}> 78 + <ComboboxPrimitive.Input 79 + render={<InputGroupInput disabled={disabled} />} 80 + {...props} 81 + /> 82 + <InputGroupAddon align="inline-end"> 83 + {showTrigger && ( 84 + <InputGroupButton 85 + size="icon-xs" 86 + variant="ghost" 87 + render={<ComboboxTrigger />} 88 + data-slot="input-group-button" 89 + className="group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent" 90 + disabled={disabled} 91 + /> 92 + )} 93 + {showClear && <ComboboxClear disabled={disabled} />} 94 + </InputGroupAddon> 95 + {children} 96 + </InputGroup> 97 + ); 98 + } 99 + 100 + function ComboboxContent({ 101 + className, 102 + side = "bottom", 103 + sideOffset = 6, 104 + align = "start", 105 + alignOffset = 0, 106 + anchor, 107 + ...props 108 + }: ComboboxPrimitive.Popup.Props & 109 + Pick< 110 + ComboboxPrimitive.Positioner.Props, 111 + "side" | "align" | "sideOffset" | "alignOffset" | "anchor" 112 + >) { 113 + return ( 114 + <ComboboxPrimitive.Portal> 115 + <ComboboxPrimitive.Positioner 116 + side={side} 117 + sideOffset={sideOffset} 118 + align={align} 119 + alignOffset={alignOffset} 120 + anchor={anchor} 121 + className="isolate z-50" 122 + > 123 + <ComboboxPrimitive.Popup 124 + data-slot="combobox-content" 125 + data-chips={!!anchor} 126 + className={cn( 127 + "bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 *:data-[slot=input-group]:bg-input/30 overflow-hidden rounded-2xl shadow-2xl ring-1 duration-100 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-9 *:data-[slot=input-group]:border-none *:data-[slot=input-group]:shadow-none data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) data-[chips=true]:min-w-(--anchor-width)", 128 + className, 129 + )} 130 + {...props} 131 + /> 132 + </ComboboxPrimitive.Positioner> 133 + </ComboboxPrimitive.Portal> 134 + ); 135 + } 136 + 137 + function ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) { 138 + return ( 139 + <ComboboxPrimitive.List 140 + data-slot="combobox-list" 141 + className={cn( 142 + "no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 p-1 data-empty:p-0 overflow-y-auto overscroll-contain", 143 + className, 144 + )} 145 + {...props} 146 + /> 147 + ); 148 + } 149 + 150 + function ComboboxItem({ 151 + className, 152 + children, 153 + ...props 154 + }: ComboboxPrimitive.Item.Props) { 155 + return ( 156 + <ComboboxPrimitive.Item 157 + data-slot="combobox-item" 158 + className={cn( 159 + "data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4 relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", 160 + className, 161 + )} 162 + {...props} 163 + > 164 + {children} 165 + <ComboboxPrimitive.ItemIndicator 166 + render={ 167 + <span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" /> 168 + } 169 + > 170 + <HugeiconsIcon 171 + icon={Tick02Icon} 172 + strokeWidth={2} 173 + className="pointer-events-none" 174 + /> 175 + </ComboboxPrimitive.ItemIndicator> 176 + </ComboboxPrimitive.Item> 177 + ); 178 + } 179 + 180 + function ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) { 181 + return ( 182 + <ComboboxPrimitive.Group 183 + data-slot="combobox-group" 184 + className={cn(className)} 185 + {...props} 186 + /> 187 + ); 188 + } 189 + 190 + function ComboboxLabel({ 191 + className, 192 + ...props 193 + }: ComboboxPrimitive.GroupLabel.Props) { 194 + return ( 195 + <ComboboxPrimitive.GroupLabel 196 + data-slot="combobox-label" 197 + className={cn("text-muted-foreground px-3.5 py-2.5 text-xs", className)} 198 + {...props} 199 + /> 200 + ); 201 + } 202 + 203 + function ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) { 204 + return ( 205 + <ComboboxPrimitive.Collection data-slot="combobox-collection" {...props} /> 206 + ); 207 + } 208 + 209 + function ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) { 210 + return ( 211 + <ComboboxPrimitive.Empty 212 + data-slot="combobox-empty" 213 + className={cn( 214 + "text-muted-foreground hidden w-full justify-center py-2 text-center text-sm group-data-empty/combobox-content:flex", 215 + className, 216 + )} 217 + {...props} 218 + /> 219 + ); 220 + } 221 + 222 + function ComboboxSeparator({ 223 + className, 224 + ...props 225 + }: ComboboxPrimitive.Separator.Props) { 226 + return ( 227 + <ComboboxPrimitive.Separator 228 + data-slot="combobox-separator" 229 + className={cn("bg-border/50 -mx-1 my-1 h-px", className)} 230 + {...props} 231 + /> 232 + ); 233 + } 234 + 235 + function ComboboxChips({ 236 + className, 237 + ...props 238 + }: React.ComponentPropsWithRef<typeof ComboboxPrimitive.Chips> & 239 + ComboboxPrimitive.Chips.Props) { 240 + return ( 241 + <ComboboxPrimitive.Chips 242 + data-slot="combobox-chips" 243 + className={cn( 244 + "bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 flex min-h-9 flex-wrap items-center gap-1.5 rounded-4xl border bg-clip-padding px-2.5 py-1.5 text-sm transition-colors focus-within:ring-[3px] has-aria-invalid:ring-[3px] has-data-[slot=combobox-chip]:px-1.5", 245 + className, 246 + )} 247 + {...props} 248 + /> 249 + ); 250 + } 251 + 252 + function ComboboxChip({ 253 + className, 254 + children, 255 + showRemove = true, 256 + ...props 257 + }: ComboboxPrimitive.Chip.Props & { 258 + showRemove?: boolean; 259 + }) { 260 + return ( 261 + <ComboboxPrimitive.Chip 262 + data-slot="combobox-chip" 263 + className={cn( 264 + "bg-muted-foreground/10 text-foreground flex h-[calc(--spacing(5.5))] w-fit items-center justify-center gap-1 rounded-4xl px-2 text-xs font-medium whitespace-nowrap has-data-[slot=combobox-chip-remove]:pr-0 has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50", 265 + className, 266 + )} 267 + {...props} 268 + > 269 + {children} 270 + {showRemove && ( 271 + <ComboboxPrimitive.ChipRemove 272 + render={<Button variant="ghost" size="icon-xs" />} 273 + className="-ml-1 opacity-50 hover:opacity-100" 274 + data-slot="combobox-chip-remove" 275 + > 276 + <HugeiconsIcon 277 + icon={Cancel01Icon} 278 + strokeWidth={2} 279 + className="pointer-events-none" 280 + /> 281 + </ComboboxPrimitive.ChipRemove> 282 + )} 283 + </ComboboxPrimitive.Chip> 284 + ); 285 + } 286 + 287 + function ComboboxChipsInput({ 288 + className, 289 + ...props 290 + }: ComboboxPrimitive.Input.Props) { 291 + return ( 292 + <ComboboxPrimitive.Input 293 + data-slot="combobox-chip-input" 294 + className={cn("min-w-16 flex-1 outline-none", className)} 295 + {...props} 296 + /> 297 + ); 298 + } 299 + 300 + function useComboboxAnchor() { 301 + return React.useRef<HTMLDivElement | null>(null); 302 + } 303 + 304 + export { 305 + Combobox, 306 + ComboboxInput, 307 + ComboboxContent, 308 + ComboboxList, 309 + ComboboxItem, 310 + ComboboxGroup, 311 + ComboboxLabel, 312 + ComboboxCollection, 313 + ComboboxEmpty, 314 + ComboboxSeparator, 315 + ComboboxChips, 316 + ComboboxChip, 317 + ComboboxChipsInput, 318 + ComboboxTrigger, 319 + ComboboxValue, 320 + useComboboxAnchor, 321 + };
+277
src/components/ui/dropdown-menu.tsx
··· 1 + "use client"; 2 + 3 + import * as React from "react"; 4 + import { Menu as MenuPrimitive } from "@base-ui/react/menu"; 5 + 6 + import { cn } from "@/lib/utils"; 7 + import { HugeiconsIcon } from "@hugeicons/react"; 8 + import { ArrowRight01Icon, Tick02Icon } from "@hugeicons/core-free-icons"; 9 + 10 + function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) { 11 + return <MenuPrimitive.Root data-slot="dropdown-menu" {...props} />; 12 + } 13 + 14 + function DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) { 15 + return <MenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />; 16 + } 17 + 18 + function DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) { 19 + return <MenuPrimitive.Trigger data-slot="dropdown-menu-trigger" {...props} />; 20 + } 21 + 22 + function DropdownMenuContent({ 23 + align = "start", 24 + alignOffset = 0, 25 + side = "bottom", 26 + sideOffset = 4, 27 + className, 28 + ...props 29 + }: MenuPrimitive.Popup.Props & 30 + Pick< 31 + MenuPrimitive.Positioner.Props, 32 + "align" | "alignOffset" | "side" | "sideOffset" 33 + >) { 34 + return ( 35 + <MenuPrimitive.Portal> 36 + <MenuPrimitive.Positioner 37 + className="isolate z-50 outline-none" 38 + align={align} 39 + alignOffset={alignOffset} 40 + side={side} 41 + sideOffset={sideOffset} 42 + > 43 + <MenuPrimitive.Popup 44 + data-slot="dropdown-menu-content" 45 + className={cn( 46 + "data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-48 rounded-2xl p-1 shadow-2xl ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto outline-none data-closed:overflow-hidden", 47 + className, 48 + )} 49 + {...props} 50 + /> 51 + </MenuPrimitive.Positioner> 52 + </MenuPrimitive.Portal> 53 + ); 54 + } 55 + 56 + function DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) { 57 + return <MenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />; 58 + } 59 + 60 + function DropdownMenuLabel({ 61 + className, 62 + inset, 63 + ...props 64 + }: MenuPrimitive.GroupLabel.Props & { 65 + inset?: boolean; 66 + }) { 67 + return ( 68 + <MenuPrimitive.GroupLabel 69 + data-slot="dropdown-menu-label" 70 + data-inset={inset} 71 + className={cn( 72 + "text-muted-foreground px-3 py-2.5 text-xs data-inset:pl-9.5", 73 + className, 74 + )} 75 + {...props} 76 + /> 77 + ); 78 + } 79 + 80 + function DropdownMenuItem({ 81 + className, 82 + inset, 83 + variant = "default", 84 + ...props 85 + }: MenuPrimitive.Item.Props & { 86 + inset?: boolean; 87 + variant?: "default" | "destructive"; 88 + }) { 89 + return ( 90 + <MenuPrimitive.Item 91 + data-slot="dropdown-menu-item" 92 + data-inset={inset} 93 + data-variant={variant} 94 + className={cn( 95 + "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", 96 + className, 97 + )} 98 + {...props} 99 + /> 100 + ); 101 + } 102 + 103 + function DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) { 104 + return <MenuPrimitive.SubmenuRoot data-slot="dropdown-menu-sub" {...props} />; 105 + } 106 + 107 + function DropdownMenuSubTrigger({ 108 + className, 109 + inset, 110 + children, 111 + ...props 112 + }: MenuPrimitive.SubmenuTrigger.Props & { 113 + inset?: boolean; 114 + }) { 115 + return ( 116 + <MenuPrimitive.SubmenuTrigger 117 + data-slot="dropdown-menu-sub-trigger" 118 + data-inset={inset} 119 + className={cn( 120 + "focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4 data-popup-open:bg-accent data-popup-open:text-accent-foreground flex cursor-default items-center outline-hidden select-none [&_svg]:pointer-events-none [&_svg]:shrink-0", 121 + className, 122 + )} 123 + {...props} 124 + > 125 + {children} 126 + <HugeiconsIcon 127 + icon={ArrowRight01Icon} 128 + strokeWidth={2} 129 + className="ml-auto" 130 + /> 131 + </MenuPrimitive.SubmenuTrigger> 132 + ); 133 + } 134 + 135 + function DropdownMenuSubContent({ 136 + align = "start", 137 + alignOffset = -3, 138 + side = "right", 139 + sideOffset = 0, 140 + className, 141 + ...props 142 + }: React.ComponentProps<typeof DropdownMenuContent>) { 143 + return ( 144 + <DropdownMenuContent 145 + data-slot="dropdown-menu-sub-content" 146 + className={cn( 147 + "data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-36 rounded-2xl p-1 shadow-2xl ring-1 duration-100 w-auto", 148 + className, 149 + )} 150 + align={align} 151 + alignOffset={alignOffset} 152 + side={side} 153 + sideOffset={sideOffset} 154 + {...props} 155 + /> 156 + ); 157 + } 158 + 159 + function DropdownMenuCheckboxItem({ 160 + className, 161 + children, 162 + checked, 163 + inset, 164 + ...props 165 + }: MenuPrimitive.CheckboxItem.Props & { 166 + inset?: boolean; 167 + }) { 168 + return ( 169 + <MenuPrimitive.CheckboxItem 170 + data-slot="dropdown-menu-checkbox-item" 171 + data-inset={inset} 172 + className={cn( 173 + "focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", 174 + className, 175 + )} 176 + checked={checked} 177 + {...props} 178 + > 179 + <span 180 + className="absolute right-2 flex items-center justify-center pointer-events-none" 181 + data-slot="dropdown-menu-checkbox-item-indicator" 182 + > 183 + <MenuPrimitive.CheckboxItemIndicator> 184 + <HugeiconsIcon icon={Tick02Icon} strokeWidth={2} /> 185 + </MenuPrimitive.CheckboxItemIndicator> 186 + </span> 187 + {children} 188 + </MenuPrimitive.CheckboxItem> 189 + ); 190 + } 191 + 192 + function DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) { 193 + return ( 194 + <MenuPrimitive.RadioGroup 195 + data-slot="dropdown-menu-radio-group" 196 + {...props} 197 + /> 198 + ); 199 + } 200 + 201 + function DropdownMenuRadioItem({ 202 + className, 203 + children, 204 + inset, 205 + ...props 206 + }: MenuPrimitive.RadioItem.Props & { 207 + inset?: boolean; 208 + }) { 209 + return ( 210 + <MenuPrimitive.RadioItem 211 + data-slot="dropdown-menu-radio-item" 212 + data-inset={inset} 213 + className={cn( 214 + "focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", 215 + className, 216 + )} 217 + {...props} 218 + > 219 + <span 220 + className="absolute right-2 flex items-center justify-center pointer-events-none" 221 + data-slot="dropdown-menu-radio-item-indicator" 222 + > 223 + <MenuPrimitive.RadioItemIndicator> 224 + <HugeiconsIcon icon={Tick02Icon} strokeWidth={2} /> 225 + </MenuPrimitive.RadioItemIndicator> 226 + </span> 227 + {children} 228 + </MenuPrimitive.RadioItem> 229 + ); 230 + } 231 + 232 + function DropdownMenuSeparator({ 233 + className, 234 + ...props 235 + }: MenuPrimitive.Separator.Props) { 236 + return ( 237 + <MenuPrimitive.Separator 238 + data-slot="dropdown-menu-separator" 239 + className={cn("bg-border/50 -mx-1 my-1 h-px", className)} 240 + {...props} 241 + /> 242 + ); 243 + } 244 + 245 + function DropdownMenuShortcut({ 246 + className, 247 + ...props 248 + }: React.ComponentProps<"span">) { 249 + return ( 250 + <span 251 + data-slot="dropdown-menu-shortcut" 252 + className={cn( 253 + "text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest", 254 + className, 255 + )} 256 + {...props} 257 + /> 258 + ); 259 + } 260 + 261 + export { 262 + DropdownMenu, 263 + DropdownMenuPortal, 264 + DropdownMenuTrigger, 265 + DropdownMenuContent, 266 + DropdownMenuGroup, 267 + DropdownMenuLabel, 268 + DropdownMenuItem, 269 + DropdownMenuCheckboxItem, 270 + DropdownMenuRadioGroup, 271 + DropdownMenuRadioItem, 272 + DropdownMenuSeparator, 273 + DropdownMenuShortcut, 274 + DropdownMenuSub, 275 + DropdownMenuSubTrigger, 276 + DropdownMenuSubContent, 277 + };
+238
src/components/ui/field.tsx
··· 1 + "use client"; 2 + 3 + import { useMemo } from "react"; 4 + import { cva, type VariantProps } from "class-variance-authority"; 5 + 6 + import { cn } from "@/lib/utils"; 7 + import { Label } from "@/components/ui/label"; 8 + import { Separator } from "@/components/ui/separator"; 9 + 10 + function FieldSet({ className, ...props }: React.ComponentProps<"fieldset">) { 11 + return ( 12 + <fieldset 13 + data-slot="field-set" 14 + className={cn( 15 + "gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3 flex flex-col", 16 + className, 17 + )} 18 + {...props} 19 + /> 20 + ); 21 + } 22 + 23 + function FieldLegend({ 24 + className, 25 + variant = "legend", 26 + ...props 27 + }: React.ComponentProps<"legend"> & { variant?: "legend" | "label" }) { 28 + return ( 29 + <legend 30 + data-slot="field-legend" 31 + data-variant={variant} 32 + className={cn( 33 + "mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base", 34 + className, 35 + )} 36 + {...props} 37 + /> 38 + ); 39 + } 40 + 41 + function FieldGroup({ className, ...props }: React.ComponentProps<"div">) { 42 + return ( 43 + <div 44 + data-slot="field-group" 45 + className={cn( 46 + "gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4 group/field-group @container/field-group flex w-full flex-col", 47 + className, 48 + )} 49 + {...props} 50 + /> 51 + ); 52 + } 53 + 54 + const fieldVariants = cva( 55 + "data-[invalid=true]:text-destructive gap-3 group/field flex w-full", 56 + { 57 + variants: { 58 + orientation: { 59 + vertical: "flex-col *:w-full [&>.sr-only]:w-auto", 60 + horizontal: 61 + "flex-row items-center *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px", 62 + responsive: 63 + "flex-col *:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:*:data-[slot=field-label]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px", 64 + }, 65 + }, 66 + defaultVariants: { 67 + orientation: "vertical", 68 + }, 69 + }, 70 + ); 71 + 72 + function Field({ 73 + className, 74 + orientation = "vertical", 75 + ...props 76 + }: React.ComponentProps<"div"> & VariantProps<typeof fieldVariants>) { 77 + return ( 78 + <div 79 + role="group" 80 + data-slot="field" 81 + data-orientation={orientation} 82 + className={cn(fieldVariants({ orientation }), className)} 83 + {...props} 84 + /> 85 + ); 86 + } 87 + 88 + function FieldContent({ className, ...props }: React.ComponentProps<"div">) { 89 + return ( 90 + <div 91 + data-slot="field-content" 92 + className={cn( 93 + "gap-1 group/field-content flex flex-1 flex-col leading-snug", 94 + className, 95 + )} 96 + {...props} 97 + /> 98 + ); 99 + } 100 + 101 + function FieldLabel({ 102 + className, 103 + ...props 104 + }: React.ComponentProps<typeof Label>) { 105 + return ( 106 + <Label 107 + data-slot="field-label" 108 + className={cn( 109 + "has-data-checked:bg-primary/5 has-data-checked:border-primary/30 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-xl has-[>[data-slot=field]]:border *:data-[slot=field]:p-4 group/field-label peer/field-label flex w-fit leading-snug", 110 + "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col", 111 + className, 112 + )} 113 + {...props} 114 + /> 115 + ); 116 + } 117 + 118 + function FieldTitle({ className, ...props }: React.ComponentProps<"div">) { 119 + return ( 120 + <div 121 + data-slot="field-label" 122 + className={cn( 123 + "gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50 flex w-fit items-center leading-snug", 124 + className, 125 + )} 126 + {...props} 127 + /> 128 + ); 129 + } 130 + 131 + function FieldDescription({ className, ...props }: React.ComponentProps<"p">) { 132 + return ( 133 + <p 134 + data-slot="field-description" 135 + className={cn( 136 + "text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5 leading-normal font-normal group-has-data-horizontal/field:text-balance", 137 + "last:mt-0 nth-last-2:-mt-1", 138 + "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4", 139 + className, 140 + )} 141 + {...props} 142 + /> 143 + ); 144 + } 145 + 146 + function FieldSeparator({ 147 + children, 148 + className, 149 + ...props 150 + }: React.ComponentProps<"div"> & { 151 + children?: React.ReactNode; 152 + }) { 153 + return ( 154 + <div 155 + data-slot="field-separator" 156 + data-content={!!children} 157 + className={cn( 158 + "-my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2 relative", 159 + className, 160 + )} 161 + {...props} 162 + > 163 + <Separator className="absolute inset-0 top-1/2" /> 164 + {children && ( 165 + <span 166 + className="text-muted-foreground px-2 bg-background relative mx-auto block w-fit" 167 + data-slot="field-separator-content" 168 + > 169 + {children} 170 + </span> 171 + )} 172 + </div> 173 + ); 174 + } 175 + 176 + function FieldError({ 177 + className, 178 + children, 179 + errors, 180 + ...props 181 + }: React.ComponentProps<"div"> & { 182 + errors?: Array<{ message?: string } | undefined>; 183 + }) { 184 + const content = useMemo(() => { 185 + if (children) { 186 + return children; 187 + } 188 + 189 + if (!errors?.length) { 190 + return null; 191 + } 192 + 193 + const uniqueErrors = [ 194 + ...new Map(errors.map((error) => [error?.message, error])).values(), 195 + ]; 196 + 197 + if (uniqueErrors?.length == 1) { 198 + return uniqueErrors[0]?.message; 199 + } 200 + 201 + return ( 202 + <ul className="ml-4 flex list-disc flex-col gap-1"> 203 + {uniqueErrors.map( 204 + (error, index) => 205 + error?.message && <li key={index}>{error.message}</li>, 206 + )} 207 + </ul> 208 + ); 209 + }, [children, errors]); 210 + 211 + if (!content) { 212 + return null; 213 + } 214 + 215 + return ( 216 + <div 217 + role="alert" 218 + data-slot="field-error" 219 + className={cn("text-destructive text-sm font-normal", className)} 220 + {...props} 221 + > 222 + {content} 223 + </div> 224 + ); 225 + } 226 + 227 + export { 228 + Field, 229 + FieldLabel, 230 + FieldDescription, 231 + FieldError, 232 + FieldGroup, 233 + FieldLegend, 234 + FieldSeparator, 235 + FieldSet, 236 + FieldContent, 237 + FieldTitle, 238 + };
+157
src/components/ui/input-group.tsx
··· 1 + "use client"; 2 + 3 + import * as React from "react"; 4 + import { cva, type VariantProps } from "class-variance-authority"; 5 + 6 + import { cn } from "@/lib/utils"; 7 + import { Button } from "@/components/ui/button"; 8 + import { Input } from "@/components/ui/input"; 9 + import { Textarea } from "@/components/ui/textarea"; 10 + 11 + function InputGroup({ className, ...props }: React.ComponentProps<"div">) { 12 + return ( 13 + <div 14 + data-slot="input-group" 15 + role="group" 16 + className={cn( 17 + "border-input bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 h-9 rounded-4xl border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-2xl has-data-[align=block-start]:rounded-2xl has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot][aria-invalid=true]]:ring-[3px] has-[textarea]:rounded-xl has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5 group/input-group relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto", 18 + className, 19 + )} 20 + {...props} 21 + /> 22 + ); 23 + } 24 + 25 + const inputGroupAddonVariants = cva( 26 + "text-muted-foreground **:data-[slot=kbd]:bg-muted-foreground/10 h-auto gap-2 py-2 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 **:data-[slot=kbd]:rounded-4xl **:data-[slot=kbd]:px-1.5 [&>svg:not([class*='size-'])]:size-4 flex cursor-text items-center justify-center select-none", 27 + { 28 + variants: { 29 + align: { 30 + "inline-start": 31 + "pl-3 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem] order-first", 32 + "inline-end": 33 + "pr-3 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem] order-last", 34 + "block-start": 35 + "px-3 pt-3 group-has-[>input]/input-group:pt-3 [.border-b]:pb-3 order-first w-full justify-start", 36 + "block-end": 37 + "px-3 pb-3 group-has-[>input]/input-group:pb-3 [.border-t]:pt-3 order-last w-full justify-start", 38 + }, 39 + }, 40 + defaultVariants: { 41 + align: "inline-start", 42 + }, 43 + }, 44 + ); 45 + 46 + function InputGroupAddon({ 47 + className, 48 + align = "inline-start", 49 + ...props 50 + }: React.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>) { 51 + return ( 52 + <div 53 + role="group" 54 + data-slot="input-group-addon" 55 + data-align={align} 56 + className={cn(inputGroupAddonVariants({ align }), className)} 57 + onClick={(e) => { 58 + if ((e.target as HTMLElement).closest("button")) { 59 + return; 60 + } 61 + e.currentTarget.parentElement?.querySelector("input")?.focus(); 62 + }} 63 + {...props} 64 + /> 65 + ); 66 + } 67 + 68 + const inputGroupButtonVariants = cva( 69 + "gap-2 rounded-4xl text-sm shadow-none flex items-center", 70 + { 71 + variants: { 72 + size: { 73 + xs: "h-6 gap-1 px-1.5 [&>svg:not([class*='size-'])]:size-3.5", 74 + sm: "", 75 + "icon-xs": "size-6 p-0 has-[>svg]:p-0", 76 + "icon-sm": "size-8 p-0 has-[>svg]:p-0", 77 + }, 78 + }, 79 + defaultVariants: { 80 + size: "xs", 81 + }, 82 + }, 83 + ); 84 + 85 + function InputGroupButton({ 86 + className, 87 + type = "button", 88 + variant = "ghost", 89 + size = "xs", 90 + ...props 91 + }: Omit<React.ComponentProps<typeof Button>, "size" | "type"> & 92 + VariantProps<typeof inputGroupButtonVariants> & { 93 + type?: "button" | "submit" | "reset"; 94 + }) { 95 + return ( 96 + <Button 97 + type={type} 98 + data-size={size} 99 + variant={variant} 100 + className={cn(inputGroupButtonVariants({ size }), className)} 101 + {...props} 102 + /> 103 + ); 104 + } 105 + 106 + function InputGroupText({ className, ...props }: React.ComponentProps<"span">) { 107 + return ( 108 + <span 109 + className={cn( 110 + "text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4 flex items-center [&_svg]:pointer-events-none", 111 + className, 112 + )} 113 + {...props} 114 + /> 115 + ); 116 + } 117 + 118 + function InputGroupInput({ 119 + className, 120 + ...props 121 + }: React.ComponentProps<"input">) { 122 + return ( 123 + <Input 124 + data-slot="input-group-control" 125 + className={cn( 126 + "rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent flex-1", 127 + className, 128 + )} 129 + {...props} 130 + /> 131 + ); 132 + } 133 + 134 + function InputGroupTextarea({ 135 + className, 136 + ...props 137 + }: React.ComponentProps<"textarea">) { 138 + return ( 139 + <Textarea 140 + data-slot="input-group-control" 141 + className={cn( 142 + "rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent flex-1 resize-none", 143 + className, 144 + )} 145 + {...props} 146 + /> 147 + ); 148 + } 149 + 150 + export { 151 + InputGroup, 152 + InputGroupAddon, 153 + InputGroupButton, 154 + InputGroupText, 155 + InputGroupInput, 156 + InputGroupTextarea, 157 + };
+20
src/components/ui/input.tsx
··· 1 + import * as React from "react"; 2 + import { Input as InputPrimitive } from "@base-ui/react/input"; 3 + 4 + import { cn } from "@/lib/utils"; 5 + 6 + function Input({ className, type, ...props }: React.ComponentProps<"input">) { 7 + return ( 8 + <InputPrimitive 9 + type={type} 10 + data-slot="input" 11 + className={cn( 12 + "bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 rounded-4xl border px-3 py-1 text-base transition-colors file:h-7 file:text-sm file:font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm file:text-foreground placeholder:text-muted-foreground w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50", 13 + className, 14 + )} 15 + {...props} 16 + /> 17 + ); 18 + } 19 + 20 + export { Input };
+20
src/components/ui/label.tsx
··· 1 + "use client"; 2 + 3 + import * as React from "react"; 4 + 5 + import { cn } from "@/lib/utils"; 6 + 7 + function Label({ className, ...props }: React.ComponentProps<"label">) { 8 + return ( 9 + <label 10 + data-slot="label" 11 + className={cn( 12 + "gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed", 13 + className, 14 + )} 15 + {...props} 16 + /> 17 + ); 18 + } 19 + 20 + export { Label };
+219
src/components/ui/select.tsx
··· 1 + "use client"; 2 + 3 + import * as React from "react"; 4 + import { Select as SelectPrimitive } from "@base-ui/react/select"; 5 + 6 + import { cn } from "@/lib/utils"; 7 + import { HugeiconsIcon } from "@hugeicons/react"; 8 + import { 9 + UnfoldMoreIcon, 10 + Tick02Icon, 11 + ArrowUp01Icon, 12 + ArrowDown01Icon, 13 + } from "@hugeicons/core-free-icons"; 14 + 15 + const Select = SelectPrimitive.Root; 16 + 17 + function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) { 18 + return ( 19 + <SelectPrimitive.Group 20 + data-slot="select-group" 21 + className={cn("scroll-my-1 p-1", className)} 22 + {...props} 23 + /> 24 + ); 25 + } 26 + 27 + function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) { 28 + return ( 29 + <SelectPrimitive.Value 30 + data-slot="select-value" 31 + className={cn("flex flex-1 text-left", className)} 32 + {...props} 33 + /> 34 + ); 35 + } 36 + 37 + function SelectTrigger({ 38 + className, 39 + size = "default", 40 + children, 41 + ...props 42 + }: SelectPrimitive.Trigger.Props & { 43 + size?: "sm" | "default"; 44 + }) { 45 + return ( 46 + <SelectPrimitive.Trigger 47 + data-slot="select-trigger" 48 + data-size={size} 49 + className={cn( 50 + "border-input data-placeholder:text-muted-foreground bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-4xl border px-3 py-2 text-sm transition-colors focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0", 51 + className, 52 + )} 53 + {...props} 54 + > 55 + {children} 56 + <SelectPrimitive.Icon 57 + render={ 58 + <HugeiconsIcon 59 + icon={UnfoldMoreIcon} 60 + strokeWidth={2} 61 + className="text-muted-foreground size-4 pointer-events-none" 62 + /> 63 + } 64 + /> 65 + </SelectPrimitive.Trigger> 66 + ); 67 + } 68 + 69 + function SelectContent({ 70 + className, 71 + children, 72 + side = "bottom", 73 + sideOffset = 4, 74 + align = "center", 75 + alignOffset = 0, 76 + alignItemWithTrigger = true, 77 + ...props 78 + }: SelectPrimitive.Popup.Props & 79 + Pick< 80 + SelectPrimitive.Positioner.Props, 81 + "align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger" 82 + >) { 83 + return ( 84 + <SelectPrimitive.Portal> 85 + <SelectPrimitive.Positioner 86 + side={side} 87 + sideOffset={sideOffset} 88 + align={align} 89 + alignOffset={alignOffset} 90 + alignItemWithTrigger={alignItemWithTrigger} 91 + className="isolate z-50" 92 + > 93 + <SelectPrimitive.Popup 94 + data-slot="select-content" 95 + data-align-trigger={alignItemWithTrigger} 96 + className={cn( 97 + "bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 min-w-36 rounded-2xl shadow-2xl ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none", 98 + className, 99 + )} 100 + {...props} 101 + > 102 + <SelectScrollUpButton /> 103 + <SelectPrimitive.List>{children}</SelectPrimitive.List> 104 + <SelectScrollDownButton /> 105 + </SelectPrimitive.Popup> 106 + </SelectPrimitive.Positioner> 107 + </SelectPrimitive.Portal> 108 + ); 109 + } 110 + 111 + function SelectLabel({ 112 + className, 113 + ...props 114 + }: SelectPrimitive.GroupLabel.Props) { 115 + return ( 116 + <SelectPrimitive.GroupLabel 117 + data-slot="select-label" 118 + className={cn("text-muted-foreground px-3 py-2.5 text-xs", className)} 119 + {...props} 120 + /> 121 + ); 122 + } 123 + 124 + function SelectItem({ 125 + className, 126 + children, 127 + ...props 128 + }: SelectPrimitive.Item.Props) { 129 + return ( 130 + <SelectPrimitive.Item 131 + data-slot="select-item" 132 + className={cn( 133 + "focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", 134 + className, 135 + )} 136 + {...props} 137 + > 138 + <SelectPrimitive.ItemText className="flex flex-1 gap-2 shrink-0 whitespace-nowrap"> 139 + {children} 140 + </SelectPrimitive.ItemText> 141 + <SelectPrimitive.ItemIndicator 142 + render={ 143 + <span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" /> 144 + } 145 + > 146 + <HugeiconsIcon 147 + icon={Tick02Icon} 148 + strokeWidth={2} 149 + className="pointer-events-none" 150 + /> 151 + </SelectPrimitive.ItemIndicator> 152 + </SelectPrimitive.Item> 153 + ); 154 + } 155 + 156 + function SelectSeparator({ 157 + className, 158 + ...props 159 + }: SelectPrimitive.Separator.Props) { 160 + return ( 161 + <SelectPrimitive.Separator 162 + data-slot="select-separator" 163 + className={cn( 164 + "bg-border/50 -mx-1 my-1 h-px pointer-events-none", 165 + className, 166 + )} 167 + {...props} 168 + /> 169 + ); 170 + } 171 + 172 + function SelectScrollUpButton({ 173 + className, 174 + ...props 175 + }: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) { 176 + return ( 177 + <SelectPrimitive.ScrollUpArrow 178 + data-slot="select-scroll-up-button" 179 + className={cn( 180 + "bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 top-0 w-full", 181 + className, 182 + )} 183 + {...props} 184 + > 185 + <HugeiconsIcon icon={ArrowUp01Icon} strokeWidth={2} /> 186 + </SelectPrimitive.ScrollUpArrow> 187 + ); 188 + } 189 + 190 + function SelectScrollDownButton({ 191 + className, 192 + ...props 193 + }: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) { 194 + return ( 195 + <SelectPrimitive.ScrollDownArrow 196 + data-slot="select-scroll-down-button" 197 + className={cn( 198 + "bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 bottom-0 w-full", 199 + className, 200 + )} 201 + {...props} 202 + > 203 + <HugeiconsIcon icon={ArrowDown01Icon} strokeWidth={2} /> 204 + </SelectPrimitive.ScrollDownArrow> 205 + ); 206 + } 207 + 208 + export { 209 + Select, 210 + SelectContent, 211 + SelectGroup, 212 + SelectItem, 213 + SelectLabel, 214 + SelectScrollDownButton, 215 + SelectScrollUpButton, 216 + SelectSeparator, 217 + SelectTrigger, 218 + SelectValue, 219 + };
+25
src/components/ui/separator.tsx
··· 1 + "use client"; 2 + 3 + import { Separator as SeparatorPrimitive } from "@base-ui/react/separator"; 4 + 5 + import { cn } from "@/lib/utils"; 6 + 7 + function Separator({ 8 + className, 9 + orientation = "horizontal", 10 + ...props 11 + }: SeparatorPrimitive.Props) { 12 + return ( 13 + <SeparatorPrimitive 14 + data-slot="separator" 15 + orientation={orientation} 16 + className={cn( 17 + "bg-border shrink-0 data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch", 18 + className, 19 + )} 20 + {...props} 21 + /> 22 + ); 23 + } 24 + 25 + export { Separator };
+18
src/components/ui/textarea.tsx
··· 1 + import * as React from "react"; 2 + 3 + import { cn } from "@/lib/utils"; 4 + 5 + function Textarea({ className, ...props }: React.ComponentProps<"textarea">) { 6 + return ( 7 + <textarea 8 + data-slot="textarea" 9 + className={cn( 10 + "border-input bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 resize-none rounded-xl border px-3 py-3 text-base transition-colors focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm placeholder:text-muted-foreground flex field-sizing-content min-h-16 w-full outline-none disabled:cursor-not-allowed disabled:opacity-50", 11 + className, 12 + )} 13 + {...props} 14 + /> 15 + ); 16 + } 17 + 18 + export { Textarea };
+6
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 + }