├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── Skeletorfile.php ├── app ├── Http │ └── Controllers │ │ └── Controller.php ├── Models │ └── User.php └── Providers │ └── AppServiceProvider.php ├── artisan ├── bootstrap ├── app.php ├── cache │ └── .gitignore └── providers.php ├── bun.lock ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── database.php ├── filesystems.php ├── logging.php ├── mail.php ├── queue.php ├── reverb.php ├── services.php ├── session.php └── solo.php ├── database ├── .gitignore ├── factories │ └── UserFactory.php ├── migrations │ ├── 0001_01_01_000000_create_users_table.php │ ├── 0001_01_01_000001_create_password_reset_tokens_table.php │ ├── 0001_01_01_000002_create_sessions_table.php │ ├── 0001_01_01_000003_create_cache_table.php │ ├── 0001_01_01_000004_create_cache_locks_table.php │ ├── 0001_01_01_000005_create_jobs_table.php │ ├── 0001_01_01_000006_create_job_batches_table.php │ └── 0001_01_01_000007_create_failed_jobs_table.php └── seeders │ └── DatabaseSeeder.php ├── env.d.ts ├── package-lock.json ├── package.json ├── phpunit.xml ├── public ├── .htaccess ├── favicon.ico ├── index.php └── robots.txt ├── resources ├── assets │ └── .gitkeep ├── client │ ├── app.ts │ └── tailwind.css └── views │ └── welcome.blade.php ├── routes ├── channels.php ├── console.php └── web.php ├── storage ├── app │ ├── .gitignore │ ├── private │ │ └── .gitignore │ └── public │ │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ ├── .gitignore │ │ └── data │ │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tests ├── Feature │ └── ExampleTest.php ├── Pest.php ├── TestCase.php └── Unit │ └── ExampleTest.php ├── tsconfig.json └── vite.config.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_size = 4 7 | indent_style = space 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{yml,yaml}] 15 | indent_size = 2 16 | 17 | [compose.yaml] 18 | indent_size = 4 19 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=Laravel 2 | APP_ENV=local 3 | APP_KEY= 4 | APP_DEBUG=true 5 | APP_TIMEZONE=UTC 6 | APP_URL=http://localhost 7 | 8 | APP_LOCALE=en 9 | APP_FALLBACK_LOCALE=en 10 | APP_FAKER_LOCALE=en_US 11 | 12 | APP_MAINTENANCE_DRIVER=file 13 | # APP_MAINTENANCE_STORE=database 14 | 15 | PHP_CLI_SERVER_WORKERS=4 16 | 17 | BCRYPT_ROUNDS=12 18 | 19 | LOG_CHANNEL=stack 20 | LOG_STACK=single 21 | LOG_DEPRECATIONS_CHANNEL=null 22 | LOG_LEVEL=debug 23 | 24 | DB_CONNECTION=sqlite 25 | # DB_HOST=127.0.0.1 26 | # DB_PORT=3306 27 | # DB_DATABASE=laravel 28 | # DB_USERNAME=root 29 | # DB_PASSWORD= 30 | 31 | SESSION_DRIVER=database 32 | SESSION_LIFETIME=120 33 | SESSION_ENCRYPT=false 34 | SESSION_PATH=/ 35 | SESSION_DOMAIN=null 36 | 37 | BROADCAST_CONNECTION=log 38 | FILESYSTEM_DISK=local 39 | QUEUE_CONNECTION=database 40 | 41 | CACHE_STORE=database 42 | CACHE_PREFIX= 43 | 44 | MEMCACHED_HOST=127.0.0.1 45 | 46 | REDIS_CLIENT=phpredis 47 | REDIS_HOST=127.0.0.1 48 | REDIS_PASSWORD=null 49 | REDIS_PORT=6379 50 | 51 | MAIL_MAILER=log 52 | MAIL_HOST=127.0.0.1 53 | MAIL_PORT=2525 54 | MAIL_USERNAME=null 55 | MAIL_PASSWORD=null 56 | MAIL_ENCRYPTION=null 57 | MAIL_FROM_ADDRESS="hello@example.com" 58 | MAIL_FROM_NAME="${APP_NAME}" 59 | 60 | AWS_ACCESS_KEY_ID= 61 | AWS_SECRET_ACCESS_KEY= 62 | AWS_DEFAULT_REGION=us-east-1 63 | AWS_BUCKET= 64 | AWS_USE_PATH_STYLE_ENDPOINT=false 65 | 66 | VITE_APP_NAME="${APP_NAME}" 67 | 68 | REVERB_APP_ID= 69 | REVERB_APP_KEY= 70 | REVERB_APP_SECRET= 71 | REVERB_HOST="localhost" 72 | REVERB_PORT=8080 73 | REVERB_SCHEME=http 74 | 75 | VITE_REVERB_APP_KEY="${REVERB_APP_KEY}" 76 | VITE_REVERB_HOST="${REVERB_HOST}" 77 | VITE_REVERB_PORT="${REVERB_PORT}" 78 | VITE_REVERB_SCHEME="${REVERB_SCHEME}" 79 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | 3 | *.blade.php diff=html 4 | *.css diff=css 5 | *.html diff=html 6 | *.md diff=markdown 7 | *.php diff=php 8 | 9 | /.github export-ignore 10 | CHANGELOG.md export-ignore 11 | .styleci.yml export-ignore 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | .env 4 | .env.backup 5 | .env.production 6 | .phpactor.json 7 | .phpunit.result.cache 8 | /.fleet 9 | /.idea 10 | /.nova 11 | /.phpunit.cache 12 | /.vscode 13 | /.zed 14 | /auth.json 15 | /node_modules 16 | /public/build 17 | /public/hot 18 | /public/storage 19 | /storage/*.key 20 | /storage/pail 21 | /vendor 22 | Homestead.json 23 | Homestead.yaml 24 | Thumbs.db 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 NiftyCo, LLC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Laravel Logo

2 | 3 |

4 | Build Status 5 | Total Downloads 6 | Latest Stable Version 7 | License 8 |

