Your calm window into the Atmosphere. morgen.blue
rss atproto
3
fork

Configure Feed

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

chore(ui): swap shadcn registry to base-vega + hugeicons

- Replace Radix UI primitives with @base-ui/react (shadcn base-vega style)
- Switch icon library from lucide-react to @hugeicons/react
- Move fonts from public/fonts to resources/fonts for Vite bundling
- Regenerate ui/* primitives and add field, input-group, textarea, surface
- Add level-context, use-mobile hook
- Remove ui/icon wrapper

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

+2335 -1096
+602 -137
bun.lock
··· 4 4 "workspaces": { 5 5 "": { 6 6 "dependencies": { 7 + "@base-ui/react": "^1.4.1", 8 + "@fontsource-variable/inter": "^5.2.8", 7 9 "@headlessui/react": "^2.2.0", 10 + "@hugeicons/core-free-icons": "^4.1.1", 11 + "@hugeicons/react": "^1.1.6", 8 12 "@inertiajs/react": "^3.0.0", 9 13 "@inertiajs/vite": "^3.0.0", 10 - "@radix-ui/react-avatar": "^1.1.3", 11 - "@radix-ui/react-checkbox": "^1.1.4", 12 - "@radix-ui/react-collapsible": "^1.1.3", 13 - "@radix-ui/react-dialog": "^1.1.6", 14 - "@radix-ui/react-dropdown-menu": "^2.1.6", 15 - "@radix-ui/react-label": "^2.1.2", 16 - "@radix-ui/react-navigation-menu": "^1.2.5", 17 - "@radix-ui/react-select": "^2.1.6", 18 - "@radix-ui/react-separator": "^1.1.2", 19 - "@radix-ui/react-slot": "^1.2.3", 20 - "@radix-ui/react-toggle": "^1.1.2", 21 - "@radix-ui/react-toggle-group": "^1.1.2", 22 - "@radix-ui/react-tooltip": "^1.1.8", 23 14 "@tailwindcss/vite": "^4.1.11", 24 15 "@types/react": "^19.2.0", 25 16 "@types/react-dom": "^19.2.0", 26 17 "@vitejs/plugin-react": "^5.2.0", 27 18 "class-variance-authority": "^0.7.1", 28 19 "clsx": "^2.1.1", 20 + "cmdk": "^1.1.1", 29 21 "concurrently": "^9.0.1", 22 + "date-fns": "^4.1.0", 23 + "embla-carousel-react": "^8.6.0", 30 24 "globals": "^15.14.0", 31 25 "input-otp": "^1.4.2", 32 26 "laravel-vite-plugin": "^3.0.0", 33 - "lucide-react": "^0.475.0", 27 + "next-themes": "^0.4.6", 34 28 "react": "^19.2.0", 29 + "react-day-picker": "^9.14.0", 35 30 "react-dom": "^19.2.0", 36 - "sonner": "^2.0.0", 37 - "tailwind-merge": "^3.0.1", 31 + "react-resizable-panels": "^4.10.0", 32 + "recharts": "3.8.0", 33 + "shadcn": "^4.5.0", 34 + "sonner": "^2.0.7", 35 + "tailwind-merge": "^3.5.0", 38 36 "tailwindcss": "^4.0.0", 39 37 "tw-animate-css": "^1.4.0", 40 38 "typescript": "^5.7.2", 39 + "vaul": "^1.1.2", 41 40 "vite": "^8.0.0", 42 41 }, 43 42 "devDependencies": { ··· 75 74 76 75 "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], 77 76 77 + "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], 78 + 78 79 "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], 79 80 81 + "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow=="], 82 + 80 83 "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], 81 84 85 + "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.28.5", "", { "dependencies": { "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5" } }, "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg=="], 86 + 82 87 "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], 83 88 84 89 "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], 90 + 91 + "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw=="], 85 92 86 93 "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], 87 94 95 + "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.28.6", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg=="], 96 + 97 + "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], 98 + 88 99 "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], 89 100 90 101 "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], ··· 95 106 96 107 "@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], 97 108 109 + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], 110 + 111 + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A=="], 112 + 113 + "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.28.6", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA=="], 114 + 98 115 "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], 99 116 100 117 "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], 101 118 119 + "@babel/plugin-transform-typescript": ["@babel/plugin-transform-typescript@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw=="], 120 + 121 + "@babel/preset-typescript": ["@babel/preset-typescript@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g=="], 122 + 123 + "@babel/runtime": ["@babel/runtime@7.29.2", "", {}, "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g=="], 124 + 102 125 "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], 103 126 104 127 "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], 105 128 106 129 "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], 130 + 131 + "@base-ui/react": ["@base-ui/react@1.4.1", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@base-ui/utils": "0.2.8", "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@date-fns/tz": "^1.2.0", "@types/react": "^17 || ^18 || ^19", "date-fns": "^4.0.0", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@date-fns/tz", "@types/react", "date-fns"] }, "sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw=="], 132 + 133 + "@base-ui/utils": ["@base-ui/utils@0.2.8", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ=="], 134 + 135 + "@date-fns/tz": ["@date-fns/tz@1.4.1", "", {}, "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA=="], 136 + 137 + "@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.63.0", "", { "dependencies": { "commander": "^11.1.0", "dotenv": "^17.2.1", "eciesjs": "^0.4.10", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "picomatch": "^4.0.4", "which": "^4.0.0", "yocto-spinner": "^1.1.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js" } }, "sha512-jjkmzIRu19uH78AjFInqfcALehbDCZZ7M09hurVawyqNxtOXEg2LR73L59y4QnzfYDEzjbhVzGAd2uDHu0D1aQ=="], 138 + 139 + "@ecies/ciphers": ["@ecies/ciphers@0.2.6", "", { "peerDependencies": { "@noble/ciphers": "^1.0.0" } }, "sha512-patgsRPKGkhhoBjETV4XxD0En4ui5fbX0hzayqI3M8tvNMGUoUvmyYAIWwlxBc1KX5cturfqByYdj5bYGRpN9g=="], 107 140 108 141 "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], 109 142 ··· 139 172 140 173 "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], 141 174 175 + "@fontsource-variable/inter": ["@fontsource-variable/inter@5.2.8", "", {}, "sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ=="], 176 + 142 177 "@headlessui/react": ["@headlessui/react@2.2.10", "", { "dependencies": { "@floating-ui/react": "^0.26.16", "@react-aria/focus": "^3.20.2", "@react-aria/interactions": "^3.25.0", "@tanstack/react-virtual": "^3.13.9", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-5pVLNK9wlpxTUTy9GpgbX/SdcRh+HBnPktjM2wbiLTH4p+2EPHBO1aoSryUCuKUIItdDWO9ITlhUL8UnUN/oIA=="], 143 178 179 + "@hono/node-server": ["@hono/node-server@1.19.14", "", { "peerDependencies": { "hono": "^4" } }, "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw=="], 180 + 181 + "@hugeicons/core-free-icons": ["@hugeicons/core-free-icons@4.1.1", "", {}, "sha512-teqIBvPHl90ygIwKyJwTxOH8aNp1X1PjDTcMvLkEwdPxPD+8mssrZ5kXKIAJJFYPsz69a8LYQY0UPid4PAdavg=="], 182 + 183 + "@hugeicons/react": ["@hugeicons/react@1.1.6", "", { "peerDependencies": { "react": ">=16.0.0" } }, "sha512-c2LhXJMAW5wN1pC/smBXG0YPqUON6ceR/ZdXHCjEI9KvB+hjtqYjmzIxok5hAQOeXGz0WtORgCQMzqewFKAZwg=="], 184 + 144 185 "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="], 145 186 146 187 "@humanfs/node": ["@humanfs/node@0.16.8", "", { "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ=="], ··· 157 198 158 199 "@inertiajs/vite": ["@inertiajs/vite@3.0.3", "", { "dependencies": { "@inertiajs/core": "3.0.3", "tinyglobby": "^0.2.15" }, "peerDependencies": { "vite": "^7.0.0 || ^8.0.0" } }, "sha512-D/oAbX2DRPAilOnTCZBeacRuylRMSB6Xtwf5M41i46xuHBc4aSDGdU7XGN6AcOm84HQ7YDKAfR5d+YoLBtsoYQ=="], 159 200 201 + "@inquirer/ansi": ["@inquirer/ansi@2.0.5", "", {}, "sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw=="], 202 + 203 + "@inquirer/confirm": ["@inquirer/confirm@6.0.12", "", { "dependencies": { "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og=="], 204 + 205 + "@inquirer/core": ["@inquirer/core@11.1.9", "", { "dependencies": { "@inquirer/ansi": "^2.0.5", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5", "cli-width": "^4.1.0", "fast-wrap-ansi": "^0.2.0", "mute-stream": "^3.0.0", "signal-exit": "^4.1.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg=="], 206 + 207 + "@inquirer/figures": ["@inquirer/figures@2.0.5", "", {}, "sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ=="], 208 + 209 + "@inquirer/type": ["@inquirer/type@4.0.5", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q=="], 210 + 160 211 "@internationalized/date": ["@internationalized/date@3.12.1", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ=="], 161 212 162 213 "@internationalized/number": ["@internationalized/number@3.6.6", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-iFgmQaXHE0vytNfpLZWOC2mEJCBRzcUxt53Xf/yCXG93lRvqas237i3r7X4RKMwO3txiyZD4mQjKAByFv6UGSQ=="], ··· 175 226 176 227 "@laravel/vite-plugin-wayfinder": ["@laravel/vite-plugin-wayfinder@0.1.7", "", {}, "sha512-yZYIr1iwuCQ7LFI+GsJk9vacw1HWMp3ZlDlW0pdfz3zXyKeu4US7oH79KmQQ031L0cYaSyaUMo/Ha1D4BosKqw=="], 177 228 229 + "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.29.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="], 230 + 231 + "@mswjs/interceptors": ["@mswjs/interceptors@0.41.6", "", { "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" } }, "sha512-qmDvJIjcNsZ6tXWy2G9yuCgMPTTn35GMA3dPpSLm7QJVpbQzYdw0ALy1bKoivXnEM3U93/OrK+/M719b+fg84Q=="], 232 + 178 233 "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], 179 234 180 - "@oxc-project/types": ["@oxc-project/types@0.127.0", "", {}, "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ=="], 235 + "@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], 236 + 237 + "@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], 238 + 239 + "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], 240 + 241 + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], 181 242 182 - "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], 243 + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], 183 244 184 - "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], 245 + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], 185 246 186 - "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w=="], 247 + "@open-draft/deferred-promise": ["@open-draft/deferred-promise@3.0.0", "", {}, "sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA=="], 187 248 188 - "@radix-ui/react-avatar": ["@radix-ui/react-avatar@1.1.11", "", { "dependencies": { "@radix-ui/react-context": "1.1.3", "@radix-ui/react-primitive": "2.1.4", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-is-hydrated": "0.1.0", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q=="], 249 + "@open-draft/logger": ["@open-draft/logger@0.3.0", "", { "dependencies": { "is-node-process": "^1.2.0", "outvariant": "^1.4.0" } }, "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ=="], 189 250 190 - "@radix-ui/react-checkbox": ["@radix-ui/react-checkbox@1.3.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw=="], 251 + "@open-draft/until": ["@open-draft/until@2.1.0", "", {}, "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg=="], 191 252 192 - "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA=="], 253 + "@oxc-project/types": ["@oxc-project/types@0.127.0", "", {}, "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ=="], 193 254 194 - "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], 255 + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], 195 256 196 257 "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], 197 258 198 - "@radix-ui/react-context": ["@radix-ui/react-context@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw=="], 259 + "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 199 260 200 261 "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], 201 262 202 - "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], 203 - 204 263 "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], 205 - 206 - "@radix-ui/react-dropdown-menu": ["@radix-ui/react-dropdown-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw=="], 207 264 208 265 "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], 209 266 ··· 211 268 212 269 "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], 213 270 214 - "@radix-ui/react-label": ["@radix-ui/react-label@2.1.8", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A=="], 215 - 216 - "@radix-ui/react-menu": ["@radix-ui/react-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg=="], 217 - 218 - "@radix-ui/react-navigation-menu": ["@radix-ui/react-navigation-menu@1.2.14", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w=="], 219 - 220 - "@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.8", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw=="], 221 - 222 271 "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], 223 272 224 273 "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], 225 274 226 275 "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.4", "", { "dependencies": { "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg=="], 227 276 228 - "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], 229 - 230 - "@radix-ui/react-select": ["@radix-ui/react-select@2.2.6", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ=="], 231 - 232 - "@radix-ui/react-separator": ["@radix-ui/react-separator@1.1.8", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g=="], 233 - 234 - "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], 235 - 236 - "@radix-ui/react-toggle": ["@radix-ui/react-toggle@1.1.10", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ=="], 237 - 238 - "@radix-ui/react-toggle-group": ["@radix-ui/react-toggle-group@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-toggle": "1.1.10", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q=="], 239 - 240 - "@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.8", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg=="], 277 + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 241 278 242 279 "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], 243 280 ··· 246 283 "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], 247 284 248 285 "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], 249 - 250 - "@radix-ui/react-use-is-hydrated": ["@radix-ui/react-use-is-hydrated@0.1.0", "", { "dependencies": { "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA=="], 251 286 252 287 "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], 253 288 254 - "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ=="], 255 - 256 - "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.1", "", { "dependencies": { "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w=="], 257 - 258 - "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ=="], 259 - 260 - "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="], 261 - 262 - "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], 263 - 264 289 "@react-aria/focus": ["@react-aria/focus@3.22.0", "", { "dependencies": { "@swc/helpers": "^0.5.0", "react-aria": "3.48.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-ZfDOVuVhqDsM9mkNji3QUZ/d40JhlVgXrDkrfXylM1035QCrcTHN7m2DpbE95sU2A8EQb4wikvt5jM6K/73BPg=="], 265 290 266 291 "@react-aria/interactions": ["@react-aria/interactions@3.28.0", "", { "dependencies": { "@react-types/shared": "^3.34.0", "@swc/helpers": "^0.5.0", "react-aria": "3.48.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-OXwdU1EWFdMxmr/K1CXNGJzmNlCClByb+PuCaqUyzBymHPCGVhawirLIon/CrIN5psh3AiWpHSh4H0WeJdVpng=="], 267 292 268 293 "@react-types/shared": ["@react-types/shared@3.34.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-gp6xo/s2lX54AlTjOiqwDnxA7UW79BNvI9dB9pr3LZTzRKCd1ZA+ZbgKw/ReIiWuvvVw/8QFJpnqeeFyLocMcQ=="], 294 + 295 + "@reduxjs/toolkit": ["@reduxjs/toolkit@2.11.2", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@standard-schema/utils": "^0.3.0", "immer": "^11.0.0", "redux": "^5.0.1", "redux-thunk": "^3.1.0", "reselect": "^5.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" }, "optionalPeers": ["react", "react-redux"] }, "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ=="], 269 296 270 297 "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.17", "", { "os": "android", "cpu": "arm64" }, "sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ=="], 271 298 ··· 305 332 306 333 "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], 307 334 335 + "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], 336 + 337 + "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], 338 + 339 + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], 340 + 341 + "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], 342 + 308 343 "@stylistic/eslint-plugin": ["@stylistic/eslint-plugin@5.10.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/types": "^8.56.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "estraverse": "^5.3.0", "picomatch": "^4.0.3" }, "peerDependencies": { "eslint": "^9.0.0 || ^10.0.0" } }, "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ=="], 309 344 310 345 "@swc/helpers": ["@swc/helpers@0.5.21", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg=="], 346 + 347 + "@tabby_ai/hijri-converter": ["@tabby_ai/hijri-converter@1.0.5", "", {}, "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ=="], 311 348 312 349 "@tailwindcss/node": ["@tailwindcss/node@4.2.4", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.4" } }, "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA=="], 313 350 ··· 343 380 344 381 "@tanstack/virtual-core": ["@tanstack/virtual-core@3.14.0", "", {}, "sha512-JLANqGy/D6k4Ujmh8Tr25lGimuOXNiaVyXaCAZS0W+1390sADdGnyUdSWNIfd49gebtIxGMij4IktRVzrdr12Q=="], 345 382 383 + "@ts-morph/common": ["@ts-morph/common@0.27.0", "", { "dependencies": { "fast-glob": "^3.3.3", "minimatch": "^10.0.1", "path-browserify": "^1.0.1" } }, "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ=="], 384 + 346 385 "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], 347 386 348 387 "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], ··· 353 392 354 393 "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], 355 394 395 + "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="], 396 + 397 + "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], 398 + 399 + "@types/d3-ease": ["@types/d3-ease@3.0.2", "", {}, "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="], 400 + 401 + "@types/d3-interpolate": ["@types/d3-interpolate@3.0.4", "", { "dependencies": { "@types/d3-color": "*" } }, "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA=="], 402 + 403 + "@types/d3-path": ["@types/d3-path@3.1.1", "", {}, "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg=="], 404 + 405 + "@types/d3-scale": ["@types/d3-scale@4.0.9", "", { "dependencies": { "@types/d3-time": "*" } }, "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw=="], 406 + 407 + "@types/d3-shape": ["@types/d3-shape@3.1.8", "", { "dependencies": { "@types/d3-path": "*" } }, "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w=="], 408 + 409 + "@types/d3-time": ["@types/d3-time@3.0.4", "", {}, "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="], 410 + 411 + "@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="], 412 + 356 413 "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], 357 414 358 415 "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], ··· 365 422 366 423 "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], 367 424 425 + "@types/set-cookie-parser": ["@types/set-cookie-parser@2.4.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw=="], 426 + 427 + "@types/statuses": ["@types/statuses@2.0.6", "", {}, "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA=="], 428 + 429 + "@types/use-sync-external-store": ["@types/use-sync-external-store@0.0.6", "", {}, "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg=="], 430 + 431 + "@types/validate-npm-package-name": ["@types/validate-npm-package-name@4.0.2", "", {}, "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw=="], 432 + 368 433 "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.59.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.59.0", "@typescript-eslint/type-utils": "8.59.0", "@typescript-eslint/utils": "8.59.0", "@typescript-eslint/visitor-keys": "8.59.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.59.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw=="], 369 434 370 435 "@typescript-eslint/parser": ["@typescript-eslint/parser@8.59.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.59.0", "@typescript-eslint/types": "8.59.0", "@typescript-eslint/typescript-estree": "8.59.0", "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg=="], ··· 425 490 426 491 "@vitejs/plugin-react": ["@vitejs/plugin-react@5.2.0", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-rc.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw=="], 427 492 493 + "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], 494 + 428 495 "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], 429 496 430 497 "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], 498 + 499 + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], 431 500 432 501 "ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], 433 502 434 - "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 503 + "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], 504 + 505 + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], 435 506 436 507 "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], 437 508 ··· 455 526 456 527 "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], 457 528 529 + "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], 530 + 458 531 "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], 459 532 460 533 "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], ··· 465 538 466 539 "baseline-browser-mapping": ["baseline-browser-mapping@2.10.21", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA=="], 467 540 541 + "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], 542 + 468 543 "brace-expansion": ["brace-expansion@1.1.14", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g=="], 544 + 545 + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], 469 546 470 547 "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], 471 548 549 + "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], 550 + 551 + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], 552 + 472 553 "call-bind": ["call-bind@1.0.9", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" } }, "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ=="], 473 554 474 555 "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], ··· 483 564 484 565 "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], 485 566 567 + "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], 568 + 569 + "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], 570 + 571 + "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], 572 + 486 573 "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], 487 574 488 575 "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], 489 576 577 + "cmdk": ["cmdk@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "^1.1.1", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-id": "^1.1.0", "@radix-ui/react-primitive": "^2.0.2" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg=="], 578 + 579 + "code-block-writer": ["code-block-writer@13.0.3", "", {}, "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg=="], 580 + 490 581 "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], 491 582 492 583 "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], 493 584 585 + "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], 586 + 494 587 "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], 495 588 496 589 "concurrently": ["concurrently@9.2.1", "", { "dependencies": { "chalk": "4.1.2", "rxjs": "7.8.2", "shell-quote": "1.8.3", "supports-color": "8.1.1", "tree-kill": "1.2.2", "yargs": "17.7.2" }, "bin": { "conc": "dist/bin/concurrently.js", "concurrently": "dist/bin/concurrently.js" } }, "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng=="], 497 590 591 + "content-disposition": ["content-disposition@1.1.0", "", {}, "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="], 592 + 593 + "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], 594 + 498 595 "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], 499 596 597 + "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], 598 + 599 + "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], 600 + 601 + "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], 602 + 603 + "cosmiconfig": ["cosmiconfig@9.0.1", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ=="], 604 + 500 605 "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], 501 606 607 + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], 608 + 502 609 "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], 503 610 611 + "d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "1 - 2" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="], 612 + 613 + "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="], 614 + 615 + "d3-ease": ["d3-ease@3.0.1", "", {}, "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="], 616 + 617 + "d3-format": ["d3-format@3.1.2", "", {}, "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="], 618 + 619 + "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="], 620 + 621 + "d3-path": ["d3-path@3.1.0", "", {}, "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="], 622 + 623 + "d3-scale": ["d3-scale@4.0.2", "", { "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", "d3-interpolate": "1.2.0 - 3", "d3-time": "2.1.1 - 3", "d3-time-format": "2 - 4" } }, "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ=="], 624 + 625 + "d3-shape": ["d3-shape@3.2.0", "", { "dependencies": { "d3-path": "^3.1.0" } }, "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA=="], 626 + 627 + "d3-time": ["d3-time@3.1.0", "", { "dependencies": { "d3-array": "2 - 3" } }, "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q=="], 628 + 629 + "d3-time-format": ["d3-time-format@4.1.0", "", { "dependencies": { "d3-time": "1 - 3" } }, "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg=="], 630 + 631 + "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="], 632 + 633 + "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], 634 + 504 635 "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], 505 636 506 637 "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], 507 638 508 639 "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], 640 + 641 + "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], 642 + 643 + "date-fns-jalali": ["date-fns-jalali@4.1.0-0", "", {}, "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg=="], 509 644 510 645 "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], 511 646 647 + "decimal.js-light": ["decimal.js-light@2.5.1", "", {}, "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="], 648 + 649 + "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], 650 + 512 651 "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], 513 652 653 + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], 654 + 655 + "default-browser": ["default-browser@5.5.0", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw=="], 656 + 657 + "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], 658 + 514 659 "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], 660 + 661 + "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], 515 662 516 663 "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], 517 664 665 + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], 666 + 518 667 "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], 519 668 520 669 "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], 521 670 671 + "diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], 672 + 522 673 "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], 523 674 675 + "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="], 676 + 524 677 "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], 525 678 679 + "eciesjs": ["eciesjs@0.4.18", "", { "dependencies": { "@ecies/ciphers": "^0.2.5", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.7", "@noble/hashes": "^1.8.0" } }, "sha512-wG99Zcfcys9fZux7Cft8BAX/YrOJLJSZ3jyYPfhZHqN2E+Ffx+QXBDsv3gubEgPtV6dTzJMSQUwk1H98/t/0wQ=="], 680 + 681 + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], 682 + 526 683 "electron-to-chromium": ["electron-to-chromium@1.5.344", "", {}, "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg=="], 527 684 685 + "embla-carousel": ["embla-carousel@8.6.0", "", {}, "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA=="], 686 + 687 + "embla-carousel-react": ["embla-carousel-react@8.6.0", "", { "dependencies": { "embla-carousel": "8.6.0", "embla-carousel-reactive-utils": "8.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA=="], 688 + 689 + "embla-carousel-reactive-utils": ["embla-carousel-reactive-utils@8.6.0", "", { "peerDependencies": { "embla-carousel": "8.6.0" } }, "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A=="], 690 + 528 691 "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], 529 692 693 + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], 694 + 530 695 "enhanced-resolve": ["enhanced-resolve@5.20.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="], 696 + 697 + "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], 698 + 699 + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], 531 700 532 701 "es-abstract": ["es-abstract@1.24.2", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg=="], 533 702 ··· 549 718 550 719 "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], 551 720 721 + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], 722 + 552 723 "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], 553 724 554 725 "eslint": ["eslint@9.39.4", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.5", "@eslint/js": "9.39.4", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ=="], ··· 575 746 576 747 "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], 577 748 749 + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], 750 + 578 751 "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], 579 752 580 753 "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], ··· 583 756 584 757 "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], 585 758 759 + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], 760 + 761 + "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], 762 + 763 + "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], 764 + 765 + "eventsource-parser": ["eventsource-parser@3.0.8", "", {}, "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="], 766 + 767 + "execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], 768 + 769 + "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], 770 + 771 + "express-rate-limit": ["express-rate-limit@8.4.1", "", { "dependencies": { "ip-address": "10.1.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-NGVYwQSAyEQgzxX1iCM978PP9AdO/hW93gMcF6ZwQCm+rFvLsBH6w4xcXWTcliS8La5EPRN3p9wzItqBwJrfNw=="], 772 + 586 773 "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], 587 774 775 + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], 776 + 588 777 "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], 589 778 590 779 "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], 591 780 781 + "fast-string-truncated-width": ["fast-string-truncated-width@3.0.3", "", {}, "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g=="], 782 + 783 + "fast-string-width": ["fast-string-width@3.0.2", "", { "dependencies": { "fast-string-truncated-width": "^3.0.2" } }, "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg=="], 784 + 785 + "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], 786 + 787 + "fast-wrap-ansi": ["fast-wrap-ansi@0.2.0", "", { "dependencies": { "fast-string-width": "^3.0.2" } }, "sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w=="], 788 + 789 + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], 790 + 592 791 "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], 593 792 793 + "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], 794 + 795 + "figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="], 796 + 594 797 "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], 595 798 799 + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], 800 + 801 + "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], 802 + 596 803 "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], 597 804 598 805 "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], ··· 601 808 602 809 "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], 603 810 811 + "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], 812 + 813 + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], 814 + 815 + "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], 816 + 817 + "fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], 818 + 604 819 "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 605 820 606 821 "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], ··· 609 824 610 825 "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], 611 826 827 + "fuzzysort": ["fuzzysort@3.1.0", "", {}, "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ=="], 828 + 612 829 "generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="], 613 830 614 831 "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], 615 832 616 833 "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], 834 + 835 + "get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], 617 836 618 837 "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], 619 838 620 839 "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], 840 + 841 + "get-own-enumerable-keys": ["get-own-enumerable-keys@1.0.0", "", {}, "sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA=="], 621 842 622 843 "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], 623 844 845 + "get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], 846 + 624 847 "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], 625 848 626 849 "get-tsconfig": ["get-tsconfig@4.14.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA=="], ··· 635 858 636 859 "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], 637 860 861 + "graphql": ["graphql@16.13.2", "", {}, "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig=="], 862 + 638 863 "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], 639 864 640 865 "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], ··· 648 873 "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], 649 874 650 875 "hasown": ["hasown@2.0.3", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg=="], 876 + 877 + "headers-polyfill": ["headers-polyfill@5.0.1", "", { "dependencies": { "@types/set-cookie-parser": "^2.4.10", "set-cookie-parser": "^3.0.1" } }, "sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA=="], 651 878 652 879 "hermes-estree": ["hermes-estree@0.25.1", "", {}, "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="], 653 880 654 881 "hermes-parser": ["hermes-parser@0.25.1", "", { "dependencies": { "hermes-estree": "0.25.1" } }, "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA=="], 655 882 883 + "hono": ["hono@4.12.15", "", {}, "sha512-qM0jDhFEaCBb4TxoW7f53Qrpv9RBiayUHo0S52JudprkhvpjIrGoU1mnnr29Fvd1U335ZFPZQY1wlkqgfGXyLg=="], 884 + 885 + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], 886 + 887 + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], 888 + 889 + "human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], 890 + 891 + "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], 892 + 656 893 "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], 894 + 895 + "immer": ["immer@10.2.0", "", {}, "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw=="], 657 896 658 897 "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], 659 898 660 899 "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], 661 900 901 + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], 902 + 662 903 "input-otp": ["input-otp@1.4.2", "", { "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA=="], 663 904 664 905 "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], 665 906 907 + "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="], 908 + 909 + "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="], 910 + 911 + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], 912 + 666 913 "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], 914 + 915 + "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], 667 916 668 917 "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], 669 918 ··· 681 930 682 931 "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], 683 932 933 + "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], 934 + 684 935 "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], 685 936 686 937 "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], ··· 691 942 692 943 "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], 693 944 945 + "is-in-ssh": ["is-in-ssh@1.0.0", "", {}, "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw=="], 946 + 947 + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], 948 + 949 + "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], 950 + 694 951 "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], 695 952 696 953 "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], 697 954 955 + "is-node-process": ["is-node-process@1.2.0", "", {}, "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw=="], 956 + 957 + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], 958 + 698 959 "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], 699 960 961 + "is-obj": ["is-obj@3.0.0", "", {}, "sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ=="], 962 + 963 + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], 964 + 965 + "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], 966 + 700 967 "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], 701 968 969 + "is-regexp": ["is-regexp@3.1.0", "", {}, "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA=="], 970 + 702 971 "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], 703 972 704 973 "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], 974 + 975 + "is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], 705 976 706 977 "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], 707 978 ··· 709 980 710 981 "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], 711 982 983 + "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], 984 + 712 985 "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], 713 986 714 987 "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], 715 988 716 989 "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], 717 990 991 + "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], 992 + 718 993 "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], 719 994 720 995 "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], ··· 722 997 "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="], 723 998 724 999 "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], 1000 + 1001 + "jose": ["jose@6.2.2", "", {}, "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ=="], 725 1002 726 1003 "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], 727 1004 ··· 731 1008 732 1009 "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], 733 1010 1011 + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], 1012 + 734 1013 "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], 735 1014 1015 + "json-schema-typed": ["json-schema-typed@8.0.2", "", {}, "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA=="], 1016 + 736 1017 "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], 737 1018 738 1019 "json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], 1020 + 1021 + "jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], 739 1022 740 1023 "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], 741 1024 742 1025 "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], 1026 + 1027 + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], 743 1028 744 1029 "laravel-precognition": ["laravel-precognition@2.0.0", "", { "dependencies": { "es-toolkit": "^1.32.0" }, "peerDependencies": { "axios": "^1.4.0" }, "optionalPeers": ["axios"] }, "sha512-dmA4HGc9m+TsVNsJs9/XQBI8u6j7coilN+qKkBuhuXQzH3HypwS/c5dFQ4UqUGjBbcxIM7zdk91kM/SRZwIvWQ=="], 745 1030 ··· 771 1056 772 1057 "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], 773 1058 1059 + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], 1060 + 774 1061 "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], 775 1062 776 1063 "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], 777 1064 1065 + "log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], 1066 + 778 1067 "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], 779 1068 780 1069 "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], 781 - 782 - "lucide-react": ["lucide-react@0.475.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg=="], 783 1070 784 1071 "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], 785 1072 786 1073 "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], 787 1074 1075 + "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], 1076 + 1077 + "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], 1078 + 1079 + "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], 1080 + 1081 + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], 1082 + 1083 + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], 1084 + 1085 + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], 1086 + 1087 + "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], 1088 + 1089 + "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], 1090 + 1091 + "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], 1092 + 788 1093 "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], 789 1094 790 1095 "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], 791 1096 792 1097 "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], 793 1098 1099 + "msw": ["msw@2.13.6", "", { "dependencies": { "@inquirer/confirm": "^6.0.11", "@mswjs/interceptors": "^0.41.3", "@open-draft/deferred-promise": "^3.0.0", "@types/statuses": "^2.0.6", "cookie": "^1.1.1", "graphql": "^16.13.2", "headers-polyfill": "^5.0.1", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", "rettime": "^0.11.7", "statuses": "^2.0.2", "strict-event-emitter": "^0.5.1", "tough-cookie": "^6.0.1", "type-fest": "^5.5.0", "until-async": "^3.0.2", "yargs": "^17.7.2" }, "peerDependencies": { "typescript": ">= 4.8.x" }, "optionalPeers": ["typescript"], "bin": { "msw": "cli/index.js" } }, "sha512-GAJbQy8Ra/Ydjt0Hb2MGT2qhzd83J3+QZMHdH85uW7r/XkKc846+Ma2PLif5hGvTm5Yqa+wkcstpim0WeLZU9g=="], 1100 + 1101 + "mute-stream": ["mute-stream@3.0.0", "", {}, "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw=="], 1102 + 794 1103 "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], 795 1104 796 1105 "napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="], 797 1106 798 1107 "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], 799 1108 1109 + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], 1110 + 1111 + "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], 1112 + 1113 + "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], 1114 + 800 1115 "node-exports-info": ["node-exports-info@1.6.0", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw=="], 801 1116 1117 + "node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], 1118 + 802 1119 "node-releases": ["node-releases@2.0.38", "", {}, "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw=="], 1120 + 1121 + "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], 803 1122 804 1123 "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], 805 1124 ··· 807 1126 808 1127 "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], 809 1128 1129 + "object-treeify": ["object-treeify@1.1.33", "", {}, "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A=="], 1130 + 810 1131 "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], 811 1132 812 1133 "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="], ··· 817 1138 818 1139 "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], 819 1140 1141 + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], 1142 + 1143 + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], 1144 + 1145 + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], 1146 + 1147 + "open": ["open@11.0.0", "", { "dependencies": { "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", "powershell-utils": "^0.1.0", "wsl-utils": "^0.3.0" } }, "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw=="], 1148 + 820 1149 "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], 1150 + 1151 + "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], 1152 + 1153 + "outvariant": ["outvariant@1.4.3", "", {}, "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA=="], 821 1154 822 1155 "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], 823 1156 ··· 827 1160 828 1161 "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], 829 1162 1163 + "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], 1164 + 1165 + "parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="], 1166 + 1167 + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], 1168 + 1169 + "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], 1170 + 830 1171 "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], 831 1172 832 1173 "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], 833 1174 834 1175 "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], 835 1176 1177 + "path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="], 1178 + 836 1179 "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], 837 1180 838 1181 "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], 1182 + 1183 + "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], 839 1184 840 1185 "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], 841 1186 842 1187 "postcss": ["postcss@8.5.10", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ=="], 843 1188 1189 + "postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], 1190 + 1191 + "powershell-utils": ["powershell-utils@0.1.0", "", {}, "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A=="], 1192 + 844 1193 "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], 845 1194 846 1195 "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="], 847 1196 848 1197 "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.6.14", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-hermes": "*", "@prettier/plugin-oxc": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-import-sort": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-style-order": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-hermes", "@prettier/plugin-oxc", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-import-sort", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-style-order", "prettier-plugin-svelte"] }, "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg=="], 849 1198 1199 + "pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="], 1200 + 1201 + "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], 1202 + 850 1203 "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], 851 1204 1205 + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], 1206 + 852 1207 "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], 853 1208 1209 + "qs": ["qs@6.15.1", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg=="], 1210 + 1211 + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], 1212 + 1213 + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], 1214 + 1215 + "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], 1216 + 854 1217 "react": ["react@19.2.5", "", {}, "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA=="], 855 1218 856 1219 "react-aria": ["react-aria@3.48.0", "", { "dependencies": { "@internationalized/date": "^3.12.1", "@internationalized/number": "^3.6.6", "@internationalized/string": "^3.2.8", "@react-types/shared": "^3.34.0", "@swc/helpers": "^0.5.0", "aria-hidden": "^1.2.3", "clsx": "^2.0.0", "react-stately": "3.46.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-jQjd4rBEIMqecBaAKYJbVGK6EqIHLa5znVQ7jwFyK5vCyljoj6KhgtiahmcIPsG5vG5vEDLw+ba+bEWn6A2P4w=="], 1220 + 1221 + "react-day-picker": ["react-day-picker@9.14.0", "", { "dependencies": { "@date-fns/tz": "^1.4.1", "@tabby_ai/hijri-converter": "1.0.5", "date-fns": "^4.1.0", "date-fns-jalali": "4.1.0-0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA=="], 857 1222 858 1223 "react-dom": ["react-dom@19.2.5", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.5" } }, "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag=="], 859 1224 860 1225 "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], 861 1226 1227 + "react-redux": ["react-redux@9.2.0", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "@types/react": "^18.2.25 || ^19", "react": "^18.0 || ^19", "redux": "^5.0.0" }, "optionalPeers": ["@types/react", "redux"] }, "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g=="], 1228 + 862 1229 "react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="], 863 1230 864 1231 "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], 865 1232 866 1233 "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], 867 1234 1235 + "react-resizable-panels": ["react-resizable-panels@4.10.0", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-frjewRQt7TCv/vCH1pJfjZ7RxAhr5pKuqVQtVgzFq/vherxBFOWyC3xMbryx5Ti2wylViGUFc93Etg4rB3E0UA=="], 1236 + 868 1237 "react-stately": ["react-stately@3.46.0", "", { "dependencies": { "@internationalized/date": "^3.12.1", "@internationalized/number": "^3.6.6", "@internationalized/string": "^3.2.8", "@react-types/shared": "^3.34.0", "@swc/helpers": "^0.5.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-OdxhWvHgs2L4OJGIs7hnuTr5WjjMM6enhNEAMRqiekhF8+ITvA2LRwNftOZwcogaoCslGYq5S2VQTQwnm0GbCA=="], 869 1238 870 1239 "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], 871 1240 1241 + "recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="], 1242 + 1243 + "recharts": ["recharts@3.8.0", "", { "dependencies": { "@reduxjs/toolkit": "^1.9.0 || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Z/m38DX3L73ExO4Tpc9/iZWHmHnlzWG4njQbxsF5aSjwqmHNDDIm0rdEBArkwsBvR8U6EirlEHiQNYWCVh9sGQ=="], 1244 + 1245 + "redux": ["redux@5.0.1", "", {}, "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w=="], 1246 + 1247 + "redux-thunk": ["redux-thunk@3.1.0", "", { "peerDependencies": { "redux": "^5.0.0" } }, "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw=="], 1248 + 872 1249 "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], 873 1250 874 1251 "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], 875 1252 876 1253 "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], 877 1254 1255 + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], 1256 + 1257 + "reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="], 1258 + 878 1259 "resolve": ["resolve@2.0.0-next.6", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA=="], 879 1260 880 1261 "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], 881 1262 882 1263 "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], 883 1264 1265 + "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], 1266 + 1267 + "rettime": ["rettime@0.11.8", "", {}, "sha512-0fERGXktJTyJ+h8fBEiPxHPEFOu0h15JY7JtwrOVqR5K+vb99ho6IyOo7ekLS3h4sJCzIDy4VWKIbZUfe9njmg=="], 1268 + 1269 + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], 1270 + 884 1271 "rolldown": ["rolldown@1.0.0-rc.17", "", { "dependencies": { "@oxc-project/types": "=0.127.0", "@rolldown/pluginutils": "1.0.0-rc.17" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.17", "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", "@rolldown/binding-darwin-x64": "1.0.0-rc.17", "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA=="], 885 1272 1273 + "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], 1274 + 1275 + "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], 1276 + 1277 + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], 1278 + 886 1279 "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], 887 1280 888 1281 "safe-array-concat": ["safe-array-concat@1.1.4", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg=="], ··· 891 1284 892 1285 "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], 893 1286 1287 + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], 1288 + 894 1289 "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], 895 1290 896 1291 "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], 897 1292 1293 + "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], 1294 + 1295 + "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], 1296 + 1297 + "set-cookie-parser": ["set-cookie-parser@3.1.0", "", {}, "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw=="], 1298 + 898 1299 "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], 899 1300 900 1301 "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], 901 1302 902 1303 "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], 903 1304 1305 + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], 1306 + 1307 + "shadcn": ["shadcn@4.5.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-ZpNOz7IMI5aezbMEWNxBvl2aJ1ek6NuAMqpL/FUnk5IuRxERl8ohYEnqqAmhPOcur8RbGuCoqTZLQ3Oi4Xkf8A=="], 1308 + 904 1309 "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], 905 1310 906 1311 "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], ··· 915 1320 916 1321 "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], 917 1322 1323 + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], 1324 + 1325 + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], 1326 + 918 1327 "sonner": ["sonner@2.0.7", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w=="], 1328 + 1329 + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], 919 1330 920 1331 "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], 921 1332 922 1333 "stable-hash-x": ["stable-hash-x@0.2.0", "", {}, "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ=="], 923 1334 1335 + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], 1336 + 1337 + "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], 1338 + 924 1339 "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], 1340 + 1341 + "strict-event-emitter": ["strict-event-emitter@0.5.1", "", {}, "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ=="], 925 1342 926 1343 "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], 927 1344 ··· 935 1352 936 1353 "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], 937 1354 938 - "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 1355 + "stringify-object": ["stringify-object@5.0.0", "", { "dependencies": { "get-own-enumerable-keys": "^1.0.0", "is-obj": "^3.0.0", "is-regexp": "^3.1.0" } }, "sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg=="], 1356 + 1357 + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], 939 1358 940 1359 "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], 1360 + 1361 + "strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], 941 1362 942 1363 "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], 943 1364 ··· 946 1367 "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], 947 1368 948 1369 "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], 1370 + 1371 + "tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="], 949 1372 950 1373 "tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="], 951 1374 ··· 953 1376 954 1377 "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], 955 1378 1379 + "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], 1380 + 956 1381 "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], 1382 + 1383 + "tldts": ["tldts@7.0.28", "", { "dependencies": { "tldts-core": "^7.0.28" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw=="], 1384 + 1385 + "tldts-core": ["tldts-core@7.0.28", "", {}, "sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ=="], 1386 + 1387 + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], 1388 + 1389 + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], 1390 + 1391 + "tough-cookie": ["tough-cookie@6.0.1", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw=="], 957 1392 958 1393 "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], 959 1394 960 1395 "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], 961 1396 1397 + "ts-morph": ["ts-morph@26.0.0", "", { "dependencies": { "@ts-morph/common": "~0.27.0", "code-block-writer": "^13.0.3" } }, "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug=="], 1398 + 962 1399 "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], 963 1400 964 1401 "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], ··· 966 1403 "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], 967 1404 968 1405 "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], 1406 + 1407 + "type-fest": ["type-fest@5.6.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA=="], 1408 + 1409 + "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], 969 1410 970 1411 "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], 971 1412 ··· 983 1424 984 1425 "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], 985 1426 1427 + "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], 1428 + 1429 + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], 1430 + 1431 + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], 1432 + 986 1433 "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], 1434 + 1435 + "until-async": ["until-async@3.0.2", "", {}, "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw=="], 987 1436 988 1437 "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], 989 1438 ··· 995 1444 996 1445 "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], 997 1446 1447 + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], 1448 + 1449 + "validate-npm-package-name": ["validate-npm-package-name@7.0.2", "", {}, "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A=="], 1450 + 1451 + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], 1452 + 1453 + "vaul": ["vaul@1.1.2", "", { "dependencies": { "@radix-ui/react-dialog": "^1.1.1" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA=="], 1454 + 1455 + "victory-vendor": ["victory-vendor@37.3.6", "", { "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", "@types/d3-interpolate": "^3.0.1", "@types/d3-scale": "^4.0.2", "@types/d3-shape": "^3.1.0", "@types/d3-time": "^3.0.0", "@types/d3-timer": "^3.0.0", "d3-array": "^3.1.6", "d3-ease": "^3.0.1", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", "d3-shape": "^3.1.0", "d3-time": "^3.0.0", "d3-timer": "^3.0.1" } }, "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ=="], 1456 + 998 1457 "vite": ["vite@8.0.10", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.10", "rolldown": "1.0.0-rc.17", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw=="], 999 1458 1000 1459 "vite-plugin-full-reload": ["vite-plugin-full-reload@1.2.0", "", { "dependencies": { "picocolors": "^1.0.0", "picomatch": "^2.3.1" } }, "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA=="], 1460 + 1461 + "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], 1001 1462 1002 1463 "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], 1003 1464 ··· 1013 1474 1014 1475 "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], 1015 1476 1477 + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], 1478 + 1479 + "wsl-utils": ["wsl-utils@0.3.1", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg=="], 1480 + 1016 1481 "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], 1017 1482 1018 1483 "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], ··· 1023 1488 1024 1489 "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], 1025 1490 1026 - "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], 1027 - 1028 - "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="], 1491 + "yocto-spinner": ["yocto-spinner@1.1.0", "", { "dependencies": { "yoctocolors": "^2.1.1" } }, "sha512-/BY0AUXnS7IKO354uLLA2eRcWiqDifEbd6unXCsOxkFDAkhgUL3PH9X2bFoaU0YchnDXsF+iKleeTLJGckbXfA=="], 1029 1492 1030 - "@babel/core/json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], 1493 + "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], 1031 1494 1032 - "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], 1495 + "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], 1033 1496 1034 - "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], 1497 + "zod-to-json-schema": ["zod-to-json-schema@3.25.2", "", { "peerDependencies": { "zod": "^3.25.28 || ^4" } }, "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="], 1035 1498 1036 - "@radix-ui/react-arrow/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1499 + "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="], 1037 1500 1038 - "@radix-ui/react-checkbox/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1501 + "@babel/core/json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], 1039 1502 1040 - "@radix-ui/react-checkbox/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1503 + "@dotenvx/dotenvx/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], 1041 1504 1042 - "@radix-ui/react-collapsible/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1505 + "@dotenvx/dotenvx/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], 1043 1506 1044 - "@radix-ui/react-collapsible/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1507 + "@dotenvx/dotenvx/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], 1045 1508 1046 - "@radix-ui/react-collection/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1509 + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], 1047 1510 1048 - "@radix-ui/react-collection/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1511 + "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], 1049 1512 1050 - "@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1513 + "@modelcontextprotocol/sdk/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], 1051 1514 1052 - "@radix-ui/react-dialog/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1515 + "@mswjs/interceptors/@open-draft/deferred-promise": ["@open-draft/deferred-promise@2.2.0", "", {}, "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA=="], 1053 1516 1054 1517 "@radix-ui/react-dialog/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1055 - 1056 - "@radix-ui/react-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1057 1518 1058 1519 "@radix-ui/react-dismissable-layer/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1059 1520 1060 - "@radix-ui/react-dropdown-menu/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1061 - 1062 - "@radix-ui/react-dropdown-menu/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1063 - 1064 1521 "@radix-ui/react-focus-scope/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1065 1522 1066 - "@radix-ui/react-menu/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1067 - 1068 - "@radix-ui/react-menu/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1069 - 1070 - "@radix-ui/react-menu/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1071 - 1072 - "@radix-ui/react-navigation-menu/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1073 - 1074 - "@radix-ui/react-navigation-menu/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1075 - 1076 - "@radix-ui/react-popper/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1077 - 1078 - "@radix-ui/react-popper/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1079 - 1080 1523 "@radix-ui/react-portal/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1081 1524 1082 - "@radix-ui/react-roving-focus/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1083 - 1084 - "@radix-ui/react-roving-focus/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1085 - 1086 - "@radix-ui/react-select/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1087 - 1088 - "@radix-ui/react-select/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1089 - 1090 - "@radix-ui/react-select/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1091 - 1092 - "@radix-ui/react-toggle/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1525 + "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], 1093 1526 1094 - "@radix-ui/react-toggle-group/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1095 - 1096 - "@radix-ui/react-toggle-group/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1097 - 1098 - "@radix-ui/react-tooltip/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], 1099 - 1100 - "@radix-ui/react-tooltip/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1101 - 1102 - "@radix-ui/react-tooltip/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1103 - 1104 - "@radix-ui/react-visually-hidden/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], 1527 + "@reduxjs/toolkit/immer": ["immer@11.1.4", "", {}, "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw=="], 1105 1528 1106 1529 "@rolldown/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], 1107 1530 ··· 1117 1540 1118 1541 "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 1119 1542 1543 + "@ts-morph/common/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], 1544 + 1120 1545 "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], 1121 1546 1122 1547 "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], ··· 1124 1549 "@typescript-eslint/typescript-estree/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], 1125 1550 1126 1551 "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], 1552 + 1553 + "ajv-formats/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], 1127 1554 1128 1555 "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], 1129 1556 1557 + "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 1558 + 1130 1559 "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], 1131 1560 1132 1561 "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], 1133 1562 1134 1563 "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], 1135 1564 1565 + "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], 1566 + 1567 + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], 1568 + 1136 1569 "is-bun-module/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], 1137 1570 1571 + "log-symbols/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], 1572 + 1573 + "log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], 1574 + 1575 + "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], 1576 + 1577 + "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], 1578 + 1579 + "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], 1580 + 1581 + "ora/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], 1582 + 1583 + "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], 1584 + 1585 + "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], 1586 + 1138 1587 "rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.17", "", {}, "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg=="], 1139 1588 1140 - "vite-plugin-full-reload/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], 1589 + "router/path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="], 1141 1590 1142 - "@radix-ui/react-arrow/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1591 + "shadcn/tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], 1143 1592 1144 - "@radix-ui/react-checkbox/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1593 + "shadcn/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], 1145 1594 1146 - "@radix-ui/react-collapsible/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1595 + "string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 1147 1596 1148 - "@radix-ui/react-dismissable-layer/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1597 + "vite-plugin-full-reload/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], 1149 1598 1150 - "@radix-ui/react-dropdown-menu/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1599 + "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 1151 1600 1152 - "@radix-ui/react-focus-scope/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1601 + "@dotenvx/dotenvx/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], 1153 1602 1154 - "@radix-ui/react-navigation-menu/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1603 + "@dotenvx/dotenvx/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], 1155 1604 1156 - "@radix-ui/react-popper/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1605 + "@dotenvx/dotenvx/execa/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], 1157 1606 1158 - "@radix-ui/react-portal/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1607 + "@dotenvx/dotenvx/execa/npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], 1159 1608 1160 - "@radix-ui/react-roving-focus/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1609 + "@dotenvx/dotenvx/execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], 1161 1610 1162 - "@radix-ui/react-toggle-group/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1611 + "@dotenvx/dotenvx/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], 1163 1612 1164 - "@radix-ui/react-toggle/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1613 + "@dotenvx/dotenvx/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], 1165 1614 1166 - "@radix-ui/react-visually-hidden/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], 1615 + "@modelcontextprotocol/sdk/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], 1616 + 1617 + "@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], 1167 1618 1168 1619 "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], 1620 + 1621 + "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], 1622 + 1623 + "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 1624 + 1625 + "ora/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], 1626 + 1627 + "shadcn/tsconfig-paths/json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], 1628 + 1629 + "string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 1630 + 1631 + "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 1632 + 1633 + "@ts-morph/common/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], 1169 1634 1170 1635 "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], 1171 1636 }
+23 -19
components.json
··· 1 1 { 2 - "$schema": "https://ui.shadcn.com/schema.json", 3 - "style": "new-york", 4 - "rsc": false, 5 - "tsx": true, 6 - "tailwind": { 7 - "config": "", 8 - "css": "resources/css/app.css", 9 - "baseColor": "neutral", 10 - "cssVariables": true, 11 - "prefix": "" 12 - }, 13 - "aliases": { 14 - "components": "@/components", 15 - "utils": "@/lib/utils", 16 - "ui": "@/components/ui", 17 - "lib": "@/lib", 18 - "hooks": "@/hooks" 19 - }, 20 - "iconLibrary": "lucide" 2 + "$schema": "https://ui.shadcn.com/schema.json", 3 + "style": "base-vega", 4 + "rsc": false, 5 + "tsx": true, 6 + "tailwind": { 7 + "config": "", 8 + "css": "resources/css/app.css", 9 + "baseColor": "gray", 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": {} 21 25 }
+15 -16
package.json
··· 32 32 "typescript-eslint": "^8.23.0" 33 33 }, 34 34 "dependencies": { 35 + "@base-ui/react": "^1.4.1", 36 + "@fontsource-variable/inter": "^5.2.8", 35 37 "@headlessui/react": "^2.2.0", 38 + "@hugeicons/core-free-icons": "^4.1.1", 39 + "@hugeicons/react": "^1.1.6", 36 40 "@inertiajs/react": "^3.0.0", 37 41 "@inertiajs/vite": "^3.0.0", 38 - "@radix-ui/react-avatar": "^1.1.3", 39 - "@radix-ui/react-checkbox": "^1.1.4", 40 - "@radix-ui/react-collapsible": "^1.1.3", 41 - "@radix-ui/react-dialog": "^1.1.6", 42 - "@radix-ui/react-dropdown-menu": "^2.1.6", 43 - "@radix-ui/react-label": "^2.1.2", 44 - "@radix-ui/react-navigation-menu": "^1.2.5", 45 - "@radix-ui/react-select": "^2.1.6", 46 - "@radix-ui/react-separator": "^1.1.2", 47 - "@radix-ui/react-slot": "^1.2.3", 48 - "@radix-ui/react-toggle": "^1.1.2", 49 - "@radix-ui/react-toggle-group": "^1.1.2", 50 - "@radix-ui/react-tooltip": "^1.1.8", 51 42 "@tailwindcss/vite": "^4.1.11", 52 43 "@types/react": "^19.2.0", 53 44 "@types/react-dom": "^19.2.0", 54 45 "@vitejs/plugin-react": "^5.2.0", 55 46 "class-variance-authority": "^0.7.1", 56 47 "clsx": "^2.1.1", 48 + "cmdk": "^1.1.1", 57 49 "concurrently": "^9.0.1", 50 + "date-fns": "^4.1.0", 51 + "embla-carousel-react": "^8.6.0", 58 52 "globals": "^15.14.0", 59 53 "input-otp": "^1.4.2", 60 54 "laravel-vite-plugin": "^3.0.0", 61 - "lucide-react": "^0.475.0", 55 + "next-themes": "^0.4.6", 62 56 "react": "^19.2.0", 57 + "react-day-picker": "^9.14.0", 63 58 "react-dom": "^19.2.0", 64 - "sonner": "^2.0.0", 65 - "tailwind-merge": "^3.0.1", 59 + "react-resizable-panels": "^4.10.0", 60 + "recharts": "3.8.0", 61 + "shadcn": "^4.5.0", 62 + "sonner": "^2.0.7", 63 + "tailwind-merge": "^3.5.0", 66 64 "tailwindcss": "^4.0.0", 67 65 "tw-animate-css": "^1.4.0", 68 66 "typescript": "^5.7.2", 67 + "vaul": "^1.1.2", 69 68 "vite": "^8.0.0" 70 69 }, 71 70 "optionalDependencies": {
+115 -79
resources/css/app.css
··· 1 1 @import 'tailwindcss'; 2 - 3 2 @import 'tw-animate-css'; 3 + @import 'shadcn/tailwind.css'; 4 4 5 5 @source '../views'; 6 6 @source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; 7 7 8 8 @custom-variant dark (&:is(.dark *)); 9 9 10 + @font-face { 11 + font-family: 'Geist'; 12 + font-style: normal; 13 + font-weight: 100 900; 14 + font-display: swap; 15 + src: url('../fonts/GeistVF.woff2') format('woff2'); 16 + } 17 + 18 + @font-face { 19 + font-family: 'Geist'; 20 + font-style: italic; 21 + font-weight: 100 900; 22 + font-display: swap; 23 + src: url('../fonts/GeistVF-Italic.woff2') format('woff2'); 24 + } 25 + 26 + @font-face { 27 + font-family: 'Caveat'; 28 + font-style: normal; 29 + font-weight: 400 700; 30 + font-display: swap; 31 + src: url('../fonts/Caveat-VF.ttf') format('truetype-variations'); 32 + } 33 + 10 34 @theme { 11 35 --font-sans: 12 - 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 13 - 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 14 - 'Noto Color Emoji'; 36 + 'Geist', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 37 + 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; 38 + --font-handwritten: 'Caveat', ui-sans-serif, cursive; 15 39 16 - --radius-lg: var(--radius); 17 - --radius-md: calc(var(--radius) - 2px); 18 - --radius-sm: calc(var(--radius) - 4px); 40 + --color-atmosphere-blue: oklch(0.7856 0.1479 224.27); 41 + --color-leaf-green: oklch(0.7856 0.1479 139.64); 42 + --color-sunset-orange: oklch(0.7856 0.1479 57.72); 43 + --color-coral-red: oklch(0.6915 0.2121 22.14); 44 + --color-aurora-purple: oklch(0.6903 0.256 314.86); 45 + --color-sand-brown: oklch(0.9579 0.0301 69.05); 46 + 47 + --color-brand: var(--color-atmosphere-blue); 48 + } 49 + 50 + @theme inline { 51 + --font-heading: var(--font-sans); 19 52 20 53 --color-background: var(--background); 21 54 --color-foreground: var(--foreground); 22 - 23 55 --color-card: var(--card); 24 56 --color-card-foreground: var(--card-foreground); 25 - 26 57 --color-popover: var(--popover); 27 58 --color-popover-foreground: var(--popover-foreground); 28 - 29 59 --color-primary: var(--primary); 30 60 --color-primary-foreground: var(--primary-foreground); 31 - 32 61 --color-secondary: var(--secondary); 33 62 --color-secondary-foreground: var(--secondary-foreground); 34 - 35 63 --color-muted: var(--muted); 36 64 --color-muted-foreground: var(--muted-foreground); 37 - 38 65 --color-accent: var(--accent); 39 66 --color-accent-foreground: var(--accent-foreground); 40 - 41 67 --color-destructive: var(--destructive); 42 - --color-destructive-foreground: var(--destructive-foreground); 43 - 44 68 --color-border: var(--border); 45 69 --color-input: var(--input); 46 70 --color-ring: var(--ring); ··· 62 86 } 63 87 64 88 :root { 65 - --background: oklch(1 0 0); 66 - --foreground: oklch(0.145 0 0); 89 + --background: var(--color-gray-100); 90 + --foreground: var(--color-gray-950); 67 91 --card: oklch(1 0 0); 68 - --card-foreground: oklch(0.145 0 0); 92 + --card-foreground: var(--color-gray-950); 69 93 --popover: oklch(1 0 0); 70 - --popover-foreground: oklch(0.145 0 0); 71 - --primary: oklch(0.205 0 0); 72 - --primary-foreground: oklch(0.985 0 0); 73 - --secondary: oklch(0.97 0 0); 74 - --secondary-foreground: oklch(0.205 0 0); 75 - --muted: oklch(0.97 0 0); 76 - --muted-foreground: oklch(0.556 0 0); 77 - --accent: oklch(0.97 0 0); 78 - --accent-foreground: oklch(0.205 0 0); 94 + --popover-foreground: var(--color-gray-950); 95 + --primary: var(--color-atmosphere-blue); 96 + --primary-foreground: oklch(1 0 0); 97 + --secondary: var(--color-gray-200); 98 + --secondary-foreground: var(--color-gray-900); 99 + --muted: var(--color-gray-100); 100 + --muted-foreground: var(--color-gray-500); 101 + --accent: var(--color-gray-100); 102 + --accent-foreground: var(--color-gray-900); 79 103 --destructive: oklch(0.577 0.245 27.325); 80 - --destructive-foreground: oklch(0.577 0.245 27.325); 81 - --border: oklch(0.922 0 0); 82 - --input: oklch(0.922 0 0); 83 - --ring: oklch(0.87 0 0); 84 - --chart-1: oklch(0.646 0.222 41.116); 85 - --chart-2: oklch(0.6 0.118 184.704); 86 - --chart-3: oklch(0.398 0.07 227.392); 87 - --chart-4: oklch(0.828 0.189 84.429); 88 - --chart-5: oklch(0.769 0.188 70.08); 89 - --radius: 0.625rem; 90 - --sidebar: oklch(0.985 0 0); 91 - --sidebar-foreground: oklch(0.145 0 0); 92 - --sidebar-primary: oklch(0.205 0 0); 93 - --sidebar-primary-foreground: oklch(0.985 0 0); 94 - --sidebar-accent: oklch(0.97 0 0); 95 - --sidebar-accent-foreground: oklch(0.205 0 0); 96 - --sidebar-border: oklch(0.922 0 0); 97 - --sidebar-ring: oklch(0.87 0 0); 104 + --border: var(--color-gray-200); 105 + --input: var(--color-gray-200); 106 + --ring: var(--color-atmosphere-blue); 107 + --chart-1: var(--color-gray-300); 108 + --chart-2: var(--color-gray-500); 109 + --chart-3: var(--color-gray-600); 110 + --chart-4: var(--color-gray-700); 111 + --chart-5: var(--color-gray-800); 112 + --radius: 0.75rem; 113 + --sidebar: var(--color-gray-50); 114 + --sidebar-foreground: var(--color-gray-950); 115 + --sidebar-primary: var(--color-gray-900); 116 + --sidebar-primary-foreground: var(--color-gray-50); 117 + --sidebar-accent: var(--color-gray-100); 118 + --sidebar-accent-foreground: var(--color-gray-900); 119 + --sidebar-border: var(--color-gray-200); 120 + --sidebar-ring: var(--color-atmosphere-blue); 98 121 } 99 122 100 123 .dark { 101 - --background: oklch(0.145 0 0); 102 - --foreground: oklch(0.985 0 0); 103 - --card: oklch(0.145 0 0); 104 - --card-foreground: oklch(0.985 0 0); 105 - --popover: oklch(0.145 0 0); 106 - --popover-foreground: oklch(0.985 0 0); 107 - --primary: oklch(0.985 0 0); 108 - --primary-foreground: oklch(0.205 0 0); 109 - --secondary: oklch(0.269 0 0); 110 - --secondary-foreground: oklch(0.985 0 0); 111 - --muted: oklch(0.269 0 0); 112 - --muted-foreground: oklch(0.708 0 0); 113 - --accent: oklch(0.269 0 0); 114 - --accent-foreground: oklch(0.985 0 0); 115 - --destructive: oklch(0.396 0.141 25.723); 116 - --destructive-foreground: oklch(0.637 0.237 25.331); 117 - --border: oklch(0.269 0 0); 118 - --input: oklch(0.269 0 0); 119 - --ring: oklch(0.439 0 0); 120 - --chart-1: oklch(0.488 0.243 264.376); 121 - --chart-2: oklch(0.696 0.17 162.48); 122 - --chart-3: oklch(0.769 0.188 70.08); 123 - --chart-4: oklch(0.627 0.265 303.9); 124 - --chart-5: oklch(0.645 0.246 16.439); 125 - --sidebar: oklch(0.205 0 0); 126 - --sidebar-foreground: oklch(0.985 0 0); 127 - --sidebar-primary: oklch(0.985 0 0); 128 - --sidebar-primary-foreground: oklch(0.985 0 0); 129 - --sidebar-accent: oklch(0.269 0 0); 130 - --sidebar-accent-foreground: oklch(0.985 0 0); 131 - --sidebar-border: oklch(0.269 0 0); 132 - --sidebar-ring: oklch(0.439 0 0); 124 + --background: var(--color-gray-950); 125 + --foreground: var(--color-gray-50); 126 + --card: var(--color-gray-800); 127 + --card-foreground: var(--color-gray-50); 128 + --popover: var(--color-gray-800); 129 + --popover-foreground: var(--color-gray-50); 130 + --primary: var(--color-atmosphere-blue); 131 + --primary-foreground: oklch(1 0 0); 132 + --secondary: var(--color-gray-600); 133 + --secondary-foreground: var(--color-gray-50); 134 + --muted: var(--color-gray-700); 135 + --muted-foreground: var(--color-gray-400); 136 + --accent: var(--color-gray-800); 137 + --accent-foreground: var(--color-gray-50); 138 + --destructive: oklch(0.704 0.191 22.216); 139 + --border: var(--color-gray-800); 140 + --input: var(--color-gray-600); 141 + --ring: var(--color-atmosphere-blue); 142 + --chart-1: var(--color-gray-300); 143 + --chart-2: var(--color-gray-500); 144 + --chart-3: var(--color-gray-600); 145 + --chart-4: var(--color-gray-700); 146 + --chart-5: var(--color-gray-800); 147 + --sidebar: var(--color-gray-900); 148 + --sidebar-foreground: var(--color-gray-50); 149 + --sidebar-primary: var(--color-atmosphere-blue); 150 + --sidebar-primary-foreground: var(--color-gray-50); 151 + --sidebar-accent: var(--color-gray-800); 152 + --sidebar-accent-foreground: var(--color-gray-50); 153 + --sidebar-border: var(--color-gray-800); 154 + --sidebar-ring: var(--color-atmosphere-blue); 133 155 } 134 156 135 157 @layer base { 136 158 * { 137 159 @apply border-border; 138 160 } 139 - 140 161 body { 141 162 @apply bg-background text-foreground; 163 + position: relative; 164 + } 165 + html { 166 + @apply font-sans; 167 + } 168 + h1, 169 + h2, 170 + h3, 171 + h4, 172 + h5, 173 + h6 { 174 + @apply font-medium; 175 + } 176 + p { 177 + @apply font-light; 142 178 } 143 179 }
resources/fonts/Caveat-VF.ttf

This is a binary file and will not be displayed.

resources/fonts/GeistVF-Italic.woff2

This is a binary file and will not be displayed.

resources/fonts/GeistVF.woff2

This is a binary file and will not be displayed.

+1 -1
resources/js/app.tsx
··· 25 25 strictMode: true, 26 26 withApp(app) { 27 27 return ( 28 - <TooltipProvider delayDuration={0}> 28 + <TooltipProvider delay={0}> 29 29 {app} 30 30 <Toaster /> 31 31 </TooltipProvider>
+3 -2
resources/js/components/alert-error.tsx
··· 1 - import { AlertCircleIcon } from 'lucide-react'; 1 + import { AlertCircleIcon } from '@hugeicons/core-free-icons'; 2 + import { HugeiconsIcon } from '@hugeicons/react'; 2 3 import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'; 3 4 4 5 export default function AlertError({ ··· 10 11 }) { 11 12 return ( 12 13 <Alert variant="destructive"> 13 - <AlertCircleIcon /> 14 + <HugeiconsIcon icon={AlertCircleIcon} /> 14 15 <AlertTitle>{title || 'Something went wrong.'}</AlertTitle> 15 16 <AlertDescription> 16 17 <ul className="list-inside list-disc text-sm">
+57 -28
resources/js/components/app-header.tsx
··· 1 + import { 2 + BookOpen01Icon, 3 + Folder01Icon, 4 + LayoutGridIcon, 5 + Menu01Icon, 6 + Search01Icon, 7 + } from '@hugeicons/core-free-icons'; 8 + import { HugeiconsIcon } from '@hugeicons/react'; 1 9 import { Link, usePage } from '@inertiajs/react'; 2 - import { BookOpen, Folder, LayoutGrid, Menu, Search } from 'lucide-react'; 3 10 import AppLogo from '@/components/app-logo'; 4 11 import AppLogoIcon from '@/components/app-logo-icon'; 5 12 import { Breadcrumbs } from '@/components/breadcrumbs'; ··· 42 49 { 43 50 title: 'Dashboard', 44 51 href: dashboard(), 45 - icon: LayoutGrid, 52 + icon: LayoutGridIcon, 46 53 }, 47 54 ]; 48 55 ··· 50 57 { 51 58 title: 'Repository', 52 59 href: 'https://github.com/laravel/react-starter-kit', 53 - icon: Folder, 60 + icon: Folder01Icon, 54 61 }, 55 62 { 56 63 title: 'Documentation', 57 64 href: 'https://laravel.com/docs/starter-kits#react', 58 - icon: BookOpen, 65 + icon: BookOpen01Icon, 59 66 }, 60 67 ]; 61 68 ··· 80 87 {/* Mobile Menu */} 81 88 <div className="lg:hidden"> 82 89 <Sheet> 83 - <SheetTrigger asChild> 84 - <Button 85 - variant="ghost" 86 - size="icon" 87 - className="mr-2 h-[34px] w-[34px]" 88 - > 89 - <Menu className="h-5 w-5" /> 90 - </Button> 90 + <SheetTrigger 91 + render={ 92 + <Button 93 + variant="ghost" 94 + size="icon" 95 + className="mr-2 h-[34px] w-[34px]" 96 + /> 97 + } 98 + > 99 + <HugeiconsIcon 100 + icon={Menu01Icon} 101 + className="h-5 w-5" 102 + /> 91 103 </SheetTrigger> 92 104 <SheetContent 93 105 side="left" ··· 109 121 className="flex items-center space-x-2 font-medium" 110 122 > 111 123 {item.icon && ( 112 - <item.icon className="h-5 w-5" /> 124 + <HugeiconsIcon 125 + icon={item.icon} 126 + className="h-5 w-5" 127 + /> 113 128 )} 114 129 <span>{item.title}</span> 115 130 </Link> ··· 126 141 className="flex items-center space-x-2 font-medium" 127 142 > 128 143 {item.icon && ( 129 - <item.icon className="h-5 w-5" /> 144 + <HugeiconsIcon 145 + icon={item.icon} 146 + className="h-5 w-5" 147 + /> 130 148 )} 131 149 <span>{item.title}</span> 132 150 </a> ··· 167 185 )} 168 186 > 169 187 {item.icon && ( 170 - <item.icon className="mr-2 h-4 w-4" /> 188 + <HugeiconsIcon 189 + icon={item.icon} 190 + className="mr-2 h-4 w-4" 191 + /> 171 192 )} 172 193 {item.title} 173 194 </Link> ··· 187 208 size="icon" 188 209 className="group h-9 w-9 cursor-pointer" 189 210 > 190 - <Search className="!size-5 opacity-80 group-hover:opacity-100" /> 211 + <HugeiconsIcon 212 + icon={Search01Icon} 213 + className="!size-5 opacity-80 group-hover:opacity-100" 214 + /> 191 215 </Button> 192 216 <div className="ml-1 hidden gap-1 lg:flex"> 193 217 {rightNavItems.map((item) => ( ··· 203 227 {item.title} 204 228 </span> 205 229 {item.icon && ( 206 - <item.icon className="size-5 opacity-80 group-hover:opacity-100" /> 230 + <HugeiconsIcon 231 + icon={item.icon} 232 + className="size-5 opacity-80 group-hover:opacity-100" 233 + /> 207 234 )} 208 235 </a> 209 236 </TooltipTrigger> ··· 215 242 </div> 216 243 </div> 217 244 <DropdownMenu> 218 - <DropdownMenuTrigger asChild> 219 - <Button 220 - variant="ghost" 221 - className="size-10 rounded-full p-1" 222 - > 223 - <Avatar className="size-8 overflow-hidden rounded-full"> 224 - <AvatarFallback className="rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white"> 225 - {initials} 226 - </AvatarFallback> 227 - </Avatar> 228 - </Button> 245 + <DropdownMenuTrigger 246 + render={ 247 + <Button 248 + variant="ghost" 249 + className="size-10 rounded-full p-1" 250 + /> 251 + } 252 + > 253 + <Avatar className="size-8 overflow-hidden rounded-full"> 254 + <AvatarFallback className="rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white"> 255 + {initials} 256 + </AvatarFallback> 257 + </Avatar> 229 258 </DropdownMenuTrigger> 230 259 <DropdownMenuContent className="w-56" align="end"> 231 260 {auth.user && (
+15 -6
resources/js/components/app-logo-icon.tsx
··· 2 2 3 3 export default function AppLogoIcon(props: SVGAttributes<SVGElement>) { 4 4 return ( 5 - <svg {...props} viewBox="0 0 40 42" xmlns="http://www.w3.org/2000/svg"> 6 - <path 7 - fillRule="evenodd" 8 - clipRule="evenodd" 9 - d="M17.2 5.63325L8.6 0.855469L0 5.63325V32.1434L16.2 41.1434L32.4 32.1434V23.699L40 19.4767V9.85547L31.4 5.07769L22.8 9.85547V18.2999L17.2 21.411V5.63325ZM38 18.2999L32.4 21.411V15.2545L38 12.1434V18.2999ZM36.9409 10.4439L31.4 13.5221L25.8591 10.4439L31.4 7.36561L36.9409 10.4439ZM24.8 18.2999V12.1434L30.4 15.2545V21.411L24.8 18.2999ZM23.8 20.0323L29.3409 23.1105L16.2 30.411L10.6591 27.3328L23.8 20.0323ZM7.6 27.9212L15.2 32.1434V38.2999L2 30.9666V7.92116L7.6 11.0323V27.9212ZM8.6 9.29991L3.05913 6.22165L8.6 3.14339L14.1409 6.22165L8.6 9.29991ZM30.4 24.8101L17.2 32.1434V38.2999L30.4 30.9666V24.8101ZM9.6 11.0323L15.2 7.92117V22.5221L9.6 25.6333V11.0323Z" 10 - /> 5 + <svg 6 + {...props} 7 + viewBox="0 0 64 57" 8 + fill="currentColor" 9 + xmlns="http://www.w3.org/2000/svg" 10 + aria-hidden="true" 11 + > 12 + <g> 13 + <path d="M32.0006 0C21.0913 0 12.2476 8.84376 12.2476 19.7531H51.7537C51.7537 8.84376 42.91 0 32.0006 0Z" /> 14 + </g> 15 + <g> 16 + <path d="M47.4132 52.5445C42.8413 55.0621 37.5881 56.4951 32 56.4951C26.4119 56.4951 21.1587 55.0621 16.5868 52.5445H47.4132Z" /> 17 + <path d="M59.8318 40.2976C58.2435 43.089 56.2473 45.618 53.9244 47.8038H10.0756C7.7527 45.618 5.75655 43.089 4.16821 40.2976H59.8318Z" /> 18 + <path d="M64 24.4951C64 28.3833 63.3063 32.1095 62.0363 35.5568H1.96373C0.693729 32.1095 -3.39919e-07 28.3833 0 24.4951H64Z" /> 19 + </g> 11 20 </svg> 12 21 ); 13 22 }
+4 -4
resources/js/components/app-logo.tsx
··· 3 3 export default function AppLogo() { 4 4 return ( 5 5 <> 6 - <div className="flex aspect-square size-8 items-center justify-center rounded-md bg-sidebar-primary text-sidebar-primary-foreground"> 7 - <AppLogoIcon className="size-5 fill-current text-white dark:text-black" /> 6 + <div className="flex aspect-square size-8 items-center justify-center rounded-md text-brand"> 7 + <AppLogoIcon className="size-5" /> 8 8 </div> 9 9 <div className="ml-1 grid flex-1 text-left text-sm"> 10 - <span className="mb-0.5 truncate leading-tight font-semibold"> 11 - Laravel Starter Kit 10 + <span className="mb-0.5 truncate leading-tight font-medium"> 11 + Morgenblau 12 12 </span> 13 13 </div> 14 14 </>
+13 -8
resources/js/components/app-sidebar.tsx
··· 1 + import { 2 + BookOpen01Icon, 3 + GitBranchIcon, 4 + LayoutGridIcon, 5 + } from '@hugeicons/core-free-icons'; 1 6 import { Link } from '@inertiajs/react'; 2 - import { BookOpen, FolderGit2, LayoutGrid } from 'lucide-react'; 3 7 import AppLogo from '@/components/app-logo'; 4 8 import { NavFooter } from '@/components/nav-footer'; 5 9 import { NavMain } from '@/components/nav-main'; ··· 20 24 { 21 25 title: 'Dashboard', 22 26 href: dashboard(), 23 - icon: LayoutGrid, 27 + icon: LayoutGridIcon, 24 28 }, 25 29 ]; 26 30 ··· 28 32 { 29 33 title: 'Repository', 30 34 href: 'https://github.com/laravel/react-starter-kit', 31 - icon: FolderGit2, 35 + icon: GitBranchIcon, 32 36 }, 33 37 { 34 38 title: 'Documentation', 35 39 href: 'https://laravel.com/docs/starter-kits#react', 36 - icon: BookOpen, 40 + icon: BookOpen01Icon, 37 41 }, 38 42 ]; 39 43 ··· 43 47 <SidebarHeader> 44 48 <SidebarMenu> 45 49 <SidebarMenuItem> 46 - <SidebarMenuButton size="lg" asChild> 47 - <Link href={dashboard()} prefetch> 48 - <AppLogo /> 49 - </Link> 50 + <SidebarMenuButton 51 + size="lg" 52 + render={<Link href={dashboard()} prefetch />} 53 + > 54 + <AppLogo /> 50 55 </SidebarMenuButton> 51 56 </SidebarMenuItem> 52 57 </SidebarMenu>
+13 -8
resources/js/components/appearance-tabs.tsx
··· 1 - import type { LucideIcon } from 'lucide-react'; 2 - import { Monitor, Moon, Sun } from 'lucide-react'; 1 + import { 2 + ComputerIcon, 3 + Moon02Icon, 4 + Sun03Icon, 5 + } from '@hugeicons/core-free-icons'; 6 + import { HugeiconsIcon } from '@hugeicons/react'; 7 + import type { IconSvgElement } from '@hugeicons/react'; 3 8 import type { HTMLAttributes } from 'react'; 4 9 import type { Appearance } from '@/hooks/use-appearance'; 5 10 import { useAppearance } from '@/hooks/use-appearance'; ··· 11 16 }: HTMLAttributes<HTMLDivElement>) { 12 17 const { appearance, updateAppearance } = useAppearance(); 13 18 14 - const tabs: { value: Appearance; icon: LucideIcon; label: string }[] = [ 15 - { value: 'light', icon: Sun, label: 'Light' }, 16 - { value: 'dark', icon: Moon, label: 'Dark' }, 17 - { value: 'system', icon: Monitor, label: 'System' }, 19 + const tabs: { value: Appearance; icon: IconSvgElement; label: string }[] = [ 20 + { value: 'light', icon: Sun03Icon, label: 'Light' }, 21 + { value: 'dark', icon: Moon02Icon, label: 'Dark' }, 22 + { value: 'system', icon: ComputerIcon, label: 'System' }, 18 23 ]; 19 24 20 25 return ( ··· 25 30 )} 26 31 {...props} 27 32 > 28 - {tabs.map(({ value, icon: Icon, label }) => ( 33 + {tabs.map(({ value, icon, label }) => ( 29 34 <button 30 35 key={value} 31 36 onClick={() => updateAppearance(value)} ··· 36 41 : 'text-neutral-500 hover:bg-neutral-200/60 hover:text-black dark:text-neutral-400 dark:hover:bg-neutral-700/60', 37 42 )} 38 43 > 39 - <Icon className="-ml-1 h-4 w-4" /> 44 + <HugeiconsIcon icon={icon} className="-ml-1 h-4 w-4" /> 40 45 <span className="ml-1.5 text-sm">{label}</span> 41 46 </button> 42 47 ))}
+6 -4
resources/js/components/breadcrumbs.tsx
··· 31 31 {item.title} 32 32 </BreadcrumbPage> 33 33 ) : ( 34 - <BreadcrumbLink asChild> 35 - <Link href={item.href}> 36 - {item.title} 37 - </Link> 34 + <BreadcrumbLink 35 + render={ 36 + <Link href={item.href} /> 37 + } 38 + > 39 + {item.title} 38 40 </BreadcrumbLink> 39 41 )} 40 42 </BreadcrumbItem>
+15 -11
resources/js/components/nav-footer.tsx
··· 1 + import { HugeiconsIcon } from '@hugeicons/react'; 1 2 import type { ComponentPropsWithoutRef } from 'react'; 2 3 import { 3 4 SidebarGroup, ··· 26 27 {items.map((item) => ( 27 28 <SidebarMenuItem key={item.title}> 28 29 <SidebarMenuButton 29 - asChild 30 + render={ 31 + <a 32 + href={toUrl(item.href)} 33 + target="_blank" 34 + rel="noopener noreferrer" 35 + /> 36 + } 30 37 className="text-neutral-600 hover:text-neutral-800 dark:text-neutral-300 dark:hover:text-neutral-100" 31 38 > 32 - <a 33 - href={toUrl(item.href)} 34 - target="_blank" 35 - rel="noopener noreferrer" 36 - > 37 - {item.icon && ( 38 - <item.icon className="h-5 w-5" /> 39 - )} 40 - <span>{item.title}</span> 41 - </a> 39 + {item.icon && ( 40 + <HugeiconsIcon 41 + icon={item.icon} 42 + className="h-5 w-5" 43 + /> 44 + )} 45 + <span>{item.title}</span> 42 46 </SidebarMenuButton> 43 47 </SidebarMenuItem> 44 48 ))}
+4 -5
resources/js/components/nav-main.tsx
··· 1 + import { HugeiconsIcon } from '@hugeicons/react'; 1 2 import { Link } from '@inertiajs/react'; 2 3 import { 3 4 SidebarGroup, ··· 19 20 {items.map((item) => ( 20 21 <SidebarMenuItem key={item.title}> 21 22 <SidebarMenuButton 22 - asChild 23 + render={<Link href={item.href} prefetch />} 23 24 isActive={isCurrentUrl(item.href)} 24 25 tooltip={{ children: item.title }} 25 26 > 26 - <Link href={item.href} prefetch> 27 - {item.icon && <item.icon />} 28 - <span>{item.title}</span> 29 - </Link> 27 + {item.icon && <HugeiconsIcon icon={item.icon} />} 28 + <span>{item.title}</span> 30 29 </SidebarMenuButton> 31 30 </SidebarMenuItem> 32 31 ))}
+16 -13
resources/js/components/nav-user.tsx
··· 1 + import { UnfoldMoreIcon } from '@hugeicons/core-free-icons'; 2 + import { HugeiconsIcon } from '@hugeicons/react'; 1 3 import { usePage } from '@inertiajs/react'; 2 - import { ChevronsUpDown } from 'lucide-react'; 3 4 import { 4 5 DropdownMenu, 5 6 DropdownMenuContent, ··· 28 29 <SidebarMenu> 29 30 <SidebarMenuItem> 30 31 <DropdownMenu> 31 - <DropdownMenuTrigger asChild> 32 - <SidebarMenuButton 33 - size="lg" 34 - className="group text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent" 35 - data-test="sidebar-menu-button" 36 - > 37 - <UserInfo 38 - handle={auth.handle} 39 - did={auth.user.did} 32 + <DropdownMenuTrigger 33 + render={ 34 + <SidebarMenuButton 35 + size="lg" 36 + className="group text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent" 37 + data-test="sidebar-menu-button" 40 38 /> 41 - <ChevronsUpDown className="ml-auto size-4" /> 42 - </SidebarMenuButton> 39 + } 40 + > 41 + <UserInfo handle={auth.handle} did={auth.user.did} /> 42 + <HugeiconsIcon 43 + icon={UnfoldMoreIcon} 44 + className="ml-auto size-4" 45 + /> 43 46 </DropdownMenuTrigger> 44 47 <DropdownMenuContent 45 - className="w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg" 48 + className="w-(--anchor-width) min-w-56 rounded-lg" 46 49 align="end" 47 50 side={ 48 51 isMobile
+32
resources/js/components/surface.tsx
··· 1 + import type { ReactNode } from 'react'; 2 + import { LevelContext } from '@/lib/level-context'; 3 + import { cn } from '@/lib/utils'; 4 + 5 + type SurfaceLevelChoice = 1 | 2; 6 + 7 + const LEVEL_STYLES: Record<SurfaceLevelChoice, string> = { 8 + 1: 'bg-gray-50 border-gray-200 dark:bg-gray-900 dark:border-gray-800', 9 + 2: 'bg-white border-gray-100 dark:bg-gray-800 dark:border-gray-700', 10 + }; 11 + 12 + type SurfaceProps = { 13 + children: ReactNode; 14 + level?: SurfaceLevelChoice; 15 + className?: string; 16 + }; 17 + 18 + export function Surface({ children, level = 2, className }: SurfaceProps) { 19 + return ( 20 + <LevelContext.Provider value={level}> 21 + <div 22 + className={cn( 23 + 'rounded-4xl border', 24 + LEVEL_STYLES[level], 25 + className, 26 + )} 27 + > 28 + {children} 29 + </div> 30 + </LevelContext.Provider> 31 + ); 32 + }
+17 -7
resources/js/components/ui/alert.tsx
··· 1 - import { cva, type VariantProps } from "class-variance-authority" 2 1 import * as React from "react" 2 + import { cva, type VariantProps } from "class-variance-authority" 3 3 4 4 import { cn } from "@/lib/utils" 5 5 6 6 const alertVariants = cva( 7 - "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", 7 + "group/alert relative grid w-full gap-0.5 rounded-lg border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", 8 8 { 9 9 variants: { 10 10 variant: { 11 - default: "bg-background text-foreground", 11 + default: "bg-card text-card-foreground", 12 12 destructive: 13 - "text-destructive-foreground [&>svg]:text-current *:data-[slot=alert-description]:text-destructive-foreground/80", 13 + "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current", 14 14 }, 15 15 }, 16 16 defaultVariants: { ··· 39 39 <div 40 40 data-slot="alert-title" 41 41 className={cn( 42 - "col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight", 42 + "font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground", 43 43 className 44 44 )} 45 45 {...props} ··· 55 55 <div 56 56 data-slot="alert-description" 57 57 className={cn( 58 - "text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed", 58 + "text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", 59 59 className 60 60 )} 61 61 {...props} ··· 63 63 ) 64 64 } 65 65 66 - export { Alert, AlertTitle, AlertDescription } 66 + function AlertAction({ className, ...props }: React.ComponentProps<"div">) { 67 + return ( 68 + <div 69 + data-slot="alert-action" 70 + className={cn("absolute top-2.5 right-3", className)} 71 + {...props} 72 + /> 73 + ) 74 + } 75 + 76 + export { Alert, AlertTitle, AlertDescription, AlertAction }
+67 -11
resources/js/components/ui/avatar.tsx
··· 1 - import * as AvatarPrimitive from "@radix-ui/react-avatar" 2 1 import * as React from "react" 2 + import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar" 3 3 4 4 import { cn } from "@/lib/utils" 5 5 6 6 function Avatar({ 7 7 className, 8 + size = "default", 8 9 ...props 9 - }: React.ComponentProps<typeof AvatarPrimitive.Root>) { 10 + }: AvatarPrimitive.Root.Props & { 11 + size?: "default" | "sm" | "lg" 12 + }) { 10 13 return ( 11 14 <AvatarPrimitive.Root 12 15 data-slot="avatar" 16 + data-size={size} 13 17 className={cn( 14 - "relative flex size-8 shrink-0 overflow-hidden rounded-full", 18 + "group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten", 15 19 className 16 20 )} 17 21 {...props} ··· 19 23 ) 20 24 } 21 25 22 - function AvatarImage({ 23 - className, 24 - ...props 25 - }: React.ComponentProps<typeof AvatarPrimitive.Image>) { 26 + function AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) { 26 27 return ( 27 28 <AvatarPrimitive.Image 28 29 data-slot="avatar-image" 29 - className={cn("aspect-square size-full", className)} 30 + className={cn( 31 + "aspect-square size-full rounded-full object-cover", 32 + className 33 + )} 30 34 {...props} 31 35 /> 32 36 ) ··· 35 39 function AvatarFallback({ 36 40 className, 37 41 ...props 38 - }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) { 42 + }: AvatarPrimitive.Fallback.Props) { 39 43 return ( 40 44 <AvatarPrimitive.Fallback 41 45 data-slot="avatar-fallback" 42 46 className={cn( 43 - "bg-muted flex size-full items-center justify-center rounded-full", 47 + "flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs", 44 48 className 45 49 )} 46 50 {...props} ··· 48 52 ) 49 53 } 50 54 51 - export { Avatar, AvatarImage, AvatarFallback } 55 + function AvatarBadge({ className, ...props }: React.ComponentProps<"span">) { 56 + return ( 57 + <span 58 + data-slot="avatar-badge" 59 + className={cn( 60 + "absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none", 61 + "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden", 62 + "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", 63 + "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", 64 + className 65 + )} 66 + {...props} 67 + /> 68 + ) 69 + } 70 + 71 + function AvatarGroup({ className, ...props }: React.ComponentProps<"div">) { 72 + return ( 73 + <div 74 + data-slot="avatar-group" 75 + className={cn( 76 + "group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background", 77 + className 78 + )} 79 + {...props} 80 + /> 81 + ) 82 + } 83 + 84 + function AvatarGroupCount({ 85 + className, 86 + ...props 87 + }: React.ComponentProps<"div">) { 88 + return ( 89 + <div 90 + data-slot="avatar-group-count" 91 + className={cn( 92 + "relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", 93 + className 94 + )} 95 + {...props} 96 + /> 97 + ) 98 + } 99 + 100 + export { 101 + Avatar, 102 + AvatarImage, 103 + AvatarFallback, 104 + AvatarGroup, 105 + AvatarGroupCount, 106 + AvatarBadge, 107 + }
+27 -21
resources/js/components/ui/badge.tsx
··· 1 - import { Slot } from "@radix-ui/react-slot" 1 + import { mergeProps } from "@base-ui/react/merge-props" 2 + import { useRender } from "@base-ui/react/use-render" 2 3 import { cva, type VariantProps } from "class-variance-authority" 3 - import * as React from "react" 4 4 5 5 import { cn } from "@/lib/utils" 6 6 7 7 const badgeVariants = cva( 8 - "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>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 transition-[color,box-shadow] overflow-hidden", 8 + "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", 9 9 { 10 10 variants: { 11 11 variant: { 12 - default: 13 - "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", 12 + default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80", 14 13 secondary: 15 - "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", 14 + "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80", 16 15 destructive: 17 - "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", 16 + "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20", 18 17 outline: 19 - "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", 18 + "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground", 19 + ghost: 20 + "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50", 21 + link: "text-primary underline-offset-4 hover:underline", 20 22 }, 21 23 }, 22 24 defaultVariants: { ··· 27 29 28 30 function Badge({ 29 31 className, 30 - variant, 31 - asChild = false, 32 + variant = "default", 33 + render, 32 34 ...props 33 - }: React.ComponentProps<"span"> & 34 - VariantProps<typeof badgeVariants> & { asChild?: boolean }) { 35 - const Comp = asChild ? Slot : "span" 36 - 37 - return ( 38 - <Comp 39 - data-slot="badge" 40 - className={cn(badgeVariants({ variant }), className)} 41 - {...props} 42 - /> 43 - ) 35 + }: useRender.ComponentProps<"span"> & VariantProps<typeof badgeVariants>) { 36 + return useRender({ 37 + defaultTagName: "span", 38 + props: mergeProps<"span">( 39 + { 40 + className: cn(badgeVariants({ variant }), className), 41 + }, 42 + props 43 + ), 44 + render, 45 + state: { 46 + slot: "badge", 47 + variant, 48 + }, 49 + }) 44 50 } 45 51 46 52 export { Badge, badgeVariants }
+38 -22
resources/js/components/ui/breadcrumb.tsx
··· 1 - import { Slot } from "@radix-ui/react-slot" 2 - import { ChevronRight, MoreHorizontal } from "lucide-react" 3 1 import * as React from "react" 2 + import { mergeProps } from "@base-ui/react/merge-props" 3 + import { useRender } from "@base-ui/react/use-render" 4 4 5 5 import { cn } from "@/lib/utils" 6 + import { HugeiconsIcon } from "@hugeicons/react" 7 + import { ArrowRight01Icon, MoreHorizontalCircle01Icon } from "@hugeicons/core-free-icons" 6 8 7 - function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { 8 - return <nav aria-label="breadcrumb" data-slot="breadcrumb" {...props} /> 9 + function Breadcrumb({ className, ...props }: React.ComponentProps<"nav">) { 10 + return ( 11 + <nav 12 + aria-label="breadcrumb" 13 + data-slot="breadcrumb" 14 + className={cn(className)} 15 + {...props} 16 + /> 17 + ) 9 18 } 10 19 11 20 function BreadcrumbList({ className, ...props }: React.ComponentProps<"ol">) { ··· 13 22 <ol 14 23 data-slot="breadcrumb-list" 15 24 className={cn( 16 - "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5", 25 + "flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground sm:gap-2.5", 17 26 className 18 27 )} 19 28 {...props} ··· 32 41 } 33 42 34 43 function BreadcrumbLink({ 35 - asChild, 36 44 className, 45 + render, 37 46 ...props 38 - }: React.ComponentProps<"a"> & { 39 - asChild?: boolean 40 - }) { 41 - const Comp = asChild ? Slot : "a" 42 - 43 - return ( 44 - <Comp 45 - data-slot="breadcrumb-link" 46 - className={cn("hover:text-foreground transition-colors", className)} 47 - {...props} 48 - /> 49 - ) 47 + }: useRender.ComponentProps<"a">) { 48 + return useRender({ 49 + defaultTagName: "a", 50 + props: mergeProps<"a">( 51 + { 52 + className: cn("transition-colors hover:text-foreground", className), 53 + }, 54 + props 55 + ), 56 + render, 57 + state: { 58 + slot: "breadcrumb-link", 59 + }, 60 + }) 50 61 } 51 62 52 63 function BreadcrumbPage({ className, ...props }: React.ComponentProps<"span">) { ··· 56 67 role="link" 57 68 aria-disabled="true" 58 69 aria-current="page" 59 - className={cn("text-foreground font-normal", className)} 70 + className={cn("font-normal text-foreground", className)} 60 71 {...props} 61 72 /> 62 73 ) ··· 75 86 className={cn("[&>svg]:size-3.5", className)} 76 87 {...props} 77 88 > 78 - {children ?? <ChevronRight />} 89 + {children ?? ( 90 + <HugeiconsIcon icon={ArrowRight01Icon} strokeWidth={2} /> 91 + )} 79 92 </li> 80 93 ) 81 94 } ··· 89 102 data-slot="breadcrumb-ellipsis" 90 103 role="presentation" 91 104 aria-hidden="true" 92 - className={cn("flex size-9 items-center justify-center", className)} 105 + className={cn( 106 + "flex size-5 items-center justify-center [&>svg]:size-4", 107 + className 108 + )} 93 109 {...props} 94 110 > 95 - <MoreHorizontal className="size-4" /> 111 + <HugeiconsIcon icon={MoreHorizontalCircle01Icon} strokeWidth={2} /> 96 112 <span className="sr-only">More</span> 97 113 </span> 98 114 )
+62 -49
resources/js/components/ui/button.tsx
··· 1 - import { Slot } from "@radix-ui/react-slot" 2 - import { cva, type VariantProps } from "class-variance-authority" 3 - import * as React from "react" 1 + import { Button as ButtonPrimitive } from '@base-ui/react/button'; 2 + import { cva, type VariantProps } from 'class-variance-authority'; 4 3 5 - import { cn } from "@/lib/utils" 4 + import { cn } from '@/lib/utils'; 5 + import { useSurfaceLevel, type SurfaceLevel } from '@/lib/level-context'; 6 + 7 + const SECONDARY_BY_LEVEL: Record<SurfaceLevel, string> = { 8 + 0: 'bg-gray-100 text-gray-900 hover:bg-gray-200 dark:bg-gray-600 dark:text-gray-50 dark:hover:bg-gray-500', 9 + 1: 'bg-gray-200 text-gray-900 hover:bg-gray-300 dark:bg-gray-700 dark:text-gray-50 dark:hover:bg-gray-600', 10 + 2: 'bg-gray-100 text-gray-900 hover:bg-gray-200 dark:bg-gray-600 dark:text-gray-50 dark:hover:bg-gray-500', 11 + }; 6 12 7 13 const buttonVariants = cva( 8 - "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 outline-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", 9 - { 10 - variants: { 11 - variant: { 12 - default: 13 - "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90", 14 - destructive: 15 - "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40", 16 - outline: 17 - "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground", 18 - secondary: 19 - "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80", 20 - ghost: "hover:bg-accent hover:text-accent-foreground", 21 - link: "text-primary underline-offset-4 hover:underline", 22 - }, 23 - size: { 24 - default: "h-9 px-4 py-2 has-[>svg]:px-3", 25 - sm: "h-8 rounded-md px-3 has-[>svg]:px-2.5", 26 - lg: "h-10 rounded-md px-6 has-[>svg]:px-4", 27 - icon: "size-9", 28 - }, 14 + "group/button inline-flex shrink-0 items-center justify-center rounded-xl border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none outline-ring outline-offset-2 focus-visible:outline-solid focus-visible:outline-1 motion-safe:active:not-aria-[haspopup]:scale-[0.97] disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 15 + { 16 + variants: { 17 + variant: { 18 + default: 19 + 'bg-primary/10 text-primary border-primary/20 hover:bg-primary/15 dark:bg-primary/20 dark:hover:bg-primary/25', 20 + secondary: '', 21 + ghost: 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50', 22 + destructive: 23 + 'bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40', 24 + link: 'text-primary underline-offset-4 hover:underline', 25 + }, 26 + size: { 27 + default: 28 + 'h-10 gap-1.5 px-3.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3', 29 + xs: "h-6 gap-1 rounded-lg px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3", 30 + sm: "h-8 gap-1 rounded-lg px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5", 31 + lg: 'h-11 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3.5 has-data-[icon=inline-start]:pl-3.5', 32 + icon: 'size-10', 33 + 'icon-xs': 34 + "size-6 rounded-lg in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3", 35 + 'icon-sm': 36 + 'size-8 rounded-lg in-data-[slot=button-group]:rounded-lg', 37 + 'icon-lg': 'size-11', 38 + }, 39 + }, 40 + defaultVariants: { 41 + variant: 'default', 42 + size: 'default', 43 + }, 29 44 }, 30 - defaultVariants: { 31 - variant: "default", 32 - size: "default", 33 - }, 34 - } 35 - ) 45 + ); 46 + 47 + type ButtonVariant = VariantProps<typeof buttonVariants>['variant']; 36 48 37 49 function Button({ 38 - className, 39 - variant, 40 - size, 41 - asChild = false, 42 - ...props 43 - }: React.ComponentProps<"button"> & 44 - VariantProps<typeof buttonVariants> & { 45 - asChild?: boolean 46 - }) { 47 - const Comp = asChild ? Slot : "button" 50 + className, 51 + variant = 'default', 52 + size = 'default', 53 + ...props 54 + }: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) { 55 + const level = useSurfaceLevel(); 56 + const variantClass: ButtonVariant = variant ?? 'default'; 48 57 49 - return ( 50 - <Comp 51 - data-slot="button" 52 - className={cn(buttonVariants({ variant, size, className }))} 53 - {...props} 54 - /> 55 - ) 58 + return ( 59 + <ButtonPrimitive 60 + data-slot="button" 61 + className={cn( 62 + buttonVariants({ variant: variantClass, size }), 63 + variantClass === 'secondary' && SECONDARY_BY_LEVEL[level], 64 + className, 65 + )} 66 + {...props} 67 + /> 68 + ); 56 69 } 57 70 58 - export { Button, buttonVariants } 71 + export { Button, buttonVariants };
+43 -8
resources/js/components/ui/card.tsx
··· 2 2 3 3 import { cn } from "@/lib/utils" 4 4 5 - function Card({ className, ...props }: React.ComponentProps<"div">) { 5 + function Card({ 6 + className, 7 + size = "default", 8 + ...props 9 + }: React.ComponentProps<"div"> & { size?: "default" | "sm" }) { 6 10 return ( 7 11 <div 8 12 data-slot="card" 13 + data-size={size} 9 14 className={cn( 10 - "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm", 15 + "group/card flex flex-col gap-6 overflow-hidden rounded-xl bg-card py-6 text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 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", 11 16 className 12 17 )} 13 18 {...props} ··· 19 24 return ( 20 25 <div 21 26 data-slot="card-header" 22 - className={cn("flex flex-col gap-1.5 px-6", className)} 27 + className={cn( 28 + "group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4", 29 + className 30 + )} 23 31 {...props} 24 32 /> 25 33 ) ··· 29 37 return ( 30 38 <div 31 39 data-slot="card-title" 32 - className={cn("leading-none font-semibold", className)} 40 + className={cn( 41 + "font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm", 42 + className 43 + )} 33 44 {...props} 34 45 /> 35 46 ) ··· 39 50 return ( 40 51 <div 41 52 data-slot="card-description" 42 - className={cn("text-muted-foreground text-sm", className)} 53 + className={cn("text-sm text-muted-foreground", className)} 54 + {...props} 55 + /> 56 + ) 57 + } 58 + 59 + function CardAction({ className, ...props }: React.ComponentProps<"div">) { 60 + return ( 61 + <div 62 + data-slot="card-action" 63 + className={cn( 64 + "col-start-2 row-span-2 row-start-1 self-start justify-self-end", 65 + className 66 + )} 43 67 {...props} 44 68 /> 45 69 ) ··· 49 73 return ( 50 74 <div 51 75 data-slot="card-content" 52 - className={cn("px-6", className)} 76 + className={cn("px-6 group-data-[size=sm]/card:px-4", className)} 53 77 {...props} 54 78 /> 55 79 ) ··· 59 83 return ( 60 84 <div 61 85 data-slot="card-footer" 62 - className={cn("flex items-center px-6", className)} 86 + className={cn( 87 + "flex items-center 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", 88 + className 89 + )} 63 90 {...props} 64 91 /> 65 92 ) 66 93 } 67 94 68 - export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } 95 + export { 96 + Card, 97 + CardHeader, 98 + CardFooter, 99 + CardTitle, 100 + CardAction, 101 + CardDescription, 102 + CardContent, 103 + }
+9 -10
resources/js/components/ui/checkbox.tsx
··· 1 - import * as CheckboxPrimitive from "@radix-ui/react-checkbox" 2 - import { CheckIcon } from "lucide-react" 3 - import * as React from "react" 1 + "use client" 2 + 3 + import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox" 4 4 5 5 import { cn } from "@/lib/utils" 6 + import { HugeiconsIcon } from "@hugeicons/react" 7 + import { Tick02Icon } from "@hugeicons/core-free-icons" 6 8 7 - function Checkbox({ 8 - className, 9 - ...props 10 - }: React.ComponentProps<typeof CheckboxPrimitive.Root>) { 9 + function Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) { 11 10 return ( 12 11 <CheckboxPrimitive.Root 13 12 data-slot="checkbox" 14 13 className={cn( 15 - "peer border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", 14 + "peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input shadow-xs transition-shadow outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary", 16 15 className 17 16 )} 18 17 {...props} 19 18 > 20 19 <CheckboxPrimitive.Indicator 21 20 data-slot="checkbox-indicator" 22 - className="flex items-center justify-center text-current transition-none" 21 + className="grid place-content-center text-current transition-none [&>svg]:size-3.5" 23 22 > 24 - <CheckIcon className="size-3.5" /> 23 + <HugeiconsIcon icon={Tick02Icon} strokeWidth={2} /> 25 24 </CheckboxPrimitive.Indicator> 26 25 </CheckboxPrimitive.Root> 27 26 )
+6 -18
resources/js/components/ui/collapsible.tsx
··· 1 - import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" 1 + import { Collapsible as CollapsiblePrimitive } from "@base-ui/react/collapsible" 2 2 3 - function Collapsible({ 4 - ...props 5 - }: React.ComponentProps<typeof CollapsiblePrimitive.Root>) { 3 + function Collapsible({ ...props }: CollapsiblePrimitive.Root.Props) { 6 4 return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} /> 7 5 } 8 6 9 - function CollapsibleTrigger({ 10 - ...props 11 - }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) { 7 + function CollapsibleTrigger({ ...props }: CollapsiblePrimitive.Trigger.Props) { 12 8 return ( 13 - <CollapsiblePrimitive.CollapsibleTrigger 14 - data-slot="collapsible-trigger" 15 - {...props} 16 - /> 9 + <CollapsiblePrimitive.Trigger data-slot="collapsible-trigger" {...props} /> 17 10 ) 18 11 } 19 12 20 - function CollapsibleContent({ 21 - ...props 22 - }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) { 13 + function CollapsibleContent({ ...props }: CollapsiblePrimitive.Panel.Props) { 23 14 return ( 24 - <CollapsiblePrimitive.CollapsibleContent 25 - data-slot="collapsible-content" 26 - {...props} 27 - /> 15 + <CollapsiblePrimitive.Panel data-slot="collapsible-content" {...props} /> 28 16 ) 29 17 } 30 18
+58 -36
resources/js/components/ui/dialog.tsx
··· 1 - import * as DialogPrimitive from "@radix-ui/react-dialog" 2 - import { XIcon } from "lucide-react" 3 1 import * as React from "react" 2 + import { Dialog as DialogPrimitive } from "@base-ui/react/dialog" 4 3 5 4 import { cn } from "@/lib/utils" 5 + import { Button } from "@/components/ui/button" 6 + import { HugeiconsIcon } from "@hugeicons/react" 7 + import { Cancel01Icon } from "@hugeicons/core-free-icons" 6 8 7 - function Dialog({ 8 - ...props 9 - }: React.ComponentProps<typeof DialogPrimitive.Root>) { 9 + function Dialog({ ...props }: DialogPrimitive.Root.Props) { 10 10 return <DialogPrimitive.Root data-slot="dialog" {...props} /> 11 11 } 12 12 13 - function DialogTrigger({ 14 - ...props 15 - }: React.ComponentProps<typeof DialogPrimitive.Trigger>) { 13 + function DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) { 16 14 return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} /> 17 15 } 18 16 19 - function DialogPortal({ 20 - ...props 21 - }: React.ComponentProps<typeof DialogPrimitive.Portal>) { 17 + function DialogPortal({ ...props }: DialogPrimitive.Portal.Props) { 22 18 return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} /> 23 19 } 24 20 25 - function DialogClose({ 26 - ...props 27 - }: React.ComponentProps<typeof DialogPrimitive.Close>) { 21 + function DialogClose({ ...props }: DialogPrimitive.Close.Props) { 28 22 return <DialogPrimitive.Close data-slot="dialog-close" {...props} /> 29 23 } 30 24 31 25 function DialogOverlay({ 32 26 className, 33 27 ...props 34 - }: React.ComponentProps<typeof DialogPrimitive.Overlay>) { 28 + }: DialogPrimitive.Backdrop.Props) { 35 29 return ( 36 - <DialogPrimitive.Overlay 30 + <DialogPrimitive.Backdrop 37 31 data-slot="dialog-overlay" 38 32 className={cn( 39 - "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80", 33 + "fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", 40 34 className 41 35 )} 42 36 {...props} ··· 47 41 function DialogContent({ 48 42 className, 49 43 children, 44 + showCloseButton = true, 50 45 ...props 51 - }: React.ComponentProps<typeof DialogPrimitive.Content>) { 46 + }: DialogPrimitive.Popup.Props & { 47 + showCloseButton?: boolean 48 + }) { 52 49 return ( 53 - <DialogPortal data-slot="dialog-portal"> 50 + <DialogPortal> 54 51 <DialogOverlay /> 55 - <DialogPrimitive.Content 52 + <DialogPrimitive.Popup 56 53 data-slot="dialog-content" 57 54 className={cn( 58 - "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", 55 + "fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-6 rounded-xl bg-popover p-6 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", 59 56 className 60 57 )} 61 58 {...props} 62 59 > 63 60 {children} 64 - <DialogPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"> 65 - <XIcon /> 66 - <span className="sr-only">Close</span> 67 - </DialogPrimitive.Close> 68 - </DialogPrimitive.Content> 61 + {showCloseButton && ( 62 + <DialogPrimitive.Close 63 + data-slot="dialog-close" 64 + render={ 65 + <Button 66 + variant="ghost" 67 + className="absolute top-4 right-4" 68 + size="icon-sm" 69 + /> 70 + } 71 + > 72 + <HugeiconsIcon icon={Cancel01Icon} strokeWidth={2} /> 73 + <span className="sr-only">Close</span> 74 + </DialogPrimitive.Close> 75 + )} 76 + </DialogPrimitive.Popup> 69 77 </DialogPortal> 70 78 ) 71 79 } ··· 74 82 return ( 75 83 <div 76 84 data-slot="dialog-header" 77 - className={cn("flex flex-col gap-2 text-center sm:text-left", className)} 85 + className={cn("flex flex-col gap-2", className)} 78 86 {...props} 79 87 /> 80 88 ) 81 89 } 82 90 83 - function DialogFooter({ className, ...props }: React.ComponentProps<"div">) { 91 + function DialogFooter({ 92 + className, 93 + showCloseButton = false, 94 + children, 95 + ...props 96 + }: React.ComponentProps<"div"> & { 97 + showCloseButton?: boolean 98 + }) { 84 99 return ( 85 100 <div 86 101 data-slot="dialog-footer" ··· 89 104 className 90 105 )} 91 106 {...props} 92 - /> 107 + > 108 + {children} 109 + {showCloseButton && ( 110 + <DialogPrimitive.Close render={<Button variant="ghost" />}> 111 + Close 112 + </DialogPrimitive.Close> 113 + )} 114 + </div> 93 115 ) 94 116 } 95 117 96 - function DialogTitle({ 97 - className, 98 - ...props 99 - }: React.ComponentProps<typeof DialogPrimitive.Title>) { 118 + function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) { 100 119 return ( 101 120 <DialogPrimitive.Title 102 121 data-slot="dialog-title" 103 - className={cn("text-lg leading-none font-semibold", className)} 122 + className={cn("font-heading leading-none font-medium", className)} 104 123 {...props} 105 124 /> 106 125 ) ··· 109 128 function DialogDescription({ 110 129 className, 111 130 ...props 112 - }: React.ComponentProps<typeof DialogPrimitive.Description>) { 131 + }: DialogPrimitive.Description.Props) { 113 132 return ( 114 133 <DialogPrimitive.Description 115 134 data-slot="dialog-description" 116 - className={cn("text-muted-foreground text-sm", className)} 135 + className={cn( 136 + "text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", 137 + className 138 + )} 117 139 {...props} 118 140 /> 119 141 )
+132 -122
resources/js/components/ui/dropdown-menu.tsx
··· 1 - import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" 2 - import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react" 3 1 import * as React from "react" 2 + import { Menu as MenuPrimitive } from "@base-ui/react/menu" 4 3 5 4 import { cn } from "@/lib/utils" 5 + import { HugeiconsIcon } from "@hugeicons/react" 6 + import { ArrowRight01Icon, Tick02Icon } from "@hugeicons/core-free-icons" 6 7 7 - function DropdownMenu({ 8 - ...props 9 - }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) { 10 - return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} /> 8 + function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) { 9 + return <MenuPrimitive.Root data-slot="dropdown-menu" {...props} /> 11 10 } 12 11 13 - function DropdownMenuPortal({ 14 - ...props 15 - }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) { 16 - return ( 17 - <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} /> 18 - ) 12 + function DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) { 13 + return <MenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} /> 19 14 } 20 15 21 - function DropdownMenuTrigger({ 22 - ...props 23 - }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) { 24 - return ( 25 - <DropdownMenuPrimitive.Trigger 26 - data-slot="dropdown-menu-trigger" 27 - {...props} 28 - /> 29 - ) 16 + function DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) { 17 + return <MenuPrimitive.Trigger data-slot="dropdown-menu-trigger" {...props} /> 30 18 } 31 19 32 20 function DropdownMenuContent({ 33 - className, 21 + align = "start", 22 + alignOffset = 0, 23 + side = "bottom", 34 24 sideOffset = 4, 25 + className, 35 26 ...props 36 - }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) { 27 + }: MenuPrimitive.Popup.Props & 28 + Pick< 29 + MenuPrimitive.Positioner.Props, 30 + "align" | "alignOffset" | "side" | "sideOffset" 31 + >) { 37 32 return ( 38 - <DropdownMenuPrimitive.Portal> 39 - <DropdownMenuPrimitive.Content 40 - data-slot="dropdown-menu-content" 33 + <MenuPrimitive.Portal> 34 + <MenuPrimitive.Positioner 35 + className="isolate z-50 outline-none" 36 + align={align} 37 + alignOffset={alignOffset} 38 + side={side} 41 39 sideOffset={sideOffset} 42 - className={cn( 43 - "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=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 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-md", 44 - className 45 - )} 46 - {...props} 47 - /> 48 - </DropdownMenuPrimitive.Portal> 40 + > 41 + <MenuPrimitive.Popup 42 + data-slot="dropdown-menu-content" 43 + className={cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className )} 44 + {...props} 45 + /> 46 + </MenuPrimitive.Positioner> 47 + </MenuPrimitive.Portal> 49 48 ) 50 49 } 51 50 52 - function DropdownMenuGroup({ 51 + function DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) { 52 + return <MenuPrimitive.Group data-slot="dropdown-menu-group" {...props} /> 53 + } 54 + 55 + function DropdownMenuLabel({ 56 + className, 57 + inset, 53 58 ...props 54 - }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) { 59 + }: MenuPrimitive.GroupLabel.Props & { 60 + inset?: boolean 61 + }) { 55 62 return ( 56 - <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} /> 63 + <MenuPrimitive.GroupLabel 64 + data-slot="dropdown-menu-label" 65 + data-inset={inset} 66 + className={cn( 67 + "px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8", 68 + className 69 + )} 70 + {...props} 71 + /> 57 72 ) 58 73 } 59 74 ··· 62 77 inset, 63 78 variant = "default", 64 79 ...props 65 - }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & { 80 + }: MenuPrimitive.Item.Props & { 66 81 inset?: boolean 67 82 variant?: "default" | "destructive" 68 83 }) { 69 84 return ( 70 - <DropdownMenuPrimitive.Item 85 + <MenuPrimitive.Item 71 86 data-slot="dropdown-menu-item" 72 87 data-inset={inset} 73 88 data-variant={variant} 74 89 className={cn( 75 - "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive-foreground data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/40 data-[variant=destructive]:focus:text-destructive-foreground data-[variant=destructive]:*:[svg]:!text-destructive-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 90 + "group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive", 76 91 className 77 92 )} 78 93 {...props} ··· 80 95 ) 81 96 } 82 97 83 - function DropdownMenuCheckboxItem({ 98 + function DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) { 99 + return <MenuPrimitive.SubmenuRoot data-slot="dropdown-menu-sub" {...props} /> 100 + } 101 + 102 + function DropdownMenuSubTrigger({ 84 103 className, 104 + inset, 85 105 children, 86 - checked, 87 106 ...props 88 - }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) { 107 + }: MenuPrimitive.SubmenuTrigger.Props & { 108 + inset?: boolean 109 + }) { 89 110 return ( 90 - <DropdownMenuPrimitive.CheckboxItem 91 - data-slot="dropdown-menu-checkbox-item" 111 + <MenuPrimitive.SubmenuTrigger 112 + data-slot="dropdown-menu-sub-trigger" 113 + data-inset={inset} 92 114 className={cn( 93 - "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 115 + "flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 94 116 className 95 117 )} 96 - checked={checked} 97 118 {...props} 98 119 > 99 - <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center"> 100 - <DropdownMenuPrimitive.ItemIndicator> 101 - <CheckIcon className="size-4" /> 102 - </DropdownMenuPrimitive.ItemIndicator> 103 - </span> 104 120 {children} 105 - </DropdownMenuPrimitive.CheckboxItem> 121 + <HugeiconsIcon icon={ArrowRight01Icon} strokeWidth={2} className="ml-auto" /> 122 + </MenuPrimitive.SubmenuTrigger> 106 123 ) 107 124 } 108 125 109 - function DropdownMenuRadioGroup({ 126 + function DropdownMenuSubContent({ 127 + align = "start", 128 + alignOffset = -3, 129 + side = "right", 130 + sideOffset = 0, 131 + className, 110 132 ...props 111 - }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) { 133 + }: React.ComponentProps<typeof DropdownMenuContent>) { 112 134 return ( 113 - <DropdownMenuPrimitive.RadioGroup 114 - data-slot="dropdown-menu-radio-group" 135 + <DropdownMenuContent 136 + data-slot="dropdown-menu-sub-content" 137 + className={cn("w-auto min-w-[96px] rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className )} 138 + align={align} 139 + alignOffset={alignOffset} 140 + side={side} 141 + sideOffset={sideOffset} 115 142 {...props} 116 143 /> 117 144 ) 118 145 } 119 146 120 - function DropdownMenuRadioItem({ 147 + function DropdownMenuCheckboxItem({ 121 148 className, 122 149 children, 150 + checked, 151 + inset, 123 152 ...props 124 - }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) { 153 + }: MenuPrimitive.CheckboxItem.Props & { 154 + inset?: boolean 155 + }) { 125 156 return ( 126 - <DropdownMenuPrimitive.RadioItem 127 - data-slot="dropdown-menu-radio-item" 157 + <MenuPrimitive.CheckboxItem 158 + data-slot="dropdown-menu-checkbox-item" 159 + data-inset={inset} 128 160 className={cn( 129 - "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 161 + "relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 130 162 className 131 163 )} 164 + checked={checked} 132 165 {...props} 133 166 > 134 - <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center"> 135 - <DropdownMenuPrimitive.ItemIndicator> 136 - <CircleIcon className="size-2 fill-current" /> 137 - </DropdownMenuPrimitive.ItemIndicator> 167 + <span 168 + className="pointer-events-none absolute right-2 flex items-center justify-center" 169 + data-slot="dropdown-menu-checkbox-item-indicator" 170 + > 171 + <MenuPrimitive.CheckboxItemIndicator> 172 + <HugeiconsIcon icon={Tick02Icon} strokeWidth={2} /> 173 + </MenuPrimitive.CheckboxItemIndicator> 138 174 </span> 139 175 {children} 140 - </DropdownMenuPrimitive.RadioItem> 176 + </MenuPrimitive.CheckboxItem> 141 177 ) 142 178 } 143 179 144 - function DropdownMenuLabel({ 180 + function DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) { 181 + return ( 182 + <MenuPrimitive.RadioGroup 183 + data-slot="dropdown-menu-radio-group" 184 + {...props} 185 + /> 186 + ) 187 + } 188 + 189 + function DropdownMenuRadioItem({ 145 190 className, 191 + children, 146 192 inset, 147 193 ...props 148 - }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & { 194 + }: MenuPrimitive.RadioItem.Props & { 149 195 inset?: boolean 150 196 }) { 151 197 return ( 152 - <DropdownMenuPrimitive.Label 153 - data-slot="dropdown-menu-label" 198 + <MenuPrimitive.RadioItem 199 + data-slot="dropdown-menu-radio-item" 154 200 data-inset={inset} 155 201 className={cn( 156 - "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8", 202 + "relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 157 203 className 158 204 )} 159 205 {...props} 160 - /> 206 + > 207 + <span 208 + className="pointer-events-none absolute right-2 flex items-center justify-center" 209 + data-slot="dropdown-menu-radio-item-indicator" 210 + > 211 + <MenuPrimitive.RadioItemIndicator> 212 + <HugeiconsIcon icon={Tick02Icon} strokeWidth={2} /> 213 + </MenuPrimitive.RadioItemIndicator> 214 + </span> 215 + {children} 216 + </MenuPrimitive.RadioItem> 161 217 ) 162 218 } 163 219 164 220 function DropdownMenuSeparator({ 165 221 className, 166 222 ...props 167 - }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) { 223 + }: MenuPrimitive.Separator.Props) { 168 224 return ( 169 - <DropdownMenuPrimitive.Separator 225 + <MenuPrimitive.Separator 170 226 data-slot="dropdown-menu-separator" 171 - className={cn("bg-border -mx-1 my-1 h-px", className)} 227 + className={cn("-mx-1 my-1 h-px bg-border", className)} 172 228 {...props} 173 229 /> 174 230 ) ··· 182 238 <span 183 239 data-slot="dropdown-menu-shortcut" 184 240 className={cn( 185 - "text-muted-foreground ml-auto text-xs tracking-widest", 186 - className 187 - )} 188 - {...props} 189 - /> 190 - ) 191 - } 192 - 193 - function DropdownMenuSub({ 194 - ...props 195 - }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) { 196 - return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} /> 197 - } 198 - 199 - function DropdownMenuSubTrigger({ 200 - className, 201 - inset, 202 - children, 203 - ...props 204 - }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & { 205 - inset?: boolean 206 - }) { 207 - return ( 208 - <DropdownMenuPrimitive.SubTrigger 209 - data-slot="dropdown-menu-sub-trigger" 210 - data-inset={inset} 211 - className={cn( 212 - "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8", 213 - className 214 - )} 215 - {...props} 216 - > 217 - {children} 218 - <ChevronRightIcon className="ml-auto size-4" /> 219 - </DropdownMenuPrimitive.SubTrigger> 220 - ) 221 - } 222 - 223 - function DropdownMenuSubContent({ 224 - className, 225 - ...props 226 - }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) { 227 - return ( 228 - <DropdownMenuPrimitive.SubContent 229 - data-slot="dropdown-menu-sub-content" 230 - className={cn( 231 - "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=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 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg", 241 + "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", 232 242 className 233 243 )} 234 244 {...props}
+236
resources/js/components/ui/field.tsx
··· 1 + import { useMemo } from "react" 2 + import { cva, type VariantProps } from "class-variance-authority" 3 + 4 + import { cn } from "@/lib/utils" 5 + import { Label } from "@/components/ui/label" 6 + import { Separator } from "@/components/ui/separator" 7 + 8 + function FieldSet({ className, ...props }: React.ComponentProps<"fieldset">) { 9 + return ( 10 + <fieldset 11 + data-slot="field-set" 12 + className={cn( 13 + "flex flex-col gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", 14 + className 15 + )} 16 + {...props} 17 + /> 18 + ) 19 + } 20 + 21 + function FieldLegend({ 22 + className, 23 + variant = "legend", 24 + ...props 25 + }: React.ComponentProps<"legend"> & { variant?: "legend" | "label" }) { 26 + return ( 27 + <legend 28 + data-slot="field-legend" 29 + data-variant={variant} 30 + className={cn( 31 + "mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base", 32 + className 33 + )} 34 + {...props} 35 + /> 36 + ) 37 + } 38 + 39 + function FieldGroup({ className, ...props }: React.ComponentProps<"div">) { 40 + return ( 41 + <div 42 + data-slot="field-group" 43 + className={cn( 44 + "group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4", 45 + className 46 + )} 47 + {...props} 48 + /> 49 + ) 50 + } 51 + 52 + const fieldVariants = cva( 53 + "group/field flex w-full gap-3 data-[invalid=true]:text-destructive", 54 + { 55 + variants: { 56 + orientation: { 57 + vertical: "flex-col *:w-full [&>.sr-only]:w-auto", 58 + horizontal: 59 + "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px", 60 + responsive: 61 + "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px", 62 + }, 63 + }, 64 + defaultVariants: { 65 + orientation: "vertical", 66 + }, 67 + } 68 + ) 69 + 70 + function Field({ 71 + className, 72 + orientation = "vertical", 73 + ...props 74 + }: React.ComponentProps<"div"> & VariantProps<typeof fieldVariants>) { 75 + return ( 76 + <div 77 + role="group" 78 + data-slot="field" 79 + data-orientation={orientation} 80 + className={cn(fieldVariants({ orientation }), className)} 81 + {...props} 82 + /> 83 + ) 84 + } 85 + 86 + function FieldContent({ className, ...props }: React.ComponentProps<"div">) { 87 + return ( 88 + <div 89 + data-slot="field-content" 90 + className={cn( 91 + "group/field-content flex flex-1 flex-col gap-1 leading-snug", 92 + className 93 + )} 94 + {...props} 95 + /> 96 + ) 97 + } 98 + 99 + function FieldLabel({ 100 + className, 101 + ...props 102 + }: React.ComponentProps<typeof Label>) { 103 + return ( 104 + <Label 105 + data-slot="field-label" 106 + className={cn( 107 + "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border *:data-[slot=field]:p-3 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10", 108 + "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col", 109 + className 110 + )} 111 + {...props} 112 + /> 113 + ) 114 + } 115 + 116 + function FieldTitle({ className, ...props }: React.ComponentProps<"div">) { 117 + return ( 118 + <div 119 + data-slot="field-label" 120 + className={cn( 121 + "flex w-fit items-center gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50", 122 + className 123 + )} 124 + {...props} 125 + /> 126 + ) 127 + } 128 + 129 + function FieldDescription({ className, ...props }: React.ComponentProps<"p">) { 130 + return ( 131 + <p 132 + data-slot="field-description" 133 + className={cn( 134 + "text-left text-sm leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5", 135 + "last:mt-0 nth-last-2:-mt-1", 136 + "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", 137 + className 138 + )} 139 + {...props} 140 + /> 141 + ) 142 + } 143 + 144 + function FieldSeparator({ 145 + children, 146 + className, 147 + ...props 148 + }: React.ComponentProps<"div"> & { 149 + children?: React.ReactNode 150 + }) { 151 + return ( 152 + <div 153 + data-slot="field-separator" 154 + data-content={!!children} 155 + className={cn( 156 + "relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", 157 + className 158 + )} 159 + {...props} 160 + > 161 + <Separator className="absolute inset-0 top-1/2" /> 162 + {children && ( 163 + <span 164 + className="relative mx-auto block w-fit bg-background px-2 text-muted-foreground" 165 + data-slot="field-separator-content" 166 + > 167 + {children} 168 + </span> 169 + )} 170 + </div> 171 + ) 172 + } 173 + 174 + function FieldError({ 175 + className, 176 + children, 177 + errors, 178 + ...props 179 + }: React.ComponentProps<"div"> & { 180 + errors?: Array<{ message?: string } | undefined> 181 + }) { 182 + const content = useMemo(() => { 183 + if (children) { 184 + return children 185 + } 186 + 187 + if (!errors?.length) { 188 + return null 189 + } 190 + 191 + const uniqueErrors = [ 192 + ...new Map(errors.map((error) => [error?.message, error])).values(), 193 + ] 194 + 195 + if (uniqueErrors?.length == 1) { 196 + return uniqueErrors[0]?.message 197 + } 198 + 199 + return ( 200 + <ul className="ml-4 flex list-disc flex-col gap-1"> 201 + {uniqueErrors.map( 202 + (error, index) => 203 + error?.message && <li key={index}>{error.message}</li> 204 + )} 205 + </ul> 206 + ) 207 + }, [children, errors]) 208 + 209 + if (!content) { 210 + return null 211 + } 212 + 213 + return ( 214 + <div 215 + role="alert" 216 + data-slot="field-error" 217 + className={cn("text-sm font-normal text-destructive", className)} 218 + {...props} 219 + > 220 + {content} 221 + </div> 222 + ) 223 + } 224 + 225 + export { 226 + Field, 227 + FieldLabel, 228 + FieldDescription, 229 + FieldError, 230 + FieldGroup, 231 + FieldLegend, 232 + FieldSeparator, 233 + FieldSet, 234 + FieldContent, 235 + FieldTitle, 236 + }
-14
resources/js/components/ui/icon.tsx
··· 1 - import type { LucideIcon } from 'lucide-react'; 2 - 3 - interface IconProps { 4 - iconNode?: LucideIcon | null; 5 - className?: string; 6 - } 7 - 8 - export function Icon({ iconNode: IconComponent, className }: IconProps) { 9 - if (!IconComponent) { 10 - return null; 11 - } 12 - 13 - return <IconComponent className={className} />; 14 - }
+158
resources/js/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 + "group/input-group relative flex h-9 w-full min-w-0 items-center rounded-md border border-input shadow-xs transition-[color,box-shadow] outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 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-[>textarea]:h-auto dark:bg-input/30 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 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", 18 + className 19 + )} 20 + {...props} 21 + /> 22 + ) 23 + } 24 + 25 + const inputGroupAddonVariants = cva( 26 + "flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4", 27 + { 28 + variants: { 29 + align: { 30 + "inline-start": 31 + "order-first pl-2 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem]", 32 + "inline-end": 33 + "order-last pr-2 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem]", 34 + "block-start": 35 + "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2", 36 + "block-end": 37 + "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2", 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 + "flex items-center gap-2 text-sm shadow-none", 70 + { 71 + variants: { 72 + size: { 73 + xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5", 74 + sm: "", 75 + "icon-xs": 76 + "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0", 77 + "icon-sm": "size-8 p-0 has-[>svg]:p-0", 78 + }, 79 + }, 80 + defaultVariants: { 81 + size: "xs", 82 + }, 83 + } 84 + ) 85 + 86 + function InputGroupButton({ 87 + className, 88 + type = "button", 89 + variant = "ghost", 90 + size = "xs", 91 + ...props 92 + }: Omit<React.ComponentProps<typeof Button>, "size" | "type"> & 93 + VariantProps<typeof inputGroupButtonVariants> & { 94 + type?: "button" | "submit" | "reset" 95 + }) { 96 + return ( 97 + <Button 98 + type={type} 99 + data-size={size} 100 + variant={variant} 101 + className={cn(inputGroupButtonVariants({ size }), className)} 102 + {...props} 103 + /> 104 + ) 105 + } 106 + 107 + function InputGroupText({ className, ...props }: React.ComponentProps<"span">) { 108 + return ( 109 + <span 110 + className={cn( 111 + "flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", 112 + className 113 + )} 114 + {...props} 115 + /> 116 + ) 117 + } 118 + 119 + function InputGroupInput({ 120 + className, 121 + ...props 122 + }: React.ComponentProps<"input">) { 123 + return ( 124 + <Input 125 + data-slot="input-group-control" 126 + className={cn( 127 + "flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent", 128 + className 129 + )} 130 + {...props} 131 + /> 132 + ) 133 + } 134 + 135 + function InputGroupTextarea({ 136 + className, 137 + ...props 138 + }: React.ComponentProps<"textarea">) { 139 + return ( 140 + <Textarea 141 + data-slot="input-group-control" 142 + className={cn( 143 + "flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent", 144 + className 145 + )} 146 + {...props} 147 + /> 148 + ) 149 + } 150 + 151 + export { 152 + InputGroup, 153 + InputGroupAddon, 154 + InputGroupButton, 155 + InputGroupText, 156 + InputGroupInput, 157 + InputGroupTextarea, 158 + }
+3 -4
resources/js/components/ui/input.tsx
··· 1 1 import * as React from "react" 2 + import { Input as InputPrimitive } from "@base-ui/react/input" 2 3 3 4 import { cn } from "@/lib/utils" 4 5 5 6 function Input({ className, type, ...props }: React.ComponentProps<"input">) { 6 7 return ( 7 - <input 8 + <InputPrimitive 8 9 type={type} 9 10 data-slot="input" 10 11 className={cn( 11 - "border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", 12 - "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", 13 - "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", 12 + "h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", 14 13 className 15 14 )} 16 15 {...props}
+5 -7
resources/js/components/ui/label.tsx
··· 1 - import * as LabelPrimitive from "@radix-ui/react-label" 1 + "use client" 2 + 2 3 import * as React from "react" 3 4 4 5 import { cn } from "@/lib/utils" 5 6 6 - function Label({ 7 - className, 8 - ...props 9 - }: React.ComponentProps<typeof LabelPrimitive.Root>) { 7 + function Label({ className, ...props }: React.ComponentProps<"label">) { 10 8 return ( 11 - <LabelPrimitive.Root 9 + <label 12 10 data-slot="label" 13 11 className={cn( 14 - "text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", 12 + "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", 15 13 className 16 14 )} 17 15 {...props}
+46 -45
resources/js/components/ui/navigation-menu.tsx
··· 1 - import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu" 1 + import { NavigationMenu as NavigationMenuPrimitive } from "@base-ui/react/navigation-menu" 2 2 import { cva } from "class-variance-authority" 3 - import { ChevronDownIcon } from "lucide-react" 4 - import * as React from "react" 5 3 6 4 import { cn } from "@/lib/utils" 5 + import { HugeiconsIcon } from "@hugeicons/react" 6 + import { ArrowDown01Icon } from "@hugeicons/core-free-icons" 7 7 8 8 function NavigationMenu({ 9 + align = "start", 9 10 className, 10 11 children, 11 - viewport = true, 12 12 ...props 13 - }: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & { 14 - viewport?: boolean 15 - }) { 13 + }: NavigationMenuPrimitive.Root.Props & 14 + Pick<NavigationMenuPrimitive.Positioner.Props, "align">) { 16 15 return ( 17 16 <NavigationMenuPrimitive.Root 18 17 data-slot="navigation-menu" 19 - data-viewport={viewport} 20 18 className={cn( 21 19 "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center", 22 20 className ··· 24 22 {...props} 25 23 > 26 24 {children} 27 - {viewport && <NavigationMenuViewport />} 25 + <NavigationMenuPositioner align={align} /> 28 26 </NavigationMenuPrimitive.Root> 29 27 ) 30 28 } ··· 32 30 function NavigationMenuList({ 33 31 className, 34 32 ...props 35 - }: React.ComponentProps<typeof NavigationMenuPrimitive.List>) { 33 + }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.List>) { 36 34 return ( 37 35 <NavigationMenuPrimitive.List 38 36 data-slot="navigation-menu-list" 39 37 className={cn( 40 - "group flex flex-1 list-none items-center justify-center gap-1", 38 + "group flex flex-1 list-none items-center justify-center gap-0", 41 39 className 42 40 )} 43 41 {...props} ··· 48 46 function NavigationMenuItem({ 49 47 className, 50 48 ...props 51 - }: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) { 49 + }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.Item>) { 52 50 return ( 53 51 <NavigationMenuPrimitive.Item 54 52 data-slot="navigation-menu-item" ··· 59 57 } 60 58 61 59 const navigationMenuTriggerStyle = cva( 62 - "group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[active=true]:bg-accent/50 data-[state=open]:bg-accent/50 data-[active=true]:text-accent-foreground ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1" 60 + "group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-md px-4 py-2 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted" 63 61 ) 64 62 65 63 function NavigationMenuTrigger({ 66 64 className, 67 65 children, 68 66 ...props 69 - }: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) { 67 + }: NavigationMenuPrimitive.Trigger.Props) { 70 68 return ( 71 69 <NavigationMenuPrimitive.Trigger 72 70 data-slot="navigation-menu-trigger" ··· 74 72 {...props} 75 73 > 76 74 {children}{" "} 77 - <ChevronDownIcon 78 - className="relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180" 79 - aria-hidden="true" 80 - /> 75 + <HugeiconsIcon icon={ArrowDown01Icon} strokeWidth={2} className="relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180" aria-hidden="true" /> 81 76 </NavigationMenuPrimitive.Trigger> 82 77 ) 83 78 } ··· 85 80 function NavigationMenuContent({ 86 81 className, 87 82 ...props 88 - }: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) { 83 + }: NavigationMenuPrimitive.Content.Props) { 89 84 return ( 90 85 <NavigationMenuPrimitive.Content 91 86 data-slot="navigation-menu-content" 92 87 className={cn( 93 - "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto", 94 - "group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none", 88 + "data-ending-style:data-activation-direction=left:translate-x-[50%] data-ending-style:data-activation-direction=right:translate-x-[-50%] data-starting-style:data-activation-direction=left:translate-x-[-50%] data-starting-style:data-activation-direction=right:translate-x-[50%] h-full w-auto p-2 pr-2.5 transition-[opacity,transform,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:duration-300 data-ending-style:opacity-0 data-starting-style:opacity-0 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95", 95 89 className 96 90 )} 97 91 {...props} ··· 99 93 ) 100 94 } 101 95 102 - function NavigationMenuViewport({ 96 + function NavigationMenuPositioner({ 103 97 className, 98 + side = "bottom", 99 + sideOffset = 8, 100 + align = "start", 101 + alignOffset = 0, 104 102 ...props 105 - }: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) { 103 + }: NavigationMenuPrimitive.Positioner.Props) { 106 104 return ( 107 - <div 108 - className={cn( 109 - "absolute top-full left-0 isolate z-50 flex justify-center" 110 - )} 111 - > 112 - <NavigationMenuPrimitive.Viewport 113 - data-slot="navigation-menu-viewport" 105 + <NavigationMenuPrimitive.Portal> 106 + <NavigationMenuPrimitive.Positioner 107 + side={side} 108 + sideOffset={sideOffset} 109 + align={align} 110 + alignOffset={alignOffset} 114 111 className={cn( 115 - "origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]", 112 + "isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0", 116 113 className 117 114 )} 118 115 {...props} 119 - /> 120 - </div> 116 + > 117 + <NavigationMenuPrimitive.Popup className="data-[ending-style]:easing-[ease] xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) rounded-lg bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 transition-[opacity,transform,width,height,scale,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0"> 118 + <NavigationMenuPrimitive.Viewport className="relative size-full overflow-hidden" /> 119 + </NavigationMenuPrimitive.Popup> 120 + </NavigationMenuPrimitive.Positioner> 121 + </NavigationMenuPrimitive.Portal> 121 122 ) 122 123 } 123 124 124 125 function NavigationMenuLink({ 125 126 className, 126 127 ...props 127 - }: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) { 128 + }: NavigationMenuPrimitive.Link.Props) { 128 129 return ( 129 130 <NavigationMenuPrimitive.Link 130 131 data-slot="navigation-menu-link" 131 132 className={cn( 132 - "hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4", 133 + "flex items-center gap-1.5 rounded-md p-2 text-sm transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-sm data-[active=true]:bg-muted/50 data-[active=true]:hover:bg-muted data-[active=true]:focus:bg-muted [&_svg:not([class*='size-'])]:size-4", 133 134 className 134 135 )} 135 136 {...props} ··· 140 141 function NavigationMenuIndicator({ 141 142 className, 142 143 ...props 143 - }: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) { 144 + }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.Icon>) { 144 145 return ( 145 - <NavigationMenuPrimitive.Indicator 146 + <NavigationMenuPrimitive.Icon 146 147 data-slot="navigation-menu-indicator" 147 148 className={cn( 148 - "data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden", 149 + "top-full z-1 flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in", 149 150 className 150 151 )} 151 152 {...props} 152 153 > 153 - <div className="bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" /> 154 - </NavigationMenuPrimitive.Indicator> 154 + <div className="relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" /> 155 + </NavigationMenuPrimitive.Icon> 155 156 ) 156 157 } 157 158 158 159 export { 159 160 NavigationMenu, 160 - NavigationMenuList, 161 + NavigationMenuContent, 162 + NavigationMenuIndicator, 161 163 NavigationMenuItem, 162 - NavigationMenuContent, 164 + NavigationMenuLink, 165 + NavigationMenuList, 163 166 NavigationMenuTrigger, 164 - NavigationMenuLink, 165 - NavigationMenuIndicator, 166 - NavigationMenuViewport, 167 167 navigationMenuTriggerStyle, 168 + NavigationMenuPositioner, 168 169 }
+76 -69
resources/js/components/ui/select.tsx
··· 1 - import * as SelectPrimitive from "@radix-ui/react-select" 2 - import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react" 1 + "use client" 2 + 3 3 import * as React from "react" 4 + import { Select as SelectPrimitive } from "@base-ui/react/select" 4 5 5 6 import { cn } from "@/lib/utils" 7 + import { HugeiconsIcon } from "@hugeicons/react" 8 + import { UnfoldMoreIcon, Tick02Icon, ArrowUp01Icon, ArrowDown01Icon } from "@hugeicons/core-free-icons" 6 9 7 - function Select({ 8 - ...props 9 - }: React.ComponentProps<typeof SelectPrimitive.Root>) { 10 - return <SelectPrimitive.Root data-slot="select" {...props} /> 11 - } 10 + const Select = SelectPrimitive.Root 12 11 13 - function SelectGroup({ 14 - ...props 15 - }: React.ComponentProps<typeof SelectPrimitive.Group>) { 16 - return <SelectPrimitive.Group data-slot="select-group" {...props} /> 12 + function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) { 13 + return ( 14 + <SelectPrimitive.Group 15 + data-slot="select-group" 16 + className={cn("scroll-my-1 p-1", className)} 17 + {...props} 18 + /> 19 + ) 17 20 } 18 21 19 - function SelectValue({ 20 - ...props 21 - }: React.ComponentProps<typeof SelectPrimitive.Value>) { 22 - return <SelectPrimitive.Value data-slot="select-value" {...props} /> 22 + function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) { 23 + return ( 24 + <SelectPrimitive.Value 25 + data-slot="select-value" 26 + className={cn("flex flex-1 text-left", className)} 27 + {...props} 28 + /> 29 + ) 23 30 } 24 31 25 32 function SelectTrigger({ ··· 27 34 size = "default", 28 35 children, 29 36 ...props 30 - }: React.ComponentProps<typeof SelectPrimitive.Trigger> & { 37 + }: SelectPrimitive.Trigger.Props & { 31 38 size?: "sm" | "default" 32 39 }) { 33 40 return ( ··· 35 42 data-slot="select-trigger" 36 43 data-size={size} 37 44 className={cn( 38 - "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground 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:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 45 + "flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 39 46 className 40 47 )} 41 48 {...props} 42 49 > 43 50 {children} 44 - <SelectPrimitive.Icon asChild> 45 - <ChevronDownIcon className="size-4 opacity-50" /> 46 - </SelectPrimitive.Icon> 51 + <SelectPrimitive.Icon 52 + render={ 53 + <HugeiconsIcon icon={UnfoldMoreIcon} strokeWidth={2} className="pointer-events-none size-4 text-muted-foreground" /> 54 + } 55 + /> 47 56 </SelectPrimitive.Trigger> 48 57 ) 49 58 } ··· 51 60 function SelectContent({ 52 61 className, 53 62 children, 54 - position = "popper", 55 63 side = "bottom", 56 64 sideOffset = 4, 57 65 align = "center", 66 + alignOffset = 0, 67 + alignItemWithTrigger = true, 58 68 ...props 59 - }: React.ComponentProps<typeof SelectPrimitive.Content>) { 69 + }: SelectPrimitive.Popup.Props & 70 + Pick< 71 + SelectPrimitive.Positioner.Props, 72 + "align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger" 73 + >) { 60 74 return ( 61 75 <SelectPrimitive.Portal> 62 - <SelectPrimitive.Content 63 - data-slot="select-content" 64 - className={cn( 65 - "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md", 66 - position === "popper" && 67 - "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", 68 - className 69 - )} 70 - position={position} 76 + <SelectPrimitive.Positioner 71 77 side={side} 72 78 sideOffset={sideOffset} 73 - avoidCollisions={false} 74 79 align={align} 75 - {...props} 80 + alignOffset={alignOffset} 81 + alignItemWithTrigger={alignItemWithTrigger} 82 + className="isolate z-50" 76 83 > 77 - <SelectScrollUpButton /> 78 - <SelectPrimitive.Viewport 79 - className={cn( 80 - "p-1", 81 - position === "popper" && 82 - "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1" 83 - )} 84 + <SelectPrimitive.Popup 85 + data-slot="select-content" 86 + data-align-trigger={alignItemWithTrigger} 87 + className={cn("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className )} 88 + {...props} 84 89 > 85 - {children} 86 - </SelectPrimitive.Viewport> 87 - <SelectScrollDownButton /> 88 - </SelectPrimitive.Content> 90 + <SelectScrollUpButton /> 91 + <SelectPrimitive.List>{children}</SelectPrimitive.List> 92 + <SelectScrollDownButton /> 93 + </SelectPrimitive.Popup> 94 + </SelectPrimitive.Positioner> 89 95 </SelectPrimitive.Portal> 90 96 ) 91 97 } ··· 93 99 function SelectLabel({ 94 100 className, 95 101 ...props 96 - }: React.ComponentProps<typeof SelectPrimitive.Label>) { 102 + }: SelectPrimitive.GroupLabel.Props) { 97 103 return ( 98 - <SelectPrimitive.Label 104 + <SelectPrimitive.GroupLabel 99 105 data-slot="select-label" 100 - className={cn("text-muted-foreground px-2 py-1.5 text-xs", className)} 106 + className={cn("px-2 py-1.5 text-xs text-muted-foreground", className)} 101 107 {...props} 102 108 /> 103 109 ) ··· 107 113 className, 108 114 children, 109 115 ...props 110 - }: React.ComponentProps<typeof SelectPrimitive.Item>) { 116 + }: SelectPrimitive.Item.Props) { 111 117 return ( 112 118 <SelectPrimitive.Item 113 119 data-slot="select-item" 114 120 className={cn( 115 - "focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", 121 + "relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", 116 122 className 117 123 )} 118 124 {...props} 119 125 > 120 - <span 121 - data-slot="select-item-indicator" 122 - className="absolute right-2 flex size-3.5 items-center justify-center" 126 + <SelectPrimitive.ItemText className="flex flex-1 shrink-0 gap-2 whitespace-nowrap"> 127 + {children} 128 + </SelectPrimitive.ItemText> 129 + <SelectPrimitive.ItemIndicator 130 + render={ 131 + <span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" /> 132 + } 123 133 > 124 - <SelectPrimitive.ItemIndicator> 125 - <CheckIcon className="size-4" /> 126 - </SelectPrimitive.ItemIndicator> 127 - </span> 128 - <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText> 134 + <HugeiconsIcon icon={Tick02Icon} strokeWidth={2} className="pointer-events-none" /> 135 + </SelectPrimitive.ItemIndicator> 129 136 </SelectPrimitive.Item> 130 137 ) 131 138 } ··· 133 140 function SelectSeparator({ 134 141 className, 135 142 ...props 136 - }: React.ComponentProps<typeof SelectPrimitive.Separator>) { 143 + }: SelectPrimitive.Separator.Props) { 137 144 return ( 138 145 <SelectPrimitive.Separator 139 146 data-slot="select-separator" 140 - className={cn("bg-border pointer-events-none -mx-1 my-1 h-px", className)} 147 + className={cn("pointer-events-none -mx-1 my-1 h-px bg-border", className)} 141 148 {...props} 142 149 /> 143 150 ) ··· 146 153 function SelectScrollUpButton({ 147 154 className, 148 155 ...props 149 - }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) { 156 + }: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) { 150 157 return ( 151 - <SelectPrimitive.ScrollUpButton 158 + <SelectPrimitive.ScrollUpArrow 152 159 data-slot="select-scroll-up-button" 153 160 className={cn( 154 - "flex cursor-default items-center justify-center py-1", 161 + "top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", 155 162 className 156 163 )} 157 164 {...props} 158 165 > 159 - <ChevronUpIcon className="size-4" /> 160 - </SelectPrimitive.ScrollUpButton> 166 + <HugeiconsIcon icon={ArrowUp01Icon} strokeWidth={2} /> 167 + </SelectPrimitive.ScrollUpArrow> 161 168 ) 162 169 } 163 170 164 171 function SelectScrollDownButton({ 165 172 className, 166 173 ...props 167 - }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) { 174 + }: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) { 168 175 return ( 169 - <SelectPrimitive.ScrollDownButton 176 + <SelectPrimitive.ScrollDownArrow 170 177 data-slot="select-scroll-down-button" 171 178 className={cn( 172 - "flex cursor-default items-center justify-center py-1", 179 + "bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", 173 180 className 174 181 )} 175 182 {...props} 176 183 > 177 - <ChevronDownIcon className="size-4" /> 178 - </SelectPrimitive.ScrollDownButton> 184 + <HugeiconsIcon icon={ArrowDown01Icon} strokeWidth={2} /> 185 + </SelectPrimitive.ScrollDownArrow> 179 186 ) 180 187 } 181 188
+5 -8
resources/js/components/ui/separator.tsx
··· 1 - import * as SeparatorPrimitive from "@radix-ui/react-separator" 2 - import * as React from "react" 1 + import { Separator as SeparatorPrimitive } from "@base-ui/react/separator" 3 2 4 3 import { cn } from "@/lib/utils" 5 4 6 5 function Separator({ 7 6 className, 8 7 orientation = "horizontal", 9 - decorative = true, 10 8 ...props 11 - }: React.ComponentProps<typeof SeparatorPrimitive.Root>) { 9 + }: SeparatorPrimitive.Props) { 12 10 return ( 13 - <SeparatorPrimitive.Root 14 - data-slot="separator-root" 15 - decorative={decorative} 11 + <SeparatorPrimitive 12 + data-slot="separator" 16 13 orientation={orientation} 17 14 className={cn( 18 - "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px", 15 + "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch", 19 16 className 20 17 )} 21 18 {...props}
+39 -41
resources/js/components/ui/sheet.tsx
··· 1 - import * as SheetPrimitive from "@radix-ui/react-dialog" 2 - import { XIcon } from "lucide-react" 1 + "use client" 2 + 3 3 import * as React from "react" 4 + import { Dialog as SheetPrimitive } from "@base-ui/react/dialog" 4 5 5 6 import { cn } from "@/lib/utils" 7 + import { Button } from "@/components/ui/button" 8 + import { HugeiconsIcon } from "@hugeicons/react" 9 + import { Cancel01Icon } from "@hugeicons/core-free-icons" 6 10 7 - function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) { 11 + function Sheet({ ...props }: SheetPrimitive.Root.Props) { 8 12 return <SheetPrimitive.Root data-slot="sheet" {...props} /> 9 13 } 10 14 11 - function SheetTrigger({ 12 - ...props 13 - }: React.ComponentProps<typeof SheetPrimitive.Trigger>) { 15 + function SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props) { 14 16 return <SheetPrimitive.Trigger data-slot="sheet-trigger" {...props} /> 15 17 } 16 18 17 - function SheetClose({ 18 - ...props 19 - }: React.ComponentProps<typeof SheetPrimitive.Close>) { 19 + function SheetClose({ ...props }: SheetPrimitive.Close.Props) { 20 20 return <SheetPrimitive.Close data-slot="sheet-close" {...props} /> 21 21 } 22 22 23 - function SheetPortal({ 24 - ...props 25 - }: React.ComponentProps<typeof SheetPrimitive.Portal>) { 23 + function SheetPortal({ ...props }: SheetPrimitive.Portal.Props) { 26 24 return <SheetPrimitive.Portal data-slot="sheet-portal" {...props} /> 27 25 } 28 26 29 - function SheetOverlay({ 30 - className, 31 - ...props 32 - }: React.ComponentProps<typeof SheetPrimitive.Overlay>) { 27 + function SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) { 33 28 return ( 34 - <SheetPrimitive.Overlay 29 + <SheetPrimitive.Backdrop 35 30 data-slot="sheet-overlay" 36 31 className={cn( 37 - "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80", 32 + "fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs", 38 33 className 39 34 )} 40 35 {...props} ··· 46 41 className, 47 42 children, 48 43 side = "right", 44 + showCloseButton = true, 49 45 ...props 50 - }: React.ComponentProps<typeof SheetPrimitive.Content> & { 46 + }: SheetPrimitive.Popup.Props & { 51 47 side?: "top" | "right" | "bottom" | "left" 48 + showCloseButton?: boolean 52 49 }) { 53 50 return ( 54 51 <SheetPortal> 55 52 <SheetOverlay /> 56 - <SheetPrimitive.Content 53 + <SheetPrimitive.Popup 57 54 data-slot="sheet-content" 55 + data-side={side} 58 56 className={cn( 59 - "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500", 60 - side === "right" && 61 - "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm", 62 - side === "left" && 63 - "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm", 64 - side === "top" && 65 - "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b", 66 - side === "bottom" && 67 - "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t", 57 + "fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", 68 58 className 69 59 )} 70 60 {...props} 71 61 > 72 62 {children} 73 - <SheetPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none"> 74 - <XIcon className="size-4" /> 75 - <span className="sr-only">Close</span> 76 - </SheetPrimitive.Close> 77 - </SheetPrimitive.Content> 63 + {showCloseButton && ( 64 + <SheetPrimitive.Close 65 + data-slot="sheet-close" 66 + render={ 67 + <Button 68 + variant="ghost" 69 + className="absolute top-4 right-4" 70 + size="icon-sm" 71 + /> 72 + } 73 + > 74 + <HugeiconsIcon icon={Cancel01Icon} strokeWidth={2} /> 75 + <span className="sr-only">Close</span> 76 + </SheetPrimitive.Close> 77 + )} 78 + </SheetPrimitive.Popup> 78 79 </SheetPortal> 79 80 ) 80 81 } ··· 99 100 ) 100 101 } 101 102 102 - function SheetTitle({ 103 - className, 104 - ...props 105 - }: React.ComponentProps<typeof SheetPrimitive.Title>) { 103 + function SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) { 106 104 return ( 107 105 <SheetPrimitive.Title 108 106 data-slot="sheet-title" 109 - className={cn("text-foreground font-semibold", className)} 107 + className={cn("font-heading font-medium text-foreground", className)} 110 108 {...props} 111 109 /> 112 110 ) ··· 115 113 function SheetDescription({ 116 114 className, 117 115 ...props 118 - }: React.ComponentProps<typeof SheetPrimitive.Description>) { 116 + }: SheetPrimitive.Description.Props) { 119 117 return ( 120 118 <SheetPrimitive.Description 121 119 data-slot="sheet-description" 122 - className={cn("text-muted-foreground text-sm", className)} 120 + className={cn("text-sm text-muted-foreground", className)} 123 121 {...props} 124 122 /> 125 123 )
+165 -160
resources/js/components/ui/sidebar.tsx
··· 1 - import { Slot } from "@radix-ui/react-slot" 2 - import type { VariantProps} from "class-variance-authority"; 3 - import { cva } from "class-variance-authority" 4 - import { PanelLeftCloseIcon, PanelLeftOpenIcon } from "lucide-react" 1 + "use client" 2 + 5 3 import * as React from "react" 4 + import { mergeProps } from "@base-ui/react/merge-props" 5 + import { useRender } from "@base-ui/react/use-render" 6 + import { cva, type VariantProps } from "class-variance-authority" 6 7 8 + import { useIsMobile } from "@/hooks/use-mobile" 9 + import { cn } from "@/lib/utils" 7 10 import { Button } from "@/components/ui/button" 8 11 import { Input } from "@/components/ui/input" 9 12 import { Separator } from "@/components/ui/separator" ··· 20 23 TooltipContent, 21 24 TooltipTrigger, 22 25 } from "@/components/ui/tooltip" 23 - import { useIsMobile } from "@/hooks/use-mobile" 24 - import { cn } from "@/lib/utils" 26 + import { HugeiconsIcon } from "@hugeicons/react" 27 + import { SidebarLeftIcon } from "@hugeicons/core-free-icons" 25 28 26 29 const SIDEBAR_COOKIE_NAME = "sidebar_state" 27 30 const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 ··· 30 33 const SIDEBAR_WIDTH_ICON = "3rem" 31 34 const SIDEBAR_KEYBOARD_SHORTCUT = "b" 32 35 33 - type SidebarContext = { 36 + type SidebarContextProps = { 34 37 state: "expanded" | "collapsed" 35 38 open: boolean 36 39 setOpen: (open: boolean) => void ··· 40 43 toggleSidebar: () => void 41 44 } 42 45 43 - const SidebarContext = React.createContext<SidebarContext | null>(null) 46 + const SidebarContext = React.createContext<SidebarContextProps | null>(null) 44 47 45 48 function useSidebar() { 46 49 const context = React.useContext(SidebarContext) ··· 111 114 // This makes it easier to style the sidebar with Tailwind classes. 112 115 const state = open ? "expanded" : "collapsed" 113 116 114 - const contextValue = React.useMemo<SidebarContext>( 117 + const contextValue = React.useMemo<SidebarContextProps>( 115 118 () => ({ 116 119 state, 117 120 open, ··· 136 139 } as React.CSSProperties 137 140 } 138 141 className={cn( 139 - "group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full", 142 + "group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar", 140 143 className 141 144 )} 142 145 {...props} ··· 153 156 collapsible = "offcanvas", 154 157 className, 155 158 children, 159 + dir, 156 160 ...props 157 161 }: React.ComponentProps<"div"> & { 158 162 side?: "left" | "right" ··· 166 170 <div 167 171 data-slot="sidebar" 168 172 className={cn( 169 - "bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col", 173 + "flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground", 170 174 className 171 175 )} 172 176 {...props} ··· 179 183 if (isMobile) { 180 184 return ( 181 185 <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}> 182 - <SheetHeader className="sr-only"> 183 - <SheetTitle>Sidebar</SheetTitle> 184 - <SheetDescription>Displays the mobile sidebar.</SheetDescription> 185 - </SheetHeader> 186 186 <SheetContent 187 + dir={dir} 187 188 data-sidebar="sidebar" 188 189 data-slot="sidebar" 189 190 data-mobile="true" 190 - className="bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden" 191 + className="w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden" 191 192 style={ 192 193 { 193 194 "--sidebar-width": SIDEBAR_WIDTH_MOBILE, ··· 195 196 } 196 197 side={side} 197 198 > 199 + <SheetHeader className="sr-only"> 200 + <SheetTitle>Sidebar</SheetTitle> 201 + <SheetDescription>Displays the mobile sidebar.</SheetDescription> 202 + </SheetHeader> 198 203 <div className="flex h-full w-full flex-col">{children}</div> 199 204 </SheetContent> 200 205 </Sheet> ··· 203 208 204 209 return ( 205 210 <div 206 - className="group peer text-sidebar-foreground hidden md:block" 211 + className="group peer hidden text-sidebar-foreground md:block" 207 212 data-state={state} 208 213 data-collapsible={state === "collapsed" ? collapsible : ""} 209 214 data-variant={variant} ··· 212 217 > 213 218 {/* This is what handles the sidebar gap on desktop */} 214 219 <div 220 + data-slot="sidebar-gap" 215 221 className={cn( 216 - "relative h-svh w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear", 222 + "relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear", 217 223 "group-data-[collapsible=offcanvas]:w-0", 218 224 "group-data-[side=right]:rotate-180", 219 225 variant === "floating" || variant === "inset" ··· 222 228 )} 223 229 /> 224 230 <div 231 + data-slot="sidebar-container" 232 + data-side={side} 225 233 className={cn( 226 - "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex", 227 - side === "left" 228 - ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" 229 - : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]", 234 + "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex", 230 235 // Adjust the padding for floating and inset variants. 231 236 variant === "floating" || variant === "inset" 232 237 ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" ··· 237 242 > 238 243 <div 239 244 data-sidebar="sidebar" 240 - className="bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm" 245 + data-slot="sidebar-inner" 246 + className="flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border" 241 247 > 242 248 {children} 243 249 </div> ··· 251 257 onClick, 252 258 ...props 253 259 }: React.ComponentProps<typeof Button>) { 254 - const { toggleSidebar, isMobile, state } = useSidebar() 260 + const { toggleSidebar } = useSidebar() 255 261 256 262 return ( 257 263 <Button 258 264 data-sidebar="trigger" 259 265 data-slot="sidebar-trigger" 260 266 variant="ghost" 261 - size="icon" 262 - className={cn("h-7 w-7", className)} 267 + size="icon-sm" 268 + className={cn(className)} 263 269 onClick={(event) => { 264 270 onClick?.(event) 265 271 toggleSidebar() 266 272 }} 267 273 {...props} 268 274 > 269 - {isMobile || state === "collapsed" ? <PanelLeftOpenIcon /> : <PanelLeftCloseIcon />} 270 - <span className="sr-only">Toggle sidebar</span> 275 + <HugeiconsIcon icon={SidebarLeftIcon} strokeWidth={2} /> 276 + <span className="sr-only">Toggle Sidebar</span> 271 277 </Button> 272 278 ) 273 279 } ··· 279 285 <button 280 286 data-sidebar="rail" 281 287 data-slot="sidebar-rail" 282 - aria-label="Toggle sidebar" 288 + aria-label="Toggle Sidebar" 283 289 tabIndex={-1} 284 290 onClick={toggleSidebar} 285 - title="Toggle sidebar" 291 + title="Toggle Sidebar" 286 292 className={cn( 287 - "hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex", 293 + "absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2", 288 294 "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize", 289 295 "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize", 290 - "hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full", 296 + "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar", 291 297 "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2", 292 298 "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2", 293 299 className ··· 302 308 <main 303 309 data-slot="sidebar-inset" 304 310 className={cn( 305 - "bg-background relative flex max-w-full min-h-svh flex-1 flex-col", 306 - "peer-data-[variant=inset]:min-h-[calc(100svh-(--spacing(4)))] md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-0", 311 + "relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2", 307 312 className 308 313 )} 309 314 {...props} ··· 319 324 <Input 320 325 data-slot="sidebar-input" 321 326 data-sidebar="input" 322 - className={cn("bg-background h-8 w-full shadow-none", className)} 327 + className={cn("h-8 w-full bg-background shadow-none", className)} 323 328 {...props} 324 329 /> 325 330 ) ··· 355 360 <Separator 356 361 data-slot="sidebar-separator" 357 362 data-sidebar="separator" 358 - className={cn("bg-sidebar-border mx-2 w-auto", className)} 363 + className={cn("mx-2 w-auto bg-sidebar-border", className)} 359 364 {...props} 360 365 /> 361 366 ) ··· 367 372 data-slot="sidebar-content" 368 373 data-sidebar="content" 369 374 className={cn( 370 - "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", 375 + "no-scrollbar flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", 371 376 className 372 377 )} 373 378 {...props} ··· 388 393 389 394 function SidebarGroupLabel({ 390 395 className, 391 - asChild = false, 396 + render, 392 397 ...props 393 - }: React.ComponentProps<"div"> & { asChild?: boolean }) { 394 - const Comp = asChild ? Slot : "div" 395 - 396 - return ( 397 - <Comp 398 - data-slot="sidebar-group-label" 399 - data-sidebar="group-label" 400 - className={cn( 401 - "text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", 402 - "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 group-data-[collapsible=icon]:select-none group-data-[collapsible=icon]:pointer-events-none", 403 - className 404 - )} 405 - {...props} 406 - /> 407 - ) 398 + }: useRender.ComponentProps<"div"> & React.ComponentProps<"div">) { 399 + return useRender({ 400 + defaultTagName: "div", 401 + props: mergeProps<"div">( 402 + { 403 + className: cn( 404 + "flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", 405 + className 406 + ), 407 + }, 408 + props 409 + ), 410 + render, 411 + state: { 412 + slot: "sidebar-group-label", 413 + sidebar: "group-label", 414 + }, 415 + }) 408 416 } 409 417 410 418 function SidebarGroupAction({ 411 419 className, 412 - asChild = false, 420 + render, 413 421 ...props 414 - }: React.ComponentProps<"button"> & { asChild?: boolean }) { 415 - const Comp = asChild ? Slot : "button" 416 - 417 - return ( 418 - <Comp 419 - data-slot="sidebar-group-action" 420 - data-sidebar="group-action" 421 - className={cn( 422 - "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", 423 - // Increases the hit area of the button on mobile. 424 - "after:absolute after:-inset-2 md:after:hidden", 425 - "group-data-[collapsible=icon]:hidden", 426 - className 427 - )} 428 - {...props} 429 - /> 430 - ) 422 + }: useRender.ComponentProps<"button"> & React.ComponentProps<"button">) { 423 + return useRender({ 424 + defaultTagName: "button", 425 + props: mergeProps<"button">( 426 + { 427 + className: cn( 428 + "absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", 429 + className 430 + ), 431 + }, 432 + props 433 + ), 434 + render, 435 + state: { 436 + slot: "sidebar-group-action", 437 + sidebar: "group-action", 438 + }, 439 + }) 431 440 } 432 441 433 442 function SidebarGroupContent({ ··· 467 476 } 468 477 469 478 const sidebarMenuButtonVariants = cva( 470 - "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0", 479 + "peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate", 471 480 { 472 481 variants: { 473 482 variant: { ··· 489 498 ) 490 499 491 500 function SidebarMenuButton({ 492 - asChild = false, 501 + render, 493 502 isActive = false, 494 503 variant = "default", 495 504 size = "default", 496 505 tooltip, 497 506 className, 498 507 ...props 499 - }: React.ComponentProps<"button"> & { 500 - asChild?: boolean 501 - isActive?: boolean 502 - tooltip?: string | React.ComponentProps<typeof TooltipContent> 503 - } & VariantProps<typeof sidebarMenuButtonVariants>) { 504 - const Comp = asChild ? Slot : "button" 508 + }: useRender.ComponentProps<"button"> & 509 + React.ComponentProps<"button"> & { 510 + isActive?: boolean 511 + tooltip?: string | React.ComponentProps<typeof TooltipContent> 512 + } & VariantProps<typeof sidebarMenuButtonVariants>) { 505 513 const { isMobile, state } = useSidebar() 506 - 507 - const button = ( 508 - <Comp 509 - data-slot="sidebar-menu-button" 510 - data-sidebar="menu-button" 511 - data-size={size} 512 - data-active={isActive} 513 - className={cn(sidebarMenuButtonVariants({ variant, size }), className)} 514 - {...props} 515 - /> 516 - ) 514 + const comp = useRender({ 515 + defaultTagName: "button", 516 + props: mergeProps<"button">( 517 + { 518 + className: cn(sidebarMenuButtonVariants({ variant, size }), className), 519 + }, 520 + props 521 + ), 522 + render: !tooltip ? render : <TooltipTrigger render={render} />, 523 + state: { 524 + slot: "sidebar-menu-button", 525 + sidebar: "menu-button", 526 + size, 527 + active: isActive, 528 + }, 529 + }) 517 530 518 531 if (!tooltip) { 519 - return button 532 + return comp 520 533 } 521 534 522 535 if (typeof tooltip === "string") { ··· 527 540 528 541 return ( 529 542 <Tooltip> 530 - <TooltipTrigger asChild>{button}</TooltipTrigger> 543 + {comp} 531 544 <TooltipContent 532 545 side="right" 533 546 align="center" ··· 540 553 541 554 function SidebarMenuAction({ 542 555 className, 543 - asChild = false, 556 + render, 544 557 showOnHover = false, 545 558 ...props 546 - }: React.ComponentProps<"button"> & { 547 - asChild?: boolean 548 - showOnHover?: boolean 549 - }) { 550 - const Comp = asChild ? Slot : "button" 551 - 552 - return ( 553 - <Comp 554 - data-slot="sidebar-menu-action" 555 - data-sidebar="menu-action" 556 - className={cn( 557 - "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", 558 - // Increases the hit area of the button on mobile. 559 - "after:absolute after:-inset-2 md:after:hidden", 560 - "peer-data-[size=sm]/menu-button:top-1", 561 - "peer-data-[size=default]/menu-button:top-1.5", 562 - "peer-data-[size=lg]/menu-button:top-2.5", 563 - "group-data-[collapsible=icon]:hidden", 564 - showOnHover && 565 - "peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0", 566 - className 567 - )} 568 - {...props} 569 - /> 570 - ) 559 + }: useRender.ComponentProps<"button"> & 560 + React.ComponentProps<"button"> & { 561 + showOnHover?: boolean 562 + }) { 563 + return useRender({ 564 + defaultTagName: "button", 565 + props: mergeProps<"button">( 566 + { 567 + className: cn( 568 + "absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", 569 + showOnHover && 570 + "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-active/menu-button:text-sidebar-accent-foreground aria-expanded:opacity-100 md:opacity-0", 571 + className 572 + ), 573 + }, 574 + props 575 + ), 576 + render, 577 + state: { 578 + slot: "sidebar-menu-action", 579 + sidebar: "menu-action", 580 + }, 581 + }) 571 582 } 572 583 573 584 function SidebarMenuBadge({ ··· 579 590 data-slot="sidebar-menu-badge" 580 591 data-sidebar="menu-badge" 581 592 className={cn( 582 - "text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none", 583 - "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground", 584 - "peer-data-[size=sm]/menu-button:top-1", 585 - "peer-data-[size=default]/menu-button:top-1.5", 586 - "peer-data-[size=lg]/menu-button:top-2.5", 587 - "group-data-[collapsible=icon]:hidden", 593 + "pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground", 588 594 className 589 595 )} 590 596 {...props} ··· 599 605 }: React.ComponentProps<"div"> & { 600 606 showIcon?: boolean 601 607 }) { 602 - 603 - // wrapping in useState to ensure the width is stable across renders 604 - // also ensures we have a stable reference to the style object 605 - const [skeletonStyle] = React.useState(() => ( 606 - { 607 - "--skeleton-width": `${Math.floor(Math.random() * 40) + 50}%` // Random width between 50 to 90%. 608 - } as React.CSSProperties 609 - )) 608 + // Random width between 50 to 90%. 609 + const [width] = React.useState(() => { 610 + return `${Math.floor(Math.random() * 40) + 50}%` 611 + }) 610 612 611 613 return ( 612 614 <div ··· 624 626 <Skeleton 625 627 className="h-4 max-w-(--skeleton-width) flex-1" 626 628 data-sidebar="menu-skeleton-text" 627 - style={skeletonStyle} 629 + style={ 630 + { 631 + "--skeleton-width": width, 632 + } as React.CSSProperties 633 + } 628 634 /> 629 635 </div> 630 636 ) ··· 636 642 data-slot="sidebar-menu-sub" 637 643 data-sidebar="menu-sub" 638 644 className={cn( 639 - "border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5", 640 - "group-data-[collapsible=icon]:hidden", 645 + "mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden", 641 646 className 642 647 )} 643 648 {...props} ··· 660 665 } 661 666 662 667 function SidebarMenuSubButton({ 663 - asChild = false, 668 + render, 664 669 size = "md", 665 670 isActive = false, 666 671 className, 667 672 ...props 668 - }: React.ComponentProps<"a"> & { 669 - asChild?: boolean 670 - size?: "sm" | "md" 671 - isActive?: boolean 672 - }) { 673 - const Comp = asChild ? Slot : "a" 674 - 675 - return ( 676 - <Comp 677 - data-slot="sidebar-menu-sub-button" 678 - data-sidebar="menu-sub-button" 679 - data-size={size} 680 - data-active={isActive} 681 - className={cn( 682 - "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0", 683 - "data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground", 684 - size === "sm" && "text-xs", 685 - size === "md" && "text-sm", 686 - "group-data-[collapsible=icon]:hidden", 687 - className 688 - )} 689 - {...props} 690 - /> 691 - ) 673 + }: useRender.ComponentProps<"a"> & 674 + React.ComponentProps<"a"> & { 675 + size?: "sm" | "md" 676 + isActive?: boolean 677 + }) { 678 + return useRender({ 679 + defaultTagName: "a", 680 + props: mergeProps<"a">( 681 + { 682 + className: cn( 683 + "flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden group-data-[collapsible=icon]:hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground", 684 + className 685 + ), 686 + }, 687 + props 688 + ), 689 + render, 690 + state: { 691 + slot: "sidebar-menu-sub-button", 692 + sidebar: "menu-sub-button", 693 + size, 694 + active: isActive, 695 + }, 696 + }) 692 697 } 693 698 694 699 export {
+1 -1
resources/js/components/ui/skeleton.tsx
··· 4 4 return ( 5 5 <div 6 6 data-slot="skeleton" 7 - className={cn("bg-primary/10 animate-pulse rounded-md", className)} 7 + className={cn("animate-pulse rounded-md bg-muted", className)} 8 8 {...props} 9 9 /> 10 10 )
+45 -22
resources/js/components/ui/sonner.tsx
··· 1 - import { useFlashToast } from '@/hooks/use-flash-toast'; 2 - import { useAppearance } from '@/hooks/use-appearance'; 3 - import { Toaster as Sonner, type ToasterProps } from 'sonner'; 1 + "use client" 4 2 5 - function Toaster({ ...props }: ToasterProps) { 6 - const { appearance } = useAppearance(); 3 + import { useTheme } from "next-themes" 4 + import { Toaster as Sonner, type ToasterProps } from "sonner" 5 + import { HugeiconsIcon } from "@hugeicons/react" 6 + import { CheckmarkCircle02Icon, InformationCircleIcon, Alert02Icon, MultiplicationSignCircleIcon, Loading03Icon } from "@hugeicons/core-free-icons" 7 7 8 - useFlashToast(); 8 + const Toaster = ({ ...props }: ToasterProps) => { 9 + const { theme = "system" } = useTheme() 9 10 10 - return ( 11 - <Sonner 12 - theme={appearance} 13 - className="toaster group" 14 - position="bottom-right" 15 - style={ 16 - { 17 - '--normal-bg': 'var(--popover)', 18 - '--normal-text': 'var(--popover-foreground)', 19 - '--normal-border': 'var(--border)', 20 - } as React.CSSProperties 21 - } 22 - {...props} 23 - /> 24 - ); 11 + return ( 12 + <Sonner 13 + theme={theme as ToasterProps["theme"]} 14 + className="toaster group" 15 + icons={{ 16 + success: ( 17 + <HugeiconsIcon icon={CheckmarkCircle02Icon} strokeWidth={2} className="size-4" /> 18 + ), 19 + info: ( 20 + <HugeiconsIcon icon={InformationCircleIcon} strokeWidth={2} className="size-4" /> 21 + ), 22 + warning: ( 23 + <HugeiconsIcon icon={Alert02Icon} strokeWidth={2} className="size-4" /> 24 + ), 25 + error: ( 26 + <HugeiconsIcon icon={MultiplicationSignCircleIcon} strokeWidth={2} className="size-4" /> 27 + ), 28 + loading: ( 29 + <HugeiconsIcon icon={Loading03Icon} strokeWidth={2} className="size-4 animate-spin" /> 30 + ), 31 + }} 32 + style={ 33 + { 34 + "--normal-bg": "var(--popover)", 35 + "--normal-text": "var(--popover-foreground)", 36 + "--normal-border": "var(--border)", 37 + "--border-radius": "var(--radius)", 38 + } as React.CSSProperties 39 + } 40 + toastOptions={{ 41 + classNames: { 42 + toast: "cn-toast", 43 + }, 44 + }} 45 + {...props} 46 + /> 47 + ) 25 48 } 26 49 27 - export { Toaster }; 50 + export { Toaster }
+9 -4
resources/js/components/ui/spinner.tsx
··· 1 - import { Loader2Icon } from "lucide-react" 2 - 3 1 import { cn } from "@/lib/utils" 2 + import { HugeiconsIcon } from "@hugeicons/react" 3 + import { Loading03Icon } from "@hugeicons/core-free-icons" 4 4 5 - function Spinner({ className, ...props }: React.ComponentProps<"svg">) { 5 + function Spinner({ 6 + className, 7 + ...props 8 + }: Omit<React.ComponentProps<"svg">, "strokeWidth">) { 6 9 return ( 7 - <Loader2Icon 10 + <HugeiconsIcon 11 + icon={Loading03Icon} 12 + strokeWidth={2} 8 13 role="status" 9 14 aria-label="Loading" 10 15 className={cn("size-4 animate-spin", className)}
+18
resources/js/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 + "flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-2.5 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", 11 + className 12 + )} 13 + {...props} 14 + /> 15 + ) 16 + } 17 + 18 + export { Textarea }
+33 -17
resources/js/components/ui/toggle-group.tsx
··· 1 - import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group" 1 + import * as React from "react" 2 + import { Toggle as TogglePrimitive } from "@base-ui/react/toggle" 3 + import { ToggleGroup as ToggleGroupPrimitive } from "@base-ui/react/toggle-group" 2 4 import { type VariantProps } from "class-variance-authority" 3 - import * as React from "react" 4 5 6 + import { cn } from "@/lib/utils" 5 7 import { toggleVariants } from "@/components/ui/toggle" 6 - import { cn } from "@/lib/utils" 7 8 8 9 const ToggleGroupContext = React.createContext< 9 - VariantProps<typeof toggleVariants> 10 + VariantProps<typeof toggleVariants> & { 11 + spacing?: number 12 + orientation?: "horizontal" | "vertical" 13 + } 10 14 >({ 11 15 size: "default", 12 16 variant: "default", 17 + spacing: 0, 18 + orientation: "horizontal", 13 19 }) 14 20 15 21 function ToggleGroup({ 16 22 className, 17 23 variant, 18 24 size, 25 + spacing = 0, 26 + orientation = "horizontal", 19 27 children, 20 28 ...props 21 - }: React.ComponentProps<typeof ToggleGroupPrimitive.Root> & 22 - VariantProps<typeof toggleVariants>) { 29 + }: ToggleGroupPrimitive.Props & 30 + VariantProps<typeof toggleVariants> & { 31 + spacing?: number 32 + orientation?: "horizontal" | "vertical" 33 + }) { 23 34 return ( 24 - <ToggleGroupPrimitive.Root 35 + <ToggleGroupPrimitive 25 36 data-slot="toggle-group" 26 37 data-variant={variant} 27 38 data-size={size} 39 + data-spacing={spacing} 40 + data-orientation={orientation} 41 + style={{ "--gap": spacing } as React.CSSProperties} 28 42 className={cn( 29 - "group/toggle-group flex items-center rounded-md data-[variant=outline]:shadow-xs", 43 + "group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=0]:data-[variant=outline]:shadow-xs data-vertical:flex-col data-vertical:items-stretch", 30 44 className 31 45 )} 32 46 {...props} 33 47 > 34 - <ToggleGroupContext.Provider value={{ variant, size }}> 48 + <ToggleGroupContext.Provider 49 + value={{ variant, size, spacing, orientation }} 50 + > 35 51 {children} 36 52 </ToggleGroupContext.Provider> 37 - </ToggleGroupPrimitive.Root> 53 + </ToggleGroupPrimitive> 38 54 ) 39 55 } 40 56 41 57 function ToggleGroupItem({ 42 58 className, 43 59 children, 44 - variant, 45 - size, 60 + variant = "default", 61 + size = "default", 46 62 ...props 47 - }: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & 48 - VariantProps<typeof toggleVariants>) { 63 + }: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) { 49 64 const context = React.useContext(ToggleGroupContext) 50 65 51 66 return ( 52 - <ToggleGroupPrimitive.Item 67 + <TogglePrimitive 53 68 data-slot="toggle-group-item" 54 69 data-variant={context.variant || variant} 55 70 data-size={context.size || size} 71 + data-spacing={context.spacing} 56 72 className={cn( 73 + "shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-[spacing=0]/toggle-group:shadow-none focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md data-[state=on]:bg-muted group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t", 57 74 toggleVariants({ 58 75 variant: context.variant || variant, 59 76 size: context.size || size, 60 77 }), 61 - "min-w-0 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l", 62 78 className 63 79 )} 64 80 {...props} 65 81 > 66 82 {children} 67 - </ToggleGroupPrimitive.Item> 83 + </TogglePrimitive> 68 84 ) 69 85 } 70 86
+13 -13
resources/js/components/ui/toggle.tsx
··· 1 - import * as TogglePrimitive from "@radix-ui/react-toggle" 1 + "use client" 2 + 3 + import { Toggle as TogglePrimitive } from "@base-ui/react/toggle" 2 4 import { cva, type VariantProps } from "class-variance-authority" 3 - import * as React from "react" 4 5 5 6 import { cn } from "@/lib/utils" 6 7 7 8 const toggleVariants = cva( 8 - "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", 9 + "group/toggle inline-flex items-center justify-center gap-1 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 9 10 { 10 11 variants: { 11 12 variant: { 12 13 default: "bg-transparent", 13 - outline: 14 - "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground", 14 + outline: "border border-input bg-transparent shadow-xs hover:bg-muted", 15 15 }, 16 16 size: { 17 - default: "h-9 px-2 min-w-9", 18 - sm: "h-8 px-1.5 min-w-8", 19 - lg: "h-10 px-2.5 min-w-10", 17 + default: 18 + "h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", 19 + sm: "h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5", 20 + lg: "h-10 min-w-10 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", 20 21 }, 21 22 }, 22 23 defaultVariants: { ··· 28 29 29 30 function Toggle({ 30 31 className, 31 - variant, 32 - size, 32 + variant = "default", 33 + size = "default", 33 34 ...props 34 - }: React.ComponentProps<typeof TogglePrimitive.Root> & 35 - VariantProps<typeof toggleVariants>) { 35 + }: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) { 36 36 return ( 37 - <TogglePrimitive.Root 37 + <TogglePrimitive 38 38 data-slot="toggle" 39 39 className={cn(toggleVariants({ variant, size, className }))} 40 40 {...props}
+31 -22
resources/js/components/ui/tooltip.tsx
··· 1 - import * as TooltipPrimitive from "@radix-ui/react-tooltip" 2 - import * as React from "react" 1 + import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip" 3 2 4 3 import { cn } from "@/lib/utils" 5 4 6 5 function TooltipProvider({ 7 - delayDuration = 0, 6 + delay = 0, 8 7 ...props 9 - }: React.ComponentProps<typeof TooltipPrimitive.Provider>) { 8 + }: TooltipPrimitive.Provider.Props) { 10 9 return ( 11 10 <TooltipPrimitive.Provider 12 11 data-slot="tooltip-provider" 13 - delayDuration={delayDuration} 12 + delay={delay} 14 13 {...props} 15 14 /> 16 15 ) 17 16 } 18 17 19 - function Tooltip({ 20 - ...props 21 - }: React.ComponentProps<typeof TooltipPrimitive.Root>) { 18 + function Tooltip({ ...props }: TooltipPrimitive.Root.Props) { 22 19 return <TooltipPrimitive.Root data-slot="tooltip" {...props} /> 23 20 } 24 21 25 - function TooltipTrigger({ 26 - ...props 27 - }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) { 22 + function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) { 28 23 return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} /> 29 24 } 30 25 31 26 function TooltipContent({ 32 27 className, 28 + side = "top", 33 29 sideOffset = 4, 30 + align = "center", 31 + alignOffset = 0, 34 32 children, 35 33 ...props 36 - }: React.ComponentProps<typeof TooltipPrimitive.Content>) { 34 + }: TooltipPrimitive.Popup.Props & 35 + Pick< 36 + TooltipPrimitive.Positioner.Props, 37 + "align" | "alignOffset" | "side" | "sideOffset" 38 + >) { 37 39 return ( 38 40 <TooltipPrimitive.Portal> 39 - <TooltipPrimitive.Content 40 - data-slot="tooltip-content" 41 + <TooltipPrimitive.Positioner 42 + align={align} 43 + alignOffset={alignOffset} 44 + side={side} 41 45 sideOffset={sideOffset} 42 - className={cn( 43 - "bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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 z-50 max-w-sm rounded-md px-3 py-1.5 text-xs", 44 - className 45 - )} 46 - {...props} 46 + className="isolate z-50" 47 47 > 48 - {children} 49 - <TooltipPrimitive.Arrow className="bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" /> 50 - </TooltipPrimitive.Content> 48 + <TooltipPrimitive.Popup 49 + data-slot="tooltip-content" 50 + className={cn( 51 + "z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", 52 + className 53 + )} 54 + {...props} 55 + > 56 + {children} 57 + <TooltipPrimitive.Arrow className="z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" /> 58 + </TooltipPrimitive.Popup> 59 + </TooltipPrimitive.Positioner> 51 60 </TooltipPrimitive.Portal> 52 61 ) 53 62 }
+14 -15
resources/js/components/user-menu-content.tsx
··· 1 - import { Link, router } from '@inertiajs/react'; 2 - import { LogOut } from 'lucide-react'; 1 + import { Logout03Icon } from '@hugeicons/core-free-icons'; 2 + import { HugeiconsIcon } from '@hugeicons/react'; 3 + import { router } from '@inertiajs/react'; 3 4 import { 5 + DropdownMenuGroup, 4 6 DropdownMenuItem, 5 7 DropdownMenuLabel, 6 8 DropdownMenuSeparator, ··· 20 22 const handleLogout = () => { 21 23 cleanup(); 22 24 router.flushAll(); 25 + router.post(logout().url); 23 26 }; 24 27 25 28 return ( 26 - <> 29 + <DropdownMenuGroup> 27 30 <DropdownMenuLabel className="p-0 font-normal"> 28 31 <div className="flex items-center gap-2 px-1 py-1.5 text-left text-sm"> 29 32 <UserInfo handle={handle} did={did} showDid /> 30 33 </div> 31 34 </DropdownMenuLabel> 32 35 <DropdownMenuSeparator /> 33 - <DropdownMenuItem asChild> 34 - <Link 35 - className="block w-full cursor-pointer" 36 - href={logout()} 37 - as="button" 38 - onClick={handleLogout} 39 - data-test="logout-button" 40 - > 41 - <LogOut className="mr-2" /> 42 - Log out 43 - </Link> 36 + <DropdownMenuItem 37 + className="cursor-pointer" 38 + data-test="logout-button" 39 + onClick={handleLogout} 40 + > 41 + <HugeiconsIcon icon={Logout03Icon} /> 42 + Log out 44 43 </DropdownMenuItem> 45 - </> 44 + </DropdownMenuGroup> 46 45 ); 47 46 }
+25
resources/js/hooks/use-mobile.ts
··· 1 + import * as React from 'react'; 2 + 3 + const MOBILE_BREAKPOINT = 768; 4 + 5 + export function useIsMobile() { 6 + const [isMobile, setIsMobile] = React.useState<boolean>( 7 + () => 8 + typeof window !== 'undefined' && 9 + window.innerWidth < MOBILE_BREAKPOINT, 10 + ); 11 + 12 + React.useEffect(() => { 13 + const mql = window.matchMedia( 14 + `(max-width: ${MOBILE_BREAKPOINT - 1}px)`, 15 + ); 16 + const onChange = () => { 17 + setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); 18 + }; 19 + mql.addEventListener('change', onChange); 20 + 21 + return () => mql.removeEventListener('change', onChange); 22 + }, []); 23 + 24 + return isMobile; 25 + }
+9 -7
resources/js/layouts/settings/layout.tsx
··· 1 + import { HugeiconsIcon } from '@hugeicons/react'; 1 2 import { Link } from '@inertiajs/react'; 2 3 import type { PropsWithChildren } from 'react'; 3 4 import Heading from '@/components/heading'; ··· 37 38 key={`${toUrl(item.href)}-${index}`} 38 39 size="sm" 39 40 variant="ghost" 40 - asChild 41 + render={<Link href={item.href} />} 41 42 className={cn('w-full justify-start', { 42 43 'bg-muted': isCurrentOrParentUrl(item.href), 43 44 })} 44 45 > 45 - <Link href={item.href}> 46 - {item.icon && ( 47 - <item.icon className="h-4 w-4" /> 48 - )} 49 - {item.title} 50 - </Link> 46 + {item.icon && ( 47 + <HugeiconsIcon 48 + icon={item.icon} 49 + className="h-4 w-4" 50 + /> 51 + )} 52 + {item.title} 51 53 </Button> 52 54 ))} 53 55 </nav>
+9
resources/js/lib/level-context.tsx
··· 1 + import { createContext, useContext } from 'react'; 2 + 3 + export type SurfaceLevel = 0 | 1 | 2; 4 + 5 + export const LevelContext = createContext<SurfaceLevel>(1); 6 + 7 + export function useSurfaceLevel(): SurfaceLevel { 8 + return useContext(LevelContext); 9 + }
+2 -2
resources/js/types/navigation.ts
··· 1 + import type { IconSvgElement } from '@hugeicons/react'; 1 2 import type { InertiaLinkProps } from '@inertiajs/react'; 2 - import type { LucideIcon } from 'lucide-react'; 3 3 4 4 export type BreadcrumbItem = { 5 5 title: string; ··· 9 9 export type NavItem = { 10 10 title: string; 11 11 href: NonNullable<InertiaLinkProps['href']>; 12 - icon?: LucideIcon | null; 12 + icon?: IconSvgElement | null; 13 13 isActive?: boolean; 14 14 };