diff --git a/.phpstorm.meta.php b/.phpstorm.meta.php index d2491851..cca79a9e 100644 --- a/.phpstorm.meta.php +++ b/.phpstorm.meta.php @@ -15,7 +15,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, @@ -225,7 +225,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, @@ -435,7 +435,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, @@ -645,7 +645,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, @@ -855,7 +855,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, @@ -1065,7 +1065,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, @@ -1275,7 +1275,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, @@ -1485,7 +1485,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, @@ -1695,7 +1695,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, @@ -1905,7 +1905,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, @@ -2115,7 +2115,7 @@ '' => '@', 'App\Http\Clients\ElasticsearchClient' => \App\Http\Clients\ElasticsearchClient::class, 'App\Http\Clients\OpencastClient' => \App\Http\Clients\OpencastClient::class, - 'App\Http\Clients\WowzaClient' => \App\Http\Clients\WowzaClient::class, + 'App\Http\Clients\WowzaClient' => \App\Http\Clients\StreamingClient::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, 'BladeUI\Icons\Factory' => \BladeUI\Icons\Factory::class, 'BladeUI\Icons\IconsManifest' => \BladeUI\Icons\IconsManifest::class, diff --git a/app/Console/Commands/CheckAndCreateSettings.php b/app/Console/Commands/CheckAndCreateSettings.php index 58ce75c7..bf962b40 100644 --- a/app/Console/Commands/CheckAndCreateSettings.php +++ b/app/Console/Commands/CheckAndCreateSettings.php @@ -46,7 +46,10 @@ public function handle(): int protected function processSettings(string $settingsType): void { // Retrieve specific settings based on type - $settingModel = Setting::{$settingsType}(); // Using dynamic method names + $settingModel = Setting::firstOrCreate( + ['name' => $settingsType], + ['data' => config("settings.$settingsType")] + ); // Using dynamic method names $defaultSettings = config("settings.{$settingsType}"); // Calculate new keys and merge with existing data diff --git a/app/Console/Commands/EnableLivestreams.php b/app/Console/Commands/EnableLivestreams.php index ef81c88b..9c960df5 100644 --- a/app/Console/Commands/EnableLivestreams.php +++ b/app/Console/Commands/EnableLivestreams.php @@ -3,9 +3,9 @@ namespace App\Console\Commands; use App\Enums\OpencastWorkflowState; -use App\Models\Livestream; use App\Models\Series; use App\Services\OpencastService; +use App\Services\WowzaService; use Illuminate\Console\Command; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Log; @@ -29,7 +29,7 @@ class EnableLivestreams extends Command /** * Execute the console command. */ - public function handle(OpencastService $opencastService) + public function handle(OpencastService $opencastService, WowzaService $wowzaService) { if ($opencastService->getHealth()->get('status') === 'failed') { $this->info('No Opencast server found or server is offline!'); @@ -56,7 +56,7 @@ public function handle(OpencastService $opencastService) return Command::SUCCESS; } - $events->each(function ($event) { + $events->each(function ($event) use ($wowzaService) { $series = Series::where('opencast_series_id', $event['is_part_of'])->first(); $seriesLivestreamClip = $series->fetchLivestreamClip(); @@ -65,15 +65,7 @@ public function handle(OpencastService $opencastService) "Series '{$series->title}' has a livestream clip now try to enable" ." wowza app {$event['scheduling']['agent_id']} for this clip" ); - $livestream = Livestream::search($event['scheduling']['agent_id'])->first(); - //livestream is matching with opencast capture agent - if ($livestream) { - //reserve the livestream for this clipID - $livestream->clip_id = $seriesLivestreamClip->id; - $livestream->time_availability_start = Carbon::now(); - $livestream->time_availability_end = Carbon::now()->addHours(2); // needs to be calculated properly - $livestream->save(); - } + $wowzaService->reserveLivestreamRoom($seriesLivestreamClip, $event['scheduling']['agent_id']); } }); } diff --git a/app/Http/Clients/LiveStreamingClient.php b/app/Http/Clients/LiveStreamingClient.php new file mode 100644 index 00000000..871b570f --- /dev/null +++ b/app/Http/Clients/LiveStreamingClient.php @@ -0,0 +1,9 @@ +data = $request->validated(); + $setting->data = $this->transformStreamingSettingsData($request->validated()); $setting->save(); return to_route('settings.streaming.show'); } + + private function transformStreamingSettingsData(array $settings) + { + return [ + 'wowza' => [ + 'server1' => [ + 'engine_url' => $settings['wowza_server1_engine_url'], + 'api_url' => $settings['wowza_server1_api_url'], + 'api_username' => $settings['wowza_server1_api_username'], + 'api_password' => $settings['wowza_server1_api_password'], + 'content_path' => $settings['wowza_server1_content_path'], + 'secure_token' => $settings['wowza_server1_secure_token'], + 'token_prefix' => $settings['wowza_server1_token_prefix'], + ], + 'server2' => [ + 'engine_url' => $settings['wowza_server2_engine_url'], + 'api_url' => $settings['wowza_server2_api_url'], + 'api_username' => $settings['wowza_server2_api_username'], + 'api_password' => $settings['wowza_server2_api_password'], + 'content_path' => $settings['wowza_server2_content_path'], + 'secure_token' => $settings['wowza_server2_secure_token'], + 'token_prefix' => $settings['wowza_server2_token_prefix'], + ], + ], + 'nginx' => [], + 'cdn' => [ + 'server1' => [ + 'url' => $settings['cdn_server1_url'], + 'secret' => $settings['cdn_server1_secret'], + ], + + ], + ]; + } } diff --git a/app/Http/Requests/UpdateStreamingSettings.php b/app/Http/Requests/UpdateStreamingSettings.php index b46804ce..a04489bd 100644 --- a/app/Http/Requests/UpdateStreamingSettings.php +++ b/app/Http/Requests/UpdateStreamingSettings.php @@ -24,22 +24,22 @@ public function authorize() public function rules() { return [ - 'wowza_vod_engine_url' => ['required', 'url'], - 'wowza_vod_api_url' => ['required', 'url'], - 'wowza_vod_username' => ['required', 'string'], - 'wowza_vod_password' => ['required'], - 'wowza_vod_content_path' => ['required', 'string'], - 'wowza_vod_secure_token' => ['required', 'string'], - 'wowza_vod_token_prefix' => ['required', 'string'], - 'wowza_livestream_engine_url' => ['required', 'url'], - 'wowza_livestream_api_url' => ['required', 'url'], - 'wowza_livestream_username' => ['required', 'string'], - 'wowza_livestream_password' => ['required'], - 'wowza_livestream_content_path' => ['required', 'string'], - 'wowza_livestream_secure_token' => ['required', 'string'], - 'wowza_livestream_token_prefix' => ['required', 'string'], - 'cdn_server_url' => ['required', 'url'], - 'cdn_server_secret' => ['required'], + 'wowza_server1_engine_url' => ['required', 'url'], + 'wowza_server1_api_url' => ['required', 'url'], + 'wowza_server1_api_username' => ['required', 'string'], + 'wowza_server1_api_password' => ['required'], + 'wowza_server1_content_path' => ['required', 'string'], + 'wowza_server1_secure_token' => ['required', 'string'], + 'wowza_server1_token_prefix' => ['required', 'string'], + 'wowza_server2_engine_url' => ['required', 'url'], + 'wowza_server2_api_url' => ['required', 'url'], + 'wowza_server2_api_username' => ['required', 'string'], + 'wowza_server2_api_password' => ['required'], + 'wowza_server2_content_path' => ['required', 'string'], + 'wowza_server2_secure_token' => ['required', 'string'], + 'wowza_server2_token_prefix' => ['required', 'string'], + 'cdn_server1_url' => ['required', 'url'], + 'cdn_server1_secret' => ['required'], ]; } } diff --git a/app/Providers/LiveStreamingServiceProvider.php b/app/Providers/LiveStreamingServiceProvider.php new file mode 100644 index 00000000..de2ba2a5 --- /dev/null +++ b/app/Providers/LiveStreamingServiceProvider.php @@ -0,0 +1,47 @@ +app->singleton(StreamingClient::class, function () { + $setting = Setting::streaming(); + + $settingsData = $setting->data; + + $authType = config('app.env') === 'local' ? 'basic' : 'digest'; + + return new LiveStreamingClient([ + 'base_uri' => $settingsData['wowza']['server2']['api_url'], + 'verify' => config('app.env') === 'production', + 'auth' => [ + $settingsData['wowza']['server2']['api_username'], + $settingsData['wowza']['server2']['api_password'], + $authType, + ], + ]); + }); + } + + /** + * Bootstrap services. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/app/Providers/WowzaServiceProvider.php b/app/Providers/StreamingServiceProvider.php similarity index 61% rename from app/Providers/WowzaServiceProvider.php rename to app/Providers/StreamingServiceProvider.php index cda161fb..65bdf016 100644 --- a/app/Providers/WowzaServiceProvider.php +++ b/app/Providers/StreamingServiceProvider.php @@ -2,11 +2,11 @@ namespace App\Providers; -use App\Http\Clients\WowzaClient; +use App\Http\Clients\StreamingClient; use App\Models\Setting; use Illuminate\Support\ServiceProvider; -class WowzaServiceProvider extends ServiceProvider +class StreamingServiceProvider extends ServiceProvider { /** * Register services. @@ -15,19 +15,19 @@ class WowzaServiceProvider extends ServiceProvider */ public function register() { - $this->app->singleton(WowzaClient::class, function () { + $this->app->singleton(StreamingClient::class, function () { $setting = Setting::streaming(); $settingsData = $setting->data; $authType = config('app.env') === 'local' ? 'basic' : 'digest'; - return new WowzaClient([ - 'base_uri' => $settingsData['wowza_vod_api_url'], + return new StreamingClient([ + 'base_uri' => $settingsData['wowza']['server1']['api_url'], 'verify' => config('app.env') === 'production', 'auth' => [ - $settingsData['wowza_vod_username'], - $settingsData['wowza_vod_password'], + $settingsData['wowza']['server1']['api_username'], + $settingsData['wowza']['server1']['api_password'], $authType, ], ]); diff --git a/app/Services/WowzaService.php b/app/Services/WowzaService.php index be34f0c9..d58ba89d 100644 --- a/app/Services/WowzaService.php +++ b/app/Services/WowzaService.php @@ -3,17 +3,21 @@ namespace App\Services; use App\Enums\Content; -use App\Http\Clients\WowzaClient; +use App\Http\Clients\LiveStreamingClient; +use App\Http\Clients\StreamingClient; use App\Models\Clip; +use App\Models\Livestream; use App\Models\Setting; use DOMException; use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Psr7\Response; +use Illuminate\Support\Carbon; use Illuminate\Support\Collection; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; +use InvalidArgumentException; use Spatie\ArrayToXml\ArrayToXml; class WowzaService @@ -22,8 +26,14 @@ class WowzaService private Setting $streamingSettings; - public function __construct(private WowzaClient $client) - { + public function __construct( + private StreamingClient $streamingClient, + private LiveStreamingClient $liveStreamingClient + ) { + $this->clients = [ + 'stream' => $streamingClient, + 'livestream' => $liveStreamingClient, + ]; $this->response = new Response(200, []); $this->streamingSettings = Setting::streaming(); } @@ -31,15 +41,18 @@ public function __construct(private WowzaClient $client) /** * Check whether Wowza Server is online */ - public function getHealth(): Collection + public function getHealth(string $connection = 'stream'): Collection { + if (! isset($this->clients[$connection])) { + throw new InvalidArgumentException("The connection [$connection] is not defined."); + } $response = collect([ 'releaseId' => 'Wowza server not available', 'status' => 'failed', ]); try { - $this->response = $this->client->get('/'); + $this->response = $this->clients[$connection]->get('/'); if (! empty(json_encode((string) $this->response->getBody(), true))) { $response->put('releaseId', json_encode((string) $this->response->getBody(), true)) ->put('status', 'pass'); @@ -51,15 +64,19 @@ public function getHealth(): Collection return $response; } - public function getAllApplications(): Collection + public function getAllApplications(string $connection = 'stream'): Collection { + if (! isset($this->clients[$connection])) { + throw new InvalidArgumentException("The connection [$connection] is not defined."); + } $response = collect([ 'releaseId' => 'Wowza server not available', 'status' => 'failed', ]); try { - $this->response = $this->client->get('/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications'); + $this->response = $this->clients[$connection] + ->get('/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications'); if (! empty((string) $this->response->getBody())) { $response->put('applications', json_encode(simplexml_load_string((string) $this->response->getBody()))); } @@ -205,18 +222,17 @@ public function vodSecureUrls(Clip $clip): Collection $asset->original_file_name = 'slides.smil'; } } - $url = - $this->streamingSettings->data['wowza_vod_engine_url']. - $this->streamingSettings->data['wowza_vod_content_path']. + $this->streamingSettings->data['wowza']['server1']['engine_url']. + $this->streamingSettings->data['wowza']['server1']['content_path']. $asset->path.$asset->original_file_name.'/playlist.m3u8'; $wowzaContentPath = - $this->streamingSettings->data['wowza_vod_content_path']. + $this->streamingSettings->data['wowza']['server1']['content_path']. $asset->path. $asset->original_file_name; - $secureToken = $this->streamingSettings->data['wowza_vod_secure_token']; - $tokenPrefix = $this->streamingSettings->data['wowza_vod_token_prefix']; + $secureToken = $this->streamingSettings->data['wowza']['server1']['secure_token']; + $tokenPrefix = $this->streamingSettings->data['wowza']['server1']['token_prefix']; $tokenStartTime = $tokenPrefix.'starttime='.time(); $tokenEndTime = $tokenPrefix.'endTime='.(time() + 21600); @@ -231,4 +247,19 @@ public function vodSecureUrls(Clip $clip): Collection return $filePaths; } + + public function reserveLivestreamRoom(Clip $livestreamClip, string $opencastAgentID): Livestream + { + $livestream = Livestream::search($opencastAgentID)->first(); + //livestream is matching with opencast capture agent + if ($livestream) { + //reserve the livestream for this clipID + $livestream->clip_id = $livestreamClip->id; + $livestream->time_availability_start = Carbon::now(); + $livestream->time_availability_end = Carbon::now()->addHours(2); // needs to be calculated properly + $livestream->save(); + } + + return $livestream; + } } diff --git a/composer.json b/composer.json index 5081e02a..6f9d879a 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ ], "license": "MIT", "require": { - "php": "^8.1", + "php": "^8.2", "ext-dom": "*", "ext-fileinfo": "*", "24slides/laravel-saml2": "^2.4", diff --git a/composer.lock b/composer.lock index 96502a1a..9d6be636 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b0070a87fde8dac6de8d48f84333274f", + "content-hash": "f31ffb761e54d43320d9f40eb3b24a21", "packages": [ { "name": "24slides/laravel-saml2", @@ -1797,16 +1797,16 @@ }, { "name": "laravel/framework", - "version": "v11.5.0", + "version": "v11.7.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "e3c24268f1404805e15099b9f035fe310cb30753" + "reference": "e5ac72f513f635f208024aa76b8a04efc1b47f93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/e3c24268f1404805e15099b9f035fe310cb30753", - "reference": "e3c24268f1404805e15099b9f035fe310cb30753", + "url": "https://api.github.com/repos/laravel/framework/zipball/e5ac72f513f635f208024aa76b8a04efc1b47f93", + "reference": "e5ac72f513f635f208024aa76b8a04efc1b47f93", "shasum": "" }, "require": { @@ -1909,7 +1909,7 @@ "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.6", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^9.0.6", + "orchestra/testbench-core": "^9.0.15", "pda/pheanstalk": "^5.0", "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^10.5|^11.0", @@ -1998,20 +1998,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-04-23T15:11:31+00:00" + "time": "2024-05-07T13:41:51+00:00" }, { "name": "laravel/pint", - "version": "v1.15.2", + "version": "v1.15.3", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "2c9f8004899815f3f0ee3cb28ef7281e2b589134" + "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/2c9f8004899815f3f0ee3cb28ef7281e2b589134", - "reference": "2c9f8004899815f3f0ee3cb28ef7281e2b589134", + "url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656", + "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656", "shasum": "" }, "require": { @@ -2064,20 +2064,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-04-23T15:42:34+00:00" + "time": "2024-04-30T15:02:26+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.20", + "version": "v0.1.21", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "bf9a360c484976692de0f3792f30066f4f4b34a2" + "reference": "23ea808e8a145653e0ab29e30d4385e49f40a920" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/bf9a360c484976692de0f3792f30066f4f4b34a2", - "reference": "bf9a360c484976692de0f3792f30066f4f4b34a2", + "url": "https://api.github.com/repos/laravel/prompts/zipball/23ea808e8a145653e0ab29e30d4385e49f40a920", + "reference": "23ea808e8a145653e0ab29e30d4385e49f40a920", "shasum": "" }, "require": { @@ -2117,11 +2117,12 @@ "license": [ "MIT" ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.20" + "source": "https://github.com/laravel/prompts/tree/v0.1.21" }, - "time": "2024-04-18T00:45:25+00:00" + "time": "2024-04-30T12:46:16+00:00" }, { "name": "laravel/serializable-closure", @@ -2644,16 +2645,16 @@ }, { "name": "livewire/livewire", - "version": "v3.4.11", + "version": "v3.4.12", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "8a78d0c3ae9b4c96a2d8932ea4ac0dc782325de0" + "reference": "54dd265c17f7b5200627eb9690590e7cbbad1027" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/8a78d0c3ae9b4c96a2d8932ea4ac0dc782325de0", - "reference": "8a78d0c3ae9b4c96a2d8932ea4ac0dc782325de0", + "url": "https://api.github.com/repos/livewire/livewire/zipball/54dd265c17f7b5200627eb9690590e7cbbad1027", + "reference": "54dd265c17f7b5200627eb9690590e7cbbad1027", "shasum": "" }, "require": { @@ -2668,7 +2669,7 @@ }, "require-dev": { "calebporzio/sushi": "^2.1", - "laravel/framework": "^10.0|^11.0", + "laravel/framework": "^10.15.0|^11.0", "laravel/prompts": "^0.1.6", "mockery/mockery": "^1.3.1", "orchestra/testbench": "^8.21.0|^9.0", @@ -2708,7 +2709,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.4.11" + "source": "https://github.com/livewire/livewire/tree/v3.4.12" }, "funding": [ { @@ -2716,7 +2717,7 @@ "type": "github" } ], - "time": "2024-04-24T12:14:15+00:00" + "time": "2024-05-02T17:10:37+00:00" }, { "name": "mhor/php-mediainfo", @@ -2878,16 +2879,16 @@ }, { "name": "nesbot/carbon", - "version": "3.3.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "7219739c4e01d4680c980545821733b6ed8ee880" + "reference": "8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7219739c4e01d4680c980545821733b6ed8ee880", - "reference": "7219739c4e01d4680c980545821733b6ed8ee880", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a", + "reference": "8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a", "shasum": "" }, "require": { @@ -2980,7 +2981,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T16:35:06+00:00" + "time": "2024-05-01T06:54:22+00:00" }, { "name": "nette/schema", @@ -3961,20 +3962,20 @@ }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -3998,7 +3999,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -4010,9 +4011,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", @@ -4588,16 +4589,16 @@ }, { "name": "spatie/array-to-xml", - "version": "3.2.3", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", - "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab" + "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/c95fd4db94ec199f798d4b5b4a81757bd20d88ab", - "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f56b220fe2db1ade4c88098d83413ebdfc3bf876", + "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876", "shasum": "" }, "require": { @@ -4610,6 +4611,11 @@ "spatie/pest-plugin-snapshots": "^1.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { "Spatie\\ArrayToXml\\": "src" @@ -4635,7 +4641,7 @@ "xml" ], "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.2.3" + "source": "https://github.com/spatie/array-to-xml/tree/3.3.0" }, "funding": [ { @@ -4647,7 +4653,7 @@ "type": "github" } ], - "time": "2024-02-07T10:39:02+00:00" + "time": "2024-05-01T10:20:27+00:00" }, { "name": "spatie/temporary-directory", @@ -4888,16 +4894,16 @@ }, { "name": "symfony/cache-contracts", - "version": "v3.4.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "2c9db6509a1b21dad229606897639d3284f54b2a" + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/2c9db6509a1b21dad229606897639d3284f54b2a", - "reference": "2c9db6509a1b21dad229606897639d3284f54b2a", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", "shasum": "" }, "require": { @@ -4907,7 +4913,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4944,7 +4950,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" }, "funding": [ { @@ -4960,7 +4966,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/clock", @@ -5196,16 +5202,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "shasum": "" }, "require": { @@ -5214,7 +5220,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -5243,7 +5249,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { @@ -5259,7 +5265,7 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/error-handler", @@ -5418,16 +5424,16 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "4e64b49bf370ade88e567de29465762e316e4224" + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224", - "reference": "4e64b49bf370ade88e567de29465762e316e4224", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", "shasum": "" }, "require": { @@ -5437,7 +5443,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -5474,7 +5480,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" }, "funding": [ { @@ -5490,7 +5496,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/filesystem", @@ -6829,21 +6835,22 @@ }, { "name": "symfony/service-contracts", - "version": "v3.4.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", - "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^1.1|^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -6851,7 +6858,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -6891,7 +6898,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" }, "funding": [ { @@ -6907,7 +6914,7 @@ "type": "tidelift" } ], - "time": "2023-12-19T21:51:00+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/string", @@ -7091,16 +7098,16 @@ }, { "name": "symfony/translation-contracts", - "version": "v3.4.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b" + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", - "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", "shasum": "" }, "require": { @@ -7109,7 +7116,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -7149,7 +7156,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" }, "funding": [ { @@ -7165,7 +7172,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/uid", @@ -7730,16 +7737,16 @@ "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.13.4", + "version": "v3.13.5", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "00201bcd1eaf9b1d3debddcdc13c219e4835fb61" + "reference": "92d86be45ee54edff735e46856f64f14b6a8bb07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/00201bcd1eaf9b1d3debddcdc13c219e4835fb61", - "reference": "00201bcd1eaf9b1d3debddcdc13c219e4835fb61", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/92d86be45ee54edff735e46856f64f14b6a8bb07", + "reference": "92d86be45ee54edff735e46856f64f14b6a8bb07", "shasum": "" }, "require": { @@ -7798,7 +7805,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.13.4" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.13.5" }, "funding": [ { @@ -7810,7 +7817,7 @@ "type": "github" } ], - "time": "2024-04-10T09:15:45+00:00" + "time": "2024-04-12T11:20:37+00:00" }, { "name": "barryvdh/laravel-ide-helper", @@ -8550,16 +8557,16 @@ }, { "name": "larastan/larastan", - "version": "v2.9.5", + "version": "v2.9.6", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "101f1a4470f87326f4d3995411d28679d8800abe" + "reference": "93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/101f1a4470f87326f4d3995411d28679d8800abe", - "reference": "101f1a4470f87326f4d3995411d28679d8800abe", + "url": "https://api.github.com/repos/larastan/larastan/zipball/93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f", + "reference": "93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f", "shasum": "" }, "require": { @@ -8628,7 +8635,7 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.5" + "source": "https://github.com/larastan/larastan/tree/v2.9.6" }, "funding": [ { @@ -8648,7 +8655,7 @@ "type": "patreon" } ], - "time": "2024-04-16T19:13:34+00:00" + "time": "2024-05-09T11:53:26+00:00" }, { "name": "laravel/breeze", @@ -9394,16 +9401,16 @@ }, { "name": "pestphp/pest-plugin-drift", - "version": "v2.6.0", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/pestphp/pest-plugin-drift.git", - "reference": "8c07c1a94275f39ef62bbb622556dbf1d361d860" + "reference": "ed78e637a7f7b77c9b33b02ffba40555e74001ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-drift/zipball/8c07c1a94275f39ef62bbb622556dbf1d361d860", - "reference": "8c07c1a94275f39ef62bbb622556dbf1d361d860", + "url": "https://api.github.com/repos/pestphp/pest-plugin-drift/zipball/ed78e637a7f7b77c9b33b02ffba40555e74001ef", + "reference": "ed78e637a7f7b77c9b33b02ffba40555e74001ef", "shasum": "" }, "require": { @@ -9444,7 +9451,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest-plugin-drift/issues", - "source": "https://github.com/pestphp/pest-plugin-drift/tree/v2.6.0" + "source": "https://github.com/pestphp/pest-plugin-drift/tree/v2.6.1" }, "funding": [ { @@ -9460,7 +9467,7 @@ "type": "github" } ], - "time": "2024-03-19T19:51:17+00:00" + "time": "2024-05-05T07:36:43+00:00" }, { "name": "pestphp/pest-plugin-faker", @@ -10050,16 +10057,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.28.0", + "version": "1.29.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" + "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc", + "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc", "shasum": "" }, "require": { @@ -10091,9 +10098,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0" }, - "time": "2024-04-03T18:51:33+00:00" + "time": "2024-05-06T12:04:23+00:00" }, { "name": "phpstan/phpstan", @@ -11556,16 +11563,16 @@ }, { "name": "spatie/flare-client-php", - "version": "1.4.4", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "17082e780752d346c2db12ef5d6bee8e835e399c" + "reference": "e27977d534eefe04c154c6fd8460217024054c05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/17082e780752d346c2db12ef5d6bee8e835e399c", - "reference": "17082e780752d346c2db12ef5d6bee8e835e399c", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/e27977d534eefe04c154c6fd8460217024054c05", + "reference": "e27977d534eefe04c154c6fd8460217024054c05", "shasum": "" }, "require": { @@ -11613,7 +11620,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.4.4" + "source": "https://github.com/spatie/flare-client-php/tree/1.5.1" }, "funding": [ { @@ -11621,20 +11628,20 @@ "type": "github" } ], - "time": "2024-01-31T14:18:45+00:00" + "time": "2024-05-03T15:43:14+00:00" }, { "name": "spatie/ignition", - "version": "1.14.0", + "version": "1.14.1", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "80385994caed328f6f9c9952926932e65b9b774c" + "reference": "c23cc018c5f423d2f413b99f84655fceb6549811" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/80385994caed328f6f9c9952926932e65b9b774c", - "reference": "80385994caed328f6f9c9952926932e65b9b774c", + "url": "https://api.github.com/repos/spatie/ignition/zipball/c23cc018c5f423d2f413b99f84655fceb6549811", + "reference": "c23cc018c5f423d2f413b99f84655fceb6549811", "shasum": "" }, "require": { @@ -11704,20 +11711,20 @@ "type": "github" } ], - "time": "2024-04-26T08:45:51+00:00" + "time": "2024-05-03T15:56:16+00:00" }, { "name": "spatie/laravel-ignition", - "version": "2.6.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "e2f8f3724371f093f9461dcd7f8c1a1bd157c27e" + "reference": "f52124d50122611e8a40f628cef5c19ff6cc5b57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/e2f8f3724371f093f9461dcd7f8c1a1bd157c27e", - "reference": "e2f8f3724371f093f9461dcd7f8c1a1bd157c27e", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/f52124d50122611e8a40f628cef5c19ff6cc5b57", + "reference": "f52124d50122611e8a40f628cef5c19ff6cc5b57", "shasum": "" }, "require": { @@ -11726,7 +11733,7 @@ "ext-mbstring": "*", "illuminate/support": "^10.0|^11.0", "php": "^8.1", - "spatie/flare-client-php": "^1.3.5", + "spatie/flare-client-php": "^1.5", "spatie/ignition": "^1.14", "symfony/console": "^6.2.3|^7.0", "symfony/var-dumper": "^6.2.3|^7.0" @@ -11796,7 +11803,7 @@ "type": "github" } ], - "time": "2024-04-29T14:55:54+00:00" + "time": "2024-05-02T13:42:49+00:00" }, { "name": "symfony/yaml", @@ -11985,7 +11992,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.1", + "php": "^8.2", "ext-dom": "*", "ext-fileinfo": "*" }, diff --git a/config/app.php b/config/app.php index c9822cda..a3d96fd5 100644 --- a/config/app.php +++ b/config/app.php @@ -175,7 +175,7 @@ App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\OpencastServiceProvider::class, - App\Providers\WowzaServiceProvider::class, + App\Providers\StreamingServiceProvider::class, App\Providers\OpenSearchServiceProvider::class, ], diff --git a/config/settings.php b/config/settings.php index 498e30bc..8eaf381f 100644 --- a/config/settings.php +++ b/config/settings.php @@ -40,24 +40,72 @@ 'opencast_purge_end_date' => Carbon::now(), 'opencast_purge_events_per_minute' => '20', ], + // array:16 [▼ // app/Http/Controllers/Backend/StreamingSettingsController.php:21 + // "wowza_vod_engine_url" => "https://stream.fau.tv/" + // "wowza_vod_api_url" => "http://localhost:8087" + // "wowza_vod_username" => "admin" + // "wowza_vod_password" => "wowza" + // "wowza_vod_content_path" => "videoportal_sec/_definst_/videoportal/" + // "wowza_vod_secure_token" => "emsJue5Rtv7" + // "wowza_vod_token_prefix" => "rrzevp" + // "wowza_livestream_engine_url" => "https://livestream.fau.tv/" + // "wowza_livestream_api_url" => "http://localhost:8087" + // "wowza_livestream_username" => "admin" + // "wowza_livestream_password" => "wowza" + // "wowza_livestream_content_path" => "/content/videoportal" + // "wowza_livestream_secure_token" => "awsTides12tvv10" + // "wowza_livestream_token_prefix" => "tides" + // "cdn_server_url" => "https://vp-cdn-balance.rrze.de/media_bu/" + // "cdn_server_secret" => "emsJue5Rtv7" + //] 'streaming' => [ - 'wowza_vod_engine_url' => 'localhost:1935', - 'wowza_vod_api_url' => 'localhost:8087', - 'wowza_vod_username' => 'digest_user', - 'wowza_vod_password' => 'digest_password', - 'wowza_vod_content_path' => '/content/videoportal', - 'wowza_vod_secure_token' => 'awsTides12tvv10', - 'wowza_vod_token_prefix' => 'tides', - 'wowza_livestream_engine_url' => 'localhost:1935', - 'wowza_livestream_api_url' => 'localhost:8087', - 'wowza_livestream_username' => 'digest_user', - 'wowza_livestream_password' => 'digest_password', - 'wowza_livestream_content_path' => '/content/videoportal', - 'wowza_livestream_secure_token' => 'awsTides12tvv10', - 'wowza_livestream_token_prefix' => 'tides', - 'cdn_server_url' => env('CDN_SERVER_URL', 'http://localhost/'), - 'cdn_server_secret' => env('CDN_SERVER_SECRET', 'dsnJ23fjeq!'), + 'wowza' => [ + 'server1' => [ + 'engine_url' => 'localhost:1935', + 'api_url' => 'localhost:8087', + 'api_username' => 'digest_user', + 'api_password' => 'digest_password', + 'content_path' => '/content/videoportal', + 'secure_token' => 'awsTides12tvv10', + 'token_prefix' => 'tides', + ], + 'server2' => [ + 'engine_url' => 'localhost:1935', + 'api_url' => 'localhost:8087', + 'api_username' => 'digest_user', + 'api_password' => 'digest_password', + 'content_path' => '/content/videoportal', + 'secure_token' => 'awsTides12tvv10', + 'token_prefix' => 'tides', + ], + ], + 'nginx' => [], + 'cdn' => [ + 'server1' => [ + 'url' => env('CDN_SERVER_URL', 'http://localhost/'), + 'secret' => env('CDN_SERVER_SECRET', 'dsnJ23fjeq!'), + ], + + ], ], + // 'streaming' => [ + // 'wowza_vod_engine_url' => 'localhost:1935', + // 'wowza_vod_api_url' => 'localhost:8087', + // 'wowza_vod_username' => 'digest_user', + // 'wowza_vod_password' => 'digest_password', + // 'wowza_vod_content_path' => '/content/videoportal', + // 'wowza_vod_secure_token' => 'awsTides12tvv10', + // 'wowza_vod_token_prefix' => 'tides', + // 'wowza_livestream_engine_url' => 'localhost:1935', + // 'wowza_livestream_api_url' => 'localhost:8087', + // 'wowza_livestream_username' => 'digest_user', + // 'wowza_livestream_password' => 'digest_password', + // 'wowza_livestream_content_path' => '/content/videoportal', + // 'wowza_livestream_secure_token' => 'awsTides12tvv10', + // 'wowza_livestream_token_prefix' => 'tides', + // 'cdn_server_url' => env('CDN_SERVER_URL', 'http://localhost/'), + // 'cdn_server_secret' => env('CDN_SERVER_SECRET', 'dsnJ23fjeq!'), + // ], 'openSearch' => [ 'search_frontend_enable_open_search' => false, 'url' => 'localhost', diff --git a/package-lock.json b/package-lock.json index b24fd10f..f2e3b724 100644 --- a/package-lock.json +++ b/package-lock.json @@ -758,9 +758,9 @@ } }, "node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.12.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", + "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", "devOptional": true, "dependencies": { "undici-types": "~5.26.4" @@ -2223,9 +2223,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001614", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", - "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", + "version": "1.0.30001616", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz", + "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==", "dev": true, "funding": [ { @@ -3221,9 +3221,9 @@ } }, "node_modules/dompurify": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.1.tgz", - "integrity": "sha512-HH391uRJXAAeelougod93W++2gECfHIVCqq+B/4znhjCgb2zVPL+iLOVnTYwejqAuNf69Ffc5ILQYdPHsZACJA==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.2.tgz", + "integrity": "sha512-5vSyvxRAb45EoWwAktUT3AYqAwXK4FL7si22Cgj46U6ICsj/YJczCN+Bk7WNABIQmpWRymGfslMhrRUZkQNnqA==" }, "node_modules/duplexer2": { "version": "0.1.4", @@ -3277,9 +3277,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.751", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz", - "integrity": "sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw==", + "version": "1.4.757", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.757.tgz", + "integrity": "sha512-jftDaCknYSSt/+KKeXzH3LX5E2CvRLm75P3Hj+J/dv3CL0qUYcOt13d5FN1NiL5IJbbhzHrb3BomeG2tkSlZmw==", "dev": true }, "node_modules/elliptic": { @@ -5727,9 +5727,9 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.0.tgz", + "integrity": "sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==", "engines": { "node": ">=16 || 14 >=14.17" } @@ -7041,9 +7041,9 @@ } }, "node_modules/prosemirror-model": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.20.0.tgz", - "integrity": "sha512-q7AY7vMjKYqDCeoedgUiAgrLabliXxndJuuFmcmc2+YU1SblvnOiG2WEACF2lwAZsMlfLpiAilA3L+TWlDqIsQ==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.21.0.tgz", + "integrity": "sha512-zLpS1mVCZLA7VTp82P+BfMiYVPcX1/z0Mf3gsjKZtzMWubwn2pN7CceMV0DycjlgE5JeXPR7UF4hJPbBV98oWA==", "dependencies": { "orderedmap": "^2.0.0" } @@ -7059,11 +7059,11 @@ } }, "node_modules/prosemirror-transform": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.8.0.tgz", - "integrity": "sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.9.0.tgz", + "integrity": "sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==", "dependencies": { - "prosemirror-model": "^1.0.0" + "prosemirror-model": "^1.21.0" } }, "node_modules/prosemirror-view": { @@ -10007,9 +10007,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", + "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", "dev": true, "funding": [ { @@ -10026,7 +10026,7 @@ } ], "dependencies": { - "escalade": "^3.1.1", + "escalade": "^3.1.2", "picocolors": "^1.0.0" }, "bin": { diff --git a/public/vendor/livewire/livewire.esm.js b/public/vendor/livewire/livewire.esm.js index 9c91fd3a..859b555f 100644 --- a/public/vendor/livewire/livewire.esm.js +++ b/public/vendor/livewire/livewire.esm.js @@ -9745,7 +9745,6 @@ on("directive.init", ({ el, directive: directive2, cleanup, component }) => setT el.addEventListener("submit", () => { let componentId = directive2.expression.startsWith("$parent") ? component.parent.id : component.id; let cleanup2 = disableForm(el); - window.yo = cleanup2; cleanups.add(componentId, cleanup2); }); })); diff --git a/public/vendor/livewire/livewire.js b/public/vendor/livewire/livewire.js index 2bcadf35..f9d5268c 100644 --- a/public/vendor/livewire/livewire.js +++ b/public/vendor/livewire/livewire.js @@ -8878,7 +8878,6 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); el.addEventListener("submit", () => { let componentId = directive3.expression.startsWith("$parent") ? component.parent.id : component.id; let cleanup3 = disableForm(el); - window.yo = cleanup3; cleanups.add(componentId, cleanup3); }); })); diff --git a/public/vendor/livewire/livewire.min.js b/public/vendor/livewire/livewire.min.js index 06d37e5f..0ba3914b 100644 --- a/public/vendor/livewire/livewire.min.js +++ b/public/vendor/livewire/livewire.min.js @@ -82,7 +82,7 @@ Would you like to refresh the page?`)&&window.location.reload()}function vc(e){f 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } - `;let t=oi();t&&(e.nonce=t),document.head.appendChild(e)}var Un=[],ha=["data-csrf","aria-hidden"];function jn(e,t){let r=new DOMParser().parseFromString(e,"text/html"),n=document.adoptNode(r.body),i=document.adoptNode(r.head);Un=Un.concat(Array.from(document.body.querySelectorAll("script")).map(a=>ba(wa(a.outerHTML,ha))));let o=()=>{};kf(i).finally(()=>{o()}),Tf(n,Un);let s=document.body;document.body.replaceWith(n),Alpine.destroyTree(s),t(a=>o=a)}function Tf(e,t){e.querySelectorAll("script").forEach(r=>{if(r.hasAttribute("data-navigate-once")){let n=ba(wa(r.outerHTML,ha));if(t.includes(n))return}r.replaceWith(ma(r))})}function kf(e){let t=Array.from(document.head.children),r=t.map(s=>s.outerHTML),n=document.createDocumentFragment(),i=[],o=[];for(let s of Array.from(e.children))if(pa(s)){if(r.includes(s.outerHTML))n.appendChild(s);else if(ga(s)&&Nf(s,t)&&setTimeout(()=>window.location.reload()),va(s))try{o.push(Lf(ma(s)))}catch{}else document.head.appendChild(s);i.push(s)}for(let s of Array.from(document.head.children))pa(s)||s.remove();for(let s of Array.from(e.children))document.head.appendChild(s);return Promise.all(o)}async function Lf(e){return new Promise((t,r)=>{e.src?(e.onload=()=>t(),e.onerror=()=>r()):t(),document.head.appendChild(e)})}function ma(e){let t=document.createElement("script");t.textContent=e.textContent,t.async=e.async;for(let r of e.attributes)t.setAttribute(r.name,r.value);return t}function ga(e){return e.hasAttribute("data-navigate-track")}function Nf(e,t){let[r,n]=da(e);return t.some(i=>{if(!ga(i))return!1;let[o,s]=da(i);if(o===r&&n!==s)return!0})}function da(e){return(va(e)?e.src:e.href).split("?")}function pa(e){return e.tagName.toLowerCase()==="link"&&e.getAttribute("rel").toLowerCase()==="stylesheet"||e.tagName.toLowerCase()==="style"||e.tagName.toLowerCase()==="script"}function va(e){return e.tagName.toLowerCase()==="script"}function ba(e){return e.split("").reduce((t,r)=>(t=(t<<5)-t+r.charCodeAt(0),t&t),0)}function wa(e,t){let r=e;return t.forEach(n=>{let i=new RegExp(`${n}="[^"]*"|${n}='[^']*'`,"g");r=r.replace(i,"")}),r=r.replaceAll(" ",""),r.trim()}var pr=!0,Hn=!0,Rf=!0,ya=!1;function Ea(e){e.navigate=r=>{let n=be(r);ue("alpine:navigate",{url:n,history:!1,cached:!1})||t(n)},e.navigate.disableProgressBar=()=>{Hn=!1},e.addInitSelector(()=>`[${e.prefixed("navigate")}]`),e.directive("navigate",(r,{modifiers:n})=>{n.includes("hover")&&ra(r,60,()=>{let o=On(r);kn(o,(s,a)=>{Ln(s,o,a)})}),ta(r,o=>{let s=On(r);kn(s,(a,l)=>{Ln(a,s,l)}),o(()=>{ue("alpine:navigate",{url:s,history:!1,cached:!1})||t(s)})})});function t(r,n=!0){Hn&&ua(),Pf(r,(i,o)=>{ue("alpine:navigating"),Rf&&In(),Hn&&ca(),If(),Xs(),xa(e,s=>{pr&&Fn(a=>{Nn(a)}),n?Zs(i,o):Cn(o,i),jn(i,a=>{Rn(document.body),pr&&$n((l,u)=>{Pn(l)}),Mn(),a(()=>{s(()=>{setTimeout(()=>{ya&&Sa()}),_a(e),ue("alpine:navigated")})})})})})}Qs(r=>{r(n=>{let i=be(n);if(ue("alpine:navigate",{url:i,history:!0,cached:!1}))return;t(i,!1)})},(r,n,i,o)=>{let s=be(n);ue("alpine:navigate",{url:s,history:!0,cached:!0})||(In(),ue("alpine:navigating"),Ys(i,o),xa(e,l=>{pr&&Fn(u=>{Nn(u)}),jn(r,()=>{fa(),Rn(document.body),pr&&$n((u,d)=>{Pn(u)}),Mn(),l(()=>{ya&&Sa(),_a(e),ue("alpine:navigated")})})}))}),setTimeout(()=>{ue("alpine:navigated")})}function Pf(e,t){ia(e,t,()=>{na(e,t)})}function xa(e,t){e.stopObservingMutations(),t(r=>{e.startObservingMutations(),queueMicrotask(()=>{r()})})}function ue(e,t){let r=new CustomEvent(e,{cancelable:!0,bubbles:!0,detail:t});return document.dispatchEvent(r),r.defaultPrevented}function _a(e){e.initTree(document.body,void 0,(t,r)=>{t._x_wasPersisted&&r()})}function Sa(){document.querySelector("[autofocus]")&&document.querySelector("[autofocus]").focus()}function If(){let e=function(t,r){Alpine.walk(t,(n,i)=>{sa(n)&&i(),oa(n)?i():r(n,i)})};Alpine.destroyTree(document.body,e)}function qn(e){e.magic("queryString",(t,{interceptor:r})=>{let n,i=!1,o=!1;return r((s,a,l,u,d)=>{let p=n||u,{initial:c,replace:f,push:m,pop:v}=mr(p,s,i);return l(c),o?(e.effect(()=>m(a())),v(async g=>{l(g),await(()=>Promise.resolve())()})):e.effect(()=>f(a())),c},s=>{s.alwaysShow=()=>(i=!0,s),s.usePush=()=>(o=!0,s),s.as=a=>(n=a,s)})}),e.history={track:mr}}function mr(e,t,r=!1){let{has:n,get:i,set:o,remove:s}=Ff(),a=new URL(window.location.href),l=n(a,e),u=l?i(a,e):t,d=JSON.stringify(u),p=m=>JSON.stringify(m)===d;r&&(a=o(a,e,u)),Aa(a,e,{value:u});let c=!1,f=(m,v)=>{if(c)return;let g=new URL(window.location.href);!r&&!l&&p(v)||v===void 0?g=s(g,e):g=o(g,e,v),m(g,e,{value:v})};return{initial:u,replace(m){f(Aa,m)},push(m){f(Mf,m)},pop(m){let v=g=>{!g.state||!g.state.alpine||Object.entries(g.state.alpine).forEach(([x,{value:b}])=>{if(x!==e)return;c=!0;let _=m(b);_ instanceof Promise?_.finally(()=>c=!1):c=!1})};return window.addEventListener("popstate",v),()=>window.removeEventListener("popstate",v)}}}function Aa(e,t,r){let n=window.history.state||{};n.alpine||(n.alpine={}),n.alpine[t]=Wn(r),window.history.replaceState(n,"",e.toString())}function Mf(e,t,r){let n=window.history.state||{};n.alpine||(n.alpine={}),n={alpine:{...n.alpine,[t]:Wn(r)}},window.history.pushState(n,"",e.toString())}function Wn(e){if(e!==void 0)return JSON.parse(JSON.stringify(e))}function Ff(){return{has(e,t){let r=e.search;if(!r)return!1;let n=hr(r);return Object.keys(n).includes(t)},get(e,t){let r=e.search;return r?hr(r)[t]:!1},set(e,t,r){let n=hr(e.search);return n[t]=Oa(Wn(r)),e.search=Ca(n),e},remove(e,t){let r=hr(e.search);return delete r[t],e.search=Ca(r),e}}}function Oa(e){if(!_t(e))return e;for(let t in e)e[t]===null?delete e[t]:e[t]=Oa(e[t]);return e}function Ca(e){let t=i=>typeof i=="object"&&i!==null,r=(i,o={},s="")=>(Object.entries(i).forEach(([a,l])=>{let u=s===""?a:`${s}[${a}]`;l===null?o[u]="":t(l)?o={...o,...r(l,o,u)}:o[u]=encodeURIComponent(l).replaceAll("%20","+").replaceAll("%2C",",")}),o),n=r(e);return Object.entries(n).map(([i,o])=>`${i}=${o}`).join("&")}function hr(e){if(e=e.replace("?",""),e==="")return{};let t=(i,o,s)=>{let[a,l,...u]=i.split(".");if(!l)return s[i]=o;s[a]===void 0&&(s[a]=isNaN(l)?{}:[]),t([l,...u].join("."),o,s[a])},r=e.split("&").map(i=>i.split("=")),n=Object.create(null);return r.forEach(([i,o])=>{if(!(typeof o>"u"))if(o=decodeURIComponent(o.replaceAll("+","%20")),!i.includes("["))n[i]=o;else{let s=i.replaceAll("[",".").replaceAll("]","");t(s,o,n)}}),n}function zn(e,t,r){Bf();let n,i,o,s,a,l,u,d,p,c;function f(h={}){let y=L=>L.getAttribute("key"),C=()=>{};a=h.updating||C,l=h.updated||C,u=h.removing||C,d=h.removed||C,p=h.adding||C,c=h.added||C,o=h.key||y,s=h.lookahead||!1}function m(h,y){if(v(h,y))return g(h,y);let C=!1;if(!Ge(a,h,y,()=>C=!0)){if(h.nodeType===1&&window.Alpine&&(window.Alpine.cloneNode(h,y),h._x_teleport&&y._x_teleport&&m(h._x_teleport,y._x_teleport)),Df(y)){x(h,y),l(h,y);return}C||b(h,y),l(h,y),_(h,y)}}function v(h,y){return h.nodeType!=y.nodeType||h.nodeName!=y.nodeName||T(h)!=T(y)}function g(h,y){if(Ge(u,h))return;let C=y.cloneNode(!0);Ge(p,C)||(h.replaceWith(C),d(h),c(C))}function x(h,y){let C=y.nodeValue;h.nodeValue!==C&&(h.nodeValue=C)}function b(h,y){if(h._x_transitioning||h._x_isShown&&!y._x_isShown||!h._x_isShown&&y._x_isShown)return;let C=Array.from(h.attributes),L=Array.from(y.attributes);for(let A=C.length-1;A>=0;A--){let E=C[A].name;y.hasAttribute(E)||h.removeAttribute(E)}for(let A=L.length-1;A>=0;A--){let E=L[A].name,U=L[A].value;h.getAttribute(E)!==U&&h.setAttribute(E,U)}}function _(h,y){let C=O(h.children),L={},A=ka(y),E=ka(h);for(;A;){Uf(A,E);let P=T(A),D=T(E);if(!E)if(P&&L[P]){let N=L[P];h.appendChild(N),E=N}else{if(!Ge(p,A)){let N=A.cloneNode(!0);h.appendChild(N),c(N)}A=X(y,A);continue}let q=N=>N&&N.nodeType===8&&N.textContent==="[if BLOCK]>N&&N.nodeType===8&&N.textContent==="[if ENDBLOCK]>0)N--;else if(H(Y)&&N===0){E=Y;break}E=Y}let Ja=E;N=0;let Ga=A;for(;A;){let Y=X(y,A);if(q(Y))N++;else if(H(Y)&&N>0)N--;else if(H(Y)&&N===0){A=Y;break}A=Y}let Xa=A,Ya=new Kn(bt,Ja),Qa=new Kn(Ga,Xa);_(Ya,Qa);continue}if(E.nodeType===1&&s&&!E.isEqualNode(A)){let N=X(y,A),bt=!1;for(;!bt&&N;)N.nodeType===1&&E.isEqualNode(N)&&(bt=!0,E=w(h,A,E),D=T(E)),N=X(y,N)}if(P!==D){if(!P&&D){L[D]=E,E=w(h,A,E),L[D].remove(),E=X(h,E),A=X(y,A);continue}if(P&&!D&&C[P]&&(E.replaceWith(C[P]),E=C[P]),P&&D){let N=C[P];if(N)L[D]=E,E.replaceWith(N),E=N;else{L[D]=E,E=w(h,A,E),L[D].remove(),E=X(h,E),A=X(y,A);continue}}}let we=E&&X(h,E);m(E,A),A=A&&X(y,A),E=we}let U=[];for(;E;)Ge(u,E)||U.push(E),E=X(h,E);for(;U.length;){let P=U.shift();P.remove(),d(P)}}function T(h){return h&&h.nodeType===1&&o(h)}function O(h){let y={};for(let C of h){let L=T(C);L&&(y[L]=C)}return y}function w(h,y,C){if(!Ge(p,y)){let L=y.cloneNode(!0);return h.insertBefore(L,C),c(L),L}return y}return f(r),n=e,i=typeof t=="string"?$f(t):t,window.Alpine&&window.Alpine.closestDataStack&&!e._x_dataStack&&(i._x_dataStack=window.Alpine.closestDataStack(e),i._x_dataStack&&window.Alpine.cloneNode(e,i)),m(e,i),n=void 0,i=void 0,e}zn.step=()=>{};zn.log=()=>{};function Ge(e,...t){let r=!1;return e(...t,()=>r=!0),r}var Ta=!1;function $f(e){let t=document.createElement("template");return t.innerHTML=e,t.content.firstElementChild}function Df(e){return e.nodeType===3||e.nodeType===8}var Kn=class{constructor(e,t){this.startComment=e,this.endComment=t}get children(){let e=[],t=this.startComment.nextSibling;for(;t&&t!==this.endComment;)e.push(t),t=t.nextSibling;return e}appendChild(e){this.endComment.before(e)}get firstChild(){let e=this.startComment.nextSibling;if(e!==this.endComment)return e}nextNode(e){let t=e.nextSibling;if(t!==this.endComment)return t}insertBefore(e,t){return t.before(e),e}};function ka(e){return e.firstChild}function X(e,t){let r;return e instanceof Kn?r=e.nextNode(t):r=t.nextSibling,r}function Bf(){if(Ta)return;Ta=!0;let e=Element.prototype.setAttribute,t=document.createElement("div");Element.prototype.setAttribute=function(n,i){if(!n.includes("@"))return e.call(this,n,i);t.innerHTML=``;let o=t.firstElementChild.getAttributeNode(n);t.firstElementChild.removeAttributeNode(o),this.setAttributeNode(o)}}function Uf(e,t){let r=t&&t._x_bindings&&t._x_bindings.id;!r||(e.setAttribute("id",r),e.id=r)}function jf(e){e.morph=zn}var La=jf;function Hf(e){e.directive("mask",(t,{value:r,expression:n},{effect:i,evaluateLater:o,cleanup:s})=>{let a=()=>n,l="";queueMicrotask(()=>{if(["function","dynamic"].includes(r)){let c=o(n);i(()=>{a=f=>{let m;return e.dontAutoEvaluateFunctions(()=>{c(v=>{m=typeof v=="function"?v(f):v},{scope:{$input:f,$money:Wf.bind({el:t})}})}),m},d(t,!1)})}else d(t,!1);t._x_model&&t._x_model.set(t.value)});let u=new AbortController;s(()=>{u.abort()}),t.addEventListener("input",()=>d(t),{signal:u.signal,capture:!0}),t.addEventListener("blur",()=>d(t,!1),{signal:u.signal});function d(c,f=!0){let m=c.value,v=a(m);if(!v||v==="false")return!1;if(l.length-c.value.length===1)return l=c.value;let g=()=>{l=c.value=p(m,v)};f?qf(c,v,()=>{g()}):g()}function p(c,f){if(c==="")return"";let m=Na(f,c);return Ra(f,m)}}).before("model")}function qf(e,t,r){let n=e.selectionStart,i=e.value;r();let o=i.slice(0,n),s=Ra(t,Na(t,o)).length;e.setSelectionRange(s,s)}function Na(e,t){let r=t,n="",i={9:/[0-9]/,a:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/},o="";for(let s=0;s{let d="",p=0;for(let c=l.length-1;c>=0;c--)l[c]!==u&&(p===3?(d=l[c]+u+d,p=0):d=l[c]+d,p++);return d},o=e.startsWith("-")?"-":"",s=e.replaceAll(new RegExp(`[^0-9\\${t}]`,"g"),""),a=Array.from({length:s.split(t)[0].length}).fill("9").join("");return a=`${o}${i(a,r)}`,n>0&&e.includes(t)&&(a+=`${t}`+"9".repeat(n)),queueMicrotask(()=>{this.el.value.endsWith(t)||this.el.value[this.el.selectionStart-1]===t&&this.el.setSelectionRange(this.el.selectionStart-1,this.el.selectionStart-1)}),a}var Pa=Hf;function Ia(){setTimeout(()=>Kf()),yt(document,"livewire:init"),yt(document,"livewire:initializing"),S.plugin(La),S.plugin(qn),S.plugin(Ls),S.plugin(us),S.plugin(Gs),S.plugin(As),S.plugin(ks),S.plugin(Ea),S.plugin(Pa),S.addRootSelector(()=>"[wire\\:id]"),S.onAttributesAdded((e,t)=>{if(!Array.from(t).some(n=>We(n.name)))return;let r=K(e,!1);!r||t.forEach(n=>{if(!We(n.name))return;let i=Yt(e,n.name);R("directive.init",{el:e,component:r,directive:i,cleanup:o=>{S.onAttributeRemoved(e,i.raw,o)}})})}),S.interceptInit(S.skipDuringClone(e=>{if(!Array.from(e.attributes).some(r=>We(r.name)))return;if(e.hasAttribute("wire:id")){let r=Zo(e);S.onAttributeRemoved(e,"wire:id",()=>{es(r.id)})}let t=K(e,!1);t&&(R("element.init",{el:e,component:t}),Array.from(e.getAttributeNames()).filter(n=>We(n)).map(n=>Yt(e,n)).forEach(n=>{R("directive.init",{el:e,component:t,directive:n,cleanup:i=>{S.onAttributeRemoved(e,n.raw,i)}})}))})),S.start(),setTimeout(()=>window.Livewire.initialRenderIsFinished=!0),yt(document,"livewire:initialized")}function Kf(){let e=document.querySelector("script[data-update-uri][data-csrf]");if(!e)return;let t=e.closest("[wire\\:id]");t&&console.warn("Livewire: missing closing tags found. Ensure your template elements contain matching closing tags.",t)}k("effect",({component:e,effects:t})=>{zf(e,t.listeners||[])});function zf(e,t){t.forEach(r=>{let n=i=>{i.__livewire&&i.__livewire.receivedBy.push(e),e.$wire.call("__dispatch",r,i.detail||{})};window.addEventListener(r,n),e.addCleanup(()=>window.removeEventListener(r,n)),e.el.addEventListener(r,i=>{!i.__livewire||i.bubbles||(i.__livewire&&i.__livewire.receivedBy.push(e.id),e.$wire.call("__dispatch",r,i.detail||{}))})})}var Xe=new WeakMap,gr=new Set;k("payload.intercept",async({assets:e})=>{if(!!e)for(let[t,r]of Object.entries(e))await Gf(t,async()=>{await Xf(r)})});k("component.init",({component:e})=>{let t=e.snapshot.memo.assets;t&&t.forEach(r=>{gr.has(r)||gr.add(r)})});k("effect",({component:e,effects:t})=>{let r=t.scripts;r&&Object.entries(r).forEach(([n,i])=>{Vf(e,n,()=>{let o=Jf(i);S.dontAutoEvaluateFunctions(()=>{S.evaluate(e.el,o,{$wire:e.$wire})})})})});function Vf(e,t,r){if(Xe.has(e)&&Xe.get(e).includes(t))return;r(),Xe.has(e)||Xe.set(e,[]);let n=Xe.get(e);n.push(t),Xe.set(e,n)}function Jf(e){let r=/]*>([\s\S]*?)<\/script>/gm.exec(e);return r&&r[1]?r[1].trim():""}async function Gf(e,t){gr.has(e)||(await t(),gr.add(e))}async function Xf(e){let t=new DOMParser().parseFromString(e,"text/html"),r=document.adoptNode(t.head);for(let n of r.children)try{await Yf(n)}catch{}}async function Yf(e){return new Promise((t,r)=>{if(Qf(e)){let n=Zf(e);n.src?(n.onload=()=>t(),n.onerror=()=>r()):t(),document.head.appendChild(n)}else document.head.appendChild(e),t()})}function Qf(e){return e.tagName.toLowerCase()==="script"}function Zf(e){let t=document.createElement("script");t.textContent=e.textContent,t.async=e.async;for(let r of e.attributes)t.setAttribute(r.name,r.value);return t}k("effect",({component:e,effects:t})=>{let r=t.js,n=t.xjs;r&&Object.entries(r).forEach(([i,o])=>{Xo(e,i,()=>{S.evaluate(e.el,o)})}),n&&n.forEach(i=>{S.evaluate(e.el,i)})});function Fa(e,t,r){let n=t.parentElement?t.parentElement.tagName.toLowerCase():"div",i=document.createElement(n);i.innerHTML=r;let o;try{o=K(t.parentElement)}catch{}o&&(i.__livewire=o);let s=i.firstElementChild;s.__livewire=e,R("morph",{el:t,toEl:s,component:e}),S.morph(t,s,{updating:(a,l,u,d)=>{if(!Ye(a)){if(R("morph.updating",{el:a,toEl:l,component:e,skip:d,childrenOnly:u}),a.__livewire_ignore===!0||(a.__livewire_ignore_self===!0&&u(),Ma(a)&&a.getAttribute("wire:id")!==e.id))return d();Ma(a)&&(l.__livewire=e)}},updated:a=>{Ye(a)||R("morph.updated",{el:a,component:e})},removing:(a,l)=>{Ye(a)||R("morph.removing",{el:a,component:e,skip:l})},removed:a=>{Ye(a)||R("morph.removed",{el:a,component:e})},adding:a=>{R("morph.adding",{el:a,component:e})},added:a=>{if(Ye(a))return;let l=K(a).id;R("morph.added",{el:a})},key:a=>{if(!Ye(a))return a.hasAttribute("wire:key")?a.getAttribute("wire:key"):a.hasAttribute("wire:id")?a.getAttribute("wire:id"):a.id},lookahead:!1})}function Ye(e){return typeof e.hasAttribute!="function"}function Ma(e){return e.hasAttribute("wire:id")}k("effect",({component:e,effects:t})=>{let r=t.html;!r||queueMicrotask(()=>{queueMicrotask(()=>{Fa(e,e.el,r)})})});k("effect",({component:e,effects:t})=>{ed(e,t.dispatches||[])});function ed(e,t){t.forEach(({name:r,params:n={},self:i=!1,to:o})=>{i?oe(e,r,n):o?qe(o,r,n):Jt(e,r,n)})}var Vn=new wt;k("directive.init",({el:e,directive:t,cleanup:r,component:n})=>setTimeout(()=>{t.value==="submit"&&e.addEventListener("submit",()=>{let i=t.expression.startsWith("$parent")?n.parent.id:n.id,o=td(e);window.yo=o,Vn.add(i,o)})}));k("commit",({component:e,respond:t})=>{t(()=>{Vn.each(e.id,r=>r()),Vn.remove(e.id)})});function td(e){let t=[];return S.walk(e,(r,n)=>{if(!!e.contains(r)){if(r.hasAttribute("wire:ignore"))return n();rd(r)?t.push(id(r)):nd(r)&&t.push(od(r))}}),()=>{for(;t.length>0;)t.shift()()}}function rd(e){let t=e.tagName.toLowerCase();return t==="select"||t==="button"&&e.type==="submit"||t==="input"&&(e.type==="checkbox"||e.type==="radio")}function nd(e){return["input","textarea"].includes(e.tagName.toLowerCase())}function id(e){let t=e.disabled?()=>{}:()=>e.disabled=!1;return e.disabled=!0,t}function od(e){let t=e.readOnly?()=>{}:()=>e.readOnly=!1;return e.readOnly=!0,t}k("commit.pooling",({commits:e})=>{e.forEach(t=>{let r=t.component;Da(r,n=>{n.$wire.$commit()})})});k("commit.pooled",({pools:e})=>{sd(e).forEach(r=>{let n=r.component;Da(n,i=>{ad(e,n,i)})})});function sd(e){let t=[];return e.forEach(r=>{r.commits.forEach(n=>{t.push(n)})}),t}function ad(e,t,r){let n=$a(e,t),i=$a(e,r),o=i.findCommitByComponent(r);i.delete(o),n.add(o),e.forEach(s=>{s.empty()&&e.delete(s)})}function $a(e,t){for(let[r,n]of e.entries())if(n.hasCommitFor(t))return n}function Da(e,t){Ba(e,r=>{(ld(r)||ud(r))&&t(r)})}function ld(e){return!!e.snapshot.memo.props}function ud(e){return!!e.snapshot.memo.bindings}function Ba(e,t){e.children.forEach(r=>{t(r),Ba(r,t)})}k("commit",({succeed:e})=>{e(({effects:t})=>{let r=t.download;if(!r)return;let n=window.webkitURL||window.URL,i=n.createObjectURL(cd(r.content,r.contentType)),o=document.createElement("a");o.style.display="none",o.href=i,o.download=r.name,document.body.appendChild(o),o.click(),setTimeout(function(){n.revokeObjectURL(i)},0)})});function cd(e,t="",r=512){let n=atob(e),i=[];t===null&&(t="");for(let o=0;o{let t=e.snapshot.memo;t.lazyLoaded!==void 0&&(Gn.add(e),t.lazyIsolated!==void 0&&t.lazyIsolated===!1&&Jn.add(e))});k("commit.pooling",({commits:e})=>{e.forEach(t=>{!Gn.has(t.component)||(Jn.has(t.component)?(t.isolate=!1,Jn.delete(t.component)):t.isolate=!0,Gn.delete(t.component))})});k("effect",({component:e,effects:t,cleanup:r})=>{let n=t.url;!n||Object.entries(n).forEach(([i,o])=>{let{name:s,as:a,use:l,alwaysShow:u,except:d}=fd(i,o);a||(a=s);let p=[!1,null,void 0].includes(d)?W(e.ephemeral,s):d,{replace:c,push:f,pop:m}=mr(a,p,u);if(l==="replace"){let v=S.effect(()=>{c(W(e.reactive,s))});r(()=>S.release(v))}else if(l==="push"){let v=k("commit",({component:x,succeed:b})=>{if(e!==x)return;let _=W(e.canonical,s);b(()=>{let T=W(e.canonical,s);JSON.stringify(_)!==JSON.stringify(T)&&f(T)})}),g=m(async x=>{await e.$wire.set(s,x),document.querySelectorAll("input").forEach(b=>{b._x_forceModelUpdate&&b._x_forceModelUpdate(b._x_model.get())})});r(()=>{v(),g()})}})});function fd(e,t){let r={use:"replace",alwaysShow:!1};return typeof t=="string"?{...r,name:t,as:t}:{...{...r,name:e,as:e},...t}}k("request",({options:e})=>{window.Echo&&(e.headers["X-Socket-ID"]=window.Echo.socketId())});k("effect",({component:e,effects:t})=>{(t.listeners||[]).forEach(n=>{if(n.startsWith("echo")){if(typeof window.Echo>"u"){console.warn("Laravel Echo cannot be found");return}let i=n.split(/(echo:|echo-)|:|,/);i[1]=="echo:"&&i.splice(2,0,"channel",void 0),i[2]=="notification"&&i.push(void 0,void 0);let[o,s,a,l,u,d,p]=i;if(["channel","private","encryptedPrivate"].includes(a)){let c=f=>oe(e,n,[f]);window.Echo[a](u).listen(p,c),e.addCleanup(()=>{window.Echo[a](u).stopListening(p,c)})}else if(a=="presence")if(["here","joining","leaving"].includes(p))window.Echo.join(u)[p](c=>{oe(e,n,[c])});else{let c=f=>oe(e,n,[f]);window.Echo.join(u).listen(p,c),e.addCleanup(()=>{window.Echo.leaveChannel(u)})}else a=="notification"?window.Echo.private(u).notification(c=>{oe(e,n,[c])}):console.warn("Echo channel type not yet supported")}})});var Ua=new WeakSet;k("component.init",({component:e})=>{e.snapshot.memo.isolate===!0&&Ua.add(e)});k("commit.pooling",({commits:e})=>{e.forEach(t=>{!Ua.has(t.component)||(t.isolate=!0)})});dd()&&Alpine.navigate.disableProgressBar();document.addEventListener("alpine:navigate",e=>Xn("livewire:navigate",e));document.addEventListener("alpine:navigating",e=>Xn("livewire:navigating",e));document.addEventListener("alpine:navigated",e=>Xn("livewire:navigated",e));function Xn(e,t){let r=new CustomEvent(e,{cancelable:!0,bubbles:!0,detail:t.detail});document.dispatchEvent(r),r.defaultPrevented&&t.preventDefault()}function ja(e,t,r){e.redirectUsingNavigate?Alpine.navigate(t):r()}function dd(){return!!(document.querySelector("[data-no-progress-bar]")||window.livewireScriptConfig&&window.livewireScriptConfig.progressBar===!1)}k("effect",({effects:e})=>{if(!e.redirect)return;let t=e.redirect;ja(e,t,()=>{window.location.href=t})});k("morph.added",({el:e})=>{e.__addedByMorph=!0});M("transition",({el:e,directive:t,component:r,cleanup:n})=>{let i=S.reactive({state:!e.__addedByMorph});S.bind(e,{[t.rawName.replace("wire:","x-")]:"","x-show"(){return i.state}}),e.__addedByMorph&&setTimeout(()=>i.state=!0);let o=[];o.push(k("morph.removing",({el:s,skip:a})=>{a(),s.addEventListener("transitionend",()=>{s.remove()}),i.state=!1,o.push(k("morph",({component:l})=>{l===r&&(s.remove(),o.forEach(u=>u()))}))})),n(()=>o.forEach(s=>s()))});var pd=new Fe;function Ha(e,t){pd.each(e,r=>{r.callback(),r.callback=()=>{}}),t()}k("directive.init",({el:e,directive:t,cleanup:r,component:n})=>{if(["snapshot","effects","model","init","loading","poll","ignore","id","data","key","target","dirty"].includes(t.value)||as(t.value))return;let i=t.rawName.replace("wire:","x-on:");t.value==="submit"&&!t.modifiers.includes("prevent")&&(i=i+".prevent");let o=S.bind(e,{[i](s){let a=()=>{Ha(n,()=>{S.evaluate(e,"$wire."+t.expression,{scope:{$event:s}})})};e.__livewire_confirm?e.__livewire_confirm(()=>{a()},()=>{s.stopImmediatePropagation()}):a()}});r(o)});S.addInitSelector(()=>"[wire\\:navigate]");S.addInitSelector(()=>"[wire\\:navigate\\.hover]");S.interceptInit(S.skipDuringClone(e=>{e.hasAttribute("wire:navigate")?S.bind(e,{["x-navigate"]:!0}):e.hasAttribute("wire:navigate.hover")&&S.bind(e,{["x-navigate.hover"]:!0})}));document.addEventListener("alpine:navigating",()=>{Livewire.all().forEach(e=>{e.inscribeSnapshotAndEffectsOnElement()})});M("confirm",({el:e,directive:t})=>{let r=t.expression,n=t.modifiers.includes("prompt");r=r.replaceAll("\\n",` + `;let t=oi();t&&(e.nonce=t),document.head.appendChild(e)}var Un=[],ha=["data-csrf","aria-hidden"];function jn(e,t){let r=new DOMParser().parseFromString(e,"text/html"),n=document.adoptNode(r.body),i=document.adoptNode(r.head);Un=Un.concat(Array.from(document.body.querySelectorAll("script")).map(a=>ba(wa(a.outerHTML,ha))));let o=()=>{};kf(i).finally(()=>{o()}),Tf(n,Un);let s=document.body;document.body.replaceWith(n),Alpine.destroyTree(s),t(a=>o=a)}function Tf(e,t){e.querySelectorAll("script").forEach(r=>{if(r.hasAttribute("data-navigate-once")){let n=ba(wa(r.outerHTML,ha));if(t.includes(n))return}r.replaceWith(ma(r))})}function kf(e){let t=Array.from(document.head.children),r=t.map(s=>s.outerHTML),n=document.createDocumentFragment(),i=[],o=[];for(let s of Array.from(e.children))if(pa(s)){if(r.includes(s.outerHTML))n.appendChild(s);else if(ga(s)&&Nf(s,t)&&setTimeout(()=>window.location.reload()),va(s))try{o.push(Lf(ma(s)))}catch{}else document.head.appendChild(s);i.push(s)}for(let s of Array.from(document.head.children))pa(s)||s.remove();for(let s of Array.from(e.children))document.head.appendChild(s);return Promise.all(o)}async function Lf(e){return new Promise((t,r)=>{e.src?(e.onload=()=>t(),e.onerror=()=>r()):t(),document.head.appendChild(e)})}function ma(e){let t=document.createElement("script");t.textContent=e.textContent,t.async=e.async;for(let r of e.attributes)t.setAttribute(r.name,r.value);return t}function ga(e){return e.hasAttribute("data-navigate-track")}function Nf(e,t){let[r,n]=da(e);return t.some(i=>{if(!ga(i))return!1;let[o,s]=da(i);if(o===r&&n!==s)return!0})}function da(e){return(va(e)?e.src:e.href).split("?")}function pa(e){return e.tagName.toLowerCase()==="link"&&e.getAttribute("rel").toLowerCase()==="stylesheet"||e.tagName.toLowerCase()==="style"||e.tagName.toLowerCase()==="script"}function va(e){return e.tagName.toLowerCase()==="script"}function ba(e){return e.split("").reduce((t,r)=>(t=(t<<5)-t+r.charCodeAt(0),t&t),0)}function wa(e,t){let r=e;return t.forEach(n=>{let i=new RegExp(`${n}="[^"]*"|${n}='[^']*'`,"g");r=r.replace(i,"")}),r=r.replaceAll(" ",""),r.trim()}var pr=!0,Hn=!0,Rf=!0,ya=!1;function Ea(e){e.navigate=r=>{let n=be(r);ue("alpine:navigate",{url:n,history:!1,cached:!1})||t(n)},e.navigate.disableProgressBar=()=>{Hn=!1},e.addInitSelector(()=>`[${e.prefixed("navigate")}]`),e.directive("navigate",(r,{modifiers:n})=>{n.includes("hover")&&ra(r,60,()=>{let o=On(r);kn(o,(s,a)=>{Ln(s,o,a)})}),ta(r,o=>{let s=On(r);kn(s,(a,l)=>{Ln(a,s,l)}),o(()=>{ue("alpine:navigate",{url:s,history:!1,cached:!1})||t(s)})})});function t(r,n=!0){Hn&&ua(),Pf(r,(i,o)=>{ue("alpine:navigating"),Rf&&In(),Hn&&ca(),If(),Xs(),xa(e,s=>{pr&&Fn(a=>{Nn(a)}),n?Zs(i,o):Cn(o,i),jn(i,a=>{Rn(document.body),pr&&$n((l,u)=>{Pn(l)}),Mn(),a(()=>{s(()=>{setTimeout(()=>{ya&&Sa()}),_a(e),ue("alpine:navigated")})})})})})}Qs(r=>{r(n=>{let i=be(n);if(ue("alpine:navigate",{url:i,history:!0,cached:!1}))return;t(i,!1)})},(r,n,i,o)=>{let s=be(n);ue("alpine:navigate",{url:s,history:!0,cached:!0})||(In(),ue("alpine:navigating"),Ys(i,o),xa(e,l=>{pr&&Fn(u=>{Nn(u)}),jn(r,()=>{fa(),Rn(document.body),pr&&$n((u,d)=>{Pn(u)}),Mn(),l(()=>{ya&&Sa(),_a(e),ue("alpine:navigated")})})}))}),setTimeout(()=>{ue("alpine:navigated")})}function Pf(e,t){ia(e,t,()=>{na(e,t)})}function xa(e,t){e.stopObservingMutations(),t(r=>{e.startObservingMutations(),queueMicrotask(()=>{r()})})}function ue(e,t){let r=new CustomEvent(e,{cancelable:!0,bubbles:!0,detail:t});return document.dispatchEvent(r),r.defaultPrevented}function _a(e){e.initTree(document.body,void 0,(t,r)=>{t._x_wasPersisted&&r()})}function Sa(){document.querySelector("[autofocus]")&&document.querySelector("[autofocus]").focus()}function If(){let e=function(t,r){Alpine.walk(t,(n,i)=>{sa(n)&&i(),oa(n)?i():r(n,i)})};Alpine.destroyTree(document.body,e)}function qn(e){e.magic("queryString",(t,{interceptor:r})=>{let n,i=!1,o=!1;return r((s,a,l,u,d)=>{let p=n||u,{initial:c,replace:f,push:m,pop:v}=mr(p,s,i);return l(c),o?(e.effect(()=>m(a())),v(async g=>{l(g),await(()=>Promise.resolve())()})):e.effect(()=>f(a())),c},s=>{s.alwaysShow=()=>(i=!0,s),s.usePush=()=>(o=!0,s),s.as=a=>(n=a,s)})}),e.history={track:mr}}function mr(e,t,r=!1){let{has:n,get:i,set:o,remove:s}=Ff(),a=new URL(window.location.href),l=n(a,e),u=l?i(a,e):t,d=JSON.stringify(u),p=m=>JSON.stringify(m)===d;r&&(a=o(a,e,u)),Aa(a,e,{value:u});let c=!1,f=(m,v)=>{if(c)return;let g=new URL(window.location.href);!r&&!l&&p(v)||v===void 0?g=s(g,e):g=o(g,e,v),m(g,e,{value:v})};return{initial:u,replace(m){f(Aa,m)},push(m){f(Mf,m)},pop(m){let v=g=>{!g.state||!g.state.alpine||Object.entries(g.state.alpine).forEach(([x,{value:b}])=>{if(x!==e)return;c=!0;let _=m(b);_ instanceof Promise?_.finally(()=>c=!1):c=!1})};return window.addEventListener("popstate",v),()=>window.removeEventListener("popstate",v)}}}function Aa(e,t,r){let n=window.history.state||{};n.alpine||(n.alpine={}),n.alpine[t]=Wn(r),window.history.replaceState(n,"",e.toString())}function Mf(e,t,r){let n=window.history.state||{};n.alpine||(n.alpine={}),n={alpine:{...n.alpine,[t]:Wn(r)}},window.history.pushState(n,"",e.toString())}function Wn(e){if(e!==void 0)return JSON.parse(JSON.stringify(e))}function Ff(){return{has(e,t){let r=e.search;if(!r)return!1;let n=hr(r);return Object.keys(n).includes(t)},get(e,t){let r=e.search;return r?hr(r)[t]:!1},set(e,t,r){let n=hr(e.search);return n[t]=Oa(Wn(r)),e.search=Ca(n),e},remove(e,t){let r=hr(e.search);return delete r[t],e.search=Ca(r),e}}}function Oa(e){if(!_t(e))return e;for(let t in e)e[t]===null?delete e[t]:e[t]=Oa(e[t]);return e}function Ca(e){let t=i=>typeof i=="object"&&i!==null,r=(i,o={},s="")=>(Object.entries(i).forEach(([a,l])=>{let u=s===""?a:`${s}[${a}]`;l===null?o[u]="":t(l)?o={...o,...r(l,o,u)}:o[u]=encodeURIComponent(l).replaceAll("%20","+").replaceAll("%2C",",")}),o),n=r(e);return Object.entries(n).map(([i,o])=>`${i}=${o}`).join("&")}function hr(e){if(e=e.replace("?",""),e==="")return{};let t=(i,o,s)=>{let[a,l,...u]=i.split(".");if(!l)return s[i]=o;s[a]===void 0&&(s[a]=isNaN(l)?{}:[]),t([l,...u].join("."),o,s[a])},r=e.split("&").map(i=>i.split("=")),n=Object.create(null);return r.forEach(([i,o])=>{if(!(typeof o>"u"))if(o=decodeURIComponent(o.replaceAll("+","%20")),!i.includes("["))n[i]=o;else{let s=i.replaceAll("[",".").replaceAll("]","");t(s,o,n)}}),n}function zn(e,t,r){Bf();let n,i,o,s,a,l,u,d,p,c;function f(h={}){let y=L=>L.getAttribute("key"),C=()=>{};a=h.updating||C,l=h.updated||C,u=h.removing||C,d=h.removed||C,p=h.adding||C,c=h.added||C,o=h.key||y,s=h.lookahead||!1}function m(h,y){if(v(h,y))return g(h,y);let C=!1;if(!Ge(a,h,y,()=>C=!0)){if(h.nodeType===1&&window.Alpine&&(window.Alpine.cloneNode(h,y),h._x_teleport&&y._x_teleport&&m(h._x_teleport,y._x_teleport)),Df(y)){x(h,y),l(h,y);return}C||b(h,y),l(h,y),_(h,y)}}function v(h,y){return h.nodeType!=y.nodeType||h.nodeName!=y.nodeName||T(h)!=T(y)}function g(h,y){if(Ge(u,h))return;let C=y.cloneNode(!0);Ge(p,C)||(h.replaceWith(C),d(h),c(C))}function x(h,y){let C=y.nodeValue;h.nodeValue!==C&&(h.nodeValue=C)}function b(h,y){if(h._x_transitioning||h._x_isShown&&!y._x_isShown||!h._x_isShown&&y._x_isShown)return;let C=Array.from(h.attributes),L=Array.from(y.attributes);for(let A=C.length-1;A>=0;A--){let E=C[A].name;y.hasAttribute(E)||h.removeAttribute(E)}for(let A=L.length-1;A>=0;A--){let E=L[A].name,U=L[A].value;h.getAttribute(E)!==U&&h.setAttribute(E,U)}}function _(h,y){let C=O(h.children),L={},A=ka(y),E=ka(h);for(;A;){Uf(A,E);let P=T(A),D=T(E);if(!E)if(P&&L[P]){let N=L[P];h.appendChild(N),E=N}else{if(!Ge(p,A)){let N=A.cloneNode(!0);h.appendChild(N),c(N)}A=X(y,A);continue}let q=N=>N&&N.nodeType===8&&N.textContent==="[if BLOCK]>N&&N.nodeType===8&&N.textContent==="[if ENDBLOCK]>0)N--;else if(H(Y)&&N===0){E=Y;break}E=Y}let Ja=E;N=0;let Ga=A;for(;A;){let Y=X(y,A);if(q(Y))N++;else if(H(Y)&&N>0)N--;else if(H(Y)&&N===0){A=Y;break}A=Y}let Xa=A,Ya=new Kn(bt,Ja),Qa=new Kn(Ga,Xa);_(Ya,Qa);continue}if(E.nodeType===1&&s&&!E.isEqualNode(A)){let N=X(y,A),bt=!1;for(;!bt&&N;)N.nodeType===1&&E.isEqualNode(N)&&(bt=!0,E=w(h,A,E),D=T(E)),N=X(y,N)}if(P!==D){if(!P&&D){L[D]=E,E=w(h,A,E),L[D].remove(),E=X(h,E),A=X(y,A);continue}if(P&&!D&&C[P]&&(E.replaceWith(C[P]),E=C[P]),P&&D){let N=C[P];if(N)L[D]=E,E.replaceWith(N),E=N;else{L[D]=E,E=w(h,A,E),L[D].remove(),E=X(h,E),A=X(y,A);continue}}}let we=E&&X(h,E);m(E,A),A=A&&X(y,A),E=we}let U=[];for(;E;)Ge(u,E)||U.push(E),E=X(h,E);for(;U.length;){let P=U.shift();P.remove(),d(P)}}function T(h){return h&&h.nodeType===1&&o(h)}function O(h){let y={};for(let C of h){let L=T(C);L&&(y[L]=C)}return y}function w(h,y,C){if(!Ge(p,y)){let L=y.cloneNode(!0);return h.insertBefore(L,C),c(L),L}return y}return f(r),n=e,i=typeof t=="string"?$f(t):t,window.Alpine&&window.Alpine.closestDataStack&&!e._x_dataStack&&(i._x_dataStack=window.Alpine.closestDataStack(e),i._x_dataStack&&window.Alpine.cloneNode(e,i)),m(e,i),n=void 0,i=void 0,e}zn.step=()=>{};zn.log=()=>{};function Ge(e,...t){let r=!1;return e(...t,()=>r=!0),r}var Ta=!1;function $f(e){let t=document.createElement("template");return t.innerHTML=e,t.content.firstElementChild}function Df(e){return e.nodeType===3||e.nodeType===8}var Kn=class{constructor(e,t){this.startComment=e,this.endComment=t}get children(){let e=[],t=this.startComment.nextSibling;for(;t&&t!==this.endComment;)e.push(t),t=t.nextSibling;return e}appendChild(e){this.endComment.before(e)}get firstChild(){let e=this.startComment.nextSibling;if(e!==this.endComment)return e}nextNode(e){let t=e.nextSibling;if(t!==this.endComment)return t}insertBefore(e,t){return t.before(e),e}};function ka(e){return e.firstChild}function X(e,t){let r;return e instanceof Kn?r=e.nextNode(t):r=t.nextSibling,r}function Bf(){if(Ta)return;Ta=!0;let e=Element.prototype.setAttribute,t=document.createElement("div");Element.prototype.setAttribute=function(n,i){if(!n.includes("@"))return e.call(this,n,i);t.innerHTML=``;let o=t.firstElementChild.getAttributeNode(n);t.firstElementChild.removeAttributeNode(o),this.setAttributeNode(o)}}function Uf(e,t){let r=t&&t._x_bindings&&t._x_bindings.id;!r||(e.setAttribute("id",r),e.id=r)}function jf(e){e.morph=zn}var La=jf;function Hf(e){e.directive("mask",(t,{value:r,expression:n},{effect:i,evaluateLater:o,cleanup:s})=>{let a=()=>n,l="";queueMicrotask(()=>{if(["function","dynamic"].includes(r)){let c=o(n);i(()=>{a=f=>{let m;return e.dontAutoEvaluateFunctions(()=>{c(v=>{m=typeof v=="function"?v(f):v},{scope:{$input:f,$money:Wf.bind({el:t})}})}),m},d(t,!1)})}else d(t,!1);t._x_model&&t._x_model.set(t.value)});let u=new AbortController;s(()=>{u.abort()}),t.addEventListener("input",()=>d(t),{signal:u.signal,capture:!0}),t.addEventListener("blur",()=>d(t,!1),{signal:u.signal});function d(c,f=!0){let m=c.value,v=a(m);if(!v||v==="false")return!1;if(l.length-c.value.length===1)return l=c.value;let g=()=>{l=c.value=p(m,v)};f?qf(c,v,()=>{g()}):g()}function p(c,f){if(c==="")return"";let m=Na(f,c);return Ra(f,m)}}).before("model")}function qf(e,t,r){let n=e.selectionStart,i=e.value;r();let o=i.slice(0,n),s=Ra(t,Na(t,o)).length;e.setSelectionRange(s,s)}function Na(e,t){let r=t,n="",i={9:/[0-9]/,a:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/},o="";for(let s=0;s{let d="",p=0;for(let c=l.length-1;c>=0;c--)l[c]!==u&&(p===3?(d=l[c]+u+d,p=0):d=l[c]+d,p++);return d},o=e.startsWith("-")?"-":"",s=e.replaceAll(new RegExp(`[^0-9\\${t}]`,"g"),""),a=Array.from({length:s.split(t)[0].length}).fill("9").join("");return a=`${o}${i(a,r)}`,n>0&&e.includes(t)&&(a+=`${t}`+"9".repeat(n)),queueMicrotask(()=>{this.el.value.endsWith(t)||this.el.value[this.el.selectionStart-1]===t&&this.el.setSelectionRange(this.el.selectionStart-1,this.el.selectionStart-1)}),a}var Pa=Hf;function Ia(){setTimeout(()=>Kf()),yt(document,"livewire:init"),yt(document,"livewire:initializing"),S.plugin(La),S.plugin(qn),S.plugin(Ls),S.plugin(us),S.plugin(Gs),S.plugin(As),S.plugin(ks),S.plugin(Ea),S.plugin(Pa),S.addRootSelector(()=>"[wire\\:id]"),S.onAttributesAdded((e,t)=>{if(!Array.from(t).some(n=>We(n.name)))return;let r=K(e,!1);!r||t.forEach(n=>{if(!We(n.name))return;let i=Yt(e,n.name);R("directive.init",{el:e,component:r,directive:i,cleanup:o=>{S.onAttributeRemoved(e,i.raw,o)}})})}),S.interceptInit(S.skipDuringClone(e=>{if(!Array.from(e.attributes).some(r=>We(r.name)))return;if(e.hasAttribute("wire:id")){let r=Zo(e);S.onAttributeRemoved(e,"wire:id",()=>{es(r.id)})}let t=K(e,!1);t&&(R("element.init",{el:e,component:t}),Array.from(e.getAttributeNames()).filter(n=>We(n)).map(n=>Yt(e,n)).forEach(n=>{R("directive.init",{el:e,component:t,directive:n,cleanup:i=>{S.onAttributeRemoved(e,n.raw,i)}})}))})),S.start(),setTimeout(()=>window.Livewire.initialRenderIsFinished=!0),yt(document,"livewire:initialized")}function Kf(){let e=document.querySelector("script[data-update-uri][data-csrf]");if(!e)return;let t=e.closest("[wire\\:id]");t&&console.warn("Livewire: missing closing tags found. Ensure your template elements contain matching closing tags.",t)}k("effect",({component:e,effects:t})=>{zf(e,t.listeners||[])});function zf(e,t){t.forEach(r=>{let n=i=>{i.__livewire&&i.__livewire.receivedBy.push(e),e.$wire.call("__dispatch",r,i.detail||{})};window.addEventListener(r,n),e.addCleanup(()=>window.removeEventListener(r,n)),e.el.addEventListener(r,i=>{!i.__livewire||i.bubbles||(i.__livewire&&i.__livewire.receivedBy.push(e.id),e.$wire.call("__dispatch",r,i.detail||{}))})})}var Xe=new WeakMap,gr=new Set;k("payload.intercept",async({assets:e})=>{if(!!e)for(let[t,r]of Object.entries(e))await Gf(t,async()=>{await Xf(r)})});k("component.init",({component:e})=>{let t=e.snapshot.memo.assets;t&&t.forEach(r=>{gr.has(r)||gr.add(r)})});k("effect",({component:e,effects:t})=>{let r=t.scripts;r&&Object.entries(r).forEach(([n,i])=>{Vf(e,n,()=>{let o=Jf(i);S.dontAutoEvaluateFunctions(()=>{S.evaluate(e.el,o,{$wire:e.$wire})})})})});function Vf(e,t,r){if(Xe.has(e)&&Xe.get(e).includes(t))return;r(),Xe.has(e)||Xe.set(e,[]);let n=Xe.get(e);n.push(t),Xe.set(e,n)}function Jf(e){let r=/]*>([\s\S]*?)<\/script>/gm.exec(e);return r&&r[1]?r[1].trim():""}async function Gf(e,t){gr.has(e)||(await t(),gr.add(e))}async function Xf(e){let t=new DOMParser().parseFromString(e,"text/html"),r=document.adoptNode(t.head);for(let n of r.children)try{await Yf(n)}catch{}}async function Yf(e){return new Promise((t,r)=>{if(Qf(e)){let n=Zf(e);n.src?(n.onload=()=>t(),n.onerror=()=>r()):t(),document.head.appendChild(n)}else document.head.appendChild(e),t()})}function Qf(e){return e.tagName.toLowerCase()==="script"}function Zf(e){let t=document.createElement("script");t.textContent=e.textContent,t.async=e.async;for(let r of e.attributes)t.setAttribute(r.name,r.value);return t}k("effect",({component:e,effects:t})=>{let r=t.js,n=t.xjs;r&&Object.entries(r).forEach(([i,o])=>{Xo(e,i,()=>{S.evaluate(e.el,o)})}),n&&n.forEach(i=>{S.evaluate(e.el,i)})});function Fa(e,t,r){let n=t.parentElement?t.parentElement.tagName.toLowerCase():"div",i=document.createElement(n);i.innerHTML=r;let o;try{o=K(t.parentElement)}catch{}o&&(i.__livewire=o);let s=i.firstElementChild;s.__livewire=e,R("morph",{el:t,toEl:s,component:e}),S.morph(t,s,{updating:(a,l,u,d)=>{if(!Ye(a)){if(R("morph.updating",{el:a,toEl:l,component:e,skip:d,childrenOnly:u}),a.__livewire_ignore===!0||(a.__livewire_ignore_self===!0&&u(),Ma(a)&&a.getAttribute("wire:id")!==e.id))return d();Ma(a)&&(l.__livewire=e)}},updated:a=>{Ye(a)||R("morph.updated",{el:a,component:e})},removing:(a,l)=>{Ye(a)||R("morph.removing",{el:a,component:e,skip:l})},removed:a=>{Ye(a)||R("morph.removed",{el:a,component:e})},adding:a=>{R("morph.adding",{el:a,component:e})},added:a=>{if(Ye(a))return;let l=K(a).id;R("morph.added",{el:a})},key:a=>{if(!Ye(a))return a.hasAttribute("wire:key")?a.getAttribute("wire:key"):a.hasAttribute("wire:id")?a.getAttribute("wire:id"):a.id},lookahead:!1})}function Ye(e){return typeof e.hasAttribute!="function"}function Ma(e){return e.hasAttribute("wire:id")}k("effect",({component:e,effects:t})=>{let r=t.html;!r||queueMicrotask(()=>{queueMicrotask(()=>{Fa(e,e.el,r)})})});k("effect",({component:e,effects:t})=>{ed(e,t.dispatches||[])});function ed(e,t){t.forEach(({name:r,params:n={},self:i=!1,to:o})=>{i?oe(e,r,n):o?qe(o,r,n):Jt(e,r,n)})}var Vn=new wt;k("directive.init",({el:e,directive:t,cleanup:r,component:n})=>setTimeout(()=>{t.value==="submit"&&e.addEventListener("submit",()=>{let i=t.expression.startsWith("$parent")?n.parent.id:n.id,o=td(e);Vn.add(i,o)})}));k("commit",({component:e,respond:t})=>{t(()=>{Vn.each(e.id,r=>r()),Vn.remove(e.id)})});function td(e){let t=[];return S.walk(e,(r,n)=>{if(!!e.contains(r)){if(r.hasAttribute("wire:ignore"))return n();rd(r)?t.push(id(r)):nd(r)&&t.push(od(r))}}),()=>{for(;t.length>0;)t.shift()()}}function rd(e){let t=e.tagName.toLowerCase();return t==="select"||t==="button"&&e.type==="submit"||t==="input"&&(e.type==="checkbox"||e.type==="radio")}function nd(e){return["input","textarea"].includes(e.tagName.toLowerCase())}function id(e){let t=e.disabled?()=>{}:()=>e.disabled=!1;return e.disabled=!0,t}function od(e){let t=e.readOnly?()=>{}:()=>e.readOnly=!1;return e.readOnly=!0,t}k("commit.pooling",({commits:e})=>{e.forEach(t=>{let r=t.component;Da(r,n=>{n.$wire.$commit()})})});k("commit.pooled",({pools:e})=>{sd(e).forEach(r=>{let n=r.component;Da(n,i=>{ad(e,n,i)})})});function sd(e){let t=[];return e.forEach(r=>{r.commits.forEach(n=>{t.push(n)})}),t}function ad(e,t,r){let n=$a(e,t),i=$a(e,r),o=i.findCommitByComponent(r);i.delete(o),n.add(o),e.forEach(s=>{s.empty()&&e.delete(s)})}function $a(e,t){for(let[r,n]of e.entries())if(n.hasCommitFor(t))return n}function Da(e,t){Ba(e,r=>{(ld(r)||ud(r))&&t(r)})}function ld(e){return!!e.snapshot.memo.props}function ud(e){return!!e.snapshot.memo.bindings}function Ba(e,t){e.children.forEach(r=>{t(r),Ba(r,t)})}k("commit",({succeed:e})=>{e(({effects:t})=>{let r=t.download;if(!r)return;let n=window.webkitURL||window.URL,i=n.createObjectURL(cd(r.content,r.contentType)),o=document.createElement("a");o.style.display="none",o.href=i,o.download=r.name,document.body.appendChild(o),o.click(),setTimeout(function(){n.revokeObjectURL(i)},0)})});function cd(e,t="",r=512){let n=atob(e),i=[];t===null&&(t="");for(let o=0;o{let t=e.snapshot.memo;t.lazyLoaded!==void 0&&(Gn.add(e),t.lazyIsolated!==void 0&&t.lazyIsolated===!1&&Jn.add(e))});k("commit.pooling",({commits:e})=>{e.forEach(t=>{!Gn.has(t.component)||(Jn.has(t.component)?(t.isolate=!1,Jn.delete(t.component)):t.isolate=!0,Gn.delete(t.component))})});k("effect",({component:e,effects:t,cleanup:r})=>{let n=t.url;!n||Object.entries(n).forEach(([i,o])=>{let{name:s,as:a,use:l,alwaysShow:u,except:d}=fd(i,o);a||(a=s);let p=[!1,null,void 0].includes(d)?W(e.ephemeral,s):d,{replace:c,push:f,pop:m}=mr(a,p,u);if(l==="replace"){let v=S.effect(()=>{c(W(e.reactive,s))});r(()=>S.release(v))}else if(l==="push"){let v=k("commit",({component:x,succeed:b})=>{if(e!==x)return;let _=W(e.canonical,s);b(()=>{let T=W(e.canonical,s);JSON.stringify(_)!==JSON.stringify(T)&&f(T)})}),g=m(async x=>{await e.$wire.set(s,x),document.querySelectorAll("input").forEach(b=>{b._x_forceModelUpdate&&b._x_forceModelUpdate(b._x_model.get())})});r(()=>{v(),g()})}})});function fd(e,t){let r={use:"replace",alwaysShow:!1};return typeof t=="string"?{...r,name:t,as:t}:{...{...r,name:e,as:e},...t}}k("request",({options:e})=>{window.Echo&&(e.headers["X-Socket-ID"]=window.Echo.socketId())});k("effect",({component:e,effects:t})=>{(t.listeners||[]).forEach(n=>{if(n.startsWith("echo")){if(typeof window.Echo>"u"){console.warn("Laravel Echo cannot be found");return}let i=n.split(/(echo:|echo-)|:|,/);i[1]=="echo:"&&i.splice(2,0,"channel",void 0),i[2]=="notification"&&i.push(void 0,void 0);let[o,s,a,l,u,d,p]=i;if(["channel","private","encryptedPrivate"].includes(a)){let c=f=>oe(e,n,[f]);window.Echo[a](u).listen(p,c),e.addCleanup(()=>{window.Echo[a](u).stopListening(p,c)})}else if(a=="presence")if(["here","joining","leaving"].includes(p))window.Echo.join(u)[p](c=>{oe(e,n,[c])});else{let c=f=>oe(e,n,[f]);window.Echo.join(u).listen(p,c),e.addCleanup(()=>{window.Echo.leaveChannel(u)})}else a=="notification"?window.Echo.private(u).notification(c=>{oe(e,n,[c])}):console.warn("Echo channel type not yet supported")}})});var Ua=new WeakSet;k("component.init",({component:e})=>{e.snapshot.memo.isolate===!0&&Ua.add(e)});k("commit.pooling",({commits:e})=>{e.forEach(t=>{!Ua.has(t.component)||(t.isolate=!0)})});dd()&&Alpine.navigate.disableProgressBar();document.addEventListener("alpine:navigate",e=>Xn("livewire:navigate",e));document.addEventListener("alpine:navigating",e=>Xn("livewire:navigating",e));document.addEventListener("alpine:navigated",e=>Xn("livewire:navigated",e));function Xn(e,t){let r=new CustomEvent(e,{cancelable:!0,bubbles:!0,detail:t.detail});document.dispatchEvent(r),r.defaultPrevented&&t.preventDefault()}function ja(e,t,r){e.redirectUsingNavigate?Alpine.navigate(t):r()}function dd(){return!!(document.querySelector("[data-no-progress-bar]")||window.livewireScriptConfig&&window.livewireScriptConfig.progressBar===!1)}k("effect",({effects:e})=>{if(!e.redirect)return;let t=e.redirect;ja(e,t,()=>{window.location.href=t})});k("morph.added",({el:e})=>{e.__addedByMorph=!0});M("transition",({el:e,directive:t,component:r,cleanup:n})=>{let i=S.reactive({state:!e.__addedByMorph});S.bind(e,{[t.rawName.replace("wire:","x-")]:"","x-show"(){return i.state}}),e.__addedByMorph&&setTimeout(()=>i.state=!0);let o=[];o.push(k("morph.removing",({el:s,skip:a})=>{a(),s.addEventListener("transitionend",()=>{s.remove()}),i.state=!1,o.push(k("morph",({component:l})=>{l===r&&(s.remove(),o.forEach(u=>u()))}))})),n(()=>o.forEach(s=>s()))});var pd=new Fe;function Ha(e,t){pd.each(e,r=>{r.callback(),r.callback=()=>{}}),t()}k("directive.init",({el:e,directive:t,cleanup:r,component:n})=>{if(["snapshot","effects","model","init","loading","poll","ignore","id","data","key","target","dirty"].includes(t.value)||as(t.value))return;let i=t.rawName.replace("wire:","x-on:");t.value==="submit"&&!t.modifiers.includes("prevent")&&(i=i+".prevent");let o=S.bind(e,{[i](s){let a=()=>{Ha(n,()=>{S.evaluate(e,"$wire."+t.expression,{scope:{$event:s}})})};e.__livewire_confirm?e.__livewire_confirm(()=>{a()},()=>{s.stopImmediatePropagation()}):a()}});r(o)});S.addInitSelector(()=>"[wire\\:navigate]");S.addInitSelector(()=>"[wire\\:navigate\\.hover]");S.interceptInit(S.skipDuringClone(e=>{e.hasAttribute("wire:navigate")?S.bind(e,{["x-navigate"]:!0}):e.hasAttribute("wire:navigate.hover")&&S.bind(e,{["x-navigate.hover"]:!0})}));document.addEventListener("alpine:navigating",()=>{Livewire.all().forEach(e=>{e.inscribeSnapshotAndEffectsOnElement()})});M("confirm",({el:e,directive:t})=>{let r=t.expression,n=t.modifiers.includes("prompt");r=r.replaceAll("\\n",` `),r===""&&(r="Are you sure?"),e.__livewire_confirm=(i,o)=>{if(n){let[s,a]=r.split("|");a?prompt(s)===a?i():o():console.warn("Livewire: Must provide expectation with wire:confirm.prompt")}else confirm(r)?i():o()}});function ne(e,t,r,n=null){if(r=t.modifiers.includes("remove")?!r:r,t.modifiers.includes("class")){let i=t.expression.split(" ").filter(String);r?e.classList.add(...i):e.classList.remove(...i)}else if(t.modifiers.includes("attr"))r?e.setAttribute(t.expression,!0):e.removeAttribute(t.expression);else{let i=n??window.getComputedStyle(e,null).getPropertyValue("display"),o=["inline","block","table","flex","grid","inline-flex"].filter(s=>t.modifiers.includes(s))[0]||"inline-block";o=t.modifiers.includes("remove")&&!r?i:o,e.style.display=r?o:"none"}}var Yn=new Set,Qn=new Set;window.addEventListener("offline",()=>Yn.forEach(e=>e()));window.addEventListener("online",()=>Qn.forEach(e=>e()));M("offline",({el:e,directive:t,cleanup:r})=>{let n=()=>ne(e,t,!0),i=()=>ne(e,t,!1);Yn.add(n),Qn.add(i),r(()=>{Yn.delete(n),Qn.delete(i)})});M("loading",({el:e,directive:t,component:r,cleanup:n})=>{let{targets:i,inverted:o}=bd(e),[s,a]=hd(t),l=md(r,i,o,[()=>s(()=>ne(e,t,!0)),()=>a(()=>ne(e,t,!1))]),u=gd(r,i,[()=>s(()=>ne(e,t,!0)),()=>a(()=>ne(e,t,!1))]);n(()=>{l(),u()})});function hd(e){if(!e.modifiers.includes("delay")||e.modifiers.includes("none"))return[o=>o(),o=>o()];let t=200,r={shortest:50,shorter:100,short:150,default:200,long:300,longer:500,longest:1e3};Object.keys(r).some(o=>{if(e.modifiers.includes(o))return t=r[o],!0});let n,i=!1;return[o=>{n=setTimeout(()=>{o(),i=!0},t)},async o=>{i?(await o(),i=!1):clearTimeout(n)}]}function md(e,t,r,[n,i]){return k("commit",({component:o,commit:s,respond:a})=>{o===e&&(t.length>0&&vd(s,t)===r||(n(),a(()=>{i()})))})}function gd(e,t,[r,n]){let i=l=>{let{id:u,property:d}=l.detail;return u!==e.id||t.length>0&&!t.map(p=>p.target).includes(d)},o=xt(window,"livewire-upload-start",l=>{i(l)||r()}),s=xt(window,"livewire-upload-finish",l=>{i(l)||n()}),a=xt(window,"livewire-upload-error",l=>{i(l)||n()});return()=>{o(),s(),a()}}function vd(e,t){let{updates:r,calls:n}=e;return t.some(({target:i,params:o})=>{if(o)return n.some(({method:a,params:l})=>i===a&&o===qa(JSON.stringify(l)));if(Object.keys(r).some(a=>a.includes(".")&&a.split(".")[0]===i?!0:a===i)||n.map(a=>a.method).includes(i))return!0})}function bd(e){let t=Ke(e),r=[],n=!1;if(t.has("target")){let i=t.get("target"),o=i.expression;i.modifiers.includes("except")&&(n=!0),o.includes("(")&&o.includes(")")?r.push({target:i.method,params:qa(JSON.stringify(i.params))}):o.includes(",")?o.split(",").map(s=>s.trim()).forEach(s=>{r.push({target:s})}):r.push({target:o})}else{let i=["init","dirty","offline","target","loading","poll","ignore","key","id"];t.all().filter(o=>!i.includes(o.value)).map(o=>o.expression.split("(")[0]).forEach(o=>r.push({target:o}))}return{targets:r,inverted:n}}function qa(e){return btoa(encodeURIComponent(e))}M("stream",({el:e,directive:t,cleanup:r})=>{let{expression:n,modifiers:i}=t,o=k("stream",({name:s,content:a,replace:l})=>{s===n&&(i.includes("replace")||l?e.innerHTML=a:e.innerHTML=e.innerHTML+a)});r(o)});k("request",({respond:e})=>{e(t=>{let r=t.response;!r.headers.has("X-Livewire-Stream")||(t.response={ok:!0,redirected:!1,status:200,async text(){let n=await wd(r,i=>{R("stream",i)});return Et(n)&&(this.ok=!1),n}})})});async function wd(e,t){let r=e.body.getReader(),n="";for(;;){let{done:i,value:o}=await r.read(),a=new TextDecoder().decode(o),[l,u]=yd(n+a);if(l.forEach(d=>{t(d)}),n=u,i)return n}}function yd(e){let t=/({"stream":true.*?"endStream":true})/g,r=e.match(t),n=[];if(r)for(let o=0;o{t.modifiers.includes("self")?e.__livewire_ignore_self=!0:e.__livewire_ignore=!0});var Wa=new Fe;k("commit",({component:e,respond:t})=>{t(()=>{setTimeout(()=>{Wa.each(e,r=>r(!1))})})});M("dirty",({el:e,directive:t,component:r})=>{let n=xd(e),i=Alpine.reactive({state:!1}),o=!1,s=e.style.display,a=l=>{ne(e,t,l,s),o=l};Wa.add(r,a),Alpine.effect(()=>{let l=!1;if(n.length===0)l=JSON.stringify(r.canonical)!==JSON.stringify(r.reactive);else for(let u=0;un.trim()))),r}M("model",({el:e,directive:t,component:r,cleanup:n})=>{let{expression:i,modifiers:o}=t;if(!i)return console.warn("Livewire: [wire:model] is missing a value.",e);if(Ka(r,i))return console.warn('Livewire: [wire:model="'+i+'"] property does not exist on component: ['+r.name+"]",e);if(e.type&&e.type.toLowerCase()==="file")return li(e,i,r,n);let s=o.includes("live"),a=o.includes("lazy")||o.includes("change"),l=o.includes("blur"),u=o.includes("debounce"),d=i.startsWith("$parent")?()=>r.$wire.$parent.$commit():()=>r.$wire.$commit(),p=Sd(e)&&!u&&s?Ed(d,150):d;S.bind(e,{["@change"](){a&&d()},["@blur"](){l&&d()},["x-model"+_d(o)](){return{get(){return W(r.$wire,i)},set(c){ye(r.$wire,i,c),s&&!a&&!l&&p()}}}})});function _d(e){return e=e.filter(t=>!["lazy","defer"].includes(t)),e.length===0?"":"."+e.join(".")}function Sd(e){return["INPUT","TEXTAREA"].includes(e.tagName.toUpperCase())&&!["checkbox","radio"].includes(e.type)}function Ka(e,t){if(t.startsWith("$parent")){let n=K(e.el.parentElement,!1);return n?Ka(n,t.split("$parent.")[1]):!0}let r=t.split(".")[0];return!Object.keys(e.canonical).includes(r)}function Ed(e,t){var r;return function(){var n=this,i=arguments,o=function(){r=null,e.apply(n,i)};clearTimeout(r),r=setTimeout(o,t)}}M("init",({el:e,directive:t})=>{let r=t.expression??"$refresh";S.evaluate(e,`$wire.${r}`)});M("poll",({el:e,directive:t})=>{let r=Md(t.modifiers,2e3),{start:n,pauseWhile:i,throttleWhile:o,stopWhen:s}=Cd(()=>{Ad(e,t)},r);n(),o(()=>kd()&&Nd(t)),i(()=>Rd(t)&&Pd(e)),i(()=>Ld(e)),i(()=>Td()),s(()=>Id(e))});function Ad(e,t){S.evaluate(e,t.expression?"$wire."+t.expression:"$wire.$commit()")}function Cd(e,t=2e3){let r=[],n=[],i=[];return{start(){let o=Od(t,()=>{if(i.some(s=>s()))return o();r.some(s=>s())||n.some(s=>s())&&Math.random()<.95||e()})},pauseWhile(o){r.push(o)},throttleWhile(o){n.push(o)},stopWhen(o){i.push(o)}}}var Ie=[];function Od(e,t){if(!Ie[e]){let r={timer:setInterval(()=>r.callbacks.forEach(n=>n()),e),callbacks:new Set};Ie[e]=r}return Ie[e].callbacks.add(t),()=>{Ie[e].callbacks.delete(t),Ie[e].callbacks.size===0&&(clearInterval(Ie[e].timer),delete Ie[e])}}var Zn=!1;window.addEventListener("offline",()=>Zn=!0);window.addEventListener("online",()=>Zn=!1);function Td(){return Zn}var za=!1;document.addEventListener("visibilitychange",()=>{za=document.hidden},!1);function kd(){return za}function Ld(e){return!Ke(e).has("poll")}function Nd(e){return!e.modifiers.includes("keep-alive")}function Rd(e){return e.modifiers.includes("visible")}function Pd(e){let t=e.getBoundingClientRect();return!(t.top<(window.innerHeight||document.documentElement.clientHeight)&&t.left<(window.innerWidth||document.documentElement.clientWidth)&&t.bottom>0&&t.right>0)}function Id(e){return e.isConnected===!1}function Md(e,t){let r,n=e.find(o=>o.match(/([0-9]+)ms/)),i=e.find(o=>o.match(/([0-9]+)s/));return n?r=Number(n.replace("ms","")):i&&(r=Number(i.replace("s",""))*1e3),r||t}var Va={directive:M,dispatchTo:qe,start:Ia,first:ns,find:rs,getByName:ts,all:is,hook:k,trigger:R,triggerAsync:Wt,dispatch:os,on:ss,get navigate(){return S.navigate}},ei=e=>console.warn(`Detected multiple instances of ${e} running`);window.Livewire&&ei("Livewire");window.Alpine&&ei("Alpine");window.Livewire=Va;window.Alpine=S;window.livewireScriptConfig===void 0&&(window.Alpine.__fromLivewire=!0,document.addEventListener("DOMContentLoaded",()=>{window.Alpine.__fromLivewire===void 0&&ei("Alpine"),Va.start()}));})(); /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT */ diff --git a/public/vendor/livewire/livewire.min.js.map b/public/vendor/livewire/livewire.min.js.map index fca7c155..23d9f35f 100644 --- a/public/vendor/livewire/livewire.min.js.map +++ b/public/vendor/livewire/livewire.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/nprogress/nprogress.js", "../js/utils.js", "../js/features/supportFileUploads.js", "../../alpine/packages/alpinejs/dist/module.esm.js", "../js/features/supportEntangle.js", "../js/hooks.js", "../js/request/modal.js", "../js/request/pool.js", "../js/request/commit.js", "../js/request/bus.js", "../js/request/index.js", "../js/$wire.js", "../js/component.js", "../js/store.js", "../js/events.js", "../js/directives.js", "../../alpine/packages/collapse/dist/module.esm.js", "../../alpine/packages/focus/dist/module.esm.js", "../../alpine/packages/persist/dist/module.esm.js", "../../alpine/packages/intersect/dist/module.esm.js", "../../alpine/packages/anchor/dist/module.esm.js", "../js/plugins/navigate/history.js", "../js/plugins/navigate/links.js", "../js/plugins/navigate/fetch.js", "../js/plugins/navigate/prefetch.js", "../js/plugins/navigate/teleport.js", "../js/plugins/navigate/scroll.js", "../js/plugins/navigate/persist.js", "../js/plugins/navigate/bar.js", "../js/plugins/navigate/page.js", "../js/plugins/navigate/index.js", "../js/plugins/history/index.js", "../../alpine/packages/morph/dist/module.esm.js", "../../alpine/packages/mask/dist/module.esm.js", "../js/lifecycle.js", "../js/features/supportListeners.js", "../js/features/supportScriptsAndAssets.js", "../js/features/supportJsEvaluation.js", "../js/morph.js", "../js/features/supportMorphDom.js", "../js/features/supportDispatches.js", "../js/features/supportDisablingFormsDuringRequest.js", "../js/features/supportPropsAndModelables.js", "../js/features/supportFileDownloads.js", "../js/features/supportLazyLoading.js", "../js/features/supportQueryString.js", "../js/features/supportLaravelEcho.js", "../js/features/supportIsolating.js", "../js/features/supportNavigate.js", "../js/features/supportRedirects.js", "../js/directives/wire-transition.js", "../js/debounce.js", "../js/directives/wire-wildcard.js", "../js/directives/wire-navigate.js", "../js/directives/wire-confirm.js", "../js/directives/shared.js", "../js/directives/wire-offline.js", "../js/directives/wire-loading.js", "../js/directives/wire-stream.js", "../js/directives/wire-ignore.js", "../js/directives/wire-dirty.js", "../js/directives/wire-model.js", "../js/directives/wire-init.js", "../js/directives/wire-poll.js", "../js/index.js"], - "sourcesContent": ["/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\n;(function(root, factory) {\n\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.NProgress = factory();\n }\n\n})(this, function() {\n var NProgress = {};\n\n NProgress.version = '0.2.0';\n\n var Settings = NProgress.settings = {\n minimum: 0.08,\n easing: 'ease',\n positionUsing: '',\n speed: 200,\n trickle: true,\n trickleRate: 0.02,\n trickleSpeed: 800,\n showSpinner: true,\n barSelector: '[role=\"bar\"]',\n spinnerSelector: '[role=\"spinner\"]',\n parent: 'body',\n template: '
'\n };\n\n /**\n * Updates configuration.\n *\n * NProgress.configure({\n * minimum: 0.1\n * });\n */\n NProgress.configure = function(options) {\n var key, value;\n for (key in options) {\n value = options[key];\n if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n }\n\n return this;\n };\n\n /**\n * Last number.\n */\n\n NProgress.status = null;\n\n /**\n * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n *\n * NProgress.set(0.4);\n * NProgress.set(1.0);\n */\n\n NProgress.set = function(n) {\n var started = NProgress.isStarted();\n\n n = clamp(n, Settings.minimum, 1);\n NProgress.status = (n === 1 ? null : n);\n\n var progress = NProgress.render(!started),\n bar = progress.querySelector(Settings.barSelector),\n speed = Settings.speed,\n ease = Settings.easing;\n\n progress.offsetWidth; /* Repaint */\n\n queue(function(next) {\n // Set positionUsing if it hasn't already been set\n if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\n // Add transition\n css(bar, barPositionCSS(n, speed, ease));\n\n if (n === 1) {\n // Fade out\n css(progress, { \n transition: 'none', \n opacity: 1 \n });\n progress.offsetWidth; /* Repaint */\n\n setTimeout(function() {\n css(progress, { \n transition: 'all ' + speed + 'ms linear', \n opacity: 0 \n });\n setTimeout(function() {\n NProgress.remove();\n next();\n }, speed);\n }, speed);\n } else {\n setTimeout(next, speed);\n }\n });\n\n return this;\n };\n\n NProgress.isStarted = function() {\n return typeof NProgress.status === 'number';\n };\n\n /**\n * Shows the progress bar.\n * This is the same as setting the status to 0%, except that it doesn't go backwards.\n *\n * NProgress.start();\n *\n */\n NProgress.start = function() {\n if (!NProgress.status) NProgress.set(0);\n\n var work = function() {\n setTimeout(function() {\n if (!NProgress.status) return;\n NProgress.trickle();\n work();\n }, Settings.trickleSpeed);\n };\n\n if (Settings.trickle) work();\n\n return this;\n };\n\n /**\n * Hides the progress bar.\n * This is the *sort of* the same as setting the status to 100%, with the\n * difference being `done()` makes some placebo effect of some realistic motion.\n *\n * NProgress.done();\n *\n * If `true` is passed, it will show the progress bar even if its hidden.\n *\n * NProgress.done(true);\n */\n\n NProgress.done = function(force) {\n if (!force && !NProgress.status) return this;\n\n return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n };\n\n /**\n * Increments by a random amount.\n */\n\n NProgress.inc = function(amount) {\n var n = NProgress.status;\n\n if (!n) {\n return NProgress.start();\n } else {\n if (typeof amount !== 'number') {\n amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);\n }\n\n n = clamp(n + amount, 0, 0.994);\n return NProgress.set(n);\n }\n };\n\n NProgress.trickle = function() {\n return NProgress.inc(Math.random() * Settings.trickleRate);\n };\n\n /**\n * Waits for all supplied jQuery promises and\n * increases the progress as the promises resolve.\n *\n * @param $promise jQUery Promise\n */\n (function() {\n var initial = 0, current = 0;\n\n NProgress.promise = function($promise) {\n if (!$promise || $promise.state() === \"resolved\") {\n return this;\n }\n\n if (current === 0) {\n NProgress.start();\n }\n\n initial++;\n current++;\n\n $promise.always(function() {\n current--;\n if (current === 0) {\n initial = 0;\n NProgress.done();\n } else {\n NProgress.set((initial - current) / initial);\n }\n });\n\n return this;\n };\n\n })();\n\n /**\n * (Internal) renders the progress bar markup based on the `template`\n * setting.\n */\n\n NProgress.render = function(fromStart) {\n if (NProgress.isRendered()) return document.getElementById('nprogress');\n\n addClass(document.documentElement, 'nprogress-busy');\n \n var progress = document.createElement('div');\n progress.id = 'nprogress';\n progress.innerHTML = Settings.template;\n\n var bar = progress.querySelector(Settings.barSelector),\n perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n parent = document.querySelector(Settings.parent),\n spinner;\n \n css(bar, {\n transition: 'all 0 linear',\n transform: 'translate3d(' + perc + '%,0,0)'\n });\n\n if (!Settings.showSpinner) {\n spinner = progress.querySelector(Settings.spinnerSelector);\n spinner && removeElement(spinner);\n }\n\n if (parent != document.body) {\n addClass(parent, 'nprogress-custom-parent');\n }\n\n parent.appendChild(progress);\n return progress;\n };\n\n /**\n * Removes the element. Opposite of render().\n */\n\n NProgress.remove = function() {\n removeClass(document.documentElement, 'nprogress-busy');\n removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent');\n var progress = document.getElementById('nprogress');\n progress && removeElement(progress);\n };\n\n /**\n * Checks if the progress bar is rendered.\n */\n\n NProgress.isRendered = function() {\n return !!document.getElementById('nprogress');\n };\n\n /**\n * Determine which positioning CSS rule to use.\n */\n\n NProgress.getPositioningCSS = function() {\n // Sniff on document.body.style\n var bodyStyle = document.body.style;\n\n // Sniff prefixes\n var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n ('MozTransform' in bodyStyle) ? 'Moz' :\n ('msTransform' in bodyStyle) ? 'ms' :\n ('OTransform' in bodyStyle) ? 'O' : '';\n\n if (vendorPrefix + 'Perspective' in bodyStyle) {\n // Modern browsers with 3D support, e.g. Webkit, IE10\n return 'translate3d';\n } else if (vendorPrefix + 'Transform' in bodyStyle) {\n // Browsers without 3D support, e.g. IE9\n return 'translate';\n } else {\n // Browsers without translate() support, e.g. IE7-8\n return 'margin';\n }\n };\n\n /**\n * Helpers\n */\n\n function clamp(n, min, max) {\n if (n < min) return min;\n if (n > max) return max;\n return n;\n }\n\n /**\n * (Internal) converts a percentage (`0..1`) to a bar translateX\n * percentage (`-100%..0%`).\n */\n\n function toBarPerc(n) {\n return (-1 + n) * 100;\n }\n\n\n /**\n * (Internal) returns the correct CSS for changing the bar's\n * position given an n percentage, and speed and ease from Settings\n */\n\n function barPositionCSS(n, speed, ease) {\n var barCSS;\n\n if (Settings.positionUsing === 'translate3d') {\n barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };\n } else if (Settings.positionUsing === 'translate') {\n barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };\n } else {\n barCSS = { 'margin-left': toBarPerc(n)+'%' };\n }\n\n barCSS.transition = 'all '+speed+'ms '+ease;\n\n return barCSS;\n }\n\n /**\n * (Internal) Queues a function to be executed.\n */\n\n var queue = (function() {\n var pending = [];\n \n function next() {\n var fn = pending.shift();\n if (fn) {\n fn(next);\n }\n }\n\n return function(fn) {\n pending.push(fn);\n if (pending.length == 1) next();\n };\n })();\n\n /**\n * (Internal) Applies css properties to an element, similar to the jQuery \n * css method.\n *\n * While this helper does assist with vendor prefixed property names, it \n * does not perform any manipulation of values prior to setting styles.\n */\n\n var css = (function() {\n var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],\n cssProps = {};\n\n function camelCase(string) {\n return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function(match, letter) {\n return letter.toUpperCase();\n });\n }\n\n function getVendorProp(name) {\n var style = document.body.style;\n if (name in style) return name;\n\n var i = cssPrefixes.length,\n capName = name.charAt(0).toUpperCase() + name.slice(1),\n vendorName;\n while (i--) {\n vendorName = cssPrefixes[i] + capName;\n if (vendorName in style) return vendorName;\n }\n\n return name;\n }\n\n function getStyleProp(name) {\n name = camelCase(name);\n return cssProps[name] || (cssProps[name] = getVendorProp(name));\n }\n\n function applyCss(element, prop, value) {\n prop = getStyleProp(prop);\n element.style[prop] = value;\n }\n\n return function(element, properties) {\n var args = arguments,\n prop, \n value;\n\n if (args.length == 2) {\n for (prop in properties) {\n value = properties[prop];\n if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n }\n } else {\n applyCss(element, args[1], args[2]);\n }\n }\n })();\n\n /**\n * (Internal) Determines if an element or space separated list of class names contains a class name.\n */\n\n function hasClass(element, name) {\n var list = typeof element == 'string' ? element : classList(element);\n return list.indexOf(' ' + name + ' ') >= 0;\n }\n\n /**\n * (Internal) Adds a class to an element.\n */\n\n function addClass(element, name) {\n var oldList = classList(element),\n newList = oldList + name;\n\n if (hasClass(oldList, name)) return; \n\n // Trim the opening space.\n element.className = newList.substring(1);\n }\n\n /**\n * (Internal) Removes a class from an element.\n */\n\n function removeClass(element, name) {\n var oldList = classList(element),\n newList;\n\n if (!hasClass(element, name)) return;\n\n // Replace the class name.\n newList = oldList.replace(' ' + name + ' ', ' ');\n\n // Trim the opening and closing spaces.\n element.className = newList.substring(1, newList.length - 1);\n }\n\n /**\n * (Internal) Gets a space separated list of the class names on the element. \n * The list is wrapped with a single space on each end to facilitate finding \n * matches within the list.\n */\n\n function classList(element) {\n return (' ' + (element.className || '') + ' ').replace(/\\s+/gi, ' ');\n }\n\n /**\n * (Internal) Removes an element from the DOM.\n */\n\n function removeElement(element) {\n element && element.parentNode && element.parentNode.removeChild(element);\n }\n\n return NProgress;\n});\n\n", "\nexport class Bag {\n constructor() { this.arrays = {} }\n\n add(key, value) {\n if (! this.arrays[key]) this.arrays[key] = []\n this.arrays[key].push(value)\n }\n\n remove(key) {\n if (this.arrays[key]) delete this.arrays[key]\n }\n\n get(key) { return this.arrays[key] || [] }\n\n each(key, callback) { return this.get(key).forEach(callback) }\n}\n\nexport class WeakBag {\n constructor() { this.arrays = new WeakMap }\n\n add(key, value) {\n if (! this.arrays.has(key)) this.arrays.set(key, [])\n this.arrays.get(key).push(value)\n }\n\n remove(key) {\n if (this.arrays.has(key)) this.arrays.delete(key, [])\n }\n\n get(key) { return this.arrays.has(key) ? this.arrays.get(key) : [] }\n\n each(key, callback) { return this.get(key).forEach(callback) }\n}\n\nexport function dispatch(target, name, detail = {}, bubbles = true) {\n target.dispatchEvent(\n new CustomEvent(name, {\n detail,\n bubbles,\n // Allows events to pass the shadow DOM barrier.\n composed: true,\n cancelable: true,\n })\n )\n}\n\nexport function listen(target, name, handler) {\n target.addEventListener(name, handler)\n\n return () => target.removeEventListener(name, handler)\n}\n\n/**\n * Type-checking in JS is weird and annoying, these are better.\n */\nexport function isObjecty(subject) { return (typeof subject === 'object' && subject !== null) }\nexport function isObject(subject) { return (isObjecty(subject) && ! isArray(subject)) }\nexport function isArray(subject) { return Array.isArray(subject) }\nexport function isFunction(subject) { return typeof subject === 'function' }\nexport function isPrimitive(subject) { return typeof subject !== 'object' || subject === null }\n\n/**\n * Clone an object deeply to wipe out any shared references.\n */\nexport function deepClone(obj) { return JSON.parse(JSON.stringify(obj)) }\n\n/**\n * Determine if two objects take the exact same shape.\n */\nexport function deeplyEqual(a, b) { return JSON.stringify(a) === JSON.stringify(b) }\n\n/**\n * An easy way to loop through arrays and objects.\n */\nexport function each(subject, callback) {\n Object.entries(subject).forEach(([key, value]) => callback(key, value))\n}\n\n/**\n * Get a property from an object with support for dot-notation.\n */\nexport function dataGet(object, key) {\n if (key === '') return object\n\n return key.split('.').reduce((carry, i) => {\n if (carry === undefined) return undefined\n\n return carry[i]\n }, object)\n}\n\n/**\n * Set a property on an object with support for dot-notation.\n */\nexport function dataSet(object, key, value) {\n let segments = key.split('.')\n\n if (segments.length === 1) {\n return object[key] = value\n }\n\n let firstSegment = segments.shift()\n let restOfSegments = segments.join('.')\n\n if (object[firstSegment] === undefined) {\n object[firstSegment] = {}\n }\n\n dataSet(object[firstSegment], restOfSegments, value)\n}\n\n/**\n * Create a flat, dot-notated diff of two obejcts.\n */\nexport function diff(left, right, diffs = {}, path = '') {\n // Are they the same?\n if (left === right) return diffs\n\n // Are they COMPLETELY different?\n if (typeof left !== typeof right || (isObject(left) && isArray(right)) || (isArray(left) && isObject(right))) {\n diffs[path] = right;\n return diffs\n }\n\n // Is the right or left side a primitive value (a leaf node)?\n if (isPrimitive(left) || isPrimitive(right)) {\n diffs[path] = right\n return diffs\n }\n\n // We now know both are objects...\n let leftKeys = Object.keys(left)\n\n // Recursively diff the object's properties...\n Object.entries(right).forEach(([key, value]) => {\n diffs = {...diffs, ...diff(left[key], right[key], diffs, path === '' ? key : `${path}.${key}`)}\n leftKeys = leftKeys.filter(i => i !== key)\n })\n\n // Mark any items for removal...\n leftKeys.forEach(key => {\n diffs[`${path}.${key}`] = '__rm__'\n })\n\n return diffs\n}\n\n/**\n * The data that's passed between the browser and server is in the form of\n * nested tuples consisting of the schema: [rawValue, metadata]. In this\n * method we're extracting the plain JS object of only the raw values.\n */\nexport function extractData(payload) {\n let value = isSynthetic(payload) ? payload[0] : payload\n let meta = isSynthetic(payload) ? payload[1] : undefined\n\n if (isObjecty(value)) {\n Object.entries(value).forEach(([key, iValue]) => {\n value[key] = extractData(iValue)\n })\n }\n\n return value\n}\n\n/**\n * Determine if the variable passed in is a node in a nested metadata\n * tuple tree. (Meaning it takes the form of: [rawData, metadata])\n */\nexport function isSynthetic(subject) {\n return Array.isArray(subject)\n && subject.length === 2\n && typeof subject[1] === 'object'\n && Object.keys(subject[1]).includes('s')\n}\n\n/**\n * Post requests in Laravel require a csrf token to be passed\n * along with the payload. Here, we'll try and locate one.\n */\nexport function getCsrfToken() {\n // Purposely not caching. Fetching it fresh every time ensures we're\n // not depending on a stale session's CSRF token...\n\n if (document.querySelector('meta[name=\"csrf-token\"]')) {\n return document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content')\n }\n\n if (document.querySelector('[data-csrf]')) {\n return document.querySelector('[data-csrf]').getAttribute('data-csrf')\n }\n\n if (window.livewireScriptConfig['csrf'] ?? false) {\n return window.livewireScriptConfig['csrf']\n }\n\n throw 'Livewire: No CSRF token detected'\n}\n\nlet nonce;\n\nexport function getNonce() {\n if (nonce) return nonce\n\n\n if (window.livewireScriptConfig && (window.livewireScriptConfig['nonce'] ?? false)) {\n nonce = window.livewireScriptConfig['nonce']\n\n return nonce\n }\n\n const elWithNonce = document.querySelector('style[data-livewire-style][nonce]')\n\n if (elWithNonce) {\n nonce = elWithNonce.nonce\n\n return nonce\n }\n\n return null\n}\n\n/**\n * Livewire's update URI. This is configurable via Livewire::setUpdateRoute(...)\n */\nexport function getUpdateUri() {\n return document.querySelector('[data-update-uri]')?.getAttribute('data-update-uri') ?? window.livewireScriptConfig['uri'] ?? null\n}\n\nexport function contentIsFromDump(content) {\n return !! content.match(/