[Feature] Filament v3 (#736)

This commit is contained in:
Alex Justesen
2023-09-11 16:10:37 -04:00
committed by GitHub
parent 05badf4a61
commit 545540e2e2
119 changed files with 5603 additions and 2150 deletions
+3
View File
@@ -5,6 +5,9 @@ APP_DEBUG=false
APP_URL=http://localhost
FORCE_HTTPS=false
CONTENT_WIDTH=7xl
DASHBOARD_POLLING=60
NOTIFICATION_POLLING=60
RESULTS_POLLING=false
Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 623 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

-1
View File
@@ -1,5 +1,4 @@
/node_modules
/public/build
/public/hot
/public/storage
/storage/*.key
+187 -33
View File
@@ -17,9 +17,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -148,8 +154,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -172,6 +186,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -195,7 +210,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
@@ -237,9 +251,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -368,8 +388,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -392,6 +420,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -415,7 +444,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
@@ -457,9 +485,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -588,8 +622,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -612,6 +654,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -635,7 +678,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
@@ -677,9 +719,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -808,8 +856,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -832,6 +888,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -855,7 +912,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
@@ -897,9 +953,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -1028,8 +1090,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -1052,6 +1122,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -1075,7 +1146,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
@@ -1117,9 +1187,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -1248,8 +1324,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -1272,6 +1356,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -1295,7 +1380,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
@@ -1337,9 +1421,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -1468,8 +1558,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -1492,6 +1590,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -1515,7 +1614,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
@@ -1557,9 +1655,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -1688,8 +1792,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -1712,6 +1824,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -1735,7 +1848,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
@@ -1777,9 +1889,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -1908,8 +2026,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -1932,6 +2058,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -1955,7 +2082,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
@@ -1997,9 +2123,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -2128,8 +2260,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -2152,6 +2292,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -2175,7 +2316,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
@@ -2217,9 +2357,15 @@ namespace PHPSTORM_META {
'App\Settings\ThresholdSettings' => \App\Settings\ThresholdSettings::class,
'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class,
'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class,
'Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse' => \Filament\Http\Responses\Auth\EmailVerificationResponse::class,
'Filament\Http\Responses\Auth\Contracts\LoginResponse' => \Filament\Http\Responses\Auth\LoginResponse::class,
'Filament\Http\Responses\Auth\Contracts\LogoutResponse' => \Filament\Http\Responses\Auth\LogoutResponse::class,
'HtmlSanitizer\SanitizerInterface' => \HtmlSanitizer\Sanitizer::class,
'Filament\Http\Responses\Auth\Contracts\PasswordResetResponse' => \Filament\Http\Responses\Auth\PasswordResetResponse::class,
'Filament\Http\Responses\Auth\Contracts\RegistrationResponse' => \Filament\Http\Responses\Auth\RegistrationResponse::class,
'Filament\Support\Assets\AssetManager' => \Filament\Support\Assets\AssetManager::class,
'Filament\Support\Colors\ColorManager' => \Filament\Support\Colors\ColorManager::class,
'Filament\Support\Icons\IconManager' => \Filament\Support\Icons\IconManager::class,
'Filament\Support\View\ViewManager' => \Filament\Support\View\ViewManager::class,
'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class,
'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
@@ -2348,8 +2494,16 @@ namespace PHPSTORM_META {
'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Maatwebsite\Excel\Cache\CacheManager' => \Maatwebsite\Excel\Cache\CacheManager::class,
'Maatwebsite\Excel\Files\Filesystem' => \Maatwebsite\Excel\Files\Filesystem::class,
'Maatwebsite\Excel\Files\TemporaryFileFactory' => \Maatwebsite\Excel\Files\TemporaryFileFactory::class,
@@ -2372,6 +2526,7 @@ namespace PHPSTORM_META {
'Spatie\LaravelSettings\SettingsRepositories\SettingsRepository' => \Spatie\LaravelSettings\SettingsRepositories\DatabaseSettingsRepository::class,
'Spatie\LaravelSettings\Support\SettingsCacheFactory' => \Spatie\LaravelSettings\Support\SettingsCacheFactory::class,
'Squire\RepositoryManager' => \Squire\RepositoryManager::class,
'Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface' => \Symfony\Component\HtmlSanitizer\HtmlSanitizer::class,
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
@@ -2395,7 +2550,6 @@ namespace PHPSTORM_META {
'events' => \Illuminate\Events\Dispatcher::class,
'excel' => \Maatwebsite\Excel\Excel::class,
'filament' => \Filament\FilamentManager::class,
'filament-versions-manager' => \FilamentVersions\FilamentVersionsManager::class,
'files' => \Illuminate\Filesystem\Filesystem::class,
'filesystem' => \Illuminate\Filesystem\FilesystemManager::class,
'filesystem.cloud' => \Illuminate\Filesystem\FilesystemAdapter::class,
+4 -4
View File
@@ -22,15 +22,15 @@ Speedtest Tracker is containerized so you can run it anywhere you run your Docke
## API
A robust API is planned for a later release but `v0.11.8` includes a legacy endpoint `/api/speedtest/latest` which is used by home lab dashboards like [Homepage](https://github.com/benphelps/homepage) and [Organizr](https://github.com/causefx/Organizr/tree/v2-master).
A robust API is planned for a later release but as of `v0.11.8` a legacy endpoint `/api/speedtest/latest` which is used by home lab dashboards like [Homepage](https://github.com/benphelps/homepage) and [Organizr](https://github.com/causefx/Organizr/tree/v2-master).
## Screenshots
![Dashboard](.github/screenshots/dashboard_screenshot.png)
![Dashboard](.github/screenshots/dashboard_screenshot.jpg)
**Dashboard**
![Results page](.github/screenshots/results_screenshot.png)
![Results page](.github/screenshots/results_screenshot.jpg)
**Results page**
![General Settings page](.github/screenshots/general_settings_screenshot.png)
![General Settings page](.github/screenshots/general_settings_screenshot.jpg)
**General Settings page**
+1602 -701
View File
File diff suppressed because it is too large Load Diff
+14 -49
View File
@@ -2,53 +2,28 @@
namespace App\Filament\Pages;
use App\Filament\Widgets\RecentJitterChart;
use App\Filament\Widgets\RecentPingChart;
use App\Filament\Widgets\RecentSpeedChart;
use App\Filament\Widgets\StatsOverview;
use App\Filament\Widgets\RecentJitterChartWidget;
use App\Filament\Widgets\RecentPingChartWidget;
use App\Filament\Widgets\RecentSpeedChartWidget;
use App\Filament\Widgets\StatsOverviewWidget;
use App\Jobs\ExecSpeedtest;
use App\Models\Result;
use App\Settings\GeneralSettings;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Pages\Actions\Action;
use Filament\Pages\Dashboard as BasePage;
use Illuminate\Contracts\View\View;
class Dashboard extends BasePage
{
public string $lastResult = 'never';
public int $resultsCount;
protected static ?string $pollingInterval = null;
protected static string $view = 'filament.pages.dashboard';
public function render(): View
protected function getPollingInterval(): ?string
{
$this->resultsCount = Result::count();
if ($this->resultsCount) {
$result = Result::latest()
->first();
$settings = new GeneralSettings();
$this->lastResult = $result->created_at
->timezone($settings->timezone)
->format($settings->time_format);
}
return view(static::$view, $this->getViewData())
->layout(static::$layout, $this->getLayoutData());
return null;
}
protected function getMaxContentWidth(): string
{
$settings = new GeneralSettings();
return $settings->content_width;
}
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Action::make('speedtest')
@@ -57,23 +32,13 @@ class Dashboard extends BasePage
];
}
public function getHeaderWidgets(): array
protected function getHeaderWidgets(): array
{
return [
StatsOverview::class,
];
}
public function getFooterWidgets(): array
{
if (! $this->resultsCount) {
return [];
}
return [
RecentSpeedChart::class,
RecentPingChart::class,
RecentJitterChart::class,
StatsOverviewWidget::make(),
RecentSpeedChartWidget::make(),
RecentPingChartWidget::make(),
RecentJitterChartWidget::make(),
];
}
+5 -6
View File
@@ -3,8 +3,8 @@
namespace App\Filament\Pages;
use App\Jobs\DeleteResultsData;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Pages\Actions\Action;
use Filament\Pages\Page;
class DeleteData extends Page
@@ -21,7 +21,7 @@ class DeleteData extends Page
protected ?string $maxContentWidth = '3xl';
public function getActions(): array
public function getHeaderActions(): array
{
return [
Action::make('delete')
@@ -30,9 +30,8 @@ class DeleteData extends Page
->action(fn () => $this->deleteData())
->requiresConfirmation()
->modalHeading('Confirmation')
->modalSubheading('Are you really-really-really sure you want to do this?')
->modalContent(view('filament.pages.modals.delete-results-data-confirmation'))
->modalButton('Yes, I\'m sure'),
->modalDescription('This will delete all results data from the database, this cannot be undone. You have been warned!')
->modalSubmitActionLabel('Yes, I am sure'),
];
}
@@ -41,7 +40,7 @@ class DeleteData extends Page
DeleteResultsData::dispatch();
Notification::make()
->title('Deleting speedtest results data')
->title('Deleting results data')
->body('The job has been added to the queue and will be completed shortly.')
->warning()
->send();
+90 -124
View File
@@ -4,10 +4,8 @@ namespace App\Filament\Pages\Settings;
use App\Rules\Cron;
use App\Settings\GeneralSettings;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Pages\SettingsPage;
use Illuminate\Support\Facades\Http;
use Squire\Models\Timezone;
@@ -26,134 +24,102 @@ class GeneralPage extends SettingsPage
protected static string $settings = GeneralSettings::class;
protected function getMaxContentWidth(): string
public function form(Form $form): Form
{
$settings = new GeneralSettings();
return $form
->schema([
Forms\Components\Grid::make([
'default' => 1,
])
->schema([
Forms\Components\Section::make('Site Settings')
->schema([
Forms\Components\TextInput::make('site_name')
->maxLength(50)
->required()
->columnSpan(['md' => 2]),
Forms\Components\Select::make('timezone')
->label('Time zone')
->options(Timezone::all()->pluck('code', 'code'))
->searchable()
->required(),
Forms\Components\TextInput::make('time_format')
->helperText('Use [DateTime Format](https://www.php.net/manual/en/datetime.format.php) options to change the format of the datetime in views.')
->placeholder('M j, Y G:i:s')
->maxLength(25)
->required(),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
return $settings->content_width;
Forms\Components\Section::make('Speedtest Settings')
->schema([
Forms\Components\TextInput::make('speedtest_schedule')
->rules([new Cron()])
->helperText('Leave empty to disable the schedule. You can also use the cron expression generator [HERE](https://crontab.cronhub.io/) to help you make schedules.')
->nullable()
->columnSpan(1),
Forms\Components\Select::make('speedtest_server')
->label('Speedtest servers')
->helperText('Leave empty to let the system pick the best server.')
->nullable()
->multiple()
->maxItems(10)
->preload()
->searchable()
->getSearchResultsUsing(fn (string $search): array => $this->getServerSearchOptions($search))
->getOptionLabelsUsing(fn (array $values): array => $this->getServerLabels($values))
->columnSpan('full'),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
])
->columnSpan('full'),
]);
}
protected function getFormSchema(): array
protected function getServerLabels(array $values): array
{
return [
Grid::make([
'default' => 1,
'md' => 3,
])
->schema([
Grid::make([
'default' => 1,
])
->schema([
Section::make('Site Settings')
->schema([
TextInput::make('site_name')
->maxLength(50)
->required()
->columnSpan(['md' => 2]),
Select::make('timezone')
->options(Timezone::all()->pluck('code', 'code'))
->searchable()
->required(),
TextInput::make('time_format')
->helperText('Use [DateTime Format](https://www.php.net/manual/en/datetime.format.php) options to change the format of the datetime in views.')
->placeholder('M j, Y G:i:s')
->maxLength(25)
->required(),
Select::make('content_width')
->options([
'7xl' => 'Default width',
'full' => 'Full width',
]),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
return collect($values)->mapWithKeys(function (string $item, int $key) {
return [$item => $item];
})->toArray();
}
Section::make('Speedtest Settings')
->schema([
TextInput::make('speedtest_schedule')
->rules([new Cron()])
->helperText('Leave empty to disable the schedule. You can also use the cron expression generator [HERE](https://crontab.cronhub.io/) to help you make schedules.')
->nullable()
->columnSpan(1),
Select::make('speedtest_server')
->label('Speedtest server ID')
->helperText('Leave empty to let the system pick the best server.')
->nullable()
->multiple()
->maxItems(10)
->searchable()
->options(function () {
$response = Http::get(
url: 'https://www.speedtest.net/api/js/servers',
query: [
'engine' => 'js',
'https_functional' => true,
'limit' => 10,
]
);
protected function getServerSearchOptions(string $search): array
{
$response = Http::get(
url: 'https://www.speedtest.net/api/js/servers',
query: [
'engine' => 'js',
'search' => $search,
'https_functional' => true,
'limit' => 10,
]
);
if ($response->failed()) {
return [
'' => 'There was an error retrieving Speedtest servers',
];
}
if ($response->failed()) {
return [
'' => 'There was an error retrieving Speedtest servers',
];
}
return $response->collect()->map(function ($item) {
return [
'id' => $item['id'],
'name' => $item['id'].': '.$item['name'].' ('.$item['sponsor'].')',
];
})->pluck('name', 'id');
})
->getSearchResultsUsing(function (string $search) {
$response = Http::get(
url: 'https://www.speedtest.net/api/js/servers',
query: [
'engine' => 'js',
'search' => $search,
'https_functional' => true,
'limit' => 10,
]
);
if (! $response->collect()->count() && is_numeric($search)) {
return collect([
[
'id' => $search,
'name' => 'Unknown server',
],
])->pluck('name', 'id')->toArray();
}
if ($response->failed()) {
return [
'' => 'There was an error retrieving Speedtest servers',
];
}
if (! $response->collect()->count() && is_numeric($search)) {
return collect([
[
'id' => $search,
'name' => $search.': No server found, manually add this ID.',
],
]);
}
return $response->collect()->map(function ($item) {
return [
'id' => $item['id'],
'name' => $item['id'].': '.$item['name'].' ('.$item['sponsor'].')',
];
})->pluck('name', 'id');
})
->columnSpan(2),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
])
->columnSpan([
'md' => 2,
]),
]),
];
return $response->collect()->mapWithKeys(function (array $item, int $key) {
return [$item['id'] => $item['id'].': '.$item['name'].' ('.$item['sponsor'].')'];
})->toArray();
}
}
+58 -76
View File
@@ -2,19 +2,14 @@
namespace App\Filament\Pages\Settings;
use App\Settings\GeneralSettings;
use App\Settings\InfluxDbSettings;
use Closure;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Pages\SettingsPage;
class InfluxDbPage extends SettingsPage
{
protected static ?string $navigationIcon = 'heroicon-o-database';
protected static ?string $navigationIcon = 'heroicon-o-circle-stack';
protected static ?string $navigationGroup = 'Settings';
@@ -26,75 +21,62 @@ class InfluxDbPage extends SettingsPage
protected static string $settings = InfluxDbSettings::class;
protected function getMaxContentWidth(): string
public function form(Form $form): Form
{
$settings = new GeneralSettings();
return $settings->content_width;
}
protected function getFormSchema(): array
{
return [
Grid::make([
'default' => 1,
'md' => 3,
])
->schema([
Grid::make([
'default' => 1,
])
->schema([
Section::make('InfluxDB v2 Settings')
->schema([
Toggle::make('v2_enabled')
->label('Enable')
->reactive()
->columnSpan(2),
Grid::make([
'default' => 1,
])
->hidden(fn (Closure $get) => $get('v2_enabled') !== true)
->schema([
TextInput::make('v2_url')
->label('URL')
->placeholder('http://your-influxdb-instance')
->maxLength(255)
->required(fn (Closure $get) => $get('v2_enabled') == true)
->columnSpan(['md' => 2]),
Checkbox::make('v2_verify_ssl')
->label('Verify SSL')
->columnSpan(['md' => 2]),
TextInput::make('v2_org')
->label('Org')
->maxLength(255)
->required(fn (Closure $get) => $get('v2_enabled') == true)
->columnSpan(1),
TextInput::make('v2_bucket')
->placeholder('speedtest-tracker')
->label('Bucket')
->maxLength(255)
->required(fn (Closure $get) => $get('v2_enabled') == true)
->columnSpan(1),
TextInput::make('v2_token')
->label('Token')
->maxLength(255)
->password()
->required(fn (Closure $get) => $get('v2_enabled') == true)
->disableAutocomplete()
->columnSpan(['md' => 2]),
]),
])
->compact()
->columns([
return $form
->schema([
Forms\Components\Grid::make([
'default' => 1,
])
->schema([
Forms\Components\Section::make('InfluxDB v2 Settings')
->schema([
Forms\Components\Toggle::make('v2_enabled')
->label('Enable')
->reactive()
->columnSpan(2),
Forms\Components\Grid::make([
'default' => 1,
'md' => 2,
]),
])
->columnSpan([
'md' => 2,
]),
]),
];
'md' => 3,
])
->hidden(fn (Forms\Get $get) => $get('v2_enabled') !== true)
->schema([
Forms\Components\TextInput::make('v2_url')
->label('URL')
->placeholder('http://your-influxdb-instance')
->maxLength(255)
->required(fn (Forms\Get $get) => $get('v2_enabled') == true)
->columnSpanFull(),
Forms\Components\Checkbox::make('v2_verify_ssl')
->label('Verify SSL')
->columnSpanFull(),
Forms\Components\TextInput::make('v2_org')
->label('Org')
->maxLength(255)
->required(fn (Forms\Get $get) => $get('v2_enabled') == true)
->columnSpan(['md' => 2]),
Forms\Components\TextInput::make('v2_bucket')
->placeholder('speedtest-tracker')
->label('Bucket')
->maxLength(255)
->required(fn (Forms\Get $get) => $get('v2_enabled') == true)
->columnSpan(['md' => 1]),
Forms\Components\TextInput::make('v2_token')
->label('Token')
->maxLength(255)
->password()
->required(fn (Forms\Get $get) => $get('v2_enabled') == true)
->disableAutocomplete()
->columnSpanFull(),
]),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
])
->columnSpan('full'),
]);
}
}
+134 -148
View File
@@ -7,17 +7,9 @@ use App\Forms\Components\TestMailNotification;
use App\Forms\Components\TestTelegramNotification;
use App\Mail\Test;
use App\Notifications\Telegram\TestNotification as TelegramTestNotification;
use App\Settings\GeneralSettings;
use App\Settings\NotificationSettings;
use Closure;
use Filament\Forms\Components\Card;
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Components\View;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Notifications\Notification;
use Filament\Pages\SettingsPage;
use Illuminate\Support\Facades\Mail;
@@ -37,147 +29,141 @@ class NotificationPage extends SettingsPage
protected static string $settings = NotificationSettings::class;
protected function getMaxContentWidth(): string
public function form(Form $form): Form
{
$settings = new GeneralSettings();
return $settings->content_width;
}
protected function getFormSchema(): array
{
return [
Grid::make([
'default' => 1,
'md' => 3,
])
->schema([
Grid::make([
'default' => 1,
])
->schema([
Section::make('Database')
->description('Notifications sent to this channel will show up under the 🔔 icon in the header.')
->schema([
Toggle::make('database_enabled')
->label('Enable database notifications')
->reactive()
->columnSpan(2),
Grid::make([
'default' => 1,
])
->hidden(fn (Closure $get) => $get('database_enabled') !== true)
->schema([
Fieldset::make('Triggers')
->schema([
Toggle::make('database_on_speedtest_run')
->label('Notify on every speedtest run')
->columnSpan(2),
Toggle::make('database_on_threshold_failure')
->label('Notify on threshold failures')
->columnSpan(2),
]),
TestDatabaseNotification::make('test channel'),
]),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
Section::make('Mail')
->schema([
Toggle::make('mail_enabled')
->label('Enable mail notifications')
->reactive()
->columnSpan(2),
Grid::make([
'default' => 1,
])
->schema([
Fieldset::make('Triggers')
->schema([
Toggle::make('mail_on_speedtest_run')
->label('Notify on every speedtest run')
->columnSpan(2),
Toggle::make('mail_on_threshold_failure')
->label('Notify on threshold failures')
->columnSpan(2),
]),
])
->hidden(fn (Closure $get) => $get('mail_enabled') !== true),
Repeater::make('mail_recipients')
->label('Recipients')
->schema([
TextInput::make('email_address')
->email()
->required(),
])
->hidden(fn (Closure $get) => $get('mail_enabled') !== true)
->columnSpan(['md' => 2]),
TestMailNotification::make('test channel')
->hidden(fn (Closure $get) => $get('mail_enabled') !== true),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
Section::make('Telegram')
->schema([
Toggle::make('telegram_enabled')
->label('Enable telegram notifications')
->reactive()
->columnSpan(2),
Grid::make([
'default' => 1, ])
->hidden(fn (Closure $get) => $get('telegram_enabled') !== true)
->schema([
Fieldset::make('Triggers')
->schema([
Toggle::make('telegram_on_speedtest_run')
->label('Notify on every speedtest run')
->columnSpan(2),
Toggle::make('telegram_on_threshold_failure')
->label('Notify on threshold failures')
->columnSpan(2),
]),
]),
Repeater::make('telegram_recipients')
->label('Recipients')
->schema([
TextInput::make('telegram_chat_id')
->maxLength(50)
->required()
->columnSpan(['md' => 2]),
])
->hidden(fn (Closure $get) => $get('telegram_enabled') !== true)
->columnSpan(['md' => 2]),
TestTelegramNotification::make('test channel')
->hidden(fn (Closure $get) => $get('telegram_enabled') !== true),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
return $form
->schema([
Forms\Components\Grid::make([
'default' => 1,
'md' => 3,
])
->schema([
Forms\Components\Grid::make([
'default' => 1,
])
->columnSpan([
'md' => 2,
]),
->schema([
Forms\Components\Section::make('Database')
->description('Notifications sent to this channel will show up under the 🔔 icon in the header.')
->schema([
Forms\Components\Toggle::make('database_enabled')
->label('Enable database notifications')
->reactive()
->columnSpan(2),
Forms\Components\Grid::make([
'default' => 1,
])
->hidden(fn (Forms\Get $get) => $get('database_enabled') !== true)
->schema([
Forms\Components\Fieldset::make('Triggers')
->schema([
Forms\Components\Toggle::make('database_on_speedtest_run')
->label('Notify on every speedtest run')
->columnSpan(2),
Forms\Components\Toggle::make('database_on_threshold_failure')
->label('Notify on threshold failures')
->columnSpan(2),
]),
TestDatabaseNotification::make('test channel'),
]),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
Card::make()
->schema([
View::make('filament.forms.notifications-helptext'),
])
->columnSpan([
'md' => 1,
]),
]),
];
Forms\Components\Section::make('Mail')
->schema([
Forms\Components\Toggle::make('mail_enabled')
->label('Enable mail notifications')
->reactive()
->columnSpan(2),
Forms\Components\Grid::make([
'default' => 1,
])
->schema([
Forms\Components\Fieldset::make('Triggers')
->schema([
Forms\Components\Toggle::make('mail_on_speedtest_run')
->label('Notify on every speedtest run')
->columnSpan(2),
Forms\Components\Toggle::make('mail_on_threshold_failure')
->label('Notify on threshold failures')
->columnSpan(2),
]),
])
->hidden(fn (Forms\Get $get) => $get('mail_enabled') !== true),
Forms\Components\Repeater::make('mail_recipients')
->label('Recipients')
->schema([
Forms\Components\TextInput::make('email_address')
->email()
->required(),
])
->hidden(fn (Forms\Get $get) => $get('mail_enabled') !== true)
->columnSpan(['md' => 2]),
TestMailNotification::make('test channel')
->hidden(fn (Forms\Get $get) => $get('mail_enabled') !== true),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
Forms\Components\Section::make('Telegram')
->schema([
Forms\Components\Toggle::make('telegram_enabled')
->label('Enable telegram notifications')
->reactive()
->columnSpan(2),
Forms\Components\Grid::make([
'default' => 1, ])
->hidden(fn (Forms\Get $get) => $get('telegram_enabled') !== true)
->schema([
Forms\Components\Fieldset::make('Triggers')
->schema([
Forms\Components\Toggle::make('telegram_on_speedtest_run')
->label('Notify on every speedtest run')
->columnSpan(2),
Forms\Components\Toggle::make('telegram_on_threshold_failure')
->label('Notify on threshold failures')
->columnSpan(2),
]),
]),
Forms\Components\Repeater::make('telegram_recipients')
->label('Recipients')
->schema([
Forms\Components\TextInput::make('telegram_chat_id')
->maxLength(50)
->required()
->columnSpan(['md' => 2]),
])
->hidden(fn (Forms\Get $get) => $get('telegram_enabled') !== true)
->columnSpan(['md' => 2]),
TestTelegramNotification::make('test channel')
->hidden(fn (Forms\Get $get) => $get('telegram_enabled') !== true),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
])
->columnSpan([
'md' => 2,
]),
Forms\Components\Section::make()
->schema([
Forms\Components\View::make('filament.forms.notifications-helptext'),
])
->columnSpan([
'md' => 1,
]),
]),
]);
}
public function sendTestDatabaseNotification(): void
+77 -90
View File
@@ -2,21 +2,14 @@
namespace App\Filament\Pages\Settings;
use App\Settings\GeneralSettings;
use App\Settings\ThresholdSettings;
use Closure;
use Filament\Forms\Components\Card;
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Components\View;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Pages\SettingsPage;
class ThresholdsPage extends SettingsPage
{
protected static ?string $navigationIcon = 'heroicon-o-exclamation';
protected static ?string $navigationIcon = 'heroicon-o-exclamation-triangle';
protected static ?string $navigationGroup = 'Settings';
@@ -28,88 +21,82 @@ class ThresholdsPage extends SettingsPage
protected static string $settings = ThresholdSettings::class;
protected function getMaxContentWidth(): string
public function form(Form $form): Form
{
$settings = new GeneralSettings();
return $settings->content_width;
}
protected function getFormSchema(): array
{
return [
Grid::make([
'default' => 1,
'md' => 3,
])
->schema([
Grid::make([
'default' => 1,
])
->schema([
Section::make('Absolute')
->description('Absolute thresholds do not take into account previous history and could be triggered on each test.')
->schema([
Toggle::make('absolute_enabled')
->label('Enable absolute thresholds')
->reactive()
->columnSpan(2),
Grid::make([
'default' => 1,
return $form
->schema([
Forms\Components\Grid::make([
'default' => 1,
'md' => 3,
])
->schema([
Forms\Components\Grid::make([
'default' => 1,
])
->schema([
Forms\Components\Section::make('Absolute')
->description('Absolute thresholds do not take into account previous history and could be triggered on each test.')
->schema([
Forms\Components\Toggle::make('absolute_enabled')
->label('Enable absolute thresholds')
->reactive()
->columnSpan(2),
Forms\Components\Grid::make([
'default' => 1,
])
->hidden(fn (Forms\Get $get) => $get('absolute_enabled') !== true)
->schema([
Forms\Components\Fieldset::make('Metrics')
->schema([
Forms\Components\TextInput::make('absolute_download')
->label('Download')
->hint('Mbps')
->helperText('Set to zero to disable this metric.')
->default(0)
->minValue(0)
->numeric()
->required(),
Forms\Components\TextInput::make('absolute_upload')
->label('Upload')
->hint('Mbps')
->helperText('Set to zero to disable this metric.')
->default(0)
->minValue(0)
->numeric()
->required(),
Forms\Components\TextInput::make('absolute_ping')
->label('Ping')
->hint('Ms')
->helperText('Set to zero to disable this metric.')
->default(0)
->minValue(0)
->numeric()
->required(),
])
->columns([
'default' => 1,
'md' => 2,
]),
]),
])
->hidden(fn (Closure $get) => $get('absolute_enabled') !== true)
->schema([
Fieldset::make('Metrics')
->schema([
TextInput::make('absolute_download')
->label('Download')
->hint('Mbps')
->helperText('Set to zero to disable this metric.')
->default(0)
->minValue(0)
->numeric()
->required(),
TextInput::make('absolute_upload')
->label('Upload')
->hint('Mbps')
->helperText('Set to zero to disable this metric.')
->default(0)
->minValue(0)
->numeric()
->required(),
TextInput::make('absolute_ping')
->label('Ping')
->hint('Ms')
->helperText('Set to zero to disable this metric.')
->default(0)
->minValue(0)
->numeric()
->required(),
])
->columns([
'default' => 1,
'md' => 2,
]),
]),
])
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
])
->columnSpan([
'md' => 2,
]),
->compact()
->columns([
'default' => 1,
'md' => 2,
]),
])
->columnSpan([
'md' => 2,
]),
Card::make()
->schema([
View::make('filament.forms.thresholds-helptext'),
])
->columnSpan([
'md' => 1,
]),
]),
];
Forms\Components\Section::make()
->schema([
Forms\Components\View::make('filament.forms.thresholds-helptext'),
])
->columnSpan([
'md' => 1,
]),
]),
]);
}
}
+6 -6
View File
@@ -9,13 +9,13 @@ use App\Settings\GeneralSettings;
use Carbon\Carbon;
use Filament\Forms;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Form;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Maatwebsite\Excel\Facades\Excel;
@@ -24,7 +24,7 @@ class ResultResource extends Resource
{
protected static ?string $model = Result::class;
protected static ?string $navigationIcon = 'heroicon-o-table';
protected static ?string $navigationIcon = 'heroicon-o-table-cells';
protected static ?string $navigationLabel = 'Results';
@@ -76,7 +76,7 @@ class ResultResource extends Resource
->label('Ping (Ms)'),
])
->columnSpan(2),
Forms\Components\Card::make()
Forms\Components\Section::make()
->schema([
Forms\Components\Checkbox::make('successful'),
Forms\Components\Checkbox::make('scheduled'),
@@ -167,7 +167,7 @@ class ResultResource extends Resource
->openUrlInNewTab(),
Tables\Actions\ViewAction::make(),
Tables\Actions\Action::make('updateComments')
->icon('heroicon-o-annotation')
->icon('heroicon-o-chat-bubble-bottom-center-text')
->mountUsing(fn (Forms\ComponentContainer $form, Result $record) => $form->fill([
'comments' => $record->comments,
]))
@@ -187,7 +187,7 @@ class ResultResource extends Resource
->bulkActions([
Tables\Actions\BulkAction::make('export')
->label('Export selected')
->icon('heroicon-o-download')
->icon('heroicon-o-arrow-down-tray')
->action(function (Collection $records) {
$export = new ResultsSelectedBulkExport($records->toArray());
@@ -3,7 +3,6 @@
namespace App\Filament\Resources\ResultResource\Pages;
use App\Filament\Resources\ResultResource;
use App\Settings\GeneralSettings;
use Filament\Resources\Pages\ListRecords;
class ListResults extends ListRecords
@@ -15,13 +14,6 @@ class ListResults extends ListRecords
return config('speedtest.results_polling');
}
protected function getMaxContentWidth(): string
{
$settings = new GeneralSettings();
return $settings->content_width;
}
protected function getHeaderWidgets(): array
{
return ResultResource::getWidgets();
+66 -52
View File
@@ -6,16 +6,11 @@ use App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource\Pages\CreateUser;
use App\Filament\Resources\UserResource\Pages\EditUser;
use App\Models\User;
use Filament\Forms\Components\Card;
use Filament\Forms\Components\Group;
use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Form;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\HtmlString;
use Illuminate\Validation\Rules\Password;
@@ -26,7 +21,7 @@ class UserResource extends Resource
protected static ?string $navigationGroup = 'System';
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?int $navigationSort = 0;
@@ -36,65 +31,84 @@ class UserResource extends Resource
{
return $form
->schema([
'left' => Card::make([
'name' => TextInput::make('name')
->required(),
'email' => TextInput::make('email')
->required()
->email()
->unique(ignoreRecord: true),
'password' => TextInput::make('password')
->required()
->password()
->dehydrateStateUsing(fn ($state) => Hash::make($state))
->visible(fn ($livewire) => $livewire instanceof CreateUser)
->rule(Password::default()),
'new_password_group' => Group::make([
'new_password' => TextInput::make('new_password')
->password()
->label('New Password')
->nullable()
->rule(Password::default())
->visible(fn ($livewire) => $livewire instanceof EditUser)
->dehydrated(false),
'new_password_confirmation' => TextInput::make('new_password_confirmation')
->password()
->label('Confirm New Password')
->rule('required', fn ($get) => (bool) $get('new_password'))
->same('new_password')
->visible(fn ($livewire) => $livewire instanceof EditUser)
->dehydrated(false),
Forms\Components\Grid::make([
'default' => 1,
'md' => 3,
])
->schema([
Forms\Components\Section::make()
->schema([
Forms\Components\TextInput::make('name')
->required(),
Forms\Components\TextInput::make('email')
->required()
->email()
->unique(ignoreRecord: true),
Forms\Components\TextInput::make('password')
->required()
->password()
->dehydrateStateUsing(fn ($state) => Hash::make($state))
->visible(fn ($livewire) => $livewire instanceof CreateUser)
->rule(Password::default()),
Forms\Components\TextInput::make('new_password')
->password()
->label('New Password')
->nullable()
->rule(Password::default())
->visible(fn ($livewire) => $livewire instanceof EditUser)
->dehydrated(false),
Forms\Components\TextInput::make('new_password_confirmation')
->password()
->label('Confirm New Password')
->rule('required', fn ($get) => (bool) $get('new_password'))
->same('new_password')
->visible(fn ($livewire) => $livewire instanceof EditUser)
->dehydrated(false),
])
->columns('full')
->columnSpan([
'md' => 2,
]),
Forms\Components\Section::make()
->schema([
Forms\Components\Placeholder::make('created_at')
->content(fn ($record) => $record?->created_at?->diffForHumans() ?? new HtmlString('—')),
Forms\Components\Placeholder::make('updated_at')
->content(fn ($record) => $record?->updated_at?->diffForHumans() ?? new HtmlString('—')),
])
->columns('full')
->columnSpan(1),
]),
])->columnSpan(8),
'right' => Card::make([
'created_at' => Placeholder::make('created_at')
->content(fn ($record) => $record?->created_at?->diffForHumans() ?? new HtmlString('—')),
])->columnSpan(4),
])
->columns(12);
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('name'),
TextColumn::make('email'),
TextColumn::make('email_verified_at')
Tables\Columns\TextColumn::make('name')
->searchable(),
Tables\Columns\TextColumn::make('email')
->searchable(),
Tables\Columns\TextColumn::make('email_verified_at')
->dateTime(),
TextColumn::make('created_at')
Tables\Columns\TextColumn::make('created_at')
->dateTime(),
TextColumn::make('updated_at')
Tables\Columns\TextColumn::make('updated_at')
->dateTime(),
])
->filters([
//
])
->actions([
EditAction::make(),
Tables\Actions\EditAction::make(),
])
->bulkActions([
DeleteBulkAction::make(),
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make()
->requiresConfirmation(),
]),
]);
}
@@ -3,17 +3,9 @@
namespace App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource;
use App\Settings\GeneralSettings;
use Filament\Resources\Pages\CreateRecord;
class CreateUser extends CreateRecord
{
protected static string $resource = UserResource::class;
protected function getMaxContentWidth(): string
{
$settings = new GeneralSettings();
return $settings->content_width;
}
}
@@ -3,8 +3,7 @@
namespace App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource;
use App\Settings\GeneralSettings;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
use Illuminate\Support\Facades\Hash;
@@ -12,14 +11,7 @@ class EditUser extends EditRecord
{
protected static string $resource = UserResource::class;
protected function getMaxContentWidth(): string
{
$settings = new GeneralSettings();
return $settings->content_width;
}
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,22 +3,14 @@
namespace App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource;
use App\Settings\GeneralSettings;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListUsers extends ListRecords
{
protected static string $resource = UserResource::class;
protected function getMaxContentWidth(): string
{
$settings = new GeneralSettings();
return $settings->content_width;
}
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -0,0 +1,18 @@
<?php
use Awcodes\FilamentVersions\Providers\Contracts\VersionProvider;
class SpeedtestTrackerVersionProvider implements VersionProvider
{
public function getName(): string
{
return 'App';
}
public function getVersion(): string
{
return app()->isProduction()
? config('speedtest.build_version')
: config('app.env');
}
}
@@ -4,10 +4,12 @@ namespace App\Filament\Widgets;
use App\Models\Result;
use App\Settings\GeneralSettings;
use Filament\Widgets\LineChartWidget;
use Filament\Widgets\ChartWidget;
class RecentJitterChart extends LineChartWidget
class RecentJitterChartWidget extends ChartWidget
{
protected static ?string $heading = 'Jitter';
protected int|string|array $columnSpan = 'full';
protected static ?string $maxHeight = '300px';
@@ -19,11 +21,6 @@ class RecentJitterChart extends LineChartWidget
return config('speedtest.dashboard_polling');
}
protected function getHeading(): string
{
return 'Jitter';
}
protected function getFilters(): ?array
{
return [
@@ -83,4 +80,9 @@ class RecentJitterChart extends LineChartWidget
'labels' => $results->map(fn ($item) => $item->created_at->timezone($settings->timezone)->format('M d - G:i')),
];
}
protected function getType(): string
{
return 'line';
}
}
@@ -4,10 +4,12 @@ namespace App\Filament\Widgets;
use App\Models\Result;
use App\Settings\GeneralSettings;
use Filament\Widgets\LineChartWidget;
use Filament\Widgets\ChartWidget;
class RecentPingChart extends LineChartWidget
class RecentPingChartWidget extends ChartWidget
{
protected static ?string $heading = 'Ping (ms)';
protected int|string|array $columnSpan = 'full';
protected static ?string $maxHeight = '300px';
@@ -19,11 +21,6 @@ class RecentPingChart extends LineChartWidget
return config('speedtest.dashboard_polling');
}
protected function getHeading(): string
{
return 'Ping (ms)';
}
protected function getFilters(): ?array
{
return [
@@ -65,4 +62,9 @@ class RecentPingChart extends LineChartWidget
'labels' => $results->map(fn ($item) => $item->created_at->timezone($settings->timezone)->format('M d - G:i')),
];
}
protected function getType(): string
{
return 'line';
}
}
@@ -4,10 +4,12 @@ namespace App\Filament\Widgets;
use App\Models\Result;
use App\Settings\GeneralSettings;
use Filament\Widgets\LineChartWidget;
use Filament\Widgets\ChartWidget;
class RecentSpeedChart extends LineChartWidget
class RecentSpeedChartWidget extends ChartWidget
{
protected static ?string $heading = 'Download / Upload';
protected int|string|array $columnSpan = 'full';
protected static ?string $maxHeight = '300px';
@@ -19,11 +21,6 @@ class RecentSpeedChart extends LineChartWidget
return config('speedtest.dashboard_polling');
}
protected function getHeading(): string
{
return 'Download / Upload';
}
protected function getFilters(): ?array
{
return [
@@ -74,4 +71,9 @@ class RecentSpeedChart extends LineChartWidget
'labels' => $results->map(fn ($item) => $item->created_at->timezone($settings->timezone)->format('M d - G:i')),
];
}
protected function getType(): string
{
return 'line';
}
}
-69
View File
@@ -1,69 +0,0 @@
<?php
namespace App\Filament\Widgets;
use App\Models\Result;
use App\Settings\GeneralSettings;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Card;
class StatsOverview extends BaseWidget
{
protected function getPollingInterval(): ?string
{
return config('speedtest.dashboard_polling');
}
protected function getCards(): array
{
$result = Result::latest()->first();
$settings = new GeneralSettings();
if (! $result || ! $result->successful) {
return [
Card::make('Latest download', '-')
->icon('heroicon-o-download'),
Card::make('Latest upload', '-')
->icon('heroicon-o-upload'),
Card::make('Latest ping', '-')
->icon('heroicon-o-clock'),
];
}
$previous = $result->previous();
if (! $previous || ! $previous->successful) {
return [
Card::make('Latest download', fn (): string => ! blank($result) ? toBits(convertSize($result->download), 2).' (Mbps)' : 'n/a')
->icon('heroicon-o-download'),
Card::make('Latest upload', fn (): string => ! blank($result) ? toBits(convertSize($result->upload), 2).' (Mbps)' : 'n/a')
->icon('heroicon-o-upload'),
Card::make('Latest ping', fn (): string => ! blank($result) ? number_format($result->ping, 2).' (ms)' : 'n/a')
->icon('heroicon-o-clock'),
];
}
$downloadChange = percentChange($result->download, $previous->download, 2);
$uploadChange = percentChange($result->upload, $previous->upload, 2);
$pingChange = percentChange($result->ping, $previous->ping, 2);
return [
Card::make('Latest download', fn (): string => ! blank($result) ? toBits(convertSize($result->download), 2).' (Mbps)' : 'n/a')
->icon('heroicon-o-download')
->description($downloadChange > 0 ? $downloadChange.'% faster' : abs($downloadChange).'% slower')
->descriptionIcon($downloadChange > 0 ? 'heroicon-s-trending-up' : 'heroicon-s-trending-down')
->color($downloadChange > 0 ? 'success' : 'danger'),
Card::make('Latest upload', fn (): string => ! blank($result) ? toBits(convertSize($result->upload), 2).' (Mbps)' : 'n/a')
->icon('heroicon-o-upload')
->description($uploadChange > 0 ? $uploadChange.'% faster' : abs($uploadChange).'% slower')
->descriptionIcon($uploadChange > 0 ? 'heroicon-s-trending-up' : 'heroicon-s-trending-down')
->color($uploadChange > 0 ? 'success' : 'danger'),
Card::make('Latest ping', fn (): string => ! blank($result) ? number_format($result->ping, 2).' (ms)' : 'n/a')
->icon('heroicon-o-clock')
->description($pingChange > 0 ? $pingChange.'% slower' : abs($pingChange).'% faster')
->descriptionIcon($pingChange > 0 ? 'heroicon-s-trending-up' : 'heroicon-s-trending-down')
->color($pingChange > 0 ? 'danger' : 'success'),
];
}
}
@@ -0,0 +1,73 @@
<?php
namespace App\Filament\Widgets;
use App\Models\Result;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
class StatsOverviewWidget extends BaseWidget
{
public ?Result $result = null;
protected function getPollingInterval(): ?string
{
return config('speedtest.dashboard_polling');
}
protected function getCards(): array
{
$this->result = Result::query()
->latest()
->first();
if (blank($this->result) || ! $this->result->successful) {
return [
Stat::make('Latest download', '-')
->icon('heroicon-o-arrow-down-tray'),
Stat::make('Latest upload', '-')
->icon('heroicon-o-arrow-up-tray'),
Stat::make('Latest ping', '-')
->icon('heroicon-o-clock'),
];
}
$previous = Result::query()
->where('id', '<', $this->result->id)
->latest()
->first();
if (! $previous || ! $previous->successful) {
return [
Stat::make('Latest download', fn (): string => ! blank($this->result) ? toBits(convertSize($this->result->download), 2).' (Mbps)' : 'n/a')
->icon('heroicon-o-arrow-down-tray'),
Stat::make('Latest upload', fn (): string => ! blank($this->result) ? toBits(convertSize($this->result->upload), 2).' (Mbps)' : 'n/a')
->icon('heroicon-o-arrow-up-tray'),
Stat::make('Latest ping', fn (): string => ! blank($this->result) ? number_format($this->result->ping, 2).' (ms)' : 'n/a')
->icon('heroicon-o-clock'),
];
}
$downloadChange = percentChange($this->result->download, $previous->download, 2);
$uploadChange = percentChange($this->result->upload, $previous->upload, 2);
$pingChange = percentChange($this->result->ping, $previous->ping, 2);
return [
Stat::make('Latest download', fn (): string => ! blank($this->result) ? toBits(convertSize($this->result->download), 2).' (Mbps)' : 'n/a')
->icon('heroicon-o-arrow-down-tray')
->description($downloadChange > 0 ? $downloadChange.'% faster' : abs($downloadChange).'% slower')
->descriptionIcon($downloadChange > 0 ? 'heroicon-m-arrow-trending-up' : 'heroicon-m-arrow-trending-down')
->color($downloadChange > 0 ? 'success' : 'danger'),
Stat::make('Latest upload', fn (): string => ! blank($this->result) ? toBits(convertSize($this->result->upload), 2).' (Mbps)' : 'n/a')
->icon('heroicon-o-arrow-up-tray')
->description($uploadChange > 0 ? $uploadChange.'% faster' : abs($uploadChange).'% slower')
->descriptionIcon($uploadChange > 0 ? 'heroicon-m-arrow-trending-up' : 'heroicon-m-arrow-trending-down')
->color($uploadChange > 0 ? 'success' : 'danger'),
Stat::make('Latest ping', fn (): string => ! blank($this->result) ? number_format($this->result->ping, 2).' (ms)' : 'n/a')
->icon('heroicon-o-clock')
->description($pingChange > 0 ? $pingChange.'% slower' : abs($pingChange).'% faster')
->descriptionIcon($pingChange > 0 ? 'heroicon-m-arrow-trending-up' : 'heroicon-m-arrow-trending-down')
->color($pingChange > 0 ? 'danger' : 'success'),
];
}
}
-10
View File
@@ -106,14 +106,4 @@ class Result extends Model
'ping' => $data['ping']['jitter'] ?? null,
];
}
/**
* Return the previous test result.
*/
public function previous(): ?self
{
return static::orderByDesc('id')
->where('id', '<', $this->id)
->first();
}
}
+2 -1
View File
@@ -5,6 +5,7 @@ namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
@@ -48,7 +49,7 @@ class User extends Authenticatable implements FilamentUser
/**
* Any user can access the Filament admin panel.
*/
public function canAccessFilament(): bool
public function canAccessPanel(Panel $panel): bool
{
return true;
}
@@ -0,0 +1,95 @@
<?php
namespace App\Providers\Filament;
use Awcodes\FilamentVersions\VersionsPlugin;
use Filament\FontProviders\LocalFontProvider;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Navigation\NavigationGroup;
use Filament\Navigation\NavigationItem;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
use SpeedtestTrackerVersionProvider;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->default()
->id('admin')
->path('admin')
->login()
->colors([
'primary' => Color::Amber,
])
->font(
'Inter',
url: asset('fonts/inter/inter.css'),
provider: LocalFontProvider::class,
)
->viteTheme('resources/css/filament/admin/theme.css')
->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
->pages([])
->plugins([
VersionsPlugin::make()
->hasDefaults(false)
->items([
new SpeedtestTrackerVersionProvider(),
]),
])
->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
->widgets([])
->databaseNotifications()
->databaseNotificationsPolling(config('speedtest.notification_polling'))
->maxContentWidth(config('speedtest.content_width'))
->middleware([
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
DisableBladeIconComponents::class,
DispatchServingFilamentEvent::class,
])
->authMiddleware([
Authenticate::class,
])
->navigationGroups([
NavigationGroup::make()
->label('Settings'),
NavigationGroup::make()
->label('System'),
NavigationGroup::make()
->label('Links')
->collapsible(false),
])
->navigationItems([
NavigationItem::make('Documentation')
->url('https://docs.speedtest-tracker.dev/', shouldOpenInNewTab: true)
->icon('heroicon-o-book-open')
->group('Links'),
NavigationItem::make('Donate')
->url('https://github.com/sponsors/alexjustesen', shouldOpenInNewTab: true)
->icon('heroicon-o-banknotes')
->group('Links'),
NavigationItem::make('GitHub')
->url('https://github.com/alexjustesen/speedtest-tracker', shouldOpenInNewTab: true)
->icon('heroicon-o-code-bracket')
->group('Links'),
]);
}
}
-60
View File
@@ -1,60 +0,0 @@
<?php
namespace App\Providers;
use App\Settings\GeneralSettings;
use Filament\Facades\Filament;
use Filament\Navigation\NavigationItem;
use FilamentVersions\Facades\FilamentVersions;
use Illuminate\Support\ServiceProvider;
class FilamentServiceProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
//
}
/**
* Bootstrap services.
*/
public function boot(): void
{
try {
config(['filament.brand' => app(GeneralSettings::class)->site_name ?? config('app.name')]);
} catch (\Throwable $th) {
// if this fails it's because the migration doesn't exist so it can be skipped
}
FilamentVersions::addItem('Speedtest Tracker', 'v'.config('speedtest.build_version'));
Filament::serving(function () {
Filament::registerNavigationGroups([
'Settings',
'System',
'Links',
]);
Filament::registerNavigationItems([
NavigationItem::make('Documentation')
->url('https://docs.speedtest-tracker.dev/', shouldOpenInNewTab: true)
->icon('heroicon-o-book-open')
->group('Links')
->sort(0),
NavigationItem::make('Donate')
->url('https://github.com/sponsors/alexjustesen', shouldOpenInNewTab: true)
->icon('heroicon-o-cash')
->group('Links')
->sort(1),
NavigationItem::make('Source Code')
->url('https://github.com/alexjustesen/speedtest-tracker', shouldOpenInNewTab: true)
->icon('heroicon-o-code')
->group('Links')
->sort(2),
]);
});
}
}
-2
View File
@@ -8,8 +8,6 @@ class GeneralSettings extends Settings
{
public bool $auth_enabled;
public string $content_width;
public ?string $speedtest_schedule;
/** @var string[] */
+11 -12
View File
@@ -2,25 +2,23 @@
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": {
"php": "^8.1",
"awcodes/filament-versions": "^1.1.1",
"awcodes/filament-versions": "^2.0",
"chrisullyott/php-filesize": "^4.2.1",
"doctrine/dbal": "^3.6.6",
"dragonmantank/cron-expression": "^3.3.3",
"filament/filament": "^2.17.53",
"filament/spatie-laravel-settings-plugin": "^2.17.53",
"filament/filament": "^3.0.47",
"filament/spatie-laravel-settings-plugin": "^3.0.47",
"guzzlehttp/guzzle": "^7.8",
"influxdata/influxdb-client-php": "^3.4",
"laravel-notification-channels/telegram": "^4.0",
"laravel/framework": "^10.21.1",
"laravel/framework": "^10.22.0",
"laravel/sanctum": "^3.3.0",
"laravel/tinker": "^2.8.2",
"livewire/livewire": "^3.0.2",
"maatwebsite/excel": "^3.1.48",
"maennchen/zipstream-php": "^2.4",
"spatie/laravel-settings": "^2.8.3",
@@ -29,11 +27,11 @@
"require-dev": {
"barryvdh/laravel-ide-helper": "^2.13",
"fakerphp/faker": "^1.23.0",
"laravel/pint": "^1.12.0",
"laravel/sail": "^1.24.0",
"laravel/pint": "^1.13.1",
"laravel/sail": "^1.24.1",
"mockery/mockery": "^1.6.6",
"nunomaduro/collision": "^7.8.1",
"phpunit/phpunit": "^10.3.2",
"phpunit/phpunit": "^10.3.3",
"spatie/laravel-ignition": "^2.3"
},
"autoload": {
@@ -54,7 +52,8 @@
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
"@php artisan package:discover --ansi",
"@php artisan filament:upgrade"
],
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force",
Generated
+661 -325
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -161,7 +161,6 @@ return [
/*
* Package Service Providers...
*/
App\Providers\FilamentServiceProvider::class,
/*
* Application Service Providers...
@@ -170,6 +169,7 @@ return [
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\Filament\AdminPanelProvider::class,
App\Providers\RouteServiceProvider::class,
])->toArray(),
+4 -296
View File
@@ -1,199 +1,16 @@
<?php
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Http\Middleware\MirrorConfigToSubpackages;
use Filament\Widgets;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
return [
/*
|--------------------------------------------------------------------------
| Filament Path
|--------------------------------------------------------------------------
|
| The default is `admin` but you can change it to whatever works best and
| doesn't conflict with the routing in your application.
|
*/
'path' => env('FILAMENT_PATH', 'admin'),
/*
|--------------------------------------------------------------------------
| Filament Core Path
|--------------------------------------------------------------------------
|
| This is the path which Filament will use to load its core routes and assets.
| You may change it if it conflicts with your other routes.
|
*/
'core_path' => env('FILAMENT_CORE_PATH', 'filament'),
/*
|--------------------------------------------------------------------------
| Filament Domain
|--------------------------------------------------------------------------
|
| You may change the domain where Filament should be active. If the domain
| is empty, all domains will be valid.
|
*/
'domain' => env('FILAMENT_DOMAIN'),
/*
|--------------------------------------------------------------------------
| Homepage URL
|--------------------------------------------------------------------------
|
| This is the URL that Filament will redirect the user to when they click
| on the sidebar's header.
|
*/
'home_url' => '/admin',
/*
|--------------------------------------------------------------------------
| Brand Name
|--------------------------------------------------------------------------
|
| This will be displayed on the login page and in the sidebar's header.
|
*/
'brand' => env('APP_NAME'),
/*
|--------------------------------------------------------------------------
| Auth
|--------------------------------------------------------------------------
|
| This is the configuration that Filament will use to handle authentication
| into the admin panel.
|
*/
'auth' => [
'guard' => env('FILAMENT_AUTH_GUARD', 'web'),
'pages' => [
'login' => \Filament\Http\Livewire\Auth\Login::class,
],
],
/*
|--------------------------------------------------------------------------
| Pages
|--------------------------------------------------------------------------
|
| This is the namespace and directory that Filament will automatically
| register pages from. You may also register pages here.
|
*/
'pages' => [
'namespace' => 'App\\Filament\\Pages',
'path' => app_path('Filament/Pages'),
'register' => [
// Pages\Dashboard::class,
],
],
/*
|--------------------------------------------------------------------------
| Resources
|--------------------------------------------------------------------------
|
| This is the namespace and directory that Filament will automatically
| register resources from. You may also register resources here.
|
*/
'resources' => [
'namespace' => 'App\\Filament\\Resources',
'path' => app_path('Filament/Resources'),
'register' => [],
],
/*
|--------------------------------------------------------------------------
| Widgets
|--------------------------------------------------------------------------
|
| This is the namespace and directory that Filament will automatically
| register dashboard widgets from. You may also register widgets here.
|
*/
'widgets' => [
'namespace' => 'App\\Filament\\Widgets',
'path' => app_path('Filament/Widgets'),
'register' => [
Widgets\AccountWidget::class,
// Widgets\FilamentInfoWidget::class,
],
],
/*
|--------------------------------------------------------------------------
| Livewire
|--------------------------------------------------------------------------
|
| This is the namespace and directory that Filament will automatically
| register Livewire components inside.
|
*/
'livewire' => [
'namespace' => 'App\\Filament',
'path' => app_path('Filament'),
],
/*
|--------------------------------------------------------------------------
| Dark mode
|--------------------------------------------------------------------------
|
| By enabling this feature, your users are able to select between a light
| and dark appearance for the admin panel, or let their system decide.
|
*/
'dark_mode' => true,
/*
|--------------------------------------------------------------------------
| Database notifications
|--------------------------------------------------------------------------
|
| By enabling this feature, your users are able to open a slide-over within
| the admin panel to view their database notifications.
|
*/
'database_notifications' => [
'enabled' => true,
'polling_interval' => env('NOTIFICATION_POLLING', '60s'),
],
/*
|--------------------------------------------------------------------------
| Broadcasting
|--------------------------------------------------------------------------
|
| By uncommenting the Laravel Echo configuration, you may connect your
| admin panel to any Pusher-compatible websockets server.
| By uncommenting the Laravel Echo configuration, you may connect Filament
| to any Pusher-compatible websockets server.
|
| This will allow your admin panel to receive real-time notifications.
| This will allow your users to receive real-time notifications.
|
*/
@@ -208,73 +25,6 @@ return [
],
/*
|--------------------------------------------------------------------------
| Layout
|--------------------------------------------------------------------------
|
| This is the configuration for the general layout of the admin panel.
|
| You may configure the max content width from `xl` to `7xl`, or `full`
| for no max width.
|
*/
'layout' => [
'actions' => [
'modal' => [
'actions' => [
'alignment' => 'left',
],
],
],
'forms' => [
'actions' => [
'alignment' => 'left',
],
'have_inline_labels' => false,
],
'footer' => [
'should_show_logo' => true,
],
'max_content_width' => null,
'notifications' => [
'vertical_alignment' => 'bottom',
'alignment' => 'right',
],
'sidebar' => [
'is_collapsible_on_desktop' => true,
'groups' => [
'are_collapsible' => true,
],
'width' => null,
'collapsed_width' => null,
],
],
/*
|--------------------------------------------------------------------------
| Favicon
|--------------------------------------------------------------------------
|
| This is the path to the favicon used for pages in the admin panel.
|
*/
'favicon' => env('app.url').'/img/speedtest-tracker-icon.png',
/*
|--------------------------------------------------------------------------
| Default Avatar Provider
|--------------------------------------------------------------------------
|
| This is the service that will be used to retrieve default avatars if one
| has not been uploaded.
|
*/
'default_avatar_provider' => \Filament\AvatarProviders\UiAvatarsProvider::class,
/*
|--------------------------------------------------------------------------
| Default Filesystem Disk
@@ -285,48 +35,6 @@ return [
|
*/
'default_filesystem_disk' => env('FILAMENT_FILESYSTEM_DRIVER', 'public'),
/*
|--------------------------------------------------------------------------
| Google Fonts
|--------------------------------------------------------------------------
|
| This is the URL for Google Fonts that should be loaded. You may use any
| font, or set to `null` to prevent any Google Fonts from loading.
|
| When using a custom font, you should also set the font family in your
| custom theme's `tailwind.config.js` file.
|
*/
'google_fonts' => 'https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap',
/*
|--------------------------------------------------------------------------
| Middleware
|--------------------------------------------------------------------------
|
| You may customise the middleware stack that Filament uses to handle
| requests.
|
*/
'middleware' => [
'auth' => [
Authenticate::class,
],
'base' => [
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
DispatchServingFilamentEvent::class,
MirrorConfigToSubpackages::class,
],
],
'default_filesystem_disk' => env('FILAMENT_FILESYSTEM_DISK', 'public'),
];
+7
View File
@@ -10,10 +10,17 @@ return [
'build_version' => '0.12.0-beta.3',
/**
* General
*/
'content_width' => env('CONTENT_WIDTH', '7xl'),
/**
* Polling
*/
'dashboard_polling' => env('DASHBOARD_POLLING', '60s'),
'notification_polling' => env('NOTIFICATION_POLLING', '60s'),
'results_polling' => env('RESULTS_POLLING', null),
];
+1718
View File
File diff suppressed because it is too large Load Diff
+8 -5
View File
@@ -1,14 +1,17 @@
{
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build"
},
"devDependencies": {
"axios": "^0.27",
"laravel-vite-plugin": "^0.5.0",
"lodash": "^4.17.19",
"postcss": "^8.1.14",
"vite": "^3.0.0"
"@tailwindcss/forms": "^0.5.6",
"@tailwindcss/typography": "^0.5.10",
"autoprefixer": "^10.4.15",
"laravel-vite-plugin": "^0.7.3",
"postcss": "^8.4.29",
"tailwindcss": "^3.3.3",
"vite": "^4.0.0"
}
}
+6
View File
@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
File diff suppressed because one or more lines are too long
+7
View File
@@ -0,0 +1,7 @@
{
"resources/css/filament/admin/theme.css": {
"file": "assets/theme-03c153f0.css",
"isEntry": true,
"src": "resources/css/filament/admin/theme.css"
}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}.tippy-box[data-theme~=light]{color:#26323d;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926;background-color:#fff}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+200
View File
@@ -0,0 +1,200 @@
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 100;
font-display: swap;
src: url("Inter-Thin.woff2?v=3.19") format("woff2"),
url("Inter-Thin.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 100;
font-display: swap;
src: url("Inter-ThinItalic.woff2?v=3.19") format("woff2"),
url("Inter-ThinItalic.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 200;
font-display: swap;
src: url("Inter-ExtraLight.woff2?v=3.19") format("woff2"),
url("Inter-ExtraLight.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 200;
font-display: swap;
src: url("Inter-ExtraLightItalic.woff2?v=3.19") format("woff2"),
url("Inter-ExtraLightItalic.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url("Inter-Light.woff2?v=3.19") format("woff2"),
url("Inter-Light.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 300;
font-display: swap;
src: url("Inter-LightItalic.woff2?v=3.19") format("woff2"),
url("Inter-LightItalic.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("Inter-Regular.woff2?v=3.19") format("woff2"),
url("Inter-Regular.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 400;
font-display: swap;
src: url("Inter-Italic.woff2?v=3.19") format("woff2"),
url("Inter-Italic.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("Inter-Medium.woff2?v=3.19") format("woff2"),
url("Inter-Medium.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 500;
font-display: swap;
src: url("Inter-MediumItalic.woff2?v=3.19") format("woff2"),
url("Inter-MediumItalic.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("Inter-SemiBold.woff2?v=3.19") format("woff2"),
url("Inter-SemiBold.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 600;
font-display: swap;
src: url("Inter-SemiBoldItalic.woff2?v=3.19") format("woff2"),
url("Inter-SemiBoldItalic.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("Inter-Bold.woff2?v=3.19") format("woff2"),
url("Inter-Bold.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 700;
font-display: swap;
src: url("Inter-BoldItalic.woff2?v=3.19") format("woff2"),
url("Inter-BoldItalic.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 800;
font-display: swap;
src: url("Inter-ExtraBold.woff2?v=3.19") format("woff2"),
url("Inter-ExtraBold.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 800;
font-display: swap;
src: url("Inter-ExtraBoldItalic.woff2?v=3.19") format("woff2"),
url("Inter-ExtraBoldItalic.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 900;
font-display: swap;
src: url("Inter-Black.woff2?v=3.19") format("woff2"),
url("Inter-Black.woff?v=3.19") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 900;
font-display: swap;
src: url("Inter-BlackItalic.woff2?v=3.19") format("woff2"),
url("Inter-BlackItalic.woff?v=3.19") format("woff");
}
/* -------------------------------------------------------
Variable font.
Usage:
html { font-family: 'Inter', sans-serif; }
@supports (font-variation-settings: normal) {
html { font-family: 'Inter var', sans-serif; }
}
*/
@font-face {
font-family: 'Inter var';
font-weight: 100 900;
font-display: swap;
font-style: normal;
font-named-instance: 'Regular';
src: url("Inter-roman.var.woff2?v=3.19") format("woff2");
}
@font-face {
font-family: 'Inter var';
font-weight: 100 900;
font-display: swap;
font-style: italic;
font-named-instance: 'Italic';
src: url("Inter-italic.var.woff2?v=3.19") format("woff2");
}
/* --------------------------------------------------------------------------
[EXPERIMENTAL] Multi-axis, single variable font.
Slant axis is not yet widely supported (as of February 2019) and thus this
multi-axis single variable font is opt-in rather than the default.
When using this, you will probably need to set font-variation-settings
explicitly, e.g.
* { font-variation-settings: "slnt" 0deg }
.italic { font-variation-settings: "slnt" 10deg }
*/
@font-face {
font-family: 'Inter var experimental';
font-weight: 100 900;
font-display: swap;
font-style: oblique 0deg 10deg;
src: url("Inter.var.woff2?v=3.19") format("woff2");
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
function r({state:i}){return{state:i,rows:[],shouldUpdateRows:!0,init:function(){this.updateRows(),this.rows.length<=0&&this.addRow(),this.updateState(),this.$watch("state",(t,e)=>{let s=o=>o===null?0:Array.isArray(o)?o.length:typeof o!="object"?0:Object.keys(o).length;s(t)===0&&s(e)===0||this.updateRows()})},addRow:function(){this.rows.push({key:"",value:""}),this.updateState()},deleteRow:function(t){this.rows.splice(t,1),this.rows.length<=0&&this.addRow(),this.updateState()},reorderRows:function(t){let e=Alpine.raw(this.rows),s=e.splice(t.oldIndex,1)[0];e.splice(t.newIndex,0,s),this.rows=e,this.updateState()},updateRows:function(){if(!this.shouldUpdateRows){this.shouldUpdateRows=!0;return}let t=[];for(let[e,s]of Object.entries(this.state??{}))t.push({key:e,value:s});this.rows=t},updateState:function(){let t={};this.rows.forEach(e=>{e.key===""||e.key===null||(t[e.key]=e.value)}),this.shouldUpdateRows=!1,this.state=t}}}export{r as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
function i({state:a,splitKeys:n}){return{newTag:"",state:a,createTag:function(){if(this.newTag=this.newTag.trim(),this.newTag!==""){if(this.state.includes(this.newTag)){this.newTag="";return}this.state.push(this.newTag),this.newTag=""}},deleteTag:function(t){this.state=this.state.filter(e=>e!==t)},input:{["x-on:blur"]:"createTag()",["x-model"]:"newTag",["x-on:keydown"](t){["Enter",...n].includes(t.key)&&(t.preventDefault(),t.stopPropagation(),this.createTag())},["x-on:paste"](){$nextTick(()=>{let t=n.map(e=>e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&")).join("|");this.newTag.split(new RegExp(t,"g")).forEach(e=>{this.newTag=e,this.createTag()})})}}}}export{i as default};
@@ -0,0 +1 @@
function t({initialHeight:e}){return{init:function(){this.render()},render:function(){this.$el.scrollHeight>0&&(this.$el.style.height=e+"rem",this.$el.style.height=this.$el.scrollHeight+"px")}}}export{t as default};

Some files were not shown because too many files have changed in this diff Show More