From 6e092c3290e473a3a2a2d32febe86d2bac76a709 Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Thu, 12 Dec 2024 07:16:08 -0500 Subject: [PATCH 01/92] Upgrading to Inertia 2 and Tailwind v4 --- app/Http/Middleware/HandleInertiaRequests.php | 42 + bootstrap/app.php | 7 +- composer.json | 6 +- composer.lock | 150 +- package-lock.json | 2506 +++++++++-------- package.json | 17 +- postcss.config.js | 3 +- resources/css/app.css | 4 +- resources/js/Pages/Welcome.vue | 376 +++ resources/js/app.js | 1 - resources/js/app.ts | 26 + resources/js/{bootstrap.js => bootstrap.ts} | 0 resources/views/app.blade.php | 21 + routes/web.php | 9 +- vite.config.js => vite.config.ts | 6 +- 15 files changed, 1924 insertions(+), 1250 deletions(-) create mode 100644 app/Http/Middleware/HandleInertiaRequests.php create mode 100644 resources/js/Pages/Welcome.vue delete mode 100644 resources/js/app.js create mode 100644 resources/js/app.ts rename resources/js/{bootstrap.js => bootstrap.ts} (100%) create mode 100644 resources/views/app.blade.php rename vite.config.js => vite.config.ts (67%) diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php new file mode 100644 index 00000000..81c999cc --- /dev/null +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -0,0 +1,42 @@ + + */ + public function share(Request $request): array + { + return array_merge(parent::share($request), [ + // + ]); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index 7b162dac..2520de51 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,8 +1,10 @@ withRouting( @@ -11,7 +13,10 @@ health: '/up', ) ->withMiddleware(function (Middleware $middleware) { - // + $middleware->web(append: [ + AddLinkHeadersForPreloadedAssets::class, + HandleInertiaRequests::class, + ]); }) ->withExceptions(function (Exceptions $exceptions) { // diff --git a/composer.json b/composer.json index 4c82f257..9f9c1ca4 100644 --- a/composer.json +++ b/composer.json @@ -10,8 +10,10 @@ "license": "MIT", "require": { "php": "^8.2", + "inertiajs/inertia-laravel": "2.x-dev", "laravel/framework": "^11.31", - "laravel/tinker": "^2.9" + "laravel/tinker": "^2.9", + "tightenco/ziggy": "^2.4" }, "require-dev": { "fakerphp/faker": "^1.23", @@ -72,4 +74,4 @@ }, "minimum-stability": "stable", "prefer-stable": true -} \ No newline at end of file +} diff --git a/composer.lock b/composer.lock index dc1a723c..fc52603c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0ad1f473193b3feb98972000beec0da4", + "content-hash": "743bdff735c2675fe58ab6dbc1424a0f", "packages": [ { "name": "brick/math", @@ -1054,6 +1054,80 @@ ], "time": "2023-12-03T19:50:20+00:00" }, + { + "name": "inertiajs/inertia-laravel", + "version": "2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/inertiajs/inertia-laravel.git", + "reference": "d5e1d51e0eb6c4b6756a8e0e598ade5cc29330bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/d5e1d51e0eb6c4b6756a8e0e598ade5cc29330bc", + "reference": "d5e1d51e0eb6c4b6756a8e0e598ade5cc29330bc", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel/framework": "^10.0|^11.0", + "php": "^8.1.0", + "symfony/console": "^6.2|^7.0" + }, + "require-dev": { + "laravel/pint": "^1.16", + "mockery/mockery": "^1.3.3", + "orchestra/testbench": "^8.0|^9.2", + "phpunit/phpunit": "^10.4|^11.0", + "roave/security-advisories": "dev-master" + }, + "suggest": { + "ext-pcntl": "Recommended when running the Inertia SSR server via the `inertia:start-ssr` artisan command." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Inertia\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "./helpers.php" + ], + "psr-4": { + "Inertia\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Reinink", + "email": "jonathan@reinink.ca", + "homepage": "https://reinink.ca" + } + ], + "description": "The Laravel adapter for Inertia.js.", + "keywords": [ + "inertia", + "laravel" + ], + "support": { + "issues": "https://github.com/inertiajs/inertia-laravel/issues", + "source": "https://github.com/inertiajs/inertia-laravel/tree/2.x" + }, + "funding": [ + { + "url": "https://github.com/reinink", + "type": "github" + } + ], + "time": "2024-12-05T14:41:09+00:00" + }, { "name": "laravel/framework", "version": "v11.35.0", @@ -5527,6 +5601,76 @@ ], "time": "2024-11-08T15:48:14+00:00" }, + { + "name": "tightenco/ziggy", + "version": "v2.4.1", + "source": { + "type": "git", + "url": "https://github.com/tighten/ziggy.git", + "reference": "8e002298678fd4d61155bb1d6e3837048235bff7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tighten/ziggy/zipball/8e002298678fd4d61155bb1d6e3837048235bff7", + "reference": "8e002298678fd4d61155bb1d6e3837048235bff7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel/framework": ">=9.0", + "php": ">=8.1" + }, + "require-dev": { + "laravel/folio": "^1.1", + "orchestra/testbench": "^7.0 || ^8.0 || ^9.0", + "pestphp/pest": "^2.26", + "pestphp/pest-plugin-laravel": "^2.4" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Tighten\\Ziggy\\ZiggyServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Tighten\\Ziggy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Coulbourne", + "email": "daniel@tighten.co" + }, + { + "name": "Jake Bathman", + "email": "jake@tighten.co" + }, + { + "name": "Jacob Baker-Kretzmar", + "email": "jacob@tighten.co" + } + ], + "description": "Use your Laravel named routes in JavaScript.", + "homepage": "https://github.com/tighten/ziggy", + "keywords": [ + "Ziggy", + "javascript", + "laravel", + "routes" + ], + "support": { + "issues": "https://github.com/tighten/ziggy/issues", + "source": "https://github.com/tighten/ziggy/tree/v2.4.1" + }, + "time": "2024-11-21T15:51:20+00:00" + }, { "name": "tijsverkoyen/css-to-inline-styles", "version": "v2.2.7", @@ -9009,7 +9153,9 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": { + "inertiajs/inertia-laravel": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/package-lock.json b/package-lock.json index e843b8cb..70d4a8a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,27 +4,73 @@ "requires": true, "packages": { "": { + "dependencies": { + "@tailwindcss/postcss": "^0.0.0-development.1", + "@tailwindcss/vite": "^4.0.0-beta.6" + }, "devDependencies": { + "@inertiajs/vue3": "^2.0.0-beta.3", + "@tailwindcss/forms": "^0.5.3", + "@vitejs/plugin-vue": "^5.2.1", "autoprefixer": "^10.4.20", "axios": "^1.7.4", "concurrently": "^9.0.1", "laravel-vite-plugin": "^1.0", - "postcss": "^8.4.47", - "tailwindcss": "^3.4.13", - "vite": "^6.0" + "tailwindcss": "^4.0.0-beta.6", + "typescript": "^5.5.3", + "vite": "^6.0", + "vue": "^3.4.0", + "vue-tsc": "^2.0.24" } }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@esbuild/aix-ppc64": { @@ -34,7 +80,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -51,7 +96,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -68,7 +112,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -85,7 +128,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -102,7 +144,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -119,7 +160,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -136,7 +176,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -153,7 +192,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -170,7 +208,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -187,7 +224,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -204,7 +240,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -221,7 +256,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -238,7 +272,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -255,7 +288,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -272,7 +304,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -289,7 +320,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -306,7 +336,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -323,7 +352,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -340,7 +368,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -357,7 +384,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -374,7 +400,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -391,7 +416,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -408,7 +432,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -425,7 +448,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -435,57 +457,31 @@ "node": ">=18" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@inertiajs/core": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.0.0-beta.3.tgz", + "integrity": "sha512-CjfOdDQ9ifxi0eCLxdPtcACcVBY5JgkH+zBoUQhvNUFOkylk7vDVr8KUOt8LG0XpwX4Hs6c6+sloNPlwFO+nDw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" + "axios": "^1.6.0", + "deepmerge": "^4.0.0", + "qs": "^6.9.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "node_modules/@inertiajs/vue3": { + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-2.0.0-beta.3.tgz", + "integrity": "sha512-yw9ooUWw9iGygQItUYfB8COo9ShRnj42Z9YX+8uN81h2h5peqXycNXo2vqq5Cmvi8Lx4DKdMtiCBOrugxQmGaQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@inertiajs/core": "2.0.0-beta.3", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "vue": "^3.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -495,66 +491,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.28.1", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz", @@ -562,7 +498,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -576,7 +511,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -590,7 +524,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -604,7 +537,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -618,7 +550,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -632,7 +563,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -646,7 +576,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -660,7 +589,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -674,7 +602,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -688,7 +615,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -702,7 +628,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -716,7 +641,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -730,7 +654,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -744,7 +667,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -758,7 +680,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -772,7 +693,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -786,7 +706,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -800,7 +719,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -814,175 +732,595 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/@tailwindcss/forms": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.9.tgz", + "integrity": "sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "mini-svg-data-uri": "^1.2.3" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@tailwindcss/node": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.0-beta.6.tgz", + "integrity": "sha512-W07J19+05rRFKfk4sVtkNTb4iuGTI3BU6Ip/iEbb/w5NvaP+fSFK31OYFpJ+CXEWrbNgidUg46BQpw4Y1gophA==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "enhanced-resolve": "^5.17.1", + "jiti": "^2.4.0", + "tailwindcss": "4.0.0-beta.6" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "node_modules/@tailwindcss/oxide": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.0-beta.6.tgz", + "integrity": "sha512-i/Fg/rXYwzV7OJEXbcwjNVkYPgnyfLdYXtduOX7Kvf686xn6jR/k6bhl9fVkQcDb/ujyKzNjD2POAjwhHAC8aw==", + "license": "MIT", + "engines": { + "node": ">= 10" }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.0.0-beta.6", + "@tailwindcss/oxide-darwin-arm64": "4.0.0-beta.6", + "@tailwindcss/oxide-darwin-x64": "4.0.0-beta.6", + "@tailwindcss/oxide-freebsd-x64": "4.0.0-beta.6", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.0-beta.6", + "@tailwindcss/oxide-linux-arm64-gnu": "4.0.0-beta.6", + "@tailwindcss/oxide-linux-arm64-musl": "4.0.0-beta.6", + "@tailwindcss/oxide-linux-x64-gnu": "4.0.0-beta.6", + "@tailwindcss/oxide-linux-x64-musl": "4.0.0-beta.6", + "@tailwindcss/oxide-win32-arm64-msvc": "4.0.0-beta.6", + "@tailwindcss/oxide-win32-x64-msvc": "4.0.0-beta.6" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.0-beta.6.tgz", + "integrity": "sha512-yrUH/IfhkJWSYjF86UxpwrfaO866MjOhVQKG+wCgp0+YZGwirs8vX//a+8Y0SpEJrO0PVgmUU7xbsIM1EQWyTw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 8" + "node": ">= 10" } }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.0-beta.6.tgz", + "integrity": "sha512-WqFHSD/kocp8rH3KYJow8zTatTEMfdrkZu2KL8nnKfuAEk+juJuUnOQaXDmfsYNQSkGjtnGdcB/fueq4UtUSvw==", + "cpu": [ + "arm64" ], "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">= 10" } }, - "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", - "dev": true, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.0-beta.6.tgz", + "integrity": "sha512-zFc/TTBkDNLOKl/G9i1JOpg0AgrUOgBcSgURT/E0RsF0ZcKdiIjcyNswNThmjQnj+JAA8QL1Rct+04dH5j7Xjw==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.0-beta.6.tgz", + "integrity": "sha512-J3+uiPmKTeyefQBy4F0fz5sBQOj9eUTke6W/do/CplM5zXORQVCOKnrY2CPyDpN9bh4TYutldoiI0BP0Yo2ShA==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.0-beta.6.tgz", + "integrity": "sha512-oWAwN6LjX2KH8ej0a/Uc1qnuy0ZSyAwOoJ1Fm2s38ipDmvxC8ARkNfWbYKN/D7dFhY7T3NMV4qjzamFKsrgchQ==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.0-beta.6.tgz", + "integrity": "sha512-p5jDtF6P3gOPl4eOH0YsN09yx/kXqLbgy4VMnOA9DB6Nlt+RVwM+JDa+RK/GAHL/qkAqO6YBEHeBURbWOeSuBw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.0-beta.6.tgz", + "integrity": "sha512-ZI92S4LFuXx50gzkv98RXmybbRga183Y3NwBrQ+PfbRUOgDR0/tyT3Zh4CF/0eL9zzxa1mIE7cBbQjXNnejYqQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.0-beta.6.tgz", + "integrity": "sha512-F0z48W0Yksrw+xg0GK54wUFa0KmFO9lpbKy2u/2yZtHs+ZwJ55PjdljjW1OJzEHpD81AT+8DT1PhNCkaqpOlqg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.0-beta.6.tgz", + "integrity": "sha512-GQx5f3qzLuAO7s1NTGY8PDhiEvrRTgYQhGN8HzH1LhP+URSbwgysyHKWFacejWrZS2azr6jlE84usxk8yn/7Xg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.0-beta.6.tgz", + "integrity": "sha512-DUs1A5rVK1Da7XvY2FzVgS+5vinwVDOeXgOsL6dblL8ag70wlwzZjyB3YRbxKRekPynwKdILgIv8/TYE3cv7AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.0-beta.6.tgz", + "integrity": "sha512-VRsHAs3QBZa88N2Bp+LOV1vxr6f82L3KtamLIhyNTYXnEQjJxazaGwVow0VzN9sru2MTvcXjVFwdd9hUbeBKbA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "0.0.0-development.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-0.0.0-development.1.tgz", + "integrity": "sha512-PuojQKMCyGEzZLWjtu525jQoMoqOWXYGptkxlBIwOYK6NQbBKQca4AdlMYe8ZmiIpHObHBbOkIEbIrIH/wb68w==", + "dependencies": { + "@tailwindcss/oxide": "0.0.0-development.1", + "tailwindcss": "0.0.0-development.1" + } + }, + "node_modules/@tailwindcss/postcss/node_modules/@tailwindcss/oxide": { + "version": "0.0.0-development.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-0.0.0-development.1.tgz", + "integrity": "sha512-dHF8RdHDyQwDGlddjhjeFoAfM58qBb7epxxA9pi2tq+iy3by52lbOevz/m+5r4HoallnFq0hJyrjEcSEcWIFQA==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-darwin-arm64": "0.0.0-development.1", + "@tailwindcss/oxide-darwin-x64": "0.0.0", + "@tailwindcss/oxide-freebsd-x64": "0.0.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "0.0.0", + "@tailwindcss/oxide-linux-arm64-gnu": "0.0.0", + "@tailwindcss/oxide-linux-arm64-musl": "0.0.0", + "@tailwindcss/oxide-linux-x64-gnu": "0.0.0", + "@tailwindcss/oxide-linux-x64-musl": "0.0.0", + "@tailwindcss/oxide-win32-x64-msvc": "0.0.0" + } + }, + "node_modules/@tailwindcss/postcss/node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "0.0.0-development.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-0.0.0-development.1.tgz", + "integrity": "sha512-NJAmnxZDJBClJuQhej1hFQ/sQ2LvtyvEucCs25eSN+GQbb06JdfjCDbI3HjORkHYJpu5z2eHerU1dUHx31V3FQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss/node_modules/tailwindcss": { + "version": "0.0.0-development.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-0.0.0-development.1.tgz", + "integrity": "sha512-6mOfJb2JWT5z5J8DnLqAaWsAqZrMnUSm5sCqDm7TfAQwRF/OL/Xp0rKUryGRluFFoGNNG7CiNzkgn71Hnl0e7g==", + "dependencies": { + "@tailwindcss/oxide": "0.0.0-development.1", + "lightningcss": "^1.23.0" + }, + "bin": { + "tailwindcss": "dist/cli.js" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.0-beta.6.tgz", + "integrity": "sha512-SDlW8wrfhoGvEmNdbxdjPD0RJV5ErPegeJQFXNlS6CF815tzMMTekToIeMJphvwUO6w2TLSjvO9w3F9Z0ElMgQ==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.0.0-beta.6", + "@tailwindcss/oxide": "4.0.0-beta.6", + "lightningcss": "^1.26.0", + "tailwindcss": "4.0.0-beta.6" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.10.tgz", + "integrity": "sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.10" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.10.tgz", + "integrity": "sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.10.tgz", + "integrity": "sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.10", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/language-core": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.10.tgz", + "integrity": "sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "~2.4.8", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^0.2.0", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/alien-signals": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.2.2.tgz", + "integrity": "sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/browserslist": { @@ -1018,14 +1356,54 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.2.tgz", + "integrity": "sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "get-intrinsic": "^1.2.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/caniuse-lite": { @@ -1079,44 +1457,6 @@ "node": ">=8" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1228,16 +1568,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/concurrently": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.0.tgz", @@ -1264,84 +1594,155 @@ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/electron-to-chromium": { + "version": "1.5.72", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz", + "integrity": "sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==", "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=0.4.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/electron-to-chromium": { - "version": "1.5.72", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz", - "integrity": "sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/esbuild": { "version": "0.24.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -1387,58 +1788,12 @@ "node": ">=6" } }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "license": "MIT", - "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.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/follow-redirects": { "version": "1.15.9", @@ -1461,23 +1816,6 @@ } } }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/form-data": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", @@ -1511,7 +1849,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -1542,40 +1879,50 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/get-intrinsic": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, + "license": "MIT", "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1586,56 +1933,53 @@ "node": ">=8" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "bin": { + "he": "bin/he" } }, "node_modules/is-fullwidth-code-point": { @@ -1648,102 +1992,263 @@ "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/jiti": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.1.tgz", + "integrity": "sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.1.1.tgz", + "integrity": "sha512-HMZXpoSs1OR+7Lw1+g4Iy/s3HF3Ldl8KxxYT2Ot8pEB4XB/QRuZeWgDYJdu552UN03YRSRNK84CLC9NzYRtncA==", "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" }, "engines": { - "node": ">=0.10.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", + "node_modules/lightningcss": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.28.2.tgz", + "integrity": "sha512-ePLRrbt3fgjXI5VFZOLbvkLD5ZRuxGKm+wJ3ujCqBtL3NanDHPo/5zicR5uEKAPiIjBYF99BM4K4okvMznjkVA==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.28.2", + "lightningcss-darwin-x64": "1.28.2", + "lightningcss-freebsd-x64": "1.28.2", + "lightningcss-linux-arm-gnueabihf": "1.28.2", + "lightningcss-linux-arm64-gnu": "1.28.2", + "lightningcss-linux-arm64-musl": "1.28.2", + "lightningcss-linux-x64-gnu": "1.28.2", + "lightningcss-linux-x64-musl": "1.28.2", + "lightningcss-win32-arm64-msvc": "1.28.2", + "lightningcss-win32-x64-msvc": "1.28.2" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.28.2.tgz", + "integrity": "sha512-/8cPSqZiusHSS+WQz0W4NuaqFjquys1x+NsdN/XOHb+idGHJSoJ7SoQTVl3DZuAgtPZwFZgRfb/vd1oi8uX6+g==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.28.2.tgz", + "integrity": "sha512-R7sFrXlgKjvoEG8umpVt/yutjxOL0z8KWf0bfPT3cYMOW4470xu5qSHpFdIOpRWwl3FKNMUdbKtMUjYt0h2j4g==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.28.2.tgz", + "integrity": "sha512-l2qrCT+x7crAY+lMIxtgvV10R8VurzHAoUZJaVFSlHrN8kRLTvEg9ObojIDIexqWJQvJcVVV3vfzsEynpiuvgA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.28.2.tgz", + "integrity": "sha512-DKMzpICBEKnL53X14rF7hFDu8KKALUJtcKdFUCW5YOlGSiwRSgVoRjM97wUm/E0NMPkzrTi/rxfvt7ruNK8meg==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.28.2.tgz", + "integrity": "sha512-nhfjYkfymWZSxdtTNMWyhFk2ImUm0X7NAgJWFwnsYPOfmtWQEapzG/DXZTfEfMjSzERNUNJoQjPAbdqgB+sjiw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.28.2.tgz", + "integrity": "sha512-1SPG1ZTNnphWvAv8RVOymlZ8BDtAg69Hbo7n4QxARvkFVCJAt0cgjAw1Fox0WEhf4PwnyoOBaVH0Z5YNgzt4dA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.28.2.tgz", + "integrity": "sha512-ZhQy0FcO//INWUdo/iEdbefntTdpPVQ0XJwwtdbBuMQe+uxqZoytm9M+iqR9O5noWFaxK+nbS2iR/I80Q2Ofpg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.28.2.tgz", + "integrity": "sha512-alb/j1NMrgQmSFyzTbN1/pvMPM+gdDw7YBuQ5VSgcFDypN3Ah0BzC2dTZbzwzaMdUVDszX6zH5MzjfVN1oGuww==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/laravel-vite-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.1.1.tgz", - "integrity": "sha512-HMZXpoSs1OR+7Lw1+g4Iy/s3HF3Ldl8KxxYT2Ot8pEB4XB/QRuZeWgDYJdu552UN03YRSRNK84CLC9NzYRtncA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "vite-plugin-full-reload": "^1.1.0" - }, - "bin": { - "clean-orphaned-assets": "bin/clean.js" - }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.28.2.tgz", + "integrity": "sha512-WnwcjcBeAt0jGdjlgbT9ANf30pF0C/QMb1XnLnH272DQU8QXh+kmpi24R55wmWBwaTtNAETZ+m35ohyeMiNt+g==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": ">= 12.0.0" }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.28.2.tgz", + "integrity": "sha512-3piBifyT3avz22o6mDKywQC/OisH2yDK+caHWkiMsF82i3m5wDBadyCjlCQ5VNgzYkxrWZgiaxHDdd5uxsi0/A==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/antonk52" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1751,35 +2256,38 @@ "dev": true, "license": "MIT" }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.15", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.15.tgz", + "integrity": "sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", "dev": true, "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, "engines": { - "node": ">=8.6" + "node": ">= 0.4" } }, "node_modules/mime-db": { @@ -1805,6 +2313,16 @@ "node": ">= 0.6" } }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -1821,33 +2339,17 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "dev": true, "funding": [ { "type": "github", @@ -1869,16 +2371,6 @@ "dev": true, "license": "MIT" }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", @@ -1889,72 +2381,30 @@ "node": ">=0.10.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/package-json-from-dist": { + "node_modules/path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true, "license": "MIT" }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -1970,31 +2420,10 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/postcss": { "version": "8.4.49", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2019,120 +2448,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -2147,86 +2462,29 @@ "dev": true, "license": "MIT" }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/qs": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "picomatch": "^2.2.1" + "side-channel": "^1.0.6" }, "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { - "iojs": ">=1.0.0", "node": ">=0.10.0" } }, @@ -2234,7 +2492,6 @@ "version": "4.28.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.1.tgz", "integrity": "sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.6" @@ -2269,30 +2526,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -2303,27 +2536,35 @@ "tslib": "^2.1.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", + "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" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, "node_modules/shell-quote": { @@ -2339,154 +2580,89 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" + "node": ">= 0.4" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "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" }, "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=0.10.0" } }, "node_modules/supports-color": { @@ -2505,91 +2681,19 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/tailwindcss": { - "version": "3.4.16", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.16.tgz", - "integrity": "sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.6.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.6", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.0-beta.6.tgz", + "integrity": "sha512-eCCuMk3H65w4J/QWkjxfeWoBSKbCD3E6Uj2LA6Xkkl4eMa1MXuwVpIU1RXcLIp+BVsXGEZMP7i7uJig7KxfAXQ==", + "license": "MIT" }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, "engines": { - "node": ">=8.0" + "node": ">=6" } }, "node_modules/tree-kill": { @@ -2602,13 +2706,6 @@ "tree-kill": "cli.js" } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -2616,6 +2713,20 @@ "dev": true, "license": "0BSD" }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", @@ -2647,18 +2758,10 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, "node_modules/vite": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.3.tgz", "integrity": "sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==", - "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.24.0", @@ -2737,115 +2840,51 @@ "picomatch": "^2.3.1" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", "dev": true, "license": "MIT" }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/vue-tsc": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.10.tgz", + "integrity": "sha512-RBNSfaaRHcN5uqVqJSZh++Gy/YUzryuv9u1aFWhsammDJXNtUiJMNoJ747lZcQ68wUQFx6E73y4FY3D8E7FGMA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "@volar/typescript": "~2.4.8", + "@vue/language-core": "2.1.10", + "semver": "^7.5.4" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "bin": { + "vue-tsc": "bin/vue-tsc.js" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "typescript": ">=5.0.0" } }, "node_modules/y18n": { @@ -2862,8 +2901,9 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", - "dev": true, "license": "ISC", + "optional": true, + "peer": true, "bin": { "yaml": "bin.mjs" }, diff --git a/package.json b/package.json index 0d104724..3a4e2471 100644 --- a/package.json +++ b/package.json @@ -2,16 +2,25 @@ "private": true, "type": "module", "scripts": { - "build": "vite build", + "build": "vue-tsc && vite build", "dev": "vite" }, "devDependencies": { + "@inertiajs/vue3": "^2.0.0-beta.3", + "@tailwindcss/forms": "^0.5.3", + "@vitejs/plugin-vue": "^5.2.1", "autoprefixer": "^10.4.20", "axios": "^1.7.4", "concurrently": "^9.0.1", "laravel-vite-plugin": "^1.0", - "postcss": "^8.4.47", - "tailwindcss": "^3.4.13", - "vite": "^6.0" + "tailwindcss": "^4.0.0-beta.6", + "typescript": "^5.5.3", + "vite": "^6.0", + "vue": "^3.4.0", + "vue-tsc": "^2.0.24" + }, + "dependencies": { + "@tailwindcss/postcss": "^0.0.0-development.1", + "@tailwindcss/vite": "^4.0.0-beta.6" } } diff --git a/postcss.config.js b/postcss.config.js index 49c0612d..66525fd2 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,5 @@ export default { plugins: { - tailwindcss: {}, - autoprefixer: {}, + '@tailwindcss/postcss': {}, }, }; diff --git a/resources/css/app.css b/resources/css/app.css index b5c61c95..a461c505 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -1,3 +1 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +@import "tailwindcss"; \ No newline at end of file diff --git a/resources/js/Pages/Welcome.vue b/resources/js/Pages/Welcome.vue new file mode 100644 index 00000000..7960058e --- /dev/null +++ b/resources/js/Pages/Welcome.vue @@ -0,0 +1,376 @@ + + + diff --git a/resources/js/app.js b/resources/js/app.js deleted file mode 100644 index e59d6a0a..00000000 --- a/resources/js/app.js +++ /dev/null @@ -1 +0,0 @@ -import './bootstrap'; diff --git a/resources/js/app.ts b/resources/js/app.ts new file mode 100644 index 00000000..df24d45f --- /dev/null +++ b/resources/js/app.ts @@ -0,0 +1,26 @@ +import '../css/app.css'; +import './bootstrap'; + +import { createInertiaApp } from '@inertiajs/vue3' +import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'; +import { createApp, DefineComponent, h } from 'vue'; +import { ZiggyVue } from '../../vendor/tightenco/ziggy'; + +const appName = import.meta.env.VITE_APP_NAME || 'Laravel'; + +createInertiaApp({ + title: (title) => `${title} - ${appName}`, + resolve: name => { + const pages = import.meta.glob('./Pages/**/*.vue', { eager: true }) + return pages[`./Pages/${name}.vue`] + }, + setup({ el, App, props, plugin }) { + createApp({ render: () => h(App, props) }) + .use(plugin) + .use(ZiggyVue) + .mount(el) + }, + progress: { + color: '#4B5563', + }, +}) \ No newline at end of file diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.ts similarity index 100% rename from resources/js/bootstrap.js rename to resources/js/bootstrap.ts diff --git a/resources/views/app.blade.php b/resources/views/app.blade.php new file mode 100644 index 00000000..5ed39e2e --- /dev/null +++ b/resources/views/app.blade.php @@ -0,0 +1,21 @@ + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + @routes + @vite(['resources/js/app.ts', "resources/js/Pages/{$page['component']}.vue"]) + @inertiaHead + + + @inertia + + diff --git a/routes/web.php b/routes/web.php index 86a06c53..2255166e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,7 +1,14 @@ Route::has('login'), + 'canRegister' => Route::has('register'), + 'laravelVersion' => Application::VERSION, + 'phpVersion' => PHP_VERSION, + ]); }); diff --git a/vite.config.js b/vite.config.ts similarity index 67% rename from vite.config.js rename to vite.config.ts index 421b5695..b7c18b39 100644 --- a/vite.config.js +++ b/vite.config.ts @@ -1,5 +1,7 @@ import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; +import tailwindcss from '@tailwindcss/vite'; +import vue from '@vitejs/plugin-vue'; export default defineConfig({ plugins: [ @@ -7,5 +9,7 @@ export default defineConfig({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true, }), + tailwindcss(), + vue(), ], -}); +}); \ No newline at end of file From d9cf563e35584b26ff61959775678437f0730fba Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Fri, 13 Dec 2024 15:02:51 -0500 Subject: [PATCH 02/92] Adding functionality for login, register, and viewing dashboard --- .gitignore | 1 + .nvmrc | 1 + README.md | 71 +-- .../Auth/AuthenticatedSessionController.php | 57 ++ .../Auth/RegisteredUserController.php | 57 ++ app/Http/Middleware/HandleInertiaRequests.php | 4 +- app/Http/Requests/Auth/LoginRequest.php | 85 +++ components.json | 18 + package-lock.json | 516 +++++++++++++++--- package.json | 17 +- postcss.config.js | 5 - resources/css/app.css | 155 +++++- resources/css/customizations.css | 60 ++ resources/js/Components/ApplicationLogo.vue | 8 + resources/js/Components/Checkbox.vue | 29 + resources/js/Components/DangerButton.vue | 7 + resources/js/Components/Dropdown.vue | 82 +++ resources/js/Components/DropdownLink.vue | 16 + resources/js/Components/InputError.vue | 13 + resources/js/Components/InputLabel.vue | 12 + resources/js/Components/Modal.vue | 121 ++++ resources/js/Components/NavLink.vue | 21 + resources/js/Components/PrimaryButton.vue | 7 + resources/js/Components/ResponsiveNavLink.vue | 21 + resources/js/Components/SecondaryButton.vue | 19 + resources/js/Components/TextInput.vue | 23 + resources/js/Components/sidebar/NavMain.vue | 82 +++ .../js/Components/sidebar/NavProjects.vue | 88 +++ .../js/Components/sidebar/NavSecondary.vue | 37 ++ resources/js/Components/sidebar/NavUser.vue | 123 +++++ resources/js/Components/sidebar/Sidebar.vue | 205 +++++++ resources/js/Components/ui/avatar/Avatar.vue | 21 + .../Components/ui/avatar/AvatarFallback.vue | 11 + .../js/Components/ui/avatar/AvatarImage.vue | 9 + resources/js/Components/ui/avatar/index.ts | 24 + .../Components/ui/breadcrumb/Breadcrumb.vue | 13 + .../ui/breadcrumb/BreadcrumbEllipsis.vue | 22 + .../ui/breadcrumb/BreadcrumbItem.vue | 16 + .../ui/breadcrumb/BreadcrumbLink.vue | 19 + .../ui/breadcrumb/BreadcrumbList.vue | 16 + .../ui/breadcrumb/BreadcrumbPage.vue | 19 + .../ui/breadcrumb/BreadcrumbSeparator.vue | 21 + .../js/Components/ui/breadcrumb/index.ts | 7 + resources/js/Components/ui/button/Button.vue | 26 + resources/js/Components/ui/button/index.ts | 35 ++ .../Components/ui/collapsible/Collapsible.vue | 15 + .../ui/collapsible/CollapsibleContent.vue | 11 + .../ui/collapsible/CollapsibleTrigger.vue | 11 + .../js/Components/ui/collapsible/index.ts | 3 + .../ui/dropdown-menu/DropdownMenu.vue | 14 + .../DropdownMenuCheckboxItem.vue | 40 ++ .../ui/dropdown-menu/DropdownMenuContent.vue | 38 ++ .../ui/dropdown-menu/DropdownMenuGroup.vue | 11 + .../ui/dropdown-menu/DropdownMenuItem.vue | 28 + .../ui/dropdown-menu/DropdownMenuLabel.vue | 24 + .../dropdown-menu/DropdownMenuRadioGroup.vue | 19 + .../dropdown-menu/DropdownMenuRadioItem.vue | 41 ++ .../dropdown-menu/DropdownMenuSeparator.vue | 22 + .../ui/dropdown-menu/DropdownMenuShortcut.vue | 14 + .../ui/dropdown-menu/DropdownMenuSub.vue | 19 + .../dropdown-menu/DropdownMenuSubContent.vue | 30 + .../dropdown-menu/DropdownMenuSubTrigger.vue | 33 ++ .../ui/dropdown-menu/DropdownMenuTrigger.vue | 13 + .../js/Components/ui/dropdown-menu/index.ts | 16 + resources/js/Components/ui/input/Input.vue | 24 + resources/js/Components/ui/input/index.ts | 1 + resources/js/Components/ui/label/Label.vue | 27 + resources/js/Components/ui/label/index.ts | 1 + .../js/Components/ui/separator/Separator.vue | 35 ++ resources/js/Components/ui/separator/index.ts | 1 + resources/js/Components/ui/sheet/Sheet.vue | 14 + .../js/Components/ui/sheet/SheetClose.vue | 11 + .../js/Components/ui/sheet/SheetContent.vue | 56 ++ .../Components/ui/sheet/SheetDescription.vue | 22 + .../js/Components/ui/sheet/SheetFooter.vue | 19 + .../js/Components/ui/sheet/SheetHeader.vue | 16 + .../js/Components/ui/sheet/SheetTitle.vue | 22 + .../js/Components/ui/sheet/SheetTrigger.vue | 11 + resources/js/Components/ui/sheet/index.ts | 31 ++ .../js/Components/ui/sidebar/Sidebar.vue | 91 +++ .../Components/ui/sidebar/SidebarContent.vue | 17 + .../Components/ui/sidebar/SidebarFooter.vue | 17 + .../js/Components/ui/sidebar/SidebarGroup.vue | 17 + .../ui/sidebar/SidebarGroupAction.vue | 27 + .../ui/sidebar/SidebarGroupContent.vue | 17 + .../ui/sidebar/SidebarGroupLabel.vue | 24 + .../Components/ui/sidebar/SidebarHeader.vue | 17 + .../js/Components/ui/sidebar/SidebarInput.vue | 21 + .../js/Components/ui/sidebar/SidebarInset.vue | 20 + .../js/Components/ui/sidebar/SidebarMenu.vue | 17 + .../ui/sidebar/SidebarMenuAction.vue | 34 ++ .../ui/sidebar/SidebarMenuBadge.vue | 25 + .../ui/sidebar/SidebarMenuButton.vue | 51 ++ .../ui/sidebar/SidebarMenuButtonChild.vue | 33 ++ .../Components/ui/sidebar/SidebarMenuItem.vue | 17 + .../ui/sidebar/SidebarMenuSkeleton.vue | 33 ++ .../Components/ui/sidebar/SidebarMenuSub.vue | 21 + .../ui/sidebar/SidebarMenuSubButton.vue | 35 ++ .../ui/sidebar/SidebarMenuSubItem.vue | 9 + .../Components/ui/sidebar/SidebarProvider.vue | 79 +++ .../js/Components/ui/sidebar/SidebarRail.vue | 32 ++ .../ui/sidebar/SidebarSeparator.vue | 18 + .../Components/ui/sidebar/SidebarTrigger.vue | 26 + resources/js/Components/ui/sidebar/index.ts | 51 ++ resources/js/Components/ui/sidebar/utils.ts | 19 + .../js/Components/ui/skeleton/Skeleton.vue | 14 + resources/js/Components/ui/skeleton/index.ts | 1 + .../js/Components/ui/tooltip/Tooltip.vue | 14 + .../Components/ui/tooltip/TooltipContent.vue | 31 ++ .../Components/ui/tooltip/TooltipProvider.vue | 11 + .../Components/ui/tooltip/TooltipTrigger.vue | 11 + resources/js/Components/ui/tooltip/index.ts | 4 + resources/js/Layouts/AppLayout.vue | 50 ++ resources/js/Layouts/AuthLayout.vue | 40 ++ resources/js/Layouts/GuestLayout.vue | 22 + resources/js/Pages/Auth/Login.vue | 112 ++++ resources/js/Pages/Auth/Register.vue | 136 +++++ resources/js/Pages/Dashboard.vue | 22 + resources/js/bootstrap.ts | 6 +- resources/js/utils.ts | 6 + resources/views/welcome.blade.php | 176 ------ routes/auth.php | 59 ++ routes/web.php | 14 + tailwind.config.js | 20 - tsconfig.json | 111 ++++ vite.config.ts | 2 +- 126 files changed, 4196 insertions(+), 347 deletions(-) create mode 100644 .nvmrc create mode 100644 app/Http/Controllers/Auth/AuthenticatedSessionController.php create mode 100644 app/Http/Controllers/Auth/RegisteredUserController.php create mode 100644 app/Http/Requests/Auth/LoginRequest.php create mode 100644 components.json delete mode 100644 postcss.config.js create mode 100644 resources/css/customizations.css create mode 100644 resources/js/Components/ApplicationLogo.vue create mode 100644 resources/js/Components/Checkbox.vue create mode 100644 resources/js/Components/DangerButton.vue create mode 100644 resources/js/Components/Dropdown.vue create mode 100644 resources/js/Components/DropdownLink.vue create mode 100644 resources/js/Components/InputError.vue create mode 100644 resources/js/Components/InputLabel.vue create mode 100644 resources/js/Components/Modal.vue create mode 100644 resources/js/Components/NavLink.vue create mode 100644 resources/js/Components/PrimaryButton.vue create mode 100644 resources/js/Components/ResponsiveNavLink.vue create mode 100644 resources/js/Components/SecondaryButton.vue create mode 100644 resources/js/Components/TextInput.vue create mode 100644 resources/js/Components/sidebar/NavMain.vue create mode 100644 resources/js/Components/sidebar/NavProjects.vue create mode 100644 resources/js/Components/sidebar/NavSecondary.vue create mode 100644 resources/js/Components/sidebar/NavUser.vue create mode 100644 resources/js/Components/sidebar/Sidebar.vue create mode 100644 resources/js/Components/ui/avatar/Avatar.vue create mode 100644 resources/js/Components/ui/avatar/AvatarFallback.vue create mode 100644 resources/js/Components/ui/avatar/AvatarImage.vue create mode 100644 resources/js/Components/ui/avatar/index.ts create mode 100644 resources/js/Components/ui/breadcrumb/Breadcrumb.vue create mode 100644 resources/js/Components/ui/breadcrumb/BreadcrumbEllipsis.vue create mode 100644 resources/js/Components/ui/breadcrumb/BreadcrumbItem.vue create mode 100644 resources/js/Components/ui/breadcrumb/BreadcrumbLink.vue create mode 100644 resources/js/Components/ui/breadcrumb/BreadcrumbList.vue create mode 100644 resources/js/Components/ui/breadcrumb/BreadcrumbPage.vue create mode 100644 resources/js/Components/ui/breadcrumb/BreadcrumbSeparator.vue create mode 100644 resources/js/Components/ui/breadcrumb/index.ts create mode 100644 resources/js/Components/ui/button/Button.vue create mode 100644 resources/js/Components/ui/button/index.ts create mode 100644 resources/js/Components/ui/collapsible/Collapsible.vue create mode 100644 resources/js/Components/ui/collapsible/CollapsibleContent.vue create mode 100644 resources/js/Components/ui/collapsible/CollapsibleTrigger.vue create mode 100644 resources/js/Components/ui/collapsible/index.ts create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenu.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuContent.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuGroup.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuItem.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuLabel.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuRadioGroup.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuRadioItem.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuSeparator.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuShortcut.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuSub.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuSubContent.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuSubTrigger.vue create mode 100644 resources/js/Components/ui/dropdown-menu/DropdownMenuTrigger.vue create mode 100644 resources/js/Components/ui/dropdown-menu/index.ts create mode 100644 resources/js/Components/ui/input/Input.vue create mode 100644 resources/js/Components/ui/input/index.ts create mode 100644 resources/js/Components/ui/label/Label.vue create mode 100644 resources/js/Components/ui/label/index.ts create mode 100644 resources/js/Components/ui/separator/Separator.vue create mode 100644 resources/js/Components/ui/separator/index.ts create mode 100644 resources/js/Components/ui/sheet/Sheet.vue create mode 100644 resources/js/Components/ui/sheet/SheetClose.vue create mode 100644 resources/js/Components/ui/sheet/SheetContent.vue create mode 100644 resources/js/Components/ui/sheet/SheetDescription.vue create mode 100644 resources/js/Components/ui/sheet/SheetFooter.vue create mode 100644 resources/js/Components/ui/sheet/SheetHeader.vue create mode 100644 resources/js/Components/ui/sheet/SheetTitle.vue create mode 100644 resources/js/Components/ui/sheet/SheetTrigger.vue create mode 100644 resources/js/Components/ui/sheet/index.ts create mode 100644 resources/js/Components/ui/sidebar/Sidebar.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarContent.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarFooter.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarGroup.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarGroupAction.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarGroupContent.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarGroupLabel.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarHeader.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarInput.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarInset.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarMenu.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarMenuAction.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarMenuBadge.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarMenuButton.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarMenuButtonChild.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarMenuItem.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarMenuSkeleton.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarMenuSub.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarMenuSubButton.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarMenuSubItem.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarProvider.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarRail.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarSeparator.vue create mode 100644 resources/js/Components/ui/sidebar/SidebarTrigger.vue create mode 100644 resources/js/Components/ui/sidebar/index.ts create mode 100644 resources/js/Components/ui/sidebar/utils.ts create mode 100644 resources/js/Components/ui/skeleton/Skeleton.vue create mode 100644 resources/js/Components/ui/skeleton/index.ts create mode 100644 resources/js/Components/ui/tooltip/Tooltip.vue create mode 100644 resources/js/Components/ui/tooltip/TooltipContent.vue create mode 100644 resources/js/Components/ui/tooltip/TooltipProvider.vue create mode 100644 resources/js/Components/ui/tooltip/TooltipTrigger.vue create mode 100644 resources/js/Components/ui/tooltip/index.ts create mode 100644 resources/js/Layouts/AppLayout.vue create mode 100644 resources/js/Layouts/AuthLayout.vue create mode 100644 resources/js/Layouts/GuestLayout.vue create mode 100644 resources/js/Pages/Auth/Login.vue create mode 100644 resources/js/Pages/Auth/Register.vue create mode 100644 resources/js/Pages/Dashboard.vue create mode 100644 resources/js/utils.ts delete mode 100644 resources/views/welcome.blade.php create mode 100644 routes/auth.php delete mode 100644 tailwind.config.js create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore index bec2973a..1c9cf794 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ /storage/*.key /storage/pail /vendor +.DS_Store .env .env.backup .env.production diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..8fdd954d --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22 \ No newline at end of file diff --git a/README.md b/README.md index 1a4c26ba..0bfc0a62 100644 --- a/README.md +++ b/README.md @@ -7,60 +7,35 @@ License

-## About Laravel +## Vue Starter Kit -Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: +Welcome to the Laravel **Vue Starter Kit**, a starter kit built using [Laravel](https://laravel.com), [Vue](https://vuejs.org), [Inertia](https://inertiajs.com), and [Tailwind CSS](https://tailwindcss.com). -- [Simple, fast routing engine](https://laravel.com/docs/routing). -- [Powerful dependency injection container](https://laravel.com/docs/container). -- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. -- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). -- Database agnostic [schema migrations](https://laravel.com/docs/migrations). -- [Robust background job processing](https://laravel.com/docs/queues). -- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). +## Installation -Laravel is accessible, powerful, and provides tools required for large, robust applications. +To install the starter kit, run the following command: -## Learning Laravel +1. git clone https://github.com/laravel/vue-starter-kit +2. cd vue-starter-kit +3. composer run dev -Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. +## Icons -You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. +This starter kit leverages the [Lucide Vue Library](https://lucide.dev/guide/packages/lucide-vue-next), which provides you with a collection of over 1000 icons. View the full list of icons [here](https://lucide.dev/icons). -If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. +Here's a quick example of using an icon in one of your Vue Components: -## Laravel Sponsors +``` + -We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). - -### Premium Partners - -- **[Vehikl](https://vehikl.com/)** -- **[Tighten Co.](https://tighten.co)** -- **[WebReinvent](https://webreinvent.com/)** -- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** -- **[64 Robots](https://64robots.com)** -- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** -- **[Cyber-Duck](https://cyber-duck.co.uk)** -- **[DevSquad](https://devsquad.com/hire-laravel-developers)** -- **[Jump24](https://jump24.co.uk)** -- **[Redberry](https://redberry.international/laravel/)** -- **[Active Logic](https://activelogic.com)** -- **[byte5](https://byte5.de)** -- **[OP.GG](https://op.gg)** - -## Contributing - -Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). - -## Code of Conduct - -In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). - -## Security Vulnerabilities - -If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. - -## License - -The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). + +``` \ No newline at end of file diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php new file mode 100644 index 00000000..82116b0e --- /dev/null +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -0,0 +1,57 @@ +random())->explode('-'); + + return Inertia::render('Auth/Login', [ + 'canResetPassword' => Route::has('password.request'), + 'status' => session('status'), + 'name' => config('app.name'), + 'quote' => ['message' => trim($message), 'author' => trim($author)], + ]); + } + + /** + * Handle an incoming authentication request. + */ + public function store(LoginRequest $request): RedirectResponse + { + $request->authenticate(); + + $request->session()->regenerate(); + + return redirect()->intended(route('dashboard', absolute: false)); + } + + /** + * Destroy an authenticated session. + */ + public function destroy(Request $request): RedirectResponse + { + Auth::guard('web')->logout(); + + $request->session()->invalidate(); + + $request->session()->regenerateToken(); + + return redirect('/'); + } +} diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php new file mode 100644 index 00000000..1ef621de --- /dev/null +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -0,0 +1,57 @@ +random())->explode('-'); + + return Inertia::render('Auth/Register', [ + 'name' => config('app.name'), + 'quote' => ['message' => trim($message), 'author' => trim($author)], + ]); + } + + /** + * Handle an incoming registration request. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function store(Request $request): RedirectResponse + { + $request->validate([ + 'name' => 'required|string|max:255', + 'email' => 'required|string|lowercase|email|max:255|unique:'.User::class, + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + $user = User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => Hash::make($request->password), + ]); + + event(new Registered($user)); + + Auth::login($user); + + return redirect(route('dashboard', absolute: false)); + } +} diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index 81c999cc..6479633e 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -36,7 +36,9 @@ public function version(Request $request): ?string public function share(Request $request): array { return array_merge(parent::share($request), [ - // + 'auth' => [ + 'user' => $request->user(), + ], ]); } } diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php new file mode 100644 index 00000000..25746424 --- /dev/null +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -0,0 +1,85 @@ +|string> + */ + public function rules(): array + { + return [ + 'email' => ['required', 'string', 'email'], + 'password' => ['required', 'string'], + ]; + } + + /** + * Attempt to authenticate the request's credentials. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function authenticate(): void + { + $this->ensureIsNotRateLimited(); + + if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { + RateLimiter::hit($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.failed'), + ]); + } + + RateLimiter::clear($this->throttleKey()); + } + + /** + * Ensure the login request is not rate limited. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function ensureIsNotRateLimited(): void + { + if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { + return; + } + + event(new Lockout($this)); + + $seconds = RateLimiter::availableIn($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.throttle', [ + 'seconds' => $seconds, + 'minutes' => ceil($seconds / 60), + ]), + ]); + } + + /** + * Get the rate limiting throttle key for the request. + */ + public function throttleKey(): string + { + return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); + } +} diff --git a/components.json b/components.json new file mode 100644 index 00000000..fe71f255 --- /dev/null +++ b/components.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://shadcn-vue.com/schema.json", + "style": "default", + "typescript": true, + "tsConfigPath": "./tsconfig.json", + "tailwind": { + "config": "tailwind.config.js", + "css": "resources/css/app.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "framework": "laravel", + "aliases": { + "components": "resources/js/Components", + "utils": "@/utils.ts" + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 70d4a8a2..be0f2128 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,14 @@ "": { "dependencies": { "@tailwindcss/postcss": "^0.0.0-development.1", - "@tailwindcss/vite": "^4.0.0-beta.6" + "@tailwindcss/vite": "^4.0.0-beta.6", + "@vueuse/core": "^12.0.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide": "^0.468.0", + "lucide-vue-next": "^0.468.0", + "radix-vue": "^1.9.11", + "tailwind-merge": "^2.5.5" }, "devDependencies": { "@inertiajs/vue3": "^2.0.0-beta.3", @@ -17,17 +24,16 @@ "concurrently": "^9.0.1", "laravel-vite-plugin": "^1.0", "tailwindcss": "^4.0.0-beta.6", - "typescript": "^5.5.3", - "vite": "^6.0", - "vue": "^3.4.0", - "vue-tsc": "^2.0.24" + "typescript": "^5.2.2", + "vite": "^6.0.3", + "vue": "^3.5.13", + "vue-tsc": "^2.1.10" } }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -37,7 +43,6 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -47,7 +52,6 @@ "version": "7.26.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.26.3" @@ -63,7 +67,6 @@ "version": "7.26.3", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -457,6 +460,68 @@ "node": ">=18" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "license": "MIT" + }, + "node_modules/@floating-ui/vue": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@floating-ui/vue/-/vue-1.1.5.tgz", + "integrity": "sha512-ynL1p5Z+woPVSwgMGqeDrx6HrJfGIDzFyESFkyqJKilGW1+h/8yVY29Khn0LaU6wHBRwZ13ntG6reiHWK6jyzw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0", + "@floating-ui/utils": "^0.2.8", + "vue-demi": ">=0.13.0" + } + }, + "node_modules/@floating-ui/vue/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/@inertiajs/core": { "version": "2.0.0-beta.3", "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.0.0-beta.3.tgz", @@ -484,11 +549,28 @@ "vue": "^3.0.0" } }, + "node_modules/@internationalized/date": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.6.0.tgz", + "integrity": "sha512-+z6ti+CcJnRlLHok/emGEsWQhe7kfSmEW+/6qCzvKY67YPh7YOBfvc7+/+NXq+zJlbArg30tYpqLjNgcAYv2YQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.0.tgz", + "integrity": "sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { @@ -738,6 +820,15 @@ "win32" ] }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/@tailwindcss/forms": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.9.tgz", @@ -763,25 +854,23 @@ } }, "node_modules/@tailwindcss/oxide": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.0-beta.6.tgz", - "integrity": "sha512-i/Fg/rXYwzV7OJEXbcwjNVkYPgnyfLdYXtduOX7Kvf686xn6jR/k6bhl9fVkQcDb/ujyKzNjD2POAjwhHAC8aw==", + "version": "0.0.0-development.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-0.0.0-development.1.tgz", + "integrity": "sha512-dHF8RdHDyQwDGlddjhjeFoAfM58qBb7epxxA9pi2tq+iy3by52lbOevz/m+5r4HoallnFq0hJyrjEcSEcWIFQA==", "license": "MIT", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.0.0-beta.6", - "@tailwindcss/oxide-darwin-arm64": "4.0.0-beta.6", - "@tailwindcss/oxide-darwin-x64": "4.0.0-beta.6", - "@tailwindcss/oxide-freebsd-x64": "4.0.0-beta.6", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.0-beta.6", - "@tailwindcss/oxide-linux-arm64-gnu": "4.0.0-beta.6", - "@tailwindcss/oxide-linux-arm64-musl": "4.0.0-beta.6", - "@tailwindcss/oxide-linux-x64-gnu": "4.0.0-beta.6", - "@tailwindcss/oxide-linux-x64-musl": "4.0.0-beta.6", - "@tailwindcss/oxide-win32-arm64-msvc": "4.0.0-beta.6", - "@tailwindcss/oxide-win32-x64-msvc": "4.0.0-beta.6" + "@tailwindcss/oxide-darwin-arm64": "0.0.0-development.1", + "@tailwindcss/oxide-darwin-x64": "0.0.0", + "@tailwindcss/oxide-freebsd-x64": "0.0.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "0.0.0", + "@tailwindcss/oxide-linux-arm64-gnu": "0.0.0", + "@tailwindcss/oxide-linux-arm64-musl": "0.0.0", + "@tailwindcss/oxide-linux-x64-gnu": "0.0.0", + "@tailwindcss/oxide-linux-x64-musl": "0.0.0", + "@tailwindcss/oxide-win32-x64-msvc": "0.0.0" } }, "node_modules/@tailwindcss/oxide-android-arm64": { @@ -801,9 +890,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.0-beta.6.tgz", - "integrity": "sha512-WqFHSD/kocp8rH3KYJow8zTatTEMfdrkZu2KL8nnKfuAEk+juJuUnOQaXDmfsYNQSkGjtnGdcB/fueq4UtUSvw==", + "version": "0.0.0-development.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-0.0.0-development.1.tgz", + "integrity": "sha512-NJAmnxZDJBClJuQhej1hFQ/sQ2LvtyvEucCs25eSN+GQbb06JdfjCDbI3HjORkHYJpu5z2eHerU1dUHx31V3FQ==", "cpu": [ "arm64" ], @@ -969,30 +1058,59 @@ "tailwindcss": "0.0.0-development.1" } }, - "node_modules/@tailwindcss/postcss/node_modules/@tailwindcss/oxide": { + "node_modules/@tailwindcss/postcss/node_modules/tailwindcss": { "version": "0.0.0-development.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-0.0.0-development.1.tgz", - "integrity": "sha512-dHF8RdHDyQwDGlddjhjeFoAfM58qBb7epxxA9pi2tq+iy3by52lbOevz/m+5r4HoallnFq0hJyrjEcSEcWIFQA==", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-0.0.0-development.1.tgz", + "integrity": "sha512-6mOfJb2JWT5z5J8DnLqAaWsAqZrMnUSm5sCqDm7TfAQwRF/OL/Xp0rKUryGRluFFoGNNG7CiNzkgn71Hnl0e7g==", + "dependencies": { + "@tailwindcss/oxide": "0.0.0-development.1", + "lightningcss": "^1.23.0" + }, + "bin": { + "tailwindcss": "dist/cli.js" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.0-beta.6.tgz", + "integrity": "sha512-SDlW8wrfhoGvEmNdbxdjPD0RJV5ErPegeJQFXNlS6CF815tzMMTekToIeMJphvwUO6w2TLSjvO9w3F9Z0ElMgQ==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.0.0-beta.6", + "@tailwindcss/oxide": "4.0.0-beta.6", + "lightningcss": "^1.26.0", + "tailwindcss": "4.0.0-beta.6" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6" + } + }, + "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.0-beta.6.tgz", + "integrity": "sha512-i/Fg/rXYwzV7OJEXbcwjNVkYPgnyfLdYXtduOX7Kvf686xn6jR/k6bhl9fVkQcDb/ujyKzNjD2POAjwhHAC8aw==", "license": "MIT", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@tailwindcss/oxide-darwin-arm64": "0.0.0-development.1", - "@tailwindcss/oxide-darwin-x64": "0.0.0", - "@tailwindcss/oxide-freebsd-x64": "0.0.0", - "@tailwindcss/oxide-linux-arm-gnueabihf": "0.0.0", - "@tailwindcss/oxide-linux-arm64-gnu": "0.0.0", - "@tailwindcss/oxide-linux-arm64-musl": "0.0.0", - "@tailwindcss/oxide-linux-x64-gnu": "0.0.0", - "@tailwindcss/oxide-linux-x64-musl": "0.0.0", - "@tailwindcss/oxide-win32-x64-msvc": "0.0.0" + "@tailwindcss/oxide-android-arm64": "4.0.0-beta.6", + "@tailwindcss/oxide-darwin-arm64": "4.0.0-beta.6", + "@tailwindcss/oxide-darwin-x64": "4.0.0-beta.6", + "@tailwindcss/oxide-freebsd-x64": "4.0.0-beta.6", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.0-beta.6", + "@tailwindcss/oxide-linux-arm64-gnu": "4.0.0-beta.6", + "@tailwindcss/oxide-linux-arm64-musl": "4.0.0-beta.6", + "@tailwindcss/oxide-linux-x64-gnu": "4.0.0-beta.6", + "@tailwindcss/oxide-linux-x64-musl": "4.0.0-beta.6", + "@tailwindcss/oxide-win32-arm64-msvc": "4.0.0-beta.6", + "@tailwindcss/oxide-win32-x64-msvc": "4.0.0-beta.6" } }, - "node_modules/@tailwindcss/postcss/node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "0.0.0-development.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-0.0.0-development.1.tgz", - "integrity": "sha512-NJAmnxZDJBClJuQhej1hFQ/sQ2LvtyvEucCs25eSN+GQbb06JdfjCDbI3HjORkHYJpu5z2eHerU1dUHx31V3FQ==", + "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.0-beta.6.tgz", + "integrity": "sha512-WqFHSD/kocp8rH3KYJow8zTatTEMfdrkZu2KL8nnKfuAEk+juJuUnOQaXDmfsYNQSkGjtnGdcB/fueq4UtUSvw==", "cpu": [ "arm64" ], @@ -1005,31 +1123,30 @@ "node": ">= 10" } }, - "node_modules/@tailwindcss/postcss/node_modules/tailwindcss": { - "version": "0.0.0-development.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-0.0.0-development.1.tgz", - "integrity": "sha512-6mOfJb2JWT5z5J8DnLqAaWsAqZrMnUSm5sCqDm7TfAQwRF/OL/Xp0rKUryGRluFFoGNNG7CiNzkgn71Hnl0e7g==", - "dependencies": { - "@tailwindcss/oxide": "0.0.0-development.1", - "lightningcss": "^1.23.0" - }, - "bin": { - "tailwindcss": "dist/cli.js" + "node_modules/@tanstack/virtual-core": { + "version": "3.10.9", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.10.9.tgz", + "integrity": "sha512-kBknKOKzmeR7lN+vSadaKWXaLS0SZZG+oqpQ/k80Q6g9REn6zRHS/ZYdrIzHnpHgy/eWs00SujveUN/GJT2qTw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@tailwindcss/vite": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.0-beta.6.tgz", - "integrity": "sha512-SDlW8wrfhoGvEmNdbxdjPD0RJV5ErPegeJQFXNlS6CF815tzMMTekToIeMJphvwUO6w2TLSjvO9w3F9Z0ElMgQ==", + "node_modules/@tanstack/vue-virtual": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.11.1.tgz", + "integrity": "sha512-HEmblQrCkbadvcuis8MBCHvlTy9iUTFlEWfXy5nTxvSrauWPZ4Pyv0yOzXrDhnTXUMxJtpdUrov05RCusrBQ3A==", "license": "MIT", "dependencies": { - "@tailwindcss/node": "4.0.0-beta.6", - "@tailwindcss/oxide": "4.0.0-beta.6", - "lightningcss": "^1.26.0", - "tailwindcss": "4.0.0-beta.6" + "@tanstack/virtual-core": "3.10.9" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "vite": "^5.2.0 || ^6" + "vue": "^2.7.0 || ^3.0.0" } }, "node_modules/@types/estree": { @@ -1038,6 +1155,12 @@ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "license": "MIT" }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, "node_modules/@vitejs/plugin-vue": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", @@ -1085,7 +1208,6 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.25.3", @@ -1099,7 +1221,6 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", - "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-core": "3.5.13", @@ -1110,7 +1231,6 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.25.3", @@ -1128,7 +1248,6 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", - "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-dom": "3.5.13", @@ -1175,7 +1294,6 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", - "dev": true, "license": "MIT", "dependencies": { "@vue/shared": "3.5.13" @@ -1185,7 +1303,6 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", - "dev": true, "license": "MIT", "dependencies": { "@vue/reactivity": "3.5.13", @@ -1196,7 +1313,6 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", - "dev": true, "license": "MIT", "dependencies": { "@vue/reactivity": "3.5.13", @@ -1209,7 +1325,6 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", - "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-ssr": "3.5.13", @@ -1223,9 +1338,82 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", - "dev": true, "license": "MIT" }, + "node_modules/@vueuse/core": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.0.0.tgz", + "integrity": "sha512-C12RukhXiJCbx4MGhjmd/gH52TjJsc3G0E0kQj/kb19H3Nt6n1CA4DRWuTdWWcaFRdlTe0npWDS942mvacvNBw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "12.0.0", + "@vueuse/shared": "12.0.0", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/@vueuse/shared": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.0.0.tgz", + "integrity": "sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw==", + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.0.0.tgz", + "integrity": "sha512-Yzimd1D3sjxTDOlF05HekU5aSGdKjxhuhRFHA7gDWLn57PRbBIh+SF5NmjhJ0WRgF3my7T8LBucyxdFJjIfRJQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/alien-signals": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.2.2.tgz", @@ -1249,6 +1437,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1407,9 +1607,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001687", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz", - "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==", + "version": "1.0.30001688", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz", + "integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==", "dev": true, "funding": [ { @@ -1457,6 +1657,18 @@ "node": ">=8" } }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1535,6 +1747,15 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1598,7 +1819,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, "license": "MIT" }, "node_modules/de-indent": { @@ -1636,6 +1856,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1674,9 +1900,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.72", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz", - "integrity": "sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==", + "version": "1.5.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", + "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==", "dev": true, "license": "ISC" }, @@ -1697,7 +1923,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -1792,7 +2017,12 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, "node_modules/follow-redirects": { @@ -2270,11 +2500,25 @@ "dev": true, "license": "MIT" }, + "node_modules/lucide": { + "version": "0.468.0", + "resolved": "https://registry.npmjs.org/lucide/-/lucide-0.468.0.tgz", + "integrity": "sha512-UFbgwji/ZnAV7iTTE4jujyTV7J95AILKyATDUrqOJrMcUGfXvGjw3c1mcuHZUX2oJfkrAGU9KoxkrLQk2jjtiA==", + "license": "ISC" + }, + "node_modules/lucide-vue-next": { + "version": "0.468.0", + "resolved": "https://registry.npmjs.org/lucide-vue-next/-/lucide-vue-next-0.468.0.tgz", + "integrity": "sha512-quV/6T8YB1XK0VOEnebg3Byd8Rsan5/m95cvjnuHV4vcS3qEnLAybkrSh0hk3ppavx+V7R1PjNW+mGDvcBdz4A==", + "license": "ISC", + "peerDependencies": { + "vue": ">=3.0.1" + } + }, "node_modules/magic-string": { "version": "0.30.15", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.15.tgz", "integrity": "sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -2478,6 +2722,96 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/radix-vue": { + "version": "1.9.11", + "resolved": "https://registry.npmjs.org/radix-vue/-/radix-vue-1.9.11.tgz", + "integrity": "sha512-C+MtJ66jf8J28DO5bKgNwhGCi6WQYuEosD/tY/Orry9BTDcuF/Mps4HlFd2Tq4YlXF44BEPLQ2Paz89Mz70ZgA==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.6.7", + "@floating-ui/vue": "^1.1.0", + "@internationalized/date": "^3.5.4", + "@internationalized/number": "^3.5.3", + "@tanstack/vue-virtual": "^3.8.1", + "@vueuse/core": "^10.11.0", + "@vueuse/shared": "^10.11.0", + "aria-hidden": "^1.2.4", + "defu": "^6.1.4", + "fast-deep-equal": "^3.1.3", + "nanoid": "^5.0.7" + }, + "peerDependencies": { + "vue": ">= 3.2.0" + } + }, + "node_modules/radix-vue/node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/radix-vue/node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/radix-vue/node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/radix-vue/node_modules/nanoid": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", + "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2681,6 +3015,16 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/tailwind-merge": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz", + "integrity": "sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, "node_modules/tailwindcss": { "version": "4.0.0-beta.6", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.0-beta.6.tgz", @@ -2710,14 +3054,13 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, "license": "0BSD" }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", - "dev": true, + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -2851,7 +3194,6 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", - "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-dom": "3.5.13", diff --git a/package.json b/package.json index 3a4e2471..f3049e5b 100644 --- a/package.json +++ b/package.json @@ -14,13 +14,20 @@ "concurrently": "^9.0.1", "laravel-vite-plugin": "^1.0", "tailwindcss": "^4.0.0-beta.6", - "typescript": "^5.5.3", - "vite": "^6.0", - "vue": "^3.4.0", - "vue-tsc": "^2.0.24" + "typescript": "^5.2.2", + "vite": "^6.0.3", + "vue": "^3.5.13", + "vue-tsc": "^2.1.10" }, "dependencies": { "@tailwindcss/postcss": "^0.0.0-development.1", - "@tailwindcss/vite": "^4.0.0-beta.6" + "@tailwindcss/vite": "^4.0.0-beta.6", + "@vueuse/core": "^12.0.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide": "^0.468.0", + "lucide-vue-next": "^0.468.0", + "radix-vue": "^1.9.11", + "tailwind-merge": "^2.5.5" } } diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 66525fd2..00000000 --- a/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - plugins: { - '@tailwindcss/postcss': {}, - }, -}; diff --git a/resources/css/app.css b/resources/css/app.css index a461c505..b887fe66 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -1 +1,154 @@ -@import "tailwindcss"; \ No newline at end of file +@import "tailwindcss"; +@import "./customizations.css"; + +/* Define the Shadcn UI CSS Variables */ +:root { + --background: hsl(0, 0%, 100%); + --foreground: #494949; + + --muted: hsl(0, 0%, 92%); + --muted-foreground: hsl(215.4 16.3% 56.9%); + + --accent: hsl(240, 9%, 98%); + --accent-foreground: hsl(0, 0%, 0%); + + --popover: #ffffff; + --popover-foreground: #444444; + + --border: hsl(0, 0%, 81%); + --input: hsl(0, 0%, 78%); + + --card: hsl(224 71% 4%); + --card-foreground: hsl(213 31% 91%); + + --primary: hsl(0, 0%, 7%); + --primary-foreground: hsl(0, 0%, 100%); + + --secondary: hsl(222.2 47.4% 11.2%); + --secondary-foreground: hsl(210 40% 98%); + + --destructive: hsl(0 63% 31%); + --destructive-foreground: hsl(210 40% 98%); + + --ring: hsl(216 34% 17%); + + --sidebar-background: 240 5.9% 10%; + --sidebar-foreground: 240 5.3% 26.1%; + --sidebar-primary: #000; + --sidebar-primary-foreground: #fff; + --sidebar-accent: #ececed; + --sidebar-accent-foreground: #09090f; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8%; + --sidebar-width: 16rem; +} + +html.dark { + --background: hsl(224 71% 4%); + --foreground: hsl(213 31% 91%); + + --muted: hsl(223 47% 11%); + --muted-foreground: hsl(215.4 16.3% 56.9%); + + --accent: hsl(216 34% 17%); + --accent-foreground: hsl(210 40% 98%); + + --popover: hsl(224 71% 4%); + --popover-foreground: hsl(215 20.2% 65.1%); + + --border: hsl(216 34% 17%); + --input: hsl(216 34% 17%); + + --card: hsl(224 71% 4%); + --card-foreground: hsl(213 31% 91%); + + --primary: hsl(246, 100%, 48%); + --primary-foreground: hsl(222.2 47.4% 1.2%); + + --secondary: hsl(222.2 47.4% 11.2%); + --secondary-foreground: hsl(210 40% 98%); + + --destructive: hsl(0 63% 31%); + --destructive-foreground: hsl(210 40% 98%); + + --ring: hsl(216 34% 17%); + + --sidebar-background: 240 5.9% 10%; + --sidebar-foreground: 240 4.8% 95.9%; + --sidebar-primary: 224.3 76.3% 48%; + --sidebar-primary-foreground: 0 0% 100%; + --sidebar-accent: 240 3.7% 15.9%; + --sidebar-accent-foreground: 240 4.8% 95.9%; + --sidebar-border: 240 3.7% 15.9%; + --sidebar-ring: 217.2 91.2% 59.8%; + --sidebar-width: 16rem; +} + + + + +@theme { + --color-mint-green: oklch(83.66% 0.125 176.45); + --color-baby-blue: oklch(85.61% 0.094 225.87); + /* Shadcn UI */ + --color-mint-green: oklch(83.66% 0.125 176.45); + --color-baby-blue: oklch(85.61% 0.094 225.87); + /* Shadcn UI */ + --radius: 0.5rem; + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-background: var(--background); + --color-foreground: var(--foreground); + + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + + --font-family-poppins: var(--font-poppins); + --font-family-inter: var(--font-inter); + + --animate-accordion-down: accordion-down 0.2s ease-out; + --animate-accordion-up: accordion-up 0.2s ease-out; + + @keyframes accordion-down { + from { + height: 0; + } + + to { + height: var(--radix-accordion-content-height); + } + } + + @keyframes accordion-up { + from { + height: var(--radix-accordion-content-height); + } + + to { + height: "0"; + } + } +} \ No newline at end of file diff --git a/resources/css/customizations.css b/resources/css/customizations.css new file mode 100644 index 00000000..578fe9b1 --- /dev/null +++ b/resources/css/customizations.css @@ -0,0 +1,60 @@ +/* + This file contains some styles that are needed to stylize a few elements + in ShadCN. ShadCN is not fully compatible with Tailwind v4. Many of + these were defined in the tailwind.config.js file, but the + Tailwind config is not being utilized in v4. +*/ + +/********** SHADCN UI Sidebar styles **********/ + + +[data-state="expanded"] .w-\[--sidebar-width\] { + width: var(--sidebar-width); +} + +.w-\[--sidebar-width\], +[data-sidebar="sidebar"] { + border-color: #e5e5e5; +} + +[data-variant="floating"] [data-sidebar="sidebar"] { + background: #fafafa; + box-shadow: none; + ; +} + +.bg-sidebar { + background-color: var(--sidebar-background); +} + +.bg-sidebar-primary { + background-color: var(--sidebar-primary); +} + +.text-sidebar-primary-foreground { + color: var(--sidebar-primary-foreground); +} + +.hover\:text-sidebar-accent-foreground:hover { + color: var(--sidebar-accent-foreground); +} + +.hover\:bg-sidebar-accent:hover { + background-color: var(--sidebar-accent); +} + + +/********** End SHADCN UI Sidebar styles **********/ + +/* Need to figure out why button is not using pointer cursor */ + +button { + cursor: pointer !important; +} + + +/* Popover styles */ + +.bg-popover { + border: 1px solid #e1e1e1; +} \ No newline at end of file diff --git a/resources/js/Components/ApplicationLogo.vue b/resources/js/Components/ApplicationLogo.vue new file mode 100644 index 00000000..9f6eef56 --- /dev/null +++ b/resources/js/Components/ApplicationLogo.vue @@ -0,0 +1,8 @@ + diff --git a/resources/js/Components/Checkbox.vue b/resources/js/Components/Checkbox.vue new file mode 100644 index 00000000..f76e7f5e --- /dev/null +++ b/resources/js/Components/Checkbox.vue @@ -0,0 +1,29 @@ + + + diff --git a/resources/js/Components/DangerButton.vue b/resources/js/Components/DangerButton.vue new file mode 100644 index 00000000..ac45afcd --- /dev/null +++ b/resources/js/Components/DangerButton.vue @@ -0,0 +1,7 @@ + diff --git a/resources/js/Components/Dropdown.vue b/resources/js/Components/Dropdown.vue new file mode 100644 index 00000000..007dd945 --- /dev/null +++ b/resources/js/Components/Dropdown.vue @@ -0,0 +1,82 @@ + + + diff --git a/resources/js/Components/DropdownLink.vue b/resources/js/Components/DropdownLink.vue new file mode 100644 index 00000000..8ecf2ef7 --- /dev/null +++ b/resources/js/Components/DropdownLink.vue @@ -0,0 +1,16 @@ + + + diff --git a/resources/js/Components/InputError.vue b/resources/js/Components/InputError.vue new file mode 100644 index 00000000..cbfb2a75 --- /dev/null +++ b/resources/js/Components/InputError.vue @@ -0,0 +1,13 @@ + + + diff --git a/resources/js/Components/InputLabel.vue b/resources/js/Components/InputLabel.vue new file mode 100644 index 00000000..3fd5bb9e --- /dev/null +++ b/resources/js/Components/InputLabel.vue @@ -0,0 +1,12 @@ + + + diff --git a/resources/js/Components/Modal.vue b/resources/js/Components/Modal.vue new file mode 100644 index 00000000..952fa465 --- /dev/null +++ b/resources/js/Components/Modal.vue @@ -0,0 +1,121 @@ + + + diff --git a/resources/js/Components/NavLink.vue b/resources/js/Components/NavLink.vue new file mode 100644 index 00000000..cf100ec9 --- /dev/null +++ b/resources/js/Components/NavLink.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/Components/PrimaryButton.vue b/resources/js/Components/PrimaryButton.vue new file mode 100644 index 00000000..3bf8eb90 --- /dev/null +++ b/resources/js/Components/PrimaryButton.vue @@ -0,0 +1,7 @@ + diff --git a/resources/js/Components/ResponsiveNavLink.vue b/resources/js/Components/ResponsiveNavLink.vue new file mode 100644 index 00000000..63b6725a --- /dev/null +++ b/resources/js/Components/ResponsiveNavLink.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/Components/SecondaryButton.vue b/resources/js/Components/SecondaryButton.vue new file mode 100644 index 00000000..474c6552 --- /dev/null +++ b/resources/js/Components/SecondaryButton.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/Components/TextInput.vue b/resources/js/Components/TextInput.vue new file mode 100644 index 00000000..db49f87f --- /dev/null +++ b/resources/js/Components/TextInput.vue @@ -0,0 +1,23 @@ + + + diff --git a/resources/js/Components/sidebar/NavMain.vue b/resources/js/Components/sidebar/NavMain.vue new file mode 100644 index 00000000..71898dc8 --- /dev/null +++ b/resources/js/Components/sidebar/NavMain.vue @@ -0,0 +1,82 @@ + + + diff --git a/resources/js/Components/sidebar/NavProjects.vue b/resources/js/Components/sidebar/NavProjects.vue new file mode 100644 index 00000000..48776eb5 --- /dev/null +++ b/resources/js/Components/sidebar/NavProjects.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/resources/js/Components/sidebar/NavSecondary.vue b/resources/js/Components/sidebar/NavSecondary.vue new file mode 100644 index 00000000..f9cb6c27 --- /dev/null +++ b/resources/js/Components/sidebar/NavSecondary.vue @@ -0,0 +1,37 @@ + + + \ No newline at end of file diff --git a/resources/js/Components/sidebar/NavUser.vue b/resources/js/Components/sidebar/NavUser.vue new file mode 100644 index 00000000..d633106f --- /dev/null +++ b/resources/js/Components/sidebar/NavUser.vue @@ -0,0 +1,123 @@ + + + \ No newline at end of file diff --git a/resources/js/Components/sidebar/Sidebar.vue b/resources/js/Components/sidebar/Sidebar.vue new file mode 100644 index 00000000..82c9ec88 --- /dev/null +++ b/resources/js/Components/sidebar/Sidebar.vue @@ -0,0 +1,205 @@ + + + + \ No newline at end of file diff --git a/resources/js/Components/ui/avatar/Avatar.vue b/resources/js/Components/ui/avatar/Avatar.vue new file mode 100644 index 00000000..d9a7c837 --- /dev/null +++ b/resources/js/Components/ui/avatar/Avatar.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/Components/ui/avatar/AvatarFallback.vue b/resources/js/Components/ui/avatar/AvatarFallback.vue new file mode 100644 index 00000000..a671a219 --- /dev/null +++ b/resources/js/Components/ui/avatar/AvatarFallback.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/Components/ui/avatar/AvatarImage.vue b/resources/js/Components/ui/avatar/AvatarImage.vue new file mode 100644 index 00000000..43499fa2 --- /dev/null +++ b/resources/js/Components/ui/avatar/AvatarImage.vue @@ -0,0 +1,9 @@ + + + diff --git a/resources/js/Components/ui/avatar/index.ts b/resources/js/Components/ui/avatar/index.ts new file mode 100644 index 00000000..5367952a --- /dev/null +++ b/resources/js/Components/ui/avatar/index.ts @@ -0,0 +1,24 @@ +import { cva, type VariantProps } from 'class-variance-authority' + +export { default as Avatar } from './Avatar.vue' +export { default as AvatarFallback } from './AvatarFallback.vue' +export { default as AvatarImage } from './AvatarImage.vue' + +export const avatarVariant = cva( + 'inline-flex items-center justify-center font-normal text-foreground select-none shrink-0 bg-secondary overflow-hidden', + { + variants: { + size: { + sm: 'h-10 w-10 text-xs', + base: 'h-16 w-16 text-2xl', + lg: 'h-32 w-32 text-5xl', + }, + shape: { + circle: 'rounded-full', + square: 'rounded-md', + }, + }, + }, +) + +export type AvatarVariants = VariantProps diff --git a/resources/js/Components/ui/breadcrumb/Breadcrumb.vue b/resources/js/Components/ui/breadcrumb/Breadcrumb.vue new file mode 100644 index 00000000..72ca1437 --- /dev/null +++ b/resources/js/Components/ui/breadcrumb/Breadcrumb.vue @@ -0,0 +1,13 @@ + + + diff --git a/resources/js/Components/ui/breadcrumb/BreadcrumbEllipsis.vue b/resources/js/Components/ui/breadcrumb/BreadcrumbEllipsis.vue new file mode 100644 index 00000000..f045fef7 --- /dev/null +++ b/resources/js/Components/ui/breadcrumb/BreadcrumbEllipsis.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/Components/ui/breadcrumb/BreadcrumbItem.vue b/resources/js/Components/ui/breadcrumb/BreadcrumbItem.vue new file mode 100644 index 00000000..bdad2aee --- /dev/null +++ b/resources/js/Components/ui/breadcrumb/BreadcrumbItem.vue @@ -0,0 +1,16 @@ + + + diff --git a/resources/js/Components/ui/breadcrumb/BreadcrumbLink.vue b/resources/js/Components/ui/breadcrumb/BreadcrumbLink.vue new file mode 100644 index 00000000..f68efca7 --- /dev/null +++ b/resources/js/Components/ui/breadcrumb/BreadcrumbLink.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/Components/ui/breadcrumb/BreadcrumbList.vue b/resources/js/Components/ui/breadcrumb/BreadcrumbList.vue new file mode 100644 index 00000000..964f467d --- /dev/null +++ b/resources/js/Components/ui/breadcrumb/BreadcrumbList.vue @@ -0,0 +1,16 @@ + + + diff --git a/resources/js/Components/ui/breadcrumb/BreadcrumbPage.vue b/resources/js/Components/ui/breadcrumb/BreadcrumbPage.vue new file mode 100644 index 00000000..e44d5d87 --- /dev/null +++ b/resources/js/Components/ui/breadcrumb/BreadcrumbPage.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/Components/ui/breadcrumb/BreadcrumbSeparator.vue b/resources/js/Components/ui/breadcrumb/BreadcrumbSeparator.vue new file mode 100644 index 00000000..df29fdc9 --- /dev/null +++ b/resources/js/Components/ui/breadcrumb/BreadcrumbSeparator.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/Components/ui/breadcrumb/index.ts b/resources/js/Components/ui/breadcrumb/index.ts new file mode 100644 index 00000000..05909832 --- /dev/null +++ b/resources/js/Components/ui/breadcrumb/index.ts @@ -0,0 +1,7 @@ +export { default as Breadcrumb } from './Breadcrumb.vue' +export { default as BreadcrumbEllipsis } from './BreadcrumbEllipsis.vue' +export { default as BreadcrumbItem } from './BreadcrumbItem.vue' +export { default as BreadcrumbLink } from './BreadcrumbLink.vue' +export { default as BreadcrumbList } from './BreadcrumbList.vue' +export { default as BreadcrumbPage } from './BreadcrumbPage.vue' +export { default as BreadcrumbSeparator } from './BreadcrumbSeparator.vue' diff --git a/resources/js/Components/ui/button/Button.vue b/resources/js/Components/ui/button/Button.vue new file mode 100644 index 00000000..2da2029d --- /dev/null +++ b/resources/js/Components/ui/button/Button.vue @@ -0,0 +1,26 @@ + + + diff --git a/resources/js/Components/ui/button/index.ts b/resources/js/Components/ui/button/index.ts new file mode 100644 index 00000000..18a065a6 --- /dev/null +++ b/resources/js/Components/ui/button/index.ts @@ -0,0 +1,35 @@ +import { cva, type VariantProps } from 'class-variance-authority' + +export { default as Button } from './Button.vue' + +export const buttonVariants = cva( + 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', + { + variants: { + variant: { + default: + 'bg-primary text-primary-foreground shadow hover:bg-primary/90', + destructive: + 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90', + outline: + 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground', + secondary: + 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-9 px-4 py-2', + sm: 'h-8 rounded-md px-3 text-xs', + lg: 'h-10 rounded-md px-8', + icon: 'h-9 w-9', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) + +export type ButtonVariants = VariantProps diff --git a/resources/js/Components/ui/collapsible/Collapsible.vue b/resources/js/Components/ui/collapsible/Collapsible.vue new file mode 100644 index 00000000..fae7919c --- /dev/null +++ b/resources/js/Components/ui/collapsible/Collapsible.vue @@ -0,0 +1,15 @@ + + + diff --git a/resources/js/Components/ui/collapsible/CollapsibleContent.vue b/resources/js/Components/ui/collapsible/CollapsibleContent.vue new file mode 100644 index 00000000..9f30898b --- /dev/null +++ b/resources/js/Components/ui/collapsible/CollapsibleContent.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/Components/ui/collapsible/CollapsibleTrigger.vue b/resources/js/Components/ui/collapsible/CollapsibleTrigger.vue new file mode 100644 index 00000000..4a434639 --- /dev/null +++ b/resources/js/Components/ui/collapsible/CollapsibleTrigger.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/Components/ui/collapsible/index.ts b/resources/js/Components/ui/collapsible/index.ts new file mode 100644 index 00000000..abab9567 --- /dev/null +++ b/resources/js/Components/ui/collapsible/index.ts @@ -0,0 +1,3 @@ +export { default as Collapsible } from './Collapsible.vue' +export { default as CollapsibleContent } from './CollapsibleContent.vue' +export { default as CollapsibleTrigger } from './CollapsibleTrigger.vue' diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenu.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenu.vue new file mode 100644 index 00000000..b83d90b8 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenu.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue new file mode 100644 index 00000000..c29c53d8 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue @@ -0,0 +1,40 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuContent.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuContent.vue new file mode 100644 index 00000000..abf6efe6 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuContent.vue @@ -0,0 +1,38 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuGroup.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuGroup.vue new file mode 100644 index 00000000..3f201352 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuGroup.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuItem.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuItem.vue new file mode 100644 index 00000000..6c7c7d05 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuItem.vue @@ -0,0 +1,28 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuLabel.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuLabel.vue new file mode 100644 index 00000000..b19df0fd --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuLabel.vue @@ -0,0 +1,24 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuRadioGroup.vue new file mode 100644 index 00000000..4a727904 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuRadioGroup.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuRadioItem.vue new file mode 100644 index 00000000..6694c635 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuRadioItem.vue @@ -0,0 +1,41 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuSeparator.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuSeparator.vue new file mode 100644 index 00000000..829928df --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuSeparator.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuShortcut.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuShortcut.vue new file mode 100644 index 00000000..3673ffa8 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuShortcut.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuSub.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuSub.vue new file mode 100644 index 00000000..e0f4bd77 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuSub.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuSubContent.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuSubContent.vue new file mode 100644 index 00000000..83641948 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuSubContent.vue @@ -0,0 +1,30 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuSubTrigger.vue new file mode 100644 index 00000000..10ad86de --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuSubTrigger.vue @@ -0,0 +1,33 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuTrigger.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuTrigger.vue new file mode 100644 index 00000000..8efd5a92 --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuTrigger.vue @@ -0,0 +1,13 @@ + + + diff --git a/resources/js/Components/ui/dropdown-menu/index.ts b/resources/js/Components/ui/dropdown-menu/index.ts new file mode 100644 index 00000000..6011f35c --- /dev/null +++ b/resources/js/Components/ui/dropdown-menu/index.ts @@ -0,0 +1,16 @@ +export { default as DropdownMenu } from './DropdownMenu.vue' + +export { default as DropdownMenuCheckboxItem } from './DropdownMenuCheckboxItem.vue' +export { default as DropdownMenuContent } from './DropdownMenuContent.vue' +export { default as DropdownMenuGroup } from './DropdownMenuGroup.vue' +export { default as DropdownMenuItem } from './DropdownMenuItem.vue' +export { default as DropdownMenuLabel } from './DropdownMenuLabel.vue' +export { default as DropdownMenuRadioGroup } from './DropdownMenuRadioGroup.vue' +export { default as DropdownMenuRadioItem } from './DropdownMenuRadioItem.vue' +export { default as DropdownMenuSeparator } from './DropdownMenuSeparator.vue' +export { default as DropdownMenuShortcut } from './DropdownMenuShortcut.vue' +export { default as DropdownMenuSub } from './DropdownMenuSub.vue' +export { default as DropdownMenuSubContent } from './DropdownMenuSubContent.vue' +export { default as DropdownMenuSubTrigger } from './DropdownMenuSubTrigger.vue' +export { default as DropdownMenuTrigger } from './DropdownMenuTrigger.vue' +export { DropdownMenuPortal } from 'radix-vue' diff --git a/resources/js/Components/ui/input/Input.vue b/resources/js/Components/ui/input/Input.vue new file mode 100644 index 00000000..0d6c40b5 --- /dev/null +++ b/resources/js/Components/ui/input/Input.vue @@ -0,0 +1,24 @@ + + + diff --git a/resources/js/Components/ui/input/index.ts b/resources/js/Components/ui/input/index.ts new file mode 100644 index 00000000..a691dd6c --- /dev/null +++ b/resources/js/Components/ui/input/index.ts @@ -0,0 +1 @@ +export { default as Input } from './Input.vue' diff --git a/resources/js/Components/ui/label/Label.vue b/resources/js/Components/ui/label/Label.vue new file mode 100644 index 00000000..79574afe --- /dev/null +++ b/resources/js/Components/ui/label/Label.vue @@ -0,0 +1,27 @@ + + + diff --git a/resources/js/Components/ui/label/index.ts b/resources/js/Components/ui/label/index.ts new file mode 100644 index 00000000..572c2f01 --- /dev/null +++ b/resources/js/Components/ui/label/index.ts @@ -0,0 +1 @@ +export { default as Label } from './Label.vue' diff --git a/resources/js/Components/ui/separator/Separator.vue b/resources/js/Components/ui/separator/Separator.vue new file mode 100644 index 00000000..fcc1b72f --- /dev/null +++ b/resources/js/Components/ui/separator/Separator.vue @@ -0,0 +1,35 @@ + + + diff --git a/resources/js/Components/ui/separator/index.ts b/resources/js/Components/ui/separator/index.ts new file mode 100644 index 00000000..2287bcb9 --- /dev/null +++ b/resources/js/Components/ui/separator/index.ts @@ -0,0 +1 @@ +export { default as Separator } from './Separator.vue' diff --git a/resources/js/Components/ui/sheet/Sheet.vue b/resources/js/Components/ui/sheet/Sheet.vue new file mode 100644 index 00000000..a04c0262 --- /dev/null +++ b/resources/js/Components/ui/sheet/Sheet.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/Components/ui/sheet/SheetClose.vue b/resources/js/Components/ui/sheet/SheetClose.vue new file mode 100644 index 00000000..a64703e5 --- /dev/null +++ b/resources/js/Components/ui/sheet/SheetClose.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/Components/ui/sheet/SheetContent.vue b/resources/js/Components/ui/sheet/SheetContent.vue new file mode 100644 index 00000000..33ca4d92 --- /dev/null +++ b/resources/js/Components/ui/sheet/SheetContent.vue @@ -0,0 +1,56 @@ + + + diff --git a/resources/js/Components/ui/sheet/SheetDescription.vue b/resources/js/Components/ui/sheet/SheetDescription.vue new file mode 100644 index 00000000..9c09e908 --- /dev/null +++ b/resources/js/Components/ui/sheet/SheetDescription.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/Components/ui/sheet/SheetFooter.vue b/resources/js/Components/ui/sheet/SheetFooter.vue new file mode 100644 index 00000000..37e1bd47 --- /dev/null +++ b/resources/js/Components/ui/sheet/SheetFooter.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/Components/ui/sheet/SheetHeader.vue b/resources/js/Components/ui/sheet/SheetHeader.vue new file mode 100644 index 00000000..95a3a2fa --- /dev/null +++ b/resources/js/Components/ui/sheet/SheetHeader.vue @@ -0,0 +1,16 @@ + + + diff --git a/resources/js/Components/ui/sheet/SheetTitle.vue b/resources/js/Components/ui/sheet/SheetTitle.vue new file mode 100644 index 00000000..2ecee944 --- /dev/null +++ b/resources/js/Components/ui/sheet/SheetTitle.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/Components/ui/sheet/SheetTrigger.vue b/resources/js/Components/ui/sheet/SheetTrigger.vue new file mode 100644 index 00000000..ee0c12ff --- /dev/null +++ b/resources/js/Components/ui/sheet/SheetTrigger.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/Components/ui/sheet/index.ts b/resources/js/Components/ui/sheet/index.ts new file mode 100644 index 00000000..4c4e77af --- /dev/null +++ b/resources/js/Components/ui/sheet/index.ts @@ -0,0 +1,31 @@ +import { cva, type VariantProps } from 'class-variance-authority' + +export { default as Sheet } from './Sheet.vue' +export { default as SheetClose } from './SheetClose.vue' +export { default as SheetContent } from './SheetContent.vue' +export { default as SheetDescription } from './SheetDescription.vue' +export { default as SheetFooter } from './SheetFooter.vue' +export { default as SheetHeader } from './SheetHeader.vue' +export { default as SheetTitle } from './SheetTitle.vue' +export { default as SheetTrigger } from './SheetTrigger.vue' + +export const sheetVariants = cva( + 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500', + { + variants: { + side: { + top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top', + bottom: + 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom', + left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm', + right: + 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm', + }, + }, + defaultVariants: { + side: 'right', + }, + }, +) + +export type SheetVariants = VariantProps diff --git a/resources/js/Components/ui/sidebar/Sidebar.vue b/resources/js/Components/ui/sidebar/Sidebar.vue new file mode 100644 index 00000000..1627918c --- /dev/null +++ b/resources/js/Components/ui/sidebar/Sidebar.vue @@ -0,0 +1,91 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarContent.vue b/resources/js/Components/ui/sidebar/SidebarContent.vue new file mode 100644 index 00000000..317c813e --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarContent.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarFooter.vue b/resources/js/Components/ui/sidebar/SidebarFooter.vue new file mode 100644 index 00000000..c606e6fa --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarFooter.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarGroup.vue b/resources/js/Components/ui/sidebar/SidebarGroup.vue new file mode 100644 index 00000000..72f9b0ad --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarGroup.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarGroupAction.vue b/resources/js/Components/ui/sidebar/SidebarGroupAction.vue new file mode 100644 index 00000000..2ae550f6 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarGroupAction.vue @@ -0,0 +1,27 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarGroupContent.vue b/resources/js/Components/ui/sidebar/SidebarGroupContent.vue new file mode 100644 index 00000000..7bbafae2 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarGroupContent.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarGroupLabel.vue b/resources/js/Components/ui/sidebar/SidebarGroupLabel.vue new file mode 100644 index 00000000..dbe34e14 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarGroupLabel.vue @@ -0,0 +1,24 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarHeader.vue b/resources/js/Components/ui/sidebar/SidebarHeader.vue new file mode 100644 index 00000000..2e95b03e --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarHeader.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarInput.vue b/resources/js/Components/ui/sidebar/SidebarInput.vue new file mode 100644 index 00000000..dd05fcdc --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarInput.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarInset.vue b/resources/js/Components/ui/sidebar/SidebarInset.vue new file mode 100644 index 00000000..0cc6bc54 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarInset.vue @@ -0,0 +1,20 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarMenu.vue b/resources/js/Components/ui/sidebar/SidebarMenu.vue new file mode 100644 index 00000000..e4e476d3 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarMenu.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarMenuAction.vue b/resources/js/Components/ui/sidebar/SidebarMenuAction.vue new file mode 100644 index 00000000..11563304 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarMenuAction.vue @@ -0,0 +1,34 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarMenuBadge.vue b/resources/js/Components/ui/sidebar/SidebarMenuBadge.vue new file mode 100644 index 00000000..3dc03914 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarMenuBadge.vue @@ -0,0 +1,25 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarMenuButton.vue b/resources/js/Components/ui/sidebar/SidebarMenuButton.vue new file mode 100644 index 00000000..c2bffa52 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarMenuButton.vue @@ -0,0 +1,51 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarMenuButtonChild.vue b/resources/js/Components/ui/sidebar/SidebarMenuButtonChild.vue new file mode 100644 index 00000000..eea80614 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarMenuButtonChild.vue @@ -0,0 +1,33 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarMenuItem.vue b/resources/js/Components/ui/sidebar/SidebarMenuItem.vue new file mode 100644 index 00000000..1e7ae212 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarMenuItem.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarMenuSkeleton.vue b/resources/js/Components/ui/sidebar/SidebarMenuSkeleton.vue new file mode 100644 index 00000000..19b631f0 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarMenuSkeleton.vue @@ -0,0 +1,33 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarMenuSub.vue b/resources/js/Components/ui/sidebar/SidebarMenuSub.vue new file mode 100644 index 00000000..dc6cd731 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarMenuSub.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarMenuSubButton.vue b/resources/js/Components/ui/sidebar/SidebarMenuSubButton.vue new file mode 100644 index 00000000..ed144987 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarMenuSubButton.vue @@ -0,0 +1,35 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarMenuSubItem.vue b/resources/js/Components/ui/sidebar/SidebarMenuSubItem.vue new file mode 100644 index 00000000..b04030b0 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarMenuSubItem.vue @@ -0,0 +1,9 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarProvider.vue b/resources/js/Components/ui/sidebar/SidebarProvider.vue new file mode 100644 index 00000000..7c55a032 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarProvider.vue @@ -0,0 +1,79 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarRail.vue b/resources/js/Components/ui/sidebar/SidebarRail.vue new file mode 100644 index 00000000..408471bb --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarRail.vue @@ -0,0 +1,32 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarSeparator.vue b/resources/js/Components/ui/sidebar/SidebarSeparator.vue new file mode 100644 index 00000000..0455c934 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarSeparator.vue @@ -0,0 +1,18 @@ + + + diff --git a/resources/js/Components/ui/sidebar/SidebarTrigger.vue b/resources/js/Components/ui/sidebar/SidebarTrigger.vue new file mode 100644 index 00000000..98f6ef29 --- /dev/null +++ b/resources/js/Components/ui/sidebar/SidebarTrigger.vue @@ -0,0 +1,26 @@ + + + diff --git a/resources/js/Components/ui/sidebar/index.ts b/resources/js/Components/ui/sidebar/index.ts new file mode 100644 index 00000000..b137821c --- /dev/null +++ b/resources/js/Components/ui/sidebar/index.ts @@ -0,0 +1,51 @@ +import { cva, type VariantProps } from 'class-variance-authority' + +export { default as Sidebar } from './Sidebar.vue' +export { default as SidebarContent } from './SidebarContent.vue' +export { default as SidebarFooter } from './SidebarFooter.vue' +export { default as SidebarGroup } from './SidebarGroup.vue' +export { default as SidebarGroupAction } from './SidebarGroupAction.vue' +export { default as SidebarGroupContent } from './SidebarGroupContent.vue' +export { default as SidebarGroupLabel } from './SidebarGroupLabel.vue' +export { default as SidebarHeader } from './SidebarHeader.vue' +export { default as SidebarInput } from './SidebarInput.vue' +export { default as SidebarInset } from './SidebarInset.vue' +export { default as SidebarMenu } from './SidebarMenu.vue' +export { default as SidebarMenuAction } from './SidebarMenuAction.vue' +export { default as SidebarMenuBadge } from './SidebarMenuBadge.vue' +export { default as SidebarMenuButton } from './SidebarMenuButton.vue' +export { default as SidebarMenuItem } from './SidebarMenuItem.vue' +export { default as SidebarMenuSkeleton } from './SidebarMenuSkeleton.vue' +export { default as SidebarMenuSub } from './SidebarMenuSub.vue' +export { default as SidebarMenuSubButton } from './SidebarMenuSubButton.vue' +export { default as SidebarMenuSubItem } from './SidebarMenuSubItem.vue' +export { default as SidebarProvider } from './SidebarProvider.vue' +export { default as SidebarRail } from './SidebarRail.vue' +export { default as SidebarSeparator } from './SidebarSeparator.vue' +export { default as SidebarTrigger } from './SidebarTrigger.vue' + +export { useSidebar } from './utils' + +export const sidebarMenuButtonVariants = cva( + 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none 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', + { + variants: { + variant: { + default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', + outline: + 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]', + }, + size: { + default: 'h-8 text-sm', + sm: 'h-7 text-xs', + lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) + +export type SidebarMenuButtonVariants = VariantProps diff --git a/resources/js/Components/ui/sidebar/utils.ts b/resources/js/Components/ui/sidebar/utils.ts new file mode 100644 index 00000000..3ded66c4 --- /dev/null +++ b/resources/js/Components/ui/sidebar/utils.ts @@ -0,0 +1,19 @@ +import type { ComputedRef, Ref } from 'vue' +import { createContext } from 'radix-vue' + +export const SIDEBAR_COOKIE_NAME = 'sidebar:state' +export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 +export const SIDEBAR_WIDTH = '16rem' +export const SIDEBAR_WIDTH_MOBILE = '18rem' +export const SIDEBAR_WIDTH_ICON = '3rem' +export const SIDEBAR_KEYBOARD_SHORTCUT = 'b' + +export const [useSidebar, provideSidebarContext] = createContext<{ + state: ComputedRef<'expanded' | 'collapsed'> + open: Ref + setOpen: (value: boolean) => void + isMobile: Ref + openMobile: Ref + setOpenMobile: (value: boolean) => void + toggleSidebar: () => void +}>('Sidebar') diff --git a/resources/js/Components/ui/skeleton/Skeleton.vue b/resources/js/Components/ui/skeleton/Skeleton.vue new file mode 100644 index 00000000..a323a640 --- /dev/null +++ b/resources/js/Components/ui/skeleton/Skeleton.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/Components/ui/skeleton/index.ts b/resources/js/Components/ui/skeleton/index.ts new file mode 100644 index 00000000..be21fad3 --- /dev/null +++ b/resources/js/Components/ui/skeleton/index.ts @@ -0,0 +1 @@ +export { default as Skeleton } from './Skeleton.vue' diff --git a/resources/js/Components/ui/tooltip/Tooltip.vue b/resources/js/Components/ui/tooltip/Tooltip.vue new file mode 100644 index 00000000..b421f0fe --- /dev/null +++ b/resources/js/Components/ui/tooltip/Tooltip.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/Components/ui/tooltip/TooltipContent.vue b/resources/js/Components/ui/tooltip/TooltipContent.vue new file mode 100644 index 00000000..08a14367 --- /dev/null +++ b/resources/js/Components/ui/tooltip/TooltipContent.vue @@ -0,0 +1,31 @@ + + + diff --git a/resources/js/Components/ui/tooltip/TooltipProvider.vue b/resources/js/Components/ui/tooltip/TooltipProvider.vue new file mode 100644 index 00000000..816505d6 --- /dev/null +++ b/resources/js/Components/ui/tooltip/TooltipProvider.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/Components/ui/tooltip/TooltipTrigger.vue b/resources/js/Components/ui/tooltip/TooltipTrigger.vue new file mode 100644 index 00000000..f5b0e57f --- /dev/null +++ b/resources/js/Components/ui/tooltip/TooltipTrigger.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/Components/ui/tooltip/index.ts b/resources/js/Components/ui/tooltip/index.ts new file mode 100644 index 00000000..5ab96536 --- /dev/null +++ b/resources/js/Components/ui/tooltip/index.ts @@ -0,0 +1,4 @@ +export { default as Tooltip } from './Tooltip.vue' +export { default as TooltipContent } from './TooltipContent.vue' +export { default as TooltipProvider } from './TooltipProvider.vue' +export { default as TooltipTrigger } from './TooltipTrigger.vue' diff --git a/resources/js/Layouts/AppLayout.vue b/resources/js/Layouts/AppLayout.vue new file mode 100644 index 00000000..23cccdee --- /dev/null +++ b/resources/js/Layouts/AppLayout.vue @@ -0,0 +1,50 @@ + + + \ No newline at end of file diff --git a/resources/js/Layouts/AuthLayout.vue b/resources/js/Layouts/AuthLayout.vue new file mode 100644 index 00000000..2b6ec3f9 --- /dev/null +++ b/resources/js/Layouts/AuthLayout.vue @@ -0,0 +1,40 @@ + + + \ No newline at end of file diff --git a/resources/js/Layouts/GuestLayout.vue b/resources/js/Layouts/GuestLayout.vue new file mode 100644 index 00000000..da15434a --- /dev/null +++ b/resources/js/Layouts/GuestLayout.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/Pages/Auth/Login.vue b/resources/js/Pages/Auth/Login.vue new file mode 100644 index 00000000..e1662c2f --- /dev/null +++ b/resources/js/Pages/Auth/Login.vue @@ -0,0 +1,112 @@ + + + + \ No newline at end of file diff --git a/resources/js/Pages/Auth/Register.vue b/resources/js/Pages/Auth/Register.vue new file mode 100644 index 00000000..cee1d53a --- /dev/null +++ b/resources/js/Pages/Auth/Register.vue @@ -0,0 +1,136 @@ + + + diff --git a/resources/js/Pages/Dashboard.vue b/resources/js/Pages/Dashboard.vue new file mode 100644 index 00000000..3922aa00 --- /dev/null +++ b/resources/js/Pages/Dashboard.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/bootstrap.ts b/resources/js/bootstrap.ts index 5f1390b0..2da4a4b8 100644 --- a/resources/js/bootstrap.ts +++ b/resources/js/bootstrap.ts @@ -1,4 +1,4 @@ -import axios from 'axios'; -window.axios = axios; +// import axios from 'axios'; +// window.axios = axios; -window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; +// window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; diff --git a/resources/js/utils.ts b/resources/js/utils.ts new file mode 100644 index 00000000..d32b0fe6 --- /dev/null +++ b/resources/js/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php deleted file mode 100644 index 979e82a6..00000000 --- a/resources/views/welcome.blade.php +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - Laravel - - - - - - - @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot'))) - @vite(['resources/css/app.css', 'resources/js/app.js']) - @else - - @endif - - - - - diff --git a/routes/auth.php b/routes/auth.php new file mode 100644 index 00000000..0da99e6b --- /dev/null +++ b/routes/auth.php @@ -0,0 +1,59 @@ +group(function () { + Route::get('register', [RegisteredUserController::class, 'create']) + ->name('register'); + + Route::post('register', [RegisteredUserController::class, 'store']); + + Route::get('login', [AuthenticatedSessionController::class, 'create']) + ->name('login'); + + Route::post('login', [AuthenticatedSessionController::class, 'store']); + + // Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) + // ->name('password.request'); + + // Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) + // ->name('password.email'); + + // Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) + // ->name('password.reset'); + + // Route::post('reset-password', [NewPasswordController::class, 'store']) + // ->name('password.store'); +}); + +Route::middleware('auth')->group(function () { +// Route::get('verify-email', EmailVerificationPromptController::class) +// ->name('verification.notice'); + +// Route::get('verify-email/{id}/{hash}', VerifyEmailController::class) +// ->middleware(['signed', 'throttle:6,1']) +// ->name('verification.verify'); + +// Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store']) +// ->middleware('throttle:6,1') +// ->name('verification.send'); + +// Route::get('confirm-password', [ConfirmablePasswordController::class, 'show']) +// ->name('password.confirm'); + +// Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); + +// Route::put('password', [PasswordController::class, 'update'])->name('password.update'); + + Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) + ->name('logout'); +}); diff --git a/routes/web.php b/routes/web.php index 2255166e..28f4c301 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,4 +11,18 @@ 'laravelVersion' => Application::VERSION, 'phpVersion' => PHP_VERSION, ]); +})->name('home'); + +Route::get('dashboard', function(){ + return Inertia::render('Dashboard', [ + 'name' => config('app.name'), + ]); +})->middleware(['auth', 'verified'])->name('dashboard'); + +Route::middleware('auth')->group(function () { + Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); + Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); + Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); }); + +require __DIR__.'/auth.php'; \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index ce0c57fc..00000000 --- a/tailwind.config.js +++ /dev/null @@ -1,20 +0,0 @@ -import defaultTheme from 'tailwindcss/defaultTheme'; - -/** @type {import('tailwindcss').Config} */ -export default { - content: [ - './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', - './storage/framework/views/*.php', - './resources/**/*.blade.php', - './resources/**/*.js', - './resources/**/*.vue', - ], - theme: { - extend: { - fontFamily: { - sans: ['Figtree', ...defaultTheme.fontFamily.sans], - }, - }, - }, - plugins: [], -}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..c9c555d9 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,111 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/vite.config.ts b/vite.config.ts index b7c18b39..b6411c57 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -6,7 +6,7 @@ import vue from '@vitejs/plugin-vue'; export default defineConfig({ plugins: [ laravel({ - input: ['resources/css/app.css', 'resources/js/app.js'], + input: ['resources/css/app.css', '@/app.js'], refresh: true, }), tailwindcss(), From 1d787b43b2ea64800f17433de8cb58ae31d10203 Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Fri, 13 Dec 2024 17:02:56 -0500 Subject: [PATCH 03/92] updating correct .env with creds --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0bfc0a62..b88b9f88 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,13 @@ To install the starter kit, run the following command: 1. git clone https://github.com/laravel/vue-starter-kit 2. cd vue-starter-kit -3. composer run dev +3. copy .env.example .env +4. install dependencies `npm install && composer install` +5. run migrations `php artisan migrate` +6. add encryption key `php artisan key:generate` +7. start the asset watcher `npm run dev` + +Visit the URL for your app and you're good to go! ## Icons From e39f56738ad93e9ab6e71c021aa30853a6750166 Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Fri, 13 Dec 2024 17:03:38 -0500 Subject: [PATCH 04/92] Adding updated readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b88b9f88..955cfeb3 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ To install the starter kit, run the following command: 1. git clone https://github.com/laravel/vue-starter-kit 2. cd vue-starter-kit +3. git checkout develop 3. copy .env.example .env 4. install dependencies `npm install && composer install` 5. run migrations `php artisan migrate` From 55f55fb4e66bdd6b3d34d09fd7b02a61f0de07d0 Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Mon, 30 Dec 2024 16:36:17 -0500 Subject: [PATCH 05/92] downgrading back to Tailwind v3 until official release is out --- .gitignore | 1 + components.json | 17 +- package-lock.json | 1819 ++++++++++++++++++++++-------- package.json | 11 +- postcss.config.js | 6 + resources/css/app.css | 226 ++-- resources/css/customizations.css | 60 - resources/js/app.ts | 19 +- resources/js/bootstrap.ts | 6 +- resources/views/app.blade.php | 2 +- tailwind.config.js | 82 ++ vite.config.ts | 29 +- 12 files changed, 1602 insertions(+), 676 deletions(-) create mode 100644 postcss.config.js delete mode 100644 resources/css/customizations.css create mode 100644 tailwind.config.js diff --git a/.gitignore b/.gitignore index 1c9cf794..aa4d7a87 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ .env.production .phpactor.json .phpunit.result.cache +.windsurfrules Homestead.json Homestead.yaml auth.json diff --git a/components.json b/components.json index fe71f255..1fc14731 100644 --- a/components.json +++ b/components.json @@ -1,8 +1,8 @@ { - "$schema": "https://shadcn-vue.com/schema.json", + "$schema": "https://ui.shadcn.com/schema.json", "style": "default", - "typescript": true, - "tsConfigPath": "./tsconfig.json", + "rsc": false, + "tsx": true, "tailwind": { "config": "tailwind.config.js", "css": "resources/css/app.css", @@ -10,9 +10,12 @@ "cssVariables": true, "prefix": "" }, - "framework": "laravel", "aliases": { - "components": "resources/js/Components", - "utils": "@/utils.ts" - } + "components": "@/Components", + "utils": "@/lib/utils", + "ui": "@/Components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index be0f2128..96cc4da8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,31 +5,44 @@ "packages": { "": { "dependencies": { - "@tailwindcss/postcss": "^0.0.0-development.1", - "@tailwindcss/vite": "^4.0.0-beta.6", "@vueuse/core": "^12.0.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide": "^0.468.0", "lucide-vue-next": "^0.468.0", "radix-vue": "^1.9.11", - "tailwind-merge": "^2.5.5" + "tailwind-merge": "^2.5.5", + "tailwindcss-animate": "^1.0.7" }, "devDependencies": { "@inertiajs/vue3": "^2.0.0-beta.3", "@tailwindcss/forms": "^0.5.3", + "@types/node": "^22.10.2", "@vitejs/plugin-vue": "^5.2.1", "autoprefixer": "^10.4.20", "axios": "^1.7.4", "concurrently": "^9.0.1", "laravel-vite-plugin": "^1.0", - "tailwindcss": "^4.0.0-beta.6", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.1", "typescript": "^5.2.2", "vite": "^6.0.3", "vue": "^3.5.13", "vue-tsc": "^2.1.10" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", @@ -83,6 +96,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -99,6 +113,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -115,6 +130,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -131,6 +147,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -147,6 +164,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -163,6 +181,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -179,6 +198,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -195,6 +215,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -211,6 +232,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -227,6 +249,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -243,6 +266,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -259,6 +283,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -275,6 +300,7 @@ "cpu": [ "mips64el" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -291,6 +317,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -307,6 +334,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -323,6 +351,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -339,6 +368,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -355,6 +385,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -371,6 +402,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -387,6 +419,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -403,6 +436,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -419,6 +453,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -435,6 +470,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -451,6 +487,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -567,12 +604,116 @@ "@swc/helpers": "^0.5.0" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "license": "MIT" }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.28.1", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz", @@ -580,6 +721,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -593,6 +735,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -606,6 +749,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -619,6 +763,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -632,6 +777,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -645,6 +791,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -658,6 +805,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -671,6 +819,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -684,6 +833,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -697,6 +847,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -710,6 +861,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -723,6 +875,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -736,6 +889,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -749,6 +903,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -762,6 +917,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -775,6 +931,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -788,6 +945,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -801,6 +959,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -814,6 +973,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -842,389 +1002,119 @@ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20" } }, - "node_modules/@tailwindcss/node": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.0-beta.6.tgz", - "integrity": "sha512-W07J19+05rRFKfk4sVtkNTb4iuGTI3BU6Ip/iEbb/w5NvaP+fSFK31OYFpJ+CXEWrbNgidUg46BQpw4Y1gophA==", + "node_modules/@tanstack/virtual-core": { + "version": "3.10.9", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.10.9.tgz", + "integrity": "sha512-kBknKOKzmeR7lN+vSadaKWXaLS0SZZG+oqpQ/k80Q6g9REn6zRHS/ZYdrIzHnpHgy/eWs00SujveUN/GJT2qTw==", "license": "MIT", - "dependencies": { - "enhanced-resolve": "^5.17.1", - "jiti": "^2.4.0", - "tailwindcss": "4.0.0-beta.6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@tailwindcss/oxide": { - "version": "0.0.0-development.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-0.0.0-development.1.tgz", - "integrity": "sha512-dHF8RdHDyQwDGlddjhjeFoAfM58qBb7epxxA9pi2tq+iy3by52lbOevz/m+5r4HoallnFq0hJyrjEcSEcWIFQA==", + "node_modules/@tanstack/vue-virtual": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.11.1.tgz", + "integrity": "sha512-HEmblQrCkbadvcuis8MBCHvlTy9iUTFlEWfXy5nTxvSrauWPZ4Pyv0yOzXrDhnTXUMxJtpdUrov05RCusrBQ3A==", "license": "MIT", - "engines": { - "node": ">= 10" + "dependencies": { + "@tanstack/virtual-core": "3.10.9" }, - "optionalDependencies": { - "@tailwindcss/oxide-darwin-arm64": "0.0.0-development.1", - "@tailwindcss/oxide-darwin-x64": "0.0.0", - "@tailwindcss/oxide-freebsd-x64": "0.0.0", - "@tailwindcss/oxide-linux-arm-gnueabihf": "0.0.0", - "@tailwindcss/oxide-linux-arm64-gnu": "0.0.0", - "@tailwindcss/oxide-linux-arm64-musl": "0.0.0", - "@tailwindcss/oxide-linux-x64-gnu": "0.0.0", - "@tailwindcss/oxide-linux-x64-musl": "0.0.0", - "@tailwindcss/oxide-win32-x64-msvc": "0.0.0" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.0-beta.6.tgz", - "integrity": "sha512-yrUH/IfhkJWSYjF86UxpwrfaO866MjOhVQKG+wCgp0+YZGwirs8vX//a+8Y0SpEJrO0PVgmUU7xbsIM1EQWyTw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.0.0" } }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "0.0.0-development.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-0.0.0-development.1.tgz", - "integrity": "sha512-NJAmnxZDJBClJuQhej1hFQ/sQ2LvtyvEucCs25eSN+GQbb06JdfjCDbI3HjORkHYJpu5z2eHerU1dUHx31V3FQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.0-beta.6.tgz", - "integrity": "sha512-zFc/TTBkDNLOKl/G9i1JOpg0AgrUOgBcSgURT/E0RsF0ZcKdiIjcyNswNThmjQnj+JAA8QL1Rct+04dH5j7Xjw==", - "cpu": [ - "x64" - ], + "node_modules/@types/node": { + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "undici-types": "~6.20.0" } }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.0-beta.6.tgz", - "integrity": "sha512-J3+uiPmKTeyefQBy4F0fz5sBQOj9eUTke6W/do/CplM5zXORQVCOKnrY2CPyDpN9bh4TYutldoiI0BP0Yo2ShA==", - "cpu": [ - "x64" - ], + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">= 10" + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" } }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.0-beta.6.tgz", - "integrity": "sha512-oWAwN6LjX2KH8ej0a/Uc1qnuy0ZSyAwOoJ1Fm2s38ipDmvxC8ARkNfWbYKN/D7dFhY7T3NMV4qjzamFKsrgchQ==", - "cpu": [ - "arm" - ], + "node_modules/@volar/language-core": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.10.tgz", + "integrity": "sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@volar/source-map": "2.4.10" } }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.0-beta.6.tgz", - "integrity": "sha512-p5jDtF6P3gOPl4eOH0YsN09yx/kXqLbgy4VMnOA9DB6Nlt+RVwM+JDa+RK/GAHL/qkAqO6YBEHeBURbWOeSuBw==", - "cpu": [ - "arm64" - ], + "node_modules/@volar/source-map": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.10.tgz", + "integrity": "sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.10.tgz", + "integrity": "sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@volar/language-core": "2.4.10", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" } }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.0-beta.6.tgz", - "integrity": "sha512-ZI92S4LFuXx50gzkv98RXmybbRga183Y3NwBrQ+PfbRUOgDR0/tyT3Zh4CF/0eL9zzxa1mIE7cBbQjXNnejYqQ==", - "cpu": [ - "arm64" - ], + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" } }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.0-beta.6.tgz", - "integrity": "sha512-F0z48W0Yksrw+xg0GK54wUFa0KmFO9lpbKy2u/2yZtHs+ZwJ55PjdljjW1OJzEHpD81AT+8DT1PhNCkaqpOlqg==", - "cpu": [ - "x64" - ], + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.0-beta.6.tgz", - "integrity": "sha512-GQx5f3qzLuAO7s1NTGY8PDhiEvrRTgYQhGN8HzH1LhP+URSbwgysyHKWFacejWrZS2azr6jlE84usxk8yn/7Xg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.0-beta.6.tgz", - "integrity": "sha512-DUs1A5rVK1Da7XvY2FzVgS+5vinwVDOeXgOsL6dblL8ag70wlwzZjyB3YRbxKRekPynwKdILgIv8/TYE3cv7AQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.0-beta.6.tgz", - "integrity": "sha512-VRsHAs3QBZa88N2Bp+LOV1vxr6f82L3KtamLIhyNTYXnEQjJxazaGwVow0VzN9sru2MTvcXjVFwdd9hUbeBKbA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/postcss": { - "version": "0.0.0-development.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-0.0.0-development.1.tgz", - "integrity": "sha512-PuojQKMCyGEzZLWjtu525jQoMoqOWXYGptkxlBIwOYK6NQbBKQca4AdlMYe8ZmiIpHObHBbOkIEbIrIH/wb68w==", - "dependencies": { - "@tailwindcss/oxide": "0.0.0-development.1", - "tailwindcss": "0.0.0-development.1" - } - }, - "node_modules/@tailwindcss/postcss/node_modules/tailwindcss": { - "version": "0.0.0-development.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-0.0.0-development.1.tgz", - "integrity": "sha512-6mOfJb2JWT5z5J8DnLqAaWsAqZrMnUSm5sCqDm7TfAQwRF/OL/Xp0rKUryGRluFFoGNNG7CiNzkgn71Hnl0e7g==", - "dependencies": { - "@tailwindcss/oxide": "0.0.0-development.1", - "lightningcss": "^1.23.0" - }, - "bin": { - "tailwindcss": "dist/cli.js" - } - }, - "node_modules/@tailwindcss/vite": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.0-beta.6.tgz", - "integrity": "sha512-SDlW8wrfhoGvEmNdbxdjPD0RJV5ErPegeJQFXNlS6CF815tzMMTekToIeMJphvwUO6w2TLSjvO9w3F9Z0ElMgQ==", - "license": "MIT", - "dependencies": { - "@tailwindcss/node": "4.0.0-beta.6", - "@tailwindcss/oxide": "4.0.0-beta.6", - "lightningcss": "^1.26.0", - "tailwindcss": "4.0.0-beta.6" - }, - "peerDependencies": { - "vite": "^5.2.0 || ^6" - } - }, - "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.0-beta.6.tgz", - "integrity": "sha512-i/Fg/rXYwzV7OJEXbcwjNVkYPgnyfLdYXtduOX7Kvf686xn6jR/k6bhl9fVkQcDb/ujyKzNjD2POAjwhHAC8aw==", - "license": "MIT", - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.0.0-beta.6", - "@tailwindcss/oxide-darwin-arm64": "4.0.0-beta.6", - "@tailwindcss/oxide-darwin-x64": "4.0.0-beta.6", - "@tailwindcss/oxide-freebsd-x64": "4.0.0-beta.6", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.0-beta.6", - "@tailwindcss/oxide-linux-arm64-gnu": "4.0.0-beta.6", - "@tailwindcss/oxide-linux-arm64-musl": "4.0.0-beta.6", - "@tailwindcss/oxide-linux-x64-gnu": "4.0.0-beta.6", - "@tailwindcss/oxide-linux-x64-musl": "4.0.0-beta.6", - "@tailwindcss/oxide-win32-arm64-msvc": "4.0.0-beta.6", - "@tailwindcss/oxide-win32-x64-msvc": "4.0.0-beta.6" - } - }, - "node_modules/@tailwindcss/vite/node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.0-beta.6.tgz", - "integrity": "sha512-WqFHSD/kocp8rH3KYJow8zTatTEMfdrkZu2KL8nnKfuAEk+juJuUnOQaXDmfsYNQSkGjtnGdcB/fueq4UtUSvw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tanstack/virtual-core": { - "version": "3.10.9", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.10.9.tgz", - "integrity": "sha512-kBknKOKzmeR7lN+vSadaKWXaLS0SZZG+oqpQ/k80Q6g9REn6zRHS/ZYdrIzHnpHgy/eWs00SujveUN/GJT2qTw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@tanstack/vue-virtual": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.11.1.tgz", - "integrity": "sha512-HEmblQrCkbadvcuis8MBCHvlTy9iUTFlEWfXy5nTxvSrauWPZ4Pyv0yOzXrDhnTXUMxJtpdUrov05RCusrBQ3A==", - "license": "MIT", - "dependencies": { - "@tanstack/virtual-core": "3.10.9" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "vue": "^2.7.0 || ^3.0.0" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "license": "MIT" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", - "license": "MIT" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", - "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@volar/language-core": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.10.tgz", - "integrity": "sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "2.4.10" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.10.tgz", - "integrity": "sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@volar/typescript": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.10.tgz", - "integrity": "sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.10", - "path-browserify": "^1.0.1", - "vscode-uri": "^3.0.8" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", - "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.13", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", - "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.13", - "@vue/shared": "3.5.13" + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/compiler-sfc": { @@ -1421,11 +1311,22 @@ "dev": true, "license": "MIT" }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -1437,6 +1338,31 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, "node_modules/aria-hidden": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", @@ -1510,19 +1436,41 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browserslist": { "version": "4.24.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", @@ -1606,6 +1554,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001688", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz", @@ -1657,6 +1614,42 @@ "node": ">=8" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/class-variance-authority": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", @@ -1760,7 +1753,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -1773,7 +1765,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -1789,6 +1780,15 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/concurrently": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.0.tgz", @@ -1815,6 +1815,32 @@ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -1876,7 +1902,10 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, "license": "Apache-2.0", + "optional": true, + "peer": true, "bin": { "detect-libc": "bin/detect-libc.js" }, @@ -1884,6 +1913,18 @@ "node": ">=0.10" } }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, "node_modules/dunder-proto": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", @@ -1899,6 +1940,12 @@ "node": ">= 0.4" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, "node_modules/electron-to-chromium": { "version": "1.5.73", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", @@ -1906,18 +1953,11 @@ "dev": true, "license": "ISC" }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" }, "node_modules/entities": { "version": "4.5.0", @@ -1968,6 +2008,7 @@ "version": "0.24.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -2025,6 +2066,55 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "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.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", @@ -2046,6 +2136,22 @@ } } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", @@ -2093,7 +2199,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2134,6 +2239,38 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -2147,12 +2284,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2193,7 +2324,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -2212,21 +2342,101 @@ "he": "bin/he" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jiti": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.1.tgz", "integrity": "sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==", + "dev": true, "license": "MIT", + "optional": true, + "peer": true, "bin": { "jiti": "lib/jiti-cli.mjs" } @@ -2255,7 +2465,10 @@ "version": "1.28.2", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.28.2.tgz", "integrity": "sha512-ePLRrbt3fgjXI5VFZOLbvkLD5ZRuxGKm+wJ3ujCqBtL3NanDHPo/5zicR5uEKAPiIjBYF99BM4K4okvMznjkVA==", + "dev": true, "license": "MPL-2.0", + "optional": true, + "peer": true, "dependencies": { "detect-libc": "^1.0.3" }, @@ -2286,11 +2499,13 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "darwin" ], + "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2306,11 +2521,13 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "darwin" ], + "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2326,11 +2543,13 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2346,11 +2565,13 @@ "cpu": [ "arm" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2366,11 +2587,13 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2386,11 +2609,13 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2406,11 +2631,13 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2426,11 +2653,13 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2446,11 +2675,13 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "win32" ], + "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2466,11 +2697,13 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "win32" ], + "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -2479,6 +2712,24 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -2500,6 +2751,12 @@ "dev": true, "license": "MIT" }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, "node_modules/lucide": { "version": "0.468.0", "resolved": "https://registry.npmjs.org/lucide/-/lucide-0.468.0.tgz", @@ -2534,6 +2791,28 @@ "node": ">= 0.4" } }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -2571,7 +2850,6 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -2583,6 +2861,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/muggle-string": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", @@ -2590,6 +2877,17 @@ "dev": true, "license": "MIT" }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", @@ -2615,6 +2913,15 @@ "dev": true, "license": "MIT" }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", @@ -2625,6 +2932,24 @@ "node": ">=0.10.0" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", @@ -2638,6 +2963,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -2645,6 +2976,37 @@ "dev": true, "license": "MIT" }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -2655,7 +3017,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -2664,6 +3025,24 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/postcss": { "version": "8.4.49", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", @@ -2692,53 +3071,181 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", "dependencies": { - "side-channel": "^1.0.6" + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "engines": { - "node": ">=0.6" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.0.0" } }, - "node_modules/radix-vue": { - "version": "1.9.11", - "resolved": "https://registry.npmjs.org/radix-vue/-/radix-vue-1.9.11.tgz", - "integrity": "sha512-C+MtJ66jf8J28DO5bKgNwhGCi6WQYuEosD/tY/Orry9BTDcuF/Mps4HlFd2Tq4YlXF44BEPLQ2Paz89Mz70ZgA==", + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.6.7", - "@floating-ui/vue": "^1.1.0", - "@internationalized/date": "^3.5.4", - "@internationalized/number": "^3.5.3", - "@tanstack/vue-virtual": "^3.8.1", - "@vueuse/core": "^10.11.0", - "@vueuse/shared": "^10.11.0", - "aria-hidden": "^1.2.4", - "defu": "^6.1.4", - "fast-deep-equal": "^3.1.3", - "nanoid": "^5.0.7" + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/radix-vue": { + "version": "1.9.11", + "resolved": "https://registry.npmjs.org/radix-vue/-/radix-vue-1.9.11.tgz", + "integrity": "sha512-C+MtJ66jf8J28DO5bKgNwhGCi6WQYuEosD/tY/Orry9BTDcuF/Mps4HlFd2Tq4YlXF44BEPLQ2Paz89Mz70ZgA==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.6.7", + "@floating-ui/vue": "^1.1.0", + "@internationalized/date": "^3.5.4", + "@internationalized/number": "^3.5.3", + "@tanstack/vue-virtual": "^3.8.1", + "@vueuse/core": "^10.11.0", + "@vueuse/shared": "^10.11.0", + "aria-hidden": "^1.2.4", + "defu": "^6.1.4", + "fast-deep-equal": "^3.1.3", + "nanoid": "^5.0.7" }, "peerDependencies": { "vue": ">= 3.2.0" @@ -2812,6 +3319,27 @@ "node": "^18 || >=20" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2822,10 +3350,41 @@ "node": ">=0.10.0" } }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rollup": { "version": "4.28.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.1.tgz", "integrity": "sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.6" @@ -2860,6 +3419,29 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -2901,6 +3483,27 @@ "node": ">= 0.4" } }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/shell-quote": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", @@ -2990,6 +3593,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -2999,6 +3614,124 @@ "node": ">=0.10.0" } }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -3015,6 +3748,18 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/tailwind-merge": { "version": "2.5.5", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz", @@ -3026,18 +3771,91 @@ } }, "node_modules/tailwindcss": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.0-beta.6.tgz", - "integrity": "sha512-eCCuMk3H65w4J/QWkjxfeWoBSKbCD3E6Uj2LA6Xkkl4eMa1MXuwVpIU1RXcLIp+BVsXGEZMP7i7uJig7KxfAXQ==", - "license": "MIT" + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, "engines": { - "node": ">=6" + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, "node_modules/tree-kill": { @@ -3050,6 +3868,12 @@ "tree-kill": "cli.js" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -3070,6 +3894,13 @@ "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, "node_modules/update-browserslist-db": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", @@ -3101,10 +3932,17 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, "node_modules/vite": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.3.tgz", "integrity": "sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==", + "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.24.0", @@ -3229,6 +4067,109 @@ "typescript": ">=5.0.0" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -3244,8 +4185,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "license": "ISC", - "optional": true, - "peer": true, "bin": { "yaml": "bin.mjs" }, diff --git a/package.json b/package.json index f3049e5b..4bdae1c7 100644 --- a/package.json +++ b/package.json @@ -2,32 +2,33 @@ "private": true, "type": "module", "scripts": { - "build": "vue-tsc && vite build", + "build": "vite build", "dev": "vite" }, "devDependencies": { "@inertiajs/vue3": "^2.0.0-beta.3", "@tailwindcss/forms": "^0.5.3", + "@types/node": "^22.10.2", "@vitejs/plugin-vue": "^5.2.1", "autoprefixer": "^10.4.20", "axios": "^1.7.4", "concurrently": "^9.0.1", "laravel-vite-plugin": "^1.0", - "tailwindcss": "^4.0.0-beta.6", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.1", "typescript": "^5.2.2", "vite": "^6.0.3", "vue": "^3.5.13", "vue-tsc": "^2.1.10" }, "dependencies": { - "@tailwindcss/postcss": "^0.0.0-development.1", - "@tailwindcss/vite": "^4.0.0-beta.6", "@vueuse/core": "^12.0.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide": "^0.468.0", "lucide-vue-next": "^0.468.0", "radix-vue": "^1.9.11", - "tailwind-merge": "^2.5.5" + "tailwind-merge": "^2.5.5", + "tailwindcss-animate": "^1.0.7" } } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000..5a3d19ff --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} \ No newline at end of file diff --git a/resources/css/app.css b/resources/css/app.css index b887fe66..4559d263 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -1,154 +1,86 @@ -@import "tailwindcss"; -@import "./customizations.css"; - -/* Define the Shadcn UI CSS Variables */ -:root { - --background: hsl(0, 0%, 100%); - --foreground: #494949; - - --muted: hsl(0, 0%, 92%); - --muted-foreground: hsl(215.4 16.3% 56.9%); - - --accent: hsl(240, 9%, 98%); - --accent-foreground: hsl(0, 0%, 0%); - - --popover: #ffffff; - --popover-foreground: #444444; - - --border: hsl(0, 0%, 81%); - --input: hsl(0, 0%, 78%); - - --card: hsl(224 71% 4%); - --card-foreground: hsl(213 31% 91%); - - --primary: hsl(0, 0%, 7%); - --primary-foreground: hsl(0, 0%, 100%); - - --secondary: hsl(222.2 47.4% 11.2%); - --secondary-foreground: hsl(210 40% 98%); - - --destructive: hsl(0 63% 31%); - --destructive-foreground: hsl(210 40% 98%); - - --ring: hsl(216 34% 17%); - - --sidebar-background: 240 5.9% 10%; - --sidebar-foreground: 240 5.3% 26.1%; - --sidebar-primary: #000; - --sidebar-primary-foreground: #fff; - --sidebar-accent: #ececed; - --sidebar-accent-foreground: #09090f; - --sidebar-border: 220 13% 91%; - --sidebar-ring: 217.2 91.2% 59.8%; - --sidebar-width: 16rem; -} - -html.dark { - --background: hsl(224 71% 4%); - --foreground: hsl(213 31% 91%); - - --muted: hsl(223 47% 11%); - --muted-foreground: hsl(215.4 16.3% 56.9%); - - --accent: hsl(216 34% 17%); - --accent-foreground: hsl(210 40% 98%); - - --popover: hsl(224 71% 4%); - --popover-foreground: hsl(215 20.2% 65.1%); - - --border: hsl(216 34% 17%); - --input: hsl(216 34% 17%); - - --card: hsl(224 71% 4%); - --card-foreground: hsl(213 31% 91%); - - --primary: hsl(246, 100%, 48%); - --primary-foreground: hsl(222.2 47.4% 1.2%); - - --secondary: hsl(222.2 47.4% 11.2%); - --secondary-foreground: hsl(210 40% 98%); - - --destructive: hsl(0 63% 31%); - --destructive-foreground: hsl(210 40% 98%); - - --ring: hsl(216 34% 17%); +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + --ring: 0 0% 3.9%; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + --radius: 0.5rem; + --sidebar-background: 0 0% 98%; + --sidebar-foreground: 240 5.3% 26.1%; + --sidebar-primary: 240 5.9% 10%; + --sidebar-primary-foreground: 0 0% 98%; + --sidebar-accent: 240 4.8% 95.9%; + --sidebar-accent-foreground: 240 5.9% 10%; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8% + } - --sidebar-background: 240 5.9% 10%; - --sidebar-foreground: 240 4.8% 95.9%; - --sidebar-primary: 224.3 76.3% 48%; - --sidebar-primary-foreground: 0 0% 100%; - --sidebar-accent: 240 3.7% 15.9%; - --sidebar-accent-foreground: 240 4.8% 95.9%; - --sidebar-border: 240 3.7% 15.9%; - --sidebar-ring: 217.2 91.2% 59.8%; - --sidebar-width: 16rem; + .dark { + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 0 0% 9%; + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + --ring: 0 0% 83.1%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + --sidebar-background: 240 5.9% 10%; + --sidebar-foreground: 240 4.8% 95.9%; + --sidebar-primary: 6, 72%, 55%; + --sidebar-primary-foreground: 0 0% 100%; + --sidebar-accent: 240 3.7% 15.9%; + --sidebar-accent-foreground: 240 4.8% 95.9%; + --sidebar-border: 240 3.7% 15.9%; + --sidebar-ring: 217.2 91.2% 59.8% + } } - - - -@theme { - --color-mint-green: oklch(83.66% 0.125 176.45); - --color-baby-blue: oklch(85.61% 0.094 225.87); - /* Shadcn UI */ - --color-mint-green: oklch(83.66% 0.125 176.45); - --color-baby-blue: oklch(85.61% 0.094 225.87); - /* Shadcn UI */ - --radius: 0.5rem; - --color-border: var(--border); - --color-input: var(--input); - --color-ring: var(--ring); - --color-background: var(--background); - --color-foreground: var(--foreground); - - --color-primary: var(--primary); - --color-primary-foreground: var(--primary-foreground); - - --color-secondary: var(--secondary); - --color-secondary-foreground: var(--secondary-foreground); - - --color-destructive: var(--destructive); - --color-destructive-foreground: var(--destructive-foreground); - - --color-muted: var(--muted); - --color-muted-foreground: var(--muted-foreground); - - --color-accent: var(--accent); - --color-accent-foreground: var(--accent-foreground); - - --color-popover: var(--popover); - --color-popover-foreground: var(--popover-foreground); - - --color-card: var(--card); - --color-card-foreground: var(--card-foreground); - - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - - --font-family-poppins: var(--font-poppins); - --font-family-inter: var(--font-inter); - - --animate-accordion-down: accordion-down 0.2s ease-out; - --animate-accordion-up: accordion-up 0.2s ease-out; - - @keyframes accordion-down { - from { - height: 0; - } - - to { - height: var(--radix-accordion-content-height); - } +@layer base { + * { + @apply border-border; } - @keyframes accordion-up { - from { - height: var(--radix-accordion-content-height); - } - - to { - height: "0"; - } + body { + @apply bg-background text-foreground; } } \ No newline at end of file diff --git a/resources/css/customizations.css b/resources/css/customizations.css deleted file mode 100644 index 578fe9b1..00000000 --- a/resources/css/customizations.css +++ /dev/null @@ -1,60 +0,0 @@ -/* - This file contains some styles that are needed to stylize a few elements - in ShadCN. ShadCN is not fully compatible with Tailwind v4. Many of - these were defined in the tailwind.config.js file, but the - Tailwind config is not being utilized in v4. -*/ - -/********** SHADCN UI Sidebar styles **********/ - - -[data-state="expanded"] .w-\[--sidebar-width\] { - width: var(--sidebar-width); -} - -.w-\[--sidebar-width\], -[data-sidebar="sidebar"] { - border-color: #e5e5e5; -} - -[data-variant="floating"] [data-sidebar="sidebar"] { - background: #fafafa; - box-shadow: none; - ; -} - -.bg-sidebar { - background-color: var(--sidebar-background); -} - -.bg-sidebar-primary { - background-color: var(--sidebar-primary); -} - -.text-sidebar-primary-foreground { - color: var(--sidebar-primary-foreground); -} - -.hover\:text-sidebar-accent-foreground:hover { - color: var(--sidebar-accent-foreground); -} - -.hover\:bg-sidebar-accent:hover { - background-color: var(--sidebar-accent); -} - - -/********** End SHADCN UI Sidebar styles **********/ - -/* Need to figure out why button is not using pointer cursor */ - -button { - cursor: pointer !important; -} - - -/* Popover styles */ - -.bg-popover { - border: 1px solid #e1e1e1; -} \ No newline at end of file diff --git a/resources/js/app.ts b/resources/js/app.ts index df24d45f..72843c80 100644 --- a/resources/js/app.ts +++ b/resources/js/app.ts @@ -1,7 +1,7 @@ import '../css/app.css'; import './bootstrap'; -import { createInertiaApp } from '@inertiajs/vue3' +import { createInertiaApp } from '@inertiajs/vue3'; import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'; import { createApp, DefineComponent, h } from 'vue'; import { ZiggyVue } from '../../vendor/tightenco/ziggy'; @@ -10,17 +10,18 @@ const appName = import.meta.env.VITE_APP_NAME || 'Laravel'; createInertiaApp({ title: (title) => `${title} - ${appName}`, - resolve: name => { - const pages = import.meta.glob('./Pages/**/*.vue', { eager: true }) - return pages[`./Pages/${name}.vue`] - }, + resolve: (name) => + resolvePageComponent( + `./Pages/${name}.vue`, + import.meta.glob('./Pages/**/*.vue'), + ), setup({ el, App, props, plugin }) { createApp({ render: () => h(App, props) }) - .use(plugin) - .use(ZiggyVue) - .mount(el) + .use(plugin) + .use(ZiggyVue) + .mount(el); }, progress: { color: '#4B5563', }, -}) \ No newline at end of file +}); \ No newline at end of file diff --git a/resources/js/bootstrap.ts b/resources/js/bootstrap.ts index 2da4a4b8..5f1390b0 100644 --- a/resources/js/bootstrap.ts +++ b/resources/js/bootstrap.ts @@ -1,4 +1,4 @@ -// import axios from 'axios'; -// window.axios = axios; +import axios from 'axios'; +window.axios = axios; -// window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; diff --git a/resources/views/app.blade.php b/resources/views/app.blade.php index 5ed39e2e..9f73100b 100644 --- a/resources/views/app.blade.php +++ b/resources/views/app.blade.php @@ -12,7 +12,7 @@ @routes - @vite(['resources/js/app.ts', "resources/js/Pages/{$page['component']}.vue"]) + @vite(['resources/js/app.ts']) @inertiaHead diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 00000000..7ee21363 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,82 @@ +import defaultTheme from 'tailwindcss/defaultTheme'; +import forms from '@tailwindcss/forms'; + +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', + './storage/framework/views/*.php', + './resources/views/**/*.blade.php', + './resources/js/**/*.{vue,js,ts,jsx,tsx}', + ], + + theme: { + extend: { + fontFamily: { + sans: [ + 'Figtree', + ...defaultTheme.fontFamily.sans + ] + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + }, + colors: { + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + chart: { + '1': 'hsl(var(--chart-1))', + '2': 'hsl(var(--chart-2))', + '3': 'hsl(var(--chart-3))', + '4': 'hsl(var(--chart-4))', + '5': 'hsl(var(--chart-5))' + }, + sidebar: { + DEFAULT: 'hsl(var(--sidebar-background))', + foreground: 'hsl(var(--sidebar-foreground))', + primary: 'hsl(var(--sidebar-primary))', + 'primary-foreground': 'hsl(var(--sidebar-primary-foreground))', + accent: 'hsl(var(--sidebar-accent))', + 'accent-foreground': 'hsl(var(--sidebar-accent-foreground))', + border: 'hsl(var(--sidebar-border))', + ring: 'hsl(var(--sidebar-ring))' + } + } + } + }, + + plugins: [require("tailwindcss-animate")], +}; \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index b6411c57..eb366a2c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,15 +1,36 @@ import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; -import tailwindcss from '@tailwindcss/vite'; import vue from '@vitejs/plugin-vue'; +import path from 'path'; +import tailwindcss from 'tailwindcss'; +import autoprefixer from 'autoprefixer'; export default defineConfig({ plugins: [ laravel({ - input: ['resources/css/app.css', '@/app.js'], + input: ['resources/js/app.ts'], refresh: true, }), - tailwindcss(), - vue(), + vue({ + template: { + transformAssetUrls: { + base: null, + includeAbsolute: false, + }, + }, + }), ], + resolve: { + alias: { + '@': path.resolve(__dirname, './resources/js'), + }, + }, + css: { + postcss: { + plugins: [ + tailwindcss, + autoprefixer, + ], + }, + }, }); \ No newline at end of file From b3d9edfe78b76ad0777e20143b0d03f1e0db4a61 Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Mon, 30 Dec 2024 16:39:59 -0500 Subject: [PATCH 06/92] Adding shadcn library back --- components.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components.json b/components.json index 1fc14731..287722a4 100644 --- a/components.json +++ b/components.json @@ -1,8 +1,8 @@ { - "$schema": "https://ui.shadcn.com/schema.json", + "$schema": "https://shadcn-vue.com/schema.json", "style": "default", - "rsc": false, - "tsx": true, + "typescript": true, + "tsConfigPath": "./tsconfig.json", "tailwind": { "config": "tailwind.config.js", "css": "resources/css/app.css", From 511b3806a18990e79d2296bbc89aaa15a8ddd2da Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Thu, 2 Jan 2025 09:27:09 -0500 Subject: [PATCH 07/92] porting over more auth functionality and controllers --- .../Auth/AuthenticatedSessionController.php | 5 - .../Auth/ConfirmablePasswordController.php | 41 ++++ ...mailVerificationNotificationController.php | 24 +++ .../EmailVerificationPromptController.php | 22 ++ .../Auth/NewPasswordController.php | 69 +++++++ .../Auth/PasswordResetLinkController.php | 51 +++++ .../Auth/RegisteredUserController.php | 8 +- .../Auth/VerifyEmailController.php | 27 +++ .../Controllers/Settings/DeleteController.php | 48 +++++ .../Settings/PasswordController.php | 43 ++++ .../Settings/ProfileController.php | 42 ++++ app/Http/Middleware/HandleInertiaRequests.php | 6 + components.json | 8 +- resources/css/app.css | 12 +- resources/js/Components/AppSidebar.vue | 66 ++++++ resources/js/Components/NavFooter.vue | 48 +++++ resources/js/Components/NavMain.vue | 48 +++++ resources/js/Components/NavUser.vue | 111 ++++++++++ resources/js/Components/ui/avatar/Avatar.vue | 2 +- .../ui/breadcrumb/BreadcrumbEllipsis.vue | 2 +- .../ui/breadcrumb/BreadcrumbItem.vue | 2 +- .../ui/breadcrumb/BreadcrumbLink.vue | 2 +- .../ui/breadcrumb/BreadcrumbList.vue | 2 +- .../ui/breadcrumb/BreadcrumbPage.vue | 2 +- .../ui/breadcrumb/BreadcrumbSeparator.vue | 2 +- resources/js/Components/ui/button/Button.vue | 2 +- resources/js/Components/ui/card/Card.vue | 21 ++ .../js/Components/ui/card/CardContent.vue | 14 ++ .../js/Components/ui/card/CardDescription.vue | 14 ++ .../js/Components/ui/card/CardFooter.vue | 14 ++ .../js/Components/ui/card/CardHeader.vue | 14 ++ resources/js/Components/ui/card/CardTitle.vue | 18 ++ resources/js/Components/ui/card/index.ts | 6 + .../DropdownMenuCheckboxItem.vue | 2 +- .../ui/dropdown-menu/DropdownMenuContent.vue | 2 +- .../ui/dropdown-menu/DropdownMenuItem.vue | 2 +- .../ui/dropdown-menu/DropdownMenuLabel.vue | 2 +- .../dropdown-menu/DropdownMenuRadioItem.vue | 2 +- .../dropdown-menu/DropdownMenuSeparator.vue | 2 +- .../ui/dropdown-menu/DropdownMenuShortcut.vue | 2 +- .../dropdown-menu/DropdownMenuSubContent.vue | 2 +- .../dropdown-menu/DropdownMenuSubTrigger.vue | 2 +- resources/js/Components/ui/input/Input.vue | 10 +- resources/js/Components/ui/label/Label.vue | 2 +- .../js/Components/ui/separator/Separator.vue | 2 +- .../js/Components/ui/sheet/SheetContent.vue | 2 +- .../Components/ui/sheet/SheetDescription.vue | 2 +- .../js/Components/ui/sheet/SheetFooter.vue | 2 +- .../js/Components/ui/sheet/SheetHeader.vue | 2 +- .../js/Components/ui/sheet/SheetTitle.vue | 2 +- .../js/Components/ui/sidebar/Sidebar.vue | 2 +- .../Components/ui/sidebar/SidebarContent.vue | 2 +- .../Components/ui/sidebar/SidebarFooter.vue | 2 +- .../js/Components/ui/sidebar/SidebarGroup.vue | 2 +- .../ui/sidebar/SidebarGroupAction.vue | 2 +- .../ui/sidebar/SidebarGroupContent.vue | 2 +- .../ui/sidebar/SidebarGroupLabel.vue | 2 +- .../Components/ui/sidebar/SidebarHeader.vue | 2 +- .../js/Components/ui/sidebar/SidebarInput.vue | 2 +- .../js/Components/ui/sidebar/SidebarInset.vue | 2 +- .../js/Components/ui/sidebar/SidebarMenu.vue | 2 +- .../ui/sidebar/SidebarMenuAction.vue | 2 +- .../ui/sidebar/SidebarMenuBadge.vue | 2 +- .../ui/sidebar/SidebarMenuButtonChild.vue | 2 +- .../Components/ui/sidebar/SidebarMenuItem.vue | 2 +- .../ui/sidebar/SidebarMenuSkeleton.vue | 2 +- .../Components/ui/sidebar/SidebarMenuSub.vue | 2 +- .../ui/sidebar/SidebarMenuSubButton.vue | 2 +- .../Components/ui/sidebar/SidebarProvider.vue | 2 +- .../js/Components/ui/sidebar/SidebarRail.vue | 2 +- .../ui/sidebar/SidebarSeparator.vue | 2 +- .../Components/ui/sidebar/SidebarTrigger.vue | 2 +- .../js/Components/ui/skeleton/Skeleton.vue | 2 +- .../Components/ui/tooltip/TooltipContent.vue | 2 +- resources/js/Layouts/AppLayout.vue | 112 ++++++---- resources/js/Layouts/Auth/AuthBase.vue | 21 ++ resources/js/Layouts/Auth/AuthCardLayout.vue | 46 +++++ .../js/Layouts/Auth/AuthSimpleLayout.vue | 39 ++++ resources/js/Layouts/Auth/AuthSplitLayout.vue | 47 +++++ resources/js/Layouts/AuthLayout.vue | 40 ---- resources/js/Pages/Auth/ForgotPassword.vue | 66 ++++++ resources/js/Pages/Auth/Login.vue | 155 +++++++------- resources/js/Pages/Auth/Register.vue | 192 +++++++----------- resources/js/Pages/Auth/ResetPassword.vue | 96 +++++++++ resources/js/Pages/Auth/VerifyEmail.vue | 52 +++++ resources/js/Pages/Dashboard.vue | 27 ++- resources/js/{ => lib}/utils.ts | 0 resources/views/app.blade.php | 4 - routes/auth.php | 54 ++--- tailwind.config.js | 39 +--- tests/Feature/Auth/AuthenticationTest.php | 41 ++++ tests/Feature/Auth/EmailVerificationTest.php | 46 +++++ .../Feature/Auth/PasswordConfirmationTest.php | 32 +++ tests/Feature/Auth/PasswordResetTest.php | 60 ++++++ tests/Feature/Auth/RegistrationTest.php | 19 ++ tests/Feature/DashboardTest.php | 16 ++ tests/Feature/Settings/DeleteAccountTest.php | 37 ++++ tests/Feature/Settings/PasswordUpdateTest.php | 40 ++++ tests/Feature/Settings/ProfileUpdateTest.php | 51 +++++ tests/Pest.php | 2 +- 100 files changed, 1793 insertions(+), 427 deletions(-) create mode 100644 app/Http/Controllers/Auth/ConfirmablePasswordController.php create mode 100644 app/Http/Controllers/Auth/EmailVerificationNotificationController.php create mode 100644 app/Http/Controllers/Auth/EmailVerificationPromptController.php create mode 100644 app/Http/Controllers/Auth/NewPasswordController.php create mode 100644 app/Http/Controllers/Auth/PasswordResetLinkController.php create mode 100644 app/Http/Controllers/Auth/VerifyEmailController.php create mode 100644 app/Http/Controllers/Settings/DeleteController.php create mode 100644 app/Http/Controllers/Settings/PasswordController.php create mode 100644 app/Http/Controllers/Settings/ProfileController.php create mode 100644 resources/js/Components/AppSidebar.vue create mode 100644 resources/js/Components/NavFooter.vue create mode 100644 resources/js/Components/NavMain.vue create mode 100644 resources/js/Components/NavUser.vue create mode 100644 resources/js/Components/ui/card/Card.vue create mode 100644 resources/js/Components/ui/card/CardContent.vue create mode 100644 resources/js/Components/ui/card/CardDescription.vue create mode 100644 resources/js/Components/ui/card/CardFooter.vue create mode 100644 resources/js/Components/ui/card/CardHeader.vue create mode 100644 resources/js/Components/ui/card/CardTitle.vue create mode 100644 resources/js/Components/ui/card/index.ts create mode 100644 resources/js/Layouts/Auth/AuthBase.vue create mode 100644 resources/js/Layouts/Auth/AuthCardLayout.vue create mode 100644 resources/js/Layouts/Auth/AuthSimpleLayout.vue create mode 100644 resources/js/Layouts/Auth/AuthSplitLayout.vue delete mode 100644 resources/js/Layouts/AuthLayout.vue create mode 100644 resources/js/Pages/Auth/ForgotPassword.vue create mode 100644 resources/js/Pages/Auth/ResetPassword.vue create mode 100644 resources/js/Pages/Auth/VerifyEmail.vue rename resources/js/{ => lib}/utils.ts (100%) create mode 100644 tests/Feature/Auth/AuthenticationTest.php create mode 100644 tests/Feature/Auth/EmailVerificationTest.php create mode 100644 tests/Feature/Auth/PasswordConfirmationTest.php create mode 100644 tests/Feature/Auth/PasswordResetTest.php create mode 100644 tests/Feature/Auth/RegistrationTest.php create mode 100644 tests/Feature/DashboardTest.php create mode 100644 tests/Feature/Settings/DeleteAccountTest.php create mode 100644 tests/Feature/Settings/PasswordUpdateTest.php create mode 100644 tests/Feature/Settings/ProfileUpdateTest.php diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php index 82116b0e..d44fe974 100644 --- a/app/Http/Controllers/Auth/AuthenticatedSessionController.php +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -4,7 +4,6 @@ use App\Http\Controllers\Controller; use App\Http\Requests\Auth\LoginRequest; -use Illuminate\Foundation\Inspiring; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -19,13 +18,9 @@ class AuthenticatedSessionController extends Controller */ public function create(): Response { - [$message, $author] = str(Inspiring::quotes()->random())->explode('-'); - return Inertia::render('Auth/Login', [ 'canResetPassword' => Route::has('password.request'), 'status' => session('status'), - 'name' => config('app.name'), - 'quote' => ['message' => trim($message), 'author' => trim($author)], ]); } diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php new file mode 100644 index 00000000..d2b1f14b --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmablePasswordController.php @@ -0,0 +1,41 @@ +validate([ + 'email' => $request->user()->email, + 'password' => $request->password, + ])) { + throw ValidationException::withMessages([ + 'password' => __('auth.password'), + ]); + } + + $request->session()->put('auth.password_confirmed_at', time()); + + return redirect()->intended(route('dashboard', absolute: false)); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php new file mode 100644 index 00000000..f64fa9ba --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php @@ -0,0 +1,24 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(route('dashboard', absolute: false)); + } + + $request->user()->sendEmailVerificationNotification(); + + return back()->with('status', 'verification-link-sent'); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php new file mode 100644 index 00000000..b42e0d53 --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationPromptController.php @@ -0,0 +1,22 @@ +user()->hasVerifiedEmail() + ? redirect()->intended(route('dashboard', absolute: false)) + : Inertia::render('Auth/VerifyEmail', ['status' => session('status')]); + } +} diff --git a/app/Http/Controllers/Auth/NewPasswordController.php b/app/Http/Controllers/Auth/NewPasswordController.php new file mode 100644 index 00000000..394cc4af --- /dev/null +++ b/app/Http/Controllers/Auth/NewPasswordController.php @@ -0,0 +1,69 @@ + $request->email, + 'token' => $request->route('token'), + ]); + } + + /** + * Handle an incoming new password request. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function store(Request $request): RedirectResponse + { + $request->validate([ + 'token' => 'required', + 'email' => 'required|email', + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + // Here we will attempt to reset the user's password. If it is successful we + // will update the password on an actual user model and persist it to the + // database. Otherwise we will parse the error and return the response. + $status = Password::reset( + $request->only('email', 'password', 'password_confirmation', 'token'), + function ($user) use ($request) { + $user->forceFill([ + 'password' => Hash::make($request->password), + 'remember_token' => Str::random(60), + ])->save(); + + event(new PasswordReset($user)); + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view. If there is an error we can + // redirect them back to where they came from with their error message. + if ($status == Password::PASSWORD_RESET) { + return redirect()->route('login')->with('status', __($status)); + } + + throw ValidationException::withMessages([ + 'email' => [trans($status)], + ]); + } +} diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php new file mode 100644 index 00000000..b22c5441 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordResetLinkController.php @@ -0,0 +1,51 @@ + session('status'), + ]); + } + + /** + * Handle an incoming password reset link request. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function store(Request $request): RedirectResponse + { + $request->validate([ + 'email' => 'required|email', + ]); + + // We will send the password reset link to this user. Once we have attempted + // to send the link, we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + $status = Password::sendResetLink( + $request->only('email') + ); + + if ($status == Password::RESET_LINK_SENT) { + return back()->with('status', __($status)); + } + + throw ValidationException::withMessages([ + 'email' => [trans($status)], + ]); + } +} diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index 1ef621de..53a546b1 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -5,7 +5,6 @@ use App\Http\Controllers\Controller; use App\Models\User; use Illuminate\Auth\Events\Registered; -use Illuminate\Foundation\Inspiring; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -21,12 +20,7 @@ class RegisteredUserController extends Controller */ public function create(): Response { - [$message, $author] = str(Inspiring::quotes()->random())->explode('-'); - - return Inertia::render('Auth/Register', [ - 'name' => config('app.name'), - 'quote' => ['message' => trim($message), 'author' => trim($author)], - ]); + return Inertia::render('Auth/Register'); } /** diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php new file mode 100644 index 00000000..784765e3 --- /dev/null +++ b/app/Http/Controllers/Auth/VerifyEmailController.php @@ -0,0 +1,27 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); + } + + if ($request->user()->markEmailAsVerified()) { + event(new Verified($request->user())); + } + + return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); + } +} diff --git a/app/Http/Controllers/Settings/DeleteController.php b/app/Http/Controllers/Settings/DeleteController.php new file mode 100644 index 00000000..9865de06 --- /dev/null +++ b/app/Http/Controllers/Settings/DeleteController.php @@ -0,0 +1,48 @@ + $request->user() instanceof MustVerifyEmail, + 'status' => session('status'), + ]); + } + + /** + * Delete the user's account. + */ + public function destroy(Request $request): RedirectResponse + { + $request->validate([ + 'password' => ['required', 'current_password'], + ]); + + $user = $request->user(); + + Auth::logout(); + + $user->delete(); + + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return Redirect::to('/'); + } +} diff --git a/app/Http/Controllers/Settings/PasswordController.php b/app/Http/Controllers/Settings/PasswordController.php new file mode 100644 index 00000000..7095e9a5 --- /dev/null +++ b/app/Http/Controllers/Settings/PasswordController.php @@ -0,0 +1,43 @@ + $request->user() instanceof MustVerifyEmail, + 'status' => session('status'), + ]); + } + + /** + * Update the user's password. + */ + public function update(Request $request): RedirectResponse + { + $validated = $request->validate([ + 'current_password' => ['required', 'current_password'], + 'password' => ['required', Password::defaults(), 'confirmed'], + ]); + + $request->user()->update([ + 'password' => Hash::make($validated['password']), + ]); + + return back(); + } +} diff --git a/app/Http/Controllers/Settings/ProfileController.php b/app/Http/Controllers/Settings/ProfileController.php new file mode 100644 index 00000000..da1c96c8 --- /dev/null +++ b/app/Http/Controllers/Settings/ProfileController.php @@ -0,0 +1,42 @@ + $request->user() instanceof MustVerifyEmail, + 'status' => session('status'), + ]); + } + + /** + * Update the user's profile information. + */ + public function update(ProfileUpdateRequest $request): RedirectResponse + { + $request->user()->fill($request->validated()); + + if ($request->user()->isDirty('email')) { + $request->user()->email_verified_at = null; + } + + $request->user()->save(); + + return Redirect::route('profile.edit'); + } +} diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index 6479633e..04a98f5e 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -2,6 +2,7 @@ namespace App\Http\Middleware; +use Illuminate\Foundation\Inspiring; use Illuminate\Http\Request; use Inertia\Middleware; @@ -35,10 +36,15 @@ public function version(Request $request): ?string */ public function share(Request $request): array { + [$message, $author] = str(Inspiring::quotes()->random())->explode('-'); + return array_merge(parent::share($request), [ + ...parent::share($request), 'auth' => [ 'user' => $request->user(), ], + 'name' => config('app.name'), + 'quote' => ['message' => trim($message), 'author' => trim($author)], ]); } } diff --git a/components.json b/components.json index 287722a4..79f6d8d1 100644 --- a/components.json +++ b/components.json @@ -10,12 +10,12 @@ "cssVariables": true, "prefix": "" }, + "framework": "laravel", "aliases": { - "components": "@/Components", + "components": "resources/js/Components", "utils": "@/lib/utils", - "ui": "@/Components/ui", + "ui": "resources/js/Components/ui", "lib": "@/lib", "hooks": "@/hooks" - }, - "iconLibrary": "lucide" + } } \ No newline at end of file diff --git a/resources/css/app.css b/resources/css/app.css index 4559d263..8e8f22e4 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -22,12 +22,7 @@ --destructive-foreground: 0 0% 98%; --border: 0 0% 89.8%; --input: 0 0% 89.8%; - --ring: 0 0% 3.9%; - --chart-1: 12 76% 61%; - --chart-2: 173 58% 39%; - --chart-3: 197 37% 24%; - --chart-4: 43 74% 66%; - --chart-5: 27 87% 67%; + --ring: 240 5.9% 10%; --radius: 0.5rem; --sidebar-background: 0 0% 98%; --sidebar-foreground: 240 5.3% 26.1%; @@ -59,11 +54,6 @@ --border: 0 0% 14.9%; --input: 0 0% 14.9%; --ring: 0 0% 83.1%; - --chart-1: 220 70% 50%; - --chart-2: 160 60% 45%; - --chart-3: 30 80% 55%; - --chart-4: 280 65% 60%; - --chart-5: 340 75% 55%; --sidebar-background: 240 5.9% 10%; --sidebar-foreground: 240 4.8% 95.9%; --sidebar-primary: 6, 72%, 55%; diff --git a/resources/js/Components/AppSidebar.vue b/resources/js/Components/AppSidebar.vue new file mode 100644 index 00000000..dec8260c --- /dev/null +++ b/resources/js/Components/AppSidebar.vue @@ -0,0 +1,66 @@ + + + diff --git a/resources/js/Components/NavFooter.vue b/resources/js/Components/NavFooter.vue new file mode 100644 index 00000000..a71284e6 --- /dev/null +++ b/resources/js/Components/NavFooter.vue @@ -0,0 +1,48 @@ + + + diff --git a/resources/js/Components/NavMain.vue b/resources/js/Components/NavMain.vue new file mode 100644 index 00000000..3fa37109 --- /dev/null +++ b/resources/js/Components/NavMain.vue @@ -0,0 +1,48 @@ + + + diff --git a/resources/js/Components/NavUser.vue b/resources/js/Components/NavUser.vue new file mode 100644 index 00000000..78caac78 --- /dev/null +++ b/resources/js/Components/NavUser.vue @@ -0,0 +1,111 @@ + + + diff --git a/resources/js/Components/ui/avatar/Avatar.vue b/resources/js/Components/ui/avatar/Avatar.vue index d9a7c837..ed6ef22a 100644 --- a/resources/js/Components/ui/avatar/Avatar.vue +++ b/resources/js/Components/ui/avatar/Avatar.vue @@ -1,6 +1,6 @@ + + diff --git a/resources/js/Components/ui/card/CardContent.vue b/resources/js/Components/ui/card/CardContent.vue new file mode 100644 index 00000000..785913a1 --- /dev/null +++ b/resources/js/Components/ui/card/CardContent.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/Components/ui/card/CardDescription.vue b/resources/js/Components/ui/card/CardDescription.vue new file mode 100644 index 00000000..d5faedd5 --- /dev/null +++ b/resources/js/Components/ui/card/CardDescription.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/Components/ui/card/CardFooter.vue b/resources/js/Components/ui/card/CardFooter.vue new file mode 100644 index 00000000..1ed2efe5 --- /dev/null +++ b/resources/js/Components/ui/card/CardFooter.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/Components/ui/card/CardHeader.vue b/resources/js/Components/ui/card/CardHeader.vue new file mode 100644 index 00000000..951d227e --- /dev/null +++ b/resources/js/Components/ui/card/CardHeader.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/Components/ui/card/CardTitle.vue b/resources/js/Components/ui/card/CardTitle.vue new file mode 100644 index 00000000..842e1689 --- /dev/null +++ b/resources/js/Components/ui/card/CardTitle.vue @@ -0,0 +1,18 @@ + + + diff --git a/resources/js/Components/ui/card/index.ts b/resources/js/Components/ui/card/index.ts new file mode 100644 index 00000000..9ff6d5e7 --- /dev/null +++ b/resources/js/Components/ui/card/index.ts @@ -0,0 +1,6 @@ +export { default as Card } from './Card.vue' +export { default as CardContent } from './CardContent.vue' +export { default as CardDescription } from './CardDescription.vue' +export { default as CardFooter } from './CardFooter.vue' +export { default as CardHeader } from './CardHeader.vue' +export { default as CardTitle } from './CardTitle.vue' diff --git a/resources/js/Components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/resources/js/Components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue index c29c53d8..ca8867c0 100644 --- a/resources/js/Components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +++ b/resources/js/Components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue @@ -1,5 +1,5 @@ diff --git a/resources/js/Components/ui/label/Label.vue b/resources/js/Components/ui/label/Label.vue index 79574afe..5ad1568f 100644 --- a/resources/js/Components/ui/label/Label.vue +++ b/resources/js/Components/ui/label/Label.vue @@ -1,5 +1,5 @@ diff --git a/resources/js/Components/ui/sheet/SheetHeader.vue b/resources/js/Components/ui/sheet/SheetHeader.vue index 95a3a2fa..541f48f5 100644 --- a/resources/js/Components/ui/sheet/SheetHeader.vue +++ b/resources/js/Components/ui/sheet/SheetHeader.vue @@ -1,6 +1,6 @@ diff --git a/resources/js/Components/ui/sheet/SheetTitle.vue b/resources/js/Components/ui/sheet/SheetTitle.vue index 2ecee944..b1029593 100644 --- a/resources/js/Components/ui/sheet/SheetTitle.vue +++ b/resources/js/Components/ui/sheet/SheetTitle.vue @@ -1,5 +1,5 @@ \ No newline at end of file + + + + + \ No newline at end of file diff --git a/resources/js/Layouts/Auth/AuthBase.vue b/resources/js/Layouts/Auth/AuthBase.vue new file mode 100644 index 00000000..5236db32 --- /dev/null +++ b/resources/js/Layouts/Auth/AuthBase.vue @@ -0,0 +1,21 @@ + + + + diff --git a/resources/js/Layouts/Auth/AuthCardLayout.vue b/resources/js/Layouts/Auth/AuthCardLayout.vue new file mode 100644 index 00000000..be641e2a --- /dev/null +++ b/resources/js/Layouts/Auth/AuthCardLayout.vue @@ -0,0 +1,46 @@ + + + + diff --git a/resources/js/Layouts/Auth/AuthSimpleLayout.vue b/resources/js/Layouts/Auth/AuthSimpleLayout.vue new file mode 100644 index 00000000..19144577 --- /dev/null +++ b/resources/js/Layouts/Auth/AuthSimpleLayout.vue @@ -0,0 +1,39 @@ + + + + diff --git a/resources/js/Layouts/Auth/AuthSplitLayout.vue b/resources/js/Layouts/Auth/AuthSplitLayout.vue new file mode 100644 index 00000000..c0ccf3d9 --- /dev/null +++ b/resources/js/Layouts/Auth/AuthSplitLayout.vue @@ -0,0 +1,47 @@ + + + + diff --git a/resources/js/Layouts/AuthLayout.vue b/resources/js/Layouts/AuthLayout.vue deleted file mode 100644 index 2b6ec3f9..00000000 --- a/resources/js/Layouts/AuthLayout.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - \ No newline at end of file diff --git a/resources/js/Pages/Auth/ForgotPassword.vue b/resources/js/Pages/Auth/ForgotPassword.vue new file mode 100644 index 00000000..99132373 --- /dev/null +++ b/resources/js/Pages/Auth/ForgotPassword.vue @@ -0,0 +1,66 @@ + + + diff --git a/resources/js/Pages/Auth/Login.vue b/resources/js/Pages/Auth/Login.vue index e1662c2f..3ae8c77d 100644 --- a/resources/js/Pages/Auth/Login.vue +++ b/resources/js/Pages/Auth/Login.vue @@ -1,20 +1,16 @@ - \ No newline at end of file diff --git a/resources/js/Pages/Auth/Register.vue b/resources/js/Pages/Auth/Register.vue index cee1d53a..fb740c05 100644 --- a/resources/js/Pages/Auth/Register.vue +++ b/resources/js/Pages/Auth/Register.vue @@ -1,13 +1,12 @@ diff --git a/resources/js/Pages/Auth/ResetPassword.vue b/resources/js/Pages/Auth/ResetPassword.vue new file mode 100644 index 00000000..f41fe8d4 --- /dev/null +++ b/resources/js/Pages/Auth/ResetPassword.vue @@ -0,0 +1,96 @@ + + + diff --git a/resources/js/Pages/Auth/VerifyEmail.vue b/resources/js/Pages/Auth/VerifyEmail.vue new file mode 100644 index 00000000..0b16572a --- /dev/null +++ b/resources/js/Pages/Auth/VerifyEmail.vue @@ -0,0 +1,52 @@ + + + diff --git a/resources/js/Pages/Dashboard.vue b/resources/js/Pages/Dashboard.vue index 3922aa00..d861ea76 100644 --- a/resources/js/Pages/Dashboard.vue +++ b/resources/js/Pages/Dashboard.vue @@ -2,6 +2,18 @@ import AppLayout from '@/Layouts/AppLayout.vue'; import { Head } from '@inertiajs/vue3'; +interface BreadcrumbItem { + title: string; + href: string; +} + +const breadcrumbItems: BreadcrumbItem[] = [ + { + title: 'Dashboard', + href: '/dashboard' + } +]; + defineProps<{ name?: string; }>(); @@ -10,13 +22,14 @@ defineProps<{ diff --git a/resources/js/utils.ts b/resources/js/lib/utils.ts similarity index 100% rename from resources/js/utils.ts rename to resources/js/lib/utils.ts diff --git a/resources/views/app.blade.php b/resources/views/app.blade.php index 9f73100b..55ac1832 100644 --- a/resources/views/app.blade.php +++ b/resources/views/app.blade.php @@ -6,10 +6,6 @@ {{ config('app.name', 'Laravel') }} - - - - @routes @vite(['resources/js/app.ts']) diff --git a/routes/auth.php b/routes/auth.php index 0da99e6b..3926ecf7 100644 --- a/routes/auth.php +++ b/routes/auth.php @@ -1,14 +1,14 @@ group(function () { @@ -22,37 +22,37 @@ Route::post('login', [AuthenticatedSessionController::class, 'store']); - // Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) - // ->name('password.request'); + Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) + ->name('password.request'); - // Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) - // ->name('password.email'); + Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) + ->name('password.email'); - // Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) - // ->name('password.reset'); + Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) + ->name('password.reset'); - // Route::post('reset-password', [NewPasswordController::class, 'store']) - // ->name('password.store'); + Route::post('reset-password', [NewPasswordController::class, 'store']) + ->name('password.store'); }); Route::middleware('auth')->group(function () { -// Route::get('verify-email', EmailVerificationPromptController::class) -// ->name('verification.notice'); + Route::get('verify-email', EmailVerificationPromptController::class) + ->name('verification.notice'); -// Route::get('verify-email/{id}/{hash}', VerifyEmailController::class) -// ->middleware(['signed', 'throttle:6,1']) -// ->name('verification.verify'); + Route::get('verify-email/{id}/{hash}', VerifyEmailController::class) + ->middleware(['signed', 'throttle:6,1']) + ->name('verification.verify'); -// Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store']) -// ->middleware('throttle:6,1') -// ->name('verification.send'); + Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store']) + ->middleware('throttle:6,1') + ->name('verification.send'); -// Route::get('confirm-password', [ConfirmablePasswordController::class, 'show']) -// ->name('password.confirm'); + Route::get('confirm-password', [ConfirmablePasswordController::class, 'show']) + ->name('password.confirm'); -// Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); + Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); -// Route::put('password', [PasswordController::class, 'update'])->name('password.update'); + Route::put('password', [PasswordController::class, 'update'])->name('password.update'); Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) ->name('logout'); diff --git a/tailwind.config.js b/tailwind.config.js index 7ee21363..5f56afa1 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,5 +1,4 @@ import defaultTheme from 'tailwindcss/defaultTheme'; -import forms from '@tailwindcss/forms'; /** @type {import('tailwindcss').Config} */ export default { @@ -13,15 +12,7 @@ export default { theme: { extend: { fontFamily: { - sans: [ - 'Figtree', - ...defaultTheme.fontFamily.sans - ] - }, - borderRadius: { - lg: 'var(--radius)', - md: 'calc(var(--radius) - 2px)', - sm: 'calc(var(--radius) - 4px)' + sans: defaultTheme.fontFamily.sans, }, colors: { background: 'hsl(var(--background))', @@ -57,26 +48,14 @@ export default { border: 'hsl(var(--border))', input: 'hsl(var(--input))', ring: 'hsl(var(--ring))', - chart: { - '1': 'hsl(var(--chart-1))', - '2': 'hsl(var(--chart-2))', - '3': 'hsl(var(--chart-3))', - '4': 'hsl(var(--chart-4))', - '5': 'hsl(var(--chart-5))' - }, - sidebar: { - DEFAULT: 'hsl(var(--sidebar-background))', - foreground: 'hsl(var(--sidebar-foreground))', - primary: 'hsl(var(--sidebar-primary))', - 'primary-foreground': 'hsl(var(--sidebar-primary-foreground))', - accent: 'hsl(var(--sidebar-accent))', - 'accent-foreground': 'hsl(var(--sidebar-accent-foreground))', - border: 'hsl(var(--sidebar-border))', - ring: 'hsl(var(--sidebar-ring))' - } - } - } + }, + borderRadius: { + lg: `var(--radius)`, + md: `calc(var(--radius) - 2px)`, + sm: 'calc(var(--radius) - 4px)', + }, + }, }, - plugins: [require("tailwindcss-animate")], + plugins: [], }; \ No newline at end of file diff --git a/tests/Feature/Auth/AuthenticationTest.php b/tests/Feature/Auth/AuthenticationTest.php new file mode 100644 index 00000000..a272b9d5 --- /dev/null +++ b/tests/Feature/Auth/AuthenticationTest.php @@ -0,0 +1,41 @@ +get('/login'); + + $response->assertStatus(200); +}); + +test('users can authenticate using the login screen', function () { + $user = User::factory()->create(); + + $response = $this->post('/login', [ + 'email' => $user->email, + 'password' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(route('dashboard', absolute: false)); +}); + +test('users can not authenticate with invalid password', function () { + $user = User::factory()->create(); + + $this->post('/login', [ + 'email' => $user->email, + 'password' => 'wrong-password', + ]); + + $this->assertGuest(); +}); + +test('users can logout', function () { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/logout'); + + $this->assertGuest(); + $response->assertRedirect('/'); +}); diff --git a/tests/Feature/Auth/EmailVerificationTest.php b/tests/Feature/Auth/EmailVerificationTest.php new file mode 100644 index 00000000..f282dff0 --- /dev/null +++ b/tests/Feature/Auth/EmailVerificationTest.php @@ -0,0 +1,46 @@ +unverified()->create(); + + $response = $this->actingAs($user)->get('/verify-email'); + + $response->assertStatus(200); +}); + +test('email can be verified', function () { + $user = User::factory()->unverified()->create(); + + Event::fake(); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1($user->email)] + ); + + $response = $this->actingAs($user)->get($verificationUrl); + + Event::assertDispatched(Verified::class); + expect($user->fresh()->hasVerifiedEmail())->toBeTrue(); + $response->assertRedirect(route('dashboard', absolute: false).'?verified=1'); +}); + +test('email is not verified with invalid hash', function () { + $user = User::factory()->unverified()->create(); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1('wrong-email')] + ); + + $this->actingAs($user)->get($verificationUrl); + + expect($user->fresh()->hasVerifiedEmail())->toBeFalse(); +}); diff --git a/tests/Feature/Auth/PasswordConfirmationTest.php b/tests/Feature/Auth/PasswordConfirmationTest.php new file mode 100644 index 00000000..8a42902e --- /dev/null +++ b/tests/Feature/Auth/PasswordConfirmationTest.php @@ -0,0 +1,32 @@ +create(); + + $response = $this->actingAs($user)->get('/confirm-password'); + + $response->assertStatus(200); +}); + +test('password can be confirmed', function () { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'password', + ]); + + $response->assertRedirect(); + $response->assertSessionHasNoErrors(); +}); + +test('password is not confirmed with invalid password', function () { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'wrong-password', + ]); + + $response->assertSessionHasErrors(); +}); diff --git a/tests/Feature/Auth/PasswordResetTest.php b/tests/Feature/Auth/PasswordResetTest.php new file mode 100644 index 00000000..0504276a --- /dev/null +++ b/tests/Feature/Auth/PasswordResetTest.php @@ -0,0 +1,60 @@ +get('/forgot-password'); + + $response->assertStatus(200); +}); + +test('reset password link can be requested', function () { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class); +}); + +test('reset password screen can be rendered', function () { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) { + $response = $this->get('/reset-password/'.$notification->token); + + $response->assertStatus(200); + + return true; + }); +}); + +test('password can be reset with valid token', function () { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) { + $response = $this->post('/reset-password', [ + 'token' => $notification->token, + 'email' => $user->email, + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect(route('login')); + + return true; + }); +}); diff --git a/tests/Feature/Auth/RegistrationTest.php b/tests/Feature/Auth/RegistrationTest.php new file mode 100644 index 00000000..352ca787 --- /dev/null +++ b/tests/Feature/Auth/RegistrationTest.php @@ -0,0 +1,19 @@ +get('/register'); + + $response->assertStatus(200); +}); + +test('new users can register', function () { + $response = $this->post('/register', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(route('dashboard', absolute: false)); +}); diff --git a/tests/Feature/DashboardTest.php b/tests/Feature/DashboardTest.php new file mode 100644 index 00000000..df63dd22 --- /dev/null +++ b/tests/Feature/DashboardTest.php @@ -0,0 +1,16 @@ +get('/dashboard'); + $response->assertRedirect('/login'); +}); + +test('authenticated users can visit the dashboard', function () { + $user = User::factory()->create(); + $this->actingAs($user); + + $response = $this->get('/dashboard'); + $response->assertStatus(200); +}); diff --git a/tests/Feature/Settings/DeleteAccountTest.php b/tests/Feature/Settings/DeleteAccountTest.php new file mode 100644 index 00000000..0dcaf7cb --- /dev/null +++ b/tests/Feature/Settings/DeleteAccountTest.php @@ -0,0 +1,37 @@ +create(); + + $response = $this + ->actingAs($user) + ->delete('/settings/delete', [ + 'password' => 'password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/'); + + $this->assertGuest(); + $this->assertNull($user->fresh()); +}); + +test('correct password must be provided to delete account', function () { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->from('/settings/delete') + ->delete('/settings/delete', [ + 'password' => 'wrong-password', + ]); + + $response + ->assertSessionHasErrors('password') + ->assertRedirect('/settings/delete'); + + $this->assertNotNull($user->fresh()); +}); diff --git a/tests/Feature/Settings/PasswordUpdateTest.php b/tests/Feature/Settings/PasswordUpdateTest.php new file mode 100644 index 00000000..213e0a16 --- /dev/null +++ b/tests/Feature/Settings/PasswordUpdateTest.php @@ -0,0 +1,40 @@ +create(); + + $response = $this + ->actingAs($user) + ->from('/settings/password') + ->put('/settings/password', [ + 'current_password' => 'password', + 'password' => 'new-password', + 'password_confirmation' => 'new-password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/settings/password'); + + $this->assertTrue(Hash::check('new-password', $user->refresh()->password)); +}); + +test('correct password must be provided to update password', function () { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->from('/settings/password') + ->put('/settings/password', [ + 'current_password' => 'wrong-password', + 'password' => 'new-password', + 'password_confirmation' => 'new-password', + ]); + + $response + ->assertSessionHasErrors('current_password') + ->assertRedirect('/settings/password'); +}); diff --git a/tests/Feature/Settings/ProfileUpdateTest.php b/tests/Feature/Settings/ProfileUpdateTest.php new file mode 100644 index 00000000..6df65f7d --- /dev/null +++ b/tests/Feature/Settings/ProfileUpdateTest.php @@ -0,0 +1,51 @@ +create(); + + $response = $this + ->actingAs($user) + ->get('/settings/profile'); + + $response->assertOk(); +}); + +test('profile information can be updated', function () { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->patch('/settings/profile', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/settings/profile'); + + $user->refresh(); + + $this->assertSame('Test User', $user->name); + $this->assertSame('test@example.com', $user->email); + $this->assertNull($user->email_verified_at); +}); + +test('email verification status is unchanged when the email address is unchanged', function () { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->patch('/settings/profile', [ + 'name' => 'Test User', + 'email' => $user->email, + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/settings/profile'); + + $this->assertNotNull($user->refresh()->email_verified_at); +}); diff --git a/tests/Pest.php b/tests/Pest.php index 60f04a45..40d096b5 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -12,7 +12,7 @@ */ pest()->extend(Tests\TestCase::class) - // ->use(Illuminate\Foundation\Testing\RefreshDatabase::class) + ->use(Illuminate\Foundation\Testing\RefreshDatabase::class) ->in('Feature'); /* From 58d6ad03ff48a535ead9cf24c908959a81ee67ea Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Thu, 2 Jan 2025 11:04:24 -0500 Subject: [PATCH 08/92] Adding feature parity match with the react starter kit --- .github/workflows/tests.yml | 53 +++++++ .../Controllers/Settings/DeleteController.php | 48 ------- .../Settings/ProfileController.php | 22 +++ .../Settings/ProfileUpdateRequest.php | 30 ++++ package-lock.json | 17 +++ package.json | 1 + resources/js/Components/AppearanceTabs.vue | 44 ++++++ resources/js/Components/ApplicationLogo.vue | 21 ++- resources/js/Components/Heading.vue | 20 +++ resources/js/Components/NavUser.vue | 4 +- .../js/Components/Settings/DeleteUser.vue | 95 +++++++++++++ resources/js/Components/Settings/Heading.vue | 22 +++ resources/js/Components/ui/dialog/Dialog.vue | 14 ++ .../js/Components/ui/dialog/DialogClose.vue | 11 ++ .../js/Components/ui/dialog/DialogContent.vue | 50 +++++++ .../ui/dialog/DialogDescription.vue | 24 ++++ .../js/Components/ui/dialog/DialogFooter.vue | 19 +++ .../js/Components/ui/dialog/DialogHeader.vue | 16 +++ .../ui/dialog/DialogScrollContent.vue | 59 ++++++++ .../js/Components/ui/dialog/DialogTitle.vue | 29 ++++ .../js/Components/ui/dialog/DialogTrigger.vue | 11 ++ resources/js/Components/ui/dialog/index.ts | 9 ++ resources/js/Composables/useAppearance.ts | 56 ++++++++ resources/js/Pages/Settings/Appearance.vue | 41 ++++++ resources/js/Pages/Settings/Layout.vue | 68 +++++++++ resources/js/Pages/Settings/Password.vue | 130 ++++++++++++++++++ resources/js/Pages/Settings/Profile.vue | 129 +++++++++++++++++ routes/auth.php | 3 - routes/web.php | 25 +++- tailwind.config.js | 41 ++++-- tests/Feature/Settings/DeleteAccountTest.php | 37 ----- tests/Feature/Settings/ProfileUpdateTest.php | 37 +++++ 32 files changed, 1077 insertions(+), 109 deletions(-) create mode 100644 .github/workflows/tests.yml delete mode 100644 app/Http/Controllers/Settings/DeleteController.php create mode 100644 app/Http/Requests/Settings/ProfileUpdateRequest.php create mode 100644 resources/js/Components/AppearanceTabs.vue create mode 100644 resources/js/Components/Heading.vue create mode 100644 resources/js/Components/Settings/DeleteUser.vue create mode 100644 resources/js/Components/Settings/Heading.vue create mode 100644 resources/js/Components/ui/dialog/Dialog.vue create mode 100644 resources/js/Components/ui/dialog/DialogClose.vue create mode 100644 resources/js/Components/ui/dialog/DialogContent.vue create mode 100644 resources/js/Components/ui/dialog/DialogDescription.vue create mode 100644 resources/js/Components/ui/dialog/DialogFooter.vue create mode 100644 resources/js/Components/ui/dialog/DialogHeader.vue create mode 100644 resources/js/Components/ui/dialog/DialogScrollContent.vue create mode 100644 resources/js/Components/ui/dialog/DialogTitle.vue create mode 100644 resources/js/Components/ui/dialog/DialogTrigger.vue create mode 100644 resources/js/Components/ui/dialog/index.ts create mode 100644 resources/js/Composables/useAppearance.ts create mode 100644 resources/js/Pages/Settings/Appearance.vue create mode 100644 resources/js/Pages/Settings/Layout.vue create mode 100644 resources/js/Pages/Settings/Password.vue create mode 100644 resources/js/Pages/Settings/Profile.vue delete mode 100644 tests/Feature/Settings/DeleteAccountTest.php diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..7f401db2 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,53 @@ +name: tests + +on: + push: + branches: + - develop + - main + pull_request: + branches: + - develop + - main + +jobs: + ci: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + tools: composer:v2 + coverage: xdebug + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '18' + cache: 'npm' + + - name: Install Node dependencies + run: npm ci + + - name: Build assets + run: npm run build + + - name: Create SQLite Database + run: touch database/database.sqlite + + - name: Install Dependencies + run: composer install --no-interaction --prefer-dist --optimize-autoloader + + - name: Copy Environment File + run: cp .env.example .env + + - name: Generate Application Key + run: php artisan key:generate + + - name: Tests + run: ./vendor/bin/pest --ci \ No newline at end of file diff --git a/app/Http/Controllers/Settings/DeleteController.php b/app/Http/Controllers/Settings/DeleteController.php deleted file mode 100644 index 9865de06..00000000 --- a/app/Http/Controllers/Settings/DeleteController.php +++ /dev/null @@ -1,48 +0,0 @@ - $request->user() instanceof MustVerifyEmail, - 'status' => session('status'), - ]); - } - - /** - * Delete the user's account. - */ - public function destroy(Request $request): RedirectResponse - { - $request->validate([ - 'password' => ['required', 'current_password'], - ]); - - $user = $request->user(); - - Auth::logout(); - - $user->delete(); - - $request->session()->invalidate(); - $request->session()->regenerateToken(); - - return Redirect::to('/'); - } -} diff --git a/app/Http/Controllers/Settings/ProfileController.php b/app/Http/Controllers/Settings/ProfileController.php index da1c96c8..689c0687 100644 --- a/app/Http/Controllers/Settings/ProfileController.php +++ b/app/Http/Controllers/Settings/ProfileController.php @@ -7,6 +7,7 @@ use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Redirect; use Inertia\Inertia; use Inertia\Response; @@ -39,4 +40,25 @@ public function update(ProfileUpdateRequest $request): RedirectResponse return Redirect::route('profile.edit'); } + + /** + * Delete the user's profile. + */ + public function destroy(Request $request): RedirectResponse + { + $request->validate([ + 'password' => ['required', 'current_password'], + ]); + + $user = $request->user(); + + Auth::logout(); + + $user->delete(); + + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return Redirect::to('/'); + } } diff --git a/app/Http/Requests/Settings/ProfileUpdateRequest.php b/app/Http/Requests/Settings/ProfileUpdateRequest.php new file mode 100644 index 00000000..c294aab2 --- /dev/null +++ b/app/Http/Requests/Settings/ProfileUpdateRequest.php @@ -0,0 +1,30 @@ +|string> + */ + public function rules(): array + { + return [ + 'name' => ['required', 'string', 'max:255'], + 'email' => [ + 'required', + 'string', + 'lowercase', + 'email', + 'max:255', + Rule::unique(User::class)->ignore($this->user()->id), + ], + ]; + } +} diff --git a/package-lock.json b/package-lock.json index 96cc4da8..9141d7fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "tailwindcss-animate": "^1.0.7" }, "devDependencies": { + "@headlessui/vue": "^1.7.23", "@inertiajs/vue3": "^2.0.0-beta.3", "@tailwindcss/forms": "^0.5.3", "@types/node": "^22.10.2", @@ -559,6 +560,22 @@ } } }, + "node_modules/@headlessui/vue": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.23.tgz", + "integrity": "sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tanstack/vue-virtual": "^3.0.0-beta.60" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, "node_modules/@inertiajs/core": { "version": "2.0.0-beta.3", "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.0.0-beta.3.tgz", diff --git a/package.json b/package.json index 4bdae1c7..57bd1795 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "dev": "vite" }, "devDependencies": { + "@headlessui/vue": "^1.7.23", "@inertiajs/vue3": "^2.0.0-beta.3", "@tailwindcss/forms": "^0.5.3", "@types/node": "^22.10.2", diff --git a/resources/js/Components/AppearanceTabs.vue b/resources/js/Components/AppearanceTabs.vue new file mode 100644 index 00000000..2c508d89 --- /dev/null +++ b/resources/js/Components/AppearanceTabs.vue @@ -0,0 +1,44 @@ + + + diff --git a/resources/js/Components/ApplicationLogo.vue b/resources/js/Components/ApplicationLogo.vue index 9f6eef56..3827bd3d 100644 --- a/resources/js/Components/ApplicationLogo.vue +++ b/resources/js/Components/ApplicationLogo.vue @@ -1,5 +1,24 @@ + + diff --git a/resources/js/Components/NavUser.vue b/resources/js/Components/NavUser.vue index 78caac78..ebfb70b7 100644 --- a/resources/js/Components/NavUser.vue +++ b/resources/js/Components/NavUser.vue @@ -48,7 +48,7 @@ const user = page.props.auth.user as User; size="lg" class="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground" > - + {{ getInitials(user.name) }} @@ -69,7 +69,7 @@ const user = page.props.auth.user as User; >
- + {{ getInitials(user.name) }} diff --git a/resources/js/Components/Settings/DeleteUser.vue b/resources/js/Components/Settings/DeleteUser.vue new file mode 100644 index 00000000..3729a4fc --- /dev/null +++ b/resources/js/Components/Settings/DeleteUser.vue @@ -0,0 +1,95 @@ + + + diff --git a/resources/js/Components/Settings/Heading.vue b/resources/js/Components/Settings/Heading.vue new file mode 100644 index 00000000..a4976e51 --- /dev/null +++ b/resources/js/Components/Settings/Heading.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/Components/ui/dialog/Dialog.vue b/resources/js/Components/ui/dialog/Dialog.vue new file mode 100644 index 00000000..a04c0262 --- /dev/null +++ b/resources/js/Components/ui/dialog/Dialog.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/Components/ui/dialog/DialogClose.vue b/resources/js/Components/ui/dialog/DialogClose.vue new file mode 100644 index 00000000..a64703e5 --- /dev/null +++ b/resources/js/Components/ui/dialog/DialogClose.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/Components/ui/dialog/DialogContent.vue b/resources/js/Components/ui/dialog/DialogContent.vue new file mode 100644 index 00000000..0de84518 --- /dev/null +++ b/resources/js/Components/ui/dialog/DialogContent.vue @@ -0,0 +1,50 @@ + + + diff --git a/resources/js/Components/ui/dialog/DialogDescription.vue b/resources/js/Components/ui/dialog/DialogDescription.vue new file mode 100644 index 00000000..878ef2bd --- /dev/null +++ b/resources/js/Components/ui/dialog/DialogDescription.vue @@ -0,0 +1,24 @@ + + + diff --git a/resources/js/Components/ui/dialog/DialogFooter.vue b/resources/js/Components/ui/dialog/DialogFooter.vue new file mode 100644 index 00000000..ac2d0c18 --- /dev/null +++ b/resources/js/Components/ui/dialog/DialogFooter.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/Components/ui/dialog/DialogHeader.vue b/resources/js/Components/ui/dialog/DialogHeader.vue new file mode 100644 index 00000000..b2c9085d --- /dev/null +++ b/resources/js/Components/ui/dialog/DialogHeader.vue @@ -0,0 +1,16 @@ + + + diff --git a/resources/js/Components/ui/dialog/DialogScrollContent.vue b/resources/js/Components/ui/dialog/DialogScrollContent.vue new file mode 100644 index 00000000..0d448213 --- /dev/null +++ b/resources/js/Components/ui/dialog/DialogScrollContent.vue @@ -0,0 +1,59 @@ + + + diff --git a/resources/js/Components/ui/dialog/DialogTitle.vue b/resources/js/Components/ui/dialog/DialogTitle.vue new file mode 100644 index 00000000..1f049e32 --- /dev/null +++ b/resources/js/Components/ui/dialog/DialogTitle.vue @@ -0,0 +1,29 @@ + + + diff --git a/resources/js/Components/ui/dialog/DialogTrigger.vue b/resources/js/Components/ui/dialog/DialogTrigger.vue new file mode 100644 index 00000000..ee0c12ff --- /dev/null +++ b/resources/js/Components/ui/dialog/DialogTrigger.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/Components/ui/dialog/index.ts b/resources/js/Components/ui/dialog/index.ts new file mode 100644 index 00000000..ca8cfeae --- /dev/null +++ b/resources/js/Components/ui/dialog/index.ts @@ -0,0 +1,9 @@ +export { default as Dialog } from './Dialog.vue' +export { default as DialogClose } from './DialogClose.vue' +export { default as DialogContent } from './DialogContent.vue' +export { default as DialogDescription } from './DialogDescription.vue' +export { default as DialogFooter } from './DialogFooter.vue' +export { default as DialogHeader } from './DialogHeader.vue' +export { default as DialogScrollContent } from './DialogScrollContent.vue' +export { default as DialogTitle } from './DialogTitle.vue' +export { default as DialogTrigger } from './DialogTrigger.vue' diff --git a/resources/js/Composables/useAppearance.ts b/resources/js/Composables/useAppearance.ts new file mode 100644 index 00000000..48630114 --- /dev/null +++ b/resources/js/Composables/useAppearance.ts @@ -0,0 +1,56 @@ +import { ref, watch, onMounted } from 'vue' +import { usePage } from '@inertiajs/vue3' +import axios from 'axios' + +type Appearance = 'light' | 'dark' | 'system' + +export function useAppearance() { + const appearance = ref('system') + + // Initialize appearance from user preferences or system + onMounted(() => { + const savedAppearance = localStorage.getItem('appearance') as Appearance | null + if (savedAppearance) { + appearance.value = savedAppearance + updateTheme(savedAppearance) + } + }) + + // Update theme based on appearance setting + function updateTheme(value: Appearance) { + if (value === 'system') { + const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + document.documentElement.classList.toggle('dark', systemTheme === 'dark') + } else { + document.documentElement.classList.toggle('dark', value === 'dark') + } + } + + // Handle system theme changes + onMounted(() => { + const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)') + mediaQuery.addEventListener('change', () => { + if (appearance.value === 'system') { + updateTheme('system') + } + }) + }) + + // Update appearance preference + async function updateAppearance(value: Appearance) { + appearance.value = value + localStorage.setItem('appearance', value) + updateTheme(value) + + // Update user preference in backend if authenticated + const { auth } = usePage().props + if (auth?.user) { + await axios.patch(route('settings.appearance'), { appearance: value }) + } + } + + return { + appearance, + updateAppearance + } +} diff --git a/resources/js/Pages/Settings/Appearance.vue b/resources/js/Pages/Settings/Appearance.vue new file mode 100644 index 00000000..ff8884c2 --- /dev/null +++ b/resources/js/Pages/Settings/Appearance.vue @@ -0,0 +1,41 @@ + + + diff --git a/resources/js/Pages/Settings/Layout.vue b/resources/js/Pages/Settings/Layout.vue new file mode 100644 index 00000000..3439ab2a --- /dev/null +++ b/resources/js/Pages/Settings/Layout.vue @@ -0,0 +1,68 @@ + + + diff --git a/resources/js/Pages/Settings/Password.vue b/resources/js/Pages/Settings/Password.vue new file mode 100644 index 00000000..cc75b2a4 --- /dev/null +++ b/resources/js/Pages/Settings/Password.vue @@ -0,0 +1,130 @@ + + + diff --git a/resources/js/Pages/Settings/Profile.vue b/resources/js/Pages/Settings/Profile.vue new file mode 100644 index 00000000..9b1ea155 --- /dev/null +++ b/resources/js/Pages/Settings/Profile.vue @@ -0,0 +1,129 @@ + + + diff --git a/routes/auth.php b/routes/auth.php index 3926ecf7..7862ed46 100644 --- a/routes/auth.php +++ b/routes/auth.php @@ -5,7 +5,6 @@ use App\Http\Controllers\Auth\EmailVerificationNotificationController; use App\Http\Controllers\Auth\EmailVerificationPromptController; use App\Http\Controllers\Auth\NewPasswordController; -use App\Http\Controllers\Auth\PasswordController; use App\Http\Controllers\Auth\PasswordResetLinkController; use App\Http\Controllers\Auth\RegisteredUserController; use App\Http\Controllers\Auth\VerifyEmailController; @@ -52,8 +51,6 @@ Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); - Route::put('password', [PasswordController::class, 'update'])->name('password.update'); - Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) ->name('logout'); }); diff --git a/routes/web.php b/routes/web.php index 28f4c301..579cba88 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,8 @@ name('home'); Route::get('dashboard', function(){ - return Inertia::render('Dashboard', [ - 'name' => config('app.name'), - ]); + return Inertia::render('Dashboard'); })->middleware(['auth', 'verified'])->name('dashboard'); Route::middleware('auth')->group(function () { - Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); - Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); - Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); + + Route::redirect('settings', 'settings/profile'); + + Route::get('settings/profile', [ProfileController::class, 'edit'])->name('profile.edit'); + Route::patch('settings/profile', [ProfileController::class, 'update'])->name('profile.update'); + Route::delete('settings/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); + + Route::get('settings/password', [PasswordController::class, 'edit'])->name('password.edit'); + Route::put('settings/password', [PasswordController::class, 'update'])->name('password.update'); + + Route::get('settings/appearance', function () { + return Inertia::render('Settings/Appearance'); + })->name('appearance'); }); -require __DIR__.'/auth.php'; \ No newline at end of file +require __DIR__.'/auth.php'; diff --git a/tailwind.config.js b/tailwind.config.js index 5f56afa1..094e40e9 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -2,17 +2,25 @@ import defaultTheme from 'tailwindcss/defaultTheme'; /** @type {import('tailwindcss').Config} */ export default { + darkMode: ['class'], content: [ './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', './storage/framework/views/*.php', './resources/views/**/*.blade.php', './resources/js/**/*.{vue,js,ts,jsx,tsx}', ], - theme: { extend: { fontFamily: { - sans: defaultTheme.fontFamily.sans, + sans: [ + 'Figtree', + ...defaultTheme.fontFamily.sans + ] + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' }, colors: { background: 'hsl(var(--background))', @@ -48,14 +56,25 @@ export default { border: 'hsl(var(--border))', input: 'hsl(var(--input))', ring: 'hsl(var(--ring))', - }, - borderRadius: { - lg: `var(--radius)`, - md: `calc(var(--radius) - 2px)`, - sm: 'calc(var(--radius) - 4px)', - }, - }, + chart: { + '1': 'hsl(var(--chart-1))', + '2': 'hsl(var(--chart-2))', + '3': 'hsl(var(--chart-3))', + '4': 'hsl(var(--chart-4))', + '5': 'hsl(var(--chart-5))' + }, + sidebar: { + DEFAULT: 'hsl(var(--sidebar-background))', + foreground: 'hsl(var(--sidebar-foreground))', + primary: 'hsl(var(--sidebar-primary))', + 'primary-foreground': 'hsl(var(--sidebar-primary-foreground))', + accent: 'hsl(var(--sidebar-accent))', + 'accent-foreground': 'hsl(var(--sidebar-accent-foreground))', + border: 'hsl(var(--sidebar-border))', + ring: 'hsl(var(--sidebar-ring))' + } + } + } }, - - plugins: [], + plugins: [require("tailwindcss-animate")], }; \ No newline at end of file diff --git a/tests/Feature/Settings/DeleteAccountTest.php b/tests/Feature/Settings/DeleteAccountTest.php deleted file mode 100644 index 0dcaf7cb..00000000 --- a/tests/Feature/Settings/DeleteAccountTest.php +++ /dev/null @@ -1,37 +0,0 @@ -create(); - - $response = $this - ->actingAs($user) - ->delete('/settings/delete', [ - 'password' => 'password', - ]); - - $response - ->assertSessionHasNoErrors() - ->assertRedirect('/'); - - $this->assertGuest(); - $this->assertNull($user->fresh()); -}); - -test('correct password must be provided to delete account', function () { - $user = User::factory()->create(); - - $response = $this - ->actingAs($user) - ->from('/settings/delete') - ->delete('/settings/delete', [ - 'password' => 'wrong-password', - ]); - - $response - ->assertSessionHasErrors('password') - ->assertRedirect('/settings/delete'); - - $this->assertNotNull($user->fresh()); -}); diff --git a/tests/Feature/Settings/ProfileUpdateTest.php b/tests/Feature/Settings/ProfileUpdateTest.php index 6df65f7d..05cea695 100644 --- a/tests/Feature/Settings/ProfileUpdateTest.php +++ b/tests/Feature/Settings/ProfileUpdateTest.php @@ -49,3 +49,40 @@ $this->assertNotNull($user->refresh()->email_verified_at); }); + + +// Delete Profile Tests + +test('user can delete their account', function () { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->delete('/settings/profile', [ + 'password' => 'password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/'); + + $this->assertGuest(); + $this->assertNull($user->fresh()); +}); + +test('correct password must be provided to delete account', function () { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->from('/settings/profile') + ->delete('/settings/profile', [ + 'password' => 'wrong-password', + ]); + + $response + ->assertSessionHasErrors('password') + ->assertRedirect('/settings/profile'); + + $this->assertNotNull($user->fresh()); +}); From 02f8cd233c781b57174f35655c02a4da09386f88 Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Thu, 2 Jan 2025 11:09:15 -0500 Subject: [PATCH 09/92] Getting tests to pass --- .github/workflows/tests.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7f401db2..ca8ab01e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -34,9 +34,6 @@ jobs: - name: Install Node dependencies run: npm ci - - name: Build assets - run: npm run build - - name: Create SQLite Database run: touch database/database.sqlite @@ -49,5 +46,11 @@ jobs: - name: Generate Application Key run: php artisan key:generate + - name: Publish Ziggy config + run: php artisan ziggy:generate + + - name: Build assets + run: npm run build + - name: Tests run: ./vendor/bin/pest --ci \ No newline at end of file From 5cb6158435318b59890bde2810af99211566ac0b Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Thu, 2 Jan 2025 11:32:23 -0500 Subject: [PATCH 10/92] renaming to capital Components and updating Readme --- README.md | 10 +++++----- public/logo.svg | 7 +++++++ resources/js/Components/AppSidebar.vue | 2 +- resources/js/Components/NavFooter.vue | 2 +- resources/js/Components/NavMain.vue | 2 +- resources/js/Components/NavUser.vue | 6 +++--- resources/js/Components/sidebar/NavMain.vue | 4 ++-- resources/js/Components/sidebar/NavProjects.vue | 4 ++-- resources/js/Components/sidebar/NavSecondary.vue | 2 +- resources/js/Components/sidebar/NavUser.vue | 6 +++--- resources/js/Components/sidebar/Sidebar.vue | 2 +- resources/js/Pages/Auth/ForgotPassword.vue | 6 +++--- resources/js/Pages/Auth/Login.vue | 6 +++--- resources/js/Pages/Auth/Register.vue | 6 +++--- resources/js/Pages/Auth/ResetPassword.vue | 6 +++--- resources/js/Pages/Auth/VerifyEmail.vue | 2 +- 16 files changed, 40 insertions(+), 33 deletions(-) create mode 100644 public/logo.svg diff --git a/README.md b/README.md index 955cfeb3..5919826b 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -

Laravel Logo

+

Laravel Logo

-Build Status -Total Downloads -Latest Stable Version +Build Status License

-## Vue Starter Kit + + +## Introduction Welcome to the Laravel **Vue Starter Kit**, a starter kit built using [Laravel](https://laravel.com), [Vue](https://vuejs.org), [Inertia](https://inertiajs.com), and [Tailwind CSS](https://tailwindcss.com). diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 00000000..f99154c4 --- /dev/null +++ b/public/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/js/Components/AppSidebar.vue b/resources/js/Components/AppSidebar.vue index dec8260c..d38f3a5e 100644 --- a/resources/js/Components/AppSidebar.vue +++ b/resources/js/Components/AppSidebar.vue @@ -11,7 +11,7 @@ import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, -} from '@/components/ui/sidebar'; +} from '@/Components/ui/sidebar'; import ApplicationLogo from './ApplicationLogo.vue'; interface NavItem { diff --git a/resources/js/Components/NavFooter.vue b/resources/js/Components/NavFooter.vue index a71284e6..f9305aac 100644 --- a/resources/js/Components/NavFooter.vue +++ b/resources/js/Components/NavFooter.vue @@ -7,7 +7,7 @@ import { SidebarMenuButton, SidebarMenuItem, SidebarMenuAction -} from '@/components/ui/sidebar'; +} from '@/Components/ui/sidebar'; interface NavItem { title: string; diff --git a/resources/js/Components/NavMain.vue b/resources/js/Components/NavMain.vue index 3fa37109..ef37434b 100644 --- a/resources/js/Components/NavMain.vue +++ b/resources/js/Components/NavMain.vue @@ -6,7 +6,7 @@ import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, -} from '@/components/ui/sidebar'; +} from '@/Components/ui/sidebar'; interface NavItem { title: string; diff --git a/resources/js/Components/NavUser.vue b/resources/js/Components/NavUser.vue index ebfb70b7..13c1a31c 100644 --- a/resources/js/Components/NavUser.vue +++ b/resources/js/Components/NavUser.vue @@ -6,7 +6,7 @@ import { Avatar, AvatarFallback, AvatarImage, -} from '@/components/ui/avatar'; +} from '@/Components/ui/avatar'; import { DropdownMenu, DropdownMenuContent, @@ -15,12 +15,12 @@ import { DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, -} from '@/components/ui/dropdown-menu'; +} from '@/Components/ui/dropdown-menu'; import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, -} from '@/components/ui/sidebar'; +} from '@/Components/ui/sidebar'; interface User { name: string; diff --git a/resources/js/Components/sidebar/NavMain.vue b/resources/js/Components/sidebar/NavMain.vue index 71898dc8..e0f53367 100644 --- a/resources/js/Components/sidebar/NavMain.vue +++ b/resources/js/Components/sidebar/NavMain.vue @@ -5,7 +5,7 @@ Collapsible, CollapsibleContent, CollapsibleTrigger, - } from '@/components/ui/collapsible' + } from '@/Components/ui/collapsible' import { SidebarGroup, SidebarGroupLabel, @@ -16,7 +16,7 @@ SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, - } from '@/components/ui/sidebar' + } from '@/Components/ui/sidebar' interface SubItem { title: string diff --git a/resources/js/Components/sidebar/NavProjects.vue b/resources/js/Components/sidebar/NavProjects.vue index 48776eb5..8068f6eb 100644 --- a/resources/js/Components/sidebar/NavProjects.vue +++ b/resources/js/Components/sidebar/NavProjects.vue @@ -12,7 +12,7 @@ DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, - } from '@/components/ui/dropdown-menu' + } from '@/Components/ui/dropdown-menu' import { SidebarGroup, SidebarGroupLabel, @@ -21,7 +21,7 @@ SidebarMenuButton, SidebarMenuItem, useSidebar, - } from '@/components/ui/sidebar' + } from '@/Components/ui/sidebar' interface Project { name: string diff --git a/resources/js/Components/sidebar/NavSecondary.vue b/resources/js/Components/sidebar/NavSecondary.vue index f9cb6c27..e5942715 100644 --- a/resources/js/Components/sidebar/NavSecondary.vue +++ b/resources/js/Components/sidebar/NavSecondary.vue @@ -6,7 +6,7 @@ SidebarMenu, SidebarMenuButton, SidebarMenuItem, - } from '@/components/ui/sidebar' + } from '@/Components/ui/sidebar' interface NavItem { title: string diff --git a/resources/js/Components/sidebar/NavUser.vue b/resources/js/Components/sidebar/NavUser.vue index d633106f..012eceb6 100644 --- a/resources/js/Components/sidebar/NavUser.vue +++ b/resources/js/Components/sidebar/NavUser.vue @@ -12,7 +12,7 @@ import { Avatar, AvatarFallback, AvatarImage, -} from '@/components/ui/avatar' +} from '@/Components/ui/avatar' import { DropdownMenu, DropdownMenuContent, @@ -21,13 +21,13 @@ import { DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, -} from '@/components/ui/dropdown-menu' +} from '@/Components/ui/dropdown-menu' import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar, -} from '@/components/ui/sidebar' +} from '@/Components/ui/sidebar' interface User { name: string diff --git a/resources/js/Components/sidebar/Sidebar.vue b/resources/js/Components/sidebar/Sidebar.vue index 82c9ec88..5eadf8ed 100644 --- a/resources/js/Components/sidebar/Sidebar.vue +++ b/resources/js/Components/sidebar/Sidebar.vue @@ -26,7 +26,7 @@ const props = defineProps(['name']) SidebarMenu, SidebarMenuButton, SidebarMenuItem, - } from '@/components/ui/sidebar' + } from '@/Components/ui/sidebar' interface NavItem { title: string diff --git a/resources/js/Pages/Auth/ForgotPassword.vue b/resources/js/Pages/Auth/ForgotPassword.vue index 99132373..0489418a 100644 --- a/resources/js/Pages/Auth/ForgotPassword.vue +++ b/resources/js/Pages/Auth/ForgotPassword.vue @@ -2,9 +2,9 @@ import { LoaderCircle } from 'lucide-vue-next'; import { Head, Link, useForm } from '@inertiajs/vue3'; import InputError from '@/Components/InputError.vue'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Label } from '@/components/ui/label'; +import { Button } from '@/Components/ui/button'; +import { Input } from '@/Components/ui/input'; +import { Label } from '@/Components/ui/label'; import AuthLayout from '@/Layouts/Auth/AuthBase.vue'; defineProps<{ diff --git a/resources/js/Pages/Auth/Login.vue b/resources/js/Pages/Auth/Login.vue index 3ae8c77d..014d5f78 100644 --- a/resources/js/Pages/Auth/Login.vue +++ b/resources/js/Pages/Auth/Login.vue @@ -3,9 +3,9 @@ import { useForm, Link, Head } from '@inertiajs/vue3'; import { ref } from 'vue'; import { LoaderCircle } from 'lucide-vue-next'; import AuthBase from '@/Layouts/Auth/AuthBase.vue'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Label } from '@/components/ui/label'; +import { Button } from '@/Components/ui/button'; +import { Input } from '@/Components/ui/input'; +import { Label } from '@/Components/ui/label'; import InputError from '@/Components/InputError.vue'; defineProps<{ diff --git a/resources/js/Pages/Auth/Register.vue b/resources/js/Pages/Auth/Register.vue index fb740c05..72b5c577 100644 --- a/resources/js/Pages/Auth/Register.vue +++ b/resources/js/Pages/Auth/Register.vue @@ -3,9 +3,9 @@ import { useForm, Link, Head } from '@inertiajs/vue3'; import { ref } from 'vue'; import { LoaderCircle } from 'lucide-vue-next'; import AuthBase from '@/Layouts/Auth/AuthBase.vue'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Label } from '@/components/ui/label'; +import { Button } from '@/Components/ui/button'; +import { Input } from '@/Components/ui/input'; +import { Label } from '@/Components/ui/label'; import InputError from '@/Components/InputError.vue'; const form = useForm({ diff --git a/resources/js/Pages/Auth/ResetPassword.vue b/resources/js/Pages/Auth/ResetPassword.vue index f41fe8d4..2f655cbb 100644 --- a/resources/js/Pages/Auth/ResetPassword.vue +++ b/resources/js/Pages/Auth/ResetPassword.vue @@ -2,9 +2,9 @@ import { LoaderCircle } from 'lucide-vue-next'; import { Head, useForm } from '@inertiajs/vue3'; import InputError from '@/Components/InputError.vue'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Label } from '@/components/ui/label'; +import { Button } from '@/Components/ui/button'; +import { Input } from '@/Components/ui/input'; +import { Label } from '@/Components/ui/label'; import AuthLayout from '@/Layouts/Auth/AuthBase.vue'; interface Props { diff --git a/resources/js/Pages/Auth/VerifyEmail.vue b/resources/js/Pages/Auth/VerifyEmail.vue index 0b16572a..7b3c0add 100644 --- a/resources/js/Pages/Auth/VerifyEmail.vue +++ b/resources/js/Pages/Auth/VerifyEmail.vue @@ -1,7 +1,7 @@ - - diff --git a/resources/js/Pages/Auth/ForgotPassword.vue b/resources/js/Pages/Auth/ForgotPassword.vue index 0489418a..fa732280 100644 --- a/resources/js/Pages/Auth/ForgotPassword.vue +++ b/resources/js/Pages/Auth/ForgotPassword.vue @@ -1,11 +1,11 @@ + + diff --git a/resources/js/components/AppearanceTabs.vue b/resources/js/components/AppearanceTabs.vue new file mode 100644 index 00000000..2c508d89 --- /dev/null +++ b/resources/js/components/AppearanceTabs.vue @@ -0,0 +1,44 @@ + + + diff --git a/resources/js/components/ApplicationLogo.vue b/resources/js/components/ApplicationLogo.vue new file mode 100644 index 00000000..3827bd3d --- /dev/null +++ b/resources/js/components/ApplicationLogo.vue @@ -0,0 +1,27 @@ + + + diff --git a/resources/js/components/Checkbox.vue b/resources/js/components/Checkbox.vue new file mode 100644 index 00000000..f76e7f5e --- /dev/null +++ b/resources/js/components/Checkbox.vue @@ -0,0 +1,29 @@ + + + diff --git a/resources/js/components/DangerButton.vue b/resources/js/components/DangerButton.vue new file mode 100644 index 00000000..ac45afcd --- /dev/null +++ b/resources/js/components/DangerButton.vue @@ -0,0 +1,7 @@ + diff --git a/resources/js/components/Dropdown.vue b/resources/js/components/Dropdown.vue new file mode 100644 index 00000000..007dd945 --- /dev/null +++ b/resources/js/components/Dropdown.vue @@ -0,0 +1,82 @@ + + + diff --git a/resources/js/components/DropdownLink.vue b/resources/js/components/DropdownLink.vue new file mode 100644 index 00000000..8ecf2ef7 --- /dev/null +++ b/resources/js/components/DropdownLink.vue @@ -0,0 +1,16 @@ + + + diff --git a/resources/js/components/Heading.vue b/resources/js/components/Heading.vue new file mode 100644 index 00000000..56ce2618 --- /dev/null +++ b/resources/js/components/Heading.vue @@ -0,0 +1,20 @@ + + + diff --git a/resources/js/components/InputError.vue b/resources/js/components/InputError.vue new file mode 100644 index 00000000..cbfb2a75 --- /dev/null +++ b/resources/js/components/InputError.vue @@ -0,0 +1,13 @@ + + + diff --git a/resources/js/components/InputLabel.vue b/resources/js/components/InputLabel.vue new file mode 100644 index 00000000..3fd5bb9e --- /dev/null +++ b/resources/js/components/InputLabel.vue @@ -0,0 +1,12 @@ + + + diff --git a/resources/js/components/Modal.vue b/resources/js/components/Modal.vue new file mode 100644 index 00000000..952fa465 --- /dev/null +++ b/resources/js/components/Modal.vue @@ -0,0 +1,121 @@ + + + diff --git a/resources/js/components/NavFooter.vue b/resources/js/components/NavFooter.vue new file mode 100644 index 00000000..a71284e6 --- /dev/null +++ b/resources/js/components/NavFooter.vue @@ -0,0 +1,48 @@ + + + diff --git a/resources/js/components/NavLink.vue b/resources/js/components/NavLink.vue new file mode 100644 index 00000000..cf100ec9 --- /dev/null +++ b/resources/js/components/NavLink.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/components/NavMain.vue b/resources/js/components/NavMain.vue new file mode 100644 index 00000000..3fa37109 --- /dev/null +++ b/resources/js/components/NavMain.vue @@ -0,0 +1,48 @@ + + + diff --git a/resources/js/components/NavUser.vue b/resources/js/components/NavUser.vue new file mode 100644 index 00000000..ebfb70b7 --- /dev/null +++ b/resources/js/components/NavUser.vue @@ -0,0 +1,111 @@ + + + diff --git a/resources/js/components/PrimaryButton.vue b/resources/js/components/PrimaryButton.vue new file mode 100644 index 00000000..3bf8eb90 --- /dev/null +++ b/resources/js/components/PrimaryButton.vue @@ -0,0 +1,7 @@ + diff --git a/resources/js/components/ResponsiveNavLink.vue b/resources/js/components/ResponsiveNavLink.vue new file mode 100644 index 00000000..63b6725a --- /dev/null +++ b/resources/js/components/ResponsiveNavLink.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/components/SecondaryButton.vue b/resources/js/components/SecondaryButton.vue new file mode 100644 index 00000000..474c6552 --- /dev/null +++ b/resources/js/components/SecondaryButton.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/components/TextInput.vue b/resources/js/components/TextInput.vue new file mode 100644 index 00000000..db49f87f --- /dev/null +++ b/resources/js/components/TextInput.vue @@ -0,0 +1,23 @@ + + + diff --git a/resources/js/components/settings/DeleteUser.vue b/resources/js/components/settings/DeleteUser.vue new file mode 100644 index 00000000..83f3ed75 --- /dev/null +++ b/resources/js/components/settings/DeleteUser.vue @@ -0,0 +1,95 @@ + + + diff --git a/resources/js/components/settings/Heading.vue b/resources/js/components/settings/Heading.vue new file mode 100644 index 00000000..3d612f4e --- /dev/null +++ b/resources/js/components/settings/Heading.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/components/sidebar/NavMain.vue b/resources/js/components/sidebar/NavMain.vue new file mode 100644 index 00000000..71898dc8 --- /dev/null +++ b/resources/js/components/sidebar/NavMain.vue @@ -0,0 +1,82 @@ + + + diff --git a/resources/js/components/sidebar/NavProjects.vue b/resources/js/components/sidebar/NavProjects.vue new file mode 100644 index 00000000..48776eb5 --- /dev/null +++ b/resources/js/components/sidebar/NavProjects.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/resources/js/components/sidebar/NavSecondary.vue b/resources/js/components/sidebar/NavSecondary.vue new file mode 100644 index 00000000..f9cb6c27 --- /dev/null +++ b/resources/js/components/sidebar/NavSecondary.vue @@ -0,0 +1,37 @@ + + + \ No newline at end of file diff --git a/resources/js/components/sidebar/NavUser.vue b/resources/js/components/sidebar/NavUser.vue new file mode 100644 index 00000000..d633106f --- /dev/null +++ b/resources/js/components/sidebar/NavUser.vue @@ -0,0 +1,123 @@ + + + \ No newline at end of file diff --git a/resources/js/components/sidebar/Sidebar.vue b/resources/js/components/sidebar/Sidebar.vue new file mode 100644 index 00000000..b8fd7b5a --- /dev/null +++ b/resources/js/components/sidebar/Sidebar.vue @@ -0,0 +1,205 @@ + + + + \ No newline at end of file diff --git a/resources/js/components/ui/avatar/Avatar.vue b/resources/js/components/ui/avatar/Avatar.vue new file mode 100644 index 00000000..ed6ef22a --- /dev/null +++ b/resources/js/components/ui/avatar/Avatar.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/components/ui/avatar/AvatarFallback.vue b/resources/js/components/ui/avatar/AvatarFallback.vue new file mode 100644 index 00000000..a671a219 --- /dev/null +++ b/resources/js/components/ui/avatar/AvatarFallback.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/components/ui/avatar/AvatarImage.vue b/resources/js/components/ui/avatar/AvatarImage.vue new file mode 100644 index 00000000..43499fa2 --- /dev/null +++ b/resources/js/components/ui/avatar/AvatarImage.vue @@ -0,0 +1,9 @@ + + + diff --git a/resources/js/components/ui/avatar/index.ts b/resources/js/components/ui/avatar/index.ts new file mode 100644 index 00000000..5367952a --- /dev/null +++ b/resources/js/components/ui/avatar/index.ts @@ -0,0 +1,24 @@ +import { cva, type VariantProps } from 'class-variance-authority' + +export { default as Avatar } from './Avatar.vue' +export { default as AvatarFallback } from './AvatarFallback.vue' +export { default as AvatarImage } from './AvatarImage.vue' + +export const avatarVariant = cva( + 'inline-flex items-center justify-center font-normal text-foreground select-none shrink-0 bg-secondary overflow-hidden', + { + variants: { + size: { + sm: 'h-10 w-10 text-xs', + base: 'h-16 w-16 text-2xl', + lg: 'h-32 w-32 text-5xl', + }, + shape: { + circle: 'rounded-full', + square: 'rounded-md', + }, + }, + }, +) + +export type AvatarVariants = VariantProps diff --git a/resources/js/components/ui/breadcrumb/Breadcrumb.vue b/resources/js/components/ui/breadcrumb/Breadcrumb.vue new file mode 100644 index 00000000..72ca1437 --- /dev/null +++ b/resources/js/components/ui/breadcrumb/Breadcrumb.vue @@ -0,0 +1,13 @@ + + + diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbEllipsis.vue b/resources/js/components/ui/breadcrumb/BreadcrumbEllipsis.vue new file mode 100644 index 00000000..cfccf9fe --- /dev/null +++ b/resources/js/components/ui/breadcrumb/BreadcrumbEllipsis.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbItem.vue b/resources/js/components/ui/breadcrumb/BreadcrumbItem.vue new file mode 100644 index 00000000..42e721cd --- /dev/null +++ b/resources/js/components/ui/breadcrumb/BreadcrumbItem.vue @@ -0,0 +1,16 @@ + + + diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbLink.vue b/resources/js/components/ui/breadcrumb/BreadcrumbLink.vue new file mode 100644 index 00000000..df004a13 --- /dev/null +++ b/resources/js/components/ui/breadcrumb/BreadcrumbLink.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbList.vue b/resources/js/components/ui/breadcrumb/BreadcrumbList.vue new file mode 100644 index 00000000..60856cc4 --- /dev/null +++ b/resources/js/components/ui/breadcrumb/BreadcrumbList.vue @@ -0,0 +1,16 @@ + + + diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbPage.vue b/resources/js/components/ui/breadcrumb/BreadcrumbPage.vue new file mode 100644 index 00000000..fe43bda6 --- /dev/null +++ b/resources/js/components/ui/breadcrumb/BreadcrumbPage.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbSeparator.vue b/resources/js/components/ui/breadcrumb/BreadcrumbSeparator.vue new file mode 100644 index 00000000..a9c47fea --- /dev/null +++ b/resources/js/components/ui/breadcrumb/BreadcrumbSeparator.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/components/ui/breadcrumb/index.ts b/resources/js/components/ui/breadcrumb/index.ts new file mode 100644 index 00000000..05909832 --- /dev/null +++ b/resources/js/components/ui/breadcrumb/index.ts @@ -0,0 +1,7 @@ +export { default as Breadcrumb } from './Breadcrumb.vue' +export { default as BreadcrumbEllipsis } from './BreadcrumbEllipsis.vue' +export { default as BreadcrumbItem } from './BreadcrumbItem.vue' +export { default as BreadcrumbLink } from './BreadcrumbLink.vue' +export { default as BreadcrumbList } from './BreadcrumbList.vue' +export { default as BreadcrumbPage } from './BreadcrumbPage.vue' +export { default as BreadcrumbSeparator } from './BreadcrumbSeparator.vue' diff --git a/resources/js/components/ui/button/Button.vue b/resources/js/components/ui/button/Button.vue new file mode 100644 index 00000000..d3e3786f --- /dev/null +++ b/resources/js/components/ui/button/Button.vue @@ -0,0 +1,26 @@ + + + diff --git a/resources/js/components/ui/button/index.ts b/resources/js/components/ui/button/index.ts new file mode 100644 index 00000000..18a065a6 --- /dev/null +++ b/resources/js/components/ui/button/index.ts @@ -0,0 +1,35 @@ +import { cva, type VariantProps } from 'class-variance-authority' + +export { default as Button } from './Button.vue' + +export const buttonVariants = cva( + 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', + { + variants: { + variant: { + default: + 'bg-primary text-primary-foreground shadow hover:bg-primary/90', + destructive: + 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90', + outline: + 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground', + secondary: + 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-9 px-4 py-2', + sm: 'h-8 rounded-md px-3 text-xs', + lg: 'h-10 rounded-md px-8', + icon: 'h-9 w-9', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) + +export type ButtonVariants = VariantProps diff --git a/resources/js/components/ui/card/Card.vue b/resources/js/components/ui/card/Card.vue new file mode 100644 index 00000000..12dd5ec7 --- /dev/null +++ b/resources/js/components/ui/card/Card.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/components/ui/card/CardContent.vue b/resources/js/components/ui/card/CardContent.vue new file mode 100644 index 00000000..785913a1 --- /dev/null +++ b/resources/js/components/ui/card/CardContent.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/components/ui/card/CardDescription.vue b/resources/js/components/ui/card/CardDescription.vue new file mode 100644 index 00000000..d5faedd5 --- /dev/null +++ b/resources/js/components/ui/card/CardDescription.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/components/ui/card/CardFooter.vue b/resources/js/components/ui/card/CardFooter.vue new file mode 100644 index 00000000..1ed2efe5 --- /dev/null +++ b/resources/js/components/ui/card/CardFooter.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/components/ui/card/CardHeader.vue b/resources/js/components/ui/card/CardHeader.vue new file mode 100644 index 00000000..951d227e --- /dev/null +++ b/resources/js/components/ui/card/CardHeader.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/components/ui/card/CardTitle.vue b/resources/js/components/ui/card/CardTitle.vue new file mode 100644 index 00000000..842e1689 --- /dev/null +++ b/resources/js/components/ui/card/CardTitle.vue @@ -0,0 +1,18 @@ + + + diff --git a/resources/js/components/ui/card/index.ts b/resources/js/components/ui/card/index.ts new file mode 100644 index 00000000..9ff6d5e7 --- /dev/null +++ b/resources/js/components/ui/card/index.ts @@ -0,0 +1,6 @@ +export { default as Card } from './Card.vue' +export { default as CardContent } from './CardContent.vue' +export { default as CardDescription } from './CardDescription.vue' +export { default as CardFooter } from './CardFooter.vue' +export { default as CardHeader } from './CardHeader.vue' +export { default as CardTitle } from './CardTitle.vue' diff --git a/resources/js/components/ui/collapsible/Collapsible.vue b/resources/js/components/ui/collapsible/Collapsible.vue new file mode 100644 index 00000000..fae7919c --- /dev/null +++ b/resources/js/components/ui/collapsible/Collapsible.vue @@ -0,0 +1,15 @@ + + + diff --git a/resources/js/components/ui/collapsible/CollapsibleContent.vue b/resources/js/components/ui/collapsible/CollapsibleContent.vue new file mode 100644 index 00000000..9f30898b --- /dev/null +++ b/resources/js/components/ui/collapsible/CollapsibleContent.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/components/ui/collapsible/CollapsibleTrigger.vue b/resources/js/components/ui/collapsible/CollapsibleTrigger.vue new file mode 100644 index 00000000..4a434639 --- /dev/null +++ b/resources/js/components/ui/collapsible/CollapsibleTrigger.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/components/ui/collapsible/index.ts b/resources/js/components/ui/collapsible/index.ts new file mode 100644 index 00000000..abab9567 --- /dev/null +++ b/resources/js/components/ui/collapsible/index.ts @@ -0,0 +1,3 @@ +export { default as Collapsible } from './Collapsible.vue' +export { default as CollapsibleContent } from './CollapsibleContent.vue' +export { default as CollapsibleTrigger } from './CollapsibleTrigger.vue' diff --git a/resources/js/components/ui/dialog/Dialog.vue b/resources/js/components/ui/dialog/Dialog.vue new file mode 100644 index 00000000..a04c0262 --- /dev/null +++ b/resources/js/components/ui/dialog/Dialog.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/components/ui/dialog/DialogClose.vue b/resources/js/components/ui/dialog/DialogClose.vue new file mode 100644 index 00000000..a64703e5 --- /dev/null +++ b/resources/js/components/ui/dialog/DialogClose.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/components/ui/dialog/DialogContent.vue b/resources/js/components/ui/dialog/DialogContent.vue new file mode 100644 index 00000000..0de84518 --- /dev/null +++ b/resources/js/components/ui/dialog/DialogContent.vue @@ -0,0 +1,50 @@ + + + diff --git a/resources/js/components/ui/dialog/DialogDescription.vue b/resources/js/components/ui/dialog/DialogDescription.vue new file mode 100644 index 00000000..878ef2bd --- /dev/null +++ b/resources/js/components/ui/dialog/DialogDescription.vue @@ -0,0 +1,24 @@ + + + diff --git a/resources/js/components/ui/dialog/DialogFooter.vue b/resources/js/components/ui/dialog/DialogFooter.vue new file mode 100644 index 00000000..ac2d0c18 --- /dev/null +++ b/resources/js/components/ui/dialog/DialogFooter.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/components/ui/dialog/DialogHeader.vue b/resources/js/components/ui/dialog/DialogHeader.vue new file mode 100644 index 00000000..b2c9085d --- /dev/null +++ b/resources/js/components/ui/dialog/DialogHeader.vue @@ -0,0 +1,16 @@ + + + diff --git a/resources/js/components/ui/dialog/DialogScrollContent.vue b/resources/js/components/ui/dialog/DialogScrollContent.vue new file mode 100644 index 00000000..0d448213 --- /dev/null +++ b/resources/js/components/ui/dialog/DialogScrollContent.vue @@ -0,0 +1,59 @@ + + + diff --git a/resources/js/components/ui/dialog/DialogTitle.vue b/resources/js/components/ui/dialog/DialogTitle.vue new file mode 100644 index 00000000..1f049e32 --- /dev/null +++ b/resources/js/components/ui/dialog/DialogTitle.vue @@ -0,0 +1,29 @@ + + + diff --git a/resources/js/components/ui/dialog/DialogTrigger.vue b/resources/js/components/ui/dialog/DialogTrigger.vue new file mode 100644 index 00000000..ee0c12ff --- /dev/null +++ b/resources/js/components/ui/dialog/DialogTrigger.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/components/ui/dialog/index.ts b/resources/js/components/ui/dialog/index.ts new file mode 100644 index 00000000..ca8cfeae --- /dev/null +++ b/resources/js/components/ui/dialog/index.ts @@ -0,0 +1,9 @@ +export { default as Dialog } from './Dialog.vue' +export { default as DialogClose } from './DialogClose.vue' +export { default as DialogContent } from './DialogContent.vue' +export { default as DialogDescription } from './DialogDescription.vue' +export { default as DialogFooter } from './DialogFooter.vue' +export { default as DialogHeader } from './DialogHeader.vue' +export { default as DialogScrollContent } from './DialogScrollContent.vue' +export { default as DialogTitle } from './DialogTitle.vue' +export { default as DialogTrigger } from './DialogTrigger.vue' diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenu.vue b/resources/js/components/ui/dropdown-menu/DropdownMenu.vue new file mode 100644 index 00000000..b83d90b8 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenu.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue new file mode 100644 index 00000000..ca8867c0 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue @@ -0,0 +1,40 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue new file mode 100644 index 00000000..6523e9ee --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue @@ -0,0 +1,38 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue new file mode 100644 index 00000000..3f201352 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue new file mode 100644 index 00000000..32a2cbd5 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue @@ -0,0 +1,28 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue new file mode 100644 index 00000000..10494d4d --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue @@ -0,0 +1,24 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue new file mode 100644 index 00000000..4a727904 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue new file mode 100644 index 00000000..d3fa4751 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue @@ -0,0 +1,41 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue new file mode 100644 index 00000000..dac6a167 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue new file mode 100644 index 00000000..abaeda64 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue new file mode 100644 index 00000000..e0f4bd77 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue new file mode 100644 index 00000000..92078d9b --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue @@ -0,0 +1,30 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue new file mode 100644 index 00000000..51b137f1 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue @@ -0,0 +1,33 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue new file mode 100644 index 00000000..8efd5a92 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue @@ -0,0 +1,13 @@ + + + diff --git a/resources/js/components/ui/dropdown-menu/index.ts b/resources/js/components/ui/dropdown-menu/index.ts new file mode 100644 index 00000000..6011f35c --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/index.ts @@ -0,0 +1,16 @@ +export { default as DropdownMenu } from './DropdownMenu.vue' + +export { default as DropdownMenuCheckboxItem } from './DropdownMenuCheckboxItem.vue' +export { default as DropdownMenuContent } from './DropdownMenuContent.vue' +export { default as DropdownMenuGroup } from './DropdownMenuGroup.vue' +export { default as DropdownMenuItem } from './DropdownMenuItem.vue' +export { default as DropdownMenuLabel } from './DropdownMenuLabel.vue' +export { default as DropdownMenuRadioGroup } from './DropdownMenuRadioGroup.vue' +export { default as DropdownMenuRadioItem } from './DropdownMenuRadioItem.vue' +export { default as DropdownMenuSeparator } from './DropdownMenuSeparator.vue' +export { default as DropdownMenuShortcut } from './DropdownMenuShortcut.vue' +export { default as DropdownMenuSub } from './DropdownMenuSub.vue' +export { default as DropdownMenuSubContent } from './DropdownMenuSubContent.vue' +export { default as DropdownMenuSubTrigger } from './DropdownMenuSubTrigger.vue' +export { default as DropdownMenuTrigger } from './DropdownMenuTrigger.vue' +export { DropdownMenuPortal } from 'radix-vue' diff --git a/resources/js/components/ui/input/Input.vue b/resources/js/components/ui/input/Input.vue new file mode 100644 index 00000000..c3ac7775 --- /dev/null +++ b/resources/js/components/ui/input/Input.vue @@ -0,0 +1,30 @@ + + + diff --git a/resources/js/components/ui/input/index.ts b/resources/js/components/ui/input/index.ts new file mode 100644 index 00000000..a691dd6c --- /dev/null +++ b/resources/js/components/ui/input/index.ts @@ -0,0 +1 @@ +export { default as Input } from './Input.vue' diff --git a/resources/js/components/ui/label/Label.vue b/resources/js/components/ui/label/Label.vue new file mode 100644 index 00000000..5ad1568f --- /dev/null +++ b/resources/js/components/ui/label/Label.vue @@ -0,0 +1,27 @@ + + + diff --git a/resources/js/components/ui/label/index.ts b/resources/js/components/ui/label/index.ts new file mode 100644 index 00000000..572c2f01 --- /dev/null +++ b/resources/js/components/ui/label/index.ts @@ -0,0 +1 @@ +export { default as Label } from './Label.vue' diff --git a/resources/js/components/ui/separator/Separator.vue b/resources/js/components/ui/separator/Separator.vue new file mode 100644 index 00000000..91613833 --- /dev/null +++ b/resources/js/components/ui/separator/Separator.vue @@ -0,0 +1,35 @@ + + + diff --git a/resources/js/components/ui/separator/index.ts b/resources/js/components/ui/separator/index.ts new file mode 100644 index 00000000..2287bcb9 --- /dev/null +++ b/resources/js/components/ui/separator/index.ts @@ -0,0 +1 @@ +export { default as Separator } from './Separator.vue' diff --git a/resources/js/components/ui/sheet/Sheet.vue b/resources/js/components/ui/sheet/Sheet.vue new file mode 100644 index 00000000..a04c0262 --- /dev/null +++ b/resources/js/components/ui/sheet/Sheet.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/components/ui/sheet/SheetClose.vue b/resources/js/components/ui/sheet/SheetClose.vue new file mode 100644 index 00000000..a64703e5 --- /dev/null +++ b/resources/js/components/ui/sheet/SheetClose.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/components/ui/sheet/SheetContent.vue b/resources/js/components/ui/sheet/SheetContent.vue new file mode 100644 index 00000000..a3606186 --- /dev/null +++ b/resources/js/components/ui/sheet/SheetContent.vue @@ -0,0 +1,56 @@ + + + diff --git a/resources/js/components/ui/sheet/SheetDescription.vue b/resources/js/components/ui/sheet/SheetDescription.vue new file mode 100644 index 00000000..b515e42a --- /dev/null +++ b/resources/js/components/ui/sheet/SheetDescription.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/components/ui/sheet/SheetFooter.vue b/resources/js/components/ui/sheet/SheetFooter.vue new file mode 100644 index 00000000..ac2d0c18 --- /dev/null +++ b/resources/js/components/ui/sheet/SheetFooter.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/components/ui/sheet/SheetHeader.vue b/resources/js/components/ui/sheet/SheetHeader.vue new file mode 100644 index 00000000..541f48f5 --- /dev/null +++ b/resources/js/components/ui/sheet/SheetHeader.vue @@ -0,0 +1,16 @@ + + + diff --git a/resources/js/components/ui/sheet/SheetTitle.vue b/resources/js/components/ui/sheet/SheetTitle.vue new file mode 100644 index 00000000..b1029593 --- /dev/null +++ b/resources/js/components/ui/sheet/SheetTitle.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/js/components/ui/sheet/SheetTrigger.vue b/resources/js/components/ui/sheet/SheetTrigger.vue new file mode 100644 index 00000000..ee0c12ff --- /dev/null +++ b/resources/js/components/ui/sheet/SheetTrigger.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/components/ui/sheet/index.ts b/resources/js/components/ui/sheet/index.ts new file mode 100644 index 00000000..4c4e77af --- /dev/null +++ b/resources/js/components/ui/sheet/index.ts @@ -0,0 +1,31 @@ +import { cva, type VariantProps } from 'class-variance-authority' + +export { default as Sheet } from './Sheet.vue' +export { default as SheetClose } from './SheetClose.vue' +export { default as SheetContent } from './SheetContent.vue' +export { default as SheetDescription } from './SheetDescription.vue' +export { default as SheetFooter } from './SheetFooter.vue' +export { default as SheetHeader } from './SheetHeader.vue' +export { default as SheetTitle } from './SheetTitle.vue' +export { default as SheetTrigger } from './SheetTrigger.vue' + +export const sheetVariants = cva( + 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500', + { + variants: { + side: { + top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top', + bottom: + 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom', + left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm', + right: + 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm', + }, + }, + defaultVariants: { + side: 'right', + }, + }, +) + +export type SheetVariants = VariantProps diff --git a/resources/js/components/ui/sidebar/Sidebar.vue b/resources/js/components/ui/sidebar/Sidebar.vue new file mode 100644 index 00000000..03ddf104 --- /dev/null +++ b/resources/js/components/ui/sidebar/Sidebar.vue @@ -0,0 +1,91 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarContent.vue b/resources/js/components/ui/sidebar/SidebarContent.vue new file mode 100644 index 00000000..4b6244a4 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarContent.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarFooter.vue b/resources/js/components/ui/sidebar/SidebarFooter.vue new file mode 100644 index 00000000..9d145c05 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarFooter.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarGroup.vue b/resources/js/components/ui/sidebar/SidebarGroup.vue new file mode 100644 index 00000000..adc6843c --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarGroup.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarGroupAction.vue b/resources/js/components/ui/sidebar/SidebarGroupAction.vue new file mode 100644 index 00000000..74cac4ea --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarGroupAction.vue @@ -0,0 +1,27 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarGroupContent.vue b/resources/js/components/ui/sidebar/SidebarGroupContent.vue new file mode 100644 index 00000000..37390c93 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarGroupContent.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarGroupLabel.vue b/resources/js/components/ui/sidebar/SidebarGroupLabel.vue new file mode 100644 index 00000000..83826c3e --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarGroupLabel.vue @@ -0,0 +1,24 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarHeader.vue b/resources/js/components/ui/sidebar/SidebarHeader.vue new file mode 100644 index 00000000..eecaddb2 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarHeader.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarInput.vue b/resources/js/components/ui/sidebar/SidebarInput.vue new file mode 100644 index 00000000..da7ef0bd --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarInput.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarInset.vue b/resources/js/components/ui/sidebar/SidebarInset.vue new file mode 100644 index 00000000..27d1db50 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarInset.vue @@ -0,0 +1,20 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenu.vue b/resources/js/components/ui/sidebar/SidebarMenu.vue new file mode 100644 index 00000000..3bfd73e6 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenu.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuAction.vue b/resources/js/components/ui/sidebar/SidebarMenuAction.vue new file mode 100644 index 00000000..c91295e6 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuAction.vue @@ -0,0 +1,34 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuBadge.vue b/resources/js/components/ui/sidebar/SidebarMenuBadge.vue new file mode 100644 index 00000000..f8789687 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuBadge.vue @@ -0,0 +1,25 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuButton.vue b/resources/js/components/ui/sidebar/SidebarMenuButton.vue new file mode 100644 index 00000000..58043ad3 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuButton.vue @@ -0,0 +1,51 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue b/resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue new file mode 100644 index 00000000..1d438667 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue @@ -0,0 +1,33 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuItem.vue b/resources/js/components/ui/sidebar/SidebarMenuItem.vue new file mode 100644 index 00000000..b6000734 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuItem.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue b/resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue new file mode 100644 index 00000000..13779c7f --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue @@ -0,0 +1,33 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuSub.vue b/resources/js/components/ui/sidebar/SidebarMenuSub.vue new file mode 100644 index 00000000..0bb5af79 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuSub.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuSubButton.vue b/resources/js/components/ui/sidebar/SidebarMenuSubButton.vue new file mode 100644 index 00000000..0c63da14 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuSubButton.vue @@ -0,0 +1,35 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuSubItem.vue b/resources/js/components/ui/sidebar/SidebarMenuSubItem.vue new file mode 100644 index 00000000..b04030b0 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuSubItem.vue @@ -0,0 +1,9 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarProvider.vue b/resources/js/components/ui/sidebar/SidebarProvider.vue new file mode 100644 index 00000000..eb8f23d2 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarProvider.vue @@ -0,0 +1,79 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarRail.vue b/resources/js/components/ui/sidebar/SidebarRail.vue new file mode 100644 index 00000000..9b644cdd --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarRail.vue @@ -0,0 +1,32 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarSeparator.vue b/resources/js/components/ui/sidebar/SidebarSeparator.vue new file mode 100644 index 00000000..a5f21210 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarSeparator.vue @@ -0,0 +1,18 @@ + + + diff --git a/resources/js/components/ui/sidebar/SidebarTrigger.vue b/resources/js/components/ui/sidebar/SidebarTrigger.vue new file mode 100644 index 00000000..5aed65b4 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarTrigger.vue @@ -0,0 +1,26 @@ + + + diff --git a/resources/js/components/ui/sidebar/index.ts b/resources/js/components/ui/sidebar/index.ts new file mode 100644 index 00000000..b137821c --- /dev/null +++ b/resources/js/components/ui/sidebar/index.ts @@ -0,0 +1,51 @@ +import { cva, type VariantProps } from 'class-variance-authority' + +export { default as Sidebar } from './Sidebar.vue' +export { default as SidebarContent } from './SidebarContent.vue' +export { default as SidebarFooter } from './SidebarFooter.vue' +export { default as SidebarGroup } from './SidebarGroup.vue' +export { default as SidebarGroupAction } from './SidebarGroupAction.vue' +export { default as SidebarGroupContent } from './SidebarGroupContent.vue' +export { default as SidebarGroupLabel } from './SidebarGroupLabel.vue' +export { default as SidebarHeader } from './SidebarHeader.vue' +export { default as SidebarInput } from './SidebarInput.vue' +export { default as SidebarInset } from './SidebarInset.vue' +export { default as SidebarMenu } from './SidebarMenu.vue' +export { default as SidebarMenuAction } from './SidebarMenuAction.vue' +export { default as SidebarMenuBadge } from './SidebarMenuBadge.vue' +export { default as SidebarMenuButton } from './SidebarMenuButton.vue' +export { default as SidebarMenuItem } from './SidebarMenuItem.vue' +export { default as SidebarMenuSkeleton } from './SidebarMenuSkeleton.vue' +export { default as SidebarMenuSub } from './SidebarMenuSub.vue' +export { default as SidebarMenuSubButton } from './SidebarMenuSubButton.vue' +export { default as SidebarMenuSubItem } from './SidebarMenuSubItem.vue' +export { default as SidebarProvider } from './SidebarProvider.vue' +export { default as SidebarRail } from './SidebarRail.vue' +export { default as SidebarSeparator } from './SidebarSeparator.vue' +export { default as SidebarTrigger } from './SidebarTrigger.vue' + +export { useSidebar } from './utils' + +export const sidebarMenuButtonVariants = cva( + 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none 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', + { + variants: { + variant: { + default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', + outline: + 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]', + }, + size: { + default: 'h-8 text-sm', + sm: 'h-7 text-xs', + lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) + +export type SidebarMenuButtonVariants = VariantProps diff --git a/resources/js/components/ui/sidebar/utils.ts b/resources/js/components/ui/sidebar/utils.ts new file mode 100644 index 00000000..3ded66c4 --- /dev/null +++ b/resources/js/components/ui/sidebar/utils.ts @@ -0,0 +1,19 @@ +import type { ComputedRef, Ref } from 'vue' +import { createContext } from 'radix-vue' + +export const SIDEBAR_COOKIE_NAME = 'sidebar:state' +export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 +export const SIDEBAR_WIDTH = '16rem' +export const SIDEBAR_WIDTH_MOBILE = '18rem' +export const SIDEBAR_WIDTH_ICON = '3rem' +export const SIDEBAR_KEYBOARD_SHORTCUT = 'b' + +export const [useSidebar, provideSidebarContext] = createContext<{ + state: ComputedRef<'expanded' | 'collapsed'> + open: Ref + setOpen: (value: boolean) => void + isMobile: Ref + openMobile: Ref + setOpenMobile: (value: boolean) => void + toggleSidebar: () => void +}>('Sidebar') diff --git a/resources/js/components/ui/skeleton/Skeleton.vue b/resources/js/components/ui/skeleton/Skeleton.vue new file mode 100644 index 00000000..b49e3d9b --- /dev/null +++ b/resources/js/components/ui/skeleton/Skeleton.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/components/ui/skeleton/index.ts b/resources/js/components/ui/skeleton/index.ts new file mode 100644 index 00000000..be21fad3 --- /dev/null +++ b/resources/js/components/ui/skeleton/index.ts @@ -0,0 +1 @@ +export { default as Skeleton } from './Skeleton.vue' diff --git a/resources/js/components/ui/tooltip/Tooltip.vue b/resources/js/components/ui/tooltip/Tooltip.vue new file mode 100644 index 00000000..b421f0fe --- /dev/null +++ b/resources/js/components/ui/tooltip/Tooltip.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/js/components/ui/tooltip/TooltipContent.vue b/resources/js/components/ui/tooltip/TooltipContent.vue new file mode 100644 index 00000000..c583a984 --- /dev/null +++ b/resources/js/components/ui/tooltip/TooltipContent.vue @@ -0,0 +1,31 @@ + + + diff --git a/resources/js/components/ui/tooltip/TooltipProvider.vue b/resources/js/components/ui/tooltip/TooltipProvider.vue new file mode 100644 index 00000000..816505d6 --- /dev/null +++ b/resources/js/components/ui/tooltip/TooltipProvider.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/components/ui/tooltip/TooltipTrigger.vue b/resources/js/components/ui/tooltip/TooltipTrigger.vue new file mode 100644 index 00000000..f5b0e57f --- /dev/null +++ b/resources/js/components/ui/tooltip/TooltipTrigger.vue @@ -0,0 +1,11 @@ + + + diff --git a/resources/js/components/ui/tooltip/index.ts b/resources/js/components/ui/tooltip/index.ts new file mode 100644 index 00000000..5ab96536 --- /dev/null +++ b/resources/js/components/ui/tooltip/index.ts @@ -0,0 +1,4 @@ +export { default as Tooltip } from './Tooltip.vue' +export { default as TooltipContent } from './TooltipContent.vue' +export { default as TooltipProvider } from './TooltipProvider.vue' +export { default as TooltipTrigger } from './TooltipTrigger.vue' diff --git a/resources/js/composables/useAppearance.ts b/resources/js/composables/useAppearance.ts new file mode 100644 index 00000000..48630114 --- /dev/null +++ b/resources/js/composables/useAppearance.ts @@ -0,0 +1,56 @@ +import { ref, watch, onMounted } from 'vue' +import { usePage } from '@inertiajs/vue3' +import axios from 'axios' + +type Appearance = 'light' | 'dark' | 'system' + +export function useAppearance() { + const appearance = ref('system') + + // Initialize appearance from user preferences or system + onMounted(() => { + const savedAppearance = localStorage.getItem('appearance') as Appearance | null + if (savedAppearance) { + appearance.value = savedAppearance + updateTheme(savedAppearance) + } + }) + + // Update theme based on appearance setting + function updateTheme(value: Appearance) { + if (value === 'system') { + const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + document.documentElement.classList.toggle('dark', systemTheme === 'dark') + } else { + document.documentElement.classList.toggle('dark', value === 'dark') + } + } + + // Handle system theme changes + onMounted(() => { + const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)') + mediaQuery.addEventListener('change', () => { + if (appearance.value === 'system') { + updateTheme('system') + } + }) + }) + + // Update appearance preference + async function updateAppearance(value: Appearance) { + appearance.value = value + localStorage.setItem('appearance', value) + updateTheme(value) + + // Update user preference in backend if authenticated + const { auth } = usePage().props + if (auth?.user) { + await axios.patch(route('settings.appearance'), { appearance: value }) + } + } + + return { + appearance, + updateAppearance + } +} diff --git a/resources/js/layouts/AppLayout.vue b/resources/js/layouts/AppLayout.vue new file mode 100644 index 00000000..a250286f --- /dev/null +++ b/resources/js/layouts/AppLayout.vue @@ -0,0 +1,76 @@ + + + \ No newline at end of file diff --git a/resources/js/layouts/auth/AuthBase.vue b/resources/js/layouts/auth/AuthBase.vue new file mode 100644 index 00000000..365fe26b --- /dev/null +++ b/resources/js/layouts/auth/AuthBase.vue @@ -0,0 +1,21 @@ + + + + diff --git a/resources/js/layouts/auth/AuthCardLayout.vue b/resources/js/layouts/auth/AuthCardLayout.vue new file mode 100644 index 00000000..75c4c8c1 --- /dev/null +++ b/resources/js/layouts/auth/AuthCardLayout.vue @@ -0,0 +1,46 @@ + + + + diff --git a/resources/js/layouts/auth/AuthSimpleLayout.vue b/resources/js/layouts/auth/AuthSimpleLayout.vue new file mode 100644 index 00000000..a3a098bf --- /dev/null +++ b/resources/js/layouts/auth/AuthSimpleLayout.vue @@ -0,0 +1,39 @@ + + + + diff --git a/resources/js/layouts/auth/AuthSplitLayout.vue b/resources/js/layouts/auth/AuthSplitLayout.vue new file mode 100644 index 00000000..f9ab9e16 --- /dev/null +++ b/resources/js/layouts/auth/AuthSplitLayout.vue @@ -0,0 +1,47 @@ + + + + diff --git a/resources/js/pages/Dashboard.vue b/resources/js/pages/Dashboard.vue new file mode 100644 index 00000000..e10e991a --- /dev/null +++ b/resources/js/pages/Dashboard.vue @@ -0,0 +1,35 @@ + + + diff --git a/resources/js/pages/Welcome.vue b/resources/js/pages/Welcome.vue new file mode 100644 index 00000000..7960058e --- /dev/null +++ b/resources/js/pages/Welcome.vue @@ -0,0 +1,376 @@ + + + diff --git a/resources/js/pages/auth/ForgotPassword.vue b/resources/js/pages/auth/ForgotPassword.vue new file mode 100644 index 00000000..fa732280 --- /dev/null +++ b/resources/js/pages/auth/ForgotPassword.vue @@ -0,0 +1,66 @@ + + + diff --git a/resources/js/pages/auth/Login.vue b/resources/js/pages/auth/Login.vue new file mode 100644 index 00000000..934d147e --- /dev/null +++ b/resources/js/pages/auth/Login.vue @@ -0,0 +1,97 @@ + + + \ No newline at end of file diff --git a/resources/js/pages/auth/Register.vue b/resources/js/pages/auth/Register.vue new file mode 100644 index 00000000..29febc41 --- /dev/null +++ b/resources/js/pages/auth/Register.vue @@ -0,0 +1,102 @@ + + + diff --git a/resources/js/pages/auth/ResetPassword.vue b/resources/js/pages/auth/ResetPassword.vue new file mode 100644 index 00000000..1d65b3f7 --- /dev/null +++ b/resources/js/pages/auth/ResetPassword.vue @@ -0,0 +1,96 @@ + + + diff --git a/resources/js/pages/auth/VerifyEmail.vue b/resources/js/pages/auth/VerifyEmail.vue new file mode 100644 index 00000000..d55647d8 --- /dev/null +++ b/resources/js/pages/auth/VerifyEmail.vue @@ -0,0 +1,52 @@ + + + diff --git a/resources/js/pages/settings/Appearance.vue b/resources/js/pages/settings/Appearance.vue new file mode 100644 index 00000000..81320e26 --- /dev/null +++ b/resources/js/pages/settings/Appearance.vue @@ -0,0 +1,41 @@ + + + diff --git a/resources/js/pages/settings/Layout.vue b/resources/js/pages/settings/Layout.vue new file mode 100644 index 00000000..f34da748 --- /dev/null +++ b/resources/js/pages/settings/Layout.vue @@ -0,0 +1,68 @@ + + + diff --git a/resources/js/pages/settings/Password.vue b/resources/js/pages/settings/Password.vue new file mode 100644 index 00000000..f55d6311 --- /dev/null +++ b/resources/js/pages/settings/Password.vue @@ -0,0 +1,130 @@ + + + diff --git a/resources/js/pages/settings/Profile.vue b/resources/js/pages/settings/Profile.vue new file mode 100644 index 00000000..3ca6023b --- /dev/null +++ b/resources/js/pages/settings/Profile.vue @@ -0,0 +1,129 @@ + + + diff --git a/routes/web.php b/routes/web.php index 579cba88..32a9d086 100644 --- a/routes/web.php +++ b/routes/web.php @@ -32,7 +32,7 @@ Route::put('settings/password', [PasswordController::class, 'update'])->name('password.update'); Route::get('settings/appearance', function () { - return Inertia::render('Settings/Appearance'); + return Inertia::render('settings/Appearance'); })->name('appearance'); }); From 679a0136672f035d0afd29e417a46cff5a603868 Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Thu, 2 Jan 2025 18:30:07 -0500 Subject: [PATCH 13/92] Adding updates to vue js folder --- resources/js/Layouts/Auth/AuthBase.vue | 2 +- resources/js/Pages/Auth/ForgotPassword.vue | 2 +- resources/js/Pages/Auth/Login.vue | 2 +- resources/js/Pages/Auth/Register.vue | 2 +- resources/js/Pages/Auth/ResetPassword.vue | 2 +- resources/js/Pages/Auth/VerifyEmail.vue | 2 +- resources/js/app.ts | 4 ++-- resources/js/layouts/auth/AuthBase.vue | 2 +- resources/js/pages/auth/ForgotPassword.vue | 2 +- resources/js/pages/auth/Login.vue | 2 +- resources/js/pages/auth/Register.vue | 2 +- resources/js/pages/auth/ResetPassword.vue | 2 +- resources/js/pages/auth/VerifyEmail.vue | 2 +- 13 files changed, 14 insertions(+), 14 deletions(-) diff --git a/resources/js/Layouts/Auth/AuthBase.vue b/resources/js/Layouts/Auth/AuthBase.vue index 365fe26b..7b970a5c 100644 --- a/resources/js/Layouts/Auth/AuthBase.vue +++ b/resources/js/Layouts/Auth/AuthBase.vue @@ -1,7 +1,7 @@ - - diff --git a/resources/js/components/AppearanceTabs.vue b/resources/js/components/AppearanceTabs.vue deleted file mode 100644 index 2c508d89..00000000 --- a/resources/js/components/AppearanceTabs.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/resources/js/components/ApplicationLogo.vue b/resources/js/components/ApplicationLogo.vue deleted file mode 100644 index 3827bd3d..00000000 --- a/resources/js/components/ApplicationLogo.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/resources/js/components/Checkbox.vue b/resources/js/components/Checkbox.vue deleted file mode 100644 index f76e7f5e..00000000 --- a/resources/js/components/Checkbox.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/resources/js/components/DangerButton.vue b/resources/js/components/DangerButton.vue deleted file mode 100644 index ac45afcd..00000000 --- a/resources/js/components/DangerButton.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/resources/js/components/Dropdown.vue b/resources/js/components/Dropdown.vue deleted file mode 100644 index 007dd945..00000000 --- a/resources/js/components/Dropdown.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - diff --git a/resources/js/components/DropdownLink.vue b/resources/js/components/DropdownLink.vue deleted file mode 100644 index 8ecf2ef7..00000000 --- a/resources/js/components/DropdownLink.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/Heading.vue b/resources/js/components/Heading.vue deleted file mode 100644 index 56ce2618..00000000 --- a/resources/js/components/Heading.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/InputError.vue b/resources/js/components/InputError.vue deleted file mode 100644 index cbfb2a75..00000000 --- a/resources/js/components/InputError.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/resources/js/components/InputLabel.vue b/resources/js/components/InputLabel.vue deleted file mode 100644 index 3fd5bb9e..00000000 --- a/resources/js/components/InputLabel.vue +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/resources/js/components/Modal.vue b/resources/js/components/Modal.vue deleted file mode 100644 index 952fa465..00000000 --- a/resources/js/components/Modal.vue +++ /dev/null @@ -1,121 +0,0 @@ - - - diff --git a/resources/js/components/NavFooter.vue b/resources/js/components/NavFooter.vue deleted file mode 100644 index a71284e6..00000000 --- a/resources/js/components/NavFooter.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/resources/js/components/NavLink.vue b/resources/js/components/NavLink.vue deleted file mode 100644 index cf100ec9..00000000 --- a/resources/js/components/NavLink.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/NavMain.vue b/resources/js/components/NavMain.vue deleted file mode 100644 index 3fa37109..00000000 --- a/resources/js/components/NavMain.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/resources/js/components/NavUser.vue b/resources/js/components/NavUser.vue deleted file mode 100644 index ebfb70b7..00000000 --- a/resources/js/components/NavUser.vue +++ /dev/null @@ -1,111 +0,0 @@ - - - diff --git a/resources/js/components/PrimaryButton.vue b/resources/js/components/PrimaryButton.vue deleted file mode 100644 index 3bf8eb90..00000000 --- a/resources/js/components/PrimaryButton.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/resources/js/components/ResponsiveNavLink.vue b/resources/js/components/ResponsiveNavLink.vue deleted file mode 100644 index 63b6725a..00000000 --- a/resources/js/components/ResponsiveNavLink.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/SecondaryButton.vue b/resources/js/components/SecondaryButton.vue deleted file mode 100644 index 474c6552..00000000 --- a/resources/js/components/SecondaryButton.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/TextInput.vue b/resources/js/components/TextInput.vue deleted file mode 100644 index db49f87f..00000000 --- a/resources/js/components/TextInput.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/resources/js/components/settings/DeleteUser.vue b/resources/js/components/settings/DeleteUser.vue deleted file mode 100644 index 83f3ed75..00000000 --- a/resources/js/components/settings/DeleteUser.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - diff --git a/resources/js/components/settings/Heading.vue b/resources/js/components/settings/Heading.vue deleted file mode 100644 index 3d612f4e..00000000 --- a/resources/js/components/settings/Heading.vue +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/sidebar/NavMain.vue b/resources/js/components/sidebar/NavMain.vue deleted file mode 100644 index 71898dc8..00000000 --- a/resources/js/components/sidebar/NavMain.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - diff --git a/resources/js/components/sidebar/NavProjects.vue b/resources/js/components/sidebar/NavProjects.vue deleted file mode 100644 index 48776eb5..00000000 --- a/resources/js/components/sidebar/NavProjects.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - - - \ No newline at end of file diff --git a/resources/js/components/sidebar/NavSecondary.vue b/resources/js/components/sidebar/NavSecondary.vue deleted file mode 100644 index f9cb6c27..00000000 --- a/resources/js/components/sidebar/NavSecondary.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - \ No newline at end of file diff --git a/resources/js/components/sidebar/NavUser.vue b/resources/js/components/sidebar/NavUser.vue deleted file mode 100644 index d633106f..00000000 --- a/resources/js/components/sidebar/NavUser.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - \ No newline at end of file diff --git a/resources/js/components/sidebar/Sidebar.vue b/resources/js/components/sidebar/Sidebar.vue deleted file mode 100644 index b8fd7b5a..00000000 --- a/resources/js/components/sidebar/Sidebar.vue +++ /dev/null @@ -1,205 +0,0 @@ - - - - \ No newline at end of file diff --git a/resources/js/components/ui/avatar/Avatar.vue b/resources/js/components/ui/avatar/Avatar.vue deleted file mode 100644 index ed6ef22a..00000000 --- a/resources/js/components/ui/avatar/Avatar.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/ui/avatar/AvatarFallback.vue b/resources/js/components/ui/avatar/AvatarFallback.vue deleted file mode 100644 index a671a219..00000000 --- a/resources/js/components/ui/avatar/AvatarFallback.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/avatar/AvatarImage.vue b/resources/js/components/ui/avatar/AvatarImage.vue deleted file mode 100644 index 43499fa2..00000000 --- a/resources/js/components/ui/avatar/AvatarImage.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/resources/js/components/ui/avatar/index.ts b/resources/js/components/ui/avatar/index.ts deleted file mode 100644 index 5367952a..00000000 --- a/resources/js/components/ui/avatar/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { cva, type VariantProps } from 'class-variance-authority' - -export { default as Avatar } from './Avatar.vue' -export { default as AvatarFallback } from './AvatarFallback.vue' -export { default as AvatarImage } from './AvatarImage.vue' - -export const avatarVariant = cva( - 'inline-flex items-center justify-center font-normal text-foreground select-none shrink-0 bg-secondary overflow-hidden', - { - variants: { - size: { - sm: 'h-10 w-10 text-xs', - base: 'h-16 w-16 text-2xl', - lg: 'h-32 w-32 text-5xl', - }, - shape: { - circle: 'rounded-full', - square: 'rounded-md', - }, - }, - }, -) - -export type AvatarVariants = VariantProps diff --git a/resources/js/components/ui/breadcrumb/Breadcrumb.vue b/resources/js/components/ui/breadcrumb/Breadcrumb.vue deleted file mode 100644 index 72ca1437..00000000 --- a/resources/js/components/ui/breadcrumb/Breadcrumb.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbEllipsis.vue b/resources/js/components/ui/breadcrumb/BreadcrumbEllipsis.vue deleted file mode 100644 index cfccf9fe..00000000 --- a/resources/js/components/ui/breadcrumb/BreadcrumbEllipsis.vue +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbItem.vue b/resources/js/components/ui/breadcrumb/BreadcrumbItem.vue deleted file mode 100644 index 42e721cd..00000000 --- a/resources/js/components/ui/breadcrumb/BreadcrumbItem.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbLink.vue b/resources/js/components/ui/breadcrumb/BreadcrumbLink.vue deleted file mode 100644 index df004a13..00000000 --- a/resources/js/components/ui/breadcrumb/BreadcrumbLink.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbList.vue b/resources/js/components/ui/breadcrumb/BreadcrumbList.vue deleted file mode 100644 index 60856cc4..00000000 --- a/resources/js/components/ui/breadcrumb/BreadcrumbList.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbPage.vue b/resources/js/components/ui/breadcrumb/BreadcrumbPage.vue deleted file mode 100644 index fe43bda6..00000000 --- a/resources/js/components/ui/breadcrumb/BreadcrumbPage.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/breadcrumb/BreadcrumbSeparator.vue b/resources/js/components/ui/breadcrumb/BreadcrumbSeparator.vue deleted file mode 100644 index a9c47fea..00000000 --- a/resources/js/components/ui/breadcrumb/BreadcrumbSeparator.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/ui/breadcrumb/index.ts b/resources/js/components/ui/breadcrumb/index.ts deleted file mode 100644 index 05909832..00000000 --- a/resources/js/components/ui/breadcrumb/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { default as Breadcrumb } from './Breadcrumb.vue' -export { default as BreadcrumbEllipsis } from './BreadcrumbEllipsis.vue' -export { default as BreadcrumbItem } from './BreadcrumbItem.vue' -export { default as BreadcrumbLink } from './BreadcrumbLink.vue' -export { default as BreadcrumbList } from './BreadcrumbList.vue' -export { default as BreadcrumbPage } from './BreadcrumbPage.vue' -export { default as BreadcrumbSeparator } from './BreadcrumbSeparator.vue' diff --git a/resources/js/components/ui/button/Button.vue b/resources/js/components/ui/button/Button.vue deleted file mode 100644 index d3e3786f..00000000 --- a/resources/js/components/ui/button/Button.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/resources/js/components/ui/button/index.ts b/resources/js/components/ui/button/index.ts deleted file mode 100644 index 18a065a6..00000000 --- a/resources/js/components/ui/button/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { cva, type VariantProps } from 'class-variance-authority' - -export { default as Button } from './Button.vue' - -export const buttonVariants = cva( - 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', - { - variants: { - variant: { - default: - 'bg-primary text-primary-foreground shadow hover:bg-primary/90', - destructive: - 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90', - outline: - 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground', - secondary: - 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80', - ghost: 'hover:bg-accent hover:text-accent-foreground', - link: 'text-primary underline-offset-4 hover:underline', - }, - size: { - default: 'h-9 px-4 py-2', - sm: 'h-8 rounded-md px-3 text-xs', - lg: 'h-10 rounded-md px-8', - icon: 'h-9 w-9', - }, - }, - defaultVariants: { - variant: 'default', - size: 'default', - }, - }, -) - -export type ButtonVariants = VariantProps diff --git a/resources/js/components/ui/card/Card.vue b/resources/js/components/ui/card/Card.vue deleted file mode 100644 index 12dd5ec7..00000000 --- a/resources/js/components/ui/card/Card.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/ui/card/CardContent.vue b/resources/js/components/ui/card/CardContent.vue deleted file mode 100644 index 785913a1..00000000 --- a/resources/js/components/ui/card/CardContent.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/components/ui/card/CardDescription.vue b/resources/js/components/ui/card/CardDescription.vue deleted file mode 100644 index d5faedd5..00000000 --- a/resources/js/components/ui/card/CardDescription.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/components/ui/card/CardFooter.vue b/resources/js/components/ui/card/CardFooter.vue deleted file mode 100644 index 1ed2efe5..00000000 --- a/resources/js/components/ui/card/CardFooter.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/components/ui/card/CardHeader.vue b/resources/js/components/ui/card/CardHeader.vue deleted file mode 100644 index 951d227e..00000000 --- a/resources/js/components/ui/card/CardHeader.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/components/ui/card/CardTitle.vue b/resources/js/components/ui/card/CardTitle.vue deleted file mode 100644 index 842e1689..00000000 --- a/resources/js/components/ui/card/CardTitle.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/resources/js/components/ui/card/index.ts b/resources/js/components/ui/card/index.ts deleted file mode 100644 index 9ff6d5e7..00000000 --- a/resources/js/components/ui/card/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { default as Card } from './Card.vue' -export { default as CardContent } from './CardContent.vue' -export { default as CardDescription } from './CardDescription.vue' -export { default as CardFooter } from './CardFooter.vue' -export { default as CardHeader } from './CardHeader.vue' -export { default as CardTitle } from './CardTitle.vue' diff --git a/resources/js/components/ui/collapsible/Collapsible.vue b/resources/js/components/ui/collapsible/Collapsible.vue deleted file mode 100644 index fae7919c..00000000 --- a/resources/js/components/ui/collapsible/Collapsible.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/resources/js/components/ui/collapsible/CollapsibleContent.vue b/resources/js/components/ui/collapsible/CollapsibleContent.vue deleted file mode 100644 index 9f30898b..00000000 --- a/resources/js/components/ui/collapsible/CollapsibleContent.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/collapsible/CollapsibleTrigger.vue b/resources/js/components/ui/collapsible/CollapsibleTrigger.vue deleted file mode 100644 index 4a434639..00000000 --- a/resources/js/components/ui/collapsible/CollapsibleTrigger.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/collapsible/index.ts b/resources/js/components/ui/collapsible/index.ts deleted file mode 100644 index abab9567..00000000 --- a/resources/js/components/ui/collapsible/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as Collapsible } from './Collapsible.vue' -export { default as CollapsibleContent } from './CollapsibleContent.vue' -export { default as CollapsibleTrigger } from './CollapsibleTrigger.vue' diff --git a/resources/js/components/ui/dialog/Dialog.vue b/resources/js/components/ui/dialog/Dialog.vue deleted file mode 100644 index a04c0262..00000000 --- a/resources/js/components/ui/dialog/Dialog.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/DialogClose.vue b/resources/js/components/ui/dialog/DialogClose.vue deleted file mode 100644 index a64703e5..00000000 --- a/resources/js/components/ui/dialog/DialogClose.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/DialogContent.vue b/resources/js/components/ui/dialog/DialogContent.vue deleted file mode 100644 index 0de84518..00000000 --- a/resources/js/components/ui/dialog/DialogContent.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/DialogDescription.vue b/resources/js/components/ui/dialog/DialogDescription.vue deleted file mode 100644 index 878ef2bd..00000000 --- a/resources/js/components/ui/dialog/DialogDescription.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/DialogFooter.vue b/resources/js/components/ui/dialog/DialogFooter.vue deleted file mode 100644 index ac2d0c18..00000000 --- a/resources/js/components/ui/dialog/DialogFooter.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/DialogHeader.vue b/resources/js/components/ui/dialog/DialogHeader.vue deleted file mode 100644 index b2c9085d..00000000 --- a/resources/js/components/ui/dialog/DialogHeader.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/DialogScrollContent.vue b/resources/js/components/ui/dialog/DialogScrollContent.vue deleted file mode 100644 index 0d448213..00000000 --- a/resources/js/components/ui/dialog/DialogScrollContent.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/DialogTitle.vue b/resources/js/components/ui/dialog/DialogTitle.vue deleted file mode 100644 index 1f049e32..00000000 --- a/resources/js/components/ui/dialog/DialogTitle.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/DialogTrigger.vue b/resources/js/components/ui/dialog/DialogTrigger.vue deleted file mode 100644 index ee0c12ff..00000000 --- a/resources/js/components/ui/dialog/DialogTrigger.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/index.ts b/resources/js/components/ui/dialog/index.ts deleted file mode 100644 index ca8cfeae..00000000 --- a/resources/js/components/ui/dialog/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { default as Dialog } from './Dialog.vue' -export { default as DialogClose } from './DialogClose.vue' -export { default as DialogContent } from './DialogContent.vue' -export { default as DialogDescription } from './DialogDescription.vue' -export { default as DialogFooter } from './DialogFooter.vue' -export { default as DialogHeader } from './DialogHeader.vue' -export { default as DialogScrollContent } from './DialogScrollContent.vue' -export { default as DialogTitle } from './DialogTitle.vue' -export { default as DialogTrigger } from './DialogTrigger.vue' diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenu.vue b/resources/js/components/ui/dropdown-menu/DropdownMenu.vue deleted file mode 100644 index b83d90b8..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenu.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue deleted file mode 100644 index ca8867c0..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue deleted file mode 100644 index 6523e9ee..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue deleted file mode 100644 index 3f201352..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue deleted file mode 100644 index 32a2cbd5..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue deleted file mode 100644 index 10494d4d..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue deleted file mode 100644 index 4a727904..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue deleted file mode 100644 index d3fa4751..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue deleted file mode 100644 index dac6a167..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue deleted file mode 100644 index abaeda64..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue deleted file mode 100644 index e0f4bd77..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue deleted file mode 100644 index 92078d9b..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue deleted file mode 100644 index 51b137f1..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue deleted file mode 100644 index 8efd5a92..00000000 --- a/resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/index.ts b/resources/js/components/ui/dropdown-menu/index.ts deleted file mode 100644 index 6011f35c..00000000 --- a/resources/js/components/ui/dropdown-menu/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -export { default as DropdownMenu } from './DropdownMenu.vue' - -export { default as DropdownMenuCheckboxItem } from './DropdownMenuCheckboxItem.vue' -export { default as DropdownMenuContent } from './DropdownMenuContent.vue' -export { default as DropdownMenuGroup } from './DropdownMenuGroup.vue' -export { default as DropdownMenuItem } from './DropdownMenuItem.vue' -export { default as DropdownMenuLabel } from './DropdownMenuLabel.vue' -export { default as DropdownMenuRadioGroup } from './DropdownMenuRadioGroup.vue' -export { default as DropdownMenuRadioItem } from './DropdownMenuRadioItem.vue' -export { default as DropdownMenuSeparator } from './DropdownMenuSeparator.vue' -export { default as DropdownMenuShortcut } from './DropdownMenuShortcut.vue' -export { default as DropdownMenuSub } from './DropdownMenuSub.vue' -export { default as DropdownMenuSubContent } from './DropdownMenuSubContent.vue' -export { default as DropdownMenuSubTrigger } from './DropdownMenuSubTrigger.vue' -export { default as DropdownMenuTrigger } from './DropdownMenuTrigger.vue' -export { DropdownMenuPortal } from 'radix-vue' diff --git a/resources/js/components/ui/input/Input.vue b/resources/js/components/ui/input/Input.vue deleted file mode 100644 index c3ac7775..00000000 --- a/resources/js/components/ui/input/Input.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/resources/js/components/ui/input/index.ts b/resources/js/components/ui/input/index.ts deleted file mode 100644 index a691dd6c..00000000 --- a/resources/js/components/ui/input/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Input } from './Input.vue' diff --git a/resources/js/components/ui/label/Label.vue b/resources/js/components/ui/label/Label.vue deleted file mode 100644 index 5ad1568f..00000000 --- a/resources/js/components/ui/label/Label.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/resources/js/components/ui/label/index.ts b/resources/js/components/ui/label/index.ts deleted file mode 100644 index 572c2f01..00000000 --- a/resources/js/components/ui/label/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Label } from './Label.vue' diff --git a/resources/js/components/ui/separator/Separator.vue b/resources/js/components/ui/separator/Separator.vue deleted file mode 100644 index 91613833..00000000 --- a/resources/js/components/ui/separator/Separator.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/resources/js/components/ui/separator/index.ts b/resources/js/components/ui/separator/index.ts deleted file mode 100644 index 2287bcb9..00000000 --- a/resources/js/components/ui/separator/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Separator } from './Separator.vue' diff --git a/resources/js/components/ui/sheet/Sheet.vue b/resources/js/components/ui/sheet/Sheet.vue deleted file mode 100644 index a04c0262..00000000 --- a/resources/js/components/ui/sheet/Sheet.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/SheetClose.vue b/resources/js/components/ui/sheet/SheetClose.vue deleted file mode 100644 index a64703e5..00000000 --- a/resources/js/components/ui/sheet/SheetClose.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/SheetContent.vue b/resources/js/components/ui/sheet/SheetContent.vue deleted file mode 100644 index a3606186..00000000 --- a/resources/js/components/ui/sheet/SheetContent.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/SheetDescription.vue b/resources/js/components/ui/sheet/SheetDescription.vue deleted file mode 100644 index b515e42a..00000000 --- a/resources/js/components/ui/sheet/SheetDescription.vue +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/SheetFooter.vue b/resources/js/components/ui/sheet/SheetFooter.vue deleted file mode 100644 index ac2d0c18..00000000 --- a/resources/js/components/ui/sheet/SheetFooter.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/SheetHeader.vue b/resources/js/components/ui/sheet/SheetHeader.vue deleted file mode 100644 index 541f48f5..00000000 --- a/resources/js/components/ui/sheet/SheetHeader.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/SheetTitle.vue b/resources/js/components/ui/sheet/SheetTitle.vue deleted file mode 100644 index b1029593..00000000 --- a/resources/js/components/ui/sheet/SheetTitle.vue +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/SheetTrigger.vue b/resources/js/components/ui/sheet/SheetTrigger.vue deleted file mode 100644 index ee0c12ff..00000000 --- a/resources/js/components/ui/sheet/SheetTrigger.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/index.ts b/resources/js/components/ui/sheet/index.ts deleted file mode 100644 index 4c4e77af..00000000 --- a/resources/js/components/ui/sheet/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { cva, type VariantProps } from 'class-variance-authority' - -export { default as Sheet } from './Sheet.vue' -export { default as SheetClose } from './SheetClose.vue' -export { default as SheetContent } from './SheetContent.vue' -export { default as SheetDescription } from './SheetDescription.vue' -export { default as SheetFooter } from './SheetFooter.vue' -export { default as SheetHeader } from './SheetHeader.vue' -export { default as SheetTitle } from './SheetTitle.vue' -export { default as SheetTrigger } from './SheetTrigger.vue' - -export const sheetVariants = cva( - 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500', - { - variants: { - side: { - top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top', - bottom: - 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom', - left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm', - right: - 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm', - }, - }, - defaultVariants: { - side: 'right', - }, - }, -) - -export type SheetVariants = VariantProps diff --git a/resources/js/components/ui/sidebar/Sidebar.vue b/resources/js/components/ui/sidebar/Sidebar.vue deleted file mode 100644 index 03ddf104..00000000 --- a/resources/js/components/ui/sidebar/Sidebar.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarContent.vue b/resources/js/components/ui/sidebar/SidebarContent.vue deleted file mode 100644 index 4b6244a4..00000000 --- a/resources/js/components/ui/sidebar/SidebarContent.vue +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarFooter.vue b/resources/js/components/ui/sidebar/SidebarFooter.vue deleted file mode 100644 index 9d145c05..00000000 --- a/resources/js/components/ui/sidebar/SidebarFooter.vue +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarGroup.vue b/resources/js/components/ui/sidebar/SidebarGroup.vue deleted file mode 100644 index adc6843c..00000000 --- a/resources/js/components/ui/sidebar/SidebarGroup.vue +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarGroupAction.vue b/resources/js/components/ui/sidebar/SidebarGroupAction.vue deleted file mode 100644 index 74cac4ea..00000000 --- a/resources/js/components/ui/sidebar/SidebarGroupAction.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarGroupContent.vue b/resources/js/components/ui/sidebar/SidebarGroupContent.vue deleted file mode 100644 index 37390c93..00000000 --- a/resources/js/components/ui/sidebar/SidebarGroupContent.vue +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarGroupLabel.vue b/resources/js/components/ui/sidebar/SidebarGroupLabel.vue deleted file mode 100644 index 83826c3e..00000000 --- a/resources/js/components/ui/sidebar/SidebarGroupLabel.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarHeader.vue b/resources/js/components/ui/sidebar/SidebarHeader.vue deleted file mode 100644 index eecaddb2..00000000 --- a/resources/js/components/ui/sidebar/SidebarHeader.vue +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarInput.vue b/resources/js/components/ui/sidebar/SidebarInput.vue deleted file mode 100644 index da7ef0bd..00000000 --- a/resources/js/components/ui/sidebar/SidebarInput.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarInset.vue b/resources/js/components/ui/sidebar/SidebarInset.vue deleted file mode 100644 index 27d1db50..00000000 --- a/resources/js/components/ui/sidebar/SidebarInset.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarMenu.vue b/resources/js/components/ui/sidebar/SidebarMenu.vue deleted file mode 100644 index 3bfd73e6..00000000 --- a/resources/js/components/ui/sidebar/SidebarMenu.vue +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarMenuAction.vue b/resources/js/components/ui/sidebar/SidebarMenuAction.vue deleted file mode 100644 index c91295e6..00000000 --- a/resources/js/components/ui/sidebar/SidebarMenuAction.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarMenuBadge.vue b/resources/js/components/ui/sidebar/SidebarMenuBadge.vue deleted file mode 100644 index f8789687..00000000 --- a/resources/js/components/ui/sidebar/SidebarMenuBadge.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarMenuButton.vue b/resources/js/components/ui/sidebar/SidebarMenuButton.vue deleted file mode 100644 index 58043ad3..00000000 --- a/resources/js/components/ui/sidebar/SidebarMenuButton.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue b/resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue deleted file mode 100644 index 1d438667..00000000 --- a/resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarMenuItem.vue b/resources/js/components/ui/sidebar/SidebarMenuItem.vue deleted file mode 100644 index b6000734..00000000 --- a/resources/js/components/ui/sidebar/SidebarMenuItem.vue +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue b/resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue deleted file mode 100644 index 13779c7f..00000000 --- a/resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarMenuSub.vue b/resources/js/components/ui/sidebar/SidebarMenuSub.vue deleted file mode 100644 index 0bb5af79..00000000 --- a/resources/js/components/ui/sidebar/SidebarMenuSub.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarMenuSubButton.vue b/resources/js/components/ui/sidebar/SidebarMenuSubButton.vue deleted file mode 100644 index 0c63da14..00000000 --- a/resources/js/components/ui/sidebar/SidebarMenuSubButton.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarMenuSubItem.vue b/resources/js/components/ui/sidebar/SidebarMenuSubItem.vue deleted file mode 100644 index b04030b0..00000000 --- a/resources/js/components/ui/sidebar/SidebarMenuSubItem.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarProvider.vue b/resources/js/components/ui/sidebar/SidebarProvider.vue deleted file mode 100644 index eb8f23d2..00000000 --- a/resources/js/components/ui/sidebar/SidebarProvider.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarRail.vue b/resources/js/components/ui/sidebar/SidebarRail.vue deleted file mode 100644 index 9b644cdd..00000000 --- a/resources/js/components/ui/sidebar/SidebarRail.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarSeparator.vue b/resources/js/components/ui/sidebar/SidebarSeparator.vue deleted file mode 100644 index a5f21210..00000000 --- a/resources/js/components/ui/sidebar/SidebarSeparator.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/SidebarTrigger.vue b/resources/js/components/ui/sidebar/SidebarTrigger.vue deleted file mode 100644 index 5aed65b4..00000000 --- a/resources/js/components/ui/sidebar/SidebarTrigger.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/index.ts b/resources/js/components/ui/sidebar/index.ts deleted file mode 100644 index b137821c..00000000 --- a/resources/js/components/ui/sidebar/index.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { cva, type VariantProps } from 'class-variance-authority' - -export { default as Sidebar } from './Sidebar.vue' -export { default as SidebarContent } from './SidebarContent.vue' -export { default as SidebarFooter } from './SidebarFooter.vue' -export { default as SidebarGroup } from './SidebarGroup.vue' -export { default as SidebarGroupAction } from './SidebarGroupAction.vue' -export { default as SidebarGroupContent } from './SidebarGroupContent.vue' -export { default as SidebarGroupLabel } from './SidebarGroupLabel.vue' -export { default as SidebarHeader } from './SidebarHeader.vue' -export { default as SidebarInput } from './SidebarInput.vue' -export { default as SidebarInset } from './SidebarInset.vue' -export { default as SidebarMenu } from './SidebarMenu.vue' -export { default as SidebarMenuAction } from './SidebarMenuAction.vue' -export { default as SidebarMenuBadge } from './SidebarMenuBadge.vue' -export { default as SidebarMenuButton } from './SidebarMenuButton.vue' -export { default as SidebarMenuItem } from './SidebarMenuItem.vue' -export { default as SidebarMenuSkeleton } from './SidebarMenuSkeleton.vue' -export { default as SidebarMenuSub } from './SidebarMenuSub.vue' -export { default as SidebarMenuSubButton } from './SidebarMenuSubButton.vue' -export { default as SidebarMenuSubItem } from './SidebarMenuSubItem.vue' -export { default as SidebarProvider } from './SidebarProvider.vue' -export { default as SidebarRail } from './SidebarRail.vue' -export { default as SidebarSeparator } from './SidebarSeparator.vue' -export { default as SidebarTrigger } from './SidebarTrigger.vue' - -export { useSidebar } from './utils' - -export const sidebarMenuButtonVariants = cva( - 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none 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', - { - variants: { - variant: { - default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', - outline: - 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]', - }, - size: { - default: 'h-8 text-sm', - sm: 'h-7 text-xs', - lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0', - }, - }, - defaultVariants: { - variant: 'default', - size: 'default', - }, - }, -) - -export type SidebarMenuButtonVariants = VariantProps diff --git a/resources/js/components/ui/sidebar/utils.ts b/resources/js/components/ui/sidebar/utils.ts deleted file mode 100644 index 3ded66c4..00000000 --- a/resources/js/components/ui/sidebar/utils.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { ComputedRef, Ref } from 'vue' -import { createContext } from 'radix-vue' - -export const SIDEBAR_COOKIE_NAME = 'sidebar:state' -export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 -export const SIDEBAR_WIDTH = '16rem' -export const SIDEBAR_WIDTH_MOBILE = '18rem' -export const SIDEBAR_WIDTH_ICON = '3rem' -export const SIDEBAR_KEYBOARD_SHORTCUT = 'b' - -export const [useSidebar, provideSidebarContext] = createContext<{ - state: ComputedRef<'expanded' | 'collapsed'> - open: Ref - setOpen: (value: boolean) => void - isMobile: Ref - openMobile: Ref - setOpenMobile: (value: boolean) => void - toggleSidebar: () => void -}>('Sidebar') diff --git a/resources/js/components/ui/skeleton/Skeleton.vue b/resources/js/components/ui/skeleton/Skeleton.vue deleted file mode 100644 index b49e3d9b..00000000 --- a/resources/js/components/ui/skeleton/Skeleton.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/components/ui/skeleton/index.ts b/resources/js/components/ui/skeleton/index.ts deleted file mode 100644 index be21fad3..00000000 --- a/resources/js/components/ui/skeleton/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Skeleton } from './Skeleton.vue' diff --git a/resources/js/components/ui/tooltip/Tooltip.vue b/resources/js/components/ui/tooltip/Tooltip.vue deleted file mode 100644 index b421f0fe..00000000 --- a/resources/js/components/ui/tooltip/Tooltip.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/components/ui/tooltip/TooltipContent.vue b/resources/js/components/ui/tooltip/TooltipContent.vue deleted file mode 100644 index c583a984..00000000 --- a/resources/js/components/ui/tooltip/TooltipContent.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/resources/js/components/ui/tooltip/TooltipProvider.vue b/resources/js/components/ui/tooltip/TooltipProvider.vue deleted file mode 100644 index 816505d6..00000000 --- a/resources/js/components/ui/tooltip/TooltipProvider.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/tooltip/TooltipTrigger.vue b/resources/js/components/ui/tooltip/TooltipTrigger.vue deleted file mode 100644 index f5b0e57f..00000000 --- a/resources/js/components/ui/tooltip/TooltipTrigger.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/tooltip/index.ts b/resources/js/components/ui/tooltip/index.ts deleted file mode 100644 index 5ab96536..00000000 --- a/resources/js/components/ui/tooltip/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as Tooltip } from './Tooltip.vue' -export { default as TooltipContent } from './TooltipContent.vue' -export { default as TooltipProvider } from './TooltipProvider.vue' -export { default as TooltipTrigger } from './TooltipTrigger.vue' diff --git a/resources/js/composables/useAppearance.ts b/resources/js/composables/useAppearance.ts deleted file mode 100644 index 48630114..00000000 --- a/resources/js/composables/useAppearance.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { ref, watch, onMounted } from 'vue' -import { usePage } from '@inertiajs/vue3' -import axios from 'axios' - -type Appearance = 'light' | 'dark' | 'system' - -export function useAppearance() { - const appearance = ref('system') - - // Initialize appearance from user preferences or system - onMounted(() => { - const savedAppearance = localStorage.getItem('appearance') as Appearance | null - if (savedAppearance) { - appearance.value = savedAppearance - updateTheme(savedAppearance) - } - }) - - // Update theme based on appearance setting - function updateTheme(value: Appearance) { - if (value === 'system') { - const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' - document.documentElement.classList.toggle('dark', systemTheme === 'dark') - } else { - document.documentElement.classList.toggle('dark', value === 'dark') - } - } - - // Handle system theme changes - onMounted(() => { - const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)') - mediaQuery.addEventListener('change', () => { - if (appearance.value === 'system') { - updateTheme('system') - } - }) - }) - - // Update appearance preference - async function updateAppearance(value: Appearance) { - appearance.value = value - localStorage.setItem('appearance', value) - updateTheme(value) - - // Update user preference in backend if authenticated - const { auth } = usePage().props - if (auth?.user) { - await axios.patch(route('settings.appearance'), { appearance: value }) - } - } - - return { - appearance, - updateAppearance - } -} diff --git a/resources/js/layouts/AppLayout.vue b/resources/js/layouts/AppLayout.vue deleted file mode 100644 index a250286f..00000000 --- a/resources/js/layouts/AppLayout.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - \ No newline at end of file diff --git a/resources/js/layouts/auth/AuthBase.vue b/resources/js/layouts/auth/AuthBase.vue deleted file mode 100644 index 7b970a5c..00000000 --- a/resources/js/layouts/auth/AuthBase.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/resources/js/layouts/auth/AuthCardLayout.vue b/resources/js/layouts/auth/AuthCardLayout.vue deleted file mode 100644 index 75c4c8c1..00000000 --- a/resources/js/layouts/auth/AuthCardLayout.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - - diff --git a/resources/js/layouts/auth/AuthSimpleLayout.vue b/resources/js/layouts/auth/AuthSimpleLayout.vue deleted file mode 100644 index a3a098bf..00000000 --- a/resources/js/layouts/auth/AuthSimpleLayout.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - - diff --git a/resources/js/layouts/auth/AuthSplitLayout.vue b/resources/js/layouts/auth/AuthSplitLayout.vue deleted file mode 100644 index f9ab9e16..00000000 --- a/resources/js/layouts/auth/AuthSplitLayout.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - - diff --git a/resources/js/pages/Dashboard.vue b/resources/js/pages/Dashboard.vue deleted file mode 100644 index e10e991a..00000000 --- a/resources/js/pages/Dashboard.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/resources/js/pages/Welcome.vue b/resources/js/pages/Welcome.vue deleted file mode 100644 index 7960058e..00000000 --- a/resources/js/pages/Welcome.vue +++ /dev/null @@ -1,376 +0,0 @@ - - - diff --git a/resources/js/pages/auth/ForgotPassword.vue b/resources/js/pages/auth/ForgotPassword.vue deleted file mode 100644 index 23c9e0fc..00000000 --- a/resources/js/pages/auth/ForgotPassword.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - diff --git a/resources/js/pages/auth/Login.vue b/resources/js/pages/auth/Login.vue deleted file mode 100644 index d9f4aa28..00000000 --- a/resources/js/pages/auth/Login.vue +++ /dev/null @@ -1,97 +0,0 @@ - - - \ No newline at end of file diff --git a/resources/js/pages/auth/Register.vue b/resources/js/pages/auth/Register.vue deleted file mode 100644 index 5969c764..00000000 --- a/resources/js/pages/auth/Register.vue +++ /dev/null @@ -1,102 +0,0 @@ - - - diff --git a/resources/js/pages/auth/ResetPassword.vue b/resources/js/pages/auth/ResetPassword.vue deleted file mode 100644 index 1ab05503..00000000 --- a/resources/js/pages/auth/ResetPassword.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - diff --git a/resources/js/pages/auth/VerifyEmail.vue b/resources/js/pages/auth/VerifyEmail.vue deleted file mode 100644 index 6beea075..00000000 --- a/resources/js/pages/auth/VerifyEmail.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - diff --git a/resources/js/pages/settings/Appearance.vue b/resources/js/pages/settings/Appearance.vue deleted file mode 100644 index 81320e26..00000000 --- a/resources/js/pages/settings/Appearance.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - diff --git a/resources/js/pages/settings/Layout.vue b/resources/js/pages/settings/Layout.vue deleted file mode 100644 index f34da748..00000000 --- a/resources/js/pages/settings/Layout.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - diff --git a/resources/js/pages/settings/Password.vue b/resources/js/pages/settings/Password.vue deleted file mode 100644 index f55d6311..00000000 --- a/resources/js/pages/settings/Password.vue +++ /dev/null @@ -1,130 +0,0 @@ - - - diff --git a/resources/js/pages/settings/Profile.vue b/resources/js/pages/settings/Profile.vue deleted file mode 100644 index 3ca6023b..00000000 --- a/resources/js/pages/settings/Profile.vue +++ /dev/null @@ -1,129 +0,0 @@ - - - From bc96ec06c06d8d30149e0bf458a7e855c9756c2c Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Thu, 2 Jan 2025 18:31:00 -0500 Subject: [PATCH 15/92] Adding name updates --- resources/{js-rename => js}/app.ts | 0 resources/{js-rename => js}/bootstrap.ts | 0 resources/{js-rename => js}/components/AppSidebar.vue | 0 resources/{js-rename => js}/components/AppearanceTabs.vue | 0 resources/{js-rename => js}/components/ApplicationLogo.vue | 0 resources/{js-rename => js}/components/Checkbox.vue | 0 resources/{js-rename => js}/components/DangerButton.vue | 0 resources/{js-rename => js}/components/Dropdown.vue | 0 resources/{js-rename => js}/components/DropdownLink.vue | 0 resources/{js-rename => js}/components/Heading.vue | 0 resources/{js-rename => js}/components/InputError.vue | 0 resources/{js-rename => js}/components/InputLabel.vue | 0 resources/{js-rename => js}/components/Modal.vue | 0 resources/{js-rename => js}/components/NavFooter.vue | 0 resources/{js-rename => js}/components/NavLink.vue | 0 resources/{js-rename => js}/components/NavMain.vue | 0 resources/{js-rename => js}/components/NavUser.vue | 0 resources/{js-rename => js}/components/PrimaryButton.vue | 0 resources/{js-rename => js}/components/ResponsiveNavLink.vue | 0 resources/{js-rename => js}/components/SecondaryButton.vue | 0 resources/{js-rename => js}/components/TextInput.vue | 0 resources/{js-rename => js}/components/settings/DeleteUser.vue | 0 resources/{js-rename => js}/components/settings/Heading.vue | 0 resources/{js-rename => js}/components/sidebar/NavMain.vue | 0 resources/{js-rename => js}/components/sidebar/NavProjects.vue | 0 resources/{js-rename => js}/components/sidebar/NavSecondary.vue | 0 resources/{js-rename => js}/components/sidebar/NavUser.vue | 0 resources/{js-rename => js}/components/sidebar/Sidebar.vue | 0 resources/{js-rename => js}/components/ui/avatar/Avatar.vue | 0 .../{js-rename => js}/components/ui/avatar/AvatarFallback.vue | 0 resources/{js-rename => js}/components/ui/avatar/AvatarImage.vue | 0 resources/{js-rename => js}/components/ui/avatar/index.ts | 0 .../{js-rename => js}/components/ui/breadcrumb/Breadcrumb.vue | 0 .../components/ui/breadcrumb/BreadcrumbEllipsis.vue | 0 .../{js-rename => js}/components/ui/breadcrumb/BreadcrumbItem.vue | 0 .../{js-rename => js}/components/ui/breadcrumb/BreadcrumbLink.vue | 0 .../{js-rename => js}/components/ui/breadcrumb/BreadcrumbList.vue | 0 .../{js-rename => js}/components/ui/breadcrumb/BreadcrumbPage.vue | 0 .../components/ui/breadcrumb/BreadcrumbSeparator.vue | 0 resources/{js-rename => js}/components/ui/breadcrumb/index.ts | 0 resources/{js-rename => js}/components/ui/button/Button.vue | 0 resources/{js-rename => js}/components/ui/button/index.ts | 0 resources/{js-rename => js}/components/ui/card/Card.vue | 0 resources/{js-rename => js}/components/ui/card/CardContent.vue | 0 .../{js-rename => js}/components/ui/card/CardDescription.vue | 0 resources/{js-rename => js}/components/ui/card/CardFooter.vue | 0 resources/{js-rename => js}/components/ui/card/CardHeader.vue | 0 resources/{js-rename => js}/components/ui/card/CardTitle.vue | 0 resources/{js-rename => js}/components/ui/card/index.ts | 0 .../{js-rename => js}/components/ui/collapsible/Collapsible.vue | 0 .../components/ui/collapsible/CollapsibleContent.vue | 0 .../components/ui/collapsible/CollapsibleTrigger.vue | 0 resources/{js-rename => js}/components/ui/collapsible/index.ts | 0 resources/{js-rename => js}/components/ui/dialog/Dialog.vue | 0 resources/{js-rename => js}/components/ui/dialog/DialogClose.vue | 0 .../{js-rename => js}/components/ui/dialog/DialogContent.vue | 0 .../{js-rename => js}/components/ui/dialog/DialogDescription.vue | 0 resources/{js-rename => js}/components/ui/dialog/DialogFooter.vue | 0 resources/{js-rename => js}/components/ui/dialog/DialogHeader.vue | 0 .../components/ui/dialog/DialogScrollContent.vue | 0 resources/{js-rename => js}/components/ui/dialog/DialogTitle.vue | 0 .../{js-rename => js}/components/ui/dialog/DialogTrigger.vue | 0 resources/{js-rename => js}/components/ui/dialog/index.ts | 0 .../components/ui/dropdown-menu/DropdownMenu.vue | 0 .../components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue | 0 .../components/ui/dropdown-menu/DropdownMenuContent.vue | 0 .../components/ui/dropdown-menu/DropdownMenuGroup.vue | 0 .../components/ui/dropdown-menu/DropdownMenuItem.vue | 0 .../components/ui/dropdown-menu/DropdownMenuLabel.vue | 0 .../components/ui/dropdown-menu/DropdownMenuRadioGroup.vue | 0 .../components/ui/dropdown-menu/DropdownMenuRadioItem.vue | 0 .../components/ui/dropdown-menu/DropdownMenuSeparator.vue | 0 .../components/ui/dropdown-menu/DropdownMenuShortcut.vue | 0 .../components/ui/dropdown-menu/DropdownMenuSub.vue | 0 .../components/ui/dropdown-menu/DropdownMenuSubContent.vue | 0 .../components/ui/dropdown-menu/DropdownMenuSubTrigger.vue | 0 .../components/ui/dropdown-menu/DropdownMenuTrigger.vue | 0 resources/{js-rename => js}/components/ui/dropdown-menu/index.ts | 0 resources/{js-rename => js}/components/ui/input/Input.vue | 0 resources/{js-rename => js}/components/ui/input/index.ts | 0 resources/{js-rename => js}/components/ui/label/Label.vue | 0 resources/{js-rename => js}/components/ui/label/index.ts | 0 resources/{js-rename => js}/components/ui/separator/Separator.vue | 0 resources/{js-rename => js}/components/ui/separator/index.ts | 0 resources/{js-rename => js}/components/ui/sheet/Sheet.vue | 0 resources/{js-rename => js}/components/ui/sheet/SheetClose.vue | 0 resources/{js-rename => js}/components/ui/sheet/SheetContent.vue | 0 .../{js-rename => js}/components/ui/sheet/SheetDescription.vue | 0 resources/{js-rename => js}/components/ui/sheet/SheetFooter.vue | 0 resources/{js-rename => js}/components/ui/sheet/SheetHeader.vue | 0 resources/{js-rename => js}/components/ui/sheet/SheetTitle.vue | 0 resources/{js-rename => js}/components/ui/sheet/SheetTrigger.vue | 0 resources/{js-rename => js}/components/ui/sheet/index.ts | 0 resources/{js-rename => js}/components/ui/sidebar/Sidebar.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarContent.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarFooter.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarGroup.vue | 0 .../components/ui/sidebar/SidebarGroupAction.vue | 0 .../components/ui/sidebar/SidebarGroupContent.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarGroupLabel.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarHeader.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarInput.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarInset.vue | 0 resources/{js-rename => js}/components/ui/sidebar/SidebarMenu.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarMenuAction.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarMenuBadge.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarMenuButton.vue | 0 .../components/ui/sidebar/SidebarMenuButtonChild.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarMenuItem.vue | 0 .../components/ui/sidebar/SidebarMenuSkeleton.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarMenuSub.vue | 0 .../components/ui/sidebar/SidebarMenuSubButton.vue | 0 .../components/ui/sidebar/SidebarMenuSubItem.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarProvider.vue | 0 resources/{js-rename => js}/components/ui/sidebar/SidebarRail.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarSeparator.vue | 0 .../{js-rename => js}/components/ui/sidebar/SidebarTrigger.vue | 0 resources/{js-rename => js}/components/ui/sidebar/index.ts | 0 resources/{js-rename => js}/components/ui/sidebar/utils.ts | 0 resources/{js-rename => js}/components/ui/skeleton/Skeleton.vue | 0 resources/{js-rename => js}/components/ui/skeleton/index.ts | 0 resources/{js-rename => js}/components/ui/tooltip/Tooltip.vue | 0 .../{js-rename => js}/components/ui/tooltip/TooltipContent.vue | 0 .../{js-rename => js}/components/ui/tooltip/TooltipProvider.vue | 0 .../{js-rename => js}/components/ui/tooltip/TooltipTrigger.vue | 0 resources/{js-rename => js}/components/ui/tooltip/index.ts | 0 resources/{js-rename => js}/composables/useAppearance.ts | 0 resources/{js-rename => js}/layouts/AppLayout.vue | 0 resources/{js-rename => js}/layouts/auth/AuthBase.vue | 0 resources/{js-rename => js}/layouts/auth/AuthCardLayout.vue | 0 resources/{js-rename => js}/layouts/auth/AuthSimpleLayout.vue | 0 resources/{js-rename => js}/layouts/auth/AuthSplitLayout.vue | 0 resources/{js-rename => js}/lib/utils.ts | 0 resources/{js-rename => js}/pages/Dashboard.vue | 0 resources/{js-rename => js}/pages/Welcome.vue | 0 resources/{js-rename => js}/pages/auth/ForgotPassword.vue | 0 resources/{js-rename => js}/pages/auth/Login.vue | 0 resources/{js-rename => js}/pages/auth/Register.vue | 0 resources/{js-rename => js}/pages/auth/ResetPassword.vue | 0 resources/{js-rename => js}/pages/auth/VerifyEmail.vue | 0 resources/{js-rename => js}/pages/settings/Appearance.vue | 0 resources/{js-rename => js}/pages/settings/Layout.vue | 0 resources/{js-rename => js}/pages/settings/Password.vue | 0 resources/{js-rename => js}/pages/settings/Profile.vue | 0 144 files changed, 0 insertions(+), 0 deletions(-) rename resources/{js-rename => js}/app.ts (100%) rename resources/{js-rename => js}/bootstrap.ts (100%) rename resources/{js-rename => js}/components/AppSidebar.vue (100%) rename resources/{js-rename => js}/components/AppearanceTabs.vue (100%) rename resources/{js-rename => js}/components/ApplicationLogo.vue (100%) rename resources/{js-rename => js}/components/Checkbox.vue (100%) rename resources/{js-rename => js}/components/DangerButton.vue (100%) rename resources/{js-rename => js}/components/Dropdown.vue (100%) rename resources/{js-rename => js}/components/DropdownLink.vue (100%) rename resources/{js-rename => js}/components/Heading.vue (100%) rename resources/{js-rename => js}/components/InputError.vue (100%) rename resources/{js-rename => js}/components/InputLabel.vue (100%) rename resources/{js-rename => js}/components/Modal.vue (100%) rename resources/{js-rename => js}/components/NavFooter.vue (100%) rename resources/{js-rename => js}/components/NavLink.vue (100%) rename resources/{js-rename => js}/components/NavMain.vue (100%) rename resources/{js-rename => js}/components/NavUser.vue (100%) rename resources/{js-rename => js}/components/PrimaryButton.vue (100%) rename resources/{js-rename => js}/components/ResponsiveNavLink.vue (100%) rename resources/{js-rename => js}/components/SecondaryButton.vue (100%) rename resources/{js-rename => js}/components/TextInput.vue (100%) rename resources/{js-rename => js}/components/settings/DeleteUser.vue (100%) rename resources/{js-rename => js}/components/settings/Heading.vue (100%) rename resources/{js-rename => js}/components/sidebar/NavMain.vue (100%) rename resources/{js-rename => js}/components/sidebar/NavProjects.vue (100%) rename resources/{js-rename => js}/components/sidebar/NavSecondary.vue (100%) rename resources/{js-rename => js}/components/sidebar/NavUser.vue (100%) rename resources/{js-rename => js}/components/sidebar/Sidebar.vue (100%) rename resources/{js-rename => js}/components/ui/avatar/Avatar.vue (100%) rename resources/{js-rename => js}/components/ui/avatar/AvatarFallback.vue (100%) rename resources/{js-rename => js}/components/ui/avatar/AvatarImage.vue (100%) rename resources/{js-rename => js}/components/ui/avatar/index.ts (100%) rename resources/{js-rename => js}/components/ui/breadcrumb/Breadcrumb.vue (100%) rename resources/{js-rename => js}/components/ui/breadcrumb/BreadcrumbEllipsis.vue (100%) rename resources/{js-rename => js}/components/ui/breadcrumb/BreadcrumbItem.vue (100%) rename resources/{js-rename => js}/components/ui/breadcrumb/BreadcrumbLink.vue (100%) rename resources/{js-rename => js}/components/ui/breadcrumb/BreadcrumbList.vue (100%) rename resources/{js-rename => js}/components/ui/breadcrumb/BreadcrumbPage.vue (100%) rename resources/{js-rename => js}/components/ui/breadcrumb/BreadcrumbSeparator.vue (100%) rename resources/{js-rename => js}/components/ui/breadcrumb/index.ts (100%) rename resources/{js-rename => js}/components/ui/button/Button.vue (100%) rename resources/{js-rename => js}/components/ui/button/index.ts (100%) rename resources/{js-rename => js}/components/ui/card/Card.vue (100%) rename resources/{js-rename => js}/components/ui/card/CardContent.vue (100%) rename resources/{js-rename => js}/components/ui/card/CardDescription.vue (100%) rename resources/{js-rename => js}/components/ui/card/CardFooter.vue (100%) rename resources/{js-rename => js}/components/ui/card/CardHeader.vue (100%) rename resources/{js-rename => js}/components/ui/card/CardTitle.vue (100%) rename resources/{js-rename => js}/components/ui/card/index.ts (100%) rename resources/{js-rename => js}/components/ui/collapsible/Collapsible.vue (100%) rename resources/{js-rename => js}/components/ui/collapsible/CollapsibleContent.vue (100%) rename resources/{js-rename => js}/components/ui/collapsible/CollapsibleTrigger.vue (100%) rename resources/{js-rename => js}/components/ui/collapsible/index.ts (100%) rename resources/{js-rename => js}/components/ui/dialog/Dialog.vue (100%) rename resources/{js-rename => js}/components/ui/dialog/DialogClose.vue (100%) rename resources/{js-rename => js}/components/ui/dialog/DialogContent.vue (100%) rename resources/{js-rename => js}/components/ui/dialog/DialogDescription.vue (100%) rename resources/{js-rename => js}/components/ui/dialog/DialogFooter.vue (100%) rename resources/{js-rename => js}/components/ui/dialog/DialogHeader.vue (100%) rename resources/{js-rename => js}/components/ui/dialog/DialogScrollContent.vue (100%) rename resources/{js-rename => js}/components/ui/dialog/DialogTitle.vue (100%) rename resources/{js-rename => js}/components/ui/dialog/DialogTrigger.vue (100%) rename resources/{js-rename => js}/components/ui/dialog/index.ts (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenu.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuContent.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuGroup.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuItem.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuLabel.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuRadioItem.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuSeparator.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuShortcut.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuSub.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuSubContent.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/DropdownMenuTrigger.vue (100%) rename resources/{js-rename => js}/components/ui/dropdown-menu/index.ts (100%) rename resources/{js-rename => js}/components/ui/input/Input.vue (100%) rename resources/{js-rename => js}/components/ui/input/index.ts (100%) rename resources/{js-rename => js}/components/ui/label/Label.vue (100%) rename resources/{js-rename => js}/components/ui/label/index.ts (100%) rename resources/{js-rename => js}/components/ui/separator/Separator.vue (100%) rename resources/{js-rename => js}/components/ui/separator/index.ts (100%) rename resources/{js-rename => js}/components/ui/sheet/Sheet.vue (100%) rename resources/{js-rename => js}/components/ui/sheet/SheetClose.vue (100%) rename resources/{js-rename => js}/components/ui/sheet/SheetContent.vue (100%) rename resources/{js-rename => js}/components/ui/sheet/SheetDescription.vue (100%) rename resources/{js-rename => js}/components/ui/sheet/SheetFooter.vue (100%) rename resources/{js-rename => js}/components/ui/sheet/SheetHeader.vue (100%) rename resources/{js-rename => js}/components/ui/sheet/SheetTitle.vue (100%) rename resources/{js-rename => js}/components/ui/sheet/SheetTrigger.vue (100%) rename resources/{js-rename => js}/components/ui/sheet/index.ts (100%) rename resources/{js-rename => js}/components/ui/sidebar/Sidebar.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarContent.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarFooter.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarGroup.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarGroupAction.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarGroupContent.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarGroupLabel.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarHeader.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarInput.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarInset.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarMenu.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarMenuAction.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarMenuBadge.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarMenuButton.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarMenuButtonChild.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarMenuItem.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarMenuSkeleton.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarMenuSub.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarMenuSubButton.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarMenuSubItem.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarProvider.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarRail.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarSeparator.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/SidebarTrigger.vue (100%) rename resources/{js-rename => js}/components/ui/sidebar/index.ts (100%) rename resources/{js-rename => js}/components/ui/sidebar/utils.ts (100%) rename resources/{js-rename => js}/components/ui/skeleton/Skeleton.vue (100%) rename resources/{js-rename => js}/components/ui/skeleton/index.ts (100%) rename resources/{js-rename => js}/components/ui/tooltip/Tooltip.vue (100%) rename resources/{js-rename => js}/components/ui/tooltip/TooltipContent.vue (100%) rename resources/{js-rename => js}/components/ui/tooltip/TooltipProvider.vue (100%) rename resources/{js-rename => js}/components/ui/tooltip/TooltipTrigger.vue (100%) rename resources/{js-rename => js}/components/ui/tooltip/index.ts (100%) rename resources/{js-rename => js}/composables/useAppearance.ts (100%) rename resources/{js-rename => js}/layouts/AppLayout.vue (100%) rename resources/{js-rename => js}/layouts/auth/AuthBase.vue (100%) rename resources/{js-rename => js}/layouts/auth/AuthCardLayout.vue (100%) rename resources/{js-rename => js}/layouts/auth/AuthSimpleLayout.vue (100%) rename resources/{js-rename => js}/layouts/auth/AuthSplitLayout.vue (100%) rename resources/{js-rename => js}/lib/utils.ts (100%) rename resources/{js-rename => js}/pages/Dashboard.vue (100%) rename resources/{js-rename => js}/pages/Welcome.vue (100%) rename resources/{js-rename => js}/pages/auth/ForgotPassword.vue (100%) rename resources/{js-rename => js}/pages/auth/Login.vue (100%) rename resources/{js-rename => js}/pages/auth/Register.vue (100%) rename resources/{js-rename => js}/pages/auth/ResetPassword.vue (100%) rename resources/{js-rename => js}/pages/auth/VerifyEmail.vue (100%) rename resources/{js-rename => js}/pages/settings/Appearance.vue (100%) rename resources/{js-rename => js}/pages/settings/Layout.vue (100%) rename resources/{js-rename => js}/pages/settings/Password.vue (100%) rename resources/{js-rename => js}/pages/settings/Profile.vue (100%) diff --git a/resources/js-rename/app.ts b/resources/js/app.ts similarity index 100% rename from resources/js-rename/app.ts rename to resources/js/app.ts diff --git a/resources/js-rename/bootstrap.ts b/resources/js/bootstrap.ts similarity index 100% rename from resources/js-rename/bootstrap.ts rename to resources/js/bootstrap.ts diff --git a/resources/js-rename/components/AppSidebar.vue b/resources/js/components/AppSidebar.vue similarity index 100% rename from resources/js-rename/components/AppSidebar.vue rename to resources/js/components/AppSidebar.vue diff --git a/resources/js-rename/components/AppearanceTabs.vue b/resources/js/components/AppearanceTabs.vue similarity index 100% rename from resources/js-rename/components/AppearanceTabs.vue rename to resources/js/components/AppearanceTabs.vue diff --git a/resources/js-rename/components/ApplicationLogo.vue b/resources/js/components/ApplicationLogo.vue similarity index 100% rename from resources/js-rename/components/ApplicationLogo.vue rename to resources/js/components/ApplicationLogo.vue diff --git a/resources/js-rename/components/Checkbox.vue b/resources/js/components/Checkbox.vue similarity index 100% rename from resources/js-rename/components/Checkbox.vue rename to resources/js/components/Checkbox.vue diff --git a/resources/js-rename/components/DangerButton.vue b/resources/js/components/DangerButton.vue similarity index 100% rename from resources/js-rename/components/DangerButton.vue rename to resources/js/components/DangerButton.vue diff --git a/resources/js-rename/components/Dropdown.vue b/resources/js/components/Dropdown.vue similarity index 100% rename from resources/js-rename/components/Dropdown.vue rename to resources/js/components/Dropdown.vue diff --git a/resources/js-rename/components/DropdownLink.vue b/resources/js/components/DropdownLink.vue similarity index 100% rename from resources/js-rename/components/DropdownLink.vue rename to resources/js/components/DropdownLink.vue diff --git a/resources/js-rename/components/Heading.vue b/resources/js/components/Heading.vue similarity index 100% rename from resources/js-rename/components/Heading.vue rename to resources/js/components/Heading.vue diff --git a/resources/js-rename/components/InputError.vue b/resources/js/components/InputError.vue similarity index 100% rename from resources/js-rename/components/InputError.vue rename to resources/js/components/InputError.vue diff --git a/resources/js-rename/components/InputLabel.vue b/resources/js/components/InputLabel.vue similarity index 100% rename from resources/js-rename/components/InputLabel.vue rename to resources/js/components/InputLabel.vue diff --git a/resources/js-rename/components/Modal.vue b/resources/js/components/Modal.vue similarity index 100% rename from resources/js-rename/components/Modal.vue rename to resources/js/components/Modal.vue diff --git a/resources/js-rename/components/NavFooter.vue b/resources/js/components/NavFooter.vue similarity index 100% rename from resources/js-rename/components/NavFooter.vue rename to resources/js/components/NavFooter.vue diff --git a/resources/js-rename/components/NavLink.vue b/resources/js/components/NavLink.vue similarity index 100% rename from resources/js-rename/components/NavLink.vue rename to resources/js/components/NavLink.vue diff --git a/resources/js-rename/components/NavMain.vue b/resources/js/components/NavMain.vue similarity index 100% rename from resources/js-rename/components/NavMain.vue rename to resources/js/components/NavMain.vue diff --git a/resources/js-rename/components/NavUser.vue b/resources/js/components/NavUser.vue similarity index 100% rename from resources/js-rename/components/NavUser.vue rename to resources/js/components/NavUser.vue diff --git a/resources/js-rename/components/PrimaryButton.vue b/resources/js/components/PrimaryButton.vue similarity index 100% rename from resources/js-rename/components/PrimaryButton.vue rename to resources/js/components/PrimaryButton.vue diff --git a/resources/js-rename/components/ResponsiveNavLink.vue b/resources/js/components/ResponsiveNavLink.vue similarity index 100% rename from resources/js-rename/components/ResponsiveNavLink.vue rename to resources/js/components/ResponsiveNavLink.vue diff --git a/resources/js-rename/components/SecondaryButton.vue b/resources/js/components/SecondaryButton.vue similarity index 100% rename from resources/js-rename/components/SecondaryButton.vue rename to resources/js/components/SecondaryButton.vue diff --git a/resources/js-rename/components/TextInput.vue b/resources/js/components/TextInput.vue similarity index 100% rename from resources/js-rename/components/TextInput.vue rename to resources/js/components/TextInput.vue diff --git a/resources/js-rename/components/settings/DeleteUser.vue b/resources/js/components/settings/DeleteUser.vue similarity index 100% rename from resources/js-rename/components/settings/DeleteUser.vue rename to resources/js/components/settings/DeleteUser.vue diff --git a/resources/js-rename/components/settings/Heading.vue b/resources/js/components/settings/Heading.vue similarity index 100% rename from resources/js-rename/components/settings/Heading.vue rename to resources/js/components/settings/Heading.vue diff --git a/resources/js-rename/components/sidebar/NavMain.vue b/resources/js/components/sidebar/NavMain.vue similarity index 100% rename from resources/js-rename/components/sidebar/NavMain.vue rename to resources/js/components/sidebar/NavMain.vue diff --git a/resources/js-rename/components/sidebar/NavProjects.vue b/resources/js/components/sidebar/NavProjects.vue similarity index 100% rename from resources/js-rename/components/sidebar/NavProjects.vue rename to resources/js/components/sidebar/NavProjects.vue diff --git a/resources/js-rename/components/sidebar/NavSecondary.vue b/resources/js/components/sidebar/NavSecondary.vue similarity index 100% rename from resources/js-rename/components/sidebar/NavSecondary.vue rename to resources/js/components/sidebar/NavSecondary.vue diff --git a/resources/js-rename/components/sidebar/NavUser.vue b/resources/js/components/sidebar/NavUser.vue similarity index 100% rename from resources/js-rename/components/sidebar/NavUser.vue rename to resources/js/components/sidebar/NavUser.vue diff --git a/resources/js-rename/components/sidebar/Sidebar.vue b/resources/js/components/sidebar/Sidebar.vue similarity index 100% rename from resources/js-rename/components/sidebar/Sidebar.vue rename to resources/js/components/sidebar/Sidebar.vue diff --git a/resources/js-rename/components/ui/avatar/Avatar.vue b/resources/js/components/ui/avatar/Avatar.vue similarity index 100% rename from resources/js-rename/components/ui/avatar/Avatar.vue rename to resources/js/components/ui/avatar/Avatar.vue diff --git a/resources/js-rename/components/ui/avatar/AvatarFallback.vue b/resources/js/components/ui/avatar/AvatarFallback.vue similarity index 100% rename from resources/js-rename/components/ui/avatar/AvatarFallback.vue rename to resources/js/components/ui/avatar/AvatarFallback.vue diff --git a/resources/js-rename/components/ui/avatar/AvatarImage.vue b/resources/js/components/ui/avatar/AvatarImage.vue similarity index 100% rename from resources/js-rename/components/ui/avatar/AvatarImage.vue rename to resources/js/components/ui/avatar/AvatarImage.vue diff --git a/resources/js-rename/components/ui/avatar/index.ts b/resources/js/components/ui/avatar/index.ts similarity index 100% rename from resources/js-rename/components/ui/avatar/index.ts rename to resources/js/components/ui/avatar/index.ts diff --git a/resources/js-rename/components/ui/breadcrumb/Breadcrumb.vue b/resources/js/components/ui/breadcrumb/Breadcrumb.vue similarity index 100% rename from resources/js-rename/components/ui/breadcrumb/Breadcrumb.vue rename to resources/js/components/ui/breadcrumb/Breadcrumb.vue diff --git a/resources/js-rename/components/ui/breadcrumb/BreadcrumbEllipsis.vue b/resources/js/components/ui/breadcrumb/BreadcrumbEllipsis.vue similarity index 100% rename from resources/js-rename/components/ui/breadcrumb/BreadcrumbEllipsis.vue rename to resources/js/components/ui/breadcrumb/BreadcrumbEllipsis.vue diff --git a/resources/js-rename/components/ui/breadcrumb/BreadcrumbItem.vue b/resources/js/components/ui/breadcrumb/BreadcrumbItem.vue similarity index 100% rename from resources/js-rename/components/ui/breadcrumb/BreadcrumbItem.vue rename to resources/js/components/ui/breadcrumb/BreadcrumbItem.vue diff --git a/resources/js-rename/components/ui/breadcrumb/BreadcrumbLink.vue b/resources/js/components/ui/breadcrumb/BreadcrumbLink.vue similarity index 100% rename from resources/js-rename/components/ui/breadcrumb/BreadcrumbLink.vue rename to resources/js/components/ui/breadcrumb/BreadcrumbLink.vue diff --git a/resources/js-rename/components/ui/breadcrumb/BreadcrumbList.vue b/resources/js/components/ui/breadcrumb/BreadcrumbList.vue similarity index 100% rename from resources/js-rename/components/ui/breadcrumb/BreadcrumbList.vue rename to resources/js/components/ui/breadcrumb/BreadcrumbList.vue diff --git a/resources/js-rename/components/ui/breadcrumb/BreadcrumbPage.vue b/resources/js/components/ui/breadcrumb/BreadcrumbPage.vue similarity index 100% rename from resources/js-rename/components/ui/breadcrumb/BreadcrumbPage.vue rename to resources/js/components/ui/breadcrumb/BreadcrumbPage.vue diff --git a/resources/js-rename/components/ui/breadcrumb/BreadcrumbSeparator.vue b/resources/js/components/ui/breadcrumb/BreadcrumbSeparator.vue similarity index 100% rename from resources/js-rename/components/ui/breadcrumb/BreadcrumbSeparator.vue rename to resources/js/components/ui/breadcrumb/BreadcrumbSeparator.vue diff --git a/resources/js-rename/components/ui/breadcrumb/index.ts b/resources/js/components/ui/breadcrumb/index.ts similarity index 100% rename from resources/js-rename/components/ui/breadcrumb/index.ts rename to resources/js/components/ui/breadcrumb/index.ts diff --git a/resources/js-rename/components/ui/button/Button.vue b/resources/js/components/ui/button/Button.vue similarity index 100% rename from resources/js-rename/components/ui/button/Button.vue rename to resources/js/components/ui/button/Button.vue diff --git a/resources/js-rename/components/ui/button/index.ts b/resources/js/components/ui/button/index.ts similarity index 100% rename from resources/js-rename/components/ui/button/index.ts rename to resources/js/components/ui/button/index.ts diff --git a/resources/js-rename/components/ui/card/Card.vue b/resources/js/components/ui/card/Card.vue similarity index 100% rename from resources/js-rename/components/ui/card/Card.vue rename to resources/js/components/ui/card/Card.vue diff --git a/resources/js-rename/components/ui/card/CardContent.vue b/resources/js/components/ui/card/CardContent.vue similarity index 100% rename from resources/js-rename/components/ui/card/CardContent.vue rename to resources/js/components/ui/card/CardContent.vue diff --git a/resources/js-rename/components/ui/card/CardDescription.vue b/resources/js/components/ui/card/CardDescription.vue similarity index 100% rename from resources/js-rename/components/ui/card/CardDescription.vue rename to resources/js/components/ui/card/CardDescription.vue diff --git a/resources/js-rename/components/ui/card/CardFooter.vue b/resources/js/components/ui/card/CardFooter.vue similarity index 100% rename from resources/js-rename/components/ui/card/CardFooter.vue rename to resources/js/components/ui/card/CardFooter.vue diff --git a/resources/js-rename/components/ui/card/CardHeader.vue b/resources/js/components/ui/card/CardHeader.vue similarity index 100% rename from resources/js-rename/components/ui/card/CardHeader.vue rename to resources/js/components/ui/card/CardHeader.vue diff --git a/resources/js-rename/components/ui/card/CardTitle.vue b/resources/js/components/ui/card/CardTitle.vue similarity index 100% rename from resources/js-rename/components/ui/card/CardTitle.vue rename to resources/js/components/ui/card/CardTitle.vue diff --git a/resources/js-rename/components/ui/card/index.ts b/resources/js/components/ui/card/index.ts similarity index 100% rename from resources/js-rename/components/ui/card/index.ts rename to resources/js/components/ui/card/index.ts diff --git a/resources/js-rename/components/ui/collapsible/Collapsible.vue b/resources/js/components/ui/collapsible/Collapsible.vue similarity index 100% rename from resources/js-rename/components/ui/collapsible/Collapsible.vue rename to resources/js/components/ui/collapsible/Collapsible.vue diff --git a/resources/js-rename/components/ui/collapsible/CollapsibleContent.vue b/resources/js/components/ui/collapsible/CollapsibleContent.vue similarity index 100% rename from resources/js-rename/components/ui/collapsible/CollapsibleContent.vue rename to resources/js/components/ui/collapsible/CollapsibleContent.vue diff --git a/resources/js-rename/components/ui/collapsible/CollapsibleTrigger.vue b/resources/js/components/ui/collapsible/CollapsibleTrigger.vue similarity index 100% rename from resources/js-rename/components/ui/collapsible/CollapsibleTrigger.vue rename to resources/js/components/ui/collapsible/CollapsibleTrigger.vue diff --git a/resources/js-rename/components/ui/collapsible/index.ts b/resources/js/components/ui/collapsible/index.ts similarity index 100% rename from resources/js-rename/components/ui/collapsible/index.ts rename to resources/js/components/ui/collapsible/index.ts diff --git a/resources/js-rename/components/ui/dialog/Dialog.vue b/resources/js/components/ui/dialog/Dialog.vue similarity index 100% rename from resources/js-rename/components/ui/dialog/Dialog.vue rename to resources/js/components/ui/dialog/Dialog.vue diff --git a/resources/js-rename/components/ui/dialog/DialogClose.vue b/resources/js/components/ui/dialog/DialogClose.vue similarity index 100% rename from resources/js-rename/components/ui/dialog/DialogClose.vue rename to resources/js/components/ui/dialog/DialogClose.vue diff --git a/resources/js-rename/components/ui/dialog/DialogContent.vue b/resources/js/components/ui/dialog/DialogContent.vue similarity index 100% rename from resources/js-rename/components/ui/dialog/DialogContent.vue rename to resources/js/components/ui/dialog/DialogContent.vue diff --git a/resources/js-rename/components/ui/dialog/DialogDescription.vue b/resources/js/components/ui/dialog/DialogDescription.vue similarity index 100% rename from resources/js-rename/components/ui/dialog/DialogDescription.vue rename to resources/js/components/ui/dialog/DialogDescription.vue diff --git a/resources/js-rename/components/ui/dialog/DialogFooter.vue b/resources/js/components/ui/dialog/DialogFooter.vue similarity index 100% rename from resources/js-rename/components/ui/dialog/DialogFooter.vue rename to resources/js/components/ui/dialog/DialogFooter.vue diff --git a/resources/js-rename/components/ui/dialog/DialogHeader.vue b/resources/js/components/ui/dialog/DialogHeader.vue similarity index 100% rename from resources/js-rename/components/ui/dialog/DialogHeader.vue rename to resources/js/components/ui/dialog/DialogHeader.vue diff --git a/resources/js-rename/components/ui/dialog/DialogScrollContent.vue b/resources/js/components/ui/dialog/DialogScrollContent.vue similarity index 100% rename from resources/js-rename/components/ui/dialog/DialogScrollContent.vue rename to resources/js/components/ui/dialog/DialogScrollContent.vue diff --git a/resources/js-rename/components/ui/dialog/DialogTitle.vue b/resources/js/components/ui/dialog/DialogTitle.vue similarity index 100% rename from resources/js-rename/components/ui/dialog/DialogTitle.vue rename to resources/js/components/ui/dialog/DialogTitle.vue diff --git a/resources/js-rename/components/ui/dialog/DialogTrigger.vue b/resources/js/components/ui/dialog/DialogTrigger.vue similarity index 100% rename from resources/js-rename/components/ui/dialog/DialogTrigger.vue rename to resources/js/components/ui/dialog/DialogTrigger.vue diff --git a/resources/js-rename/components/ui/dialog/index.ts b/resources/js/components/ui/dialog/index.ts similarity index 100% rename from resources/js-rename/components/ui/dialog/index.ts rename to resources/js/components/ui/dialog/index.ts diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenu.vue b/resources/js/components/ui/dropdown-menu/DropdownMenu.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenu.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenu.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuContent.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuContent.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuGroup.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuGroup.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuItem.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuLabel.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuLabel.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuRadioItem.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuSeparator.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuSeparator.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuShortcut.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuShortcut.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuSub.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuSub.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuSubContent.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuSubContent.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/DropdownMenuTrigger.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/DropdownMenuTrigger.vue rename to resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue diff --git a/resources/js-rename/components/ui/dropdown-menu/index.ts b/resources/js/components/ui/dropdown-menu/index.ts similarity index 100% rename from resources/js-rename/components/ui/dropdown-menu/index.ts rename to resources/js/components/ui/dropdown-menu/index.ts diff --git a/resources/js-rename/components/ui/input/Input.vue b/resources/js/components/ui/input/Input.vue similarity index 100% rename from resources/js-rename/components/ui/input/Input.vue rename to resources/js/components/ui/input/Input.vue diff --git a/resources/js-rename/components/ui/input/index.ts b/resources/js/components/ui/input/index.ts similarity index 100% rename from resources/js-rename/components/ui/input/index.ts rename to resources/js/components/ui/input/index.ts diff --git a/resources/js-rename/components/ui/label/Label.vue b/resources/js/components/ui/label/Label.vue similarity index 100% rename from resources/js-rename/components/ui/label/Label.vue rename to resources/js/components/ui/label/Label.vue diff --git a/resources/js-rename/components/ui/label/index.ts b/resources/js/components/ui/label/index.ts similarity index 100% rename from resources/js-rename/components/ui/label/index.ts rename to resources/js/components/ui/label/index.ts diff --git a/resources/js-rename/components/ui/separator/Separator.vue b/resources/js/components/ui/separator/Separator.vue similarity index 100% rename from resources/js-rename/components/ui/separator/Separator.vue rename to resources/js/components/ui/separator/Separator.vue diff --git a/resources/js-rename/components/ui/separator/index.ts b/resources/js/components/ui/separator/index.ts similarity index 100% rename from resources/js-rename/components/ui/separator/index.ts rename to resources/js/components/ui/separator/index.ts diff --git a/resources/js-rename/components/ui/sheet/Sheet.vue b/resources/js/components/ui/sheet/Sheet.vue similarity index 100% rename from resources/js-rename/components/ui/sheet/Sheet.vue rename to resources/js/components/ui/sheet/Sheet.vue diff --git a/resources/js-rename/components/ui/sheet/SheetClose.vue b/resources/js/components/ui/sheet/SheetClose.vue similarity index 100% rename from resources/js-rename/components/ui/sheet/SheetClose.vue rename to resources/js/components/ui/sheet/SheetClose.vue diff --git a/resources/js-rename/components/ui/sheet/SheetContent.vue b/resources/js/components/ui/sheet/SheetContent.vue similarity index 100% rename from resources/js-rename/components/ui/sheet/SheetContent.vue rename to resources/js/components/ui/sheet/SheetContent.vue diff --git a/resources/js-rename/components/ui/sheet/SheetDescription.vue b/resources/js/components/ui/sheet/SheetDescription.vue similarity index 100% rename from resources/js-rename/components/ui/sheet/SheetDescription.vue rename to resources/js/components/ui/sheet/SheetDescription.vue diff --git a/resources/js-rename/components/ui/sheet/SheetFooter.vue b/resources/js/components/ui/sheet/SheetFooter.vue similarity index 100% rename from resources/js-rename/components/ui/sheet/SheetFooter.vue rename to resources/js/components/ui/sheet/SheetFooter.vue diff --git a/resources/js-rename/components/ui/sheet/SheetHeader.vue b/resources/js/components/ui/sheet/SheetHeader.vue similarity index 100% rename from resources/js-rename/components/ui/sheet/SheetHeader.vue rename to resources/js/components/ui/sheet/SheetHeader.vue diff --git a/resources/js-rename/components/ui/sheet/SheetTitle.vue b/resources/js/components/ui/sheet/SheetTitle.vue similarity index 100% rename from resources/js-rename/components/ui/sheet/SheetTitle.vue rename to resources/js/components/ui/sheet/SheetTitle.vue diff --git a/resources/js-rename/components/ui/sheet/SheetTrigger.vue b/resources/js/components/ui/sheet/SheetTrigger.vue similarity index 100% rename from resources/js-rename/components/ui/sheet/SheetTrigger.vue rename to resources/js/components/ui/sheet/SheetTrigger.vue diff --git a/resources/js-rename/components/ui/sheet/index.ts b/resources/js/components/ui/sheet/index.ts similarity index 100% rename from resources/js-rename/components/ui/sheet/index.ts rename to resources/js/components/ui/sheet/index.ts diff --git a/resources/js-rename/components/ui/sidebar/Sidebar.vue b/resources/js/components/ui/sidebar/Sidebar.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/Sidebar.vue rename to resources/js/components/ui/sidebar/Sidebar.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarContent.vue b/resources/js/components/ui/sidebar/SidebarContent.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarContent.vue rename to resources/js/components/ui/sidebar/SidebarContent.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarFooter.vue b/resources/js/components/ui/sidebar/SidebarFooter.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarFooter.vue rename to resources/js/components/ui/sidebar/SidebarFooter.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarGroup.vue b/resources/js/components/ui/sidebar/SidebarGroup.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarGroup.vue rename to resources/js/components/ui/sidebar/SidebarGroup.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarGroupAction.vue b/resources/js/components/ui/sidebar/SidebarGroupAction.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarGroupAction.vue rename to resources/js/components/ui/sidebar/SidebarGroupAction.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarGroupContent.vue b/resources/js/components/ui/sidebar/SidebarGroupContent.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarGroupContent.vue rename to resources/js/components/ui/sidebar/SidebarGroupContent.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarGroupLabel.vue b/resources/js/components/ui/sidebar/SidebarGroupLabel.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarGroupLabel.vue rename to resources/js/components/ui/sidebar/SidebarGroupLabel.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarHeader.vue b/resources/js/components/ui/sidebar/SidebarHeader.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarHeader.vue rename to resources/js/components/ui/sidebar/SidebarHeader.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarInput.vue b/resources/js/components/ui/sidebar/SidebarInput.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarInput.vue rename to resources/js/components/ui/sidebar/SidebarInput.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarInset.vue b/resources/js/components/ui/sidebar/SidebarInset.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarInset.vue rename to resources/js/components/ui/sidebar/SidebarInset.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarMenu.vue b/resources/js/components/ui/sidebar/SidebarMenu.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarMenu.vue rename to resources/js/components/ui/sidebar/SidebarMenu.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarMenuAction.vue b/resources/js/components/ui/sidebar/SidebarMenuAction.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarMenuAction.vue rename to resources/js/components/ui/sidebar/SidebarMenuAction.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarMenuBadge.vue b/resources/js/components/ui/sidebar/SidebarMenuBadge.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarMenuBadge.vue rename to resources/js/components/ui/sidebar/SidebarMenuBadge.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarMenuButton.vue b/resources/js/components/ui/sidebar/SidebarMenuButton.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarMenuButton.vue rename to resources/js/components/ui/sidebar/SidebarMenuButton.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarMenuButtonChild.vue b/resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarMenuButtonChild.vue rename to resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarMenuItem.vue b/resources/js/components/ui/sidebar/SidebarMenuItem.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarMenuItem.vue rename to resources/js/components/ui/sidebar/SidebarMenuItem.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarMenuSkeleton.vue b/resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarMenuSkeleton.vue rename to resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarMenuSub.vue b/resources/js/components/ui/sidebar/SidebarMenuSub.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarMenuSub.vue rename to resources/js/components/ui/sidebar/SidebarMenuSub.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarMenuSubButton.vue b/resources/js/components/ui/sidebar/SidebarMenuSubButton.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarMenuSubButton.vue rename to resources/js/components/ui/sidebar/SidebarMenuSubButton.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarMenuSubItem.vue b/resources/js/components/ui/sidebar/SidebarMenuSubItem.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarMenuSubItem.vue rename to resources/js/components/ui/sidebar/SidebarMenuSubItem.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarProvider.vue b/resources/js/components/ui/sidebar/SidebarProvider.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarProvider.vue rename to resources/js/components/ui/sidebar/SidebarProvider.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarRail.vue b/resources/js/components/ui/sidebar/SidebarRail.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarRail.vue rename to resources/js/components/ui/sidebar/SidebarRail.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarSeparator.vue b/resources/js/components/ui/sidebar/SidebarSeparator.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarSeparator.vue rename to resources/js/components/ui/sidebar/SidebarSeparator.vue diff --git a/resources/js-rename/components/ui/sidebar/SidebarTrigger.vue b/resources/js/components/ui/sidebar/SidebarTrigger.vue similarity index 100% rename from resources/js-rename/components/ui/sidebar/SidebarTrigger.vue rename to resources/js/components/ui/sidebar/SidebarTrigger.vue diff --git a/resources/js-rename/components/ui/sidebar/index.ts b/resources/js/components/ui/sidebar/index.ts similarity index 100% rename from resources/js-rename/components/ui/sidebar/index.ts rename to resources/js/components/ui/sidebar/index.ts diff --git a/resources/js-rename/components/ui/sidebar/utils.ts b/resources/js/components/ui/sidebar/utils.ts similarity index 100% rename from resources/js-rename/components/ui/sidebar/utils.ts rename to resources/js/components/ui/sidebar/utils.ts diff --git a/resources/js-rename/components/ui/skeleton/Skeleton.vue b/resources/js/components/ui/skeleton/Skeleton.vue similarity index 100% rename from resources/js-rename/components/ui/skeleton/Skeleton.vue rename to resources/js/components/ui/skeleton/Skeleton.vue diff --git a/resources/js-rename/components/ui/skeleton/index.ts b/resources/js/components/ui/skeleton/index.ts similarity index 100% rename from resources/js-rename/components/ui/skeleton/index.ts rename to resources/js/components/ui/skeleton/index.ts diff --git a/resources/js-rename/components/ui/tooltip/Tooltip.vue b/resources/js/components/ui/tooltip/Tooltip.vue similarity index 100% rename from resources/js-rename/components/ui/tooltip/Tooltip.vue rename to resources/js/components/ui/tooltip/Tooltip.vue diff --git a/resources/js-rename/components/ui/tooltip/TooltipContent.vue b/resources/js/components/ui/tooltip/TooltipContent.vue similarity index 100% rename from resources/js-rename/components/ui/tooltip/TooltipContent.vue rename to resources/js/components/ui/tooltip/TooltipContent.vue diff --git a/resources/js-rename/components/ui/tooltip/TooltipProvider.vue b/resources/js/components/ui/tooltip/TooltipProvider.vue similarity index 100% rename from resources/js-rename/components/ui/tooltip/TooltipProvider.vue rename to resources/js/components/ui/tooltip/TooltipProvider.vue diff --git a/resources/js-rename/components/ui/tooltip/TooltipTrigger.vue b/resources/js/components/ui/tooltip/TooltipTrigger.vue similarity index 100% rename from resources/js-rename/components/ui/tooltip/TooltipTrigger.vue rename to resources/js/components/ui/tooltip/TooltipTrigger.vue diff --git a/resources/js-rename/components/ui/tooltip/index.ts b/resources/js/components/ui/tooltip/index.ts similarity index 100% rename from resources/js-rename/components/ui/tooltip/index.ts rename to resources/js/components/ui/tooltip/index.ts diff --git a/resources/js-rename/composables/useAppearance.ts b/resources/js/composables/useAppearance.ts similarity index 100% rename from resources/js-rename/composables/useAppearance.ts rename to resources/js/composables/useAppearance.ts diff --git a/resources/js-rename/layouts/AppLayout.vue b/resources/js/layouts/AppLayout.vue similarity index 100% rename from resources/js-rename/layouts/AppLayout.vue rename to resources/js/layouts/AppLayout.vue diff --git a/resources/js-rename/layouts/auth/AuthBase.vue b/resources/js/layouts/auth/AuthBase.vue similarity index 100% rename from resources/js-rename/layouts/auth/AuthBase.vue rename to resources/js/layouts/auth/AuthBase.vue diff --git a/resources/js-rename/layouts/auth/AuthCardLayout.vue b/resources/js/layouts/auth/AuthCardLayout.vue similarity index 100% rename from resources/js-rename/layouts/auth/AuthCardLayout.vue rename to resources/js/layouts/auth/AuthCardLayout.vue diff --git a/resources/js-rename/layouts/auth/AuthSimpleLayout.vue b/resources/js/layouts/auth/AuthSimpleLayout.vue similarity index 100% rename from resources/js-rename/layouts/auth/AuthSimpleLayout.vue rename to resources/js/layouts/auth/AuthSimpleLayout.vue diff --git a/resources/js-rename/layouts/auth/AuthSplitLayout.vue b/resources/js/layouts/auth/AuthSplitLayout.vue similarity index 100% rename from resources/js-rename/layouts/auth/AuthSplitLayout.vue rename to resources/js/layouts/auth/AuthSplitLayout.vue diff --git a/resources/js-rename/lib/utils.ts b/resources/js/lib/utils.ts similarity index 100% rename from resources/js-rename/lib/utils.ts rename to resources/js/lib/utils.ts diff --git a/resources/js-rename/pages/Dashboard.vue b/resources/js/pages/Dashboard.vue similarity index 100% rename from resources/js-rename/pages/Dashboard.vue rename to resources/js/pages/Dashboard.vue diff --git a/resources/js-rename/pages/Welcome.vue b/resources/js/pages/Welcome.vue similarity index 100% rename from resources/js-rename/pages/Welcome.vue rename to resources/js/pages/Welcome.vue diff --git a/resources/js-rename/pages/auth/ForgotPassword.vue b/resources/js/pages/auth/ForgotPassword.vue similarity index 100% rename from resources/js-rename/pages/auth/ForgotPassword.vue rename to resources/js/pages/auth/ForgotPassword.vue diff --git a/resources/js-rename/pages/auth/Login.vue b/resources/js/pages/auth/Login.vue similarity index 100% rename from resources/js-rename/pages/auth/Login.vue rename to resources/js/pages/auth/Login.vue diff --git a/resources/js-rename/pages/auth/Register.vue b/resources/js/pages/auth/Register.vue similarity index 100% rename from resources/js-rename/pages/auth/Register.vue rename to resources/js/pages/auth/Register.vue diff --git a/resources/js-rename/pages/auth/ResetPassword.vue b/resources/js/pages/auth/ResetPassword.vue similarity index 100% rename from resources/js-rename/pages/auth/ResetPassword.vue rename to resources/js/pages/auth/ResetPassword.vue diff --git a/resources/js-rename/pages/auth/VerifyEmail.vue b/resources/js/pages/auth/VerifyEmail.vue similarity index 100% rename from resources/js-rename/pages/auth/VerifyEmail.vue rename to resources/js/pages/auth/VerifyEmail.vue diff --git a/resources/js-rename/pages/settings/Appearance.vue b/resources/js/pages/settings/Appearance.vue similarity index 100% rename from resources/js-rename/pages/settings/Appearance.vue rename to resources/js/pages/settings/Appearance.vue diff --git a/resources/js-rename/pages/settings/Layout.vue b/resources/js/pages/settings/Layout.vue similarity index 100% rename from resources/js-rename/pages/settings/Layout.vue rename to resources/js/pages/settings/Layout.vue diff --git a/resources/js-rename/pages/settings/Password.vue b/resources/js/pages/settings/Password.vue similarity index 100% rename from resources/js-rename/pages/settings/Password.vue rename to resources/js/pages/settings/Password.vue diff --git a/resources/js-rename/pages/settings/Profile.vue b/resources/js/pages/settings/Profile.vue similarity index 100% rename from resources/js-rename/pages/settings/Profile.vue rename to resources/js/pages/settings/Profile.vue From 64a906b453f16ceae782d02dc8f70ee8e7423305 Mon Sep 17 00:00:00 2001 From: Tony Lea Date: Thu, 2 Jan 2025 18:33:23 -0500 Subject: [PATCH 16/92] Adding name updates --- resources/js/pages/settings/Appearance.vue | 2 +- resources/js/pages/settings/Password.vue | 2 +- resources/js/pages/settings/Profile.vue | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/js/pages/settings/Appearance.vue b/resources/js/pages/settings/Appearance.vue index 81320e26..e05a5519 100644 --- a/resources/js/pages/settings/Appearance.vue +++ b/resources/js/pages/settings/Appearance.vue @@ -6,7 +6,7 @@ import SettingsHeading from "@/components/settings/Heading.vue" import { Label } from "@/components/ui/label" import AppLayout from '@/layouts/AppLayout.vue' -import SettingsLayout from './layout.vue' +import SettingsLayout from './Layout.vue' interface BreadcrumbItem { title: string diff --git a/resources/js/pages/settings/Password.vue b/resources/js/pages/settings/Password.vue index f55d6311..9dcccd74 100644 --- a/resources/js/pages/settings/Password.vue +++ b/resources/js/pages/settings/Password.vue @@ -1,6 +1,6 @@ diff --git a/resources/js/layouts/AppLayout.vue b/resources/js/layouts/AppLayout.vue index 0f3f01ac..a505a110 100644 --- a/resources/js/layouts/AppLayout.vue +++ b/resources/js/layouts/AppLayout.vue @@ -30,11 +30,17 @@ const props = withDefaults(defineProps(), { breadcrumbs: () => [], }); -const isOpen = ref(localStorage.getItem('sidebar') === 'true'); +const isOpen = ref( + typeof window !== 'undefined' + ? localStorage.getItem('sidebar') !== 'false' + : true +); const handleSidebarChange = (open: boolean) => { isOpen.value = open; - localStorage.setItem('sidebar', String(open)); + if (typeof window !== 'undefined') { + localStorage.setItem('sidebar', String(open)); + } }; diff --git a/resources/js/pages/settings/Layout.vue b/resources/js/pages/settings/Layout.vue index f34da748..c6c18a73 100644 --- a/resources/js/pages/settings/Layout.vue +++ b/resources/js/pages/settings/Layout.vue @@ -42,12 +42,12 @@ const currentItem = sidebarNavItems.find(item => currentPath === item.href)
diff --git a/resources/js/components/NavFooter.vue b/resources/js/components/NavFooter.vue index a71284e6..105ec671 100644 --- a/resources/js/components/NavFooter.vue +++ b/resources/js/components/NavFooter.vue @@ -1,5 +1,6 @@ diff --git a/resources/js/components/sidebar/NavSecondary.vue b/resources/js/components/sidebar/NavSecondary.vue index f9cb6c27..5c7d345b 100644 --- a/resources/js/components/sidebar/NavSecondary.vue +++ b/resources/js/components/sidebar/NavSecondary.vue @@ -1,5 +1,6 @@ diff --git a/resources/js/components/sidebar/Sidebar.vue b/resources/js/components/sidebar/Sidebar.vue index b8fd7b5a..9edc7a7e 100644 --- a/resources/js/components/sidebar/Sidebar.vue +++ b/resources/js/components/sidebar/Sidebar.vue @@ -18,6 +18,7 @@ const props = defineProps(['name']) import NavProjects from '@/components/sidebar/NavProjects.vue' import NavSecondary from '@/components/sidebar/NavSecondary.vue' import NavUser from '@/components/sidebar/NavUser.vue' + import { type NavItemType } from '@/types' import { Sidebar, SidebarContent, @@ -28,14 +29,6 @@ const props = defineProps(['name']) SidebarMenuItem, } from '@/components/ui/sidebar' - interface NavItem { - title: string - url: string - icon?: any - isActive?: boolean - items?: { title: string; url: string }[] - } - interface Project { name: string url: string @@ -140,7 +133,7 @@ const props = defineProps(['name']) }, ], }, - ] as NavItem[], + ] as NavItemType[], navSecondary: [ { title: 'Support', @@ -152,7 +145,7 @@ const props = defineProps(['name']) url: '#', icon: Send, }, - ] as NavItem[], + ] as NavItemType[], projects: [ { name: 'Design Engineering', diff --git a/resources/js/composables/useAppearance.ts b/resources/js/composables/useAppearance.ts index 48630114..43fafde1 100644 --- a/resources/js/composables/useAppearance.ts +++ b/resources/js/composables/useAppearance.ts @@ -1,52 +1,51 @@ import { ref, watch, onMounted } from 'vue' import { usePage } from '@inertiajs/vue3' -import axios from 'axios' type Appearance = 'light' | 'dark' | 'system' +export function updateTheme(value: Appearance) { + if (value === 'system') { + const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + document.documentElement.classList.toggle('dark', systemTheme === 'dark') + } else { + document.documentElement.classList.toggle('dark', value === 'dark') + } +} + +export function initializeTheme() { + // Initialize theme from saved preference or default to system + const savedAppearance = localStorage.getItem('appearance') as Appearance | null + if (savedAppearance) { + updateTheme(savedAppearance) + } else { + updateTheme('system') + } + + // Set up system theme change listener + const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)') + mediaQuery.addEventListener('change', () => { + const currentAppearance = localStorage.getItem('appearance') as Appearance | null + if (!currentAppearance || currentAppearance === 'system') { + updateTheme('system') + } + }) +} + export function useAppearance() { const appearance = ref('system') - // Initialize appearance from user preferences or system onMounted(() => { + initializeTheme() const savedAppearance = localStorage.getItem('appearance') as Appearance | null if (savedAppearance) { appearance.value = savedAppearance - updateTheme(savedAppearance) } }) - // Update theme based on appearance setting - function updateTheme(value: Appearance) { - if (value === 'system') { - const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' - document.documentElement.classList.toggle('dark', systemTheme === 'dark') - } else { - document.documentElement.classList.toggle('dark', value === 'dark') - } - } - - // Handle system theme changes - onMounted(() => { - const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)') - mediaQuery.addEventListener('change', () => { - if (appearance.value === 'system') { - updateTheme('system') - } - }) - }) - - // Update appearance preference - async function updateAppearance(value: Appearance) { + function updateAppearance(value: Appearance) { appearance.value = value localStorage.setItem('appearance', value) updateTheme(value) - - // Update user preference in backend if authenticated - const { auth } = usePage().props - if (auth?.user) { - await axios.patch(route('settings.appearance'), { appearance: value }) - } } return { diff --git a/resources/js/layouts/AppLayout.vue b/resources/js/layouts/AppLayout.vue index a505a110..adddbd81 100644 --- a/resources/js/layouts/AppLayout.vue +++ b/resources/js/layouts/AppLayout.vue @@ -17,11 +17,6 @@ import { SidebarTrigger, } from '@/components/ui/sidebar'; -interface BreadcrumbItem { - title: string; - href: string; -} - interface Props { breadcrumbs?: BreadcrumbItemType[]; } diff --git a/resources/js/pages/Dashboard.vue b/resources/js/pages/Dashboard.vue index c3216cc4..e47bb131 100644 --- a/resources/js/pages/Dashboard.vue +++ b/resources/js/pages/Dashboard.vue @@ -3,11 +3,6 @@ import AppLayout from '@/layouts/AppLayout.vue'; import { type BreadcrumbItemType } from '@/types' import { Head } from '@inertiajs/vue3'; -interface BreadcrumbItem { - title: string; - href: string; -} - const breadcrumbs: BreadcrumbItemType[] = [ { title: 'Dashboard', diff --git a/resources/js/pages/auth/ConfirmPassword.vue b/resources/js/pages/auth/ConfirmPassword.vue new file mode 100644 index 00000000..f8a7c872 --- /dev/null +++ b/resources/js/pages/auth/ConfirmPassword.vue @@ -0,0 +1,55 @@ + + + diff --git a/resources/js/pages/auth/Login.vue b/resources/js/pages/auth/Login.vue index 6de980d5..b1e8d97f 100644 --- a/resources/js/pages/auth/Login.vue +++ b/resources/js/pages/auth/Login.vue @@ -33,7 +33,7 @@ const submit = () => { > -
+
{{ status }}
diff --git a/resources/js/pages/settings/Appearance.vue b/resources/js/pages/settings/Appearance.vue index e05a5519..4c5febd4 100644 --- a/resources/js/pages/settings/Appearance.vue +++ b/resources/js/pages/settings/Appearance.vue @@ -2,18 +2,14 @@ import { Head } from '@inertiajs/vue3' import AppearanceTabs from '@/components/AppearanceTabs.vue' +import { type BreadcrumbItemType } from '@/types' import SettingsHeading from "@/components/settings/Heading.vue" import { Label } from "@/components/ui/label" import AppLayout from '@/layouts/AppLayout.vue' import SettingsLayout from './Layout.vue' -interface BreadcrumbItem { - title: string - href: string -} - -const breadcrumbItems: BreadcrumbItem[] = [ +const breadcrumbItems: BreadcrumbItemType[] = [ { title: 'Appearance Settings', href: '/settings/appearance' @@ -22,7 +18,7 @@ const breadcrumbItems: BreadcrumbItem[] = [