Remove all auto-update functionality (commands, services, widgets, blades, translations)

This commit is contained in:
root committed 2026-06-03 22:54:39 +02:00
1 parent 1f9af5279a
commit 1f04979ffe
106 files changed
+232 -11668

No files matched your search

@@ -4,7 +4,6 @@ declare(strict_types=1);
namespace App\Actions\Commandocentrum;
use App\Services\EmulatorUpdateService;
use App\Services\RconService;
use App\Services\SettingsService;
use Illuminate\Support\Facades\Process;
@@ -13,7 +12,6 @@ class EmulatorControlAction
{
public function __construct(
private readonly SettingsService $settings,
private readonly EmulatorUpdateService $updateService,
) {}
public function start(): array
@@ -59,29 +57,4 @@ class EmulatorControlAction
return ['success' => true, 'message' => 'Alert verstuurd naar alle gebruikers!'];
}
public function build(): array
{
return $this->updateService->buildFromSource();
}
public function update(): array
{
return $this->updateService->updateEmulator();
}
public function runSqlUpdates(): array
{
return $this->updateService->runSqlUpdates();
}
public function getBackups(): array
{
return $this->updateService->getBackupList();
}
public function restoreBackup(string $backupName): array
{
return $this->updateService->restoreBackup($backupName);
}
}
@@ -1,119 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Actions\Commandocentrum;
use App\Services\SettingsService;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Process;
class NitroControlAction
{
public function __construct(
private readonly SettingsService $settings,
) {}
public function pullUpdates(string $clientPath, string $rendererPath, string $branch): array
{
$this->runGitPull($clientPath, $branch);
$this->runGitPull($rendererPath, $branch);
return ['success' => true, 'message' => 'Nitro bijgewerkt van GitHub'];
}
public function build(string $clientPath, string $rendererPath, string $branch): array
{
$this->runGitPull($clientPath, $branch);
$this->runGitPull($rendererPath, $branch);
Process::timeout(120)->run('cd ' . escapeshellarg($clientPath) . ' && sudo -u www-data npm install 2>&1');
Process::timeout(120)->run('cd ' . escapeshellarg($rendererPath) . ' && sudo -u www-data npm install 2>&1');
$exitCode = Artisan::call('build:theme');
return [
'success' => $exitCode === 0,
'message' => $exitCode === 0 ? 'Nitro build succesvol!' : 'Build gestart - controleer handmatig',
];
}
public function generateConfigs(string $siteUrl, string $webroot, string $gamedataPath): array
{
if (! filter_var($siteUrl, FILTER_VALIDATE_URL)) {
return ['success' => false, 'message' => 'Voer een geldige URL in'];
}
$existingConfigs = $this->readExistingConfigs($webroot, $gamedataPath);
$exitCode = Artisan::call('app:generate-nitro-configs', ['--site-url' => $siteUrl]);
if ($existingConfigs !== [] && $exitCode === 0) {
$this->mergeExistingConfigs($webroot, $existingConfigs);
}
$this->settings->set('nitro_last_checked', now()->toIso8601String());
return [
'success' => $exitCode === 0,
'message' => $exitCode === 0 ? 'Configs gegenereerd & bestaande instellingen behouden!' : 'Config gegenereerd (controleer handmatig)',
];
}
private function runGitPull(string $path, string $branch): void
{
Process::timeout(60)->run('cd ' . escapeshellarg($path) . ' && sudo -u www-data git pull origin ' . escapeshellarg($branch) . ' 2>&1');
}
private function readExistingConfigs(string $webroot, string $gamedataPath): array
{
$configs = [];
$files = ['renderer-config.json', 'ui-config.json', 'UITexts.json'];
foreach ($files as $file) {
$path = $webroot . '/' . $file;
$content = @file_get_contents($path);
if ($content) {
$decoded = json_decode($content, true);
if (json_last_error() === JSON_ERROR_NONE) {
$configs[$file] = $decoded;
}
}
}
if ($gamedataPath !== '') {
$gamedataConfigs = [
'ExternalTexts.json' => $gamedataPath . '/config/ExternalTexts.json',
'FurnitureData.json' => $gamedataPath . '/config/FurnitureData.json',
'ProductData.json' => $gamedataPath . '/config/ProductData.json',
'FigureData.json' => $gamedataPath . '/config/FigureData.json',
];
foreach ($gamedataConfigs as $key => $path) {
$content = @file_get_contents($path);
if ($content) {
$decoded = json_decode($content, true);
if (json_last_error() === JSON_ERROR_NONE) {
$configs['gamedata.' . $key] = $decoded;
}
}
}
}
return $configs;
}
private function mergeExistingConfigs(string $webroot, array $existingConfigs): void
{
if (isset($existingConfigs['renderer-config.json'])) {
$newPath = $webroot . '/renderer-config.json';
$newContent = @file_get_contents($newPath);
$newConfig = json_decode($newContent, true);
if ($newConfig && json_last_error() === JSON_ERROR_NONE) {
$merged = array_merge($existingConfigs['renderer-config.json'], $newConfig);
@file_put_contents($newPath, json_encode($merged, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
}
}
}
}
-150
View File
@@ -1,150 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Console\Commands;
use App\Enums\AlertChannel;
use App\Enums\AlertType;
use App\Services\AlertService;
use App\Services\EmulatorUpdateService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
class AutoUpdateCommand extends Command
{
#[\Override]
protected $signature = 'update:auto
{--force : Forceer update ook al is het niet de geplande tijd}
{--sql-only : Alleen SQL updates draaien}
{--emu-only : Alleen emulator updates draaien}';
#[\Override]
protected $description = 'Automatische emulator en SQL updates uitvoeren';
private const string CACHE_KEY_LAST_EMU_UPDATE = 'auto_update_last_emu';
private const string CACHE_KEY_LAST_SQL_UPDATE = 'auto_update_last_sql';
public function handle(AlertService $alertService, EmulatorUpdateService $updateService): int
{
$this->info('Automatische update check...');
$isForced = $this->option('force');
$sqlOnly = $this->option('sql-only');
$emuOnly = $this->option('emu-only');
if (! $isForced && ! $this->isScheduledTime()) {
$this->line('Niet de geplande tijd, overslaan.');
return Command::SUCCESS;
}
if (! $sqlOnly) {
$this->runEmulatorUpdate($alertService, $updateService);
}
if (! $emuOnly) {
$this->runSqlUpdates($alertService, $updateService);
}
return Command::SUCCESS;
}
private function isScheduledTime(): bool
{
$enabled = setting('auto_update_enabled', true);
if (! $enabled) {
return true;
}
$scheduleTime = setting('auto_update_schedule', '03:00');
$scheduleDays = setting('auto_update_days', '0,1,2,3,4,5,6');
$now = now();
$currentTime = $now->format('H:i');
$currentDay = (int) $now->dayOfWeek;
$allowedDays = array_map(intval(...), explode(',', $scheduleDays));
if (! in_array($currentDay, $allowedDays)) {
return false;
}
if ($currentTime !== $scheduleTime) {
$minuteDiff = abs(strtotime($currentTime) - strtotime((string) $scheduleTime)) / 60;
if ($minuteDiff > 5) {
return false;
}
}
return true;
}
private function runEmulatorUpdate(AlertService $alertService, EmulatorUpdateService $updateService): void
{
$check = $updateService->checkForUpdates();
if (! ($check['update_available'] ?? false)) {
$this->line('Emulator is al up-to-date.');
return;
}
$this->warn('Nieuwe emulator versie beschikbaar: ' . ($check['latest_version'] ?? 'onbekend'));
$this->info('Emulator updaten...');
$result = $updateService->updateEmulator();
if ($result['success']) {
$this->info('Emulator succesvol geüpdatet!');
$alertService->sendEmulatorUpdate($result['version'] ?? 'onbekend', $result['message'] ?? '');
Log::info('[AutoUpdate] Emulator updated to v' . ($result['version'] ?? 'unknown'));
} else {
$this->error('Emulator update mislukt: ' . ($result['error'] ?? 'onbekende fout'));
$alertService->send(
AlertType::EMULATOR_ERROR,
'Emulator Auto-Update Mislukt: ' . ($result['error'] ?? 'Onbekende fout'),
[],
AlertChannel::DISCORD,
);
}
Cache::put(self::CACHE_KEY_LAST_EMU_UPDATE, now()->toIso8601String());
}
private function runSqlUpdates(AlertService $alertService, EmulatorUpdateService $updateService): void
{
$check = $updateService->checkForSqlUpdates();
if (! ($check['has_updates'] ?? false)) {
$this->line('Geen SQL updates beschikbaar.');
return;
}
$this->warn($check['message']);
$this->info('SQL updates uitvoeren...');
$result = $updateService->runSqlUpdates();
if ($result['success'] && ! empty($result['files_run'])) {
$count = count($result['files_run']);
$this->info("{$count} SQL updates succesvol uitgevoerd!");
$alertService->sendSqlUpdate($count, $result['message'] ?? '');
Log::info('[AutoUpdate] SQL updates completed', ['files' => $result['files_run']]);
} elseif (! empty($result['errors'])) {
$this->warn('SQL updates met fouten: ' . implode(', ', $result['errors']));
$alertService->send(
AlertType::CRITICAL_ERROR,
'SQL Updates Met Fouten: ' . implode(', ', $result['errors']),
['files' => $result['errors']],
AlertChannel::DISCORD,
);
}
Cache::put(self::CACHE_KEY_LAST_SQL_UPDATE, now()->toIso8601String());
}
}
@@ -1,172 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Console\Commands;
use App\Enums\AlertChannel;
use App\Enums\AlertType;
use App\Services\AlertService;
use App\Services\EmulatorUpdateService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class EmulatorUpdateCommand extends Command
{
#[\Override]
protected $signature = 'emulator:update
{--check : Alleen controleren op updates}
{--force : Forceer update ook al is er geen nieuwe versie}
{--repair : Probeer emulator te repareren}
{--rebuild : Forceer build vanaf source}';
#[\Override]
protected $description = 'Update de emulator vanaf GitHub';
public function handle(EmulatorUpdateService $updateService, AlertService $alertService): int
{
if ($this->option('repair')) {
return $this->repairEmulator($updateService, $alertService);
}
if (! $updateService->isConfigured()) {
$this->error('Geen GitHub URL geconfigureerd voor emulator updates.');
$this->info('Configureer dit in Filament > Settings > Emulator');
return Command::FAILURE;
}
$this->info('Emulator update service gestart...');
$checkResult = $updateService->checkForUpdates();
if (isset($checkResult['error'])) {
$this->error($checkResult['error']);
return Command::FAILURE;
}
$this->table(
['Property', 'Value'],
[
['Huidige Versie', $checkResult['current_version']],
['Nieuwste Versie', $checkResult['latest_version']],
['Update Beschikbaar', $checkResult['update_available'] ? 'JA' : 'NEE'],
['Type', $checkResult['update_type'] ?? 'N/A'],
],
);
if ($this->option('check')) {
return Command::SUCCESS;
}
$force = $this->option('force');
$rebuild = $this->option('rebuild');
if (! $checkResult['update_available'] && ! $force && ! $rebuild) {
$this->info('Emulator is al up-to-date!');
return Command::SUCCESS;
}
if (! $checkResult['update_available'] && ($force || $rebuild)) {
$this->warn('Geen nieuwe versie beschikbaar, maar force/rebuild aangevraagd.');
}
if (! $force && ! $rebuild && ! $this->confirm('Wil je de emulator updaten naar v' . $checkResult['latest_version'] . '?')) {
$this->info('Update geannuleerd.');
return Command::SUCCESS;
}
$this->info('Emulator wordt geüpdatet...');
try {
if ($rebuild || $checkResult['type'] === 'source_build') {
$this->info('Build vanaf source...');
$result = $updateService->buildFromSource($force);
} else {
$result = $updateService->updateEmulator();
}
if ($result['success']) {
$this->info($result['message'] ?? 'Emulator succesvol geüpdatet!');
$alertService->send(
AlertType::EMULATOR_ONLINE,
'Emulator succesvol geüpdatet naar v' . ($result['version'] ?? 'onbekend'),
[
'version' => $result['version'] ?? 'onbekend',
'jar' => $result['jar'] ?? 'N/A',
],
AlertChannel::DISCORD,
);
Log::info('[EmulatorUpdateCommand] Update successful', $result);
return Command::SUCCESS;
}
$this->error('Update mislukt: ' . ($result['error'] ?? 'Onbekende fout'));
$alertService->send(
AlertType::EMULATOR_ERROR,
'Emulator update mislukt: ' . ($result['error'] ?? 'Onbekende fout'),
[],
AlertChannel::DISCORD,
);
Log::error('[EmulatorUpdateCommand] Update failed', $result);
return Command::FAILURE;
} catch (\Exception $e) {
$this->error('Update exception: ' . $e->getMessage());
$alertService->send(
AlertType::CRITICAL_ERROR,
'Emulator update exception: ' . $e->getMessage(),
[],
AlertChannel::DISCORD,
);
Log::error('[EmulatorUpdateCommand] Exception', ['error' => $e->getMessage()]);
return Command::FAILURE;
}
}
private function repairEmulator(EmulatorUpdateService $updateService, AlertService $alertService): int
{
$this->warn('🔧 Emulator repair modus gestart...');
$this->info('Dit zal de emulator status controleren en proberen te repareren.');
try {
$repairResult = $updateService->repairEmulator();
if ($repairResult['success']) {
$this->info('✅ Repair succesvol!');
foreach ($repairResult['actions'] ?? [] as $action) {
$this->line(' - ' . $action);
}
$alertService->send(
AlertType::EMULATOR_ONLINE,
'Emulator gerepareerd',
['actions' => $repairResult['actions'] ?? []],
AlertChannel::DISCORD,
);
return Command::SUCCESS;
}
$this->error('❌ Repair mislukt: ' . ($repairResult['error'] ?? 'Onbekende fout'));
$alertService->send(
AlertType::EMULATOR_ERROR,
'Emulator repair mislukt: ' . ($repairResult['error'] ?? 'Onbekende fout'),
[],
AlertChannel::DISCORD,
);
return Command::FAILURE;
} catch (\Exception $e) {
$this->error('❌ Repair exception: ' . $e->getMessage());
return Command::FAILURE;
}
}
}
@@ -1,796 +0,0 @@
<?php
namespace App\Console\Commands;
use App\Services\NitroUpdateService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Process;
class GenerateNitroConfigs extends Command
{
#[\Override]
protected $signature = 'app:generate-nitro-configs
{--site-url= : The site URL to use}';
#[\Override]
protected $description = 'Generate Nitro configuration files (renderer-config.json, ui-config.json, UITexts.json)';
private array $checks = [];
public function handle(): int
{
$siteUrl = $this->option('site-url') ?? setting('nitro_site_url', config('app.url', 'https://epicnabbo.nl'));
$this->info('🔧 Nitro Config Generator');
$this->line('═══════════════════════════════════════════════');
// Check 1: Validate URL
$this->addCheck(function () use ($siteUrl) {
if (empty($siteUrl) || ! filter_var($siteUrl, FILTER_VALIDATE_URL)) {
throw new \Exception("Invalid URL: {$siteUrl}");
}
$this->line(" ✓ URL: {$siteUrl}");
});
$nitroService = new NitroUpdateService;
$status = $nitroService->getStatus();
$webroot = $status['webroot'] ?? '/var/www/Client';
$buildPath = $status['build_path'] ?? '/var/www/atomcms/nitro-client/dist';
// Check 2: Webroot exists
$this->addCheck(function () use ($webroot) {
$result = Process::timeout(5)->run('test -d ' . escapeshellarg((string) $webroot));
if ($result->exitCode() !== 0) {
throw new \Exception("Webroot does not exist: {$webroot}");
}
$this->line(" ✓ Webroot exists: {$webroot}");
});
// Check 3: Webroot is writable
$this->addCheck(function () use ($webroot) {
$result = Process::timeout(5)->run('test -w ' . escapeshellarg((string) $webroot));
if ($result->exitCode() !== 0) {
throw new \Exception("Webroot is not writable: {$webroot}");
}
$this->line(' ✓ Webroot is writable');
});
// Check 4: Build path exists
$this->addCheck(function () use ($buildPath) {
$result = Process::timeout(5)->run('test -d ' . escapeshellarg((string) $buildPath));
if ($result->exitCode() !== 0) {
throw new \Exception("Build path does not exist: {$buildPath}");
}
$this->line(" ✓ Build path exists: {$buildPath}");
});
// Check both buildPath and webroot for example files
$this->addCheck(function () use ($buildPath, $webroot) {
// Map .example to .json fallback
$fileMap = [
'renderer-config.example' => 'renderer-config.json',
'ui-config.example' => 'ui-config.json',
'UITexts.example' => 'UITexts.example',
];
$allFound = true;
foreach ($fileMap as $exampleFile => $jsonFile) {
// Check .example file first
$buildPathResult = Process::timeout(5)->run('test -f ' . escapeshellarg($buildPath . '/' . $exampleFile));
$webrootResult = Process::timeout(5)->run('test -f ' . escapeshellarg($webroot . '/' . $exampleFile));
if ($buildPathResult->exitCode() === 0) {
$this->line(" ✓ Found in build path: {$exampleFile}");
} elseif ($webrootResult->exitCode() === 0) {
$this->line(" ✓ Found in webroot: {$exampleFile}");
} elseif ($jsonFile !== $exampleFile) {
// Check json fallback for .example files
$jsonBuildResult = Process::timeout(5)->run('test -f ' . escapeshellarg($buildPath . '/' . $jsonFile));
$jsonWebrootResult = Process::timeout(5)->run('test -f ' . escapeshellarg($webroot . '/' . $jsonFile));
if ($jsonBuildResult->exitCode() === 0) {
$this->line(" ✓ Found in build path: {$jsonFile}");
} elseif ($jsonWebrootResult->exitCode() === 0) {
$this->line(" ✓ Found in webroot: {$jsonFile}");
} else {
$this->warn(" ⚠ Missing: {$exampleFile} or {$jsonFile}");
$allFound = false;
}
} else {
$this->warn(" ⚠ Missing: {$exampleFile}");
$allFound = false;
}
}
if (! $allFound) {
throw new \Exception('Some example files are missing');
}
});
// Check 6: Check disk space
$this->addCheck(function () use ($webroot) {
$result = Process::timeout(10)->run("df -h {$webroot} | tail -1 | awk '{print $4}'");
if ($result->successful()) {
$free = trim($result->output());
$this->line(" ✓ Free space: {$free}");
}
});
// Check 7: Validate bundled/config gamedata files
$this->addCheck(function () {
$bundledConfigDir = '/var/www/Gamedata/bundled/config';
$configDir = '/var/www/Gamedata/config';
$requiredFiles = ['HabboAvatarActions.json', 'FurnitureData.json', 'ExternalTexts.json', 'ProductData.json', 'FigureData.json', 'FigureMap.json', 'EffectMap.json'];
// Create bundled/config if it doesn't exist
if (! is_dir($bundledConfigDir)) {
mkdir($bundledConfigDir, 0755, true);
$this->line(" 📁 Created directory: {$bundledConfigDir}");
}
// Copy missing files from config to bundled/config
foreach ($requiredFiles as $file) {
$targetPath = $bundledConfigDir . '/' . $file;
if (! file_exists($targetPath)) {
$sourcePath = $configDir . '/' . $file;
if (file_exists($sourcePath)) {
copy($sourcePath, $targetPath);
$this->line(" 📋 Copied: {$file} to bundled/config");
}
}
}
$this->line(' ✓ Gamedata bundled/config files ready');
});
// Check 8: Validate existing config files
$this->addCheck(function () use ($webroot) {
$configFiles = ['renderer-config.json', 'ui-config.json', 'UITexts.json'];
foreach ($configFiles as $file) {
$path = $webroot . '/' . $file;
$result = Process::timeout(5)->run('test -f ' . escapeshellarg($path));
if ($result->exitCode() === 0) {
// Validate JSON
$jsonCheck = Process::timeout(5)->run('python3 -c "import json; json.load(open(\'' . $path . '\'))" 2>&1 || echo "INVALID"');
if (str_contains($jsonCheck->output(), 'INVALID')) {
$this->warn(" ⚠ Invalid JSON: {$file}");
} else {
$this->line(" ✓ Valid JSON: {$file}");
}
} else {
$this->line(" - New file: {$file}");
}
}
});
// Run all checks
$this->line('');
$this->info('Running pre-flight checks...');
$this->line('───────────────────────────────────────────────');
try {
foreach ($this->checks as $check) {
$check();
}
$this->line('───────────────────────────────────────────────');
$this->info('✅ All checks passed!');
} catch (\Exception $e) {
$this->error('❌ Check failed: ' . $e->getMessage());
$this->newLine();
$this->error('Please fix the issue before generating configs.');
return 1;
}
// Generate configs
$this->newLine();
$this->info('Generating configuration files...');
$this->line('───────────────────────────────────────────────');
$protocol = str_starts_with((string) $siteUrl, 'https') ? 'https' : 'http';
$host = preg_replace('/^https?:\/\//', '', (string) $siteUrl);
try {
// Step 0: Sync latest example files from GitHub
$this->syncExampleFromGithub($buildPath, $webroot);
$rendererConfig = $this->generateRendererConfig($protocol, $host, $buildPath, $webroot);
$uiConfig = $this->generateUiConfig($protocol, $host, $buildPath, $webroot);
// Compare with existing deployed configs
$this->compareConfigs($rendererConfig, 'renderer-config', $webroot);
$this->compareConfigs($uiConfig, 'ui-config', $webroot);
// Validate generated JSON
$this->validateJson($rendererConfig, 'renderer-config');
$this->validateJson($uiConfig, 'ui-config');
$tempFile = '/tmp/nitro_config_' . uniqid();
file_put_contents($tempFile . '_renderer', json_encode($rendererConfig, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
file_put_contents($tempFile . '_ui', json_encode($uiConfig, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
// Copy generated configs
$commands = [
'cp "' . $tempFile . '_renderer" "' . $webroot . '/renderer-config.json"',
'cp "' . $tempFile . '_ui" "' . $webroot . '/ui-config.json"',
];
// Copy UITexts.json if it exists (check both buildPath and webroot)
$uitextsInBuild = Process::timeout(5)->run('test -f "' . $buildPath . '/UITexts.example"')->exitCode() === 0;
$uitextsInWebroot = Process::timeout(5)->run('test -f "' . $webroot . '/UITexts.example"')->exitCode() === 0;
if ($uitextsInBuild) {
$commands[] = 'cp "' . $buildPath . '/UITexts.example" "' . $webroot . '/UITexts.json"';
$this->line(' ✓ Generated: UITexts.json (from build path)');
} elseif ($uitextsInWebroot) {
$commands[] = 'cp "' . $webroot . '/UITexts.example" "' . $webroot . '/UITexts.json"';
$this->line(' ✓ Generated: UITexts.json (from webroot)');
}
$commands[] = 'rm "' . $tempFile . '_renderer" "' . $tempFile . '_ui"';
Process::timeout(10)->run(implode(' && ', $commands));
// Set proper ownership
Process::timeout(10)->run("chown www-data:www-data {$webroot}/renderer-config.json {$webroot}/ui-config.json {$webroot}/UITexts.json 2>/dev/null");
setting('nitro_config_generated_at', now()->toIso8601String());
$this->line(' ✓ Generated: renderer-config.json');
$this->line(' ✓ Generated: ui-config.json');
// Verify generated files
$this->verifyGeneratedFiles($webroot);
$this->line('───────────────────────────────────────────────');
$this->info('✅ Configs generated successfully!');
Log::info('[NitroConfig] Generated successfully', [
'webroot' => $webroot,
'host' => $host,
]);
return 0;
} catch (\Exception $e) {
$this->error('❌ Generation failed: ' . $e->getMessage());
Log::error('[NitroConfig] Generation failed', ['error' => $e->getMessage()]);
return 1;
}
}
private function addCheck(callable $check): void
{
$this->checks[] = function () use ($check) {
$check();
};
}
private function validateJson(array $data, string $name): void
{
$encoded = json_encode($data, JSON_THROW_ON_ERROR);
$decoded = json_decode($encoded, true);
if ($decoded === null && json_last_error() !== JSON_ERROR_NONE) {
throw new \Exception("Invalid JSON generated for {$name}");
}
$this->line(" ✓ Validated: {$name}");
}
private function verifyGeneratedFiles(string $webroot): void
{
$files = ['renderer-config.json', 'ui-config.json', 'UITexts.json'];
$allValid = true;
foreach ($files as $file) {
$path = $webroot . '/' . $file;
$result = Process::timeout(5)->run('test -f ' . escapeshellarg($path));
if ($result->exitCode() === 0) {
$size = Process::timeout(5)->run('stat -c%s ' . escapeshellarg($path));
$sizeStr = trim($size->output()) . ' bytes';
$this->line(" ✓ Verified: {$file} ({$sizeStr})");
} else {
$this->warn(" ⚠ Missing: {$file}");
$allValid = false;
}
}
if (! $allValid) {
throw new \Exception('Some files were not generated');
}
}
private function generateRendererConfig(string $protocol, string $host, string $buildPath, string $webroot): array
{
$httpProtocol = $protocol === 'https' ? 'https' : 'http';
$wssProtocol = $protocol === 'https' ? 'wss' : 'ws';
$wsHost = 'ws.' . $host;
$rendererConfig = [];
// Check build path first, then webroot for .example file
$examplePath = $buildPath . '/renderer-config.example';
if (Process::timeout(5)->run('test -f ' . escapeshellarg($examplePath))->exitCode() !== 0) {
$examplePath = $webroot . '/renderer-config.example';
}
// Fallback to .json version (newer Nitro-V3 format)
if (Process::timeout(5)->run('test -f ' . escapeshellarg($examplePath))->exitCode() !== 0) {
$jsonPath = $buildPath . '/renderer-config.json';
if (Process::timeout(5)->run('test -f ' . escapeshellarg($jsonPath))->exitCode() === 0) {
$examplePath = $jsonPath;
} else {
$jsonPath = $webroot . '/renderer-config.json';
if (Process::timeout(5)->run('test -f ' . escapeshellarg($jsonPath))->exitCode() === 0) {
$examplePath = $jsonPath;
}
}
}
// Load COMPLETE example file as base
if (Process::timeout(5)->run('test -f ' . escapeshellarg($examplePath))->exitCode() === 0) {
$content = file_get_contents($examplePath);
// Fix invalid escape sequences (literal \n, \r, \t in JSON values)
$content = $this->fixInvalidJsonEscapeSequences($content);
$rendererConfig = @json_decode($content, true) ?: [];
$this->line(' ✓ Loaded renderer config from: ' . basename($examplePath) . ' (' . count($rendererConfig) . ' keys)');
} else {
$this->warn(' ⚠ renderer-config.example/json not found');
return [];
}
// Recursively replace ALL URLs in the entire config
$rendererConfig = $this->replaceUrlsRecursively($rendererConfig, $httpProtocol, $wssProtocol, $host, $wsHost);
// Auto-detect asset directory names on disk and fix paths
$rendererConfig = $this->autoDetectAssetPaths($rendererConfig, $webroot);
// Special handling for socket.url - use ws subdomain
if (isset($rendererConfig['socket.url'])) {
$rendererConfig['socket.url'] = $wssProtocol . '://ws.' . $host;
}
// Auto-detect local asset paths from Gamedata directory
$gamedataBase = $httpProtocol . '://' . $host;
// Check what directories exist in Gamedata and set URLs accordingly
$gamedataPath = '/var/www/Gamedata';
if (is_dir($gamedataPath)) {
// Check for bundled directory - serve via /gamedata/bundled (nginx alias)
if (is_dir($gamedataPath . '/bundled')) {
$rendererConfig['asset.url'] = $gamedataBase . '/gamedata/bundled';
}
// JSON config files are in /gamedata/config/
if (is_dir($gamedataPath . '/config')) {
$rendererConfig['gamedata.url'] = $gamedataBase . '/gamedata/config';
}
// Check for c_images directory - serve via /gamedata/c_images
if (is_dir($gamedataPath . '/c_images')) {
$rendererConfig['image.library.url'] = $gamedataBase . '/gamedata/c_images/';
// Use icons folder for furni icons
if (is_dir($gamedataPath . '/icons')) {
$rendererConfig['hof.furni.url'] = $gamedataBase . '/gamedata/icons';
} else {
$rendererConfig['hof.furni.url'] = $gamedataBase . '/gamedata/c_images/dcr/hof_furni';
}
}
// Fix furni icon path - icons are directly in hof.furni folder, not in icons subfolder
if (isset($rendererConfig['furni.asset.icon.url'])) {
$rendererConfig['furni.asset.icon.url'] = '${hof.furni.url}/%libname%%param%_icon.png';
}
// Fix sound machine samples path - sounds are in /gamedata/sounds/
if (isset($rendererConfig['external.samples.url'])) {
$rendererConfig['external.samples.url'] = $gamedataBase . '/gamedata/sounds/sound_machine_sample_%sample%.mp3';
}
// Check for images directory
if (is_dir($gamedataPath . '/images')) {
$rendererConfig['images.url'] = $gamedataBase . '/gamedata/images';
}
}
// Add missing keys that might not be in the example
if (! isset($rendererConfig['external.plugins'])) {
$rendererConfig['external.plugins'] = [];
}
// Add YouTube API key from settings
$youtubeApiKey = setting('youtube_api_key', '');
if (! empty($youtubeApiKey)) {
$rendererConfig['youtube.api.key'] = $youtubeApiKey;
$this->line(' ✓ Added YouTube API key to renderer config');
}
// Ensure pet.types matches the exact required list in order
if (isset($rendererConfig['pet.types'])) {
$requiredPetTypes = [
'dog',
'cat',
'croco',
'terrier',
'bear',
'pig',
'lion',
'rhino',
'spider',
'turtle',
'chicken',
'frog',
'dragon',
'monster',
'monkey',
'horse',
'monsterplant',
'bunnyeaster',
'bunnyevil',
'bunnydepressed',
'bunnylove',
'pigeongood',
'pigeonevil',
'demonmonkey',
'bearbaby',
'terrierbaby',
'gnome',
'leprechaun',
'kittenbaby',
'puppybaby',
'pigletbaby',
'haloompa',
'fools',
'pterosaur',
'velociraptor',
'cow',
'dragondog',
'pkmshaymin2',
'LeetEendjes',
'pkmnentei',
'squirtle',
'LeetBH',
'LeetCaviaaa',
'LeetFantj',
'LeetHotelMario',
'LeetUil',
'LeetWolf',
'pokemon_mewblu',
'LeetBB',
'LeetHotelMari1',
'LeetMewtw',
'LeetPikachu',
'LeetYos',
'LeetE',
'LeetMewt1',
'LeetPen',
'slendermn',
'pkmnPAPI0',
'pkmnPAPI1',
'pkmnPAPI2',
'pkmnPAPI3',
'pkmnPAPI4',
'pokmn_mew',
'pkmashhhpet',
'pkmbeautfly',
'pkmcelebipe',
'pkmdarkraip',
'pkmeeveepet',
'pkmjirachip',
'pkmpichupet',
'pkmriolupet',
'pkmshayminp',
'pkmtogepipe',
'pkmvictinip',
'slenderm1',
'LeetEendj16',
'pkmnente1',
'LeetBa',
'babymeisje',
'babyBH',
'bb_hbx',
'LeetUi1',
];
$rendererConfig['pet.types'] = $requiredPetTypes;
$this->line(' ✓ Set pet.types to exact required list');
}
return $rendererConfig;
}
private function generateUiConfig(string $protocol, string $host, string $buildPath, string $webroot): array
{
$httpProtocol = $protocol === 'https' ? 'https' : 'http';
$wssProtocol = $protocol === 'https' ? 'wss' : 'ws';
$wsHost = 'ws.' . $host;
$uiConfig = [];
// Check build path first, then webroot for .example file
$examplePath = $buildPath . '/ui-config.example';
if (Process::timeout(5)->run('test -f ' . escapeshellarg($examplePath))->exitCode() !== 0) {
$examplePath = $webroot . '/ui-config.example';
}
// Fallback to .json version (newer Nitro-V3 format)
if (Process::timeout(5)->run('test -f ' . escapeshellarg($examplePath))->exitCode() !== 0) {
$jsonPath = $buildPath . '/ui-config.json';
if (Process::timeout(5)->run('test -f ' . escapeshellarg($jsonPath))->exitCode() === 0) {
$examplePath = $jsonPath;
} else {
$jsonPath = $webroot . '/ui-config.json';
if (Process::timeout(5)->run('test -f ' . escapeshellarg($jsonPath))->exitCode() === 0) {
$examplePath = $jsonPath;
}
}
}
// Load COMPLETE example file as base
if (Process::timeout(5)->run('test -f ' . escapeshellarg($examplePath))->exitCode() === 0) {
$content = file_get_contents($examplePath);
// Fix invalid escape sequences
$content = $this->fixInvalidJsonEscapeSequences($content);
$uiConfig = @json_decode($content, true) ?: [];
$this->line(' ✓ Loaded ui config from: ' . basename($examplePath) . ' (' . count($uiConfig) . ' keys)');
} else {
$this->warn(' ⚠ ui-config.example/json not found');
return [];
}
// Recursively replace ALL URLs in the entire config
$uiConfig = $this->replaceUrlsRecursively($uiConfig, $httpProtocol, $wssProtocol, $host, $wsHost);
return $uiConfig;
}
private function fixInvalidJsonEscapeSequences(string $content): string
{
// The example file has literal backslash + any letter in JSON values
// which breaks JSON. We need to escape all of these.
$backslash = chr(92);
$letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
foreach ($letters as $letter) {
$content = str_replace($backslash . $letter, $backslash . $backslash . $letter, $content);
}
return $content;
}
private function replaceUrlsRecursively(array $config, string $httpProtocol, string $wsProtocol, string $host, string $wsHost): array
{
foreach ($config as &$value) {
if (is_array($value)) {
// Handle nested arrays (like navigator.room.models)
if ($this->isAssociativeArray($value)) {
$value = $this->replaceUrlsRecursively($value, $httpProtocol, $wsProtocol, $host, $wsHost);
} else {
// Handle arrays of URLs
$value = array_map(function ($item) use ($httpProtocol, $wsProtocol, $host, $wsHost) {
if (is_string($item)) {
return $this->replaceUrl($item, $httpProtocol, $wsProtocol, $host, $wsHost);
}
return $item;
}, $value);
}
} elseif (is_string($value)) {
$value = $this->replaceUrl($value, $httpProtocol, $wsProtocol, $host, $wsHost);
}
}
return $config;
}
private function replaceUrl(string $url, string $httpProtocol, string $wsProtocol, string $host, string $wsHost): string
{
// Replace ws/wss URLs with ws subdomain
if (str_starts_with($url, 'ws://') || str_starts_with($url, 'wss://')) {
$path = parse_url($url, PHP_URL_PATH) ?? '/';
return $wsProtocol . '://' . $wsHost . ($path !== '/' ? $path : '');
}
// Replace localhost in all URLs
$url = preg_replace('#https?://localhost(?::\d+)?#', $httpProtocol . '://' . $host, $url);
$url = preg_replace('#wss?://localhost(?::\d+)?#', $wsProtocol . '://' . $wsHost, (string) $url);
$url = preg_replace('#localhost(?::\d+)?#', $host, (string) $url);
// Fix broken escape sequences in URL paths (from invalid JSON in example files)
// Pattern: /public\nitro-assets\gamedata or any variation
$url = preg_replace('#/public\\n[a-z_-]+\\\\gamedata#i', '/gamedata', (string) $url);
$url = preg_replace('#/public\\\\[a-z_-]+\\\\gamedata#i', '/gamedata', (string) $url);
$url = preg_replace('#/nitro-assets\\\\gamedata#i', '/gamedata', (string) $url);
$url = preg_replace('#/nitro\\\\[a-z_-]+#i', '/gamedata', (string) $url);
// Fix known asset path patterns
$url = str_replace('/public/nitro-assets/gamedata', '/gamedata', $url);
$url = str_replace('/swf/gamedata', '/gamedata', $url);
// Clean up any remaining backslashes in URLs
$url = str_replace('\\', '/', $url);
// Clean up any remaining double slashes (but keep protocol slashes)
$url = preg_replace('#([^:])//+#', '$1/', $url);
return $url;
}
private function isAssociativeArray(array $arr): bool
{
if ($arr === []) {
return false;
}
return array_keys($arr) !== range(0, count($arr) - 1);
}
private function autoDetectAssetPaths(array $config, string $webroot): array
{
// Check multiple possible gamedata locations
$possiblePaths = [
$webroot . '/gamedata',
'/var/www/Gamedata',
'/var/www/gamedata',
];
$gamedataPath = array_find($possiblePaths, fn ($path) => is_dir($path));
if (! $gamedataPath) {
return $config;
}
$assetDir = opendir($gamedataPath);
$actualDirs = [];
while (($entry = readdir($assetDir)) !== false) {
if ($entry !== '.' && $entry !== '..' && is_dir($gamedataPath . '/' . $entry)) {
$actualDirs[strtolower($entry)] = $entry;
}
}
closedir($assetDir);
$pathChecks = [
'pet.asset.url' => 'pets',
'furni.asset.url' => 'furniture',
'avatar.asset.url' => 'clothes',
'avatar.asset.effect.url' => 'effect',
'generic.asset.url' => 'generic_custom',
];
foreach ($config as $key => &$value) {
if (! is_string($value) || ! isset($pathChecks[$key])) {
continue;
}
$expectedDir = $pathChecks[$key];
$lowerExpected = strtolower($expectedDir);
$actualName = null;
// Special case: "figure" is often used instead of "clothes" for avatars
if ($lowerExpected === 'clothes' && isset($actualDirs['figure'])) {
$actualName = $actualDirs['figure'];
} elseif (isset($actualDirs[$lowerExpected])) {
$actualName = $actualDirs[$lowerExpected];
} else {
foreach ($actualDirs as $actualLower => $actual) {
if (str_starts_with($actualLower, rtrim($lowerExpected, 's')) ||
str_starts_with(rtrim($actualLower, 's'), rtrim($lowerExpected, 's'))) {
$actualName = $actual;
break;
}
}
}
if ($actualName && $actualName !== $expectedDir) {
$value = str_replace("/{$expectedDir}/", "/{$actualName}/", $value);
$this->line(" 🔍 Auto-detected: {$key} -> /{$actualName}/ (was /{$expectedDir}/)");
}
}
return $config;
}
private function syncExampleFromGithub(string $buildPath, string $webroot): void
{
$this->info('Syncing latest examples from GitHub...');
$rendererRepo = setting('nitro_github_url', '');
$repo = $this->parseRepoFromUrl($rendererRepo);
if (! $repo) {
$this->warn(' ⚠ No GitHub repo configured, skipping sync');
return;
}
$branch = setting('nitro_github_branch', 'main');
$examples = [
'renderer-config.example' => 'renderer-config.example',
'ui-config.example' => 'ui-config.example',
'UITexts.example' => 'UITexts.json',
];
foreach (array_keys($examples) as $remoteFile) {
$tempFile = '/tmp/' . $remoteFile . '_' . uniqid();
$fetched = false;
// Try multiple paths: root, public/, nitro-client/dist/, Nitro-V3 paths
$paths = ['', 'public/', 'nitro-client/dist/', 'dist/', 'src/', 'assets/'];
foreach ($paths as $path) {
$url = "https://raw.githubusercontent.com/{$repo}/{$branch}/{$path}{$remoteFile}";
$result = Process::timeout(15)->run("curl -sL -o {$tempFile} '{$url}'");
if ($result->successful() && file_exists($tempFile) && filesize($tempFile) > 10) {
$content = file_get_contents($tempFile);
$data = @json_decode($content, true);
if (is_array($data) && $data !== []) {
// Save to both buildPath and webroot
file_put_contents($buildPath . '/' . $remoteFile, $content);
file_put_contents($webroot . '/' . $remoteFile, $content);
$this->line(" ✓ Synced: {$remoteFile} (" . count($data) . " keys from {$path}{$remoteFile})");
$fetched = true;
break;
}
}
@unlink($tempFile);
}
if (! $fetched) {
$this->line(" - Skipped: {$remoteFile} (not found in any path)");
}
}
}
private function parseRepoFromUrl(string $url): ?string
{
if (preg_match('/github\.com\/([^\/]+\/[^\/\?#]+)/', $url, $matches)) {
return rtrim($matches[1], '/');
}
return null;
}
private function compareConfigs(array $generated, string $name, string $webroot): void
{
$currentPath = $webroot . '/' . $name . '.json';
if (! file_exists($currentPath)) {
$this->line(" ℹ {$name}: Geen bestaande config — nieuwe generatie");
return;
}
$current = @json_decode(file_get_contents($currentPath), true);
if (! is_array($current)) {
$this->warn(" ⚠ {$name}: Bestaande config is ongeldig JSON");
return;
}
$newKeys = array_diff(array_keys($generated), array_keys($current));
$removedKeys = array_diff(array_keys($current), array_keys($generated));
$changedKeys = [];
foreach (array_intersect(array_keys($generated), array_keys($current)) as $key) {
if ($generated[$key] !== $current[$key]) {
$changedKeys[] = $key;
}
}
if ($newKeys !== []) {
$this->line(" 🆕 {$name}: " . count($newKeys) . ' nieuwe key(s): ' . implode(', ', array_slice($newKeys, 0, 10)));
if (count($newKeys) > 10) {
$this->line(' ... en ' . (count($newKeys) - 10) . ' meer');
}
}
if ($removedKeys !== []) {
$this->line(" 🗑 {$name}: " . count($removedKeys) . ' verwijderde key(s): ' . implode(', ', array_slice($removedKeys, 0, 5)));
}
if ($changedKeys !== []) {
$this->line(" 🔄 {$name}: " . count($changedKeys) . ' gewijzigde key(s): ' . implode(', ', array_slice($changedKeys, 0, 5)));
}
if ($newKeys === [] && $removedKeys === [] && $changedKeys === []) {
$this->line(" ✓ {$name}: Geen wijzigingen");
}
}
}
-272
View File
@@ -1,272 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Console\Commands;
use App\Enums\AlertChannel;
use App\Enums\AlertType;
use App\Services\AlertService;
use App\Services\NitroUpdateService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
class NitroUpdateCommand extends Command
{
#[\Override]
protected $signature = 'nitro:auto
{--force : Forceer update ook al is het niet de geplande tijd}
{--build-only : Alleen build en deploy uitvoeren}
{--full : Volledige reset en reinstall}
{--repair : Probeer Nitro te repareren}
{--diagnose : Toon diagnose informatie}';
#[\Override]
protected $description = 'Automatische Nitro client en renderer updates';
private const string CACHE_KEY_LAST_UPDATE = 'nitro_last_update';
public function handle(AlertService $alertService, NitroUpdateService $nitroService): int
{
$this->info('Nitro update check...');
if ($this->option('diagnose')) {
return $this->diagnose($nitroService);
}
if ($this->option('repair')) {
return $this->repair($alertService, $nitroService);
}
$isForced = $this->option('force');
$buildOnly = $this->option('build-only');
$full = $this->option('full');
if ($buildOnly) {
return $this->buildOnly($alertService, $nitroService);
}
if (! $isForced && ! $this->isScheduledTime()) {
$this->line('Niet de geplande tijd, overslaan.');
return Command::SUCCESS;
}
$repo = setting('nitro_github_url', 'duckietm/Nitro-V3 (default)');
$this->info("GitHub: {$repo}");
if ($full) {
return $this->fullReinstall($alertService, $nitroService);
}
$status = $nitroService->getStatus();
$this->info('Client: ' . ($status['client_installed'] ? '✅' : '❌'));
$this->info('Renderer: ' . ($status['renderer_installed'] ? '✅' : '❌'));
$this->info('Build: ' . ($status['build_exists'] ? '✅' : '❌'));
$this->info('Deployed: ' . ($status['deployed'] ? '✅' : '❌'));
if (! $status['client_installed'] || ! $status['renderer_installed']) {
$this->warn('Nitro niet volledig geïnstalleerd. Voer --full uit voor volledige installatie.');
if ($this->confirm('Wil je nu volledig installeren?')) {
return $this->fullReinstall($alertService, $nitroService);
}
return Command::SUCCESS;
}
$this->line('✅ Nitro client is up-to-date.');
if ($isForced) {
$this->warn('Force update aangevraagd...');
return $this->fullReinstall($alertService, $nitroService);
}
Cache::put(self::CACHE_KEY_LAST_UPDATE, now()->toIso8601String());
return Command::SUCCESS;
}
private function diagnose(NitroUpdateService $nitroService): int
{
$this->info('🔍 Nitro diagnose...');
$diagnosis = $nitroService->diagnose();
$this->newLine();
$this->info('=== Controle Resultaten ===');
$checks = $diagnosis['checks'] ?? [];
foreach ($checks as $key => $value) {
if (is_bool($value)) {
$this->line(($value ? '✅' : '❌') . ' ' . $key);
} elseif (is_array($value)) {
$this->line($key . ': ' . count($value) . ' items');
} else {
$this->line($key . ': ' . $value);
}
}
if (! empty($diagnosis['issues'])) {
$this->newLine();
$this->error('=== Problemen ===');
foreach ($diagnosis['issues'] as $issue) {
$this->line('❌ ' . $issue);
}
}
if (! empty($diagnosis['recommendations'])) {
$this->newLine();
$this->info('=== Aanbevelingen ===');
foreach ($diagnosis['recommendations'] as $rec) {
$this->line('💡 ' . $rec);
}
}
return Command::SUCCESS;
}
private function repair(AlertService $alertService, NitroUpdateService $nitroService): int
{
$this->warn('🔧 Nitro repair modus gestart...');
$this->info('Dit zal de Nitro installatie controleren en repareren.');
try {
$repairResult = $nitroService->repair();
if ($repairResult['success']) {
$this->info('✅ Repair succesvol!');
foreach ($repairResult['actions'] ?? [] as $action) {
$this->line(' - ' . $action);
}
$alertService->send(
AlertType::EMULATOR_UPDATE,
'Nitro client gerepareerd',
['actions' => $repairResult['actions'] ?? []],
AlertChannel::DISCORD,
);
return Command::SUCCESS;
}
$this->error('❌ Repair mislukt: ' . ($repairResult['error'] ?? 'Onbekende fout'));
if (! empty($repairResult['actions'])) {
$this->line('Uitgevoerde acties:');
foreach ($repairResult['actions'] as $action) {
$this->line(' - ' . $action);
}
}
if (! empty($repairResult['errors'])) {
$this->line('Fouten:');
foreach ($repairResult['errors'] as $error) {
$this->line(' ❌ ' . $error);
}
}
$alertService->send(
AlertType::EMULATOR_ERROR,
'Nitro repair mislukt: ' . ($repairResult['error'] ?? 'Onbekende fout'),
[],
AlertChannel::DISCORD,
);
return Command::FAILURE;
} catch (\Exception $e) {
$this->error('❌ Repair exception: ' . $e->getMessage());
return Command::FAILURE;
}
}
private function buildOnly(AlertService $alertService, NitroUpdateService $nitroService): int
{
$this->info('Build en deploy uitvoeren...');
$buildResult = $nitroService->buildClient();
if (! $buildResult['success']) {
$this->error('Build mislukt: ' . ($buildResult['error'] ?? 'Onbekend'));
return Command::FAILURE;
}
$nitroService->deployClient();
$nitroService->generateConfigs();
$this->info('Client succesvol gedeployed!');
$alertService->send(
AlertType::EMULATOR_UPDATE,
'Nitro client opnieuw gedeployed',
[],
AlertChannel::DISCORD,
);
return Command::SUCCESS;
}
private function fullReinstall(AlertService $alertService, NitroUpdateService $nitroService): int
{
$this->warn('Volledige reinstall wordt uitgevoerd...');
try {
$result = $nitroService->updateNitro();
if ($result['success']) {
$this->info('Nitro succesvol opnieuw geïnstalleerd!');
$alertService->send(
AlertType::EMULATOR_UPDATE,
'Nitro client succesvol geüpdatet en gedeployed',
[],
AlertChannel::DISCORD,
);
return Command::SUCCESS;
}
$this->error('Reinstall mislukt: ' . ($result['error'] ?? 'Onbekende fout'));
$alertService->send(
AlertType::CRITICAL_ERROR,
'Nitro Update Mislukt: ' . ($result['error'] ?? 'Onbekende fout'),
[],
AlertChannel::DISCORD,
);
return Command::FAILURE;
} catch (\Exception $e) {
$this->error('Reinstall exception: ' . $e->getMessage());
return Command::FAILURE;
}
}
private function isScheduledTime(): bool
{
$scheduleTime = setting('nitro_auto_update_schedule', '03:00');
$scheduleDays = setting('nitro_auto_update_days', '0,6');
$enabled = setting('nitro_auto_update_enabled', false);
if (! $enabled) {
return false;
}
$now = now();
$currentTime = $now->format('H:i');
$currentDay = (int) $now->dayOfWeek;
$allowedDays = array_map(intval(...), explode(',', $scheduleDays));
if (! in_array($currentDay, $allowedDays)) {
return false;
}
if ($currentTime !== $scheduleTime) {
$minuteDiff = abs(strtotime($currentTime) - strtotime((string) $scheduleTime)) / 60;
if ($minuteDiff > 5) {
return false;
}
}
return true;
}
}
@@ -1,49 +0,0 @@
<?php
namespace App\Console\Commands;
use App\Services\NitroUpdateService;
use App\Services\SettingsService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
class SwitchNitroBranch extends Command
{
#[\Override]
protected $signature = 'app:switch-nitro-branch {--branch=main}';
#[\Override]
protected $description = 'Switch Nitro to a specific branch (runs in background)';
public function handle(): int
{
$branch = $this->option('branch') ?? 'main';
$this->info("🔄 Switching Nitro to branch: {$branch}");
try {
$nitroService = new NitroUpdateService;
$result = $nitroService->updateNitro(true);
if ($result['success'] ?? false) {
$this->info("✅ Switched to {$branch} successfully!");
$this->info($result['message'] ?? '');
Log::info('[NitroSwitch] Success', ['branch' => $branch, 'message' => $result['message'] ?? '']);
} else {
$this->error('❌ Switch failed: ' . ($result['error'] ?? 'Unknown error'));
Log::error('[NitroSwitch] Failed', ['branch' => $branch, 'error' => $result['error'] ?? 'Unknown']);
}
Cache::forget('website_settings');
SettingsService::clearCache();
return ($result['success'] ?? false) ? 0 : 1;
} catch (\Exception $e) {
$this->error('❌ Exception: ' . $e->getMessage());
Log::error('[NitroSwitch] Exception', ['branch' => $branch, 'error' => $e->getMessage()]);
return 1;
}
}
}
@@ -1,251 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Console\Commands;
use App\Services\EmulatorUpdateService;
use App\Services\NitroUpdateService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Process;
class SystemHealthCommand extends Command
{
#[\Override]
protected $signature = 'system:health
{--json : Output als JSON}
{--details : Toon meer details}';
#[\Override]
protected $description = 'Controleer systeem gezondheid';
public function handle(EmulatorUpdateService $emuService, NitroUpdateService $nitroService): int
{
$json = $this->option('json');
$this->option('details');
$health = $this->performHealthCheck($emuService, $nitroService);
if ($json) {
$this->line(json_encode($health, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
return $health['status'] === 'healthy' ? 0 : 1;
}
$this->displayHealthCheck($health);
return $health['status'] === 'healthy' ? 0 : 1;
}
private function performHealthCheck(EmulatorUpdateService $emuService, NitroUpdateService $nitroService): array
{
$checks = [];
$issues = [];
$warnings = [];
$checks['timestamp'] = now()->toIso8601String();
$checks['php'] = [
'version' => PHP_VERSION,
'status' => 'ok',
];
$checks['system'] = [
'os' => PHP_OS,
'user' => posix_getpwuid(posix_geteuid())['name'] ?? 'unknown',
];
$diskFree = @disk_free_space('/');
$diskTotal = @disk_total_space('/');
$diskPercent = $diskTotal > 0 ? round(($diskFree / $diskTotal) * 100, 1) : 0;
$checks['disk'] = [
'free' => $this->formatBytes($diskFree),
'total' => $this->formatBytes($diskTotal),
'percent_free' => $diskPercent,
'status' => $diskPercent > 10 ? 'ok' : 'critical',
];
if ($diskPercent < 10) {
$issues[] = 'Disk space critically low: ' . $diskPercent . '% free';
} elseif ($diskPercent < 20) {
$warnings[] = 'Disk space low: ' . $diskPercent . '% free';
}
try {
$emuDiagnosis = $emuService->diagnose();
$checks['emulator'] = [
'configured' => $emuDiagnosis['checks']['is_configured'] ?? false,
'jar_exists' => $emuDiagnosis['checks']['jar_exists'] ?? false,
'service_running' => $emuDiagnosis['checks']['service_running'] ?? false,
'db_connected' => $emuDiagnosis['checks']['emulator_db_connected'] ?? false,
'status' => empty($emuDiagnosis['issues']) ? 'ok' : 'issues',
'issues' => $emuDiagnosis['issues'] ?? [],
];
if (! empty($emuDiagnosis['issues'])) {
foreach ($emuDiagnosis['issues'] as $issue) {
$issues[] = 'Emulator: ' . $issue;
}
}
} catch (\Exception $e) {
$checks['emulator'] = [
'status' => 'error',
'error' => $e->getMessage(),
];
$issues[] = 'Emulator check failed: ' . $e->getMessage();
}
try {
$nitroDiagnosis = $nitroService->diagnose();
$checks['nitro'] = [
'client_installed' => $nitroDiagnosis['checks']['client_installed'] ?? false,
'renderer_installed' => $nitroDiagnosis['checks']['renderer_installed'] ?? false,
'deployed' => $nitroDiagnosis['checks']['deployed'] ?? false,
'status' => empty($nitroDiagnosis['issues']) ? 'ok' : 'issues',
'issues' => $nitroDiagnosis['issues'] ?? [],
];
if (! empty($nitroDiagnosis['issues'])) {
foreach ($nitroDiagnosis['issues'] as $issue) {
$issues[] = 'Nitro: ' . $issue;
}
}
} catch (\Exception $e) {
$checks['nitro'] = [
'status' => 'error',
'error' => $e->getMessage(),
];
$issues[] = 'Nitro check failed: ' . $e->getMessage();
}
try {
$sqlDiagnosis = $emuService->diagnoseSqlUpdates();
$checks['sql_updates'] = [
'table_exists' => $sqlDiagnosis['table_exists'] ?? false,
'applied' => $sqlDiagnosis['applied_count'] ?? 0,
'pending' => $sqlDiagnosis['pending_count'] ?? 0,
'status' => ($sqlDiagnosis['pending_count'] ?? 0) > 0 ? 'pending' : 'ok',
];
if (($sqlDiagnosis['pending_count'] ?? 0) > 0) {
$warnings[] = $sqlDiagnosis['pending_count'] . ' SQL updates pending';
}
} catch (\Exception $e) {
$checks['sql_updates'] = [
'status' => 'error',
'error' => $e->getMessage(),
];
}
$webserverCheck = Process::timeout(5)->run('which nginx || which apache2 || which httpd');
$checks['webserver'] = [
'installed' => $webserverCheck->successful(),
'status' => $webserverCheck->successful() ? 'ok' : 'unknown',
];
$mysqlCheck = Process::timeout(5)->run('which mysql || which mariadb');
$checks['database'] = [
'client_installed' => $mysqlCheck->successful(),
'status' => $mysqlCheck->successful() ? 'ok' : 'unknown',
];
$nodeCheck = Process::timeout(5)->run('which node && which yarn');
$checks['node'] = [
'installed' => $nodeCheck->successful(),
'status' => $nodeCheck->successful() ? 'ok' : 'missing',
];
if (! $nodeCheck->successful()) {
$warnings[] = 'Node.js/Yarn niet geïnstalleerd';
}
$status = $issues === [] ? 'healthy' : ($warnings === [] ? 'warning' : 'degraded');
return [
'status' => $status,
'checks' => $checks,
'issues' => $issues,
'warnings' => $warnings,
];
}
private function displayHealthCheck(array $health): void
{
$status = $health['status'];
$statusIcon = match ($status) {
'healthy' => '✅',
'warning' => '⚠️',
'degraded' => '❌',
default => '❓',
};
$this->info("{$statusIcon} Systeem Gezondheid: " . strtoupper($status));
$this->line('═══════════════════════════════════════════════');
$checks = $health['checks'] ?? [];
$this->line('📦 Systeem:');
$this->line(' PHP: ' . ($checks['php']['version'] ?? '?'));
$this->line(' User: ' . ($checks['system']['user'] ?? '?'));
$diskStatus = $checks['disk']['status'] ?? '?';
$diskIcon = $diskStatus === 'ok' ? '✅' : '❌';
$this->line(" {$diskIcon} Disk: " . ($checks['disk']['percent_free'] ?? '?') . '% vrij');
$emuStatus = $checks['emulator']['status'] ?? '?';
$emuIcon = $emuStatus === 'ok' ? '✅' : '⚠️';
$this->line(" {$emuIcon} Emulator: " . ucfirst($emuStatus));
$nitroStatus = $checks['nitro']['status'] ?? '?';
$nitroIcon = $nitroStatus === 'ok' ? '✅' : '⚠️';
$this->line(" {$nitroIcon} Nitro: " . ucfirst($nitroStatus));
$sqlStatus = $checks['sql_updates']['status'] ?? '?';
$sqlIcon = $sqlStatus === 'ok' ? '✅' : '⚠️';
$this->line(" {$sqlIcon} SQL Updates: " . ucfirst($sqlStatus) . ' (' . ($checks['sql_updates']['applied'] ?? 0) . ' toegepast)');
$nodeStatus = $checks['node']['status'] ?? '?';
$nodeIcon = $nodeStatus === 'ok' ? '✅' : '❌';
$this->line(" {$nodeIcon} Node.js: " . ucfirst($nodeStatus));
if (! empty($health['issues'])) {
$this->line('');
$this->error('❌ Problemen:');
foreach ($health['issues'] as $issue) {
$this->line(' - ' . $issue);
}
}
if (! empty($health['warnings'])) {
$this->line('');
$this->warn('⚠️ Waarschuwingen:');
foreach ($health['warnings'] as $warning) {
$this->line(' - ' . $warning);
}
}
$this->line('═══════════════════════════════════════════════');
if ($status === 'healthy') {
$this->info('✅ Alles werkt correct!');
} else {
$this->warn('Run "php artisan system:repair" om problemen op te lossen');
}
}
private function formatBytes(?float $bytes): string
{
if ($bytes === null) {
return 'N/A';
}
$units = ['B', 'KB', 'MB', 'GB', 'TB'];
$i = 0;
while ($bytes >= 1024 && $i < count($units) - 1) {
$bytes /= 1024;
$i++;
}
return round($bytes, 2) . ' ' . $units[$i];
}
}
@@ -1,213 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Console\Commands;
use App\Services\AlertService;
use App\Services\EmulatorUpdateService;
use App\Services\NitroUpdateService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Process;
class SystemRepairCommand extends Command
{
#[\Override]
protected $signature = 'system:repair
{--emu : Alleen emulator repareren}
{--nitro : Alleen Nitro repareren}
{--check : Alleen controleren, niet repareren}
{--force : Forceer reparatie ook al is alles OK}
{--full : Volledige reset en reinstall}
{--nuke : Alles verwijderen en opnieuw installeren (gevaarlijk!)}';
#[\Override]
protected $description = 'Automatische systeem reparatie voor emulator en Nitro';
private const string CACHE_KEY_LAST_REPAIR = 'system_last_repair';
public function handle(AlertService $alertService, EmulatorUpdateService $emuService, NitroUpdateService $nitroService): int
{
$this->info('🔧 System Repair Service gestart...');
$this->line('═══════════════════════════════════════════════');
$checkOnly = $this->option('check');
$force = $this->option('force');
$full = $this->option('full');
$emuOnly = $this->option('emu');
$nitroOnly = $this->option('nitro');
$results = [
'emulator' => null,
'nitro' => null,
];
if (! $nitroOnly) {
$results['emulator'] = $this->repairEmulator($emuService, $checkOnly, $force, $full);
}
if (! $emuOnly) {
$results['nitro'] = $this->repairNitro($nitroService, $checkOnly, $force, $full);
}
Cache::put(self::CACHE_KEY_LAST_REPAIR, now()->toIso8601String());
$emuOk = $results['emulator'] === null || ($results['emulator']['success'] ?? false);
$nitroOk = $results['nitro'] === null || ($results['nitro']['success'] ?? false);
$this->line('═══════════════════════════════════════════════');
if ($emuOk && $nitroOk) {
$this->info('✅ Alle systemen OK');
return Command::SUCCESS;
}
return Command::FAILURE;
}
private function ensureBaseDirectories(): void
{
$basePaths = [
'/var/www',
'/var/www/atomcms',
storage_path('app'),
];
foreach ($basePaths as $path) {
if (! is_dir($path)) {
@mkdir($path, 0755, true);
}
}
Process::timeout(5)->run('chown -R www-data:www-data /var/www/atomcms 2>/dev/null || true');
Process::timeout(5)->run('chmod -R 755 /var/www/atomcms 2>/dev/null || true');
}
private function repairEmulator(EmulatorUpdateService $service, bool $checkOnly, bool $force, bool $full): array
{
$this->info('Emulator controleren...');
$this->ensureBaseDirectories();
try {
$diagnosis = $service->diagnose();
if (empty($diagnosis['issues']) && ! $force && ! $full) {
$this->line(' ✅ Emulator is OK');
return ['success' => true, 'status' => 'ok'];
}
if ($checkOnly) {
$this->warn(' ⚠️ Emulator problemen gevonden:');
foreach ($diagnosis['issues'] ?? [] as $issue) {
$this->line(' - ' . $issue);
}
foreach ($diagnosis['recommendations'] ?? [] as $rec) {
$this->line(' 💡 ' . $rec);
}
return ['success' => false, 'status' => 'issues_found', 'issues' => $diagnosis['issues']];
}
$this->warn(' 🔧 Emulator wordt gerepareerd...');
if ($full) {
$this->line(' 📦 Volledige reset...');
$repairResult = $service->repairEmulator();
} else {
$repairResult = $service->repairEmulator();
}
if ($repairResult['success']) {
$this->info(' ✅ Emulator gerepareerd!');
foreach ($repairResult['actions'] ?? [] as $action) {
$this->line(' - ' . $action);
}
return ['success' => true, 'status' => 'repaired', 'actions' => $repairResult['actions']];
}
$this->error(' ❌ Emulator repair mislukt: ' . ($repairResult['error'] ?? 'Onbekend'));
if (! empty($repairResult['actions'])) {
$this->line(' Uitgevoerde acties:');
foreach ($repairResult['actions'] as $action) {
$this->line(' - ' . $action);
}
}
return ['success' => false, 'status' => 'failed', 'error' => $repairResult['error']];
} catch (\Exception $e) {
$this->error(' ❌ Emulator exception: ' . $e->getMessage());
Log::error('[SystemRepair] Emulator exception', ['error' => $e->getMessage()]);
return ['success' => false, 'status' => 'exception', 'error' => $e->getMessage()];
}
}
private function repairNitro(NitroUpdateService $service, bool $checkOnly, bool $force, bool $full): array
{
$this->info('Nitro controleren...');
$this->ensureBaseDirectories();
try {
$diagnosis = $service->diagnose();
if (empty($diagnosis['issues']) && ! $force && ! $full) {
$this->line(' ✅ Nitro is OK');
return ['success' => true, 'status' => 'ok'];
}
if ($checkOnly) {
$this->warn(' ⚠️ Nitro problemen gevonden:');
foreach ($diagnosis['issues'] ?? [] as $issue) {
$this->line(' - ' . $issue);
}
foreach ($diagnosis['recommendations'] ?? [] as $rec) {
$this->line(' 💡 ' . $rec);
}
return ['success' => false, 'status' => 'issues_found', 'issues' => $diagnosis['issues']];
}
$this->warn(' 🔧 Nitro wordt gerepareerd...');
if ($full) {
$this->line(' 📦 Volledige reset...');
$repairResult = $service->updateNitro();
} else {
$repairResult = $service->repair();
}
if ($repairResult['success']) {
$this->info(' ✅ Nitro gerepareerd!');
foreach ($repairResult['actions'] ?? [] as $action) {
$this->line(' - ' . $action);
}
return ['success' => true, 'status' => 'repaired', 'actions' => $repairResult['actions']];
}
$this->error(' ❌ Nitro repair mislukt: ' . ($repairResult['error'] ?? 'Onbekend'));
if (! empty($repairResult['actions'])) {
$this->line(' Uitgevoerde acties:');
foreach ($repairResult['actions'] as $action) {
$this->line(' - ' . $action);
}
}
return ['success' => false, 'status' => 'failed', 'error' => $repairResult['error']];
} catch (\Exception $e) {
$this->error(' ❌ Nitro exception: ' . $e->getMessage());
Log::error('[SystemRepair] Nitro exception', ['error' => $e->getMessage()]);
return ['success' => false, 'status' => 'exception', 'error' => $e->getMessage()];
}
}
}
-15
View File
@@ -4,16 +4,10 @@ declare(strict_types=1);
namespace App\Console;
use App\Console\Commands\AutoUpdateCommand;
use App\Console\Commands\DDoSDetectionCommand;
use App\Console\Commands\EmulatorMonitorCommand;
use App\Console\Commands\EmulatorUpdateCommand;
use App\Console\Commands\FixCodeCommand;
use App\Console\Commands\GenerateNitroConfigs;
use App\Console\Commands\NitroUpdateCommand;
use App\Console\Commands\SystemCheckCommand;
use App\Console\Commands\SystemHealthCommand;
use App\Console\Commands\SystemRepairCommand;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
@@ -28,9 +22,6 @@ class Kernel extends ConsoleKernel
$schedule->command('maintenance:check-scheduled')->everyMinute()->withoutOverlapping();
$schedule->command('monitor:emulator')->everyMinute()->withoutOverlapping();
$schedule->command('monitor:ddos')->everyFiveMinutes()->withoutOverlapping();
$schedule->command('update:auto')->everyMinute()->withoutOverlapping();
$schedule->command('nitro:auto')->everyMinute()->withoutOverlapping();
$schedule->command('system:repair')->everyTenMinutes()->withoutOverlapping();
}
#[\Override]
@@ -42,12 +33,6 @@ class Kernel extends ConsoleKernel
$this->commands[] = FixCodeCommand::class;
$this->commands[] = EmulatorMonitorCommand::class;
$this->commands[] = DDoSDetectionCommand::class;
$this->commands[] = EmulatorUpdateCommand::class;
$this->commands[] = AutoUpdateCommand::class;
$this->commands[] = NitroUpdateCommand::class;
$this->commands[] = SystemRepairCommand::class;
$this->commands[] = SystemHealthCommand::class;
$this->commands[] = GenerateNitroConfigs::class;
require base_path('routes/console.php');
}
File diff suppressed because it is too large. Load diff
@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace App\Filament\Pages\Monitoring;
use App\Actions\Commandocentrum\EmulatorControlAction;
use App\Actions\Commandocentrum\NitroControlAction;
use App\Enums\AlertSeverity;
use App\Models\Miscellaneous\WebsitePermission;
use App\Models\StaffActivity;
@@ -16,7 +15,6 @@ use App\Services\Diagnostics\DiagnosticRunner;
use App\Services\GitHubService;
use App\Services\RconService;
use App\Services\SettingsService;
use App\Services\UpdateHistoryService;
use BackedEnum;
use Exception;
use Filament\Actions\Action;
@@ -106,21 +104,6 @@ final class Commandocentrum extends Page implements HasForms
'emulator_database_username' => $this->getSetting('emulator_database_username', ''),
'emulator_database_password' => $this->getSetting('emulator_database_password', ''),
'emulator_version' => $this->getSetting('emulator_version', 'Onbekend'),
'auto_update_enabled' => $this->getSettingBool('auto_update_enabled'),
'auto_update_schedule' => $this->getSetting('auto_update_schedule', '03:00'),
'auto_update_days' => $this->getSetting('auto_update_days', '0,6'),
'nitro_client_path' => $this->getSetting('nitro_client_path', $paths['nitro_client_path']),
'nitro_renderer_path' => $this->getSetting('nitro_renderer_path', $paths['nitro_renderer_path']),
'nitro_build_path' => $this->getSetting('nitro_build_path', $paths['nitro_build_path']),
'nitro_webroot' => $this->getSetting('nitro_webroot', $paths['nitro_webroot']),
'gamedata_path' => $this->getSetting('gamedata_path', $paths['gamedata_path']),
'nitro_github_branch' => $this->getSetting('nitro_github_branch', 'main'),
'nitro_github_url' => $this->getSetting('nitro_github_url', ''),
'nitro_site_url' => $this->getSetting('nitro_site_url', $this->getCurrentSiteUrl()),
'nitro_auto_update_configs' => $this->getSettingBool('nitro_auto_update_configs'),
'nitro_auto_update_enabled' => $this->getSettingBool('nitro_auto_update_enabled'),
'nitro_auto_update_schedule' => $this->getSetting('nitro_auto_update_schedule', '03:00'),
'nitro_auto_update_days' => $this->getSetting('nitro_auto_update_days', '0,6'),
'hotel_alert_message' => '',
];
}
@@ -233,92 +216,6 @@ final class Commandocentrum extends Page implements HasForms
->content(fn () => $this->renderEmulatorInfoView()),
]),
Section::make(__('commandocentrum.emulator_updates'))
->description(__('commandocentrum.emulator_updates_desc'))
->icon('heroicon-o-arrow-down-circle')
->afterHeader([
Action::make('check_updates')
->label(__('commandocentrum.check_updates'))
->color('info')
->action('checkEmulatorUpdates'),
Action::make('build_emulator')
->label('🔨 ' . __('commandocentrum.build'))
->color('success')
->action('buildEmulator'),
Action::make('run_sql')
->label(__('commandocentrum.sql_updates'))
->color('purple')
->action('runSqlUpdates'),
Action::make('save_emulator')
->label(__('commandocentrum.save'))
->color('primary')
->action('saveEmulator'),
])
->schema([
Placeholder::make('emulator_settings')
->label('')
->content(fn () => $this->renderEmulatorSettingsView()),
]),
Section::make(__('commandocentrum.emulator_backups'))
->description(__('commandocentrum.emulator_backups_desc'))
->icon('heroicon-s-archive-box')
->schema([
Placeholder::make('backups_list')
->label('')
->content(fn () => $this->renderBackupsListView()),
]),
Section::make(__('commandocentrum.nitro_client'))
->description(__('commandocentrum.nitro_client_desc'))
->icon('heroicon-o-cloud-arrow-down')
->afterHeader([
Action::make('detect_paths')
->label('🔍 ' . __('commandocentrum.auto_detect'))
->color('success')
->action('detectAndSavePaths'),
Action::make('check_nitro')
->label(__('commandocentrum.check'))
->color('info')
->action('checkNitroUpdates'),
Action::make('build_nitro')
->label(__('commandocentrum.build'))
->color('pink')
->action('buildNitro'),
Action::make('generate_configs')
->label(__('commandocentrum.generate_configs'))
->color('indigo')
->action('generateNitroConfigs'),
Action::make('save_nitro')
->label(__('commandocentrum.save'))
->color('primary')
->action('saveNitro'),
])
->schema([
Placeholder::make('nitro_settings')
->label('')
->content(fn () => $this->renderNitroSettingsView()),
]),
Section::make(__('commandocentrum.auto_updates'))
->description(__('commandocentrum.auto_updates_desc'))
->icon('heroicon-o-clock')
->columns(2)
->afterHeader([
Action::make('save_auto')
->label(__('commandocentrum.save'))
->color('primary')
->action('saveAutoUpdate'),
])
->schema([
Toggle::make('auto_update_enabled')
->label(__('commandocentrum.enable_auto_updates')),
TextInput::make('auto_update_schedule')
->label(__('commandocentrum.schedule')),
TextInput::make('auto_update_days')
->label(__('commandocentrum.days')),
]),
Section::make(__('commandocentrum.clothing_sync'))
->description(__('commandocentrum.clothing_sync_desc'))
->icon('heroicon-o-user')
@@ -367,15 +264,6 @@ final class Commandocentrum extends Page implements HasForms
->helperText(__('commandocentrum.discord_ranks_helper')),
]),
Section::make(__('commandocentrum.update_history'))
->description(__('commandocentrum.update_history_desc'))
->icon('heroicon-o-clock')
->schema([
Placeholder::make('history')
->label('')
->content(fn () => $this->renderUpdateHistoryView()),
]),
Section::make(__('commandocentrum.social_login'))
->description(__('commandocentrum.social_login_desc'))
->icon('heroicon-o-user-circle')
@@ -491,100 +379,6 @@ final class Commandocentrum extends Page implements HasForms
]);
}
private function renderEmulatorSettingsView(): View
{
return view('filament.components.commandocentrum.emulator-settings', [
'emulatorBranchesHtml' => $this->getEmulatorBranchesHtml(),
'emulatorStatusHtml' => $this->renderEmulatorStatusView()->render(),
]);
}
private function renderEmulatorStatusView(): View
{
$serviceName = $this->getSetting('emulator_service_name', 'arcturus');
$jarPath = $this->getSetting('emulator_jar_path', '/var/www/Emulator');
$sourcePath = $this->getSetting('emulator_source_path', '/var/www/emulator-source');
$githubUrl = $this->getSetting('emulator_github_url', '');
$branch = $this->getSetting('emulator_github_branch', 'main');
$jarExists = $this->fileExists($jarPath);
$sourceExists = $this->fileExists($sourcePath);
$sourceCommit = $this->getGitCommit($sourcePath);
$remoteVersion = $githubUrl !== '' && $githubUrl !== '0' ? $this->getRemoteCommit($githubUrl, $branch) : 'N/A';
$canBuild = false;
$checkDirs = [
$sourcePath,
$sourcePath . '/Emulator',
$sourcePath . '/Emulator/Emulator',
$sourcePath . '/emulator',
$sourcePath . '/emulator/emulator',
];
foreach ($checkDirs as $dir) {
$check = $this->runCommand('test -f ' . escapeshellarg($dir . '/pom.xml') . ' && echo yes');
if ($check && trim($check) === 'yes') {
$canBuild = true;
break;
}
}
return view('filament.components.commandocentrum.emulator-status', [
'emulatorOnline' => $this->getEmulatorStatusText() === 'Online',
'jarExists' => $jarExists,
'serviceName' => $serviceName,
'sourceCommit' => $sourceCommit,
'remoteVersion' => $remoteVersion,
'canBuild' => $canBuild,
'jarPath' => $jarPath,
'sourcePath' => $sourcePath,
]);
}
private function renderNitroSettingsView(): View
{
return view('filament.components.commandocentrum.nitro-settings', [
'nitroBranchesHtml' => $this->getNitroBranchesHtml(),
'nitroStatusHtml' => $this->renderNitroStatusView()->render(),
]);
}
private function renderNitroStatusView(): View
{
$clientPath = $this->getSetting('nitro_client_path', '/var/www/nitro-client');
$rendererPath = $this->getSetting('nitro_renderer_path', '/var/www/nitro-renderer');
$webroot = $this->getSetting('nitro_webroot', '/var/www/Client');
$clientGithubUrl = $this->getSetting('nitro_github_url', '');
$rendererGithubUrl = $this->getSetting('nitro_renderer_github_url', 'https://github.com/duckietm/Nitro_Render_V3');
$clientCommit = $this->getGitCommit($clientPath);
$rendererCommit = $this->getGitCommit($rendererPath);
$clientRemote = $clientGithubUrl !== '' && $clientGithubUrl !== '0' ? $this->getRemoteCommit($clientGithubUrl, $this->getSetting('nitro_github_branch', 'main')) : 'N/A';
$rendererRemote = $rendererGithubUrl !== '' && $rendererGithubUrl !== '0' ? $this->getRemoteCommit($rendererGithubUrl, $this->getSetting('nitro_renderer_github_branch', 'main')) : 'N/A';
return view('filament.components.commandocentrum.nitro-status', [
'clientExists' => $this->checkPathExists($clientPath),
'rendererExists' => $this->checkPathExists($rendererPath),
'webrootExists' => $this->checkPathExists($webroot),
'clientCommit' => $clientCommit,
'rendererCommit' => $rendererCommit,
'clientRemote' => $clientRemote,
'rendererRemote' => $rendererRemote,
]);
}
private function renderBackupsListView(): View
{
try {
$backups = app(EmulatorControlAction::class)->getBackups();
} catch (Exception) {
$backups = [];
}
return view('filament.components.commandocentrum.backups-list', [
'backups' => $backups,
]);
}
private function renderClothingStatusView(): View
{
try {
@@ -614,19 +408,6 @@ final class Commandocentrum extends Page implements HasForms
]);
}
private function renderUpdateHistoryView(): View
{
try {
$history = app(UpdateHistoryService::class)->getRecent(10);
} catch (Exception) {
$history = [];
}
return view('filament.components.commandocentrum.update-history', [
'history' => $history,
]);
}
private function getSetting(string $key, string $default = ''): string
{
try {
@@ -878,33 +659,6 @@ final class Commandocentrum extends Page implements HasForms
}
}
public function checkEmulatorUpdates(): void
{
$result = app(EmulatorControlAction::class)->update();
$this->notify($result['success'] ?? false ? __('commandocentrum.success') : __('commandocentrum.error'), $result['message'] ?? $result['error'] ?? __('commandocentrum.unknown'), ($result['success'] ?? false) ? 'success' : 'danger');
Cache::forget('all_updates_check');
$this->fillForm();
}
public function buildEmulator(): void
{
$result = app(EmulatorControlAction::class)->build();
$this->notify($result['success'] ?? false ? __('commandocentrum.success') : __('commandocentrum.error'), $result['message'] ?? $result['error'] ?? __('commandocentrum.unknown'), ($result['success'] ?? false) ? 'success' : 'danger');
}
public function runSqlUpdates(): void
{
$result = app(EmulatorControlAction::class)->runSqlUpdates();
$this->notify($result['success'] ?? false ? __('commandocentrum.success') : __('commandocentrum.error'), $result['message'] ?? __('commandocentrum.unknown'), ($result['success'] ?? false) ? 'success' : 'danger');
}
public function restoreBackup(string $backupName): void
{
$result = app(EmulatorControlAction::class)->restoreBackup($backupName);
$this->notify($result['success'] ? __('commandocentrum.success') : __('commandocentrum.error'), $result['message'] ?? $result['error'] ?? __('commandocentrum.unknown'), $result['success'] ? 'success' : 'danger');
$this->fillForm();
}
public function saveEmulator(): void
{
try {
@@ -924,38 +678,6 @@ final class Commandocentrum extends Page implements HasForms
}
}
public function checkNitroUpdates(): void
{
$clientPath = $this->getSetting('nitro_client_path', '/var/www/nitro-client');
$rendererPath = $this->getSetting('nitro_renderer_path', '/var/www/nitro-renderer');
$branch = $this->getSetting('nitro_github_branch', 'main');
$result = app(NitroControlAction::class)->pullUpdates($clientPath, $rendererPath, $branch);
$this->notify(__('commandocentrum.success'), $result['message'], 'success');
$this->fillForm();
}
public function buildNitro(): void
{
$clientPath = $this->getSetting('nitro_client_path', '/var/www/nitro-client');
$rendererPath = $this->getSetting('nitro_renderer_path', '/var/www/nitro-renderer');
$branch = $this->getSetting('nitro_github_branch', 'main');
$result = app(NitroControlAction::class)->build($clientPath, $rendererPath, $branch);
$this->notify($result['success'] ? __('commandocentrum.success') : __('commandocentrum.warning'), $result['message'], $result['success'] ? 'success' : 'warning');
}
public function generateNitroConfigs(): void
{
$siteUrl = $this->getSetting('nitro_site_url', $this->getCurrentSiteUrl());
$webroot = $this->getSetting('nitro_webroot', '/var/www/Client');
$gamedataPath = $this->getSetting('gamedata_path', '/var/www/Gamedata');
$result = app(NitroControlAction::class)->generateConfigs($siteUrl, $webroot, $gamedataPath);
$this->notify($result['success'] ? __('commandocentrum.success') : __('commandocentrum.error'), $result['message'], $result['success'] ? 'success' : 'danger');
$this->fillForm();
}
public function syncClothing(): void
{
try {
@@ -972,58 +694,6 @@ final class Commandocentrum extends Page implements HasForms
}
}
public function detectAndSavePaths(): void
{
try {
$paths = $this->autoDetectPaths();
$settings = app(SettingsService::class);
$settings->set('nitro_client_path', $paths['nitro_client_path']);
$settings->set('nitro_renderer_path', $paths['nitro_renderer_path']);
$settings->set('nitro_build_path', $paths['nitro_build_path']);
$settings->set('nitro_webroot', $paths['nitro_webroot']);
$settings->set('gamedata_path', $paths['gamedata_path']);
$settings->set('emulator_jar_path', $paths['emulator_jar_path']);
$settings->set('emulator_source_path', $paths['emulator_source_path']);
$this->fillForm();
$this->notify(__('commandocentrum.success'), __('commandocentrum.paths_detected'), 'success');
} catch (Exception $e) {
$this->notify(__('commandocentrum.error'), $e->getMessage(), 'danger');
}
}
public function saveNitro(): void
{
try {
$settings = app(SettingsService::class);
$settings->set('nitro_client_path', $this->data['nitro_client_path'] ?? '/var/www/atomcms/nitro-client');
$settings->set('nitro_renderer_path', $this->data['nitro_renderer_path'] ?? '/var/www/atomcms/nitro-renderer');
$settings->set('nitro_build_path', $this->data['nitro_build_path'] ?? '/var/www/atomcms/nitro-client/dist');
$settings->set('nitro_webroot', $this->data['nitro_webroot'] ?? '/var/www/Client');
$settings->set('gamedata_path', $this->data['gamedata_path'] ?? '/var/www/Gamedata');
$settings->set('nitro_github_url', $this->data['nitro_github_url'] ?? '');
$settings->set('nitro_github_branch', $this->data['nitro_github_branch'] ?? 'main');
$settings->set('nitro_site_url', $this->data['nitro_site_url'] ?? '');
$this->notify(__('commandocentrum.success'), __('commandocentrum.nitro_settings_saved'), 'success');
} catch (Exception $e) {
$this->notify(__('commandocentrum.error'), $e->getMessage(), 'danger');
}
}
public function saveAutoUpdate(): void
{
try {
$settings = app(SettingsService::class);
$settings->set('auto_update_enabled', ($this->data['auto_update_enabled'] ?? false) ? '1' : '0');
$settings->set('auto_update_schedule', $this->data['auto_update_schedule'] ?? '03:00');
$settings->set('auto_update_days', $this->data['auto_update_days'] ?? '0,6');
$this->notify(__('commandocentrum.success'), __('commandocentrum.auto_update_saved'), 'success');
} catch (Exception $e) {
$this->notify(__('commandocentrum.error'), $e->getMessage(), 'danger');
}
}
public function saveAlerts(): void
{
try {
@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace App\Filament\Resources\Miscellaneous\AlertLogResource;
use App\Models\Miscellaneous\AlertLog;
use App\Services\EmulatorUpdateService;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Resources\Resource;
@@ -136,14 +135,12 @@ class AlertLogResource extends Resource
->icon('heroicon-o-trash')
->color('gray')
->action(function () {
$updateService = new EmulatorUpdateService;
$result = $updateService->clearAllLogs();
Cache::flush();
AlertLog::truncate();
Notification::make()
->success()
->title('🗑️ Alle Logs Geleegd!')
->body($result['message'])
->body('Alle logs zijn gewist.')
->send();
})
->requiresConfirmation(),
@@ -1,343 +0,0 @@
<?php
namespace App\Filament\Widgets;
use App\Services\EmulatorUpdateService;
use App\Services\NitroUpdateService;
use App\Services\RconService;
use Filament\Notifications\Notification;
use Filament\Widgets\Widget;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class UpdateCheckerWidget extends Widget
{
#[\Override]
protected string $view = 'filament.widgets.update-checker';
#[\Override]
protected int|string|array $columnSpan = 'full';
#[\Override]
protected static ?int $sort = 0;
public ?string $emulatorVersion = null;
public ?string $latestEmulatorVersion = null;
public bool $emulatorUpdate = false;
public ?string $nitroVersion = null;
public ?string $latestNitroVersion = null;
public bool $nitroUpdate = false;
public int $onlineUsers = 0;
public string $dbSize = '0 MB';
public bool $hasAnyUpdate = false;
public int $sqlApplied = 0;
public int $sqlPending = 0;
public bool $sqlTableExists = false;
public function mount(): void
{
$this->emulatorVersion = setting('emulator_version', '?');
$this->nitroVersion = setting('nitro_client_version', '?');
try {
$this->onlineUsers = (int) DB::connection('mysql')->table('users')->where('online', '1')->count();
$sizeResult = DB::connection('mysql')->select('SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) as db_size FROM information_schema.tables WHERE table_schema = DATABASE()');
$this->dbSize = ($sizeResult[0]->db_size ?? '0') . ' MB';
} catch (\Exception) {
$this->dbSize = '? MB';
}
$this->loadSqlStatus();
$cached = Cache::get('all_updates_check');
if ($cached !== null) {
$this->emulatorUpdate = $cached['emulator'] ?? false;
$this->latestEmulatorVersion = $cached['emulator_version'] ?? null;
$this->nitroUpdate = $cached['nitro'] ?? false;
$this->latestNitroVersion = $cached['nitro_version'] ?? null;
$this->hasAnyUpdate = $this->emulatorUpdate || $this->nitroUpdate;
return;
}
$this->performCheck();
}
private function loadSqlStatus(): void
{
try {
$updateService = new EmulatorUpdateService;
$sqlDiagnosis = $updateService->diagnoseSqlUpdates();
$this->sqlTableExists = $sqlDiagnosis['table_exists'] ?? false;
$this->sqlApplied = $sqlDiagnosis['applied_count'] ?? 0;
$this->sqlPending = $sqlDiagnosis['pending_count'] ?? 0;
} catch (\Exception $e) {
Log::error('[UpdateChecker] SQL status failed: ' . $e->getMessage());
}
}
public function performCheck(): void
{
try {
$updateService = new EmulatorUpdateService;
$check = $updateService->checkForUpdates();
$this->emulatorUpdate = $check['update_available'] ?? false;
$this->latestEmulatorVersion = $check['latest_version'] ?? null;
} catch (\Exception $e) {
Log::error('[UpdateChecker] Emulator check failed: ' . $e->getMessage());
}
try {
$nitroService = new NitroUpdateService;
$nitroCheck = $nitroService->checkForUpdates();
$this->nitroUpdate = $nitroCheck['has_updates'] ?? false;
if ($this->nitroUpdate) {
$parts = [];
if ($nitroCheck['client_update'] ?? false) {
$parts[] = 'Client';
}
if ($nitroCheck['renderer_update'] ?? false) {
$parts[] = 'Renderer';
}
$this->latestNitroVersion = implode(' + ', $parts);
}
} catch (\Exception $e) {
Log::error('[UpdateChecker] Nitro check failed: ' . $e->getMessage());
}
$this->hasAnyUpdate = $this->emulatorUpdate || $this->nitroUpdate;
Cache::put('all_updates_check', [
'emulator' => $this->emulatorUpdate,
'emulator_version' => $this->latestEmulatorVersion,
'nitro' => $this->nitroUpdate,
'nitro_version' => $this->latestNitroVersion,
], now()->addMinutes(15));
}
public function forceCheck(): void
{
try {
Cache::forget('all_updates_check');
$updateService = new EmulatorUpdateService;
$updateService->resetInstalledDate();
$this->performCheck();
if ($this->hasAnyUpdate) {
Notification::make()->success()->title('Updates Gevonden!')->body('Klik op "Alles Updaten" om te installeren')->send();
} else {
Notification::make()->info()->title('Geen Updates')->body('Alles is al up-to-date')->send();
}
} catch (\Exception $e) {
Notification::make()->danger()->title('Fout')->body($e->getMessage())->send();
}
}
public function repairSystem(): void
{
try {
Cache::forget('all_updates_check');
$messages = [];
$errors = [];
try {
$emuService = new EmulatorUpdateService;
$repairResult = $emuService->repairEmulator();
if ($repairResult['success']) {
$messages[] = '🖥️ Emulator: ' . ($repairResult['message'] ?? 'Gerepareerd');
} else {
$errors[] = 'Emulator: ' . ($repairResult['error'] ?? 'Onbekende fout');
}
} catch (\Exception $e) {
$errors[] = 'Emulator: ' . $e->getMessage();
}
try {
$nitroService = new NitroUpdateService;
$repairResult = $nitroService->repair();
if ($repairResult['success']) {
$messages[] = '🎮 Nitro: ' . ($repairResult['message'] ?? 'Gerepareerd');
} else {
$errors[] = 'Nitro: ' . ($repairResult['error'] ?? 'Onbekende fout');
}
} catch (\Exception $e) {
$errors[] = 'Nitro: ' . $e->getMessage();
}
if ($messages !== []) {
Notification::make()->success()->title('Reparatie Voltooid!')->body(implode(' | ', $messages))->send();
}
if ($errors !== []) {
Notification::make()->danger()->title('Reparatie Fout')->body(implode(' | ', $errors))->send();
}
Cache::forget('all_updates_check');
$this->mount();
} catch (\Exception $e) {
Notification::make()->danger()->title('Fout')->body($e->getMessage())->send();
}
}
public function diagnoseSystem(): void
{
try {
$emuService = new EmulatorUpdateService;
$nitroService = new NitroUpdateService;
$emuDiagnosis = $emuService->diagnose();
$nitroDiagnosis = $nitroService->diagnose();
$issues = array_merge(
$emuDiagnosis['issues'] ?? [],
$nitroDiagnosis['issues'] ?? [],
);
$recommendations = array_merge(
$emuDiagnosis['recommendations'] ?? [],
$nitroDiagnosis['recommendations'] ?? [],
);
if ($issues === []) {
Notification::make()->info()->title('Diagnose')->body('Geen problemen gevonden')->send();
} else {
$body = 'Problemen: ' . implode(', ', $issues);
if ($recommendations !== []) {
$body .= "\n\nAanbevelingen: " . implode(', ', $recommendations);
}
Notification::make()->warning()->title('Diagnose Resultaat')->body($body)->send();
}
} catch (\Exception $e) {
Notification::make()->danger()->title('Fout')->body($e->getMessage())->send();
}
}
public function updateAll(): void
{
try {
Cache::forget('all_updates_check');
Cache::forget('website_settings');
$messages = [];
$errors = [];
$updateService = new EmulatorUpdateService;
try {
$result = $updateService->updateEmulator();
if ($result['success']) {
$messages[] = '🖥️ ' . ($result['message'] ?? 'Emulator geüpdatet');
} else {
$error = $result['error'] ?? '';
if (str_contains($error, 'al up-to-date')) {
$messages[] = '🖥️ Emulator al up-to-date';
} else {
$errors[] = 'Emulator: ' . $error;
}
}
} catch (\Exception $e) {
$errors[] = 'Emulator: ' . $e->getMessage();
}
try {
$nitroService = new NitroUpdateService;
$nitroCheck = $nitroService->checkForUpdates();
if ($nitroCheck['has_updates'] ?? false) {
$result = $nitroService->updateNitro();
if ($result['success']) {
$parts = [];
if ($result['renderer_updated'] ?? false) {
$parts[] = 'Renderer';
}
if ($result['client_updated'] ?? false) {
$parts[] = 'Client';
}
if ($result['built'] ?? false) {
$parts[] = 'Build';
}
if ($result['deployed'] ?? false) {
$parts[] = 'Deploy';
}
if ($parts !== []) {
$messages[] = '🎮 Nitro: ' . implode(', ', $parts);
}
} elseif (! empty($result['errors'] ?? [])) {
$errors = array_merge($errors, $result['errors']);
}
} else {
$messages[] = '🎮 Nitro al up-to-date';
}
} catch (\Exception $e) {
$errors[] = 'Nitro: ' . $e->getMessage();
}
try {
$sqlResult = $updateService->runSqlUpdates();
if ($sqlResult['sql_updated'] ?? false) {
$count = count($sqlResult['files_run'] ?? []);
if ($count > 0) {
$messages[] = "📊 {$count} SQL updates";
}
}
} catch (\Exception $e) {
$errors[] = 'SQL: ' . $e->getMessage();
}
try {
$updateService->restartEmulator();
$messages[] = '🔄 Emulator herstart';
} catch (\Exception $e) {
Log::error('[UpdateChecker] Restart failed: ' . $e->getMessage());
}
try {
$rcon = new RconService;
$rcon->sendCommand('updatecatalog');
$rcon->sendCommand('updatewordfilter');
$messages[] = '📚 Catalogus + filter vernieuwd';
} catch (\Exception $e) {
Log::error('[UpdateChecker] RCON failed: ' . $e->getMessage());
}
if ($messages !== []) {
Notification::make()->success()->title('Updates Voltooid!')->body(implode(' | ', $messages))->send();
}
if ($errors !== []) {
Notification::make()->danger()->title('Sommige Updates Mislukt')->body(implode(' | ', $errors))->send();
}
if ($messages === [] && $errors === []) {
Notification::make()->info()->title('Geen Updates')->body('Alles was al up-to-date')->send();
}
Cache::forget('all_updates_check');
$this->mount();
} catch (\Exception $e) {
Notification::make()->danger()->title('Fout')->body($e->getMessage())->send();
}
}
#[\Override]
public static function canView(): bool
{
return true;
}
}
@@ -1,272 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Services\Emulator;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Process;
class EmulatorBuildService
{
use EmulatorConfiguration;
public function __construct()
{
$this->loadConfiguration();
}
public function buildFromSource(bool $force = false): array
{
$repo = $this->sourceRepo ?: $this->githubRepo;
$branch = $this->sourceBranch ?: $this->githubBranch ?: 'main';
if (! $repo) {
return ['success' => false, 'error' => 'Geen source repo geconfigureerd'];
}
$sourcePath = $this->emulatorSourcePath;
$serviceName = $this->emulatorService;
Log::info('[EmulatorBuild] Starting source build', [
'repo' => $repo,
'branch' => $branch,
'path' => $sourcePath,
]);
$this->ensureJavaInstalled();
Process::timeout(10)->run('mkdir -p ' . escapeshellarg(dirname((string) $sourcePath)));
Process::timeout(10)->run('mkdir -p ' . escapeshellarg((string) $this->jarPath));
Process::timeout(10)->run('chown -R www-data:www-data ' . escapeshellarg(dirname((string) $sourcePath)));
$maxRetries = 2;
$lastError = '';
for ($retry = 0; $retry <= $maxRetries; $retry++) {
Process::timeout(10)->run('chown -R www-data:www-data ' . escapeshellarg(dirname((string) $sourcePath)) . ' 2>/dev/null || true');
Process::timeout(10)->run('chown -R www-data:www-data ' . escapeshellarg((string) $sourcePath) . ' 2>/dev/null || true');
if ($retry > 0) {
Log::info('[EmulatorBuild] Retry attempt', ['attempt' => $retry]);
Process::timeout(30)->run('rm -rf ' . escapeshellarg((string) $sourcePath));
}
try {
$existsCheck = Process::timeout(5)->run('[ -d ' . escapeshellarg((string) $sourcePath) . " ] && echo 'exists'");
$sourceExists = $existsCheck->successful() && trim($existsCheck->output()) === 'exists';
$gitCheck = Process::timeout(5)->run('[ -d ' . escapeshellarg((string) $sourcePath) . "/.git ] && echo 'git'");
$isGitRepo = $gitCheck->successful() && trim($gitCheck->output()) === 'git';
if ($sourceExists && $isGitRepo) {
Log::info('[EmulatorBuild] Pulling latest changes');
$commands = [
'cd ' . escapeshellarg((string) $sourcePath) . ' && git fetch origin',
'cd ' . escapeshellarg((string) $sourcePath) . ' && git checkout ' . escapeshellarg($branch),
'cd ' . escapeshellarg((string) $sourcePath) . ' && git pull origin ' . escapeshellarg($branch),
];
} else {
Log::info('[EmulatorBuild] Cloning repository');
$commands = [
'sudo rm -rf ' . escapeshellarg((string) $sourcePath) . ' 2>/dev/null || rm -rf ' . escapeshellarg((string) $sourcePath),
'mkdir -p ' . escapeshellarg(dirname((string) $sourcePath)),
'git clone --branch ' . escapeshellarg($branch) . ' --depth 1 https://github.com/' . escapeshellarg($repo) . '.git ' . escapeshellarg((string) $sourcePath),
'chown -R www-data:www-data ' . escapeshellarg((string) $sourcePath),
];
}
$command = implode(' && ', $commands);
$result = Process::timeout(300)->run($command);
if ($result->failed()) {
$lastError = 'Git clone/pull failed: ' . substr($result->errorOutput(), 0, 300);
Log::warning('[EmulatorBuild] Git operation failed', ['error' => $lastError, 'attempt' => $retry]);
continue;
}
$buildCommands = $this->getBuildCommands($sourcePath);
Log::info('[EmulatorBuild] Running build', ['command' => $buildCommands]);
$buildResult = Process::timeout(600)->run('cd ' . escapeshellarg((string) $sourcePath) . ' && ' . $buildCommands);
$hasSignalError = str_contains($buildResult->errorOutput(), 'signal') || str_contains($buildResult->output(), 'signal');
if ($hasSignalError) {
Log::warning('[EmulatorBuild] Build process received signal, checking if JAR was built anyway');
}
$jarPath = $this->findBuiltJar($sourcePath);
if ($jarPath) {
Log::info('[EmulatorBuild] JAR found despite build status', ['jar' => $jarPath]);
} elseif ($buildResult->failed() && ! $hasSignalError) {
$lastError = 'Build failed: ' . substr($buildResult->errorOutput(), 0, 500);
Log::warning('[EmulatorBuild] Build failed', ['error' => $lastError, 'attempt' => $retry]);
if ($retry < $maxRetries) {
$cleanCommands = [
'cd ' . escapeshellarg((string) $sourcePath) . ' && mvn clean 2>/dev/null || ./gradlew clean 2>/dev/null || true',
];
Process::timeout(60)->run(implode(' && ', $cleanCommands));
continue;
}
continue;
}
if (! $jarPath) {
$lastError = 'Build succeeded but JAR not found. Check build output.';
Log::warning('[EmulatorBuild] JAR not found', ['attempt' => $retry]);
continue;
}
return $this->deployJar($jarPath, $serviceName);
} catch (\Exception $e) {
$lastError = $e->getMessage();
Log::error('[EmulatorBuild] Source build exception', ['error' => $lastError, 'attempt' => $retry]);
}
}
return [
'success' => false,
'error' => 'Build mislukt na ' . ($maxRetries + 1) . ' pogingen. Laatste fout: ' . $lastError,
];
}
public function getBuildCommands(string $sourcePath): string
{
$pomPath = $sourcePath;
$pomCheck = Process::timeout(5)->run("[ -f {$pomPath}/pom.xml ] && echo 'pom'");
if (! $pomCheck->successful() || trim($pomCheck->output()) !== 'pom') {
$pomPath = $sourcePath . '/Emulator';
$pomCheck = Process::timeout(5)->run("[ -f {$pomPath}/pom.xml ] && echo 'pom'");
}
$gradlewPath = $sourcePath . '/gradlew';
$gradlewCheck = Process::timeout(5)->run("[ -f {$gradlewPath} ] && echo 'gradlew'");
$gradlePath = $sourcePath . '/build.gradle';
$gradleCheck = Process::timeout(5)->run("[ -f {$gradlePath} ] && echo 'gradle'");
if ($pomCheck->successful() && trim($pomCheck->output()) === 'pom') {
return "cd {$pomPath} && mvn clean package -DskipTests 2>&1";
}
if ($gradlewCheck->successful() && trim($gradlewCheck->output()) === 'gradlew') {
return "cd {$sourcePath} && chmod +x gradlew && ./gradlew clean build -x test 2>&1";
}
if ($gradleCheck->successful() && trim($gradleCheck->output()) === 'gradle') {
return "cd {$sourcePath} && gradle clean build -x test 2>&1";
}
return "cd {$sourcePath} && ls -la";
}
public function findBuiltJar(string $sourcePath): ?string
{
$patterns = [
$sourcePath . '/target/*.jar',
$sourcePath . '/build/libs/*.jar',
$sourcePath . '/*/*.jar',
$sourcePath . '/*.jar',
$sourcePath . '/Emulator/target/*.jar',
$sourcePath . '/Emulator/build/libs/*.jar',
$sourcePath . '/Emulator/*/*.jar',
];
foreach ($patterns as $pattern) {
$result = Process::timeout(10)->run('ls -t ' . $pattern . ' 2>/dev/null | head -1');
if ($result->successful()) {
$jarPath = trim($result->output());
if ($jarPath !== '' && $jarPath !== '0' && str_contains($jarPath, '.jar')) {
return $jarPath;
}
}
}
return null;
}
private function deployJar(string $jarPath, string $serviceName): array
{
$jarName = basename($jarPath);
$version = $this->extractVersionFromFilename($jarName);
if ($version === '' || $version === '0') {
$version = date('Y.m.d');
}
$deployCommands = [
'mkdir -p ' . escapeshellarg((string) $this->jarPath),
'chown -R www-data:www-data ' . escapeshellarg((string) $this->jarPath),
'if ls ' . escapeshellarg((string) $this->jarPath) . '/*.jar 1>/dev/null 2>&1; then mkdir -p ' . escapeshellarg((string) $this->jarPath) . '/backup && mv ' . escapeshellarg((string) $this->jarPath) . '/*.jar ' . escapeshellarg((string) $this->jarPath) . '/backup/; fi',
'cp -f ' . escapeshellarg($jarPath) . ' ' . escapeshellarg((string) $this->jarPath) . '/' . escapeshellarg($jarName),
'chown www-data:www-data ' . escapeshellarg((string) $this->jarPath) . '/' . escapeshellarg($jarName),
'chmod 755 ' . escapeshellarg((string) $this->jarPath) . '/' . escapeshellarg($jarName),
'ls -la ' . escapeshellarg((string) $this->jarPath) . '/',
'systemctl restart ' . escapeshellarg((string) $serviceName) . ' 2>&1 || service ' . escapeshellarg((string) $serviceName) . ' restart 2>&1 || true',
];
$deployCommand = implode(' && ', $deployCommands);
Log::info('[EmulatorBuild] Deploying jar', [
'source' => $jarPath,
'destination' => "{$this->jarPath}/{$jarName}",
]);
$deployResult = Process::timeout(60)->run($deployCommand);
if (! $deployResult->successful()) {
return [
'success' => false,
'error' => 'Deploy failed: ' . substr($deployResult->errorOutput(), 0, 300),
];
}
$sourceService = new EmulatorSourceService;
$sourceInfo = $sourceService->checkForUpdates();
$installedDate = $sourceInfo['latest_timestamp'] ?? time();
$this->settings->set('emulator_version', $version);
$this->settings->set('emulator_jar_installed_date', (string) $installedDate);
$this->settings->set('emulator_source_commit', $sourceInfo['latest_sha'] ?? 'unknown');
$this->settings->set('emulator_source_date', (string) $installedDate);
$currentBranch = $this->sourceBranch ?: $this->githubBranch ?: 'main';
$this->settings->set('emulator_installed_branch', $currentBranch);
$sqlService = new EmulatorSqlService;
$sqlService->runUpdates();
Log::info('[EmulatorBuild] Source build successful');
return [
'success' => true,
'version' => $version,
'jar' => $jarName,
'built' => true,
'message' => "✅ Emulator vanaf source gebouwd!\n📦 {$jarName}\n🔄 Service herstart",
];
}
private function ensureJavaInstalled(): void
{
$javaCheck = Process::timeout(5)->run('java -version 2>&1');
if (! $javaCheck->successful()) {
Log::warning('[EmulatorBuild] Java not found, attempting to install');
Process::timeout(180)->run('apt-get update && apt-get install -y default-jdk 2>&1');
}
$mavenCheck = Process::timeout(5)->run('which mvn');
if (! $mavenCheck->successful()) {
Log::warning('[EmulatorBuild] Maven not found, attempting to install');
Process::timeout(180)->run('apt-get install -y maven 2>&1');
}
}
}
@@ -1,509 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Services\Emulator;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Process;
use Illuminate\Support\Str;
class EmulatorJarService
{
use EmulatorConfiguration;
public function __construct()
{
$this->loadConfiguration();
}
public function isConfigured(): bool
{
return ! in_array($this->githubUrl, [null, '', '0'], true) || ! in_array($this->jarDirectUrl, [null, '', '0'], true);
}
public function checkForUpdates(): array
{
if (! $this->isConfigured()) {
return [
'update_available' => false,
'error' => 'Configureer een GitHub URL of directe .jar URL',
];
}
$sourceService = new EmulatorSourceService;
$sourceInfo = $sourceService->checkForUpdates();
$hasSourceUpdates = $sourceInfo && $sourceInfo['has_update'];
if (! in_array($this->jarDirectUrl, [null, '', '0'], true)) {
return $this->checkDirectUrlUpdates($sourceInfo, $hasSourceUpdates);
}
return $this->checkGitHubFolderUpdates($sourceInfo, $hasSourceUpdates);
}
public function performUpdate(array $check): array
{
$jarUrl = $check['jar_url'];
$jarName = $check['jar_name'];
$version = $check['latest_version'];
$serviceName = $this->emulatorService;
$tempDir = '/tmp/emulator-update-' . Str::random(8);
$tempJar = $tempDir . '/' . $jarName;
$updateScript = $this->buildUpdateScript($jarUrl, $jarName, $tempDir, $tempJar, $serviceName);
$scriptPath = '/tmp/emulator_update_' . uniqid() . '.sh';
file_put_contents($scriptPath, $updateScript);
chmod($scriptPath, 0755);
Log::info('[EmulatorJar] Starting update', [
'version' => $version,
'jar' => $jarName,
'url' => $jarUrl,
]);
try {
$result = Process::timeout(600)->run('bash ' . $scriptPath . ' 2>&1');
@unlink($scriptPath);
if ($result->exitCode() !== 0) {
Log::error('[EmulatorJar] Update failed', [
'output' => $result->output(),
'error' => $result->errorOutput(),
]);
return [
'success' => false,
'error' => 'Update mislukt: ' . substr($result->output(), 0, 300),
];
}
$this->storeUpdateInfo($version, $check);
Log::info('[EmulatorJar] Update successful');
return [
'success' => true,
'version' => $version,
'jar' => $jarName,
'message' => "✅ Emulator geüpdatet naar v{$version}!\n📦 {$jarName}\n🔄 Service herstart",
];
} catch (\Exception $e) {
Log::error('[EmulatorJar] Exception', ['error' => $e->getMessage()]);
return [
'success' => false,
'error' => $e->getMessage(),
];
}
}
public function findLatestJar(): ?array
{
if (! $this->githubRepo) {
return null;
}
$branch = $this->githubBranch ?: 'main';
$commonNames = ['arcturus.jar', 'Arcturus.jar', 'emulator.jar', 'habbo.jar', 'hotel.jar'];
foreach ($commonNames as $name) {
try {
$apiUrl = "https://api.github.com/repos/{$this->githubRepo}/contents/Latest_Compiled_Version/{$name}?ref={$branch}";
$response = Http::timeout(10)
->withHeaders([
'Accept' => 'application/vnd.github.v3+json',
'User-Agent' => 'AtomCMS-Emulator-Updater',
])
->get($apiUrl);
if (! $response->successful()) {
continue;
}
$data = json_decode($response->body(), true);
if (! isset($data['sha']) || ! isset($data['download_url'])) {
continue;
}
$commitDate = null;
$commitSha = $data['sha'];
try {
$commitsResponse = Http::timeout(10)
->withHeaders([
'Accept' => 'application/vnd.github.v3+json',
'User-Agent' => 'AtomCMS-Emulator-Updater',
])
->get("https://api.github.com/repos/{$this->githubRepo}/commits", [
'path' => "Latest_Compiled_Version/{$name}",
'sha' => $branch,
'per_page' => 1,
]);
if ($commitsResponse->successful()) {
$commits = $commitsResponse->json();
if (! empty($commits) && isset($commits[0]['commit']['committer']['date'])) {
$commitDate = strtotime($commits[0]['commit']['committer']['date']);
$commitSha = $commits[0]['sha'] ?? $data['sha'];
}
}
} catch (\Exception) {
Log::debug('[EmulatorJar] Could not fetch commit date for ' . $name);
}
$installedDate = $this->settings->getOrDefault('emulator_jar_installed_date', null);
$installedJarCommit = $this->settings->getOrDefault('emulator_jar_commit', null);
$isUpdate = false;
if ($installedJarCommit !== null) {
$isUpdate = $installedJarCommit !== $commitSha;
} elseif ($installedDate !== null && $commitDate !== null) {
$isUpdate = (int) $installedDate < $commitDate;
} elseif ($installedDate === null && $commitDate !== null) {
$isUpdate = true;
}
$version = $this->extractVersionFromFilename($name);
if ($version === '' || $version === '0') {
$version = $commitDate ? date('Y.m.d', $commitDate) : date('Y.m.d');
}
return [
'name' => $name,
'url' => $data['download_url'],
'version' => $version,
'commit' => $commitSha,
'commit_date' => $commitDate,
'is_update' => $isUpdate,
'installed_date' => $installedDate,
];
} catch (\Exception $e) {
Log::warning('[EmulatorJar] Error checking JAR file ' . $name, ['error' => $e->getMessage()]);
}
}
return null;
}
private function checkDirectUrlUpdates(?array $sourceInfo, bool $hasSourceUpdates): array
{
$jarInfo = $this->validateDirectUrl($this->jarDirectUrl);
if ($jarInfo) {
if (! empty($jarInfo['version'])) {
$currentVersion = $this->settings->getOrDefault('emulator_version', '0.0.0');
if ($jarInfo['version'] !== $currentVersion) {
$this->settings->set('emulator_version', $jarInfo['version']);
}
}
$hasJarUpdates = $jarInfo['is_update'] ?? false;
if ($hasSourceUpdates && ! $hasJarUpdates) {
return [
'update_available' => true,
'current_version' => $this->settings->getOrDefault('emulator_version', '0.0.0'),
'latest_version' => $sourceInfo['latest_timestamp'] ? date('Y.m.d', $sourceInfo['latest_timestamp']) : $jarInfo['version'],
'release_name' => 'Source Update',
'jar_url' => null,
'jar_name' => null,
'jar_size' => 'Onbekend',
'type' => 'source_build',
'source_info' => $sourceInfo,
'message' => 'Nieuwe commits beschikbaar - build vanaf source nodig',
];
}
return [
'update_available' => $hasJarUpdates,
'current_version' => $this->settings->getOrDefault('emulator_version', '0.0.0'),
'latest_version' => $jarInfo['version'],
'release_name' => $hasSourceUpdates ? 'Source Update' : 'Direct URL',
'jar_url' => $this->jarDirectUrl,
'jar_name' => $jarInfo['name'],
'jar_size' => 'Onbekend',
'type' => $hasSourceUpdates ? 'source_build' : 'direct_url',
'commit' => $jarInfo['commit_sha'] ?? null,
'source_info' => $sourceInfo,
'has_source_updates' => $hasSourceUpdates,
];
}
if ($hasSourceUpdates) {
return [
'update_available' => true,
'current_version' => $this->settings->getOrDefault('emulator_version', '0.0.0'),
'latest_version' => $sourceInfo['latest_timestamp'] ? date('Y.m.d', $sourceInfo['latest_timestamp']) : 'Onbekend',
'release_name' => 'Source Update',
'jar_url' => null,
'jar_name' => null,
'jar_size' => 'Onbekend',
'type' => 'source_build',
'source_info' => $sourceInfo,
'message' => 'Nieuwe commits beschikbaar - build vanaf source nodig',
];
}
return [
'update_available' => false,
'current_version' => $this->settings->getOrDefault('emulator_version', '0.0.0'),
'error' => 'Directe .jar URL is niet bereikbaar',
];
}
private function checkGitHubFolderUpdates(?array $sourceInfo, bool $hasSourceUpdates): array
{
$jarInfo = $this->findLatestJar();
if (! $jarInfo) {
if ($hasSourceUpdates) {
return [
'update_available' => true,
'current_version' => $this->settings->getOrDefault('emulator_version', '0.0.0'),
'latest_version' => $sourceInfo['latest_timestamp'] ? date('Y.m.d', $sourceInfo['latest_timestamp']) : 'Onbekend',
'release_name' => 'Source Update',
'jar_url' => null,
'jar_name' => null,
'jar_size' => 'Onbekend',
'type' => 'source_build',
'source_info' => $sourceInfo,
'message' => 'Nieuwe commits beschikbaar - build vanaf source nodig',
];
}
return [
'update_available' => false,
'current_version' => $this->settings->getOrDefault('emulator_version', '0.0.0'),
'latest_version' => 'Onbekend',
'error' => 'Kon geen .jar bestand vinden',
'type' => 'not_found',
'source_available' => $sourceInfo !== null,
];
}
$version = $jarInfo['version'];
$hasJarUpdates = $jarInfo['is_update'] ?? false;
if ($hasSourceUpdates && ! $hasJarUpdates) {
return [
'update_available' => true,
'current_version' => $this->settings->getOrDefault('emulator_version', '0.0.0'),
'latest_version' => $sourceInfo['latest_timestamp'] ? date('Y.m.d', $sourceInfo['latest_timestamp']) : $version,
'release_name' => 'Source Update',
'jar_url' => null,
'jar_name' => null,
'jar_size' => 'Onbekend',
'type' => 'source_build',
'source_info' => $sourceInfo,
'message' => 'Nieuwe commits beschikbaar - build vanaf source nodig',
];
}
return [
'update_available' => $hasJarUpdates,
'current_version' => $this->settings->getOrDefault('emulator_version', '0.0.0'),
'latest_version' => $hasSourceUpdates ? ($sourceInfo['latest_timestamp'] ? date('Y.m.d', $sourceInfo['latest_timestamp']) : $version) : $version,
'release_name' => $hasSourceUpdates ? 'Source Update' : 'Latest from GitHub',
'jar_url' => $jarInfo['url'],
'jar_name' => $jarInfo['name'],
'jar_size' => 'Onbekend',
'type' => $hasSourceUpdates ? 'source_build' : 'github_folder',
'commit' => $jarInfo['commit'] ?? null,
'commit_date' => $jarInfo['commit_date'] ?? null,
'source_info' => $sourceInfo,
'has_source_updates' => $hasSourceUpdates,
];
}
private function validateDirectUrl(string $url): ?array
{
if ($url === '' || $url === '0' || ! str_ends_with(strtolower($url), '.jar')) {
return null;
}
try {
$jarName = basename(parse_url($url, PHP_URL_PATH));
$version = $this->extractVersionFromFilename($jarName);
$storedVersion = $this->settings->getOrDefault('emulator_version', '0.0.0');
$lastModified = null;
$commitSha = null;
$gitHubInfoAvailable = false;
if (preg_match('/github\.com\/([^\/]+)\/([^\/]+)\/raw\/refs\/heads\/([^\/]+)\/(.+)/', $url, $matches)) {
$owner = $matches[1];
$repo = $matches[2];
$branch = $matches[3];
$path = $matches[4];
try {
$apiResponse = Http::timeout(10)
->withHeaders([
'Accept' => 'application/vnd.github.v3+json',
'User-Agent' => 'AtomCMS-Emulator-Updater',
])
->get("https://api.github.com/repos/{$owner}/{$repo}/contents/{$path}", [
'ref' => $branch,
]);
if ($apiResponse->successful()) {
$data = $apiResponse->json();
if (isset($data['sha']) && ! isset($data['message'])) {
$gitHubInfoAvailable = true;
$commitSha = $data['sha'];
if (isset($data['commit']['committer']['date'])) {
$lastModified = strtotime($data['commit']['committer']['date']);
}
}
}
} catch (\Exception) {
Log::debug('[EmulatorJar] Could not fetch GitHub commit info for direct URL');
}
}
if ($lastModified === null) {
$response = Http::timeout(10)->head($url);
if ($response->successful()) {
$modifiedSince = $response->header('Last-Modified');
if ($modifiedSince) {
$lastModified = strtotime($modifiedSince);
if ($lastModified === false) {
$lastModified = null;
}
}
}
}
$isUpdate = false;
$installedDate = $this->settings->getOrDefault('emulator_jar_installed_date', null);
$storedData = $this->settings->getOrDefault('emulator_direct_url_info_' . md5($url));
if ($storedData !== null && is_string($storedData)) {
$storedDataArray = json_decode($storedData, true);
if (is_array($storedDataArray)) {
if ($gitHubInfoAvailable && $commitSha !== null && isset($storedDataArray['commit_sha'])) {
$isUpdate = $commitSha !== $storedDataArray['commit_sha'];
} elseif ($lastModified !== null && $installedDate !== null) {
$isUpdate = (int) $installedDate < $lastModified;
} elseif ($lastModified !== null && isset($storedDataArray['last_modified'])) {
$isUpdate = $lastModified > $storedDataArray['last_modified'];
} elseif (! in_array($version, ['', '0', $storedVersion], true)) {
$isUpdate = version_compare($version, $storedVersion) > 0;
}
}
} else {
$isUpdate = true;
}
$infoToStore = [
'last_checked' => time(),
'version' => $version,
];
if ($lastModified) {
$infoToStore['last_modified'] = $lastModified;
}
if ($commitSha) {
$infoToStore['commit_sha'] = $commitSha;
}
$this->settings->set('emulator_direct_url_info_' . md5($url), json_encode($infoToStore));
return [
'name' => $jarName,
'version' => $version,
'last_modified' => $lastModified,
'commit_sha' => $commitSha,
'is_update' => $isUpdate,
'gitHub_rate_limited' => ! $gitHubInfoAvailable && preg_match('/github\.com/', $url),
];
} catch (\Exception $e) {
Log::warning('[EmulatorJar] Direct URL not reachable', ['error' => $e->getMessage()]);
}
return null;
}
private function buildUpdateScript(string $jarUrl, string $jarName, string $tempDir, string $tempJar, string $serviceName): string
{
return <<<BASH
#!/bin/bash
set -e
JAR_URL='{$jarUrl}'
JAR_NAME='{$jarName}'
JAR_PATH='{$this->jarPath}'
SERVICE='{$serviceName}'
TEMP_DIR='{$tempDir}'
TEMP_JAR='{$tempJar}'
mkdir -p "\$TEMP_DIR" "\$JAR_PATH"
if ls "\$JAR_PATH"/*.jar 1>/dev/null 2>&1; then
mkdir -p "\$JAR_PATH/backup"
mv "\$JAR_PATH"/*.jar "\$JAR_PATH/backup/" 2>/dev/null || true
fi
download_success=false
for attempt in 1 2 3; do
if curl -L --max-time 300 --retry 3 --retry-delay 5 -o "\$TEMP_JAR" "\$JAR_URL" 2>&1; then
FILE_TYPE=\$(file -b "\$TEMP_JAR" 2>/dev/null)
JAR_SIZE=\$(stat -c%s "\$TEMP_JAR" 2>/dev/null || echo 0)
if echo "\$FILE_TYPE" | grep -qi "zip\|jar\|archive" && [ "\$JAR_SIZE" -gt 1000 ]; then
download_success=true
break
else
rm -f "\$TEMP_JAR" 2>/dev/null || true
sleep 3
fi
else
sleep 5
fi
done
if [ "\$download_success" = false ]; then
if ls "\$JAR_PATH/backup"/*.jar 1>/dev/null 2>&1; then
mv "\$JAR_PATH/backup"/*.jar "\$JAR_PATH/" 2>/dev/null || true
fi
rm -rf "\$TEMP_DIR"
exit 1
fi
mv "\$TEMP_JAR" "\$JAR_PATH/"
chown -R www-data:www-data "\$JAR_PATH"
chmod 755 "\$JAR_PATH/\$JAR_NAME"
systemctl restart "\$SERVICE" 2>&1 || service "\$SERVICE" restart 2>&1 || true
rm -rf "\$TEMP_DIR" 2>/dev/null || true
BASH;
}
private function storeUpdateInfo(string $version, array $check): void
{
setting('emulator_version', $version);
$commitDate = $check['commit_date'] ?? time();
$this->settings->set('emulator_jar_installed_date', (string) $commitDate);
$this->settings->set('emulator_jar_commit', $check['commit'] ?? null);
$sourceSha = $check['source_info']['latest_sha'] ?? $check['commit'] ?? null;
$sourceDate = $check['source_info']['latest_timestamp'] ?? ($check['commit_date'] ?? time());
if ($sourceSha) {
$this->settings->set('emulator_source_commit', $sourceSha);
}
if ($sourceDate) {
$this->settings->set('emulator_source_date', (string) $sourceDate);
}
$currentBranch = $this->sourceBranch ?: $this->githubBranch ?: 'main';
$this->settings->set('emulator_installed_branch', $currentBranch);
}
}
@@ -1,273 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Services\Emulator;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Process;
use Illuminate\Support\Str;
class EmulatorSourceService
{
use EmulatorConfiguration;
public function __construct()
{
$this->loadConfiguration();
}
public function checkForUpdates(): ?array
{
$repo = $this->sourceRepo ?: $this->githubRepo;
$branch = $this->sourceBranch ?: $this->githubBranch ?: 'main';
if (! $repo) {
return null;
}
$localCheck = $this->checkLocalSourceUpdates();
if ($localCheck !== null) {
return $localCheck;
}
return $this->checkRemoteSourceUpdates($repo, $branch);
}
public function isSourceBuildAvailable(): bool
{
$hasRepo = ! in_array($this->sourceRepo, [null, '', '0'], true) || ! in_array($this->githubRepo, [null, '', '0'], true);
$hasPath = ! in_array($this->emulatorSourcePath, [null, '', '0'], true);
if (! $hasRepo || ! $hasPath) {
return false;
}
try {
$result = Process::timeout(5)->run("[ -d {$this->emulatorSourcePath} ] && echo 'exists' || echo 'not_exists'");
return trim($result->output()) === 'exists';
} catch (\Exception) {
return false;
}
}
private function checkLocalSourceUpdates(): ?array
{
$sourcePath = $this->emulatorSourcePath;
$existsCheck = Process::timeout(5)->run("[ -d {$sourcePath} ] && echo 'exists'");
if (! $existsCheck->successful() || trim($existsCheck->output()) !== 'exists') {
return $this->checkSourceByCloning();
}
try {
$gitCheck = Process::timeout(5)->run("cd {$sourcePath} && git rev-parse --is-inside-work-tree 2>/dev/null");
if (! $gitCheck->successful()) {
return $this->checkSourceByCloning();
}
$currentCommitResult = Process::timeout(5)->run("cd {$sourcePath} && git rev-parse HEAD");
if (! $currentCommitResult->successful()) {
return null;
}
$currentSha = trim($currentCommitResult->output());
$fetchResult = Process::timeout(30)->run("cd {$sourcePath} && git fetch origin 2>&1");
if ($fetchResult->failed()) {
Log::debug('[EmulatorSource] Git fetch failed, trying local check only');
}
$branch = $this->sourceBranch ?: $this->githubBranch ?: 'main';
$latestResult = Process::timeout(5)->run("cd {$sourcePath} && git rev-parse origin/{$branch} 2>/dev/null || git rev-parse HEAD");
if (! $latestResult->successful()) {
return null;
}
$latestSha = trim($latestResult->output());
$dateResult = Process::timeout(5)->run("cd {$sourcePath} && git log -1 --format='%ci' {$latestSha}");
$latestDate = null;
$latestTimestamp = time();
if ($dateResult->successful()) {
$latestDate = trim($dateResult->output(), "'");
if ($latestDate !== '' && $latestDate !== '0') {
$latestTimestamp = strtotime($latestDate);
}
}
$this->persistSourceCommitInfo($latestSha, $latestTimestamp);
$msgResult = Process::timeout(5)->run("cd {$sourcePath} && git log -1 --format='%s' {$latestSha}");
$latestMessage = $msgResult->successful() ? trim($msgResult->output()) : '';
$authorResult = Process::timeout(5)->run("cd {$sourcePath} && git log -1 --format='%an' {$latestSha}");
$latestAuthor = $authorResult->successful() ? trim($authorResult->output()) : '';
$storedSha = $this->settings->getOrDefault('emulator_source_commit', null);
$storedDate = $this->settings->getOrDefault('emulator_source_date', null);
$isUpdate = $storedSha !== null && $storedSha !== $latestSha;
if ($storedSha === null) {
$isUpdate = true;
}
return [
'has_update' => $isUpdate,
'latest_sha' => $latestSha,
'latest_date' => $latestDate,
'latest_timestamp' => $latestTimestamp,
'latest_message' => $latestMessage,
'latest_author' => $latestAuthor,
'stored_sha' => $storedSha,
'stored_date' => $storedDate,
'source' => 'local',
];
} catch (\Exception $e) {
Log::debug('[EmulatorSource] Local source check failed: ' . $e->getMessage());
return null;
}
}
private function checkSourceByCloning(): ?array
{
$repo = $this->sourceRepo ?: $this->githubRepo;
$branch = $this->sourceBranch ?: $this->githubBranch ?: 'main';
if (! $repo) {
return null;
}
$repo = preg_replace('#/tree/[^/]+/.*$#', '', $repo);
$repo = str_replace(['https://github.com/', 'http://github.com/'], '', $repo);
$repo = rtrim($repo, '/');
try {
$tempDir = '/tmp/emulator-source-check-' . Str::random(8);
$cloneResult = Process::timeout(120)->run(
"git clone --branch {$branch} --depth 1 https://github.com/{$repo}.git {$tempDir} 2>&1",
);
if ($cloneResult->failed()) {
return null;
}
$shaResult = Process::timeout(5)->run("cd {$tempDir} && git rev-parse HEAD");
$latestSha = $shaResult->successful() ? trim($shaResult->output()) : '';
$dateResult = Process::timeout(5)->run("cd {$tempDir} && git log -1 --format='%ci'");
$latestDate = null;
$latestTimestamp = time();
if ($dateResult->successful()) {
$latestDate = trim($dateResult->output());
if ($latestDate !== '' && $latestDate !== '0') {
$latestTimestamp = strtotime($latestDate);
}
}
$this->persistSourceCommitInfo($latestSha, $latestTimestamp);
$msgResult = Process::timeout(5)->run("cd {$tempDir} && git log -1 --format='%s'");
$latestMessage = $msgResult->successful() ? trim($msgResult->output()) : '';
$authorResult = Process::timeout(5)->run("cd {$tempDir} && git log -1 --format='%an'");
$latestAuthor = $authorResult->successful() ? trim($authorResult->output()) : '';
Process::timeout(10)->run("rm -rf {$tempDir}");
$storedSha = $this->settings->getOrDefault('emulator_source_commit', null);
$storedDate = $this->settings->getOrDefault('emulator_source_date', null);
$isUpdate = $storedSha !== null && $storedSha !== $latestSha;
if ($storedSha === null) {
$isUpdate = true;
}
return [
'has_update' => $isUpdate,
'latest_sha' => $latestSha,
'latest_date' => $latestDate,
'latest_timestamp' => $latestTimestamp,
'latest_message' => $latestMessage,
'latest_author' => $latestAuthor,
'stored_sha' => $storedSha,
'stored_date' => $storedDate,
'source' => 'cloned',
];
} catch (\Exception $e) {
Log::debug('[EmulatorSource] Source clone check failed: ' . $e->getMessage());
return null;
}
}
private function checkRemoteSourceUpdates(string $repo, string $branch): ?array
{
try {
$response = Http::timeout(10)
->withHeaders([
'Accept' => 'application/vnd.github.v3+json',
'User-Agent' => 'AtomCMS-Emulator-Updater',
])
->get("https://api.github.com/repos/{$repo}/commits", [
'sha' => $branch,
'per_page' => 1,
]);
if (! $response->successful()) {
return null;
}
$commits = $response->json();
if (empty($commits) || ! isset($commits[0]['sha'])) {
return null;
}
$latestCommit = $commits[0];
$latestSha = $latestCommit['sha'];
$latestDate = $latestCommit['commit']['committer']['date'] ?? null;
$latestTimestamp = $latestDate ? strtotime((string) $latestDate) : time();
$this->persistSourceCommitInfo($latestSha, $latestTimestamp);
$installedDate = $this->settings->getOrDefault('emulator_jar_installed_date', null);
$storedSha = $this->settings->getOrDefault('emulator_source_commit', null);
$storedDate = $this->settings->getOrDefault('emulator_source_date', null);
if ($storedSha !== null && $storedSha === $latestSha) {
$isUpdate = false;
} elseif ($storedSha !== null && $storedSha !== $latestSha) {
$isUpdate = true;
} elseif ($installedDate !== null) {
$installedTimestamp = is_numeric($installedDate) ? (int) $installedDate : strtotime((string) $installedDate);
$isUpdate = $installedTimestamp < $latestTimestamp;
} else {
$isUpdate = false;
}
return [
'has_update' => $isUpdate,
'latest_sha' => $latestSha,
'latest_date' => $latestDate,
'latest_timestamp' => $latestTimestamp,
'latest_message' => $latestCommit['commit']['message'] ?? '',
'latest_author' => $latestCommit['commit']['author']['name'] ?? '',
'stored_sha' => $storedSha,
'stored_date' => $storedDate,
];
} catch (\Exception $e) {
Log::warning('[EmulatorSource] Could not check source updates via GitHub API', ['error' => $e->getMessage()]);
return null;
}
}
private function persistSourceCommitInfo(string $sha, int $timestamp): void
{
$this->settings->set('emulator_source_commit', $sha);
$this->settings->set('emulator_source_date', (string) $timestamp);
}
}
@@ -1,510 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Services\Emulator;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Schema;
class EmulatorSqlService
{
use EmulatorConfiguration;
private const string SQL_TABLE = 'emulator_sql_updates';
public function __construct()
{
$this->loadConfiguration();
}
public function isConfigured(): bool
{
return ! in_array($this->githubUrl, [null, '', '0'], true) || ! in_array($this->jarDirectUrl, [null, '', '0'], true);
}
public function checkForUpdates(bool $recentOnly = true): array
{
if (! $this->githubRepo) {
return [
'has_updates' => false,
'error' => 'Geen GitHub repo geconfigureerd',
];
}
$this->ensureSqlTableExists();
$result = $this->fetchSqlFilesFromGitHub($recentOnly);
if (isset($result['error'])) {
return [
'has_updates' => false,
'error' => $result['error'],
];
}
$sqlFiles = $result;
if ($sqlFiles === []) {
return [
'has_updates' => false,
'message' => $recentOnly
? 'Geen SQL updates van de afgelopen week gevonden'
: 'Geen SQL updates gevonden',
];
}
$appliedHashes = $this->getAppliedSqlHashes();
$newSqlFiles = [];
$alreadyApplied = [];
foreach ($sqlFiles as $file) {
$hash = $file['sha'] ?? md5((string) $file['name']);
if (in_array($hash, $appliedHashes)) {
$alreadyApplied[] = $file['name'];
continue;
}
$newSqlFiles[] = $file;
}
if ($newSqlFiles === []) {
return [
'has_updates' => false,
'message' => 'Alle SQL updates zijn al toegepast (' . count($alreadyApplied) . ' stuks)',
'applied_count' => count($alreadyApplied),
];
}
usort($newSqlFiles, fn ($a, $b) => strcmp((string) $a['name'], (string) $b['name']));
return [
'has_updates' => true,
'count' => count($newSqlFiles),
'files' => $newSqlFiles,
'message' => count($newSqlFiles) . ' nieuwe SQL update(s) van deze week',
'applied_count' => count($alreadyApplied),
];
}
public function runUpdates(): array
{
$sqlCheck = $this->checkForUpdates(false);
if (! ($sqlCheck['has_updates'] ?? false)) {
return ['success' => true, 'sql_updated' => false, 'message' => 'Geen nieuwe SQL updates'];
}
$results = [
'success' => true,
'sql_updated' => true,
'files_run' => [],
'errors' => [],
];
foreach ($sqlCheck['files'] as $file) {
$sqlResult = $this->downloadAndRunSql($file);
if ($sqlResult['success']) {
$results['files_run'][] = $file['name'];
$this->markSqlAsApplied($file);
} else {
$results['errors'][] = $file['name'] . ': ' . $sqlResult['error'];
}
}
if (count($results['errors']) > 0) {
$results['message'] = count($results['files_run']) . ' SQL updates succesvol, ' . count($results['errors']) . ' met fouten';
} else {
$results['message'] = count($results['files_run']) . ' SQL updates succesvol uitgevoerd!';
}
return $results;
}
public function getAppliedUpdates(): array
{
$this->ensureSqlTableExists();
return DB::table(self::SQL_TABLE)
->orderBy('applied_at', 'desc')
->get()
->toArray();
}
public function diagnose(): array
{
$diagnosis = [
'table_exists' => false,
'applied_count' => 0,
'pending_count' => 0,
'error' => null,
];
try {
$diagnosis['table_exists'] = Schema::hasTable(self::SQL_TABLE);
if ($diagnosis['table_exists']) {
$diagnosis['applied_count'] = DB::table(self::SQL_TABLE)->count();
}
if ($this->githubRepo && $diagnosis['table_exists']) {
$sqlCheck = $this->checkForUpdates(false);
if (isset($sqlCheck['count'])) {
$diagnosis['pending_count'] = $sqlCheck['count'];
}
}
} catch (\Exception $e) {
$diagnosis['error'] = $e->getMessage();
}
return $diagnosis;
}
public function repair(): array
{
$actions = [];
$errors = [];
try {
$this->ensureSqlTableExists();
$actions[] = 'SQL update tabel gecontroleerd';
$appliedCount = DB::table(self::SQL_TABLE)->count();
$actions[] = "SQL updates tabel OK ({$appliedCount} records)";
if ($this->githubRepo) {
$sqlCheck = $this->checkForUpdates(false);
if (isset($sqlCheck['error'])) {
$actions[] = 'SQL update check: ' . $sqlCheck['error'];
} elseif (! ($sqlCheck['has_updates'] ?? false)) {
$actions[] = 'SQL updates: ' . ($sqlCheck['message'] ?? 'Allemaal up-to-date');
} else {
$count = $sqlCheck['count'] ?? 0;
$actions[] = "{$count} nieuwe SQL updates beschikbaar";
if ($this->isConfigured()) {
$actions[] = 'SQL updates worden toegepast...';
$runResult = $this->runUpdates();
if ($runResult['success'] ?? false) {
$filesRun = count($runResult['files_run'] ?? []);
$actions[] = "{$filesRun} SQL updates toegepast";
} else {
$errors[] = 'SQL updates: ' . ($runResult['error'] ?? 'Onbekende fout');
}
}
}
}
} catch (\Exception $e) {
$errors[] = 'SQL repair: ' . $e->getMessage();
Log::error('[EmulatorSql] Repair failed', ['error' => $e->getMessage()]);
}
return [
'success' => $errors === [],
'actions' => $actions,
'errors' => $errors,
];
}
private function ensureSqlTableExists(): void
{
if (Schema::hasTable(self::SQL_TABLE)) {
return;
}
Schema::create(self::SQL_TABLE, function ($table) {
$table->id();
$table->string('file_name');
$table->string('file_hash')->unique();
$table->timestamp('applied_at');
$table->text('sql_content')->nullable();
});
}
private function getAppliedSqlHashes(): array
{
$this->ensureSqlTableExists();
return DB::table(self::SQL_TABLE)
->pluck('file_hash')
->toArray();
}
private function markSqlAsApplied(array $file): void
{
$this->ensureSqlTableExists();
$hash = $file['sha'] ?? md5((string) $file['name']);
DB::table(self::SQL_TABLE)->updateOrInsert(
['file_hash' => $hash],
[
'file_name' => $file['name'],
'applied_at' => now(),
],
);
}
private function fetchSqlFilesFromGitHub(bool $recentOnly = false): array
{
if (! $this->githubRepo) {
return [];
}
$branch = $this->githubBranch ?: 'main';
$folderNames = [
'Database%20Updates',
'Database Updates',
'database_updates',
'database/updates',
'sql/updates',
'sql',
'updates',
];
$knownSqlFiles = [
'07012026_UpdateDatabase_to_4-0-1.sql',
'09012026_UpdateDatabase_to_4-0-2.sql',
'12012026_Battle Banzai.sql',
'12012026_Breeding Fixes.sql',
'12012026_ChatBubbles.sql',
'16032026_updateall_command.sql',
'17032026_allow_underpass.sql',
'19032026_hotel_timezone.sql',
'21022026_user_prefixes.sql',
'Default_Camera.sql',
'UpdateDatabase_Allow_diagonale.sql',
'UpdateDatabase_BOT.sql',
'UpdateDatabase_Banners.sql',
'UpdateDatabase_DanceCMD.sql',
'UpdateDatabase_Happiness.sql',
'UpdateDatabase_Websocket.sql',
'UpdateDatabase_unignorable.sql',
];
try {
if ($recentOnly) {
return $this->fetchRecentSqlFiles($branch);
}
$sqlFiles = [];
foreach ($knownSqlFiles as $filename) {
foreach ($folderNames as $folderName) {
$encodedFilename = str_replace(' ', '%20', $filename);
$url = "https://raw.githubusercontent.com/{$this->githubRepo}/{$branch}/{$folderName}/{$encodedFilename}";
$response = Http::timeout(10)->get($url);
if ($response->successful()) {
$sqlFiles[] = [
'name' => $filename,
'url' => $url,
'sha' => md5($response->body()),
];
break;
}
}
}
if ($sqlFiles !== []) {
usort($sqlFiles, fn ($a, $b) => strcmp($a['name'], $b['name']));
return $sqlFiles;
}
return [];
} catch (\Exception $e) {
Log::warning('[EmulatorSql] Could not fetch SQL files', ['error' => $e->getMessage()]);
return [];
}
}
private function fetchRecentSqlFiles(string $branch): array
{
$weekAgo = now()->subDays(7)->toIso8601String();
$githubToken = setting('github_token', '');
$headers = [
'Accept' => 'application/vnd.github+json',
'User-Agent' => 'AtomCMS-EmulatorUpdate/1.0',
];
if (! empty($githubToken)) {
$headers['Authorization'] = 'Bearer ' . $githubToken;
}
$folderNames = ['Database Updates', 'database_updates', 'sql', 'updates'];
try {
foreach ($folderNames as $folderName) {
$response = Http::withHeaders($headers)->timeout(30)->get("https://api.github.com/repos/{$this->githubRepo}/commits", [
'path' => $folderName,
'sha' => $branch,
'since' => $weekAgo,
'per_page' => 100,
]);
if ($response->successful()) {
$commits = $response->json();
if (! is_array($commits) || $commits === []) {
continue;
}
$sqlFiles = [];
foreach ($commits as $commit) {
$sha = $commit['sha'] ?? null;
$commitDate = $commit['commit']['committer']['date'] ?? null;
if (! $sha) {
continue;
}
$commitResponse = Http::withHeaders($headers)->timeout(30)->get("https://api.github.com/repos/{$this->githubRepo}/commits/{$sha}");
if (! $commitResponse->successful()) {
continue;
}
$commitData = $commitResponse->json();
$files = $commitData['files'] ?? [];
foreach ($files as $file) {
$filename = $file['filename'] ?? '';
if (! str_ends_with(strtolower((string) $filename), '.sql')) {
continue;
}
$name = basename((string) $filename);
$sqlFiles[] = [
'name' => $name,
'url' => $file['raw_url'] ?? "https://raw.githubusercontent.com/{$this->githubRepo}/{$sha}/{$filename}",
'sha' => $sha,
'date' => $commitDate,
];
}
}
if ($sqlFiles !== []) {
usort($sqlFiles, fn ($a, $b) => strcmp($a['name'], $b['name']));
return $sqlFiles;
}
}
}
return [];
} catch (\Exception $e) {
Log::warning('[EmulatorSql] Could not fetch recent SQL files', ['error' => $e->getMessage()]);
return [];
}
}
private function downloadAndRunSql(array $file): array
{
try {
$response = Http::timeout(60)->get($file['url']);
if (! $response->successful()) {
return ['success' => false, 'error' => 'Download mislukt'];
}
$sql = $this->cleanSql($response->body());
if (in_array(trim($sql), ['', '0'], true)) {
return ['success' => true, 'message' => 'Lege SQL file overgeslagen'];
}
$host = setting('emulator_database_host', config('database.connections.emulator.host', '127.0.0.1'));
$port = setting('emulator_database_port', config('database.connections.emulator.port', '3306'));
$name = setting('emulator_database_name', config('database.connections.emulator.database', ''));
$username = setting('emulator_database_username', config('database.connections.emulator.username', ''));
$password = setting('emulator_database_password', config('database.connections.emulator.password', ''));
if (empty($name) || empty($username)) {
return ['success' => false, 'error' => 'Emulator database niet geconfigureerd'];
}
$pdo = new \PDO(
"mysql:host={$host};port={$port};dbname={$name};charset=utf8mb4",
$username,
$password,
[\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION],
);
$statements = $this->splitSqlStatements($sql);
$successCount = 0;
$skipCount = 0;
foreach ($statements as $statement) {
$statement = trim((string) $statement);
if ($statement === '' || $statement === '0') {
continue;
}
try {
$pdo->exec($statement);
$successCount++;
} catch (\PDOException $e) {
if ($this->isDuplicateError($e)) {
$skipCount++;
continue;
}
Log::warning('[SQL Update] Statement error: ' . $e->getMessage());
}
}
Log::info('[SQL Update] Successfully ran: ' . $file['name'] . " ({$successCount} statements, {$skipCount} skipped)");
return ['success' => true, 'message' => "SQL uitgevoerd ({$successCount} statements, {$skipCount} duplicate)"];
} catch (\Exception $e) {
Log::error('[SQL Update] Failed: ' . $file['name'], ['error' => $e->getMessage()]);
return ['success' => false, 'error' => $e->getMessage()];
}
}
private function cleanSql(string $sql): string
{
$sql = preg_replace('/--.*$/m', '', $sql);
$sql = preg_replace('/#.*$/m', '', (string) $sql);
$sql = preg_replace('/SET FOREIGN_KEY_CHECKS.*?;/i', '', (string) $sql);
return preg_replace('/SET @@SESSION.SQL_MODE.*?;/i', '', (string) $sql);
}
private function splitSqlStatements(string $sql): array
{
$parts = explode(';', $sql);
return array_filter($parts, fn ($part) => trim((string) $part) !== '');
}
private function isDuplicateError(\PDOException $e): bool
{
$message = strtolower($e->getMessage());
$patterns = [
'duplicate entry',
"table '",
'already exists',
"can't create",
'duplicate key',
'duplicate index',
'error 1061',
'error 1062',
'error 1826',
];
return array_any($patterns, fn ($pattern) => str_contains($message, (string) $pattern));
}
}
-407
View File
@@ -1,407 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Services;
use App\Models\Miscellaneous\WebsiteSetting;
use App\Services\Emulator\EmulatorBackupService;
use App\Services\Emulator\EmulatorBuildService;
use App\Services\Emulator\EmulatorJarService;
use App\Services\Emulator\EmulatorSourceService;
use App\Services\Emulator\EmulatorSqlService;
use App\Services\Emulator\EmulatorStatusService;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Process;
class EmulatorUpdateService
{
private readonly EmulatorStatusService $statusService;
private readonly EmulatorJarService $jarService;
private readonly EmulatorSourceService $sourceService;
private readonly EmulatorBuildService $buildService;
private readonly EmulatorSqlService $sqlService;
private readonly EmulatorBackupService $backupService;
private readonly SettingsService $settings;
public function __construct()
{
$this->statusService = new EmulatorStatusService;
$this->jarService = new EmulatorJarService;
$this->sourceService = new EmulatorSourceService;
$this->buildService = new EmulatorBuildService;
$this->sqlService = new EmulatorSqlService;
$this->backupService = new EmulatorBackupService;
$this->settings = app(SettingsService::class);
}
public function isConfigured(): bool
{
return $this->statusService->isConfigured();
}
public function getStatus(): array
{
$status = $this->statusService->getStatus();
$updateCheck = $this->jarService->checkForUpdates();
$sourceInfo = $this->sourceService->checkForUpdates();
return array_merge($status, [
'update_available' => $updateCheck['update_available'] ?? false,
'current_version' => $updateCheck['current_version'] ?? setting('emulator_version', 'N/A'),
'latest_version' => $updateCheck['latest_version'] ?? 'N/A',
'update_type' => $updateCheck['type'] ?? 'unknown',
'has_source_updates' => $sourceInfo['has_update'] ?? false,
'latest_sha' => $sourceInfo['latest_sha'] ?? null,
'latest_message' => $sourceInfo['latest_message'] ?? null,
'latest_author' => $sourceInfo['latest_author'] ?? null,
'latest_date' => $sourceInfo['latest_date'] ?? null,
'stored_sha' => $sourceInfo['stored_sha'] ?? null,
'stored_date' => $sourceInfo['stored_date'] ?? null,
'source_info' => $sourceInfo,
]);
}
public function checkForUpdates(): array
{
return $this->jarService->checkForUpdates();
}
public function checkForSqlUpdates(bool $recentOnly = true): array
{
return $this->sqlService->checkForUpdates($recentOnly);
}
public function runSqlUpdates(): array
{
return $this->sqlService->runUpdates();
}
public function getAppliedSqlUpdates(): array
{
return $this->sqlService->getAppliedUpdates();
}
public function updateEmulator(): array
{
if (! $this->isConfigured()) {
return ['success' => false, 'error' => 'Geen GitHub URL geconfigureerd'];
}
$check = $this->checkForUpdates();
if (! ($check['update_available'] ?? false)) {
if ($check['type'] === 'not_found' && ($check['source_available'] ?? false)) {
return $this->buildFromSource();
}
return ['success' => false, 'error' => 'Emulator is al up-to-date'];
}
$hasSourceUpdates = ($check['has_source_updates'] ?? false) || ($check['type'] ?? '') === 'source_build';
if ($hasSourceUpdates && $this->sourceService->isSourceBuildAvailable()) {
return $this->buildFromSource();
}
if ($check['type'] === 'source_build') {
return $this->buildFromSource();
}
if (! ($check['jar_url'] ?? null)) {
return ['success' => false, 'error' => 'Geen .jar gevonden'];
}
$result = $this->jarService->performUpdate($check);
if ($result['success']) {
$this->runSqlUpdates();
if ($this->restartEmulator()) {
$result['restarted'] = true;
$result['message'] = ($result['message'] ?? '') . ' | 🔄 Emulator herstart';
}
}
return $result;
}
public function performUpdate(array $check): array
{
return $this->jarService->performUpdate($check);
}
public function buildFromSource(bool $force = false): array
{
return $this->buildService->buildFromSource($force);
}
public function restartEmulator(): bool
{
$serviceName = $this->settings->getOrDefault('emulator_service_name', 'emulator');
try {
Log::info('[EmulatorUpdate] Restarting emulator service: ' . $serviceName);
$result = Process::timeout(30)->run("systemctl restart {$serviceName} 2>&1");
if ($result->successful()) {
return true;
}
$result = Process::timeout(30)->run("service {$serviceName} restart 2>&1");
return $result->successful();
} catch (\Exception $e) {
Log::error('[EmulatorUpdate] Failed to restart emulator', ['error' => $e->getMessage()]);
return false;
}
}
public function getBackupList(): array
{
return $this->backupService->getList();
}
public function restoreBackup(string $backupName): array
{
return $this->backupService->restore($backupName);
}
public function getInstalledVersion(): string
{
return $this->statusService->getInstalledVersion();
}
public function getInstalledJar(): ?string
{
return $this->statusService->getInstalledJar();
}
public function getInstalledJarInfo(): array
{
return $this->statusService->getInstalledJarInfo();
}
public function getLastSqlUpdate(): ?string
{
return setting('emulator_last_sql_update');
}
public function debugStatus(): array
{
return Cache::remember('emulator_debug_status', 120, function () {
$installedDate = $this->settings->getOrDefault('emulator_jar_installed_date', null);
$sourceCommit = $this->settings->getOrDefault('emulator_source_commit', null);
$sourceDate = $this->settings->getOrDefault('emulator_source_date', null);
$emulatorVersion = $this->settings->getOrDefault('emulator_version', null);
$jarFiles = $this->statusService->getInstalledJarInfo();
return [
'github_url' => $this->settings->getOrDefault('emulator_github_url', ''),
'github_repo' => $this->settings->getOrDefault('emulator_source_repo', ''),
'github_branch' => $this->settings->getOrDefault('emulator_github_branch', 'main'),
'source_repo' => $this->settings->getOrDefault('emulator_source_repo', ''),
'source_branch' => $this->settings->getOrDefault('emulator_github_branch', 'main'),
'installed_date' => $installedDate,
'installed_date_formatted' => $installedDate ? date('Y-m-d H:i:s', (int) $installedDate) : null,
'source_commit' => $sourceCommit,
'source_date' => $sourceDate,
'source_date_formatted' => $sourceDate ? date('Y-m-d H:i:s', (int) $sourceDate) : null,
'emulator_version' => $emulatorVersion,
'jar_files' => $jarFiles,
'installed_branch' => $this->settings->getOrDefault('emulator_installed_branch', null),
];
});
}
public function resetInstalledDate(): void
{
WebsiteSetting::where('key', 'emulator_jar_installed_date')->delete();
WebsiteSetting::where('key', 'emulator_source_commit')->delete();
WebsiteSetting::where('key', 'emulator_source_date')->delete();
}
public function clearAllLogs(): array
{
$cleared = [];
$paths = [
storage_path('logs') => 'Laravel Logs',
storage_path('logs/emulator.log') => 'Emulator Log',
'/tmp/emulator-update-*' => 'Emulator Update Temp',
'/tmp/nitro-switch-*' => 'Nitro Switch Logs',
'/tmp/nitro_*' => 'Nitro Temp',
'/var/www/Emulator/logs' => 'Emulator Folder Logs',
];
foreach ($paths as $path => $label) {
try {
if (str_contains($path, '*')) {
Process::timeout(10)->run("rm -f {$path} 2>/dev/null || true");
$cleared[] = $label;
} elseif (is_dir($path)) {
Process::timeout(10)->run("find {$path} -name '*.log' -mtime +1 -delete 2>/dev/null || true");
$cleared[] = $label;
} elseif (is_file($path)) {
@unlink($path);
$cleared[] = $label;
}
} catch (\Exception) {
}
}
try {
$laravelLog = storage_path('logs/laravel.log');
if (is_file($laravelLog)) {
file_put_contents($laravelLog, '');
$cleared[] = 'laravel.log';
}
} catch (\Exception) {
}
Process::timeout(10)->run("find /tmp -name 'emulator_*' -mtime +1 -delete 2>/dev/null || true");
Process::timeout(10)->run("find /tmp -name 'nitro_*' -mtime +1 -delete 2>/dev/null || true");
Process::timeout(10)->run("find /tmp -name 'deploy_*' -mtime +1 -delete 2>/dev/null || true");
return [
'success' => true,
'cleared' => $cleared,
'message' => count($cleared) . ' log locaties geleegd',
];
}
public function repairEmulator(): array
{
$actions = [];
$errors = [];
Log::info('[EmulatorUpdate] Starting repair process');
try {
$status = $this->getStatus();
if (! ($status['jar_exists'] ?? false)) {
$actions[] = 'JAR bestand ontbreekt - downloaden...';
$updateResult = $this->updateEmulator();
if (! $updateResult['success']) {
$errors[] = 'Kon JAR niet herstellen: ' . ($updateResult['error'] ?? 'Onbekende fout');
} else {
$actions[] = 'JAR bestand hersteld';
}
}
if (! ($status['service_running'] ?? false)) {
$actions[] = 'Emulator service niet actief - starten...';
if ($this->restartEmulator()) {
$actions[] = 'Emulator service gestart';
} else {
$errors[] = 'Kon emulator service niet starten';
}
}
$sqlRepairResult = $this->sqlService->repair();
if (! empty($sqlRepairResult['actions'])) {
$actions = array_merge($actions, $sqlRepairResult['actions']);
}
if (! empty($sqlRepairResult['errors'])) {
$errors = array_merge($errors, $sqlRepairResult['errors']);
}
if ($errors !== []) {
return [
'success' => false,
'actions' => $actions,
'errors' => $errors,
'error' => implode('; ', $errors),
];
}
return [
'success' => true,
'actions' => $actions,
'message' => count($actions) . ' acties uitgevoerd',
];
} catch (\Exception $e) {
Log::error('[EmulatorUpdate] Repair exception', ['error' => $e->getMessage()]);
return [
'success' => false,
'actions' => $actions,
'error' => $e->getMessage(),
];
}
}
public function diagnoseSqlUpdates(): array
{
return $this->sqlService->diagnose();
}
public function diagnose(): array
{
$diagnosis = [
'timestamp' => now()->toIso8601String(),
'checks' => [],
'issues' => [],
'recommendations' => [],
];
try {
$status = $this->getStatus();
$diagnosis['checks']['jar_exists'] = $status['jar_exists'] ?? false;
$diagnosis['checks']['jar_files'] = $status['jar_files'] ?? [];
$diagnosis['checks']['service_running'] = $status['service_running'] ?? false;
$diagnosis['checks']['source_exists'] = $status['source_exists'] ?? false;
$diagnosis['checks']['emulator_db_connected'] = $status['emulator_db_connected'] ?? false;
$diagnosis['checks']['is_configured'] = $this->isConfigured();
$diagnosis['checks']['update_available'] = $status['update_available'] ?? false;
$sqlDiagnosis = $this->sqlService->diagnose();
$diagnosis['checks']['sql_table_exists'] = $sqlDiagnosis['table_exists'] ?? false;
$diagnosis['checks']['sql_updates_applied'] = $sqlDiagnosis['applied_count'] ?? 0;
$diagnosis['checks']['sql_pending'] = $sqlDiagnosis['pending_count'] ?? 0;
if (! ($status['jar_exists'] ?? false)) {
$diagnosis['issues'][] = 'JAR bestand ontbreekt';
$diagnosis['recommendations'][] = 'Voer emulator:update uit om de JAR te downloaden';
}
if (! ($status['service_running'] ?? false)) {
$diagnosis['issues'][] = 'Emulator service draait niet';
$diagnosis['recommendations'][] = 'Start de service met: sudo systemctl start ' . $this->settings->getOrDefault('emulator_service_name', 'emulator');
}
if (! ($status['emulator_db_connected'] ?? false)) {
$diagnosis['issues'][] = 'Emulator database niet bereikbaar';
$diagnosis['recommendations'][] = 'Controleer de database credentials in de settings';
}
if (! ($status['source_exists'] ?? false) && $this->sourceService->isSourceBuildAvailable()) {
$diagnosis['issues'][] = 'Source code niet gevonden';
$diagnosis['recommendations'][] = 'Voer emulator:update --rebuild uit om vanaf source te bouwen';
}
if (! ($sqlDiagnosis['table_exists'] ?? false)) {
$diagnosis['issues'][] = 'SQL update tabel ontbreekt';
$diagnosis['recommendations'][] = 'Reparatie zal de tabel aanmaken';
}
if (($sqlDiagnosis['pending_count'] ?? 0) > 0) {
$diagnosis['issues'][] = $sqlDiagnosis['pending_count'] . ' SQL updates pending';
$diagnosis['recommendations'][] = 'Voer reparatie uit om SQL updates toe te passen';
}
} catch (\Exception $e) {
$diagnosis['error'] = $e->getMessage();
}
return $diagnosis;
}
}
File diff suppressed because it is too large. Load diff
-186
View File
@@ -1,186 +0,0 @@
<?php
namespace App\Services;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class UpdateHistoryService
{
private const string TABLE = 'update_history';
public function ensureTableExists(): void
{
if (! Schema::hasTable(self::TABLE)) {
Schema::create(self::TABLE, function ($table) {
$table->id();
$table->string('type'); // nitro, emulator, sql, config
$table->string('action'); // update, build, deploy, fix
$table->string('item')->nullable(); // filename, version, etc
$table->string('status'); // success, failed, pending
$table->text('message')->nullable();
$table->string('user')->nullable();
$table->string('ip')->nullable();
$table->timestamp('created_at')->useCurrent();
$table->index(['type', 'created_at']);
$table->index('status');
});
}
}
public function log(string $type, string $action, ?string $item = null, string $status = 'success', ?string $message = null): void
{
$this->ensureTableExists();
DB::table(self::TABLE)->insert([
'type' => $type,
'action' => $action,
'item' => $item,
'status' => $status,
'message' => $message,
'user' => auth()->user()?->name ?? 'System',
'ip' => request()->ip(),
'created_at' => now(),
]);
}
public function getRecent(int $limit = 50): array
{
$this->ensureTableExists();
return DB::table(self::TABLE)
->orderBy('created_at', 'desc')
->limit($limit)
->get()
->toArray();
}
public function getByType(string $type, int $limit = 50): array
{
$this->ensureTableExists();
return DB::table(self::TABLE)
->where('type', $type)
->orderBy('created_at', 'desc')
->limit($limit)
->get()
->toArray();
}
public function getByStatus(string $status, int $limit = 50): array
{
$this->ensureTableExists();
return DB::table(self::TABLE)
->where('status', $status)
->orderBy('created_at', 'desc')
->limit($limit)
->get()
->toArray();
}
public function getStats(): array
{
$this->ensureTableExists();
$total = DB::table(self::TABLE)->count();
$success = DB::table(self::TABLE)->where('status', 'success')->count();
$failed = DB::table(self::TABLE)->where('status', 'failed')->count();
$lastUpdate = DB::table(self::TABLE)
->orderBy('created_at', 'desc')
->first();
$byType = DB::table(self::TABLE)
->select('type', DB::raw('count(*) as count'))
->groupBy('type')
->pluck('count', 'type')
->toArray();
return [
'total' => $total,
'success' => $success,
'failed' => $failed,
'success_rate' => $total > 0 ? round(($success / $total) * 100) : 100,
'last_update' => $lastUpdate,
'by_type' => $byType,
];
}
public function getHtml(): string
{
$this->ensureTableExists();
$updates = $this->getRecent(20);
$stats = $this->getStats();
$html = '<div style="font-family: -apple-system, BlinkMacSystemFont, sans-serif;">';
// Stats
$html .= '<div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 16px;">';
$html .= '<div style="background: rgba(255,255,255,0.05); padding: 12px; border-radius: 8px; text-align: center;">';
$html .= '<div style="font-size: 24px; font-weight: 700; color: #4ade80;">' . $stats['total'] . '</div>';
$html .= '<div style="font-size: 10px; color: #64748b; text-transform: uppercase;">Totaal</div></div>';
$html .= '<div style="background: rgba(255,255,255,0.05); padding: 12px; border-radius: 8px; text-align: center;">';
$html .= '<div style="font-size: 24px; font-weight: 700; color: #4ade80;">' . $stats['success'] . '</div>';
$html .= '<div style="font-size: 10px; color: #64748b; text-transform: uppercase;">Geslaagd</div></div>';
$html .= '<div style="background: rgba(255,255,255,0.05); padding: 12px; border-radius: 8px; text-align: center;">';
$html .= '<div style="font-size: 24px; font-weight: 700; color: #f87171;">' . $stats['failed'] . '</div>';
$html .= '<div style="font-size: 10px; color: #64748b; text-transform: uppercase;">Mislukt</div></div>';
$html .= '<div style="background: rgba(255,255,255,0.05); padding: 12px; border-radius: 8px; text-align: center;">';
$html .= '<div style="font-size: 24px; font-weight: 700; color: #60a5fa;">' . $stats['success_rate'] . '%</div>';
$html .= '<div style="font-size: 10px; color: #64748b; text-transform: uppercase;">Succes</div></div>';
$html .= '</div>';
// History list
if ($updates === []) {
$html .= '<div style="text-align: center; padding: 24px; color: #64748b;">';
$html .= '<div style="font-size: 32px; margin-bottom: 8px;">📋</div>';
$html .= 'Nog geen update geschiedenis</div>';
} else {
$html .= '<div style="max-height: 400px; overflow-y: auto;">';
foreach ($updates as $update) {
$icon = match ($update->status) {
'success' => '✅',
'failed' => '❌',
'pending' => '⏳',
default => '⚪'
};
$typeColor = match ($update->type) {
'nitro' => '#4ade80',
'emulator' => '#60a5fa',
'sql' => '#fbbf24',
'config' => '#a78bfa',
default => '#94a3b8'
};
$time = Carbon::parse($update->created_at)->diffForHumans();
$html .= '<div style="display: flex; align-items: center; gap: 12px; padding: 10px 12px; background: rgba(255,255,255,0.03); border-radius: 8px; margin-bottom: 6px;">';
$html .= '<div style="font-size: 16px;">' . $icon . '</div>';
$html .= '<div style="flex: 1;">';
$html .= '<div style="display: flex; align-items: center; gap: 8px;">';
$html .= '<span style="background: ' . $typeColor . '20; color: ' . $typeColor . '; padding: 2px 8px; border-radius: 12px; font-size: 10px; font-weight: 600; text-transform: uppercase;">' . e($update->type) . '</span>';
$html .= '<span style="color: #e2e8f0; font-size: 13px;">' . e($update->action) . '</span>';
if ($update->item) {
$html .= '<span style="color: #94a3b8; font-size: 12px;">' . e($update->item) . '</span>';
}
$html .= '</div>';
if ($update->message) {
$html .= '<div style="color: #64748b; font-size: 11px; margin-top: 2px;">' . e($update->message) . '</div>';
}
$html .= '</div>';
$html .= '<div style="text-align: right;">';
$html .= '<div style="color: #64748b; font-size: 10px;">' . e($update->user) . '</div>';
$html .= '<div style="color: #475569; font-size: 9px;">' . e($time) . '</div>';
$html .= '</div>';
$html .= '</div>';
}
$html .= '</div>';
}
return $html . '</div>';
}
}
Regular → Executable
View File
File mode changed.
+3 -3
View File
@@ -17,15 +17,15 @@ return [
|
*/
'paths' => ['api/*', 'sanctum/csrf-cookie', 'client/*'],
'paths' => ['api/*', 'sanctum/csrf-cookie', 'client/*', 'imaging/*'],
'allowed_methods' => array_filter(array_map(trim(...), explode(',', (string) env('CORS_ALLOWED_METHODS', 'GET,POST,PUT,PATCH,DELETE,OPTIONS'))), fn ($v) => $v !== ''),
'allowed_origins' => array_filter(array_map(trim(...), explode(',', (string) env('CORS_ALLOWED_ORIGINS', ''))), fn ($v) => $v !== ''),
'allowed_origins' => ['*'], // Zorgt ervoor dat alle origins (zoals je client/CMS) de imaging mogen inladen
'allowed_origins_patterns' => [],
'allowed_headers' => ['Content-Type', 'X-Requested-With', 'Authorization', 'X-XSRF-TOKEN'],
'allowed_headers' => ['*'], // Flexibel instellen zodat er geen headers geblokkeerd worden
'exposed_headers' => [],
-43
View File
@@ -1,43 +0,0 @@
#!/bin/bash
set -e
echo "=========================================="
echo " AtomCMS Deployment Script"
echo "=========================================="
PROJECT_DIR="/var/www/atomcms"
WEB_USER="www-data"
cd "$PROJECT_DIR"
echo "[1/8] Installing PHP dependencies..."
composer install --no-dev --optimize-autoloader --no-interaction
echo "[2/8] Installing JS dependencies..."
npm install --production=false
echo "[3/8] Building frontend assets..."
npm run build
echo "[4/8] Running database migrations..."
php artisan migrate --force
echo "[5/8] Clearing all caches..."
php artisan optimize:clear
echo "[6/8] Caching configuration, routes, and views..."
php artisan config:cache
php artisan route:cache
php artisan view:cache
echo "[7/8] Fixing file permissions..."
chown -R "$WEB_USER":"$WEB_USER" storage bootstrap/cache public/build
chmod -R 775 storage bootstrap/cache public/build
echo "[8/8] Clearing OPcache..."
php -r "if (function_exists('opcache_reset')) { opcache_reset(); echo 'OPcache cleared'.PHP_EOL; } else { echo 'OPcache not enabled'.PHP_EOL; }"
echo "=========================================="
echo " Deployment complete!"
echo "=========================================="
Regular → Executable
View File
File mode changed.
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "سؤال المساعدة",
"filament::resources.columns.reason": "سبب",
"filament::resources.stats.photos_count.title": "Foto's",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "رئيسي",
"filament::resources.resources.writeable-boxes.label": "صندوق قابل للتحرير",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "إعداد CMS",
"filament::resources.resources.shop-orders.label": "طلب المتجر",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filter",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "ذكر",
"filament::resources.inputs.log_commands": "Log Commando's",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Criado com sucesso",
"filament::resources.columns.motto": "شعار",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "إنجازات",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Help Question",
"filament::resources.columns.reason": "Reason",
"filament::resources.stats.photos_count.title": "Photos",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Main",
"filament::resources.resources.writeable-boxes.label": "Text Block",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Setting",
"filament::resources.resources.shop-orders.label": "Order",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filtrar",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Male",
"filament::resources.inputs.log_commands": "Log commands",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Criado com sucesso",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Achievements",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Help Question",
"filament::resources.columns.reason": "Reason",
"filament::resources.stats.photos_count.title": "Photos",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Main",
"filament::resources.resources.writeable-boxes.label": "Text Block",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Setting",
"filament::resources.resources.shop-orders.label": "Order",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filtr",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Male",
"filament::resources.inputs.log_commands": "Log commands",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Úspěšně vytvořeno",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Achievements",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Help Question",
"filament::resources.columns.reason": "Reason",
"filament::resources.stats.photos_count.title": "Photos",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Main",
"filament::resources.resources.writeable-boxes.label": "Text Block",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Setting",
"filament::resources.resources.shop-orders.label": "Order",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filtrer",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Male",
"filament::resources.inputs.log_commands": "Log commands",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Oprettet succesfuldt",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Achievements",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Hilfe Frage",
"filament::resources.columns.reason": "Grund",
"filament::resources.stats.photos_count.title": "Foto's",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Haupt",
"filament::resources.resources.writeable-boxes.label": "Beschreibbare Box",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Einstellung",
"filament::resources.resources.shop-orders.label": "Shop Bestellung",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filter",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Männlich",
"filament::resources.inputs.log_commands": "Log Commando's",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Criado com sucesso",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Erfolge",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Help Question",
"filament::resources.columns.reason": "Reason",
"filament::resources.stats.photos_count.title": "Photos",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Main",
"filament::resources.resources.writeable-boxes.label": "Text Block",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Setting",
"filament::resources.resources.shop-orders.label": "Order",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Φίλτρο",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Male",
"filament::resources.inputs.log_commands": "Log commands",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Δημιουργήθηκε επιτυχώς",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Achievements",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-45
View File
@@ -37,11 +37,8 @@
"commandocentrum.version": "Version",
"commandocentrum.service": "Service",
"commandocentrum.status": "Status",
"commandocentrum.emulator_updates": "Emulator Updates",
"commandocentrum.emulator_updates_desc": "Configure and update the emulator",
"commandocentrum.check_updates": "Check Updates",
"commandocentrum.build": "Build",
"commandocentrum.sql_updates": "SQL Updates",
"commandocentrum.save": "Save",
"commandocentrum.github_url": "GitHub URL",
"commandocentrum.jar_direct_url": "JAR Direct URL",
@@ -52,25 +49,9 @@
"commandocentrum.db_host": "DB Host",
"commandocentrum.db_name": "DB Name",
"commandocentrum.service_name": "Service Name",
"commandocentrum.emulator_backups": "Emulator Backups",
"commandocentrum.emulator_backups_desc": "View and restore emulator backups",
"commandocentrum.no_backups": "No backups available yet",
"commandocentrum.backups_auto": "Backups are automatically created on every emulator update",
"commandocentrum.restore": "Restore",
"commandocentrum.nitro_client": "Nitro Client",
"commandocentrum.nitro_client_desc": "Configure and update Nitro",
"commandocentrum.auto_detect": "Auto Detect",
"commandocentrum.generate_configs": "Generate Configs",
"commandocentrum.client_path": "Client Path",
"commandocentrum.renderer_path": "Renderer Path",
"commandocentrum.build_path": "Build Path",
"commandocentrum.webroot": "Webroot",
"commandocentrum.site_url": "Site URL",
"commandocentrum.auto_updates": "Automatic Updates",
"commandocentrum.auto_updates_desc": "Configure automatic updates",
"commandocentrum.enable_auto_updates": "Enable Automatic Updates",
"commandocentrum.schedule": "Schedule (HH:MM)",
"commandocentrum.days": "Days (0-6)",
"commandocentrum.clothing_sync": "Clothing Sync",
"commandocentrum.clothing_sync_desc": "Sync catalog clothing from FigureMap",
"commandocentrum.sync": "Sync",
@@ -84,9 +65,6 @@
"commandocentrum.webhook_url": "Webhook URL",
"commandocentrum.discord_ranks": "Ranks that receive Discord notifications",
"commandocentrum.discord_ranks_helper": "Leave empty for staff only (min_staff_rank)",
"commandocentrum.update_history": "Update History",
"commandocentrum.update_history_desc": "Latest system updates",
"commandocentrum.no_updates_found": "No updates found",
"commandocentrum.social_login": "Social Login (v1.4)",
"commandocentrum.social_login_desc": "Enable social login providers",
"commandocentrum.google_login": "Google Login",
@@ -128,30 +106,7 @@
"commandocentrum.emulator_restart_failed": "Could not restart emulator",
"commandocentrum.emulator_online": "Emulator is online and responding!",
"commandocentrum.emulator_unreachable": "Emulator is not reachable via RCON",
"commandocentrum.building_emulator": "Emulator is being built from source...",
"commandocentrum.emulator_built": "Emulator built!",
"commandocentrum.build_failed": "Build failed",
"commandocentrum.configure_github_url": "Please configure the Emulator GitHub URL first",
"commandocentrum.maven_not_installed": "Maven (mvn) is not installed - cannot build",
"commandocentrum.building_maven": "Building emulator with Maven...",
"commandocentrum.build_success_jar": "Build successful! JAR moved to :jar. Restart the emulator.",
"commandocentrum.build_success": "Build successful! Restart the emulator.",
"commandocentrum.build_failed_logs": "Build failed - check logs",
"commandocentrum.no_pom_xml": "No pom.xml found - cannot build from source",
"commandocentrum.sql_applied": "SQL updates applied!",
"commandocentrum.update_complete": "Update check completed",
"commandocentrum.emulator_settings_saved": "Emulator settings saved!",
"commandocentrum.nitro_updated": "Nitro updated! Build again with \"Build\" button.",
"commandocentrum.nitro_up_to_date": "Nitro is already up-to-date!",
"commandocentrum.building_nitro": "Building Nitro...",
"commandocentrum.nitro_build_success": "Nitro build successful!",
"commandocentrum.nitro_build_warning": "Build started - check manually",
"commandocentrum.valid_url_required": "Please enter a valid URL (e.g. https://epicnabbo.nl)",
"commandocentrum.configs_generated": "Configs generated & existing settings preserved!",
"commandocentrum.config_generated_warning": "Config generated (check manually)",
"commandocentrum.paths_detected": "Paths detected and saved!",
"commandocentrum.nitro_settings_saved": "Nitro settings saved!",
"commandocentrum.auto_update_saved": "Auto update settings saved!",
"commandocentrum.alerts_saved": "Notifications saved!",
"commandocentrum.test_sent": "Test message sent!",
"commandocentrum.webhook_empty": "Webhook URL is empty",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Pregunta de ayuda",
"filament::resources.columns.reason": "Razón",
"filament::resources.stats.photos_count.title": "Foto's",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Principal",
"filament::resources.resources.writeable-boxes.label": "Caja editable",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "Configuración CMS",
"filament::resources.resources.shop-orders.label": "Pedido de tienda",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filter",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Hombre",
"filament::resources.inputs.log_commands": "Log Commando's",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Criado com sucesso",
"filament::resources.columns.motto": "Lema",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Logros",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Help Question",
"filament::resources.columns.reason": "Reason",
"filament::resources.stats.photos_count.title": "Photos",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Main",
"filament::resources.resources.writeable-boxes.label": "Text Block",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Setting",
"filament::resources.resources.shop-orders.label": "Order",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Suodata",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Male",
"filament::resources.inputs.log_commands": "Log commands",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Luotu onnistuneesti",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Achievements",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Question d'aide",
"filament::resources.columns.reason": "Raison",
"filament::resources.stats.photos_count.title": "Foto's",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Principal",
"filament::resources.resources.writeable-boxes.label": "Boîte modifiable",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "Paramètre CMS",
"filament::resources.resources.shop-orders.label": "Commande boutique",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filter",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Homme",
"filament::resources.inputs.log_commands": "Log Commando's",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Criado com sucesso",
"filament::resources.columns.motto": "Devise",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Succès",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Help Question",
"filament::resources.columns.reason": "Reason",
"filament::resources.stats.photos_count.title": "Photos",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Main",
"filament::resources.resources.writeable-boxes.label": "Text Block",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Setting",
"filament::resources.resources.shop-orders.label": "Order",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Szűrő",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Male",
"filament::resources.inputs.log_commands": "Log commands",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Sikeresen létrehozva",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Achievements",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Domanda di aiuto",
"filament::resources.columns.reason": "Motivo",
"filament::resources.stats.photos_count.title": "Foto's",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Principale",
"filament::resources.resources.writeable-boxes.label": "Casella modificabile",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "Impostazione CMS",
"filament::resources.resources.shop-orders.label": "Ordine negozio",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filter",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Uomo",
"filament::resources.inputs.log_commands": "Log Commando's",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Criado com sucesso",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Successi",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-45
View File
@@ -37,11 +37,8 @@
"commandocentrum.version": "Versie",
"commandocentrum.service": "Service",
"commandocentrum.status": "Status",
"commandocentrum.emulator_updates": "Emulator Updates",
"commandocentrum.emulator_updates_desc": "Configureer en update de emulator",
"commandocentrum.check_updates": "Check Updates",
"commandocentrum.build": "Bouwen",
"commandocentrum.sql_updates": "SQL Updates",
"commandocentrum.save": "Opslaan",
"commandocentrum.github_url": "GitHub URL",
"commandocentrum.jar_direct_url": "JAR Direct URL",
@@ -52,25 +49,9 @@
"commandocentrum.db_host": "DB Host",
"commandocentrum.db_name": "DB Naam",
"commandocentrum.service_name": "Service Naam",
"commandocentrum.emulator_backups": "Emulator Backups",
"commandocentrum.emulator_backups_desc": "Bekijk en herstel emulator backups",
"commandocentrum.no_backups": "Nog geen backups beschikbaar",
"commandocentrum.backups_auto": "Backups worden automatisch aangemaakt bij elke emulator update",
"commandocentrum.restore": "Herstellen",
"commandocentrum.nitro_client": "Nitro Client",
"commandocentrum.nitro_client_desc": "Configureer en update Nitro",
"commandocentrum.auto_detect": "Auto Detect",
"commandocentrum.generate_configs": "Genereer Configs",
"commandocentrum.client_path": "Client Pad",
"commandocentrum.renderer_path": "Renderer Pad",
"commandocentrum.build_path": "Build Pad",
"commandocentrum.webroot": "Webroot",
"commandocentrum.site_url": "Site URL",
"commandocentrum.auto_updates": "Automatische Updates",
"commandocentrum.auto_updates_desc": "Configureer automatische updates",
"commandocentrum.enable_auto_updates": "Automatische Updates Inschakelen",
"commandocentrum.schedule": "Schema (HH:MM)",
"commandocentrum.days": "Dagen (0-6)",
"commandocentrum.clothing_sync": "Kleding Sync",
"commandocentrum.clothing_sync_desc": "Sync catalogus kleding uit FigureMap",
"commandocentrum.sync": "Sync",
@@ -84,9 +65,6 @@
"commandocentrum.webhook_url": "Webhook URL",
"commandocentrum.discord_ranks": "Ranks die Discord notificatie krijgen",
"commandocentrum.discord_ranks_helper": "Laat leeg voor alleen staff (min_staff_rank)",
"commandocentrum.update_history": "Update Geschiedenis",
"commandocentrum.update_history_desc": "Laatste systeem updates",
"commandocentrum.no_updates_found": "Geen updates gevonden",
"commandocentrum.social_login": "Social Login (v1.4)",
"commandocentrum.social_login_desc": "Enable social login providers",
"commandocentrum.google_login": "Google Login",
@@ -128,30 +106,7 @@
"commandocentrum.emulator_restart_failed": "Kon emulator niet herstarten",
"commandocentrum.emulator_online": "Emulator is online en reageert!",
"commandocentrum.emulator_unreachable": "Emulator is niet bereikbaar via RCON",
"commandocentrum.building_emulator": "Emulator wordt gebouwd vanaf source...",
"commandocentrum.emulator_built": "Emulator gebouwd!",
"commandocentrum.build_failed": "Build mislukt",
"commandocentrum.configure_github_url": "Configureer eerst de Emulator GitHub URL",
"commandocentrum.maven_not_installed": "Maven (mvn) is niet geïnstalleerd - kan niet bouwen",
"commandocentrum.building_maven": "Building emulator with Maven...",
"commandocentrum.build_success_jar": "Build succesvol! JAR verplaatst naar :jar. Herstart de emulator.",
"commandocentrum.build_success": "Build succesvol! Herstart de emulator.",
"commandocentrum.build_failed_logs": "Build mislukt - controleer logs",
"commandocentrum.no_pom_xml": "Geen pom.xml gevonden - kan niet bouwen vanaf source",
"commandocentrum.sql_applied": "SQL updates toegepast!",
"commandocentrum.update_complete": "Update controle voltooid",
"commandocentrum.emulator_settings_saved": "Emulator instellingen opgeslagen!",
"commandocentrum.nitro_updated": "Nitro bijgewerkt! Build opnieuw met \"Build\" knop.",
"commandocentrum.nitro_up_to_date": "Nitro is al up-to-date!",
"commandocentrum.building_nitro": "Building Nitro...",
"commandocentrum.nitro_build_success": "Nitro build succesvol!",
"commandocentrum.nitro_build_warning": "Build gestart - controleer handmatig",
"commandocentrum.valid_url_required": "Voer een geldige URL in (bijv. https://epicnabbo.nl)",
"commandocentrum.configs_generated": "Configs gegenereerd & bestaande instellingen behouden!",
"commandocentrum.config_generated_warning": "Config gegenereerd (controleer handmatig)",
"commandocentrum.paths_detected": "Paths gedetecteerd en opgeslagen!",
"commandocentrum.nitro_settings_saved": "Nitro instellingen opgeslagen!",
"commandocentrum.auto_update_saved": "Auto update instellingen opgeslagen!",
"commandocentrum.alerts_saved": "Meldingen opgeslagen!",
"commandocentrum.test_sent": "Test bericht verzonden!",
"commandocentrum.webhook_empty": "Webhook URL is leeg",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Help Question",
"filament::resources.columns.reason": "Reason",
"filament::resources.stats.photos_count.title": "Photos",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Main",
"filament::resources.resources.writeable-boxes.label": "Text Block",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Setting",
"filament::resources.resources.shop-orders.label": "Order",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filter",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Male",
"filament::resources.inputs.log_commands": "Log commands",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Opprettet",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Achievements",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Pytanie pomocy",
"filament::resources.columns.reason": "Powód",
"filament::resources.stats.photos_count.title": "Foto's",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Główny",
"filament::resources.resources.writeable-boxes.label": "Edytowalne pole",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "Ustawienie CMS",
"filament::resources.resources.shop-orders.label": "Zamówienie sklepu",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filter",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Mężczyzna",
"filament::resources.inputs.log_commands": "Log Commando's",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Criado com sucesso",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Osiągnięcia",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Pergunta de ajuda",
"filament::resources.columns.reason": "Motivo",
"filament::resources.stats.photos_count.title": "Foto's",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Principal",
"filament::resources.resources.writeable-boxes.label": "Caixa editável",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "Configuração CMS",
"filament::resources.resources.shop-orders.label": "Pedido da loja",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filter",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Homem",
"filament::resources.inputs.log_commands": "Log Commando's",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Criado com sucesso",
"filament::resources.columns.motto": "Lema",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Conquistas",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Help Question",
"filament::resources.columns.reason": "Reason",
"filament::resources.stats.photos_count.title": "Photos",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Main",
"filament::resources.resources.writeable-boxes.label": "Text Block",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Setting",
"filament::resources.resources.shop-orders.label": "Order",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filtru",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Male",
"filament::resources.inputs.log_commands": "Log commands",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Creat cu succes",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Achievements",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Вопрос помощи",
"filament::resources.columns.reason": "Причина",
"filament::resources.stats.photos_count.title": "Foto's",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Основной",
"filament::resources.resources.writeable-boxes.label": "Редактируемый блок",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "Настройка CMS",
"filament::resources.resources.shop-orders.label": "Заказ магазина",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filter",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Мужской",
"filament::resources.inputs.log_commands": "Log Commando's",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Criado com sucesso",
"filament::resources.columns.motto": "Девиз",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Достижения",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Help Question",
"filament::resources.columns.reason": "Reason",
"filament::resources.stats.photos_count.title": "Photos",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Main",
"filament::resources.resources.writeable-boxes.label": "Text Block",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Setting",
"filament::resources.resources.shop-orders.label": "Order",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filtrera",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Male",
"filament::resources.inputs.log_commands": "Log commands",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Skapades framgångsrikt",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Achievements",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Yardım Sorusu",
"filament::resources.columns.reason": "Sebep",
"filament::resources.stats.photos_count.title": "Foto's",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Ana",
"filament::resources.resources.writeable-boxes.label": "Düzenlenebilir Kutu",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Ayarı",
"filament::resources.resources.shop-orders.label": "Mağaza Siparişi",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Filter",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Erkek",
"filament::resources.inputs.log_commands": "Log Commando's",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Criado com sucesso",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Başarılar",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
Executable → Regular
-4
View File
@@ -782,7 +782,6 @@
"filament::resources.resources.help-questions.label": "Help Question",
"filament::resources.columns.reason": "Reason",
"filament::resources.stats.photos_count.title": "Photos",
"nitro.auto_update_yes": "Yes",
"Emulator update settings have been saved.": "Emulator update settings have been saved.",
"Test Failed": "Test Failed",
"nitro.cancel": "Cancel",
@@ -844,7 +843,6 @@
"Logo generator": "Logo generator",
"filament::resources.tabs.Main": "Main",
"filament::resources.resources.writeable-boxes.label": "Text Block",
"nitro.auto_update": "Auto-update",
"filament::resources.resources.cms-settings.label": "CMS Setting",
"filament::resources.resources.shop-orders.label": "Order",
"Page Transitions": "Page Transitions",
@@ -1072,7 +1070,6 @@
"nitro.test_failed": "Test Failed",
"Filter": "Фільтр",
"No tags found.": "No tags found.",
"nitro.auto": "Auto",
"filament::resources.common.Male": "Male",
"filament::resources.inputs.log_commands": "Log commands",
"Klik op een foto om deze te vergroten": "Klik op een foto om deze te vergroten",
@@ -1376,7 +1373,6 @@
"filament::resources.resources.rooms.label": "Room",
"Created successfully": "Успішно створено",
"filament::resources.columns.motto": "Motto",
"nitro.auto_update_no": "No",
"filament::resources.resources.achievements.plural": "Achievements",
"Enter one of your recovery codes if you cannot access your authenticator app.": "Enter one of your recovery codes if you cannot access your authenticator app.",
"filament::resources.columns.badge": "Badge",
File diff suppressed because it is too large. Load diff
-8
View File
@@ -1,8 +0,0 @@
includes:
- phpstan-baseline.neon
parameters:
level: 5
paths:
- app
reportUnmatchedIgnoredErrors: false
+1
View File
@@ -0,0 +1 @@
@import "https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap";@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Nunito", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-700:oklch(50.8% .118 165.612);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-sky-400:oklch(74.6% .16 232.661);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117Line truncated
-48
View File
@@ -1,48 +0,0 @@
import{r as Yn,t as Kn}from"./chunk-BqhQeaEc.js";import{t as Un}from"./axios-BgauIbGG.js";import{l as $n,t as Xn,u as je}from"./swiper-B7Yxk788.js";var Jn=Kn(((e,t)=>{(function(){var i=this;(function(){(function(){this.Turbolinks={supported:(function(){return window.history.pushState!=null&&window.requestAnimationFrame!=null&&window.addEventListener!=null})(),visit:function(r,o){return n.controller.visit(r,o)},clearCache:function(){return n.controller.clearCache()},setProgressBarDelay:function(r){return n.controller.setProgressBarDelay(r)}}}).call(this)}).call(i);var n=i.Turbolinks;(function(){(function(){var r,o,a,s=[].slice;n.copyObject=function(l){var c,u={},d;for(c in l)d=l[c],u[c]=d;return u},n.closest=function(l,c){return r.call(l,c)},r=(function(){var l,c;return l=document.documentElement,(c=l.closest)!=null?c:function(u){var d;for(d=this;d;){if(d.nodeType===Node.ELEMENT_NODE&&o.call(d,u))return d;d=d.parentNode}}})(),n.defer=function(l){return setTimeout(l,1)},n.throttle=function(l){var c;return c=null,function(){var u;return u=1<=arguments.length?s.call(arguments,0):[],c??(c=requestAnimationFrame((function(d){return function(){return c=null,l.apply(d,u)}})(this)))}},n.dispatch=function(l,c){var u,d,f,h,p,v;return p=c??{},v=p.target,u=p.cancelable,d=p.data,f=document.createEvent("Events"),f.initEvent(l,!0,u===!0),f.data=d??{},f.cancelable&&!a&&(h=f.preventDefault,f.preventDefault=function(){return this.defaultPrevented||Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}}),h.call(this)}),(v??document).dispatchEvent(f),f},a=(function(){var l;return l=document.createEvent("Events"),l.initEvent("test",!0,!0),l.preventDefault(),l.defaultPrevented})(),n.match=function(l,c){return o.call(l,c)},o=(function(){var l,c,u,d;return l=document.documentElement,(c=(u=(d=l.matchesSelector)!=null?d:l.webkitMatchesSelector)!=null?u:l.msMatchesSelector)!=null?c:l.mozMatchesSelector})(),n.uuid=function(){var l,c,u;for(u="",l=c=1;36>=c;l=++c)u+=l===9||l===14||l===19||l===24?"-":l===15?"4":l===20?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16);return u}}).call(this),function(){n.Location=(function(){function r(c){var u,d;c??="",d=document.createElement("a"),d.href=c.toString(),this.absoluteURL=d.href,u=d.hash.length,2>u?this.requestURL=this.absoluteURL:(this.requestURL=this.absoluteURL.slice(0,-u),this.anchor=d.hash.slice(1))}var o,a,s,l;return r.wrap=function(c){return c instanceof this?c:new this(c)},r.prototype.getOrigin=function(){return this.absoluteURL.split("/",3).join("/")},r.prototype.getPath=function(){var c,u;return(c=(u=this.requestURL.match(/\/\/[^\/]*(\/[^?;]*)/))!=null?u[1]:void 0)!=null?c:"/"},r.prototype.getPathComponents=function(){return this.getPath().split("/").slice(1)},r.prototype.getLastPathComponent=function(){return this.getPathComponents().slice(-1)[0]},r.prototype.getExtension=function(){var c,u;return(c=(u=this.getLastPathComponent().match(/\.[^.]*$/))!=null?u[0]:void 0)!=null?c:""},r.prototype.isHTML=function(){return this.getExtension().match(/^(?:|\.(?:htm|html|xhtml))$/)},r.prototype.isPrefixedBy=function(c){var u;return u=a(c),this.isEqualTo(c)||l(this.absoluteURL,u)},r.prototype.isEqualTo=function(c){return this.absoluteURL===c?.absoluteURL},r.prototype.toCacheKey=function(){return this.requestURL},r.prototype.toJSON=function(){return this.absoluteURL},r.prototype.toString=function(){return this.absoluteURL},r.prototype.valueOf=function(){return this.absoluteURL},a=function(c){return o(c.getOrigin()+c.getPath())},o=function(c){return s(c,"/")?c:c+"/"},l=function(c,u){return c.slice(0,u.length)===u},s=function(c,u){return c.slice(-u.length)===u},r})()}.call(this),function(){var r=function(o,a){return function(){return o.apply(a,arguments)}};n.HttpRequest=(function(){function o(a,s,l){this.delegate=a,this.requestCanceled=r(this.requestCanceled,this),this.requestTimedOut=r(this.requestTimedOut,this),this.requestFailed=r(this.requestFailed,this),this.requestLoaded=r(this.requestLoaded,this),this.requestProgressed=r(this.requestProgressed,this),this.url=n.Location.wrap(s).requestURL,this.referrer=n.Location.wrap(l).absoluteURL,this.createXHR()}return o.NETWORK_FAILURE=0,o.TIMEOUT_FAILURE=-1,o.timeout=60,o.prototype.send=function(){var a;return this.xhr&&!this.sent?(this.notifyApplicationBeforeRequestStart(),this.setProgress(0),this.xhr.send(),this.sent=!0,typeof(a=this.delegate).requestStarted=="function"?a.requestStarted():void 0):void 0},o.prototype.cancel=function(){return this.xhr&&this.sent?this.xhr.abort():void 0},o.prototype.requestProgressed=function(a){return a.lengthComputable?this.setProgress(a.loaded/a.total):void 0},o.prototype.requestLoaded=function(){return this.endRequest((function(a){return function(){var s;return 200<=(s=a.xhr.status)&&300>s?a.delegate.requestCompletedWithResponse(a.xhr.responseText,a.xhr.getResponseHeader("Turbolinks-Location")):(a.failed=!0,a.delegate.requestFailedWithStatusCode(a.xhr.status,a.xhLine truncated
position: fixed;
display: block;
top: 0;
left: 0;
height: 3px;
background: #0076ff;
z-index: 9999;
transition: width `+a+"ms ease-out, opacity "+a/2+"ms "+a/2+`ms ease-in;
transform: translate3d(0, 0, 0);
}`,o.prototype.show=function(){return this.visible?void 0:(this.visible=!0,this.installStylesheetElement(),this.installProgressElement(),this.startTrickling())},o.prototype.hide=function(){return this.visible&&!this.hiding?(this.hiding=!0,this.fadeProgressElement((function(s){return function(){return s.uninstallProgressElement(),s.stopTrickling(),s.visible=!1,s.hiding=!1}})(this))):void 0},o.prototype.setValue=function(s){return this.value=s,this.refresh()},o.prototype.installStylesheetElement=function(){return document.head.insertBefore(this.stylesheetElement,document.head.firstChild)},o.prototype.installProgressElement=function(){return this.progressElement.style.width=0,this.progressElement.style.opacity=1,document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()},o.prototype.fadeProgressElement=function(s){return this.progressElement.style.opacity=0,setTimeout(s,1.5*a)},o.prototype.uninstallProgressElement=function(){return this.progressElement.parentNode?document.documentElement.removeChild(this.progressElement):void 0},o.prototype.startTrickling=function(){return this.trickleInterval!=null?this.trickleInterval:this.trickleInterval=setInterval(this.trickle,a)},o.prototype.stopTrickling=function(){return clearInterval(this.trickleInterval),this.trickleInterval=null},o.prototype.trickle=function(){return this.setValue(this.value+Math.random()/100)},o.prototype.refresh=function(){return requestAnimationFrame((function(s){return function(){return s.progressElement.style.width=10+90*s.value+"%"}})(this))},o.prototype.createStylesheetElement=function(){var s;return s=document.createElement("style"),s.type="text/css",s.textContent=this.constructor.defaultCSS,s},o.prototype.createProgressElement=function(){var s;return s=document.createElement("div"),s.className="turbolinks-progress-bar",s},o})()}.call(this),function(){var r=function(o,a){return function(){return o.apply(a,arguments)}};n.BrowserAdapter=(function(){function o(c){this.controller=c,this.showProgressBar=r(this.showProgressBar,this),this.progressBar=new n.ProgressBar}var a,s,l;return l=n.HttpRequest,a=l.NETWORK_FAILURE,s=l.TIMEOUT_FAILURE,o.prototype.visitProposedToLocationWithAction=function(c,u){return this.controller.startVisitToLocationWithAction(c,u)},o.prototype.visitStarted=function(c){return c.issueRequest(),c.changeHistory(),c.loadCachedSnapshot()},o.prototype.visitRequestStarted=function(c){return this.progressBar.setValue(0),c.hasCachedSnapshot()||c.action!=="restore"?this.showProgressBarAfterDelay():this.showProgressBar()},o.prototype.visitRequestProgressed=function(c){return this.progressBar.setValue(c.progress)},o.prototype.visitRequestCompleted=function(c){return c.loadResponse()},o.prototype.visitRequestFailedWithStatusCode=function(c,u){switch(u){case a:case s:return this.reload();default:return c.loadResponse()}},o.prototype.visitRequestFinished=function(c){return this.hideProgressBar()},o.prototype.visitCompleted=function(c){return c.followRedirect()},o.prototype.pageInvalidated=function(){return this.reload()},o.prototype.showProgressBarAfterDelay=function(){return this.progressBarTimeout=setTimeout(this.showProgressBar,this.controller.progressBarDelay)},o.prototype.showProgressBar=function(){return this.progressBar.show()},o.prototype.hideProgressBar=function(){return this.progressBar.hide(),clearTimeout(this.progressBarTimeout)},o.prototype.reload=function(){return window.location.reload()},o})()}.call(this),function(){var r=function(o,a){return function(){return o.apply(a,arguments)}};n.History=(function(){function o(a){this.delegate=a,this.onPageLoad=r(this.onPageLoad,this),this.onPopState=r(this.onPopState,this)}return o.prototype.start=function(){return this.started?void 0:(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.started=!0)},o.prototype.stop=function(){return this.started?(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1):void 0},o.prototype.push=function(a,s){return a=n.Location.wrap(a),this.update("push",a,s)},o.prototype.replace=function(a,s){return a=n.Location.wrap(a),this.update("replace",a,s)},o.prototype.onPopState=function(a){var s,l,c,u;return this.shouldHandlePopState()&&(u=(l=a.state)!=null?l.turbolinks:void 0)?(s=n.Location.wrap(window.location),c=u.restorationIdentifier,this.delegate.historyPoppedToLocationWithRestorationIdentifier(s,c)):void 0},o.prototype.onPageLoad=function(a){return n.defer((function(s){return function(){return s.pageLoaded=!0}})(this))},o.prototype.shouldHandlePopState=function(){return this.pageIsLoaded()},o.prototype.pageIsLoaded=function(){return this.pageLoaded||document.readyState==="complete"},o.prototype.update=function(a,s,l){var c;return c={turbolinks:{restorationIdentifier:l}},history[a+"State"](c,null,s)},o})()}.call(this),function(){n.HeadDetails=(function(){function r(u){var d,f,h,p,v,g;for(this.elements={},h=0,v=u.length; Line truncated
Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.
For more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements
——
Suppress this warning by adding a \`data-turbolinks-suppress-warning\` attribute to: %s`,o.outerHTML)}})()}.call(this),function(){var r,o,a;n.start=function(){return o()?(n.controller??=r(),n.controller.start()):void 0},o=function(){return window.Turbolinks??(window.Turbolinks=n),a()},r=function(){var s;return s=new n.Controller,s.adapter=new n.BrowserAdapter(s),s},a=function(){return window.Turbolinks===n},a()&&n.start()}.call(this)}).call(this),typeof t=="object"&&t.exports?t.exports=n:typeof define=="function"&&define.amd&&define(n)}).call(e)})),Gn=Yn(Jn(),1);window.axios=Un;window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest";Gn.default.start();var Zn=(function(){function e(t,i){i===void 0&&(i=[]),this._eventType=t,this._eventFunctions=i}return e.prototype.init=function(){var t=this;this._eventFunctions.forEach(function(i){typeof window<"u"&&window.addEventListener(t._eventType,i)})},e})(),w=new((function(){function e(){this._instances={Accordion:{},Carousel:{},Collapse:{},Dial:{},Dismiss:{},Drawer:{},Dropdown:{},Modal:{},Popover:{},Tabs:{},Tooltip:{},InputCounter:{},CopyClipboard:{},Datepicker:{}}}return e.prototype.addInstance=function(t,i,n,r){if(r===void 0&&(r=!1),!this._instances[t])return console.warn("Flowbite: Component ".concat(t," does not exist.")),!1;if(this._instances[t][n]&&!r){console.warn("Flowbite: Instance with ID ".concat(n," already exists."));return}r&&this._instances[t][n]&&this._instances[t][n].destroyAndRemoveInstance(),this._instances[t][n||this._generateRandomId()]=i},e.prototype.getAllInstances=function(){return this._instances},e.prototype.getInstances=function(t){return this._instances[t]?this._instances[t]:(console.warn("Flowbite: Component ".concat(t," does not exist.")),!1)},e.prototype.getInstance=function(t,i){if(this._componentAndInstanceCheck(t,i)){if(!this._instances[t][i]){console.warn("Flowbite: Instance with ID ".concat(i," does not exist."));return}return this._instances[t][i]}},e.prototype.destroyAndRemoveInstance=function(t,i){this._componentAndInstanceCheck(t,i)&&(this.destroyInstanceObject(t,i),this.removeInstance(t,i))},e.prototype.removeInstance=function(t,i){this._componentAndInstanceCheck(t,i)&&delete this._instances[t][i]},e.prototype.destroyInstanceObject=function(t,i){this._componentAndInstanceCheck(t,i)&&this._instances[t][i].destroy()},e.prototype.instanceExists=function(t,i){return!(!this._instances[t]||!this._instances[t][i])},e.prototype._generateRandomId=function(){return Math.random().toString(36).substr(2,9)},e.prototype._componentAndInstanceCheck=function(t,i){return this._instances[t]?this._instances[t][i]?!0:(console.warn("Flowbite: Instance with ID ".concat(i," does not exist.")),!1):(console.warn("Flowbite: Component ".concat(t," does not exist.")),!1)},e})());typeof window<"u"&&(window.FlowbiteInstances=w);var Qt=function(){return Qt=Object.assign||function(e){for(var t,i=1,n=arguments.length;i<n;i++){t=arguments[i];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},Qt.apply(this,arguments)},te={alwaysOpen:!1,activeClasses:"bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-white",inactiveClasses:"text-gray-500 dark:text-gray-400",onOpen:function(){},onClose:function(){},onToggle:function(){}},Qn={id:null,override:!0},nn=(function(){function e(t,i,n,r){t===void 0&&(t=null),i===void 0&&(i=[]),n===void 0&&(n=te),r===void 0&&(r=Qn),this._instanceId=r.id?r.id:t.id,this._accordionEl=t,this._items=i,this._options=Qt(Qt({},te),n),this._initialized=!1,this.init(),w.addInstance("Accordion",this,this._instanceId,r.override)}return e.prototype.init=function(){var t=this;this._items.length&&!this._initialized&&(this._items.forEach(function(i){i.active&&t.open(i.id);var n=function(){t.toggle(i.id)};i.triggerEl.addEventListener("click",n),i.clickHandler=n}),this._initialized=!0)},e.prototype.destroy=function(){this._items.length&&this._initialized&&(this._items.forEach(function(t){t.triggerEl.removeEventListener("click",t.clickHandler),delete t.clickHandler}),this._initialized=!1)},e.prototype.removeInstance=function(){w.removeInstance("Accordion",this._instanceId)},e.prototype.destroyAndRemoveInstance=function(){this.destroy(),this.removeInstance()},e.prototype.getItem=function(t){return this._items.filter(function(i){return i.id===t})[0]},e.prototype.open=function(t){var i,n,r=this,o=this.getItem(t);this._options.alwaysOpen||this._items.map(function(a){var s,l;a!==o&&((s=a.triggerEl.classList).remove.apply(s,r._options.activeClasses.split(" ")),(l=a.triggerEl.classList).add.apply(l,r._options.inactiveClasses.split(" ")),a.targetEl.classList.add("hidden"),a.triggerEl.setAttribute("aria-expanded","false"),a.active=!1,a.iconEl&&a.iconEl.classList.add("rotate-180"))}),(i=o.triggerEl.classList).add.apply(i,this._options.activeClasses.split(" ")),(n=o.triggerEl.classList).remove.apply(n,this._options.inactiveClasses.split(" ")),o.triggerEl.setAttribute("aria-expanded","true"),o.targetEl.classList.remove(Line truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Lo(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Ao(e,t){if(t&&(typeof t=="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return ko(e)}function Fe(e,t){return Fe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,n){return i.__proto__=n,i},Fe(e,t)}function P(e,t){return bo(e)||xo(e,t)||xn(e,t)||Do()}function Io(e,t){for(;!{}.hasOwnProperty.call(e,t)&&(e=Q(e))!==null;);return e}function Ht(e){return _o(e)||Eo(e)||xn(e)||Lo()}function Co(e,t){if(typeof e!="object"||!e)return e;var i=e[Symbol.toPrimitive];if(i!==void 0){var n=i.call(e,t||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function So(e){var t=Co(e,"string");return typeof t=="symbol"?t:t+""}function ve(e){"@babel/helpers - typeof";return ve=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ve(e)}function xn(e,t){if(e){if(typeof e=="string")return Ve(e,t);var i={}.toString.call(e).slice(8,-1);return i==="Object"&&e.constructor&&(i=e.constructor.name),i==="Map"||i==="Set"?Array.from(e):i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Ve(e,t):void 0}}function W(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function di(e){return e[e.length-1]}function lt(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return i.forEach(function(r){e.includes(r)||e.push(r)}),e}function Ae(e,t){return e?e.split(t):[]}function hi(e,t,i){return(t===void 0||e>=t)&&(i===void 0||e<=i)}function Dn(e,t,i){return e<t?t:e>i?i:e}function wt(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:"",o=Object.keys(i).reduce(function(s,l){var c=i[l];return typeof c=="function"&&(c=c(n)),"".concat(s," ").concat(l,'="').concat(c,'"')},e);r+="<".concat(o,"></").concat(e,">");var a=n+1;return a<t?wt(e,t,i,a,r):r}function fi(e){return e.replace(/>\s+/g,">").replace(/\s+</,"<")}function qe(e){return new Date(e).setHours(0,0,0,0)}function dt(){return new Date().setHours(0,0,0,0)}function G(){switch(arguments.length){case 0:return dt();case 1:return qe(arguments.length<=0?void 0:arguments[0])}var e=new Date(0);return e.setFullYear.apply(e,arguments),e.setHours(0,0,0,0)}function ft(e,t){var i=new Date(e);return i.setDate(i.getDate()+t)}function Oo(e,t){return ft(e,t*7)}function ge(e,t){var i=new Date(e),n=i.getMonth()+t,r=n%12;r<0&&(r+=12);var o=i.setMonth(n);return i.getMonth()!==r?i.setDate(0):o}function pt(e,t){var i=new Date(e),n=i.getMonth(),r=i.setFullYear(i.getFullYear()+t);return n===1&&i.getMonth()===2?i.setDate(0):r}function qi(e,t){return(e-t+7)%7}function me(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,n=new Date(e).getDay();return ft(e,qi(t,i)-qi(n,i))}function To(e){var t=me(e,4,1),i=me(new Date(t).setMonth(0,4),4,1);return Math.round((t-i)/6048e5)+1}function nt(e,t){var i=new Date(e).getFullYear();return Math.floor(i/t)*t}var Ne=/dd?|DD?|mm?|MM?|yy?(?:yy)?/,Po=/[\s!-/:-@[-`{-~年月日]+/,Ie={},Ni={y:function(t,i){return new Date(t).setFullYear(parseInt(i,10))},m:function(t,i,n){var r=new Date(t),o=parseInt(i,10)-1;if(isNaN(o)){if(!i)return NaN;var a=i.toLowerCase(),s=function(c){return c.toLowerCase().startsWith(a)};if(o=n.monthsShort.findIndex(s),o<0&&(o=n.months.findIndex(s)),o<0)return NaN}return r.setMonth(o),r.getMonth()!==Ln(o)?r.setDate(0):r.getTime()},d:function(t,i){return new Date(t).setDate(parseInt(i,10))}},Ro={d:function(t){return t.getDate()},dd:function(t){return $t(t.getDate(),2)},D:function(t,i){return i.daysShort[t.getDay()]},DD:function(t,i){return i.days[t.getDay()]},m:function(t){return t.getMonth()+1},mm:function(t){return $t(t.getMonth()+1,2)},M:function(t,i){return i.monthsShort[t.getMonth()]},MM:function(t,i){return i.months[t.getMonth()]},y:function(t){return t.getFullYear()},yy:function(t){return $t(t.getFullYear(),2).slice(-2)},yyyy:function(t){return $t(t.getFullYear(),4)}};function Ln(e){return e>-1?e%12:Ln(e+12)}function $t(e,t){return e.toString().padStart(t,"0")}function An(e){if(typeof e!="string")throw new Error("Invalid date format.");if(e in Ie)return Ie[e];var t=e.split(Ne),i=e.match(new RegExp(Ne,"g"));if(t.length===0||!i)throw new Error("Invalid date format.");var n=i.map(function(o){return Ro[o]}),r=Object.keys(Ni).reduce(function(o,a){return i.find(function(s){return s[0]!=="D"&&s[0].toLowerCase()===a})&&o.push(a),o},[]);return Ie[e]={parser:function(a,s){var l=a.split(Po).reduce(function(c,u,d){if(u.length>0&&i[d]){var f=i[d][0];f==="M"?c.m=u:f!=="D"&&(c[f]=u)}return c},{});return r.reduce(function(c,u){var d=Ni[u](c,l[u],s);return isNLine truncated
<div class="datepicker-picker inline-block rounded-lg bg-white dark:bg-gray-700 shadow-lg p-4">
<div class="datepicker-header">
<div class="datepicker-title bg-white dark:bg-gray-700 dark:text-white px-2 py-3 text-center font-semibold"></div>
<div class="datepicker-controls flex justify-between mb-2">
<button type="button" class="bg-white dark:bg-gray-700 rounded-lg text-gray-500 dark:text-white hover:bg-gray-100 dark:hover:bg-gray-600 hover:text-gray-900 dark:hover:text-white text-lg p-2.5 focus:outline-none focus:ring-2 focus:ring-gray-200 prev-btn"></button>
<button type="button" class="text-sm rounded-lg text-gray-900 dark:text-white bg-white dark:bg-gray-700 font-semibold py-2.5 px-5 hover:bg-gray-100 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-gray-200 view-switch"></button>
<button type="button" class="bg-white dark:bg-gray-700 rounded-lg text-gray-500 dark:text-white hover:bg-gray-100 dark:hover:bg-gray-600 hover:text-gray-900 dark:hover:text-white text-lg p-2.5 focus:outline-none focus:ring-2 focus:ring-gray-200 next-btn"></button>
</div>
</div>
<div class="datepicker-main p-1"></div>
<div class="datepicker-footer">
<div class="datepicker-controls flex space-x-2 rtl:space-x-reverse mt-2">
<button type="button" class="%buttonClass% today-btn text-white bg-blue-700 !bg-primary-700 dark:bg-blue-600 dark:!bg-primary-600 hover:bg-blue-800 hover:!bg-primary-800 dark:hover:bg-blue-700 dark:hover:!bg-primary-700 focus:ring-4 focus:ring-blue-300 focus:!ring-primary-300 font-medium rounded-lg text-sm px-5 py-2 text-center w-1/2"></button>
<button type="button" class="%buttonClass% clear-btn text-gray-900 dark:text-white bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-600 focus:ring-4 focus:ring-blue-300 focus:!ring-primary-300 font-medium rounded-lg text-sm px-5 py-2 text-center w-1/2"></button>
</div>
</div>
</div>
</div>`),qo=fi(`<div class="days">
<div class="days-of-week grid grid-cols-7 mb-1">`.concat(wt("span",7,{class:"dow block flex-1 leading-9 border-0 rounded-lg cursor-default text-center text-gray-900 font-semibold text-sm"}),`</div>
<div class="datepicker-grid w-64 grid grid-cols-7">`).concat(wt("span",42,{class:"block flex-1 leading-9 border-0 rounded-lg cursor-default text-center text-gray-900 font-semibold text-sm h-6 leading-6 text-sm font-medium text-gray-500 dark:text-gray-400"}),`</div>
</div>`)),No=fi(`<div class="calendar-weeks">
<div class="days-of-week flex"><span class="dow h-6 leading-6 text-sm font-medium text-gray-500 dark:text-gray-400"></span></div>
<div class="weeks">`.concat(wt("span",6,{class:"week block flex-1 leading-9 border-0 rounded-lg cursor-default text-center text-gray-900 font-semibold text-sm"}),`</div>
</div>`)),vi=(function(){function e(t,i){ct(this,e),Object.assign(this,i,{picker:t,element:Y('<div class="datepicker-view flex"></div>').firstChild,selected:[]}),this.init(this.picker.datepicker.config)}return ut(e,[{key:"init",value:function(i){i.pickLevel!==void 0&&(this.isMinView=this.id===i.pickLevel),this.setOptions(i),this.updateFocus(),this.updateSelection()}},{key:"performBeforeHook",value:function(i,n,r){var o=this.beforeShow(new Date(r));switch(ve(o)){case"boolean":o={enabled:o};break;case"string":o={classes:o}}if(o){if(o.enabled===!1&&(i.classList.add("disabled"),lt(this.disabled,n)),o.classes){var a,s=o.classes.split(/\s+/);(a=i.classList).add.apply(a,Ht(s)),s.includes("disabled")&&lt(this.disabled,n)}o.content&&Mo(i,o.content)}}}])})(),jo=(function(e){function t(i){return ct(this,t),ci(this,t,[i,{id:0,name:"days",cellClass:"day"}])}return ui(t,e),ut(t,[{key:"init",value:function(n){if(!(arguments.length>1&&arguments[1]!==void 0)||arguments[1]){var r=Y(qo).firstChild;this.dow=r.firstChild,this.grid=r.lastChild,this.element.appendChild(r)}St(Q(t.prototype),"init",this).call(this,n)}},{key:"setOptions",value:function(n){var r=this,o;if(W(n,"minDate")&&(this.minDate=n.minDate),W(n,"maxDate")&&(this.maxDate=n.maxDate),n.datesDisabled&&(this.datesDisabled=n.datesDisabled),n.daysOfWeekDisabled&&(this.daysOfWeekDisabled=n.daysOfWeekDisabled,o=!0),n.daysOfWeekHighlighted&&(this.daysOfWeekHighlighted=n.daysOfWeekHighlighted),n.todayHighlight!==void 0&&(this.todayHighlight=n.todayHighlight),n.weekStart!==void 0&&(this.weekStart=n.weekStart,this.weekEnd=n.weekEnd,o=!0),n.locale){var a=this.locale=n.locale;this.dayNames=a.daysMin,this.switchLabelFormat=a.titleFormat,o=!0}if(n.beforeShowDay!==void 0&&(this.beforeShow=typeof n.beforeShowDay=="function"?n.beforeShowDay:void 0),n.calendarWeeks!==void 0)if(n.calendarWeeks&&!this.calendarWeeks){var s=Y(No).firstChild;this.calendarWeeks={element:s,dow:s.firstChild,weeks:s.lastChild},this.element.insertBefore(s,this.element.firstChild)}else this.calendarWeeks&&!n.calendarWeeks&&(this.element.removeChild(this.calendarWeeks.element),this.calendarWeeks=null);n.showDaysOfWeek!==void 0&&(n.showDaysOfWeek?(It(this.dow),this.calendarWeeks&&It(this.calendarWeeks.dow)):(At(this.dow),this.calendarWeeks&&At(this.calendarWeeks.dow))),o&&Array.from(this.dow.children).forEach(function(l,c){var u=(r.weekStart+c)%7;l.textContent=r.dayNames[u],l.className=r.daysOfWeekDisabled.includes(u)?"dow disabled text-center h-6 leading-6 text-sm font-medium text-gray-500 dark:text-gray-400 cursor-not-allowed":"dow text-center h-6 leading-6 text-sm font-medium text-gray-500 dark:text-gray-400"})}},{key:"updateFocus",value:function(){var n=new Date(this.picker.viewDate),r=n.getFullYear(),o=n.getMonth(),a=G(r,o,1),s=me(a,this.weekStart,this.weekStart);this.first=a,this.last=G(r,o+1,0),this.start=s,this.focused=this.picker.viewDate}},{key:"updateSelection",value:function(){var n=this.picker.datepicker,r=n.dates,o=n.rangepicker;this.selected=r,o&&(this.range=o.dates)}},{key:"render",value:function(){var n=this;this.today=this.todayHighlight?dt():void 0,this.disabled=Ht(this.datesDisabled);var r=Tt(this.focused,this.switchLabelFormat,this.locale);if(this.picker.setViewSwitchLabel(r),this.picker.setPrevBtnDisabled(this.first<=this.minDate),this.picker.setNextBtnDisabled(this.last>=this.maxDate),this.calendarWeeks){var o=me(this.first,1,1);Array.from(this.calendarWeeks.weeks.children).forEach(function(a,s){a.textContent=To(Oo(o,s))})}Array.from(this.grid.children).forEach(function(a,s){var l=a.classList,c=ft(n.start,s),u=new Date(c),d=u.getDay();if(a.className="datepicker-cell hover:bg-gray-100 dark:hover:bg-gray-600 block flex-1 leading-9 border-0 rounded-lg cursor-pointer text-center text-gray-900 dark:text-white font-semibold text-sm ".concat(n.cellClass),a.dataset.date=c,a.textContent=u.getDate(),c<n.first?l.add("prev","text-gray-500","dark:text-white"):c>n.last&&l.add("next","text-gray-500","dark:text-white"),n.today===c&&l.add("today","bg-gray-100","dark:bg-gray-600"),(c<n.minDate||c>n.maxDate||n.disabled.includes(c))&&(l.add("disabled","cursor-not-allowed","text-gray-400","dark:text-gray-500"),l.remove("hover:bg-gray-100","dark:hover:bg-gray-600","text-gray-900","dark:text-white","cursor-pointer")),n.daysOfWeekDisabled.includes(d)&&(l.add("disabled","cursor-not-allowed","text-gray-400","dark:text-gray-500"),l.remove("hover:bg-gray-100","dark:hover:bg-gray-600","text-gray-900","dark:text-white","cursor-pointer"),lt(n.disabled,c)),n.daysOfWeekHighlighted.includes(d)&&l.add("highlighted"),n.range){var f=P(n.range,2),h=f[0],p=f[1];c>h&&c<p&&(l.add("range","bg-gray-200","dark:bg-gray-600"),l.remove("rounded-lg","rounded-l-lg","rounded-r-lg")),c===h&&(l.add("range-start","bg-gray-100","dark:bg-gray-600","rounded-l-lg"),l.remove("rounded-lg","rounded-r-lg")),c===p&&(l.add("range-end","bg-gray-100","dark:bg-gray-600","rounded-r-lg"),l.remove("rounded-lg","rounded-l-lg"))}n.selected.includes(c)&&(l.adLine truncated
Atom CMS is a CMS for made for the community to enjoy. You can join our wonderful community at https://discord.gg/rX3aShUHdg
`,"color: #14619c; -webkit-text-stroke: 2px black; font-size: 32px; font-weight: bold;","");
+1
View File
@@ -0,0 +1 @@
:root{--swiper-theme-color:#007aff}:host{z-index:1;margin-left:auto;margin-right:auto;display:block;position:relative}.swiper{z-index:1;margin-left:auto;margin-right:auto;padding:0;list-style:none;display:block;position:relative;overflow:hidden}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{z-index:1;width:100%;height:100%;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function,initial);box-sizing:content-box;display:flex;position:relative}.swiper-android .swiper-slide,.swiper-ios .swiper-slide,.swiper-wrapper{transform:translate(0,0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;transition-property:transform;display:block;position:relative}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{backface-visibility:hidden;transform:translateZ(0)}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-slide,.swiper-3d .swiper-cube-shadow{transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{scrollbar-width:none;-ms-overflow-style:none;overflow:auto}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-slides-offset-before);scroll-margin-inline-start:var(--swiper-slides-offset-before)}.swiper-css-mode.swiper-horizontal>.swiper-wrapper>.swiper-slide:last-child{margin-inline-end:var(--swiper-slides-offset-after)}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-slides-offset-before);scroll-margin-block-start:var(--swiper-slides-offset-before)}.swiper-css-mode.swiper-vertical>.swiper-wrapper>.swiper-slide:last-child{margin-block-end:var(--swiper-slides-offset-after)}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper:before{content:"";flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper:before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper:before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-slide-shadow-bottom{pointer-events:none;z-index:10;width:100%;height:100%;position:absolute;top:0;left:0}.swiper-3d .swiper-slide-shadow{background:#00000026}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(270deg,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(90deg,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(#0000,#00000080)}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(#00000080,#0000)}.swiper-lazy-preloader{z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-top-color:#0000;border-radius:50%;width:42px;height:42px;margin-top:-21px;margin-left:-21px;position:absolute;top:50%;left:50%}:is(.swiper:not(.swiper-watch-progress),.swiper-watch-progress .swiper-slide-visible) .swiper-lazy-preloader{animation:1s linear infinite swiper-preloader-spin}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.swiper-pagination{text-align:center;z-index:10;transition:opacity .3s;position:absolute;transform:translate(0,0)}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagiLine truncated
-1
View File
@@ -1 +0,0 @@
:root{--swiper-navigation-size: 44px}.swiper-button-prev,.swiper-button-next{position:absolute;width:var(--swiper-navigation-size);height:var(--swiper-navigation-size);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color, var(--swiper-theme-color));&.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}&.swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled &{display:none!important}::slotted(svg),svg{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;transform-origin:center;fill:currentColor;pointer-events:none}}.swiper-button-lock{display:none}.swiper-button-prev,.swiper-button-next{top:var(--swiper-navigation-top-offset, 50%);margin-top:calc(0px - (var(--swiper-navigation-size) / 2))}.swiper-button-prev{left:var(--swiper-navigation-sides-offset, 4px);right:auto;::slotted(.swiper-navigation-icon),.swiper-navigation-icon{transform:rotate(180deg)}}.swiper-button-next{right:var(--swiper-navigation-sides-offset, 4px);left:auto}.swiper-horizontal{.swiper-button-prev,.swiper-button-next,~.swiper-button-prev,~.swiper-button-next{top:var(--swiper-navigation-top-offset, 50%);margin-top:calc(0px - (var(--swiper-navigation-size) / 2));margin-left:0}.swiper-button-prev,~.swiper-button-prev,&.swiper-rtl .swiper-button-next,&.swiper-rtl~.swiper-button-next{left:var(--swiper-navigation-sides-offset, 4px);right:auto}.swiper-button-next,~.swiper-button-next,&.swiper-rtl .swiper-button-prev,&.swiper-rtl~.swiper-button-prev{right:var(--swiper-navigation-sides-offset, 4px);left:auto}.swiper-button-prev,~.swiper-button-prev,&.swiper-rtl .swiper-button-next,&.swiper-rtl~.swiper-button-next{::slotted(.swiper-navigation-icon),.swiper-navigation-icon{transform:rotate(180deg)}}&.swiper-rtl .swiper-button-prev,&.swiper-rtl~.swiper-button-prev{::slotted(.swiper-navigation-icon),.swiper-navigation-icon{transform:rotate(0)}}}.swiper-vertical{.swiper-button-prev,.swiper-button-next,~.swiper-button-prev,~.swiper-button-next{left:var(--swiper-navigation-top-offset, 50%);right:auto;margin-left:calc(0px - (var(--swiper-navigation-size) / 2));margin-top:0}.swiper-button-prev,~.swiper-button-prev{top:var(--swiper-navigation-sides-offset, 4px);bottom:auto;::slotted(.swiper-navigation-icon),.swiper-navigation-icon{transform:rotate(-90deg)}}.swiper-button-next,~.swiper-button-next{bottom:var(--swiper-navigation-sides-offset, 4px);top:auto;::slotted(.swiper-navigation-icon),.swiper-navigation-icon{transform:rotate(90deg)}}}
-13
View File
@@ -1,13 +0,0 @@
import{t as Tr}from"./axios-BgauIbGG.js";import{a as Ir,c as Oe,i as kn,l as Dr,n as $r,o as Br,r as Rr,s as N,t as Ln,u as Ee}from"./swiper-B7Yxk788.js";window.axios=Tr;window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest";(()=>{"use strict";function r(t){return y(t)||m(t)||S(t)||ut()}function ut(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function S(t,n){if(t){if(typeof t=="string")return O(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return O(t,n)}}function m(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function y(t){if(Array.isArray(t))return O(t)}function O(t,n){(n==null||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}function M(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),e.push.apply(e,i)}return e}function it(t){for(var n=1;n<arguments.length;n++){var e=arguments[n]!=null?arguments[n]:{};n%2?M(Object(e),!0).forEach(function(i){ft(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):M(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function ft(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function _t(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function dt(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function rt(t,n,e){return n&&dt(t.prototype,n),e&&dt(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}var pt={alwaysOpen:!1,activeClasses:"bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-white",inactiveClasses:"text-gray-500 dark:text-gray-400",onOpen:function(){},onClose:function(){},onToggle:function(){}};window.Accordion=(function(){function t(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};_t(this,t),this._items=n,this._options=it(it({},pt),e),this._init()}return rt(t,[{key:"_init",value:function(){var e=this;this._items.length&&this._items.map(function(i){i.active&&e.open(i.id),i.triggerEl.addEventListener("click",function(){e.toggle(i.id)})})}},{key:"getItem",value:function(e){return this._items.filter(function(i){return i.id===e})[0]}},{key:"open",value:function(e){var i=this,a,s,u=this.getItem(e);this._options.alwaysOpen||this._items.map(function(l){if(l!==u){var f,h;(f=l.triggerEl.classList).remove.apply(f,r(i._options.activeClasses.split(" "))),(h=l.triggerEl.classList).add.apply(h,r(i._options.inactiveClasses.split(" "))),l.targetEl.classList.add("hidden"),l.triggerEl.setAttribute("aria-expanded",!1),l.active=!1,l.iconEl&&l.iconEl.classList.remove("rotate-180")}}),(a=u.triggerEl.classList).add.apply(a,r(this._options.activeClasses.split(" "))),(s=u.triggerEl.classList).remove.apply(s,r(this._options.inactiveClasses.split(" "))),u.triggerEl.setAttribute("aria-expanded",!0),u.targetEl.classList.remove("hidden"),u.active=!0,u.iconEl&&u.iconEl.classList.add("rotate-180"),this._options.onOpen(this,u)}},{key:"toggle",value:function(e){var i=this.getItem(e);i.active?this.close(e):this.open(e),this._options.onToggle(this,i)}},{key:"close",value:function(e){var i,a,s=this.getItem(e);(i=s.triggerEl.classList).remove.apply(i,r(this._options.activeClasses.split(" "))),(a=s.triggerEl.classList).add.apply(a,r(this._options.inactiveClasses.split(" "))),s.targetEl.classList.add("hidden"),s.triggerEl.setAttribute("aria-expanded",!1),s.active=!1,s.iconEl&&s.iconEl.classList.remove("rotate-180"),this._options.onClose(this,s)}}]),t})();function v(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),e.push.apply(e,i)}return e}function g(t){for(var n=1;n<arguments.length;n++){var e=arguments[n]!=null?arguments[n]:{};n%2?v(Object(e),!0).forEach(function(i){C(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):v(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function C(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function x(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function o(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function c(t,n,e){return n&&o(t.prototype,n),e&&o(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}var p={triggerEl:null,onCollapse:function(){},onExpand:function(){},onToggle:function(){}},_=(function(){function t(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,e=arguments.le Line truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function I(t,n){if(t){if(typeof t=="string")return ht(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return ht(t,n)}}function Q(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function U(t){if(Array.isArray(t))return ht(t)}function ht(t,n){(n==null||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}function H(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),e.push.apply(e,i)}return e}function $(t){for(var n=1;n<arguments.length;n++){var e=arguments[n]!=null?arguments[n]:{};n%2?H(Object(e),!0).forEach(function(i){W(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):H(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function W(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function gt(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function we(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function Tn(t,n,e){return n&&we(t.prototype,n),e&&we(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}var Ae={defaultPosition:0,indicators:{items:[],activeClasses:"bg-white dark:bg-gray-800",inactiveClasses:"bg-white/50 dark:bg-gray-800/50 hover:bg-white dark:hover:bg-gray-800"},interval:3e3,onNext:function(){},onPrev:function(){},onChange:function(){}};window.Carousel=(function(){function t(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};gt(this,t),this._items=n,this._options=$($($({},Ae),e),{},{indicators:$($({},Ae.indicators),e.indicators)}),this._activeItem=this.getItem(this._options.defaultPosition),this._indicators=this._options.indicators.items,this._interval=null,this._init()}return Tn(t,[{key:"_init",value:function(){var e=this;this._items.map(function(i){i.el.classList.add("absolute","inset-0","transition-all","transform")}),this._getActiveItem()?this.slideTo(this._getActiveItem().position):this.slideTo(0),this._indicators.map(function(i,a){i.el.addEventListener("click",function(){e.slideTo(a)})})}},{key:"getItem",value:function(e){return this._items[e]}},{key:"slideTo",value:function(e){var i=this._items[e],a={left:i.position===0?this._items[this._items.length-1]:this._items[i.position-1],middle:i,right:i.position===this._items.length-1?this._items[0]:this._items[i.position+1]};this._rotate(a),this._setActiveItem(i.position),this._interval&&(this.pause(),this.cycle()),this._options.onChange(this)}},{key:"next",value:function(){var e=this._getActiveItem(),i=null;e.position===this._items.length-1?i=this._items[0]:i=this._items[e.position+1],this.slideTo(i.position),this._options.onNext(this)}},{key:"prev",value:function(){var e=this._getActiveItem(),i=null;e.position===0?i=this._items[this._items.length-1]:i=this._items[e.position-1],this.slideTo(i.position),this._options.onPrev(this)}},{key:"_rotate",value:function(e){this._items.map(function(i){i.el.classList.add("hidden")}),e.left.el.classList.remove("-translate-x-full","translate-x-full","translate-x-0","hidden","z-20"),e.left.el.classList.add("-translate-x-full","z-10"),e.middle.el.classList.remove("-translate-x-full","translate-x-full","translate-x-0","hidden","z-10"),e.middle.el.classList.add("translate-x-0","z-20"),e.right.el.classList.remove("-translate-x-full","translate-x-full","translate-x-0","hidden","z-20"),e.right.el.classList.add("translate-x-full","z-10")}},{key:"cycle",value:function(){var e=this;this._interval=setInterval(function(){e.next()},this._options.interval)}},{key:"pause",value:function(){clearInterval(this._interval)}},{key:"_getActiveItem",value:function(){return this._activeItem}},{key:"_setActiveItem",value:function(e){var i=this;if(this._activeItem=this._items[e],this._indicators.length){var a,s;this._indicators.map(function(u){var l,f;u.el.setAttribute("aria-current","false"),(l=u.el.classList).remove.apply(l,st(i._options.indicators.activeClasses.split(" "))),(f=u.el.classList).add.apply(f,st(i._options.indicators.inactiveClasses.split(" ")))}),(a=this._indicators[e].el.classList).add.apply(a,st(this._options.indicators.activeClasses.split(" "))),(s=this._indicators[e].el.classList).remove.apply(s,st(this._options.indicators.inactiveClasses.split(" "))),this._indicators[e].el.setAttribute("aria-current","true")}}}]),t})();function xe(t,n){var e=Object.keys(t);if(Object Line truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Si(t,n){if(t){if(typeof t=="string")return pe(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return pe(t,n)}}function Ti(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function Ii(t){if(Array.isArray(t))return pe(t)}function pe(t,n){(n==null||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}function Ye(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),e.push.apply(e,i)}return e}function jt(t){for(var n=1;n<arguments.length;n++){var e=arguments[n]!=null?arguments[n]:{};n%2?Ye(Object(e),!0).forEach(function(i){Di(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Ye(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function Di(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function $i(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function Ke(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function Bi(t,n,e){return n&&Ke(t.prototype,n),e&&Ke(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}var Ge={placement:"bottom",triggerType:"click",onShow:function(){},onHide:function(){}},Ze=(function(){function t(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};$i(this,t),this._targetEl=n,this._triggerEl=e,this._options=jt(jt({},Ge),i),this._popperInstance=this._createPopperInstace(),this._visible=!1,this._init()}return Bi(t,[{key:"_init",value:function(){var e=this;this._triggerEl&&this._triggerEl.addEventListener("click",function(){e.toggle()})}},{key:"_createPopperInstace",value:function(){return de(this._triggerEl,this._targetEl,{placement:this._options.placement,modifiers:[{name:"offset",options:{offset:[0,10]}}]})}},{key:"_handleClickOutside",value:function(e,i){var a=e.target;a!==i&&!i.contains(a)&&!this._triggerEl.contains(a)&&this._visible&&this.hide(),document.body.removeEventListener("click",this._handleClickOutside,!0)}},{key:"toggle",value:function(){this._visible?(this.hide(),document.body.removeEventListener("click",this._handleClickOutside,!0)):this.show()}},{key:"show",value:function(){var e=this;this._targetEl.classList.remove("hidden"),this._targetEl.classList.add("block"),this._popperInstance.setOptions(function(i){return jt(jt({},i),{},{modifiers:[].concat(Xe(i.modifiers),[{name:"eventListeners",enabled:!0}])})}),document.body.addEventListener("click",function(i){e._handleClickOutside(i,e._targetEl)},!0),this._popperInstance.update(),this._visible=!0,this._options.onShow(this)}},{key:"hide",value:function(){this._targetEl.classList.remove("block"),this._targetEl.classList.add("hidden"),this._popperInstance.setOptions(function(e){return jt(jt({},e),{},{modifiers:[].concat(Xe(e.modifiers),[{name:"eventListeners",enabled:!1}])})}),this._visible=!1,this._options.onHide(this)}}]),t})();window.Dropdown=Ze;function Ri(){document.querySelectorAll("[data-dropdown-toggle]").forEach(function(t){var n=document.getElementById(t.getAttribute("data-dropdown-toggle")),e=t.getAttribute("data-dropdown-placement");new Ze(n,t,{placement:e||Ge.placement})})}function Hi(t){return Fi(t)||zi(t)||qi(t)||Mi()}function Mi(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function qi(t,n){if(t){if(typeof t=="string")return he(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return he(t,n)}}function zi(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function Fi(t){if(Array.isArray(t))return he(t)}function he(t,n){(n==null||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}function Je(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),e.push.apply(e,i)}return e}function Qe(t){for(var n=1;n<arguments.length;n++){var e=arguments[n]!=null?arguments[n]:{};n%2?Je(Object(e),!0).forEach(function(i){Ni(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Je(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function Ni(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function Wi(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function tn(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function Vi(t,n,e){return n&&tn(t.prototype,n),e&&tn(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}var en={placement:"center",backdropClasses:"bg-gray-900/50 dark:bg-gray-900/80 fixed inset-0 z-40",onHide:function(){},onShow:function(){},onToggle:function(){}},nn=(function(){function t(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};Wi(this,t),this._targetEl=n,this._options=Qe(Qe({},en),e),this._isHidden=!0,this._init()}return Vi(t,[{key:"_init",value:function(){var e=this;this._getPlacementClasses().map(function(i){e._targetEl.classList.add(i)})}},{key:"_createBackdrop",value:function(){if(this._isHidden){var e,i=document.createElement("div");i.setAttribute("modal-backdrop",""),(e=i.classList).add.apply(e,Hi(this._options.backdropClasses.split(" "))),document.querySelector("body").append(i)}}},{key:"_destroyBackdropEl",value:function(){this._isHidden||document.querySelector("[modal-backdrop]").remove()}},{key:"_getPlacementClasses",value:function(){switch(this._options.placement){case"top-left":return["justify-start","items-start"];case"top-center":return["justify-center","items-start"];case"top-right":return["justify-end","items-start"];case"center-left":return["justify-start","items-center"];case"center":return["justify-center","items-center"];case"center-right":return["justify-end","items-center"];case"bottom-left":return["justify-start","items-end"];case"bottom-center":return["justify-center","items-end"];case"bottom-right":return["justify-end","items-end"];default:return["justify-center","items-center"]}}},{key:"toggle",value:function(){this._isHidden?this.show():this.hide(),this._options.onToggle(this)}},{key:"show",value:function(){this._targetEl.classList.add("flex"),this._targetEl.classList.remove("hidden"),this._targetEl.setAttribute("aria-modal","true"),this._targetEl.setAttribute("role","dialog"),this._targetEl.removeAttribute("aria-hidden"),this._createBackdrop(),this._isHidden=!1,this._options.onShow(this)}},{key:"hide",value:function(){this._targetEl.classList.add("hidden"),this._targetEl.classList.remove("flex"),this._targetEl.setAttribute("aria-hidden","true"),this._targetEl.removeAttribute("aria-modal"),this._targetEl.removeAttribute("role"),this._destroyBackdropEl(),this._isHidden=!0,this._options.onHide(this)}}]),t})();window.Modal=nn;var rn=function(n,e){return e.some(function(i){return i.id===n})?e.find(function(i){return i.id===n}):!1};function Ui(){var t=[];document.querySelectorAll("[data-modal-toggle]").forEach(function(n){var e=n.getAttribute("data-modal-toggle"),i=document.getElementById(e),a=i.getAttribute("data-modal-placement");i&&!i.hasAttribute("aria-hidden")&&!i.hasAttribute("aria-modal")&&i.setAttribute("aria-hidden","true");var s=null;rn(e,t)?(s=rn(e,t),s=s.object):(s=new nn(i,{placement:a||en.placement}),t.push({id:e,object:s})),i.hasAttribute("data-modal-show")&&i.getAttribute("data-modal-show")==="true"&&s.show(),n.addEventListener("click",function(){s.toggle()})})}function Xi(t){return Zi(t)||Gi(t)||Ki(t)||Yi()}function Yi(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Ki(t,n){if(t){if(typeof t=="string")return ve(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return ve(t,n)}}function Gi(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function Zi(t){if(Array.isArray(t))return ve(t)}function ve(t,n){(n==null||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}function an(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),e.push.apply(e,i)}return e}function on(t){for(var n=1;n<arguments.length;n++){var e=arguments[n]!=null?arguments[n]:{};n%2?an(Object(e),!0).forEach(function(i){Ji(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):an(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function Ji(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function Qi(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function sn(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function tr(t,n,e){return n&&sn(t.prototype,n),e&&sn(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}var er={placement:"left",bodyScrolling:!1,backdrop:!0,edge:!1,edgeOffset:"bottom-[60px]",backdropClasses:"bg-gray-900/50 dark:bg-gray-900/80 fixed inset-0 z-30",onShow:function(){},onHide:function(){},onToggle:function(){}};window.Drawer=(function(){function t(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,e=arguments.length>1?arguments[1]:void 0;Qi(this,t),this._targetEl=n,this._options=on(on({},er),e),this._visible=!1,this._init()}return tr(t,[{key:"_init",value:function(){var e=this;this._targetEl&&(this._targetEl.setAttribute("aria-hidden","true"),this._targetEl.classList.add("transition-transform")),this._getPlacementClasses(this._options.placement).base.map(function(i){e._targetEl.classList.add(i)}),this.hide()}},{key:"isVisible",value:function(){return this._visible}},{key:"hide",value:function(){var e=this;this._options.edge?(this._getPlacementClasses(this._options.placement+"-edge").active.map(function(i){e._targetEl.classList.remove(i)}),this._getPlacementClasses(this._options.placement+"-edge").inactive.map(function(i){e._targetEl.classList.add(i)})):(this._getPlacementClasses(this._options.placement).active.map(function(i){e._targetEl.classList.remove(i)}),this._getPlacementClasses(this._options.placement).inactive.map(function(i){e._targetEl.classList.add(i)})),this._targetEl.setAttribute("aria-hidden","true"),this._targetEl.removeAttribute("aria-modal"),this._targetEl.removeAttribute("role"),this._options.bodyScrolling||document.body.classList.remove("overflow-hidden"),this._options.backdrop&&this._destroyBackdropEl(),this._visible=!1,this._options.onHide(this)}},{key:"show",value:function(){var e=this;this._options.edge?(this._getPlacementClasses(this._options.placement+"-edge").active.map(function(i){e._targetEl.classList.add(i)}),this._getPlacementClasses(this._options.placement+"-edge").inactive.map(function(i){e._targetEl.classList.remove(i)})):(this._getPlacementClasses(this._options.placement).active.map(function(i){e._targetEl.classList.add(i)}),this._getPlacementClasses(this._options.placement).inactive.map(function(i){e._targetEl.classList.remove(i)})),this._targetEl.setAttribute("aria-modal","true"),this._targetEl.setAttribute("role","dialog"),this._targetEl.removeAttribute("aria-hidden"),this._options.bodyScrolling||document.body.classList.add("overflow-hidden"),this._options.backdrop&&this._createBackdrop(),this._visible=!0,this._options.onShow(this)}},{key:"toggle",value:function(){this.isVisible()?this.hide():this.show()}},{key:"_createBackdrop",value:function(){var e=this;if(!this._visible){var i,a=document.createElement("div");a.setAttribute("drawer-backdrop",""),(i=a.classList).add.apply(i,Xi(this._options.backdropClasses.split(" "))),document.querySelector("body").append(a),a.addEventListener("click",function(){e.hide()})}}},{key:"_destroyBackdropEl",value:function(){this._visible&&document.querySelector("[drawer-backdrop]").remove()}},{key:"_getPlacementClasses",value:function(e){switch(e){case"top":return{base:["top-0","left-0","right-0"],active:["transform-none"],inactive:["-translate-y-full"]};case"right":return{base:["right-0","top-0"],active:["transform-none"],inactive:["translate-x-full"]};case"bottom":return{base:["bottom-0","left-0","right-0"],active:["transform-none" Line truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ir(t,n){if(t){if(typeof t=="string")return ge(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return ge(t,n)}}function rr(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function ar(t){if(Array.isArray(t))return ge(t)}function ge(t,n){(n==null||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}function ln(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),e.push.apply(e,i)}return e}function cn(t){for(var n=1;n<arguments.length;n++){var e=arguments[n]!=null?arguments[n]:{};n%2?ln(Object(e),!0).forEach(function(i){or(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):ln(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function or(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function sr(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function un(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function lr(t,n,e){return n&&un(t.prototype,n),e&&un(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}var cr={defaultTabId:null,activeClasses:"text-blue-600 hover:text-blue-600 dark:text-blue-500 dark:hover:text-blue-500 border-blue-600 dark:border-blue-500",inactiveClasses:"dark:border-transparent text-gray-500 hover:text-gray-600 dark:text-gray-400 border-gray-100 hover:border-gray-300 dark:border-gray-700 dark:hover:text-gray-300",onShow:function(){}};window.Tabs=(function(){function t(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};sr(this,t),this._items=n,this._activeTab=e?this.getTab(e.defaultTabId):null,this._options=cn(cn({},cr),e),this._init()}return lr(t,[{key:"_init",value:function(){var e=this;this._items.length&&(this._activeTab||this._setActiveTab(this._items[0]),this.show(this._activeTab.id,!0),this._items.map(function(i){i.triggerEl.addEventListener("click",function(){e.show(i.id)})}))}},{key:"getActiveTab",value:function(){return this._activeTab}},{key:"_setActiveTab",value:function(e){this._activeTab=e}},{key:"getTab",value:function(e){return this._items.filter(function(i){return i.id===e})[0]}},{key:"show",value:function(e){var i=this,a,s,u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,l=this.getTab(e);l===this._activeTab&&!u||(this._items.map(function(f){if(f!==l){var h,d;(h=f.triggerEl.classList).remove.apply(h,Gt(i._options.activeClasses.split(" "))),(d=f.triggerEl.classList).add.apply(d,Gt(i._options.inactiveClasses.split(" "))),f.targetEl.classList.add("hidden"),f.triggerEl.setAttribute("aria-selected",!1)}}),(a=l.triggerEl.classList).add.apply(a,Gt(this._options.activeClasses.split(" "))),(s=l.triggerEl.classList).remove.apply(s,Gt(this._options.inactiveClasses.split(" "))),l.triggerEl.setAttribute("aria-selected",!0),l.targetEl.classList.remove("hidden"),this._setActiveTab(l),this._options.onShow(this,l))}}]),t})();function fn(t){return pr(t)||dr(t)||fr(t)||ur()}function ur(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function fr(t,n){if(t){if(typeof t=="string")return me(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return me(t,n)}}function dr(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function pr(t){if(Array.isArray(t))return me(t)}function me(t,n){(n==null||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}function dn(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),e.push.apply(e,i)}return e}function Lt(t){for(var n=1;n<arguments.length;n++){var e=arguments[n]!=null?arguments[n]:{};n%2?dn(Object(e),!0).forEach(function(i){hr(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):dn(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function hr(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function vr(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function pn(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function gr(t,n,e){return n&&pn(t.prototype,n),e&&pn(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}var mr={placement:"top",triggerType:"hover",onShow:function(){},onHide:function(){}};window.Tooltip=(function(){function t(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};vr(this,t),this._targetEl=n,this._triggerEl=e,this._options=Lt(Lt({},mr),i),this._popperInstance=this._createPopperInstace(),this._init()}return gr(t,[{key:"_init",value:function(){var e=this;if(this._triggerEl){var i=this._getTriggerEvents();i.showEvents.forEach(function(a){e._triggerEl.addEventListener(a,function(){e.show()})}),i.hideEvents.forEach(function(a){e._triggerEl.addEventListener(a,function(){e.hide()})})}}},{key:"_createPopperInstace",value:function(){return de(this._triggerEl,this._targetEl,{placement:this._options.placement,modifiers:[{name:"offset",options:{offset:[0,8]}}]})}},{key:"_getTriggerEvents",value:function(){switch(this._options.triggerType){case"hover":return{showEvents:["mouseenter","focus"],hideEvents:["mouseleave","blur"]};case"click":return{showEvents:["click","focus"],hideEvents:["focusout","blur"]};default:return{showEvents:["mouseenter","focus"],hideEvents:["mouseleave","blur"]}}}},{key:"show",value:function(){this._targetEl.classList.remove("opacity-0","invisible"),this._targetEl.classList.add("opacity-100","visible"),this._popperInstance.setOptions(function(e){return Lt(Lt({},e),{},{modifiers:[].concat(fn(e.modifiers),[{name:"eventListeners",enabled:!0}])})}),this._popperInstance.update(),this._options.onShow(this)}},{key:"hide",value:function(){this._targetEl.classList.remove("opacity-100","visible"),this._targetEl.classList.add("opacity-0","invisible"),this._popperInstance.setOptions(function(e){return Lt(Lt({},e),{},{modifiers:[].concat(fn(e.modifiers),[{name:"eventListeners",enabled:!1}])})}),this._options.onHide(this)}}]),t})();function hn(t){return Or(t)||_r(t)||br(t)||yr()}function yr(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function br(t,n){if(t){if(typeof t=="string")return ye(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);if(e==="Object"&&t.constructor&&(e=t.constructor.name),e==="Map"||e==="Set")return Array.from(t);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return ye(t,n)}}function _r(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function Or(t){if(Array.isArray(t))return ye(t)}function ye(t,n){(n==null||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}function vn(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),e.push.apply(e,i)}return e}function St(t){for(var n=1;n<arguments.length;n++){var e=arguments[n]!=null?arguments[n]:{};n%2?vn(Object(e),!0).forEach(function(i){Er(t,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):vn(Object(e)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))})}return t}function Er(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function wr(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function gn(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function Ar(t,n,e){return n&&gn(t.prototype,n),e&&gn(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}var Zt={placement:"top",offset:10,triggerType:"hover",onShow:function(){},onHide:function(){}},mn=(function(){function t(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};wr(this,t),this._targetEl=n,this._triggerEl=e,this._options=St(St({},Zt),i),this._popperInstance=this._createPopperInstace(),this._init()}return Ar(t,[{key:"_init",value:function(){var e=this;if(this._triggerEl){var i=this._getTriggerEvents();i.showEvents.forEach(function(a){e._triggerEl.addEventListener(a,function(){e.show()}),e._targetEl.addEventListener(a,function(){e.show()})}),i.hideEvents.forEach(function(a){e._triggerEl.addEventListener(a,function(){setTimeout(function(){e._targetEl.matches(":hover")||e.hide()},100)}),e._targetEl.addEventListener(a,function(){setTimeout(function(){e._triggerEl.matches(":hover")||e.hide()},100)})})}}},{key:"_createPopperInstace",value:function(){return de(this._triggerEl,this._targetEl,{placement:this._options.placement,modifiers:[{name:"offset",options:{offset:[0,this._options.offset]}}]})}},{key:"_getTriggerEvents",value:function(){switch(this._options.triggerType){case"hover":return{showEvents:["mouseenter","focus"],hideEvents:["mouseleave","blur"]};case"click":return{showEvents:["click","focus"],hideEvents:["focusout","blur"]};default:return{showEvents:["mouseenter","focus"],hideEvents:["mouseleave","blur"]}}}},{key:"show",value:function(){this._targetEl.classList.remove("opacity-0","invisible"),this._targetEl.classList.add("opacity-100","visible"),this._popperInstance.setOptions(function(e){return St(St({},e),{},{modifiers:[].concat(hn(e.modifiers),[{name:"eventListeners",enabled:!0}])})}),this._popperInstance.update(),this._options.onShow(this)}},{key:"hide",value:function(){this._targetEl.classList.remove("opacity-100","visible"),this._targetEl.classList.add("opacity-0","invisible"),this._popperInstance.setOptions(function(e){return St(St({},e),{},{modifiers:[].concat(hn(e.modifiers),[{name:"eventListeners",enabled:!1}])})}),this._options.onHide(this)}}]),t})();window.Popover=mn;function yn(){document.querySelectorAll("[data-popover-target]").forEach(function(t){var n=document.getElementById(t.getAttribute("data-popover-target")),e=t.getAttribute("data-popover-trigger"),i=t.getAttribute("data-popover-placement"),a=t.getAttribute("data-popover-offset");new mn(n,t,{placement:i||Zt.placement,offset:a?parseInt(a):Zt.offset,triggerType:e||Zt.triggerType})})}document.addEventListener("turbolinks:load",()=>{Ri(),V(),Ui(),yn()}),document.addEventListener("reactions:loaded",()=>{yn()})})();var Hr={init(){document.addEventListener("alpine:init",()=>this.startComponent())},startComponent(){Ee.data("reactions",(r=[],ut=[],S="")=>({url:S,myReactions:r,articleReactions:ut,allReactions:[],isAuthenticated:!1,init(){this.treatArticleReactions(),this.allReactions=window.App.defaultReactions,this.isAuthenticated=window.App.isAuthenticated,this.dispatchFlowbiteEvent()},treatArticleReactions(){let m=this.articleReactions;this.articleReactions=[],Object.entries(m).forEach(y=>{let O=y[0],M=Object.values(y[1]);this.articleReactions.push({id:this.generateVirtualReactionId(O),name:O,count:M.length,users: Line truncated
Atom CMS is a CMS for made for the community to enjoy. You can join our wonderful community at https://discord.gg/rX3aShUHdg
`,"color: #14619c; -webkit-text-stroke: 2px black; font-size: 32px; font-weight: bold;","");
-1
View File
@@ -1 +0,0 @@
@import"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap";@layer properties,theme,base,components,utilities;@layer theme{:root,:host{--font-sans:"Nunito", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-700:oklch(50.8% .118 165.612);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-sky-400:oklch(74.6% .16 232.661);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-900:oklch(38.1% .176 304.987);--color-slate-600:oklch(44.6% .043 257.281);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-2xs:18rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semiLine truncated
-1
View File
@@ -1 +0,0 @@
@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Nunito", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-700:oklch(50.8% .118 165.612);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-sky-400:oklch(74.6% .16 232.661);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-400:oklch(71.4% .203 305.504);--color-purpLine truncated
+54
View File
@@ -0,0 +1,54 @@
import{n as e,r as t,t as n}from"./axios-B2OU-7LW.js";var r=t(e(((e,t)=>{(function(){var e=this;(function(){(function(){this.Turbolinks={supported:function(){return window.history.pushState!=null&&window.requestAnimationFrame!=null&&window.addEventListener!=null}(),visit:function(e,t){return n.controller.visit(e,t)},clearCache:function(){return n.controller.clearCache()},setProgressBarDelay:function(e){return n.controller.setProgressBarDelay(e)}}}).call(this)}).call(e);var n=e.Turbolinks;(function(){(function(){var e,t,r,i=[].slice;n.copyObject=function(e){var t,n={},r;for(t in e)r=e[t],n[t]=r;return n},n.closest=function(t,n){return e.call(t,n)},e=function(){var e;return e=document.documentElement,e.closest??function(e){var n;for(n=this;n;){if(n.nodeType===Node.ELEMENT_NODE&&t.call(n,e))return n;n=n.parentNode}}}(),n.defer=function(e){return setTimeout(e,1)},n.throttle=function(e){var t;return t=null,function(){var n;return n=1<=arguments.length?i.call(arguments,0):[],t??=requestAnimationFrame(function(r){return function(){return t=null,e.apply(r,n)}}(this))}},n.dispatch=function(e,t){var n,i,a,o,s,c;return s=t??{},c=s.target,n=s.cancelable,i=s.data,a=document.createEvent(`Events`),a.initEvent(e,!0,n===!0),a.data=i??{},a.cancelable&&!r&&(o=a.preventDefault,a.preventDefault=function(){return this.defaultPrevented||Object.defineProperty(this,`defaultPrevented`,{get:function(){return!0}}),o.call(this)}),(c??document).dispatchEvent(a),a},r=function(){var e;return e=document.createEvent(`Events`),e.initEvent(`test`,!0,!0),e.preventDefault(),e.defaultPrevented}(),n.match=function(e,n){return t.call(e,n)},t=function(){var e;return e=document.documentElement,e.matchesSelector??e.webkitMatchesSelector??e.msMatchesSelector??e.mozMatchesSelector}(),n.uuid=function(){var e,t,n;for(n=``,e=t=1;36>=t;e=++t)n+=e===9||e===14||e===19||e===24?`-`:e===15?`4`:e===20?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16);return n}}).call(this),function(){n.Location=function(){function e(e){var t,n;e??=``,n=document.createElement(`a`),n.href=e.toString(),this.absoluteURL=n.href,t=n.hash.length,2>t?this.requestURL=this.absoluteURL:(this.requestURL=this.absoluteURL.slice(0,-t),this.anchor=n.hash.slice(1))}var t,n,r,i;return e.wrap=function(e){return e instanceof this?e:new this(e)},e.prototype.getOrigin=function(){return this.absoluteURL.split(`/`,3).join(`/`)},e.prototype.getPath=function(){return this.requestURL.match(/\/\/[^\/]*(\/[^?;]*)/)?.[1]??`/`},e.prototype.getPathComponents=function(){return this.getPath().split(`/`).slice(1)},e.prototype.getLastPathComponent=function(){return this.getPathComponents().slice(-1)[0]},e.prototype.getExtension=function(){return this.getLastPathComponent().match(/\.[^.]*$/)?.[0]??``},e.prototype.isHTML=function(){return this.getExtension().match(/^(?:|\.(?:htm|html|xhtml))$/)},e.prototype.isPrefixedBy=function(e){var t;return t=n(e),this.isEqualTo(e)||i(this.absoluteURL,t)},e.prototype.isEqualTo=function(e){return this.absoluteURL===e?.absoluteURL},e.prototype.toCacheKey=function(){return this.requestURL},e.prototype.toJSON=function(){return this.absoluteURL},e.prototype.toString=function(){return this.absoluteURL},e.prototype.valueOf=function(){return this.absoluteURL},n=function(e){return t(e.getOrigin()+e.getPath())},t=function(e){return r(e,`/`)?e:e+`/`},i=function(e,t){return e.slice(0,t.length)===t},r=function(e,t){return e.slice(-t.length)===t},e}()}.call(this),function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};n.HttpRequest=function(){function t(t,r,i){this.delegate=t,this.requestCanceled=e(this.requestCanceled,this),this.requestTimedOut=e(this.requestTimedOut,this),this.requestFailed=e(this.requestFailed,this),this.requestLoaded=e(this.requestLoaded,this),this.requestProgressed=e(this.requestProgressed,this),this.url=n.Location.wrap(r).requestURL,this.referrer=n.Location.wrap(i).absoluteURL,this.createXHR()}return t.NETWORK_FAILURE=0,t.TIMEOUT_FAILURE=-1,t.timeout=60,t.prototype.send=function(){var e;return this.xhr&&!this.sent?(this.notifyApplicationBeforeRequestStart(),this.setProgress(0),this.xhr.send(),this.sent=!0,typeof(e=this.delegate).requestStarted==`function`?e.requestStarted():void 0):void 0},t.prototype.cancel=function(){return this.xhr&&this.sent?this.xhr.abort():void 0},t.prototype.requestProgressed=function(e){return e.lengthComputable?this.setProgress(e.loaded/e.total):void 0},t.prototype.requestLoaded=function(){return this.endRequest(function(e){return function(){var t;return 200<=(t=e.xhr.status)&&300>t?e.delegate.requestCompletedWithResponse(e.xhr.responseText,e.xhr.getResponseHeader(`Turbolinks-Location`)):(e.failed=!0,e.delegate.requestFailedWithStatusCode(e.xhr.status,e.xhr.responseText))}}(this))},t.prototype.requestFailed=function(){return this.endRequest(function(e){return function(){return e.failed=!0,e.delegate.requestFailedWithStatusCode(e.constructor.NETWORK_FAILURE)}}(this))},t.prototype.requeLine truncated
position: fixed;
display: block;
top: 0;
left: 0;
height: 3px;
background: #0076ff;
z-index: 9999;
transition: width `+n+`ms ease-out, opacity `+n/2+`ms `+n/2+`ms ease-in;
transform: translate3d(0, 0, 0);
}`,t.prototype.show=function(){return this.visible?void 0:(this.visible=!0,this.installStylesheetElement(),this.installProgressElement(),this.startTrickling())},t.prototype.hide=function(){return this.visible&&!this.hiding?(this.hiding=!0,this.fadeProgressElement(function(e){return function(){return e.uninstallProgressElement(),e.stopTrickling(),e.visible=!1,e.hiding=!1}}(this))):void 0},t.prototype.setValue=function(e){return this.value=e,this.refresh()},t.prototype.installStylesheetElement=function(){return document.head.insertBefore(this.stylesheetElement,document.head.firstChild)},t.prototype.installProgressElement=function(){return this.progressElement.style.width=0,this.progressElement.style.opacity=1,document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()},t.prototype.fadeProgressElement=function(e){return this.progressElement.style.opacity=0,setTimeout(e,1.5*n)},t.prototype.uninstallProgressElement=function(){return this.progressElement.parentNode?document.documentElement.removeChild(this.progressElement):void 0},t.prototype.startTrickling=function(){return this.trickleInterval==null?this.trickleInterval=setInterval(this.trickle,n):this.trickleInterval},t.prototype.stopTrickling=function(){return clearInterval(this.trickleInterval),this.trickleInterval=null},t.prototype.trickle=function(){return this.setValue(this.value+Math.random()/100)},t.prototype.refresh=function(){return requestAnimationFrame(function(e){return function(){return e.progressElement.style.width=10+90*e.value+`%`}}(this))},t.prototype.createStylesheetElement=function(){var e;return e=document.createElement(`style`),e.type=`text/css`,e.textContent=this.constructor.defaultCSS,e},t.prototype.createProgressElement=function(){var e;return e=document.createElement(`div`),e.className=`turbolinks-progress-bar`,e},t}()}.call(this),function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};n.BrowserAdapter=function(){function t(t){this.controller=t,this.showProgressBar=e(this.showProgressBar,this),this.progressBar=new n.ProgressBar}var r,i,a;return a=n.HttpRequest,r=a.NETWORK_FAILURE,i=a.TIMEOUT_FAILURE,t.prototype.visitProposedToLocationWithAction=function(e,t){return this.controller.startVisitToLocationWithAction(e,t)},t.prototype.visitStarted=function(e){return e.issueRequest(),e.changeHistory(),e.loadCachedSnapshot()},t.prototype.visitRequestStarted=function(e){return this.progressBar.setValue(0),e.hasCachedSnapshot()||e.action!==`restore`?this.showProgressBarAfterDelay():this.showProgressBar()},t.prototype.visitRequestProgressed=function(e){return this.progressBar.setValue(e.progress)},t.prototype.visitRequestCompleted=function(e){return e.loadResponse()},t.prototype.visitRequestFailedWithStatusCode=function(e,t){switch(t){case r:case i:return this.reload();default:return e.loadResponse()}},t.prototype.visitRequestFinished=function(e){return this.hideProgressBar()},t.prototype.visitCompleted=function(e){return e.followRedirect()},t.prototype.pageInvalidated=function(){return this.reload()},t.prototype.showProgressBarAfterDelay=function(){return this.progressBarTimeout=setTimeout(this.showProgressBar,this.controller.progressBarDelay)},t.prototype.showProgressBar=function(){return this.progressBar.show()},t.prototype.hideProgressBar=function(){return this.progressBar.hide(),clearTimeout(this.progressBarTimeout)},t.prototype.reload=function(){return window.location.reload()},t}()}.call(this),function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};n.History=function(){function t(t){this.delegate=t,this.onPageLoad=e(this.onPageLoad,this),this.onPopState=e(this.onPopState,this)}return t.prototype.start=function(){return this.started?void 0:(addEventListener(`popstate`,this.onPopState,!1),addEventListener(`load`,this.onPageLoad,!1),this.started=!0)},t.prototype.stop=function(){return this.started?(removeEventListener(`popstate`,this.onPopState,!1),removeEventListener(`load`,this.onPageLoad,!1),this.started=!1):void 0},t.prototype.push=function(e,t){return e=n.Location.wrap(e),this.update(`push`,e,t)},t.prototype.replace=function(e,t){return e=n.Location.wrap(e),this.update(`replace`,e,t)},t.prototype.onPopState=function(e){var t,r,i;return this.shouldHandlePopState()&&(i=e.state?.turbolinks)?(t=n.Location.wrap(window.location),r=i.restorationIdentifier,this.delegate.historyPoppedToLocationWithRestorationIdentifier(t,r)):void 0},t.prototype.onPageLoad=function(e){return n.defer(function(e){return function(){return e.pageLoaded=!0}}(this))},t.prototype.shouldHandlePopState=function(){return this.pageIsLoaded()},t.prototype.pageIsLoaded=function(){return this.pageLoaded||document.readyState===`complete`},t.prototype.update=function(e,t,n){var r;return r={turbolinks:{restorationIdentifier:n}},history[e+`State`](r,null,t)},t}()}.call(this),function(){n.HeadDetails=function(){function e(e){var t,n,r,o,s,c;for(this.elements={},r=0,s=e.length;s>r;r++)c=e[r],c.nodeType===Node Line truncated
Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.
For more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements
——
Suppress this warning by adding a \`data-turbolinks-suppress-warning\` attribute to: %s`,t.outerHTML)}})()}.call(this),function(){var e,t,r;n.start=function(){return t()?(n.controller??=e(),n.controller.start()):void 0},t=function(){return window.Turbolinks??(window.Turbolinks=n),r()},e=function(){var e;return e=new n.Controller,e.adapter=new n.BrowserAdapter(e),e},r=function(){return window.Turbolinks===n},r()&&n.start()}.call(this)}).call(this),typeof t==`object`&&t.exports?t.exports=n:typeof define==`function`&&define.amd&&define(n)}).call(e)}))(),1);window.axios=n,window.axios.defaults.headers.common[`X-Requested-With`]=`XMLHttpRequest`,r.default.start();var i=function(){function e(e,t){t===void 0&&(t=[]),this._eventType=e,this._eventFunctions=t}return e.prototype.init=function(){var e=this;this._eventFunctions.forEach(function(t){typeof window<`u`&&window.addEventListener(e._eventType,t)})},e}(),a=new(function(){function e(){this._instances={Accordion:{},Carousel:{},Collapse:{},Dial:{},Dismiss:{},Drawer:{},Dropdown:{},Modal:{},Popover:{},Tabs:{},Tooltip:{},InputCounter:{},CopyClipboard:{},Datepicker:{}}}return e.prototype.addInstance=function(e,t,n,r){if(r===void 0&&(r=!1),!this._instances[e])return console.warn(`Flowbite: Component ${e} does not exist.`),!1;if(this._instances[e][n]&&!r){console.warn(`Flowbite: Instance with ID ${n} already exists.`);return}r&&this._instances[e][n]&&this._instances[e][n].destroyAndRemoveInstance(),this._instances[e][n||this._generateRandomId()]=t},e.prototype.getAllInstances=function(){return this._instances},e.prototype.getInstances=function(e){return this._instances[e]?this._instances[e]:(console.warn(`Flowbite: Component ${e} does not exist.`),!1)},e.prototype.getInstance=function(e,t){if(this._componentAndInstanceCheck(e,t)){if(!this._instances[e][t]){console.warn(`Flowbite: Instance with ID ${t} does not exist.`);return}return this._instances[e][t]}},e.prototype.destroyAndRemoveInstance=function(e,t){this._componentAndInstanceCheck(e,t)&&(this.destroyInstanceObject(e,t),this.removeInstance(e,t))},e.prototype.removeInstance=function(e,t){this._componentAndInstanceCheck(e,t)&&delete this._instances[e][t]},e.prototype.destroyInstanceObject=function(e,t){this._componentAndInstanceCheck(e,t)&&this._instances[e][t].destroy()},e.prototype.instanceExists=function(e,t){return!(!this._instances[e]||!this._instances[e][t])},e.prototype._generateRandomId=function(){return Math.random().toString(36).substr(2,9)},e.prototype._componentAndInstanceCheck=function(e,t){return this._instances[e]?this._instances[e][t]?!0:(console.warn(`Flowbite: Instance with ID ${t} does not exist.`),!1):(console.warn(`Flowbite: Component ${e} does not exist.`),!1)},e}());typeof window<`u`&&(window.FlowbiteInstances=a);var o=function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)},s={alwaysOpen:!1,activeClasses:`bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-white`,inactiveClasses:`text-gray-500 dark:text-gray-400`,onOpen:function(){},onClose:function(){},onToggle:function(){}},c={id:null,override:!0},l=function(){function e(e,t,n,r){e===void 0&&(e=null),t===void 0&&(t=[]),n===void 0&&(n=s),r===void 0&&(r=c),this._instanceId=r.id?r.id:e.id,this._accordionEl=e,this._items=t,this._options=o(o({},s),n),this._initialized=!1,this.init(),a.addInstance(`Accordion`,this,this._instanceId,r.override)}return e.prototype.init=function(){var e=this;this._items.length&&!this._initialized&&(this._items.forEach(function(t){t.active&&e.open(t.id);var n=function(){e.toggle(t.id)};t.triggerEl.addEventListener(`click`,n),t.clickHandler=n}),this._initialized=!0)},e.prototype.destroy=function(){this._items.length&&this._initialized&&(this._items.forEach(function(e){e.triggerEl.removeEventListener(`click`,e.clickHandler),delete e.clickHandler}),this._initialized=!1)},e.prototype.removeInstance=function(){a.removeInstance(`Accordion`,this._instanceId)},e.prototype.destroyAndRemoveInstance=function(){this.destroy(),this.removeInstance()},e.prototype.getItem=function(e){return this._items.filter(function(t){return t.id===e})[0]},e.prototype.open=function(e){var t,n,r=this,i=this.getItem(e);this._options.alwaysOpen||this._items.map(function(e){var t,n;e!==i&&((t=e.triggerEl.classList).remove.apply(t,r._options.activeClasses.split(` `)),(n=e.triggerEl.classList).add.apply(n,r._options.inactiveClasses.split(` `)),e.targetEl.classList.add(`hidden`),e.triggerEl.setAttribute(`aria-expanded`,`false`),e.active=!1,e.iconEl&&e.iconEl.classList.add(`rotate-180`))}),(t=i.triggerEl.classList).add.apply(t,this._options.activeClasses.split(` `)),(n=i.triggerEl.classList).remove.apply(n,this._options.inactiveClasses.split(` `)),i.triggerEl.setAttribute(`aria-expanded`,`true`),i.targetEl.classList.remove(`hidden`),i.active=!0,i.iconEl&&i.iconEl.classList.remove(`rotate-180`),this._optioLine truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Hn(){throw TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Un(e,t){if(t&&(typeof t==`object`||typeof t==`function`))return t;if(t!==void 0)throw TypeError(`Derived constructors may only return object or undefined`);return An(e)}function Wn(e,t){return Wn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Wn(e,t)}function H(e,t){return On(e)||Bn(e,t)||Xn(e,t)||Vn()}function Gn(e,t){for(;!{}.hasOwnProperty.call(e,t)&&(e=In(e))!==null;);return e}function Kn(e){return kn(e)||zn(e)||Xn(e)||Hn()}function qn(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function Jn(e){var t=qn(e,`string`);return typeof t==`symbol`?t:t+``}function Yn(e){"@babel/helpers - typeof";return Yn=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Yn(e)}function Xn(e,t){if(e){if(typeof e==`string`)return Dn(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Dn(e,t):void 0}}function Zn(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Qn(e){return e[e.length-1]}function $n(e){return[...arguments].slice(1).forEach(function(t){e.includes(t)||e.push(t)}),e}function er(e,t){return e?e.split(t):[]}function tr(e,t,n){return(t===void 0||e>=t)&&(n===void 0||e<=n)}function nr(e,t,n){return e<t?t:e>n?n:e}function rr(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:``,a=Object.keys(n).reduce(function(e,t){var i=n[t];return typeof i==`function`&&(i=i(r)),`${e} ${t}="${i}"`},e);i+=`<${a}></${e}>`;var o=r+1;return o<t?rr(e,t,n,o,i):i}function ir(e){return e.replace(/>\s+/g,`>`).replace(/\s+</,`<`)}function ar(e){return new Date(e).setHours(0,0,0,0)}function or(){return new Date().setHours(0,0,0,0)}function sr(){switch(arguments.length){case 0:return or();case 1:return ar(arguments.length<=0?void 0:arguments[0])}var e=new Date(0);return e.setFullYear.apply(e,arguments),e.setHours(0,0,0,0)}function cr(e,t){var n=new Date(e);return n.setDate(n.getDate()+t)}function lr(e,t){return cr(e,t*7)}function ur(e,t){var n=new Date(e),r=n.getMonth()+t,i=r%12;i<0&&(i+=12);var a=n.setMonth(r);return n.getMonth()===i?a:n.setDate(0)}function dr(e,t){var n=new Date(e),r=n.getMonth(),i=n.setFullYear(n.getFullYear()+t);return r===1&&n.getMonth()===2?n.setDate(0):i}function fr(e,t){return(e-t+7)%7}function pr(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=new Date(e).getDay();return cr(e,fr(t,n)-fr(r,n))}function mr(e){var t=pr(e,4,1),n=pr(new Date(t).setMonth(0,4),4,1);return Math.round((t-n)/6048e5)+1}function hr(e,t){var n=new Date(e).getFullYear();return Math.floor(n/t)*t}var gr=/dd?|DD?|mm?|MM?|yy?(?:yy)?/,_r=/[\s!-/:-@[-`{-~年月日]+/,vr={},yr={y:function(e,t){return new Date(e).setFullYear(parseInt(t,10))},m:function(e,t,n){var r=new Date(e),i=parseInt(t,10)-1;if(isNaN(i)){if(!t)return NaN;var a=t.toLowerCase(),o=function(e){return e.toLowerCase().startsWith(a)};if(i=n.monthsShort.findIndex(o),i<0&&(i=n.months.findIndex(o)),i<0)return NaN}return r.setMonth(i),r.getMonth()===xr(i)?r.getTime():r.setDate(0)},d:function(e,t){return new Date(e).setDate(parseInt(t,10))}},br={d:function(e){return e.getDate()},dd:function(e){return Sr(e.getDate(),2)},D:function(e,t){return t.daysShort[e.getDay()]},DD:function(e,t){return t.days[e.getDay()]},m:function(e){return e.getMonth()+1},mm:function(e){return Sr(e.getMonth()+1,2)},M:function(e,t){return t.monthsShort[e.getMonth()]},MM:function(e,t){return t.months[e.getMonth()]},y:function(e){return e.getFullYear()},yy:function(e){return Sr(e.getFullYear(),2).slice(-2)},yyyy:function(e){return Sr(e.getFullYear(),4)}};function xr(e){return e>-1?e%12:xr(e+12)}function Sr(e,t){return e.toString().padStart(t,`0`)}function Cr(e){if(typeof e!=`string`)throw Error(`Invalid date format.`);if(e in vr)return vr[e];var t=e.split(gr),n=e.match(new RegExp(gr,`g`));if(t.length===0||!n)throw Error(`Invalid date format.`);var r=n.map(function(e){return br[e]}),i=Object.keys(yr).reduce(function(e,t){return n.find(function(e){return e[0]!==`D`&&e[0].toLowerCase()===t})&&e.push(t),e},[]);return vr[e]={parser:function(e,t){var r=e.split(_r).reduce(function(e,t,r){if(t.length>0&&n[r]){var i=n[r][0];i===`M`?e.m=t:i!==`D`&&(e[i]=t)}return e},{});return i.reduce(function(e,n){var i=yr[n](e,r[n],t);return isNaN(i)?e:i},or())},formatter:function(e,n){var i=r.reduce(function(r,i,a){return r+=`${t[a]}${i(e,n)}`},``);return i+=QnLine truncated
<div class="datepicker-picker inline-block rounded-lg bg-white dark:bg-gray-700 shadow-lg p-4">
<div class="datepicker-header">
<div class="datepicker-title bg-white dark:bg-gray-700 dark:text-white px-2 py-3 text-center font-semibold"></div>
<div class="datepicker-controls flex justify-between mb-2">
<button type="button" class="bg-white dark:bg-gray-700 rounded-lg text-gray-500 dark:text-white hover:bg-gray-100 dark:hover:bg-gray-600 hover:text-gray-900 dark:hover:text-white text-lg p-2.5 focus:outline-none focus:ring-2 focus:ring-gray-200 prev-btn"></button>
<button type="button" class="text-sm rounded-lg text-gray-900 dark:text-white bg-white dark:bg-gray-700 font-semibold py-2.5 px-5 hover:bg-gray-100 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-gray-200 view-switch"></button>
<button type="button" class="bg-white dark:bg-gray-700 rounded-lg text-gray-500 dark:text-white hover:bg-gray-100 dark:hover:bg-gray-600 hover:text-gray-900 dark:hover:text-white text-lg p-2.5 focus:outline-none focus:ring-2 focus:ring-gray-200 next-btn"></button>
</div>
</div>
<div class="datepicker-main p-1"></div>
<div class="datepicker-footer">
<div class="datepicker-controls flex space-x-2 rtl:space-x-reverse mt-2">
<button type="button" class="%buttonClass% today-btn text-white bg-blue-700 !bg-primary-700 dark:bg-blue-600 dark:!bg-primary-600 hover:bg-blue-800 hover:!bg-primary-800 dark:hover:bg-blue-700 dark:hover:!bg-primary-700 focus:ring-4 focus:ring-blue-300 focus:!ring-primary-300 font-medium rounded-lg text-sm px-5 py-2 text-center w-1/2"></button>
<button type="button" class="%buttonClass% clear-btn text-gray-900 dark:text-white bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-600 focus:ring-4 focus:ring-blue-300 focus:!ring-primary-300 font-medium rounded-lg text-sm px-5 py-2 text-center w-1/2"></button>
</div>
</div>
</div>
</div>`),Qr=ir(`<div class="days">
<div class="days-of-week grid grid-cols-7 mb-1">${rr(`span`,7,{class:`dow block flex-1 leading-9 border-0 rounded-lg cursor-default text-center text-gray-900 font-semibold text-sm`})}</div>
<div class="datepicker-grid w-64 grid grid-cols-7">${rr(`span`,42,{class:`block flex-1 leading-9 border-0 rounded-lg cursor-default text-center text-gray-900 font-semibold text-sm h-6 leading-6 text-sm font-medium text-gray-500 dark:text-gray-400`})}</div>
</div>`),$r=ir(`<div class="calendar-weeks">
<div class="days-of-week flex"><span class="dow h-6 leading-6 text-sm font-medium text-gray-500 dark:text-gray-400"></span></div>
<div class="weeks">${rr(`span`,6,{class:`week block flex-1 leading-9 border-0 rounded-lg cursor-default text-center text-gray-900 font-semibold text-sm`})}</div>
</div>`),ei=function(){function e(t,n){Mn(this,e),Object.assign(this,n,{picker:t,element:Rr(`<div class="datepicker-view flex"></div>`).firstChild,selected:[]}),this.init(this.picker.datepicker.config)}return Pn(e,[{key:`init`,value:function(e){e.pickLevel!==void 0&&(this.isMinView=this.id===e.pickLevel),this.setOptions(e),this.updateFocus(),this.updateSelection()}},{key:`performBeforeHook`,value:function(e,t,n){var r=this.beforeShow(new Date(n));switch(Yn(r)){case`boolean`:r={enabled:r};break;case`string`:r={classes:r}}if(r){if(r.enabled===!1&&(e.classList.add(`disabled`),$n(this.disabled,t)),r.classes){var i,a=r.classes.split(/\s+/);(i=e.classList).add.apply(i,Kn(a)),a.includes(`disabled`)&&$n(this.disabled,t)}r.content&&Hr(e,r.content)}}}])}(),ti=function(e){function t(e){return Mn(this,t),jn(this,t,[e,{id:0,name:`days`,cellClass:`day`}])}return Ln(t,e),Pn(t,[{key:`init`,value:function(e){if(!(arguments.length>1&&arguments[1]!==void 0)||arguments[1]){var n=Rr(Qr).firstChild;this.dow=n.firstChild,this.grid=n.lastChild,this.element.appendChild(n)}Fn(In(t.prototype),`init`,this).call(this,e)}},{key:`setOptions`,value:function(e){var t=this,n;if(Zn(e,`minDate`)&&(this.minDate=e.minDate),Zn(e,`maxDate`)&&(this.maxDate=e.maxDate),e.datesDisabled&&(this.datesDisabled=e.datesDisabled),e.daysOfWeekDisabled&&(this.daysOfWeekDisabled=e.daysOfWeekDisabled,n=!0),e.daysOfWeekHighlighted&&(this.daysOfWeekHighlighted=e.daysOfWeekHighlighted),e.todayHighlight!==void 0&&(this.todayHighlight=e.todayHighlight),e.weekStart!==void 0&&(this.weekStart=e.weekStart,this.weekEnd=e.weekEnd,n=!0),e.locale){var r=this.locale=e.locale;this.dayNames=r.daysMin,this.switchLabelFormat=r.titleFormat,n=!0}if(e.beforeShowDay!==void 0&&(this.beforeShow=typeof e.beforeShowDay==`function`?e.beforeShowDay:void 0),e.calendarWeeks!==void 0)if(e.calendarWeeks&&!this.calendarWeeks){var i=Rr($r).firstChild;this.calendarWeeks={element:i,dow:i.firstChild,weeks:i.lastChild},this.element.insertBefore(i,this.element.firstChild)}else this.calendarWeeks&&!e.calendarWeeks&&(this.element.removeChild(this.calendarWeeks.element),this.calendarWeeks=null);e.showDaysOfWeek!==void 0&&(e.showDaysOfWeek?(Br(this.dow),this.calendarWeeks&&Br(this.calendarWeeks.dow)):(zr(this.dow),this.calendarWeeks&&zr(this.calendarWeeks.dow))),n&&Array.from(this.dow.children).forEach(function(e,n){var r=(t.weekStart+n)%7;e.textContent=t.dayNames[r],e.className=t.daysOfWeekDisabled.includes(r)?`dow disabled text-center h-6 leading-6 text-sm font-medium text-gray-500 dark:text-gray-400 cursor-not-allowed`:`dow text-center h-6 leading-6 text-sm font-medium text-gray-500 dark:text-gray-400`})}},{key:`updateFocus`,value:function(){var e=new Date(this.picker.viewDate),t=e.getFullYear(),n=e.getMonth(),r=sr(t,n,1),i=pr(r,this.weekStart,this.weekStart);this.first=r,this.last=sr(t,n+1,0),this.start=i,this.focused=this.picker.viewDate}},{key:`updateSelection`,value:function(){var e=this.picker.datepicker,t=e.dates,n=e.rangepicker;this.selected=t,n&&(this.range=n.dates)}},{key:`render`,value:function(){var e=this;this.today=this.todayHighlight?or():void 0,this.disabled=Kn(this.datesDisabled);var t=Tr(this.focused,this.switchLabelFormat,this.locale);if(this.picker.setViewSwitchLabel(t),this.picker.setPrevBtnDisabled(this.first<=this.minDate),this.picker.setNextBtnDisabled(this.last>=this.maxDate),this.calendarWeeks){var n=pr(this.first,1,1);Array.from(this.calendarWeeks.weeks.children).forEach(function(e,t){e.textContent=mr(lr(n,t))})}Array.from(this.grid.children).forEach(function(t,n){var r=t.classList,i=cr(e.start,n),a=new Date(i),o=a.getDay();if(t.className=`datepicker-cell hover:bg-gray-100 dark:hover:bg-gray-600 block flex-1 leading-9 border-0 rounded-lg cursor-pointer text-center text-gray-900 dark:text-white font-semibold text-sm ${e.cellClass}`,t.dataset.date=i,t.textContent=a.getDate(),i<e.first?r.add(`prev`,`text-gray-500`,`dark:text-white`):i>e.last&&r.add(`next`,`text-gray-500`,`dark:text-white`),e.today===i&&r.add(`today`,`bg-gray-100`,`dark:bg-gray-600`),(i<e.minDate||i>e.maxDate||e.disabled.includes(i))&&(r.add(`disabled`,`cursor-not-allowed`,`text-gray-400`,`dark:text-gray-500`),r.remove(`hover:bg-gray-100`,`dark:hover:bg-gray-600`,`text-gray-900`,`dark:text-white`,`cursor-pointer`)),e.daysOfWeekDisabled.includes(o)&&(r.add(`disabled`,`cursor-not-allowed`,`text-gray-400`,`dark:text-gray-500`),r.remove(`hover:bg-gray-100`,`dark:hover:bg-gray-600`,`text-gray-900`,`dark:text-white`,`cursor-pointer`),$n(e.disabled,i)),e.daysOfWeekHighlighted.includes(o)&&r.add(`highlighted`),e.range){var s=H(e.range,2),c=s[0],l=s[1];i>c&&i<l&&(r.add(`range`,`bg-gray-200`,`dark:bg-gray-600`),r.remove(`rounded-lg`,`rounded-l-lg`,`rounded-r-lg`)),i===c&&(r.add(`range-start`,`bg-gray-100`,`dark:bg-gray-600`,`rounded-l-lg`),r.remove(`rounded-lg`,`rounded-r-lg`)),i===l&&(r.add(`range-end`,`bg-gray-100`,`dark:bg-gray-600`,`rounded-r-lg`),r.remove(`rounded-lg`,`rounded-l-lg`))}e.selected.includes(i)&&(r.add(Line truncated
${n?`Expression: "`+n+`"
`:``}`,t),setTimeout(()=>{throw e},0)}var $a=!0;function eo(e){let t=$a;$a=!1;let n=e();return $a=t,n}function to(e,t,n={}){let r;return K(e,t)(e=>r=e,n),r}function K(...e){return no(...e)}var no=()=>{};function ro(e){no=e}var io;function ao(e){io=e}function oo(e,t){let n={};Ka(n,e);let r=[n,...Ia(e)],i=typeof t==`function`?so(r,t):uo(r,t,e);return Ja.bind(null,e,t,i)}function so(e,t){return(n=()=>{},{scope:r={},params:i=[],context:a}={})=>{if(!$a){fo(n,t,La([r,...e]),i);return}fo(n,t.apply(La([r,...e]),i))}}var co={};function lo(e,t){if(co[e])return co[e];let n=Object.getPrototypeOf(async function(){}).constructor,r=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e,i=(()=>{try{let t=new n([`__self`,`scope`],`with (scope) { __self.result = ${r} }; __self.finished = true; return __self.result;`);return Object.defineProperty(t,`name`,{value:`[Alpine] ${e}`}),t}catch(n){return Ya(n,t,e),Promise.resolve()}})();return co[e]=i,i}function uo(e,t,n){let r=lo(t,n);return(i=()=>{},{scope:a={},params:o=[],context:s}={})=>{r.result=void 0,r.finished=!1;let c=La([a,...e]);if(typeof r==`function`){let e=r.call(s,r,c).catch(e=>Ya(e,n,t));r.finished?(fo(i,r.result,c,o,n),r.result=void 0):e.then(e=>{fo(i,e,c,o,n)}).catch(e=>Ya(e,n,t)).finally(()=>r.result=void 0)}}}function fo(e,t,n,r,i){if($a&&typeof t==`function`){let a=t.apply(n,r);a instanceof Promise?a.then(t=>fo(e,t,n,r)).catch(e=>Ya(e,i,t)):e(a)}else typeof t==`object`&&t instanceof Promise?t.then(t=>e(t)):e(t)}function po(...e){return io(...e)}function mo(e,t,n={}){let r={};Ka(r,e);let i=[r,...Ia(e)],a=La([n.scope??{},...i]),o=n.params??[];if(t.includes(`await`)){let e=Object.getPrototypeOf(async function(){}).constructor;return new e([`scope`],`with (scope) { let __result = ${/^[\n\s]*if.*\(.*\)/.test(t.trim())||/^(let|const)\s/.test(t.trim())?`(async()=>{ ${t} })()`:t}; return __result }`).call(n.context,a)}else{let e=/^[\n\s]*if.*\(.*\)/.test(t.trim())||/^(let|const)\s/.test(t.trim())?`(()=>{ ${t} })()`:t,r=Function([`scope`],`with (scope) { let __result = ${e}; return __result }`).call(n.context,a);return typeof r==`function`&&$a?r.apply(a,o):r}}var ho=`x-`;function go(e=``){return ho+e}function _o(e){ho=e}var vo={};function q(e,t){return vo[e]=t,{before(t){if(!vo[t]){console.warn(String.raw`Cannot find directive \`${t}\`. \`${e}\` will use the default order of execution`);return}let n=Lo.indexOf(t);Lo.splice(n>=0?n:Lo.indexOf(`DEFAULT`),0,e)}}}function yo(e){return Object.keys(vo).includes(e)}function bo(e,t,n){if(t=Array.from(t),e._x_virtualDirectives){let n=Object.entries(e._x_virtualDirectives).map(([e,t])=>({name:e,value:t})),r=xo(n);n=n.map(e=>r.find(t=>t.name===e.name)?{name:`x-bind:${e.name}`,value:`"${e.value}"`}:e),t=t.concat(n)}let r={};return t.map(Ao((e,t)=>r[e]=t)).filter(No).map(Fo(r,n)).sort(Ro).map(t=>Do(e,t))}function xo(e){return Array.from(e).map(Ao()).filter(e=>!No(e))}var So=!1,Co=new Map,wo=Symbol();function To(e){So=!0;let t=Symbol();wo=t,Co.set(t,[]);let n=()=>{for(;Co.get(t).length;)Co.get(t).shift()();Co.delete(t)};e(n),So=!1,n()}function Eo(e){let t=[],n=e=>t.push(e),[r,i]=da(e);return t.push(i),[{Alpine:vc,effect:r,cleanup:n,evaluateLater:K.bind(K,e),evaluate:to.bind(to,e)},()=>t.forEach(e=>e())]}function Do(e,t){let n=vo[t.type]||(()=>{}),[r,i]=Eo(e);ba(e,t.original,i);let a=()=>{e._x_ignore||e._x_ignoreSelf||(n.inline&&n.inline(e,t,r),n=n.bind(n,e,t,r),So?Co.get(wo).push(n):n())};return a.runCleanups=i,a}var Oo=(e,t)=>({name:n,value:r})=>(n.startsWith(e)&&(n=n.replace(e,t)),{name:n,value:r}),ko=e=>e;function Ao(e=()=>{}){return({name:t,value:n})=>{let{name:r,value:i}=jo.reduce((e,t)=>t(e),{name:t,value:n});return r!==t&&e(r,t),{name:r,value:i}}}var jo=[];function Mo(e){jo.push(e)}function No({name:e}){return Po().test(e)}var Po=()=>RegExp(`^${ho}([^:^.]+)\\b`);function Fo(e,t){return({name:n,value:r})=>{n===r&&(r=``);let i=n.match(Po()),a=n.match(/:([a-zA-Z0-9\-_:]+)/),o=n.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],s=t||e[n]||n;return{type:i?i[1]:null,value:a?a[1]:null,modifiers:o.map(e=>e.replace(`.`,``)),expression:r,original:s}}}var Io=`DEFAULT`,Lo=[`ignore`,`ref`,`data`,`id`,`anchor`,`bind`,`init`,`for`,`model`,`modelable`,`transition`,`show`,`if`,Io,`teleport`];function Ro(e,t){let n=Lo.indexOf(e.type)===-1?Io:e.type,r=Lo.indexOf(t.type)===-1?Io:t.type;return Lo.indexOf(n)-Lo.indexOf(r)}function zo(e,t,n={},r={}){return e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0,cancelable:!0,...r}))}function Bo(e,t){if(typeof ShadowRoot==`function`&&e instanceof ShadowRoot){Array.from(e.children).forEach(e=>Bo(e,t));return}let n=!1;if(t(e,()=>n=!0),n)return;let r=e.firstElementChild;for(;r;)Bo(r,t,!1),r=r.nextElementSibling}function Vo(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var Ho=!1;function Uo(){Ho&&Vo(`Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.`),Ho=!0,document.body||Vo("Unable to initialize. Trying to lLine truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||n.return==null||n.return()}finally{if(s)throw a}}}}function ud(e,t,n){return(t=vd(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dd(e){if(typeof Symbol<`u`&&e[Symbol.iterator]!=null||e[`@@iterator`]!=null)return Array.from(e)}function fd(){throw TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function pd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function md(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?pd(Object(n),!0).forEach(function(t){ud(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pd(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function hd(){var e,t,n=typeof Symbol==`function`?Symbol:{},r=n.iterator||`@@iterator`,i=n.toStringTag||`@@toStringTag`;function a(n,r,i,a){var c=r&&r.prototype instanceof s?r:s,l=Object.create(c.prototype);return Z(l,`_invoke`,function(n,r,i){var a,s,c,l=0,u=i||[],d=!1,f={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return a=t,s=0,c=e,f.n=n,o}};function p(n,r){for(s=n,c=r,t=0;!d&&l&&!i&&t<u.length;t++){var i,a=u[t],p=f.p,m=a[2];n>3?(i=m===r)&&(c=a[(s=a[4])?5:(s=3,3)],a[4]=a[5]=e):a[0]<=p&&((i=n<2&&p<a[1])?(s=0,f.v=r,f.n=a[1]):p<m&&(i=n<3||a[0]>r||r>m)&&(a[4]=n,a[5]=r,f.n=m,s=0))}if(i||n>1)return o;throw d=!0,r}return function(i,u,m){if(l>1)throw TypeError(`Generator is already running`);for(d&&u===1&&p(u,m),s=u,c=m;(t=s<2?e:c)||!d;){a||(s?s<3?(s>1&&(f.n=-1),p(s,c)):f.n=c:f.v=c);try{if(l=2,a){if(s||(i=`next`),t=a[i]){if(!(t=t.call(a,c)))throw TypeError(`iterator result is not an object`);if(!t.done)return t;c=t.value,s<2&&(s=0)}else s===1&&(t=a.return)&&t.call(a),s<2&&(c=TypeError(`The iterator does not provide a '`+i+`' method`),s=1);a=e}else if((t=(d=f.n<0)?c:n.call(r,f))!==o)break}catch(t){a=e,s=1,c=t}finally{l=1}}return{value:t,done:d}}}(n,i,a),!0),l}var o={};function s(){}function c(){}function l(){}t=Object.getPrototypeOf;var u=[][r]?t(t([][r]())):(Z(t={},r,function(){return this}),t),d=l.prototype=s.prototype=Object.create(u);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,Z(e,i,`GeneratorFunction`)),e.prototype=Object.create(d),e}return c.prototype=l,Z(d,`constructor`,l),Z(l,`constructor`,c),c.displayName=`GeneratorFunction`,Z(l,i,`GeneratorFunction`),Z(d),Z(d,i,`Generator`),Z(d,r,function(){return this}),Z(d,`toString`,function(){return`[object Generator]`}),(hd=function(){return{w:a,m:f}})()}function Z(e,t,n,r){var i=Object.defineProperty;try{i({},``,{})}catch{i=0}Z=function(e,t,n,r){function a(t,n){Z(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a(`next`,0),a(`throw`,1),a(`return`,2))},Z(e,t,n,r)}function gd(e){return od(e)||dd(e)||yd(e)||fd()}function _d(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function vd(e){var t=_d(e,`string`);return typeof t==`symbol`?t:t+``}function yd(e,t){if(e){if(typeof e==`string`)return ad(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ad(e,t):void 0}}var bd={getActiveTrap:function(e){return e?.length>0?e[e.length-1]:null},activateTrap:function(e,t){t!==bd.getActiveTrap(e)&&bd.pauseTrap(e);var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var n=e.indexOf(t);n!==-1&&e.splice(n,1),bd.unpauseTrap(e)},pauseTrap:function(e){bd.getActiveTrap(e)?._setPausedState(!0)},unpauseTrap:function(e){var t=bd.getActiveTrap(e);t&&!t._isManuallyPaused()&&t._setPausedState(!1)}},xd=function(e){return e.tagName&&e.tagName.toLowerCase()===`input`&&typeof e.select==`function`},Sd=function(e){return e?.key===`Escape`||e?.key===`Esc`||e?.keyCode===27},Cd=function(e){return e?.key===`Tab`||e?.keyCode===9},wd=function(e){return Cd(e)&&!e.shiftKey},Td=function(e){return Cd(e)&&e.shiftKey},Ed=function(e){return setTimeout(e,0)},Dd=function(e){var t=[...arguments].slice(1);return typeof e==`function`?e.apply(void 0,t):e},Od=function(e){return e.target.shadowRoot&&typeof e.composedPath==`function`?e.composedPath()[0]:e.target},kd=[],Ad=function(e,t){var n=t?.document||document,r=t?.trapStack||kd,i=md({returnFocusOnDeactivate:!0,escapeDeactivates:!0,delayInitialFocus:!0,isolateSubtrees:!1,isKeyForward:wd,isKeyBackward:Td},t),a={containers:[],containerGroups:[],tabbableGroups:[],adjacentElements:new Set,alreadySilent:new Set,nodeFocusedBeforeActivation:null,mostRecentlyFocusedNode:null,active:!1,paused:!1,manuallyPaused:!1,delayInitialFocusTimer:void 0,recentNavEvent:void 0},o,s=function(e,t,n){return e&&e[t]!==void 0?e[t]:i[n||t]},c=function(e,t){var n=typeof t?.composedPath==`function`?t.composedPath():void 0;return a.containerGroups.findIndex(function(t){var r=t.containe Line truncated
Atom CMS is a CMS for made for the community to enjoy. You can join our wonderful community at https://discord.gg/rX3aShUHdg
`,`color: #14619c; -webkit-text-stroke: 2px black; font-size: 32px; font-weight: bold;`,``);
View File
File mode changed.

Before

Width:  |  Height:  |  Size: 260 B

After

Width:  |  Height:  |  Size: 260 B

+9
View File
@@ -0,0 +1,9 @@
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));function u(e,t){return function(){return e.apply(t,arguments)}}var{toString:d}=Object.prototype,{getPrototypeOf:f}=Object,{iterator:p,toStringTag:m}=Symbol,h=(e=>t=>{let n=d.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),g=e=>(e=e.toLowerCase(),t=>h(t)===e),_=e=>t=>typeof t===e,{isArray:v}=Array,y=_(`undefined`);function b(e){return e!==null&&!y(e)&&e.constructor!==null&&!y(e.constructor)&&w(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var x=g(`ArrayBuffer`);function S(e){let t;return t=typeof ArrayBuffer<`u`&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&x(e.buffer),t}var C=_(`string`),w=_(`function`),ee=_(`number`),T=e=>typeof e==`object`&&!!e,E=e=>e===!0||e===!1,D=e=>{if(h(e)!==`object`)return!1;let t=f(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(m in e)&&!(p in e)},O=e=>{if(!T(e)||b(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},te=g(`Date`),k=g(`File`),ne=e=>!!(e&&e.uri!==void 0),re=e=>e&&e.getParts!==void 0,ie=g(`Blob`),ae=g(`FileList`),oe=e=>T(e)&&w(e.pipe);function se(){return typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{}}var ce=se(),le=ce.FormData===void 0?void 0:ce.FormData,ue=e=>{if(!e)return!1;if(le&&e instanceof le)return!0;let t=f(e);if(!t||t===Object.prototype||!w(e.append))return!1;let n=h(e);return n===`formdata`||n===`object`&&w(e.toString)&&e.toString()===`[object FormData]`},de=g(`URLSearchParams`),[fe,pe,me,he]=[`ReadableStream`,`Request`,`Response`,`Headers`].map(g),ge=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,``);function A(e,t,{allOwnKeys:n=!1}={}){if(e==null)return;let r,i;if(typeof e!=`object`&&(e=[e]),v(e))for(r=0,i=e.length;r<i;r++)t.call(null,e[r],r,e);else{if(b(e))return;let i=n?Object.getOwnPropertyNames(e):Object.keys(e),a=i.length,o;for(r=0;r<a;r++)o=i[r],t.call(null,e[o],o,e)}}function _e(e,t){if(b(e))return null;t=t.toLowerCase();let n=Object.keys(e),r=n.length,i;for(;r-- >0;)if(i=n[r],t===i.toLowerCase())return i;return null}var j=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:global,ve=e=>!y(e)&&e!==j;function ye(...e){let{caseless:t,skipUndefined:n}=ve(this)&&this||{},r={},i=(e,i)=>{if(i===`__proto__`||i===`constructor`||i===`prototype`)return;let a=t&&_e(r,i)||i,o=M(r,a)?r[a]:void 0;D(o)&&D(e)?r[a]=ye(o,e):D(e)?r[a]=ye({},e):v(e)?r[a]=e.slice():(!n||!y(e))&&(r[a]=e)};for(let t=0,n=e.length;t<n;t++)e[t]&&A(e[t],i);return r}var be=(e,t,n,{allOwnKeys:r}={})=>(A(t,(t,r)=>{n&&w(t)?Object.defineProperty(e,r,{__proto__:null,value:u(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{__proto__:null,value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),xe=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Se=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,`constructor`,{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,`super`,{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},Ce=(e,t,n,r)=>{let i,a,o,s={};if(t||={},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)o=i[a],(!r||r(o,e,t))&&!s[o]&&(t[o]=e[o],s[o]=!0);e=n!==!1&&f(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},we=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},Te=e=>{if(!e)return null;if(v(e))return e;let t=e.length;if(!ee(t))return null;let n=Array(t);for(;t-- >0;)n[t]=e[t];return n},Ee=(e=>t=>e&&t instanceof e)(typeof Uint8Array<`u`&&f(Uint8Array)),De=(e,t)=>{let n=(e&&e[p]).call(e),r;for(;(r=n.next())&&!r.done;){let n=r.value;t.call(e,n[0],n[1])}},Oe=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},ke=g(`HTMLFormElement`),Ae=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),M=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),je=g(`RegExp`),Me=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};A(n,(n,i)=>{let a;(a=t(n,i,e))!==!1&&(r[i]=a||n)}),Object.defineProperties(e,r)},Ne=e=>{Me(e,(t,n)=>{if(w(e)&&[`arguments`,`caller`,`callee`].includes(n))return!1;let r=e[n];if(w(r)){if(t.enumerable=!1,`writable`inLine truncated
`).forEach(function(e){i=e.indexOf(`:`),n=e.substring(0,i).trim().toLowerCase(),r=e.substring(i+1).trim(),!(!n||t[n]&&He[n])&&(n===`set-cookie`?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+`, `+r:r)}),t};function We(e){let t=0,n=e.length;for(;t<n;){let n=e.charCodeAt(t);if(n!==9&&n!==32)break;t+=1}for(;n>t;){let t=e.charCodeAt(n-1);if(t!==9&&t!==32)break;--n}return t===0&&n===e.length?e:e.slice(t,n)}var Ge=RegExp(`[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+`,`g`),Ke=RegExp(`[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+`,`g`);function P(e,t){return N.isArray(e)?e.map(e=>P(e,t)):We(String(e).replace(t,``))}var qe=e=>P(e,Ge),Je=e=>P(e,Ke);function Ye(e){let t=Object.create(null);return N.forEach(e.toJSON(),(e,n)=>{t[n]=Je(e)}),t}var Xe=Symbol(`internals`);function F(e){return e&&String(e).trim().toLowerCase()}function I(e){return e===!1||e==null?e:N.isArray(e)?e.map(I):qe(String(e))}function Ze(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var Qe=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function $e(e,t,n,r,i){if(N.isFunction(r))return r.call(this,t,n);if(i&&(t=n),N.isString(t)){if(N.isString(r))return t.indexOf(r)!==-1;if(N.isRegExp(r))return r.test(t)}}function et(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}function tt(e,t){let n=N.toCamelCase(` `+t);[`get`,`set`,`has`].forEach(r=>{Object.defineProperty(e,r+n,{__proto__:null,value:function(e,n,i){return this[r].call(this,t,e,n,i)},configurable:!0})})}var L=class{constructor(e){e&&this.set(e)}set(e,t,n){let r=this;function i(e,t,n){let i=F(t);if(!i)throw Error(`header name must be a non-empty string`);let a=N.findKey(r,i);(!a||r[a]===void 0||n===!0||n===void 0&&r[a]!==!1)&&(r[a||t]=I(e))}let a=(e,t)=>N.forEach(e,(e,n)=>i(e,n,t));if(N.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(N.isString(e)&&(e=e.trim())&&!Qe(e))a(Ue(e),t);else if(N.isObject(e)&&N.isIterable(e)){let n={},r,i;for(let t of e){if(!N.isArray(t))throw TypeError(`Object iterator must return a key-value pair`);n[i=t[0]]=(r=n[i])?N.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}a(n,t)}else e!=null&&i(t,e,n);return this}get(e,t){if(e=F(e),e){let n=N.findKey(this,e);if(n){let e=this[n];if(!t)return e;if(t===!0)return Ze(e);if(N.isFunction(t))return t.call(this,e,n);if(N.isRegExp(t))return t.exec(e);throw TypeError(`parser must be boolean|regexp|function`)}}}has(e,t){if(e=F(e),e){let n=N.findKey(this,e);return!!(n&&this[n]!==void 0&&(!t||$e(this,this[n],n,t)))}return!1}delete(e,t){let n=this,r=!1;function i(e){if(e=F(e),e){let i=N.findKey(n,e);i&&(!t||$e(n,n[i],i,t))&&(delete n[i],r=!0)}}return N.isArray(e)?e.forEach(i):i(e),r}clear(e){let t=Object.keys(this),n=t.length,r=!1;for(;n--;){let i=t[n];(!e||$e(this,this[i],i,e,!0))&&(delete this[i],r=!0)}return r}normalize(e){let t=this,n={};return N.forEach(this,(r,i)=>{let a=N.findKey(n,i);if(a){t[a]=I(r),delete t[i];return}let o=e?et(i):String(i).trim();o!==i&&delete t[i],t[o]=I(r),n[o]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){let t=Object.create(null);return N.forEach(this,(n,r)=>{n!=null&&n!==!1&&(t[r]=e&&N.isArray(n)?n.join(`, `):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+`: `+t).join(`
`)}getSetCookie(){return this.get(`set-cookie`)||[]}get[Symbol.toStringTag](){return`AxiosHeaders`}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){let n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){let t=(this[Xe]=this[Xe]={accessors:{}}).accessors,n=this.prototype;function r(e){let r=F(e);t[r]||(tt(n,e),t[r]=!0)}return N.isArray(e)?e.forEach(r):r(e),this}};L.accessor([`Content-Type`,`Content-Length`,`Accept`,`Accept-Encoding`,`User-Agent`,`Authorization`]),N.reduceDescriptors(L.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),N.freezeMethods(L);var nt=`[REDACTED ****]`;function rt(e){if(N.hasOwnProp(e,`toJSON`))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(N.hasOwnProp(t,`toJSON`))return!0;t=Object.getPrototypeOf(t)}return!1}function it(e,t){let n=new Set(t.map(e=>String(e).toLowerCase())),r=[],i=e=>{if(typeof e!=`object`||!e||N.isBuffer(e))return e;if(r.indexOf(e)!==-1)return;e instanceof L&&(e=e.toJSON()),r.push(e);let t;if(N.isArray(e))t=[],e.forEach((e,n)=>{let r=i(e);N.isUndefined(r)||(t[n]=r)});else{if(!N.isPlainObject(e)&&rt(e))return r.pop(),e;t=Object.create(null);for(let[r,a]of Object.entries(e)){let e=n.has(r.toLowerCase())?nt:i(a);N.isUndefined(e)||(t[r]=e)}}return r.pop(),t};return i(e)}var R=class e extends Error{static from(t,n,r,i,a,o){let s=new e(t.message,n||t.code,r,i,a);return s.cause=t,s.name=t.name,t.status!=null&&s.status==null&&(s.status=t.status),o&&Object.assign(s,o),s}constructor(e,t,n,r,i){super(e),Object.defineProperty(this,`message`,{__proto__:null,value:e,enumerable:!0,writable:!0,configurable:!0}),this.name=`AxiosError`,this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status)}toJSON(){let e=this.config,t=e&&N.hasOwnProp(e,`redact`)?e.redact:void 0,n=N.isArray(t)&&t.length>0?it(e,t):N.toJSONObject(e);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:n,code:this.code,status:this.status}}};R.ERR_BAD_OPTION_VALUE=`ERR_BAD_OPTION_VALUE`,R.ERR_BAD_OPTION=`ERR_BAD_OPTION`,R.ECONNABORTED=`ECONNABORTED`,R.ETIMEDOUT=`ETIMEDOUT`,R.ECONNREFUSED=`ECONNREFUSED`,R.ERR_NETWORK=`ERR_NETWORK`,R.ERR_FR_TOO_MANY_REDIRECTS=`ERR_FR_TOO_MANY_REDIRECTS`,R.ERR_DEPRECATED=`ERR_DEPRECATED`,R.ERR_BAD_RESPONSE=`ERR_BAD_RESPONSE`,R.ERR_BAD_REQUEST=`ERR_BAD_REQUEST`,R.ERR_CANCELED=`ERR_CANCELED`,R.ERR_NOT_SUPPORT=`ERR_NOT_SUPPORT`,R.ERR_INVALID_URL=`ERR_INVALID_URL`,R.ERR_FORM_DATA_DEPTH_EXCEEDED=`ERR_FORM_DATA_DEPTH_EXCEEDED`;function at(e){return N.isPlainObject(e)||N.isArray(e)}function ot(e){return N.endsWith(e,`[]`)?e.slice(0,-2):e}function st(e,t,n){return e?e.concat(t).map(function(e,t){return e=ot(e),!n&&t?`[`+e+`]`:e}).join(n?`.`:``):t}function ct(e){return N.isArray(e)&&!e.some(at)}var lt=N.toFlatObject(N,{},null,function(e){return/^is[A-Z]/.test(e)});function z(e,t,n){if(!N.isObject(e))throw TypeError(`target must be an object`);t||=new FormData,n=N.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!N.isUndefined(t[e])});let r=n.metaTokens,i=n.visitor||d,a=n.dots,o=n.indexes,s=n.Blob||typeof Blob<`u`&&Blob,c=n.maxDepth===void 0?100:n.maxDepth,l=s&&N.isSpecCompliantForm(t);if(!N.isFunction(i))throw TypeError(`visitor must be a function`);function u(e){if(e===null)return``;if(N.isDate(e))return e.toISOString();if(N.isBoolean(e))return e.toString();if(!l&&N.isBlob(e))throw new R(`Blob is not supported. Use a Buffer instead.`);return N.isArrayBuffer(e)||N.isTypedArray(e)?l&&typeof Blob==`function`?new Blob([e]):Buffer.from(e):e}function d(e,n,i){let s=e;if(N.isReactNative(t)&&N.isReactNativeBlob(e))return t.append(st(i,n,a),u(e)),!1;if(e&&!i&&typeof e==`object`){if(N.endsWith(n,`{}`))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(N.isArray(e)&&ct(e)||(N.isFileList(e)||N.endsWith(n,`[]`))&&(s=N.toArray(e)))return n=ot(n),s.forEach(function(e,r){!(N.isUndefined(e)||e===null)&&t.append(o===!0?st([n],r,a):o===null?n:n+`[]`,u(e))}),!1}return at(e)?!0:(t.append(st(i,n,a),u(e)),!1)}let f=[],p=Object.assign(lt,{defaultVisitor:d,convertValue:u,isVisitable:at});function m(e,n,r=0){if(!N.isUndefined(e)){if(r>c)throw new R(`Object is too deeply nested (`+r+` levels). Max depth: `+c,R.ERR_FORM_DATA_DEPTH_EXCEEDED);if(f.indexOf(e)!==-1)throw Error(`Circular reference detected in `+n.join(`.`));f.push(e),N.forEach(e,function(e,a){(!(N.isUndefined(e)||e===null)&&i.call(t,e,N.isString(a)?a.trim():a,n,p))===!0&&m(e,n?n.concat(a):[a],r+1)}),f.pop()}}if(!N.isObject(e))throw TypeError(`data must be an object`);return m(e),t}function ut(e){let t={"!":`%21`,"'":`%27`,"(":`%28`,")":`%29`,"~":`%7E`,"%20":`+`};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(e){return t[e]})}function dt(e,t){this._pairs=[],e&&z(e,this,t)}var ft=dt.prototype;ft.append=function(e Line truncated
`+e.map(sn).join(`
`):` `+sn(e[0]):`as no adapter specified`),`ERR_NOT_SUPPORT`)}return i}var un={getAdapter:ln,adapters:on};function dn(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new U(null,e)}function fn(e){return dn(e),e.headers=L.from(e.headers),e.data=kt.call(e,e.transformRequest),[`post`,`put`,`patch`].indexOf(e.method)!==-1&&e.headers.setContentType(`application/x-www-form-urlencoded`,!1),un.getAdapter(e.adapter||H.adapter,e)(e).then(function(t){dn(e),e.response=t;try{t.data=kt.call(e,e.transformResponse,t)}finally{delete e.response}return t.headers=L.from(t.headers),t},function(t){if(!At(t)&&(dn(e),t&&t.response)){e.response=t.response;try{t.response.data=kt.call(e,e.transformResponse,t.response)}finally{delete e.response}t.response.headers=L.from(t.response.headers)}return Promise.reject(t)})}var J={};[`object`,`boolean`,`number`,`function`,`string`,`symbol`].forEach((e,t)=>{J[e]=function(n){return typeof n===e||`a`+(t<1?`n `:` `)+e}});var pn={};J.transitional=function(e,t,n){function r(e,t){return`[Axios v`+K+`] Transitional option '`+e+`'`+t+(n?`. `+n:``)}return(n,i,a)=>{if(e===!1)throw new R(r(i,` has been removed`+(t?` in `+t:``)),R.ERR_DEPRECATED);return t&&!pn[i]&&(pn[i]=!0,console.warn(r(i,` has been deprecated since v`+t+` and will be removed in the near future`))),e?e(n,i,a):!0}},J.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};function mn(e,t,n){if(typeof e!=`object`)throw new R(`options must be an object`,R.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),i=r.length;for(;i-- >0;){let a=r[i],o=Object.prototype.hasOwnProperty.call(t,a)?t[a]:void 0;if(o){let t=e[a],n=t===void 0||o(t,a,e);if(n!==!0)throw new R(`option `+a+` must be `+n,R.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new R(`Unknown option `+a,R.ERR_BAD_OPTION)}}var Y={assertOptions:mn,validators:J},X=Y.validators,Z=class{constructor(e){this.defaults=e||{},this.interceptors={request:new ht,response:new ht}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=Error();let n=(()=>{if(!t.stack)return``;let e=t.stack.indexOf(`
`);return e===-1?``:t.stack.slice(e+1)})();try{if(!e.stack)e.stack=n;else if(n){let t=n.indexOf(`
`),r=t===-1?-1:n.indexOf(`
`,t+1),i=r===-1?``:n.slice(r+1);String(e.stack).endsWith(i)||(e.stack+=`
`+n)}}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=G(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&Y.assertOptions(n,{silentJSONParsing:X.transitional(X.boolean),forcedJSONParsing:X.transitional(X.boolean),clarifyTimeoutError:X.transitional(X.boolean),legacyInterceptorReqResOrdering:X.transitional(X.boolean)},!1),r!=null&&(N.isFunction(r)?t.paramsSerializer={serialize:r}:Y.assertOptions(r,{encode:X.function,serialize:X.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),Y.assertOptions(t,{baseUrl:X.spelling(`baseURL`),withXsrfToken:X.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&N.merge(i.common,i[t.method]);i&&N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`query`,`common`],e=>{delete i[e]}),t.headers=L.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||gt;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[fn.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u<d;)l=l.then(e[u++],e[u++]);return l}d=o.length;let f=t;for(;u<d;){let e=o[u++],t=o[u++];try{f=e(f)}catch(e){t.call(this,e);break}}try{l=fn.call(this,f)}catch(e){return Promise.reject(e)}for(u=0,d=c.length;u<d;)l=l.then(c[u++],c[u++]);return l}getUri(e){return e=G(this.defaults,e),mt(Vt(e.baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}};N.forEach([`delete`,`get`,`head`,`options`],function(e){Z.prototype[e]=function(t,n){return this.request(G(n||{},{method:e,url:t,data:(n||{}).data}))}}),N.forEach([`post`,`put`,`patch`,`query`],function(e){function t(t){return function(n,r,i){return this.request(G(i||{},{method:e,headers:t?{"Content-Type":`multipart/form-data`}:{},url:n,data:r}))}}Z.prototype[e]=t(),e!==`query`&&(Z.prototype[e+`Form`]=t(!0))});var hn=class e{constructor(e){if(typeof e!=`function`)throw TypeError(`executor must be a function.`);let t;this.promise=new Promise(function(e){t=e});let n=this;this.promise.then(e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new U(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function gn(e){return function(t){return e.apply(null,t)}}function _n(e){return N.isObject(e)&&e.isAxiosError===!0}var Q={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Q).forEach(([e,t])=>{Q[t]=e});function vn(e){let t=new Z(e),n=u(Z.prototype.request,t);return N.extend(n,Z.prototype,t,{allOwnKeys:!0}),N.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return vn(G(e,t))},n}var $=vn(H);$.Axios=Z,$.CanceledError=U,$.CancelToken=hn,$.isCancel=At,$.VERSION=K,$.toFormData=z,$.AxiosError=R,$.Cancel=$.CanceledError,$.all=function(e) Line truncated
-9
View File
@@ -1,9 +0,0 @@
import{n as At}from"./chunk-BqhQeaEc.js";function et(e,t){return function(){return e.apply(t,arguments)}}var{toString:vt}=Object.prototype,{getPrototypeOf:ce}=Object,{iterator:fe,toStringTag:tt}=Symbol,de=(e=>t=>{const r=vt.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),D=e=>(e=e.toLowerCase(),t=>de(t)===e),pe=e=>t=>typeof t===e,{isArray:$}=Array,J=pe("undefined");function Q(e){return e!==null&&!J(e)&&e.constructor!==null&&!J(e.constructor)&&x(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var rt=D("ArrayBuffer");function Tt(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&rt(e.buffer),t}var Ct=pe("string"),x=pe("function"),nt=pe("number"),Y=e=>e!==null&&typeof e=="object",xt=e=>e===!0||e===!1,ie=e=>{if(de(e)!=="object")return!1;const t=ce(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(tt in e)&&!(fe in e)},Nt=e=>{if(!Y(e)||Q(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Pt=D("Date"),Dt=D("File"),Lt=e=>!!(e&&typeof e.uri<"u"),Ut=e=>e&&typeof e.getParts<"u",Ft=D("Blob"),Bt=D("FileList"),kt=e=>Y(e)&&x(e.pipe);function jt(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}var qe=jt(),He=typeof qe.FormData<"u"?qe.FormData:void 0,It=e=>{if(!e)return!1;if(He&&e instanceof He)return!0;const t=ce(e);if(!t||t===Object.prototype||!x(e.append))return!1;const r=de(e);return r==="formdata"||r==="object"&&x(e.toString)&&e.toString()==="[object FormData]"},qt=D("URLSearchParams"),[Ht,Mt,zt,Vt]=["ReadableStream","Request","Response","Headers"].map(D),Wt=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Z(e,t,{allOwnKeys:r=!1}={}){if(e===null||typeof e>"u")return;let n,s;if(typeof e!="object"&&(e=[e]),$(e))for(n=0,s=e.length;n<s;n++)t.call(null,e[n],n,e);else{if(Q(e))return;const o=r?Object.getOwnPropertyNames(e):Object.keys(e),i=o.length;let l;for(n=0;n<i;n++)l=o[n],t.call(null,e[l],l,e)}}function st(e,t){if(Q(e))return null;t=t.toLowerCase();const r=Object.keys(e);let n=r.length,s;for(;n-- >0;)if(s=r[n],t===s.toLowerCase())return s;return null}var H=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,ot=e=>!J(e)&&e!==H;function Se(...e){const{caseless:t,skipUndefined:r}=ot(this)&&this||{},n={},s=(o,i)=>{if(i==="__proto__"||i==="constructor"||i==="prototype")return;const l=t&&st(n,i)||i,u=_e(n,l)?n[l]:void 0;ie(u)&&ie(o)?n[l]=Se(u,o):ie(o)?n[l]=Se({},o):$(o)?n[l]=o.slice():(!r||!J(o))&&(n[l]=o)};for(let o=0,i=e.length;o<i;o++)e[o]&&Z(e[o],s);return n}var Jt=(e,t,r,{allOwnKeys:n}={})=>(Z(t,(s,o)=>{r&&x(s)?Object.defineProperty(e,o,{__proto__:null,value:et(s,r),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{__proto__:null,value:s,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:n}),e),$t=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Kt=(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),r&&Object.assign(e.prototype,r)},Xt=(e,t,r,n)=>{let s,o,i;const l={};if(t=t||{},e==null)return t;do{for(s=Object.getOwnPropertyNames(e),o=s.length;o-- >0;)i=s[o],(!n||n(i,e,t))&&!l[i]&&(t[i]=e[i],l[i]=!0);e=r!==!1&&ce(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},Gt=(e,t,r)=>{e=String(e),(r===void 0||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return n!==-1&&n===r},Qt=e=>{if(!e)return null;if($(e))return e;let t=e.length;if(!nt(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},Yt=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&ce(Uint8Array)),Zt=(e,t)=>{const r=(e&&e[fe]).call(e);let n;for(;(n=r.next())&&!n.done;){const s=n.value;t.call(e,s[0],s[1])}},er=(e,t)=>{let r;const n=[];for(;(r=e.exec(t))!==null;)n.push(r);return n},tr=D("HTMLFormElement"),rr=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,n,s){return n.toUpperCase()+s}),_e=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),nr=D("RegExp"),it=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};Z(r,(s,o)=>{let i;(i=t(s,o,e))!==!1&&(n[o]=i||s)}),Object.defineProperties(e,n)},sr=e=>{it(e,(t,r)=>{if(x(e)&&["arguments","caller","callee"].includes(r))return!1;const n=e[r];if(x(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},or=(e,t)=>{const r={},n=s=>{s.forEach(o=>{r[o]=!0})};return $(e)?n(e):n(String(e).split(t)),r},ir=()=>{},ar=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function lr(e){return!!(e&&x(e.append)&&e[tt]==="FormData"&&e[fe])}var ur=e=>{const t=new WeakSet,r=n=>{if(Y(n)){if(t.has(n))return;if(Q(n))return n;if(!("toJSON"in n)){t.add(n);const s=$(n)?[]:{};return Z(n,(o,i)=>{const l=r(o);!J(l)&&(sLine truncated
`).forEach(function(i){s=i.indexOf(":"),r=i.substring(0,s).trim().toLowerCase(),n=i.substring(s+1).trim(),!(!r||t[r]&&hr[r])&&(r==="set-cookie"?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)}),t};function yr(e){let t=0,r=e.length;for(;t<r;){const n=e.charCodeAt(t);if(n!==9&&n!==32)break;t+=1}for(;r>t;){const n=e.charCodeAt(r-1);if(n!==9&&n!==32)break;r-=1}return t===0&&r===e.length?e:e.slice(t,r)}var br=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),wr=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function Ce(e,t){return a.isArray(e)?e.map(r=>Ce(r,t)):yr(String(e).replace(t,""))}var Er=e=>Ce(e,br),Rr=e=>Ce(e,wr);function lt(e){const t=Object.create(null);return a.forEach(e.toJSON(),(r,n)=>{t[n]=Rr(r)}),t}var Me=Symbol("internals");function G(e){return e&&String(e).trim().toLowerCase()}function ae(e){return e===!1||e==null?e:a.isArray(e)?e.map(ae):Er(String(e))}function gr(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}var Or=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Ee(e,t,r,n,s){if(a.isFunction(n))return n.call(this,t,r);if(s&&(t=r),!!a.isString(t)){if(a.isString(n))return t.indexOf(n)!==-1;if(a.isRegExp(n))return n.test(t)}}function Sr(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,r,n)=>r.toUpperCase()+n)}function _r(e,t){const r=a.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+r,{__proto__:null,value:function(s,o,i){return this[n].call(this,t,s,o,i)},configurable:!0})})}var T=class{constructor(e){e&&this.set(e)}set(e,t,r){const n=this;function s(i,l,u){const c=G(l);if(!c)throw new Error("header name must be a non-empty string");const f=a.findKey(n,c);(!f||n[f]===void 0||u===!0||u===void 0&&n[f]!==!1)&&(n[f||l]=ae(i))}const o=(i,l)=>a.forEach(i,(u,c)=>s(u,c,l));if(a.isPlainObject(e)||e instanceof this.constructor)o(e,t);else if(a.isString(e)&&(e=e.trim())&&!Or(e))o(mr(e),t);else if(a.isObject(e)&&a.isIterable(e)){let i={},l,u;for(const c of e){if(!a.isArray(c))throw TypeError("Object iterator must return a key-value pair");i[u=c[0]]=(l=i[u])?a.isArray(l)?[...l,c[1]]:[l,c[1]]:c[1]}o(i,t)}else e!=null&&s(t,e,r);return this}get(e,t){if(e=G(e),e){const r=a.findKey(this,e);if(r){const n=this[r];if(!t)return n;if(t===!0)return gr(n);if(a.isFunction(t))return t.call(this,n,r);if(a.isRegExp(t))return t.exec(n);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=G(e),e){const r=a.findKey(this,e);return!!(r&&this[r]!==void 0&&(!t||Ee(this,this[r],r,t)))}return!1}delete(e,t){const r=this;let n=!1;function s(o){if(o=G(o),o){const i=a.findKey(r,o);i&&(!t||Ee(r,r[i],i,t))&&(delete r[i],n=!0)}}return a.isArray(e)?e.forEach(s):s(e),n}clear(e){const t=Object.keys(this);let r=t.length,n=!1;for(;r--;){const s=t[r];(!e||Ee(this,this[s],s,e,!0))&&(delete this[s],n=!0)}return n}normalize(e){const t=this,r={};return a.forEach(this,(n,s)=>{const o=a.findKey(r,s);if(o){t[o]=ae(n),delete t[s];return}const i=e?Sr(s):String(s).trim();i!==s&&delete t[s],t[i]=ae(n),r[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return a.forEach(this,(r,n)=>{r!=null&&r!==!1&&(t[n]=e&&a.isArray(r)?r.join(", "):r)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join(`
`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach(n=>r.set(n)),r}static accessor(e){const t=(this[Me]=this[Me]={accessors:{}}).accessors,r=this.prototype;function n(s){const o=G(s);t[o]||(_r(r,s),t[o]=!0)}return a.isArray(e)?e.forEach(n):n(e),this}};T.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);a.reduceDescriptors(T.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(n){this[r]=n}}});a.freezeMethods(T);var Ar="[REDACTED ****]";function vr(e){if(a.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(a.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}function Tr(e,t){const r=new Set(t.map(o=>String(o).toLowerCase())),n=[],s=o=>{if(o===null||typeof o!="object"||a.isBuffer(o))return o;if(n.indexOf(o)!==-1)return;o instanceof T&&(o=o.toJSON()),n.push(o);let i;if(a.isArray(o))i=[],o.forEach((l,u)=>{const c=s(l);a.isUndefined(c)||(i[u]=c)});else{if(!a.isPlainObject(o)&&vr(o))return n.pop(),o;i=Object.create(null);for(const[l,u]of Object.entries(o)){const c=r.has(l.toLowerCase())?Ar:s(u);a.isUndefined(c)||(i[l]=c)}}return n.pop(),i};return s(e)}var p=class ut extends Error{static from(t,r,n,s,o,i){const l=new ut(t.message,r||t.code,n,s,o);return l.cause=t,l.name=t.name,t.status!=null&&l.status==null&&(l.status=t.status),i&&Object.assign(l,i),l}constructor(t,r,n,s,o){super(t),Object.defineProperty(this,"message",{__proto__:null,value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,r&&(this.code=r),n&&(this.config=n),s&&(this.request=s),o&&(this.response=o,this.status=o.status)}toJSON(){const t=this.config,r=t&&a.hasOwnProp(t,"redact")?t.redact:void 0,n=a.isArray(r)&&r.length>0?Tr(t,r):a.toJSONObject(t);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:n,code:this.code,status:this.status}}};p.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";p.ERR_BAD_OPTION="ERR_BAD_OPTION";p.ECONNABORTED="ECONNABORTED";p.ETIMEDOUT="ETIMEDOUT";p.ECONNREFUSED="ECONNREFUSED";p.ERR_NETWORK="ERR_NETWORK";p.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";p.ERR_DEPRECATED="ERR_DEPRECATED";p.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";p.ERR_BAD_REQUEST="ERR_BAD_REQUEST";p.ERR_CANCELED="ERR_CANCELED";p.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";p.ERR_INVALID_URL="ERR_INVALID_URL";p.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";function Ae(e){return a.isPlainObject(e)||a.isArray(e)}function ct(e){return a.endsWith(e,"[]")?e.slice(0,-2):e}function Re(e,t,r){return e?e.concat(t).map(function(s,o){return s=ct(s),!r&&o?"["+s+"]":s}).join(r?".":""):t}function Cr(e){return a.isArray(e)&&!e.some(Ae)}var xr=a.toFlatObject(a,{},null,function(t){return/^is[A-Z]/.test(t)});function he(e,t,r){if(!a.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,r=a.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(d,h){return!a.isUndefined(h[d])});const n=r.metaTokens,s=r.visitor||m,o=r.dots,i=r.indexes,l=r.Blob||typeof Blob<"u"&&Blob,u=r.maxDepth===void 0?100:r.maxDepth,c=l&&a.isSpecCompliantForm(t);if(!a.isFunction(s))throw new TypeError("visitor must be a function");function f(y){if(y===null)return"";if(a.isDate(y))return y.toISOString();if(a.isBoolean(y))return y.toString();if(!c&&a.isBlob(y))throw new p("Blob is not supported. Use a Buffer instead.");return a.isArrayBuffer(y)||a.isTypedArray(y)?c&&typeof Blob=="function"?new Blob([y]):Buffer.from(y):y}function m(y,d,h){let g=y;if(a.isReactNative(t)&&a.isReactNativeBlob(y))return t.append(Re(h,d,o),f(y)),!1;if(y&&!h&&typeof y=="object"){if(a.endsWith(d,"{}"))d=n?d:d.slice(0,-2),y=JSON.stringify(y);else if(a.isArray(y)&&Cr(y)||(a.isFileList(y)||a.endsWith(d,"[]"))&&(g=a.toArray(y)))return d=ct(d),g.forEach(function(E,C){!(a.isUndefined(E)||E===null)&&t.append(i===!0?Re([d],C,o):i===null?d:d+"[]",f(E))}),!1}return Ae(y)?!0:(t.append(Re(h,d,o),f(y)),!1)}const b=[],w=Object.assign(xr,{defaultVisitor:m,convertValue:f,isVisitable:Ae});function S(y,d,h=0){if(!a.isUndefined(y)){if(h>u)throw new p("Object is too deeply nested ("+h+" levels). Max depth: "+u,p.ERR_FORM_DATA_DEPTH_EXCEEDED);if(b.indexOf(y)!==-1)throw Error("Circular reference detected in "+d.join("."));b.push(y),a.forEach(y,function(R,E){(!(a.isUndefined(R)||R===null)&&s.call(t,R,a.isString(E)?E.trim():E,d,w))===!0&&S(R,d?d.concat(E):[E],h+1)}),b.pop()}}if(!a.isObject(e))throw new TypeError("data must be an object");return S(e),t}function ze(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(n){return t[n]})}function xe(e,t){this._pairs=[],e&&he(e,t Line truncated
`+i.map(Qe).join(`
`):" "+Qe(i[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return s}var Et={getAdapter:cn,adapters:Le};function Oe(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new te(null,e)}function Ye(e){return Oe(e),e.headers=T.from(e.headers),e.data=ge.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Et.getAdapter(e.adapter||ee.adapter,e)(e).then(function(r){Oe(e),e.response=r;try{r.data=ge.call(e,e.transformResponse,r)}finally{delete e.response}return r.headers=T.from(r.headers),r},function(r){if(!ht(r)&&(Oe(e),r&&r.response)){e.response=r.response;try{r.response.data=ge.call(e,e.transformResponse,r.response)}finally{delete e.response}r.response.headers=T.from(r.response.headers)}return Promise.reject(r)})}var me={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{me[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});var Ze={};me.transitional=function(t,r,n){function s(o,i){return"[Axios v"+De+"] Transitional option '"+o+"'"+i+(n?". "+n:"")}return(o,i,l)=>{if(t===!1)throw new p(s(i," has been removed"+(r?" in "+r:"")),p.ERR_DEPRECATED);return r&&!Ze[i]&&(Ze[i]=!0,console.warn(s(i," has been deprecated since v"+r+" and will be removed in the near future"))),t?t(o,i,l):!0}};me.spelling=function(t){return(r,n)=>(console.warn(`${n} is likely a misspelling of ${t}`),!0)};function fn(e,t,r){if(typeof e!="object")throw new p("options must be an object",p.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let s=n.length;for(;s-- >0;){const o=n[s],i=Object.prototype.hasOwnProperty.call(t,o)?t[o]:void 0;if(i){const l=e[o],u=l===void 0||i(l,o,e);if(u!==!0)throw new p("option "+o+" must be "+u,p.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new p("Unknown option "+o,p.ERR_BAD_OPTION)}}var le={assertOptions:fn,validators:me},P=le.validators,M=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Ve,response:new Ve}}async request(e,t){try{return await this._request(e,t)}catch(r){if(r instanceof Error){let n={};Error.captureStackTrace?Error.captureStackTrace(n):n=new Error;const s=(()=>{if(!n.stack)return"";const o=n.stack.indexOf(`
`);return o===-1?"":n.stack.slice(o+1)})();try{if(!r.stack)r.stack=s;else if(s){const o=s.indexOf(`
`),i=o===-1?-1:s.indexOf(`
`,o+1),l=i===-1?"":s.slice(i+1);String(r.stack).endsWith(l)||(r.stack+=`
`+s)}}catch{}}throw r}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=z(this.defaults,t);const{transitional:r,paramsSerializer:n,headers:s}=t;r!==void 0&&le.assertOptions(r,{silentJSONParsing:P.transitional(P.boolean),forcedJSONParsing:P.transitional(P.boolean),clarifyTimeoutError:P.transitional(P.boolean),legacyInterceptorReqResOrdering:P.transitional(P.boolean)},!1),n!=null&&(a.isFunction(n)?t.paramsSerializer={serialize:n}:le.assertOptions(n,{encode:P.function,serialize:P.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),le.assertOptions(t,{baseUrl:P.spelling("baseURL"),withXsrfToken:P.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let o=s&&a.merge(s.common,s[t.method]);s&&a.forEach(["delete","get","head","post","put","patch","query","common"],w=>{delete s[w]}),t.headers=T.concat(o,s);const i=[];let l=!0;this.interceptors.request.forEach(function(S){if(typeof S.runWhen=="function"&&S.runWhen(t)===!1)return;l=l&&S.synchronous;const y=t.transitional||Ne;y&&y.legacyInterceptorReqResOrdering?i.unshift(S.fulfilled,S.rejected):i.push(S.fulfilled,S.rejected)});const u=[];this.interceptors.response.forEach(function(S){u.push(S.fulfilled,S.rejected)});let c,f=0,m;if(!l){const w=[Ye.bind(this),void 0];for(w.unshift(...i),w.push(...u),m=w.length,c=Promise.resolve(t);f<m;)c=c.then(w[f++],w[f++]);return c}m=i.length;let b=t;for(;f<m;){const w=i[f++],S=i[f++];try{b=w(b)}catch(y){S.call(this,y);break}}try{c=Ye.call(this,b)}catch(w){return Promise.reject(w)}for(f=0,m=u.length;f<m;)c=c.then(u[f++],u[f++]);return c}getUri(e){return e=z(this.defaults,e),dt(yt(e.baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}};a.forEach(["delete","get","head","options"],function(t){M.prototype[t]=function(r,n){return this.request(z(n||{},{method:t,url:r,data:(n||{}).data}))}});a.forEach(["post","put","patch","query"],function(t){function r(n){return function(o,i,l){return this.request(z(l||{},{method:t,headers:n?{"Content-Type":"multipart/form-data"}:{},url:o,data:i}))}}M.prototype[t]=r(),t!=="query"&&(M.prototype[t+"Form"]=r(!0))});var dn=class Rt{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let r;this.promise=new Promise(function(o){r=o});const n=this;this.promise.then(s=>{if(!n._listeners)return;let o=n._listeners.length;for(;o-- >0;)n._listeners[o](s);n._listeners=null}),this.promise.then=s=>{let o;const i=new Promise(l=>{n.subscribe(l),o=l}).then(s);return i.cancel=function(){n.unsubscribe(o)},i},t(function(o,i,l){n.reason||(n.reason=new te(o,i,l),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const r=this._listeners.indexOf(t);r!==-1&&this._listeners.splice(r,1)}toAbortSignal(){const t=new AbortController,r=n=>{t.abort(n)};return this.subscribe(r),t.signal.unsubscribe=()=>this.unsubscribe(r),t.signal}static source(){let t;return{token:new Rt(function(n){t=n}),cancel:t}}};function pn(e){return function(r){return e.apply(null,r)}}function hn(e){return a.isObject(e)&&e.isAxiosError===!0}var Te={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Te).forEach(([e,t])=>{Te[t]=e});function gt(e){const t=new M(e),r=et(M.prototype.request,t);return a.extend(r,M.prototype,t,{allOwnKeys:!0}),a.extend(r,t,null,{allOwnKeys:!0}),r.create=function(s){return gt(z(e,s))},r}var _=gt(ee);_.Axios=M;_.CanceledError=te;_.CancelToken=dn;_.isCancel=ht;_.VERSION=De;_.toFormData=he;_.Axios Line truncated
View File
File mode changed.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 678 B

After

Width:  |  Height:  |  Size: 678 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 381 B

After

Width:  |  Height:  |  Size: 381 B

-1
View File
@@ -1 +0,0 @@
var c=Object.create,_=Object.defineProperty,v=Object.getOwnPropertyDescriptor,O=Object.getOwnPropertyNames,b=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,g=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),f=(e,r)=>{let t={};for(var n in e)_(t,n,{get:e[n],enumerable:!0});return r||_(t,Symbol.toStringTag,{value:"Module"}),t},P=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(var o=O(r),p=0,l=o.length,a;p<l;p++)a=o[p],!s.call(e,a)&&a!==t&&_(e,a,{get:(u=>r[u]).bind(null,a),enumerable:!(n=v(r,a))||n.enumerable});return e},i=(e,r,t)=>(t=e!=null?c(b(e)):{},P(r||!e||!e.__esModule?_(t,"default",{value:e,enumerable:!0}):t,e));export{f as n,i as r,g as t};
View File
File mode changed.

Before

Width:  |  Height:  |  Size: 279 B

After

Width:  |  Height:  |  Size: 279 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 473 B

After

Width:  |  Height:  |  Size: 473 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 471 B

After

Width:  |  Height:  |  Size: 471 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 690 B

After

Width:  |  Height:  |  Size: 690 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 361 B

After

Width:  |  Height:  |  Size: 361 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 472 B

After

Width:  |  Height:  |  Size: 472 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 626 B

After

Width:  |  Height:  |  Size: 626 B

-20
View File
@@ -1,20 +0,0 @@
import{r as k_,t as j_}from"./chunk-BqhQeaEc.js";import{t as np}from"./axios-BgauIbGG.js";var tp=j_(((Ot,ne)=>{(function(){var o,rl="4.18.1",Je=200,il="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",on="Expected a function",ul="Invalid `variable` option passed into `_.template`",fl="Invalid `imports` option passed into `_.template`",Qe="__lodash_hash_undefined__",ll=500,te="__lodash_placeholder__",Hn=1,xi=2,ct=4,ht=1,ee=2,sn=1,nt=2,Ri=4,En=8,gt=16,Tn=32,_t=64,Wn=128,Wt=256,Ve=512,ol=30,sl="...",al=800,cl=16,Ii=1,hl=2,gl=3,tt=1/0,qn=9007199254740991,_l=17976931348623157e292,re=NaN,Ln=4294967295,pl=Ln-1,vl=Ln>>>1,dl=[["ary",Wn],["bind",sn],["bindKey",nt],["curry",En],["curryRight",gt],["flip",Ve],["partial",Tn],["partialRight",_t],["rearg",Wt]],pt="[object Arguments]",ie="[object Array]",wl="[object AsyncFunction]",Pt="[object Boolean]",Bt="[object Date]",Al="[object DOMException]",ue="[object Error]",fe="[object Function]",Si="[object GeneratorFunction]",dn="[object Map]",Mt="[object Number]",xl="[object Null]",Pn="[object Object]",Ei="[object Promise]",Rl="[object Proxy]",Ft="[object RegExp]",wn="[object Set]",Ut="[object String]",le="[object Symbol]",Il="[object Undefined]",Dt="[object WeakMap]",Sl="[object WeakSet]",bt="[object ArrayBuffer]",vt="[object DataView]",ke="[object Float32Array]",je="[object Float64Array]",nr="[object Int8Array]",tr="[object Int16Array]",er="[object Int32Array]",rr="[object Uint8Array]",ir="[object Uint8ClampedArray]",ur="[object Uint16Array]",fr="[object Uint32Array]",El=/\b__p \+= '';/g,Tl=/\b(__p \+=) '' \+/g,Ll=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Ti=/&(?:amp|lt|gt|quot|#39);/g,Li=/[&<>"']/g,yl=RegExp(Ti.source),ml=RegExp(Li.source),Cl=/<%-([\s\S]+?)%>/g,Ol=/<%([\s\S]+?)%>/g,yi=/<%=([\s\S]+?)%>/g,Wl=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Pl=/^\w*$/,Bl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,lr=/[\\^$.*+?()[\]{}|]/g,Ml=RegExp(lr.source),or=/^\s+/,Fl=/\s/,Ul=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Dl=/\{\n\/\* \[wrapped with (.+)\] \*/,bl=/,? & /,Nl=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,mi=/[()=,{}\[\]\/\s]/,Gl=/\\(\\)?/g,Hl=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Ci=/\w*$/,ql=/^[-+]0x[0-9a-f]+$/i,Kl=/^0b[01]+$/i,$l=/^\[object .+?Constructor\]$/,zl=/^0o[0-7]+$/i,Zl=/^(?:0|[1-9]\d*)$/,Yl=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,oe=/($^)/,Xl=/['\n\r\u2028\u2029\\]/g,se="\\ud800-\\udfff",Oi="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Wi="\\u2700-\\u27bf",Pi="a-z\\xdf-\\xf6\\xf8-\\xff",Jl="\\xac\\xb1\\xd7\\xf7",Ql="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Vl="\\u2000-\\u206f",kl=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Bi="A-Z\\xc0-\\xd6\\xd8-\\xde",Mi="\\ufe0e\\ufe0f",Fi=Jl+Ql+Vl+kl,sr="['’]",jl="["+se+"]",Ui="["+Fi+"]",ae="["+Oi+"]",Di="\\d+",no="["+Wi+"]",bi="["+Pi+"]",Ni="[^"+se+Fi+Di+Wi+Pi+Bi+"]",ar="\\ud83c[\\udffb-\\udfff]",to="(?:"+ae+"|"+ar+")",Gi="[^"+se+"]",cr="(?:\\ud83c[\\udde6-\\uddff]){2}",hr="[\\ud800-\\udbff][\\udc00-\\udfff]",dt="["+Bi+"]",Hi="\\u200d",qi="(?:"+bi+"|"+Ni+")",eo="(?:"+dt+"|"+Ni+")",Ki="(?:"+sr+"(?:d|ll|m|re|s|t|ve))?",$i="(?:"+sr+"(?:D|LL|M|RE|S|T|VE))?",zi=to+"?",Zi="["+Mi+"]?",ro="(?:"+Hi+"(?:"+[Gi,cr,hr].join("|")+")"+Zi+zi+")*",io="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",uo="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Yi=Zi+zi+ro,fo="(?:"+[no,cr,hr].join("|")+")"+Yi,lo="(?:"+[Gi+ae+"?",ae,cr,hr,jl].join("|")+")",oo=RegExp(sr,"g"),so=RegExp(ae,"g"),gr=RegExp(ar+"(?="+ar+")|"+lo+Yi,"g"),ao=RegExp([dt+"?"+bi+"+"+Ki+"(?="+[Ui,dt,"$"].join("|")+")",eo+"+"+$i+"(?="+[Ui,dt+qi,"$"].join("|")+")",dt+"?"+qi+"+"+Ki,dt+"+"+$i,uo,io,Di,fo].join("|"),"g"),co=RegExp("["+Hi+se+Oi+Mi+"]"),ho=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,go=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],_o=-1,U={};U[ke]=U[je]=U[nr]=U[tr]=U[er]=U[rr]=U[ir]=U[ur]=U[fr]=!0,U[pt]=U[ie]=U[bt]=U[Pt]=U[vt]=U[Bt]=U[ue]=U[fe]=U[dn]=U[Mt]=U[Pn]=U[Ft]=U[wn]=U[Ut]=U[Dt]=!1;var F={};F[pt]=F[ie]=F[bt]=F[vt]=F[Pt]=F[Bt]=F[ke]=F[je]=F[nr]=F[tr]=F[er]=F[dn]=F[Mt]=F[Pn]=F[Ft]=F[wn]=F[Ut]=F[le]=F[rr]=F[ir]=F[ur]=F[fr]=!0,F[ue]=F[fe]=F[Dt]=!1;var po={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",Line truncated
/* [wrapped with `+t+`] */
`)}function Wa(n){return T(n)||at(n)||!!(vu&&n&&n[vu])}function Dn(n,t){var e=typeof n;return t=t??qn,!!t&&(e=="number"||e!="symbol"&&Zl.test(n))&&n>-1&&n%1==0&&n<t}function Q(n,t,e){if(!b(e))return!1;var r=typeof t;return(r=="number"?j(e)&&Dn(t,e.length):r=="string"&&t in e)?In(e[t],n):!1}function ni(n,t){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||ln(n)?!0:Pl.test(n)||!Wl.test(n)||t!=null&&n in B(t)}function Pa(n){var t=typeof n;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?n!=="__proto__":n===null}function ti(n){var t=Ne(n),e=u[t];if(typeof e!="function"||!(t in m.prototype))return!1;if(n===e)return!0;var r=Vr(e);return!!r&&n===r[0]}function Ba(n){return!!hu&&hu in n}var Ma=pe?bn:Ai;function Vt(n){var t=n&&n.constructor;return n===(typeof t=="function"&&t.prototype||Rt)}function gf(n){return n===n&&!b(n)}function _f(n,t){return function(e){return e==null?!1:e[n]===t&&(t!==o||n in B(e))}}function Fa(n){var t=ze(n,function(r){return e.size===ll&&e.clear(),r}),e=t.cache;return t}function Ua(n,t){var e=n[1],r=t[1],i=e|r,f=i<(sn|nt|Wn),l=r==Wn&&e==En||r==Wn&&e==Wt&&n[7].length<=t[8]||r==(Wn|Wt)&&t[7].length<=t[8]&&e==En;if(!(f||l))return n;r&sn&&(n[2]=t[2],i|=e&sn?0:Ri);var s=t[3];if(s){var c=n[3];n[3]=c?Ju(c,s,t[4]):s,n[4]=c?zn(n[3],te):t[4]}return s=t[5],s&&(c=n[5],n[5]=c?Qu(c,s,t[6]):s,n[6]=c?zn(n[5],te):t[6]),s=t[7],s&&(n[7]=s),r&Wn&&(n[8]=n[8]==null?t[8]:Y(n[8],t[8])),n[9]==null&&(n[9]=t[9]),n[0]=t[0],n[1]=i,n}function Da(n){var t=[];if(n!=null)for(var e in B(n))t.push(e);return t}function ba(n){return de.call(n)}function pf(n,t,e){return t=K(t===o?n.length-1:t,0),function(){for(var r=arguments,i=-1,f=K(r.length-t,0),l=h(f);++i<f;)l[i]=r[t+i];i=-1;for(var s=h(t+1);++i<t;)s[i]=r[i];return s[t]=e(l),en(n,this,s)}}function vf(n,t){return t.length<2?n:lt(n,_n(t,0,-1))}function Na(n,t){for(var e=n.length,r=Y(t.length,e),i=k(n);r--;){var f=t[r];n[r]=Dn(f,e)?i[f]:o}return n}function ei(n,t){if(!(t==="constructor"&&typeof n[t]=="function")&&t!="__proto__")return n[t]}var df=Af(Nu),kt=ns||function(n,t){return $.setTimeout(n,t)},ri=Af(oa);function wf(n,t,e){var r=t+"";return ri(n,Oa(r,Ga(ya(r),e)))}function Af(n){var t=0,e=0;return function(){var r=is(),i=cl-(r-e);if(e=r,i>0){if(++t>=al)return arguments[0]}else t=0;return n.apply(o,arguments)}}function He(n,t){var e=-1,r=n.length,i=r-1;for(t=t===o?r:t;++e<t;){var f=Nr(e,i),l=n[f];n[f]=n[e],n[e]=l}return n.length=t,n}var xf=Fa(function(n){var t=[];return n.charCodeAt(0)===46&&t.push(""),n.replace(Bl,function(e,r,i,f){t.push(i?f.replace(Gl,"$1"):r||e)}),t});function Rn(n){if(typeof n=="string"||ln(n))return n;var t=n+"";return t=="0"&&1/n==-tt?"-0":t}function st(n){if(n!=null){try{return ve.call(n)}catch{}try{return n+""}catch{}}return""}function Ga(n,t){return rn(dl,function(e){var r="_."+e[0];t&e[1]&&!ce(n,r)&&n.push(r)}),n.sort()}function Rf(n){if(n instanceof m)return n.clone();var t=new hn(n.__wrapped__,n.__chain__);return t.__actions__=k(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function Ha(n,t,e){(e?Q(n,t,e):t===o)?t=1:t=K(L(t),0);var r=n==null?0:n.length;if(!r||t<1)return[];for(var i=0,f=0,l=h(Se(r/t));i<r;)l[f++]=_n(n,i,i+=t);return l}function qa(n){for(var t=-1,e=n==null?0:n.length,r=0,i=[];++t<e;){var f=n[t];f&&(i[r++]=f)}return i}function Ka(){var n=arguments.length;if(!n)return[];for(var t=h(n-1),e=arguments[0],r=n;r--;)t[r-1]=arguments[r];return $n(T(e)?k(e):[e],Z(t,1))}var $a=y(function(n,t){return G(n)?Zt(n,Z(t,1,G,!0)):[]}),za=y(function(n,t){var e=pn(t);return G(e)&&(e=o),G(n)?Zt(n,Z(t,1,G,!0),I(e,2)):[]}),Za=y(function(n,t){var e=pn(t);return G(e)&&(e=o),G(n)?Zt(n,Z(t,1,G,!0),o,e):[]});function Ya(n,t,e){var r=n==null?0:n.length;return r?(t=e||t===o?1:L(t),_n(n,t<0?0:t,r)):[]}function Xa(n,t,e){var r=n==null?0:n.length;return r?(t=e||t===o?1:L(t),t=r-t,_n(n,0,t<0?0:t)):[]}function Ja(n,t){return n&&n.length?Be(n,I(t,3),!0,!0):[]}function Qa(n,t){return n&&n.length?Be(n,I(t,3),!0):[]}function Va(n,t,e,r){var i=n==null?0:n.length;return i?(e&&typeof e!="number"&&Q(n,t,e)&&(e=0,r=i),Ks(n,t,e,r)):[]}function If(n,t,e){var r=n==null?0:n.length;if(!r)return-1;var i=e==null?0:L(e);return i<0&&(i=K(r+i,0)),he(n,I(t,3),i)}function Sf(n,t,e){var r=n==null?0:n.length;if(!r)return-1;var i=r-1;return e!==o&&(i=L(e),i=e<0?K(r+i,0):Y(i,r-1)),he(n,I(t,3),i,!0)}function Ef(n){return n!=null&&n.length?Z(n,1):[]}function ka(n){return n!=null&&n.length?Z(n,tt):[]}function ja(n,t){return n!=null&&n.length?(t=t===o?1:L(t),Z(n,t)):[]}function nc(n){for(var t=-1,e=n==null?0:n.length,r={};++t<e;){var i=n[t];yn(r,i[0],i[1])}return r}function Tf(n){return n&&n.length?n[0]:o}function tc(n,t,e){var r=n==null?0:n.length;if(!r)return-1;var i=e==null?0:L(e);return i<0&&(i=K(r+i,0)),wt(n,t,i)}function ec(n){return n!=null&&n.length?_n(n,0,-1):[]}var rc=y(function(n){var t=D(n,$r);return t.length&&t[0]===n[0]?Mr(t):[]}),ic=y(function(n){var t=pn(n),e=D(n,$r);return t===pn(e)?t=o:e.pop(),e.length&&e[ Line truncated
`;n.replace(d,function(R,M,C,V,On,jn){return C||(C=V),v+=n.slice(p,jn).replace(Xl,Fo),M&&(s=!0,v+=`' +
__e(`+M+`) +
'`),On&&(c=!0,v+=`';
`+On+`;
__p += '`),C&&(v+=`' +
((__t = (`+C+`)) == null ? '' : __t) +
'`),p=jn+R.length,R}),v+=`';
`;var x=W.call(t,"variable")&&t.variable;if(!x)v=`with (obj) {
`+v+`
}
`;else if(mi.test(x))throw new S(ul);v=(c?v.replace(El,""):v).replace(Tl,"$1").replace(Ll,"$1;"),v="function("+(x||"obj")+`) {
`+(x?"":`obj || (obj = {});
`)+"var __t, __p = ''"+(s?", __e = _.escape":"")+(c?`, __j = Array.prototype.join;
function print() { __p += __j.call(arguments, '') }
`:`;
`)+v+`return __p
}`;var E=nl(function(){return O(f,A+"return "+v).apply(o,l)});if(E.source=v,oi(E))throw E;return E}function u_(n){return P(n).toLowerCase()}function f_(n){return P(n).toUpperCase()}function l_(n,t,e){if(n=P(n),n&&(e||t===o))return lu(n);if(!n||!(t=fn(t)))return n;var r=An(n),i=An(t);return Vn(r,ou(r,i),su(r,i)+1).join("")}function o_(n,t,e){if(n=P(n),n&&(e||t===o))return n.slice(0,cu(n)+1);if(!n||!(t=fn(t)))return n;var r=An(n);return Vn(r,0,su(r,An(t))+1).join("")}function s_(n,t,e){if(n=P(n),n&&(e||t===o))return n.replace(or,"");if(!n||!(t=fn(t)))return n;var r=An(n);return Vn(r,ou(r,An(t))).join("")}function a_(n,t){var e=ol,r=sl;if(b(t)){var i="separator"in t?t.separator:i;e="length"in t?L(t.length):e,r="omission"in t?fn(t.omission):r}n=P(n);var f=n.length;if(At(n)){var l=An(n);f=l.length}if(e>=f)return n;var s=e-xt(r);if(s<1)return r;var c=l?Vn(l,0,s).join(""):n.slice(0,s);if(i===o)return c+r;if(l&&(s+=c.length-s),si(i)){if(n.slice(s).search(i)){var p,_=c;for(i.global||(i=Tr(i.source,P(Ci.exec(i))+"g")),i.lastIndex=0;p=i.exec(_);)var v=p.index;c=c.slice(0,v===o?s:v)}}else if(n.indexOf(fn(i),s)!=s){var d=c.lastIndexOf(i);d>-1&&(c=c.slice(0,d))}return c+r}function c_(n){return n=P(n),n&&yl.test(n)?n.replace(Ti,qo):n}var h_=Lt(function(n,t,e){return n+(e?" ":"")+t.toUpperCase()}),gi=ju("toUpperCase");function jf(n,t,e){return n=P(n),t=e?o:t,t===o?Do(n)?zo(n):mo(n):n.match(t)||[]}var nl=y(function(n,t){try{return en(n,o,t)}catch(e){return oi(e)?e:new S(e)}}),g_=Un(function(n,t){return rn(t,function(e){e=Rn(e),yn(n,e,fi(n[e],n))}),n});function __(n){var t=n==null?0:n.length,e=I();return n=t?D(n,function(r){if(typeof r[1]!="function")throw new cn(on);return[e(r[0]),r[1]]}):[],y(function(r){for(var i=-1;++i<t;){var f=n[i];if(en(f[0],this,r))return en(f[1],this,r)}})}function p_(n){return Hs(gn(n,Hn))}function _i(n){return function(){return n}}function v_(n,t){return n==null||n!==n?t:n}var d_=tf(),w_=tf(!0);function tn(n){return n}function pi(n){return Wu(typeof n=="function"?n:gn(n,Hn))}function A_(n){return Bu(gn(n,Hn))}function x_(n,t){return Mu(n,gn(t,Hn))}var R_=y(function(n,t){return function(e){return Yt(e,n,t)}}),I_=y(function(n,t){return function(e){return Yt(n,e,t)}});function vi(n,t,e){var r=z(t),i=Oe(t,r);e==null&&!(b(t)&&(i.length||!r.length))&&(e=t,t=n,n=this,i=Oe(t,z(t)));var f=!(b(e)&&"chain"in e)||!!e.chain,l=bn(n);return rn(i,function(s){var c=t[s];n[s]=c,l&&(n.prototype[s]=function(){var p=this.__chain__;if(f||p){var _=n(this.__wrapped__);return(_.__actions__=k(this.__actions__)).push({func:c,args:arguments,thisArg:n}),_.__chain__=p,_}return c.apply(n,$n([this.value()],arguments))})}),n}function S_(){return $._===this&&($._=Qo),this}function di(){}function E_(n){return n=L(n),y(function(t){return Fu(t,n)})}var T_=Yr(D),L_=Yr(eu),y_=Yr(wr);function tl(n){return ni(n)?Ar(Rn(n)):ia(n)}function m_(n){return function(t){return n==null?o:lt(n,t)}}var C_=rf(),O_=rf(!0);function wi(){return[]}function Ai(){return!1}function W_(){return{}}function P_(){return""}function B_(){return!0}function M_(n,t){if(n=L(n),n<1||n>qn)return[];var e=Ln,r=Y(n,Ln);t=I(t),n-=Ln;for(var i=Ir(r,t);++e<n;)t(e);return i}function F_(n){return T(n)?D(n,Rn):ln(n)?[n]:k(xf(P(n)))}function U_(n){var t=++Xo;return P(n)+t}var D_=Ue(function(n,t){return n+t},0),b_=Xr("ceil"),N_=Ue(function(n,t){return n/t},1),G_=Xr("floor");function H_(n){return n&&n.length?Ce(n,tn,Br):o}function q_(n,t){return n&&n.length?Ce(n,I(t,2),Br):o}function K_(n){return uu(n,tn)}function $_(n,t){return uu(n,I(t,2))}function z_(n){return n&&n.length?Ce(n,tn,Dr):o}function Z_(n,t){return n&&n.length?Ce(n,I(t,2),Dr):o}var Y_=Ue(function(n,t){return n*t},1),X_=Xr("round"),J_=Ue(function(n,t){return n-t},0);function Q_(n){return n&&n.length?Rr(n,tn):0}function V_(n,t){return n&&n.length?Rr(n,I(t,2)):0}return u.after=xh,u.ary=Wf,u.assign=lg,u.assignIn=zf,u.assignInWith=Zf,u.assignWith=ai,u.at=og,u.before=Pf,u.bind=fi,u.bindAll=g_,u.bindKey=Bf,u.castArray=Ph,u.chain=mf,u.chunk=Ha,u.compact=qa,u.concat=Ka,u.cond=__,u.conforms=p_,u.constant=_i,u.countBy=Vc,u.create=sg,u.curry=Mf,u.curryRight=Ff,u.debounce=Uf,u.defaults=ag,u.defaultsDeep=cg,u.defer=Rh,u.delay=Ih,u.difference=$a,u.differenceBy=za,u.differenceWith=Za,u.drop=Ya,u.dropRight=Xa,u.dropRightWhile=Ja,u.dropWhile=Qa,u.fill=Va,u.filter=jc,u.flatMap=eh,u.flatMapDeep=rh,u.flatMapDepth=ih,u.flatten=Ef,u.flattenDeep=ka,u.flattenDepth=ja,u.flip=Sh,u.flow=d_,u.flowRight=w_,u.fromPairs=nc,u.functions=wg,u.functionsIn=Ag,u.groupBy=uh,u.initial=ec,u.intersection=rc,u.intersectionBy=ic,u.intersectionWith=uc,u.invert=Rg,u.invertBy=Ig,u.invokeMap=lh,u.iteratee=pi,u.keyBy=oh,u.keys=z,u.keysIn=nn,u.map=Ke,u.mapKeys=Eg,u.mapValues=Tg,u.matches=A_,u.matchesProperty=x_,u.memoize=ze,u.merge=Lg,u.mergeWith=Yf,u.method=R_,u.methodOf=I_,u.mixin=vi,u.negate=Ze,u.nthArg=E_,u.omit=yg,u.omitBy=mg,u.once=Eh,u.orderBy=sh,u.over=T_,u.overArgs=Th,u.overEvery=L_,u.overSome=y_,u.partial=li,u.partialRight=Df,u.partition=ah,u.pick=Cg,u.pi Line truncated
-1
View File
@@ -1 +0,0 @@
@import"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap";@layer properties,theme,base,components,utilities;@layer theme{:root,:host{--font-sans:"Nunito", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-700:oklch(50.8% .118 165.612);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-sky-400:oklch(74.6% .16 232.661);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-900:oklch(38.1% .176 304.987);--color-slate-600:oklch(44.6% .043 257.281);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-2xs:18rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semiLine truncated
+20
View File
@@ -0,0 +1,20 @@
import{n as e,r as t,t as n}from"./axios-B2OU-7LW.js";var r=t(e(((e,t)=>{(function(){var n,r=`4.18.1`,i=200,a=`Unsupported core-js use. Try https://npms.io/search?q=ponyfill.`,o=`Expected a function`,s="Invalid `variable` option passed into `_.template`",c="Invalid `imports` option passed into `_.template`",l=`__lodash_hash_undefined__`,u=500,d=`__lodash_placeholder__`,f=1,p=2,m=4,h=1,g=2,_=1,v=2,y=4,b=8,x=16,ee=32,te=64,ne=128,re=256,ie=512,ae=30,oe=`...`,se=800,ce=16,le=1,ue=2,de=3,fe=1/0,pe=9007199254740991,me=17976931348623157e292,he=NaN,ge=4294967295,_e=ge-1,ve=ge>>>1,ye=[[`ary`,ne],[`bind`,_],[`bindKey`,v],[`curry`,b],[`curryRight`,x],[`flip`,ie],[`partial`,ee],[`partialRight`,te],[`rearg`,re]],be=`[object Arguments]`,xe=`[object Array]`,Se=`[object AsyncFunction]`,Ce=`[object Boolean]`,we=`[object Date]`,Te=`[object DOMException]`,Ee=`[object Error]`,De=`[object Function]`,Oe=`[object GeneratorFunction]`,ke=`[object Map]`,Ae=`[object Number]`,je=`[object Null]`,Me=`[object Object]`,Ne=`[object Promise]`,Pe=`[object Proxy]`,Fe=`[object RegExp]`,Ie=`[object Set]`,Le=`[object String]`,Re=`[object Symbol]`,ze=`[object Undefined]`,Be=`[object WeakMap]`,Ve=`[object WeakSet]`,He=`[object ArrayBuffer]`,Ue=`[object DataView]`,We=`[object Float32Array]`,Ge=`[object Float64Array]`,Ke=`[object Int8Array]`,qe=`[object Int16Array]`,Je=`[object Int32Array]`,Ye=`[object Uint8Array]`,Xe=`[object Uint8ClampedArray]`,Ze=`[object Uint16Array]`,Qe=`[object Uint32Array]`,$e=/\b__p \+= '';/g,et=/\b(__p \+=) '' \+/g,tt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,nt=/&(?:amp|lt|gt|quot|#39);/g,rt=/[&<>"']/g,it=RegExp(nt.source),at=RegExp(rt.source),ot=/<%-([\s\S]+?)%>/g,st=/<%([\s\S]+?)%>/g,ct=/<%=([\s\S]+?)%>/g,lt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ut=/^\w*$/,dt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ft=/[\\^$.*+?()[\]{}|]/g,pt=RegExp(ft.source),mt=/^\s+/,S=/\s/,ht=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,gt=/\{\n\/\* \[wrapped with (.+)\] \*/,_t=/,? & /,vt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,yt=/[()=,{}\[\]\/\s]/,bt=/\\(\\)?/g,xt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,St=/\w*$/,Ct=/^[-+]0x[0-9a-f]+$/i,wt=/^0b[01]+$/i,Tt=/^\[object .+?Constructor\]$/,Et=/^0o[0-7]+$/i,Dt=/^(?:0|[1-9]\d*)$/,Ot=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,kt=/($^)/,At=/['\n\r\u2028\u2029\\]/g,jt=`\\ud800-\\udfff`,Mt=`\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff`,Nt=`\\u2700-\\u27bf`,C=`a-z\\xdf-\\xf6\\xf8-\\xff`,Pt=`\\xac\\xb1\\xd7\\xf7`,Ft=`\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf`,It=`\\u2000-\\u206f`,Lt=` \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000`,Rt=`A-Z\\xc0-\\xd6\\xd8-\\xde`,zt=`\\ufe0e\\ufe0f`,Bt=Pt+Ft+It+Lt,Vt=`['’]`,w=`[`+jt+`]`,Ht=`[`+Bt+`]`,Ut=`[`+Mt+`]`,Wt=`\\d+`,Gt=`[`+Nt+`]`,Kt=`[`+C+`]`,qt=`[^`+jt+Bt+Wt+Nt+C+Rt+`]`,Jt=`\\ud83c[\\udffb-\\udfff]`,Yt=`(?:`+Ut+`|`+Jt+`)`,Xt=`[^`+jt+`]`,Zt=`(?:\\ud83c[\\udde6-\\uddff]){2}`,Qt=`[\\ud800-\\udbff][\\udc00-\\udfff]`,$t=`[`+Rt+`]`,en=`\\u200d`,tn=`(?:`+Kt+`|`+qt+`)`,nn=`(?:`+$t+`|`+qt+`)`,rn=`(?:`+Vt+`(?:d|ll|m|re|s|t|ve))?`,an=`(?:`+Vt+`(?:D|LL|M|RE|S|T|VE))?`,on=Yt+`?`,sn=`[`+zt+`]?`,cn=`(?:`+en+`(?:`+[Xt,Zt,Qt].join(`|`)+`)`+sn+on+`)*`,ln=`\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])`,un=`\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])`,dn=sn+on+cn,fn=`(?:`+[Gt,Zt,Qt].join(`|`)+`)`+dn,pn=`(?:`+[Xt+Ut+`?`,Ut,Zt,Qt,w].join(`|`)+`)`,mn=RegExp(Vt,`g`),hn=RegExp(Ut,`g`),gn=RegExp(Jt+`(?=`+Jt+`)|`+pn+dn,`g`),_n=RegExp([$t+`?`+Kt+`+`+rn+`(?=`+[Ht,$t,`$`].join(`|`)+`)`,nn+`+`+an+`(?=`+[Ht,$t+tn,`$`].join(`|`)+`)`,$t+`?`+tn+`+`+rn,$t+`+`+an,un,ln,Wt,fn].join(`|`),`g`),vn=RegExp(`[`+en+jt+Mt+zt+`]`),T=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,yn=`Array.Buffer.DataView.Date.Error.Float32Array.Float64Array.Function.Int8Array.Int16Array.Int32Array.Map.Math.Object.Promise.RegExp.Set.String.Symbol.TypeError.Uint8Array.Uint8ClampedArray.Uint16Array.Uint32Array.WeakMap._.clearTimeout.isFinite.parseInt.setTimeout`.split(`.`),bn=-1,E={};E[We]=E[Ge]=E[Ke]=E[qe]=E[Je]=E[Ye]=E[Xe]=E[Ze]=E[Qe]=!0,E[be]=E[xe]=E[He]=E[Ce]=E[Ue]=E[we]=E[Ee]=E[De]=E[ke]=E[Ae]=E[Me]=E[Fe]=E[Ie]=E[Le]=E[Be]=!1;var D={};D[be]=D[xe]=D[He]=D[Ue]=D[Ce]=D[we]=D[We]=D[Ge]=D[Ke]=D[qe]=D[Je]=D[ke]=D[Ae]=D[Me]=D[Fe]=D[Ie]=D[Le]=D[Re]=D[Ye]=D[Xe]=D[Ze]=D[Qe]=!0,D[Ee]=D[De]=D[Be]=!1;var O={À:`A`,Á:`A`,Â:`A`,Ã:`A`,Ä:`A`,Å:`A`,à:`a`,á:`a`,â:`a`,ã:`a`,ä:`a`,å:`a`,Ç:`C`,ç:`c`,Ð:`D`,ð:`d`,È:`E`,É:`E`,Ê:`E`,Ë:`E`,è:`e`,é:`e`,ê:`e`,ë:`e`,Ì:`I`,Í:`I`,Î:`I`,Ï:`I`,ì:`i`,í:`i`,î:`i`,ï:`i`,Ñ:`N`,ñ:`n`,Ò:`O`,Ó:`O`,Ô:`O`,Õ:`O`,Ö:`O`,Ø:`O`,ò:`o`,ó:`o`,ô:`o`,õ:`o`,ö:`o`,ø:`o`,Ù:`U`,Ú:`U`,Û:`U`,Ü:`U`,ù:`u`,ú:`u`,û:`u`,ü:`u`,Ý:`Y`,ý:`y`,ÿ:`y`,Æ:`Ae`,æ:`ae`,Þ:`Th`,þ:`th`,ß:`ss`,Ā:`A`,Ă:`A`,Ą:`A`,ā:`a`,ă:`a`,ą:`a`,Ć:`C`,Ĉ:`C`,Ċ:`C`,Č:`C`,ć:`c`,ĉ:`c`,ċ:`c`,č:`c`,Ď:`Line truncated
/* [wrapped with `+t+`] */
`)}function _s(e){return W(e)||vu(e)||!!(nn&&e&&e[nn])}function vs(e,t){var n=typeof e;return t??=pe,!!t&&(n==`number`||n!=`symbol`&&Dt.test(e))&&e>-1&&e%1==0&&e<t}function U(e,t,n){if(!q(n))return!1;var r=typeof t;return(r==`number`?G(n)&&vs(t,n.length):r==`string`&&t in n)?hu(n[t],e):!1}function ys(e,t){if(W(e))return!1;var n=typeof e;return n==`number`||n==`symbol`||n==`boolean`||e==null||Gu(e)?!0:ut.test(e)||!lt.test(e)||t!=null&&e in C(t)}function bs(e){var t=typeof e;return t==`string`||t==`number`||t==`symbol`||t==`boolean`?e!==`__proto__`:e===null}function xs(e){var t=ns(e),n=F[t];if(typeof n!=`function`||!(t in I.prototype))return!1;if(e===n)return!0;var r=ts(n);return!!r&&e===r[0]}function Ss(e){return!!Ut&&Ut in e}var Cs=Bt?ku:Xf;function ws(e){var t=e&&e.constructor;return e===(typeof t==`function`&&t.prototype||zt)}function Ts(e){return e===e&&!q(e)}function Es(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==n||e in C(r))}}function Ds(e){var t=Zl(e,function(e){return n.size===u&&n.clear(),e}),n=t.cache;return t}function Os(e,t){var n=e[1],r=t[1],i=n|r,a=i<(_|v|ne),o=r==ne&&n==b||r==ne&&n==re&&e[7].length<=t[8]||r==(ne|re)&&t[7].length<=t[8]&&n==b;if(!(a||o))return e;r&_&&(e[2]=t[2],i|=n&_?0:y);var s=t[3];if(s){var c=e[3];e[3]=c?_o(c,s,t[4]):s,e[4]=c?Tr(e[3],d):t[4]}return s=t[5],s&&(c=e[5],e[5]=c?vo(c,s,t[6]):s,e[6]=c?Tr(e[5],d):t[6]),s=t[7],s&&(e[7]=s),r&ne&&(e[8]=e[8]==null?t[8]:O(e[8],t[8])),e[9]??=t[9],e[0]=t[0],e[1]=i,e}function ks(e){var t=[];if(e!=null)for(var n in C(e))t.push(n);return t}function As(e){return Wt.call(e)}function js(e,t,r){return t=T(t===n?e.length-1:t,0),function(){for(var n=arguments,i=-1,a=T(n.length-t,0),o=S(a);++i<a;)o[i]=n[t+i];i=-1;for(var s=S(t+1);++i<t;)s[i]=n[i];return s[t]=r(o),j(e,this,s)}}function Ms(e,t){return t.length<2?e:Zi(e,Ha(t,0,-1))}function Ns(e,t){for(var r=e.length,i=O(t.length,r),a=B(e);i--;){var o=t[i];e[i]=vs(o,r)?a[o]:n}return e}function Ps(e,t){if(!(t===`constructor`&&typeof e[t]==`function`)&&t!=`__proto__`)return e[t]}var Fs=zs(za),Is=ln||function(e,t){return k.setTimeout(e,t)},Ls=zs(Ba);function Rs(e,t,n){var r=t+``;return Ls(e,gs(r,Ws(ds(r),n)))}function zs(e){var t=0,r=0;return function(){var i=xn(),a=ce-(i-r);if(r=i,a>0){if(++t>=se)return arguments[0]}else t=0;return e.apply(n,arguments)}}function Bs(e,t){var r=-1,i=e.length,a=i-1;for(t=t===n?i:t;++r<t;){var o=Na(r,a),s=e[o];e[o]=e[r],e[r]=s}return e.length=t,e}var Vs=Ds(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(``),e.replace(dt,function(e,n,r,i){t.push(r?i.replace(bt,`$1`):n||e)}),t});function Hs(e){if(typeof e==`string`||Gu(e))return e;var t=e+``;return t==`0`&&1/e==-fe?`-0`:t}function Us(e){if(e!=null){try{return Vt.call(e)}catch{}try{return e+``}catch{}}return``}function Ws(e,t){return M(ye,function(n){var r=`_.`+n[0];t&n[1]&&!Hn(e,r)&&e.push(r)}),e.sort()}function Gs(e){if(e instanceof I)return e.clone();var t=new Gr(e.__wrapped__,e.__chain__);return t.__actions__=B(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}function Ks(e,t,r){t=(r?U(e,t,r):t===n)?1:T(Y(t),0);var i=e==null?0:e.length;if(!i||t<1)return[];for(var a=0,o=0,s=S(un(i/t));a<i;)s[o++]=Ha(e,a,a+=t);return s}function qs(e){for(var t=-1,n=e==null?0:e.length,r=0,i=[];++t<n;){var a=e[t];a&&(i[r++]=a)}return i}function Js(){var e=arguments.length;if(!e)return[];for(var t=S(e-1),n=arguments[0],r=e;r--;)t[r-1]=arguments[r];return Wn(W(n)?B(n):[n],L(t,1))}var Ys=z(function(e,t){return K(e)?zi(e,L(t,1,K,!0)):[]}),Xs=z(function(e,t){var r=gc(t);return K(r)&&(r=n),K(e)?zi(e,L(t,1,K,!0),V(r,2)):[]}),Zs=z(function(e,t){var r=gc(t);return K(r)&&(r=n),K(e)?zi(e,L(t,1,K,!0),n,r):[]});function Qs(e,t,r){var i=e==null?0:e.length;return i?(t=r||t===n?1:Y(t),Ha(e,t<0?0:t,i)):[]}function $s(e,t,r){var i=e==null?0:e.length;return i?(t=r||t===n?1:Y(t),t=i-t,Ha(e,0,t<0?0:t)):[]}function ec(e,t){return e&&e.length?Qa(e,V(t,3),!0,!0):[]}function tc(e,t){return e&&e.length?Qa(e,V(t,3),!0):[]}function nc(e,t,n,r){var i=e==null?0:e.length;return i?(n&&typeof n!=`number`&&U(e,t,n)&&(n=0,r=i),Wi(e,t,n,r)):[]}function rc(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var i=n==null?0:Y(n);return i<0&&(i=T(r+i,0)),Qn(e,V(t,3),i)}function ic(e,t,r){var i=e==null?0:e.length;if(!i)return-1;var a=i-1;return r!==n&&(a=Y(r),a=r<0?T(i+a,0):O(a,i-1)),Qn(e,V(t,3),a,!0)}function ac(e){return e!=null&&e.length?L(e,1):[]}function oc(e){return e!=null&&e.length?L(e,fe):[]}function sc(e,t){return e!=null&&e.length?(t=t===n?1:Y(t),L(e,t)):[]}function cc(e){for(var t=-1,n=e==null?0:e.length,r={};++t<n;){var i=e[t];Mi(r,i[0],i[1])}return r}function lc(e){return e&&e.length?e[0]:n}function uc(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var i=n==null?0:Y(n);return i<0&&(i=T(r+i,0)),$n(e,t,i)}function dc(e){return e!=null&&e.length?Ha(e,0,-1):[]}var fc=z(function(e){var t=N(e,no);return t.length&&t[0]===e[0]?ra(t):[]}),pc=z(function(e){var t=gc(e),r=N(e,no);return t===gc(r)?t=n:r.pop(),r.length&&r[0]===e[0]?ra(r,V(t,2)):[]}) Line truncated
`;e.replace(h,function(t,n,r,i,a,o){return r||=i,m+=e.slice(f,o).replace(At,vr),n&&(u=!0,m+=`' +
__e(`+n+`) +
'`),a&&(d=!0,m+=`';
`+a+`;
__p += '`),r&&(m+=`' +
((__t = (`+r+`)) == null ? '' : __t) +
'`),f=o+t.length,t}),m+=`';
`;var _=w.call(t,`variable`)&&t.variable;if(!_)m=`with (obj) {
`+m+`
}
`;else if(yt.test(_))throw new jt(s);m=(d?m.replace($e,``):m).replace(et,`$1`).replace(tt,`$1;`),m=`function(`+(_||`obj`)+`) {
`+(_?``:`obj || (obj = {});
`)+`var __t, __p = ''`+(u?`, __e = _.escape`:``)+(d?`, __j = Array.prototype.join;
function print() { __p += __j.call(arguments, '') }
`:`;
`)+m+`return __p
}`;var v=Tf(function(){return Mt(o,g+`return `+m).apply(n,l)});if(v.source=m,Du(v))throw v;return v}function hf(e){return X(e).toLowerCase()}function gf(e){return X(e).toUpperCase()}function _f(e,t,r){if(e=X(e),e&&(r||t===n))return ur(e);if(!e||!(t=Ja(t)))return e;var i=jr(e),a=jr(t);return oo(i,pr(i,a),mr(i,a)+1).join(``)}function vf(e,t,r){if(e=X(e),e&&(r||t===n))return e.slice(0,Mr(e)+1);if(!e||!(t=Ja(t)))return e;var i=jr(e);return oo(i,0,mr(i,jr(t))+1).join(``)}function yf(e,t,r){if(e=X(e),e&&(r||t===n))return e.replace(mt,``);if(!e||!(t=Ja(t)))return e;var i=jr(e);return oo(i,pr(i,jr(t))).join(``)}function bf(e,t){var r=ae,i=oe;if(q(t)){var a=`separator`in t?t.separator:a;r=`length`in t?Y(t.length):r,i=`omission`in t?Ja(t.omission):i}e=X(e);var o=e.length;if(br(e)){var s=jr(e);o=s.length}if(r>=o)return e;var c=r-Ar(i);if(c<1)return i;var l=s?oo(s,0,c).join(``):e.slice(0,c);if(a===n)return l+i;if(s&&(c+=l.length-c),Vu(a)){if(e.slice(c).search(a)){var u,d=l;for(a.global||(a=Pt(a.source,X(St.exec(a))+`g`)),a.lastIndex=0;u=a.exec(d);)var f=u.index;l=l.slice(0,f===n?c:f)}}else if(e.indexOf(Ja(a),c)!=c){var p=l.lastIndexOf(a);p>-1&&(l=l.slice(0,p))}return l+i}function xf(e){return e=X(e),e&&it.test(e)?e.replace(nt,Nr):e}var Sf=Oo(function(e,t,n){return e+(n?` `:``)+t.toUpperCase()}),Cf=Do(`toUpperCase`);function wf(e,t,r){return e=X(e),t=r?n:t,t===n?xr(e)?Ir(e):Xn(e):e.match(t)||[]}var Tf=z(function(e,t){try{return j(e,n,t)}catch(e){return Du(e)?e:new jt(e)}}),Ef=Qo(function(e,t){return M(t,function(t){t=Hs(t),Mi(e,t,Ul(e[t],e))}),e});function Df(e){var t=e==null?0:e.length,n=V();return e=t?N(e,function(e){if(typeof e[1]!=`function`)throw new It(o);return[n(e[0]),e[1]]}):[],z(function(n){for(var r=-1;++r<t;){var i=e[r];if(j(i[0],this,n))return j(i[1],this,n)}})}function Of(e){return Ii(Fi(e,f))}function kf(e){return function(){return e}}function Af(e,t){return e==null||e!==e?t:e}var jf=Mo(),Mf=Mo(!0);function $(e){return e}function Nf(e){return _a(typeof e==`function`?e:Fi(e,f))}function Pf(e){return Sa(Fi(e,f))}function Ff(e,t){return Ca(e,Fi(t,f))}var If=z(function(e,t){return function(n){return aa(n,e,t)}}),Lf=z(function(e,t){return function(n){return aa(e,n,t)}});function Rf(e,t,n){var r=Z(t),i=Xi(t,r);n==null&&!(q(t)&&(i.length||!r.length))&&(n=t,t=e,e=this,i=Xi(t,Z(t)));var a=!(q(n)&&`chain`in n)||!!n.chain,o=ku(e);return M(i,function(n){var r=t[n];e[n]=r,o&&(e.prototype[n]=function(){var t=this.__chain__;if(a||t){var n=e(this.__wrapped__);return(n.__actions__=B(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,Wn([this.value()],arguments))})}),e}function zf(){return k._===this&&(k._=Kt),this}function Bf(){}function Vf(e){return e=Y(e),z(function(t){return Ea(t,e)})}var Hf=Io(N),Uf=Io(Bn),Wf=Io(qn);function Gf(e){return ys(e)?rr(Hs(e)):Aa(e)}function Kf(e){return function(t){return e==null?n:Zi(e,t)}}var qf=zo(),Jf=zo(!0);function Yf(){return[]}function Xf(){return!1}function Zf(){return{}}function Qf(){return``}function $f(){return!0}function ep(e,t){if(e=Y(e),e<1||e>pe)return[];var n=ge,r=O(e,ge);t=V(t),e-=ge;for(var i=cr(r,t);++n<e;)t(n);return i}function tp(e){return W(e)?N(e,Hs):Gu(e)?[e]:B(Vs(X(e)))}function np(e){var t=++Ht;return X(e)+t}var rp=Fo(function(e,t){return e+t},0),ip=Ho(`ceil`),ap=Fo(function(e,t){return e/t},1),op=Ho(`floor`);function sp(e){return e&&e.length?Ui(e,$,$i):n}function cp(e,t){return e&&e.length?Ui(e,V(t,2),$i):n}function lp(e){return nr(e,$)}function up(e,t){return nr(e,V(t,2))}function dp(e){return e&&e.length?Ui(e,$,ba):n}function fp(e,t){return e&&e.length?Ui(e,V(t,2),ba):n}var pp=Fo(function(e,t){return e*t},1),mp=Ho(`round`),hp=Fo(function(e,t){return e-t},0);function gp(e){return e&&e.length?sr(e,$):0}function _p(e,t){return e&&e.length?sr(e,V(t,2)):0}return F.after=Bl,F.ary=Vl,F.assign=id,F.assignIn=ad,F.assignInWith=od,F.assignWith=sd,F.at=cd,F.before=Hl,F.bind=Ul,F.bindAll=Ef,F.bindKey=Wl,F.castArray=lu,F.chain=nl,F.chunk=Ks,F.compact=qs,F.concat=Js,F.cond=Df,F.conforms=Of,F.constant=kf,F.countBy=pl,F.create=ld,F.curry=Gl,F.curryRight=Kl,F.debounce=ql,F.defaults=ud,F.defaultsDeep=dd,F.defer=Jl,F.delay=Yl,F.difference=Ys,F.differenceBy=Xs,F.differenceWith=Zs,F.drop=Qs,F.dropRight=$s,F.dropRightWhile=ec,F.dropWhile=tc,F.fill=nc,F.filter=hl,F.flatMap=vl,F.flatMapDeep=yl,F.flatMapDepth=bl,F.flatten=ac,F.flattenDeep=oc,F.flattenDepth=sc,F.flip=Xl,F.flow=jf,F.flowRight=Mf,F.fromPairs=cc,F.functions=vd,F.functionsIn=yd,F.groupBy=Cl,F.initial=dc,F.intersection=fc,F.intersectionBy=pc,F.intersectionWith=mc,F.invert=Cd,F.invertBy=wd,F.invokeMap=Tl,F.iteratee=Nf,F.keyBy=El,F.keys=Z,F.keysIn=Q,F.map=Dl,F.mapKeys=Ed,F.mapValues=Dd,F.matches=Pf,F.matchesProperty=Ff,F.memoize=Zl,F.merge=Od,F.mergeWith=kd,F.method=If,F.methodOf=Lf,F.mixin=Rf,F.negate=Ql,F.nthArg=Vf,F.omit=Ad,F.omitBy=jd,F.once=$l,F.orderBy=Ol,F.over=Hf,F.overArgs=eu,F.overEvery=Uf,F.overSome=Wf,F.partial=tu,F.partialRight=nu,F.partition=kl,F.pick=Md,F.pickBy=Nd,F.prop Line truncated
+1
View File
@@ -0,0 +1 @@
@import "https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap";@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Nunito", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-700:oklch(50.8% .118 165.612);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-sky-400:oklch(74.6% .16 232.661);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117Line truncated
View File
File mode changed.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 491 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 477 B

After

Width:  |  Height:  |  Size: 477 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 258 KiB

After

Width:  |  Height:  |  Size: 258 KiB

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 166 B

After

Width:  |  Height:  |  Size: 166 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 485 B

After

Width:  |  Height:  |  Size: 485 B

-97
View File
@@ -1,97 +0,0 @@
import{n as Gm,r as ty,t as yn}from"./chunk-BqhQeaEc.js";function ny(l){return typeof l=="symbol"||l instanceof Symbol}var pm=typeof globalThis=="object"&&globalThis||typeof window=="object"&&window||typeof self=="object"&&self||typeof global=="object"&&global||(function(){return this})()||Function("return this")();function ly(l,i,{signal:s,edges:c}={}){let o,p=null;const h=c!=null&&c.includes("leading"),m=c==null||c.includes("trailing"),S=()=>{p!==null&&(l.apply(o,p),o=void 0,p=null)},v=()=>{m&&S(),q()};let g=null;const T=()=>{g!=null&&clearTimeout(g),g=setTimeout(()=>{g=null,v()},i)},O=()=>{g!==null&&(clearTimeout(g),g=null)},q=()=>{O(),o=void 0,p=null},j=()=>{S()},Q=function(...J){if(s?.aborted)return;o=this,p=J;const G=g==null;T(),h&&G&&S()};return Q.schedule=T,Q.cancel=q,Q.flush=j,s?.addEventListener("abort",q,{once:!0}),Q}function Vm(){}function eo(l){return l==null||typeof l!="object"&&typeof l!="function"}function to(l){return ArrayBuffer.isView(l)&&!(l instanceof DataView)}function ay(l){if(eo(l))return l;if(Array.isArray(l)||to(l)||l instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&l instanceof SharedArrayBuffer)return l.slice(0);const i=Object.getPrototypeOf(l);if(i==null)return Object.assign(Object.create(i),l);const s=i.constructor;if(l instanceof Date||l instanceof Map||l instanceof Set)return new s(l);if(l instanceof RegExp){const c=new s(l);return c.lastIndex=l.lastIndex,c}if(l instanceof DataView)return new s(l.buffer.slice(0));if(l instanceof Error){let c;return l instanceof AggregateError?c=new s(l.errors,l.message,{cause:l.cause}):c=new s(l.message,{cause:l.cause}),c.stack=l.stack,Object.assign(c,l),c}return typeof File<"u"&&l instanceof File?new s([l],l.name,{type:l.type,lastModified:l.lastModified}):typeof l=="object"?Object.assign(Object.create(i),l):l}function tu(l){return typeof pm.Buffer<"u"&&pm.Buffer.isBuffer(l)}function nu(l){return Object.getOwnPropertySymbols(l).filter(i=>Object.prototype.propertyIsEnumerable.call(l,i))}function wi(l){return l==null?l===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(l)}var Zm="[object RegExp]",no="[object String]",lo="[object Number]",ao="[object Boolean]",Km="[object Arguments]",Pm="[object Symbol]",Jm="[object Date]",Fm="[object Map]",$m="[object Set]",km="[object Array]",iy="[object Function]",Wm="[object ArrayBuffer]",Fr="[object Object]",ry="[object Error]",Im="[object DataView]",ep="[object Uint8Array]",tp="[object Uint8ClampedArray]",np="[object Uint16Array]",lp="[object Uint32Array]",uy="[object BigUint64Array]",ap="[object Int8Array]",ip="[object Int16Array]",rp="[object Int32Array]",sy="[object BigInt64Array]",up="[object Float32Array]",sp="[object Float64Array]";function cy(l,i){return Rl(l,void 0,l,new Map,i)}function Rl(l,i,s,c=new Map,o=void 0){const p=o?.(l,i,s,c);if(p!==void 0)return p;if(eo(l))return l;if(c.has(l))return c.get(l);if(Array.isArray(l)){const h=new Array(l.length);c.set(l,h);for(let m=0;m<l.length;m++)h[m]=Rl(l[m],m,s,c,o);return Object.hasOwn(l,"index")&&(h.index=l.index),Object.hasOwn(l,"input")&&(h.input=l.input),h}if(l instanceof Date)return new Date(l.getTime());if(l instanceof RegExp){const h=new RegExp(l.source,l.flags);return h.lastIndex=l.lastIndex,h}if(l instanceof Map){const h=new Map;c.set(l,h);for(const[m,S]of l)h.set(m,Rl(S,m,s,c,o));return h}if(l instanceof Set){const h=new Set;c.set(l,h);for(const m of l)h.add(Rl(m,void 0,s,c,o));return h}if(tu(l))return l.subarray();if(to(l)){const h=new(Object.getPrototypeOf(l)).constructor(l.length);c.set(l,h);for(let m=0;m<l.length;m++)h[m]=Rl(l[m],m,s,c,o);return h}if(l instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&l instanceof SharedArrayBuffer)return l.slice(0);if(l instanceof DataView){const h=new DataView(l.buffer.slice(0),l.byteOffset,l.byteLength);return c.set(l,h),sn(h,l,s,c,o),h}if(typeof File<"u"&&l instanceof File){const h=new File([l],l.name,{type:l.type});return c.set(l,h),sn(h,l,s,c,o),h}if(typeof Blob<"u"&&l instanceof Blob){const h=new Blob([l],{type:l.type});return c.set(l,h),sn(h,l,s,c,o),h}if(l instanceof Error){const h=structuredClone(l);return c.set(l,h),h.message=l.message,h.name=l.name,h.stack=l.stack,h.cause=l.cause,h.constructor=l.constructor,sn(h,l,s,c,o),h}if(l instanceof Boolean){const h=new Boolean(l.valueOf());return c.set(l,h),sn(h,l,s,c,o),h}if(l instanceof Number){const h=new Number(l.valueOf());return c.set(l,h),sn(h,l,s,c,o),h}if(l instanceof String){const h=new String(l.valueOf());return c.set(l,h),sn(h,l,s,c,o),h}if(typeof l=="object"&&oy(l)){const h=Object.create(Object.getPrototypeOf(l));return c.set(l,h),sn(h,l,s,c,o),h}return l}function sn(l,i,s=l,c,o){const p=[...Object.keys(i),...nu(i)];for(let h=0;h<p.length;h++){const m=p[h],S=Object.getOwnPropertyDescriptor(l,m);(S==null||S.writable)&&(l[m]=Rl(i[m],m,s,c,o))}}function oy(l){switch(wi(l)){case Km:case km:case Wm:case Im:case ao:case Jm:case up:case sp:case ap:case ip:case rp:case Fm:case lo:case Fr:case Zm:case $m:case no:caLine truncated
`).forEach(s=>{const c=s.indexOf(":");c>0&&(i[s.slice(0,c).toLowerCase().trim()]=s.slice(c+1).trim())}),i}function Uv(l,i){if(!i.headers)return;const s=i.data instanceof FormData;Object.entries(i.headers).forEach(([c,o])=>{(c.toLowerCase()!=="content-type"||!s)&&l.setRequestHeader(c,String(o))})}function Hv(l,i){if(!i||Object.keys(i).length===0)return l;const[s]=hu("get",l,i);return s}var Np=class{xsrfCookieName;xsrfHeaderName;constructor(l={}){this.xsrfCookieName=l.xsrfCookieName??"XSRF-TOKEN",this.xsrfHeaderName=l.xsrfHeaderName??"X-XSRF-TOKEN"}async request(l){const i=await vt.processRequest(l);try{const s=await this.doRequest(i);return await vt.processResponse(s)}catch(s){throw(s instanceof Kc||s instanceof _m||s instanceof Pc)&&await vt.processError(s),s}}doRequest(l){return new Promise((i,s)=>{const c=new XMLHttpRequest,o=Hv(l.url,l.params);c.open(l.method.toUpperCase(),o,!0);const p=Rv(this.xsrfCookieName);p&&c.setRequestHeader(this.xsrfHeaderName,p);let h=null;l.data!==null&&l.data!==void 0&&(l.data instanceof FormData?h=l.data:typeof l.data=="object"?(h=JSON.stringify(l.data),!l.headers?.["Content-Type"]&&!l.headers?.["content-type"]&&c.setRequestHeader("Content-Type","application/json")):h=String(l.data)),Uv(c,l),l.onUploadProgress&&(c.upload.onprogress=m=>{const S=m.lengthComputable?m.loaded/m.total:void 0;l.onUploadProgress({progress:S,percentage:S?Math.round(S*100):0,loaded:m.loaded,total:m.lengthComputable?m.total:void 0})}),l.signal&&l.signal.addEventListener("abort",()=>c.abort()),c.onabort=()=>s(new Pc("Request was cancelled",l.url)),c.onerror=()=>s(new _m("Network error",l.url)),c.onload=()=>{const m={status:c.status,data:c.responseText,headers:_v(c)};c.status>=400?s(new Kc(`Request failed with status ${c.status}`,m,l.url)):i(m)},c.send(h)})}},Cv=new Np,Hc=Cv;function xv(l){return!("request"in l)}var Rp={getClient(){return Hc},setClient(l){if(!xv(l)){Hc=l;return}Hc=new Np(l),l.xsrfCookieName&&St.withXsrfCookieName(l.xsrfCookieName),l.xsrfHeaderName&&St.withXsrfHeaderName(l.xsrfHeaderName)},onRequest:vt.onRequest.bind(vt),onResponse:vt.onResponse.bind(vt),onError:vt.onError.bind(vt),processRequest:vt.processRequest.bind(vt),processResponse:vt.processResponse.bind(vt),processError:vt.processError.bind(vt)},kr=class Wr{callbacks=[];params;constructor(i){if(!i.prefetch)this.params=i;else{const s={onBefore:this.wrapCallback(i,"onBefore"),onBeforeUpdate:this.wrapCallback(i,"onBeforeUpdate"),onStart:this.wrapCallback(i,"onStart"),onProgress:this.wrapCallback(i,"onProgress"),onFinish:this.wrapCallback(i,"onFinish"),onCancel:this.wrapCallback(i,"onCancel"),onSuccess:this.wrapCallback(i,"onSuccess"),onError:this.wrapCallback(i,"onError"),onHttpException:this.wrapCallback(i,"onHttpException"),onNetworkError:this.wrapCallback(i,"onNetworkError"),onFlash:this.wrapCallback(i,"onFlash"),onCancelToken:this.wrapCallback(i,"onCancelToken"),onPrefetched:this.wrapCallback(i,"onPrefetched"),onPrefetching:this.wrapCallback(i,"onPrefetching")};this.params={...i,...s,onPrefetchResponse:i.onPrefetchResponse||(()=>{}),onPrefetchError:i.onPrefetchError||(()=>{})}}}static create(i){return new Wr(i)}data(){return this.params.method==="get"?null:this.params.data}queryParams(){return this.params.method==="get"?this.params.data:{}}isPartial(){return this.params.only.length>0||this.params.except.length>0||this.params.reset.length>0}isPrefetch(){return this.params.prefetch===!0}isDeferredPropsRequest(){return this.params.deferredProps===!0}onCancelToken(i){this.params.onCancelToken({cancel:i})}markAsFinished(){this.params.completed=!0,this.params.cancelled=!1,this.params.interrupted=!1}markAsCancelled({cancelled:i=!0,interrupted:s=!1}){this.params.onCancel(),this.params.completed=!1,this.params.cancelled=i,this.params.interrupted=s}wasCancelledAtAll(){return this.params.cancelled||this.params.interrupted}onFinish(){this.params.onFinish(this.params)}onStart(){this.params.onStart(this.params)}onPrefetching(){this.params.onPrefetching(this.params)}onPrefetchResponse(i){this.params.onPrefetchResponse&&this.params.onPrefetchResponse(i)}onPrefetchError(i){this.params.onPrefetchError&&this.params.onPrefetchError(i)}all(){return this.params}headers(){const i={...this.params.headers};this.isPartial()&&(i["X-Inertia-Partial-Component"]=V.get().component);const s=this.params.only.concat(this.params.reset);return s.length>0&&(i["X-Inertia-Partial-Data"]=s.join(",")),this.params.except.length>0&&(i["X-Inertia-Partial-Except"]=this.params.except.join(",")),this.params.reset.length>0&&(i["X-Inertia-Reset"]=this.params.reset.join(",")),this.params.errorBag&&this.params.errorBag.length>0&&(i["X-Inertia-Error-Bag"]=this.params.errorBag),i}setPreserveOptions(i){this.params.preserveScroll=Wr.resolvePreserveOption(this.params.preserveScroll,i),this.params.preserveState=Wr.resolvePreserveOption(this.params.preserveState,i)}runCallbacks(){this.callbacks.forEach(({name:i,args:s})=>{this.params[i](...s)})}merge(i){this.params={...this.params,...i Line truncated
dialog#inertia-error-dialog::backdrop {
background-color: rgba(0, 0, 0, 0.6);
}
dialog#inertia-error-dialog:focus {
outline: none;
}
`;const p=_l.get("nonce");p&&(o.nonce=p),document.head.appendChild(o),c.addEventListener("click",h=>{h.target===c&&c.close()}),c.addEventListener("close",()=>{o.remove(),c.remove()}),c.appendChild(i),document.body.prepend(c),c.showModal(),c.focus(),i.srcdoc=s.outerHTML}},Um=(l,i)=>l===i||l.startsWith(`${i}.`),_p=(l,i)=>{const{only:s,except:c}=l;return!(s.length===0&&c.length===0||s.length>0&&!s.some(o=>Um(i,o))||c.length>0&&c.some(o=>Um(i,o)))},jv=(l,i)=>i.some(s=>_p(l,s)),Bv=new mu,Hm=class Up{constructor(i,s,c){this.requestParams=i,this.response=s,this.originatingPage=c}wasPrefetched=!1;processed=!1;static create(i,s,c){return new Up(i,s,c)}isProcessed(){return this.processed}async handlePrefetch(){cu(this.requestParams.all().url,window.location)&&this.handle()}async handle(){return Bv.add(()=>this.process())}async process(){if(this.requestParams.all().prefetch)return this.wasPrefetched=!0,this.requestParams.all().prefetch=!1,this.requestParams.all().onPrefetched(this.response,this.requestParams.all()),Iy(this.response,this.requestParams.all()),Promise.resolve();if(this.requestParams.runCallbacks(),this.processed=!0,!this.isInertiaResponse())return this.handleNonInertiaResponse();if(this.isHttpException()){const c={...this.response,data:this.getDataFromResponse(this.response.data)};if(this.requestParams.all().onHttpException(c)===!1||!Om(c))return}await De.processQueue(),De.preserveUrl=this.requestParams.all().preserveUrl,await this.setPage();const{flash:i}=V.get();Object.keys(i).length>0&&!this.requestParams.isDeferredPropsRequest()&&(uu(i),this.requestParams.all().onFlash(i));const s=V.get().props.errors||{};if(Object.keys(s).length>0){const c=this.getScopedErrors(s);return Ky(c),this.requestParams.all().onError(c)}Ye.flushByCacheTags(this.requestParams.all().invalidateCacheTags||[]),this.wasPrefetched||Ye.flush(V.get().url),Wy(V.get()),await this.requestParams.all().onSuccess(V.get()),De.preserveUrl=!1}mergeParams(i){this.requestParams.merge(i)}getPageResponse(){const i=this.getDataFromResponse(this.response.data);return typeof i=="object"?this.response.data={...i,flash:i.flash??{},rescuedProps:i.rescuedProps??[]}:this.response.data=i}async handleNonInertiaResponse(){if(this.isInertiaRedirect()){Ye.visit(this.getHeader("x-inertia-redirect"),{...this.requestParams.all(),method:"get",data:{}});return}if(this.isLocationVisit()){const s=en(this.getHeader("x-inertia-location"));return Dm(this.requestParams.all().url,s),this.locationVisit(s)}const i={...this.response,data:this.getDataFromResponse(this.response.data)};if(this.requestParams.all().onHttpException(i)!==!1&&Om(i))return qv.show(i.data)}isInertiaResponse(){return this.hasHeader("x-inertia")}isHttpException(){return this.response.status>=400}hasStatus(i){return this.response.status===i}getHeader(i){return this.response.headers[i]}hasHeader(i){return this.getHeader(i)!==void 0}isInertiaRedirect(){return this.hasStatus(409)&&this.hasHeader("x-inertia-redirect")}isLocationVisit(){return this.hasStatus(409)&&this.hasHeader("x-inertia-location")}locationVisit(i){try{if(Rt.set(Rt.locationVisitKey,{preserveScroll:this.requestParams.all().preserveScroll===!0}),typeof window>"u")return;cu(window.location,i)?window.location.reload():window.location.href=i.href}catch{return!1}}async setPage(){const i=this.getPageResponse();return this.shouldSetPage(i)?(this.mergeProps(i),V.mergeOncePropsIntoResponse(i),this.preserveOptimisticProps(i),this.preserveEqualProps(i),await this.setRememberedState(i),this.requestParams.setPreserveOptions(i),i.url=De.preserveUrl?V.get().url:this.pageUrl(i),this.requestParams.all().onBeforeUpdate(i),Fy(i),V.set(i,{replace:this.requestParams.all().replace,preserveScroll:this.requestParams.all().preserveScroll,preserveState:this.requestParams.all().preserveState,viewTransition:this.requestParams.all().viewTransition})):Promise.resolve()}getDataFromResponse(i){if(typeof i!="string")return i;try{return JSON.parse(i)}catch{return i}}shouldSetPage(i){if(!this.requestParams.all().async||this.originatingPage.component!==i.component)return!0;if(this.originatingPage.component!==V.get().component)return!1;const s=en(this.originatingPage.url),c=en(V.get().url);return s.origin===c.origin&&s.pathname===c.pathname}pageUrl(i){const s=en(i.url);return i.preserveFragment?s.hash=this.requestParams.all().url.hash:Dm(this.requestParams.all().url,s),s.pathname+s.search+s.hash}preserveOptimisticProps(i){if(Ye.hasPendingOptimistic())for(const s of Object.keys(i.props))V.hasBaseline(s)&&(V.updateBaseline(s,i.props[s]),i.props[s]=V.get().props[s])}preserveEqualProps(i){if(i.component!==V.get().component)return;const s=V.get().props;Object.entries(i.props).forEach(([c,o])=>{gn(o,s[c])&&(i.props[c]=s[c])})}mergeProps(i){if(!this.requestParams.isPartial()||i.component!==V.get().component)return;const s=i.mergeProps||[],c=i.prependProps||[],o=i.deepMergeProps||[],p=i.matchPropsOn||[],h=(v,g)=>{const T=Ze(V.get().props,v),O=Ze(i.props,v);if(Array.isArray(O)){co Line truncated
#${lt} {
pointer-events: none;
background: none;
border: none;
margin: 0;
padding: 0;
overflow: visible;
inset: unset;
width: 100%;
height: 0;
position: fixed;
top: 0;
left: 0;
}
#${lt}::backdrop {
display: none;
}
#${lt} .bar {
background: ${l};
position: fixed;
z-index: 1031;
top: 0;
left: 0;
width: 100%;
height: 2px;
}
#${lt} .peg {
display: block;
position: absolute;
right: 0px;
width: 100px;
height: 100%;
box-shadow: 0 0 10px ${l}, 0 0 5px ${l};
opacity: 1.0;
transform: rotate(3deg) translate(0px, -4px);
}
#${lt} .spinner {
display: block;
position: fixed;
z-index: 1031;
top: 15px;
right: 15px;
}
#${lt} .spinner-icon {
width: 18px;
height: 18px;
box-sizing: border-box;
border: solid 2px transparent;
border-top-color: ${l};
border-left-color: ${l};
border-radius: 50%;
animation: ${lt}-spinner 400ms linear infinite;
}
.${lt}-custom-parent {
overflow: hidden;
position: relative;
}
.${lt}-custom-parent #${lt} .spinner,
.${lt}-custom-parent #${lt} .bar {
position: absolute;
}
@keyframes ${lt}-spinner {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
`,document.head.appendChild(i)},o1=()=>{if(fu=!1,!!at?.isConnected)if(Ul)try{at.showPopover()}catch{}else at.style.display=""},f1=()=>{if(fu=!0,!!at?.isConnected)if(Ul)try{at.hidePopover()}catch{}else at.style.display="none"},un={configure:a1,isStarted:Bp,done:i1,set:pu,remove:Qp,start:Lp,status:fl,show:o1,hide:f1},d1=class{hideCount=0;start(){un.start()}reveal(l=!1){this.hideCount=Math.max(0,this.hideCount-1),(l||this.hideCount===0)&&un.show()}hide(){this.hideCount++,un.hide()}set(l){un.set(Math.max(0,Math.min(1,l)))}finish(){un.done()}reset(){un.set(0)}remove(){un.done(),un.remove()}isStarted(){return un.isStarted()}getStatus(){return un.status}},tn=new d1;function h1(l){document.addEventListener("inertia:start",i=>m1(i,l)),document.addEventListener("inertia:progress",p1)}function m1(l,i){l.detail.visit.showProgress||tn.hide();const s=setTimeout(()=>tn.start(),i);document.addEventListener("inertia:finish",c=>g1(c,s),{once:!0})}function p1(l){tn.isStarted()&&l.detail.progress?.percentage&&tn.set(Math.max(tn.getStatus(),l.detail.progress.percentage/100*.9))}function g1(l,i){clearTimeout(i),tn.isStarted()&&(l.detail.visit.completed?tn.finish():l.detail.visit.interrupted?tn.reset():l.detail.visit.cancelled&&tn.remove())}function y1({delay:l=250,color:i="#29d",includeCSS:s=!0,showSpinner:c=!1,popover:o=null}={}){h1(l),un.configure({showSpinner:c,includeCSS:s,color:i,popover:o})}var Zp=Symbol("FormComponentReset");function Jc(l){return l instanceof HTMLInputElement||l instanceof HTMLSelectElement||l instanceof HTMLTextAreaElement}function v1(l,i){const s=l.value,c=l.checked;switch(l.type.toLowerCase()){case"checkbox":l.checked=i.includes(l.value);break;case"radio":l.checked=i[0]===l.value;break;case"file":l.value="";break;case"button":case"submit":case"reset":case"image":break;default:l.value=i[0]!==null&&i[0]!==void 0?String(i[0]):""}return l.value!==s||l.checked!==c}function S1(l,i){const s=l.value,c=Array.from(l.selectedOptions).map(p=>p.value);if(l.multiple){const p=i.map(h=>String(h));Array.from(l.options).forEach(h=>{h.selected=p.includes(h.value)})}else l.value=i[0]!==void 0?String(i[0]):"";const o=Array.from(l.selectedOptions).map(p=>p.value);return l.multiple?JSON.stringify(c.sort())!==JSON.stringify(o.sort()):l.value!==s}function xc(l,i){if(l.disabled){if(l instanceof HTMLInputElement){const s=l.value,c=l.checked;switch(l.type.toLowerCase()){case"checkbox":case"radio":return l.checked=l.defaultChecked,l.checked!==c;case"file":return l.value="",s!=="";case"button":case"submit":case"reset":case"image":return!1;default:return l.value=l.defaultValue,l.value!==s}}else if(l instanceof HTMLSelectElement){const s=Array.from(l.selectedOptions).map(o=>o.value);Array.from(l.options).forEach(o=>{o.selected=o.defaultSelected});const c=Array.from(l.selectedOptions).map(o=>o.value);return JSON.stringify(s.sort())!==JSON.stringify(c.sort())}else if(l instanceof HTMLTextAreaElement){const s=l.value;return l.value=l.defaultValue,l.value!==s}return!1}if(l instanceof HTMLInputElement)return v1(l,i);if(l instanceof HTMLSelectElement)return S1(l,i);if(l instanceof HTMLTextAreaElement){const s=l.value;return l.value=i[0]!==void 0?String(i[0]):"",l.value!==s}return!1}function b1(l,i){let s=!1;return l instanceof RadioNodeList||l instanceof HTMLCollection?Array.from(l).forEach((c,o)=>{c instanceof Element&&Jc(c)&&(c instanceof HTMLInputElement&&["checkbox","radio"].includes(c.type.toLowerCase())?xc(c,i)&&(s=!0):xc(c,i[o]!==void 0?[i[o]]:[i[0]??null].filter(Boolean))&&(s=!0))}):Jc(l)&&(s=xc(l,i)),s}function E1(l,i,s){if(!l)return;const c=!s||s.length===0;if(c){const p=new FormData(l),h=Array.from(l.elements).map(m=>Jc(m)?m.name:"").filter(Boolean);s=[...new Set([...i.keys(),...p.keys(),...h])]}let o=!1;s.forEach(p=>{const h=l.elements.namedItem(p);h&&b1(h,i.getAll(p))&&(o=!0)}),o&&c&&l.dispatchEvent(new CustomEvent("reset",{bubbles:!0,cancelable:!0,detail:{[Zp]:!0}}))}function Lm(l,i,s){return`<script data-page="${l}" type="application/json">${JSON.stringify(i).replace(/\//g,"\\/")}<\/script><div data-server-rendered="true" id="${l}">${s}</div>`}var Ye=new Lv,A1=yn((l=>{var i=Symbol.for("react.transitional.element"),s=Symbol.for("react.portal"),c=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),p=Symbol.for("react.profiler"),h=Symbol.for("react.consumer"),m=Symbol.for("react.context"),S=Symbol.for("react.forward_ref"),v=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),T=Symbol.for("react.lazy"),O=Symbol.for("react.activity"),q=Symbol.iterator;function j(b){return b===null||typeof b!="object"?null:(b=q&&b[q]||b["@@iterator"],typeof b=="function"?b:null)}var Q={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},J=Object.assign,G={};function ne(b,U,Y){this.props=b,this.context=U,this.refs=G,this.updater=Y||Q}ne.prototype.isReactComponent={},ne.prototype.setState=function(b,U){if(typeof b!="object"&&typeof b!="function"&&b!=null)throLine truncated
at`)?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return`
`+Et+e+pt}var ye=!1;function gt(e,t){if(!e||ye)return"";ye=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var a={DetermineComponentFrameRoot:function(){try{if(t){var x=function(){throw Error()};if(Object.defineProperty(x.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(x,[])}catch(N){var z=N}Reflect.construct(e,[],x)}else{try{x.call()}catch(N){z=N}e.call(x.prototype)}}else{try{throw Error()}catch(N){z=N}(x=e())&&typeof x.catch=="function"&&x.catch(function(){})}}catch(N){if(N&&z&&typeof N.stack=="string")return[N.stack,z.stack]}return[null,null]}};a.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var r=Object.getOwnPropertyDescriptor(a.DetermineComponentFrameRoot,"name");r&&r.configurable&&Object.defineProperty(a.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var u=a.DetermineComponentFrameRoot(),f=u[0],d=u[1];if(f&&d){var y=f.split(`
`),M=d.split(`
`);for(r=a=0;a<y.length&&!y[a].includes("DetermineComponentFrameRoot");)a++;for(;r<M.length&&!M[r].includes("DetermineComponentFrameRoot");)r++;if(a===y.length||r===M.length)for(a=y.length-1,r=M.length-1;1<=a&&0<=r&&y[a]!==M[r];)r--;for(;1<=a&&0<=r;a--,r--)if(y[a]!==M[r]){if(a!==1||r!==1)do if(a--,r--,0>r||y[a]!==M[r]){var H=`
`+y[a].replace(" at new "," at ");return e.displayName&&H.includes("<anonymous>")&&(H=H.replace("<anonymous>",e.displayName)),H}while(1<=a&&0<=r);break}}}finally{ye=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?ie(n):""}function I(e,t){switch(e.tag){case 26:case 27:case 5:return ie(e.type);case 16:return ie("Lazy");case 13:return e.child!==t&&t!==null?ie("Suspense Fallback"):ie("Suspense");case 19:return ie("SuspenseList");case 0:case 15:return gt(e.type,!1);case 11:return gt(e.type.render,!1);case 1:return gt(e.type,!0);case 31:return ie("Activity");default:return""}}function ve(e){try{var t="",n=null;do t+=I(e,n),n=e,e=e.return;while(e);return t}catch(a){return`
Error generating stack: `+a.message+`
`+a.stack}}var pe=Object.prototype.hasOwnProperty,Qe=i.unstable_scheduleCallback,ct=i.unstable_cancelCallback,Hl=i.unstable_shouldYield,Ta=i.unstable_requestPaint,$e=i.unstable_now,Gt=i.unstable_getCurrentPriorityLevel,vn=i.unstable_ImmediatePriority,Ni=i.unstable_UserBlockingPriority,Bn=i.unstable_NormalPriority,Oa=i.unstable_LowPriority,yo=i.unstable_IdlePriority,$p=i.log,kp=i.unstable_setDisableYieldValue,wa=null,Ht=null;function Ln(e){if(typeof $p=="function"&&kp(e),Ht&&typeof Ht.setStrictMode=="function")try{Ht.setStrictMode(wa,e)}catch{}}var Ct=Math.clz32?Math.clz32:e0,Wp=Math.log,Ip=Math.LN2;function e0(e){return e>>>=0,e===0?32:31-(Wp(e)/Ip|0)|0}var Ri=256,_i=262144,Ui=4194304;function dl(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Hi(e,t,n){var a=e.pendingLanes;if(a===0)return 0;var r=0,u=e.suspendedLanes,f=e.pingedLanes;e=e.warmLanes;var d=a&134217727;return d!==0?(a=d&~u,a!==0?r=dl(a):(f&=d,f!==0?r=dl(f):n||(n=d&~e,n!==0&&(r=dl(n))))):(d=a&~u,d!==0?r=dl(d):f!==0?r=dl(f):n||(n=a&~e,n!==0&&(r=dl(n)))),r===0?0:t!==0&&t!==r&&(t&u)===0&&(u=r&-r,n=t&-t,u>=n||u===32&&(n&4194048)!==0)?t:r}function Ma(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function t0(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function vo(){var e=Ui;return Ui<<=1,(Ui&62914560)===0&&(Ui=4194304),e}function yu(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function za(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function n0(e,t,n,a,r,u){var f=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var d=e.entanglements,y=e.expirationTimes,M=e.hiddenUpdates;for(n=f&~n;0<n;){var H=31-Ct(n),x=1<<H;d[H]=0,y[H]=-1;var z=M[H];if(z!==null)for(M[H]=null,H=0;H<z.length;H++){var N=z[H];N!==null&&(N.lane&=-536870913)}n&=~x}a!==0&&So(e,a,0),u!==0&&r===0&&e.tag!==0&&(e.suspendedLanes|=u&~(f&~t))}function So(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var a=31-Ct(t);e.entangledLanes|=t,e.entanglements[a]=e.entanglements[a]|1073741824|n&261930}function bo(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var a=31-Ct(n),r=1<<a;r&t|e[a]&t&&(e[a]|=t),n&=~r}}function Eo(e,t){var n=t&-t;return n=(n&42)!==0?1:vu(n),(n&(e.suspendedLanes|t))!==0?0:n}function vu(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function Su(e){return e&=-e,2<e?8<e?(e&134217727)!==0?32:268435456:8:2}function Ao(){var e=B.p;return e!==0?e:(e=window.event,e===void 0?32:sm(e.type))}function To(e,t){var n=B.p;try{return B.p=e,t()}finally{B.p=n}}var Yn=Math.random().toString(36).slice(2),ot="__reactFiber$"+Yn,At="__reactProps$"+Yn,Cl="__reactContainer$"+Yn,bu="__reactEvents$"+Yn,l0="__reactListeners$"+Yn,a0="__reactHandles$"+Yn,Oo="__reactResources$"+Yn,Da="__reactMarker$"+Yn;function Eu(e){delete e[ot],delete e[At],delete e[bu],delete e[l0],delete e[a0]}function xl(e){var t=e[ot];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Cl]||n[ot]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=Kh(e);e!==null;){if(n=e[ot])return n;e=Kh(e)}return t}e=n,n=e.parentNode}return null}function ql(e){if(e=e[ot]||e[Cl]){var t=e.tag;if(t===5||t===6||t===13||t===31||t===26||t===27||t===3)return e}return null}function Na(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e.stateNode;throw Error(o(33))}function jl(e){var t=e[Oo];return t||(t=e[Oo]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function ut(e){e[Da]=!0}var wo=new Set,Mo={};function hl(e,t){Bl(e,t),Bl(e+"Capture",t)}function Bl(e,t){for(Mo[e]=t,e=0;e<t.length;e++)wo.add(t[e])}var i0=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u21 Line truncated
`).replace(Tg,"")}function qh(e,t){return t=xh(t),xh(e)===t}function Be(e,t,n,a,r,u){switch(n){case"children":typeof a=="string"?t==="body"||t==="textarea"&&a===""||Yl(e,a):(typeof a=="number"||typeof a=="bigint")&&t!=="body"&&Yl(e,""+a);break;case"className":xi(e,"class",a);break;case"tabIndex":xi(e,"tabindex",a);break;case"dir":case"role":case"viewBox":case"width":case"height":xi(e,n,a);break;case"style":xo(e,a,u);break;case"data":if(t!=="object"){xi(e,"data",a);break}case"src":case"href":if(a===""&&(t!=="a"||n!=="href")){e.removeAttribute(n);break}if(a==null||typeof a=="function"||typeof a=="symbol"||typeof a=="boolean"){e.removeAttribute(n);break}a=ji(""+a),e.setAttribute(n,a);break;case"action":case"formAction":if(typeof a=="function"){e.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof u=="function"&&(n==="formAction"?(t!=="input"&&Be(e,t,"name",r.name,r,null),Be(e,t,"formEncType",r.formEncType,r,null),Be(e,t,"formMethod",r.formMethod,r,null),Be(e,t,"formTarget",r.formTarget,r,null)):(Be(e,t,"encType",r.encType,r,null),Be(e,t,"method",r.method,r,null),Be(e,t,"target",r.target,r,null)));if(a==null||typeof a=="symbol"||typeof a=="boolean"){e.removeAttribute(n);break}a=ji(""+a),e.setAttribute(n,a);break;case"onClick":a!=null&&(e.onclick=bn);break;case"onScroll":a!=null&&Oe("scroll",e);break;case"onScrollEnd":a!=null&&Oe("scrollend",e);break;case"dangerouslySetInnerHTML":if(a!=null){if(typeof a!="object"||!("__html"in a))throw Error(o(61));if(n=a.__html,n!=null){if(r.children!=null)throw Error(o(60));e.innerHTML=n}}break;case"multiple":e.multiple=a&&typeof a!="function"&&typeof a!="symbol";break;case"muted":e.muted=a&&typeof a!="function"&&typeof a!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(a==null||typeof a=="function"||typeof a=="boolean"||typeof a=="symbol"){e.removeAttribute("xlink:href");break}n=ji(""+a),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":a!=null&&typeof a!="function"&&typeof a!="symbol"?e.setAttribute(n,""+a):e.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":a&&typeof a!="function"&&typeof a!="symbol"?e.setAttribute(n,""):e.removeAttribute(n);break;case"capture":case"download":a===!0?e.setAttribute(n,""):a!==!1&&a!=null&&typeof a!="function"&&typeof a!="symbol"?e.setAttribute(n,a):e.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":a!=null&&typeof a!="function"&&typeof a!="symbol"&&!isNaN(a)&&1<=a?e.setAttribute(n,a):e.removeAttribute(n);break;case"rowSpan":case"start":a==null||typeof a=="function"||typeof a=="symbol"||isNaN(a)?e.removeAttribute(n):e.setAttribute(n,a);break;case"popover":Oe("beforetoggle",e),Oe("toggle",e),Ci(e,"popover",a);break;case"xlinkActuate":Sn(e,"http://www.w3.org/1999/xlink","xlink:actuate",a);break;case"xlinkArcrole":Sn(e,"http://www.w3.org/1999/xlink","xlink:arcrole",a);break;case"xlinkRole":Sn(e,"http://www.w3.org/1999/xlink","xlink:role",a);break;case"xlinkShow":Sn(e,"http://www.w3.org/1999/xlink","xlink:show",a);break;case"xlinkTitle":Sn(e,"http://www.w3.org/1999/xlink","xlink:title",a);break;case"xlinkType":Sn(e,"http://www.w3.org/1999/xlink","xlink:type",a);break;case"xmlBase":Sn(e,"http://www.w3.org/XML/1998/namespace","xml:base",a);break;case"xmlLang":Sn(e,"http://www.w3.org/XML/1998/namespace","xml:lang",a);break;case"xmlSpace":Sn(e,"http://www.w3.org/XML/1998/namespace","xml:space",a);break;case"is":Ci(e,"is",a);break;case"innerText":case"textContent":break;default:(!(2<n.length)||n[0]!=="o"&&n[0]!=="O"||n[1]!=="n"&&n[1]!=="N")&&(n=o0.get(n)||n,Ci(e,n,a))}}function fc(e,t,n,a,r,u){switch(n){case"style":xo(e,a,u);break;case"dangerouslySetInnerHTML":if(a!=null){if(typeof a!="object"||!("__html"in a))throw Error(o(61));if(n=a.__html,n!=null){if(r.children!=null)throw Error(o(60));e.innerHTML=n}}break;case"children":typeof a=="string"?Yl(e,a):(typeof a=="number"||typeof a=="bigint")&&Yl(e,""+a);break;case"onScroll":a!=null&&Oe("scroll",e);break;case"onScrollEnd":a!=null&&Oe("scrollend",e);break;case"onClick":a!=null&&(e.onclick=bn);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"inne Line truncated
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

-7
View File
@@ -1,7 +0,0 @@
var Ft=!1,Dt=!1,fe=[],Rt=-1,tr=!1;function Ln(e){Fn(e)}function kn(){tr=!0}function Nn(){tr=!1,Qr()}function Fn(e){fe.includes(e)||fe.push(e),Qr()}function Dn(e){let t=fe.indexOf(e);t!==-1&&t>Rt&&fe.splice(t,1)}function Qr(){if(!Dt&&!Ft){if(tr)return;Ft=!0,queueMicrotask(Rn)}}function Rn(){Ft=!1,Dt=!0;for(let e=0;e<fe.length;e++)fe[e](),Rt=e;fe.length=0,Rt=-1,Dt=!1}var Pe,ye,Ae,ei,zt=!0;function zn(e){zt=!1,e(),zt=!0}function Gn(e){Pe=e.reactive,Ae=e.release,ye=t=>e.effect(t,{scheduler:r=>{zt?Ln(r):r()}}),ei=e.raw}function Er(e){ye=e}function $n(e){let t=()=>{};return[i=>{let n=ye(i);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(s=>s())}),e._x_effects.add(n),t=()=>{n!==void 0&&(e._x_effects.delete(n),Ae(n))},n},()=>{t()}]}function ti(e,t){let r=!0,i,n,s=ye(()=>{let a=e(),l=JSON.stringify(a);if(!r&&(typeof a=="object"||a!==i)){let o=typeof i=="object"?JSON.parse(n):i;queueMicrotask(()=>{t(a,o)})}i=a,n=l,r=!1});return()=>Ae(s)}async function Bn(e){kn();try{await e(),await Promise.resolve()}finally{Nn()}}var ri=[],ii=[],ni=[];function jn(e){ni.push(e)}function rr(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,ii.push(t))}function si(e){ri.push(e)}function ai(e,t,r){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(r)}function oi(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([r,i])=>{(t===void 0||t.includes(r))&&(i.forEach(n=>n()),delete e._x_attributeCleanups[r])})}function Vn(e){for(e._x_effects?.forEach(Dn);e._x_cleanups?.length;)e._x_cleanups.pop()()}var ir=new MutationObserver(or),nr=!1;function sr(){ir.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),nr=!0}function li(){Hn(),ir.disconnect(),nr=!1}var Le=[];function Hn(){let e=ir.takeRecords();Le.push(()=>e.length>0&&or(e));let t=Le.length;queueMicrotask(()=>{if(Le.length===t)for(;Le.length>0;)Le.shift()()})}function z(e){if(!nr)return e();li();let t=e();return sr(),t}var ar=!1,rt=[];function Wn(){ar=!0}function qn(){ar=!1,or(rt),rt=[]}function or(e){if(ar){rt=rt.concat(e);return}let t=[],r=new Set,i=new Map,n=new Map;for(let s=0;s<e.length;s++)if(!e[s].target._x_ignoreMutationObserver&&(e[s].type==="childList"&&(e[s].removedNodes.forEach(a=>{a.nodeType===1&&a._x_marker&&r.add(a)}),e[s].addedNodes.forEach(a=>{if(a.nodeType===1){if(r.has(a)){r.delete(a);return}a._x_marker||t.push(a)}})),e[s].type==="attributes")){let a=e[s].target,l=e[s].attributeName,o=e[s].oldValue,u=()=>{i.has(a)||i.set(a,[]),i.get(a).push({name:l,value:a.getAttribute(l)})},c=()=>{n.has(a)||n.set(a,[]),n.get(a).push(l)};a.hasAttribute(l)&&o===null?u():a.hasAttribute(l)?(c(),u()):c()}n.forEach((s,a)=>{oi(a,s)}),i.forEach((s,a)=>{ri.forEach(l=>l(a,s))});for(let s of r)t.some(a=>a.contains(s))||ii.forEach(a=>a(s));for(let s of t)s.isConnected&&ni.forEach(a=>a(s));t=null,r=null,i=null,n=null}function ui(e){return ge(me(e))}function He(e,t,r){return e._x_dataStack=[t,...me(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(i=>i!==t)}}function me(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?me(e.host):e.parentNode?me(e.parentNode):[]}function ge(e){return new Proxy({objects:e},Kn)}function ci(e,t){return e===null||e===Object.prototype?null:Object.prototype.hasOwnProperty.call(e,t)?e:ci(Object.getPrototypeOf(e),t)}var Kn={ownKeys({objects:e}){return Array.from(new Set(e.flatMap(t=>Object.keys(t))))},has({objects:e},t){return t==Symbol.unscopables?!1:e.some(r=>Object.prototype.hasOwnProperty.call(r,t)||Reflect.has(r,t))},get({objects:e},t,r){return t=="toJSON"?Yn:Reflect.get(e.find(i=>Reflect.has(i,t))||{},t,r)},set({objects:e},t,r,i){let n;for(const a of e)if(n=ci(a,t),n)break;n||(n=e[e.length-1]);const s=Object.getOwnPropertyDescriptor(n,t);return s?.set&&s?.get?s.set.call(i,r)||!0:Reflect.set(n,t,r)}};function Yn(){return Reflect.ownKeys(this).reduce((e,t)=>(e[t]=Reflect.get(this,t),e),{})}function lr(e){let t=i=>typeof i=="object"&&!Array.isArray(i)&&i!==null,r=(i,n="")=>{Object.entries(Object.getOwnPropertyDescriptors(i)).forEach(([s,{value:a,enumerable:l}])=>{if(l===!1||a===void 0||typeof a=="object"&&a!==null&&a.__v_skip)return;let o=n===""?s:`${n}.${s}`;typeof a=="object"&&a!==null&&a._x_interceptor?i[s]=a.initialize(e,o,s):t(a)&&a!==i&&!(a instanceof Element)&&r(a,o)})};return r(e)}function di(e,t=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(i,n,s){return e(this.initialValue,()=>Xn(i,n),a=>Gt(i,n,a),n,s)}};return t(r),i=>{if(typeof i=="object"&&i!==null&&i._x_interceptor){let n=r.initialize.bind(r);r.initialize=(s,a,l)=>(r.initialValue=i.initialize(s,a,l),n(s,a,l))}else r.initialValue=i;return r}}function Xn(e,t){return t.split(".").reduce((r,i)=>r[i],e)}function Gt(e,t,r){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=r;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]Line truncated
${r?'Expression: "'+r+`"
`:""}`,t),setTimeout(()=>{throw e},0)}var Ee=!0;function hi(e){let t=Ee;Ee=!1;let r=e();return Ee=t,r}function pe(e,t,r={}){let i;return V(e,t)(n=>i=n,r),i}function V(...e){return vi(...e)}var vi=()=>{};function es(e){vi=e}var mi;function ts(e){mi=e}function rs(e,t){let r={};Be(r,e);let i=[r,...me(e)],n=typeof t=="function"?is(i,t):ss(i,t,e);return Jn.bind(null,e,t,n)}function is(e,t){return(r=()=>{},{scope:i={},params:n=[],context:s}={})=>{if(!Ee){Ve(r,t,ge([i,...e]),n);return}Ve(r,t.apply(ge([i,...e]),n))}}var Tt={};function ns(e,t){if(Tt[e])return Tt[e];let r=Object.getPrototypeOf(async function(){}).constructor,i=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e,s=(()=>{try{let a=new r(["__self","scope"],`with (scope) { __self.result = ${i} }; __self.finished = true; return __self.result;`);return Object.defineProperty(a,"name",{value:`[Alpine] ${e}`}),a}catch(a){return je(a,t,e),Promise.resolve()}})();return Tt[e]=s,s}function ss(e,t,r){let i=ns(t,r);return(n=()=>{},{scope:s={},params:a=[],context:l}={})=>{i.result=void 0,i.finished=!1;let o=ge([s,...e]);if(typeof i=="function"){let u=i.call(l,i,o).catch(c=>je(c,r,t));i.finished?(Ve(n,i.result,o,a,r),i.result=void 0):u.then(c=>{Ve(n,c,o,a,r)}).catch(c=>je(c,r,t)).finally(()=>i.result=void 0)}}}function Ve(e,t,r,i,n){if(Ee&&typeof t=="function"){let s=t.apply(r,i);s instanceof Promise?s.then(a=>Ve(e,a,r,i)).catch(a=>je(a,n,t)):e(s)}else typeof t=="object"&&t instanceof Promise?t.then(s=>e(s)):e(t)}function as(...e){return mi(...e)}function os(e,t,r={}){let i={};Be(i,e);let n=[i,...me(e)],s=ge([r.scope??{},...n]),a=r.params??[];if(t.includes("await")){let l=Object.getPrototypeOf(async function(){}).constructor;return new l(["scope"],`with (scope) { let __result = ${/^[\n\s]*if.*\(.*\)/.test(t.trim())||/^(let|const)\s/.test(t.trim())?`(async()=>{ ${t} })()`:t}; return __result }`).call(r.context,s)}else{let l=/^[\n\s]*if.*\(.*\)/.test(t.trim())||/^(let|const)\s/.test(t.trim())?`(()=>{ ${t} })()`:t,o=new Function(["scope"],`with (scope) { let __result = ${l}; return __result }`).call(r.context,s);return typeof o=="function"&&Ee?o.apply(s,a):o}}var ur="x-";function Me(e=""){return ur+e}function ls(e){ur=e}var it={};function $(e,t){return it[e]=t,{before(r){if(!it[r]){console.warn(String.raw`Cannot find directive \`${r}\`. \`${e}\` will use the default order of execution`);return}const i=de.indexOf(r);de.splice(i>=0?i:de.indexOf("DEFAULT"),0,e)}}}function us(e){return Object.keys(it).includes(e)}function cr(e,t,r){if(t=Array.from(t),e._x_virtualDirectives){let n=Object.entries(e._x_virtualDirectives).map(([a,l])=>({name:a,value:l})),s=gi(n);n=n.map(a=>s.find(l=>l.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),t=t.concat(n)}let i={};return t.map(_i((n,s)=>i[n]=s)).filter(Ti).map(fs(i,r)).sort(ps).map(n=>ds(e,n))}function gi(e){return Array.from(e).map(_i()).filter(t=>!Ti(t))}var $t=!1,De=new Map,bi=Symbol();function cs(e){$t=!0;let t=Symbol();bi=t,De.set(t,[]);let r=()=>{for(;De.get(t).length;)De.get(t).shift()();De.delete(t)},i=()=>{$t=!1,r()};e(r),i()}function wi(e){let t=[],r=l=>t.push(l),[i,n]=$n(e);return t.push(n),[{Alpine:Ie,effect:i,cleanup:r,evaluateLater:V.bind(V,e),evaluate:pe.bind(pe,e)},()=>t.forEach(l=>l())]}function ds(e,t){let r=()=>{},i=it[t.type]||r,[n,s]=wi(e);ai(e,t.original,s);let a=()=>{e._x_ignore||e._x_ignoreSelf||(i.inline&&i.inline(e,t,n),i=i.bind(i,e,t,n),$t?De.get(bi).push(i):i())};return a.runCleanups=s,a}var yi=(e,t)=>({name:r,value:i})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:i}),Si=e=>e;function _i(e=()=>{}){return({name:t,value:r})=>{let{name:i,value:n}=xi.reduce((s,a)=>a(s),{name:t,value:r});return i!==t&&e(i,t),{name:i,value:n}}}var xi=[];function dr(e){xi.push(e)}function Ti({name:e}){return Ei().test(e)}var Ei=()=>new RegExp(`^${ur}([^:^.]+)\\b`);function fs(e,t){return({name:r,value:i})=>{r===i&&(i="");let n=r.match(Ei()),s=r.match(/:([a-zA-Z0-9\-_:]+)/),a=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],l=t||e[r]||r;return{type:n?n[1]:null,value:s?s[1]:null,modifiers:a.map(o=>o.replace(".","")),expression:i,original:l}}}var Bt="DEFAULT",de=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",Bt,"teleport"];function ps(e,t){let r=de.indexOf(e.type)===-1?Bt:e.type,i=de.indexOf(t.type)===-1?Bt:t.type;return de.indexOf(r)-de.indexOf(i)}function ze(e,t,r={},i={}){return e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0,...i}))}function be(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(n=>be(n,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let i=e.firstElementChild;for(;i;)be(i,t,!1),i=i.nextElementSibling}function te(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var Cr=!1;function hs(){Cr&&te("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),Cr=!0,document.body||te("Unable toLine truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var s,a=!0,l=!1;return{s:function(){r=r.call(e)},n:function(){var o=r.next();return a=o.done,o},e:function(o){l=!0,s=o},f:function(){try{a||r.return==null||r.return()}finally{if(l)throw s}}}}function go(e,t,r){return(t=_o(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function bo(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function wo(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Br(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),r.push.apply(r,i)}return r}function jr(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?Br(Object(r),!0).forEach(function(i){go(e,i,r[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Br(Object(r)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(r,i))})}return e}function Re(){var e,t,r=typeof Symbol=="function"?Symbol:{},i=r.iterator||"@@iterator",n=r.toStringTag||"@@toStringTag";function s(f,m,g,T){var S=m&&m.prototype instanceof l?m:l,y=Object.create(S.prototype);return q(y,"_invoke",(function(E,C,A){var F,N,O,G=0,L=A||[],x=!1,_={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(h,w){return F=h,N=0,O=e,_.n=w,a}};function p(h,w){for(N=h,O=w,t=0;!x&&G&&!M&&t<L.length;t++){var M,b=L[t],P=_.p,I=b[2];h>3?(M=I===w)&&(O=b[(N=b[4])?5:(N=3,3)],b[4]=b[5]=e):b[0]<=P&&((M=h<2&&P<b[1])?(N=0,_.v=w,_.n=b[1]):P<I&&(M=h<3||b[0]>w||w>I)&&(b[4]=h,b[5]=w,_.n=I,N=0))}if(M||h>1)return a;throw x=!0,w}return function(h,w,M){if(G>1)throw TypeError("Generator is already running");for(x&&w===1&&p(w,M),N=w,O=M;(t=N<2?e:O)||!x;){F||(N?N<3?(N>1&&(_.n=-1),p(N,O)):_.n=O:_.v=O);try{if(G=2,F){if(N||(h="next"),t=F[h]){if(!(t=t.call(F,O)))throw TypeError("iterator result is not an object");if(!t.done)return t;O=t.value,N<2&&(N=0)}else N===1&&(t=F.return)&&t.call(F),N<2&&(O=TypeError("The iterator does not provide a '"+h+"' method"),N=1);F=e}else if((t=(x=_.n<0)?O:E.call(C,_))!==a)break}catch(b){F=e,N=1,O=b}finally{G=1}}return{value:t,done:x}}})(f,g,T),!0),y}var a={};function l(){}function o(){}function u(){}t=Object.getPrototypeOf;var c=[][i]?t(t([][i]())):(q(t={},i,function(){return this}),t),d=u.prototype=l.prototype=Object.create(c);function v(f){return Object.setPrototypeOf?Object.setPrototypeOf(f,u):(f.__proto__=u,q(f,n,"GeneratorFunction")),f.prototype=Object.create(d),f}return o.prototype=u,q(d,"constructor",u),q(u,"constructor",o),o.displayName="GeneratorFunction",q(u,n,"GeneratorFunction"),q(d),q(d,n,"Generator"),q(d,i,function(){return this}),q(d,"toString",function(){return"[object Generator]"}),(Re=function(){return{w:s,m:v}})()}function q(e,t,r,i){var n=Object.defineProperty;try{n({},"",{})}catch{n=0}q=function(s,a,l,o){function u(c,d){q(s,c,function(v){return this._invoke(c,d,v)})}a?n?n(s,a,{value:l,enumerable:!o,configurable:!o,writable:!o}):s[a]=l:(u("next",0),u("throw",1),u("return",2))},q(e,t,r,i)}function yo(e){return mo(e)||bo(e)||Sn(e)||wo()}function So(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,t);if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function _o(e){var t=So(e,"string");return typeof t=="symbol"?t:t+""}function Sn(e,t){if(e){if(typeof e=="string")return Zt(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Zt(e,t):void 0}}var Z={getActiveTrap:function(t){return t?.length>0?t[t.length-1]:null},activateTrap:function(t,r){r!==Z.getActiveTrap(t)&&Z.pauseTrap(t);var i=t.indexOf(r);i===-1||t.splice(i,1),t.push(r)},deactivateTrap:function(t,r){var i=t.indexOf(r);i!==-1&&t.splice(i,1),Z.unpauseTrap(t)},pauseTrap:function(t){var r=Z.getActiveTrap(t);r?._setPausedState(!0)},unpauseTrap:function(t){var r=Z.getActiveTrap(t);r&&!r._isManuallyPaused()&&r._setPausedState(!1)}},xo=function(t){return t.tagName&&t.tagName.toLowerCase()==="input"&&typeof t.select=="function"},To=function(t){return t?.key==="Escape"||t?.key==="Esc"||t?.keyCode===27},$e=function(t){return t?.key==="Tab"||t?.keyCode===9},Eo=function(t){return $e(t)&&!t.shiftKey},Co=function(t){return $e(t)&&t.shiftKey},Vr=function(t){return setTimeout(t,0)},Fe=function(t){for(var r=arguments.length,i=new Array(r>1?r-1:0),n=1;n<r;n++)i[n-1]=arguments[n];return typeof t=="function"?t.apply(void 0,i):t},Je=function(t){return t.target.shadowRoot&&typeof t.composedPath=="function"?t.composedPath()[0]:t.target},Po=[],Ao=function(t,r){var i=r?.document||document,n=r?.trapStack||Po,s=jr({returnFocusOnDeactivate:!0,escapeDeactivates:!0,delayInitialFocus:!0,isolateSubtrees:!1,isKeyForward:Eo,isKeyBackward:Co},r),a={containers:[],containerGroups:[],tabbableGroups:[],adjacentElements:new Set,alreadySilent:new Set,nodeFocusedBeforeActivation:null,mostRecentlyFocusedNode:null,active:!1,paused:!1,manuallyPaused:!1,delayInitialFocusTimer:void 0,recentNavEvent:void 0},l,o=function(p,h,w){return p&&p[h]!==void 0?p[h]:s[w||h]},u=function(p,h){var w=typeof h?.composedPath=="function"?h.composedPath():void 0;ret Line truncated
-1
View File
@@ -1 +0,0 @@
:root{--swiper-theme-color: #007aff}:host{position:relative;display:block;margin-left:auto;margin-right:auto;z-index:1}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1;display:block}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function, initial);box-sizing:content-box}.swiper-android .swiper-slide,.swiper-ios .swiper-slide,.swiper-wrapper{transform:translateZ(0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;display:block}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{transform:translateZ(0);backface-visibility:hidden}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px;.swiper-slide,.swiper-cube-shadow{transform-style:preserve-3d}}.swiper-css-mode{>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none;&::-webkit-scrollbar{display:none}}>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}&.swiper-horizontal{>.swiper-wrapper{scroll-snap-type:x mandatory}>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-slides-offset-before);scroll-margin-inline-start:var(--swiper-slides-offset-before)}>.swiper-wrapper>.swiper-slide:last-child{margin-inline-end:var(--swiper-slides-offset-after)}}&.swiper-vertical{>.swiper-wrapper{scroll-snap-type:y mandatory}>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-slides-offset-before);scroll-margin-block-start:var(--swiper-slides-offset-before)}>.swiper-wrapper>.swiper-slide:last-child{margin-block-end:var(--swiper-slides-offset-after)}}&.swiper-free-mode{>.swiper-wrapper{scroll-snap-type:none}>.swiper-wrapper>.swiper-slide{scroll-snap-align:none}}&.swiper-centered{>.swiper-wrapper:before{content:"";flex-shrink:0;order:9999}>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center;scroll-snap-stop:always}}&.swiper-centered.swiper-horizontal{>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}>.swiper-wrapper:before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}}&.swiper-centered.swiper-vertical{>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}>.swiper-wrapper:before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}}}.swiper-3d{.swiper-slide-shadow,.swiper-slide-shadow-left,.swiper-slide-shadow-right,.swiper-slide-shadow-top,.swiper-slide-shadow-bottom{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-slide-shadow{background:#00000026}.swiper-slide-shadow-left{background-image:linear-gradient(to left,#00000080,#0000)}.swiper-slide-shadow-right{background-image:linear-gradient(to right,#00000080,#0000)}.swiper-slide-shadow-top{background-image:linear-gradient(to top,#00000080,#0000)}.swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,#00000080,#0000)}}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color, var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper:not(.swiper-watch-progress),.swiper-watch-progress .swiper-slide-visible{.swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear}}.swiper-lazy-preloader-white{--swiper-preloader-color: #fff}.swiper-lazy-preloader-black{--swiper-preloader-color: #000}@keyframes swiper-preloader-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translateZ(0);z-index:10;&.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>&,&.swiper-pagination-disabled{display:none!important}}.swiper-pagination-fraction,.swiper-pagination-custom,.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal{bottom:var(--swiper-pagination-bottom, 8px);top:var(--swiper-pagination-top, auto);left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0;.swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullet-active,.swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullet-active-next{trLine truncated
View File
File mode changed.

Before

Width:  |  Height:  |  Size: 364 B

After

Width:  |  Height:  |  Size: 364 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 630 B

After

Width:  |  Height:  |  Size: 630 B

View File
File mode changed.

Before

Width:  |  Height:  |  Size: 350 B

After

Width:  |  Height:  |  Size: 350 B

Regular → Executable
+24 -75
View File
@@ -1,25 +1,7 @@
{
"_axios-BgauIbGG.js": {
"file": "assets/axios-BgauIbGG.js",
"name": "axios",
"imports": [
"_chunk-BqhQeaEc.js"
]
},
"_chunk-BqhQeaEc.js": {
"file": "assets/chunk-BqhQeaEc.js",
"name": "chunk"
},
"_swiper-B7Yxk788.js": {
"file": "assets/swiper-B7Yxk788.js",
"name": "swiper",
"css": [
"assets/swiper-CrMA9oas.css"
]
},
"_swiper-CrMA9oas.css": {
"file": "assets/swiper-CrMA9oas.css",
"src": "_swiper-CrMA9oas.css"
"_axios-B2OU-7LW.js": {
"file": "assets/axios-B2OU-7LW.js",
"name": "axios"
},
"public/assets/images/background-dark.jpg": {
"file": "assets/background-dark-BfkMu3-0.jpg",
@@ -29,18 +11,6 @@
"file": "assets/background-light-CP7oKwVT.jpg",
"src": "public/assets/images/background-light.jpg"
},
"public/assets/images/dusk/background_image.png": {
"file": "assets/background_image-BH7pVpv1.png",
"src": "public/assets/images/dusk/background_image.png"
},
"public/assets/images/dusk/leaderboard_circle_image.png": {
"file": "assets/leaderboard_circle_image-BYkDVX69.png",
"src": "public/assets/images/dusk/leaderboard_circle_image.png"
},
"public/assets/images/dusk/store_icon.png": {
"file": "assets/store_icon-B52tsSKO.png",
"src": "public/assets/images/dusk/store_icon.png"
},
"public/assets/images/icons/article.gif": {
"file": "assets/article-CYhGsSKA.gif",
"src": "public/assets/images/icons/article.gif"
@@ -134,7 +104,7 @@
"src": "public/assets/images/profile/profile-bg.png"
},
"resources/css/global.css": {
"file": "assets/global-DVSCrBhf.css",
"file": "assets/global-owlIrRiH.css",
"name": "global",
"names": [
"global.css"
@@ -170,57 +140,30 @@
]
},
"resources/js/global.js": {
"file": "assets/global-Bkbv5Qui.js",
"file": "assets/global-TU7mFC54.js",
"name": "global",
"src": "resources/js/global.js",
"isEntry": true,
"imports": [
"_chunk-BqhQeaEc.js",
"_axios-BgauIbGG.js"
]
},
"resources/js/ssr.jsx": {
"file": "assets/ssr-dFzH1dUH.js",
"name": "ssr",
"src": "resources/js/ssr.jsx",
"isEntry": true,
"imports": [
"_chunk-BqhQeaEc.js"
"_axios-B2OU-7LW.js"
]
},
"resources/themes/atom/css/app.css": {
"file": "assets/app-DrKvMbgn.css",
"src": "resources/themes/atom/css/app.css"
},
"resources/themes/atom/js/app.js": {
"file": "assets/app-BBe1NbvP.js",
"name": "app",
"src": "resources/themes/atom/js/app.js",
"isEntry": true,
"imports": [
"_chunk-BqhQeaEc.js",
"_swiper-B7Yxk788.js",
"_axios-BgauIbGG.js"
]
},
"resources/themes/dusk/css/app.css": {
"file": "assets/app-tY2AX6sE.css",
"file": "assets/app-9mCg36im.css",
"name": "app",
"names": [
"app.css"
],
"src": "resources/themes/dusk/css/app.css",
"src": "resources/themes/atom/css/app.css",
"isEntry": true,
"css": [
"assets/app-DrKvMbgn.css"
],
"assets": [
"assets/background_image-BH7pVpv1.png",
"assets/camera-fu-bmGhB.png",
"assets/discord-rbcnEh-j.png",
"assets/feeds-BtHcJdHX.png",
"assets/chat-r5H1PnTg.png",
"assets/article-CYhGsSKA.gif",
"assets/lighthouse-BON6qnQ0.png",
"assets/store_icon-B52tsSKO.png",
"assets/currency-LKXzczCA.png",
"assets/catalog-D-956oDx.png",
"assets/inventory-BlHYLNGT.png",
"assets/due-chat-CeO4yxLu.png",
@@ -228,23 +171,29 @@
"assets/credits-Dpg5Nmby.png",
"assets/duckets-CaGJI1Oy.png",
"assets/diamonds-BtfqKoQu.png",
"assets/profile-bg-BWx4iuHa.png",
"assets/trophy-gold-bbKmpkii.png",
"assets/trophy-silver-bGfHJkQ_.png",
"assets/trophy-bronze-CgV5j1MU.png",
"assets/leaderboard_circle_image-BYkDVX69.png"
"assets/background-light-CP7oKwVT.jpg",
"assets/background-dark-BfkMu3-0.jpg",
"assets/shop-D3NfN6cF.png",
"assets/leaderboards-CGasq3cL.png",
"assets/rules--xzBmecz.gif",
"assets/home-DIMFC97Y.png",
"assets/community-Do_t1zw9.png"
]
},
"resources/themes/dusk/js/app.js": {
"file": "assets/app-Dnwim5HE.js",
"resources/themes/atom/js/app.js": {
"file": "assets/app-wUWplMFd.js",
"name": "app",
"src": "resources/themes/dusk/js/app.js",
"src": "resources/themes/atom/js/app.js",
"isEntry": true,
"imports": [
"_swiper-B7Yxk788.js",
"_axios-BgauIbGG.js"
"_axios-B2OU-7LW.js"
],
"css": [
"assets/app-DU8Y3NnC.css"
"assets/app-CeYfhhVD.css"
]
}
}
@@ -55,7 +55,7 @@
<div class="w-22 h-22 rounded-full overflow-hidden border-4 transition-all duration-300 group-hover:scale-110 group-hover:rotate-3"
style="border-color: {{ $staffColor }}; box-shadow: 0 0 15px {{ $staffColor }}50, inset 0 0 15px {{ $staffColor }}20;">
<img style="image-rendering: pixelated;"
src="{{ setting('avatar_imager') }}{{ $user->look }}&direction=2&head_direction=3&gesture=sml&action=wav&size=n"
src="{{ setting('avatar_imager') }}{{ $user->look }}&direction=3&head_direction=3&gesture=sml&action=wlk%2Cwav&size=l&img_format=gif&size=n"
alt="{{ $user->username }}"
class="w-full h-full object-cover">
</div>
@@ -15,9 +15,8 @@
<div class="relative flex flex-wrap items-center justify-center gap-3 p-3">
@foreach ($onlineFriends as $friend)
<div data-popover-target="friend-{{ $friend->username }}"
style="image-rendering: pixelated; background-image: url({{ setting('avatar_imager') }}{{ $friend->look }}&direction=2&head_direction=3&gesture=sml&action=wav&headonly=1&size=s)"
class="inline-block h-12 w-12 rounded-full border-2 bg-center bg-no-repeat hover:border-[var(--border-color)] hover:scale-110 transition-all duration-300 cursor-pointer"
style="border-color: var(--color-text-muted)">
style="image-rendering: pixelated; border-color: var(--color-text-muted); background-image: url({{ setting('avatar_imager') }}{{ $friend->look }}&direction=3&head_direction=3&gesture=sml&action=wlk,wav&size=l&img_format=gif);">
</div>
<div data-popover id="friend-{{ $friend->username }}" role="tooltip"
@@ -77,7 +76,7 @@
</div>
</div>
@if (auth()->user()->referrals?->referrals_total >= (int) setting('referrals_needed'))
@if ((auth()->user()->referrals->referrals_total ?? 0) >= (int) setting('referrals_needed'))
<a href="{{ route('claim.referral-reward') }}" class="text-decoration-none">
<x-form.secondary-button classes="mt-2">
{{ __('Claim your referrals reward!') }}
@@ -85,7 +84,7 @@
</a>
@else
<button disabled class="mt-2 w-full rounded bg-[var(--color-text-muted)] p-3 text-[var(--color-text)] cursor-not-allowed opacity-60">
{{ sprintf(__('You need to refer :needed more users, before being able to claim your reward', ['needed' =>auth()->user()->referralsNeeded() ?? 0]),auth()->user()->referrals->referrals_total ?? 0) }}
{{ sprintf(__('You need to refer :needed more users, before being able to claim your reward', ['needed' => max(0, (int) setting('referrals_needed') - (auth()->user()->referrals->referrals_total ?? 0))]), auth()->user()->referrals->referrals_total ?? 0) }}
</button>
@endif
</div>
@@ -132,7 +131,7 @@
Toast.fire({
icon: "success",
title: '{{ __('Your referral code has been copied to your clipbord!') }}'
title: '{{ __('Your referral code has been copied to your clipboard!') }}'
});
}
</script>
@@ -1,38 +0,0 @@
@props(['backups'])
@if (empty($backups))
<div style="text-align:center;padding:32px;color:#64748b;background:#f8fafc;border-radius:12px;border:1px solid #e2e8f0;">
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2" style="margin:0 auto 16px;display:block;">
<path d="M21 8v13H3V8M1 3h22v5H1zM10 12h4"/>
</svg>
<div style="font-size:14px;">{{ __('commandocentrum.no_backups') }}</div>
<div style="font-size:12px;margin-top:8px;">{{ __('commandocentrum.backups_auto') }}</div>
</div>
@else
<div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;">
@foreach ($backups as $backup)
@php
$dateFormatted = str_replace('_', ' ', $backup['date']);
@endphp
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:16px;box-shadow:0 1px 3px rgba(0,0,0,0.06);">
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;">
<div style="display:flex;align-items:center;gap:8px;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2">
<path d="M21 8v13H3V8M1 3h22v5H1zM10 12h4"/>
</svg>
<span style="font-weight:600;color:#1e293b;font-size:14px;">{{ $backup['jar'] }}</span>
</div>
</div>
<div style="font-size:12px;color:#64748b;margin-bottom:12px;">{{ $dateFormatted }}</div>
<button
wire:click="restoreBackup('{{ $backup['name'] }}')"
style="width:100%;background:linear-gradient(135deg,#3b82f6,#2563eb);padding:10px;border-radius:8px;color:white;border:none;cursor:pointer;font-weight:600;font-size:13px;box-shadow:0 2px 8px rgba(37,99,235,0.3);transition:transform 0.2s;"
onmouseover="this.style.transform='translateY(-1px)'"
onmouseout="this.style.transform='translateY(0)'"
>
🔄 {{ __('commandocentrum.restore') }}
</button>
</div>
@endforeach
</div>
@endif
@@ -1,49 +0,0 @@
@props([
'emulatorBranchesHtml',
'emulatorStatusHtml',
])
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:12px;">
<div>
<label style="display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:6px;">{{ __('commandocentrum.github_url') }}</label>
<input type="text" wire:model="data.emulator_github_url" placeholder="https://github.com/..." style="width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;" />
</div>
<div>
<label style="display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:6px;">{{ __('commandocentrum.jar_direct_url') }}</label>
<input type="text" wire:model="data.emulator_jar_direct_url" placeholder="https://..." style="width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;" />
</div>
<div>
<label style="display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:6px;">{{ __('commandocentrum.jar_path') }}</label>
<input type="text" wire:model="data.emulator_jar_path" placeholder="/root/emulator" style="width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;" />
</div>
<div>
<label style="display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:6px;">{{ __('commandocentrum.source_repo') }}</label>
<input type="text" wire:model="data.emulator_source_repo" placeholder="user/repo" style="width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;" />
</div>
<div>
<label style="display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:6px;">{{ __('commandocentrum.source_path') }}</label>
<input type="text" wire:model="data.emulator_source_path" placeholder="/var/www/emulator" style="width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;" />
</div>
<div>
<label style="display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:6px;">{{ __('commandocentrum.branch') }}</label>
<select wire:model="data.emulator_github_branch" style="width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;background:#fff;">
{!! $emulatorBranchesHtml !!}
</select>
</div>
<div>
<label style="display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:6px;">{{ __('commandocentrum.db_host') }}</label>
<input type="text" wire:model="data.emulator_database_host" placeholder="127.0.0.1" style="width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;" />
</div>
<div>
<label style="display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:6px;">{{ __('commandocentrum.db_name') }}</label>
<input type="text" wire:model="data.emulator_database_name" placeholder="habbo" style="width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;" />
</div>
<div>
<label style="display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:6px;">{{ __('commandocentrum.service_name') }}</label>
<input type="text" wire:model="data.emulator_service_name" placeholder="arcturus" style="width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;" />
</div>
<div style="grid-column:span 3;">
<label style="display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:6px;">{{ __('commandocentrum.status') }}</label>
{!! $emulatorStatusHtml !!}
</div>
</div>
@@ -1,85 +0,0 @@
@props([
'emulatorOnline',
'jarExists',
'serviceName',
'sourceCommit',
'remoteVersion',
'canBuild',
'jarPath',
'sourcePath',
])
@php
$sourceCommitShort = substr($sourceCommit, 0, 7);
$hasUpdate = $sourceCommit !== 'N/A' && $remoteVersion !== 'N/A' && $sourceCommitShort !== $remoteVersion;
$updateColor = $hasUpdate ? '#f59e0b' : '#22c55e';
$updateText = $hasUpdate ? '🔄 ' . __('commandocentrum.update_available') : '✓ ' . __('commandocentrum.up_to_date');
$btnColor = $hasUpdate ? '#f59e0b' : '#3b82f6';
$btnGradient = $hasUpdate ? 'linear-gradient(135deg,#f59e0b,#d97706)' : 'linear-gradient(135deg,#3b82f6,#2563eb)';
$btnText = $hasUpdate ? '⚡ ' . __('commandocentrum.update') : '🔄 ' . __('commandocentrum.rebuild');
$jarFileName = '';
if ($jarExists) {
$jarSize = shell_exec('ls -lh ' . escapeshellarg($jarPath) . '/*.jar 2>/dev/null | head -1');
if ($jarSize) {
preg_match('/(\S+\.jar)/', $jarSize, $matches);
if (isset($matches[1])) {
$jarFileName = basename($matches[1]);
}
}
}
@endphp
<div style="display:flex;flex-direction:column;gap:8px;font-size:13px;">
<div style="display:flex;gap:16px;">
@if ($emulatorOnline)
<span style="color:#22c55e;">✓ {{ __('commandocentrum.online') }}</span>
@else
<span style="color:#ef4444;">✗ {{ __('commandocentrum.offline') }}</span>
@endif
@if ($jarExists)
<span style="color:#22c55e;">✓ JAR {{ __('commandocentrum.ok') }}</span>
@else
<span style="color:#ef4444;">✗ JAR {{ __('commandocentrum.missing') }}</span>
@endif
<span style="color:#3b82f6;">{{ __('commandocentrum.service') }}: {{ e($serviceName) }}</span>
</div>
<div style="padding-top:8px;border-top:1px solid #e2e8f0;">
<div style="font-weight:600;color:#475569;margin-bottom:8px;">GitHub {{ __('commandocentrum.status') }}:</div>
<div style="background:{{ $hasUpdate ? '#fef3c7' : '#dcfce7' }};padding:12px;border-radius:8px;margin-bottom:12px;">
<div style="display:flex;align-items:center;justify-content:space-between;">
<div style="display:flex;align-items:center;gap:8px;font-weight:600;color:{{ $updateColor }};">
{{ $updateText }}
</div>
<button
wire:click="checkEmulatorUpdates"
style="background:{{ $btnGradient }};padding:8px 16px;border-radius:6px;color:white;border:none;cursor:pointer;font-weight:600;font-size:12px;box-shadow:0 2px 8px rgba(0,0,0,0.2);transition:transform 0.2s,box-shadow 0.2s;"
onmouseover="this.style.transform='translateY(-1px)';this.style.boxShadow='0 4px 12px rgba(0,0,0,0.3)'"
onmouseout="this.style.transform='translateY(0)';this.style.boxShadow='0 2px 8px rgba(0,0,0,0.2)'"
>
{{ $btnText }}
</button>
</div>
</div>
<div style="display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #f1f5f9;"><span>{{ __('commandocentrum.latest') }}:</span><span style="color:#22c55e;font-weight:600;">✓ {{ e($remoteVersion) }}</span></div>
<div style="display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #f1f5f9;"><span>{{ __('commandocentrum.source') }}:</span><span style="color:#22c55e;font-weight:600;">✓ {{ $sourceCommitShort }}</span></div>
@if ($jarFileName !== '')
<div style="display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #f1f5f9;"><span>{{ __('commandocentrum.jars') }}:</span><span style="color:#22c55e;font-weight:600;">✓ {{ e($jarFileName) }}</span></div>
@endif
@if ($canBuild)
<div style="display:flex;justify-content:space-between;padding:6px 0;"><span>{{ __('commandocentrum.method') }}:</span><span style="color:#22c55e;font-weight:600;">✓ {{ __('commandocentrum.maven_pom') }}</span></div>
@else
<div style="display:flex;justify-content:space-between;padding:6px 0;"><span>{{ __('commandocentrum.method') }}:</span><span style="color:#f59e0b;font-weight:600;">⚠️ {{ __('commandocentrum.no_pom') }}</span></div>
@endif
<div style="margin-top:12px;padding:12px;background:#f8fafc;border-radius:8px;">
<div style="font-size:11px;color:#64748b;font-weight:600;margin-bottom:8px;">{{ __('commandocentrum.method') }}:</div>
@if ($jarExists)
<div style="color:#3b82f6;font-weight:600;">📦 {{ __('commandocentrum.jar_download_restart') }}</div>
@elseif ($canBuild)
<div style="color:#3b82f6;font-weight:600;">🔨 {{ __('commandocentrum.maven_build_restart') }}</div>
@else
<div style="color:#64748b;">{{ __('commandocentrum.manual_download') }}</div>
@endif
</div>
</div>
</div>
Loaded 100 of 106 files, more files were not shown because too many files have changed in this diff. Show more