├── .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 |

2 |
3 |
4 |
5 |
6 |
7 |
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 |
--------------------------------------------------------------------------------