9 | 10 | ## Getting Started 11 | 12 | First thing you want to do is scaffold out a new project with the following command: 13 | 14 | ```shell 15 | composer create-project starter/laravel my-app 16 | ``` 17 | 18 | Replace `my-app` with whatever you want to name your project. This will kickoff Composer's normal project scaffolding 19 | and then execute the [Skeletor](https://github.com/aniftyco/skeletor) setup for configuring the starter. 20 | 21 | ## License 22 | 23 | The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). 24 | -------------------------------------------------------------------------------- /Skeletorfile.php: -------------------------------------------------------------------------------- 1 | intro('Welcome to the Skeletor setup wizard!'); 12 | 13 | $name = $skeletor->text( 14 | label: 'What is the name of your application?', 15 | placeholder: 'E.g. example-app', 16 | required: 'Your application name is required.', 17 | default: $skeletor->workspace, 18 | validate: function ($value) { 19 | if (preg_match('/[^\pL\pN\-_.]/', $value) !== 0) { 20 | return 'The name may only contain letters, numbers, dashes, underscores, and periods.'; 21 | } 22 | } 23 | ); 24 | 25 | $skeletor->spin( 26 | message: 'Setting up environment...', 27 | success: 'Environment set.', 28 | callback: function () use ($skeletor, $name) { 29 | $skeletor->writeFile('.env', $skeletor->readFile('.env.example')); 30 | $skeletor->exec(['php', 'artisan', 'key:generate', '--ansi']); 31 | $skeletor->replaceInFile('APP_NAME=Laravel', 'APP_NAME='.$name, '.env'); 32 | $skeletor->replaceInFile('APP_NAME=Laravel', 'APP_NAME='.$name, '.env.example'); 33 | } 34 | ); 35 | 36 | $db = $skeletor->select('Which database would you like to use?', [ 37 | 'sqlite' => 'SQLite', 38 | 'mysql' => 'MySQL', 39 | 'pgsql' => 'PostgreSQL', 40 | 'sqlsrv' => 'SQL Server', 41 | ], 'sqlite'); 42 | 43 | $skeletor->spin( 44 | message: 'Configuring database...', 45 | success: 'Database configured.', 46 | error: 'Failed to configure database.', 47 | callback: function () use ($skeletor, $db, $name) { 48 | $skeletor->pregReplaceInFile('/DB_CONNECTION=.*/', 'DB_CONNECTION='.$db, '.env'); 49 | $skeletor->pregReplaceInFile('/DB_CONNECTION=.*/', 'DB_CONNECTION='.$db, '.env.example'); 50 | 51 | if ($db === 'sqlite') { 52 | $env = $skeletor->readFile('.env'); 53 | 54 | if (! str_contains($env, '# DB_HOST=127.0.0.1')) { 55 | $defaults = [ 56 | 'DB_HOST=127.0.0.1', 57 | 'DB_PORT=3306', 58 | 'DB_DATABASE=laravel', 59 | 'DB_USERNAME=root', 60 | 'DB_PASSWORD=', 61 | ]; 62 | 63 | $skeletor->replaceInFile($defaults, array_map(fn ($default) => '# '.$default, $defaults), '.env'); 64 | $skeletor->replaceInFile($defaults, array_map(fn ($default) => '# '.$default, $defaults), '.env.example'); 65 | 66 | return; 67 | } 68 | 69 | return; 70 | } 71 | 72 | $defaults = [ 73 | '# DB_HOST=127.0.0.1', 74 | '# DB_PORT=3306', 75 | '# DB_DATABASE=laravel', 76 | '# DB_USERNAME=root', 77 | '# DB_PASSWORD=', 78 | ]; 79 | 80 | $skeletor->replaceInFile($defaults, array_map(fn ($default) => substr($default, 2), $defaults), '.env'); 81 | $skeletor->replaceInFile($defaults, array_map(fn ($default) => substr($default, 2), $defaults), '.env.example'); 82 | 83 | $defaultPorts = [ 84 | 'pgsql' => '5432', 85 | 'sqlsrv' => '1433', 86 | ]; 87 | 88 | if (isset($defaultPorts[$db])) { 89 | $skeletor->replaceInFile('DB_PORT=3306', 'DB_PORT='.$defaultPorts[$db], '.env'); 90 | $skeletor->replaceInFile('DB_PORT=3306', 'DB_PORT='.$defaultPorts[$db], '.env.example'); 91 | } 92 | 93 | $skeletor->replaceInFile('DB_DATABASE=laravel', 'DB_DATABASE='.str_replace('-', '_', strtolower($name)), '.env'); 94 | $skeletor->replaceInFile('DB_DATABASE=laravel', 'DB_DATABASE='.str_replace('-', '_', strtolower($name)), '.env.example'); 95 | } 96 | ); 97 | 98 | if ($skeletor->confirm('Would you like to run the database migrations?', true)) { 99 | $skeletor->spin( 100 | message: 'Running database migrations', 101 | success: 'Database migrated.', 102 | error: 'Failed to migrate database.', 103 | callback: function () use ($skeletor, $db) { 104 | if ($db === 'sqlite') { 105 | $skeletor->writeFile('database/database.sqlite', ''); 106 | } 107 | 108 | $skeletor->exec(['php', 'artisan', 'migrate', '--graceful', '--ansi']); 109 | } 110 | ); 111 | } 112 | 113 | $frontend = $skeletor->select('Which front-end framework would you like to use?', [ 114 | 'none' => 'None', 115 | 'react' => 'Inertia with React', 116 | 'vue' => 'Inertia with Vue', 117 | 'livewire' => 'Livewire', 118 | ], 'none'); 119 | 120 | if ($frontend !== 'none') { 121 | $deps = [ 122 | 'npm' => [ 123 | 'vite-plugin-ziggy', 124 | ], 125 | 'composer' => [ 126 | 'tightenco/ziggy', 127 | ], 128 | ]; 129 | 130 | [$type, $callback] = match ($frontend) { 131 | 'react' => ['Inertia with React', function () use ($skeletor, $deps) { 132 | $skeletor->exec(['composer', 'require', 'inertiajs/inertia-laravel', ...$deps['composer']]); 133 | $skeletor->exec(['npm', 'install', 'react', 'react-dom', '@inertiajs/react']); 134 | $skeletor->exec(['npm', 'install', '--save-dev', '@types/react', '@types/react-dom', '@vitejs/plugin-react', ...$deps['npm']]); 135 | $skeletor->exec(['php', 'artisan', 'inertia:middleware']); 136 | $skeletor->removeFile('resources/client/app.ts'); 137 | $skeletor->writeFile('resources/client/app.tsx', $skeletor->readFile(stub('react.app'))); 138 | $skeletor->writeFile('resources/views/app.blade.php', $skeletor->readFile(stub('react.view'))); 139 | $skeletor->removeFile('vite.config.ts'); 140 | $skeletor->writeFile('vite.config.ts', $skeletor->readFile(stub('react.vite'))); 141 | }], 142 | 'vue' => ['Inertia with Vue', function () use ($skeletor, $deps) { 143 | $skeletor->exec(['composer', 'require', 'inertiajs/inertia-laravel', ...$deps['composer']]); 144 | $skeletor->exec(['npm', 'install', 'vue', '@inertiajs/vue3']); 145 | $skeletor->exec(['npm', 'install', '--save-dev', '@vitejs/plugin-vue', ...$deps['npm']]); 146 | $skeletor->exec(['php', 'artisan', 'inertia:middleware']); 147 | $skeletor->removeFile('resources/client/app.ts'); 148 | $skeletor->writeFile('resources/client/app.ts', $skeletor->readFile(stub('vue.app'))); 149 | $skeletor->writeFile('resources/views/app.blade.php', $skeletor->readFile(stub('vue.view'))); 150 | $skeletor->removeFile('vite.config.ts'); 151 | $skeletor->writeFile('vite.config.ts', $skeletor->readFile(stub('vue.vite'))); 152 | }], 153 | 'livewire' => ['Livewire', function () use ($skeletor) { 154 | $skeletor->exec(['composer', 'require', 'livewire/livewire']); 155 | }], 156 | }; 157 | 158 | $skeletor->spin( 159 | message: "Installing $type", 160 | success: "$type installed.", 161 | callback: $callback 162 | ); 163 | } 164 | 165 | $origin = $skeletor->text( 166 | label: 'What is your git repository remote?', 167 | placeholder: "E.g. git@github.com:example/{$skeletor->workspace}.git", 168 | default: "git@github.com:example/{$skeletor->workspace}.git", 169 | required: false 170 | ); 171 | 172 | return function () use ($skeletor, $origin) { 173 | if (! empty($origin)) { 174 | $skeletor->spin( 175 | message: 'Setting up git remote...', 176 | success: 'Git remote set.', 177 | error: 'Failed to set up git remote.', 178 | callback: function () use ($skeletor, $origin) { 179 | $skeletor->exec(['git', 'init']); 180 | $skeletor->exec(['git', 'remote', 'add', 'origin', $origin]); 181 | $skeletor->exec(['git', 'add', '-A']); 182 | $skeletor->exec(['git', 'commit', '-m', '"initial commit"']); 183 | } 184 | ); 185 | } 186 | 187 | $skeletor->outro('🎉 Your Laravel application is ready to go!'); 188 | $skeletor->log('To get started run the following commands:'); 189 | $skeletor->log(' - '.$skeletor->cyan('cd '.$skeletor->workspace)); 190 | $skeletor->log(' - '.$skeletor->cyan('php artisan solo')); 191 | }; 192 | }; 193 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | */ 15 | use HasFactory, HasUuids, Notifiable, SoftDeletes; 16 | 17 | /** 18 | * The attributes that are mass assignable. 19 | * 20 | * @var array 21 | */ 22 | protected $fillable = [ 23 | 'name', 24 | 'email', 25 | 'password', 26 | ]; 27 | 28 | /** 29 | * The attributes that should be hidden for serialization. 30 | * 31 | * @var array 32 | */ 33 | protected $hidden = [ 34 | 'password', 35 | 'remember_token', 36 | ]; 37 | 38 | /** 39 | * Get the attributes that should be cast. 40 | * 41 | * @return array 42 | */ 43 | protected function casts(): array 44 | { 45 | return [ 46 | 'confirmed_at' => 'datetime', 47 | 'password' => 'hashed', 48 | ]; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | handleCommand(new ArgvInput); 14 | 15 | exit($status); 16 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | withRouting( 9 | web: __DIR__.'/../routes/web.php', 10 | commands: __DIR__.'/../routes/console.php', 11 | channels: __DIR__.'/../routes/channels.php', 12 | health: '/up', 13 | ) 14 | ->withMiddleware(function (Middleware $middleware): void { 15 | // 16 | }) 17 | ->withExceptions(function (Exceptions $exceptions): void { 18 | // 19 | })->create(); 20 | -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /bootstrap/providers.php: -------------------------------------------------------------------------------- 1 | =3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" } }, "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw=="], 117 | 118 | "@tailwindcss/node": ["@tailwindcss/node@4.0.17", "", { "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "tailwindcss": "4.0.17" } }, "sha512-LIdNwcqyY7578VpofXyqjH6f+3fP4nrz7FBLki5HpzqjYfXdF2m/eW18ZfoKePtDGg90Bvvfpov9d2gy5XVCbg=="], 119 | 120 | "@tailwindcss/oxide": ["@tailwindcss/oxide@4.0.17", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.0.17", "@tailwindcss/oxide-darwin-arm64": "4.0.17", "@tailwindcss/oxide-darwin-x64": "4.0.17", "@tailwindcss/oxide-freebsd-x64": "4.0.17", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.17", "@tailwindcss/oxide-linux-arm64-gnu": "4.0.17", "@tailwindcss/oxide-linux-arm64-musl": "4.0.17", "@tailwindcss/oxide-linux-x64-gnu": "4.0.17", "@tailwindcss/oxide-linux-x64-musl": "4.0.17", "@tailwindcss/oxide-win32-arm64-msvc": "4.0.17", "@tailwindcss/oxide-win32-x64-msvc": "4.0.17" } }, "sha512-B4OaUIRD2uVrULpAD1Yksx2+wNarQr2rQh65nXqaqbLY1jCd8fO+3KLh/+TH4Hzh2NTHQvgxVbPdUDOtLk7vAw=="], 121 | 122 | "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.0.17", "", { "os": "android", "cpu": "arm64" }, "sha512-3RfO0ZK64WAhop+EbHeyxGThyDr/fYhxPzDbEQjD2+v7ZhKTb2svTWy+KK+J1PHATus2/CQGAGp7pHY/8M8ugg=="], 123 | 124 | "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.0.17", "", { "os": "darwin", "cpu": "arm64" }, "sha512-e1uayxFQCCDuzTk9s8q7MC5jFN42IY7nzcr5n0Mw/AcUHwD6JaBkXnATkD924ZsHyPDvddnusIEvkgLd2CiREg=="], 125 | 126 | "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.0.17", "", { "os": "darwin", "cpu": "x64" }, "sha512-d6z7HSdOKfXQ0HPlVx1jduUf/YtBuCCtEDIEFeBCzgRRtDsUuRtofPqxIVaSCUTOk5+OfRLonje6n9dF6AH8wQ=="], 127 | 128 | "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.0.17", "", { "os": "freebsd", "cpu": "x64" }, "sha512-EjrVa6lx3wzXz3l5MsdOGtYIsRjgs5Mru6lDv4RuiXpguWeOb3UzGJ7vw7PEzcFadKNvNslEQqoAABeMezprxQ=="], 129 | 130 | "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.0.17", "", { "os": "linux", "cpu": "arm" }, "sha512-65zXfCOdi8wuaY0Ye6qMR5LAXokHYtrGvo9t/NmxvSZtCCitXV/gzJ/WP5ksXPhff1SV5rov0S+ZIZU+/4eyCQ=="], 131 | 132 | "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.0.17", "", { "os": "linux", "cpu": "arm64" }, "sha512-+aaq6hJ8ioTdbJV5IA1WjWgLmun4T7eYLTvJIToiXLHy5JzUERRbIZjAcjgK9qXMwnvuu7rqpxzej+hGoEcG5g=="], 133 | 134 | "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.0.17", "", { "os": "linux", "cpu": "arm64" }, "sha512-/FhWgZCdUGAeYHYnZKekiOC0aXFiBIoNCA0bwzkICiMYS5Rtx2KxFfMUXQVnl4uZRblG5ypt5vpPhVaXgGk80w=="], 135 | 136 | "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.0.17", "", { "os": "linux", "cpu": "x64" }, "sha512-gELJzOHK6GDoIpm/539Golvk+QWZjxQcbkKq9eB2kzNkOvrP0xc5UPgO9bIMNt1M48mO8ZeNenCMGt6tfkvVBg=="], 137 | 138 | "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.0.17", "", { "os": "linux", "cpu": "x64" }, "sha512-68NwxcJrZn94IOW4TysMIbYv5AlM6So1luTlbYUDIGnKma1yTFGBRNEJ+SacJ3PZE2rgcTBNRHX1TB4EQ/XEHw=="], 139 | 140 | "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.0.17", "", { "os": "win32", "cpu": "arm64" }, "sha512-AkBO8efP2/7wkEXkNlXzRD4f/7WerqKHlc6PWb5v0jGbbm22DFBLbIM19IJQ3b+tNewQZa+WnPOaGm0SmwMNjw=="], 141 | 142 | "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.0.17", "", { "os": "win32", "cpu": "x64" }, "sha512-7/DTEvXcoWlqX0dAlcN0zlmcEu9xSermuo7VNGX9tJ3nYMdo735SHvbrHDln1+LYfF6NhJ3hjbpbjkMOAGmkDg=="], 143 | 144 | "@tailwindcss/vite": ["@tailwindcss/vite@4.0.17", "", { "dependencies": { "@tailwindcss/node": "4.0.17", "@tailwindcss/oxide": "4.0.17", "lightningcss": "1.29.2", "tailwindcss": "4.0.17" }, "peerDependencies": { "vite": "^5.2.0 || ^6" } }, "sha512-HJbBYDlDVg5cvYZzECb6xwc1IDCEM3uJi3hEZp3BjZGCNGJcTsnCpan+z+VMW0zo6gR0U6O6ElqU1OoZ74Dhww=="], 145 | 146 | "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], 147 | 148 | "@types/node": ["@types/node@22.13.14", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w=="], 149 | 150 | "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], 151 | 152 | "axios": ["axios@1.8.4", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw=="], 153 | 154 | "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], 155 | 156 | "debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], 157 | 158 | "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], 159 | 160 | "detect-libc": ["detect-libc@2.0.3", "", {}, "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw=="], 161 | 162 | "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="], 163 | 164 | "esbuild": ["esbuild@0.25.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.1", "@esbuild/android-arm": "0.25.1", "@esbuild/android-arm64": "0.25.1", "@esbuild/android-x64": "0.25.1", "@esbuild/darwin-arm64": "0.25.1", "@esbuild/darwin-x64": "0.25.1", "@esbuild/freebsd-arm64": "0.25.1", "@esbuild/freebsd-x64": "0.25.1", "@esbuild/linux-arm": "0.25.1", "@esbuild/linux-arm64": "0.25.1", "@esbuild/linux-ia32": "0.25.1", "@esbuild/linux-loong64": "0.25.1", "@esbuild/linux-mips64el": "0.25.1", "@esbuild/linux-ppc64": "0.25.1", "@esbuild/linux-riscv64": "0.25.1", "@esbuild/linux-s390x": "0.25.1", "@esbuild/linux-x64": "0.25.1", "@esbuild/netbsd-arm64": "0.25.1", "@esbuild/netbsd-x64": "0.25.1", "@esbuild/openbsd-arm64": "0.25.1", "@esbuild/openbsd-x64": "0.25.1", "@esbuild/sunos-x64": "0.25.1", "@esbuild/win32-arm64": "0.25.1", "@esbuild/win32-ia32": "0.25.1", "@esbuild/win32-x64": "0.25.1" }, "bin": "bin/esbuild" }, "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ=="], 165 | 166 | "fdir": ["fdir@6.4.6", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w=="], 167 | 168 | "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], 169 | 170 | "form-data": ["form-data@4.0.1", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw=="], 171 | 172 | "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 173 | 174 | "globrex": ["globrex@0.1.2", "", {}, "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="], 175 | 176 | "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], 177 | 178 | "jiti": ["jiti@2.4.2", "", { "bin": "lib/jiti-cli.mjs" }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], 179 | 180 | "laravel-echo": ["laravel-echo@2.0.2", "", {}, "sha512-Ciai6hA7r35MFqNRb8G034cvm9WiveSTFQQKRGJhWtZGbng7C8BBa5QvqDxk/Mw5GeJ+q19jrEwQhf7r1b1lcg=="], 181 | 182 | "laravel-vite-plugin": ["laravel-vite-plugin@2.0.0", "", { "dependencies": { "picocolors": "^1.0.0", "vite-plugin-full-reload": "^1.1.0" }, "peerDependencies": { "vite": "^7.0.0" }, "bin": { "clean-orphaned-assets": "bin/clean.js" } }, "sha512-pnaKHInJgiWpG/g+LmaISHl7D/1s5wnOXnrGiBdt4NOs+tYZRw0v/ZANELGX2/dGgHyEzO+iZ6x4idpoK04z/Q=="], 183 | 184 | "lightningcss": ["lightningcss@1.29.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.2", "lightningcss-darwin-x64": "1.29.2", "lightningcss-freebsd-x64": "1.29.2", "lightningcss-linux-arm-gnueabihf": "1.29.2", "lightningcss-linux-arm64-gnu": "1.29.2", "lightningcss-linux-arm64-musl": "1.29.2", "lightningcss-linux-x64-gnu": "1.29.2", "lightningcss-linux-x64-musl": "1.29.2", "lightningcss-win32-arm64-msvc": "1.29.2", "lightningcss-win32-x64-msvc": "1.29.2" } }, "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA=="], 185 | 186 | "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.29.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA=="], 187 | 188 | "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.29.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w=="], 189 | 190 | "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.29.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg=="], 191 | 192 | "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.29.2", "", { "os": "linux", "cpu": "arm" }, "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg=="], 193 | 194 | "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ=="], 195 | 196 | "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ=="], 197 | 198 | "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg=="], 199 | 200 | "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w=="], 201 | 202 | "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.29.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw=="], 203 | 204 | "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.29.2", "", { "os": "win32", "cpu": "x64" }, "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA=="], 205 | 206 | "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], 207 | 208 | "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], 209 | 210 | "mini-svg-data-uri": ["mini-svg-data-uri@1.4.4", "", { "bin": "cli.js" }, "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="], 211 | 212 | "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], 213 | 214 | "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], 215 | 216 | "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], 217 | 218 | "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], 219 | 220 | "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], 221 | 222 | "prettier": ["prettier@3.5.3", "", { "bin": "bin/prettier.cjs" }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], 223 | 224 | "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], 225 | 226 | "pusher-js": ["pusher-js@8.4.0", "", { "dependencies": { "tweetnacl": "^1.0.3" } }, "sha512-wp3HqIIUc1GRyu1XrP6m2dgyE9MoCsXVsWNlohj0rjSkLf+a0jLvEyVubdg58oMk7bhjBWnFClgp8jfAa6Ak4Q=="], 227 | 228 | "rollup": ["rollup@4.45.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.45.1", "@rollup/rollup-android-arm64": "4.45.1", "@rollup/rollup-darwin-arm64": "4.45.1", "@rollup/rollup-darwin-x64": "4.45.1", "@rollup/rollup-freebsd-arm64": "4.45.1", "@rollup/rollup-freebsd-x64": "4.45.1", "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", "@rollup/rollup-linux-arm-musleabihf": "4.45.1", "@rollup/rollup-linux-arm64-gnu": "4.45.1", "@rollup/rollup-linux-arm64-musl": "4.45.1", "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", "@rollup/rollup-linux-riscv64-gnu": "4.45.1", "@rollup/rollup-linux-riscv64-musl": "4.45.1", "@rollup/rollup-linux-s390x-gnu": "4.45.1", "@rollup/rollup-linux-x64-gnu": "4.45.1", "@rollup/rollup-linux-x64-musl": "4.45.1", "@rollup/rollup-win32-arm64-msvc": "4.45.1", "@rollup/rollup-win32-ia32-msvc": "4.45.1", "@rollup/rollup-win32-x64-msvc": "4.45.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw=="], 229 | 230 | "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], 231 | 232 | "tailwindcss": ["tailwindcss@4.0.17", "", {}, "sha512-OErSiGzRa6rLiOvaipsDZvLMSpsBZ4ysB4f0VKGXUrjw2jfkJRd6kjRKV2+ZmTCNvwtvgdDam5D7w6WXsdLJZw=="], 233 | 234 | "tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="], 235 | 236 | "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], 237 | 238 | "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], 239 | 240 | "tsconfck": ["tsconfck@3.1.4", "", { "peerDependencies": { "typescript": "^5.0.0" }, "bin": "bin/tsconfck.js" }, "sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ=="], 241 | 242 | "tweetnacl": ["tweetnacl@1.0.3", "", {}, "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="], 243 | 244 | "typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], 245 | 246 | "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], 247 | 248 | "vite": ["vite@7.0.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", "picomatch": "^4.0.2", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw=="], 249 | 250 | "vite-plugin-full-reload": ["vite-plugin-full-reload@1.2.0", "", { "dependencies": { "picocolors": "^1.0.0", "picomatch": "^2.3.1" } }, "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA=="], 251 | 252 | "vite-tsconfig-paths": ["vite-tsconfig-paths@5.1.4", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" } }, "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w=="], 253 | 254 | "vite-plugin-full-reload/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 255 | } 256 | } 257 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://getcomposer.org/schema.json", 3 | "name": "starter/laravel", 4 | "type": "project", 5 | "description": "A skeleton application for the Laravel framework.", 6 | "keywords": [ 7 | "laravel", 8 | "framework", 9 | "skeleton", 10 | "skeletor", 11 | "starter", 12 | "composer-starter" 13 | ], 14 | "license": "MIT", 15 | "require": { 16 | "php": "^8.3", 17 | "laravel/framework": "^12.0", 18 | "laravel/reverb": "^1.4", 19 | "laravel/tinker": "^2.10" 20 | }, 21 | "require-dev": { 22 | "aniftyco/skeletor": "^0.1", 23 | "fakerphp/faker": "^1.24", 24 | "laravel/pint": "^1.21", 25 | "mockery/mockery": "^1.6", 26 | "pestphp/pest": "^3.7", 27 | "pestphp/pest-plugin-laravel": "^3.1", 28 | "soloterm/solo": "^0.4" 29 | }, 30 | "autoload": { 31 | "psr-4": { 32 | "App\\": "app/", 33 | "Database\\Factories\\": "database/factories/", 34 | "Database\\Seeders\\": "database/seeders/" 35 | } 36 | }, 37 | "autoload-dev": { 38 | "psr-4": { 39 | "Tests\\": "tests/" 40 | } 41 | }, 42 | "scripts": { 43 | "setup": [ 44 | "composer install", 45 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"", 46 | "@php artisan key:generate", 47 | "@php artisan migrate --force", 48 | "npm install", 49 | "npm run build" 50 | ], 51 | "dev": [ 52 | "Composer\\Config::disableProcessTimeout", 53 | "php artisan solo" 54 | ], 55 | "test": [ 56 | "@php artisan config:clear --ansi", 57 | "@php artisan test" 58 | ], 59 | "post-autoload-dump": [ 60 | "@php artisan config:clear", 61 | "@php artisan clear-compiled", 62 | "@php artisan package:discover --ansi" 63 | ], 64 | "post-update-cmd": [ 65 | "@php artisan vendor:publish --tag=laravel-assets --ansi --force" 66 | ], 67 | "post-create-project-cmd": [ 68 | "NiftyCo\\Skeletor\\Runner::execute" 69 | ], 70 | "post-root-package-install": [ 71 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 72 | ], 73 | "pre-package-uninstall": [ 74 | "Illuminate\\Foundation\\ComposerScripts::prePackageUninstall" 75 | ] 76 | }, 77 | "extra": { 78 | "laravel": { 79 | "dont-discover": [] 80 | } 81 | }, 82 | "config": { 83 | "optimize-autoloader": true, 84 | "preferred-install": "dist", 85 | "sort-packages": true, 86 | "allow-plugins": { 87 | "pestphp/pest-plugin": true, 88 | "php-http/discovery": true 89 | } 90 | }, 91 | "minimum-stability": "stable", 92 | "prefer-stable": true 93 | } 94 | -------------------------------------------------------------------------------- /config/app.php: -------------------------------------------------------------------------------- 1 | env('APP_NAME', 'Laravel'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Application Environment 21 | |-------------------------------------------------------------------------- 22 | | 23 | | This value determines the "environment" your application is currently 24 | | running in. This may determine how you prefer to configure various 25 | | services the application utilizes. Set this in your ".env" file. 26 | | 27 | */ 28 | 29 | 'env' => env('APP_ENV', 'production'), 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Application Debug Mode 34 | |-------------------------------------------------------------------------- 35 | | 36 | | When your application is in debug mode, detailed error messages with 37 | | stack traces will be shown on every error that occurs within your 38 | | application. If disabled, a simple generic error page is shown. 39 | | 40 | */ 41 | 42 | 'debug' => (bool) env('APP_DEBUG', false), 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Application URL 47 | |-------------------------------------------------------------------------- 48 | | 49 | | This URL is used by the console to properly generate URLs when using 50 | | the Artisan command line tool. You should set this to the root of 51 | | the application so that it's available within Artisan commands. 52 | | 53 | */ 54 | 55 | 'url' => env('APP_URL', 'http://localhost'), 56 | 57 | /* 58 | |-------------------------------------------------------------------------- 59 | | Application Timezone 60 | |-------------------------------------------------------------------------- 61 | | 62 | | Here you may specify the default timezone for your application, which 63 | | will be used by the PHP date and date-time functions. The timezone 64 | | is set to "UTC" by default as it is suitable for most use cases. 65 | | 66 | */ 67 | 68 | 'timezone' => env('APP_TIMEZONE', 'UTC'), 69 | 70 | /* 71 | |-------------------------------------------------------------------------- 72 | | Application Locale Configuration 73 | |-------------------------------------------------------------------------- 74 | | 75 | | The application locale determines the default locale that will be used 76 | | by Laravel's translation / localization methods. This option can be 77 | | set to any locale for which you plan to have translation strings. 78 | | 79 | */ 80 | 81 | 'locale' => env('APP_LOCALE', 'en'), 82 | 83 | 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), 84 | 85 | 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), 86 | 87 | /* 88 | |-------------------------------------------------------------------------- 89 | | Encryption Key 90 | |-------------------------------------------------------------------------- 91 | | 92 | | This key is utilized by Laravel's encryption services and should be set 93 | | to a random, 32 character string to ensure that all encrypted values 94 | | are secure. You should do this prior to deploying the application. 95 | | 96 | */ 97 | 98 | 'cipher' => 'AES-256-CBC', 99 | 100 | 'key' => env('APP_KEY'), 101 | 102 | 'previous_keys' => [ 103 | ...array_filter( 104 | explode(',', (string) env('APP_PREVIOUS_KEYS', '')) 105 | ), 106 | ], 107 | 108 | /* 109 | |-------------------------------------------------------------------------- 110 | | Maintenance Mode Driver 111 | |-------------------------------------------------------------------------- 112 | | 113 | | These configuration options determine the driver used to determine and 114 | | manage Laravel's "maintenance mode" status. The "cache" driver will 115 | | allow maintenance mode to be controlled across multiple machines. 116 | | 117 | | Supported drivers: "file", "cache" 118 | | 119 | */ 120 | 121 | 'maintenance' => [ 122 | 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), 123 | 'store' => env('APP_MAINTENANCE_STORE', 'database'), 124 | ], 125 | 126 | ]; 127 | -------------------------------------------------------------------------------- /config/auth.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'guard' => env('AUTH_GUARD', 'web'), 18 | 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), 19 | ], 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Authentication Guards 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Next, you may define every authentication guard for your application. 27 | | Of course, a great default configuration has been defined for you 28 | | which utilizes session storage plus the Eloquent user provider. 29 | | 30 | | All authentication guards have a user provider, which defines how the 31 | | users are actually retrieved out of your database or other storage 32 | | system used by the application. Typically, Eloquent is utilized. 33 | | 34 | | Supported: "session" 35 | | 36 | */ 37 | 38 | 'guards' => [ 39 | 'web' => [ 40 | 'driver' => 'session', 41 | 'provider' => 'users', 42 | ], 43 | ], 44 | 45 | /* 46 | |-------------------------------------------------------------------------- 47 | | User Providers 48 | |-------------------------------------------------------------------------- 49 | | 50 | | All authentication guards have a user provider, which defines how the 51 | | users are actually retrieved out of your database or other storage 52 | | system used by the application. Typically, Eloquent is utilized. 53 | | 54 | | If you have multiple user tables or models you may configure multiple 55 | | providers to represent the model / table. These providers may then 56 | | be assigned to any extra authentication guards you have defined. 57 | | 58 | | Supported: "database", "eloquent" 59 | | 60 | */ 61 | 62 | 'providers' => [ 63 | 'users' => [ 64 | 'driver' => 'eloquent', 65 | 'model' => env('AUTH_MODEL', App\Models\User::class), 66 | ], 67 | 68 | // 'users' => [ 69 | // 'driver' => 'database', 70 | // 'table' => 'users', 71 | // ], 72 | ], 73 | 74 | /* 75 | |-------------------------------------------------------------------------- 76 | | Resetting Passwords 77 | |-------------------------------------------------------------------------- 78 | | 79 | | These configuration options specify the behavior of Laravel's password 80 | | reset functionality, including the table utilized for token storage 81 | | and the user provider that is invoked to actually retrieve users. 82 | | 83 | | The expiry time is the number of minutes that each reset token will be 84 | | considered valid. This security feature keeps tokens short-lived so 85 | | they have less time to be guessed. You may change this as needed. 86 | | 87 | | The throttle setting is the number of seconds a user must wait before 88 | | generating more password reset tokens. This prevents the user from 89 | | quickly generating a very large amount of password reset tokens. 90 | | 91 | */ 92 | 93 | 'passwords' => [ 94 | 'users' => [ 95 | 'provider' => 'users', 96 | 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), 97 | 'expire' => 60, 98 | 'throttle' => 60, 99 | ], 100 | ], 101 | 102 | /* 103 | |-------------------------------------------------------------------------- 104 | | Password Confirmation Timeout 105 | |-------------------------------------------------------------------------- 106 | | 107 | | Here you may define the number of seconds before a password confirmation 108 | | window expires and users are asked to re-enter their password via the 109 | | confirmation screen. By default, the timeout lasts for three hours. 110 | | 111 | */ 112 | 113 | 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), 114 | 115 | ]; 116 | -------------------------------------------------------------------------------- /config/broadcasting.php: -------------------------------------------------------------------------------- 1 | env('BROADCAST_CONNECTION', 'null'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Broadcast Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the broadcast connections that will be used 26 | | to broadcast events to other systems or over WebSockets. Samples of 27 | | each available type of connection are provided inside this array. 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'reverb' => [ 34 | 'driver' => 'reverb', 35 | 'key' => env('REVERB_APP_KEY'), 36 | 'secret' => env('REVERB_APP_SECRET'), 37 | 'app_id' => env('REVERB_APP_ID'), 38 | 'options' => [ 39 | 'host' => env('REVERB_HOST'), 40 | 'port' => env('REVERB_PORT', 443), 41 | 'scheme' => env('REVERB_SCHEME', 'https'), 42 | 'useTLS' => env('REVERB_SCHEME', 'https') === 'https', 43 | ], 44 | 'client_options' => [ 45 | // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html 46 | ], 47 | ], 48 | 49 | 'pusher' => [ 50 | 'driver' => 'pusher', 51 | 'key' => env('PUSHER_APP_KEY'), 52 | 'secret' => env('PUSHER_APP_SECRET'), 53 | 'app_id' => env('PUSHER_APP_ID'), 54 | 'options' => [ 55 | 'cluster' => env('PUSHER_APP_CLUSTER'), 56 | 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', 57 | 'port' => env('PUSHER_PORT', 443), 58 | 'scheme' => env('PUSHER_SCHEME', 'https'), 59 | 'encrypted' => true, 60 | 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', 61 | ], 62 | 'client_options' => [ 63 | // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html 64 | ], 65 | ], 66 | 67 | 'ably' => [ 68 | 'driver' => 'ably', 69 | 'key' => env('ABLY_KEY'), 70 | ], 71 | 72 | 'log' => [ 73 | 'driver' => 'log', 74 | ], 75 | 76 | 'null' => [ 77 | 'driver' => 'null', 78 | ], 79 | 80 | ], 81 | 82 | ]; 83 | -------------------------------------------------------------------------------- /config/cache.php: -------------------------------------------------------------------------------- 1 | env('CACHE_STORE', 'database'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Cache Stores 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the cache "stores" for your application as 26 | | well as their drivers. You may even define multiple stores for the 27 | | same cache driver to group types of items stored in your caches. 28 | | 29 | | Supported drivers: "array", "database", "file", "memcached", 30 | | "redis", "dynamodb", "octane", 31 | "failover", "null" 32 | | 33 | */ 34 | 35 | 'stores' => [ 36 | 37 | 'array' => [ 38 | 'driver' => 'array', 39 | 'serialize' => false, 40 | ], 41 | 42 | 'database' => [ 43 | 'driver' => 'database', 44 | 'connection' => env('DB_CACHE_CONNECTION'), 45 | 'table' => env('DB_CACHE_TABLE', 'cache'), 46 | 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), 47 | 'lock_table' => env('DB_CACHE_LOCK_TABLE'), 48 | ], 49 | 50 | 'file' => [ 51 | 'driver' => 'file', 52 | 'path' => storage_path('framework/cache/data'), 53 | 'lock_path' => storage_path('framework/cache/data'), 54 | ], 55 | 56 | 'memcached' => [ 57 | 'driver' => 'memcached', 58 | 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 59 | 'sasl' => [ 60 | env('MEMCACHED_USERNAME'), 61 | env('MEMCACHED_PASSWORD'), 62 | ], 63 | 'options' => [ 64 | // Memcached::OPT_CONNECT_TIMEOUT => 2000, 65 | ], 66 | 'servers' => [ 67 | [ 68 | 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 69 | 'port' => env('MEMCACHED_PORT', 11211), 70 | 'weight' => 100, 71 | ], 72 | ], 73 | ], 74 | 75 | 'redis' => [ 76 | 'driver' => 'redis', 77 | 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), 78 | 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), 79 | ], 80 | 81 | 'dynamodb' => [ 82 | 'driver' => 'dynamodb', 83 | 'key' => env('AWS_ACCESS_KEY_ID'), 84 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 85 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 86 | 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), 87 | 'endpoint' => env('DYNAMODB_ENDPOINT'), 88 | ], 89 | 90 | 'octane' => [ 91 | 'driver' => 'octane', 92 | ], 93 | 94 | 'failover' => [ 95 | 'driver' => 'failover', 96 | 'stores' => [ 97 | 'database', 98 | 'array', 99 | ], 100 | ], 101 | 102 | ], 103 | 104 | /* 105 | |-------------------------------------------------------------------------- 106 | | Cache Key Prefix 107 | |-------------------------------------------------------------------------- 108 | | 109 | | When utilizing the APC, database, memcached, Redis, and DynamoDB cache 110 | | stores, there might be other applications using the same cache. For 111 | | that reason, you may prefix every cache key to avoid collisions. 112 | | 113 | */ 114 | 115 | 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'), 116 | 117 | ]; 118 | -------------------------------------------------------------------------------- /config/database.php: -------------------------------------------------------------------------------- 1 | env('DB_CONNECTION', 'sqlite'), 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Database Connections 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Below are all of the database connections defined for your application. 27 | | An example configuration is provided for each database system which 28 | | is supported by Laravel. You're free to add / remove connections. 29 | | 30 | */ 31 | 32 | 'connections' => [ 33 | 34 | 'sqlite' => [ 35 | 'driver' => 'sqlite', 36 | 'url' => env('DATABASE_URL'), 37 | 'database' => env('DB_DATABASE', database_path('database.sqlite')), 38 | 'prefix' => '', 39 | 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), 40 | 'busy_timeout' => null, 41 | 'journal_mode' => null, 42 | 'synchronous' => null, 43 | ], 44 | 45 | 'mysql' => [ 46 | 'driver' => 'mysql', 47 | 'url' => env('DATABASE_URL'), 48 | 'host' => env('DB_HOST', '127.0.0.1'), 49 | 'port' => env('DB_PORT', '3306'), 50 | 'database' => env('DB_DATABASE', 'laravel'), 51 | 'username' => env('DB_USERNAME', 'root'), 52 | 'password' => env('DB_PASSWORD', ''), 53 | 'unix_socket' => env('DB_SOCKET', ''), 54 | 'charset' => env('DB_CHARSET', 'utf8mb4'), 55 | 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 56 | 'prefix' => '', 57 | 'prefix_indexes' => true, 58 | 'strict' => true, 59 | 'engine' => null, 60 | 'options' => extension_loaded('pdo_mysql') ? array_filter([ 61 | PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), 62 | ]) : [], 63 | ], 64 | 65 | 'mariadb' => [ 66 | 'driver' => 'mariadb', 67 | 'url' => env('DATABASE_URL'), 68 | 'host' => env('DB_HOST', '127.0.0.1'), 69 | 'port' => env('DB_PORT', '3306'), 70 | 'database' => env('DB_DATABASE', 'laravel'), 71 | 'username' => env('DB_USERNAME', 'root'), 72 | 'password' => env('DB_PASSWORD', ''), 73 | 'unix_socket' => env('DB_SOCKET', ''), 74 | 'charset' => env('DB_CHARSET', 'utf8mb4'), 75 | 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 76 | 'prefix' => '', 77 | 'prefix_indexes' => true, 78 | 'strict' => true, 79 | 'engine' => null, 80 | 'options' => extension_loaded('pdo_mysql') ? array_filter([ 81 | PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), 82 | ]) : [], 83 | ], 84 | 85 | 'pgsql' => [ 86 | 'driver' => 'pgsql', 87 | 'url' => env('DATABASE_URL'), 88 | 'host' => env('DB_HOST', '127.0.0.1'), 89 | 'port' => env('DB_PORT', '5432'), 90 | 'database' => env('DB_DATABASE', 'laravel'), 91 | 'username' => env('DB_USERNAME', 'root'), 92 | 'password' => env('DB_PASSWORD', ''), 93 | 'charset' => env('DB_CHARSET', 'utf8'), 94 | 'prefix' => '', 95 | 'prefix_indexes' => true, 96 | 'search_path' => 'public', 97 | 'sslmode' => 'prefer', 98 | ], 99 | 100 | 'sqlsrv' => [ 101 | 'driver' => 'sqlsrv', 102 | 'url' => env('DATABASE_URL'), 103 | 'host' => env('DB_HOST', 'localhost'), 104 | 'port' => env('DB_PORT', '1433'), 105 | 'database' => env('DB_DATABASE', 'laravel'), 106 | 'username' => env('DB_USERNAME', 'root'), 107 | 'password' => env('DB_PASSWORD', ''), 108 | 'charset' => env('DB_CHARSET', 'utf8'), 109 | 'prefix' => '', 110 | 'prefix_indexes' => true, 111 | // 'encrypt' => env('DB_ENCRYPT', 'yes'), 112 | // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), 113 | ], 114 | 115 | ], 116 | 117 | /* 118 | |-------------------------------------------------------------------------- 119 | | Migration Repository Table 120 | |-------------------------------------------------------------------------- 121 | | 122 | | This table keeps track of all the migrations that have already run for 123 | | your application. Using this information, we can determine which of 124 | | the migrations on disk haven't actually been run on the database. 125 | | 126 | */ 127 | 128 | 'migrations' => [ 129 | 'table' => 'migrations', 130 | 'update_date_on_publish' => true, 131 | ], 132 | 133 | /* 134 | |-------------------------------------------------------------------------- 135 | | Redis Databases 136 | |-------------------------------------------------------------------------- 137 | | 138 | | Redis is an open source, fast, and advanced key-value store that also 139 | | provides a richer body of commands than a typical key-value system 140 | | such as Memcached. You may define your connection settings here. 141 | | 142 | */ 143 | 144 | 'redis' => [ 145 | 146 | 'client' => env('REDIS_CLIENT', 'phpredis'), 147 | 148 | 'options' => [ 149 | 'cluster' => env('REDIS_CLUSTER', 'redis'), 150 | 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'), 151 | ], 152 | 153 | 'default' => [ 154 | 'url' => env('REDIS_URL'), 155 | 'host' => env('REDIS_HOST', '127.0.0.1'), 156 | 'username' => env('REDIS_USERNAME'), 157 | 'password' => env('REDIS_PASSWORD'), 158 | 'port' => env('REDIS_PORT', '6379'), 159 | 'database' => env('REDIS_DB', '0'), 160 | ], 161 | 162 | 'cache' => [ 163 | 'url' => env('REDIS_URL'), 164 | 'host' => env('REDIS_HOST', '127.0.0.1'), 165 | 'username' => env('REDIS_USERNAME'), 166 | 'password' => env('REDIS_PASSWORD'), 167 | 'port' => env('REDIS_PORT', '6379'), 168 | 'database' => env('REDIS_CACHE_DB', '1'), 169 | ], 170 | 171 | ], 172 | 173 | ]; 174 | -------------------------------------------------------------------------------- /config/filesystems.php: -------------------------------------------------------------------------------- 1 | env('FILESYSTEM_DISK', 'local'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Filesystem Disks 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Below you may configure as many filesystem disks as necessary, and you 24 | | may even configure multiple disks for the same driver. Examples for 25 | | most supported storage drivers are configured here for reference. 26 | | 27 | | Supported drivers: "local", "ftp", "sftp", "s3" 28 | | 29 | */ 30 | 31 | 'disks' => [ 32 | 33 | 'local' => [ 34 | 'driver' => 'local', 35 | 'root' => storage_path('app/private'), 36 | 'serve' => true, 37 | 'throw' => false, 38 | ], 39 | 40 | 'public' => [ 41 | 'driver' => 'local', 42 | 'root' => storage_path('app/public'), 43 | 'url' => env('APP_URL').'/storage', 44 | 'visibility' => 'public', 45 | 'throw' => false, 46 | ], 47 | 48 | 's3' => [ 49 | 'driver' => 's3', 50 | 'key' => env('AWS_ACCESS_KEY_ID'), 51 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 52 | 'region' => env('AWS_DEFAULT_REGION'), 53 | 'bucket' => env('AWS_BUCKET'), 54 | 'url' => env('AWS_URL'), 55 | 'endpoint' => env('AWS_ENDPOINT'), 56 | 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 57 | 'throw' => false, 58 | ], 59 | 60 | ], 61 | 62 | /* 63 | |-------------------------------------------------------------------------- 64 | | Symbolic Links 65 | |-------------------------------------------------------------------------- 66 | | 67 | | Here you may configure the symbolic links that will be created when the 68 | | `storage:link` Artisan command is executed. The array keys should be 69 | | the locations of the links and the values should be their targets. 70 | | 71 | */ 72 | 73 | 'links' => [ 74 | public_path('storage') => storage_path('app/public'), 75 | ], 76 | 77 | ]; 78 | -------------------------------------------------------------------------------- /config/logging.php: -------------------------------------------------------------------------------- 1 | env('LOG_CHANNEL', 'stack'), 22 | 23 | /* 24 | |-------------------------------------------------------------------------- 25 | | Deprecations Log Channel 26 | |-------------------------------------------------------------------------- 27 | | 28 | | This option controls the log channel that should be used to log warnings 29 | | regarding deprecated PHP and library features. This allows you to get 30 | | your application ready for upcoming major versions of dependencies. 31 | | 32 | */ 33 | 34 | 'deprecations' => [ 35 | 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), 36 | 'trace' => env('LOG_DEPRECATIONS_TRACE', false), 37 | ], 38 | 39 | /* 40 | |-------------------------------------------------------------------------- 41 | | Log Channels 42 | |-------------------------------------------------------------------------- 43 | | 44 | | Here you may configure the log channels for your application. Laravel 45 | | utilizes the Monolog PHP logging library, which includes a variety 46 | | of powerful log handlers and formatters that you're free to use. 47 | | 48 | | Available drivers: "single", "daily", "slack", "syslog", 49 | | "errorlog", "monolog", "custom", "stack" 50 | | 51 | */ 52 | 53 | 'channels' => [ 54 | 55 | 'stack' => [ 56 | 'driver' => 'stack', 57 | 'channels' => explode(',', (string) env('LOG_STACK', 'single')), 58 | 'ignore_exceptions' => false, 59 | ], 60 | 61 | 'single' => [ 62 | 'driver' => 'single', 63 | 'path' => storage_path('logs/laravel.log'), 64 | 'level' => env('LOG_LEVEL', 'debug'), 65 | 'replace_placeholders' => true, 66 | ], 67 | 68 | 'daily' => [ 69 | 'driver' => 'daily', 70 | 'path' => storage_path('logs/laravel.log'), 71 | 'level' => env('LOG_LEVEL', 'debug'), 72 | 'days' => env('LOG_DAILY_DAYS', 14), 73 | 'replace_placeholders' => true, 74 | ], 75 | 76 | 'slack' => [ 77 | 'driver' => 'slack', 78 | 'url' => env('LOG_SLACK_WEBHOOK_URL'), 79 | 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), 80 | 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), 81 | 'level' => env('LOG_LEVEL', 'critical'), 82 | 'replace_placeholders' => true, 83 | ], 84 | 85 | 'papertrail' => [ 86 | 'driver' => 'monolog', 87 | 'level' => env('LOG_LEVEL', 'debug'), 88 | 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), 89 | 'handler_with' => [ 90 | 'host' => env('PAPERTRAIL_URL'), 91 | 'port' => env('PAPERTRAIL_PORT'), 92 | 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), 93 | ], 94 | 'processors' => [PsrLogMessageProcessor::class], 95 | ], 96 | 97 | 'stderr' => [ 98 | 'driver' => 'monolog', 99 | 'level' => env('LOG_LEVEL', 'debug'), 100 | 'handler' => StreamHandler::class, 101 | 'handler_with' => [ 102 | 'stream' => 'php://stderr', 103 | ], 104 | 'formatter' => env('LOG_STDERR_FORMATTER'), 105 | 'processors' => [PsrLogMessageProcessor::class], 106 | ], 107 | 108 | 'syslog' => [ 109 | 'driver' => 'syslog', 110 | 'level' => env('LOG_LEVEL', 'debug'), 111 | 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), 112 | 'replace_placeholders' => true, 113 | ], 114 | 115 | 'errorlog' => [ 116 | 'driver' => 'errorlog', 117 | 'level' => env('LOG_LEVEL', 'debug'), 118 | 'replace_placeholders' => true, 119 | ], 120 | 121 | 'null' => [ 122 | 'driver' => 'monolog', 123 | 'handler' => NullHandler::class, 124 | ], 125 | 126 | 'emergency' => [ 127 | 'path' => storage_path('logs/laravel.log'), 128 | ], 129 | 130 | ], 131 | 132 | ]; 133 | -------------------------------------------------------------------------------- /config/mail.php: -------------------------------------------------------------------------------- 1 | env('MAIL_MAILER', 'log'), 18 | 19 | /* 20 | |-------------------------------------------------------------------------- 21 | | Mailer Configurations 22 | |-------------------------------------------------------------------------- 23 | | 24 | | Here you may configure all of the mailers used by your application plus 25 | | their respective settings. Several examples have been configured for 26 | | you and you are free to add your own as your application requires. 27 | | 28 | | Laravel supports a variety of mail "transport" drivers that can be used 29 | | when delivering an email. You may specify which one you're using for 30 | | your mailers below. You may also add additional mailers if needed. 31 | | 32 | | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", 33 | | "postmark", "resend", "log", "array", 34 | | "failover", "roundrobin" 35 | | 36 | */ 37 | 38 | 'mailers' => [ 39 | 40 | 'smtp' => [ 41 | 'transport' => 'smtp', 42 | 'url' => env('MAIL_URL'), 43 | 'host' => env('MAIL_HOST', '127.0.0.1'), 44 | 'port' => env('MAIL_PORT', 2525), 45 | 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 46 | 'username' => env('MAIL_USERNAME'), 47 | 'password' => env('MAIL_PASSWORD'), 48 | 'timeout' => null, 49 | 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), 50 | ], 51 | 52 | 'ses' => [ 53 | 'transport' => 'ses', 54 | ], 55 | 56 | 'postmark' => [ 57 | 'transport' => 'postmark', 58 | // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), 59 | // 'client' => [ 60 | // 'timeout' => 5, 61 | // ], 62 | ], 63 | 64 | 'resend' => [ 65 | 'transport' => 'resend', 66 | ], 67 | 68 | 'sendmail' => [ 69 | 'transport' => 'sendmail', 70 | 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), 71 | ], 72 | 73 | 'log' => [ 74 | 'transport' => 'log', 75 | 'channel' => env('MAIL_LOG_CHANNEL'), 76 | ], 77 | 78 | 'array' => [ 79 | 'transport' => 'array', 80 | ], 81 | 82 | 'failover' => [ 83 | 'transport' => 'failover', 84 | 'mailers' => [ 85 | 'smtp', 86 | 'log', 87 | ], 88 | 'retry_after' => 60, 89 | ], 90 | 91 | 'roundrobin' => [ 92 | 'transport' => 'roundrobin', 93 | 'mailers' => [ 94 | 'ses', 95 | 'postmark', 96 | ], 97 | 'retry_after' => 60, 98 | ], 99 | 100 | ], 101 | 102 | /* 103 | |-------------------------------------------------------------------------- 104 | | Global "From" Address 105 | |-------------------------------------------------------------------------- 106 | | 107 | | You may wish for all emails sent by your application to be sent from 108 | | the same address. Here you may specify a name and address that is 109 | | used globally for all emails that are sent by your application. 110 | | 111 | */ 112 | 113 | 'from' => [ 114 | 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 115 | 'name' => env('MAIL_FROM_NAME', 'Example'), 116 | ], 117 | 118 | ]; 119 | -------------------------------------------------------------------------------- /config/queue.php: -------------------------------------------------------------------------------- 1 | env('QUEUE_CONNECTION', 'database'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Queue Connections 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may configure the connection options for every queue backend 24 | | used by your application. An example configuration is provided for 25 | | each backend supported by Laravel. You're also free to add more. 26 | | 27 | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", 28 | | "deferred", "failover", "null" 29 | | 30 | */ 31 | 32 | 'connections' => [ 33 | 34 | 'sync' => [ 35 | 'driver' => 'sync', 36 | ], 37 | 38 | 'database' => [ 39 | 'driver' => 'database', 40 | 'connection' => env('DB_QUEUE_CONNECTION'), 41 | 'table' => env('DB_QUEUE_TABLE', 'jobs'), 42 | 'queue' => env('DB_QUEUE', 'default'), 43 | 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), 44 | 'after_commit' => false, 45 | ], 46 | 47 | 'beanstalkd' => [ 48 | 'driver' => 'beanstalkd', 49 | 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), 50 | 'queue' => env('BEANSTALKD_QUEUE', 'default'), 51 | 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), 52 | 'block_for' => 0, 53 | 'after_commit' => false, 54 | ], 55 | 56 | 'sqs' => [ 57 | 'driver' => 'sqs', 58 | 'key' => env('AWS_ACCESS_KEY_ID'), 59 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 60 | 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 61 | 'queue' => env('SQS_QUEUE', 'default'), 62 | 'suffix' => env('SQS_SUFFIX'), 63 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 64 | 'after_commit' => false, 65 | ], 66 | 67 | 'redis' => [ 68 | 'driver' => 'redis', 69 | 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), 70 | 'queue' => env('REDIS_QUEUE', 'default'), 71 | 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), 72 | 'block_for' => null, 73 | 'after_commit' => false, 74 | ], 75 | 76 | 'deferred' => [ 77 | 'driver' => 'deferred', 78 | ], 79 | 80 | 'failover' => [ 81 | 'driver' => 'failover', 82 | 'connections' => [ 83 | 'database', 84 | 'deferred', 85 | ], 86 | ], 87 | 88 | ], 89 | 90 | /* 91 | |-------------------------------------------------------------------------- 92 | | Job Batching 93 | |-------------------------------------------------------------------------- 94 | | 95 | | The following options configure the database and table that store job 96 | | batching information. These options can be updated to any database 97 | | connection and table which has been defined by your application. 98 | | 99 | */ 100 | 101 | 'batching' => [ 102 | 'database' => env('DB_CONNECTION', 'sqlite'), 103 | 'table' => 'job_batches', 104 | ], 105 | 106 | /* 107 | |-------------------------------------------------------------------------- 108 | | Failed Queue Jobs 109 | |-------------------------------------------------------------------------- 110 | | 111 | | These options configure the behavior of failed queue job logging so you 112 | | can control how and where failed jobs are stored. Laravel ships with 113 | | support for storing failed jobs in a simple file or in a database. 114 | | 115 | | Supported drivers: "database-uuids", "dynamodb", "file", "null" 116 | | 117 | */ 118 | 119 | 'failed' => [ 120 | 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), 121 | 'database' => env('DB_CONNECTION', 'sqlite'), 122 | 'table' => 'failed_jobs', 123 | ], 124 | 125 | ]; 126 | -------------------------------------------------------------------------------- /config/reverb.php: -------------------------------------------------------------------------------- 1 | env('REVERB_SERVER', 'reverb'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Reverb Servers 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may define details for each of the supported Reverb servers. 24 | | Each server has its own configuration options that are defined in 25 | | the array below. You should ensure all the options are present. 26 | | 27 | */ 28 | 29 | 'servers' => [ 30 | 31 | 'reverb' => [ 32 | 'host' => env('REVERB_SERVER_HOST', '0.0.0.0'), 33 | 'port' => env('REVERB_SERVER_PORT', 8080), 34 | 'hostname' => env('REVERB_HOST'), 35 | 'options' => [ 36 | 'tls' => [], 37 | ], 38 | 'max_request_size' => env('REVERB_MAX_REQUEST_SIZE', 10_000), 39 | 'scaling' => [ 40 | 'enabled' => env('REVERB_SCALING_ENABLED', false), 41 | 'channel' => env('REVERB_SCALING_CHANNEL', 'reverb'), 42 | 'server' => [ 43 | 'url' => env('REDIS_URL'), 44 | 'host' => env('REDIS_HOST', '127.0.0.1'), 45 | 'port' => env('REDIS_PORT', '6379'), 46 | 'username' => env('REDIS_USERNAME'), 47 | 'password' => env('REDIS_PASSWORD'), 48 | 'database' => env('REDIS_DB', '0'), 49 | ], 50 | ], 51 | 'pulse_ingest_interval' => env('REVERB_PULSE_INGEST_INTERVAL', 15), 52 | 'telescope_ingest_interval' => env('REVERB_TELESCOPE_INGEST_INTERVAL', 15), 53 | ], 54 | 55 | ], 56 | 57 | /* 58 | |-------------------------------------------------------------------------- 59 | | Reverb Applications 60 | |-------------------------------------------------------------------------- 61 | | 62 | | Here you may define how Reverb applications are managed. If you choose 63 | | to use the "config" provider, you may define an array of apps which 64 | | your server will support, including their connection credentials. 65 | | 66 | */ 67 | 68 | 'apps' => [ 69 | 70 | 'provider' => 'config', 71 | 72 | 'apps' => [ 73 | [ 74 | 'key' => env('REVERB_APP_KEY'), 75 | 'secret' => env('REVERB_APP_SECRET'), 76 | 'app_id' => env('REVERB_APP_ID'), 77 | 'options' => [ 78 | 'host' => env('REVERB_HOST'), 79 | 'port' => env('REVERB_PORT', 443), 80 | 'scheme' => env('REVERB_SCHEME', 'https'), 81 | 'useTLS' => env('REVERB_SCHEME', 'https') === 'https', 82 | ], 83 | 'allowed_origins' => ['*'], 84 | 'ping_interval' => env('REVERB_APP_PING_INTERVAL', 60), 85 | 'activity_timeout' => env('REVERB_APP_ACTIVITY_TIMEOUT', 30), 86 | 'max_message_size' => env('REVERB_APP_MAX_MESSAGE_SIZE', 10_000), 87 | ], 88 | ], 89 | 90 | ], 91 | 92 | ]; 93 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'token' => env('POSTMARK_TOKEN'), 19 | ], 20 | 21 | 'resend' => [ 22 | 'key' => env('RESEND_KEY'), 23 | ], 24 | 25 | 'ses' => [ 26 | 'key' => env('AWS_ACCESS_KEY_ID'), 27 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 28 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 29 | ], 30 | 31 | 'slack' => [ 32 | 'notifications' => [ 33 | 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), 34 | 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), 35 | ], 36 | ], 37 | 38 | ]; 39 | -------------------------------------------------------------------------------- /config/session.php: -------------------------------------------------------------------------------- 1 | env('SESSION_DRIVER', 'database'), 22 | 23 | /* 24 | |-------------------------------------------------------------------------- 25 | | Session Lifetime 26 | |-------------------------------------------------------------------------- 27 | | 28 | | Here you may specify the number of minutes that you wish the session 29 | | to be allowed to remain idle before it expires. If you want them 30 | | to expire immediately when the browser is closed then you may 31 | | indicate that via the expire_on_close configuration option. 32 | | 33 | */ 34 | 35 | 'lifetime' => env('SESSION_LIFETIME', 120), 36 | 37 | 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), 38 | 39 | /* 40 | |-------------------------------------------------------------------------- 41 | | Session Encryption 42 | |-------------------------------------------------------------------------- 43 | | 44 | | This option allows you to easily specify that all of your session data 45 | | should be encrypted before it's stored. All encryption is performed 46 | | automatically by Laravel and you may use the session like normal. 47 | | 48 | */ 49 | 50 | 'encrypt' => env('SESSION_ENCRYPT', false), 51 | 52 | /* 53 | |-------------------------------------------------------------------------- 54 | | Session File Location 55 | |-------------------------------------------------------------------------- 56 | | 57 | | When utilizing the "file" session driver, the session files are placed 58 | | on disk. The default storage location is defined here; however, you 59 | | are free to provide another location where they should be stored. 60 | | 61 | */ 62 | 63 | 'files' => storage_path('framework/sessions'), 64 | 65 | /* 66 | |-------------------------------------------------------------------------- 67 | | Session Database Connection 68 | |-------------------------------------------------------------------------- 69 | | 70 | | When using the "database" or "redis" session drivers, you may specify a 71 | | connection that should be used to manage these sessions. This should 72 | | correspond to a connection in your database configuration options. 73 | | 74 | */ 75 | 76 | 'connection' => env('SESSION_CONNECTION'), 77 | 78 | /* 79 | |-------------------------------------------------------------------------- 80 | | Session Database Table 81 | |-------------------------------------------------------------------------- 82 | | 83 | | When using the "database" session driver, you may specify the table to 84 | | be used to store sessions. Of course, a sensible default is defined 85 | | for you; however, you're welcome to change this to another table. 86 | | 87 | */ 88 | 89 | 'table' => env('SESSION_TABLE', 'sessions'), 90 | 91 | /* 92 | |-------------------------------------------------------------------------- 93 | | Session Cache Store 94 | |-------------------------------------------------------------------------- 95 | | 96 | | When using one of the framework's cache driven session backends, you may 97 | | define the cache store which should be used to store the session data 98 | | between requests. This must match one of your defined cache stores. 99 | | 100 | | Affects: "dynamodb", "memcached", "redis" 101 | | 102 | */ 103 | 104 | 'store' => env('SESSION_STORE'), 105 | 106 | /* 107 | |-------------------------------------------------------------------------- 108 | | Session Sweeping Lottery 109 | |-------------------------------------------------------------------------- 110 | | 111 | | Some session drivers must manually sweep their storage location to get 112 | | rid of old sessions from storage. Here are the chances that it will 113 | | happen on a given request. By default, the odds are 2 out of 100. 114 | | 115 | */ 116 | 117 | 'lottery' => [2, 100], 118 | 119 | /* 120 | |-------------------------------------------------------------------------- 121 | | Session Cookie Name 122 | |-------------------------------------------------------------------------- 123 | | 124 | | Here you may change the name of the session cookie that is created by 125 | | the framework. Typically, you should not need to change this value 126 | | since doing so does not grant a meaningful security improvement. 127 | | 128 | */ 129 | 130 | 'cookie' => env( 131 | 'SESSION_COOKIE', 132 | Str::slug((string) env('APP_NAME', 'laravel')).'-session' 133 | ), 134 | 135 | /* 136 | |-------------------------------------------------------------------------- 137 | | Session Cookie Path 138 | |-------------------------------------------------------------------------- 139 | | 140 | | The session cookie path determines the path for which the cookie will 141 | | be regarded as available. Typically, this will be the root path of 142 | | your application, but you're free to change this when necessary. 143 | | 144 | */ 145 | 146 | 'path' => env('SESSION_PATH', '/'), 147 | 148 | /* 149 | |-------------------------------------------------------------------------- 150 | | Session Cookie Domain 151 | |-------------------------------------------------------------------------- 152 | | 153 | | This value determines the domain and subdomains the session cookie is 154 | | available to. By default, the cookie will be available to the root 155 | | domain and all subdomains. Typically, this shouldn't be changed. 156 | | 157 | */ 158 | 159 | 'domain' => env('SESSION_DOMAIN'), 160 | 161 | /* 162 | |-------------------------------------------------------------------------- 163 | | HTTPS Only Cookies 164 | |-------------------------------------------------------------------------- 165 | | 166 | | By setting this option to true, session cookies will only be sent back 167 | | to the server if the browser has a HTTPS connection. This will keep 168 | | the cookie from being sent to you when it can't be done securely. 169 | | 170 | */ 171 | 172 | 'secure' => env('SESSION_SECURE_COOKIE'), 173 | 174 | /* 175 | |-------------------------------------------------------------------------- 176 | | HTTP Access Only 177 | |-------------------------------------------------------------------------- 178 | | 179 | | Setting this value to true will prevent JavaScript from accessing the 180 | | value of the cookie and the cookie will only be accessible through 181 | | the HTTP protocol. It's unlikely you should disable this option. 182 | | 183 | */ 184 | 185 | 'http_only' => env('SESSION_HTTP_ONLY', true), 186 | 187 | /* 188 | |-------------------------------------------------------------------------- 189 | | Same-Site Cookies 190 | |-------------------------------------------------------------------------- 191 | | 192 | | This option determines how your cookies behave when cross-site requests 193 | | take place, and can be used to mitigate CSRF attacks. By default, we 194 | | will set this value to "lax" to permit secure cross-site requests. 195 | | 196 | | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value 197 | | 198 | | Supported: "lax", "strict", "none", null 199 | | 200 | */ 201 | 202 | 'same_site' => env('SESSION_SAME_SITE', 'lax'), 203 | 204 | /* 205 | |-------------------------------------------------------------------------- 206 | | Partitioned Cookies 207 | |-------------------------------------------------------------------------- 208 | | 209 | | Setting this value to true will tie the cookie to the top-level site for 210 | | a cross-site context. Partitioned cookies are accepted by the browser 211 | | when flagged "secure" and the Same-Site attribute is set to "none". 212 | | 213 | */ 214 | 215 | 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), 216 | 217 | ]; 218 | -------------------------------------------------------------------------------- /config/solo.php: -------------------------------------------------------------------------------- 1 | env('SOLO_THEME', 'dark'), 24 | 25 | 'themes' => [ 26 | 'light' => Themes\LightTheme::class, 27 | 'dark' => Themes\DarkTheme::class, 28 | ], 29 | 30 | /* 31 | |-------------------------------------------------------------------------- 32 | | Keybindings 33 | |-------------------------------------------------------------------------- 34 | */ 35 | 'keybinding' => env('SOLO_KEYBINDING', 'default'), 36 | 37 | 'keybindings' => [ 38 | 'default' => Hotkeys\DefaultHotkeys::class, 39 | 'vim' => Hotkeys\VimHotkeys::class, 40 | ], 41 | 42 | /* 43 | |-------------------------------------------------------------------------- 44 | | Commands 45 | |-------------------------------------------------------------------------- 46 | | 47 | */ 48 | 'commands' => [ 49 | 'Logs' => EnhancedTailCommand::file(storage_path('logs/laravel.log')), 50 | 'Vite' => 'npm start --silent', 51 | 'Make' => new MakeCommand, 52 | 53 | // Lazy commands do no automatically start when Solo starts. 54 | 'Dumps' => Command::from('php artisan solo:dumps')->lazy(), 55 | 'HTTP' => Command::from('php artisan serve')->lazy(), 56 | 'Queue' => Command::from('php artisan queue:listen --tries=1')->lazy(), 57 | 'Scheduler' => Command::from('php artisan schedule:work')->lazy(), 58 | 'Reverb' => Command::from('php artisan reverb')->lazy(), 59 | 'Pint' => Command::from('./vendor/bin/pint --ansi')->lazy(), 60 | 'Tests' => Command::from('php artisan test --colors=always')->lazy(), 61 | ], 62 | 63 | /* 64 | |-------------------------------------------------------------------------- 65 | | Miscellaneous 66 | |-------------------------------------------------------------------------- 67 | */ 68 | 69 | /* 70 | * If you run the solo:dumps command, Solo will start a server to receive 71 | * the dumps. This is the address. You probably don't need to change 72 | * this unless the default is already taken for some reason. 73 | */ 74 | 'dump_server_host' => env('SOLO_DUMP_SERVER_HOST', 'tcp://127.0.0.1:9984'), 75 | ]; 76 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite* 2 | -------------------------------------------------------------------------------- /database/factories/UserFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class UserFactory extends Factory 13 | { 14 | /** 15 | * The current password being used by the factory. 16 | */ 17 | protected static ?string $password; 18 | 19 | /** 20 | * Define the model's default state. 21 | * 22 | * @return array 23 | */ 24 | public function definition(): array 25 | { 26 | return [ 27 | 'name' => fake()->name(), 28 | 'email' => fake()->unique()->safeEmail(), 29 | 'password' => static::$password ??= Hash::make('hunter2'), 30 | 'remember_token' => Str::random(10), 31 | ]; 32 | } 33 | 34 | /** 35 | * Indicate that the model's email address is confirmed. 36 | */ 37 | public function confirmed(): static 38 | { 39 | return $this->state(fn (array $attributes) => [ 40 | 'confirmed_at' => now(), 41 | ]); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /database/migrations/0001_01_01_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | uuid('id')->primary(); 16 | 17 | $table->string('name'); 18 | $table->string('email')->unique(); 19 | $table->string('password'); 20 | $table->rememberToken(); 21 | 22 | $table->timestamp('confirmed_at')->nullable(); 23 | $table->timestamps(); 24 | $table->softDeletes(); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | */ 31 | public function down(): void 32 | { 33 | Schema::dropIfExists('users'); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /database/migrations/0001_01_01_000001_create_password_reset_tokens_table.php: -------------------------------------------------------------------------------- 1 | string('email')->primary(); 16 | $table->string('token'); 17 | 18 | $table->timestamp('created_at')->nullable(); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | */ 25 | public function down(): void 26 | { 27 | Schema::dropIfExists('password_reset_tokens'); 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /database/migrations/0001_01_01_000002_create_sessions_table.php: -------------------------------------------------------------------------------- 1 | string('id')->primary(); 16 | $table->foreignId('user_id')->nullable()->index(); 17 | $table->string('ip_address', 45)->nullable(); 18 | $table->text('user_agent')->nullable(); 19 | $table->longText('payload'); 20 | $table->integer('last_activity')->index(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | */ 27 | public function down(): void 28 | { 29 | Schema::dropIfExists('sessions'); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /database/migrations/0001_01_01_000003_create_cache_table.php: -------------------------------------------------------------------------------- 1 | string('key')->primary(); 16 | 17 | $table->mediumText('value'); 18 | $table->integer('expiration'); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | */ 25 | public function down(): void 26 | { 27 | Schema::dropIfExists('cache'); 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /database/migrations/0001_01_01_000004_create_cache_locks_table.php: -------------------------------------------------------------------------------- 1 | string('key')->primary(); 16 | 17 | $table->string('owner'); 18 | $table->integer('expiration'); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | */ 25 | public function down(): void 26 | { 27 | Schema::dropIfExists('cache_locks'); 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /database/migrations/0001_01_01_000005_create_jobs_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | 17 | $table->string('queue')->index(); 18 | $table->longText('payload'); 19 | $table->unsignedTinyInteger('attempts'); 20 | $table->unsignedInteger('reserved_at')->nullable(); 21 | $table->unsignedInteger('available_at'); 22 | $table->unsignedInteger('created_at'); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | */ 29 | public function down(): void 30 | { 31 | Schema::dropIfExists('jobs'); 32 | } 33 | }; 34 | -------------------------------------------------------------------------------- /database/migrations/0001_01_01_000006_create_job_batches_table.php: -------------------------------------------------------------------------------- 1 | string('id')->primary(); 16 | 17 | $table->string('name'); 18 | $table->integer('total_jobs'); 19 | $table->integer('pending_jobs'); 20 | $table->integer('failed_jobs'); 21 | $table->longText('failed_job_ids'); 22 | $table->mediumText('options')->nullable(); 23 | 24 | $table->integer('cancelled_at')->nullable(); 25 | $table->integer('created_at'); 26 | $table->integer('finished_at')->nullable(); 27 | }); 28 | } 29 | 30 | /** 31 | * Reverse the migrations. 32 | */ 33 | public function down(): void 34 | { 35 | Schema::dropIfExists('job_batches'); 36 | } 37 | }; 38 | -------------------------------------------------------------------------------- /database/migrations/0001_01_01_000007_create_failed_jobs_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->string('uuid')->unique(); 17 | 18 | $table->text('connection'); 19 | $table->text('queue'); 20 | $table->longText('payload'); 21 | $table->longText('exception'); 22 | 23 | $table->timestamp('failed_at')->useCurrent(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | */ 30 | public function down(): void 31 | { 32 | Schema::dropIfExists('failed_jobs'); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/seeders/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | create(); 20 | 21 | User::factory()->create([ 22 | 'name' => env('DATABASE_SEEDER_NAME', 'Test User'), 23 | 'email' => env('DATABASE_SEEDER_EMAIL', 'test@example.com'), 24 | 'confirmed_at' => now(), 25 | ]); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /env.d.ts: -------------------------------------------------------------------------------- 1 | import { AxiosStatic } from 'axios'; 2 | import PusherStatic from 'pusher-js'; 3 | import EchoStatic from 'laravel-echo'; 4 | 5 | declare global { 6 | // globals 7 | const axios: AxiosStatic; 8 | const Pusher: typeof PusherStatic; 9 | const Echo: EchoStatic; 10 | 11 | // extend to window 12 | interface Window { 13 | axios: AxiosStatic; 14 | Pusher: typeof PusherStatic; 15 | Echo: EchoStatic; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "laravel", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "devDependencies": { 8 | "@aniftyco/prettier": "^0.1.0", 9 | "@tailwindcss/forms": "^0.5.10", 10 | "@tailwindcss/vite": "^4.0.17", 11 | "@types/node": "^22.13.14", 12 | "axios": "^1.8.4", 13 | "laravel-echo": "^2.0.2", 14 | "laravel-vite-plugin": "^1.2", 15 | "prettier": "^3.5.3", 16 | "pusher-js": "^8.4.0", 17 | "tailwindcss": "^4.0.17", 18 | "tailwindcss-animate": "^1.0.7", 19 | "typescript": "^5.8.2", 20 | "vite": "^6.2", 21 | "vite-tsconfig-paths": "^5.1.4" 22 | } 23 | }, 24 | "node_modules/@aniftyco/prettier": { 25 | "version": "0.1.0", 26 | "resolved": "https://registry.npmjs.org/@aniftyco/prettier/-/prettier-0.1.0.tgz", 27 | "integrity": "sha512-KXumBV26W3V8JI2Ntn16hX1JweN/kDKtcKoFTsd2HruZpgpGkHv+yuAsfRaQlkP1vObD8nIvzo9mTDXBZHx84g==", 28 | "dev": true, 29 | "license": "MIT", 30 | "engines": { 31 | "node": ">=16.17.0", 32 | "npm": ">=v8.15.0" 33 | } 34 | }, 35 | "node_modules/@esbuild/aix-ppc64": { 36 | "version": "0.25.1", 37 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", 38 | "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", 39 | "cpu": [ 40 | "ppc64" 41 | ], 42 | "dev": true, 43 | "license": "MIT", 44 | "optional": true, 45 | "os": [ 46 | "aix" 47 | ], 48 | "engines": { 49 | "node": ">=18" 50 | } 51 | }, 52 | "node_modules/@esbuild/android-arm": { 53 | "version": "0.25.1", 54 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", 55 | "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", 56 | "cpu": [ 57 | "arm" 58 | ], 59 | "dev": true, 60 | "license": "MIT", 61 | "optional": true, 62 | "os": [ 63 | "android" 64 | ], 65 | "engines": { 66 | "node": ">=18" 67 | } 68 | }, 69 | "node_modules/@esbuild/android-arm64": { 70 | "version": "0.25.1", 71 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", 72 | "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", 73 | "cpu": [ 74 | "arm64" 75 | ], 76 | "dev": true, 77 | "license": "MIT", 78 | "optional": true, 79 | "os": [ 80 | "android" 81 | ], 82 | "engines": { 83 | "node": ">=18" 84 | } 85 | }, 86 | "node_modules/@esbuild/android-x64": { 87 | "version": "0.25.1", 88 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", 89 | "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", 90 | "cpu": [ 91 | "x64" 92 | ], 93 | "dev": true, 94 | "license": "MIT", 95 | "optional": true, 96 | "os": [ 97 | "android" 98 | ], 99 | "engines": { 100 | "node": ">=18" 101 | } 102 | }, 103 | "node_modules/@esbuild/darwin-arm64": { 104 | "version": "0.25.1", 105 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", 106 | "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", 107 | "cpu": [ 108 | "arm64" 109 | ], 110 | "dev": true, 111 | "license": "MIT", 112 | "optional": true, 113 | "os": [ 114 | "darwin" 115 | ], 116 | "engines": { 117 | "node": ">=18" 118 | } 119 | }, 120 | "node_modules/@esbuild/darwin-x64": { 121 | "version": "0.25.1", 122 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", 123 | "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", 124 | "cpu": [ 125 | "x64" 126 | ], 127 | "dev": true, 128 | "license": "MIT", 129 | "optional": true, 130 | "os": [ 131 | "darwin" 132 | ], 133 | "engines": { 134 | "node": ">=18" 135 | } 136 | }, 137 | "node_modules/@esbuild/freebsd-arm64": { 138 | "version": "0.25.1", 139 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", 140 | "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", 141 | "cpu": [ 142 | "arm64" 143 | ], 144 | "dev": true, 145 | "license": "MIT", 146 | "optional": true, 147 | "os": [ 148 | "freebsd" 149 | ], 150 | "engines": { 151 | "node": ">=18" 152 | } 153 | }, 154 | "node_modules/@esbuild/freebsd-x64": { 155 | "version": "0.25.1", 156 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", 157 | "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", 158 | "cpu": [ 159 | "x64" 160 | ], 161 | "dev": true, 162 | "license": "MIT", 163 | "optional": true, 164 | "os": [ 165 | "freebsd" 166 | ], 167 | "engines": { 168 | "node": ">=18" 169 | } 170 | }, 171 | "node_modules/@esbuild/linux-arm": { 172 | "version": "0.25.1", 173 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", 174 | "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", 175 | "cpu": [ 176 | "arm" 177 | ], 178 | "dev": true, 179 | "license": "MIT", 180 | "optional": true, 181 | "os": [ 182 | "linux" 183 | ], 184 | "engines": { 185 | "node": ">=18" 186 | } 187 | }, 188 | "node_modules/@esbuild/linux-arm64": { 189 | "version": "0.25.1", 190 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", 191 | "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", 192 | "cpu": [ 193 | "arm64" 194 | ], 195 | "dev": true, 196 | "license": "MIT", 197 | "optional": true, 198 | "os": [ 199 | "linux" 200 | ], 201 | "engines": { 202 | "node": ">=18" 203 | } 204 | }, 205 | "node_modules/@esbuild/linux-ia32": { 206 | "version": "0.25.1", 207 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", 208 | "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", 209 | "cpu": [ 210 | "ia32" 211 | ], 212 | "dev": true, 213 | "license": "MIT", 214 | "optional": true, 215 | "os": [ 216 | "linux" 217 | ], 218 | "engines": { 219 | "node": ">=18" 220 | } 221 | }, 222 | "node_modules/@esbuild/linux-loong64": { 223 | "version": "0.25.1", 224 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", 225 | "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", 226 | "cpu": [ 227 | "loong64" 228 | ], 229 | "dev": true, 230 | "license": "MIT", 231 | "optional": true, 232 | "os": [ 233 | "linux" 234 | ], 235 | "engines": { 236 | "node": ">=18" 237 | } 238 | }, 239 | "node_modules/@esbuild/linux-mips64el": { 240 | "version": "0.25.1", 241 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", 242 | "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", 243 | "cpu": [ 244 | "mips64el" 245 | ], 246 | "dev": true, 247 | "license": "MIT", 248 | "optional": true, 249 | "os": [ 250 | "linux" 251 | ], 252 | "engines": { 253 | "node": ">=18" 254 | } 255 | }, 256 | "node_modules/@esbuild/linux-ppc64": { 257 | "version": "0.25.1", 258 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", 259 | "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", 260 | "cpu": [ 261 | "ppc64" 262 | ], 263 | "dev": true, 264 | "license": "MIT", 265 | "optional": true, 266 | "os": [ 267 | "linux" 268 | ], 269 | "engines": { 270 | "node": ">=18" 271 | } 272 | }, 273 | "node_modules/@esbuild/linux-riscv64": { 274 | "version": "0.25.1", 275 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", 276 | "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", 277 | "cpu": [ 278 | "riscv64" 279 | ], 280 | "dev": true, 281 | "license": "MIT", 282 | "optional": true, 283 | "os": [ 284 | "linux" 285 | ], 286 | "engines": { 287 | "node": ">=18" 288 | } 289 | }, 290 | "node_modules/@esbuild/linux-s390x": { 291 | "version": "0.25.1", 292 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", 293 | "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", 294 | "cpu": [ 295 | "s390x" 296 | ], 297 | "dev": true, 298 | "license": "MIT", 299 | "optional": true, 300 | "os": [ 301 | "linux" 302 | ], 303 | "engines": { 304 | "node": ">=18" 305 | } 306 | }, 307 | "node_modules/@esbuild/linux-x64": { 308 | "version": "0.25.1", 309 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", 310 | "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", 311 | "cpu": [ 312 | "x64" 313 | ], 314 | "dev": true, 315 | "license": "MIT", 316 | "optional": true, 317 | "os": [ 318 | "linux" 319 | ], 320 | "engines": { 321 | "node": ">=18" 322 | } 323 | }, 324 | "node_modules/@esbuild/netbsd-arm64": { 325 | "version": "0.25.1", 326 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", 327 | "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", 328 | "cpu": [ 329 | "arm64" 330 | ], 331 | "dev": true, 332 | "license": "MIT", 333 | "optional": true, 334 | "os": [ 335 | "netbsd" 336 | ], 337 | "engines": { 338 | "node": ">=18" 339 | } 340 | }, 341 | "node_modules/@esbuild/netbsd-x64": { 342 | "version": "0.25.1", 343 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", 344 | "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", 345 | "cpu": [ 346 | "x64" 347 | ], 348 | "dev": true, 349 | "license": "MIT", 350 | "optional": true, 351 | "os": [ 352 | "netbsd" 353 | ], 354 | "engines": { 355 | "node": ">=18" 356 | } 357 | }, 358 | "node_modules/@esbuild/openbsd-arm64": { 359 | "version": "0.25.1", 360 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", 361 | "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", 362 | "cpu": [ 363 | "arm64" 364 | ], 365 | "dev": true, 366 | "license": "MIT", 367 | "optional": true, 368 | "os": [ 369 | "openbsd" 370 | ], 371 | "engines": { 372 | "node": ">=18" 373 | } 374 | }, 375 | "node_modules/@esbuild/openbsd-x64": { 376 | "version": "0.25.1", 377 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", 378 | "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", 379 | "cpu": [ 380 | "x64" 381 | ], 382 | "dev": true, 383 | "license": "MIT", 384 | "optional": true, 385 | "os": [ 386 | "openbsd" 387 | ], 388 | "engines": { 389 | "node": ">=18" 390 | } 391 | }, 392 | "node_modules/@esbuild/sunos-x64": { 393 | "version": "0.25.1", 394 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", 395 | "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", 396 | "cpu": [ 397 | "x64" 398 | ], 399 | "dev": true, 400 | "license": "MIT", 401 | "optional": true, 402 | "os": [ 403 | "sunos" 404 | ], 405 | "engines": { 406 | "node": ">=18" 407 | } 408 | }, 409 | "node_modules/@esbuild/win32-arm64": { 410 | "version": "0.25.1", 411 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", 412 | "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", 413 | "cpu": [ 414 | "arm64" 415 | ], 416 | "dev": true, 417 | "license": "MIT", 418 | "optional": true, 419 | "os": [ 420 | "win32" 421 | ], 422 | "engines": { 423 | "node": ">=18" 424 | } 425 | }, 426 | "node_modules/@esbuild/win32-ia32": { 427 | "version": "0.25.1", 428 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", 429 | "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", 430 | "cpu": [ 431 | "ia32" 432 | ], 433 | "dev": true, 434 | "license": "MIT", 435 | "optional": true, 436 | "os": [ 437 | "win32" 438 | ], 439 | "engines": { 440 | "node": ">=18" 441 | } 442 | }, 443 | "node_modules/@esbuild/win32-x64": { 444 | "version": "0.25.1", 445 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", 446 | "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", 447 | "cpu": [ 448 | "x64" 449 | ], 450 | "dev": true, 451 | "license": "MIT", 452 | "optional": true, 453 | "os": [ 454 | "win32" 455 | ], 456 | "engines": { 457 | "node": ">=18" 458 | } 459 | }, 460 | "node_modules/@rollup/rollup-android-arm-eabi": { 461 | "version": "4.35.0", 462 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz", 463 | "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==", 464 | "cpu": [ 465 | "arm" 466 | ], 467 | "dev": true, 468 | "license": "MIT", 469 | "optional": true, 470 | "os": [ 471 | "android" 472 | ] 473 | }, 474 | "node_modules/@rollup/rollup-android-arm64": { 475 | "version": "4.35.0", 476 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz", 477 | "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==", 478 | "cpu": [ 479 | "arm64" 480 | ], 481 | "dev": true, 482 | "license": "MIT", 483 | "optional": true, 484 | "os": [ 485 | "android" 486 | ] 487 | }, 488 | "node_modules/@rollup/rollup-darwin-arm64": { 489 | "version": "4.35.0", 490 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz", 491 | "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==", 492 | "cpu": [ 493 | "arm64" 494 | ], 495 | "dev": true, 496 | "license": "MIT", 497 | "optional": true, 498 | "os": [ 499 | "darwin" 500 | ] 501 | }, 502 | "node_modules/@rollup/rollup-darwin-x64": { 503 | "version": "4.35.0", 504 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz", 505 | "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==", 506 | "cpu": [ 507 | "x64" 508 | ], 509 | "dev": true, 510 | "license": "MIT", 511 | "optional": true, 512 | "os": [ 513 | "darwin" 514 | ] 515 | }, 516 | "node_modules/@rollup/rollup-freebsd-arm64": { 517 | "version": "4.35.0", 518 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz", 519 | "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==", 520 | "cpu": [ 521 | "arm64" 522 | ], 523 | "dev": true, 524 | "license": "MIT", 525 | "optional": true, 526 | "os": [ 527 | "freebsd" 528 | ] 529 | }, 530 | "node_modules/@rollup/rollup-freebsd-x64": { 531 | "version": "4.35.0", 532 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz", 533 | "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==", 534 | "cpu": [ 535 | "x64" 536 | ], 537 | "dev": true, 538 | "license": "MIT", 539 | "optional": true, 540 | "os": [ 541 | "freebsd" 542 | ] 543 | }, 544 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 545 | "version": "4.35.0", 546 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz", 547 | "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==", 548 | "cpu": [ 549 | "arm" 550 | ], 551 | "dev": true, 552 | "license": "MIT", 553 | "optional": true, 554 | "os": [ 555 | "linux" 556 | ] 557 | }, 558 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 559 | "version": "4.35.0", 560 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz", 561 | "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==", 562 | "cpu": [ 563 | "arm" 564 | ], 565 | "dev": true, 566 | "license": "MIT", 567 | "optional": true, 568 | "os": [ 569 | "linux" 570 | ] 571 | }, 572 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 573 | "version": "4.35.0", 574 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz", 575 | "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==", 576 | "cpu": [ 577 | "arm64" 578 | ], 579 | "dev": true, 580 | "license": "MIT", 581 | "optional": true, 582 | "os": [ 583 | "linux" 584 | ] 585 | }, 586 | "node_modules/@rollup/rollup-linux-arm64-musl": { 587 | "version": "4.35.0", 588 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz", 589 | "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==", 590 | "cpu": [ 591 | "arm64" 592 | ], 593 | "dev": true, 594 | "license": "MIT", 595 | "optional": true, 596 | "os": [ 597 | "linux" 598 | ] 599 | }, 600 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 601 | "version": "4.35.0", 602 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz", 603 | "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==", 604 | "cpu": [ 605 | "loong64" 606 | ], 607 | "dev": true, 608 | "license": "MIT", 609 | "optional": true, 610 | "os": [ 611 | "linux" 612 | ] 613 | }, 614 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 615 | "version": "4.35.0", 616 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz", 617 | "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==", 618 | "cpu": [ 619 | "ppc64" 620 | ], 621 | "dev": true, 622 | "license": "MIT", 623 | "optional": true, 624 | "os": [ 625 | "linux" 626 | ] 627 | }, 628 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 629 | "version": "4.35.0", 630 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz", 631 | "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==", 632 | "cpu": [ 633 | "riscv64" 634 | ], 635 | "dev": true, 636 | "license": "MIT", 637 | "optional": true, 638 | "os": [ 639 | "linux" 640 | ] 641 | }, 642 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 643 | "version": "4.35.0", 644 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz", 645 | "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==", 646 | "cpu": [ 647 | "s390x" 648 | ], 649 | "dev": true, 650 | "license": "MIT", 651 | "optional": true, 652 | "os": [ 653 | "linux" 654 | ] 655 | }, 656 | "node_modules/@rollup/rollup-linux-x64-gnu": { 657 | "version": "4.35.0", 658 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz", 659 | "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==", 660 | "cpu": [ 661 | "x64" 662 | ], 663 | "dev": true, 664 | "license": "MIT", 665 | "optional": true, 666 | "os": [ 667 | "linux" 668 | ] 669 | }, 670 | "node_modules/@rollup/rollup-linux-x64-musl": { 671 | "version": "4.35.0", 672 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz", 673 | "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==", 674 | "cpu": [ 675 | "x64" 676 | ], 677 | "dev": true, 678 | "license": "MIT", 679 | "optional": true, 680 | "os": [ 681 | "linux" 682 | ] 683 | }, 684 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 685 | "version": "4.35.0", 686 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz", 687 | "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==", 688 | "cpu": [ 689 | "arm64" 690 | ], 691 | "dev": true, 692 | "license": "MIT", 693 | "optional": true, 694 | "os": [ 695 | "win32" 696 | ] 697 | }, 698 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 699 | "version": "4.35.0", 700 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz", 701 | "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==", 702 | "cpu": [ 703 | "ia32" 704 | ], 705 | "dev": true, 706 | "license": "MIT", 707 | "optional": true, 708 | "os": [ 709 | "win32" 710 | ] 711 | }, 712 | "node_modules/@rollup/rollup-win32-x64-msvc": { 713 | "version": "4.35.0", 714 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz", 715 | "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==", 716 | "cpu": [ 717 | "x64" 718 | ], 719 | "dev": true, 720 | "license": "MIT", 721 | "optional": true, 722 | "os": [ 723 | "win32" 724 | ] 725 | }, 726 | "node_modules/@tailwindcss/forms": { 727 | "version": "0.5.10", 728 | "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", 729 | "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", 730 | "dev": true, 731 | "license": "MIT", 732 | "dependencies": { 733 | "mini-svg-data-uri": "^1.2.3" 734 | }, 735 | "peerDependencies": { 736 | "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" 737 | } 738 | }, 739 | "node_modules/@tailwindcss/node": { 740 | "version": "4.0.17", 741 | "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.17.tgz", 742 | "integrity": "sha512-LIdNwcqyY7578VpofXyqjH6f+3fP4nrz7FBLki5HpzqjYfXdF2m/eW18ZfoKePtDGg90Bvvfpov9d2gy5XVCbg==", 743 | "dev": true, 744 | "license": "MIT", 745 | "dependencies": { 746 | "enhanced-resolve": "^5.18.1", 747 | "jiti": "^2.4.2", 748 | "tailwindcss": "4.0.17" 749 | } 750 | }, 751 | "node_modules/@tailwindcss/oxide": { 752 | "version": "4.0.17", 753 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.17.tgz", 754 | "integrity": "sha512-B4OaUIRD2uVrULpAD1Yksx2+wNarQr2rQh65nXqaqbLY1jCd8fO+3KLh/+TH4Hzh2NTHQvgxVbPdUDOtLk7vAw==", 755 | "dev": true, 756 | "license": "MIT", 757 | "engines": { 758 | "node": ">= 10" 759 | }, 760 | "optionalDependencies": { 761 | "@tailwindcss/oxide-android-arm64": "4.0.17", 762 | "@tailwindcss/oxide-darwin-arm64": "4.0.17", 763 | "@tailwindcss/oxide-darwin-x64": "4.0.17", 764 | "@tailwindcss/oxide-freebsd-x64": "4.0.17", 765 | "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.17", 766 | "@tailwindcss/oxide-linux-arm64-gnu": "4.0.17", 767 | "@tailwindcss/oxide-linux-arm64-musl": "4.0.17", 768 | "@tailwindcss/oxide-linux-x64-gnu": "4.0.17", 769 | "@tailwindcss/oxide-linux-x64-musl": "4.0.17", 770 | "@tailwindcss/oxide-win32-arm64-msvc": "4.0.17", 771 | "@tailwindcss/oxide-win32-x64-msvc": "4.0.17" 772 | } 773 | }, 774 | "node_modules/@tailwindcss/oxide-android-arm64": { 775 | "version": "4.0.17", 776 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.17.tgz", 777 | "integrity": "sha512-3RfO0ZK64WAhop+EbHeyxGThyDr/fYhxPzDbEQjD2+v7ZhKTb2svTWy+KK+J1PHATus2/CQGAGp7pHY/8M8ugg==", 778 | "cpu": [ 779 | "arm64" 780 | ], 781 | "dev": true, 782 | "license": "MIT", 783 | "optional": true, 784 | "os": [ 785 | "android" 786 | ], 787 | "engines": { 788 | "node": ">= 10" 789 | } 790 | }, 791 | "node_modules/@tailwindcss/oxide-darwin-arm64": { 792 | "version": "4.0.17", 793 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.17.tgz", 794 | "integrity": "sha512-e1uayxFQCCDuzTk9s8q7MC5jFN42IY7nzcr5n0Mw/AcUHwD6JaBkXnATkD924ZsHyPDvddnusIEvkgLd2CiREg==", 795 | "cpu": [ 796 | "arm64" 797 | ], 798 | "dev": true, 799 | "license": "MIT", 800 | "optional": true, 801 | "os": [ 802 | "darwin" 803 | ], 804 | "engines": { 805 | "node": ">= 10" 806 | } 807 | }, 808 | "node_modules/@tailwindcss/oxide-darwin-x64": { 809 | "version": "4.0.17", 810 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.17.tgz", 811 | "integrity": "sha512-d6z7HSdOKfXQ0HPlVx1jduUf/YtBuCCtEDIEFeBCzgRRtDsUuRtofPqxIVaSCUTOk5+OfRLonje6n9dF6AH8wQ==", 812 | "cpu": [ 813 | "x64" 814 | ], 815 | "dev": true, 816 | "license": "MIT", 817 | "optional": true, 818 | "os": [ 819 | "darwin" 820 | ], 821 | "engines": { 822 | "node": ">= 10" 823 | } 824 | }, 825 | "node_modules/@tailwindcss/oxide-freebsd-x64": { 826 | "version": "4.0.17", 827 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.17.tgz", 828 | "integrity": "sha512-EjrVa6lx3wzXz3l5MsdOGtYIsRjgs5Mru6lDv4RuiXpguWeOb3UzGJ7vw7PEzcFadKNvNslEQqoAABeMezprxQ==", 829 | "cpu": [ 830 | "x64" 831 | ], 832 | "dev": true, 833 | "license": "MIT", 834 | "optional": true, 835 | "os": [ 836 | "freebsd" 837 | ], 838 | "engines": { 839 | "node": ">= 10" 840 | } 841 | }, 842 | "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { 843 | "version": "4.0.17", 844 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.17.tgz", 845 | "integrity": "sha512-65zXfCOdi8wuaY0Ye6qMR5LAXokHYtrGvo9t/NmxvSZtCCitXV/gzJ/WP5ksXPhff1SV5rov0S+ZIZU+/4eyCQ==", 846 | "cpu": [ 847 | "arm" 848 | ], 849 | "dev": true, 850 | "license": "MIT", 851 | "optional": true, 852 | "os": [ 853 | "linux" 854 | ], 855 | "engines": { 856 | "node": ">= 10" 857 | } 858 | }, 859 | "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { 860 | "version": "4.0.17", 861 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.17.tgz", 862 | "integrity": "sha512-+aaq6hJ8ioTdbJV5IA1WjWgLmun4T7eYLTvJIToiXLHy5JzUERRbIZjAcjgK9qXMwnvuu7rqpxzej+hGoEcG5g==", 863 | "cpu": [ 864 | "arm64" 865 | ], 866 | "dev": true, 867 | "license": "MIT", 868 | "optional": true, 869 | "os": [ 870 | "linux" 871 | ], 872 | "engines": { 873 | "node": ">= 10" 874 | } 875 | }, 876 | "node_modules/@tailwindcss/oxide-linux-arm64-musl": { 877 | "version": "4.0.17", 878 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.17.tgz", 879 | "integrity": "sha512-/FhWgZCdUGAeYHYnZKekiOC0aXFiBIoNCA0bwzkICiMYS5Rtx2KxFfMUXQVnl4uZRblG5ypt5vpPhVaXgGk80w==", 880 | "cpu": [ 881 | "arm64" 882 | ], 883 | "dev": true, 884 | "license": "MIT", 885 | "optional": true, 886 | "os": [ 887 | "linux" 888 | ], 889 | "engines": { 890 | "node": ">= 10" 891 | } 892 | }, 893 | "node_modules/@tailwindcss/oxide-linux-x64-gnu": { 894 | "version": "4.0.17", 895 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.17.tgz", 896 | "integrity": "sha512-gELJzOHK6GDoIpm/539Golvk+QWZjxQcbkKq9eB2kzNkOvrP0xc5UPgO9bIMNt1M48mO8ZeNenCMGt6tfkvVBg==", 897 | "cpu": [ 898 | "x64" 899 | ], 900 | "dev": true, 901 | "license": "MIT", 902 | "optional": true, 903 | "os": [ 904 | "linux" 905 | ], 906 | "engines": { 907 | "node": ">= 10" 908 | } 909 | }, 910 | "node_modules/@tailwindcss/oxide-linux-x64-musl": { 911 | "version": "4.0.17", 912 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.17.tgz", 913 | "integrity": "sha512-68NwxcJrZn94IOW4TysMIbYv5AlM6So1luTlbYUDIGnKma1yTFGBRNEJ+SacJ3PZE2rgcTBNRHX1TB4EQ/XEHw==", 914 | "cpu": [ 915 | "x64" 916 | ], 917 | "dev": true, 918 | "license": "MIT", 919 | "optional": true, 920 | "os": [ 921 | "linux" 922 | ], 923 | "engines": { 924 | "node": ">= 10" 925 | } 926 | }, 927 | "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { 928 | "version": "4.0.17", 929 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.17.tgz", 930 | "integrity": "sha512-AkBO8efP2/7wkEXkNlXzRD4f/7WerqKHlc6PWb5v0jGbbm22DFBLbIM19IJQ3b+tNewQZa+WnPOaGm0SmwMNjw==", 931 | "cpu": [ 932 | "arm64" 933 | ], 934 | "dev": true, 935 | "license": "MIT", 936 | "optional": true, 937 | "os": [ 938 | "win32" 939 | ], 940 | "engines": { 941 | "node": ">= 10" 942 | } 943 | }, 944 | "node_modules/@tailwindcss/oxide-win32-x64-msvc": { 945 | "version": "4.0.17", 946 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.17.tgz", 947 | "integrity": "sha512-7/DTEvXcoWlqX0dAlcN0zlmcEu9xSermuo7VNGX9tJ3nYMdo735SHvbrHDln1+LYfF6NhJ3hjbpbjkMOAGmkDg==", 948 | "cpu": [ 949 | "x64" 950 | ], 951 | "dev": true, 952 | "license": "MIT", 953 | "optional": true, 954 | "os": [ 955 | "win32" 956 | ], 957 | "engines": { 958 | "node": ">= 10" 959 | } 960 | }, 961 | "node_modules/@tailwindcss/vite": { 962 | "version": "4.0.17", 963 | "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.17.tgz", 964 | "integrity": "sha512-HJbBYDlDVg5cvYZzECb6xwc1IDCEM3uJi3hEZp3BjZGCNGJcTsnCpan+z+VMW0zo6gR0U6O6ElqU1OoZ74Dhww==", 965 | "dev": true, 966 | "license": "MIT", 967 | "dependencies": { 968 | "@tailwindcss/node": "4.0.17", 969 | "@tailwindcss/oxide": "4.0.17", 970 | "lightningcss": "1.29.2", 971 | "tailwindcss": "4.0.17" 972 | }, 973 | "peerDependencies": { 974 | "vite": "^5.2.0 || ^6" 975 | } 976 | }, 977 | "node_modules/@types/estree": { 978 | "version": "1.0.6", 979 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 980 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 981 | "dev": true, 982 | "license": "MIT" 983 | }, 984 | "node_modules/@types/node": { 985 | "version": "22.13.14", 986 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz", 987 | "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", 988 | "dev": true, 989 | "license": "MIT", 990 | "dependencies": { 991 | "undici-types": "~6.20.0" 992 | } 993 | }, 994 | "node_modules/asynckit": { 995 | "version": "0.4.0", 996 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 997 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 998 | "dev": true, 999 | "license": "MIT" 1000 | }, 1001 | "node_modules/axios": { 1002 | "version": "1.8.4", 1003 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", 1004 | "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", 1005 | "dev": true, 1006 | "license": "MIT", 1007 | "dependencies": { 1008 | "follow-redirects": "^1.15.6", 1009 | "form-data": "^4.0.0", 1010 | "proxy-from-env": "^1.1.0" 1011 | } 1012 | }, 1013 | "node_modules/combined-stream": { 1014 | "version": "1.0.8", 1015 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1016 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1017 | "dev": true, 1018 | "license": "MIT", 1019 | "dependencies": { 1020 | "delayed-stream": "~1.0.0" 1021 | }, 1022 | "engines": { 1023 | "node": ">= 0.8" 1024 | } 1025 | }, 1026 | "node_modules/debug": { 1027 | "version": "4.3.7", 1028 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 1029 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 1030 | "dev": true, 1031 | "license": "MIT", 1032 | "dependencies": { 1033 | "ms": "^2.1.3" 1034 | }, 1035 | "engines": { 1036 | "node": ">=6.0" 1037 | }, 1038 | "peerDependenciesMeta": { 1039 | "supports-color": { 1040 | "optional": true 1041 | } 1042 | } 1043 | }, 1044 | "node_modules/delayed-stream": { 1045 | "version": "1.0.0", 1046 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1047 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 1048 | "dev": true, 1049 | "license": "MIT", 1050 | "engines": { 1051 | "node": ">=0.4.0" 1052 | } 1053 | }, 1054 | "node_modules/detect-libc": { 1055 | "version": "2.0.3", 1056 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", 1057 | "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", 1058 | "dev": true, 1059 | "license": "Apache-2.0", 1060 | "engines": { 1061 | "node": ">=8" 1062 | } 1063 | }, 1064 | "node_modules/enhanced-resolve": { 1065 | "version": "5.18.1", 1066 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", 1067 | "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", 1068 | "dev": true, 1069 | "license": "MIT", 1070 | "dependencies": { 1071 | "graceful-fs": "^4.2.4", 1072 | "tapable": "^2.2.0" 1073 | }, 1074 | "engines": { 1075 | "node": ">=10.13.0" 1076 | } 1077 | }, 1078 | "node_modules/esbuild": { 1079 | "version": "0.25.1", 1080 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", 1081 | "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", 1082 | "dev": true, 1083 | "hasInstallScript": true, 1084 | "license": "MIT", 1085 | "bin": { 1086 | "esbuild": "bin/esbuild" 1087 | }, 1088 | "engines": { 1089 | "node": ">=18" 1090 | }, 1091 | "optionalDependencies": { 1092 | "@esbuild/aix-ppc64": "0.25.1", 1093 | "@esbuild/android-arm": "0.25.1", 1094 | "@esbuild/android-arm64": "0.25.1", 1095 | "@esbuild/android-x64": "0.25.1", 1096 | "@esbuild/darwin-arm64": "0.25.1", 1097 | "@esbuild/darwin-x64": "0.25.1", 1098 | "@esbuild/freebsd-arm64": "0.25.1", 1099 | "@esbuild/freebsd-x64": "0.25.1", 1100 | "@esbuild/linux-arm": "0.25.1", 1101 | "@esbuild/linux-arm64": "0.25.1", 1102 | "@esbuild/linux-ia32": "0.25.1", 1103 | "@esbuild/linux-loong64": "0.25.1", 1104 | "@esbuild/linux-mips64el": "0.25.1", 1105 | "@esbuild/linux-ppc64": "0.25.1", 1106 | "@esbuild/linux-riscv64": "0.25.1", 1107 | "@esbuild/linux-s390x": "0.25.1", 1108 | "@esbuild/linux-x64": "0.25.1", 1109 | "@esbuild/netbsd-arm64": "0.25.1", 1110 | "@esbuild/netbsd-x64": "0.25.1", 1111 | "@esbuild/openbsd-arm64": "0.25.1", 1112 | "@esbuild/openbsd-x64": "0.25.1", 1113 | "@esbuild/sunos-x64": "0.25.1", 1114 | "@esbuild/win32-arm64": "0.25.1", 1115 | "@esbuild/win32-ia32": "0.25.1", 1116 | "@esbuild/win32-x64": "0.25.1" 1117 | } 1118 | }, 1119 | "node_modules/follow-redirects": { 1120 | "version": "1.15.9", 1121 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", 1122 | "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", 1123 | "dev": true, 1124 | "funding": [ 1125 | { 1126 | "type": "individual", 1127 | "url": "https://github.com/sponsors/RubenVerborgh" 1128 | } 1129 | ], 1130 | "license": "MIT", 1131 | "engines": { 1132 | "node": ">=4.0" 1133 | }, 1134 | "peerDependenciesMeta": { 1135 | "debug": { 1136 | "optional": true 1137 | } 1138 | } 1139 | }, 1140 | "node_modules/form-data": { 1141 | "version": "4.0.1", 1142 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", 1143 | "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", 1144 | "dev": true, 1145 | "license": "MIT", 1146 | "dependencies": { 1147 | "asynckit": "^0.4.0", 1148 | "combined-stream": "^1.0.8", 1149 | "mime-types": "^2.1.12" 1150 | }, 1151 | "engines": { 1152 | "node": ">= 6" 1153 | } 1154 | }, 1155 | "node_modules/fsevents": { 1156 | "version": "2.3.3", 1157 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1158 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1159 | "dev": true, 1160 | "hasInstallScript": true, 1161 | "license": "MIT", 1162 | "optional": true, 1163 | "os": [ 1164 | "darwin" 1165 | ], 1166 | "engines": { 1167 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1168 | } 1169 | }, 1170 | "node_modules/globrex": { 1171 | "version": "0.1.2", 1172 | "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", 1173 | "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", 1174 | "dev": true, 1175 | "license": "MIT" 1176 | }, 1177 | "node_modules/graceful-fs": { 1178 | "version": "4.2.11", 1179 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1180 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1181 | "dev": true, 1182 | "license": "ISC" 1183 | }, 1184 | "node_modules/jiti": { 1185 | "version": "2.4.2", 1186 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", 1187 | "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", 1188 | "dev": true, 1189 | "license": "MIT", 1190 | "bin": { 1191 | "jiti": "lib/jiti-cli.mjs" 1192 | } 1193 | }, 1194 | "node_modules/laravel-echo": { 1195 | "version": "2.0.2", 1196 | "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-2.0.2.tgz", 1197 | "integrity": "sha512-Ciai6hA7r35MFqNRb8G034cvm9WiveSTFQQKRGJhWtZGbng7C8BBa5QvqDxk/Mw5GeJ+q19jrEwQhf7r1b1lcg==", 1198 | "dev": true, 1199 | "license": "MIT", 1200 | "engines": { 1201 | "node": ">=20" 1202 | } 1203 | }, 1204 | "node_modules/laravel-vite-plugin": { 1205 | "version": "1.2.0", 1206 | "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.2.0.tgz", 1207 | "integrity": "sha512-R0pJ+IcTVeqEMoKz/B2Ij57QVq3sFTABiFmb06gAwFdivbOgsUtuhX6N2MGLEArajrS3U5JbberzwOe7uXHMHQ==", 1208 | "dev": true, 1209 | "license": "MIT", 1210 | "dependencies": { 1211 | "picocolors": "^1.0.0", 1212 | "vite-plugin-full-reload": "^1.1.0" 1213 | }, 1214 | "bin": { 1215 | "clean-orphaned-assets": "bin/clean.js" 1216 | }, 1217 | "engines": { 1218 | "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 1219 | }, 1220 | "peerDependencies": { 1221 | "vite": "^5.0.0 || ^6.0.0" 1222 | } 1223 | }, 1224 | "node_modules/lightningcss": { 1225 | "version": "1.29.2", 1226 | "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", 1227 | "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", 1228 | "dev": true, 1229 | "license": "MPL-2.0", 1230 | "dependencies": { 1231 | "detect-libc": "^2.0.3" 1232 | }, 1233 | "engines": { 1234 | "node": ">= 12.0.0" 1235 | }, 1236 | "funding": { 1237 | "type": "opencollective", 1238 | "url": "https://opencollective.com/parcel" 1239 | }, 1240 | "optionalDependencies": { 1241 | "lightningcss-darwin-arm64": "1.29.2", 1242 | "lightningcss-darwin-x64": "1.29.2", 1243 | "lightningcss-freebsd-x64": "1.29.2", 1244 | "lightningcss-linux-arm-gnueabihf": "1.29.2", 1245 | "lightningcss-linux-arm64-gnu": "1.29.2", 1246 | "lightningcss-linux-arm64-musl": "1.29.2", 1247 | "lightningcss-linux-x64-gnu": "1.29.2", 1248 | "lightningcss-linux-x64-musl": "1.29.2", 1249 | "lightningcss-win32-arm64-msvc": "1.29.2", 1250 | "lightningcss-win32-x64-msvc": "1.29.2" 1251 | } 1252 | }, 1253 | "node_modules/lightningcss-darwin-arm64": { 1254 | "version": "1.29.2", 1255 | "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", 1256 | "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", 1257 | "cpu": [ 1258 | "arm64" 1259 | ], 1260 | "dev": true, 1261 | "license": "MPL-2.0", 1262 | "optional": true, 1263 | "os": [ 1264 | "darwin" 1265 | ], 1266 | "engines": { 1267 | "node": ">= 12.0.0" 1268 | }, 1269 | "funding": { 1270 | "type": "opencollective", 1271 | "url": "https://opencollective.com/parcel" 1272 | } 1273 | }, 1274 | "node_modules/lightningcss-darwin-x64": { 1275 | "version": "1.29.2", 1276 | "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", 1277 | "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", 1278 | "cpu": [ 1279 | "x64" 1280 | ], 1281 | "dev": true, 1282 | "license": "MPL-2.0", 1283 | "optional": true, 1284 | "os": [ 1285 | "darwin" 1286 | ], 1287 | "engines": { 1288 | "node": ">= 12.0.0" 1289 | }, 1290 | "funding": { 1291 | "type": "opencollective", 1292 | "url": "https://opencollective.com/parcel" 1293 | } 1294 | }, 1295 | "node_modules/lightningcss-freebsd-x64": { 1296 | "version": "1.29.2", 1297 | "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", 1298 | "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", 1299 | "cpu": [ 1300 | "x64" 1301 | ], 1302 | "dev": true, 1303 | "license": "MPL-2.0", 1304 | "optional": true, 1305 | "os": [ 1306 | "freebsd" 1307 | ], 1308 | "engines": { 1309 | "node": ">= 12.0.0" 1310 | }, 1311 | "funding": { 1312 | "type": "opencollective", 1313 | "url": "https://opencollective.com/parcel" 1314 | } 1315 | }, 1316 | "node_modules/lightningcss-linux-arm-gnueabihf": { 1317 | "version": "1.29.2", 1318 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", 1319 | "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", 1320 | "cpu": [ 1321 | "arm" 1322 | ], 1323 | "dev": true, 1324 | "license": "MPL-2.0", 1325 | "optional": true, 1326 | "os": [ 1327 | "linux" 1328 | ], 1329 | "engines": { 1330 | "node": ">= 12.0.0" 1331 | }, 1332 | "funding": { 1333 | "type": "opencollective", 1334 | "url": "https://opencollective.com/parcel" 1335 | } 1336 | }, 1337 | "node_modules/lightningcss-linux-arm64-gnu": { 1338 | "version": "1.29.2", 1339 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", 1340 | "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", 1341 | "cpu": [ 1342 | "arm64" 1343 | ], 1344 | "dev": true, 1345 | "license": "MPL-2.0", 1346 | "optional": true, 1347 | "os": [ 1348 | "linux" 1349 | ], 1350 | "engines": { 1351 | "node": ">= 12.0.0" 1352 | }, 1353 | "funding": { 1354 | "type": "opencollective", 1355 | "url": "https://opencollective.com/parcel" 1356 | } 1357 | }, 1358 | "node_modules/lightningcss-linux-arm64-musl": { 1359 | "version": "1.29.2", 1360 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", 1361 | "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", 1362 | "cpu": [ 1363 | "arm64" 1364 | ], 1365 | "dev": true, 1366 | "license": "MPL-2.0", 1367 | "optional": true, 1368 | "os": [ 1369 | "linux" 1370 | ], 1371 | "engines": { 1372 | "node": ">= 12.0.0" 1373 | }, 1374 | "funding": { 1375 | "type": "opencollective", 1376 | "url": "https://opencollective.com/parcel" 1377 | } 1378 | }, 1379 | "node_modules/lightningcss-linux-x64-gnu": { 1380 | "version": "1.29.2", 1381 | "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", 1382 | "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", 1383 | "cpu": [ 1384 | "x64" 1385 | ], 1386 | "dev": true, 1387 | "license": "MPL-2.0", 1388 | "optional": true, 1389 | "os": [ 1390 | "linux" 1391 | ], 1392 | "engines": { 1393 | "node": ">= 12.0.0" 1394 | }, 1395 | "funding": { 1396 | "type": "opencollective", 1397 | "url": "https://opencollective.com/parcel" 1398 | } 1399 | }, 1400 | "node_modules/lightningcss-linux-x64-musl": { 1401 | "version": "1.29.2", 1402 | "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", 1403 | "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", 1404 | "cpu": [ 1405 | "x64" 1406 | ], 1407 | "dev": true, 1408 | "license": "MPL-2.0", 1409 | "optional": true, 1410 | "os": [ 1411 | "linux" 1412 | ], 1413 | "engines": { 1414 | "node": ">= 12.0.0" 1415 | }, 1416 | "funding": { 1417 | "type": "opencollective", 1418 | "url": "https://opencollective.com/parcel" 1419 | } 1420 | }, 1421 | "node_modules/lightningcss-win32-arm64-msvc": { 1422 | "version": "1.29.2", 1423 | "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", 1424 | "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", 1425 | "cpu": [ 1426 | "arm64" 1427 | ], 1428 | "dev": true, 1429 | "license": "MPL-2.0", 1430 | "optional": true, 1431 | "os": [ 1432 | "win32" 1433 | ], 1434 | "engines": { 1435 | "node": ">= 12.0.0" 1436 | }, 1437 | "funding": { 1438 | "type": "opencollective", 1439 | "url": "https://opencollective.com/parcel" 1440 | } 1441 | }, 1442 | "node_modules/lightningcss-win32-x64-msvc": { 1443 | "version": "1.29.2", 1444 | "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", 1445 | "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", 1446 | "cpu": [ 1447 | "x64" 1448 | ], 1449 | "dev": true, 1450 | "license": "MPL-2.0", 1451 | "optional": true, 1452 | "os": [ 1453 | "win32" 1454 | ], 1455 | "engines": { 1456 | "node": ">= 12.0.0" 1457 | }, 1458 | "funding": { 1459 | "type": "opencollective", 1460 | "url": "https://opencollective.com/parcel" 1461 | } 1462 | }, 1463 | "node_modules/mime-db": { 1464 | "version": "1.52.0", 1465 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1466 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1467 | "dev": true, 1468 | "license": "MIT", 1469 | "engines": { 1470 | "node": ">= 0.6" 1471 | } 1472 | }, 1473 | "node_modules/mime-types": { 1474 | "version": "2.1.35", 1475 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1476 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1477 | "dev": true, 1478 | "license": "MIT", 1479 | "dependencies": { 1480 | "mime-db": "1.52.0" 1481 | }, 1482 | "engines": { 1483 | "node": ">= 0.6" 1484 | } 1485 | }, 1486 | "node_modules/mini-svg-data-uri": { 1487 | "version": "1.4.4", 1488 | "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", 1489 | "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", 1490 | "dev": true, 1491 | "license": "MIT", 1492 | "bin": { 1493 | "mini-svg-data-uri": "cli.js" 1494 | } 1495 | }, 1496 | "node_modules/ms": { 1497 | "version": "2.1.3", 1498 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1499 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1500 | "dev": true, 1501 | "license": "MIT" 1502 | }, 1503 | "node_modules/nanoid": { 1504 | "version": "3.3.9", 1505 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz", 1506 | "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==", 1507 | "dev": true, 1508 | "funding": [ 1509 | { 1510 | "type": "github", 1511 | "url": "https://github.com/sponsors/ai" 1512 | } 1513 | ], 1514 | "license": "MIT", 1515 | "bin": { 1516 | "nanoid": "bin/nanoid.cjs" 1517 | }, 1518 | "engines": { 1519 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1520 | } 1521 | }, 1522 | "node_modules/picocolors": { 1523 | "version": "1.1.1", 1524 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1525 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1526 | "dev": true, 1527 | "license": "ISC" 1528 | }, 1529 | "node_modules/picomatch": { 1530 | "version": "2.3.1", 1531 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1532 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1533 | "dev": true, 1534 | "license": "MIT", 1535 | "engines": { 1536 | "node": ">=8.6" 1537 | }, 1538 | "funding": { 1539 | "url": "https://github.com/sponsors/jonschlinkert" 1540 | } 1541 | }, 1542 | "node_modules/postcss": { 1543 | "version": "8.5.3", 1544 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 1545 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 1546 | "dev": true, 1547 | "funding": [ 1548 | { 1549 | "type": "opencollective", 1550 | "url": "https://opencollective.com/postcss/" 1551 | }, 1552 | { 1553 | "type": "tidelift", 1554 | "url": "https://tidelift.com/funding/github/npm/postcss" 1555 | }, 1556 | { 1557 | "type": "github", 1558 | "url": "https://github.com/sponsors/ai" 1559 | } 1560 | ], 1561 | "license": "MIT", 1562 | "dependencies": { 1563 | "nanoid": "^3.3.8", 1564 | "picocolors": "^1.1.1", 1565 | "source-map-js": "^1.2.1" 1566 | }, 1567 | "engines": { 1568 | "node": "^10 || ^12 || >=14" 1569 | } 1570 | }, 1571 | "node_modules/prettier": { 1572 | "version": "3.5.3", 1573 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", 1574 | "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", 1575 | "dev": true, 1576 | "license": "MIT", 1577 | "bin": { 1578 | "prettier": "bin/prettier.cjs" 1579 | }, 1580 | "engines": { 1581 | "node": ">=14" 1582 | }, 1583 | "funding": { 1584 | "url": "https://github.com/prettier/prettier?sponsor=1" 1585 | } 1586 | }, 1587 | "node_modules/proxy-from-env": { 1588 | "version": "1.1.0", 1589 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1590 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 1591 | "dev": true, 1592 | "license": "MIT" 1593 | }, 1594 | "node_modules/pusher-js": { 1595 | "version": "8.4.0", 1596 | "resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-8.4.0.tgz", 1597 | "integrity": "sha512-wp3HqIIUc1GRyu1XrP6m2dgyE9MoCsXVsWNlohj0rjSkLf+a0jLvEyVubdg58oMk7bhjBWnFClgp8jfAa6Ak4Q==", 1598 | "dev": true, 1599 | "license": "MIT", 1600 | "dependencies": { 1601 | "tweetnacl": "^1.0.3" 1602 | } 1603 | }, 1604 | "node_modules/rollup": { 1605 | "version": "4.35.0", 1606 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz", 1607 | "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==", 1608 | "dev": true, 1609 | "license": "MIT", 1610 | "dependencies": { 1611 | "@types/estree": "1.0.6" 1612 | }, 1613 | "bin": { 1614 | "rollup": "dist/bin/rollup" 1615 | }, 1616 | "engines": { 1617 | "node": ">=18.0.0", 1618 | "npm": ">=8.0.0" 1619 | }, 1620 | "optionalDependencies": { 1621 | "@rollup/rollup-android-arm-eabi": "4.35.0", 1622 | "@rollup/rollup-android-arm64": "4.35.0", 1623 | "@rollup/rollup-darwin-arm64": "4.35.0", 1624 | "@rollup/rollup-darwin-x64": "4.35.0", 1625 | "@rollup/rollup-freebsd-arm64": "4.35.0", 1626 | "@rollup/rollup-freebsd-x64": "4.35.0", 1627 | "@rollup/rollup-linux-arm-gnueabihf": "4.35.0", 1628 | "@rollup/rollup-linux-arm-musleabihf": "4.35.0", 1629 | "@rollup/rollup-linux-arm64-gnu": "4.35.0", 1630 | "@rollup/rollup-linux-arm64-musl": "4.35.0", 1631 | "@rollup/rollup-linux-loongarch64-gnu": "4.35.0", 1632 | "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0", 1633 | "@rollup/rollup-linux-riscv64-gnu": "4.35.0", 1634 | "@rollup/rollup-linux-s390x-gnu": "4.35.0", 1635 | "@rollup/rollup-linux-x64-gnu": "4.35.0", 1636 | "@rollup/rollup-linux-x64-musl": "4.35.0", 1637 | "@rollup/rollup-win32-arm64-msvc": "4.35.0", 1638 | "@rollup/rollup-win32-ia32-msvc": "4.35.0", 1639 | "@rollup/rollup-win32-x64-msvc": "4.35.0", 1640 | "fsevents": "~2.3.2" 1641 | } 1642 | }, 1643 | "node_modules/source-map-js": { 1644 | "version": "1.2.1", 1645 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1646 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1647 | "dev": true, 1648 | "license": "BSD-3-Clause", 1649 | "engines": { 1650 | "node": ">=0.10.0" 1651 | } 1652 | }, 1653 | "node_modules/tailwindcss": { 1654 | "version": "4.0.17", 1655 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.17.tgz", 1656 | "integrity": "sha512-OErSiGzRa6rLiOvaipsDZvLMSpsBZ4ysB4f0VKGXUrjw2jfkJRd6kjRKV2+ZmTCNvwtvgdDam5D7w6WXsdLJZw==", 1657 | "dev": true, 1658 | "license": "MIT" 1659 | }, 1660 | "node_modules/tailwindcss-animate": { 1661 | "version": "1.0.7", 1662 | "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", 1663 | "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", 1664 | "dev": true, 1665 | "license": "MIT", 1666 | "peerDependencies": { 1667 | "tailwindcss": ">=3.0.0 || insiders" 1668 | } 1669 | }, 1670 | "node_modules/tapable": { 1671 | "version": "2.2.1", 1672 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 1673 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 1674 | "dev": true, 1675 | "license": "MIT", 1676 | "engines": { 1677 | "node": ">=6" 1678 | } 1679 | }, 1680 | "node_modules/tsconfck": { 1681 | "version": "3.1.4", 1682 | "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.4.tgz", 1683 | "integrity": "sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==", 1684 | "dev": true, 1685 | "license": "MIT", 1686 | "bin": { 1687 | "tsconfck": "bin/tsconfck.js" 1688 | }, 1689 | "engines": { 1690 | "node": "^18 || >=20" 1691 | }, 1692 | "peerDependencies": { 1693 | "typescript": "^5.0.0" 1694 | }, 1695 | "peerDependenciesMeta": { 1696 | "typescript": { 1697 | "optional": true 1698 | } 1699 | } 1700 | }, 1701 | "node_modules/tweetnacl": { 1702 | "version": "1.0.3", 1703 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", 1704 | "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", 1705 | "dev": true, 1706 | "license": "Unlicense" 1707 | }, 1708 | "node_modules/typescript": { 1709 | "version": "5.8.2", 1710 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", 1711 | "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", 1712 | "dev": true, 1713 | "license": "Apache-2.0", 1714 | "bin": { 1715 | "tsc": "bin/tsc", 1716 | "tsserver": "bin/tsserver" 1717 | }, 1718 | "engines": { 1719 | "node": ">=14.17" 1720 | } 1721 | }, 1722 | "node_modules/undici-types": { 1723 | "version": "6.20.0", 1724 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", 1725 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", 1726 | "dev": true, 1727 | "license": "MIT" 1728 | }, 1729 | "node_modules/vite": { 1730 | "version": "6.2.1", 1731 | "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.1.tgz", 1732 | "integrity": "sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==", 1733 | "dev": true, 1734 | "license": "MIT", 1735 | "dependencies": { 1736 | "esbuild": "^0.25.0", 1737 | "postcss": "^8.5.3", 1738 | "rollup": "^4.30.1" 1739 | }, 1740 | "bin": { 1741 | "vite": "bin/vite.js" 1742 | }, 1743 | "engines": { 1744 | "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 1745 | }, 1746 | "funding": { 1747 | "url": "https://github.com/vitejs/vite?sponsor=1" 1748 | }, 1749 | "optionalDependencies": { 1750 | "fsevents": "~2.3.3" 1751 | }, 1752 | "peerDependencies": { 1753 | "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 1754 | "jiti": ">=1.21.0", 1755 | "less": "*", 1756 | "lightningcss": "^1.21.0", 1757 | "sass": "*", 1758 | "sass-embedded": "*", 1759 | "stylus": "*", 1760 | "sugarss": "*", 1761 | "terser": "^5.16.0", 1762 | "tsx": "^4.8.1", 1763 | "yaml": "^2.4.2" 1764 | }, 1765 | "peerDependenciesMeta": { 1766 | "@types/node": { 1767 | "optional": true 1768 | }, 1769 | "jiti": { 1770 | "optional": true 1771 | }, 1772 | "less": { 1773 | "optional": true 1774 | }, 1775 | "lightningcss": { 1776 | "optional": true 1777 | }, 1778 | "sass": { 1779 | "optional": true 1780 | }, 1781 | "sass-embedded": { 1782 | "optional": true 1783 | }, 1784 | "stylus": { 1785 | "optional": true 1786 | }, 1787 | "sugarss": { 1788 | "optional": true 1789 | }, 1790 | "terser": { 1791 | "optional": true 1792 | }, 1793 | "tsx": { 1794 | "optional": true 1795 | }, 1796 | "yaml": { 1797 | "optional": true 1798 | } 1799 | } 1800 | }, 1801 | "node_modules/vite-plugin-full-reload": { 1802 | "version": "1.2.0", 1803 | "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", 1804 | "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", 1805 | "dev": true, 1806 | "license": "MIT", 1807 | "dependencies": { 1808 | "picocolors": "^1.0.0", 1809 | "picomatch": "^2.3.1" 1810 | } 1811 | }, 1812 | "node_modules/vite-tsconfig-paths": { 1813 | "version": "5.1.4", 1814 | "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz", 1815 | "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==", 1816 | "dev": true, 1817 | "license": "MIT", 1818 | "dependencies": { 1819 | "debug": "^4.1.1", 1820 | "globrex": "^0.1.2", 1821 | "tsconfck": "^3.0.3" 1822 | }, 1823 | "peerDependencies": { 1824 | "vite": "*" 1825 | }, 1826 | "peerDependenciesMeta": { 1827 | "vite": { 1828 | "optional": true 1829 | } 1830 | } 1831 | } 1832 | } 1833 | } 1834 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/package.json", 3 | "private": true, 4 | "type": "module", 5 | "scripts": { 6 | "start": "vite", 7 | "build": "vite build" 8 | }, 9 | "prettier": "@aniftyco/prettier", 10 | "devDependencies": { 11 | "@aniftyco/prettier": "^0.1.0", 12 | "@tailwindcss/forms": "^0.5.10", 13 | "@tailwindcss/vite": "^4.0.17", 14 | "@types/node": "^22.13.14", 15 | "axios": "^1.8.4", 16 | "laravel-echo": "^2.0.2", 17 | "laravel-vite-plugin": "^2.0.0", 18 | "prettier": "^3.5.3", 19 | "pusher-js": "^8.4.0", 20 | "tailwindcss": "^4.0.17", 21 | "tailwindcss-animate": "^1.0.7", 22 | "typescript": "^5.8.2", 23 | "vite": "^7.0.7", 24 | "vite-tsconfig-paths": "^5.1.4" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | tests/Unit 10 | 11 | 12 | tests/Feature 13 | 14 | 15 | 16 | 17 | app 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews -Indexes 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Handle Authorization Header 9 | RewriteCond %{HTTP:Authorization} . 10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 11 | 12 | # Redirect Trailing Slashes If Not A Folder... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_URI} (.+)/$ 15 | RewriteRule ^ %1 [L,R=301] 16 | 17 | # Send Requests To Front Controller... 18 | RewriteCond %{REQUEST_FILENAME} !-d 19 | RewriteCond %{REQUEST_FILENAME} !-f 20 | RewriteRule ^ index.php [L] 21 | 22 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/composer-starters/laravel/e200da17d788cdadf27daa94e5e707a406393ff6/public/favicon.ico -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | handleRequest(Request::capture()); 18 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /resources/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/composer-starters/laravel/e200da17d788cdadf27daa94e5e707a406393ff6/resources/assets/.gitkeep -------------------------------------------------------------------------------- /resources/client/app.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import Echo from 'laravel-echo'; 3 | import Pusher from 'pusher-js'; 4 | 5 | import.meta.glob(['../assets/**']); 6 | 7 | window.axios = axios; 8 | 9 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 10 | 11 | window.Pusher = Pusher; 12 | 13 | window.Echo = new Echo({ 14 | broadcaster: 'reverb', 15 | key: import.meta.env.VITE_REVERB_APP_KEY, 16 | wsHost: import.meta.env.VITE_REVERB_HOST, 17 | wsPort: import.meta.env.VITE_REVERB_PORT ?? 80, 18 | wssPort: import.meta.env.VITE_REVERB_PORT ?? 443, 19 | forceTLS: (import.meta.env.VITE_REVERB_SCHEME ?? 'https') === 'https', 20 | enabledTransports: ['ws', 'wss'], 21 | }); 22 | -------------------------------------------------------------------------------- /resources/client/tailwind.css: -------------------------------------------------------------------------------- 1 | @import "tailwindcss"; 2 | 3 | @source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; 4 | @source '../../storage/framework/views/*.php'; 5 | @source '../**/*.blade.php'; 6 | @source '../**/*.ts'; 7 | 8 | @plugin "@tailwindcss/forms"; 9 | @plugin "tailwindcss-animate"; -------------------------------------------------------------------------------- /routes/channels.php: -------------------------------------------------------------------------------- 1 | id === (int) $id; 7 | }); 8 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 8 | })->purpose('Display an inspiring quote')->hourly(); 9 | -------------------------------------------------------------------------------- /routes/web.php: -------------------------------------------------------------------------------- 1 | toBeTrue(); 5 | }); 6 | -------------------------------------------------------------------------------- /tests/Pest.php: -------------------------------------------------------------------------------- 1 | extend(Tests\TestCase::class)->in('Feature'); 15 | 16 | /* 17 | |-------------------------------------------------------------------------- 18 | | Expectations 19 | |-------------------------------------------------------------------------- 20 | | 21 | | When you're writing tests, you often need to check that values meet certain conditions. The 22 | | "expect()" function gives you access to a set of "expectations" methods that you can use 23 | | to assert different things. Of course, you may extend the Expectation API at any time. 24 | | 25 | */ 26 | 27 | expect()->extend('toBeOne', function () { 28 | return $this->toBe(1); 29 | }); 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Functions 34 | |-------------------------------------------------------------------------- 35 | | 36 | | While Pest is very powerful out-of-the-box, you may have some testing code specific to your 37 | | project that you don't want to repeat in every file. Here you can also expose helpers as 38 | | global functions to help you to reduce the number of lines of code in your test files. 39 | | 40 | */ 41 | 42 | function something() 43 | { 44 | // .. 45 | } 46 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | toBeTrue(); 5 | }); 6 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["vite.config.ts", "./resources/client/**/*.ts"], 3 | "compilerOptions": { 4 | "target": "esnext", 5 | "module": "esnext", 6 | "moduleResolution": "bundler", 7 | "esModuleInterop": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "allowSyntheticDefaultImports": true, 10 | "types": ["vite/client", "./env.d.ts"], 11 | "paths": { 12 | "@app/*": ["./resources/client/*"], 13 | "@vendor/*": ["./vendor/*"] 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from 'path'; 2 | import { defineConfig } from 'vite'; 3 | import laravel from 'laravel-vite-plugin'; 4 | import tailwindcss from '@tailwindcss/vite'; 5 | import tsconfigPaths from 'vite-tsconfig-paths'; 6 | 7 | export default defineConfig({ 8 | plugins: [ 9 | tailwindcss(), 10 | tsconfigPaths(), 11 | laravel({ 12 | input: ['resources/client/tailwind.css', 'resources/client/app.ts'], 13 | refresh: true, 14 | }), 15 | ], 16 | resolve: { 17 | alias: { 18 | '@app': resolve(__dirname, 'resources/client'), 19 | '@vendor': resolve(__dirname, 'vendor/'), 20 | }, 21 | }, 22 | }); 23 | --------------------------------------------------------------------------------