diff --git a/app/Console/Commands/MarkAbandonedTransactions.php b/app/Console/Commands/MarkAbandonedTransactions.php new file mode 100644 index 0000000..66a313e --- /dev/null +++ b/app/Console/Commands/MarkAbandonedTransactions.php @@ -0,0 +1,31 @@ +option('older-than'); + + $affected = Transaction::where('type', Transaction::TYPE_CREDIT_PURCHASE) + ->where('status', Transaction::STATUS_PENDING) + ->where('created_at', '<=', now()->subMinutes($minutes)) + ->get(); + + foreach ($affected as $transaction) { + $transaction->markAsAbandoned(); + } + + $this->info("Marked {$affected->count()} pending transaction(s) as abandoned."); + + return self::SUCCESS; + } +} diff --git a/app/Console/Commands/PingBulkSms.php b/app/Console/Commands/PingBulkSms.php index 1701514..d39f299 100644 --- a/app/Console/Commands/PingBulkSms.php +++ b/app/Console/Commands/PingBulkSms.php @@ -4,11 +4,11 @@ use App\Services\Sms\Providers\MtnSmsProvider; use Illuminate\Console\Command; -use App\Services\Sms\SmsService; class PingBulkSms extends Command { protected $signature = 'sms:ping'; + protected $description = 'Ping MTN BulkSMS session every 5 seconds'; public function handle() @@ -18,13 +18,13 @@ public function handle() $response = $smsService->pingSession(); if ($response) { - $this->info('✅ Session active: ' . json_encode($response)); + $this->info('✅ Session active: '.json_encode($response)); } else { $this->error('⚠️ Session ping failed.'); // TODO: use a post request instead to spark it up $response = $smsService->getSmsBundle(); if ($response) { - $this->info('✅ Get SMS Bundle to spark session up: ' . json_encode($response)); + $this->info('✅ Get SMS Bundle to spark session up: '.json_encode($response)); } else { $this->error('❌ Fetched SMS Bundle failed! Notify admin!.'); } diff --git a/app/Console/Commands/ProcessRecurringCampaigns.php b/app/Console/Commands/ProcessRecurringCampaigns.php index 5beddd5..3e138ed 100644 --- a/app/Console/Commands/ProcessRecurringCampaigns.php +++ b/app/Console/Commands/ProcessRecurringCampaigns.php @@ -42,6 +42,7 @@ public function handle() if ($campaigns->isEmpty()) { $this->info('No campaigns ready for dispatch.'); + return 0; } @@ -55,6 +56,7 @@ public function handle() } $this->info("Successfully dispatched {$count} campaign(s)."); + return 0; } } diff --git a/app/Console/Commands/ReprocessPendingSms.php b/app/Console/Commands/ReprocessPendingSms.php index 6ab95f1..5dc6009 100644 --- a/app/Console/Commands/ReprocessPendingSms.php +++ b/app/Console/Commands/ReprocessPendingSms.php @@ -3,11 +3,8 @@ namespace App\Console\Commands; use App\Jobs\RetryPendingSmsJob; -use App\Jobs\SendCampaignSms; -use App\Models\Campaign; use App\Models\CampaignLog; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Log; class ReprocessPendingSms extends Command { @@ -27,7 +24,6 @@ class ReprocessPendingSms extends Command public int $maxRetries = 5; // Maximum retry attempts per message - /** * Execute the console command. */ @@ -41,12 +37,14 @@ public function handle() ->where('retry_count', '<', $this->maxRetries) ->exists(); - if (!$pendingLogs) { + if (! $pendingLogs) { $this->info('No pending SMS messages to retry'); + return 0; } RetryPendingSmsJob::dispatch(); $this->info('Dispatched pending SMS messages for retry'); + return 0; } } diff --git a/app/Contracts/Helpers.php b/app/Contracts/Helpers.php index 5b9d394..3cb5019 100644 --- a/app/Contracts/Helpers.php +++ b/app/Contracts/Helpers.php @@ -1,7 +1,8 @@ header('x-forwarded-for'); @@ -14,15 +15,15 @@ function get_request_ip(Request $request): array|string|null } else { $ip = $request->ip(); } + return $ip; } } - /** * General Conversions for phone numbers */ -if (!function_exists('formatPhoneNumber')) { +if (! function_exists('formatPhoneNumber')) { /** * Formats a phone number into a standardized Nigerian format. * @@ -46,44 +47,54 @@ function get_request_ip(Request $request): array|string|null * - If number starts with '+234' and is 14 digits - removes the plus * - Any other format returns original number * - * @param string $phoneNumber The phone number to format - * @param bool $startWithZero Whether to format number to start with '0' (true) or '234' (false) + * @param string $phoneNumber The phone number to format + * @param bool $startWithZero Whether to format number to start with '0' (true) or '234' (false) * @return string The formatted phone number */ function formatPhoneNumber(string $phoneNumber, bool $startWithZero = true): string { $phoneNumber = trim($phoneNumber); if ($startWithZero) { - if (str_starts_with($phoneNumber, '0') && strlen($phoneNumber) == 11) + if (str_starts_with($phoneNumber, '0') && strlen($phoneNumber) == 11) { return $phoneNumber; - if (str_starts_with($phoneNumber, '234') && strlen($phoneNumber) == 13) - return '0' . substr($phoneNumber, 3); - if (str_starts_with($phoneNumber, '+234') && strlen($phoneNumber) == 14) - return '0' . substr($phoneNumber, 4); - if (strlen($phoneNumber) == 10) - return '0' . $phoneNumber; + } + if (str_starts_with($phoneNumber, '234') && strlen($phoneNumber) == 13) { + return '0'.substr($phoneNumber, 3); + } + if (str_starts_with($phoneNumber, '+234') && strlen($phoneNumber) == 14) { + return '0'.substr($phoneNumber, 4); + } + if (strlen($phoneNumber) == 10) { + return '0'.$phoneNumber; + } + return $phoneNumber; } else { - if (!str_starts_with($phoneNumber, '0') && strlen($phoneNumber) == 10) - return '234' . $phoneNumber; - if (str_starts_with($phoneNumber, '0') && strlen($phoneNumber) == 11) - return '234' . substr($phoneNumber, 1); - if (str_starts_with($phoneNumber, '234') && strlen($phoneNumber) == 13) + if (! str_starts_with($phoneNumber, '0') && strlen($phoneNumber) == 10) { + return '234'.$phoneNumber; + } + if (str_starts_with($phoneNumber, '0') && strlen($phoneNumber) == 11) { + return '234'.substr($phoneNumber, 1); + } + if (str_starts_with($phoneNumber, '234') && strlen($phoneNumber) == 13) { return $phoneNumber; - if (str_starts_with($phoneNumber, '+234') && strlen($phoneNumber) == 14) + } + if (str_starts_with($phoneNumber, '+234') && strlen($phoneNumber) == 14) { return substr($phoneNumber, 1); + } + return $phoneNumber; } } } -if (!function_exists('determineNumberOfSms')) -{ +if (! function_exists('determineNumberOfSms')) { function determineNumberOfSms(int $recipientCount, string $message): float|int { // get the count of sms unit required $messageCount = mb_strlen($message) / 160; $smsUnitRequired = max(ceil($messageCount), 1); + return $smsUnitRequired * $recipientCount; } } diff --git a/app/Http/Controllers/Admin/CreditBandController.php b/app/Http/Controllers/Admin/CreditBandController.php new file mode 100644 index 0000000..f59ce6b --- /dev/null +++ b/app/Http/Controllers/Admin/CreditBandController.php @@ -0,0 +1,101 @@ + CreditBand::orderBy('min_units')->get()->map(function ($band) { + return [ + 'id' => $band->id, + 'min_units' => $band->min_units, + 'price_per_unit' => $band->price_per_unit, + 'is_active' => $band->is_active, + ]; + }), + 'settings' => [ + 'sms_price_per_part' => AppSettings::get(AppSettingsEnum::SMS_PRICE_PER_PART), + 'credit_markup_percent' => AppSettings::get(AppSettingsEnum::CREDIT_MARKUP_PERCENT), + ], + ]); + } + + public function store(Request $request) + { + $validated = $request->validate([ + 'min_units' => [ + 'required', 'integer', 'min:1', + Rule::unique('credit_bands', 'min_units')->where('is_active', true), + ], + 'price_per_unit' => 'required|numeric|min:0.01', + ]); + + CreditBand::create([ + 'min_units' => $validated['min_units'], + 'price_per_unit' => $validated['price_per_unit'], + 'is_active' => true, + ]); + + return redirect()->back()->with('success', 'Price band created successfully.'); + } + + public function update(Request $request, CreditBand $creditBand) + { + $validated = $request->validate([ + 'min_units' => [ + 'required', 'integer', 'min:1', + Rule::unique('credit_bands', 'min_units')->where('is_active', true)->ignore($creditBand->id), + ], + 'price_per_unit' => 'required|numeric|min:0.01', + 'is_active' => 'sometimes|boolean', + ]); + + $creditBand->update([ + 'min_units' => $validated['min_units'], + 'price_per_unit' => $validated['price_per_unit'], + 'is_active' => $request->boolean('is_active'), + ]); + + // Also allow updating the pricing settings in the same request + if ($request->has('settings')) { + $this->updateSettings($request->input('settings', [])); + } + + return redirect()->back()->with('success', 'Price band updated successfully.'); + } + + public function destroy(CreditBand $creditBand) + { + $creditBand->delete(); + + return redirect()->back()->with('success', 'Price band deleted successfully.'); + } + + public function updateSettings(Request $request) + { + $validated = $request->validate([ + 'sms_price_per_part' => 'required|numeric|min:0.01', + 'credit_markup_percent' => 'required|numeric|min:0', + ]); + + $this->storeSettings($validated); + + return redirect()->back()->with('success', 'Pricing settings updated successfully.'); + } + + private function storeSettings(array $validated): void + { + AppSettings::set(AppSettingsEnum::SMS_PRICE_PER_PART, $validated['sms_price_per_part']); + AppSettings::set(AppSettingsEnum::CREDIT_MARKUP_PERCENT, $validated['credit_markup_percent']); + } +} diff --git a/app/Http/Controllers/Admin/SettingController.php b/app/Http/Controllers/Admin/SettingController.php index 454323d..eef19ab 100644 --- a/app/Http/Controllers/Admin/SettingController.php +++ b/app/Http/Controllers/Admin/SettingController.php @@ -3,21 +3,25 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; -use App\Services\SettingsService; +use App\Models\AppSettings; use Illuminate\Http\Request; use Inertia\Inertia; class SettingController extends Controller { - //TODO: settings should be cached for performance and encrypted where necessary - public function __construct( - private readonly SettingsService $settingsService - ) {} - public function index() { + $all = AppSettings::allSettings(); + + // Never leak secrets to the UI; expose a placeholder instead. + foreach (AppSettings::enumCases() as $case) { + if ($case->encrypt()) { + $all[$case->value] = ''; + } + } + return Inertia::render('admin/Settings/Index', [ - 'settings' => $this->settingsService->all(), + 'settings' => $all, ]); } @@ -31,12 +35,15 @@ public function update(Request $request) ]); foreach ($validated['settings'] as $setting) { - $this->settingsService->set( - $setting['key'], - $setting['value'], - 'string', // Defaulting to string for now, can be enhanced - $setting['group'] ?? 'general' - ); + $case = AppSettings::caseForKey($setting['key']); + + // Skip blank values for sensitive settings so a masked field + // does not wipe the stored secret. + if ($case?->encrypt() && ($setting['value'] === '' || $setting['value'] === null)) { + continue; + } + + AppSettings::setByKey($setting['key'], $setting['value']); } return redirect()->back()->with('success', 'Settings updated successfully.'); diff --git a/app/Http/Controllers/BillingController.php b/app/Http/Controllers/BillingController.php index a4e0110..94bb745 100644 --- a/app/Http/Controllers/BillingController.php +++ b/app/Http/Controllers/BillingController.php @@ -2,72 +2,31 @@ namespace App\Http\Controllers; +use App\Models\CreditBand; use App\Models\Transaction; -use App\Services\SubscriptionPaymentService; +use App\Services\CreditPaymentService; use Illuminate\Http\Request; use Inertia\Inertia; -use LucasDotVin\Soulbscription\Models\Plan; class BillingController extends Controller { public function __construct( - protected SubscriptionPaymentService $paymentService + protected CreditPaymentService $paymentService ) {} public function index() { $user = auth()->user(); - $currentSubscription = $user->subscription?->load('plan'); - // Get all available plans - $plans = Plan::with('features')->get()->map(function ($plan) { + // Get available price bands + $creditBands = CreditBand::active()->get()->map(function ($band) { return [ - 'id' => $plan->id, - 'name' => $plan->name, - 'periodicity_type' => $plan->periodicity_type, - 'periodicity' => $plan->periodicity, - 'grace_days' => $plan->grace_days, - 'price' => $this->getPlanPrice($plan->name), - 'is_yearly' => str_contains($plan->name, 'yearly'), - 'features' => $plan->features->map(function ($feature) { - return [ - 'name' => $feature->name, - 'consumable' => $feature->consumable, - 'charges' => $feature->pivot->charges ?? null, - ]; - }), - 'extra_sms_price' => $this->getExtraSmsPrice($plan->name), + 'id' => $band->id, + 'min_units' => $band->min_units, + 'price_per_unit' => $band->price_per_unit, ]; }); - $featureUsage = []; - - if ($currentSubscription) { - // Get feature usage - $currentSubscription->plan->extra_sms_price = $this->getExtraSmsPrice($currentSubscription->plan->name); - - foreach ($currentSubscription->plan->features as $feature) { - if ($feature->consumable) { - $consumption = $user->getCurrentConsumption($feature->name); - $remaining = $user->balance($feature->name); - $total = $user->getTotalCharges($feature->name); - - $featureUsage[] = [ - 'name' => $feature->name, - 'consumed' => $consumption, - 'remaining' => $remaining, - 'total' => $total, - 'percentage' => $total > 0 - ? round(($consumption / $total) * 100, 2) - : 0, - ]; - } - } - } - - // Get SMS units balance - $smsBalance = $user->balance('sms-units') ?? 0; - // Get recent transactions $transactions = Transaction::where('user_id', $user->id) ->latest() @@ -78,6 +37,8 @@ public function index() 'id' => $transaction->id, 'type' => $transaction->type, 'amount' => $transaction->amount, + 'units' => $transaction->units, + 'price_per_unit' => $transaction->price_per_unit, 'description' => $transaction->description, 'status' => $transaction->status, 'payment_method' => $transaction->payment_method, @@ -87,154 +48,41 @@ public function index() }); return Inertia::render('billing/index', [ - 'plans' => $plans, - 'currentSubscription' => $currentSubscription, - 'featureUsage' => $featureUsage, - 'smsBalance' => $smsBalance, + 'creditBalance' => $user->credit_balance, + 'creditBands' => $creditBands, + 'minimumPurchase' => CreditBand::minimumPurchase(), 'transactions' => $transactions, ]); } - public function subscribe(Request $request) + public function purchase(Request $request) { - $request->validate([ - 'plan_id' => 'required|exists:plans,id', - 'extra_sms_units' => 'nullable|integer|min:0', - ]); - - try { - $user = auth()->user(); - $plan = Plan::findOrFail($request->plan_id); - $extraUnits = $request->extra_sms_units ?? 0; - // if plan is the free plan and the user does not want extra unit, just subscribe them - if ($plan->name === 'free' && $extraUnits <= 0) - { - $metaData = [ - 'plan_id' => $plan->id, - 'extra_sms_units' => $extraUnits, - ]; - $this->paymentService->processNewSubscription($user, $metaData); - redirect()->route('billing.index') - ->with('success', 'Subscription successful! Your FREE subscription has been activated.'); - } - // Initialize payment - $result = $this->paymentService->initializeSubscriptionPayment( - $user, - $plan, - $extraUnits, - 'subscription' - ); - // dd($result); - - if (!$result['success']) { - return back()->with('error', $result['message']); - } - - // Redirect to Paystack checkout - return Inertia::location($result['authorization_url']); - - } catch (\Exception $e) { - logger()->error('Subscription initialization failed', [ - 'error' => $e->getMessage(), - 'user_id' => auth()->id() - ]); - - return back()->with('error', 'Unable to process subscription. Please try again.'); - } - } - - public function buyExtraUnits(Request $request) - { - $request->validate([ + $validated = $request->validate([ 'units' => 'required|integer|min:1', ]); try { $user = auth()->user(); - $units = $request->units; + $units = $validated['units']; - // Initialize payment - $result = $this->paymentService->initializeExtraUnitsPayment($user, $units); + $result = $this->paymentService->initializeCreditPurchase($user, $units); - if (!$result['success']) { + if (! $result['success']) { return back()->with('error', $result['message']); } // Redirect to Paystack checkout return Inertia::location($result['authorization_url']); - } catch (\Exception $e) { - logger()->error('Extra units purchase failed', [ + logger()->error('Credit purchase initialization failed', [ 'error' => $e->getMessage(), - 'user_id' => auth()->id() + 'user_id' => auth()->id(), ]); return back()->with('error', 'Unable to process purchase. Please try again.'); } } - public function renewSubscription() - { - try { - $user = auth()->user(); - $subscription = $user->subscription; - - if (!$subscription || is_null($subscription->expired_at)) { - return back()->with('error', 'No subscription found to renew.'); - } - // dd($subscription->expired()); - - $expiresWithinSevenDays = $subscription->expired_at && - $subscription->expired_at->lessThanOrEqualTo(now()->addDays(7)); - - if (!$subscription->expired() && !$expiresWithinSevenDays && !$subscription->canceled_at && !$subscription->suppressed_at) { - return back()->with('error', 'Your subscription is still active.'); - } - - $plan = $subscription->plan; - // dd($plan); - - // Initialize renewal payment - $result = $this->paymentService->initializeSubscriptionPayment( - $user, - $plan, - 0, // No extra units on renewal - 'renewal' - ); - - if (!$result['success']) { - return back()->with('error', $result['message']); - } - - // Redirect to Paystack checkout - return Inertia::location($result['authorization_url']); - - } catch (\Exception $e) { - logger()->error('Subscription renewal failed', [ - 'error' => $e->getMessage(), - 'user_id' => auth()->id() - ]); - - return back()->with('error', 'Unable to process renewal. Please try again.'); - } - } - - public function cancelSubscription() - { - $user = auth()->user(); - $subscription = $user->subscription; - - if (!$subscription || $subscription->expired()) { - return back()->with('error', 'No active subscription to cancel.'); - } - - // Suppress the subscription (it will remain active until expiration) - $subscription->cancel(); - - return redirect()->route('billing.index') - ->with('success', 'Subscription cancelled. Your plan will remain active until the end of the billing period.'); - } - /** * Payment callback handler (for redirect after payment) */ @@ -242,15 +90,25 @@ public function paymentCallback(Request $request) { $reference = $request->query('reference'); - if (!$reference) { + if (! $reference) { return redirect()->route('billing.index') ->with('error', 'Invalid payment reference.'); } + logger()->info('Payment callback received', [ + 'user_id' => auth()->id(), + 'reference' => $reference, + ]); + // Verify the payment $verification = $this->paymentService->verifyPaymentStatus($reference); + logger()->info('Payment verification result', [ + 'user_id' => auth()->id(), + 'reference' => $reference, + 'verification' => $verification, + ]); - if (!$verification['success']) { + if (! $verification['success']) { return redirect()->route('billing.index') ->with('error', 'Unable to verify payment. Please contact support if you were charged.'); } @@ -258,11 +116,16 @@ public function paymentCallback(Request $request) $status = $verification['data']['status'] ?? 'failed'; if ($status === 'success') { - // Process the webhook data - $this->paymentService->processPaymentWebhook($verification); + $result = $this->paymentService->processCreditWebhook($verification); + + logger()->info('Payment processed', [ + 'user_id' => auth()->id(), + 'reference' => $reference, + 'result' => $result, + ]); return redirect()->route('billing.index') - ->with('success', 'Payment successful! Your subscription has been activated.'); + ->with('success', 'Payment is being processed. Your credit balance will be updated shortly.'); } return redirect()->route('billing.index') @@ -277,60 +140,34 @@ public function webhook(Request $request) $payload = $request->all(); $event = $payload['event'] ?? null; + logger()->info('Paystack webhook Event: '.$event, ['payload' => $payload]); + // We only process successful charge events if ($event === 'charge.success') { try { - $result = $this->paymentService->processPaymentWebhook($payload); + $result = $this->paymentService->processCreditWebhook($payload); + + logger()->info('Payment processed', [ + 'result' => $result, + ]); return response()->json([ 'success' => $result['success'], - 'message' => $result['message'] ?? ($result['error'] ?? 'Processed') + 'message' => $result['message'] ?? ($result['error'] ?? 'Processed'), ]); } catch (\Exception $e) { logger()->error('Webhook processing error', [ 'error' => $e->getMessage(), - 'payload' => $payload + 'payload' => $payload, ]); return response()->json([ 'success' => false, - 'error' => 'Processing error' + 'error' => 'Processing error', ], 500); } } return response()->json(['message' => 'Event received']); } - - private function getPlanPrice(string $planName): float - { - $prices = [ - 'free' => 0, - // 'starter-yearly' => 3000 * 12 * 0.85, - 'pro' => 4998.98, - 'pro-yearly' => 4998.98 * 12 * 0.85, - 'business' => 9997.99, - 'business-yearly' => 9997.99 * 12 * 0.85, - 'enterprise' => 19995.99, - 'enterprise-yearly' => 19995.99 * 12 * 0.85, - ]; - - return $prices[$planName] ?? 0; - } - - private function getExtraSmsPrice(string $planName): float - { - $prices = [ - 'free' => 5.0, - // 'starter-yearly' => 5.0, - 'pro' => 4.95, - 'pro-yearly' => 4.95, - 'business' => 4.8, - 'business-yearly' => 4.8, - 'enterprise' => 4.7, - 'enterprise-yearly' => 4.7, - ]; - - return $prices[$planName] ?? 5.0; - } } diff --git a/app/Http/Controllers/CampaignController.php b/app/Http/Controllers/CampaignController.php index b1439ce..c7feb94 100644 --- a/app/Http/Controllers/CampaignController.php +++ b/app/Http/Controllers/CampaignController.php @@ -9,7 +9,6 @@ use App\Models\Tag; use App\Services\Ai\AiServiceManager; use App\Services\CampaignService; -use App\Shared\Enums\FeaturesEnum; use Illuminate\Http\Request; use Inertia\Inertia; @@ -85,17 +84,9 @@ public function generateSpintax(GenerateSpintaxRequest $request, AiServiceManage { $user = $request->user(); - if ($user->cantConsume(FeaturesEnum::mixer->value, 1)) { - return response()->json(['error' => 'You do not have enough credits to use this feature.']); - } - $spintax = $aiService->generateSpintax($request->validated()['message']); - if (!empty($spintax)) { - $user->consume(FeaturesEnum::mixer->value, 1); - } - - logger()->debug("Debug spintax: sending response now"); + logger()->debug('Debug spintax: sending response now'); return response()->json([ 'spintax' => $spintax, @@ -110,6 +101,7 @@ public function restart(Campaign $campaign) try { $this->campaignService->restartCampaign($campaign); + return redirect()->back()->with('success', 'Campaign restarted successfully.'); } catch (\Exception $e) { return redirect()->back()->with('error', $e->getMessage()); diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 66e7521..3776287 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -20,8 +20,7 @@ public function index(Request $request) 'stats' => $this->dashboardService->getStats($user), 'recentCampaigns' => $this->dashboardService->getRecentCampaigns($user), 'messageTrends' => $this->dashboardService->getMessageTrends($user), - 'currentSubscription' => $user->subscription?->load('plan'), - 'smsBalance' => $user->balance('sms-units'), + 'creditBalance' => $user->credit_balance, ]); } } diff --git a/app/Http/Controllers/SenderIdController.php b/app/Http/Controllers/SenderIdController.php index ee5a124..26cb02b 100644 --- a/app/Http/Controllers/SenderIdController.php +++ b/app/Http/Controllers/SenderIdController.php @@ -64,6 +64,7 @@ public function destroy(SenderId $senderId) try { $this->senderIdService->deleteSenderId($senderId); + return redirect()->route('sender-ids.index') ->with('success', 'Sender ID deleted successfully.'); } catch (\Exception $e) { diff --git a/app/Http/Controllers/Settings/AccountBillingController.php b/app/Http/Controllers/Settings/AccountBillingController.php deleted file mode 100644 index 00de839..0000000 --- a/app/Http/Controllers/Settings/AccountBillingController.php +++ /dev/null @@ -1,38 +0,0 @@ -user(); - $subscription = $user->subscription; - - $currentSubscription = null; - if ($subscription) { - $currentSubscription = [ - 'id' => $subscription->id, - 'plan' => $subscription->plan->name, - 'started_at' => $subscription->started_at, - 'expires_at' => $subscription->expires_at, - 'is_active' => !$subscription->expired(), - 'is_suppressed' => $subscription->suppressed, - 'days_remaining' => now()->diffInDays($subscription->expires_at, false), - ]; - } - - return Inertia::render('settings/account-billing', [ - 'user' => $user, - 'currentSubscription' => $currentSubscription, - 'smsBalance' => 0,//$user->getSmsBalance(), - ]); - } -} diff --git a/app/Http/Controllers/SingleSmsController.php b/app/Http/Controllers/SingleSmsController.php index 2f620a0..daf4e76 100644 --- a/app/Http/Controllers/SingleSmsController.php +++ b/app/Http/Controllers/SingleSmsController.php @@ -19,12 +19,6 @@ public function index(Request $request) { $logs = CampaignLog::with(['subscriber', 'campaign']) ->where('user_id', $request->user()->id) - ->orWhereHas('campaign', function ($query) use ($request) { - $query->where('user_id', $request->user()->id); - }) - ->orWhereHas('subscriber', function ($query) use ($request) { - $query->where('user_id', $request->user()->id); - }) ->latest() ->paginate(20); @@ -51,6 +45,7 @@ public function store(StoreSingleSmsRequest $request) return redirect()->route('single-sms.index')->with('success', $result['message']); } catch (\Exception $e) { logger()->error($e->getMessage()); + return back()->with('error', $e->getMessage()); } } diff --git a/app/Http/Controllers/SubscriberController.php b/app/Http/Controllers/SubscriberController.php index f34d324..9daa831 100644 --- a/app/Http/Controllers/SubscriberController.php +++ b/app/Http/Controllers/SubscriberController.php @@ -24,7 +24,7 @@ public function index(Request $request) ->when($request->search, function ($query, $search) { $query->where(function ($q) use ($search) { $q->where('phone_number', 'like', "%{$search}%") - ->orWhere('name', 'like', "%{$search}%"); + ->orWhere('name', 'like', "%{$search}%"); }); }) ->when($request->tag_id, function ($query, $tagId) { @@ -68,6 +68,7 @@ public function update(UpdateSubscriberRequest $request, Subscriber $subscriber) try { $this->subscriberService->updateSubscriber($subscriber, $request->validated()); + return redirect()->back()->with('success', 'Subscriber updated successfully.'); } catch (\Exception $e) { return back()->with('error', $e->getMessage()); @@ -102,10 +103,10 @@ public function bulkImport(BulkImportSubscribersRequest $request) if ($result['skipped'] > 0) { $message .= " {$result['skipped']} rows skipped (empty phone numbers)."; } - if (!empty($result['errors']) && count($result['errors']) <= 10) { - $message .= " Errors: " . implode(', ', $result['errors']); - } elseif (!empty($result['errors'])) { - $message .= " " . count($result['errors']) . " errors occurred."; + if (! empty($result['errors']) && count($result['errors']) <= 10) { + $message .= ' Errors: '.implode(', ', $result['errors']); + } elseif (! empty($result['errors'])) { + $message .= ' '.count($result['errors']).' errors occurred.'; } return redirect()->back()->with('success', $message); diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php index 7ffc011..16d32c3 100644 --- a/app/Http/Controllers/TagController.php +++ b/app/Http/Controllers/TagController.php @@ -31,6 +31,7 @@ public function store(StoreTagRequest $request) { try { $this->tagService->createTag($request->validated(), $request->user()); + return redirect()->back()->with('success', 'Tag created successfully.'); } catch (\Exception $e) { return back()->with('error', $e->getMessage()); diff --git a/app/Http/Middleware/AdminMiddleware.php b/app/Http/Middleware/AdminMiddleware.php index f19fec9..607c6f8 100644 --- a/app/Http/Middleware/AdminMiddleware.php +++ b/app/Http/Middleware/AdminMiddleware.php @@ -15,10 +15,10 @@ class AdminMiddleware */ public function handle(Request $request, Closure $next): Response { - $userEmail = $request->user()?->email; - if ($userEmail && in_array($userEmail, config('app.admin_emails'))) { + if ($request->user()?->is_admin) { return $next($request); } + return response('Unauthorized.', 401); } } diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index 868ae22..bf0730b 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -35,6 +35,7 @@ public function handle(Request $request, Closure $next) $response->headers->set('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0'); $response->headers->set('Pragma', 'no-cache'); $response->headers->set('Expires', 'Sat, 01 Jan 2000 00:00:00 GMT'); + return $response; } @@ -55,12 +56,12 @@ public function share(Request $request): array 'quote' => ['message' => trim($message), 'author' => trim($author)], 'auth' => [ 'user' => $request->user(), - 'isAdmin' => $request->user() && in_array($request->user()->email, config('app.admin_emails', [])), + 'isAdmin' => $request->user()?->is_admin ?? false, ], 'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true', 'flash' => [ - 'success' => fn() => $request->session()->get('success'), - 'error' => fn() => $request->session()->get('error') + 'success' => fn () => $request->session()->get('success'), + 'error' => fn () => $request->session()->get('error'), ], ]; } diff --git a/app/Http/Middleware/RequireAdminTwoFactor.php b/app/Http/Middleware/RequireAdminTwoFactor.php new file mode 100644 index 0000000..dc656bc --- /dev/null +++ b/app/Http/Middleware/RequireAdminTwoFactor.php @@ -0,0 +1,24 @@ +user(); + + if ($user && $user->is_admin && ! $user->two_factor_confirmed_at) { + return redirect()->route('two-factor.show')->with('error', 'Please enable two-factor authentication on your account before accessing admin features.'); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/ThrottleForgotPassword.php b/app/Http/Middleware/ThrottleForgotPassword.php new file mode 100644 index 0000000..71df21a --- /dev/null +++ b/app/Http/Middleware/ThrottleForgotPassword.php @@ -0,0 +1,31 @@ +routeIs('password.email')) { + return $next($request); + } + + $key = 'forgot-password:'.$request->ip(); + + if (RateLimiter::tooManyAttempts($key, 5)) { + return response('Too many password reset requests.', 429); + } + + RateLimiter::hit($key, 60); + + return $next($request); + } +} diff --git a/app/Http/Middleware/VerifyPaystackWebhook.php b/app/Http/Middleware/VerifyPaystackWebhook.php index 808db69..d76e34f 100644 --- a/app/Http/Middleware/VerifyPaystackWebhook.php +++ b/app/Http/Middleware/VerifyPaystackWebhook.php @@ -8,32 +8,21 @@ class VerifyPaystackWebhook { - protected array $whitelistedIps = [ - '52.31.139.75', - '52.49.173.169', - '52.214.14.220', - ]; - public function handle(Request $request, Closure $next): Response { // we are going to log all webhooks from paystack in json format, should in case we need to repush by ourselves, due to failure logger()->channel('paystack')->info($request->getContent()); // Ensure POST + signature exists - if ($request->method() !== 'POST' || !$request->hasHeader('x-paystack-signature')) { + if ($request->method() !== 'POST' || ! $request->hasHeader('x-paystack-signature')) { return response('Invalid request', 400); } - // IP Whitelisting - if (!in_array(get_request_ip($request), $this->whitelistedIps)) { - return response('Unauthorized IP', 403); - } - - // Signature validation + // Signature validation (HMAC-SHA512) $secret = config('services.paystack.secret'); $signature = $request->header('x-paystack-signature'); $computed = hash_hmac('sha512', $request->getContent(), $secret); - if (!hash_equals($signature, $computed)) { + if (! hash_equals($signature, $computed)) { return response('Invalid signature', 403); } diff --git a/app/Http/Requests/BulkImportSubscribersRequest.php b/app/Http/Requests/BulkImportSubscribersRequest.php index 9592fd0..64c8b4b 100644 --- a/app/Http/Requests/BulkImportSubscribersRequest.php +++ b/app/Http/Requests/BulkImportSubscribersRequest.php @@ -3,6 +3,7 @@ namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class BulkImportSubscribersRequest extends FormRequest { @@ -16,7 +17,9 @@ public function rules(): array return [ 'file' => 'required|file|mimes:csv,txt|max:10240', // 10MB max 'tag_ids' => 'nullable|array', - 'tag_ids.*' => 'exists:tags,id', + 'tag_ids.*' => [Rule::exists('tags')->where(function ($query) { + $query->where('user_id', $this->user()->id); + })], ]; } } diff --git a/app/Http/Requests/StoreCampaignRequest.php b/app/Http/Requests/StoreCampaignRequest.php index 634941f..7808c6b 100644 --- a/app/Http/Requests/StoreCampaignRequest.php +++ b/app/Http/Requests/StoreCampaignRequest.php @@ -24,7 +24,9 @@ public function rules(): array })], 'recipient_type' => 'required|in:tags,manual', 'tag_ids' => 'required_if:recipient_type,tags|nullable|array|min:1', - 'tag_ids.*' => 'exists:tags,id', + 'tag_ids.*' => [Rule::exists('tags')->where(function (Builder $query) { + $query->where('user_id', $this->user()->id); + })], 'phone_numbers' => 'required_if:recipient_type,manual|nullable|array|min:1|max:300|distinct', 'phone_numbers.*' => ['regex:/^(0)(7|8|9)(0|1)\d{8}$/'], 'dispatch_at' => 'nullable|date|after:now', diff --git a/app/Http/Requests/StoreSenderIdRequest.php b/app/Http/Requests/StoreSenderIdRequest.php index c46269b..2888409 100644 --- a/app/Http/Requests/StoreSenderIdRequest.php +++ b/app/Http/Requests/StoreSenderIdRequest.php @@ -19,7 +19,7 @@ public function rules(): array 'string', 'max:11', 'regex:/^[A-Za-z0-9 ]+$/', // Only alphanumeric - 'unique:sender_ids,sender_id,NULL,id,user_id,' . $this->user()->id, + 'unique:sender_ids,sender_id,NULL,id,user_id,'.$this->user()->id, ], 'purpose' => 'required|string|max:500', ]; diff --git a/app/Http/Requests/StoreSingleSmsRequest.php b/app/Http/Requests/StoreSingleSmsRequest.php index 781b173..f2e60e4 100644 --- a/app/Http/Requests/StoreSingleSmsRequest.php +++ b/app/Http/Requests/StoreSingleSmsRequest.php @@ -3,6 +3,7 @@ namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class StoreSingleSmsRequest extends FormRequest { @@ -14,10 +15,14 @@ public function authorize(): bool public function rules(): array { return [ - 'sender_id' => 'nullable|exists:sender_ids,sender_id', + 'sender_id' => ['required', Rule::exists('sender_ids')->where(function ($query) { + $query->where('user_id', $this->user()->id); + })], 'recipient_type' => 'required|in:manual,subscriber', 'phone_number' => 'required_if:recipient_type,manual|nullable|string|min:11|max:11|regex:/^0[789][01]\d{8}$/', - 'subscriber_id' => 'required_if:recipient_type,subscriber|nullable|exists:subscribers,id', + 'subscriber_id' => ['required_if:recipient_type,subscriber', 'nullable', Rule::exists('subscribers')->where(function ($query) { + $query->where('user_id', $this->user()->id); + })], 'message' => 'required|string', ]; } diff --git a/app/Http/Requests/StoreSubscriberRequest.php b/app/Http/Requests/StoreSubscriberRequest.php index f55b130..3bb5c62 100644 --- a/app/Http/Requests/StoreSubscriberRequest.php +++ b/app/Http/Requests/StoreSubscriberRequest.php @@ -3,6 +3,7 @@ namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class StoreSubscriberRequest extends FormRequest { @@ -18,7 +19,9 @@ public function rules(): array 'phone_number.*' => 'required|min:11|max:11|string|distinct', 'name' => 'nullable|string|max:255', 'tag_ids' => 'nullable|array', - 'tag_ids.*' => 'exists:tags,id', + 'tag_ids.*' => [Rule::exists('tags')->where(function ($query) { + $query->where('user_id', $this->user()->id); + })], ]; } } diff --git a/app/Http/Requests/UpdateSubscriberRequest.php b/app/Http/Requests/UpdateSubscriberRequest.php index 8023601..dc512e6 100644 --- a/app/Http/Requests/UpdateSubscriberRequest.php +++ b/app/Http/Requests/UpdateSubscriberRequest.php @@ -3,6 +3,7 @@ namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class UpdateSubscriberRequest extends FormRequest { @@ -17,7 +18,9 @@ public function rules(): array 'phone_number' => 'required|string', 'name' => 'nullable|string|max:255', 'tag_ids' => 'nullable|array', - 'tag_ids.*' => 'exists:tags,id', + 'tag_ids.*' => [Rule::exists('tags')->where(function ($query) { + $query->where('user_id', $this->user()->id); + })], ]; } } diff --git a/app/Interfaces/SmsProviderInterface.php b/app/Interfaces/SmsProviderInterface.php index 75c7f48..ec07f84 100644 --- a/app/Interfaces/SmsProviderInterface.php +++ b/app/Interfaces/SmsProviderInterface.php @@ -2,22 +2,17 @@ namespace App\Interfaces; +use App\Services\Sms\Dto\SmsDeliveryResult; + interface SmsProviderInterface { /** - * Send SMS to one or multiple recipients - * - * @param array|string $phoneNumbers - * @param string $message - * @param string $senderId - * @return array + * Send SMS to one or multiple recipients. */ - public function send(array|string $phoneNumbers, string $message, string $senderId): array; + public function send(array|string $phoneNumbers, string $message, string $senderId): SmsDeliveryResult; /** - * Get SMS balance - * - * @return array + * Get SMS balance. */ public function getBalance(): array; } diff --git a/app/Jobs/ImportSubscribersJob.php b/app/Jobs/ImportSubscribersJob.php index 52c0763..7c065d8 100644 --- a/app/Jobs/ImportSubscribersJob.php +++ b/app/Jobs/ImportSubscribersJob.php @@ -9,8 +9,8 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Storage; use League\Csv\Reader; class ImportSubscribersJob implements ShouldQueue @@ -18,10 +18,13 @@ class ImportSubscribersJob implements ShouldQueue use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public $timeout = 600; // 10 minutes + public $tries = 3; protected $userId; + protected $filename; + protected $tagIds; /** @@ -41,16 +44,18 @@ public function handle() { $user = User::find($this->userId); - if (!$user) { + if (! $user) { $this->fail(new \Exception('User not found')); + return; } try { $filePath = Storage::path($this->filename); - if (!file_exists($filePath)) { + if (! file_exists($filePath)) { $this->fail(new \Exception('Import file not found')); + return; } @@ -66,10 +71,11 @@ public function handle() try { // Get phone number from either column $phoneNumber = $record['phone_number'] ?? $record['phone'] ?? null; - $name = $record['name'] ?? null; + $name = $record['name'] ?? null; if (empty($phoneNumber)) { $skipped++; + continue; } @@ -78,6 +84,7 @@ public function handle() if (empty($phoneNumber)) { $skipped++; + continue; } @@ -91,8 +98,13 @@ public function handle() ] ); - if (!empty($this->tagIds)) { - $subscriber->tags()->syncWithoutDetaching($this->tagIds); + if (! empty($this->tagIds)) { + $allowedTagIds = $user->tags() + ->whereIn('id', $this->tagIds) + ->pluck('id') + ->all(); + + $subscriber->tags()->syncWithoutDetaching($allowedTagIds); } $imported++; @@ -103,7 +115,7 @@ public function handle() } } catch (\Exception $e) { - $errors[] = "Row " . ($index + 2) . ": " . $e->getMessage(); + $errors[] = 'Row '.($index + 2).': '.$e->getMessage(); // Limit error collection to prevent memory issues if (count($errors) >= 100) { @@ -120,8 +132,8 @@ public function handle() if ($skipped > 0) { $message .= " {$skipped} rows skipped."; } - if (!empty($errors)) { - $message .= " " . count($errors) . " errors occurred."; + if (! empty($errors)) { + $message .= ' '.count($errors).' errors occurred.'; } // Log the completion @@ -137,7 +149,7 @@ public function handle() Storage::delete($this->filename); } - Log::error("Subscriber import failed for user {$this->userId}: " . $e->getMessage()); + Log::error("Subscriber import failed for user {$this->userId}: ".$e->getMessage()); // TODO: Notify user of failure (optional) // $user->notify(new ImportFailedNotification($e->getMessage())); @@ -156,7 +168,7 @@ public function failed(\Exception $exception): void Storage::delete($this->filename); } - Log::error("Subscriber import job failed permanently for user {$this->userId}: " . $exception->getMessage()); + Log::error("Subscriber import job failed permanently for user {$this->userId}: ".$exception->getMessage()); // TODO: Notify user of permanent failure (optional) // $user = User::find($this->userId); diff --git a/app/Jobs/RetryPendingSmsJob.php b/app/Jobs/RetryPendingSmsJob.php index c38a6bf..f971831 100644 --- a/app/Jobs/RetryPendingSmsJob.php +++ b/app/Jobs/RetryPendingSmsJob.php @@ -4,27 +4,34 @@ use App\Models\Campaign; use App\Models\CampaignLog; +use App\Models\User; +use App\Services\CreditChargeService; use App\Services\Sms\SmsService; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Queue\Queueable; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; class RetryPendingSmsJob implements ShouldQueue { use Queueable; public int $tries = 2; + public int $timeout = 300; + public int $maxRetries = 5; // Maximum retry attempts per message /** * Execute the job - Retry all pending SMS messages */ - public function handle(SmsService $smsService): void + public function handle(SmsService $smsService, CreditChargeService $chargeService): void { Log::info('Starting retry job for pending SMS messages'); + // Read pricing settings once instead of once per pending message. + $chargeService->withPrices(); + // Get all pending logs that are due for retry $pendingLogs = CampaignLog::where('status', 'pending') ->where(function ($query) { @@ -38,6 +45,7 @@ public function handle(SmsService $smsService): void if ($pendingLogs->isEmpty()) { Log::info('No pending SMS messages to retry'); + return; } @@ -48,7 +56,14 @@ public function handle(SmsService $smsService): void foreach ($pendingLogs as $log) { try { // Skip if campaign is not active - if (!in_array($log->campaign->status, ['processing', 'scheduled'])) { + if (! in_array($log->campaign->status, ['processing', 'scheduled'])) { + continue; + } + + // Validate the wallet against the estimated cost before retrying + if (! $chargeService->canSend($log->campaign->user, $log->message_parts)) { + Log::info('Skipping retry - insufficient credits', ['log_id' => $log->id]); + continue; } @@ -59,14 +74,29 @@ public function handle(SmsService $smsService): void senderId: $log->campaign->sender_id ?? config('services.mtn_bulksms.default_sender_id', 'Windnotes') ); - if ($result && isset($result['success']) && $result['success']) { - // Success! Update to sent - DB::transaction(function () use ($log, $result) { + if ($result && $result->success) { + $charge = $chargeService->computeCharge($result->creditsCharged, $log->message_parts); + + // Lock the user row so the recorded before/after balances + // are consistent with the debit, all in one transaction. + DB::transaction(function () use ($log, $charge) { + $user = User::query()->lockForUpdate()->find($log->campaign->user_id); + $balanceBefore = (float) $user->credit_balance; + $balanceAfter = round($balanceBefore - $charge['credits_charged'], 2); + $log->update([ + 'user_id' => $log->campaign->user_id, 'status' => 'sent', 'sent_at' => now(), 'error_message' => null, + 'provider_charge' => $charge['provider_charge'], + 'credits_charged' => $charge['credits_charged'], + 'credit_balance_before' => $balanceBefore, + 'credit_balance_after' => $balanceAfter, ]); + $log->campaign->increment('total_credits', $charge['credits_charged']); + + $user->decrement('credit_balance', $charge['credits_charged']); }); // Update campaign sent count @@ -76,7 +106,7 @@ public function handle(SmsService $smsService): void $successCount++; Log::info("Retry successful for {$log->phone_number}"); } else { - throw new \Exception($result['error'] ?? 'SMS sending failed'); + throw new \Exception($result->error ?? 'SMS sending failed'); } usleep(150000); // 150ms delay between retries @@ -92,7 +122,7 @@ public function handle(SmsService $smsService): void $log->update([ 'status' => 'failed', 'retry_count' => $newRetryCount, - 'error_message' => "Max retries reached: " . $e->getMessage(), + 'error_message' => 'Max retries reached: '.$e->getMessage(), 'next_retry_at' => null, ]); }); @@ -111,7 +141,7 @@ public function handle(SmsService $smsService): void $log->update([ 'retry_count' => $newRetryCount, 'next_retry_at' => now()->addMinutes($retryDelay), - 'error_message' => "Retry #{$newRetryCount}: " . $e->getMessage(), + 'error_message' => "Retry #{$newRetryCount}: ".$e->getMessage(), ]); }); @@ -121,7 +151,7 @@ public function handle(SmsService $smsService): void } } - Log::info("Retry job completed", [ + Log::info('Retry job completed', [ 'success' => $successCount, 'still_pending' => $stillPendingCount, 'permanent_fail' => $permanentFailCount, @@ -176,14 +206,16 @@ protected function scheduleNextRecurrence(Campaign $campaign): void // Check if we've passed the end date if ($campaign->recurrence_end_date && now()->isAfter($campaign->recurrence_end_date)) { Log::info("Campaign {$campaign->id} has reached its end date. Not scheduling next occurrence."); + return; } // Calculate next run time $nextRunAt = $this->calculateNextRun(); - if (!$nextRunAt) { + if (! $nextRunAt) { Log::error("Failed to calculate next run time for campaign {$campaign->id}"); + return; } @@ -191,7 +223,7 @@ protected function scheduleNextRecurrence(Campaign $campaign): void $newCampaign = Campaign::create([ 'user_id' => $campaign->user_id, 'name' => $campaign->name, - 'message' =>$campaign->message, + 'message' => $campaign->message, 'spintax_message' => $campaign->spintax_message, 'tag_ids' => $campaign->tag_ids, 'phone_numbers' => $campaign->phone_numbers, diff --git a/app/Jobs/SendCampaignSms.php b/app/Jobs/SendCampaignSms.php index d650d17..482e7b6 100644 --- a/app/Jobs/SendCampaignSms.php +++ b/app/Jobs/SendCampaignSms.php @@ -5,12 +5,14 @@ use App\Models\Campaign; use App\Models\CampaignLog; use App\Models\Subscriber; +use App\Models\User; +use App\Services\CreditChargeService; use App\Services\Sms\SmsService; use App\Services\SpintaxService; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Queue\Queueable; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; class SendCampaignSms implements ShouldQueue { @@ -23,63 +25,110 @@ public function __construct(Campaign $campaign) $this->campaign = $campaign; } - public function handle(SpintaxService $spintaxService, SmsService $smsService): void + public function handle(SpintaxService $spintaxService, SmsService $smsService, CreditChargeService $chargeService): void { if ($this->campaign->status !== 'processing') { $this->campaign->update(['status' => 'processing']); } - // Get recipients based on campaign type - $recipients = $this->campaign->recipient_type === 'manual' - ? $this->getManualRecipients() - : $this->getTaggedRecipients(); - - if (empty($recipients)) { - $this->completeCampaign(); - return; - } + // Read the pricing settings once instead of once per recipient. Each + // AppSettings read is a cached DB round-trip when the cache store is + // the database, so hoisting saves 2 queries per SMS. + $chargeService->withPrices(); $sentCount = 0; $failedCount = 0; $pendingCount = 0; - foreach ($recipients as $recipient) { - // Check if already processed (prevent duplicates) - //TODO: PHONE NUMBER SHOULD BE THE SINGLE SOURCE FOR CAMPAIGN LOG, NO NEED OF SUBSCRIBER ID - $existingLog = CampaignLog::where('campaign_id', $this->campaign->id) - ->where(function($q) use ($recipient) { - if (isset($recipient['subscriber_id'])) { - $q->where('subscriber_id', $recipient['subscriber_id']); - } else { - $q->where('phone_number', $recipient['phone_number']); - } - }) - ->exists(); + $this->eachRecipient( + $spintaxService, + $smsService, + $chargeService, + function ($recipient, SpintaxService $spintaxService, SmsService $smsService, CreditChargeService $chargeService) use (&$sentCount, &$failedCount, &$pendingCount) { + // Process spintax + $messageVariation = $spintaxService->process($this->campaign->spintax_message); - if ($existingLog) { - Log::info("Skipping {$recipient['phone_number']} - already processed"); - continue; - } + // Personalize if subscriber exists + $personalizedMessage = isset($recipient['subscriber']) + ? $this->personalizeMessage($messageVariation, $recipient['subscriber']) + : $messageVariation; - // Process spintax - $messageVariation = $spintaxService->process($this->campaign->spintax_message); + $messageParts = determineNumberOfSms(1, $personalizedMessage); - // Personalize if subscriber exists - $personalizedMessage = isset($recipient['subscriber']) - ? $this->personalizeMessage($messageVariation, $recipient['subscriber']) - : $messageVariation; + // Validate the wallet against the estimated cost before sending + if (! $chargeService->canSend($this->campaign->user, $messageParts)) { + Log::warning('Campaign paused: insufficient credits', [ + 'campaign_id' => $this->campaign->id, + 'user_id' => $this->campaign->user_id, + ]); + + $this->campaign->update(['status' => 'paused']); + $this->fail(new \Exception('Campaign paused: insufficient credits to continue sending.')); + + return; + } + + try { + $result = $smsService->composeSms( + msisdns: [$recipient['phone_number']], + message: $personalizedMessage, + senderId: $this->campaign->sender_id ?? config('services.mtn_bulksms.default_sender_id', 'Windnotes') + ); + + if ($result && $result->success) { + $charge = $chargeService->computeCharge($result->creditsCharged, $messageParts); + + DB::transaction(function () use ($recipient, $personalizedMessage, $charge, $messageParts) { + $exists = CampaignLog::where('campaign_id', $this->campaign->id) + ->where(function ($q) use ($recipient) { + if (isset($recipient['subscriber_id'])) { + $q->where('subscriber_id', $recipient['subscriber_id']); + } else { + $q->where('phone_number', $recipient['phone_number']); + } + }) + ->lockForUpdate() + ->exists(); + + if (! $exists) { + // Lock the user row so the recorded before/after + // balances are consistent with the debit below. + $user = User::query()->lockForUpdate()->find($this->campaign->user_id); + $balanceBefore = (float) $user->credit_balance; + $balanceAfter = round($balanceBefore - $charge['credits_charged'], 2); + + CampaignLog::create([ + 'user_id' => $this->campaign->user_id, + 'campaign_id' => $this->campaign->id, + 'subscriber_id' => $recipient['subscriber_id'] ?? null, + 'phone_number' => $recipient['phone_number'], + 'message_sent' => $personalizedMessage, + 'provider_charge' => $charge['provider_charge'], + 'credits_charged' => $charge['credits_charged'], + 'message_parts' => $messageParts, + 'credit_balance_before' => $balanceBefore, + 'credit_balance_after' => $balanceAfter, + 'status' => 'sent', + 'sent_at' => now(), + ]); + + $user->decrement('credit_balance', $charge['credits_charged']); + $this->campaign->increment('total_credits', $charge['credits_charged']); + } + }, 3); + + $sentCount++; + } else { + throw new \Exception($result->error ?? 'SMS sending failed'); + } - try { - $result = $smsService->composeSms( - msisdns: [$recipient['phone_number']], - message: $personalizedMessage, - senderId: $this->campaign->sender_id ?? config('services.mtn_bulksms.default_sender_id', 'Windnotes') - ); + usleep(100000); + } catch (\Exception $e) { + $isTemporaryIssue = $this->isTemporaryIssue($e); - if ($result && isset($result['success']) && $result['success']) { - DB::transaction(function () use ($recipient, $personalizedMessage) { + DB::transaction(function () use (&$failedCount, &$pendingCount, $isTemporaryIssue, $recipient, $personalizedMessage, $e, $messageParts) { $exists = CampaignLog::where('campaign_id', $this->campaign->id) - ->where(function($q) use ($recipient) { + ->where(function ($q) use ($recipient) { if (isset($recipient['subscriber_id'])) { $q->where('subscriber_id', $recipient['subscriber_id']); } else { @@ -89,64 +138,36 @@ public function handle(SpintaxService $spintaxService, SmsService $smsService): ->lockForUpdate() ->exists(); - if (!$exists) { + if (! $exists) { + $status = $isTemporaryIssue ? 'pending' : 'failed'; + CampaignLog::create([ + 'user_id' => $this->campaign->user_id, 'campaign_id' => $this->campaign->id, 'subscriber_id' => $recipient['subscriber_id'] ?? null, 'phone_number' => $recipient['phone_number'], - 'message_sent' => $personalizedMessage, - 'status' => 'sent', - 'sent_at' => now(), + 'message_sent' => $personalizedMessage ?? '', + 'provider_charge' => null, + 'credits_charged' => 0, + 'message_parts' => $messageParts, + 'status' => $status, + 'error_message' => $e->getMessage(), + 'retry_count' => 0, + 'next_retry_at' => $isTemporaryIssue ? now()->addMinutes(5) : null, ]); - } - }, 3); - - $sentCount++; - } else { - throw new \Exception($result['error'] ?? 'SMS sending failed'); - } - - usleep(100000); - } catch (\Exception $e) { - $isTemporaryIssue = $this->isTemporaryIssue($e); - DB::transaction(function () use (&$failedCount, &$pendingCount, $isTemporaryIssue, $recipient, $personalizedMessage, $e) { - $exists = CampaignLog::where('campaign_id', $this->campaign->id) - ->where(function($q) use ($recipient) { - if (isset($recipient['subscriber_id'])) { - $q->where('subscriber_id', $recipient['subscriber_id']); + if ($isTemporaryIssue) { + $pendingCount++; } else { - $q->where('phone_number', $recipient['phone_number']); + $failedCount++; } - }) - ->lockForUpdate() - ->exists(); - - if (!$exists) { - $status = $isTemporaryIssue ? 'pending' : 'failed'; - - CampaignLog::create([ - 'campaign_id' => $this->campaign->id, - 'subscriber_id' => $recipient['subscriber_id'] ?? null, - 'phone_number' => $recipient['phone_number'], - 'message_sent' => $personalizedMessage ?? '', - 'status' => $status, - 'error_message' => $e->getMessage(), - 'retry_count' => 0, - 'next_retry_at' => $isTemporaryIssue ? now()->addMinutes(5) : null, - ]); - - if ($isTemporaryIssue) { - $pendingCount++; - } else { - $failedCount++; } - } - }, 3); + }, 3); - Log::error("Failed to send SMS to {$recipient['phone_number']}: {$e->getMessage()}"); + Log::error("Failed to send SMS to {$recipient['phone_number']}: {$e->getMessage()}"); + } } - } + ); if ($sentCount > 0) { $this->campaign->increment('sent_count', $sentCount); @@ -161,6 +182,41 @@ public function handle(SpintaxService $spintaxService, SmsService $smsService): $this->completeCampaign(); } + /** + * Iterate over the campaign recipients, processing them in bounded chunks. + * + * Manual recipients are already held in memory; tagged recipients are + * streamed via chunkById so a large audience is never fully materialized. + */ + protected function eachRecipient(SpintaxService $spintaxService, SmsService $smsService, CreditChargeService $chargeService, callable $process): void + { + if ($this->campaign->recipient_type === 'manual') { + foreach ($this->getManualRecipients() as $recipient) { + $process($recipient, $spintaxService, $smsService, $chargeService); + } + + return; + } + + $subscribers = Subscriber::where('user_id', $this->campaign->user_id) + ->whereHas('tags', function ($q) { + $q->whereIn('tags.id', $this->campaign->tag_ids); + }) + ->whereDoesntHave('campaignLogs', function ($q) { + $q->where('campaign_id', $this->campaign->id); + }); + + $subscribers->chunkById(500, function ($chunk) use ($process, $spintaxService, $smsService, $chargeService) { + foreach ($chunk as $subscriber) { + $process([ + 'phone_number' => $subscriber->phone_number, + 'subscriber_id' => $subscriber->id, + 'subscriber' => $subscriber, + ], $spintaxService, $smsService, $chargeService); + } + }); + } + /** * Get manual recipients (phone numbers entered manually) */ @@ -177,7 +233,7 @@ protected function getManualRecipients(): array $unsentNumbers = array_diff($phoneNumbers, $processedNumbers); // Format as recipient array - return array_map(function($phoneNumber) { + return array_map(function ($phoneNumber) { return [ 'phone_number' => $phoneNumber, 'subscriber_id' => null, @@ -186,30 +242,6 @@ protected function getManualRecipients(): array }, $unsentNumbers); } - /** - * Get tagged recipients (subscribers from tags) - */ - protected function getTaggedRecipients(): array - { - $subscribers = Subscriber::where('user_id', $this->campaign->user_id) - ->whereHas('tags', function ($q) { - $q->whereIn('tags.id', $this->campaign->tag_ids); - }) - ->whereDoesntHave('campaignLogs', function ($q) { - $q->where('campaign_id', $this->campaign->id); - }) - ->distinct() - ->get(); - - return $subscribers->map(function($subscriber) { - return [ - 'phone_number' => $subscriber->phone_number, - 'subscriber_id' => $subscriber->id, - 'subscriber' => $subscriber, - ]; - })->toArray(); - } - protected function isTemporaryIssue(\Exception $e): bool { $message = strtolower($e->getMessage()); @@ -267,7 +299,7 @@ protected function completeCampaign(): void } else { $this->campaign->update([ 'status' => 'completed', - 'completed_at' => now() + 'completed_at' => now(), ]); Log::info("Campaign {$this->campaign->id} completed. Sent: {$this->campaign->sent_count}, Failed: {$this->campaign->failed_count}"); @@ -294,13 +326,15 @@ protected function scheduleNextRecurrence(): void { if ($this->campaign->recurrence_end_date && now()->isAfter($this->campaign->recurrence_end_date)) { Log::info("Campaign {$this->campaign->id} has reached its end date."); + return; } $nextRunAt = $this->calculateNextRun(); - if (!$nextRunAt) { + if (! $nextRunAt) { Log::error("Failed to calculate next run time for campaign {$this->campaign->id}"); + return; } diff --git a/app/Listeners/SendWelcomeEmail.php b/app/Listeners/SendWelcomeEmail.php index 00d74f8..4097a0c 100644 --- a/app/Listeners/SendWelcomeEmail.php +++ b/app/Listeners/SendWelcomeEmail.php @@ -3,13 +3,8 @@ namespace App\Listeners; use App\Notifications\WelcomeMail; -use Illuminate\Auth\Events\Registered; use Illuminate\Auth\Events\Verified; use Illuminate\Contracts\Queue\ShouldQueue; -use LucasDotVin\Soulbscription\Models\Plan; - -// use Illuminate\Queue\InteractsWithQueue; -// use Illuminate\Support\Facades\Mail; class SendWelcomeEmail implements ShouldQueue { @@ -26,13 +21,8 @@ public function __construct() */ public function handle(Verified $event): void { - // Access the registered user through $event->user $user = $event->user; - $plan = Plan::where('name', 'free')->first(); - if($plan && !$user->subscription ){ - $user->subscribeTo($plan); - } - // Example: Send a welcome email + $user->notify(new WelcomeMail($user)); } } diff --git a/app/Models/AppSettings.php b/app/Models/AppSettings.php new file mode 100644 index 0000000..c765f44 --- /dev/null +++ b/app/Models/AppSettings.php @@ -0,0 +1,12 @@ + 'datetime', 'completed_at' => 'datetime', 'phone_numbers' => 'array', + 'total_credits' => 'decimal:2', ]; public function user(): BelongsTo diff --git a/app/Models/CampaignLog.php b/app/Models/CampaignLog.php index 48e8202..2c06bec 100644 --- a/app/Models/CampaignLog.php +++ b/app/Models/CampaignLog.php @@ -9,12 +9,18 @@ class CampaignLog extends Model { use HasFactory; + protected $fillable = [ 'user_id', 'campaign_id', 'subscriber_id', 'phone_number', // New field 'message_sent', + 'provider_charge', + 'credits_charged', + 'message_parts', + 'credit_balance_before', + 'credit_balance_after', 'status', 'error_message', 'sent_at', @@ -25,6 +31,11 @@ class CampaignLog extends Model protected $casts = [ 'sent_at' => 'datetime', 'next_retry_at' => 'datetime', + 'provider_charge' => 'decimal:2', + 'credits_charged' => 'decimal:2', + 'message_parts' => 'integer', + 'credit_balance_before' => 'decimal:2', + 'credit_balance_after' => 'decimal:2', ]; public function scopePending($query) @@ -77,7 +88,7 @@ public function getIsRetryableAttribute(): bool public function getStatusBadgeAttribute(): string { - return match($this->status) { + return match ($this->status) { 'sent' => 'Sent', 'pending' => 'Pending', 'failed' => 'Failed', diff --git a/app/Models/CreditBand.php b/app/Models/CreditBand.php new file mode 100644 index 0000000..e48beaa --- /dev/null +++ b/app/Models/CreditBand.php @@ -0,0 +1,66 @@ + 'integer', + 'price_per_unit' => 'decimal:2', + 'is_active' => 'boolean', + ]; + + /** + * Scope to only active bands, ordered by minimum units ascending. + */ + public function scopeActive(Builder $query): Builder + { + return $query->where('is_active', true)->orderBy('min_units'); + } + + /** + * Find the band that applies to a given number of units. + * + * Threshold-based: each band covers min_units up to the next band's + * min_units - 1. The top band extends upward indefinitely. Returns null + * when the quantity is below the lowest active band's minimum. + */ + public static function findBandForUnits(int $units): ?self + { + return self::active() + ->reorder() + ->where('min_units', '<=', $units) + ->orderByDesc('min_units') + ->first(); + } + + /** + * Get the minimum purchasable quantity (lowest active band's min_units). + */ + public static function minimumPurchase(): int + { + $lowest = self::active()->first(); + + return $lowest?->min_units ?? 0; + } + + /** + * Get all active bands as an ordered list. + */ + public static function activeBands() + { + return self::active()->get(); + } +} diff --git a/app/Models/SenderId.php b/app/Models/SenderId.php index a2f4421..ae3c174 100644 --- a/app/Models/SenderId.php +++ b/app/Models/SenderId.php @@ -9,6 +9,7 @@ class SenderId extends Model { use HasFactory; + protected $fillable = [ 'user_id', 'sender_id', @@ -55,7 +56,7 @@ public function scopeRejected($query) */ public function getStatusColorAttribute(): string { - return match($this->status) { + return match ($this->status) { 'approved' => 'green', 'pending' => 'yellow', 'rejected' => 'red', diff --git a/app/Models/Setting.php b/app/Models/Setting.php deleted file mode 100644 index ab32fd2..0000000 --- a/app/Models/Setting.php +++ /dev/null @@ -1,47 +0,0 @@ -type) { - 'boolean' => filter_var($value, FILTER_VALIDATE_BOOLEAN), - 'integer' => (int) $value, - 'json' => json_decode($value, true), - default => $value, - }; - } - - /** - * Set the value attribute with type casting - */ - public function setValueAttribute($value) - { - $this->attributes['value'] = match ($this->type) { - 'boolean' => $value ? '1' : '0', - 'json' => is_array($value) ? json_encode($value) : $value, - default => (string) $value, - }; - } -} diff --git a/app/Models/Subscriber.php b/app/Models/Subscriber.php index 6a02bd4..6ddcc3e 100644 --- a/app/Models/Subscriber.php +++ b/app/Models/Subscriber.php @@ -11,6 +11,7 @@ class Subscriber extends Model { use HasFactory; + protected $fillable = [ 'user_id', 'phone_number', diff --git a/app/Models/Tag.php b/app/Models/Tag.php index 39f6d98..198b373 100644 --- a/app/Models/Tag.php +++ b/app/Models/Tag.php @@ -10,6 +10,7 @@ class Tag extends Model { use HasFactory; + protected $fillable = [ 'user_id', 'name', diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 9464b5d..363760d 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -10,31 +10,37 @@ class Transaction extends Model { use HasFactory; + // todo: we need to use php enum cases in all places where we have used class constants and in places we have used bare strings // Transaction statuses const STATUS_PENDING = 'pending'; + const STATUS_COMPLETED = 'completed'; + const STATUS_FAILED = 'failed'; + const STATUS_REFUNDED = 'refunded'; + const STATUS_ABANDONED = 'abandoned'; + // Transaction types - const TYPE_SUBSCRIPTION = 'subscription'; - const TYPE_RENEWAL = 'renewal'; - const TYPE_EXTRA_SMS = 'extra_sms'; + const TYPE_CREDIT_PURCHASE = 'credit_purchase'; protected $fillable = [ 'user_id', 'type', 'amount', + 'units', + 'price_per_unit', 'description', 'status', 'payment_method', 'reference', - 'metadata', ]; protected $casts = [ 'amount' => 'decimal:2', - 'metadata' => 'array', + 'units' => 'integer', + 'price_per_unit' => 'decimal:2', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; @@ -71,14 +77,6 @@ public function scopeFailed($query) return $query->where('status', self::STATUS_FAILED); } - /** - * Scope for subscription transactions - */ - public function scopeSubscriptions($query) - { - return $query->whereIn('type', [self::TYPE_SUBSCRIPTION, self::TYPE_RENEWAL]); - } - /** * Check if transaction is pending */ @@ -119,12 +117,20 @@ public function markAsFailed(): bool return $this->update(['status' => self::STATUS_FAILED]); } + /** + * Mark transaction as abandoned + */ + public function markAsAbandoned(): bool + { + return $this->update(['status' => self::STATUS_ABANDONED]); + } + /** * Get formatted amount */ public function getFormattedAmountAttribute(): string { - return '₦' . number_format($this->amount, 2); + return '₦'.number_format($this->amount, 2); } /** @@ -132,10 +138,8 @@ public function getFormattedAmountAttribute(): string */ public function getTypeLabel(): string { - return match($this->type) { - self::TYPE_SUBSCRIPTION => 'Subscription', - self::TYPE_RENEWAL => 'Renewal', - self::TYPE_EXTRA_SMS => 'Extra SMS Units', + return match ($this->type) { + self::TYPE_CREDIT_PURCHASE => 'Credit Purchase', default => ucfirst($this->type), }; } @@ -145,11 +149,12 @@ public function getTypeLabel(): string */ public function getStatusColor(): string { - return match($this->status) { + return match ($this->status) { self::STATUS_PENDING => 'yellow', self::STATUS_COMPLETED => 'green', self::STATUS_FAILED => 'red', self::STATUS_REFUNDED => 'blue', + self::STATUS_ABANDONED => 'gray', default => 'gray', }; } diff --git a/app/Models/User.php b/app/Models/User.php index d069632..712246f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -8,13 +8,13 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Illuminate\Support\Facades\DB; use Laravel\Fortify\TwoFactorAuthenticatable; -use LucasDotVin\Soulbscription\Models\Concerns\HasSubscriptions; class User extends Authenticatable implements MustVerifyEmail { /** @use HasFactory<\Database\Factories\UserFactory> */ - use HasFactory, Notifiable, TwoFactorAuthenticatable, HasSubscriptions; + use HasFactory, Notifiable, TwoFactorAuthenticatable; /** * The attributes that are mass assignable. @@ -25,6 +25,8 @@ class User extends Authenticatable implements MustVerifyEmail 'name', 'email', 'password', + 'credit_balance', + 'is_admin', ]; /** @@ -50,6 +52,8 @@ protected function casts(): array 'email_verified_at' => 'datetime', 'password' => 'hashed', 'two_factor_confirmed_at' => 'datetime', + 'credit_balance' => 'decimal:2', + 'is_admin' => 'boolean', ]; } @@ -70,4 +74,46 @@ public function tags(): HasMany { return $this->hasMany(Tag::class); } + + /** + * Add credits to the user's balance. + */ + public function creditCredits(float $units): void + { + DB::table('users') + ->where('id', $this->id) + ->increment('credit_balance', $units); + + $this->refresh(); + } + + /** + * Atomically deduct credits from the balance when sufficient. + * + * Returns true when the debit succeeded, false when the balance was + * too low (nothing changed). + */ + public function tryDebitCredits(float $units): bool + { + $affected = DB::table('users') + ->where('id', $this->id) + ->where('credit_balance', '>=', $units) + ->decrement('credit_balance', $units); + + if ($affected > 0) { + $this->refresh(); + + return true; + } + + return false; + } + + /** + * Check whether the user has at least the given number of credits. + */ + public function hasEnoughCredits(float $units): bool + { + return (float) $this->credit_balance >= $units; + } } diff --git a/app/Notifications/WelcomeMail.php b/app/Notifications/WelcomeMail.php index abee877..dcbde9b 100644 --- a/app/Notifications/WelcomeMail.php +++ b/app/Notifications/WelcomeMail.php @@ -22,7 +22,7 @@ public function toMail($notifiable): MailMessage { return (new MailMessage) ->subject('Welcome to WindSMS 🎉') - ->greeting('Hi ' . $this->user->name . ',') + ->greeting('Hi '.$this->user->name.',') ->line('Welcome to **WindSMS**, your all-in-one bulk SMS and messaging platform.') ->line('We’re excited to have you onboard!') ->line('As a welcome gift from us, you just got 🎁 **10 FREE SMS Unit** to enjoy our service before even committing to our plans. You can now start sending SMS campaigns, manage delivery, and reach your audience faster.') diff --git a/app/Providers/FortifyServiceProvider.php b/app/Providers/FortifyServiceProvider.php index 968fe15..4dea4aa 100644 --- a/app/Providers/FortifyServiceProvider.php +++ b/app/Providers/FortifyServiceProvider.php @@ -83,9 +83,12 @@ private function configureRateLimiting(): void }); RateLimiter::for('login', function (Request $request) { - $throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip()); + $throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username()).'|'.$request->ip())); - return Limit::perMinute(5)->by($throttleKey); + return [ + Limit::perMinute(5)->by($throttleKey), + Limit::perMinute(20)->by('login:ip:'.$request->ip()), + ]; }); } } diff --git a/app/Services/Ai/CohereService.php b/app/Services/Ai/CohereService.php index d3d5d46..c31a965 100644 --- a/app/Services/Ai/CohereService.php +++ b/app/Services/Ai/CohereService.php @@ -3,12 +3,13 @@ namespace App\Services\Ai; use App\Contracts\AiProviderInterface; -use Illuminate\Support\Facades\Log; use Exception; +use Illuminate\Support\Facades\Log; class CohereService implements AiProviderInterface { protected string $baseUrl; + protected string $apiKey; public function __construct() @@ -35,7 +36,7 @@ private function makeRequest(string $endpoint, array $payload): array|string // CURLOPT_TIMEOUT => 60, CURLOPT_HTTPHEADER => [ "Authorization: Bearer {$this->apiKey}", - "Content-Type: application/json", + 'Content-Type: application/json', ], CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($payload), @@ -77,6 +78,7 @@ public function chat(array $messages, string $model = 'command-a-03-2025', float return trim($data['message']['content'][0]['text'] ?? ''); } catch (Exception $e) { Log::error('❌ Cohere /chat API Error', ['error' => $e->getMessage()]); + return ''; } } @@ -93,17 +95,18 @@ public function generateSpintax(string $message): string 'content' => 'You are a spintax generator. Convert the user\'s message into spintax format using {option1|option2|option3}. Generate at least 10 variations per key words and phrase while keeping meaning intact. - Return only the spintax text, no explanations.' + Return only the spintax text, no explanations.', ], [ 'role' => 'user', - 'content' => "Convert this message to spintax format:\n\n{$message}" - ] + 'content' => "Convert this message to spintax format:\n\n{$message}", + ], ]; return $this->chat($messages); } catch (Exception $e) { Log::error('❌ Cohere Spintax Generation Failed', ['error' => $e->getMessage()]); + return $message; } } @@ -117,15 +120,17 @@ public function test(): bool $messages = [ [ 'role' => 'user', - 'content' => 'Say OK' - ] + 'content' => 'Say OK', + ], ]; $response = $this->chat($messages); + return $response ?: 'No response from Cohere.'; } catch (Exception $e) { Log::error('❌ Cohere /test Exception', ['error' => $e->getMessage()]); - return 'Error: ' . $e->getMessage(); + + return 'Error: '.$e->getMessage(); } } } diff --git a/app/Services/Ai/GeminiService.php b/app/Services/Ai/GeminiService.php index 5f31ab8..78e20ca 100644 --- a/app/Services/Ai/GeminiService.php +++ b/app/Services/Ai/GeminiService.php @@ -1,4 +1,5 @@ "You are a spintax generator. Convert the user\'s message into spintax format using {option1|option2|option3}. Generate at least 10 variations per key phrase while keeping meaning intact. - Return only the spintax text, no explanations. Convert this message to spintax format:\n\n{$message}" - ]] - ]] + Return only the spintax text, no explanations. Convert this message to spintax format:\n\n{$message}", + ]], + ]], ]); return $response->json('candidates.0.content.parts.0.text'); } catch (\Exception $e) { - \Log::error('Gemini API Error: ' . $e->getMessage()); + \Log::error('Gemini API Error: '.$e->getMessage()); + return $message; } } @@ -37,15 +39,15 @@ public function test(): bool 'x-goog-api-key' => config('ai.providers.gemini.api_key'), ])->post('https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent', [ 'contents' => [[ - 'parts' => [['text' => 'Say OK']] - ]] + 'parts' => [['text' => 'Say OK']], + ]], ]); return str_contains($response->body(), 'OK'); } catch (\Exception $e) { - logger('Gemini API Error: ' . $e->getMessage()); + logger('Gemini API Error: '.$e->getMessage()); + return false; } } } - diff --git a/app/Services/Ai/OpenAIService.php b/app/Services/Ai/OpenAIService.php index 24feb51..a990d96 100644 --- a/app/Services/Ai/OpenAIService.php +++ b/app/Services/Ai/OpenAIService.php @@ -18,12 +18,12 @@ public function generateSpintax(string $message): string 'messages' => [ [ 'role' => 'system', - 'content' => 'You are a spintax generator. Convert the user\'s message into spintax format by creating multiple variations for words and phrases. Use {option1|option2|option3} syntax. Generate at least 10 variations for key words and phrases to create diverse message variations. Preserve the core meaning while varying the expression. Return only and only the spintax message format, no extra message or explanation.' + 'content' => 'You are a spintax generator. Convert the user\'s message into spintax format by creating multiple variations for words and phrases. Use {option1|option2|option3} syntax. Generate at least 10 variations for key words and phrases to create diverse message variations. Preserve the core meaning while varying the expression. Return only and only the spintax message format, no extra message or explanation.', ], [ 'role' => 'user', - 'content' => "Convert this message to spintax format:\n\n{$message}" - ] + 'content' => "Convert this message to spintax format:\n\n{$message}", + ], ], 'temperature' => 0.8, ]); @@ -31,7 +31,8 @@ public function generateSpintax(string $message): string return $response->choices[0]->message->content; } catch (\Exception $e) { // Fallback: Return original message if API fails - \Log::error('OpenAI API Error: ' . $e->getMessage()); + \Log::error('OpenAI API Error: '.$e->getMessage()); + return $message; } } @@ -45,12 +46,12 @@ public function test(): bool $response = OpenAI::chat()->create([ 'model' => config('services.openai.model'), 'messages' => [ - ['role' => 'user', 'content' => 'Say "OK"'] + ['role' => 'user', 'content' => 'Say "OK"'], ], 'max_tokens' => 10, ]); - return !empty($response->choices[0]->message->content); + return ! empty($response->choices[0]->message->content); } catch (\Exception $e) { return false; } diff --git a/app/Services/CampaignService.php b/app/Services/CampaignService.php index 8eba1f8..516f34a 100644 --- a/app/Services/CampaignService.php +++ b/app/Services/CampaignService.php @@ -6,11 +6,14 @@ use App\Models\Campaign; use App\Models\Subscriber; use App\Models\User; -use App\Shared\Enums\FeaturesEnum; use Carbon\Carbon; class CampaignService { + public function __construct( + private CreditChargeService $chargeService + ) {} + /** * Create a new campaign */ @@ -24,23 +27,11 @@ public function createCampaign(array $data, User $user): Campaign throw new \Exception('Please provide at least one valid recipient.'); } - // Calculate required balance - $totalRequiredBalance = $this->calculateRequiredBalance($totalRecipients, $data['message']); - - // Check subscription - $subscription = $user->subscription; - if (!$subscription || $subscription->expired()) { - throw new \Exception('Subscribe to a plan to start sending campaigns.'); - } - - // Check balance - if ($user->cantConsume(FeaturesEnum::sms->value, $totalRequiredBalance)) { - throw new \Exception('You do not have sufficient sms units to run this campaign. Reduce your contact or buy more units'); + // Non-deducting affordability check using the estimated cost + if (! $this->chargeService->canSendTotal($user, $totalRecipients, $data['message'])) { + throw new \Exception('You do not have sufficient credits to run this campaign. Reduce your contacts or buy more credits.'); } - // Charge user - $user->consume(FeaturesEnum::sms->value, $totalRequiredBalance); - // Get valid dispatch time $dispatchTime = $this->getValidDispatchTime($data); @@ -102,14 +93,6 @@ public function countRecipients(string $type, array $data, User $user): int return count($data['phone_numbers'] ?? []); } - /** - * Calculate required SMS balance - */ - public function calculateRequiredBalance(int $recipientCount, string $message): int - { - return determineNumberOfSms($recipientCount, $message); - } - /** * Get valid dispatch time enforcing 8am - 8pm WAT hours */ @@ -129,7 +112,7 @@ public function getValidDispatchTime(array $data): Carbon $dispatchAt = Carbon::parse($data['dispatch_at'], $timezone); - if (!$this->isWithinAllowedHours($dispatchAt)) { + if (! $this->isWithinAllowedHours($dispatchAt)) { return $this->getNextAllowedTime($dispatchAt); } @@ -142,6 +125,7 @@ public function getValidDispatchTime(array $data): Carbon private function isWithinAllowedHours(Carbon $time): bool { $hour = $time->hour; + return $hour >= 8 && $hour < 20; } @@ -207,7 +191,7 @@ public function getSuccessMessage(array $data, string $status, Carbon $dispatchT $formattedTime = $dispatchTime->timezone($timezone)->format('M j, Y \a\t g:i A'); $baseMessage .= " Scheduled for dispatch at {$formattedTime} WAT."; } elseif ($data['dispatch_now'] ?? false) { - if (!$this->isWithinAllowedHours(now($timezone))) { + if (! $this->isWithinAllowedHours(now($timezone))) { $formattedTime = $dispatchTime->timezone($timezone)->format('M j, Y \a\t g:i A'); $baseMessage .= " SMS can only be sent between 8:00 AM - 8:00 PM WAT. Scheduled for {$formattedTime} WAT."; } @@ -221,7 +205,7 @@ public function getSuccessMessage(array $data, string $status, Carbon $dispatchT */ public function restartCampaign(Campaign $campaign): void { - if (!in_array($campaign->status, ['paused', 'failed'])) { + if (! in_array($campaign->status, ['paused', 'failed'])) { throw new \Exception('Only paused or failed campaigns can be restarted.'); } diff --git a/app/Services/CreditChargeService.php b/app/Services/CreditChargeService.php new file mode 100644 index 0000000..e70fa1c --- /dev/null +++ b/app/Services/CreditChargeService.php @@ -0,0 +1,104 @@ +pricePerPart = $this->pricePerPart(); + $this->markupPercent = $this->markupPercent(); + + return $this; + } + + /** + * Admin-set credit rate for a single message part. + */ + public function pricePerPart(): float + { + return $this->pricePerPart + ?? (float) AppSettings::get(AppSettingsEnum::SMS_PRICE_PER_PART); + } + + /** + * Admin-set markup percentage applied on top of the provider's charge. + */ + public function markupPercent(): float + { + return $this->markupPercent + ?? (float) AppSettings::get(AppSettingsEnum::CREDIT_MARKUP_PERCENT); + } + + /** + * Estimate the credits a message of the given part count would consume. + * Used only to validate the wallet before sending. + */ + public function estimateCharge(int $messageParts): float + { + return round($messageParts * $this->pricePerPart(), 2); + } + + /** + * Compute the actual credits to charge the user for a sent message. + * + * Uses the provider-reported charge plus the admin markup. Falls back to + * the admin per-part rate when the provider does not report a charge. + * + * @return array{credits_charged: float, provider_charge: float|null} + */ + public function computeCharge(?float $providerCharge, int $messageParts): array + { + if ($providerCharge !== null && $providerCharge > 0) { + $creditsCharged = round($providerCharge * (1 + $this->markupPercent() / 100), 2); + + return [ + 'credits_charged' => $creditsCharged, + 'provider_charge' => $providerCharge, + ]; + } + + return [ + 'credits_charged' => $this->estimateCharge($messageParts), + 'provider_charge' => null, + ]; + } + + /** + * Whether the user has enough credits for a message of the given part count. + */ + public function canSend(User $user, int $messageParts): bool + { + return $user->hasEnoughCredits($this->estimateCharge($messageParts)); + } + + /** + * Whether the user has enough credits to send to the given recipient count. + */ + public function canSendTotal(User $user, int $recipientCount, string $message): bool + { + return $user->hasEnoughCredits($this->estimateTotal($recipientCount, $message)); + } + + /** + * Estimate the total credits required to send the message to a recipient count. + */ + public function estimateTotal(int $recipientCount, string $message): float + { + $parts = determineNumberOfSms(1, $message); + + return round($parts * $recipientCount * $this->pricePerPart(), 2); + } +} diff --git a/app/Services/CreditPaymentService.php b/app/Services/CreditPaymentService.php new file mode 100644 index 0000000..a01a579 --- /dev/null +++ b/app/Services/CreditPaymentService.php @@ -0,0 +1,271 @@ + false, + 'message' => 'The minimum purchase is '.CreditBand::minimumPurchase().' credits.', + ]; + } + + $pricePerUnit = (float) $band->price_per_unit; + $totalAmount = round($units * $pricePerUnit, 2); + + return DB::transaction(function () use ($user, $units, $pricePerUnit, $totalAmount) { + $reference = $this->generatePaymentReference($user->id); + + $transaction = Transaction::create([ + 'user_id' => $user->id, + 'type' => Transaction::TYPE_CREDIT_PURCHASE, + 'amount' => $totalAmount, + 'units' => $units, + 'price_per_unit' => $pricePerUnit, + 'description' => "Purchase of {$units} credits", + 'status' => Transaction::STATUS_PENDING, + 'payment_method' => 'paystack', + 'reference' => $reference, + ]); + + $paystackResponse = $this->initializePaystackPayment($user, $transaction, $totalAmount); + + if (! $paystackResponse['success']) { + $transaction->markAsFailed(); + + throw new \Exception($paystackResponse['message'] ?? 'Unable to initialize payment'); + } + + Log::info('Credit purchase payment initialized', [ + 'user_id' => $user->id, + 'transaction_id' => $transaction->id, + 'units' => $units, + 'amount' => $totalAmount, + 'reference' => $reference, + ]); + + return [ + 'success' => true, + 'transaction_id' => $transaction->id, + 'reference' => $reference, + 'authorization_url' => $paystackResponse['data']['authorization_url'], + 'access_code' => $paystackResponse['data']['access_code'], + 'amount' => $totalAmount, + 'units' => $units, + ]; + }); + } + + /** + * Process a successful charge (from Paystack webhook or callback). + * + * Verifies the paid amount against the expected amount and credits the + * user's balance with the purchased units. Idempotent. + */ + public function processCreditWebhook(array $payload): array + { + $reference = $payload['data']['reference'] ?? null; + + if (! $reference) { + Log::error('Webhook received without reference', ['payload' => $payload]); + + return [ + 'success' => false, + 'error' => 'Invalid webhook payload: missing reference', + ]; + } + + $transaction = Transaction::where('reference', $reference) + ->where('status', Transaction::STATUS_PENDING) + ->first(); + + if (! $transaction) { + Log::warning('Transaction not found or already processed', ['reference' => $reference]); + + return [ + 'success' => false, + 'error' => 'Transaction not found or already processed', + ]; + } + + return DB::transaction(function () use ($transaction, $payload) { + $webhookData = $payload['data']; + $status = $webhookData['status'] ?? ''; + + if ($status !== 'success') { + $transaction->markAsFailed(); + + Log::warning('Payment not successful', [ + 'transaction_id' => $transaction->id, + 'reference' => $transaction->reference, + 'status' => $status, + ]); + + return [ + 'success' => false, + 'error' => 'Payment was not successful', + ]; + } + + $expectedAmount = (float) $transaction->amount * 100; + $paidAmount = (float) ($webhookData['amount'] ?? 0); + + if ($paidAmount < $expectedAmount) { + $transaction->markAsFailed(); + + Log::warning('Payment amount mismatch', [ + 'transaction_id' => $transaction->id, + 'expected' => $expectedAmount, + 'paid' => $paidAmount, + ]); + + return [ + 'success' => false, + 'error' => 'Payment amount does not match expected amount', + ]; + } + + // Credit the purchased units + $user = $transaction->user; + $user->creditCredits((float) $transaction->units); + + $transaction->markAsCompleted(); + + Log::info('Credit purchase completed', [ + 'transaction_id' => $transaction->id, + 'user_id' => $user->id, + 'units' => $transaction->units, + 'new_balance' => $user->credit_balance, + ]); + + return [ + 'success' => true, + 'message' => 'Credits added successfully', + 'transaction_id' => $transaction->id, + ]; + }, 5); + } + + /** + * Initialize payment with Paystack + */ + protected function initializePaystackPayment(User $user, Transaction $transaction, float $amount): array + { + $payload = [ + 'email' => $user->email, + 'currency' => 'NGN', + 'amount' => (int) round($amount * 100), + 'reference' => $transaction->reference, + 'callback_url' => route('subscription.payment.callback'), + ]; + + try { + $response = Http::withToken(config('services.paystack.secret')) + ->timeout(30) + ->asJson() + ->post(config('services.paystack.base_url').'/transaction/initialize', $payload); + + if ($response->successful()) { + $data = $response->json(); + + return [ + 'success' => $data['status'] ?? false, + 'message' => $data['message'] ?? 'Payment initialized', + 'data' => $data['data'] ?? [], + ]; + } + + Log::error('Paystack initialization failed', [ + 'status' => $response->status(), + 'response' => $response->json(), + ]); + + return [ + 'success' => false, + 'message' => 'Unable to initialize payment with Paystack', + 'error' => $response->json(), + ]; + } catch (\Exception $e) { + Log::error('Paystack API error', [ + 'error' => $e->getMessage(), + 'transaction_id' => $transaction->id, + ]); + + return [ + 'success' => false, + 'message' => 'Payment gateway error: '.$e->getMessage(), + ]; + } + } + + /** + * Verify payment status with Paystack + */ + public function verifyPaymentStatus(string $reference): array + { + try { + $response = Http::withToken(config('services.paystack.secret')) + ->timeout(30) + ->get(config('services.paystack.base_url').'/transaction/verify/'.$reference); + + if ($response->successful()) { + $data = $response->json(); + + return [ + 'success' => $data['status'] ?? false, + 'message' => $data['message'] ?? 'Verification complete', + 'data' => $data['data'] ?? [], + ]; + } + + return [ + 'success' => false, + 'message' => 'Unable to verify payment status', + 'error' => $response->json(), + ]; + } catch (\Exception $e) { + Log::error('Payment verification error', [ + 'reference' => $reference, + 'error' => $e->getMessage(), + ]); + + return [ + 'success' => false, + 'message' => 'Verification error: '.$e->getMessage(), + ]; + } + } + + /** + * Generate unique payment reference + */ + protected function generatePaymentReference(int $userId): string + { + return strtoupper(sprintf( + 'CRD-%s-%s-%s', + $userId, + now()->format('YmdHis'), + Str::random(6) + )); + } +} diff --git a/app/Services/DashboardService.php b/app/Services/DashboardService.php index c65fc2d..9c48c51 100644 --- a/app/Services/DashboardService.php +++ b/app/Services/DashboardService.php @@ -39,10 +39,8 @@ public function getRecentCampaigns(User $user, int $limit = 5): Collection */ public function getMessageTrends(User $user): Collection { - return cache()->remember('message_trend_'. $user->id, 600, function () use ($user) { - return CampaignLog::whereHas('campaign', fn($q) => - $q->where('user_id', $user->id) - ) + return cache()->remember('message_trend_'.$user->id, 600, function () use ($user) { + return CampaignLog::where('user_id', $user->id) ->selectRaw(" DATE(sent_at) as date, COUNT(*) as sent, diff --git a/app/Services/SenderIdService.php b/app/Services/SenderIdService.php index 118e8f9..5da2aaa 100644 --- a/app/Services/SenderIdService.php +++ b/app/Services/SenderIdService.php @@ -4,7 +4,6 @@ use App\Models\SenderId; use App\Models\User; -use App\Shared\Enums\FeaturesEnum; class SenderIdService { @@ -13,12 +12,6 @@ class SenderIdService */ public function createSenderIdApplication(array $data, User $user): SenderId { - if ($user->cantConsume(FeaturesEnum::sender->value, 1)) { - throw new \Exception('You do not have enough credits to add a sender ID.'); - } - - $user->consume(FeaturesEnum::sender->value, 1); - return SenderId::create([ 'user_id' => $user->id, 'sender_id' => $data['sender_id'], @@ -45,6 +38,7 @@ public function deleteSenderId(SenderId $senderId): void public function approveSenderId(SenderId $senderId): SenderId { $senderId->approve(); + return $senderId; } @@ -54,6 +48,7 @@ public function approveSenderId(SenderId $senderId): SenderId public function rejectSenderId(SenderId $senderId, string $reason): SenderId { $senderId->reject($reason); + return $senderId; } } diff --git a/app/Services/SettingsService.php b/app/Services/SettingsService.php deleted file mode 100644 index 73e3efc..0000000 --- a/app/Services/SettingsService.php +++ /dev/null @@ -1,55 +0,0 @@ -first(); - return $setting ? $setting->value : $default; - }); - } - - /** - * Set a setting value - */ - public function set(string $key, $value, string $type = 'string', string $group = 'general'): Setting - { - $setting = Setting::updateOrCreate( - ['key' => $key], - [ - 'value' => $value, - 'type' => $type, - 'group' => $group, - ] - ); - - Cache::forget("setting_{$key}"); - - return $setting; - } - - /** - * Get all settings for a group - */ - public function all(string $group = null) - { - $query = Setting::query(); - - if ($group) { - $query->where('group', $group); - } - - return $query->get()->mapWithKeys(function ($setting) { - return [$setting->key => $setting->value]; - }); - } -} diff --git a/app/Services/SingleSmsService.php b/app/Services/SingleSmsService.php index 3a5ecab..f476548 100644 --- a/app/Services/SingleSmsService.php +++ b/app/Services/SingleSmsService.php @@ -6,29 +6,35 @@ use App\Models\Subscriber; use App\Models\User; use App\Services\Sms\SmsService; -use App\Shared\Enums\FeaturesEnum; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\DB; class SingleSmsService { public function __construct( - private SmsService $smsService + private SmsService $smsService, + private CreditChargeService $chargeService ) {} /** - * Send a single SMS + * Send a single SMS. + * + * The wallet is validated against an estimate before sending; the actual + * charge (provider charge + markup) is deducted only after a successful + * send. */ public function sendSingleSms(array $data, User $user): array { $senderId = $data['sender_id'] ?? 'Windnotes'; $message = $data['message']; - // Calculate units needed - $unitsNeeded = determineNumberOfSms(1, $message); + $this->chargeService->withPrices(); - // Check balance - if ($user->cantConsume(FeaturesEnum::sms->value, $unitsNeeded)) { - throw new \Exception('Insufficient SMS units.'); + // Estimate parts from message length and validate the wallet + $messageParts = determineNumberOfSms(1, $message); + + if (! $this->chargeService->canSend($user, $messageParts)) { + throw new \Exception('Insufficient credits. Please top up your credit balance.'); } // Resolve phone number and subscriber @@ -36,7 +42,12 @@ public function sendSingleSms(array $data, User $user): array $subscriberId = null; if ($data['recipient_type'] === 'subscriber') { - $subscriber = Subscriber::find($data['subscriber_id']); + $subscriber = Subscriber::where('user_id', $user->id)->find($data['subscriber_id']); + + if (! $subscriber) { + throw new \Exception('Subscriber not found.'); + } + $phoneNumber = $subscriber->phone_number; $subscriberId = $subscriber->id; } else { @@ -44,27 +55,42 @@ public function sendSingleSms(array $data, User $user): array } // Send SMS - $response = $this->smsService->composeSms($phoneNumber, $message, $senderId); + $result = $this->smsService->composeSms($phoneNumber, $message, $senderId); - if (isset($response['success']) && $response['success']) { - $user->consume(FeaturesEnum::sms->value, $unitsNeeded); + if ($result->success) { + $charge = $this->chargeService->computeCharge($result->creditsCharged, $messageParts); - CampaignLog::create([ - 'user_id' => $user->id, - 'campaign_id' => null, - 'subscriber_id' => $subscriberId, - 'phone_number' => $phoneNumber, - 'message_sent' => $message, - 'status' => 'sent', - 'sent_at' => now(), - ]); + // Lock the user row so the recorded before/after balances are + // consistent with the debit, all in a single transaction. + DB::transaction(function () use ($user, $subscriberId, $phoneNumber, $message, $charge, $messageParts) { + $lockedUser = User::query()->lockForUpdate()->find($user->id); + $balanceBefore = (float) $lockedUser->credit_balance; + $balanceAfter = round($balanceBefore - $charge['credits_charged'], 2); - return ['success' => true, 'message' => 'SMS sent successfully.']; - } else { - logger()->error('Failed to send SMS', ['response' => $response]); + CampaignLog::create([ + 'user_id' => $user->id, + 'campaign_id' => null, + 'subscriber_id' => $subscriberId, + 'phone_number' => $phoneNumber, + 'message_sent' => $message, + 'provider_charge' => $charge['provider_charge'], + 'credits_charged' => $charge['credits_charged'], + 'message_parts' => $messageParts, + 'credit_balance_before' => $balanceBefore, + 'credit_balance_after' => $balanceAfter, + 'status' => 'sent', + 'sent_at' => now(), + ]); - throw new \Exception('Failed to send SMS, please try again later'); + $lockedUser->decrement('credit_balance', $charge['credits_charged']); + }); + + return ['success' => true, 'message' => 'SMS sent successfully.']; } + + logger()->error('Failed to send SMS', ['error' => $result->error]); + + throw new \Exception('Failed to send SMS, please try again later'); } /** @@ -73,9 +99,9 @@ public function sendSingleSms(array $data, User $user): array public function searchSubscribers(string $query, User $user): Collection { return Subscriber::where('user_id', $user->id) - ->where(function($q) use ($query) { + ->where(function ($q) use ($query) { $q->where('name', 'like', "%{$query}%") - ->orWhere('phone_number', 'like', "%{$query}%"); + ->orWhere('phone_number', 'like', "%{$query}%"); }) ->limit(20) ->get(['id', 'name', 'phone_number']); diff --git a/app/Services/Sms/Dto/SmsDeliveryResult.php b/app/Services/Sms/Dto/SmsDeliveryResult.php new file mode 100644 index 0000000..4d64bde --- /dev/null +++ b/app/Services/Sms/Dto/SmsDeliveryResult.php @@ -0,0 +1,85 @@ +sessionCookie = "__Secure-bulksms.mtn.ng.session-token=" . ($cachedToken ?? config('services.mtn_bulksms.session_cookie')); + $this->sessionCookie = '__Secure-bulksms.mtn.ng.session-token='.($cachedToken ?? config('services.mtn_bulksms.session_cookie')); } private function getHeaders(): array { return [ 'Accept: application/json', - 'Cookie: ' . $this->sessionCookie, + 'Cookie: '.$this->sessionCookie, 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', ]; } @@ -53,6 +55,10 @@ private function makeRequest(string $method, string $endpoint, array $payload = $response = curl_exec($ch); $error = curl_error($ch); $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); + + $header = $headerSize > 0 ? substr($response, 0, $headerSize) : ''; + $body = $headerSize > 0 ? substr($response, $headerSize) : $response; curl_close($ch); @@ -60,10 +66,6 @@ private function makeRequest(string $method, string $endpoint, array $payload = throw new Exception("cURL error: {$error}"); } - $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); - $header = substr($response, 0, $headerSize); - $body = substr($response, $headerSize); - if (preg_match('/__Secure-bulksms\.mtn\.ng\.session-token=([^;]+)/', $header, $matches)) { $token = $matches[1]; Cache::put('mtn_session_token', $token, now()->addHours(6)); @@ -72,13 +74,13 @@ private function makeRequest(string $method, string $endpoint, array $payload = $decoded = json_decode($body, true); if ($statusCode < 200 || $statusCode >= 300) { - throw new Exception("HTTP {$statusCode}: " . ($response ?: 'No response')); + throw new Exception("HTTP {$statusCode}: ".($response ?: 'No response')); } return $decoded ?? []; } - public function send(array|string $phoneNumbers, string $message, string $senderId): array + public function send(array|string $phoneNumbers, string $message, string $senderId): SmsDeliveryResult { try { $msisdnsString = is_array($phoneNumbers) ? implode(',', $phoneNumbers) : $phoneNumbers; @@ -91,15 +93,17 @@ public function send(array|string $phoneNumbers, string $message, string $sender 'message' => $message, 'selectType' => 'manually', 'sendSmsType' => 'now', - 'selectDateAndTime' => now()->subMinutes(55)->toDateTimeLocalString() . 'Z', + 'selectDateAndTime' => now()->subMinutes(55)->toDateTimeLocalString().'Z', ]; $data = $this->makeRequest('POST', '/v1/sms/compose-sms', $payload); Log::info('✅ SMS sent successfully (MTN)', ['data' => $data]); - return ['success' => true, 'data' => $data]; + + return SmsDeliveryResult::fromArray($data, true); } catch (Exception $e) { Log::error('❌ Failed to send SMS (MTN)', ['error' => $e->getMessage()]); - return ['success' => false, 'error' => $e->getMessage()]; + + return SmsDeliveryResult::failure($e->getMessage()); } } @@ -133,7 +137,7 @@ public function pingSession(): ?array $response = curl_exec($ch); if ($response === false) { - throw new Exception("cURL error: " . curl_error($ch)); + throw new Exception('cURL error: '.curl_error($ch)); } $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); @@ -152,6 +156,7 @@ public function pingSession(): ?array // ✅ Parse and return JSON body $decoded = json_decode($body, true); + return $decoded ?? []; } catch (Exception $e) { return null; @@ -170,11 +175,13 @@ public function fetchSenderIds(): ?array return cache()->remember($cacheKey, $ttl, function () { $data = $this->makeRequest('GET', '/messages/fetchSenderIds'); Log::info('✅ Sender IDs retrieved from API and cached', ['data' => $data]); + return $data; }); } catch (Exception $e) { Log::error('❌ Failed to fetch sender IDs', ['error' => $e->getMessage()]); + return null; } } @@ -182,20 +189,23 @@ public function fetchSenderIds(): ?array /** * Get sms bundle */ - public function getSmsBundle(): ?array { + public function getSmsBundle(): ?array + { try { $payload = []; $data = $this->makeRequest('POST', '/v1/sms/compose-sms', $payload); Log::info('✅ SMS bundle gotten successfully', ['data' => $data]); + return ['success' => true, 'data' => $data]; } catch (Exception $e) { $result = [ 'error' => $e->getMessage(), - 'message' => "Error getting sms bundle", + 'message' => 'Error getting sms bundle', ]; Log::error('❌ Failed to get sms bundle', $result); + return $result; } } diff --git a/app/Services/Sms/Providers/SmsLive247Provider.php b/app/Services/Sms/Providers/SmsLive247Provider.php index 4615150..e329482 100644 --- a/app/Services/Sms/Providers/SmsLive247Provider.php +++ b/app/Services/Sms/Providers/SmsLive247Provider.php @@ -3,47 +3,47 @@ namespace App\Services\Sms\Providers; use App\Interfaces\SmsProviderInterface; +use App\Services\Sms\Dto\SmsDeliveryResult; +use Exception; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; -use Exception; class SmsLive247Provider implements SmsProviderInterface { - private string $baseUrl = 'https://api.smslive247.com/api/v4'; + private string $baseUrl = 'https://api.smslive247.com/api/v5'; public function __construct( private string $apiKey ) {} - public function send(array|string $phoneNumbers, string $message, string $senderId): array + public function send(array|string $phoneNumbers, string $message, string $senderId): SmsDeliveryResult { try { $msisdns = is_array($phoneNumbers) ? $phoneNumbers : explode(',', $phoneNumbers); - // Ensure numbers are in international format without + - // SMSLive247 might expect specific format, usually 234... - // Assuming formatPhoneNumber helper handles basic cleaning, but might need adjustment. - $response = Http::withHeaders([ - 'Authorization' => 'Bearer ' . $this->apiKey, + 'Authorization' => 'Bearer '.$this->apiKey, 'Content-Type' => 'application/json', 'Accept' => 'application/json', - ])->post("{$this->baseUrl}/sms", [ + ])->post("{$this->baseUrl}/sms/batch", [ 'senderID' => $senderId, 'messageText' => $message, - 'mobileNumber' => implode(',', $msisdns), + 'phoneNumbers' => array_values($msisdns), ]); + $body = $response->json() ?? []; + if ($response->successful()) { - Log::info('✅ SMS sent successfully (SMSLive247)', ['data' => $response->json()]); - return ['success' => true, 'data' => $response->json()]; + Log::info('✅ SMS sent successfully (SMSLive247)', ['data' => $body]); + + return SmsDeliveryResult::fromArray($response->json('data') ?? $body, true); } throw new Exception($response->body()); - } catch (Exception $e) { Log::error('❌ Failed to send SMS (SMSLive247)', ['error' => $e->getMessage()]); - return ['success' => false, 'error' => $e->getMessage()]; + + return SmsDeliveryResult::failure($e->getMessage()); } } @@ -51,17 +51,24 @@ public function getBalance(): array { try { $response = Http::withHeaders([ - 'Authorization' => 'Bearer ' . $this->apiKey, + 'Authorization' => 'Bearer '.$this->apiKey, 'Accept' => 'application/json', - ])->get("{$this->baseUrl}/account"); + ])->get("{$this->baseUrl}/accounts/self"); if ($response->successful()) { - return ['success' => true, 'data' => $response->json()]; + $data = $response->json('data') ?? []; + + return [ + 'success' => true, + 'balance' => $data['credits'] ?? null, + 'data' => $data, + ]; } throw new Exception($response->body()); } catch (Exception $e) { Log::error('❌ Failed to get balance (SMSLive247)', ['error' => $e->getMessage()]); + return ['success' => false, 'error' => $e->getMessage()]; } } diff --git a/app/Services/Sms/SmsService.php b/app/Services/Sms/SmsService.php index d809f32..bf89792 100644 --- a/app/Services/Sms/SmsService.php +++ b/app/Services/Sms/SmsService.php @@ -3,30 +3,27 @@ namespace App\Services\Sms; use App\Interfaces\SmsProviderInterface; -use App\Services\SettingsService; +use App\Models\AppSettings; +use App\Models\AppSettingsEnum; +use App\Services\Sms\Dto\SmsDeliveryResult; use App\Services\Sms\Providers\MtnSmsProvider; use App\Services\Sms\Providers\SmsLive247Provider; -use Exception; class SmsService { - public function __construct( - private SettingsService $settingsService - ) {} - /** * Resolve the active SMS provider */ public function resolveProvider(): SmsProviderInterface { - $provider = $this->settingsService->get('sms_provider', 'mtn'); + $provider = AppSettings::get(AppSettingsEnum::SMS_PROVIDER); return match ($provider) { 'smslive247' => new SmsLive247Provider( - $this->settingsService->get('smslive247_api_key', '') + AppSettings::get(AppSettingsEnum::SMSLIVE247_API_KEY) ), - 'mtn' => new MtnSmsProvider(), - default => new MtnSmsProvider(), + 'mtn' => new MtnSmsProvider, + default => new MtnSmsProvider, }; } @@ -37,7 +34,7 @@ public function composeSms( string|array $msisdns, string $message, string $senderId - ): array { + ): SmsDeliveryResult { return $this->resolveProvider()->send($msisdns, $message, $senderId); } diff --git a/app/Services/SpintaxService.php b/app/Services/SpintaxService.php index f4245a3..ae538c7 100644 --- a/app/Services/SpintaxService.php +++ b/app/Services/SpintaxService.php @@ -34,7 +34,7 @@ public function validate(string $text): bool // Check if there are options inside braces if (preg_match_all('/{([^{}]*)}/', $text, $matches)) { foreach ($matches[1] as $content) { - if (!str_contains($content, '|')) { + if (! str_contains($content, '|')) { return false; } } @@ -55,7 +55,7 @@ public function generateVariations(string $text, int $count = 100): array while (count($variations) < $count && $attempts < $maxAttempts) { $variation = $this->process($text); logger()->info($variation); - if (!in_array($variation, $variations)) { + if (! in_array($variation, $variations)) { $variations[] = $variation; } $attempts++; @@ -66,16 +66,14 @@ public function generateVariations(string $text, int $count = 100): array /** * Recursively expands a spintax string into all possible variations. - * - * @param string $spintax - * @return array */ - public function expandSpintax(string $spintax): array { + public function expandSpintax(string $spintax): array + { // Regular expression to match the innermost {...} block $pattern = '/\{([^{}]*)\}/'; // If no more braces, return the string itself - if (!preg_match($pattern, $spintax)) { + if (! preg_match($pattern, $spintax)) { return [$spintax]; } @@ -101,12 +99,10 @@ public function expandSpintax(string $spintax): array { return $results; } - /** * Expand spintax and return a random sample with total possible combinations. * - * @param string $spintax - * @param int $sampleLimit Number of variations to return + * @param int $sampleLimit Number of variations to return * @return array ['sample' => [...], 'total' => int] */ public function spintaxOverview(string $spintax, int $sampleLimit = 100): array @@ -114,7 +110,7 @@ public function spintaxOverview(string $spintax, int $sampleLimit = 100): array // Recursive function to count total variations $countVariations = function ($text) use (&$countVariations) { - if (!preg_match('/\{([^{}]*)\}/', $text, $matches)) { + if (! preg_match('/\{([^{}]*)\}/', $text, $matches)) { return 1; } $options = explode('|', $matches[1]); @@ -123,16 +119,16 @@ public function spintaxOverview(string $spintax, int $sampleLimit = 100): array $newText = preg_replace('/\{([^{}]*)\}/', $option, $text, 1); $total += $countVariations($newText); } + return $total; }; - $total = $countVariations($spintax); logger()->info("total: $total"); return [ 'sample' => $this->generateVariations($spintax, $sampleLimit), - 'total' => $total + 'total' => $total, ]; } } diff --git a/app/Services/SubscriberService.php b/app/Services/SubscriberService.php index e5bc30b..49f3061 100644 --- a/app/Services/SubscriberService.php +++ b/app/Services/SubscriberService.php @@ -5,10 +5,9 @@ use App\Jobs\ImportSubscribersJob; use App\Models\Subscriber; use App\Models\User; -use App\Shared\Enums\FeaturesEnum; use Illuminate\Http\UploadedFile; -use Illuminate\Support\Collection; use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Str; use League\Csv\Reader; class SubscriberService @@ -18,27 +17,21 @@ class SubscriberService */ public function createSubscribers(array $phoneNumbers, User $user, ?string $name = null, ?array $tagIds = null): int { - // Validate feature consumption - $numberOfContacts = count($phoneNumbers); - if ($user->cantConsume(FeaturesEnum::contacts->value, $numberOfContacts)) { - throw new \Exception('You do not have enough credits to add this number of contacts.'); - } - - $user->consume(FeaturesEnum::contacts->value, $numberOfContacts); - $imported = 0; if (count($phoneNumbers) > 1) { foreach ($phoneNumbers as $phoneNumber) { $formattedPhoneNumber = formatPhoneNumber($phoneNumber); - if (strlen($formattedPhoneNumber) != 11) continue; + if (strlen($formattedPhoneNumber) != 11) { + continue; + } $subscriber = Subscriber::updateOrCreate([ 'phone_number' => $formattedPhoneNumber, - 'user_id' => $user->id + 'user_id' => $user->id, ]); - if (!empty($tagIds)) { + if (! empty($tagIds)) { $subscriber->tags()->sync($tagIds, false); } $imported++; @@ -47,12 +40,12 @@ public function createSubscribers(array $phoneNumbers, User $user, ?string $name $phone = $phoneNumbers[0]; $subscriber = Subscriber::updateOrCreate([ 'user_id' => $user->id, - 'phone_number' => formatPhoneNumber($phone) + 'phone_number' => formatPhoneNumber($phone), ], [ - 'name' => $name ?? null + 'name' => $name ?? null, ]); - if (!empty($tagIds)) { + if (! empty($tagIds)) { $subscriber->tags()->sync($tagIds, false); } $imported = 1; @@ -100,7 +93,7 @@ public function bulkImport(UploadedFile $file, User $user, ?array $tagIds = null $hasPhoneNumber = in_array('phone_number', $headers); $hasPhone = in_array('phone', $headers); - if (!$hasPhoneNumber && !$hasPhone) { + if (! $hasPhoneNumber && ! $hasPhone) { throw new \Exception('CSV file must contain either "phone_number" or "phone" column header.'); } @@ -111,16 +104,9 @@ public function bulkImport(UploadedFile $file, User $user, ?array $tagIds = null throw new \Exception('CSV file is empty or contains no valid records.'); } - // Check feature consumption - if ($user->cantConsume(FeaturesEnum::contacts->value, $totalRecords)) { - throw new \Exception('You do not have enough credits to add this number of contacts.'); - } - - $user->consume(FeaturesEnum::contacts->value, $totalRecords); - // For large files, process in background if ($totalRecords > 500) { - $filename = 'imports/' . uniqid() . '_' . $file->getClientOriginalName(); + $filename = 'imports/'.Str::random(40).'.csv'; Storage::put($filename, file_get_contents($file->getRealPath())); ImportSubscribersJob::dispatch($user->id, $filename, $tagIds ?? []); @@ -128,7 +114,7 @@ public function bulkImport(UploadedFile $file, User $user, ?array $tagIds = null return [ 'background' => true, 'total' => $totalRecords, - 'message' => "Your import of {$totalRecords} subscribers has been queued and will be processed in the background." + 'message' => "Your import of {$totalRecords} subscribers has been queued and will be processed in the background.", ]; } @@ -151,6 +137,7 @@ private function processImportRecords(array $records, User $user, ?array $tagIds if (empty($phoneNumber)) { $skipped++; + continue; } @@ -158,6 +145,7 @@ private function processImportRecords(array $records, User $user, ?array $tagIds if (empty($phoneNumber)) { $skipped++; + continue; } @@ -166,13 +154,13 @@ private function processImportRecords(array $records, User $user, ?array $tagIds 'phone_number' => $phoneNumber, ]); - if (!empty($tagIds)) { + if (! empty($tagIds)) { $subscriber->tags()->syncWithoutDetaching($tagIds); } $imported++; } catch (\Exception $e) { - $errors[] = "Row " . ($index + 2) . ": " . $e->getMessage(); + $errors[] = 'Row '.($index + 2).': '.$e->getMessage(); } } diff --git a/app/Services/SubscriptionPaymentService.php b/app/Services/SubscriptionPaymentService.php deleted file mode 100644 index 83102b8..0000000 --- a/app/Services/SubscriptionPaymentService.php +++ /dev/null @@ -1,587 +0,0 @@ -getPlanPrice($plan->name); - $extraSmsPrice = $this->getExtraSmsPrice($plan->name); - $extraSmsCost = $extraSmsUnits * $extraSmsPrice; - $totalAmount = $planPrice + $extraSmsCost; - - // Check for existing pending transaction - $existingTransaction = Transaction::where('user_id', $user->id) - ->where('status', 'pending') - ->where('type', $type) - ->where('amount', $totalAmount) - ->first(); - - if ($existingTransaction) { - // Verify if payment was actually successful - $verificationResult = $this->verifyPaymentStatus($existingTransaction->reference); - - if ($verificationResult['success'] && $verificationResult['data']['status'] === 'success') { - // Payment was successful but webhook might have failed - $this->processPaymentWebhook($verificationResult); - - return [ - 'success' => false, - 'message' => 'This payment has already been completed successfully.', - 'transaction_id' => $existingTransaction->id - ]; - } - } - - return DB::transaction(function () use ($user, $plan, $extraSmsUnits, $totalAmount, $type, $planPrice, $extraSmsCost) { - // Generate unique payment reference - $reference = $this->generatePaymentReference($user->id, $type); - - // Create transaction record - $transaction = Transaction::create([ - 'user_id' => $user->id, - 'type' => $type, - 'amount' => $totalAmount, - 'description' => $this->getTransactionDescription($plan->name, $type, $extraSmsUnits), - 'status' => 'pending', - 'payment_method' => 'paystack', - 'reference' => $reference, - 'metadata' => [ - 'plan_id' => $plan->id, - 'plan_name' => $plan->name, - 'plan_price' => $planPrice, - 'extra_sms_units' => $extraSmsUnits, - 'extra_sms_cost' => $extraSmsCost, - 'payment_type' => $type - ] - ]); - - // Initialize payment with Paystack - $paystackResponse = $this->initializePaystackPayment($user, $transaction, $totalAmount); - - if (!$paystackResponse['success']) { - // Mark transaction as failed - $transaction->update(['status' => 'failed']); - - throw new \Exception($paystackResponse['message'] ?? 'Unable to initialize payment'); - } - - Log::info('Subscription payment initialized', [ - 'user_id' => $user->id, - 'transaction_id' => $transaction->id, - 'plan' => $plan->name, - 'amount' => $totalAmount, - 'reference' => $reference, - 'type' => $type - ]); - - return [ - 'success' => true, - 'transaction_id' => $transaction->id, - 'reference' => $reference, - 'authorization_url' => $paystackResponse['data']['authorization_url'], - 'access_code' => $paystackResponse['data']['access_code'], - 'amount' => $totalAmount, - 'plan' => $plan->name - ]; - }); - } - - /** - * Process Paystack webhook for subscription payment - * - * TODO: Make this a job - */ - public function processPaymentWebhook(array $payload): array - { - $reference = $payload['data']['reference'] ?? null; - - if (!$reference) { - Log::error('Webhook received without reference', ['payload' => $payload]); - return [ - 'success' => false, - 'error' => 'Invalid webhook payload: missing reference' - ]; - } - - $transaction = Transaction::where('reference', $reference) - ->where('status', 'pending') - ->first(); - - if (!$transaction) { - Log::warning('Transaction not found or already processed', ['reference' => $reference]); - return [ - 'success' => false, - 'error' => 'Transaction not found or already processed' - ]; - } - - return DB::transaction(function () use ($transaction, $payload) { - $webhookData = $payload['data']; - - // Verify payment details - $expectedAmount = $transaction->amount * 100; // Convert to kobo - $paidAmount = $webhookData['amount'] ?? 0; - $status = $webhookData['status'] ?? ''; - - if ($status !== 'success') { - $transaction->update([ - 'status' => 'failed', - 'metadata' => array_merge($transaction->metadata ?? [], [ - 'webhook_data' => $webhookData, - 'failure_reason' => 'Payment not successful' - ]) - ]); - - Log::warning('Payment failed', [ - 'transaction_id' => $transaction->id, - 'reference' => $transaction->reference, - 'status' => $status - ]); - - return [ - 'success' => false, - 'error' => 'Payment was not successful' - ]; - } - - if ($paidAmount < $expectedAmount) { - $transaction->update([ - 'status' => 'failed', - 'metadata' => array_merge($transaction->metadata ?? [], [ - 'webhook_data' => $webhookData, - 'failure_reason' => 'Amount mismatch', - 'expected_amount' => $expectedAmount, - 'paid_amount' => $paidAmount - ]) - ]); - - Log::warning('Payment amount mismatch', [ - 'transaction_id' => $transaction->id, - 'expected' => $expectedAmount, - 'paid' => $paidAmount - ]); - - return [ - 'success' => false, - 'error' => 'Payment amount does not match expected amount' - ]; - } - - // Payment is valid, process based on transaction type - $user = $transaction->user; - $metadata = $transaction->metadata; - $paymentType = $metadata['payment_type'] ?? 'subscription'; - - // Handle different payment types - match ($paymentType){ - 'extra_sms' => $this->processExtraSmsUnits($user, $metadata), - 'renewal' => $this->processRenewal($user, $metadata), - default => $this->processNewSubscription($user, $metadata), - }; - - // Update transaction status - $transaction->update([ - 'status' => 'completed', - 'metadata' => array_merge($metadata, [ - 'webhook_data' => $webhookData, - 'processed_at' => now()->toISOString() - ]) - ]); - - Log::info('Payment processed successfully', [ - 'transaction_id' => $transaction->id, - 'user_id' => $user->id, - 'type' => $paymentType - ]); - - return [ - 'success' => true, - 'message' => 'Payment processed successfully', - 'transaction_id' => $transaction->id - ]; - }, 5); - } - - /** - * Process extra SMS units purchase - */ - protected function processExtraSmsUnits(User $user, array $metadata): void - { - $units = $metadata['units'] ?? 0; - - if ($units <= 0) { - throw new \Exception('Invalid SMS units amount'); - } - - // Credit the SMS units - $user->giveTicketFor('sms-units', charges: intval($units)); - - Log::info('Extra SMS units credited', [ - 'user_id' => $user->id, - 'units' => $units, - 'new_balance' => $user->balance('sms-units') - ]); - } - - /** - * Process new subscription - */ - public function processNewSubscription(User $user, array $metadata): void - { - $plan = Plan::find($metadata['plan_id']); - if (!$plan) { - throw new \Exception('Plan not found'); - } - - $existingSubscription = $user->subscription; - $isSwitching = $existingSubscription && !$existingSubscription->expired(); - $currentSmsBalance = $user->balance('sms-units'); - - Log::info('Processing subscription', [ - 'user_id' => $user->id, - 'is_switching' => $isSwitching, - 'current_balance' => $currentSmsBalance, - 'new_plan' => $plan->name - ]); - - // Cancel existing subscription if any and switch/subscribe - if ($isSwitching) { - // CRITICAL: Don't use switchTo() - it carries over consumption! - // Instead, we'll manually cancel and create a new subscription - - // Step 1: Cancel the old subscription - $existingSubscription->suppress(); - - // Step 2: Create a completely new subscription (fresh start) - $user->subscribeTo($plan); - - // Step 3: Add the old balance on top of the new plan's allocation - if ($currentSmsBalance > 0) { - $smsFeature = $user->getFeature('sms-units'); - // clear all consumptions yet to expire also - $user->featureConsumptions()->where('feature_id', $smsFeature->id) - ->whereDate('expired_at', '>=', now())->update(['expired_at' => now()]); - // make all feature tickets expire. - $user->featureTickets()->where('feature_id', $smsFeature->id) - ->whereNull('expired_at')->update(['expired_at' => now()]); - // start a new ticket - $user->giveTicketFor('sms-units', charges: intval($currentSmsBalance)); - - Log::info('Restored SMS balance after plan change', [ - 'user_id' => $user->id, - 'restored_balance' => $currentSmsBalance - ]); - } - } else { - $user->subscribeTo($plan); - } - - // Credit extra SMS units if purchased - $extraSmsUnits = $metadata['extra_sms_units'] ?? 0; - if ($extraSmsUnits > 0) { - $user->giveTicketFor('sms-units', charges: intval($extraSmsUnits)); - } - - $finalBalance = $user->balance('sms-units'); - - Log::info('New subscription activated', [ - 'user_id' => $user->id, - 'plan' => $plan->name, - 'extra_sms_units' => $extraSmsUnits, - 'previous_balance' => $currentSmsBalance, - 'final_balance' => $finalBalance - ]); - } - - /** - * Process subscription renewal - */ - protected function processRenewal(User $user, array $metadata): void - { - $subscription = $user->subscription; - - $plan = Plan::find($metadata['plan_id']); - if (!$plan) { - throw new \Exception('Plan not found'); - } - - if (!$subscription) { - throw new \Exception('No subscription found to renew'); - } - - // Renew the subscription - $subscription->renew(); - - // Credit plan SMS units (renewal restores the plan's SMS allocation) - $smsFeature = $plan->features()->where('name', 'sms-units')->first(); - if ($smsFeature) { - $planSmsUnits = $smsFeature->pivot->charges ?? 0; - if ($planSmsUnits > 0) { - $user->giveTicketFor('sms-units', charges: intval($planSmsUnits)); - } - } - - Log::info('Subscription renewed', [ - 'user_id' => $user->id, - 'plan' => $plan->name, - 'subscription_id' => $subscription->id - ]); - } - - /** - * Initialize payment with Paystack - */ - protected function initializePaystackPayment(User $user, Transaction $transaction, float $amount): array - { - $payload = [ - 'email' => $user->email, - 'currency' => 'NGN', - 'amount' => $amount * 100, // Convert to kobo - 'reference' => $transaction->reference, - 'callback_url' => route('subscription.payment.callback'), - 'metadata' => [ - 'transaction_id' => $transaction->id, - 'user_id' => $user->id, - 'custom_fields' => [ - [ - 'display_name' => 'User Name', - 'variable_name' => 'user_name', - 'value' => $user->name - ], - [ - 'display_name' => 'Transaction Type', - 'variable_name' => 'transaction_type', - 'value' => $transaction->type - ] - ] - ] - ]; - - try { - $response = Http::withToken(config('services.paystack.secret')) - ->timeout(30) - ->asJson() - ->post(config('services.paystack.base_url') . '/transaction/initialize', $payload); - - if ($response->successful()) { - $data = $response->json(); - return [ - 'success' => $data['status'] ?? false, - 'message' => $data['message'] ?? 'Payment initialized', - 'data' => $data['data'] ?? [] - ]; - } - - Log::error('Paystack initialization failed', [ - 'status' => $response->status(), - 'response' => $response->json() - ]); - - return [ - 'success' => false, - 'message' => 'Unable to initialize payment with Paystack', - 'error' => $response->json() - ]; - } catch (\Exception $e) { - Log::error('Paystack API error', [ - 'error' => $e->getMessage(), - 'transaction_id' => $transaction->id - ]); - - return [ - 'success' => false, - 'message' => 'Payment gateway error: ' . $e->getMessage() - ]; - } - } - - /** - * Verify payment status with Paystack - */ - public function verifyPaymentStatus(string $reference): array - { - try { - $response = Http::withToken(config('services.paystack.secret')) - ->timeout(30) - ->get(config('services.paystack.base_url') . '/transaction/verify/' . $reference); - - if ($response->successful()) { - $data = $response->json(); - return [ - 'success' => $data['status'] ?? false, - 'message' => $data['message'] ?? 'Verification complete', - 'data' => $data['data'] ?? [] - ]; - } - - return [ - 'success' => false, - 'message' => 'Unable to verify payment status', - 'error' => $response->json() - ]; - } catch (\Exception $e) { - Log::error('Payment verification error', [ - 'reference' => $reference, - 'error' => $e->getMessage() - ]); - - return [ - 'success' => false, - 'message' => 'Verification error: ' . $e->getMessage() - ]; - } - } - - /** - * Generate unique payment reference - */ - protected function generatePaymentReference(int $userId, string $type): string - { - $prefix = match ($type) { - 'renewal' => 'REN', - 'extra_sms' => 'SMS', - default => 'SUB', - }; - - return strtoupper(sprintf( - '%s-%s-%s-%s', - $prefix, - $userId, - now()->format('YmdHis'), - Str::random(6) - )); - } - - /** - * Get transaction description - */ - protected function getTransactionDescription(string $planName, string $type, int $extraUnits): string - { - $action = $type === 'renewal' ? 'Renewal of' : 'Subscription to'; - $description = "{$action} {$planName} plan"; - - if ($extraUnits > 0) { - $description .= " + {$extraUnits} extra SMS units"; - } - - return $description; - } - - /** - * Get plan price - * // TODO: make this reside in the data base and use across the application - */ - protected function getPlanPrice(string $planName): float - { - $prices = [ - 'free' => 0, - 'pro' => 4998.98, - 'pro-yearly' => 4998.98 * 12 * 0.85, - 'business' => 9997.99, - 'business-yearly' => 9997.99 * 12 * 0.85, - 'enterprise' => 19995.99, - 'enterprise-yearly' => 19995.99 * 12 * 0.85, - ]; - - return $prices[$planName] ?? 0; - } - - /** - * Get extra SMS price based on user's plan - */ - protected function getExtraSmsPrice(string $planName): float - { - $prices = [ - 'starter' => 5.0, - 'starter-yearly' => 5.0, - 'pro' => 4.95, - 'pro-yearly' => 4.95, - 'business' => 4.8, - 'business-yearly' => 4.8, - 'enterprise' => 4.7, - 'enterprise-yearly' => 4.7, - ]; - - return $prices[$planName] ?? 5.0; - } - - /** - * Buy extra SMS units (separate from subscription) - */ - public function initializeExtraUnitsPayment(User $user, int $units): array - { - $subscription = $user->subscription; - - if (!$subscription || $subscription->expired()) { - return [ - 'success' => false, - 'message' => 'You must have an active subscription to purchase extra SMS units.' - ]; - } - - $pricePerUnit = $this->getExtraSmsPrice($subscription->plan->name); - $totalAmount = $units * $pricePerUnit; - - return DB::transaction(function () use ($user, $units, $totalAmount, $pricePerUnit) { - $reference = $this->generatePaymentReference($user->id, 'extra_sms'); - - $transaction = Transaction::create([ - 'user_id' => $user->id, - 'type' => 'extra_sms', - 'amount' => $totalAmount, - 'description' => "Purchase of {$units} extra SMS units", - 'status' => 'pending', - 'payment_method' => 'paystack', - 'reference' => $reference, - 'metadata' => [ - 'units' => $units, - 'price_per_unit' => $pricePerUnit, - 'payment_type' => 'extra_sms' - ] - ]); - - $paystackResponse = $this->initializePaystackPayment($user, $transaction, $totalAmount); - - if (!$paystackResponse['success']) { - $transaction->update(['status' => 'failed']); - throw new \Exception($paystackResponse['message'] ?? 'Unable to initialize payment'); - } - - Log::info('Extra SMS units payment initialized', [ - 'user_id' => $user->id, - 'transaction_id' => $transaction->id, - 'units' => $units, - 'amount' => $totalAmount, - 'reference' => $reference - ]); - - return [ - 'success' => true, - 'transaction_id' => $transaction->id, - 'reference' => $reference, - 'authorization_url' => $paystackResponse['data']['authorization_url'], - 'access_code' => $paystackResponse['data']['access_code'], - 'amount' => $totalAmount, - 'units' => $units - ]; - }); - } -} diff --git a/app/Services/TagService.php b/app/Services/TagService.php index 449ac19..066717c 100644 --- a/app/Services/TagService.php +++ b/app/Services/TagService.php @@ -4,7 +4,6 @@ use App\Models\Tag; use App\Models\User; -use App\Shared\Enums\FeaturesEnum; class TagService { @@ -13,12 +12,6 @@ class TagService */ public function createTag(array $data, User $user): Tag { - if ($user->cantConsume(FeaturesEnum::tags->value, 1)) { - throw new \Exception('You do not have enough credits to add a new tag.'); - } - - $user->consume(FeaturesEnum::tags->value, 1); - return Tag::create([ 'user_id' => $user->id, 'name' => $data['name'], @@ -32,6 +25,7 @@ public function createTag(array $data, User $user): Tag public function updateTag(Tag $tag, array $data): Tag { $tag->update($data); + return $tag; } diff --git a/app/Shared/Enums/FeaturesEnum.php b/app/Shared/Enums/FeaturesEnum.php deleted file mode 100644 index 36ed484..0000000 --- a/app/Shared/Enums/FeaturesEnum.php +++ /dev/null @@ -1,33 +0,0 @@ - $case->value, self::cases()); - } - - /** - * Get all names of the enum as an array. - * - * @return array - */ - public static function names(): array - { - return array_map(fn(self $case) => $case->name, self::cases()); - } -} diff --git a/bootstrap/app.php b/bootstrap/app.php index e322c61..5577a03 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -22,10 +22,13 @@ HandleAppearance::class, HandleInertiaRequests::class, AddLinkHeadersForPreloadedAssets::class, + \App\Http\Middleware\ThrottleForgotPassword::class, ]); $middleware->alias([ 'admin' => \App\Http\Middleware\AdminMiddleware::class, + 'admin.two-factor' => \App\Http\Middleware\RequireAdminTwoFactor::class, + 'throttle.forgot-password' => \App\Http\Middleware\ThrottleForgotPassword::class, 'paystack.webhook' => \App\Http\Middleware\VerifyPaystackWebhook::class, ]); }) diff --git a/composer.json b/composer.json index d23996b..66d0a52 100644 --- a/composer.json +++ b/composer.json @@ -16,8 +16,8 @@ "laravel/tinker": "^2.10.1", "laravel/wayfinder": "^0.1.9", "league/csv": "^9.27", - "lucasdotvin/laravel-soulbscription": "^4.3", - "openai-php/laravel": "^0.17.1" + "openai-php/laravel": "^0.17.1", + "timadey/laravel-lazy-settings": "^0.1.0" }, "require-dev": { "fakerphp/faker": "^1.23", diff --git a/composer.lock b/composer.lock index 0f01588..ecdd7df 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0af83f247f805e52f5e93f998abf071a", + "content-hash": "ac6cec7e50274fe1ca66ccf50cdbb898", "packages": [ { "name": "bacon/bacon-qr-code", @@ -2402,75 +2402,6 @@ ], "time": "2024-12-08T08:18:47+00:00" }, - { - "name": "lucasdotvin/laravel-soulbscription", - "version": "4.3.2", - "source": { - "type": "git", - "url": "https://github.com/lucasdotvin/laravel-soulbscription.git", - "reference": "55c47f7b7ff547582ed598a9a06fe45eefd6ebbd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lucasdotvin/laravel-soulbscription/zipball/55c47f7b7ff547582ed598a9a06fe45eefd6ebbd", - "reference": "55c47f7b7ff547582ed598a9a06fe45eefd6ebbd", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0", - "php": "^8.0|^8.1|^8.2" - }, - "require-dev": { - "orchestra/testbench": "^6.22|^7.0|^8.0|^9.0|^10.0", - "phpunit/phpunit": "^9.5|^10.0|^11.5.3", - "squizlabs/php_codesniffer": "*" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": [], - "providers": [ - "LucasDotVin\\Soulbscription\\SoulbscriptionServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LucasDotVin\\Soulbscription\\": "src", - "LucasDotVin\\Soulbscription\\Database\\Factories\\": "database/factories" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lucas Vinicius", - "email": "lucasvinicius211@yahoo.com", - "role": "Developer" - } - ], - "description": "A straightforward interface to handle subscriptions and features consumption.", - "homepage": "https://github.com/lucasdotvin/laravel-soulbscription", - "keywords": [ - "laravel", - "laravel-soulbscription", - "lucasdotvin", - "subscriptions" - ], - "support": { - "issues": "https://github.com/lucasdotvin/laravel-soulbscription/issues", - "source": "https://github.com/lucasdotvin/laravel-soulbscription/tree/4.3.2" - }, - "funding": [ - { - "url": "https://github.com/lucasdotvin", - "type": "github" - } - ], - "time": "2025-07-24T23:23:02+00:00" - }, { "name": "monolog/monolog", "version": "3.9.0", @@ -6754,6 +6685,70 @@ }, "time": "2024-12-21T16:25:41+00:00" }, + { + "name": "timadey/laravel-lazy-settings", + "version": "0.1.0", + "source": { + "type": "git", + "url": "https://github.com/Timadey/laravel-lazy-settings.git", + "reference": "da61daf7b1828c0e97a4ab601049c5139bdcaf23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Timadey/laravel-lazy-settings/zipball/da61daf7b1828c0e97a4ab601049c5139bdcaf23", + "reference": "da61daf7b1828c0e97a4ab601049c5139bdcaf23", + "shasum": "" + }, + "require": { + "illuminate/cache": "^10.0|^11.0|^12.0", + "illuminate/console": "^10.0|^11.0|^12.0", + "illuminate/contracts": "^10.0|^11.0|^12.0", + "illuminate/database": "^10.0|^11.0|^12.0", + "illuminate/encryption": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "php": "^8.2" + }, + "require-dev": { + "orchestra/testbench": "^8.0|^9.0|^10.0", + "pestphp/pest": "^2.0|^3.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Timadey\\LazySettings\\SettingsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Timadey\\LazySettings\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Timadey" + } + ], + "description": "Enum-driven, per-scope settings for Laravel with lazy persistence: definitions live in an enum, values are only stored when changed, reads fall back to declared defaults.", + "keywords": [ + "Settings", + "config", + "enums", + "laravel", + "lazy", + "scoped" + ], + "support": { + "issues": "https://github.com/Timadey/laravel-lazy-settings/issues", + "source": "https://github.com/Timadey/laravel-lazy-settings/tree/v1.0.0" + }, + "time": "2026-08-09T18:50:48+00:00" + }, { "name": "vlucas/phpdotenv", "version": "v5.6.2", @@ -9343,5 +9338,5 @@ "php": "^8.2" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/config/ai.php b/config/ai.php index e9e49bf..b34a192 100644 --- a/config/ai.php +++ b/config/ai.php @@ -1,6 +1,5 @@ env('AI_PROVIDER', 'cohere'), @@ -11,6 +10,6 @@ ], 'gemini' => [ 'api_key' => env('GEMINI_API_KEY'), - ] - ] + ], + ], ]; diff --git a/config/services.php b/config/services.php index 64da76f..246e46e 100644 --- a/config/services.php +++ b/config/services.php @@ -44,6 +44,6 @@ 'mtn_bulksms' => [ 'session_cookie' => env('MTN_BULKSMS_COOKIE'), - ] + ], ]; diff --git a/config/soulbscription.php b/config/soulbscription.php deleted file mode 100644 index f4bd702..0000000 --- a/config/soulbscription.php +++ /dev/null @@ -1,30 +0,0 @@ - [ - 'cancel_migrations_autoloading' => false, - ], - - 'feature_tickets' => env('SOULBSCRIPTION_FEATURE_TICKETS', true), - - 'models' => [ - - 'feature' => \LucasDotVin\Soulbscription\Models\Feature::class, - - 'feature_consumption' => \LucasDotVin\Soulbscription\Models\FeatureConsumption::class, - - 'feature_ticket' => \LucasDotVin\Soulbscription\Models\FeatureTicket::class, - - 'feature_plan' => \LucasDotVin\Soulbscription\Models\FeaturePlan::class, - - 'plan' => \LucasDotVin\Soulbscription\Models\Plan::class, - - 'subscriber' => [ - 'uses_uuid' => env('SOULBSCRIPTION_SUBSCRIBER_USES_UUID', false), - ], - - 'subscription' => \LucasDotVin\Soulbscription\Models\Subscription::class, - - 'subscription_renewal' => \LucasDotVin\Soulbscription\Models\SubscriptionRenewal::class, - ], -]; diff --git a/database/factories/CreditBandFactory.php b/database/factories/CreditBandFactory.php new file mode 100644 index 0000000..4950311 --- /dev/null +++ b/database/factories/CreditBandFactory.php @@ -0,0 +1,20 @@ + $this->faker->unique()->numberBetween(50, 5000), + 'price_per_unit' => $this->faker->randomFloat(2, 1, 10), + 'is_active' => true, + ]; + } +} diff --git a/database/migrations/2025_10_31_040818_create_tags_table.php b/database/migrations/2025_10_31_040818_create_tags_table.php index 3876670..961f1de 100644 --- a/database/migrations/2025_10_31_040818_create_tags_table.php +++ b/database/migrations/2025_10_31_040818_create_tags_table.php @@ -17,7 +17,7 @@ public function up(): void $table->string('name'); $table->string('color')->default('#3b82f6'); $table->timestamps(); - + $table->unique(['user_id', 'name']); }); } diff --git a/database/migrations/2025_10_31_040819_create_subscriber_tag_table.php b/database/migrations/2025_10_31_040819_create_subscriber_tag_table.php index 8fe8b38..c0fb530 100644 --- a/database/migrations/2025_10_31_040819_create_subscriber_tag_table.php +++ b/database/migrations/2025_10_31_040819_create_subscriber_tag_table.php @@ -16,7 +16,7 @@ public function up(): void $table->foreignId('subscriber_id')->constrained()->cascadeOnDelete(); $table->foreignId('tag_id')->constrained()->cascadeOnDelete(); $table->timestamps(); - + $table->unique(['subscriber_id', 'tag_id']); }); } diff --git a/database/migrations/2026_08_08_214015_create_credit_bands_table.php b/database/migrations/2026_08_08_214015_create_credit_bands_table.php new file mode 100644 index 0000000..9ef0aec --- /dev/null +++ b/database/migrations/2026_08_08_214015_create_credit_bands_table.php @@ -0,0 +1,32 @@ +id(); + $table->unsignedInteger('min_units'); + $table->decimal('price_per_unit', 10, 2); + $table->boolean('is_active')->default(true); + $table->timestamps(); + + $table->index('min_units'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('credit_bands'); + } +}; diff --git a/database/migrations/2026_08_08_214017_add_credit_balance_to_users_table.php b/database/migrations/2026_08_08_214017_add_credit_balance_to_users_table.php new file mode 100644 index 0000000..dd34e1f --- /dev/null +++ b/database/migrations/2026_08_08_214017_add_credit_balance_to_users_table.php @@ -0,0 +1,28 @@ +decimal('credit_balance', 10, 2)->default(0)->after('email'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('credit_balance'); + }); + } +}; diff --git a/database/migrations/2026_08_08_214019_add_credit_columns_to_transactions_table.php b/database/migrations/2026_08_08_214019_add_credit_columns_to_transactions_table.php new file mode 100644 index 0000000..202c2b3 --- /dev/null +++ b/database/migrations/2026_08_08_214019_add_credit_columns_to_transactions_table.php @@ -0,0 +1,29 @@ +unsignedInteger('units')->nullable()->after('amount'); + $table->decimal('price_per_unit', 10, 2)->nullable()->after('units'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('transactions', function (Blueprint $table) { + $table->dropColumn(['units', 'price_per_unit']); + }); + } +}; diff --git a/database/migrations/2026_08_08_214022_add_charge_columns_to_campaign_logs_table.php b/database/migrations/2026_08_08_214022_add_charge_columns_to_campaign_logs_table.php new file mode 100644 index 0000000..063c6e2 --- /dev/null +++ b/database/migrations/2026_08_08_214022_add_charge_columns_to_campaign_logs_table.php @@ -0,0 +1,30 @@ +decimal('provider_charge', 10, 2)->nullable()->after('message_sent'); + $table->decimal('credits_charged', 10, 2)->default(0)->after('provider_charge'); + $table->unsignedInteger('message_parts')->default(1)->after('credits_charged'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('campaign_logs', function (Blueprint $table) { + $table->dropColumn(['provider_charge', 'credits_charged', 'message_parts']); + }); + } +}; diff --git a/database/migrations/2026_08_08_214027_add_total_credits_to_campaigns_table.php b/database/migrations/2026_08_08_214027_add_total_credits_to_campaigns_table.php new file mode 100644 index 0000000..60e0c3e --- /dev/null +++ b/database/migrations/2026_08_08_214027_add_total_credits_to_campaigns_table.php @@ -0,0 +1,28 @@ +decimal('total_credits', 10, 2)->default(0)->after('failed_count'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('campaigns', function (Blueprint $table) { + $table->dropColumn('total_credits'); + }); + } +}; diff --git a/database/migrations/2026_08_08_214029_drop_soulbscription_tables.php b/database/migrations/2026_08_08_214029_drop_soulbscription_tables.php new file mode 100644 index 0000000..520ba25 --- /dev/null +++ b/database/migrations/2026_08_08_214029_drop_soulbscription_tables.php @@ -0,0 +1,36 @@ +decimal('credit_balance_before', 10, 2)->nullable()->after('message_parts'); + $table->decimal('credit_balance_after', 10, 2)->nullable()->after('credit_balance_before'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('campaign_logs', function (Blueprint $table) { + $table->dropColumn(['credit_balance_before', 'credit_balance_after']); + }); + } +}; diff --git a/database/migrations/2026_08_09_100000_add_query_indexes_and_backfill_campaign_logs_user.php b/database/migrations/2026_08_09_100000_add_query_indexes_and_backfill_campaign_logs_user.php new file mode 100644 index 0000000..b2517c3 --- /dev/null +++ b/database/migrations/2026_08_09_100000_add_query_indexes_and_backfill_campaign_logs_user.php @@ -0,0 +1,86 @@ +whereNull('user_id') + ->update([ + 'user_id' => DB::raw('(SELECT campaigns.user_id FROM campaigns WHERE campaigns.id = campaign_logs.campaign_id)'), + ]); + + Schema::table('campaigns', function (Blueprint $table) { + // Used every minute by campaigns:process-recurring. + $table->index(['status', 'dispatch_at']); + + // Used by the campaigns list (user + newest first). + $table->index(['user_id', 'created_at']); + }); + + Schema::table('campaign_logs', function (Blueprint $table) { + // Used by the single-SMS history page and recipient queries. + $table->index(['user_id', 'created_at']); + // Used by the dashboard message-trend chart. + $table->index(['user_id', 'sent_at']); + // Used to dedupe manual (subscriber-less) campaign recipients. + $table->index(['campaign_id', 'phone_number']); + }); + + Schema::table('subscriber_tag', function (Blueprint $table) { + // Reverse many-to-many lookups (tag_id-first) and tag-delete cascades. + $table->index('tag_id'); + }); + + Schema::table('transactions', function (Blueprint $table) { + // Used by the hourly abandoned-transaction sweep. + $table->index(['status', 'type', 'created_at']); + }); + + Schema::table('transactions', function (Blueprint $table) { + // No longer written since the billing rework; drop the dead column. + $table->dropColumn('metadata'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('transactions', function (Blueprint $table) { + $table->json('metadata')->nullable()->after('reference'); + }); + + Schema::table('transactions', function (Blueprint $table) { + $table->dropIndex(['status', 'type', 'created_at']); + }); + + Schema::table('subscriber_tag', function (Blueprint $table) { + $table->dropIndex(['tag_id']); + }); + + Schema::table('campaign_logs', function (Blueprint $table) { + $table->dropIndex(['campaign_id', 'phone_number']); + $table->dropIndex(['user_id', 'sent_at']); + $table->dropIndex(['user_id', 'created_at']); + }); + + Schema::table('campaigns', function (Blueprint $table) { + $table->dropIndex(['user_id', 'created_at']); + $table->dropIndex(['status', 'dispatch_at']); + }); + + // Backfilled user_ids are not reverted (values remain correct). + } +}; diff --git a/database/migrations/2026_08_09_110000_add_is_admin_to_users_table.php b/database/migrations/2026_08_09_110000_add_is_admin_to_users_table.php new file mode 100644 index 0000000..00bc5dd --- /dev/null +++ b/database/migrations/2026_08_09_110000_add_is_admin_to_users_table.php @@ -0,0 +1,37 @@ +boolean('is_admin')->default(false)->after('password'); + }); + + $adminEmails = config('app.admin_emails', []); + + if (count($adminEmails) > 0) { + DB::table('users') + ->whereIn('email', $adminEmails) + ->update(['is_admin' => true]); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('is_admin'); + }); + } +}; diff --git a/database/migrations/2026_08_09_120000_encrypt_sensitive_settings.php b/database/migrations/2026_08_09_120000_encrypt_sensitive_settings.php new file mode 100644 index 0000000..538148f --- /dev/null +++ b/database/migrations/2026_08_09_120000_encrypt_sensitive_settings.php @@ -0,0 +1,67 @@ +where('type', '!=', 'encrypted') + ->whereNotNull('value') + ->where('value', '!=', '') + ->get() + ->each(function ($setting) { + if (preg_match(self::SENSITIVE_KEY_PATTERN, $setting->key)) { + DB::table('settings') + ->where('key', $setting->key) + ->update([ + 'value' => Crypt::encryptString((string) $setting->value), + 'type' => 'encrypted', + ]); + + Cache::forget("setting_{$setting->key}"); + } + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + DB::table('settings') + ->where('type', 'encrypted') + ->whereNotNull('value') + ->get() + ->each(function ($setting) { + if (preg_match(self::SENSITIVE_KEY_PATTERN, $setting->key)) { + try { + $value = Crypt::decryptString($setting->value); + } catch (\Throwable $e) { + $value = $setting->value; + } + + DB::table('settings') + ->where('key', $setting->key) + ->update([ + 'value' => $value, + 'type' => 'string', + ]); + + Cache::forget("setting_{$setting->key}"); + } + }); + } +}; diff --git a/database/migrations/2026_08_09_130000_encrypt_existing_settings.php b/database/migrations/2026_08_09_130000_encrypt_existing_settings.php new file mode 100644 index 0000000..0b1b2b2 --- /dev/null +++ b/database/migrations/2026_08_09_130000_encrypt_existing_settings.php @@ -0,0 +1,51 @@ +value; + $raw = AppSettings::allRaw(); + + if (! isset($raw[$key]) || $raw[$key] === null || $raw[$key] === '') { + return; + } + + try { + Crypt::decryptString($raw[$key]); // already ciphertext + } catch (\Throwable $e) { + AppSettings::set(AppSettingsEnum::SMSLIVE247_API_KEY, $raw[$key]); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + $key = AppSettingsEnum::SMSLIVE247_API_KEY->value; + $raw = AppSettings::allRaw(); + + if (! isset($raw[$key]) || $raw[$key] === null) { + return; + } + + try { + $plaintext = Crypt::decryptString($raw[$key]); + AppSettings::set(AppSettingsEnum::SMSLIVE247_API_KEY, $plaintext); + } catch (\Throwable $e) { + // Already plaintext (or unable to decrypt) — leave as-is. + } + } +}; diff --git a/database/seeders/BulkSmsSeeder.php b/database/seeders/BulkSmsSeeder.php index d297dc4..25d6792 100644 --- a/database/seeders/BulkSmsSeeder.php +++ b/database/seeders/BulkSmsSeeder.php @@ -7,7 +7,6 @@ use App\Models\Subscriber; use App\Models\Tag; use App\Models\User; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class BulkSmsSeeder extends Seeder diff --git a/database/seeders/PlanSeeder.php b/database/seeders/PlanSeeder.php deleted file mode 100644 index 2950296..0000000 --- a/database/seeders/PlanSeeder.php +++ /dev/null @@ -1,155 +0,0 @@ - 'free', - 'periodicity_type' => null, - 'periodicity' => null, - ]); - - $pro = Plan::create([ - 'name' => 'pro', - 'periodicity_type' => PeriodicityType::Month, - 'periodicity' => 1, - 'grace_days' => 7, - ]); - - $business = Plan::create([ - 'name' => 'business', - 'periodicity_type' => PeriodicityType::Month, - 'periodicity' => 1, - 'grace_days' => 7, - ]); - - $enterprise = Plan::create([ - 'name' => 'enterprise', - 'periodicity_type' => PeriodicityType::Month, - 'periodicity' => 1, - 'grace_days' => 7, - ]); - - $proYearly = Plan::create([ - 'name' => 'pro-yearly', - 'periodicity_type' => PeriodicityType::Year, - 'periodicity' => 1, - 'grace_days' => 14, - ]); - - $businessYearly = Plan::create([ - 'name' => 'business-yearly', - 'periodicity_type' => PeriodicityType::Year, - 'periodicity' => 1, - 'grace_days' => 14, - ]); - - $enterpriseYearly = Plan::create([ - 'name' => 'enterprise-yearly', - 'periodicity_type' => PeriodicityType::Year, - 'periodicity' => 1, - 'grace_days' => 14, - ]); - - // Attach Features to Plans - - // Features - $smsUnit = Feature::create([ - 'consumable' => true, - 'name' => 'sms-units', - 'periodicity_type' => PeriodicityType::Month, - 'periodicity' => 1, - ]); - - $free->features()->attach($smsUnit, ['charges' => 10 ]); - // $freeYearly->features()->attach($smsUnit, ['charges' => 610 ]); - $pro->features()->attach($smsUnit, ['charges' => 1050 ]); - $proYearly->features()->attach($smsUnit, ['charges' => 1050 ]); - $business->features()->attach($smsUnit, ['charges' => 2200 ]); - $businessYearly->features()->attach($smsUnit, ['charges' => 2200 ]); - $enterprise->features()->attach($smsUnit, ['charges' => 4600 ]); - $enterpriseYearly->features()->attach($smsUnit, ['charges' => 4600 ]); - - - $apiAccess = Feature::create([ - 'consumable' => false, - 'name' => 'api-access', - ]); - - $business->features()->attach($apiAccess); - $businessYearly->features()->attach($apiAccess); - $enterprise->features()->attach($apiAccess); - $enterpriseYearly->features()->attach($apiAccess); - - $mixer = Feature::create([ - 'consumable' => true, - 'name' => 'ai-mixer', - 'quota' => true, - ]); - - $business->features()->attach($mixer, ['charges' => 50 ]); - $businessYearly->features()->attach($mixer, ['charges' => 50 ]); - $enterprise->features()->attach($mixer, ['charges' => 50 ]); - $enterpriseYearly->features()->attach($mixer, ['charges' => 50 ]); - - $contacts = Feature::create([ - 'consumable' => true, - 'name' => 'contacts-upload', - // 'quota' => true, - 'periodicity_type' => PeriodicityType::Month, - 'periodicity' => 1, - ]); - - $free->features()->attach($contacts, ['charges' => 300000 ]); - // $freeYearly->features()->attach($contacts, ['charges' => 5000 ]); - $pro->features()->attach($contacts, ['charges' => 700000 ]); - $proYearly->features()->attach($contacts, ['charges' => 700000 ]); - $business->features()->attach($contacts, ['charges' => 900000 ]); - $businessYearly->features()->attach($contacts, ['charges' => 900000 ]); - $enterprise->features()->attach($contacts, ['charges' => 990000 ]); - $enterpriseYearly->features()->attach($contacts, ['charges' => 990000 ]); - - $senderId = Feature::create([ - 'consumable' => true, - 'name' => 'sender-id', - 'quota' => true, - ]); - - $free->features()->attach($senderId, ['charges' => 1 ]); - // $freeYearly->features()->attach($senderId, ['charges' => 1 ]); - $pro->features()->attach($senderId, ['charges' => 3 ]); - $proYearly->features()->attach($senderId, ['charges' => 3 ]); - $business->features()->attach($senderId, ['charges' => 7 ]); - $businessYearly->features()->attach($senderId, ['charges' => 7 ]); - $enterprise->features()->attach($senderId, ['charges' => 10000 ]); - $enterpriseYearly->features()->attach($senderId, ['charges' => 10000 ]); - - $tags = Feature::create([ - 'consumable' => true, - 'name' => 'tags', - 'quota' => true, - ]); - - $free->features()->attach($tags, ['charges' => 5 ]); - // $freeYearly->features()->attach($tags, ['charges' => 5 ]); - $pro->features()->attach($tags, ['charges' => 20 ]); - $proYearly->features()->attach($tags, ['charges' => 20 ]); - $business->features()->attach($tags, ['charges' => 200000 ]); - $businessYearly->features()->attach($tags, ['charges' => 200000 ]); - $enterprise->features()->attach($tags, ['charges' => 200000 ]); - $enterpriseYearly->features()->attach($tags, ['charges' => 200000 ]); - } -} diff --git a/public/build/assets/Create-BuAS5CP7.js b/public/build/assets/Create-BuAS5CP7.js new file mode 100644 index 0000000..65753e9 --- /dev/null +++ b/public/build/assets/Create-BuAS5CP7.js @@ -0,0 +1 @@ +import{c as me,u as oe,r as E,j as s,L as de,a as he,H as ue}from"./app-BkR-Yu8_.js";import{B as pe}from"./button-BkeD6D9C.js";import{I as ae}from"./input-BFktu1Ja.js";import{L as T}from"./label-B8qNWxTC.js";import{T as be}from"./textarea-dZ5N8NJE.js";import{C as ne}from"./checkbox-BiI6uQz7.js";import{d as fe,k as te,A as xe}from"./app-layout-6TmSMbxU.js";import{d as _e}from"./index-BV9LgQgg.js";import{I as K}from"./input-error-mOXaJ-E5.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-C-iMGC_l.js";import"./index-BxSFA7Jd.js";import"./index--_rDGB40.js";import"./check-B5v_CoGh.js";import"./send-BIH-xC-j.js";import"./shield-check-BR6okPK2.js";import"./users-BPIE1cfL.js";import"./coins-CBBvu4lK.js";const ge=[{title:"Dashboard",href:_e().url},{title:"Single SMS",href:te.index().url}];function Qe(F){const e=me.c(85),{senderIds:c}=F;let M;e[0]===Symbol.for("react.memo_cache_sentinel")?(M={sender_id:"",recipient_type:"manual",phone_number:"",subscriber_id:"",message:""},e[0]=M):M=e[0];const{data:l,setData:t,post:O,processing:L,errors:i}=oe(M),[a,le]=E.useState("manual");let $;e[1]===Symbol.for("react.memo_cache_sentinel")?($=[],e[1]=$):$=e[1];const[R,V]=E.useState($),[n,ie]=E.useState(""),[X,Y]=E.useState(!1);let A,B;e[2]!==a||e[3]!==n?(A=()=>{if(a==="subscriber"&&n.length>0){Y(!0);const r=setTimeout(()=>{he.get(te.searchSubscribers().url,{params:{query:n}}).then(ce=>{V(ce.data),Y(!1)}).catch(()=>{Y(!1)})},300);return()=>clearTimeout(r)}else V([])},B=[n,a],e[2]=a,e[3]=n,e[4]=A,e[5]=B):(A=e[4],B=e[5]),E.useEffect(A,B);let H;e[6]!==O?(H=r=>{r.preventDefault(),O(te.store().url)},e[6]=O,e[7]=H):H=e[7];const Z=H;let Q;e[8]===Symbol.for("react.memo_cache_sentinel")?(Q=s.jsx(ue,{title:"Send Single SMS"}),e[8]=Q):Q=e[8];let U;e[9]===Symbol.for("react.memo_cache_sentinel")?(U=s.jsx("div",{className:"border-b p-6",children:s.jsx("h2",{className:"text-2xl font-semibold",children:"Send Single SMS"})}),e[9]=U):U=e[9];let q;e[10]===Symbol.for("react.memo_cache_sentinel")?(q=s.jsx(T,{htmlFor:"sender_id",children:"Sender ID"}),e[10]=q):q=e[10];let m;e[11]!==t?(m=r=>t("sender_id",r.target.value),e[11]=t,e[12]=m):m=e[12];let z;e[13]===Symbol.for("react.memo_cache_sentinel")?(z=s.jsx("option",{value:"",children:"Select a sender ID"}),e[13]=z):z=e[13];let o;e[14]!==c?(o=c.length>0?c.map(je):s.jsx("option",{disabled:!0,children:"Default sender ID will be used if empty"}),e[14]=c,e[15]=o):o=e[15];let d;e[16]!==l.sender_id||e[17]!==o||e[18]!==m?(d=s.jsxs("select",{id:"sender_id",value:l.sender_id,onChange:m,className:"mt-1 w-full rounded-md border px-3 py-2",children:[z,o]}),e[16]=l.sender_id,e[17]=o,e[18]=m,e[19]=d):d=e[19];let h;e[20]!==i.sender_id?(h=s.jsx(K,{message:i.sender_id,className:"mt-1"}),e[20]=i.sender_id,e[21]=h):h=e[21];let u;e[22]!==d||e[23]!==h?(u=s.jsxs("div",{children:[q,d,h]}),e[22]=d,e[23]=h,e[24]=u):u=e[24];let p;e[25]!==c.length?(p=c.length===0&&s.jsxs("p",{className:"mt-2 flex items-center gap-2 text-sm text-amber-600",children:[s.jsx("span",{children:"⚠️"}),s.jsxs("span",{children:["The default WindSMS SenderID will be used."," ",s.jsx(de,{href:fe().url,className:"font-medium underline",children:"Customize your SenderID"})]})]}),e[25]=c.length,e[26]=p):p=e[26];const ee=a==="manual";let b;e[27]!==t?(b=r=>{r&&(le("manual"),t("recipient_type","manual"),t("subscriber_id",""))},e[27]=t,e[28]=b):b=e[28];let f;e[29]!==ee||e[30]!==b?(f=s.jsx(ne,{id:"recipient_manual",checked:ee,onCheckedChange:b}),e[29]=ee,e[30]=b,e[31]=f):f=e[31];let P;e[32]===Symbol.for("react.memo_cache_sentinel")?(P=s.jsx(T,{htmlFor:"recipient_manual",className:"cursor-pointer",children:"Enter phone number manually"}),e[32]=P):P=e[32];let x;e[33]!==f?(x=s.jsxs("div",{className:"flex items-center space-x-2",children:[f,P]}),e[33]=f,e[34]=x):x=e[34];let _;e[35]!==l.phone_number||e[36]!==i.phone_number||e[37]!==a||e[38]!==t?(_=a==="manual"&&s.jsxs("div",{className:"ml-6",children:[s.jsx(T,{htmlFor:"phone_number",children:"Phone Number"}),s.jsx(ae,{id:"phone_number",placeholder:"e.g. 08012345678",value:l.phone_number,onChange:r=>t("phone_number",r.target.value),className:"mt-1"}),s.jsx(K,{message:i.phone_number,className:"mt-1"})]}),e[35]=l.phone_number,e[36]=i.phone_number,e[37]=a,e[38]=t,e[39]=_):_=e[39];const se=a==="subscriber";let g;e[40]!==t?(g=r=>{r&&(le("subscriber"),t("recipient_type","subscriber"),t("phone_number",""))},e[40]=t,e[41]=g):g=e[41];let j;e[42]!==se||e[43]!==g?(j=s.jsx(ne,{id:"recipient_subscriber",checked:se,onCheckedChange:g}),e[42]=se,e[43]=g,e[44]=j):j=e[44];let W;e[45]===Symbol.for("react.memo_cache_sentinel")?(W=s.jsx(T,{htmlFor:"recipient_subscriber",className:"cursor-pointer",children:"Search for subscriber"}),e[45]=W):W=e[45];let S;e[46]!==j?(S=s.jsxs("div",{className:"flex items-center space-x-2",children:[j,W]}),e[46]=j,e[47]=S):S=e[47];let y;e[48]!==l.subscriber_id||e[49]!==i.subscriber_id||e[50]!==X||e[51]!==a||e[52]!==n||e[53]!==t||e[54]!==R?(y=a==="subscriber"&&s.jsxs("div",{className:"ml-6 space-y-2",children:[s.jsx(T,{htmlFor:"subscriber_search",children:"Search Subscriber"}),s.jsx(ae,{id:"subscriber_search",placeholder:"Type name or phone number...",value:n,onChange:r=>ie(r.target.value),className:"mt-1"}),X&&s.jsx("p",{className:"text-sm text-gray-500",children:"Searching..."}),R.length>0&&s.jsx("div",{className:"mt-2 max-h-48 overflow-y-auto rounded-md border",children:R.map(r=>s.jsxs("div",{onClick:()=>{t("subscriber_id",r.id),ie(`${r.name||"Unknown"} (${r.phone_number})`),V([])},className:`cursor-pointer p-2 hover:bg-gray-100 ${l.subscriber_id===r.id?"bg-blue-50":""}`,children:[s.jsx("div",{className:"font-medium",children:r.name||"Unknown"}),s.jsx("div",{className:"text-sm text-gray-500",children:r.phone_number})]},r.id))}),s.jsx(K,{message:i.subscriber_id,className:"mt-1"})]}),e[48]=l.subscriber_id,e[49]=i.subscriber_id,e[50]=X,e[51]=a,e[52]=n,e[53]=t,e[54]=R,e[55]=y):y=e[55];let N;e[56]!==x||e[57]!==_||e[58]!==S||e[59]!==y?(N=s.jsxs("div",{className:"space-y-4",children:[x,_,S,y]}),e[56]=x,e[57]=_,e[58]=S,e[59]=y,e[60]=N):N=e[60];let G;e[61]===Symbol.for("react.memo_cache_sentinel")?(G=s.jsx(T,{htmlFor:"message",children:"Message"}),e[61]=G):G=e[61];let v;e[62]!==t?(v=r=>t("message",r.target.value),e[62]=t,e[63]=v):v=e[63];let C;e[64]!==l.message||e[65]!==v?(C=s.jsx(be,{id:"message",placeholder:"Type your message here...",value:l.message,onChange:v,rows:4,className:"mt-1"}),e[64]=l.message,e[65]=v,e[66]=C):C=e[66];let w;e[67]!==l.message.length?(w=s.jsxs("div",{className:"mt-1 text-right text-xs text-gray-500",children:[l.message.length," characters"]}),e[67]=l.message.length,e[68]=w):w=e[68];let I;e[69]!==i.message?(I=s.jsx(K,{message:i.message,className:"mt-1"}),e[69]=i.message,e[70]=I):I=e[70];let k;e[71]!==C||e[72]!==w||e[73]!==I?(k=s.jsxs("div",{children:[G,C,w,I]}),e[71]=C,e[72]=w,e[73]=I,e[74]=k):k=e[74];const re=L?"Sending...":"Send SMS";let D;e[75]!==L||e[76]!==re?(D=s.jsx(pe,{type:"submit",disabled:L,className:"w-full",children:re}),e[75]=L,e[76]=re,e[77]=D):D=e[77];let J;return e[78]!==Z||e[79]!==u||e[80]!==p||e[81]!==N||e[82]!==k||e[83]!==D?(J=s.jsxs(xe,{breadcrumbs:ge,children:[Q,s.jsx("div",{className:"py-12",children:s.jsx("div",{className:"mx-auto max-w-2xl sm:px-6 lg:px-8",children:s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[U,s.jsx("div",{className:"p-6",children:s.jsxs("form",{onSubmit:Z,className:"space-y-6",children:[u,p,N,k,D]})})]})})})]}),e[78]=Z,e[79]=u,e[80]=p,e[81]=N,e[82]=k,e[83]=D,e[84]=J):J=e[84],J}function je(F){return s.jsx("option",{value:F.sender_id,children:F.sender_id},F.id)}export{Qe as default}; diff --git a/public/build/assets/Create-DesrmP0F.js b/public/build/assets/Create-ChJVr8ap.js similarity index 69% rename from public/build/assets/Create-DesrmP0F.js rename to public/build/assets/Create-ChJVr8ap.js index 7f0a275..bfbffbf 100644 --- a/public/build/assets/Create-DesrmP0F.js +++ b/public/build/assets/Create-ChJVr8ap.js @@ -1,4 +1,4 @@ -import{r as _,t as Sr,j as f,U as h,u as rn,H as nn,L as an,a as on}from"./app-DkuaKs7R.js";import{c as J}from"./utils-DFaayVYX.js";import{u as sn,i as Je,g as cn,a as ln,f as un,o as dn,b as pn,c as fn,A as hn,d as mn,e as vn,s as gn}from"./app-layout-DjcEY8s3.js";import{R as yn}from"./index-DKUWucUl.js";import{B as Ct}from"./button-DEWTOza6.js";import{I as Gt}from"./input-DZnmHXM7.js";import{L as re}from"./label-CDV8N_bE.js";import{T as Xt}from"./textarea-CBQAnq9A.js";import{B as wn}from"./badge-kWQkrcyp.js";import{C as et}from"./checkbox-B7HjESRx.js";import{c as Dn,d as bn}from"./index-DSWKGzIo.js";import{S as _n}from"./sparkles-B8yJ46Ow.js";import{U as kn}from"./users-YqeB5lb8.js";import{P as xn}from"./phone-hsCuNlVr.js";import{C as $t}from"./clock-DV7QfVXP.js";import{S as Mn}from"./send-Dlj8qGrF.js";import{R as Cn}from"./repeat-BVyZxNV4.js";/* empty css */import"./index-BX6ecx82.js";import"./x-GpPVQP8J.js";import"./shield-check-BuNJNOL8.js";import"./index-BY0riNnH.js";import"./check-CJ-RwoAT.js";const Pr=6048e5,Sn=864e5,bt=6e4,_t=36e5,Pn=1e3,zt=Symbol.for("constructDateFrom");function H(a,r){return typeof a=="function"?a(r):a&&typeof a=="object"&&zt in a?a[zt](r):a instanceof Date?new a.constructor(r):new Date(r)}function k(a,r){return H(r||a,a)}function ue(a,r,t){const e=k(a,t?.in);return isNaN(r)?H(t?.in||a,NaN):(r&&e.setDate(e.getDate()+r),e)}function de(a,r,t){const e=k(a,t?.in);if(isNaN(r))return H(a,NaN);if(!r)return e;const n=e.getDate(),o=H(a,e.getTime());o.setMonth(e.getMonth()+r+1,0);const s=o.getDate();return n>=s?o:(e.setFullYear(o.getFullYear(),o.getMonth(),n),e)}function Nr(a,r,t){return H(a,+k(a)+r)}function Nn(a,r,t){return Nr(a,r*_t)}let En={};function Fe(){return En}function xe(a,r){const t=Fe(),e=r?.weekStartsOn??r?.locale?.options?.weekStartsOn??t.weekStartsOn??t.locale?.options?.weekStartsOn??0,n=k(a,r?.in),o=n.getDay(),s=(o=o.getTime()?e+1:t.getTime()>=i.getTime()?e:e-1}function pt(a){const r=k(a),t=new Date(Date.UTC(r.getFullYear(),r.getMonth(),r.getDate(),r.getHours(),r.getMinutes(),r.getSeconds(),r.getMilliseconds()));return t.setUTCFullYear(r.getFullYear()),+a-+t}function Me(a,...r){const t=H.bind(null,r.find(e=>typeof e=="object"));return r.map(t)}function Le(a,r){const t=k(a,r?.in);return t.setHours(0,0,0,0),t}function Qe(a,r,t){const[e,n]=Me(t?.in,a,r),o=Le(e),s=Le(n),i=+o-pt(o),c=+s-pt(s);return Math.round((i-c)/Sn)}function Tn(a,r){const t=Er(a,r),e=H(a,0);return e.setFullYear(t,0,4),e.setHours(0,0,0,0),je(e)}function It(a,r,t){const e=k(a,t?.in);return e.setTime(e.getTime()+r*bt),e}function Ht(a,r,t){return de(a,r*3,t)}function On(a,r,t){return Nr(a,r*1e3)}function ft(a,r,t){return ue(a,r*7,t)}function we(a,r,t){return de(a,r*12,t)}function Zt(a,r){let t,e=r?.in;return a.forEach(n=>{!e&&typeof n=="object"&&(e=H.bind(null,n));const o=k(n,e);(!t||t{!e&&typeof n=="object"&&(e=H.bind(null,n));const o=k(n,e);(!t||t>o||isNaN(+o))&&(t=o)}),H(e,t||NaN)}function Yn(a,r,t){const[e,n]=Me(t?.in,a,r);return+Le(e)==+Le(n)}function De(a){return a instanceof Date||typeof a=="object"&&Object.prototype.toString.call(a)==="[object Date]"}function ht(a){return!(!De(a)&&typeof a!="number"||isNaN(+k(a)))}function mt(a,r,t){const[e,n]=Me(t?.in,a,r),o=e.getFullYear()-n.getFullYear(),s=e.getMonth()-n.getMonth();return o*12+s}function Re(a,r){const t=k(a,r?.in);return Math.trunc(t.getMonth()/3)+1}function vt(a,r,t){const[e,n]=Me(t?.in,a,r),o=e.getFullYear()-n.getFullYear(),s=Re(e)-Re(n);return o*4+s}function gt(a,r,t){const[e,n]=Me(t?.in,a,r);return e.getFullYear()-n.getFullYear()}function Rn(a,r,t){const[e,n]=Me(t?.in,a,r),o=er(e,n),s=Math.abs(Qe(e,n));e.setDate(e.getDate()-o*s);const i=+(er(e,n)===-o),c=o*(s-i);return c===0?0:c}function er(a,r){const t=a.getFullYear()-r.getFullYear()||a.getMonth()-r.getMonth()||a.getDate()-r.getDate()||a.getHours()-r.getHours()||a.getMinutes()-r.getMinutes()||a.getSeconds()-r.getSeconds()||a.getMilliseconds()-r.getMilliseconds();return t<0?-1:t>0?1:t}function Tr(a,r){const t=k(a,r?.in);return t.setHours(23,59,59,999),t}function Or(a,r){const t=k(a,r?.in),e=t.getMonth();return t.setFullYear(t.getFullYear(),e+1,0),t.setHours(23,59,59,999),t}function Lt(a,r){const t=k(a,r?.in),e=t.getMonth(),n=e-e%3;return t.setMonth(n,1),t.setHours(0,0,0,0),t}function Yr(a,r){const t=k(a,r?.in);return t.setDate(1),t.setHours(0,0,0,0),t}function Rr(a,r){const t=k(a,r?.in),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function kt(a,r){const t=k(a,r?.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}function In(a,r){const t=Fe(),e=t.weekStartsOn??t.locale?.options?.weekStartsOn??0,n=k(a,r?.in),o=n.getDay(),s=(o{let e;const n=Ln[a];return typeof n=="string"?e=n:r===1?e=n.one:e=n.other.replace("{{count}}",r.toString()),t?.addSuffix?t.comparison&&t.comparison>0?"in "+e:e+" ago":e};function St(a){return(r={})=>{const t=r.width?String(r.width):a.defaultWidth;return a.formats[t]||a.formats[a.defaultWidth]}}const Wn={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},An={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Hn={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},jn={date:St({formats:Wn,defaultWidth:"full"}),time:St({formats:An,defaultWidth:"full"}),dateTime:St({formats:Hn,defaultWidth:"full"})},Qn={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Bn=(a,r,t,e)=>Qn[a];function qe(a){return(r,t)=>{const e=t?.context?String(t.context):"standalone";let n;if(e==="formatting"&&a.formattingValues){const s=a.defaultFormattingWidth||a.defaultWidth,i=t?.width?String(t.width):s;n=a.formattingValues[i]||a.formattingValues[s]}else{const s=a.defaultWidth,i=t?.width?String(t.width):a.defaultWidth;n=a.values[i]||a.values[s]}const o=a.argumentCallback?a.argumentCallback(r):r;return n[o]}}const Kn={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},qn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Un={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Vn={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Gn={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Xn={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},$n=(a,r)=>{const t=Number(a),e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},zn={ordinalNumber:$n,era:qe({values:Kn,defaultWidth:"wide"}),quarter:qe({values:qn,defaultWidth:"wide",argumentCallback:a=>a-1}),month:qe({values:Un,defaultWidth:"wide"}),day:qe({values:Vn,defaultWidth:"wide"}),dayPeriod:qe({values:Gn,defaultWidth:"wide",formattingValues:Xn,defaultFormattingWidth:"wide"})};function Ue(a){return(r,t={})=>{const e=t.width,n=e&&a.matchPatterns[e]||a.matchPatterns[a.defaultMatchWidth],o=r.match(n);if(!o)return null;const s=o[0],i=e&&a.parsePatterns[e]||a.parsePatterns[a.defaultParseWidth],c=Array.isArray(i)?Jn(i,d=>d.test(s)):Zn(i,d=>d.test(s));let u;u=a.valueCallback?a.valueCallback(c):c,u=t.valueCallback?t.valueCallback(u):u;const l=r.slice(s.length);return{value:u,rest:l}}}function Zn(a,r){for(const t in a)if(Object.prototype.hasOwnProperty.call(a,t)&&r(a[t]))return t}function Jn(a,r){for(let t=0;t{const e=r.match(a.matchPattern);if(!e)return null;const n=e[0],o=r.match(a.parsePattern);if(!o)return null;let s=a.valueCallback?a.valueCallback(o[0]):o[0];s=t.valueCallback?t.valueCallback(s):s;const i=r.slice(n.length);return{value:s,rest:i}}}const ta=/^(\d+)(th|st|nd|rd)?/i,ra=/\d+/i,na={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},aa={any:[/^b/i,/^(a|c)/i]},oa={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},sa={any:[/1/i,/2/i,/3/i,/4/i]},ia={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},ca={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},la={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},ua={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},da={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},pa={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},fa={ordinalNumber:ea({matchPattern:ta,parsePattern:ra,valueCallback:a=>parseInt(a,10)}),era:Ue({matchPatterns:na,defaultMatchWidth:"wide",parsePatterns:aa,defaultParseWidth:"any"}),quarter:Ue({matchPatterns:oa,defaultMatchWidth:"wide",parsePatterns:sa,defaultParseWidth:"any",valueCallback:a=>a+1}),month:Ue({matchPatterns:ia,defaultMatchWidth:"wide",parsePatterns:ca,defaultParseWidth:"any"}),day:Ue({matchPatterns:la,defaultMatchWidth:"wide",parsePatterns:ua,defaultParseWidth:"any"}),dayPeriod:Ue({matchPatterns:da,defaultMatchWidth:"any",parsePatterns:pa,defaultParseWidth:"any"})},Ir={code:"en-US",formatDistance:Fn,formatLong:jn,formatRelative:Bn,localize:zn,match:fa,options:{weekStartsOn:0,firstWeekContainsDate:1}};function ha(a,r){const t=k(a,r?.in);return Qe(t,kt(t))+1}function jt(a,r){const t=k(a,r?.in),e=+je(t)-+Tn(t);return Math.round(e/Pr)+1}function Qt(a,r){const t=k(a,r?.in),e=t.getFullYear(),n=Fe(),o=r?.firstWeekContainsDate??r?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,s=H(r?.in||a,0);s.setFullYear(e+1,0,o),s.setHours(0,0,0,0);const i=xe(s,r),c=H(r?.in||a,0);c.setFullYear(e,0,o),c.setHours(0,0,0,0);const u=xe(c,r);return+t>=+i?e+1:+t>=+u?e:e-1}function ma(a,r){const t=Fe(),e=r?.firstWeekContainsDate??r?.locale?.options?.firstWeekContainsDate??t.firstWeekContainsDate??t.locale?.options?.firstWeekContainsDate??1,n=Qt(a,r),o=H(r?.in||a,0);return o.setFullYear(n,0,e),o.setHours(0,0,0,0),xe(o,r)}function Lr(a,r){const t=k(a,r?.in),e=+xe(t,r)-+ma(t,r);return Math.round(e/Pr)+1}function A(a,r){const t=a<0?"-":"",e=Math.abs(a).toString().padStart(r,"0");return t+e}const Ce={y(a,r){const t=a.getFullYear(),e=t>0?t:1-t;return A(r==="yy"?e%100:e,r.length)},M(a,r){const t=a.getMonth();return r==="M"?String(t+1):A(t+1,2)},d(a,r){return A(a.getDate(),r.length)},a(a,r){const t=a.getHours()/12>=1?"pm":"am";switch(r){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];case"aaaa":default:return t==="am"?"a.m.":"p.m."}},h(a,r){return A(a.getHours()%12||12,r.length)},H(a,r){return A(a.getHours(),r.length)},m(a,r){return A(a.getMinutes(),r.length)},s(a,r){return A(a.getSeconds(),r.length)},S(a,r){const t=r.length,e=a.getMilliseconds(),n=Math.trunc(e*Math.pow(10,t-3));return A(n,r.length)}},We={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},tr={G:function(a,r,t){const e=a.getFullYear()>0?1:0;switch(r){case"G":case"GG":case"GGG":return t.era(e,{width:"abbreviated"});case"GGGGG":return t.era(e,{width:"narrow"});case"GGGG":default:return t.era(e,{width:"wide"})}},y:function(a,r,t){if(r==="yo"){const e=a.getFullYear(),n=e>0?e:1-e;return t.ordinalNumber(n,{unit:"year"})}return Ce.y(a,r)},Y:function(a,r,t,e){const n=Qt(a,e),o=n>0?n:1-n;if(r==="YY"){const s=o%100;return A(s,2)}return r==="Yo"?t.ordinalNumber(o,{unit:"year"}):A(o,r.length)},R:function(a,r){const t=Er(a);return A(t,r.length)},u:function(a,r){const t=a.getFullYear();return A(t,r.length)},Q:function(a,r,t){const e=Math.ceil((a.getMonth()+1)/3);switch(r){case"Q":return String(e);case"QQ":return A(e,2);case"Qo":return t.ordinalNumber(e,{unit:"quarter"});case"QQQ":return t.quarter(e,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(e,{width:"narrow",context:"formatting"});case"QQQQ":default:return t.quarter(e,{width:"wide",context:"formatting"})}},q:function(a,r,t){const e=Math.ceil((a.getMonth()+1)/3);switch(r){case"q":return String(e);case"qq":return A(e,2);case"qo":return t.ordinalNumber(e,{unit:"quarter"});case"qqq":return t.quarter(e,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(e,{width:"narrow",context:"standalone"});case"qqqq":default:return t.quarter(e,{width:"wide",context:"standalone"})}},M:function(a,r,t){const e=a.getMonth();switch(r){case"M":case"MM":return Ce.M(a,r);case"Mo":return t.ordinalNumber(e+1,{unit:"month"});case"MMM":return t.month(e,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(e,{width:"narrow",context:"formatting"});case"MMMM":default:return t.month(e,{width:"wide",context:"formatting"})}},L:function(a,r,t){const e=a.getMonth();switch(r){case"L":return String(e+1);case"LL":return A(e+1,2);case"Lo":return t.ordinalNumber(e+1,{unit:"month"});case"LLL":return t.month(e,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(e,{width:"narrow",context:"standalone"});case"LLLL":default:return t.month(e,{width:"wide",context:"standalone"})}},w:function(a,r,t,e){const n=Lr(a,e);return r==="wo"?t.ordinalNumber(n,{unit:"week"}):A(n,r.length)},I:function(a,r,t){const e=jt(a);return r==="Io"?t.ordinalNumber(e,{unit:"week"}):A(e,r.length)},d:function(a,r,t){return r==="do"?t.ordinalNumber(a.getDate(),{unit:"date"}):Ce.d(a,r)},D:function(a,r,t){const e=ha(a);return r==="Do"?t.ordinalNumber(e,{unit:"dayOfYear"}):A(e,r.length)},E:function(a,r,t){const e=a.getDay();switch(r){case"E":case"EE":case"EEE":return t.day(e,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(e,{width:"short",context:"formatting"});case"EEEE":default:return t.day(e,{width:"wide",context:"formatting"})}},e:function(a,r,t,e){const n=a.getDay(),o=(n-e.weekStartsOn+8)%7||7;switch(r){case"e":return String(o);case"ee":return A(o,2);case"eo":return t.ordinalNumber(o,{unit:"day"});case"eee":return t.day(n,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(n,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(n,{width:"short",context:"formatting"});case"eeee":default:return t.day(n,{width:"wide",context:"formatting"})}},c:function(a,r,t,e){const n=a.getDay(),o=(n-e.weekStartsOn+8)%7||7;switch(r){case"c":return String(o);case"cc":return A(o,r.length);case"co":return t.ordinalNumber(o,{unit:"day"});case"ccc":return t.day(n,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(n,{width:"narrow",context:"standalone"});case"cccccc":return t.day(n,{width:"short",context:"standalone"});case"cccc":default:return t.day(n,{width:"wide",context:"standalone"})}},i:function(a,r,t){const e=a.getDay(),n=e===0?7:e;switch(r){case"i":return String(n);case"ii":return A(n,r.length);case"io":return t.ordinalNumber(n,{unit:"day"});case"iii":return t.day(e,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(e,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(e,{width:"short",context:"formatting"});case"iiii":default:return t.day(e,{width:"wide",context:"formatting"})}},a:function(a,r,t){const n=a.getHours()/12>=1?"pm":"am";switch(r){case"a":case"aa":return t.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(n,{width:"narrow",context:"formatting"});case"aaaa":default:return t.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(a,r,t){const e=a.getHours();let n;switch(e===12?n=We.noon:e===0?n=We.midnight:n=e/12>=1?"pm":"am",r){case"b":case"bb":return t.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(n,{width:"narrow",context:"formatting"});case"bbbb":default:return t.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(a,r,t){const e=a.getHours();let n;switch(e>=17?n=We.evening:e>=12?n=We.afternoon:e>=4?n=We.morning:n=We.night,r){case"B":case"BB":case"BBB":return t.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(n,{width:"narrow",context:"formatting"});case"BBBB":default:return t.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(a,r,t){if(r==="ho"){let e=a.getHours()%12;return e===0&&(e=12),t.ordinalNumber(e,{unit:"hour"})}return Ce.h(a,r)},H:function(a,r,t){return r==="Ho"?t.ordinalNumber(a.getHours(),{unit:"hour"}):Ce.H(a,r)},K:function(a,r,t){const e=a.getHours()%12;return r==="Ko"?t.ordinalNumber(e,{unit:"hour"}):A(e,r.length)},k:function(a,r,t){let e=a.getHours();return e===0&&(e=24),r==="ko"?t.ordinalNumber(e,{unit:"hour"}):A(e,r.length)},m:function(a,r,t){return r==="mo"?t.ordinalNumber(a.getMinutes(),{unit:"minute"}):Ce.m(a,r)},s:function(a,r,t){return r==="so"?t.ordinalNumber(a.getSeconds(),{unit:"second"}):Ce.s(a,r)},S:function(a,r){return Ce.S(a,r)},X:function(a,r,t){const e=a.getTimezoneOffset();if(e===0)return"Z";switch(r){case"X":return nr(e);case"XXXX":case"XX":return Te(e);case"XXXXX":case"XXX":default:return Te(e,":")}},x:function(a,r,t){const e=a.getTimezoneOffset();switch(r){case"x":return nr(e);case"xxxx":case"xx":return Te(e);case"xxxxx":case"xxx":default:return Te(e,":")}},O:function(a,r,t){const e=a.getTimezoneOffset();switch(r){case"O":case"OO":case"OOO":return"GMT"+rr(e,":");case"OOOO":default:return"GMT"+Te(e,":")}},z:function(a,r,t){const e=a.getTimezoneOffset();switch(r){case"z":case"zz":case"zzz":return"GMT"+rr(e,":");case"zzzz":default:return"GMT"+Te(e,":")}},t:function(a,r,t){const e=Math.trunc(+a/1e3);return A(e,r.length)},T:function(a,r,t){return A(+a,r.length)}};function rr(a,r=""){const t=a>0?"-":"+",e=Math.abs(a),n=Math.trunc(e/60),o=e%60;return o===0?t+String(n):t+String(n)+r+A(o,2)}function nr(a,r){return a%60===0?(a>0?"-":"+")+A(Math.abs(a)/60,2):Te(a,r)}function Te(a,r=""){const t=a>0?"-":"+",e=Math.abs(a),n=A(Math.trunc(e/60),2),o=A(e%60,2);return t+n+r+o}const ar=(a,r)=>{switch(a){case"P":return r.date({width:"short"});case"PP":return r.date({width:"medium"});case"PPP":return r.date({width:"long"});case"PPPP":default:return r.date({width:"full"})}},Fr=(a,r)=>{switch(a){case"p":return r.time({width:"short"});case"pp":return r.time({width:"medium"});case"ppp":return r.time({width:"long"});case"pppp":default:return r.time({width:"full"})}},va=(a,r)=>{const t=a.match(/(P+)(p+)?/)||[],e=t[1],n=t[2];if(!n)return ar(a,r);let o;switch(e){case"P":o=r.dateTime({width:"short"});break;case"PP":o=r.dateTime({width:"medium"});break;case"PPP":o=r.dateTime({width:"long"});break;case"PPPP":default:o=r.dateTime({width:"full"});break}return o.replace("{{date}}",ar(e,r)).replace("{{time}}",Fr(n,r))},Ft={p:Fr,P:va},ga=/^D+$/,ya=/^Y+$/,wa=["D","DD","YY","YYYY"];function Da(a){return ga.test(a)}function ba(a){return ya.test(a)}function _a(a,r,t){const e=ka(a,r,t);if(console.warn(e),wa.includes(a))throw new RangeError(e)}function ka(a,r,t){const e=a[0]==="Y"?"years":"days of the month";return`Use \`${a.toLowerCase()}\` instead of \`${a}\` (in \`${r}\`) for formatting ${e} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const xa=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Ma=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Ca=/^'([^]*?)'?$/,Sa=/''/g,Pa=/[a-zA-Z]/;function or(a,r,t){const e=Fe(),n=t?.locale??e.locale??Ir,o=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??e.firstWeekContainsDate??e.locale?.options?.firstWeekContainsDate??1,s=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??e.weekStartsOn??e.locale?.options?.weekStartsOn??0,i=k(a,t?.in);if(!ht(i))throw new RangeError("Invalid time value");let c=r.match(Ma).map(l=>{const d=l[0];if(d==="p"||d==="P"){const p=Ft[d];return p(l,n.formatLong)}return l}).join("").match(xa).map(l=>{if(l==="''")return{isToken:!1,value:"'"};const d=l[0];if(d==="'")return{isToken:!1,value:Na(l)};if(tr[d])return{isToken:!0,value:l};if(d.match(Pa))throw new RangeError("Format string contains an unescaped latin alphabet character `"+d+"`");return{isToken:!1,value:l}});n.localize.preprocessor&&(c=n.localize.preprocessor(i,c));const u={firstWeekContainsDate:o,weekStartsOn:s,locale:n};return c.map(l=>{if(!l.isToken)return l.value;const d=l.value;(!t?.useAdditionalWeekYearTokens&&ba(d)||!t?.useAdditionalDayOfYearTokens&&Da(d))&&_a(d,r,String(a));const p=tr[d[0]];return p(i,d,n.localize,u)}).join("")}function Na(a){const r=a.match(Ca);return r?r[1].replace(Sa,"'"):a}function sr(a,r){return k(a,r?.in).getDate()}function Ea(a,r){return k(a,r?.in).getDay()}function Ta(a,r){const t=k(a,r?.in),e=t.getFullYear(),n=t.getMonth(),o=H(t,0);return o.setFullYear(e,n+1,0),o.setHours(0,0,0,0),o.getDate()}function Oa(){return Object.assign({},Fe())}function be(a,r){return k(a,r?.in).getHours()}function Ya(a,r){const t=k(a,r?.in).getDay();return t===0?7:t}function _e(a,r){return k(a,r?.in).getMinutes()}function ne(a,r){return k(a,r?.in).getMonth()}function Se(a){return k(a).getSeconds()}function Wt(a){return+k(a)}function N(a,r){return k(a,r?.in).getFullYear()}function Ne(a,r){return+k(a)>+k(r)}function ve(a,r){return+k(a)<+k(r)}function Ra(a,r){return+k(a)==+k(r)}function Ia(a,r){const t=La(r)?new r(0):H(r,0);return t.setFullYear(a.getFullYear(),a.getMonth(),a.getDate()),t.setHours(a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds()),t}function La(a){return typeof a=="function"&&a.prototype?.constructor===a}const Fa=10;class Wr{subPriority=0;validate(r,t){return!0}}class Wa extends Wr{constructor(r,t,e,n,o){super(),this.value=r,this.validateValue=t,this.setValue=e,this.priority=n,o&&(this.subPriority=o)}validate(r,t){return this.validateValue(r,this.value,t)}set(r,t,e){return this.setValue(r,t,this.value,e)}}class Aa extends Wr{priority=Fa;subPriority=-1;constructor(r,t){super(),this.context=r||(e=>H(t,e))}set(r,t){return t.timestampIsSet?r:H(r,Ia(r,this.context))}}class I{run(r,t,e,n){const o=this.parse(r,t,e,n);return o?{setter:new Wa(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(r,t,e){return!0}}class Ha extends I{priority=140;parse(r,t,e){switch(t){case"G":case"GG":case"GGG":return e.era(r,{width:"abbreviated"})||e.era(r,{width:"narrow"});case"GGGGG":return e.era(r,{width:"narrow"});case"GGGG":default:return e.era(r,{width:"wide"})||e.era(r,{width:"abbreviated"})||e.era(r,{width:"narrow"})}}set(r,t,e){return t.era=e,r.setFullYear(e,0,1),r.setHours(0,0,0,0),r}incompatibleTokens=["R","u","t","T"]}const G={month:/^(1[0-2]|0?\d)/,date:/^(3[0-1]|[0-2]?\d)/,dayOfYear:/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,week:/^(5[0-3]|[0-4]?\d)/,hour23h:/^(2[0-3]|[0-1]?\d)/,hour24h:/^(2[0-4]|[0-1]?\d)/,hour11h:/^(1[0-1]|0?\d)/,hour12h:/^(1[0-2]|0?\d)/,minute:/^[0-5]?\d/,second:/^[0-5]?\d/,singleDigit:/^\d/,twoDigits:/^\d{1,2}/,threeDigits:/^\d{1,3}/,fourDigits:/^\d{1,4}/,anyDigitsSigned:/^-?\d+/,singleDigitSigned:/^-?\d/,twoDigitsSigned:/^-?\d{1,2}/,threeDigitsSigned:/^-?\d{1,3}/,fourDigitsSigned:/^-?\d{1,4}/},he={basicOptionalMinutes:/^([+-])(\d{2})(\d{2})?|Z/,basic:/^([+-])(\d{2})(\d{2})|Z/,basicOptionalSeconds:/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,extended:/^([+-])(\d{2}):(\d{2})|Z/,extendedOptionalSeconds:/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/};function X(a,r){return a&&{value:r(a.value),rest:a.rest}}function U(a,r){const t=r.match(a);return t?{value:parseInt(t[0],10),rest:r.slice(t[0].length)}:null}function me(a,r){const t=r.match(a);if(!t)return null;if(t[0]==="Z")return{value:0,rest:r.slice(1)};const e=t[1]==="+"?1:-1,n=t[2]?parseInt(t[2],10):0,o=t[3]?parseInt(t[3],10):0,s=t[5]?parseInt(t[5],10):0;return{value:e*(n*_t+o*bt+s*Pn),rest:r.slice(t[0].length)}}function Ar(a){return U(G.anyDigitsSigned,a)}function V(a,r){switch(a){case 1:return U(G.singleDigit,r);case 2:return U(G.twoDigits,r);case 3:return U(G.threeDigits,r);case 4:return U(G.fourDigits,r);default:return U(new RegExp("^\\d{1,"+a+"}"),r)}}function yt(a,r){switch(a){case 1:return U(G.singleDigitSigned,r);case 2:return U(G.twoDigitsSigned,r);case 3:return U(G.threeDigitsSigned,r);case 4:return U(G.fourDigitsSigned,r);default:return U(new RegExp("^-?\\d{1,"+a+"}"),r)}}function Bt(a){switch(a){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;case"am":case"midnight":case"night":default:return 0}}function Hr(a,r){const t=r>0,e=t?r:1-r;let n;if(e<=50)n=a||100;else{const o=e+50,s=Math.trunc(o/100)*100,i=a>=o%100;n=a+s-(i?100:0)}return t?n:1-n}function jr(a){return a%400===0||a%4===0&&a%100!==0}class ja extends I{priority=130;incompatibleTokens=["Y","R","u","w","I","i","e","c","t","T"];parse(r,t,e){const n=o=>({year:o,isTwoDigitYear:t==="yy"});switch(t){case"y":return X(V(4,r),n);case"yo":return X(e.ordinalNumber(r,{unit:"year"}),n);default:return X(V(t.length,r),n)}}validate(r,t){return t.isTwoDigitYear||t.year>0}set(r,t,e){const n=r.getFullYear();if(e.isTwoDigitYear){const s=Hr(e.year,n);return r.setFullYear(s,0,1),r.setHours(0,0,0,0),r}const o=!("era"in t)||t.era===1?e.year:1-e.year;return r.setFullYear(o,0,1),r.setHours(0,0,0,0),r}}class Qa extends I{priority=130;parse(r,t,e){const n=o=>({year:o,isTwoDigitYear:t==="YY"});switch(t){case"Y":return X(V(4,r),n);case"Yo":return X(e.ordinalNumber(r,{unit:"year"}),n);default:return X(V(t.length,r),n)}}validate(r,t){return t.isTwoDigitYear||t.year>0}set(r,t,e,n){const o=Qt(r,n);if(e.isTwoDigitYear){const i=Hr(e.year,o);return r.setFullYear(i,0,n.firstWeekContainsDate),r.setHours(0,0,0,0),xe(r,n)}const s=!("era"in t)||t.era===1?e.year:1-e.year;return r.setFullYear(s,0,n.firstWeekContainsDate),r.setHours(0,0,0,0),xe(r,n)}incompatibleTokens=["y","R","u","Q","q","M","L","I","d","D","i","t","T"]}class Ba extends I{priority=130;parse(r,t){return yt(t==="R"?4:t.length,r)}set(r,t,e){const n=H(r,0);return n.setFullYear(e,0,4),n.setHours(0,0,0,0),je(n)}incompatibleTokens=["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"]}class Ka extends I{priority=130;parse(r,t){return yt(t==="u"?4:t.length,r)}set(r,t,e){return r.setFullYear(e,0,1),r.setHours(0,0,0,0),r}incompatibleTokens=["G","y","Y","R","w","I","i","e","c","t","T"]}class qa extends I{priority=120;parse(r,t,e){switch(t){case"Q":case"QQ":return V(t.length,r);case"Qo":return e.ordinalNumber(r,{unit:"quarter"});case"QQQ":return e.quarter(r,{width:"abbreviated",context:"formatting"})||e.quarter(r,{width:"narrow",context:"formatting"});case"QQQQQ":return e.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return e.quarter(r,{width:"wide",context:"formatting"})||e.quarter(r,{width:"abbreviated",context:"formatting"})||e.quarter(r,{width:"narrow",context:"formatting"})}}validate(r,t){return t>=1&&t<=4}set(r,t,e){return r.setMonth((e-1)*3,1),r.setHours(0,0,0,0),r}incompatibleTokens=["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"]}class Ua extends I{priority=120;parse(r,t,e){switch(t){case"q":case"qq":return V(t.length,r);case"qo":return e.ordinalNumber(r,{unit:"quarter"});case"qqq":return e.quarter(r,{width:"abbreviated",context:"standalone"})||e.quarter(r,{width:"narrow",context:"standalone"});case"qqqqq":return e.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return e.quarter(r,{width:"wide",context:"standalone"})||e.quarter(r,{width:"abbreviated",context:"standalone"})||e.quarter(r,{width:"narrow",context:"standalone"})}}validate(r,t){return t>=1&&t<=4}set(r,t,e){return r.setMonth((e-1)*3,1),r.setHours(0,0,0,0),r}incompatibleTokens=["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"]}class Va extends I{incompatibleTokens=["Y","R","q","Q","L","w","I","D","i","e","c","t","T"];priority=110;parse(r,t,e){const n=o=>o-1;switch(t){case"M":return X(U(G.month,r),n);case"MM":return X(V(2,r),n);case"Mo":return X(e.ordinalNumber(r,{unit:"month"}),n);case"MMM":return e.month(r,{width:"abbreviated",context:"formatting"})||e.month(r,{width:"narrow",context:"formatting"});case"MMMMM":return e.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return e.month(r,{width:"wide",context:"formatting"})||e.month(r,{width:"abbreviated",context:"formatting"})||e.month(r,{width:"narrow",context:"formatting"})}}validate(r,t){return t>=0&&t<=11}set(r,t,e){return r.setMonth(e,1),r.setHours(0,0,0,0),r}}class Ga extends I{priority=110;parse(r,t,e){const n=o=>o-1;switch(t){case"L":return X(U(G.month,r),n);case"LL":return X(V(2,r),n);case"Lo":return X(e.ordinalNumber(r,{unit:"month"}),n);case"LLL":return e.month(r,{width:"abbreviated",context:"standalone"})||e.month(r,{width:"narrow",context:"standalone"});case"LLLLL":return e.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return e.month(r,{width:"wide",context:"standalone"})||e.month(r,{width:"abbreviated",context:"standalone"})||e.month(r,{width:"narrow",context:"standalone"})}}validate(r,t){return t>=0&&t<=11}set(r,t,e){return r.setMonth(e,1),r.setHours(0,0,0,0),r}incompatibleTokens=["Y","R","q","Q","M","w","I","D","i","e","c","t","T"]}function Xa(a,r,t){const e=k(a,t?.in),n=Lr(e,t)-r;return e.setDate(e.getDate()-n*7),k(e,t?.in)}class $a extends I{priority=100;parse(r,t,e){switch(t){case"w":return U(G.week,r);case"wo":return e.ordinalNumber(r,{unit:"week"});default:return V(t.length,r)}}validate(r,t){return t>=1&&t<=53}set(r,t,e,n){return xe(Xa(r,e,n),n)}incompatibleTokens=["y","R","u","q","Q","M","L","I","d","D","i","t","T"]}function za(a,r,t){const e=k(a,t?.in),n=jt(e,t)-r;return e.setDate(e.getDate()-n*7),e}class Za extends I{priority=100;parse(r,t,e){switch(t){case"I":return U(G.week,r);case"Io":return e.ordinalNumber(r,{unit:"week"});default:return V(t.length,r)}}validate(r,t){return t>=1&&t<=53}set(r,t,e){return je(za(r,e))}incompatibleTokens=["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"]}const Ja=[31,28,31,30,31,30,31,31,30,31,30,31],eo=[31,29,31,30,31,30,31,31,30,31,30,31];class to extends I{priority=90;subPriority=1;parse(r,t,e){switch(t){case"d":return U(G.date,r);case"do":return e.ordinalNumber(r,{unit:"date"});default:return V(t.length,r)}}validate(r,t){const e=r.getFullYear(),n=jr(e),o=r.getMonth();return n?t>=1&&t<=eo[o]:t>=1&&t<=Ja[o]}set(r,t,e){return r.setDate(e),r.setHours(0,0,0,0),r}incompatibleTokens=["Y","R","q","Q","w","I","D","i","e","c","t","T"]}class ro extends I{priority=90;subpriority=1;parse(r,t,e){switch(t){case"D":case"DD":return U(G.dayOfYear,r);case"Do":return e.ordinalNumber(r,{unit:"date"});default:return V(t.length,r)}}validate(r,t){const e=r.getFullYear();return jr(e)?t>=1&&t<=366:t>=1&&t<=365}set(r,t,e){return r.setMonth(0,e),r.setHours(0,0,0,0),r}incompatibleTokens=["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"]}function Kt(a,r,t){const e=Fe(),n=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??e.weekStartsOn??e.locale?.options?.weekStartsOn??0,o=k(a,t?.in),s=o.getDay(),c=(r%7+7)%7,u=7-n,l=r<0||r>6?r-(s+u)%7:(c+u)%7-(s+u)%7;return ue(o,l,t)}class no extends I{priority=90;parse(r,t,e){switch(t){case"E":case"EE":case"EEE":return e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"});case"EEEEE":return e.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"});case"EEEE":default:return e.day(r,{width:"wide",context:"formatting"})||e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"})}}validate(r,t){return t>=0&&t<=6}set(r,t,e,n){return r=Kt(r,e,n),r.setHours(0,0,0,0),r}incompatibleTokens=["D","i","e","c","t","T"]}class ao extends I{priority=90;parse(r,t,e,n){const o=s=>{const i=Math.floor((s-1)/7)*7;return(s+n.weekStartsOn+6)%7+i};switch(t){case"e":case"ee":return X(V(t.length,r),o);case"eo":return X(e.ordinalNumber(r,{unit:"day"}),o);case"eee":return e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"});case"eeeee":return e.day(r,{width:"narrow",context:"formatting"});case"eeeeee":return e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"});case"eeee":default:return e.day(r,{width:"wide",context:"formatting"})||e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"})}}validate(r,t){return t>=0&&t<=6}set(r,t,e,n){return r=Kt(r,e,n),r.setHours(0,0,0,0),r}incompatibleTokens=["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"]}class oo extends I{priority=90;parse(r,t,e,n){const o=s=>{const i=Math.floor((s-1)/7)*7;return(s+n.weekStartsOn+6)%7+i};switch(t){case"c":case"cc":return X(V(t.length,r),o);case"co":return X(e.ordinalNumber(r,{unit:"day"}),o);case"ccc":return e.day(r,{width:"abbreviated",context:"standalone"})||e.day(r,{width:"short",context:"standalone"})||e.day(r,{width:"narrow",context:"standalone"});case"ccccc":return e.day(r,{width:"narrow",context:"standalone"});case"cccccc":return e.day(r,{width:"short",context:"standalone"})||e.day(r,{width:"narrow",context:"standalone"});case"cccc":default:return e.day(r,{width:"wide",context:"standalone"})||e.day(r,{width:"abbreviated",context:"standalone"})||e.day(r,{width:"short",context:"standalone"})||e.day(r,{width:"narrow",context:"standalone"})}}validate(r,t){return t>=0&&t<=6}set(r,t,e,n){return r=Kt(r,e,n),r.setHours(0,0,0,0),r}incompatibleTokens=["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"]}function so(a,r,t){const e=k(a,t?.in),n=Ya(e,t),o=r-n;return ue(e,o,t)}class io extends I{priority=90;parse(r,t,e){const n=o=>o===0?7:o;switch(t){case"i":case"ii":return V(t.length,r);case"io":return e.ordinalNumber(r,{unit:"day"});case"iii":return X(e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"}),n);case"iiiii":return X(e.day(r,{width:"narrow",context:"formatting"}),n);case"iiiiii":return X(e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"}),n);case"iiii":default:return X(e.day(r,{width:"wide",context:"formatting"})||e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"}),n)}}validate(r,t){return t>=1&&t<=7}set(r,t,e){return r=so(r,e),r.setHours(0,0,0,0),r}incompatibleTokens=["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"]}class co extends I{priority=80;parse(r,t,e){switch(t){case"a":case"aa":case"aaa":return e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaaa":return e.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaa":default:return e.dayPeriod(r,{width:"wide",context:"formatting"})||e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"})}}set(r,t,e){return r.setHours(Bt(e),0,0,0),r}incompatibleTokens=["b","B","H","k","t","T"]}class lo extends I{priority=80;parse(r,t,e){switch(t){case"b":case"bb":case"bbb":return e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbbb":return e.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbb":default:return e.dayPeriod(r,{width:"wide",context:"formatting"})||e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"})}}set(r,t,e){return r.setHours(Bt(e),0,0,0),r}incompatibleTokens=["a","B","H","k","t","T"]}class uo extends I{priority=80;parse(r,t,e){switch(t){case"B":case"BB":case"BBB":return e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBBB":return e.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBB":default:return e.dayPeriod(r,{width:"wide",context:"formatting"})||e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"})}}set(r,t,e){return r.setHours(Bt(e),0,0,0),r}incompatibleTokens=["a","b","t","T"]}class po extends I{priority=70;parse(r,t,e){switch(t){case"h":return U(G.hour12h,r);case"ho":return e.ordinalNumber(r,{unit:"hour"});default:return V(t.length,r)}}validate(r,t){return t>=1&&t<=12}set(r,t,e){const n=r.getHours()>=12;return n&&e<12?r.setHours(e+12,0,0,0):!n&&e===12?r.setHours(0,0,0,0):r.setHours(e,0,0,0),r}incompatibleTokens=["H","K","k","t","T"]}class fo extends I{priority=70;parse(r,t,e){switch(t){case"H":return U(G.hour23h,r);case"Ho":return e.ordinalNumber(r,{unit:"hour"});default:return V(t.length,r)}}validate(r,t){return t>=0&&t<=23}set(r,t,e){return r.setHours(e,0,0,0),r}incompatibleTokens=["a","b","h","K","k","t","T"]}class ho extends I{priority=70;parse(r,t,e){switch(t){case"K":return U(G.hour11h,r);case"Ko":return e.ordinalNumber(r,{unit:"hour"});default:return V(t.length,r)}}validate(r,t){return t>=0&&t<=11}set(r,t,e){return r.getHours()>=12&&e<12?r.setHours(e+12,0,0,0):r.setHours(e,0,0,0),r}incompatibleTokens=["h","H","k","t","T"]}class mo extends I{priority=70;parse(r,t,e){switch(t){case"k":return U(G.hour24h,r);case"ko":return e.ordinalNumber(r,{unit:"hour"});default:return V(t.length,r)}}validate(r,t){return t>=1&&t<=24}set(r,t,e){const n=e<=24?e%24:e;return r.setHours(n,0,0,0),r}incompatibleTokens=["a","b","h","H","K","t","T"]}class vo extends I{priority=60;parse(r,t,e){switch(t){case"m":return U(G.minute,r);case"mo":return e.ordinalNumber(r,{unit:"minute"});default:return V(t.length,r)}}validate(r,t){return t>=0&&t<=59}set(r,t,e){return r.setMinutes(e,0,0),r}incompatibleTokens=["t","T"]}class go extends I{priority=50;parse(r,t,e){switch(t){case"s":return U(G.second,r);case"so":return e.ordinalNumber(r,{unit:"second"});default:return V(t.length,r)}}validate(r,t){return t>=0&&t<=59}set(r,t,e){return r.setSeconds(e,0),r}incompatibleTokens=["t","T"]}class yo extends I{priority=30;parse(r,t){const e=n=>Math.trunc(n*Math.pow(10,-t.length+3));return X(V(t.length,r),e)}set(r,t,e){return r.setMilliseconds(e),r}incompatibleTokens=["t","T"]}class wo extends I{priority=10;parse(r,t){switch(t){case"X":return me(he.basicOptionalMinutes,r);case"XX":return me(he.basic,r);case"XXXX":return me(he.basicOptionalSeconds,r);case"XXXXX":return me(he.extendedOptionalSeconds,r);case"XXX":default:return me(he.extended,r)}}set(r,t,e){return t.timestampIsSet?r:H(r,r.getTime()-pt(r)-e)}incompatibleTokens=["t","T","x"]}class Do extends I{priority=10;parse(r,t){switch(t){case"x":return me(he.basicOptionalMinutes,r);case"xx":return me(he.basic,r);case"xxxx":return me(he.basicOptionalSeconds,r);case"xxxxx":return me(he.extendedOptionalSeconds,r);case"xxx":default:return me(he.extended,r)}}set(r,t,e){return t.timestampIsSet?r:H(r,r.getTime()-pt(r)-e)}incompatibleTokens=["t","T","X"]}class bo extends I{priority=40;parse(r){return Ar(r)}set(r,t,e){return[H(r,e*1e3),{timestampIsSet:!0}]}incompatibleTokens="*"}class _o extends I{priority=20;parse(r){return Ar(r)}set(r,t,e){return[H(r,e),{timestampIsSet:!0}]}incompatibleTokens="*"}const ko={G:new Ha,y:new ja,Y:new Qa,R:new Ba,u:new Ka,Q:new qa,q:new Ua,M:new Va,L:new Ga,w:new $a,I:new Za,d:new to,D:new ro,E:new no,e:new ao,c:new oo,i:new io,a:new co,b:new lo,B:new uo,h:new po,H:new fo,K:new ho,k:new mo,m:new vo,s:new go,S:new yo,X:new wo,x:new Do,t:new bo,T:new _o},xo=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Mo=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Co=/^'([^]*?)'?$/,So=/''/g,Po=/\S/,No=/[a-zA-Z]/;function Eo(a,r,t,e){const n=()=>H(e?.in||t,NaN),o=Oa(),s=e?.locale??o.locale??Ir,i=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??o.firstWeekContainsDate??o.locale?.options?.firstWeekContainsDate??1,c=e?.weekStartsOn??e?.locale?.options?.weekStartsOn??o.weekStartsOn??o.locale?.options?.weekStartsOn??0;if(!r)return a?n():k(t,e?.in);const u={firstWeekContainsDate:i,weekStartsOn:c,locale:s},l=[new Aa(e?.in,t)],d=r.match(Mo).map(v=>{const D=v[0];if(D in Ft){const M=Ft[D];return M(v,s.formatLong)}return v}).join("").match(xo),p=[];for(let v of d){const D=v[0],M=ko[D];if(M){const{incompatibleTokens:C}=M;if(Array.isArray(C)){const K=p.find(S=>C.includes(S.token)||S.token===D);if(K)throw new RangeError(`The format string mustn't contain \`${K.fullToken}\` and \`${v}\` at the same time`)}else if(M.incompatibleTokens==="*"&&p.length>0)throw new RangeError(`The format string mustn't contain \`${v}\` and any other token at the same time`);p.push({token:D,fullToken:v});const F=M.run(a,v,s.match,u);if(!F)return n();l.push(F.setter),a=F.rest}else{if(D.match(No))throw new RangeError("Format string contains an unescaped latin alphabet character `"+D+"`");if(v==="''"?v="'":D==="'"&&(v=To(v)),a.indexOf(v)===0)a=a.slice(v.length);else return n()}}if(a.length>0&&Po.test(a))return n();const m=l.map(v=>v.priority).sort((v,D)=>D-v).filter((v,D,M)=>M.indexOf(v)===D).map(v=>l.filter(D=>D.priority===v).sort((D,M)=>M.subPriority-D.subPriority)).map(v=>v[0]);let g=k(t,e?.in);if(isNaN(+g))return n();const w={};for(const v of m){if(!v.validate(g,u))return n();const D=v.set(g,w,u);Array.isArray(D)?(g=D[0],Object.assign(w,D[1])):g=D}return g}function To(a){return a.match(Co)[1].replace(So,"'")}function Oo(a,r,t){const[e,n]=Me(t?.in,a,r);return e.getFullYear()===n.getFullYear()&&e.getMonth()===n.getMonth()}function Yo(a,r,t){const[e,n]=Me(t?.in,a,r);return+Lt(e)==+Lt(n)}function Ro(a,r,t){const[e,n]=Me(t?.in,a,r);return e.getFullYear()===n.getFullYear()}function $e(a,r,t){const e=+k(a,t?.in),[n,o]=[+k(r.start,t?.in),+k(r.end,t?.in)].sort((s,i)=>s-i);return e>=n&&e<=o}function Io(a,r,t){return ue(a,-1,t)}function Lo(a,r){const t=()=>H(r?.in,NaN),n=Ho(a);let o;if(n.date){const u=jo(n.date,2);o=Qo(u.restDateString,u.year)}if(!o||isNaN(+o))return t();const s=+o;let i=0,c;if(n.time&&(i=Bo(n.time),isNaN(i)))return t();if(n.timezone){if(c=Ko(n.timezone),isNaN(c))return t()}else{const u=new Date(s+i),l=k(0,r?.in);return l.setFullYear(u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()),l.setHours(u.getUTCHours(),u.getUTCMinutes(),u.getUTCSeconds(),u.getUTCMilliseconds()),l}return k(s+i+c,r?.in)}const tt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},Fo=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,Wo=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,Ao=/^([+-])(\d{2})(?::?(\d{2}))?$/;function Ho(a){const r={},t=a.split(tt.dateTimeDelimiter);let e;if(t.length>2)return r;if(/:/.test(t[0])?e=t[0]:(r.date=t[0],e=t[1],tt.timeZoneDelimiter.test(r.date)&&(r.date=a.split(tt.timeZoneDelimiter)[0],e=a.substr(r.date.length,a.length))),e){const n=tt.timezone.exec(e);n?(r.time=e.replace(n[1],""),r.timezone=n[1]):r.time=e}return r}function jo(a,r){const t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+r)+"})|(\\d{2}|[+-]\\d{"+(2+r)+"})$)"),e=a.match(t);if(!e)return{year:NaN,restDateString:""};const n=e[1]?parseInt(e[1]):null,o=e[2]?parseInt(e[2]):null;return{year:o===null?n:o*100,restDateString:a.slice((e[1]||e[2]).length)}}function Qo(a,r){if(r===null)return new Date(NaN);const t=a.match(Fo);if(!t)return new Date(NaN);const e=!!t[4],n=Ve(t[1]),o=Ve(t[2])-1,s=Ve(t[3]),i=Ve(t[4]),c=Ve(t[5])-1;if(e)return Xo(r,i,c)?qo(r,i,c):new Date(NaN);{const u=new Date(0);return!Vo(r,o,s)||!Go(r,n)?new Date(NaN):(u.setUTCFullYear(r,o,Math.max(n,s)),u)}}function Ve(a){return a?parseInt(a):1}function Bo(a){const r=a.match(Wo);if(!r)return NaN;const t=Pt(r[1]),e=Pt(r[2]),n=Pt(r[3]);return $o(t,e,n)?t*_t+e*bt+n*1e3:NaN}function Pt(a){return a&&parseFloat(a.replace(",","."))||0}function Ko(a){if(a==="Z")return 0;const r=a.match(Ao);if(!r)return 0;const t=r[1]==="+"?-1:1,e=parseInt(r[2]),n=r[3]&&parseInt(r[3])||0;return zo(e,n)?t*(e*_t+n*bt):NaN}function qo(a,r,t){const e=new Date(0);e.setUTCFullYear(a,0,4);const n=e.getUTCDay()||7,o=(r-1)*7+t+1-n;return e.setUTCDate(e.getUTCDate()+o),e}const Uo=[31,null,31,30,31,30,31,31,30,31,30,31];function Qr(a){return a%400===0||a%4===0&&a%100!==0}function Vo(a,r,t){return r>=0&&r<=11&&t>=1&&t<=(Uo[r]||(Qr(a)?29:28))}function Go(a,r){return r>=1&&r<=(Qr(a)?366:365)}function Xo(a,r,t){return r>=1&&r<=53&&t>=0&&t<=6}function $o(a,r,t){return a===24?r===0&&t===0:t>=0&&t<60&&r>=0&&r<60&&a>=0&&a<25}function zo(a,r){return r>=0&&r<=59}function ie(a,r,t){const e=k(a,t?.in),n=e.getFullYear(),o=e.getDate(),s=H(a,0);s.setFullYear(n,r,15),s.setHours(0,0,0,0);const i=Ta(s);return e.setMonth(r,Math.min(o,i)),e}function it(a,r,t){const e=k(a,t?.in);return e.setHours(r),e}function ct(a,r,t){const e=k(a,t?.in);return e.setMinutes(r),e}function Ae(a,r,t){const e=k(a,t?.in),n=Math.trunc(e.getMonth()/3)+1,o=r-n;return ie(e,e.getMonth()+o*3)}function lt(a,r,t){const e=k(a,t?.in);return e.setSeconds(r),e}function pe(a,r,t){const e=k(a,t?.in);return isNaN(+e)?H(a,NaN):(e.setFullYear(r),e)}function Ie(a,r,t){return de(a,-r,t)}function Br(a,r,t){return Ht(a,-1,t)}function ir(a,r,t){return ft(a,-1,t)}function Be(a,r,t){return we(a,-r,t)}var Zo=typeof document<"u",Jo=function(){},wt=Zo?_.useLayoutEffect:Jo;const es={...Sr},ts=es.useInsertionEffect,rs=ts||(a=>a());function ns(a){const r=_.useRef(()=>{});return rs(()=>{r.current=a}),_.useCallback(function(){for(var t=arguments.length,e=new Array(t),n=0;n"floating-ui-"+Math.random().toString(36).slice(2,6)+os++;function ss(){const[a,r]=_.useState(()=>cr?lr():void 0);return wt(()=>{a==null&&r(lr())},[]),_.useEffect(()=>{cr=!0},[]),a}const is=as.useId,Kr=is||ss,cs=_.forwardRef(function(r,t){const{context:{placement:e,elements:{floating:n},middlewareData:{arrow:o,shift:s}},width:i=14,height:c=7,tipRadius:u=0,strokeWidth:l=0,staticOffset:d,stroke:p,d:m,style:{transform:g,...w}={},...v}=r,D=Kr(),[M,C]=_.useState(!1);if(wt(()=>{if(!n)return;cn(n).direction==="rtl"&&C(!0)},[n]),!n)return null;const[F,K]=e.split("-"),S=F==="top"||F==="bottom";let x=d;(S&&s!=null&&s.x||!S&&s!=null&&s.y)&&(x=null);const E=l*2,R=E/2,Y=i/2*(u/-8+1),z=c/2*u/4,q=!!m,te=x&&K==="end"?"bottom":"top";let le=x&&K==="end"?"right":"left";x&&M&&(le=K==="end"?"left":"right");const $=o?.x!=null?x||o.x:"",W=o?.y!=null?x||o.y:"",Q=m||"M0,0"+(" H"+i)+(" L"+(i-Y)+","+(c-z))+(" Q"+i/2+","+c+" "+Y+","+(c-z))+" Z",ae={top:q?"rotate(180deg)":"",left:q?"rotate(90deg)":"rotate(-90deg)",bottom:q?"":"rotate(180deg)",right:q?"rotate(-90deg)":"rotate(90deg)"}[F];return f.jsxs("svg",{...v,"aria-hidden":!0,ref:t,width:q?i:i+E,height:i,viewBox:"0 0 "+i+" "+(c>i?c:i),style:{position:"absolute",pointerEvents:"none",[le]:$,[te]:W,[F]:S||q?"100%":"calc(100% - "+E/2+"px)",transform:[ae,g].filter(y=>!!y).join(" "),...w},children:[E>0&&f.jsx("path",{clipPath:"url(#"+D+")",fill:"none",stroke:p,strokeWidth:E+(m?0:1),d:Q}),f.jsx("path",{stroke:E&&!m?v.fill:"none",d:Q}),f.jsx("clipPath",{id:D,children:f.jsx("rect",{x:-R,y:R*(q?-1:1),width:i+E,height:i})})]})});function ls(){const a=new Map;return{emit(r,t){var e;(e=a.get(r))==null||e.forEach(n=>n(t))},on(r,t){a.has(r)||a.set(r,new Set),a.get(r).add(t)},off(r,t){var e;(e=a.get(r))==null||e.delete(t)}}}const us=_.createContext(null),ds=_.createContext(null),ps=()=>{var a;return((a=_.useContext(us))==null?void 0:a.id)||null},fs=()=>_.useContext(ds);function hs(a){const{open:r=!1,onOpenChange:t,elements:e}=a,n=Kr(),o=_.useRef({}),[s]=_.useState(()=>ls()),i=ps()!=null,[c,u]=_.useState(e.reference),l=ns((m,g,w)=>{o.current.openEvent=m?g:void 0,s.emit("openchange",{open:m,event:g,reason:w,nested:i}),t?.(m,g,w)}),d=_.useMemo(()=>({setPositionReference:u}),[]),p=_.useMemo(()=>({reference:c||e.reference||null,floating:e.floating||null,domReference:e.reference}),[c,e.reference,e.floating]);return _.useMemo(()=>({dataRef:o,open:r,onOpenChange:l,elements:p,events:s,floatingId:n,refs:d}),[r,l,p,s,n,d])}function ms(a){a===void 0&&(a={});const{nodeId:r}=a,t=hs({...a,elements:{reference:null,floating:null,...a.elements}}),e=a.rootContext||t,n=e.elements,[o,s]=_.useState(null),[i,c]=_.useState(null),l=n?.domReference||o,d=_.useRef(null),p=fs();wt(()=>{l&&(d.current=l)},[l]);const m=sn({...a,elements:{...n,...i&&{reference:i}}}),g=_.useCallback(C=>{const F=Je(C)?{getBoundingClientRect:()=>C.getBoundingClientRect(),getClientRects:()=>C.getClientRects(),contextElement:C}:C;c(F),m.refs.setReference(F)},[m.refs]),w=_.useCallback(C=>{(Je(C)||C===null)&&(d.current=C,s(C)),(Je(m.refs.reference.current)||m.refs.reference.current===null||C!==null&&!Je(C))&&m.refs.setReference(C)},[m.refs]),v=_.useMemo(()=>({...m.refs,setReference:w,setPositionReference:g,domReference:d}),[m.refs,w,g]),D=_.useMemo(()=>({...m.elements,domReference:l}),[m.elements,l]),M=_.useMemo(()=>({...m,...e,refs:v,elements:D,nodeId:r}),[m,v,D,r,e]);return wt(()=>{e.dataRef.current.floatingContext=M;const C=p?.nodesRef.current.find(F=>F.id===r);C&&(C.context=M)}),_.useMemo(()=>({...m,context:M,refs:v,elements:D}),[m,v,D,M])}/*! +import{r as _,t as Sr,j as f,U as h,u as rn,H as nn,L as an,a as on}from"./app-BkR-Yu8_.js";import{c as J}from"./utils-DFaayVYX.js";import{u as sn,i as Je,g as cn,a as ln,f as un,o as dn,b as pn,c as fn,A as hn,d as mn,e as vn,s as gn}from"./app-layout-6TmSMbxU.js";import{R as yn}from"./index-C-iMGC_l.js";import{B as Ct}from"./button-BkeD6D9C.js";import{I as Gt}from"./input-BFktu1Ja.js";import{L as re}from"./label-B8qNWxTC.js";import{T as Xt}from"./textarea-dZ5N8NJE.js";import{B as wn}from"./badge-jojBb81G.js";import{C as et}from"./checkbox-BiI6uQz7.js";import{c as Dn,d as bn}from"./index-BV9LgQgg.js";import{S as _n}from"./sparkles-lisodQIP.js";import{U as kn}from"./users-BPIE1cfL.js";import{P as xn}from"./phone-JmLs-27P.js";import{C as $t}from"./clock-ORU7RUR6.js";import{S as Mn}from"./send-BIH-xC-j.js";import{R as Cn}from"./repeat-YCiHDVYw.js";/* empty css */import"./index-BxSFA7Jd.js";import"./shield-check-BR6okPK2.js";import"./coins-CBBvu4lK.js";import"./index--_rDGB40.js";import"./check-B5v_CoGh.js";const Pr=6048e5,Sn=864e5,bt=6e4,_t=36e5,Pn=1e3,zt=Symbol.for("constructDateFrom");function H(a,r){return typeof a=="function"?a(r):a&&typeof a=="object"&&zt in a?a[zt](r):a instanceof Date?new a.constructor(r):new Date(r)}function k(a,r){return H(r||a,a)}function ue(a,r,t){const e=k(a,t?.in);return isNaN(r)?H(t?.in||a,NaN):(r&&e.setDate(e.getDate()+r),e)}function de(a,r,t){const e=k(a,t?.in);if(isNaN(r))return H(a,NaN);if(!r)return e;const n=e.getDate(),o=H(a,e.getTime());o.setMonth(e.getMonth()+r+1,0);const s=o.getDate();return n>=s?o:(e.setFullYear(o.getFullYear(),o.getMonth(),n),e)}function Nr(a,r,t){return H(a,+k(a)+r)}function Nn(a,r,t){return Nr(a,r*_t)}let En={};function Fe(){return En}function xe(a,r){const t=Fe(),e=r?.weekStartsOn??r?.locale?.options?.weekStartsOn??t.weekStartsOn??t.locale?.options?.weekStartsOn??0,n=k(a,r?.in),o=n.getDay(),s=(o=o.getTime()?e+1:t.getTime()>=i.getTime()?e:e-1}function pt(a){const r=k(a),t=new Date(Date.UTC(r.getFullYear(),r.getMonth(),r.getDate(),r.getHours(),r.getMinutes(),r.getSeconds(),r.getMilliseconds()));return t.setUTCFullYear(r.getFullYear()),+a-+t}function Me(a,...r){const t=H.bind(null,r.find(e=>typeof e=="object"));return r.map(t)}function Le(a,r){const t=k(a,r?.in);return t.setHours(0,0,0,0),t}function Qe(a,r,t){const[e,n]=Me(t?.in,a,r),o=Le(e),s=Le(n),i=+o-pt(o),c=+s-pt(s);return Math.round((i-c)/Sn)}function Tn(a,r){const t=Er(a,r),e=H(a,0);return e.setFullYear(t,0,4),e.setHours(0,0,0,0),je(e)}function It(a,r,t){const e=k(a,t?.in);return e.setTime(e.getTime()+r*bt),e}function Ht(a,r,t){return de(a,r*3,t)}function On(a,r,t){return Nr(a,r*1e3)}function ft(a,r,t){return ue(a,r*7,t)}function we(a,r,t){return de(a,r*12,t)}function Zt(a,r){let t,e=r?.in;return a.forEach(n=>{!e&&typeof n=="object"&&(e=H.bind(null,n));const o=k(n,e);(!t||t{!e&&typeof n=="object"&&(e=H.bind(null,n));const o=k(n,e);(!t||t>o||isNaN(+o))&&(t=o)}),H(e,t||NaN)}function Yn(a,r,t){const[e,n]=Me(t?.in,a,r);return+Le(e)==+Le(n)}function De(a){return a instanceof Date||typeof a=="object"&&Object.prototype.toString.call(a)==="[object Date]"}function ht(a){return!(!De(a)&&typeof a!="number"||isNaN(+k(a)))}function mt(a,r,t){const[e,n]=Me(t?.in,a,r),o=e.getFullYear()-n.getFullYear(),s=e.getMonth()-n.getMonth();return o*12+s}function Re(a,r){const t=k(a,r?.in);return Math.trunc(t.getMonth()/3)+1}function vt(a,r,t){const[e,n]=Me(t?.in,a,r),o=e.getFullYear()-n.getFullYear(),s=Re(e)-Re(n);return o*4+s}function gt(a,r,t){const[e,n]=Me(t?.in,a,r);return e.getFullYear()-n.getFullYear()}function Rn(a,r,t){const[e,n]=Me(t?.in,a,r),o=er(e,n),s=Math.abs(Qe(e,n));e.setDate(e.getDate()-o*s);const i=+(er(e,n)===-o),c=o*(s-i);return c===0?0:c}function er(a,r){const t=a.getFullYear()-r.getFullYear()||a.getMonth()-r.getMonth()||a.getDate()-r.getDate()||a.getHours()-r.getHours()||a.getMinutes()-r.getMinutes()||a.getSeconds()-r.getSeconds()||a.getMilliseconds()-r.getMilliseconds();return t<0?-1:t>0?1:t}function Tr(a,r){const t=k(a,r?.in);return t.setHours(23,59,59,999),t}function Or(a,r){const t=k(a,r?.in),e=t.getMonth();return t.setFullYear(t.getFullYear(),e+1,0),t.setHours(23,59,59,999),t}function Lt(a,r){const t=k(a,r?.in),e=t.getMonth(),n=e-e%3;return t.setMonth(n,1),t.setHours(0,0,0,0),t}function Yr(a,r){const t=k(a,r?.in);return t.setDate(1),t.setHours(0,0,0,0),t}function Rr(a,r){const t=k(a,r?.in),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function kt(a,r){const t=k(a,r?.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}function In(a,r){const t=Fe(),e=t.weekStartsOn??t.locale?.options?.weekStartsOn??0,n=k(a,r?.in),o=n.getDay(),s=(o{let e;const n=Ln[a];return typeof n=="string"?e=n:r===1?e=n.one:e=n.other.replace("{{count}}",r.toString()),t?.addSuffix?t.comparison&&t.comparison>0?"in "+e:e+" ago":e};function St(a){return(r={})=>{const t=r.width?String(r.width):a.defaultWidth;return a.formats[t]||a.formats[a.defaultWidth]}}const Wn={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},An={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Hn={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},jn={date:St({formats:Wn,defaultWidth:"full"}),time:St({formats:An,defaultWidth:"full"}),dateTime:St({formats:Hn,defaultWidth:"full"})},Qn={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Bn=(a,r,t,e)=>Qn[a];function qe(a){return(r,t)=>{const e=t?.context?String(t.context):"standalone";let n;if(e==="formatting"&&a.formattingValues){const s=a.defaultFormattingWidth||a.defaultWidth,i=t?.width?String(t.width):s;n=a.formattingValues[i]||a.formattingValues[s]}else{const s=a.defaultWidth,i=t?.width?String(t.width):a.defaultWidth;n=a.values[i]||a.values[s]}const o=a.argumentCallback?a.argumentCallback(r):r;return n[o]}}const Kn={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},qn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Un={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Vn={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Gn={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Xn={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},$n=(a,r)=>{const t=Number(a),e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},zn={ordinalNumber:$n,era:qe({values:Kn,defaultWidth:"wide"}),quarter:qe({values:qn,defaultWidth:"wide",argumentCallback:a=>a-1}),month:qe({values:Un,defaultWidth:"wide"}),day:qe({values:Vn,defaultWidth:"wide"}),dayPeriod:qe({values:Gn,defaultWidth:"wide",formattingValues:Xn,defaultFormattingWidth:"wide"})};function Ue(a){return(r,t={})=>{const e=t.width,n=e&&a.matchPatterns[e]||a.matchPatterns[a.defaultMatchWidth],o=r.match(n);if(!o)return null;const s=o[0],i=e&&a.parsePatterns[e]||a.parsePatterns[a.defaultParseWidth],c=Array.isArray(i)?Jn(i,d=>d.test(s)):Zn(i,d=>d.test(s));let u;u=a.valueCallback?a.valueCallback(c):c,u=t.valueCallback?t.valueCallback(u):u;const l=r.slice(s.length);return{value:u,rest:l}}}function Zn(a,r){for(const t in a)if(Object.prototype.hasOwnProperty.call(a,t)&&r(a[t]))return t}function Jn(a,r){for(let t=0;t{const e=r.match(a.matchPattern);if(!e)return null;const n=e[0],o=r.match(a.parsePattern);if(!o)return null;let s=a.valueCallback?a.valueCallback(o[0]):o[0];s=t.valueCallback?t.valueCallback(s):s;const i=r.slice(n.length);return{value:s,rest:i}}}const ta=/^(\d+)(th|st|nd|rd)?/i,ra=/\d+/i,na={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},aa={any:[/^b/i,/^(a|c)/i]},oa={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},sa={any:[/1/i,/2/i,/3/i,/4/i]},ia={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},ca={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},la={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},ua={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},da={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},pa={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},fa={ordinalNumber:ea({matchPattern:ta,parsePattern:ra,valueCallback:a=>parseInt(a,10)}),era:Ue({matchPatterns:na,defaultMatchWidth:"wide",parsePatterns:aa,defaultParseWidth:"any"}),quarter:Ue({matchPatterns:oa,defaultMatchWidth:"wide",parsePatterns:sa,defaultParseWidth:"any",valueCallback:a=>a+1}),month:Ue({matchPatterns:ia,defaultMatchWidth:"wide",parsePatterns:ca,defaultParseWidth:"any"}),day:Ue({matchPatterns:la,defaultMatchWidth:"wide",parsePatterns:ua,defaultParseWidth:"any"}),dayPeriod:Ue({matchPatterns:da,defaultMatchWidth:"any",parsePatterns:pa,defaultParseWidth:"any"})},Ir={code:"en-US",formatDistance:Fn,formatLong:jn,formatRelative:Bn,localize:zn,match:fa,options:{weekStartsOn:0,firstWeekContainsDate:1}};function ha(a,r){const t=k(a,r?.in);return Qe(t,kt(t))+1}function jt(a,r){const t=k(a,r?.in),e=+je(t)-+Tn(t);return Math.round(e/Pr)+1}function Qt(a,r){const t=k(a,r?.in),e=t.getFullYear(),n=Fe(),o=r?.firstWeekContainsDate??r?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,s=H(r?.in||a,0);s.setFullYear(e+1,0,o),s.setHours(0,0,0,0);const i=xe(s,r),c=H(r?.in||a,0);c.setFullYear(e,0,o),c.setHours(0,0,0,0);const u=xe(c,r);return+t>=+i?e+1:+t>=+u?e:e-1}function ma(a,r){const t=Fe(),e=r?.firstWeekContainsDate??r?.locale?.options?.firstWeekContainsDate??t.firstWeekContainsDate??t.locale?.options?.firstWeekContainsDate??1,n=Qt(a,r),o=H(r?.in||a,0);return o.setFullYear(n,0,e),o.setHours(0,0,0,0),xe(o,r)}function Lr(a,r){const t=k(a,r?.in),e=+xe(t,r)-+ma(t,r);return Math.round(e/Pr)+1}function A(a,r){const t=a<0?"-":"",e=Math.abs(a).toString().padStart(r,"0");return t+e}const Ce={y(a,r){const t=a.getFullYear(),e=t>0?t:1-t;return A(r==="yy"?e%100:e,r.length)},M(a,r){const t=a.getMonth();return r==="M"?String(t+1):A(t+1,2)},d(a,r){return A(a.getDate(),r.length)},a(a,r){const t=a.getHours()/12>=1?"pm":"am";switch(r){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];case"aaaa":default:return t==="am"?"a.m.":"p.m."}},h(a,r){return A(a.getHours()%12||12,r.length)},H(a,r){return A(a.getHours(),r.length)},m(a,r){return A(a.getMinutes(),r.length)},s(a,r){return A(a.getSeconds(),r.length)},S(a,r){const t=r.length,e=a.getMilliseconds(),n=Math.trunc(e*Math.pow(10,t-3));return A(n,r.length)}},We={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},tr={G:function(a,r,t){const e=a.getFullYear()>0?1:0;switch(r){case"G":case"GG":case"GGG":return t.era(e,{width:"abbreviated"});case"GGGGG":return t.era(e,{width:"narrow"});case"GGGG":default:return t.era(e,{width:"wide"})}},y:function(a,r,t){if(r==="yo"){const e=a.getFullYear(),n=e>0?e:1-e;return t.ordinalNumber(n,{unit:"year"})}return Ce.y(a,r)},Y:function(a,r,t,e){const n=Qt(a,e),o=n>0?n:1-n;if(r==="YY"){const s=o%100;return A(s,2)}return r==="Yo"?t.ordinalNumber(o,{unit:"year"}):A(o,r.length)},R:function(a,r){const t=Er(a);return A(t,r.length)},u:function(a,r){const t=a.getFullYear();return A(t,r.length)},Q:function(a,r,t){const e=Math.ceil((a.getMonth()+1)/3);switch(r){case"Q":return String(e);case"QQ":return A(e,2);case"Qo":return t.ordinalNumber(e,{unit:"quarter"});case"QQQ":return t.quarter(e,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(e,{width:"narrow",context:"formatting"});case"QQQQ":default:return t.quarter(e,{width:"wide",context:"formatting"})}},q:function(a,r,t){const e=Math.ceil((a.getMonth()+1)/3);switch(r){case"q":return String(e);case"qq":return A(e,2);case"qo":return t.ordinalNumber(e,{unit:"quarter"});case"qqq":return t.quarter(e,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(e,{width:"narrow",context:"standalone"});case"qqqq":default:return t.quarter(e,{width:"wide",context:"standalone"})}},M:function(a,r,t){const e=a.getMonth();switch(r){case"M":case"MM":return Ce.M(a,r);case"Mo":return t.ordinalNumber(e+1,{unit:"month"});case"MMM":return t.month(e,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(e,{width:"narrow",context:"formatting"});case"MMMM":default:return t.month(e,{width:"wide",context:"formatting"})}},L:function(a,r,t){const e=a.getMonth();switch(r){case"L":return String(e+1);case"LL":return A(e+1,2);case"Lo":return t.ordinalNumber(e+1,{unit:"month"});case"LLL":return t.month(e,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(e,{width:"narrow",context:"standalone"});case"LLLL":default:return t.month(e,{width:"wide",context:"standalone"})}},w:function(a,r,t,e){const n=Lr(a,e);return r==="wo"?t.ordinalNumber(n,{unit:"week"}):A(n,r.length)},I:function(a,r,t){const e=jt(a);return r==="Io"?t.ordinalNumber(e,{unit:"week"}):A(e,r.length)},d:function(a,r,t){return r==="do"?t.ordinalNumber(a.getDate(),{unit:"date"}):Ce.d(a,r)},D:function(a,r,t){const e=ha(a);return r==="Do"?t.ordinalNumber(e,{unit:"dayOfYear"}):A(e,r.length)},E:function(a,r,t){const e=a.getDay();switch(r){case"E":case"EE":case"EEE":return t.day(e,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(e,{width:"short",context:"formatting"});case"EEEE":default:return t.day(e,{width:"wide",context:"formatting"})}},e:function(a,r,t,e){const n=a.getDay(),o=(n-e.weekStartsOn+8)%7||7;switch(r){case"e":return String(o);case"ee":return A(o,2);case"eo":return t.ordinalNumber(o,{unit:"day"});case"eee":return t.day(n,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(n,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(n,{width:"short",context:"formatting"});case"eeee":default:return t.day(n,{width:"wide",context:"formatting"})}},c:function(a,r,t,e){const n=a.getDay(),o=(n-e.weekStartsOn+8)%7||7;switch(r){case"c":return String(o);case"cc":return A(o,r.length);case"co":return t.ordinalNumber(o,{unit:"day"});case"ccc":return t.day(n,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(n,{width:"narrow",context:"standalone"});case"cccccc":return t.day(n,{width:"short",context:"standalone"});case"cccc":default:return t.day(n,{width:"wide",context:"standalone"})}},i:function(a,r,t){const e=a.getDay(),n=e===0?7:e;switch(r){case"i":return String(n);case"ii":return A(n,r.length);case"io":return t.ordinalNumber(n,{unit:"day"});case"iii":return t.day(e,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(e,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(e,{width:"short",context:"formatting"});case"iiii":default:return t.day(e,{width:"wide",context:"formatting"})}},a:function(a,r,t){const n=a.getHours()/12>=1?"pm":"am";switch(r){case"a":case"aa":return t.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(n,{width:"narrow",context:"formatting"});case"aaaa":default:return t.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(a,r,t){const e=a.getHours();let n;switch(e===12?n=We.noon:e===0?n=We.midnight:n=e/12>=1?"pm":"am",r){case"b":case"bb":return t.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(n,{width:"narrow",context:"formatting"});case"bbbb":default:return t.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(a,r,t){const e=a.getHours();let n;switch(e>=17?n=We.evening:e>=12?n=We.afternoon:e>=4?n=We.morning:n=We.night,r){case"B":case"BB":case"BBB":return t.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(n,{width:"narrow",context:"formatting"});case"BBBB":default:return t.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(a,r,t){if(r==="ho"){let e=a.getHours()%12;return e===0&&(e=12),t.ordinalNumber(e,{unit:"hour"})}return Ce.h(a,r)},H:function(a,r,t){return r==="Ho"?t.ordinalNumber(a.getHours(),{unit:"hour"}):Ce.H(a,r)},K:function(a,r,t){const e=a.getHours()%12;return r==="Ko"?t.ordinalNumber(e,{unit:"hour"}):A(e,r.length)},k:function(a,r,t){let e=a.getHours();return e===0&&(e=24),r==="ko"?t.ordinalNumber(e,{unit:"hour"}):A(e,r.length)},m:function(a,r,t){return r==="mo"?t.ordinalNumber(a.getMinutes(),{unit:"minute"}):Ce.m(a,r)},s:function(a,r,t){return r==="so"?t.ordinalNumber(a.getSeconds(),{unit:"second"}):Ce.s(a,r)},S:function(a,r){return Ce.S(a,r)},X:function(a,r,t){const e=a.getTimezoneOffset();if(e===0)return"Z";switch(r){case"X":return nr(e);case"XXXX":case"XX":return Te(e);case"XXXXX":case"XXX":default:return Te(e,":")}},x:function(a,r,t){const e=a.getTimezoneOffset();switch(r){case"x":return nr(e);case"xxxx":case"xx":return Te(e);case"xxxxx":case"xxx":default:return Te(e,":")}},O:function(a,r,t){const e=a.getTimezoneOffset();switch(r){case"O":case"OO":case"OOO":return"GMT"+rr(e,":");case"OOOO":default:return"GMT"+Te(e,":")}},z:function(a,r,t){const e=a.getTimezoneOffset();switch(r){case"z":case"zz":case"zzz":return"GMT"+rr(e,":");case"zzzz":default:return"GMT"+Te(e,":")}},t:function(a,r,t){const e=Math.trunc(+a/1e3);return A(e,r.length)},T:function(a,r,t){return A(+a,r.length)}};function rr(a,r=""){const t=a>0?"-":"+",e=Math.abs(a),n=Math.trunc(e/60),o=e%60;return o===0?t+String(n):t+String(n)+r+A(o,2)}function nr(a,r){return a%60===0?(a>0?"-":"+")+A(Math.abs(a)/60,2):Te(a,r)}function Te(a,r=""){const t=a>0?"-":"+",e=Math.abs(a),n=A(Math.trunc(e/60),2),o=A(e%60,2);return t+n+r+o}const ar=(a,r)=>{switch(a){case"P":return r.date({width:"short"});case"PP":return r.date({width:"medium"});case"PPP":return r.date({width:"long"});case"PPPP":default:return r.date({width:"full"})}},Fr=(a,r)=>{switch(a){case"p":return r.time({width:"short"});case"pp":return r.time({width:"medium"});case"ppp":return r.time({width:"long"});case"pppp":default:return r.time({width:"full"})}},va=(a,r)=>{const t=a.match(/(P+)(p+)?/)||[],e=t[1],n=t[2];if(!n)return ar(a,r);let o;switch(e){case"P":o=r.dateTime({width:"short"});break;case"PP":o=r.dateTime({width:"medium"});break;case"PPP":o=r.dateTime({width:"long"});break;case"PPPP":default:o=r.dateTime({width:"full"});break}return o.replace("{{date}}",ar(e,r)).replace("{{time}}",Fr(n,r))},Ft={p:Fr,P:va},ga=/^D+$/,ya=/^Y+$/,wa=["D","DD","YY","YYYY"];function Da(a){return ga.test(a)}function ba(a){return ya.test(a)}function _a(a,r,t){const e=ka(a,r,t);if(console.warn(e),wa.includes(a))throw new RangeError(e)}function ka(a,r,t){const e=a[0]==="Y"?"years":"days of the month";return`Use \`${a.toLowerCase()}\` instead of \`${a}\` (in \`${r}\`) for formatting ${e} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const xa=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Ma=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Ca=/^'([^]*?)'?$/,Sa=/''/g,Pa=/[a-zA-Z]/;function or(a,r,t){const e=Fe(),n=t?.locale??e.locale??Ir,o=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??e.firstWeekContainsDate??e.locale?.options?.firstWeekContainsDate??1,s=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??e.weekStartsOn??e.locale?.options?.weekStartsOn??0,i=k(a,t?.in);if(!ht(i))throw new RangeError("Invalid time value");let c=r.match(Ma).map(l=>{const d=l[0];if(d==="p"||d==="P"){const p=Ft[d];return p(l,n.formatLong)}return l}).join("").match(xa).map(l=>{if(l==="''")return{isToken:!1,value:"'"};const d=l[0];if(d==="'")return{isToken:!1,value:Na(l)};if(tr[d])return{isToken:!0,value:l};if(d.match(Pa))throw new RangeError("Format string contains an unescaped latin alphabet character `"+d+"`");return{isToken:!1,value:l}});n.localize.preprocessor&&(c=n.localize.preprocessor(i,c));const u={firstWeekContainsDate:o,weekStartsOn:s,locale:n};return c.map(l=>{if(!l.isToken)return l.value;const d=l.value;(!t?.useAdditionalWeekYearTokens&&ba(d)||!t?.useAdditionalDayOfYearTokens&&Da(d))&&_a(d,r,String(a));const p=tr[d[0]];return p(i,d,n.localize,u)}).join("")}function Na(a){const r=a.match(Ca);return r?r[1].replace(Sa,"'"):a}function sr(a,r){return k(a,r?.in).getDate()}function Ea(a,r){return k(a,r?.in).getDay()}function Ta(a,r){const t=k(a,r?.in),e=t.getFullYear(),n=t.getMonth(),o=H(t,0);return o.setFullYear(e,n+1,0),o.setHours(0,0,0,0),o.getDate()}function Oa(){return Object.assign({},Fe())}function be(a,r){return k(a,r?.in).getHours()}function Ya(a,r){const t=k(a,r?.in).getDay();return t===0?7:t}function _e(a,r){return k(a,r?.in).getMinutes()}function ne(a,r){return k(a,r?.in).getMonth()}function Se(a){return k(a).getSeconds()}function Wt(a){return+k(a)}function N(a,r){return k(a,r?.in).getFullYear()}function Ne(a,r){return+k(a)>+k(r)}function ve(a,r){return+k(a)<+k(r)}function Ra(a,r){return+k(a)==+k(r)}function Ia(a,r){const t=La(r)?new r(0):H(r,0);return t.setFullYear(a.getFullYear(),a.getMonth(),a.getDate()),t.setHours(a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds()),t}function La(a){return typeof a=="function"&&a.prototype?.constructor===a}const Fa=10;class Wr{subPriority=0;validate(r,t){return!0}}class Wa extends Wr{constructor(r,t,e,n,o){super(),this.value=r,this.validateValue=t,this.setValue=e,this.priority=n,o&&(this.subPriority=o)}validate(r,t){return this.validateValue(r,this.value,t)}set(r,t,e){return this.setValue(r,t,this.value,e)}}class Aa extends Wr{priority=Fa;subPriority=-1;constructor(r,t){super(),this.context=r||(e=>H(t,e))}set(r,t){return t.timestampIsSet?r:H(r,Ia(r,this.context))}}class I{run(r,t,e,n){const o=this.parse(r,t,e,n);return o?{setter:new Wa(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(r,t,e){return!0}}class Ha extends I{priority=140;parse(r,t,e){switch(t){case"G":case"GG":case"GGG":return e.era(r,{width:"abbreviated"})||e.era(r,{width:"narrow"});case"GGGGG":return e.era(r,{width:"narrow"});case"GGGG":default:return e.era(r,{width:"wide"})||e.era(r,{width:"abbreviated"})||e.era(r,{width:"narrow"})}}set(r,t,e){return t.era=e,r.setFullYear(e,0,1),r.setHours(0,0,0,0),r}incompatibleTokens=["R","u","t","T"]}const G={month:/^(1[0-2]|0?\d)/,date:/^(3[0-1]|[0-2]?\d)/,dayOfYear:/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,week:/^(5[0-3]|[0-4]?\d)/,hour23h:/^(2[0-3]|[0-1]?\d)/,hour24h:/^(2[0-4]|[0-1]?\d)/,hour11h:/^(1[0-1]|0?\d)/,hour12h:/^(1[0-2]|0?\d)/,minute:/^[0-5]?\d/,second:/^[0-5]?\d/,singleDigit:/^\d/,twoDigits:/^\d{1,2}/,threeDigits:/^\d{1,3}/,fourDigits:/^\d{1,4}/,anyDigitsSigned:/^-?\d+/,singleDigitSigned:/^-?\d/,twoDigitsSigned:/^-?\d{1,2}/,threeDigitsSigned:/^-?\d{1,3}/,fourDigitsSigned:/^-?\d{1,4}/},he={basicOptionalMinutes:/^([+-])(\d{2})(\d{2})?|Z/,basic:/^([+-])(\d{2})(\d{2})|Z/,basicOptionalSeconds:/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,extended:/^([+-])(\d{2}):(\d{2})|Z/,extendedOptionalSeconds:/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/};function X(a,r){return a&&{value:r(a.value),rest:a.rest}}function U(a,r){const t=r.match(a);return t?{value:parseInt(t[0],10),rest:r.slice(t[0].length)}:null}function me(a,r){const t=r.match(a);if(!t)return null;if(t[0]==="Z")return{value:0,rest:r.slice(1)};const e=t[1]==="+"?1:-1,n=t[2]?parseInt(t[2],10):0,o=t[3]?parseInt(t[3],10):0,s=t[5]?parseInt(t[5],10):0;return{value:e*(n*_t+o*bt+s*Pn),rest:r.slice(t[0].length)}}function Ar(a){return U(G.anyDigitsSigned,a)}function V(a,r){switch(a){case 1:return U(G.singleDigit,r);case 2:return U(G.twoDigits,r);case 3:return U(G.threeDigits,r);case 4:return U(G.fourDigits,r);default:return U(new RegExp("^\\d{1,"+a+"}"),r)}}function yt(a,r){switch(a){case 1:return U(G.singleDigitSigned,r);case 2:return U(G.twoDigitsSigned,r);case 3:return U(G.threeDigitsSigned,r);case 4:return U(G.fourDigitsSigned,r);default:return U(new RegExp("^-?\\d{1,"+a+"}"),r)}}function Bt(a){switch(a){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;case"am":case"midnight":case"night":default:return 0}}function Hr(a,r){const t=r>0,e=t?r:1-r;let n;if(e<=50)n=a||100;else{const o=e+50,s=Math.trunc(o/100)*100,i=a>=o%100;n=a+s-(i?100:0)}return t?n:1-n}function jr(a){return a%400===0||a%4===0&&a%100!==0}class ja extends I{priority=130;incompatibleTokens=["Y","R","u","w","I","i","e","c","t","T"];parse(r,t,e){const n=o=>({year:o,isTwoDigitYear:t==="yy"});switch(t){case"y":return X(V(4,r),n);case"yo":return X(e.ordinalNumber(r,{unit:"year"}),n);default:return X(V(t.length,r),n)}}validate(r,t){return t.isTwoDigitYear||t.year>0}set(r,t,e){const n=r.getFullYear();if(e.isTwoDigitYear){const s=Hr(e.year,n);return r.setFullYear(s,0,1),r.setHours(0,0,0,0),r}const o=!("era"in t)||t.era===1?e.year:1-e.year;return r.setFullYear(o,0,1),r.setHours(0,0,0,0),r}}class Qa extends I{priority=130;parse(r,t,e){const n=o=>({year:o,isTwoDigitYear:t==="YY"});switch(t){case"Y":return X(V(4,r),n);case"Yo":return X(e.ordinalNumber(r,{unit:"year"}),n);default:return X(V(t.length,r),n)}}validate(r,t){return t.isTwoDigitYear||t.year>0}set(r,t,e,n){const o=Qt(r,n);if(e.isTwoDigitYear){const i=Hr(e.year,o);return r.setFullYear(i,0,n.firstWeekContainsDate),r.setHours(0,0,0,0),xe(r,n)}const s=!("era"in t)||t.era===1?e.year:1-e.year;return r.setFullYear(s,0,n.firstWeekContainsDate),r.setHours(0,0,0,0),xe(r,n)}incompatibleTokens=["y","R","u","Q","q","M","L","I","d","D","i","t","T"]}class Ba extends I{priority=130;parse(r,t){return yt(t==="R"?4:t.length,r)}set(r,t,e){const n=H(r,0);return n.setFullYear(e,0,4),n.setHours(0,0,0,0),je(n)}incompatibleTokens=["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"]}class Ka extends I{priority=130;parse(r,t){return yt(t==="u"?4:t.length,r)}set(r,t,e){return r.setFullYear(e,0,1),r.setHours(0,0,0,0),r}incompatibleTokens=["G","y","Y","R","w","I","i","e","c","t","T"]}class qa extends I{priority=120;parse(r,t,e){switch(t){case"Q":case"QQ":return V(t.length,r);case"Qo":return e.ordinalNumber(r,{unit:"quarter"});case"QQQ":return e.quarter(r,{width:"abbreviated",context:"formatting"})||e.quarter(r,{width:"narrow",context:"formatting"});case"QQQQQ":return e.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return e.quarter(r,{width:"wide",context:"formatting"})||e.quarter(r,{width:"abbreviated",context:"formatting"})||e.quarter(r,{width:"narrow",context:"formatting"})}}validate(r,t){return t>=1&&t<=4}set(r,t,e){return r.setMonth((e-1)*3,1),r.setHours(0,0,0,0),r}incompatibleTokens=["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"]}class Ua extends I{priority=120;parse(r,t,e){switch(t){case"q":case"qq":return V(t.length,r);case"qo":return e.ordinalNumber(r,{unit:"quarter"});case"qqq":return e.quarter(r,{width:"abbreviated",context:"standalone"})||e.quarter(r,{width:"narrow",context:"standalone"});case"qqqqq":return e.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return e.quarter(r,{width:"wide",context:"standalone"})||e.quarter(r,{width:"abbreviated",context:"standalone"})||e.quarter(r,{width:"narrow",context:"standalone"})}}validate(r,t){return t>=1&&t<=4}set(r,t,e){return r.setMonth((e-1)*3,1),r.setHours(0,0,0,0),r}incompatibleTokens=["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"]}class Va extends I{incompatibleTokens=["Y","R","q","Q","L","w","I","D","i","e","c","t","T"];priority=110;parse(r,t,e){const n=o=>o-1;switch(t){case"M":return X(U(G.month,r),n);case"MM":return X(V(2,r),n);case"Mo":return X(e.ordinalNumber(r,{unit:"month"}),n);case"MMM":return e.month(r,{width:"abbreviated",context:"formatting"})||e.month(r,{width:"narrow",context:"formatting"});case"MMMMM":return e.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return e.month(r,{width:"wide",context:"formatting"})||e.month(r,{width:"abbreviated",context:"formatting"})||e.month(r,{width:"narrow",context:"formatting"})}}validate(r,t){return t>=0&&t<=11}set(r,t,e){return r.setMonth(e,1),r.setHours(0,0,0,0),r}}class Ga extends I{priority=110;parse(r,t,e){const n=o=>o-1;switch(t){case"L":return X(U(G.month,r),n);case"LL":return X(V(2,r),n);case"Lo":return X(e.ordinalNumber(r,{unit:"month"}),n);case"LLL":return e.month(r,{width:"abbreviated",context:"standalone"})||e.month(r,{width:"narrow",context:"standalone"});case"LLLLL":return e.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return e.month(r,{width:"wide",context:"standalone"})||e.month(r,{width:"abbreviated",context:"standalone"})||e.month(r,{width:"narrow",context:"standalone"})}}validate(r,t){return t>=0&&t<=11}set(r,t,e){return r.setMonth(e,1),r.setHours(0,0,0,0),r}incompatibleTokens=["Y","R","q","Q","M","w","I","D","i","e","c","t","T"]}function Xa(a,r,t){const e=k(a,t?.in),n=Lr(e,t)-r;return e.setDate(e.getDate()-n*7),k(e,t?.in)}class $a extends I{priority=100;parse(r,t,e){switch(t){case"w":return U(G.week,r);case"wo":return e.ordinalNumber(r,{unit:"week"});default:return V(t.length,r)}}validate(r,t){return t>=1&&t<=53}set(r,t,e,n){return xe(Xa(r,e,n),n)}incompatibleTokens=["y","R","u","q","Q","M","L","I","d","D","i","t","T"]}function za(a,r,t){const e=k(a,t?.in),n=jt(e,t)-r;return e.setDate(e.getDate()-n*7),e}class Za extends I{priority=100;parse(r,t,e){switch(t){case"I":return U(G.week,r);case"Io":return e.ordinalNumber(r,{unit:"week"});default:return V(t.length,r)}}validate(r,t){return t>=1&&t<=53}set(r,t,e){return je(za(r,e))}incompatibleTokens=["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"]}const Ja=[31,28,31,30,31,30,31,31,30,31,30,31],eo=[31,29,31,30,31,30,31,31,30,31,30,31];class to extends I{priority=90;subPriority=1;parse(r,t,e){switch(t){case"d":return U(G.date,r);case"do":return e.ordinalNumber(r,{unit:"date"});default:return V(t.length,r)}}validate(r,t){const e=r.getFullYear(),n=jr(e),o=r.getMonth();return n?t>=1&&t<=eo[o]:t>=1&&t<=Ja[o]}set(r,t,e){return r.setDate(e),r.setHours(0,0,0,0),r}incompatibleTokens=["Y","R","q","Q","w","I","D","i","e","c","t","T"]}class ro extends I{priority=90;subpriority=1;parse(r,t,e){switch(t){case"D":case"DD":return U(G.dayOfYear,r);case"Do":return e.ordinalNumber(r,{unit:"date"});default:return V(t.length,r)}}validate(r,t){const e=r.getFullYear();return jr(e)?t>=1&&t<=366:t>=1&&t<=365}set(r,t,e){return r.setMonth(0,e),r.setHours(0,0,0,0),r}incompatibleTokens=["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"]}function Kt(a,r,t){const e=Fe(),n=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??e.weekStartsOn??e.locale?.options?.weekStartsOn??0,o=k(a,t?.in),s=o.getDay(),c=(r%7+7)%7,u=7-n,l=r<0||r>6?r-(s+u)%7:(c+u)%7-(s+u)%7;return ue(o,l,t)}class no extends I{priority=90;parse(r,t,e){switch(t){case"E":case"EE":case"EEE":return e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"});case"EEEEE":return e.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"});case"EEEE":default:return e.day(r,{width:"wide",context:"formatting"})||e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"})}}validate(r,t){return t>=0&&t<=6}set(r,t,e,n){return r=Kt(r,e,n),r.setHours(0,0,0,0),r}incompatibleTokens=["D","i","e","c","t","T"]}class ao extends I{priority=90;parse(r,t,e,n){const o=s=>{const i=Math.floor((s-1)/7)*7;return(s+n.weekStartsOn+6)%7+i};switch(t){case"e":case"ee":return X(V(t.length,r),o);case"eo":return X(e.ordinalNumber(r,{unit:"day"}),o);case"eee":return e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"});case"eeeee":return e.day(r,{width:"narrow",context:"formatting"});case"eeeeee":return e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"});case"eeee":default:return e.day(r,{width:"wide",context:"formatting"})||e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"})}}validate(r,t){return t>=0&&t<=6}set(r,t,e,n){return r=Kt(r,e,n),r.setHours(0,0,0,0),r}incompatibleTokens=["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"]}class oo extends I{priority=90;parse(r,t,e,n){const o=s=>{const i=Math.floor((s-1)/7)*7;return(s+n.weekStartsOn+6)%7+i};switch(t){case"c":case"cc":return X(V(t.length,r),o);case"co":return X(e.ordinalNumber(r,{unit:"day"}),o);case"ccc":return e.day(r,{width:"abbreviated",context:"standalone"})||e.day(r,{width:"short",context:"standalone"})||e.day(r,{width:"narrow",context:"standalone"});case"ccccc":return e.day(r,{width:"narrow",context:"standalone"});case"cccccc":return e.day(r,{width:"short",context:"standalone"})||e.day(r,{width:"narrow",context:"standalone"});case"cccc":default:return e.day(r,{width:"wide",context:"standalone"})||e.day(r,{width:"abbreviated",context:"standalone"})||e.day(r,{width:"short",context:"standalone"})||e.day(r,{width:"narrow",context:"standalone"})}}validate(r,t){return t>=0&&t<=6}set(r,t,e,n){return r=Kt(r,e,n),r.setHours(0,0,0,0),r}incompatibleTokens=["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"]}function so(a,r,t){const e=k(a,t?.in),n=Ya(e,t),o=r-n;return ue(e,o,t)}class io extends I{priority=90;parse(r,t,e){const n=o=>o===0?7:o;switch(t){case"i":case"ii":return V(t.length,r);case"io":return e.ordinalNumber(r,{unit:"day"});case"iii":return X(e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"}),n);case"iiiii":return X(e.day(r,{width:"narrow",context:"formatting"}),n);case"iiiiii":return X(e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"}),n);case"iiii":default:return X(e.day(r,{width:"wide",context:"formatting"})||e.day(r,{width:"abbreviated",context:"formatting"})||e.day(r,{width:"short",context:"formatting"})||e.day(r,{width:"narrow",context:"formatting"}),n)}}validate(r,t){return t>=1&&t<=7}set(r,t,e){return r=so(r,e),r.setHours(0,0,0,0),r}incompatibleTokens=["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"]}class co extends I{priority=80;parse(r,t,e){switch(t){case"a":case"aa":case"aaa":return e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaaa":return e.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaa":default:return e.dayPeriod(r,{width:"wide",context:"formatting"})||e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"})}}set(r,t,e){return r.setHours(Bt(e),0,0,0),r}incompatibleTokens=["b","B","H","k","t","T"]}class lo extends I{priority=80;parse(r,t,e){switch(t){case"b":case"bb":case"bbb":return e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbbb":return e.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbb":default:return e.dayPeriod(r,{width:"wide",context:"formatting"})||e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"})}}set(r,t,e){return r.setHours(Bt(e),0,0,0),r}incompatibleTokens=["a","B","H","k","t","T"]}class uo extends I{priority=80;parse(r,t,e){switch(t){case"B":case"BB":case"BBB":return e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBBB":return e.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBB":default:return e.dayPeriod(r,{width:"wide",context:"formatting"})||e.dayPeriod(r,{width:"abbreviated",context:"formatting"})||e.dayPeriod(r,{width:"narrow",context:"formatting"})}}set(r,t,e){return r.setHours(Bt(e),0,0,0),r}incompatibleTokens=["a","b","t","T"]}class po extends I{priority=70;parse(r,t,e){switch(t){case"h":return U(G.hour12h,r);case"ho":return e.ordinalNumber(r,{unit:"hour"});default:return V(t.length,r)}}validate(r,t){return t>=1&&t<=12}set(r,t,e){const n=r.getHours()>=12;return n&&e<12?r.setHours(e+12,0,0,0):!n&&e===12?r.setHours(0,0,0,0):r.setHours(e,0,0,0),r}incompatibleTokens=["H","K","k","t","T"]}class fo extends I{priority=70;parse(r,t,e){switch(t){case"H":return U(G.hour23h,r);case"Ho":return e.ordinalNumber(r,{unit:"hour"});default:return V(t.length,r)}}validate(r,t){return t>=0&&t<=23}set(r,t,e){return r.setHours(e,0,0,0),r}incompatibleTokens=["a","b","h","K","k","t","T"]}class ho extends I{priority=70;parse(r,t,e){switch(t){case"K":return U(G.hour11h,r);case"Ko":return e.ordinalNumber(r,{unit:"hour"});default:return V(t.length,r)}}validate(r,t){return t>=0&&t<=11}set(r,t,e){return r.getHours()>=12&&e<12?r.setHours(e+12,0,0,0):r.setHours(e,0,0,0),r}incompatibleTokens=["h","H","k","t","T"]}class mo extends I{priority=70;parse(r,t,e){switch(t){case"k":return U(G.hour24h,r);case"ko":return e.ordinalNumber(r,{unit:"hour"});default:return V(t.length,r)}}validate(r,t){return t>=1&&t<=24}set(r,t,e){const n=e<=24?e%24:e;return r.setHours(n,0,0,0),r}incompatibleTokens=["a","b","h","H","K","t","T"]}class vo extends I{priority=60;parse(r,t,e){switch(t){case"m":return U(G.minute,r);case"mo":return e.ordinalNumber(r,{unit:"minute"});default:return V(t.length,r)}}validate(r,t){return t>=0&&t<=59}set(r,t,e){return r.setMinutes(e,0,0),r}incompatibleTokens=["t","T"]}class go extends I{priority=50;parse(r,t,e){switch(t){case"s":return U(G.second,r);case"so":return e.ordinalNumber(r,{unit:"second"});default:return V(t.length,r)}}validate(r,t){return t>=0&&t<=59}set(r,t,e){return r.setSeconds(e,0),r}incompatibleTokens=["t","T"]}class yo extends I{priority=30;parse(r,t){const e=n=>Math.trunc(n*Math.pow(10,-t.length+3));return X(V(t.length,r),e)}set(r,t,e){return r.setMilliseconds(e),r}incompatibleTokens=["t","T"]}class wo extends I{priority=10;parse(r,t){switch(t){case"X":return me(he.basicOptionalMinutes,r);case"XX":return me(he.basic,r);case"XXXX":return me(he.basicOptionalSeconds,r);case"XXXXX":return me(he.extendedOptionalSeconds,r);case"XXX":default:return me(he.extended,r)}}set(r,t,e){return t.timestampIsSet?r:H(r,r.getTime()-pt(r)-e)}incompatibleTokens=["t","T","x"]}class Do extends I{priority=10;parse(r,t){switch(t){case"x":return me(he.basicOptionalMinutes,r);case"xx":return me(he.basic,r);case"xxxx":return me(he.basicOptionalSeconds,r);case"xxxxx":return me(he.extendedOptionalSeconds,r);case"xxx":default:return me(he.extended,r)}}set(r,t,e){return t.timestampIsSet?r:H(r,r.getTime()-pt(r)-e)}incompatibleTokens=["t","T","X"]}class bo extends I{priority=40;parse(r){return Ar(r)}set(r,t,e){return[H(r,e*1e3),{timestampIsSet:!0}]}incompatibleTokens="*"}class _o extends I{priority=20;parse(r){return Ar(r)}set(r,t,e){return[H(r,e),{timestampIsSet:!0}]}incompatibleTokens="*"}const ko={G:new Ha,y:new ja,Y:new Qa,R:new Ba,u:new Ka,Q:new qa,q:new Ua,M:new Va,L:new Ga,w:new $a,I:new Za,d:new to,D:new ro,E:new no,e:new ao,c:new oo,i:new io,a:new co,b:new lo,B:new uo,h:new po,H:new fo,K:new ho,k:new mo,m:new vo,s:new go,S:new yo,X:new wo,x:new Do,t:new bo,T:new _o},xo=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Mo=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Co=/^'([^]*?)'?$/,So=/''/g,Po=/\S/,No=/[a-zA-Z]/;function Eo(a,r,t,e){const n=()=>H(e?.in||t,NaN),o=Oa(),s=e?.locale??o.locale??Ir,i=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??o.firstWeekContainsDate??o.locale?.options?.firstWeekContainsDate??1,c=e?.weekStartsOn??e?.locale?.options?.weekStartsOn??o.weekStartsOn??o.locale?.options?.weekStartsOn??0;if(!r)return a?n():k(t,e?.in);const u={firstWeekContainsDate:i,weekStartsOn:c,locale:s},l=[new Aa(e?.in,t)],d=r.match(Mo).map(v=>{const D=v[0];if(D in Ft){const M=Ft[D];return M(v,s.formatLong)}return v}).join("").match(xo),p=[];for(let v of d){const D=v[0],M=ko[D];if(M){const{incompatibleTokens:C}=M;if(Array.isArray(C)){const K=p.find(S=>C.includes(S.token)||S.token===D);if(K)throw new RangeError(`The format string mustn't contain \`${K.fullToken}\` and \`${v}\` at the same time`)}else if(M.incompatibleTokens==="*"&&p.length>0)throw new RangeError(`The format string mustn't contain \`${v}\` and any other token at the same time`);p.push({token:D,fullToken:v});const F=M.run(a,v,s.match,u);if(!F)return n();l.push(F.setter),a=F.rest}else{if(D.match(No))throw new RangeError("Format string contains an unescaped latin alphabet character `"+D+"`");if(v==="''"?v="'":D==="'"&&(v=To(v)),a.indexOf(v)===0)a=a.slice(v.length);else return n()}}if(a.length>0&&Po.test(a))return n();const m=l.map(v=>v.priority).sort((v,D)=>D-v).filter((v,D,M)=>M.indexOf(v)===D).map(v=>l.filter(D=>D.priority===v).sort((D,M)=>M.subPriority-D.subPriority)).map(v=>v[0]);let g=k(t,e?.in);if(isNaN(+g))return n();const w={};for(const v of m){if(!v.validate(g,u))return n();const D=v.set(g,w,u);Array.isArray(D)?(g=D[0],Object.assign(w,D[1])):g=D}return g}function To(a){return a.match(Co)[1].replace(So,"'")}function Oo(a,r,t){const[e,n]=Me(t?.in,a,r);return e.getFullYear()===n.getFullYear()&&e.getMonth()===n.getMonth()}function Yo(a,r,t){const[e,n]=Me(t?.in,a,r);return+Lt(e)==+Lt(n)}function Ro(a,r,t){const[e,n]=Me(t?.in,a,r);return e.getFullYear()===n.getFullYear()}function $e(a,r,t){const e=+k(a,t?.in),[n,o]=[+k(r.start,t?.in),+k(r.end,t?.in)].sort((s,i)=>s-i);return e>=n&&e<=o}function Io(a,r,t){return ue(a,-1,t)}function Lo(a,r){const t=()=>H(r?.in,NaN),n=Ho(a);let o;if(n.date){const u=jo(n.date,2);o=Qo(u.restDateString,u.year)}if(!o||isNaN(+o))return t();const s=+o;let i=0,c;if(n.time&&(i=Bo(n.time),isNaN(i)))return t();if(n.timezone){if(c=Ko(n.timezone),isNaN(c))return t()}else{const u=new Date(s+i),l=k(0,r?.in);return l.setFullYear(u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()),l.setHours(u.getUTCHours(),u.getUTCMinutes(),u.getUTCSeconds(),u.getUTCMilliseconds()),l}return k(s+i+c,r?.in)}const tt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},Fo=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,Wo=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,Ao=/^([+-])(\d{2})(?::?(\d{2}))?$/;function Ho(a){const r={},t=a.split(tt.dateTimeDelimiter);let e;if(t.length>2)return r;if(/:/.test(t[0])?e=t[0]:(r.date=t[0],e=t[1],tt.timeZoneDelimiter.test(r.date)&&(r.date=a.split(tt.timeZoneDelimiter)[0],e=a.substr(r.date.length,a.length))),e){const n=tt.timezone.exec(e);n?(r.time=e.replace(n[1],""),r.timezone=n[1]):r.time=e}return r}function jo(a,r){const t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+r)+"})|(\\d{2}|[+-]\\d{"+(2+r)+"})$)"),e=a.match(t);if(!e)return{year:NaN,restDateString:""};const n=e[1]?parseInt(e[1]):null,o=e[2]?parseInt(e[2]):null;return{year:o===null?n:o*100,restDateString:a.slice((e[1]||e[2]).length)}}function Qo(a,r){if(r===null)return new Date(NaN);const t=a.match(Fo);if(!t)return new Date(NaN);const e=!!t[4],n=Ve(t[1]),o=Ve(t[2])-1,s=Ve(t[3]),i=Ve(t[4]),c=Ve(t[5])-1;if(e)return Xo(r,i,c)?qo(r,i,c):new Date(NaN);{const u=new Date(0);return!Vo(r,o,s)||!Go(r,n)?new Date(NaN):(u.setUTCFullYear(r,o,Math.max(n,s)),u)}}function Ve(a){return a?parseInt(a):1}function Bo(a){const r=a.match(Wo);if(!r)return NaN;const t=Pt(r[1]),e=Pt(r[2]),n=Pt(r[3]);return $o(t,e,n)?t*_t+e*bt+n*1e3:NaN}function Pt(a){return a&&parseFloat(a.replace(",","."))||0}function Ko(a){if(a==="Z")return 0;const r=a.match(Ao);if(!r)return 0;const t=r[1]==="+"?-1:1,e=parseInt(r[2]),n=r[3]&&parseInt(r[3])||0;return zo(e,n)?t*(e*_t+n*bt):NaN}function qo(a,r,t){const e=new Date(0);e.setUTCFullYear(a,0,4);const n=e.getUTCDay()||7,o=(r-1)*7+t+1-n;return e.setUTCDate(e.getUTCDate()+o),e}const Uo=[31,null,31,30,31,30,31,31,30,31,30,31];function Qr(a){return a%400===0||a%4===0&&a%100!==0}function Vo(a,r,t){return r>=0&&r<=11&&t>=1&&t<=(Uo[r]||(Qr(a)?29:28))}function Go(a,r){return r>=1&&r<=(Qr(a)?366:365)}function Xo(a,r,t){return r>=1&&r<=53&&t>=0&&t<=6}function $o(a,r,t){return a===24?r===0&&t===0:t>=0&&t<60&&r>=0&&r<60&&a>=0&&a<25}function zo(a,r){return r>=0&&r<=59}function ie(a,r,t){const e=k(a,t?.in),n=e.getFullYear(),o=e.getDate(),s=H(a,0);s.setFullYear(n,r,15),s.setHours(0,0,0,0);const i=Ta(s);return e.setMonth(r,Math.min(o,i)),e}function it(a,r,t){const e=k(a,t?.in);return e.setHours(r),e}function ct(a,r,t){const e=k(a,t?.in);return e.setMinutes(r),e}function Ae(a,r,t){const e=k(a,t?.in),n=Math.trunc(e.getMonth()/3)+1,o=r-n;return ie(e,e.getMonth()+o*3)}function lt(a,r,t){const e=k(a,t?.in);return e.setSeconds(r),e}function pe(a,r,t){const e=k(a,t?.in);return isNaN(+e)?H(a,NaN):(e.setFullYear(r),e)}function Ie(a,r,t){return de(a,-r,t)}function Br(a,r,t){return Ht(a,-1,t)}function ir(a,r,t){return ft(a,-1,t)}function Be(a,r,t){return we(a,-r,t)}var Zo=typeof document<"u",Jo=function(){},wt=Zo?_.useLayoutEffect:Jo;const es={...Sr},ts=es.useInsertionEffect,rs=ts||(a=>a());function ns(a){const r=_.useRef(()=>{});return rs(()=>{r.current=a}),_.useCallback(function(){for(var t=arguments.length,e=new Array(t),n=0;n"floating-ui-"+Math.random().toString(36).slice(2,6)+os++;function ss(){const[a,r]=_.useState(()=>cr?lr():void 0);return wt(()=>{a==null&&r(lr())},[]),_.useEffect(()=>{cr=!0},[]),a}const is=as.useId,Kr=is||ss,cs=_.forwardRef(function(r,t){const{context:{placement:e,elements:{floating:n},middlewareData:{arrow:o,shift:s}},width:i=14,height:c=7,tipRadius:u=0,strokeWidth:l=0,staticOffset:d,stroke:p,d:m,style:{transform:g,...w}={},...v}=r,D=Kr(),[M,C]=_.useState(!1);if(wt(()=>{if(!n)return;cn(n).direction==="rtl"&&C(!0)},[n]),!n)return null;const[F,K]=e.split("-"),S=F==="top"||F==="bottom";let x=d;(S&&s!=null&&s.x||!S&&s!=null&&s.y)&&(x=null);const E=l*2,R=E/2,Y=i/2*(u/-8+1),z=c/2*u/4,q=!!m,te=x&&K==="end"?"bottom":"top";let le=x&&K==="end"?"right":"left";x&&M&&(le=K==="end"?"left":"right");const $=o?.x!=null?x||o.x:"",W=o?.y!=null?x||o.y:"",Q=m||"M0,0"+(" H"+i)+(" L"+(i-Y)+","+(c-z))+(" Q"+i/2+","+c+" "+Y+","+(c-z))+" Z",ae={top:q?"rotate(180deg)":"",left:q?"rotate(90deg)":"rotate(-90deg)",bottom:q?"":"rotate(180deg)",right:q?"rotate(-90deg)":"rotate(90deg)"}[F];return f.jsxs("svg",{...v,"aria-hidden":!0,ref:t,width:q?i:i+E,height:i,viewBox:"0 0 "+i+" "+(c>i?c:i),style:{position:"absolute",pointerEvents:"none",[le]:$,[te]:W,[F]:S||q?"100%":"calc(100% - "+E/2+"px)",transform:[ae,g].filter(y=>!!y).join(" "),...w},children:[E>0&&f.jsx("path",{clipPath:"url(#"+D+")",fill:"none",stroke:p,strokeWidth:E+(m?0:1),d:Q}),f.jsx("path",{stroke:E&&!m?v.fill:"none",d:Q}),f.jsx("clipPath",{id:D,children:f.jsx("rect",{x:-R,y:R*(q?-1:1),width:i+E,height:i})})]})});function ls(){const a=new Map;return{emit(r,t){var e;(e=a.get(r))==null||e.forEach(n=>n(t))},on(r,t){a.has(r)||a.set(r,new Set),a.get(r).add(t)},off(r,t){var e;(e=a.get(r))==null||e.delete(t)}}}const us=_.createContext(null),ds=_.createContext(null),ps=()=>{var a;return((a=_.useContext(us))==null?void 0:a.id)||null},fs=()=>_.useContext(ds);function hs(a){const{open:r=!1,onOpenChange:t,elements:e}=a,n=Kr(),o=_.useRef({}),[s]=_.useState(()=>ls()),i=ps()!=null,[c,u]=_.useState(e.reference),l=ns((m,g,w)=>{o.current.openEvent=m?g:void 0,s.emit("openchange",{open:m,event:g,reason:w,nested:i}),t?.(m,g,w)}),d=_.useMemo(()=>({setPositionReference:u}),[]),p=_.useMemo(()=>({reference:c||e.reference||null,floating:e.floating||null,domReference:e.reference}),[c,e.reference,e.floating]);return _.useMemo(()=>({dataRef:o,open:r,onOpenChange:l,elements:p,events:s,floatingId:n,refs:d}),[r,l,p,s,n,d])}function ms(a){a===void 0&&(a={});const{nodeId:r}=a,t=hs({...a,elements:{reference:null,floating:null,...a.elements}}),e=a.rootContext||t,n=e.elements,[o,s]=_.useState(null),[i,c]=_.useState(null),l=n?.domReference||o,d=_.useRef(null),p=fs();wt(()=>{l&&(d.current=l)},[l]);const m=sn({...a,elements:{...n,...i&&{reference:i}}}),g=_.useCallback(C=>{const F=Je(C)?{getBoundingClientRect:()=>C.getBoundingClientRect(),getClientRects:()=>C.getClientRects(),contextElement:C}:C;c(F),m.refs.setReference(F)},[m.refs]),w=_.useCallback(C=>{(Je(C)||C===null)&&(d.current=C,s(C)),(Je(m.refs.reference.current)||m.refs.reference.current===null||C!==null&&!Je(C))&&m.refs.setReference(C)},[m.refs]),v=_.useMemo(()=>({...m.refs,setReference:w,setPositionReference:g,domReference:d}),[m.refs,w,g]),D=_.useMemo(()=>({...m.elements,domReference:l}),[m.elements,l]),M=_.useMemo(()=>({...m,...e,refs:v,elements:D,nodeId:r}),[m,v,D,r,e]);return wt(()=>{e.dataRef.current.floatingContext=M;const C=p?.nodesRef.current.find(F=>F.id===r);C&&(C.context=M)}),_.useMemo(()=>({...m,context:M,refs:v,elements:D}),[m,v,D,M])}/*! react-datepicker v8.8.0 https://github.com/Hacker0x01/react-datepicker Released under the MIT License. diff --git a/public/build/assets/Create-DCP20aHc.js b/public/build/assets/Create-DCP20aHc.js deleted file mode 100644 index 26ccf2e..0000000 --- a/public/build/assets/Create-DCP20aHc.js +++ /dev/null @@ -1 +0,0 @@ -import{c as me,u as oe,r as E,j as s,L as de,a as he,H as ue}from"./app-DkuaKs7R.js";import{B as pe}from"./button-DEWTOza6.js";import{I as ae}from"./input-DZnmHXM7.js";import{L as T}from"./label-CDV8N_bE.js";import{T as be}from"./textarea-CBQAnq9A.js";import{C as ne}from"./checkbox-B7HjESRx.js";import{d as fe,k as te,A as xe}from"./app-layout-DjcEY8s3.js";import{d as _e}from"./index-DSWKGzIo.js";import{I as K}from"./input-error-BHxzSb2r.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-DKUWucUl.js";import"./index-BX6ecx82.js";import"./index-BY0riNnH.js";import"./check-CJ-RwoAT.js";import"./x-GpPVQP8J.js";import"./send-Dlj8qGrF.js";import"./shield-check-BuNJNOL8.js";import"./users-YqeB5lb8.js";const ge=[{title:"Dashboard",href:_e().url},{title:"Single SMS",href:te.index().url}];function Qe(F){const e=me.c(85),{senderIds:c}=F;let M;e[0]===Symbol.for("react.memo_cache_sentinel")?(M={sender_id:"",recipient_type:"manual",phone_number:"",subscriber_id:"",message:""},e[0]=M):M=e[0];const{data:l,setData:t,post:O,processing:L,errors:i}=oe(M),[a,le]=E.useState("manual");let $;e[1]===Symbol.for("react.memo_cache_sentinel")?($=[],e[1]=$):$=e[1];const[R,V]=E.useState($),[n,ie]=E.useState(""),[X,Y]=E.useState(!1);let A,B;e[2]!==a||e[3]!==n?(A=()=>{if(a==="subscriber"&&n.length>0){Y(!0);const r=setTimeout(()=>{he.get(te.searchSubscribers().url,{params:{query:n}}).then(ce=>{V(ce.data),Y(!1)}).catch(()=>{Y(!1)})},300);return()=>clearTimeout(r)}else V([])},B=[n,a],e[2]=a,e[3]=n,e[4]=A,e[5]=B):(A=e[4],B=e[5]),E.useEffect(A,B);let H;e[6]!==O?(H=r=>{r.preventDefault(),O(te.store().url)},e[6]=O,e[7]=H):H=e[7];const Z=H;let Q;e[8]===Symbol.for("react.memo_cache_sentinel")?(Q=s.jsx(ue,{title:"Send Single SMS"}),e[8]=Q):Q=e[8];let U;e[9]===Symbol.for("react.memo_cache_sentinel")?(U=s.jsx("div",{className:"border-b p-6",children:s.jsx("h2",{className:"text-2xl font-semibold",children:"Send Single SMS"})}),e[9]=U):U=e[9];let q;e[10]===Symbol.for("react.memo_cache_sentinel")?(q=s.jsx(T,{htmlFor:"sender_id",children:"Sender ID"}),e[10]=q):q=e[10];let m;e[11]!==t?(m=r=>t("sender_id",r.target.value),e[11]=t,e[12]=m):m=e[12];let z;e[13]===Symbol.for("react.memo_cache_sentinel")?(z=s.jsx("option",{value:"",children:"Select a sender ID"}),e[13]=z):z=e[13];let o;e[14]!==c?(o=c.length>0?c.map(je):s.jsx("option",{disabled:!0,children:"Default sender ID will be used if empty"}),e[14]=c,e[15]=o):o=e[15];let d;e[16]!==l.sender_id||e[17]!==o||e[18]!==m?(d=s.jsxs("select",{id:"sender_id",value:l.sender_id,onChange:m,className:"mt-1 w-full rounded-md border px-3 py-2",children:[z,o]}),e[16]=l.sender_id,e[17]=o,e[18]=m,e[19]=d):d=e[19];let h;e[20]!==i.sender_id?(h=s.jsx(K,{message:i.sender_id,className:"mt-1"}),e[20]=i.sender_id,e[21]=h):h=e[21];let u;e[22]!==d||e[23]!==h?(u=s.jsxs("div",{children:[q,d,h]}),e[22]=d,e[23]=h,e[24]=u):u=e[24];let p;e[25]!==c.length?(p=c.length===0&&s.jsxs("p",{className:"mt-2 flex items-center gap-2 text-sm text-amber-600",children:[s.jsx("span",{children:"⚠️"}),s.jsxs("span",{children:["The default WindSMS SenderID will be used."," ",s.jsx(de,{href:fe().url,className:"font-medium underline",children:"Customize your SenderID"})]})]}),e[25]=c.length,e[26]=p):p=e[26];const ee=a==="manual";let b;e[27]!==t?(b=r=>{r&&(le("manual"),t("recipient_type","manual"),t("subscriber_id",""))},e[27]=t,e[28]=b):b=e[28];let f;e[29]!==ee||e[30]!==b?(f=s.jsx(ne,{id:"recipient_manual",checked:ee,onCheckedChange:b}),e[29]=ee,e[30]=b,e[31]=f):f=e[31];let P;e[32]===Symbol.for("react.memo_cache_sentinel")?(P=s.jsx(T,{htmlFor:"recipient_manual",className:"cursor-pointer",children:"Enter phone number manually"}),e[32]=P):P=e[32];let x;e[33]!==f?(x=s.jsxs("div",{className:"flex items-center space-x-2",children:[f,P]}),e[33]=f,e[34]=x):x=e[34];let _;e[35]!==l.phone_number||e[36]!==i.phone_number||e[37]!==a||e[38]!==t?(_=a==="manual"&&s.jsxs("div",{className:"ml-6",children:[s.jsx(T,{htmlFor:"phone_number",children:"Phone Number"}),s.jsx(ae,{id:"phone_number",placeholder:"e.g. 08012345678",value:l.phone_number,onChange:r=>t("phone_number",r.target.value),className:"mt-1"}),s.jsx(K,{message:i.phone_number,className:"mt-1"})]}),e[35]=l.phone_number,e[36]=i.phone_number,e[37]=a,e[38]=t,e[39]=_):_=e[39];const se=a==="subscriber";let g;e[40]!==t?(g=r=>{r&&(le("subscriber"),t("recipient_type","subscriber"),t("phone_number",""))},e[40]=t,e[41]=g):g=e[41];let j;e[42]!==se||e[43]!==g?(j=s.jsx(ne,{id:"recipient_subscriber",checked:se,onCheckedChange:g}),e[42]=se,e[43]=g,e[44]=j):j=e[44];let W;e[45]===Symbol.for("react.memo_cache_sentinel")?(W=s.jsx(T,{htmlFor:"recipient_subscriber",className:"cursor-pointer",children:"Search for subscriber"}),e[45]=W):W=e[45];let S;e[46]!==j?(S=s.jsxs("div",{className:"flex items-center space-x-2",children:[j,W]}),e[46]=j,e[47]=S):S=e[47];let y;e[48]!==l.subscriber_id||e[49]!==i.subscriber_id||e[50]!==X||e[51]!==a||e[52]!==n||e[53]!==t||e[54]!==R?(y=a==="subscriber"&&s.jsxs("div",{className:"ml-6 space-y-2",children:[s.jsx(T,{htmlFor:"subscriber_search",children:"Search Subscriber"}),s.jsx(ae,{id:"subscriber_search",placeholder:"Type name or phone number...",value:n,onChange:r=>ie(r.target.value),className:"mt-1"}),X&&s.jsx("p",{className:"text-sm text-gray-500",children:"Searching..."}),R.length>0&&s.jsx("div",{className:"mt-2 max-h-48 overflow-y-auto rounded-md border",children:R.map(r=>s.jsxs("div",{onClick:()=>{t("subscriber_id",r.id),ie(`${r.name||"Unknown"} (${r.phone_number})`),V([])},className:`cursor-pointer p-2 hover:bg-gray-100 ${l.subscriber_id===r.id?"bg-blue-50":""}`,children:[s.jsx("div",{className:"font-medium",children:r.name||"Unknown"}),s.jsx("div",{className:"text-sm text-gray-500",children:r.phone_number})]},r.id))}),s.jsx(K,{message:i.subscriber_id,className:"mt-1"})]}),e[48]=l.subscriber_id,e[49]=i.subscriber_id,e[50]=X,e[51]=a,e[52]=n,e[53]=t,e[54]=R,e[55]=y):y=e[55];let N;e[56]!==x||e[57]!==_||e[58]!==S||e[59]!==y?(N=s.jsxs("div",{className:"space-y-4",children:[x,_,S,y]}),e[56]=x,e[57]=_,e[58]=S,e[59]=y,e[60]=N):N=e[60];let G;e[61]===Symbol.for("react.memo_cache_sentinel")?(G=s.jsx(T,{htmlFor:"message",children:"Message"}),e[61]=G):G=e[61];let v;e[62]!==t?(v=r=>t("message",r.target.value),e[62]=t,e[63]=v):v=e[63];let C;e[64]!==l.message||e[65]!==v?(C=s.jsx(be,{id:"message",placeholder:"Type your message here...",value:l.message,onChange:v,rows:4,className:"mt-1"}),e[64]=l.message,e[65]=v,e[66]=C):C=e[66];let w;e[67]!==l.message.length?(w=s.jsxs("div",{className:"mt-1 text-right text-xs text-gray-500",children:[l.message.length," characters"]}),e[67]=l.message.length,e[68]=w):w=e[68];let I;e[69]!==i.message?(I=s.jsx(K,{message:i.message,className:"mt-1"}),e[69]=i.message,e[70]=I):I=e[70];let k;e[71]!==C||e[72]!==w||e[73]!==I?(k=s.jsxs("div",{children:[G,C,w,I]}),e[71]=C,e[72]=w,e[73]=I,e[74]=k):k=e[74];const re=L?"Sending...":"Send SMS";let D;e[75]!==L||e[76]!==re?(D=s.jsx(pe,{type:"submit",disabled:L,className:"w-full",children:re}),e[75]=L,e[76]=re,e[77]=D):D=e[77];let J;return e[78]!==Z||e[79]!==u||e[80]!==p||e[81]!==N||e[82]!==k||e[83]!==D?(J=s.jsxs(xe,{breadcrumbs:ge,children:[Q,s.jsx("div",{className:"py-12",children:s.jsx("div",{className:"mx-auto max-w-2xl sm:px-6 lg:px-8",children:s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[U,s.jsx("div",{className:"p-6",children:s.jsxs("form",{onSubmit:Z,className:"space-y-6",children:[u,p,N,k,D]})})]})})})]}),e[78]=Z,e[79]=u,e[80]=p,e[81]=N,e[82]=k,e[83]=D,e[84]=J):J=e[84],J}function je(F){return s.jsx("option",{value:F.sender_id,children:F.sender_id},F.id)}export{Qe as default}; diff --git a/public/build/assets/Index-B7WYc3ld.js b/public/build/assets/Index-B7WYc3ld.js new file mode 100644 index 0000000..160dd07 --- /dev/null +++ b/public/build/assets/Index-B7WYc3ld.js @@ -0,0 +1,6 @@ +import{r as d,j as l,c as q,u as st,H as rt}from"./app-BkR-Yu8_.js";import{t as Ee,v as lt,R as at,w as Ie,x as it,y as ct,P as dt,V as ut,z as pt,B as ft,D as mt,E as ht,F as vt,G as gt,H as xt,I as St,J as Te,A as wt}from"./app-layout-6TmSMbxU.js";import{u as F,c as yt,B as Ct}from"./button-BkeD6D9C.js";import{I as bt}from"./input-BFktu1Ja.js";import{L as It}from"./label-B8qNWxTC.js";import{P as L,r as Re}from"./index-C-iMGC_l.js";import{u as Ne,c as _t,a as j,b as Y}from"./index-BxSFA7Jd.js";import{u as Tt}from"./index--_rDGB40.js";import{a as ne}from"./utils-DFaayVYX.js";import{C as je}from"./chevron-down-fod5QjCx.js";import{C as Nt}from"./check-B5v_CoGh.js";import{c as Pt}from"./index-BV9LgQgg.js";import{C as Et,a as Rt,b as jt,c as Mt,d as At}from"./card-BzTNPnb3.js";import{I as Dt}from"./input-error-mOXaJ-E5.js";/* empty css */import"./send-BIH-xC-j.js";import"./shield-check-BR6okPK2.js";import"./users-BPIE1cfL.js";import"./coins-CBBvu4lK.js";/** + * @license lucide-react v0.475.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ot=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],kt=Pt("ChevronUp",Ot);function Pe(s,[e,t]){return Math.min(t,Math.max(e,s))}var Lt=[" ","Enter","ArrowUp","ArrowDown"],Bt=[" ","Enter"],ee="Select",[de,ue,Vt]=it(ee),[se,$o]=_t(ee,[Vt,Ee]),pe=Ee(),[Ht,X]=se(ee),[Ft,Ut]=se(ee),Me=s=>{const{__scopeSelect:e,children:t,open:o,defaultOpen:n,onOpenChange:a,value:r,defaultValue:i,onValueChange:c,dir:p,name:v,autoComplete:g,disabled:w,required:y,form:S}=s,u=pe(e),[h,C]=d.useState(null),[f,x]=d.useState(null),[D,E]=d.useState(!1),B=lt(p),[T,N]=Ne({prop:o,defaultProp:n??!1,onChange:a,caller:ee}),[I,M]=Ne({prop:r,defaultProp:i,onChange:c,caller:ee}),O=d.useRef(null),U=h?S||!!h.closest("form"):!0,[$,W]=d.useState(new Set),z=Array.from($).map(A=>A.props.value).join(";");return l.jsx(at,{...u,children:l.jsxs(Ht,{required:y,scope:e,trigger:h,onTriggerChange:C,valueNode:f,onValueNodeChange:x,valueNodeHasChildren:D,onValueNodeHasChildrenChange:E,contentId:Ie(),value:I,onValueChange:M,open:T,onOpenChange:N,dir:B,triggerPointerDownPosRef:O,disabled:w,children:[l.jsx(de.Provider,{scope:e,children:l.jsx(Ft,{scope:s.__scopeSelect,onNativeOptionAdd:d.useCallback(A=>{W(H=>new Set(H).add(A))},[]),onNativeOptionRemove:d.useCallback(A=>{W(H=>{const K=new Set(H);return K.delete(A),K})},[]),children:t})}),U?l.jsxs(et,{"aria-hidden":!0,required:y,tabIndex:-1,name:v,autoComplete:g,value:I,onChange:A=>M(A.target.value),disabled:w,form:S,children:[I===void 0?l.jsx("option",{value:""}):null,Array.from($)]},z):null]})})};Me.displayName=ee;var Ae="SelectTrigger",De=d.forwardRef((s,e)=>{const{__scopeSelect:t,disabled:o=!1,...n}=s,a=pe(t),r=X(Ae,t),i=r.disabled||o,c=F(e,r.onTriggerChange),p=ue(t),v=d.useRef("touch"),[g,w,y]=ot(u=>{const h=p().filter(x=>!x.disabled),C=h.find(x=>x.value===r.value),f=nt(h,u,C);f!==void 0&&r.onValueChange(f.value)}),S=u=>{i||(r.onOpenChange(!0),y()),u&&(r.triggerPointerDownPosRef.current={x:Math.round(u.pageX),y:Math.round(u.pageY)})};return l.jsx(ct,{asChild:!0,...a,children:l.jsx(L.button,{type:"button",role:"combobox","aria-controls":r.contentId,"aria-expanded":r.open,"aria-required":r.required,"aria-autocomplete":"none",dir:r.dir,"data-state":r.open?"open":"closed",disabled:i,"data-disabled":i?"":void 0,"data-placeholder":tt(r.value)?"":void 0,...n,ref:c,onClick:j(n.onClick,u=>{u.currentTarget.focus(),v.current!=="mouse"&&S(u)}),onPointerDown:j(n.onPointerDown,u=>{v.current=u.pointerType;const h=u.target;h.hasPointerCapture(u.pointerId)&&h.releasePointerCapture(u.pointerId),u.button===0&&u.ctrlKey===!1&&u.pointerType==="mouse"&&(S(u),u.preventDefault())}),onKeyDown:j(n.onKeyDown,u=>{const h=g.current!=="";!(u.ctrlKey||u.altKey||u.metaKey)&&u.key.length===1&&w(u.key),!(h&&u.key===" ")&&Lt.includes(u.key)&&(S(),u.preventDefault())})})})});De.displayName=Ae;var Oe="SelectValue",ke=d.forwardRef((s,e)=>{const{__scopeSelect:t,className:o,style:n,children:a,placeholder:r="",...i}=s,c=X(Oe,t),{onValueNodeHasChildrenChange:p}=c,v=a!==void 0,g=F(e,c.onValueNodeChange);return Y(()=>{p(v)},[p,v]),l.jsx(L.span,{...i,ref:g,style:{pointerEvents:"none"},children:tt(c.value)?l.jsx(l.Fragment,{children:r}):a})});ke.displayName=Oe;var Wt="SelectIcon",Le=d.forwardRef((s,e)=>{const{__scopeSelect:t,children:o,...n}=s;return l.jsx(L.span,{"aria-hidden":!0,...n,ref:e,children:o||"▼"})});Le.displayName=Wt;var zt="SelectPortal",Be=s=>l.jsx(dt,{asChild:!0,...s});Be.displayName=zt;var te="SelectContent",Ve=d.forwardRef((s,e)=>{const t=X(te,s.__scopeSelect),[o,n]=d.useState();if(Y(()=>{n(new DocumentFragment)},[]),!t.open){const a=o;return a?Re.createPortal(l.jsx(He,{scope:s.__scopeSelect,children:l.jsx(de.Slot,{scope:s.__scopeSelect,children:l.jsx("div",{children:s.children})})}),a):null}return l.jsx(Fe,{...s,ref:e})});Ve.displayName=te;var V=10,[He,Z]=se(te),Kt="SelectContentImpl",$t=yt("SelectContent.RemoveScroll"),Fe=d.forwardRef((s,e)=>{const{__scopeSelect:t,position:o="item-aligned",onCloseAutoFocus:n,onEscapeKeyDown:a,onPointerDownOutside:r,side:i,sideOffset:c,align:p,alignOffset:v,arrowPadding:g,collisionBoundary:w,collisionPadding:y,sticky:S,hideWhenDetached:u,avoidCollisions:h,...C}=s,f=X(te,t),[x,D]=d.useState(null),[E,B]=d.useState(null),T=F(e,m=>D(m)),[N,I]=d.useState(null),[M,O]=d.useState(null),U=ue(t),[$,W]=d.useState(!1),z=d.useRef(!1);d.useEffect(()=>{if(x)return ft(x)},[x]),mt();const A=d.useCallback(m=>{const[P,...k]=U().map(R=>R.ref.current),[b]=k.slice(-1),_=document.activeElement;for(const R of m)if(R===_||(R?.scrollIntoView({block:"nearest"}),R===P&&E&&(E.scrollTop=0),R===b&&E&&(E.scrollTop=E.scrollHeight),R?.focus(),document.activeElement!==_))return},[U,E]),H=d.useCallback(()=>A([N,x]),[A,N,x]);d.useEffect(()=>{$&&H()},[$,H]);const{onOpenChange:K,triggerPointerDownPosRef:G}=f;d.useEffect(()=>{if(x){let m={x:0,y:0};const P=b=>{m={x:Math.abs(Math.round(b.pageX)-(G.current?.x??0)),y:Math.abs(Math.round(b.pageY)-(G.current?.y??0))}},k=b=>{m.x<=10&&m.y<=10?b.preventDefault():x.contains(b.target)||K(!1),document.removeEventListener("pointermove",P),G.current=null};return G.current!==null&&(document.addEventListener("pointermove",P),document.addEventListener("pointerup",k,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",P),document.removeEventListener("pointerup",k,{capture:!0})}}},[x,K,G]),d.useEffect(()=>{const m=()=>K(!1);return window.addEventListener("blur",m),window.addEventListener("resize",m),()=>{window.removeEventListener("blur",m),window.removeEventListener("resize",m)}},[K]);const[fe,ae]=ot(m=>{const P=U().filter(_=>!_.disabled),k=P.find(_=>_.ref.current===document.activeElement),b=nt(P,m,k);b&&setTimeout(()=>b.ref.current.focus())}),me=d.useCallback((m,P,k)=>{const b=!z.current&&!k;(f.value!==void 0&&f.value===P||b)&&(I(m),b&&(z.current=!0))},[f.value]),he=d.useCallback(()=>x?.focus(),[x]),oe=d.useCallback((m,P,k)=>{const b=!z.current&&!k;(f.value!==void 0&&f.value===P||b)&&O(m)},[f.value]),ie=o==="popper"?Se:Ue,re=ie===Se?{side:i,sideOffset:c,align:p,alignOffset:v,arrowPadding:g,collisionBoundary:w,collisionPadding:y,sticky:S,hideWhenDetached:u,avoidCollisions:h}:{};return l.jsx(He,{scope:t,content:x,viewport:E,onViewportChange:B,itemRefCallback:me,selectedItem:N,onItemLeave:he,itemTextRefCallback:oe,focusSelectedItem:H,selectedItemText:M,position:o,isPositioned:$,searchRef:fe,children:l.jsx(ht,{as:$t,allowPinchZoom:!0,children:l.jsx(vt,{asChild:!0,trapped:f.open,onMountAutoFocus:m=>{m.preventDefault()},onUnmountAutoFocus:j(n,m=>{f.trigger?.focus({preventScroll:!0}),m.preventDefault()}),children:l.jsx(gt,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:a,onPointerDownOutside:r,onFocusOutside:m=>m.preventDefault(),onDismiss:()=>f.onOpenChange(!1),children:l.jsx(ie,{role:"listbox",id:f.contentId,"data-state":f.open?"open":"closed",dir:f.dir,onContextMenu:m=>m.preventDefault(),...C,...re,onPlaced:()=>W(!0),ref:T,style:{display:"flex",flexDirection:"column",outline:"none",...C.style},onKeyDown:j(C.onKeyDown,m=>{const P=m.ctrlKey||m.altKey||m.metaKey;if(m.key==="Tab"&&m.preventDefault(),!P&&m.key.length===1&&ae(m.key),["ArrowUp","ArrowDown","Home","End"].includes(m.key)){let b=U().filter(_=>!_.disabled).map(_=>_.ref.current);if(["ArrowUp","End"].includes(m.key)&&(b=b.slice().reverse()),["ArrowUp","ArrowDown"].includes(m.key)){const _=m.target,R=b.indexOf(_);b=b.slice(R+1)}setTimeout(()=>A(b)),m.preventDefault()}})})})})})})});Fe.displayName=Kt;var Gt="SelectItemAlignedPosition",Ue=d.forwardRef((s,e)=>{const{__scopeSelect:t,onPlaced:o,...n}=s,a=X(te,t),r=Z(te,t),[i,c]=d.useState(null),[p,v]=d.useState(null),g=F(e,T=>v(T)),w=ue(t),y=d.useRef(!1),S=d.useRef(!0),{viewport:u,selectedItem:h,selectedItemText:C,focusSelectedItem:f}=r,x=d.useCallback(()=>{if(a.trigger&&a.valueNode&&i&&p&&u&&h&&C){const T=a.trigger.getBoundingClientRect(),N=p.getBoundingClientRect(),I=a.valueNode.getBoundingClientRect(),M=C.getBoundingClientRect();if(a.dir!=="rtl"){const _=M.left-N.left,R=I.left-_,J=T.left-R,Q=T.width+J,ve=Math.max(Q,N.width),ge=window.innerWidth-V,xe=Pe(R,[V,Math.max(V,ge-ve)]);i.style.minWidth=Q+"px",i.style.left=xe+"px"}else{const _=N.right-M.right,R=window.innerWidth-I.right-_,J=window.innerWidth-T.right-R,Q=T.width+J,ve=Math.max(Q,N.width),ge=window.innerWidth-V,xe=Pe(R,[V,Math.max(V,ge-ve)]);i.style.minWidth=Q+"px",i.style.right=xe+"px"}const O=w(),U=window.innerHeight-V*2,$=u.scrollHeight,W=window.getComputedStyle(p),z=parseInt(W.borderTopWidth,10),A=parseInt(W.paddingTop,10),H=parseInt(W.borderBottomWidth,10),K=parseInt(W.paddingBottom,10),G=z+A+$+K+H,fe=Math.min(h.offsetHeight*5,G),ae=window.getComputedStyle(u),me=parseInt(ae.paddingTop,10),he=parseInt(ae.paddingBottom,10),oe=T.top+T.height/2-V,ie=U-oe,re=h.offsetHeight/2,m=h.offsetTop+re,P=z+A+m,k=G-P;if(P<=oe){const _=O.length>0&&h===O[O.length-1].ref.current;i.style.bottom="0px";const R=p.clientHeight-u.offsetTop-u.offsetHeight,J=Math.max(ie,re+(_?he:0)+R+H),Q=P+J;i.style.height=Q+"px"}else{const _=O.length>0&&h===O[0].ref.current;i.style.top="0px";const J=Math.max(oe,z+u.offsetTop+(_?me:0)+re)+k;i.style.height=J+"px",u.scrollTop=P-oe+u.offsetTop}i.style.margin=`${V}px 0`,i.style.minHeight=fe+"px",i.style.maxHeight=U+"px",o?.(),requestAnimationFrame(()=>y.current=!0)}},[w,a.trigger,a.valueNode,i,p,u,h,C,a.dir,o]);Y(()=>x(),[x]);const[D,E]=d.useState();Y(()=>{p&&E(window.getComputedStyle(p).zIndex)},[p]);const B=d.useCallback(T=>{T&&S.current===!0&&(x(),f?.(),S.current=!1)},[x,f]);return l.jsx(qt,{scope:t,contentWrapper:i,shouldExpandOnScrollRef:y,onScrollButtonChange:B,children:l.jsx("div",{ref:c,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:D},children:l.jsx(L.div,{...n,ref:g,style:{boxSizing:"border-box",maxHeight:"100%",...n.style}})})})});Ue.displayName=Gt;var Yt="SelectPopperPosition",Se=d.forwardRef((s,e)=>{const{__scopeSelect:t,align:o="start",collisionPadding:n=V,...a}=s,r=pe(t);return l.jsx(xt,{...r,...a,ref:e,align:o,collisionPadding:n,style:{boxSizing:"border-box",...a.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Se.displayName=Yt;var[qt,_e]=se(te,{}),we="SelectViewport",We=d.forwardRef((s,e)=>{const{__scopeSelect:t,nonce:o,...n}=s,a=Z(we,t),r=_e(we,t),i=F(e,a.onViewportChange),c=d.useRef(0);return l.jsxs(l.Fragment,{children:[l.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),l.jsx(de.Slot,{scope:t,children:l.jsx(L.div,{"data-radix-select-viewport":"",role:"presentation",...n,ref:i,style:{position:"relative",flex:1,overflow:"hidden auto",...n.style},onScroll:j(n.onScroll,p=>{const v=p.currentTarget,{contentWrapper:g,shouldExpandOnScrollRef:w}=r;if(w?.current&&g){const y=Math.abs(c.current-v.scrollTop);if(y>0){const S=window.innerHeight-V*2,u=parseFloat(g.style.minHeight),h=parseFloat(g.style.height),C=Math.max(u,h);if(C0?D:0,g.style.justifyContent="flex-end")}}}c.current=v.scrollTop})})})]})});We.displayName=we;var ze="SelectGroup",[Xt,Zt]=se(ze),Jt=d.forwardRef((s,e)=>{const{__scopeSelect:t,...o}=s,n=Ie();return l.jsx(Xt,{scope:t,id:n,children:l.jsx(L.div,{role:"group","aria-labelledby":n,...o,ref:e})})});Jt.displayName=ze;var Ke="SelectLabel",Qt=d.forwardRef((s,e)=>{const{__scopeSelect:t,...o}=s,n=Zt(Ke,t);return l.jsx(L.div,{id:n.id,...o,ref:e})});Qt.displayName=Ke;var ce="SelectItem",[eo,$e]=se(ce),Ge=d.forwardRef((s,e)=>{const{__scopeSelect:t,value:o,disabled:n=!1,textValue:a,...r}=s,i=X(ce,t),c=Z(ce,t),p=i.value===o,[v,g]=d.useState(a??""),[w,y]=d.useState(!1),S=F(e,f=>c.itemRefCallback?.(f,o,n)),u=Ie(),h=d.useRef("touch"),C=()=>{n||(i.onValueChange(o),i.onOpenChange(!1))};if(o==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return l.jsx(eo,{scope:t,value:o,disabled:n,textId:u,isSelected:p,onItemTextChange:d.useCallback(f=>{g(x=>x||(f?.textContent??"").trim())},[]),children:l.jsx(de.ItemSlot,{scope:t,value:o,disabled:n,textValue:v,children:l.jsx(L.div,{role:"option","aria-labelledby":u,"data-highlighted":w?"":void 0,"aria-selected":p&&w,"data-state":p?"checked":"unchecked","aria-disabled":n||void 0,"data-disabled":n?"":void 0,tabIndex:n?void 0:-1,...r,ref:S,onFocus:j(r.onFocus,()=>y(!0)),onBlur:j(r.onBlur,()=>y(!1)),onClick:j(r.onClick,()=>{h.current!=="mouse"&&C()}),onPointerUp:j(r.onPointerUp,()=>{h.current==="mouse"&&C()}),onPointerDown:j(r.onPointerDown,f=>{h.current=f.pointerType}),onPointerMove:j(r.onPointerMove,f=>{h.current=f.pointerType,n?c.onItemLeave?.():h.current==="mouse"&&f.currentTarget.focus({preventScroll:!0})}),onPointerLeave:j(r.onPointerLeave,f=>{f.currentTarget===document.activeElement&&c.onItemLeave?.()}),onKeyDown:j(r.onKeyDown,f=>{c.searchRef?.current!==""&&f.key===" "||(Bt.includes(f.key)&&C(),f.key===" "&&f.preventDefault())})})})})});Ge.displayName=ce;var le="SelectItemText",Ye=d.forwardRef((s,e)=>{const{__scopeSelect:t,className:o,style:n,...a}=s,r=X(le,t),i=Z(le,t),c=$e(le,t),p=Ut(le,t),[v,g]=d.useState(null),w=F(e,C=>g(C),c.onItemTextChange,C=>i.itemTextRefCallback?.(C,c.value,c.disabled)),y=v?.textContent,S=d.useMemo(()=>l.jsx("option",{value:c.value,disabled:c.disabled,children:y},c.value),[c.disabled,c.value,y]),{onNativeOptionAdd:u,onNativeOptionRemove:h}=p;return Y(()=>(u(S),()=>h(S)),[u,h,S]),l.jsxs(l.Fragment,{children:[l.jsx(L.span,{id:c.textId,...a,ref:w}),c.isSelected&&r.valueNode&&!r.valueNodeHasChildren?Re.createPortal(a.children,r.valueNode):null]})});Ye.displayName=le;var qe="SelectItemIndicator",Xe=d.forwardRef((s,e)=>{const{__scopeSelect:t,...o}=s;return $e(qe,t).isSelected?l.jsx(L.span,{"aria-hidden":!0,...o,ref:e}):null});Xe.displayName=qe;var ye="SelectScrollUpButton",Ze=d.forwardRef((s,e)=>{const t=Z(ye,s.__scopeSelect),o=_e(ye,s.__scopeSelect),[n,a]=d.useState(!1),r=F(e,o.onScrollButtonChange);return Y(()=>{if(t.viewport&&t.isPositioned){let i=function(){const p=c.scrollTop>0;a(p)};const c=t.viewport;return i(),c.addEventListener("scroll",i),()=>c.removeEventListener("scroll",i)}},[t.viewport,t.isPositioned]),n?l.jsx(Qe,{...s,ref:r,onAutoScroll:()=>{const{viewport:i,selectedItem:c}=t;i&&c&&(i.scrollTop=i.scrollTop-c.offsetHeight)}}):null});Ze.displayName=ye;var Ce="SelectScrollDownButton",Je=d.forwardRef((s,e)=>{const t=Z(Ce,s.__scopeSelect),o=_e(Ce,s.__scopeSelect),[n,a]=d.useState(!1),r=F(e,o.onScrollButtonChange);return Y(()=>{if(t.viewport&&t.isPositioned){let i=function(){const p=c.scrollHeight-c.clientHeight,v=Math.ceil(c.scrollTop)c.removeEventListener("scroll",i)}},[t.viewport,t.isPositioned]),n?l.jsx(Qe,{...s,ref:r,onAutoScroll:()=>{const{viewport:i,selectedItem:c}=t;i&&c&&(i.scrollTop=i.scrollTop+c.offsetHeight)}}):null});Je.displayName=Ce;var Qe=d.forwardRef((s,e)=>{const{__scopeSelect:t,onAutoScroll:o,...n}=s,a=Z("SelectScrollButton",t),r=d.useRef(null),i=ue(t),c=d.useCallback(()=>{r.current!==null&&(window.clearInterval(r.current),r.current=null)},[]);return d.useEffect(()=>()=>c(),[c]),Y(()=>{i().find(v=>v.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:"nearest"})},[i]),l.jsx(L.div,{"aria-hidden":!0,...n,ref:e,style:{flexShrink:0,...n.style},onPointerDown:j(n.onPointerDown,()=>{r.current===null&&(r.current=window.setInterval(o,50))}),onPointerMove:j(n.onPointerMove,()=>{a.onItemLeave?.(),r.current===null&&(r.current=window.setInterval(o,50))}),onPointerLeave:j(n.onPointerLeave,()=>{c()})})}),to="SelectSeparator",oo=d.forwardRef((s,e)=>{const{__scopeSelect:t,...o}=s;return l.jsx(L.div,{"aria-hidden":!0,...o,ref:e})});oo.displayName=to;var be="SelectArrow",no=d.forwardRef((s,e)=>{const{__scopeSelect:t,...o}=s,n=pe(t),a=X(be,t),r=Z(be,t);return a.open&&r.position==="popper"?l.jsx(St,{...n,...o,ref:e}):null});no.displayName=be;var so="SelectBubbleInput",et=d.forwardRef(({__scopeSelect:s,value:e,...t},o)=>{const n=d.useRef(null),a=F(o,n),r=Tt(e);return d.useEffect(()=>{const i=n.current;if(!i)return;const c=window.HTMLSelectElement.prototype,v=Object.getOwnPropertyDescriptor(c,"value").set;if(r!==e&&v){const g=new Event("change",{bubbles:!0});v.call(i,e),i.dispatchEvent(g)}},[r,e]),l.jsx(L.select,{...t,style:{...ut,...t.style},ref:a,defaultValue:e})});et.displayName=so;function tt(s){return s===""||s===void 0}function ot(s){const e=pt(s),t=d.useRef(""),o=d.useRef(0),n=d.useCallback(r=>{const i=t.current+r;e(i),(function c(p){t.current=p,window.clearTimeout(o.current),p!==""&&(o.current=window.setTimeout(()=>c(""),1e3))})(i)},[e]),a=d.useCallback(()=>{t.current="",window.clearTimeout(o.current)},[]);return d.useEffect(()=>()=>window.clearTimeout(o.current),[]),[t,n,a]}function nt(s,e,t){const n=e.length>1&&Array.from(e).every(p=>p===e[0])?e[0]:e,a=t?s.indexOf(t):-1;let r=ro(s,Math.max(a,0));n.length===1&&(r=r.filter(p=>p!==t));const c=r.find(p=>p.textValue.toLowerCase().startsWith(n.toLowerCase()));return c!==t?c:void 0}function ro(s,e){return s.map((t,o)=>s[(e+o)%s.length])}var lo=Me,ao=De,io=ke,co=Le,uo=Be,po=Ve,fo=We,mo=Ge,ho=Ye,vo=Xe,go=Ze,xo=Je;function So(s){const e=q.c(4);let t;e[0]!==s?({...t}=s,e[0]=s,e[1]=t):t=e[1];let o;return e[2]!==t?(o=l.jsx(lo,{"data-slot":"select",...t}),e[2]=t,e[3]=o):o=e[3],o}function wo(s){const e=q.c(4);let t;e[0]!==s?({...t}=s,e[0]=s,e[1]=t):t=e[1];let o;return e[2]!==t?(o=l.jsx(io,{"data-slot":"select-value",...t}),e[2]=t,e[3]=o):o=e[3],o}function yo(s){const e=q.c(11);let t,o,n;e[0]!==s?({className:o,children:t,...n}=s,e[0]=s,e[1]=t,e[2]=o,e[3]=n):(t=e[1],o=e[2],n=e[3]);let a;e[4]!==o?(a=ne("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&>span]:line-clamp-1",o),e[4]=o,e[5]=a):a=e[5];let r;e[6]===Symbol.for("react.memo_cache_sentinel")?(r=l.jsx(co,{asChild:!0,children:l.jsx(je,{className:"size-4 opacity-50"})}),e[6]=r):r=e[6];let i;return e[7]!==t||e[8]!==n||e[9]!==a?(i=l.jsxs(ao,{"data-slot":"select-trigger",className:a,...n,children:[t,r]}),e[7]=t,e[8]=n,e[9]=a,e[10]=i):i=e[10],i}function Co(s){const e=q.c(20);let t,o,n,a;e[0]!==s?({className:o,children:t,position:a,...n}=s,e[0]=s,e[1]=t,e[2]=o,e[3]=n,e[4]=a):(t=e[1],o=e[2],n=e[3],a=e[4]);const r=a===void 0?"popper":a,i=r==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1";let c;e[5]!==o||e[6]!==i?(c=ne("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md",i,o),e[5]=o,e[6]=i,e[7]=c):c=e[7];let p;e[8]===Symbol.for("react.memo_cache_sentinel")?(p=l.jsx(Io,{}),e[8]=p):p=e[8];const v=r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1";let g;e[9]!==v?(g=ne("p-1",v),e[9]=v,e[10]=g):g=e[10];let w;e[11]!==t||e[12]!==g?(w=l.jsx(fo,{className:g,children:t}),e[11]=t,e[12]=g,e[13]=w):w=e[13];let y;e[14]===Symbol.for("react.memo_cache_sentinel")?(y=l.jsx(_o,{}),e[14]=y):y=e[14];let S;return e[15]!==r||e[16]!==n||e[17]!==c||e[18]!==w?(S=l.jsx(uo,{children:l.jsxs(po,{"data-slot":"select-content",className:c,position:r,...n,children:[p,w,y]})}),e[15]=r,e[16]=n,e[17]=c,e[18]=w,e[19]=S):S=e[19],S}function bo(s){const e=q.c(13);let t,o,n;e[0]!==s?({className:o,children:t,...n}=s,e[0]=s,e[1]=t,e[2]=o,e[3]=n):(t=e[1],o=e[2],n=e[3]);let a;e[4]!==o?(a=ne("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",o),e[4]=o,e[5]=a):a=e[5];let r;e[6]===Symbol.for("react.memo_cache_sentinel")?(r=l.jsx("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:l.jsx(vo,{children:l.jsx(Nt,{className:"size-4"})})}),e[6]=r):r=e[6];let i;e[7]!==t?(i=l.jsx(ho,{children:t}),e[7]=t,e[8]=i):i=e[8];let c;return e[9]!==n||e[10]!==a||e[11]!==i?(c=l.jsxs(mo,{"data-slot":"select-item",className:a,...n,children:[r,i]}),e[9]=n,e[10]=a,e[11]=i,e[12]=c):c=e[12],c}function Io(s){const e=q.c(9);let t,o;e[0]!==s?({className:t,...o}=s,e[0]=s,e[1]=t,e[2]=o):(t=e[1],o=e[2]);let n;e[3]!==t?(n=ne("flex cursor-default items-center justify-center py-1",t),e[3]=t,e[4]=n):n=e[4];let a;e[5]===Symbol.for("react.memo_cache_sentinel")?(a=l.jsx(kt,{className:"size-4"}),e[5]=a):a=e[5];let r;return e[6]!==o||e[7]!==n?(r=l.jsx(go,{"data-slot":"select-scroll-up-button",className:n,...o,children:a}),e[6]=o,e[7]=n,e[8]=r):r=e[8],r}function _o(s){const e=q.c(9);let t,o;e[0]!==s?({className:t,...o}=s,e[0]=s,e[1]=t,e[2]=o):(t=e[1],o=e[2]);let n;e[3]!==t?(n=ne("flex cursor-default items-center justify-center py-1",t),e[3]=t,e[4]=n):n=e[4];let a;e[5]===Symbol.for("react.memo_cache_sentinel")?(a=l.jsx(je,{className:"size-4"}),e[5]=a):a=e[5];let r;return e[6]!==o||e[7]!==n?(r=l.jsx(xo,{"data-slot":"select-scroll-down-button",className:n,...o,children:a}),e[6]=o,e[7]=n,e[8]=r):r=e[8],r}function Go(s){const e=q.c(28),{settings:t}=s,o=t.sms_provider||"mtn";let n;e[0]===Symbol.for("react.memo_cache_sentinel")?(n=[{value:"mtn",label:"MTN Nigeria"},{value:"smslive247",label:"SMSLive247"}],e[0]=n):n=e[0];let a;e[1]!==o?(a={key:"sms_provider",value:o,group:"sms",label:"Active SMS Provider",type:"select",options:n},e[1]=o,e[2]=a):a=e[2];let r;e[3]===Symbol.for("react.memo_cache_sentinel")?(r={key:"smslive247_api_key",value:"",group:"sms",label:"SMSLive247 API Key",type:"password"},e[3]=r):r=e[3];let i;e[4]!==a?(i={settings:[a,r]},e[4]=a,e[5]=i):i=e[5];const{data:c,setData:p,post:v,processing:g,errors:w}=st(i);let y;e[6]!==c.settings||e[7]!==p?(y=(N,I)=>{const M=[...c.settings];M[N].value=I,p("settings",M)},e[6]=c.settings,e[7]=p,e[8]=y):y=e[8];const S=y;let u;e[9]!==v?(u=N=>{N.preventDefault(),v(Te.settings.update(),{preserveScroll:!0})},e[9]=v,e[10]=u):u=e[10];const h=u;let C;e[11]===Symbol.for("react.memo_cache_sentinel")?(C={title:"Admin",href:"#"},e[11]=C):C=e[11];let f,x;e[12]===Symbol.for("react.memo_cache_sentinel")?(x=[C,{title:"Settings",href:Te.settings.index()}],f=l.jsx(rt,{title:"System Settings"}),e[12]=f,e[13]=x):(f=e[12],x=e[13]);let D;e[14]===Symbol.for("react.memo_cache_sentinel")?(D=l.jsxs(Et,{children:[l.jsx(Rt,{children:"SMS Configuration"}),l.jsx(jt,{children:"Configure SMS providers and API keys."})]}),e[14]=D):D=e[14];let E;if(e[15]!==c.settings||e[16]!==w||e[17]!==S){let N;e[19]!==w||e[20]!==S?(N=(I,M)=>l.jsxs("div",{className:"space-y-2",children:[l.jsx(It,{htmlFor:I.key,children:I.label}),I.type==="select"?l.jsxs(So,{value:I.value,onValueChange:O=>S(M,O),children:[l.jsx(yo,{className:"w-full md:w-1/2",children:l.jsx(wo,{placeholder:"Select provider"})}),l.jsx(Co,{children:I.options.map(To)})]}):l.jsx(bt,{id:I.key,type:I.type||"text",value:I.value,onChange:O=>S(M,O.target.value),className:"w-full md:w-1/2",placeholder:I.type==="password"?"Leave blank to keep current value":I.label,autoComplete:"off"}),l.jsx(Dt,{message:w[`settings.${M}.value`]})]},I.key),e[19]=w,e[20]=S,e[21]=N):N=e[21],E=c.settings.map(N),e[15]=c.settings,e[16]=w,e[17]=S,e[18]=E}else E=e[18];let B;e[22]!==g?(B=l.jsx("div",{className:"flex items-center gap-4",children:l.jsx(Ct,{disabled:g,children:"Save Changes"})}),e[22]=g,e[23]=B):B=e[23];let T;return e[24]!==h||e[25]!==E||e[26]!==B?(T=l.jsxs(wt,{breadcrumbs:x,children:[f,l.jsx("div",{className:"py-12",children:l.jsx("div",{className:"max-w-7xl mx-auto sm:px-6 lg:px-8",children:l.jsxs(Mt,{children:[D,l.jsx(At,{children:l.jsxs("form",{onSubmit:h,className:"space-y-6",children:[E,B]})})]})})})]}),e[24]=h,e[25]=E,e[26]=B,e[27]=T):T=e[27],T}function To(s){return l.jsx(bo,{value:s.value,children:s.label},s.value)}export{Go as default}; diff --git a/public/build/assets/Index-DdhSlm18.js b/public/build/assets/Index-BB8kex5d.js similarity index 87% rename from public/build/assets/Index-DdhSlm18.js rename to public/build/assets/Index-BB8kex5d.js index b8eece2..1a81d45 100644 --- a/public/build/assets/Index-DdhSlm18.js +++ b/public/build/assets/Index-BB8kex5d.js @@ -1,4 +1,4 @@ -import{c as se,r as Q,u as le,j as s,H as te,b as ae}from"./app-DkuaKs7R.js";import{B}from"./button-DEWTOza6.js";import{I as re}from"./input-DZnmHXM7.js";import{L as V}from"./label-CDV8N_bE.js";import{D as oe,a as ie,b as ne,c as ce,d as de}from"./dialog-Cd-cGV3i.js";import{T as me,a as W,b as I,e as L,c as he,d as fe}from"./table-Ct7heC9B.js";import{B as xe}from"./badge-kWQkrcyp.js";import{p as ue,q as be,r as pe,A as je}from"./app-layout-DjcEY8s3.js";import{c as ge,d as ye}from"./index-DSWKGzIo.js";import{P as ve}from"./plus-BK0Er8qt.js";import{T as Te}from"./trash-2-B96Vyizq.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-DKUWucUl.js";import"./x-GpPVQP8J.js";import"./index-BX6ecx82.js";import"./send-Dlj8qGrF.js";import"./shield-check-BuNJNOL8.js";import"./users-YqeB5lb8.js";/** +import{c as se,r as Q,u as le,j as s,H as te,b as ae}from"./app-BkR-Yu8_.js";import{B}from"./button-BkeD6D9C.js";import{I as re}from"./input-BFktu1Ja.js";import{L as V}from"./label-B8qNWxTC.js";import{D as oe,a as ie,b as ne,c as ce,d as de}from"./dialog-Bnza0FdC.js";import{T as me,a as W,b as I,e as L,c as he,d as fe}from"./table-D7Qye2oa.js";import{B as xe}from"./badge-jojBb81G.js";import{p as ue,q as be,r as pe,A as je}from"./app-layout-6TmSMbxU.js";import{c as ge,d as ye}from"./index-BV9LgQgg.js";import{P as ve}from"./plus-D8sy_HuF.js";import{T as Te}from"./trash-2-moLY6jfP.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-C-iMGC_l.js";import"./index-BxSFA7Jd.js";import"./send-BIH-xC-j.js";import"./shield-check-BR6okPK2.js";import"./users-BPIE1cfL.js";import"./coins-CBBvu4lK.js";/** * @license lucide-react v0.475.0 - ISC * * This source code is licensed under the ISC license. diff --git a/public/build/assets/Index-BCtwcybM.js b/public/build/assets/Index-BCtwcybM.js deleted file mode 100644 index 575e346..0000000 --- a/public/build/assets/Index-BCtwcybM.js +++ /dev/null @@ -1 +0,0 @@ -import{c as _,j as s,L as g,H as N}from"./app-DkuaKs7R.js";import{B as u}from"./badge-kWQkrcyp.js";import{B as y}from"./button-DEWTOza6.js";import{T as v,a as S,b as c,c as w,d as T,e as m}from"./table-Ct7heC9B.js";import{P as k}from"./pagination-Dl6OfTBJ.js";import{k as L,A as B}from"./app-layout-DjcEY8s3.js";import{d as M}from"./index-DSWKGzIo.js";import{P as H}from"./plus-BK0Er8qt.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-DKUWucUl.js";import"./index-BX6ecx82.js";import"./x-GpPVQP8J.js";import"./send-Dlj8qGrF.js";import"./shield-check-BuNJNOL8.js";import"./users-YqeB5lb8.js";const P=[{title:"Dashboard",href:M().url}];function W(t){const e=_.c(19),{logs:a}=t;let d;e[0]!==a.links?(d=a?.links||[],e[0]=a.links,e[1]=d):d=e[1];const b=d;let o;e[2]===Symbol.for("react.memo_cache_sentinel")?(o=s.jsx(N,{title:"Single SMS Logs"}),e[2]=o):o=e[2];let x;e[3]===Symbol.for("react.memo_cache_sentinel")?(x=s.jsx("h2",{className:"text-2xl font-semibold",children:"Single SMS Logs"}),e[3]=x):x=e[3];let h;e[4]===Symbol.for("react.memo_cache_sentinel")?(h=L.create(),e[4]=h):h=e[4];let f;e[5]===Symbol.for("react.memo_cache_sentinel")?(f=s.jsx("div",{className:"border-b p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[x,s.jsx(g,{href:h.url,children:s.jsxs(y,{children:[s.jsx(H,{className:"mr-2 h-4 w-4"}),"Send New SMS"]})})]})}),e[5]=f):f=e[5];let j;e[6]===Symbol.for("react.memo_cache_sentinel")?(j=s.jsx(v,{children:s.jsxs(S,{children:[s.jsx(c,{children:"Recipient"}),s.jsx(c,{children:"Message"}),s.jsx(c,{children:"Status"}),s.jsx(c,{children:"Sent At"}),s.jsx(c,{children:"Type"})]})}),e[6]=j):j=e[6];let i;e[7]!==a.data?(i=a.data.map(R),e[7]=a.data,e[8]=i):i=e[8];let l;e[9]!==i?(l=s.jsxs(w,{children:[j,s.jsx(T,{children:i})]}),e[9]=i,e[10]=l):l=e[10];let r;e[11]!==b?(r=s.jsx(k,{links:b}),e[11]=b,e[12]=r):r=e[12];let n;e[13]!==a.data.length?(n=a.data.length===0&&s.jsx("div",{className:"py-12 text-center text-gray-500",children:"No SMS logs found."}),e[13]=a.data.length,e[14]=n):n=e[14];let p;return e[15]!==n||e[16]!==l||e[17]!==r?(p=s.jsxs(B,{breadcrumbs:P,children:[o,s.jsx("div",{className:"py-12",children:s.jsx("div",{className:"mx-auto max-w-7xl sm:px-6 lg:px-8",children:s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[f,s.jsxs("div",{className:"p-6",children:[l,r,n]})]})})})]}),e[15]=n,e[16]=l,e[17]=r,e[18]=p):p=e[18],p}function R(t){return s.jsxs(S,{children:[s.jsx(m,{className:"font-medium",children:t.subscriber?s.jsxs("div",{children:[s.jsx("div",{className:"font-bold",children:t.subscriber.name}),s.jsx("div",{className:"text-sm text-gray-500",children:t.subscriber.phone_number})]}):t.phone_number}),s.jsx(m,{className:"max-w-xs truncate",title:t.message_sent,children:t.message_sent}),s.jsx(m,{children:s.jsx(u,{className:t.status==="sent"?"bg-green-500":t.status==="failed"?"bg-red-500":"bg-gray-500",children:t.status})}),s.jsx(m,{children:t.sent_at?new Date(t.sent_at).toLocaleString():"-"}),s.jsx(m,{children:t.campaign_id?s.jsx(u,{variant:"outline",children:"Campaign"}):s.jsx(u,{variant:"outline",children:"Single"})})]},t.id)}export{W as default}; diff --git a/public/build/assets/Index-CFmz40zl.js b/public/build/assets/Index-CFmz40zl.js new file mode 100644 index 0000000..44deb8b --- /dev/null +++ b/public/build/assets/Index-CFmz40zl.js @@ -0,0 +1 @@ +import{c as S,j as s,L as N,H as g}from"./app-BkR-Yu8_.js";import{B as p}from"./badge-jojBb81G.js";import{B as y}from"./button-BkeD6D9C.js";import{T as v,a as _,b as r,c as w,d as L,e as i}from"./table-D7Qye2oa.js";import{P as B}from"./pagination-9b1HcMdN.js";import{k as T,A as k}from"./app-layout-6TmSMbxU.js";import{d as M}from"./index-BV9LgQgg.js";import{P as A}from"./plus-D8sy_HuF.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-C-iMGC_l.js";import"./index-BxSFA7Jd.js";import"./send-BIH-xC-j.js";import"./shield-check-BR6okPK2.js";import"./users-BPIE1cfL.js";import"./coins-CBBvu4lK.js";const C=[{title:"Dashboard",href:M().url}];function W(t){const e=S.c(19),{logs:a}=t;let m;e[0]!==a.links?(m=a?.links||[],e[0]=a.links,e[1]=m):m=e[1];const u=m;let o;e[2]===Symbol.for("react.memo_cache_sentinel")?(o=s.jsx(g,{title:"Single SMS Logs"}),e[2]=o):o=e[2];let h;e[3]===Symbol.for("react.memo_cache_sentinel")?(h=s.jsx("h2",{className:"text-2xl font-semibold",children:"Single SMS Logs"}),e[3]=h):h=e[3];let x;e[4]===Symbol.for("react.memo_cache_sentinel")?(x=T.create(),e[4]=x):x=e[4];let f;e[5]===Symbol.for("react.memo_cache_sentinel")?(f=s.jsx("div",{className:"border-b p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[h,s.jsx(N,{href:x.url,children:s.jsxs(y,{children:[s.jsx(A,{className:"mr-2 h-4 w-4"}),"Send New SMS"]})})]})}),e[5]=f):f=e[5];let j;e[6]===Symbol.for("react.memo_cache_sentinel")?(j=s.jsx(v,{children:s.jsxs(_,{children:[s.jsx(r,{children:"Recipient"}),s.jsx(r,{children:"Message"}),s.jsx(r,{children:"Status"}),s.jsx(r,{children:"Credits Charged"}),s.jsx(r,{children:"Balance Before"}),s.jsx(r,{children:"Balance After"}),s.jsx(r,{children:"Sent At"}),s.jsx(r,{children:"Type"})]})}),e[6]=j):j=e[6];let l;e[7]!==a.data?(l=a.data.map(H),e[7]=a.data,e[8]=l):l=e[8];let n;e[9]!==l?(n=s.jsxs(w,{children:[j,s.jsx(L,{children:l})]}),e[9]=l,e[10]=n):n=e[10];let c;e[11]!==u?(c=s.jsx(B,{links:u}),e[11]=u,e[12]=c):c=e[12];let d;e[13]!==a.data.length?(d=a.data.length===0&&s.jsx("div",{className:"py-12 text-center text-gray-500",children:"No SMS logs found."}),e[13]=a.data.length,e[14]=d):d=e[14];let b;return e[15]!==d||e[16]!==n||e[17]!==c?(b=s.jsxs(k,{breadcrumbs:C,children:[o,s.jsx("div",{className:"py-12",children:s.jsx("div",{className:"mx-auto max-w-7xl sm:px-6 lg:px-8",children:s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[f,s.jsxs("div",{className:"p-6",children:[n,c,d]})]})})})]}),e[15]=d,e[16]=n,e[17]=c,e[18]=b):b=e[18],b}function H(t){return s.jsxs(_,{children:[s.jsx(i,{className:"font-medium",children:t.subscriber?s.jsxs("div",{children:[s.jsx("div",{className:"font-bold",children:t.subscriber.name}),s.jsx("div",{className:"text-sm text-gray-500",children:t.subscriber.phone_number})]}):t.phone_number}),s.jsx(i,{className:"max-w-xs truncate",title:t.message_sent,children:t.message_sent}),s.jsx(i,{children:s.jsx(p,{className:t.status==="sent"?"bg-green-500":t.status==="failed"?"bg-red-500":"bg-gray-500",children:t.status})}),s.jsx(i,{children:Number(t.credits_charged)>0?`${Number(t.credits_charged).toLocaleString()}`:"—"}),s.jsx(i,{children:t.credit_balance_before!=null?`${Number(t.credit_balance_before).toLocaleString()}`:"—"}),s.jsx(i,{children:t.credit_balance_after!=null?`${Number(t.credit_balance_after).toLocaleString()}`:"—"}),s.jsx(i,{children:t.sent_at?new Date(t.sent_at).toLocaleString():"-"}),s.jsx(i,{children:t.campaign_id?s.jsx(p,{variant:"outline",children:"Campaign"}):s.jsx(p,{variant:"outline",children:"Single"})})]},t.id)}export{W as default}; diff --git a/public/build/assets/Index-Ck_DgfJl.js b/public/build/assets/Index-Ck_DgfJl.js deleted file mode 100644 index 1d2c4fb..0000000 --- a/public/build/assets/Index-Ck_DgfJl.js +++ /dev/null @@ -1 +0,0 @@ -import{c as Pe,r as je,u as ye,j as s,H as Ue,b as Fe}from"./app-DkuaKs7R.js";import{B as U}from"./button-DEWTOza6.js";import{I as be}from"./input-DZnmHXM7.js";import{L as F}from"./label-CDV8N_bE.js";import{D as ve,a as Ne,b as De,c as we,d as ke}from"./dialog-Cd-cGV3i.js";import{T as He,a as Ce,b as H,e as I,c as Ie,d as Le}from"./table-Ct7heC9B.js";import{B as _e}from"./badge-kWQkrcyp.js";import{l as Ee,m as Oe,A as Re,n as Ve}from"./app-layout-DjcEY8s3.js";import{d as ze}from"./index-DSWKGzIo.js";import{P as We}from"./pagination-Dl6OfTBJ.js";import{U as $e}from"./upload-CBtpxNKN.js";import{P as qe}from"./plus-BK0Er8qt.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-DKUWucUl.js";import"./x-GpPVQP8J.js";import"./index-BX6ecx82.js";import"./send-Dlj8qGrF.js";import"./shield-check-BuNJNOL8.js";import"./users-YqeB5lb8.js";function bs(n){const e=Pe.c(97),{subscribers:o,tags:c}=n,[ae,ge]=je.useState(!1),[ne,Se]=je.useState(!1);let L;e[0]!==o.links?(L=o.links||[],e[0]=o.links,e[1]=L):L=e[1];const re=L,[oe,Te]=je.useState("");let E;e[2]===Symbol.for("react.memo_cache_sentinel")?(E={phone_number:"",name:"",tag_ids:[]},e[2]=E):E=e[2];const{data:a,setData:r,post:ce,processing:de,reset:me,errors:d}=ye(E);let O;e[3]===Symbol.for("react.memo_cache_sentinel")?(O={file:null,tag_ids:[]},e[3]=O):O=e[3];const i=ye(O);let R;e[4]!==r?(R=t=>{t.preventDefault();const l=t.target.value,P=l.split(",").map(Xe).filter(Qe);r("phone_number",P),Te(l)},e[4]=r,e[5]=R):R=e[5];const he=R;let m;e[6]!==d?(m=Object.keys(d).filter(Me),e[6]=d,e[7]=m):m=e[7];let V;e[8]!==d||e[9]!==m?(V=m.map(t=>d[t]),e[8]=d,e[9]=m,e[10]=V):V=e[10];const fe=V.join(" ");let z;e[11]!==a.phone_number.length||e[12]!==ce||e[13]!==me?(z=t=>{if(t.preventDefault(),a.phone_number.length<1){alert("Please enter at least one phone number.");return}ce(Ee().url,{onSuccess:()=>{me(),ge(!1)}})},e[11]=a.phone_number.length,e[12]=ce,e[13]=me,e[14]=z):z=e[14];const pe=z;let W;e[15]!==i?(W=t=>{t.preventDefault(),i.post(Oe().url,{onSuccess:()=>{i.reset(),Se(!1)}})},e[15]=i,e[16]=W):W=e[16];const ue=W,Ae=Je;let $;e[17]===Symbol.for("react.memo_cache_sentinel")?($=[{title:"Dashboard",href:ze().url}],e[17]=$):$=e[17];const Be=$;let q;e[18]===Symbol.for("react.memo_cache_sentinel")?(q=s.jsx(Ue,{title:"Subscribers"}),e[18]=q):q=e[18];let G;e[19]===Symbol.for("react.memo_cache_sentinel")?(G=s.jsx("h2",{className:"text-2xl font-semibold",children:"Subscribers"}),e[19]=G):G=e[19];let J;e[20]===Symbol.for("react.memo_cache_sentinel")?(J=s.jsx(ve,{asChild:!0,children:s.jsxs(U,{variant:"outline",children:[s.jsx($e,{className:"mr-2 h-4 w-4"}),"Bulk Upload"]})}),e[20]=J):J=e[20];let K;e[21]===Symbol.for("react.memo_cache_sentinel")?(K=s.jsx(Ne,{children:s.jsx(De,{children:"Bulk Upload Subscribers"})}),e[21]=K):K=e[21];let M;e[22]===Symbol.for("react.memo_cache_sentinel")?(M=s.jsx(F,{htmlFor:"file",children:"CSV File"}),e[22]=M):M=e[22];let h;e[23]!==i?(h=s.jsx(be,{id:"file",type:"file",accept:".csv,.txt",onChange:t=>i.setData("file",t.target.files[0])}),e[23]=i,e[24]=h):h=e[24];let Q;e[25]===Symbol.for("react.memo_cache_sentinel")?(Q=s.jsx("p",{className:"mt-1 text-sm text-gray-500",children:"CSV should have columns: phone_number, name (optional)"}),e[25]=Q):Q=e[25];let f;e[26]!==h?(f=s.jsxs("div",{children:[M,h,Q]}),e[26]=h,e[27]=f):f=e[27];let X;e[28]===Symbol.for("react.memo_cache_sentinel")?(X=s.jsx(F,{children:"Tags (optional)"}),e[28]=X):X=e[28];let p;if(e[29]!==i||e[30]!==c){let t;e[32]!==i?(t=l=>s.jsx(_e,{variant:i.data.tag_ids.includes(l.id)?"default":"outline",className:"cursor-pointer",onClick:()=>{const P=i.data.tag_ids.includes(l.id)?i.data.tag_ids.filter(xe=>xe!==l.id):[...i.data.tag_ids,l.id];i.setData("tag_ids",P)},children:l.name},l.id),e[32]=i,e[33]=t):t=e[33],p=c.map(t),e[29]=i,e[30]=c,e[31]=p}else p=e[31];let u;e[34]!==p?(u=s.jsxs("div",{children:[X,s.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:p})]}),e[34]=p,e[35]=u):u=e[35];let x;e[36]!==i.processing?(x=s.jsx(U,{type:"submit",disabled:i.processing,children:"Upload"}),e[36]=i.processing,e[37]=x):x=e[37];let j;e[38]!==ue||e[39]!==f||e[40]!==u||e[41]!==x?(j=s.jsxs(we,{children:[K,s.jsxs("form",{onSubmit:ue,className:"space-y-4",children:[f,u,x]})]}),e[38]=ue,e[39]=f,e[40]=u,e[41]=x,e[42]=j):j=e[42];let b;e[43]!==ne||e[44]!==j?(b=s.jsxs(ke,{open:ne,onOpenChange:Se,children:[J,j]}),e[43]=ne,e[44]=j,e[45]=b):b=e[45];let Y;e[46]===Symbol.for("react.memo_cache_sentinel")?(Y=s.jsx(ve,{asChild:!0,children:s.jsxs(U,{children:[s.jsx(qe,{className:"mr-2 h-4 w-4"}),"Add Subscriber"]})}),e[46]=Y):Y=e[46];let Z;e[47]===Symbol.for("react.memo_cache_sentinel")?(Z=s.jsx(Ne,{children:s.jsx(De,{children:"Add New Subscriber"})}),e[47]=Z):Z=e[47];let ee;e[48]===Symbol.for("react.memo_cache_sentinel")?(ee=s.jsx(F,{htmlFor:"phone_number",children:"Phone Numbers (comma-separated)"}),e[48]=ee):ee=e[48];let _;e[49]!==he||e[50]!==oe||e[51]!==fe?(_=s.jsxs("div",{children:[ee,s.jsx(be,{id:"phone_number",value:oe,onChange:he,error:fe})]}),e[49]=he,e[50]=oe,e[51]=fe,e[52]=_):_=e[52];let se;e[53]===Symbol.for("react.memo_cache_sentinel")?(se=s.jsx(F,{htmlFor:"name",children:"Name (optional)"}),e[53]=se):se=e[53];let g;e[54]!==r?(g=t=>r("name",t.target.value),e[54]=r,e[55]=g):g=e[55];let S;e[56]!==a.name||e[57]!==g?(S=s.jsxs("div",{children:[se,s.jsx(be,{id:"name",value:a.name,onChange:g})]}),e[56]=a.name,e[57]=g,e[58]=S):S=e[58];let te;e[59]===Symbol.for("react.memo_cache_sentinel")?(te=s.jsx(F,{children:"Tags"}),e[59]=te):te=e[59];let y;if(e[60]!==a.tag_ids||e[61]!==r||e[62]!==c){let t;e[64]!==a.tag_ids||e[65]!==r?(t=l=>s.jsx(_e,{variant:a.tag_ids.includes(l.id)?"default":"outline",className:"cursor-pointer",onClick:()=>{const P=a.tag_ids.includes(l.id)?a.tag_ids.filter(xe=>xe!==l.id):[...a.tag_ids,l.id];r("tag_ids",P)},children:l.name},l.id),e[64]=a.tag_ids,e[65]=r,e[66]=t):t=e[66],y=c.map(t),e[60]=a.tag_ids,e[61]=r,e[62]=c,e[63]=y}else y=e[63];let v;e[67]!==y?(v=s.jsxs("div",{children:[te,s.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:y})]}),e[67]=y,e[68]=v):v=e[68];let N;e[69]!==de?(N=s.jsx(U,{type:"submit",disabled:de,children:"Add Subscriber"}),e[69]=de,e[70]=N):N=e[70];let D;e[71]!==pe||e[72]!==_||e[73]!==S||e[74]!==v||e[75]!==N?(D=s.jsxs(we,{children:[Z,s.jsxs("form",{onSubmit:pe,className:"space-y-4",children:[_,S,v,N]})]}),e[71]=pe,e[72]=_,e[73]=S,e[74]=v,e[75]=N,e[76]=D):D=e[76];let w;e[77]!==ae||e[78]!==D?(w=s.jsxs(ke,{open:ae,onOpenChange:ge,children:[Y,D]}),e[77]=ae,e[78]=D,e[79]=w):w=e[79];let k;e[80]!==b||e[81]!==w?(k=s.jsx("div",{className:"border-b p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[G,s.jsxs("div",{className:"flex gap-2",children:[b,w]})]})}),e[80]=b,e[81]=w,e[82]=k):k=e[82];let le;e[83]===Symbol.for("react.memo_cache_sentinel")?(le=s.jsx(He,{children:s.jsxs(Ce,{children:[s.jsx(H,{children:"Phone Number"}),s.jsx(H,{children:"Name"}),s.jsx(H,{children:"Tags"}),s.jsx(H,{children:"Added"}),s.jsx(H,{children:"Actions"})]})}),e[83]=le):le=e[83];let C;if(e[84]!==o.data){let t;e[86]===Symbol.for("react.memo_cache_sentinel")?(t=l=>s.jsxs(Ce,{children:[s.jsx(I,{className:"font-medium",children:l.phone_number}),s.jsx(I,{children:l.name||"-"}),s.jsx(I,{children:s.jsx("div",{className:"flex flex-wrap gap-1",children:l.tags?.map(Ge)})}),s.jsx(I,{children:new Date(l.created_at).toLocaleDateString()}),s.jsx(I,{children:s.jsx(U,{variant:"destructive",size:"sm",onClick:()=>Ae(l.id),children:"Delete"})})]},l.id),e[86]=t):t=e[86],C=o.data.map(t),e[84]=o.data,e[85]=C}else C=e[85];let T;e[87]!==C?(T=s.jsxs(Ie,{children:[le,s.jsx(Le,{children:C})]}),e[87]=C,e[88]=T):T=e[88];let A;e[89]!==re?(A=s.jsx(We,{links:re}),e[89]=re,e[90]=A):A=e[90];let B;e[91]!==T||e[92]!==A?(B=s.jsxs("div",{className:"p-6",children:[T,A]}),e[91]=T,e[92]=A,e[93]=B):B=e[93];let ie;return e[94]!==k||e[95]!==B?(ie=s.jsxs(Re,{breadcrumbs:Be,children:[q,s.jsx("div",{className:"py-12",children:s.jsx("div",{className:"mx-auto max-w-7xl sm:px-6 lg:px-8",children:s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[k,B]})})})]}),e[94]=k,e[95]=B,e[96]=ie):ie=e[96],ie}function Ge(n){return s.jsx(_e,{variant:"secondary",children:n.name},n.id)}function Je(n){confirm("Are you sure you want to delete this subscriber?")&&Fe.delete(Ve(n).url,{onSuccess:Ke,preserveScroll:!0})}function Ke(){}function Me(n){return n.startsWith("phone_number")}function Qe(n){return n!==""}function Xe(n){return n.trim()}export{bs as default}; diff --git a/public/build/assets/Index-DPBaOM08.js b/public/build/assets/Index-DPBaOM08.js deleted file mode 100644 index 5b1b730..0000000 --- a/public/build/assets/Index-DPBaOM08.js +++ /dev/null @@ -1 +0,0 @@ -import{c as N,j as s,L as g,H as w}from"./app-DkuaKs7R.js";import{B as b}from"./badge-kWQkrcyp.js";import{B as _}from"./button-DEWTOza6.js";import{T as v,a as y,b as a,c as S,d as T,e as i}from"./table-Ct7heC9B.js";import{P as C}from"./pagination-Dl6OfTBJ.js";import{h as R,A as k,j as B}from"./app-layout-DjcEY8s3.js";import{d as L}from"./index-DSWKGzIo.js";import{P as D}from"./plus-BK0Er8qt.js";import{R as E}from"./repeat-BVyZxNV4.js";import{E as H}from"./eye-DxQSAGc1.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-DKUWucUl.js";import"./index-BX6ecx82.js";import"./x-GpPVQP8J.js";import"./send-Dlj8qGrF.js";import"./shield-check-BuNJNOL8.js";import"./users-YqeB5lb8.js";const P={draft:"bg-gray-500",scheduled:"bg-blue-500",processing:"bg-yellow-500",completed:"bg-green-500",failed:"bg-red-500"},A=[{title:"Dashboard",href:L().url}];function te(t){const e=N.c(19),{campaigns:l}=t;let d;e[0]!==l.links?(d=l?.links||[],e[0]=l.links,e[1]=d):d=e[1];const u=d;let m;e[2]===Symbol.for("react.memo_cache_sentinel")?(m=s.jsx(w,{title:"Campaigns"}),e[2]=m):m=e[2];let h;e[3]===Symbol.for("react.memo_cache_sentinel")?(h=s.jsx("h2",{className:"text-2xl font-semibold",children:"Campaigns"}),e[3]=h):h=e[3];let x;e[4]===Symbol.for("react.memo_cache_sentinel")?(x=R(),e[4]=x):x=e[4];let j;e[5]===Symbol.for("react.memo_cache_sentinel")?(j=s.jsx("div",{className:"border-b p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[h,s.jsx(g,{href:x.url,passive:!0,children:s.jsxs(_,{children:[s.jsx(D,{className:"mr-2 h-4 w-4"}),"Create Campaign"]})})]})}),e[5]=j):j=e[5];let f;e[6]===Symbol.for("react.memo_cache_sentinel")?(f=s.jsx(v,{children:s.jsxs(y,{children:[s.jsx(a,{children:"Name"}),s.jsx(a,{children:"Type"}),s.jsx(a,{children:"Status"}),s.jsx(a,{children:"Recipients"}),s.jsx(a,{children:"Sent"}),s.jsx(a,{children:"Failed"}),s.jsx(a,{children:"Dispatch Date"}),s.jsx(a,{children:"Actions"})]})}),e[6]=f):f=e[6];let r;e[7]!==l.data?(r=l.data.map(z),e[7]=l.data,e[8]=r):r=e[8];let n;e[9]!==r?(n=s.jsxs(S,{children:[f,s.jsx(T,{children:r})]}),e[9]=r,e[10]=n):n=e[10];let c;e[11]!==u?(c=s.jsx(C,{links:u}),e[11]=u,e[12]=c):c=e[12];let o;e[13]!==l.data.length?(o=l.data.length===0&&s.jsx("div",{className:"py-12 text-center text-gray-500",children:"No campaigns yet. Create your first campaign to get started!"}),e[13]=l.data.length,e[14]=o):o=e[14];let p;return e[15]!==o||e[16]!==n||e[17]!==c?(p=s.jsxs(k,{breadcrumbs:A,children:[m,s.jsx("div",{className:"py-12",children:s.jsx("div",{className:"mx-auto max-w-7xl sm:px-6 lg:px-8",children:s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[j,s.jsxs("div",{className:"p-6",children:[n,c,o]})]})})})]}),e[15]=o,e[16]=n,e[17]=c,e[18]=p):p=e[18],p}function z(t){return s.jsxs(y,{children:[s.jsx(i,{className:"font-medium",children:t.name}),s.jsx(i,{children:t.is_recurring?s.jsxs(b,{variant:"outline",className:"flex w-fit items-center gap-1",children:[s.jsx(E,{className:"h-3 w-3"}),"Recurring"]}):s.jsx("span",{className:"text-gray-500",children:"One-time"})}),s.jsx(i,{children:s.jsx(b,{className:P[t.status],children:t.status})}),s.jsx(i,{children:t.total_recipients}),s.jsx(i,{children:t.sent_count}),s.jsx(i,{children:t.failed_count}),s.jsx(i,{children:t.dispatch_at?new Date(t.dispatch_at).toLocaleString():"-"}),s.jsx(i,{children:s.jsx(g,{href:B(t.id),children:s.jsxs(_,{variant:"outline",size:"sm",children:[s.jsx(H,{className:"mr-1 h-4 w-4"}),"View"]})})})]},t.id)}export{te as default}; diff --git a/public/build/assets/Index-DdMw1wEf.js b/public/build/assets/Index-DdMw1wEf.js new file mode 100644 index 0000000..9ff8415 --- /dev/null +++ b/public/build/assets/Index-DdMw1wEf.js @@ -0,0 +1 @@ +import{c as N,j as s,L as g,H as w}from"./app-BkR-Yu8_.js";import{B as b}from"./badge-jojBb81G.js";import{B as _}from"./button-BkeD6D9C.js";import{T as v,a as y,b as a,c as S,d as T,e as i}from"./table-D7Qye2oa.js";import{P as C}from"./pagination-9b1HcMdN.js";import{h as R,A as k,j as B}from"./app-layout-6TmSMbxU.js";import{d as L}from"./index-BV9LgQgg.js";import{P as D}from"./plus-D8sy_HuF.js";import{R as E}from"./repeat-YCiHDVYw.js";import{E as H}from"./eye-B-3DQCdc.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-C-iMGC_l.js";import"./index-BxSFA7Jd.js";import"./send-BIH-xC-j.js";import"./shield-check-BR6okPK2.js";import"./users-BPIE1cfL.js";import"./coins-CBBvu4lK.js";const P={draft:"bg-gray-500",scheduled:"bg-blue-500",processing:"bg-yellow-500",completed:"bg-green-500",failed:"bg-red-500"},A=[{title:"Dashboard",href:L().url}];function te(t){const e=N.c(19),{campaigns:l}=t;let d;e[0]!==l.links?(d=l?.links||[],e[0]=l.links,e[1]=d):d=e[1];const u=d;let m;e[2]===Symbol.for("react.memo_cache_sentinel")?(m=s.jsx(w,{title:"Campaigns"}),e[2]=m):m=e[2];let h;e[3]===Symbol.for("react.memo_cache_sentinel")?(h=s.jsx("h2",{className:"text-2xl font-semibold",children:"Campaigns"}),e[3]=h):h=e[3];let x;e[4]===Symbol.for("react.memo_cache_sentinel")?(x=R(),e[4]=x):x=e[4];let j;e[5]===Symbol.for("react.memo_cache_sentinel")?(j=s.jsx("div",{className:"border-b p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[h,s.jsx(g,{href:x.url,passive:!0,children:s.jsxs(_,{children:[s.jsx(D,{className:"mr-2 h-4 w-4"}),"Create Campaign"]})})]})}),e[5]=j):j=e[5];let f;e[6]===Symbol.for("react.memo_cache_sentinel")?(f=s.jsx(v,{children:s.jsxs(y,{children:[s.jsx(a,{children:"Name"}),s.jsx(a,{children:"Type"}),s.jsx(a,{children:"Status"}),s.jsx(a,{children:"Recipients"}),s.jsx(a,{children:"Sent"}),s.jsx(a,{children:"Failed"}),s.jsx(a,{children:"Dispatch Date"}),s.jsx(a,{children:"Actions"})]})}),e[6]=f):f=e[6];let r;e[7]!==l.data?(r=l.data.map(z),e[7]=l.data,e[8]=r):r=e[8];let n;e[9]!==r?(n=s.jsxs(S,{children:[f,s.jsx(T,{children:r})]}),e[9]=r,e[10]=n):n=e[10];let c;e[11]!==u?(c=s.jsx(C,{links:u}),e[11]=u,e[12]=c):c=e[12];let o;e[13]!==l.data.length?(o=l.data.length===0&&s.jsx("div",{className:"py-12 text-center text-gray-500",children:"No campaigns yet. Create your first campaign to get started!"}),e[13]=l.data.length,e[14]=o):o=e[14];let p;return e[15]!==o||e[16]!==n||e[17]!==c?(p=s.jsxs(k,{breadcrumbs:A,children:[m,s.jsx("div",{className:"py-12",children:s.jsx("div",{className:"mx-auto max-w-7xl sm:px-6 lg:px-8",children:s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[j,s.jsxs("div",{className:"p-6",children:[n,c,o]})]})})})]}),e[15]=o,e[16]=n,e[17]=c,e[18]=p):p=e[18],p}function z(t){return s.jsxs(y,{children:[s.jsx(i,{className:"font-medium",children:t.name}),s.jsx(i,{children:t.is_recurring?s.jsxs(b,{variant:"outline",className:"flex w-fit items-center gap-1",children:[s.jsx(E,{className:"h-3 w-3"}),"Recurring"]}):s.jsx("span",{className:"text-gray-500",children:"One-time"})}),s.jsx(i,{children:s.jsx(b,{className:P[t.status],children:t.status})}),s.jsx(i,{children:t.total_recipients}),s.jsx(i,{children:t.sent_count}),s.jsx(i,{children:t.failed_count}),s.jsx(i,{children:t.dispatch_at?new Date(t.dispatch_at).toLocaleString():"-"}),s.jsx(i,{children:s.jsx(g,{href:B(t.id),children:s.jsxs(_,{variant:"outline",size:"sm",children:[s.jsx(H,{className:"mr-1 h-4 w-4"}),"View"]})})})]},t.id)}export{te as default}; diff --git a/public/build/assets/Index-ceQDBOel.js b/public/build/assets/Index-ceQDBOel.js new file mode 100644 index 0000000..7d0c67e --- /dev/null +++ b/public/build/assets/Index-ceQDBOel.js @@ -0,0 +1 @@ +import{c as Pe,r as je,u as ye,j as s,H as Ue,b as Fe}from"./app-BkR-Yu8_.js";import{B as U}from"./button-BkeD6D9C.js";import{I as be}from"./input-BFktu1Ja.js";import{L as F}from"./label-B8qNWxTC.js";import{D as ve,a as Ne,b as De,c as we,d as ke}from"./dialog-Bnza0FdC.js";import{T as He,a as Ce,b as H,e as I,c as Ie,d as Le}from"./table-D7Qye2oa.js";import{B as _e}from"./badge-jojBb81G.js";import{l as Ee,m as Oe,A as Re,n as Ve}from"./app-layout-6TmSMbxU.js";import{d as ze}from"./index-BV9LgQgg.js";import{P as We}from"./pagination-9b1HcMdN.js";import{U as $e}from"./upload-CyjYyb3G.js";import{P as qe}from"./plus-D8sy_HuF.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-C-iMGC_l.js";import"./index-BxSFA7Jd.js";import"./send-BIH-xC-j.js";import"./shield-check-BR6okPK2.js";import"./users-BPIE1cfL.js";import"./coins-CBBvu4lK.js";function bs(n){const e=Pe.c(97),{subscribers:o,tags:c}=n,[ae,ge]=je.useState(!1),[ne,Se]=je.useState(!1);let L;e[0]!==o.links?(L=o.links||[],e[0]=o.links,e[1]=L):L=e[1];const re=L,[oe,Te]=je.useState("");let E;e[2]===Symbol.for("react.memo_cache_sentinel")?(E={phone_number:"",name:"",tag_ids:[]},e[2]=E):E=e[2];const{data:a,setData:r,post:ce,processing:de,reset:me,errors:d}=ye(E);let O;e[3]===Symbol.for("react.memo_cache_sentinel")?(O={file:null,tag_ids:[]},e[3]=O):O=e[3];const i=ye(O);let R;e[4]!==r?(R=t=>{t.preventDefault();const l=t.target.value,P=l.split(",").map(Xe).filter(Qe);r("phone_number",P),Te(l)},e[4]=r,e[5]=R):R=e[5];const he=R;let m;e[6]!==d?(m=Object.keys(d).filter(Me),e[6]=d,e[7]=m):m=e[7];let V;e[8]!==d||e[9]!==m?(V=m.map(t=>d[t]),e[8]=d,e[9]=m,e[10]=V):V=e[10];const fe=V.join(" ");let z;e[11]!==a.phone_number.length||e[12]!==ce||e[13]!==me?(z=t=>{if(t.preventDefault(),a.phone_number.length<1){alert("Please enter at least one phone number.");return}ce(Ee().url,{onSuccess:()=>{me(),ge(!1)}})},e[11]=a.phone_number.length,e[12]=ce,e[13]=me,e[14]=z):z=e[14];const pe=z;let W;e[15]!==i?(W=t=>{t.preventDefault(),i.post(Oe().url,{onSuccess:()=>{i.reset(),Se(!1)}})},e[15]=i,e[16]=W):W=e[16];const ue=W,Ae=Je;let $;e[17]===Symbol.for("react.memo_cache_sentinel")?($=[{title:"Dashboard",href:ze().url}],e[17]=$):$=e[17];const Be=$;let q;e[18]===Symbol.for("react.memo_cache_sentinel")?(q=s.jsx(Ue,{title:"Subscribers"}),e[18]=q):q=e[18];let G;e[19]===Symbol.for("react.memo_cache_sentinel")?(G=s.jsx("h2",{className:"text-2xl font-semibold",children:"Subscribers"}),e[19]=G):G=e[19];let J;e[20]===Symbol.for("react.memo_cache_sentinel")?(J=s.jsx(ve,{asChild:!0,children:s.jsxs(U,{variant:"outline",children:[s.jsx($e,{className:"mr-2 h-4 w-4"}),"Bulk Upload"]})}),e[20]=J):J=e[20];let K;e[21]===Symbol.for("react.memo_cache_sentinel")?(K=s.jsx(Ne,{children:s.jsx(De,{children:"Bulk Upload Subscribers"})}),e[21]=K):K=e[21];let M;e[22]===Symbol.for("react.memo_cache_sentinel")?(M=s.jsx(F,{htmlFor:"file",children:"CSV File"}),e[22]=M):M=e[22];let h;e[23]!==i?(h=s.jsx(be,{id:"file",type:"file",accept:".csv,.txt",onChange:t=>i.setData("file",t.target.files[0])}),e[23]=i,e[24]=h):h=e[24];let Q;e[25]===Symbol.for("react.memo_cache_sentinel")?(Q=s.jsx("p",{className:"mt-1 text-sm text-gray-500",children:"CSV should have columns: phone_number, name (optional)"}),e[25]=Q):Q=e[25];let f;e[26]!==h?(f=s.jsxs("div",{children:[M,h,Q]}),e[26]=h,e[27]=f):f=e[27];let X;e[28]===Symbol.for("react.memo_cache_sentinel")?(X=s.jsx(F,{children:"Tags (optional)"}),e[28]=X):X=e[28];let p;if(e[29]!==i||e[30]!==c){let t;e[32]!==i?(t=l=>s.jsx(_e,{variant:i.data.tag_ids.includes(l.id)?"default":"outline",className:"cursor-pointer",onClick:()=>{const P=i.data.tag_ids.includes(l.id)?i.data.tag_ids.filter(xe=>xe!==l.id):[...i.data.tag_ids,l.id];i.setData("tag_ids",P)},children:l.name},l.id),e[32]=i,e[33]=t):t=e[33],p=c.map(t),e[29]=i,e[30]=c,e[31]=p}else p=e[31];let u;e[34]!==p?(u=s.jsxs("div",{children:[X,s.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:p})]}),e[34]=p,e[35]=u):u=e[35];let x;e[36]!==i.processing?(x=s.jsx(U,{type:"submit",disabled:i.processing,children:"Upload"}),e[36]=i.processing,e[37]=x):x=e[37];let j;e[38]!==ue||e[39]!==f||e[40]!==u||e[41]!==x?(j=s.jsxs(we,{children:[K,s.jsxs("form",{onSubmit:ue,className:"space-y-4",children:[f,u,x]})]}),e[38]=ue,e[39]=f,e[40]=u,e[41]=x,e[42]=j):j=e[42];let b;e[43]!==ne||e[44]!==j?(b=s.jsxs(ke,{open:ne,onOpenChange:Se,children:[J,j]}),e[43]=ne,e[44]=j,e[45]=b):b=e[45];let Y;e[46]===Symbol.for("react.memo_cache_sentinel")?(Y=s.jsx(ve,{asChild:!0,children:s.jsxs(U,{children:[s.jsx(qe,{className:"mr-2 h-4 w-4"}),"Add Subscriber"]})}),e[46]=Y):Y=e[46];let Z;e[47]===Symbol.for("react.memo_cache_sentinel")?(Z=s.jsx(Ne,{children:s.jsx(De,{children:"Add New Subscriber"})}),e[47]=Z):Z=e[47];let ee;e[48]===Symbol.for("react.memo_cache_sentinel")?(ee=s.jsx(F,{htmlFor:"phone_number",children:"Phone Numbers (comma-separated)"}),e[48]=ee):ee=e[48];let _;e[49]!==he||e[50]!==oe||e[51]!==fe?(_=s.jsxs("div",{children:[ee,s.jsx(be,{id:"phone_number",value:oe,onChange:he,error:fe})]}),e[49]=he,e[50]=oe,e[51]=fe,e[52]=_):_=e[52];let se;e[53]===Symbol.for("react.memo_cache_sentinel")?(se=s.jsx(F,{htmlFor:"name",children:"Name (optional)"}),e[53]=se):se=e[53];let g;e[54]!==r?(g=t=>r("name",t.target.value),e[54]=r,e[55]=g):g=e[55];let S;e[56]!==a.name||e[57]!==g?(S=s.jsxs("div",{children:[se,s.jsx(be,{id:"name",value:a.name,onChange:g})]}),e[56]=a.name,e[57]=g,e[58]=S):S=e[58];let te;e[59]===Symbol.for("react.memo_cache_sentinel")?(te=s.jsx(F,{children:"Tags"}),e[59]=te):te=e[59];let y;if(e[60]!==a.tag_ids||e[61]!==r||e[62]!==c){let t;e[64]!==a.tag_ids||e[65]!==r?(t=l=>s.jsx(_e,{variant:a.tag_ids.includes(l.id)?"default":"outline",className:"cursor-pointer",onClick:()=>{const P=a.tag_ids.includes(l.id)?a.tag_ids.filter(xe=>xe!==l.id):[...a.tag_ids,l.id];r("tag_ids",P)},children:l.name},l.id),e[64]=a.tag_ids,e[65]=r,e[66]=t):t=e[66],y=c.map(t),e[60]=a.tag_ids,e[61]=r,e[62]=c,e[63]=y}else y=e[63];let v;e[67]!==y?(v=s.jsxs("div",{children:[te,s.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:y})]}),e[67]=y,e[68]=v):v=e[68];let N;e[69]!==de?(N=s.jsx(U,{type:"submit",disabled:de,children:"Add Subscriber"}),e[69]=de,e[70]=N):N=e[70];let D;e[71]!==pe||e[72]!==_||e[73]!==S||e[74]!==v||e[75]!==N?(D=s.jsxs(we,{children:[Z,s.jsxs("form",{onSubmit:pe,className:"space-y-4",children:[_,S,v,N]})]}),e[71]=pe,e[72]=_,e[73]=S,e[74]=v,e[75]=N,e[76]=D):D=e[76];let w;e[77]!==ae||e[78]!==D?(w=s.jsxs(ke,{open:ae,onOpenChange:ge,children:[Y,D]}),e[77]=ae,e[78]=D,e[79]=w):w=e[79];let k;e[80]!==b||e[81]!==w?(k=s.jsx("div",{className:"border-b p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[G,s.jsxs("div",{className:"flex gap-2",children:[b,w]})]})}),e[80]=b,e[81]=w,e[82]=k):k=e[82];let le;e[83]===Symbol.for("react.memo_cache_sentinel")?(le=s.jsx(He,{children:s.jsxs(Ce,{children:[s.jsx(H,{children:"Phone Number"}),s.jsx(H,{children:"Name"}),s.jsx(H,{children:"Tags"}),s.jsx(H,{children:"Added"}),s.jsx(H,{children:"Actions"})]})}),e[83]=le):le=e[83];let C;if(e[84]!==o.data){let t;e[86]===Symbol.for("react.memo_cache_sentinel")?(t=l=>s.jsxs(Ce,{children:[s.jsx(I,{className:"font-medium",children:l.phone_number}),s.jsx(I,{children:l.name||"-"}),s.jsx(I,{children:s.jsx("div",{className:"flex flex-wrap gap-1",children:l.tags?.map(Ge)})}),s.jsx(I,{children:new Date(l.created_at).toLocaleDateString()}),s.jsx(I,{children:s.jsx(U,{variant:"destructive",size:"sm",onClick:()=>Ae(l.id),children:"Delete"})})]},l.id),e[86]=t):t=e[86],C=o.data.map(t),e[84]=o.data,e[85]=C}else C=e[85];let T;e[87]!==C?(T=s.jsxs(Ie,{children:[le,s.jsx(Le,{children:C})]}),e[87]=C,e[88]=T):T=e[88];let A;e[89]!==re?(A=s.jsx(We,{links:re}),e[89]=re,e[90]=A):A=e[90];let B;e[91]!==T||e[92]!==A?(B=s.jsxs("div",{className:"p-6",children:[T,A]}),e[91]=T,e[92]=A,e[93]=B):B=e[93];let ie;return e[94]!==k||e[95]!==B?(ie=s.jsxs(Re,{breadcrumbs:Be,children:[q,s.jsx("div",{className:"py-12",children:s.jsx("div",{className:"mx-auto max-w-7xl sm:px-6 lg:px-8",children:s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[k,B]})})})]}),e[94]=k,e[95]=B,e[96]=ie):ie=e[96],ie}function Ge(n){return s.jsx(_e,{variant:"secondary",children:n.name},n.id)}function Je(n){confirm("Are you sure you want to delete this subscriber?")&&Fe.delete(Ve(n).url,{onSuccess:Ke,preserveScroll:!0})}function Ke(){}function Me(n){return n.startsWith("phone_number")}function Qe(n){return n!==""}function Xe(n){return n.trim()}export{bs as default}; diff --git a/public/build/assets/Index-q0xEBgUS.js b/public/build/assets/Index-q0xEBgUS.js deleted file mode 100644 index 8f2c2f1..0000000 --- a/public/build/assets/Index-q0xEBgUS.js +++ /dev/null @@ -1,6 +0,0 @@ -import{r as d,j as l,c as q,u as st,H as rt}from"./app-DkuaKs7R.js";import{t as Ee,v as lt,R as at,w as Ie,x as it,y as ct,P as dt,V as ut,z as pt,B as ft,D as mt,E as ht,F as vt,G as gt,H as xt,I as St,J as Te,A as wt}from"./app-layout-DjcEY8s3.js";import{u as U,c as yt,B as Ct}from"./button-DEWTOza6.js";import{I as bt}from"./input-DZnmHXM7.js";import{L as It}from"./label-CDV8N_bE.js";import{P as B,r as Re}from"./index-DKUWucUl.js";import{u as Ne,c as _t,a as R,b as Y}from"./index-BX6ecx82.js";import{u as Tt}from"./index-BY0riNnH.js";import{a as ne}from"./utils-DFaayVYX.js";import{C as je}from"./chevron-down-ww17vaZf.js";import{C as Nt}from"./check-CJ-RwoAT.js";import{c as Pt}from"./index-DSWKGzIo.js";import{C as Et,a as Rt,b as jt,c as Mt,d as At}from"./card-BJw5CvBs.js";import{I as Dt}from"./input-error-BHxzSb2r.js";/* empty css */import"./x-GpPVQP8J.js";import"./send-Dlj8qGrF.js";import"./shield-check-BuNJNOL8.js";import"./users-YqeB5lb8.js";/** - * @license lucide-react v0.475.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ot=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],kt=Pt("ChevronUp",Ot);function Pe(s,[e,t]){return Math.min(t,Math.max(e,s))}var Lt=[" ","Enter","ArrowUp","ArrowDown"],Bt=[" ","Enter"],ee="Select",[de,ue,Vt]=it(ee),[se,$o]=_t(ee,[Vt,Ee]),pe=Ee(),[Ht,X]=se(ee),[Ft,Ut]=se(ee),Me=s=>{const{__scopeSelect:e,children:t,open:o,defaultOpen:n,onOpenChange:i,value:r,defaultValue:a,onValueChange:c,dir:p,name:v,autoComplete:g,disabled:y,required:w,form:S}=s,u=pe(e),[h,C]=d.useState(null),[f,x]=d.useState(null),[O,j]=d.useState(!1),V=lt(p),[_,A]=Ne({prop:o,defaultProp:n??!1,onChange:i,caller:ee}),[E,T]=Ne({prop:r,defaultProp:a,onChange:c,caller:ee}),M=d.useRef(null),k=h?S||!!h.closest("form"):!0,[$,W]=d.useState(new Set),z=Array.from($).map(D=>D.props.value).join(";");return l.jsx(at,{...u,children:l.jsxs(Ht,{required:w,scope:e,trigger:h,onTriggerChange:C,valueNode:f,onValueNodeChange:x,valueNodeHasChildren:O,onValueNodeHasChildrenChange:j,contentId:Ie(),value:E,onValueChange:T,open:_,onOpenChange:A,dir:V,triggerPointerDownPosRef:M,disabled:y,children:[l.jsx(de.Provider,{scope:e,children:l.jsx(Ft,{scope:s.__scopeSelect,onNativeOptionAdd:d.useCallback(D=>{W(F=>new Set(F).add(D))},[]),onNativeOptionRemove:d.useCallback(D=>{W(F=>{const K=new Set(F);return K.delete(D),K})},[]),children:t})}),k?l.jsxs(et,{"aria-hidden":!0,required:w,tabIndex:-1,name:v,autoComplete:g,value:E,onChange:D=>T(D.target.value),disabled:y,form:S,children:[E===void 0?l.jsx("option",{value:""}):null,Array.from($)]},z):null]})})};Me.displayName=ee;var Ae="SelectTrigger",De=d.forwardRef((s,e)=>{const{__scopeSelect:t,disabled:o=!1,...n}=s,i=pe(t),r=X(Ae,t),a=r.disabled||o,c=U(e,r.onTriggerChange),p=ue(t),v=d.useRef("touch"),[g,y,w]=ot(u=>{const h=p().filter(x=>!x.disabled),C=h.find(x=>x.value===r.value),f=nt(h,u,C);f!==void 0&&r.onValueChange(f.value)}),S=u=>{a||(r.onOpenChange(!0),w()),u&&(r.triggerPointerDownPosRef.current={x:Math.round(u.pageX),y:Math.round(u.pageY)})};return l.jsx(ct,{asChild:!0,...i,children:l.jsx(B.button,{type:"button",role:"combobox","aria-controls":r.contentId,"aria-expanded":r.open,"aria-required":r.required,"aria-autocomplete":"none",dir:r.dir,"data-state":r.open?"open":"closed",disabled:a,"data-disabled":a?"":void 0,"data-placeholder":tt(r.value)?"":void 0,...n,ref:c,onClick:R(n.onClick,u=>{u.currentTarget.focus(),v.current!=="mouse"&&S(u)}),onPointerDown:R(n.onPointerDown,u=>{v.current=u.pointerType;const h=u.target;h.hasPointerCapture(u.pointerId)&&h.releasePointerCapture(u.pointerId),u.button===0&&u.ctrlKey===!1&&u.pointerType==="mouse"&&(S(u),u.preventDefault())}),onKeyDown:R(n.onKeyDown,u=>{const h=g.current!=="";!(u.ctrlKey||u.altKey||u.metaKey)&&u.key.length===1&&y(u.key),!(h&&u.key===" ")&&Lt.includes(u.key)&&(S(),u.preventDefault())})})})});De.displayName=Ae;var Oe="SelectValue",ke=d.forwardRef((s,e)=>{const{__scopeSelect:t,className:o,style:n,children:i,placeholder:r="",...a}=s,c=X(Oe,t),{onValueNodeHasChildrenChange:p}=c,v=i!==void 0,g=U(e,c.onValueNodeChange);return Y(()=>{p(v)},[p,v]),l.jsx(B.span,{...a,ref:g,style:{pointerEvents:"none"},children:tt(c.value)?l.jsx(l.Fragment,{children:r}):i})});ke.displayName=Oe;var Wt="SelectIcon",Le=d.forwardRef((s,e)=>{const{__scopeSelect:t,children:o,...n}=s;return l.jsx(B.span,{"aria-hidden":!0,...n,ref:e,children:o||"▼"})});Le.displayName=Wt;var zt="SelectPortal",Be=s=>l.jsx(dt,{asChild:!0,...s});Be.displayName=zt;var te="SelectContent",Ve=d.forwardRef((s,e)=>{const t=X(te,s.__scopeSelect),[o,n]=d.useState();if(Y(()=>{n(new DocumentFragment)},[]),!t.open){const i=o;return i?Re.createPortal(l.jsx(He,{scope:s.__scopeSelect,children:l.jsx(de.Slot,{scope:s.__scopeSelect,children:l.jsx("div",{children:s.children})})}),i):null}return l.jsx(Fe,{...s,ref:e})});Ve.displayName=te;var H=10,[He,Z]=se(te),Kt="SelectContentImpl",$t=yt("SelectContent.RemoveScroll"),Fe=d.forwardRef((s,e)=>{const{__scopeSelect:t,position:o="item-aligned",onCloseAutoFocus:n,onEscapeKeyDown:i,onPointerDownOutside:r,side:a,sideOffset:c,align:p,alignOffset:v,arrowPadding:g,collisionBoundary:y,collisionPadding:w,sticky:S,hideWhenDetached:u,avoidCollisions:h,...C}=s,f=X(te,t),[x,O]=d.useState(null),[j,V]=d.useState(null),_=U(e,m=>O(m)),[A,E]=d.useState(null),[T,M]=d.useState(null),k=ue(t),[$,W]=d.useState(!1),z=d.useRef(!1);d.useEffect(()=>{if(x)return ft(x)},[x]),mt();const D=d.useCallback(m=>{const[N,...L]=k().map(P=>P.ref.current),[b]=L.slice(-1),I=document.activeElement;for(const P of m)if(P===I||(P?.scrollIntoView({block:"nearest"}),P===N&&j&&(j.scrollTop=0),P===b&&j&&(j.scrollTop=j.scrollHeight),P?.focus(),document.activeElement!==I))return},[k,j]),F=d.useCallback(()=>D([A,x]),[D,A,x]);d.useEffect(()=>{$&&F()},[$,F]);const{onOpenChange:K,triggerPointerDownPosRef:G}=f;d.useEffect(()=>{if(x){let m={x:0,y:0};const N=b=>{m={x:Math.abs(Math.round(b.pageX)-(G.current?.x??0)),y:Math.abs(Math.round(b.pageY)-(G.current?.y??0))}},L=b=>{m.x<=10&&m.y<=10?b.preventDefault():x.contains(b.target)||K(!1),document.removeEventListener("pointermove",N),G.current=null};return G.current!==null&&(document.addEventListener("pointermove",N),document.addEventListener("pointerup",L,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",N),document.removeEventListener("pointerup",L,{capture:!0})}}},[x,K,G]),d.useEffect(()=>{const m=()=>K(!1);return window.addEventListener("blur",m),window.addEventListener("resize",m),()=>{window.removeEventListener("blur",m),window.removeEventListener("resize",m)}},[K]);const[fe,ae]=ot(m=>{const N=k().filter(I=>!I.disabled),L=N.find(I=>I.ref.current===document.activeElement),b=nt(N,m,L);b&&setTimeout(()=>b.ref.current.focus())}),me=d.useCallback((m,N,L)=>{const b=!z.current&&!L;(f.value!==void 0&&f.value===N||b)&&(E(m),b&&(z.current=!0))},[f.value]),he=d.useCallback(()=>x?.focus(),[x]),oe=d.useCallback((m,N,L)=>{const b=!z.current&&!L;(f.value!==void 0&&f.value===N||b)&&M(m)},[f.value]),ie=o==="popper"?Se:Ue,re=ie===Se?{side:a,sideOffset:c,align:p,alignOffset:v,arrowPadding:g,collisionBoundary:y,collisionPadding:w,sticky:S,hideWhenDetached:u,avoidCollisions:h}:{};return l.jsx(He,{scope:t,content:x,viewport:j,onViewportChange:V,itemRefCallback:me,selectedItem:A,onItemLeave:he,itemTextRefCallback:oe,focusSelectedItem:F,selectedItemText:T,position:o,isPositioned:$,searchRef:fe,children:l.jsx(ht,{as:$t,allowPinchZoom:!0,children:l.jsx(vt,{asChild:!0,trapped:f.open,onMountAutoFocus:m=>{m.preventDefault()},onUnmountAutoFocus:R(n,m=>{f.trigger?.focus({preventScroll:!0}),m.preventDefault()}),children:l.jsx(gt,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:i,onPointerDownOutside:r,onFocusOutside:m=>m.preventDefault(),onDismiss:()=>f.onOpenChange(!1),children:l.jsx(ie,{role:"listbox",id:f.contentId,"data-state":f.open?"open":"closed",dir:f.dir,onContextMenu:m=>m.preventDefault(),...C,...re,onPlaced:()=>W(!0),ref:_,style:{display:"flex",flexDirection:"column",outline:"none",...C.style},onKeyDown:R(C.onKeyDown,m=>{const N=m.ctrlKey||m.altKey||m.metaKey;if(m.key==="Tab"&&m.preventDefault(),!N&&m.key.length===1&&ae(m.key),["ArrowUp","ArrowDown","Home","End"].includes(m.key)){let b=k().filter(I=>!I.disabled).map(I=>I.ref.current);if(["ArrowUp","End"].includes(m.key)&&(b=b.slice().reverse()),["ArrowUp","ArrowDown"].includes(m.key)){const I=m.target,P=b.indexOf(I);b=b.slice(P+1)}setTimeout(()=>D(b)),m.preventDefault()}})})})})})})});Fe.displayName=Kt;var Gt="SelectItemAlignedPosition",Ue=d.forwardRef((s,e)=>{const{__scopeSelect:t,onPlaced:o,...n}=s,i=X(te,t),r=Z(te,t),[a,c]=d.useState(null),[p,v]=d.useState(null),g=U(e,_=>v(_)),y=ue(t),w=d.useRef(!1),S=d.useRef(!0),{viewport:u,selectedItem:h,selectedItemText:C,focusSelectedItem:f}=r,x=d.useCallback(()=>{if(i.trigger&&i.valueNode&&a&&p&&u&&h&&C){const _=i.trigger.getBoundingClientRect(),A=p.getBoundingClientRect(),E=i.valueNode.getBoundingClientRect(),T=C.getBoundingClientRect();if(i.dir!=="rtl"){const I=T.left-A.left,P=E.left-I,J=_.left-P,Q=_.width+J,ve=Math.max(Q,A.width),ge=window.innerWidth-H,xe=Pe(P,[H,Math.max(H,ge-ve)]);a.style.minWidth=Q+"px",a.style.left=xe+"px"}else{const I=A.right-T.right,P=window.innerWidth-E.right-I,J=window.innerWidth-_.right-P,Q=_.width+J,ve=Math.max(Q,A.width),ge=window.innerWidth-H,xe=Pe(P,[H,Math.max(H,ge-ve)]);a.style.minWidth=Q+"px",a.style.right=xe+"px"}const M=y(),k=window.innerHeight-H*2,$=u.scrollHeight,W=window.getComputedStyle(p),z=parseInt(W.borderTopWidth,10),D=parseInt(W.paddingTop,10),F=parseInt(W.borderBottomWidth,10),K=parseInt(W.paddingBottom,10),G=z+D+$+K+F,fe=Math.min(h.offsetHeight*5,G),ae=window.getComputedStyle(u),me=parseInt(ae.paddingTop,10),he=parseInt(ae.paddingBottom,10),oe=_.top+_.height/2-H,ie=k-oe,re=h.offsetHeight/2,m=h.offsetTop+re,N=z+D+m,L=G-N;if(N<=oe){const I=M.length>0&&h===M[M.length-1].ref.current;a.style.bottom="0px";const P=p.clientHeight-u.offsetTop-u.offsetHeight,J=Math.max(ie,re+(I?he:0)+P+F),Q=N+J;a.style.height=Q+"px"}else{const I=M.length>0&&h===M[0].ref.current;a.style.top="0px";const J=Math.max(oe,z+u.offsetTop+(I?me:0)+re)+L;a.style.height=J+"px",u.scrollTop=N-oe+u.offsetTop}a.style.margin=`${H}px 0`,a.style.minHeight=fe+"px",a.style.maxHeight=k+"px",o?.(),requestAnimationFrame(()=>w.current=!0)}},[y,i.trigger,i.valueNode,a,p,u,h,C,i.dir,o]);Y(()=>x(),[x]);const[O,j]=d.useState();Y(()=>{p&&j(window.getComputedStyle(p).zIndex)},[p]);const V=d.useCallback(_=>{_&&S.current===!0&&(x(),f?.(),S.current=!1)},[x,f]);return l.jsx(qt,{scope:t,contentWrapper:a,shouldExpandOnScrollRef:w,onScrollButtonChange:V,children:l.jsx("div",{ref:c,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:O},children:l.jsx(B.div,{...n,ref:g,style:{boxSizing:"border-box",maxHeight:"100%",...n.style}})})})});Ue.displayName=Gt;var Yt="SelectPopperPosition",Se=d.forwardRef((s,e)=>{const{__scopeSelect:t,align:o="start",collisionPadding:n=H,...i}=s,r=pe(t);return l.jsx(xt,{...r,...i,ref:e,align:o,collisionPadding:n,style:{boxSizing:"border-box",...i.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Se.displayName=Yt;var[qt,_e]=se(te,{}),we="SelectViewport",We=d.forwardRef((s,e)=>{const{__scopeSelect:t,nonce:o,...n}=s,i=Z(we,t),r=_e(we,t),a=U(e,i.onViewportChange),c=d.useRef(0);return l.jsxs(l.Fragment,{children:[l.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),l.jsx(de.Slot,{scope:t,children:l.jsx(B.div,{"data-radix-select-viewport":"",role:"presentation",...n,ref:a,style:{position:"relative",flex:1,overflow:"hidden auto",...n.style},onScroll:R(n.onScroll,p=>{const v=p.currentTarget,{contentWrapper:g,shouldExpandOnScrollRef:y}=r;if(y?.current&&g){const w=Math.abs(c.current-v.scrollTop);if(w>0){const S=window.innerHeight-H*2,u=parseFloat(g.style.minHeight),h=parseFloat(g.style.height),C=Math.max(u,h);if(C0?O:0,g.style.justifyContent="flex-end")}}}c.current=v.scrollTop})})})]})});We.displayName=we;var ze="SelectGroup",[Xt,Zt]=se(ze),Jt=d.forwardRef((s,e)=>{const{__scopeSelect:t,...o}=s,n=Ie();return l.jsx(Xt,{scope:t,id:n,children:l.jsx(B.div,{role:"group","aria-labelledby":n,...o,ref:e})})});Jt.displayName=ze;var Ke="SelectLabel",Qt=d.forwardRef((s,e)=>{const{__scopeSelect:t,...o}=s,n=Zt(Ke,t);return l.jsx(B.div,{id:n.id,...o,ref:e})});Qt.displayName=Ke;var ce="SelectItem",[eo,$e]=se(ce),Ge=d.forwardRef((s,e)=>{const{__scopeSelect:t,value:o,disabled:n=!1,textValue:i,...r}=s,a=X(ce,t),c=Z(ce,t),p=a.value===o,[v,g]=d.useState(i??""),[y,w]=d.useState(!1),S=U(e,f=>c.itemRefCallback?.(f,o,n)),u=Ie(),h=d.useRef("touch"),C=()=>{n||(a.onValueChange(o),a.onOpenChange(!1))};if(o==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return l.jsx(eo,{scope:t,value:o,disabled:n,textId:u,isSelected:p,onItemTextChange:d.useCallback(f=>{g(x=>x||(f?.textContent??"").trim())},[]),children:l.jsx(de.ItemSlot,{scope:t,value:o,disabled:n,textValue:v,children:l.jsx(B.div,{role:"option","aria-labelledby":u,"data-highlighted":y?"":void 0,"aria-selected":p&&y,"data-state":p?"checked":"unchecked","aria-disabled":n||void 0,"data-disabled":n?"":void 0,tabIndex:n?void 0:-1,...r,ref:S,onFocus:R(r.onFocus,()=>w(!0)),onBlur:R(r.onBlur,()=>w(!1)),onClick:R(r.onClick,()=>{h.current!=="mouse"&&C()}),onPointerUp:R(r.onPointerUp,()=>{h.current==="mouse"&&C()}),onPointerDown:R(r.onPointerDown,f=>{h.current=f.pointerType}),onPointerMove:R(r.onPointerMove,f=>{h.current=f.pointerType,n?c.onItemLeave?.():h.current==="mouse"&&f.currentTarget.focus({preventScroll:!0})}),onPointerLeave:R(r.onPointerLeave,f=>{f.currentTarget===document.activeElement&&c.onItemLeave?.()}),onKeyDown:R(r.onKeyDown,f=>{c.searchRef?.current!==""&&f.key===" "||(Bt.includes(f.key)&&C(),f.key===" "&&f.preventDefault())})})})})});Ge.displayName=ce;var le="SelectItemText",Ye=d.forwardRef((s,e)=>{const{__scopeSelect:t,className:o,style:n,...i}=s,r=X(le,t),a=Z(le,t),c=$e(le,t),p=Ut(le,t),[v,g]=d.useState(null),y=U(e,C=>g(C),c.onItemTextChange,C=>a.itemTextRefCallback?.(C,c.value,c.disabled)),w=v?.textContent,S=d.useMemo(()=>l.jsx("option",{value:c.value,disabled:c.disabled,children:w},c.value),[c.disabled,c.value,w]),{onNativeOptionAdd:u,onNativeOptionRemove:h}=p;return Y(()=>(u(S),()=>h(S)),[u,h,S]),l.jsxs(l.Fragment,{children:[l.jsx(B.span,{id:c.textId,...i,ref:y}),c.isSelected&&r.valueNode&&!r.valueNodeHasChildren?Re.createPortal(i.children,r.valueNode):null]})});Ye.displayName=le;var qe="SelectItemIndicator",Xe=d.forwardRef((s,e)=>{const{__scopeSelect:t,...o}=s;return $e(qe,t).isSelected?l.jsx(B.span,{"aria-hidden":!0,...o,ref:e}):null});Xe.displayName=qe;var ye="SelectScrollUpButton",Ze=d.forwardRef((s,e)=>{const t=Z(ye,s.__scopeSelect),o=_e(ye,s.__scopeSelect),[n,i]=d.useState(!1),r=U(e,o.onScrollButtonChange);return Y(()=>{if(t.viewport&&t.isPositioned){let a=function(){const p=c.scrollTop>0;i(p)};const c=t.viewport;return a(),c.addEventListener("scroll",a),()=>c.removeEventListener("scroll",a)}},[t.viewport,t.isPositioned]),n?l.jsx(Qe,{...s,ref:r,onAutoScroll:()=>{const{viewport:a,selectedItem:c}=t;a&&c&&(a.scrollTop=a.scrollTop-c.offsetHeight)}}):null});Ze.displayName=ye;var Ce="SelectScrollDownButton",Je=d.forwardRef((s,e)=>{const t=Z(Ce,s.__scopeSelect),o=_e(Ce,s.__scopeSelect),[n,i]=d.useState(!1),r=U(e,o.onScrollButtonChange);return Y(()=>{if(t.viewport&&t.isPositioned){let a=function(){const p=c.scrollHeight-c.clientHeight,v=Math.ceil(c.scrollTop)c.removeEventListener("scroll",a)}},[t.viewport,t.isPositioned]),n?l.jsx(Qe,{...s,ref:r,onAutoScroll:()=>{const{viewport:a,selectedItem:c}=t;a&&c&&(a.scrollTop=a.scrollTop+c.offsetHeight)}}):null});Je.displayName=Ce;var Qe=d.forwardRef((s,e)=>{const{__scopeSelect:t,onAutoScroll:o,...n}=s,i=Z("SelectScrollButton",t),r=d.useRef(null),a=ue(t),c=d.useCallback(()=>{r.current!==null&&(window.clearInterval(r.current),r.current=null)},[]);return d.useEffect(()=>()=>c(),[c]),Y(()=>{a().find(v=>v.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:"nearest"})},[a]),l.jsx(B.div,{"aria-hidden":!0,...n,ref:e,style:{flexShrink:0,...n.style},onPointerDown:R(n.onPointerDown,()=>{r.current===null&&(r.current=window.setInterval(o,50))}),onPointerMove:R(n.onPointerMove,()=>{i.onItemLeave?.(),r.current===null&&(r.current=window.setInterval(o,50))}),onPointerLeave:R(n.onPointerLeave,()=>{c()})})}),to="SelectSeparator",oo=d.forwardRef((s,e)=>{const{__scopeSelect:t,...o}=s;return l.jsx(B.div,{"aria-hidden":!0,...o,ref:e})});oo.displayName=to;var be="SelectArrow",no=d.forwardRef((s,e)=>{const{__scopeSelect:t,...o}=s,n=pe(t),i=X(be,t),r=Z(be,t);return i.open&&r.position==="popper"?l.jsx(St,{...n,...o,ref:e}):null});no.displayName=be;var so="SelectBubbleInput",et=d.forwardRef(({__scopeSelect:s,value:e,...t},o)=>{const n=d.useRef(null),i=U(o,n),r=Tt(e);return d.useEffect(()=>{const a=n.current;if(!a)return;const c=window.HTMLSelectElement.prototype,v=Object.getOwnPropertyDescriptor(c,"value").set;if(r!==e&&v){const g=new Event("change",{bubbles:!0});v.call(a,e),a.dispatchEvent(g)}},[r,e]),l.jsx(B.select,{...t,style:{...ut,...t.style},ref:i,defaultValue:e})});et.displayName=so;function tt(s){return s===""||s===void 0}function ot(s){const e=pt(s),t=d.useRef(""),o=d.useRef(0),n=d.useCallback(r=>{const a=t.current+r;e(a),(function c(p){t.current=p,window.clearTimeout(o.current),p!==""&&(o.current=window.setTimeout(()=>c(""),1e3))})(a)},[e]),i=d.useCallback(()=>{t.current="",window.clearTimeout(o.current)},[]);return d.useEffect(()=>()=>window.clearTimeout(o.current),[]),[t,n,i]}function nt(s,e,t){const n=e.length>1&&Array.from(e).every(p=>p===e[0])?e[0]:e,i=t?s.indexOf(t):-1;let r=ro(s,Math.max(i,0));n.length===1&&(r=r.filter(p=>p!==t));const c=r.find(p=>p.textValue.toLowerCase().startsWith(n.toLowerCase()));return c!==t?c:void 0}function ro(s,e){return s.map((t,o)=>s[(e+o)%s.length])}var lo=Me,ao=De,io=ke,co=Le,uo=Be,po=Ve,fo=We,mo=Ge,ho=Ye,vo=Xe,go=Ze,xo=Je;function So(s){const e=q.c(4);let t;e[0]!==s?({...t}=s,e[0]=s,e[1]=t):t=e[1];let o;return e[2]!==t?(o=l.jsx(lo,{"data-slot":"select",...t}),e[2]=t,e[3]=o):o=e[3],o}function wo(s){const e=q.c(4);let t;e[0]!==s?({...t}=s,e[0]=s,e[1]=t):t=e[1];let o;return e[2]!==t?(o=l.jsx(io,{"data-slot":"select-value",...t}),e[2]=t,e[3]=o):o=e[3],o}function yo(s){const e=q.c(11);let t,o,n;e[0]!==s?({className:o,children:t,...n}=s,e[0]=s,e[1]=t,e[2]=o,e[3]=n):(t=e[1],o=e[2],n=e[3]);let i;e[4]!==o?(i=ne("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&>span]:line-clamp-1",o),e[4]=o,e[5]=i):i=e[5];let r;e[6]===Symbol.for("react.memo_cache_sentinel")?(r=l.jsx(co,{asChild:!0,children:l.jsx(je,{className:"size-4 opacity-50"})}),e[6]=r):r=e[6];let a;return e[7]!==t||e[8]!==n||e[9]!==i?(a=l.jsxs(ao,{"data-slot":"select-trigger",className:i,...n,children:[t,r]}),e[7]=t,e[8]=n,e[9]=i,e[10]=a):a=e[10],a}function Co(s){const e=q.c(20);let t,o,n,i;e[0]!==s?({className:o,children:t,position:i,...n}=s,e[0]=s,e[1]=t,e[2]=o,e[3]=n,e[4]=i):(t=e[1],o=e[2],n=e[3],i=e[4]);const r=i===void 0?"popper":i,a=r==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1";let c;e[5]!==o||e[6]!==a?(c=ne("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md",a,o),e[5]=o,e[6]=a,e[7]=c):c=e[7];let p;e[8]===Symbol.for("react.memo_cache_sentinel")?(p=l.jsx(Io,{}),e[8]=p):p=e[8];const v=r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1";let g;e[9]!==v?(g=ne("p-1",v),e[9]=v,e[10]=g):g=e[10];let y;e[11]!==t||e[12]!==g?(y=l.jsx(fo,{className:g,children:t}),e[11]=t,e[12]=g,e[13]=y):y=e[13];let w;e[14]===Symbol.for("react.memo_cache_sentinel")?(w=l.jsx(_o,{}),e[14]=w):w=e[14];let S;return e[15]!==r||e[16]!==n||e[17]!==c||e[18]!==y?(S=l.jsx(uo,{children:l.jsxs(po,{"data-slot":"select-content",className:c,position:r,...n,children:[p,y,w]})}),e[15]=r,e[16]=n,e[17]=c,e[18]=y,e[19]=S):S=e[19],S}function bo(s){const e=q.c(13);let t,o,n;e[0]!==s?({className:o,children:t,...n}=s,e[0]=s,e[1]=t,e[2]=o,e[3]=n):(t=e[1],o=e[2],n=e[3]);let i;e[4]!==o?(i=ne("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",o),e[4]=o,e[5]=i):i=e[5];let r;e[6]===Symbol.for("react.memo_cache_sentinel")?(r=l.jsx("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:l.jsx(vo,{children:l.jsx(Nt,{className:"size-4"})})}),e[6]=r):r=e[6];let a;e[7]!==t?(a=l.jsx(ho,{children:t}),e[7]=t,e[8]=a):a=e[8];let c;return e[9]!==n||e[10]!==i||e[11]!==a?(c=l.jsxs(mo,{"data-slot":"select-item",className:i,...n,children:[r,a]}),e[9]=n,e[10]=i,e[11]=a,e[12]=c):c=e[12],c}function Io(s){const e=q.c(9);let t,o;e[0]!==s?({className:t,...o}=s,e[0]=s,e[1]=t,e[2]=o):(t=e[1],o=e[2]);let n;e[3]!==t?(n=ne("flex cursor-default items-center justify-center py-1",t),e[3]=t,e[4]=n):n=e[4];let i;e[5]===Symbol.for("react.memo_cache_sentinel")?(i=l.jsx(kt,{className:"size-4"}),e[5]=i):i=e[5];let r;return e[6]!==o||e[7]!==n?(r=l.jsx(go,{"data-slot":"select-scroll-up-button",className:n,...o,children:i}),e[6]=o,e[7]=n,e[8]=r):r=e[8],r}function _o(s){const e=q.c(9);let t,o;e[0]!==s?({className:t,...o}=s,e[0]=s,e[1]=t,e[2]=o):(t=e[1],o=e[2]);let n;e[3]!==t?(n=ne("flex cursor-default items-center justify-center py-1",t),e[3]=t,e[4]=n):n=e[4];let i;e[5]===Symbol.for("react.memo_cache_sentinel")?(i=l.jsx(je,{className:"size-4"}),e[5]=i):i=e[5];let r;return e[6]!==o||e[7]!==n?(r=l.jsx(xo,{"data-slot":"select-scroll-down-button",className:n,...o,children:i}),e[6]=o,e[7]=n,e[8]=r):r=e[8],r}function Go(s){const e=q.c(30),{settings:t}=s,o=t.sms_provider||"mtn";let n;e[0]===Symbol.for("react.memo_cache_sentinel")?(n=[{value:"mtn",label:"MTN Nigeria"},{value:"smslive247",label:"SMSLive247"}],e[0]=n):n=e[0];let i;e[1]!==o?(i={key:"sms_provider",value:o,group:"sms",label:"Active SMS Provider",type:"select",options:n},e[1]=o,e[2]=i):i=e[2];const r=t.smslive247_api_key||"";let a;e[3]!==r?(a={key:"smslive247_api_key",value:r,group:"sms",label:"SMSLive247 API Key",type:"password"},e[3]=r,e[4]=a):a=e[4];let c;e[5]!==i||e[6]!==a?(c={settings:[i,a]},e[5]=i,e[6]=a,e[7]=c):c=e[7];const{data:p,setData:v,post:g,processing:y,errors:w}=st(c);let S;e[8]!==p.settings||e[9]!==v?(S=(E,T)=>{const M=[...p.settings];M[E].value=T,v("settings",M)},e[8]=p.settings,e[9]=v,e[10]=S):S=e[10];const u=S;let h;e[11]!==g?(h=E=>{E.preventDefault(),g(Te.settings.update(),{preserveScroll:!0})},e[11]=g,e[12]=h):h=e[12];const C=h;let f;e[13]===Symbol.for("react.memo_cache_sentinel")?(f={title:"Admin",href:"#"},e[13]=f):f=e[13];let x,O;e[14]===Symbol.for("react.memo_cache_sentinel")?(x=[f,{title:"Settings",href:Te.settings.index()}],O=l.jsx(rt,{title:"System Settings"}),e[14]=x,e[15]=O):(x=e[14],O=e[15]);let j;e[16]===Symbol.for("react.memo_cache_sentinel")?(j=l.jsxs(Et,{children:[l.jsx(Rt,{children:"SMS Configuration"}),l.jsx(jt,{children:"Configure SMS providers and API keys."})]}),e[16]=j):j=e[16];let V;if(e[17]!==p.settings||e[18]!==w||e[19]!==u){let E;e[21]!==w||e[22]!==u?(E=(T,M)=>l.jsxs("div",{className:"space-y-2",children:[l.jsx(It,{htmlFor:T.key,children:T.label}),T.type==="select"?l.jsxs(So,{value:T.value,onValueChange:k=>u(M,k),children:[l.jsx(yo,{className:"w-full md:w-1/2",children:l.jsx(wo,{placeholder:"Select provider"})}),l.jsx(Co,{children:T.options.map(To)})]}):l.jsx(bt,{id:T.key,type:T.type||"text",value:T.value,onChange:k=>u(M,k.target.value),className:"w-full md:w-1/2",placeholder:T.label}),l.jsx(Dt,{message:w[`settings.${M}.value`]})]},T.key),e[21]=w,e[22]=u,e[23]=E):E=e[23],V=p.settings.map(E),e[17]=p.settings,e[18]=w,e[19]=u,e[20]=V}else V=e[20];let _;e[24]!==y?(_=l.jsx("div",{className:"flex items-center gap-4",children:l.jsx(Ct,{disabled:y,children:"Save Changes"})}),e[24]=y,e[25]=_):_=e[25];let A;return e[26]!==C||e[27]!==V||e[28]!==_?(A=l.jsxs(wt,{breadcrumbs:x,children:[O,l.jsx("div",{className:"py-12",children:l.jsx("div",{className:"max-w-7xl mx-auto sm:px-6 lg:px-8",children:l.jsxs(Mt,{children:[j,l.jsx(At,{children:l.jsxs("form",{onSubmit:C,className:"space-y-6",children:[V,_]})})]})})})]}),e[26]=C,e[27]=V,e[28]=_,e[29]=A):A=e[29],A}function To(s){return l.jsx(bo,{value:s.value,children:s.label},s.value)}export{Go as default}; diff --git a/public/build/assets/Show-C2fPj8wA.js b/public/build/assets/Show-C2fPj8wA.js new file mode 100644 index 0000000..1836a14 --- /dev/null +++ b/public/build/assets/Show-C2fPj8wA.js @@ -0,0 +1,11 @@ +import{c as ze,j as s,L as Fe,H as Pe}from"./app-BkR-Yu8_.js";import{B as Oe}from"./button-BkeD6D9C.js";import{c as Xe,T as Ge,a as Ie,b as o,d as Je,e as x}from"./table-D7Qye2oa.js";import{B as me}from"./badge-jojBb81G.js";import{c as Ke,A as Qe,C as Ee}from"./app-layout-6TmSMbxU.js";import{P as We}from"./pagination-9b1HcMdN.js";import{A as Ye}from"./arrow-left-CokfllWW.js";import{R as Ae}from"./repeat-YCiHDVYw.js";import{S as Ze}from"./sparkles-lisodQIP.js";import{c as Ve}from"./index-BV9LgQgg.js";import{C as $e}from"./circle-check-big-oFmMvvLA.js";import{U as He}from"./users-BPIE1cfL.js";import{T as es}from"./trending-up-BgBIKlvu.js";import{C as ss}from"./calendar-BhurMeWr.js";import{S as ts}from"./send-BIH-xC-j.js";import{C as ls}from"./clock-ORU7RUR6.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-C-iMGC_l.js";import"./index-BxSFA7Jd.js";import"./shield-check-BR6okPK2.js";import"./coins-CBBvu4lK.js";/** + * @license lucide-react v0.475.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const as=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],is=Ve("Hash",as);/** + * @license lucide-react v0.475.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rs=[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]],De=Ve("MessageSquare",rs),cs={draft:"bg-gray-500",scheduled:"bg-blue-500",processing:"bg-yellow-500",completed:"bg-green-500",failed:"bg-red-500"},ns={sent:$e,failed:Ee,pending:ls};function Ms(l){const e=ze.c(168),{campaign:t}=l;let i;e[0]!==t.logs?(i=t.logs?.data||t.logs||[],e[0]=t.logs,e[1]=i):i=e[1];const a=i;let h;e[2]!==t.logs?.links?(h=t.logs?.links||[],e[2]=t.logs?.links,e[3]=h):h=e[3];const Te=h;let de;e[4]!==t.sent_count||e[5]!==t.total_recipients?(de=t.total_recipients>0?Math.round(t.sent_count/t.total_recipients*100):0,e[4]=t.sent_count,e[5]=t.total_recipients,e[6]=de):de=e[6];const f=de,qe=ds;let g,p,r,c,j,n,u,m,b,N,d,y;if(e[7]!==t.created_at||e[8]!==t.failed_count||e[9]!==t.is_recurring||e[10]!==t.message||e[11]!==t.name||e[12]!==t.sent_count||e[13]!==t.spintax_message||e[14]!==t.status||e[15]!==t.total_recipients||e[16]!==f){const Re=qe(t.spintax_message);g=Qe;const Be=`Campaign: ${t.name}`;e[29]!==Be?(n=s.jsx(Pe,{title:Be}),e[29]=Be,e[30]=n):n=e[30],j="py-12",p="mx-auto max-w-7xl sm:px-6 lg:px-8";let ue;e[31]===Symbol.for("react.memo_cache_sentinel")?(ue=Ke(),e[31]=ue):ue=e[31],e[32]===Symbol.for("react.memo_cache_sentinel")?(r=s.jsx("div",{className:"mb-6",children:s.jsx(Fe,{href:ue.url,children:s.jsxs(Oe,{variant:"outline",size:"sm",children:[s.jsx(Ye,{className:"mr-2 h-4 w-4"}),"Back to Campaigns"]})})}),e[32]=r):r=e[32];let H;e[33]!==t.name?(H=s.jsx("h1",{className:"mb-3 text-3xl font-bold",children:t.name}),e[33]=t.name,e[34]=H):H=e[34];const Me=`${cs[t.status]} border-0 text-white`;let I;e[35]!==t.status?(I=t.status.toUpperCase(),e[35]=t.status,e[36]=I):I=e[36];let E;e[37]!==Me||e[38]!==I?(E=s.jsx(me,{className:Me,children:I}),e[37]=Me,e[38]=I,e[39]=E):E=e[39];let V;e[40]!==t.is_recurring?(V=t.is_recurring&&s.jsxs(me,{className:"border-white/30 bg-white/20 text-white",children:[s.jsx(Ae,{className:"mr-1 h-3 w-3"}),"Recurring"]}),e[40]=t.is_recurring,e[41]=V):V=e[41];let q;e[42]!==E||e[43]!==V?(q=s.jsxs("div",{className:"flex items-center gap-3",children:[E,V]}),e[42]=E,e[43]=V,e[44]=q):q=e[44];let z;e[45]!==H||e[46]!==q?(z=s.jsxs("div",{children:[H,q]}),e[45]=H,e[46]=q,e[47]=z):z=e[47];let be;e[48]===Symbol.for("react.memo_cache_sentinel")?(be=s.jsx("p",{className:"text-sm text-primary-foreground",children:"Created"}),e[48]=be):be=e[48];let F;e[49]!==t.created_at?(F=new Date(t.created_at).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),e[49]=t.created_at,e[50]=F):F=e[50];let P;e[51]!==F?(P=s.jsx("p",{className:"font-semibold",children:F}),e[51]=F,e[52]=P):P=e[52];let O;e[53]!==t.created_at?(O=new Date(t.created_at).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}),e[53]=t.created_at,e[54]=O):O=e[54];let X;e[55]!==O?(X=s.jsx("p",{className:"text-sm",children:O}),e[55]=O,e[56]=X):X=e[56];let G;e[57]!==P||e[58]!==X?(G=s.jsx("div",{className:"text-right",children:s.jsxs("div",{className:"rounded-lg bg-white/10 px-4 py-2 backdrop-blur",children:[be,P,X]})}),e[57]=P,e[58]=X,e[59]=G):G=e[59];let J;e[60]!==z||e[61]!==G?(J=s.jsx("div",{className:"bg-secondary p-6 text-white",children:s.jsxs("div",{className:"flex items-start justify-between",children:[z,G]})}),e[60]=z,e[61]=G,e[62]=J):J=e[62];let Ne;e[63]===Symbol.for("react.memo_cache_sentinel")?(Ne=s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Total Recipients"}),e[63]=Ne):Ne=e[63];let K;e[64]!==t.total_recipients?(K=t.total_recipients.toLocaleString(),e[64]=t.total_recipients,e[65]=K):K=e[65];let Q;e[66]!==K?(Q=s.jsxs("div",{children:[Ne,s.jsx("p",{className:"mt-2 text-3xl font-bold text-gray-900",children:K})]}),e[66]=K,e[67]=Q):Q=e[67];let ye;e[68]===Symbol.for("react.memo_cache_sentinel")?(ye=s.jsx("div",{className:"rounded-full bg-blue-100 p-3",children:s.jsx(He,{className:"h-6 w-6 text-primary"})}),e[68]=ye):ye=e[68];let W;e[69]!==Q?(W=s.jsx("div",{className:"bg-white p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[Q,ye]})}),e[69]=Q,e[70]=W):W=e[70];let _e;e[71]===Symbol.for("react.memo_cache_sentinel")?(_e=s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Successfully Sent"}),e[71]=_e):_e=e[71];let Y;e[72]!==t.sent_count?(Y=t.sent_count.toLocaleString(),e[72]=t.sent_count,e[73]=Y):Y=e[73];let Z;e[74]!==Y?(Z=s.jsxs("div",{children:[_e,s.jsx("p",{className:"mt-2 text-3xl font-bold text-green-600",children:Y})]}),e[74]=Y,e[75]=Z):Z=e[75];let ve;e[76]===Symbol.for("react.memo_cache_sentinel")?(ve=s.jsx("div",{className:"rounded-full bg-green-100 p-3",children:s.jsx($e,{className:"h-6 w-6 text-green-600"})}),e[76]=ve):ve=e[76];let ee;e[77]!==Z?(ee=s.jsx("div",{className:"bg-white p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[Z,ve]})}),e[77]=Z,e[78]=ee):ee=e[78];let we;e[79]===Symbol.for("react.memo_cache_sentinel")?(we=s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Failed"}),e[79]=we):we=e[79];let se;e[80]!==t.failed_count?(se=t.failed_count.toLocaleString(),e[80]=t.failed_count,e[81]=se):se=e[81];let te;e[82]!==se?(te=s.jsxs("div",{children:[we,s.jsx("p",{className:"mt-2 text-3xl font-bold text-red-600",children:se})]}),e[82]=se,e[83]=te):te=e[83];let Se;e[84]===Symbol.for("react.memo_cache_sentinel")?(Se=s.jsx("div",{className:"rounded-full bg-red-100 p-3",children:s.jsx(Ee,{className:"h-6 w-6 text-red-600"})}),e[84]=Se):Se=e[84];let le;e[85]!==te?(le=s.jsx("div",{className:"bg-white p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[te,Se]})}),e[85]=te,e[86]=le):le=e[86];let Ce;e[87]===Symbol.for("react.memo_cache_sentinel")?(Ce=s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Success Rate"}),e[87]=Ce):Ce=e[87];let ae;e[88]!==f?(ae=s.jsxs("div",{children:[Ce,s.jsxs("p",{className:"mt-2 text-3xl font-bold text-primary",children:[f,"%"]})]}),e[88]=f,e[89]=ae):ae=e[89];let Le;e[90]===Symbol.for("react.memo_cache_sentinel")?(Le=s.jsx("div",{className:"rounded-full bg-blue-100 p-3",children:s.jsx(es,{className:"h-6 w-6 text-primary"})}),e[90]=Le):Le=e[90];let ie;e[91]!==ae?(ie=s.jsxs("div",{className:"flex items-center justify-between",children:[ae,Le]}),e[91]=ae,e[92]=ie):ie=e[92];const Ue=`${f}%`;let re;e[93]!==Ue?(re=s.jsx("div",{className:"mt-2",children:s.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-gray-200",children:s.jsx("div",{className:"h-full rounded-full bg-primary transition-all",style:{width:Ue}})})}),e[93]=Ue,e[94]=re):re=e[94];let ce;e[95]!==ie||e[96]!==re?(ce=s.jsxs("div",{className:"bg-white p-6",children:[ie,re]}),e[95]=ie,e[96]=re,e[97]=ce):ce=e[97];let ne;e[98]!==W||e[99]!==ee||e[100]!==le||e[101]!==ce?(ne=s.jsxs("div",{className:"grid grid-cols-1 gap-px bg-gray-200 sm:grid-cols-4",children:[W,ee,le,ce]}),e[98]=W,e[99]=ee,e[100]=le,e[101]=ce,e[102]=ne):ne=e[102],e[103]!==J||e[104]!==ne?(c=s.jsxs("div",{className:"mb-6 overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[J,ne]}),e[103]=J,e[104]=ne,e[105]=c):c=e[105],y="mb-6 grid gap-6 lg:grid-cols-2",N="overflow-hidden bg-white shadow-sm sm:rounded-lg",e[106]===Symbol.for("react.memo_cache_sentinel")?(d=s.jsx("div",{className:"border-b bg-gray-50 p-4",children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(De,{className:"h-5 w-5 text-gray-600"}),s.jsx("h3",{className:"font-semibold text-gray-900",children:"Message Content"})]})}),e[106]=d):d=e[106],u="p-6";let ke;e[107]===Symbol.for("react.memo_cache_sentinel")?(ke=s.jsx("label",{className:"mb-2 block text-sm font-medium text-gray-700",children:"Original Message"}),e[107]=ke):ke=e[107],e[108]!==t.message?(m=s.jsxs("div",{className:"mb-4",children:[ke,s.jsx("div",{className:"rounded-lg border border-gray-200 bg-gray-50 p-4",children:s.jsx("p",{className:"whitespace-pre-wrap text-gray-700",children:t.message})})]}),e[108]=t.message,e[109]=m):m=e[109],b=t.spintax_message&&Re>1&&s.jsxs("div",{children:[s.jsx("div",{className:"mb-3 flex items-center gap-2",children:s.jsxs(me,{className:"border-green-200 bg-green-100 text-green-700",children:[s.jsx(Ze,{className:"h-5 w-5"}),"Mixture Active"]})}),s.jsxs("div",{className:"rounded-lg border-2 border-green-200 bg-green-50 p-4",children:[s.jsxs("div",{className:"mb-3 flex items-start gap-3",children:[s.jsx("div",{className:"rounded-full bg-green-600 p-2",children:s.jsx(De,{className:"h-4 w-4 text-white"})}),s.jsxs("div",{className:"flex-1",children:[s.jsx("h4",{className:"font-semibold text-green-900",children:"Unique Message Variations"}),s.jsx("p",{className:"mt-1 text-sm text-green-700",children:"Each recipient will receive a unique variation of your message"})]})]}),Re>1&&s.jsxs("div",{className:"mt-3 rounded-md bg-white p-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("span",{className:"text-sm font-medium text-gray-700",children:"Total Variations Available:"}),s.jsx("span",{className:"text-2xl font-bold text-green-600",children:Re.toLocaleString()})]}),s.jsxs("div",{className:"mt-2 flex items-center gap-2 text-xs text-gray-600",children:[s.jsx($e,{className:"h-3 w-3 text-green-500"}),s.jsx("span",{children:"100% Deliverability"}),s.jsx("span",{className:"text-gray-400",children:"•"}),s.jsx("span",{children:"Spam Filter Eliminated"})]})]})]})]}),e[7]=t.created_at,e[8]=t.failed_count,e[9]=t.is_recurring,e[10]=t.message,e[11]=t.name,e[12]=t.sent_count,e[13]=t.spintax_message,e[14]=t.status,e[15]=t.total_recipients,e[16]=f,e[17]=g,e[18]=p,e[19]=r,e[20]=c,e[21]=j,e[22]=n,e[23]=u,e[24]=m,e[25]=b,e[26]=N,e[27]=d,e[28]=y}else g=e[17],p=e[18],r=e[19],c=e[20],j=e[21],n=e[22],u=e[23],m=e[24],b=e[25],N=e[26],d=e[27],y=e[28];let _;e[110]!==u||e[111]!==m||e[112]!==b?(_=s.jsxs("div",{className:u,children:[m,b]}),e[110]=u,e[111]=m,e[112]=b,e[113]=_):_=e[113];let v;e[114]!==_||e[115]!==N||e[116]!==d?(v=s.jsxs("div",{className:N,children:[d,_]}),e[114]=_,e[115]=N,e[116]=d,e[117]=v):v=e[117];let oe;e[118]===Symbol.for("react.memo_cache_sentinel")?(oe=s.jsx("div",{className:"border-b bg-gray-50 p-4",children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(ss,{className:"h-5 w-5 text-gray-600"}),s.jsx("h3",{className:"font-semibold text-gray-900",children:"Dispatch Information"})]})}),e[118]=oe):oe=e[118];let xe;e[119]===Symbol.for("react.memo_cache_sentinel")?(xe=s.jsx("p",{className:"text-sm text-gray-600",children:"Sender ID"}),e[119]=xe):xe=e[119];let w;e[120]!==t.sender_id?(w=s.jsxs("div",{children:[xe,s.jsx("p",{className:"mt-1 font-mono text-lg font-semibold text-gray-900",children:t.sender_id})]}),e[120]=t.sender_id,e[121]=w):w=e[121];let he;e[122]===Symbol.for("react.memo_cache_sentinel")?(he=s.jsxs(me,{variant:"outline",className:"border-blue-200 bg-blue-50 text-primary",children:[s.jsx(is,{className:"mr-1 h-3 w-3"}),"ID"]}),e[122]=he):he=e[122];let S;e[123]!==w?(S=s.jsxs("div",{className:"flex items-start justify-between",children:[w,he]}),e[123]=w,e[124]=S):S=e[124];let fe;e[125]===Symbol.for("react.memo_cache_sentinel")?(fe=s.jsx("p",{className:"text-sm text-gray-600",children:"Scheduled Dispatch"}),e[125]=fe):fe=e[125];let ge;e[126]===Symbol.for("react.memo_cache_sentinel")?(ge=s.jsx(ts,{className:"h-4 w-4 text-gray-500"}),e[126]=ge):ge=e[126];let C;e[127]!==t.dispatch_at?(C=t.dispatch_at?new Date(t.dispatch_at).toLocaleString("en-US",{dateStyle:"full",timeStyle:"short"}):"Immediate dispatch",e[127]=t.dispatch_at,e[128]=C):C=e[128];let L;e[129]!==C?(L=s.jsxs("div",{className:"border-t pt-4",children:[fe,s.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[ge,s.jsx("p",{className:"font-medium text-gray-900",children:C})]})]}),e[129]=C,e[130]=L):L=e[130];let k;e[131]!==t.is_recurring||e[132]!==t.recurrence_end_date||e[133]!==t.recurrence_interval?(k=t.is_recurring&&s.jsxs("div",{className:"border-t pt-4",children:[s.jsx("p",{className:"text-sm text-gray-600",children:"Recurrence"}),s.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[s.jsx(Ae,{className:"h-4 w-4 text-gray-500"}),s.jsxs("p",{className:"font-medium text-gray-900",children:["Every"," ",t.recurrence_interval," ","day(s)"]})]}),t.recurrence_end_date&&s.jsxs("p",{className:"mt-1 text-sm text-gray-600",children:["Until"," ",new Date(t.recurrence_end_date).toLocaleDateString()]})]}),e[131]=t.is_recurring,e[132]=t.recurrence_end_date,e[133]=t.recurrence_interval,e[134]=k):k=e[134];let D;e[135]!==t.recipient_type?(D=t.recipient_type&&s.jsxs("div",{className:"border-t pt-4",children:[s.jsx("p",{className:"text-sm text-gray-600",children:"Recipient Type"}),s.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[s.jsx(He,{className:"h-4 w-4 text-gray-500"}),s.jsx("p",{className:"font-medium text-gray-900 capitalize",children:t.recipient_type})]})]}),e[135]=t.recipient_type,e[136]=D):D=e[136];let T;e[137]!==S||e[138]!==L||e[139]!==k||e[140]!==D?(T=s.jsx("div",{className:"space-y-6",children:s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[oe,s.jsx("div",{className:"p-6",children:s.jsxs("div",{className:"space-y-4",children:[S,L,k,D]})})]})}),e[137]=S,e[138]=L,e[139]=k,e[140]=D,e[141]=T):T=e[141];let R;e[142]!==v||e[143]!==T||e[144]!==y?(R=s.jsxs("div",{className:y,children:[v,T]}),e[142]=v,e[143]=T,e[144]=y,e[145]=R):R=e[145];let pe;e[146]===Symbol.for("react.memo_cache_sentinel")?(pe=s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(De,{className:"h-5 w-5 text-gray-600"}),s.jsx("h3",{className:"text-xl font-semibold text-gray-900",children:"Delivery Logs"})]}),e[146]=pe):pe=e[146];let B;e[147]!==a.length?(B=s.jsx("div",{className:"border-b bg-gray-50 p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[pe,s.jsxs(me,{variant:"outline",className:"text-sm",children:[a.length," record(s)"]})]})}),e[147]=a.length,e[148]=B):B=e[148];let M;e[149]!==a||e[150]!==Te?(M=s.jsx("div",{className:"p-6",children:a&&a.length>0?s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"overflow-x-auto",children:s.jsxs(Xe,{children:[s.jsx(Ge,{children:s.jsxs(Ie,{className:"bg-gray-50",children:[s.jsx(o,{className:"font-semibold",children:"Status"}),s.jsx(o,{className:"font-semibold",children:"Subscriber"}),s.jsx(o,{className:"font-semibold",children:"Phone Number"}),s.jsx(o,{className:"font-semibold",children:"Message Sent"}),s.jsx(o,{className:"font-semibold",children:"Credits Charged"}),s.jsx(o,{className:"font-semibold",children:"Balance Before"}),s.jsx(o,{className:"font-semibold",children:"Balance After"}),s.jsx(o,{className:"font-semibold",children:"Sent At"})]})}),s.jsx(Je,{children:a.map(ms)})]})}),s.jsx("div",{className:"mt-4",children:s.jsx(We,{links:Te})})]}):s.jsxs("div",{className:"py-16 text-center",children:[s.jsx("div",{className:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100",children:s.jsx(De,{className:"h-8 w-8 text-gray-400"})}),s.jsx("h3",{className:"mb-2 text-lg font-medium text-gray-900",children:"No delivery logs yet"}),s.jsx("p",{className:"text-sm text-gray-500",children:"Messages will appear here once the campaign is dispatched."})]})}),e[149]=a,e[150]=Te,e[151]=M):M=e[151];let U;e[152]!==B||e[153]!==M?(U=s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[B,M]}),e[152]=B,e[153]=M,e[154]=U):U=e[154];let $;e[155]!==p||e[156]!==r||e[157]!==c||e[158]!==R||e[159]!==U?($=s.jsxs("div",{className:p,children:[r,c,R,U]}),e[155]=p,e[156]=r,e[157]=c,e[158]=R,e[159]=U,e[160]=$):$=e[160];let A;e[161]!==j||e[162]!==$?(A=s.jsx("div",{className:j,children:$}),e[161]=j,e[162]=$,e[163]=A):A=e[163];let je;return e[164]!==g||e[165]!==n||e[166]!==A?(je=s.jsxs(g,{children:[n,A]}),e[164]=g,e[165]=n,e[166]=A,e[167]=je):je=e[167],je}function ms(l){const e=ns[l.status];return s.jsxs(Ie,{className:"hover:bg-gray-50",children:[s.jsx(x,{children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(e,{className:`h-4 w-4 ${l.status==="sent"?"text-green-500":l.status==="failed"?"text-red-500":"text-yellow-500"}`}),s.jsx(me,{variant:"outline",className:`${l.status==="sent"?"border-green-200 bg-green-50 text-green-700":l.status==="failed"?"border-red-200 bg-red-50 text-red-700":"border-yellow-200 bg-yellow-50 text-yellow-700"}`,children:l.status})]})}),s.jsx(x,{className:"font-medium",children:l.subscriber?.name||"N/A"}),s.jsx(x,{children:s.jsx("span",{className:"font-mono text-sm",children:l.subscriber?.phone_number||l.phone_number})}),s.jsx(x,{children:s.jsx("div",{className:"max-w-md",children:s.jsx("p",{className:"truncate text-sm text-gray-600",children:l.message_sent})})}),s.jsx(x,{className:"text-sm",children:Number(l.credits_charged)>0?`${Number(l.credits_charged).toLocaleString()}`:"—"}),s.jsx(x,{className:"text-sm text-gray-600",children:l.credit_balance_before!=null?`${Number(l.credit_balance_before).toLocaleString()}`:"—"}),s.jsx(x,{className:"text-sm text-gray-600",children:l.credit_balance_after!=null?`${Number(l.credit_balance_after).toLocaleString()}`:"—"}),s.jsx(x,{className:"text-sm text-gray-600",children:l.sent_at?new Date(l.sent_at).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"-"})]},l.id)}function ds(l){if(!l)return 0;const e=/\{([^}]+)\}/g,t=l.match(e);if(!t)return 1;let i=1;return t.forEach(a=>{const h=a.slice(1,-1).split("|");i=i*h.length}),i}export{Ms as default}; diff --git a/public/build/assets/Show-DtpYdq5g.js b/public/build/assets/Show-DtpYdq5g.js deleted file mode 100644 index 84397b4..0000000 --- a/public/build/assets/Show-DtpYdq5g.js +++ /dev/null @@ -1,11 +0,0 @@ -import{c as ze,j as s,L as Fe,H as Pe}from"./app-DkuaKs7R.js";import{B as Oe}from"./button-DEWTOza6.js";import{c as Xe,T as Ge,a as $e,b as ne,d as Je,e as me}from"./table-Ct7heC9B.js";import{B as ce}from"./badge-kWQkrcyp.js";import{c as Ke,A as Qe,C as Ee}from"./app-layout-DjcEY8s3.js";import{P as We}from"./pagination-Dl6OfTBJ.js";import{A as Ye}from"./arrow-left-hSCTN_j4.js";import{R as He}from"./repeat-BVyZxNV4.js";import{S as Ze}from"./sparkles-B8yJ46Ow.js";import{c as Ve}from"./index-DSWKGzIo.js";import{C as Be}from"./circle-check-big-Bldx-0iH.js";import{U as Ie}from"./users-YqeB5lb8.js";import{T as es}from"./trending-up-BKTVFsY9.js";import{C as ss}from"./calendar-CqMR1DvJ.js";import{S as ts}from"./send-Dlj8qGrF.js";import{C as ls}from"./clock-DV7QfVXP.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-DKUWucUl.js";import"./index-BX6ecx82.js";import"./x-GpPVQP8J.js";import"./shield-check-BuNJNOL8.js";/** - * @license lucide-react v0.475.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const as=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],is=Ve("Hash",as);/** - * @license lucide-react v0.475.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const rs=[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]],De=Ve("MessageSquare",rs),cs={draft:"bg-gray-500",scheduled:"bg-blue-500",processing:"bg-yellow-500",completed:"bg-green-500",failed:"bg-red-500"},ns={sent:Be,failed:Ee,pending:ls};function Us(l){const e=ze.c(168),{campaign:t}=l;let i;e[0]!==t.logs?(i=t.logs?.data||t.logs||[],e[0]=t.logs,e[1]=i):i=e[1];const a=i;let o;e[2]!==t.logs?.links?(o=t.logs?.links||[],e[2]=t.logs?.links,e[3]=o):o=e[3];const Te=o;let de;e[4]!==t.sent_count||e[5]!==t.total_recipients?(de=t.total_recipients>0?Math.round(t.sent_count/t.total_recipients*100):0,e[4]=t.sent_count,e[5]=t.total_recipients,e[6]=de):de=e[6];const x=de,qe=ds;let h,f,r,c,g,n,p,m,j,u,d,b;if(e[7]!==t.created_at||e[8]!==t.failed_count||e[9]!==t.is_recurring||e[10]!==t.message||e[11]!==t.name||e[12]!==t.sent_count||e[13]!==t.spintax_message||e[14]!==t.status||e[15]!==t.total_recipients||e[16]!==x){const Re=qe(t.spintax_message);h=Qe;const Me=`Campaign: ${t.name}`;e[29]!==Me?(n=s.jsx(Pe,{title:Me}),e[29]=Me,e[30]=n):n=e[30],g="py-12",f="mx-auto max-w-7xl sm:px-6 lg:px-8";let ue;e[31]===Symbol.for("react.memo_cache_sentinel")?(ue=Ke(),e[31]=ue):ue=e[31],e[32]===Symbol.for("react.memo_cache_sentinel")?(r=s.jsx("div",{className:"mb-6",children:s.jsx(Fe,{href:ue.url,children:s.jsxs(Oe,{variant:"outline",size:"sm",children:[s.jsx(Ye,{className:"mr-2 h-4 w-4"}),"Back to Campaigns"]})})}),e[32]=r):r=e[32];let B;e[33]!==t.name?(B=s.jsx("h1",{className:"mb-3 text-3xl font-bold",children:t.name}),e[33]=t.name,e[34]=B):B=e[34];const Ue=`${cs[t.status]} border-0 text-white`;let H;e[35]!==t.status?(H=t.status.toUpperCase(),e[35]=t.status,e[36]=H):H=e[36];let I;e[37]!==Ue||e[38]!==H?(I=s.jsx(ce,{className:Ue,children:H}),e[37]=Ue,e[38]=H,e[39]=I):I=e[39];let $;e[40]!==t.is_recurring?($=t.is_recurring&&s.jsxs(ce,{className:"border-white/30 bg-white/20 text-white",children:[s.jsx(He,{className:"mr-1 h-3 w-3"}),"Recurring"]}),e[40]=t.is_recurring,e[41]=$):$=e[41];let E;e[42]!==I||e[43]!==$?(E=s.jsxs("div",{className:"flex items-center gap-3",children:[I,$]}),e[42]=I,e[43]=$,e[44]=E):E=e[44];let V;e[45]!==B||e[46]!==E?(V=s.jsxs("div",{children:[B,E]}),e[45]=B,e[46]=E,e[47]=V):V=e[47];let be;e[48]===Symbol.for("react.memo_cache_sentinel")?(be=s.jsx("p",{className:"text-sm text-primary-foreground",children:"Created"}),e[48]=be):be=e[48];let q;e[49]!==t.created_at?(q=new Date(t.created_at).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),e[49]=t.created_at,e[50]=q):q=e[50];let z;e[51]!==q?(z=s.jsx("p",{className:"font-semibold",children:q}),e[51]=q,e[52]=z):z=e[52];let F;e[53]!==t.created_at?(F=new Date(t.created_at).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}),e[53]=t.created_at,e[54]=F):F=e[54];let P;e[55]!==F?(P=s.jsx("p",{className:"text-sm",children:F}),e[55]=F,e[56]=P):P=e[56];let O;e[57]!==z||e[58]!==P?(O=s.jsx("div",{className:"text-right",children:s.jsxs("div",{className:"rounded-lg bg-white/10 px-4 py-2 backdrop-blur",children:[be,z,P]})}),e[57]=z,e[58]=P,e[59]=O):O=e[59];let X;e[60]!==V||e[61]!==O?(X=s.jsx("div",{className:"bg-secondary p-6 text-white",children:s.jsxs("div",{className:"flex items-start justify-between",children:[V,O]})}),e[60]=V,e[61]=O,e[62]=X):X=e[62];let Ne;e[63]===Symbol.for("react.memo_cache_sentinel")?(Ne=s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Total Recipients"}),e[63]=Ne):Ne=e[63];let G;e[64]!==t.total_recipients?(G=t.total_recipients.toLocaleString(),e[64]=t.total_recipients,e[65]=G):G=e[65];let J;e[66]!==G?(J=s.jsxs("div",{children:[Ne,s.jsx("p",{className:"mt-2 text-3xl font-bold text-gray-900",children:G})]}),e[66]=G,e[67]=J):J=e[67];let ye;e[68]===Symbol.for("react.memo_cache_sentinel")?(ye=s.jsx("div",{className:"rounded-full bg-blue-100 p-3",children:s.jsx(Ie,{className:"h-6 w-6 text-primary"})}),e[68]=ye):ye=e[68];let K;e[69]!==J?(K=s.jsx("div",{className:"bg-white p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[J,ye]})}),e[69]=J,e[70]=K):K=e[70];let _e;e[71]===Symbol.for("react.memo_cache_sentinel")?(_e=s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Successfully Sent"}),e[71]=_e):_e=e[71];let Q;e[72]!==t.sent_count?(Q=t.sent_count.toLocaleString(),e[72]=t.sent_count,e[73]=Q):Q=e[73];let W;e[74]!==Q?(W=s.jsxs("div",{children:[_e,s.jsx("p",{className:"mt-2 text-3xl font-bold text-green-600",children:Q})]}),e[74]=Q,e[75]=W):W=e[75];let ve;e[76]===Symbol.for("react.memo_cache_sentinel")?(ve=s.jsx("div",{className:"rounded-full bg-green-100 p-3",children:s.jsx(Be,{className:"h-6 w-6 text-green-600"})}),e[76]=ve):ve=e[76];let Y;e[77]!==W?(Y=s.jsx("div",{className:"bg-white p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[W,ve]})}),e[77]=W,e[78]=Y):Y=e[78];let we;e[79]===Symbol.for("react.memo_cache_sentinel")?(we=s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Failed"}),e[79]=we):we=e[79];let Z;e[80]!==t.failed_count?(Z=t.failed_count.toLocaleString(),e[80]=t.failed_count,e[81]=Z):Z=e[81];let ee;e[82]!==Z?(ee=s.jsxs("div",{children:[we,s.jsx("p",{className:"mt-2 text-3xl font-bold text-red-600",children:Z})]}),e[82]=Z,e[83]=ee):ee=e[83];let Se;e[84]===Symbol.for("react.memo_cache_sentinel")?(Se=s.jsx("div",{className:"rounded-full bg-red-100 p-3",children:s.jsx(Ee,{className:"h-6 w-6 text-red-600"})}),e[84]=Se):Se=e[84];let se;e[85]!==ee?(se=s.jsx("div",{className:"bg-white p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[ee,Se]})}),e[85]=ee,e[86]=se):se=e[86];let ke;e[87]===Symbol.for("react.memo_cache_sentinel")?(ke=s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Success Rate"}),e[87]=ke):ke=e[87];let te;e[88]!==x?(te=s.jsxs("div",{children:[ke,s.jsxs("p",{className:"mt-2 text-3xl font-bold text-primary",children:[x,"%"]})]}),e[88]=x,e[89]=te):te=e[89];let Ce;e[90]===Symbol.for("react.memo_cache_sentinel")?(Ce=s.jsx("div",{className:"rounded-full bg-blue-100 p-3",children:s.jsx(es,{className:"h-6 w-6 text-primary"})}),e[90]=Ce):Ce=e[90];let le;e[91]!==te?(le=s.jsxs("div",{className:"flex items-center justify-between",children:[te,Ce]}),e[91]=te,e[92]=le):le=e[92];const Ae=`${x}%`;let ae;e[93]!==Ae?(ae=s.jsx("div",{className:"mt-2",children:s.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-gray-200",children:s.jsx("div",{className:"h-full rounded-full bg-primary transition-all",style:{width:Ae}})})}),e[93]=Ae,e[94]=ae):ae=e[94];let ie;e[95]!==le||e[96]!==ae?(ie=s.jsxs("div",{className:"bg-white p-6",children:[le,ae]}),e[95]=le,e[96]=ae,e[97]=ie):ie=e[97];let re;e[98]!==K||e[99]!==Y||e[100]!==se||e[101]!==ie?(re=s.jsxs("div",{className:"grid grid-cols-1 gap-px bg-gray-200 sm:grid-cols-4",children:[K,Y,se,ie]}),e[98]=K,e[99]=Y,e[100]=se,e[101]=ie,e[102]=re):re=e[102],e[103]!==X||e[104]!==re?(c=s.jsxs("div",{className:"mb-6 overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[X,re]}),e[103]=X,e[104]=re,e[105]=c):c=e[105],b="mb-6 grid gap-6 lg:grid-cols-2",u="overflow-hidden bg-white shadow-sm sm:rounded-lg",e[106]===Symbol.for("react.memo_cache_sentinel")?(d=s.jsx("div",{className:"border-b bg-gray-50 p-4",children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(De,{className:"h-5 w-5 text-gray-600"}),s.jsx("h3",{className:"font-semibold text-gray-900",children:"Message Content"})]})}),e[106]=d):d=e[106],p="p-6";let Le;e[107]===Symbol.for("react.memo_cache_sentinel")?(Le=s.jsx("label",{className:"mb-2 block text-sm font-medium text-gray-700",children:"Original Message"}),e[107]=Le):Le=e[107],e[108]!==t.message?(m=s.jsxs("div",{className:"mb-4",children:[Le,s.jsx("div",{className:"rounded-lg border border-gray-200 bg-gray-50 p-4",children:s.jsx("p",{className:"whitespace-pre-wrap text-gray-700",children:t.message})})]}),e[108]=t.message,e[109]=m):m=e[109],j=t.spintax_message&&Re>1&&s.jsxs("div",{children:[s.jsx("div",{className:"mb-3 flex items-center gap-2",children:s.jsxs(ce,{className:"border-green-200 bg-green-100 text-green-700",children:[s.jsx(Ze,{className:"h-5 w-5"}),"Mixture Active"]})}),s.jsxs("div",{className:"rounded-lg border-2 border-green-200 bg-green-50 p-4",children:[s.jsxs("div",{className:"mb-3 flex items-start gap-3",children:[s.jsx("div",{className:"rounded-full bg-green-600 p-2",children:s.jsx(De,{className:"h-4 w-4 text-white"})}),s.jsxs("div",{className:"flex-1",children:[s.jsx("h4",{className:"font-semibold text-green-900",children:"Unique Message Variations"}),s.jsx("p",{className:"mt-1 text-sm text-green-700",children:"Each recipient will receive a unique variation of your message"})]})]}),Re>1&&s.jsxs("div",{className:"mt-3 rounded-md bg-white p-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("span",{className:"text-sm font-medium text-gray-700",children:"Total Variations Available:"}),s.jsx("span",{className:"text-2xl font-bold text-green-600",children:Re.toLocaleString()})]}),s.jsxs("div",{className:"mt-2 flex items-center gap-2 text-xs text-gray-600",children:[s.jsx(Be,{className:"h-3 w-3 text-green-500"}),s.jsx("span",{children:"100% Deliverability"}),s.jsx("span",{className:"text-gray-400",children:"•"}),s.jsx("span",{children:"Spam Filter Eliminated"})]})]})]})]}),e[7]=t.created_at,e[8]=t.failed_count,e[9]=t.is_recurring,e[10]=t.message,e[11]=t.name,e[12]=t.sent_count,e[13]=t.spintax_message,e[14]=t.status,e[15]=t.total_recipients,e[16]=x,e[17]=h,e[18]=f,e[19]=r,e[20]=c,e[21]=g,e[22]=n,e[23]=p,e[24]=m,e[25]=j,e[26]=u,e[27]=d,e[28]=b}else h=e[17],f=e[18],r=e[19],c=e[20],g=e[21],n=e[22],p=e[23],m=e[24],j=e[25],u=e[26],d=e[27],b=e[28];let N;e[110]!==p||e[111]!==m||e[112]!==j?(N=s.jsxs("div",{className:p,children:[m,j]}),e[110]=p,e[111]=m,e[112]=j,e[113]=N):N=e[113];let y;e[114]!==N||e[115]!==u||e[116]!==d?(y=s.jsxs("div",{className:u,children:[d,N]}),e[114]=N,e[115]=u,e[116]=d,e[117]=y):y=e[117];let oe;e[118]===Symbol.for("react.memo_cache_sentinel")?(oe=s.jsx("div",{className:"border-b bg-gray-50 p-4",children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(ss,{className:"h-5 w-5 text-gray-600"}),s.jsx("h3",{className:"font-semibold text-gray-900",children:"Dispatch Information"})]})}),e[118]=oe):oe=e[118];let xe;e[119]===Symbol.for("react.memo_cache_sentinel")?(xe=s.jsx("p",{className:"text-sm text-gray-600",children:"Sender ID"}),e[119]=xe):xe=e[119];let _;e[120]!==t.sender_id?(_=s.jsxs("div",{children:[xe,s.jsx("p",{className:"mt-1 font-mono text-lg font-semibold text-gray-900",children:t.sender_id})]}),e[120]=t.sender_id,e[121]=_):_=e[121];let he;e[122]===Symbol.for("react.memo_cache_sentinel")?(he=s.jsxs(ce,{variant:"outline",className:"border-blue-200 bg-blue-50 text-primary",children:[s.jsx(is,{className:"mr-1 h-3 w-3"}),"ID"]}),e[122]=he):he=e[122];let v;e[123]!==_?(v=s.jsxs("div",{className:"flex items-start justify-between",children:[_,he]}),e[123]=_,e[124]=v):v=e[124];let fe;e[125]===Symbol.for("react.memo_cache_sentinel")?(fe=s.jsx("p",{className:"text-sm text-gray-600",children:"Scheduled Dispatch"}),e[125]=fe):fe=e[125];let ge;e[126]===Symbol.for("react.memo_cache_sentinel")?(ge=s.jsx(ts,{className:"h-4 w-4 text-gray-500"}),e[126]=ge):ge=e[126];let w;e[127]!==t.dispatch_at?(w=t.dispatch_at?new Date(t.dispatch_at).toLocaleString("en-US",{dateStyle:"full",timeStyle:"short"}):"Immediate dispatch",e[127]=t.dispatch_at,e[128]=w):w=e[128];let S;e[129]!==w?(S=s.jsxs("div",{className:"border-t pt-4",children:[fe,s.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[ge,s.jsx("p",{className:"font-medium text-gray-900",children:w})]})]}),e[129]=w,e[130]=S):S=e[130];let k;e[131]!==t.is_recurring||e[132]!==t.recurrence_end_date||e[133]!==t.recurrence_interval?(k=t.is_recurring&&s.jsxs("div",{className:"border-t pt-4",children:[s.jsx("p",{className:"text-sm text-gray-600",children:"Recurrence"}),s.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[s.jsx(He,{className:"h-4 w-4 text-gray-500"}),s.jsxs("p",{className:"font-medium text-gray-900",children:["Every"," ",t.recurrence_interval," ","day(s)"]})]}),t.recurrence_end_date&&s.jsxs("p",{className:"mt-1 text-sm text-gray-600",children:["Until"," ",new Date(t.recurrence_end_date).toLocaleDateString()]})]}),e[131]=t.is_recurring,e[132]=t.recurrence_end_date,e[133]=t.recurrence_interval,e[134]=k):k=e[134];let C;e[135]!==t.recipient_type?(C=t.recipient_type&&s.jsxs("div",{className:"border-t pt-4",children:[s.jsx("p",{className:"text-sm text-gray-600",children:"Recipient Type"}),s.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[s.jsx(Ie,{className:"h-4 w-4 text-gray-500"}),s.jsx("p",{className:"font-medium text-gray-900 capitalize",children:t.recipient_type})]})]}),e[135]=t.recipient_type,e[136]=C):C=e[136];let L;e[137]!==v||e[138]!==S||e[139]!==k||e[140]!==C?(L=s.jsx("div",{className:"space-y-6",children:s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[oe,s.jsx("div",{className:"p-6",children:s.jsxs("div",{className:"space-y-4",children:[v,S,k,C]})})]})}),e[137]=v,e[138]=S,e[139]=k,e[140]=C,e[141]=L):L=e[141];let D;e[142]!==y||e[143]!==L||e[144]!==b?(D=s.jsxs("div",{className:b,children:[y,L]}),e[142]=y,e[143]=L,e[144]=b,e[145]=D):D=e[145];let pe;e[146]===Symbol.for("react.memo_cache_sentinel")?(pe=s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(De,{className:"h-5 w-5 text-gray-600"}),s.jsx("h3",{className:"text-xl font-semibold text-gray-900",children:"Delivery Logs"})]}),e[146]=pe):pe=e[146];let T;e[147]!==a.length?(T=s.jsx("div",{className:"border-b bg-gray-50 p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[pe,s.jsxs(ce,{variant:"outline",className:"text-sm",children:[a.length," record(s)"]})]})}),e[147]=a.length,e[148]=T):T=e[148];let R;e[149]!==a||e[150]!==Te?(R=s.jsx("div",{className:"p-6",children:a&&a.length>0?s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"overflow-x-auto",children:s.jsxs(Xe,{children:[s.jsx(Ge,{children:s.jsxs($e,{className:"bg-gray-50",children:[s.jsx(ne,{className:"font-semibold",children:"Status"}),s.jsx(ne,{className:"font-semibold",children:"Subscriber"}),s.jsx(ne,{className:"font-semibold",children:"Phone Number"}),s.jsx(ne,{className:"font-semibold",children:"Message Sent"}),s.jsx(ne,{className:"font-semibold",children:"Sent At"})]})}),s.jsx(Je,{children:a.map(ms)})]})}),s.jsx("div",{className:"mt-4",children:s.jsx(We,{links:Te})})]}):s.jsxs("div",{className:"py-16 text-center",children:[s.jsx("div",{className:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100",children:s.jsx(De,{className:"h-8 w-8 text-gray-400"})}),s.jsx("h3",{className:"mb-2 text-lg font-medium text-gray-900",children:"No delivery logs yet"}),s.jsx("p",{className:"text-sm text-gray-500",children:"Messages will appear here once the campaign is dispatched."})]})}),e[149]=a,e[150]=Te,e[151]=R):R=e[151];let M;e[152]!==T||e[153]!==R?(M=s.jsxs("div",{className:"overflow-hidden bg-white shadow-sm sm:rounded-lg",children:[T,R]}),e[152]=T,e[153]=R,e[154]=M):M=e[154];let U;e[155]!==f||e[156]!==r||e[157]!==c||e[158]!==D||e[159]!==M?(U=s.jsxs("div",{className:f,children:[r,c,D,M]}),e[155]=f,e[156]=r,e[157]=c,e[158]=D,e[159]=M,e[160]=U):U=e[160];let A;e[161]!==g||e[162]!==U?(A=s.jsx("div",{className:g,children:U}),e[161]=g,e[162]=U,e[163]=A):A=e[163];let je;return e[164]!==h||e[165]!==n||e[166]!==A?(je=s.jsxs(h,{children:[n,A]}),e[164]=h,e[165]=n,e[166]=A,e[167]=je):je=e[167],je}function ms(l){const e=ns[l.status];return s.jsxs($e,{className:"hover:bg-gray-50",children:[s.jsx(me,{children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(e,{className:`h-4 w-4 ${l.status==="sent"?"text-green-500":l.status==="failed"?"text-red-500":"text-yellow-500"}`}),s.jsx(ce,{variant:"outline",className:`${l.status==="sent"?"border-green-200 bg-green-50 text-green-700":l.status==="failed"?"border-red-200 bg-red-50 text-red-700":"border-yellow-200 bg-yellow-50 text-yellow-700"}`,children:l.status})]})}),s.jsx(me,{className:"font-medium",children:l.subscriber?.name||"N/A"}),s.jsx(me,{children:s.jsx("span",{className:"font-mono text-sm",children:l.subscriber?.phone_number||l.phone_number})}),s.jsx(me,{children:s.jsx("div",{className:"max-w-md",children:s.jsx("p",{className:"truncate text-sm text-gray-600",children:l.message_sent})})}),s.jsx(me,{className:"text-sm text-gray-600",children:l.sent_at?new Date(l.sent_at).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"-"})]},l.id)}function ds(l){if(!l)return 0;const e=/\{([^}]+)\}/g,t=l.match(e);if(!t)return 1;let i=1;return t.forEach(a=>{const o=a.slice(1,-1).split("|");i=i*o.length}),i}export{Us as default}; diff --git a/public/build/assets/account-billing-BgbKqO2f.js b/public/build/assets/account-billing-BgbKqO2f.js deleted file mode 100644 index 9b2a3f8..0000000 --- a/public/build/assets/account-billing-BgbKqO2f.js +++ /dev/null @@ -1 +0,0 @@ -import{c as D,j as e,L as _,H as L}from"./app-DkuaKs7R.js";import{H as B,e as M,S as P}from"./layout-l-Q4RpTi.js";import{A as E}from"./app-layout-DjcEY8s3.js";import{c as u,d as y,C as b,a as N,b as A}from"./card-BJw5CvBs.js";import{B as v}from"./button-DEWTOza6.js";/* empty css */import"./utils-DFaayVYX.js";import"./index-DSWKGzIo.js";import"./index-l5RZOD5J.js";import"./index-DKUWucUl.js";import"./index-BX6ecx82.js";import"./x-GpPVQP8J.js";import"./send-Dlj8qGrF.js";import"./shield-check-BuNJNOL8.js";import"./users-YqeB5lb8.js";const H=[{title:"Appearance settings",href:M().url}];function O(C){const s=D.c(24),{currentSubscription:t,smsBalance:S}=C;let d;s[0]===Symbol.for("react.memo_cache_sentinel")?(d=e.jsx(L,{title:"Appearance settings"}),s[0]=d):d=s[0];let m;s[1]===Symbol.for("react.memo_cache_sentinel")?(m=e.jsx(B,{title:"Appearance settings",description:"Update your account's appearance settings"}),s[1]=m):m=s[1];let o;s[2]===Symbol.for("react.memo_cache_sentinel")?(o=e.jsx(b,{children:e.jsx(N,{className:"text-lg",children:"SMS Balance"})}),s[2]=o):o=s[2];let i;s[3]!==S?(i=S?.toLocaleString()||0,s[3]=S,s[4]=i):i=s[4];let a;s[5]!==i?(a=e.jsx("p",{className:"text-3xl font-bold text-blue-600",children:i}),s[5]=i,s[6]=a):a=s[6];let x;s[7]===Symbol.for("react.memo_cache_sentinel")?(x=e.jsx("p",{className:"text-sm text-gray-500 mt-1",children:"Available units"}),s[7]=x):x=s[7];let l;s[8]!==a?(l=e.jsxs(u,{children:[o,e.jsxs(y,{children:[a,x]})]}),s[8]=a,s[9]=l):l=s[9];let p;s[10]===Symbol.for("react.memo_cache_sentinel")?(p=e.jsx(b,{children:e.jsx(N,{className:"text-lg",children:"Current Plan"})}),s[10]=p):p=s[10];let r;s[11]!==t?(r=e.jsxs(u,{children:[p,e.jsx(y,{children:t?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-3xl font-bold text-purple-600 capitalize",children:t.plan.replace("-yearly","")}),e.jsx("p",{className:"text-sm text-gray-500 mt-1",children:t.is_active?"Active":"Expired"})]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-3xl font-bold text-gray-400",children:"No Plan"}),e.jsx("p",{className:"text-sm text-gray-500 mt-1",children:"Not subscribed"})]})})]}),s[11]=t,s[12]=r):r=s[12];let c;s[13]!==l||s[14]!==r?(c=e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[l,r]}),s[13]=l,s[14]=r,s[15]=c):c=s[15];let h;s[16]===Symbol.for("react.memo_cache_sentinel")?(h=e.jsxs(b,{children:[e.jsx(N,{children:"Subscription Details"}),e.jsx(A,{children:"View and manage your subscription"})]}),s[16]=h):h=s[16];let n;s[17]!==t?(n=e.jsxs(u,{children:[h,e.jsx(y,{children:t?e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-gray-500",children:"Plan"}),e.jsx("p",{className:"font-medium capitalize",children:t.plan.replace("-yearly","")})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-gray-500",children:"Status"}),e.jsx("p",{className:"font-medium",children:t.is_active?"Active":"Expired"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-gray-500",children:"Start Date"}),e.jsx("p",{className:"font-medium",children:new Date(t.started_at).toLocaleDateString()})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-gray-500",children:"Expires"}),e.jsx("p",{className:"font-medium",children:new Date(t.expires_at).toLocaleDateString()})]})]}),e.jsxs("div",{className:"flex gap-3 pt-4",children:[e.jsx(_,{href:"/billing",children:e.jsx(v,{children:"Manage Subscription"})}),t.is_active&&e.jsx(_,{href:"/billing",children:e.jsx(v,{variant:"outline",children:"Buy SMS Units"})})]})]}):e.jsxs("div",{className:"text-center py-8",children:[e.jsx("p",{className:"text-gray-500 mb-4",children:"You don't have an active subscription"}),e.jsx(_,{href:"/billing",children:e.jsx(v,{children:"View Available Plans"})})]})})]}),s[17]=t,s[18]=n):n=s[18];let j;s[19]===Symbol.for("react.memo_cache_sentinel")?(j=e.jsxs(b,{children:[e.jsx(N,{children:"Payment Method"}),e.jsx(A,{children:"Manage your payment information"})]}),s[19]=j):j=s[19];let f;s[20]===Symbol.for("react.memo_cache_sentinel")?(f=e.jsxs(u,{children:[j,e.jsx(y,{children:e.jsxs("div",{className:"text-center py-8",children:[e.jsx("p",{className:"text-gray-500 mb-4",children:"No payment method saved"}),e.jsx(v,{variant:"outline",children:"Add Payment Method"})]})})]}),s[20]=f):f=s[20];let g;return s[21]!==c||s[22]!==n?(g=e.jsxs(E,{breadcrumbs:H,children:[d,e.jsx(P,{children:e.jsxs("div",{className:"space-y-6",children:[m,e.jsxs("div",{className:"space-y-6",children:[c,n,f]})]})})]}),s[21]=c,s[22]=n,s[23]=g):g=s[23],g}export{O as default}; diff --git a/public/build/assets/app-BA-1rdhG.css b/public/build/assets/app-BA-1rdhG.css deleted file mode 100644 index 478856e..0000000 --- a/public/build/assets/app-BA-1rdhG.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */@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-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom: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;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:"Instrument Sans",ui-sans-serif,system-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-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-orange-50:oklch(98% .016 73.684);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-200:oklch(90.1% .076 70.697);--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-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--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-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-teal-500:oklch(70.4% .14 182.503);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-700:oklch(50% .134 242.749);--color-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--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-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-500:oklch(58.5% .233 277.117);--color-purple-600:oklch(55.8% .288 302.321);--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-zinc-900:oklch(21% .006 285.885);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-sm:calc(var(--radius) - 4px);--radius-md:calc(var(--radius) - 2px);--radius-lg:var(--radius);--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-background:var(--background);--color-foreground:var(--foreground);--color-card:var(--card);--color-card-foreground:var(--card-foreground);--color-popover:var(--popover);--color-popover-foreground:var(--popover-foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-secondary:var(--secondary);--color-secondary-foreground:var(--secondary-foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-accent:var(--accent);--color-accent-foreground:var(--accent-foreground);--color-destructive:var(--destructive);--color-destructive-foreground:var(--destructive-foreground);--color-border:var(--border);--color-input:var(--input);--color-ring:var(--ring);--color-sidebar:var(--sidebar);--color-sidebar-foreground:var(--sidebar-foreground);--color-sidebar-primary-foreground:var(--sidebar-primary-foreground);--color-sidebar-accent:var(--sidebar-accent);--color-sidebar-accent-foreground:var(--sidebar-accent-foreground);--color-sidebar-border:var(--sidebar-border);--color-sidebar-ring:var(--sidebar-ring)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--color-border)}body{background-color:var(--color-background);color:var(--color-foreground)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.not-sr-only{clip:auto;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.-inset-1{inset:calc(var(--spacing)*-1)}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-3{top:calc(var(--spacing)*-3)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-6{right:calc(var(--spacing)*6)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-5{left:calc(var(--spacing)*5)}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.-z-10{z-index:-10}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[1\]{z-index:1}.col-start-2{grid-column-start:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-6{margin-block:calc(var(--spacing)*6)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-14{margin-bottom:calc(var(--spacing)*14)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-24{margin-bottom:calc(var(--spacing)*24)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-px{margin-left:-1px}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\.5{margin-left:calc(var(--spacing)*1.5)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-square{aspect-ratio:1}.\!size-5{width:calc(var(--spacing)*5)!important;height:calc(var(--spacing)*5)!important}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-32{width:calc(var(--spacing)*32);height:calc(var(--spacing)*32)}.size-full{width:100%;height:100%}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-64{height:calc(var(--spacing)*64)}.h-\[34px\]{height:34px}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-\(--radix-dropdown-menu-trigger-width\){width:var(--radix-dropdown-menu-trigger-width)}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-\[34px\]{width:34px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-max{max-width:max-content}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-8{min-width:calc(var(--spacing)*8)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-10{min-width:calc(var(--spacing)*10)}.min-w-56{min-width:calc(var(--spacing)*56)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-6{--tw-translate-x:calc(var(--spacing)*6);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-px{--tw-translate-y:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-none{translate:none}.scale-3d{scale:var(--tw-scale-x)var(--tw-scale-y)var(--tw-scale-z)}.rotate-45{rotate:45deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-caret-blink{animation:1.25s ease-out infinite caret-blink}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.resize{resize:both}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-center{justify-items:center}.justify-items-start{justify-items:start}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-px{gap:1px}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-24>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*24)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*24)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-reverse>:not(:last-child)){--tw-space-y-reverse:1}:where(.space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-reverse>:not(:last-child)){--tw-space-x-reverse:1}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-s{border-start-start-radius:.25rem;border-end-start-radius:.25rem}.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-start-end-radius:.25rem;border-end-end-radius:.25rem}.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl{border-top-left-radius:.25rem}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-amber-200{border-color:var(--color-amber-200)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500{border-color:var(--color-blue-500)}.border-border{border-color:var(--color-border)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-900{border-color:var(--color-gray-900)}.border-green-200{border-color:var(--color-green-200)}.border-green-500{border-color:var(--color-green-500)}.border-green-600{border-color:var(--color-green-600)}.border-input{border-color:var(--color-input)}.border-orange-200{border-color:var(--color-orange-200)}.border-orange-500{border-color:var(--color-orange-500)}.border-primary,.border-primary\/10{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/10{border-color:color-mix(in oklab,var(--color-primary)10%,transparent)}}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-red-500{border-color:var(--color-red-500)}.border-red-600{border-color:var(--color-red-600)}.border-sidebar-border,.border-sidebar-border\/50{border-color:var(--color-sidebar-border)}@supports (color:color-mix(in lab,red,red)){.border-sidebar-border\/50{border-color:color-mix(in oklab,var(--color-sidebar-border)50%,transparent)}}.border-sidebar-border\/70{border-color:var(--color-sidebar-border)}@supports (color:color-mix(in lab,red,red)){.border-sidebar-border\/70{border-color:color-mix(in oklab,var(--color-sidebar-border)70%,transparent)}}.border-sidebar-border\/80{border-color:var(--color-sidebar-border)}@supports (color:color-mix(in lab,red,red)){.border-sidebar-border\/80{border-color:color-mix(in oklab,var(--color-sidebar-border)80%,transparent)}}.border-sky-200{border-color:var(--color-sky-200)}.border-sky-500{border-color:var(--color-sky-500)}.border-sky-600{border-color:var(--color-sky-600)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\/30{border-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.border-yellow-200{border-color:var(--color-yellow-200)}.bg-\[\#F9FAFB\]{background-color:#f9fafb}.bg-\[\#FDFDFC\]{background-color:#fdfdfc}.bg-amber-50{background-color:var(--color-amber-50)}.bg-background{background-color:var(--color-background)}.bg-black{background-color:var(--color-black)}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--color-border)}.bg-card{background-color:var(--color-card)}.bg-destructive{background-color:var(--color-destructive)}.bg-foreground{background-color:var(--color-foreground)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground\/20{background-color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/20{background-color:color-mix(in oklab,var(--color-muted-foreground)20%,transparent)}}.bg-muted\/30{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--color-muted)30%,transparent)}}.bg-muted\/50{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.bg-neutral-100{background-color:var(--color-neutral-100)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-popover{background-color:var(--color-popover)}.bg-primary,.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--color-primary)10%,transparent)}}.bg-primary\/20{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/20{background-color:color-mix(in oklab,var(--color-primary)20%,transparent)}}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-secondary{background-color:var(--color-secondary)}.bg-sidebar{background-color:var(--color-sidebar)}.bg-sidebar-border{background-color:var(--color-sidebar-border)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-sky-600{background-color:var(--color-sky-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[url\(\'\/wind-pattern2\.jpg\'\)\]{background-image:url(/wind-pattern2.jpg)}.from-sky-50{--tw-gradient-from:var(--color-sky-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-sky-50\/40{--tw-gradient-from:#f0f9ff66}@supports (color:color-mix(in lab,red,red)){.from-sky-50\/40{--tw-gradient-from:color-mix(in oklab,var(--color-sky-50)40%,transparent)}}.from-sky-50\/40{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-sky-600{--tw-gradient-from:var(--color-sky-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-white{--tw-gradient-from:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-primary\/5{--tw-gradient-to:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.to-primary\/5{--tw-gradient-to:color-mix(in oklab,var(--color-primary)5%,transparent)}}.to-primary\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-sky-50{--tw-gradient-to:var(--color-sky-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-sky-500{--tw-gradient-to:var(--color-sky-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-cover{background-size:cover}.bg-center{background-position:50%}.bg-repeat{background-repeat:repeat}.mask-no-clip{-webkit-mask-clip:no-clip;mask-clip:no-clip}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.fill-current{fill:currentColor}.fill-primary{fill:var(--color-primary)}.fill-sky-500{fill:var(--color-sky-500)}.stroke-neutral-900\/10{stroke:#1717171a}@supports (color:color-mix(in lab,red,red)){.stroke-neutral-900\/10{stroke:color-mix(in oklab,var(--color-neutral-900)10%,transparent)}}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-7{padding:calc(var(--spacing)*7)}.p-8{padding:calc(var(--spacing)*8)}.p-10{padding:calc(var(--spacing)*10)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.5{padding-inline:calc(var(--spacing)*3.5)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-14{padding-top:calc(var(--spacing)*14)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-12{padding-right:calc(var(--spacing)*12)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#0A1A2F\]{color:#0a1a2f}.text-\[\#1b1b18\]{color:#1b1b18}.text-\[var\(--foreground\)\]{color:var(--foreground)}.text-accent-foreground{color:var(--color-accent-foreground)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-900{color:var(--color-amber-900)}.text-black{color:var(--color-black)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-card-foreground{color:var(--color-card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--color-destructive)}.text-destructive-foreground{color:var(--color-destructive-foreground)}.text-foreground{color:var(--color-foreground)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-300{color:var(--color-green-300)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-500{color:var(--color-indigo-500)}.text-muted{color:var(--color-muted)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-900{color:var(--color-neutral-900)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-purple-600{color:var(--color-purple-600)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-sidebar-accent-foreground{color:var(--color-sidebar-accent-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--color-sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--color-sidebar-foreground)70%,transparent)}}.text-sidebar-primary-foreground{color:var(--color-sidebar-primary-foreground)}.text-sky-100{color:var(--color-sky-100)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.stacked-fractions{--tw-numeric-fraction:stacked-fractions;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.normal-nums{font-variant-numeric:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.decoration-neutral-300{-webkit-text-decoration-color:var(--color-neutral-300);text-decoration-color:var(--color-neutral-300)}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:#1018280d}@supports (color:color-mix(in lab,red,red)){.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}}.ring-green-200{--tw-ring-color:var(--color-green-200)}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-ring,.ring-ring\/10{--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab,red,red)){.ring-ring\/10{--tw-ring-color:color-mix(in oklab,var(--color-ring)10%,transparent)}}.ring-sidebar-ring{--tw-ring-color:var(--color-sidebar-ring)}.ring-sky-500{--tw-ring-color:var(--color-sky-500)}.ring-offset-background{--tw-ring-offset-color:var(--color-background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-ring\/50{outline-color:var(--color-ring)}@supports (color:color-mix(in lab,red,red)){.outline-ring\/50{outline-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-invert{--tw-backdrop-invert:invert(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\]{transition-property:width,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.zoom-in-95{--tw-enter-scale:.95}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.paused{animation-play-state:paused}.ring-inset{--tw-ring-inset:inset}.running{animation-play-state:running}.zoom-in{--tw-enter-scale:0}.zoom-out{--tw-exit-scale:0}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:opacity-40:is(:where(.group):hover *){opacity:.4}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-data-\[collapsible\=icon\]\/sidebar-wrapper\:h-12:is(:where(.group\/sidebar-wrapper):has([data-collapsible=icon]) *){height:calc(var(--spacing)*12)}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-\[collapsible\=icon\]\:pointer-events-none:is(:where(.group)[data-collapsible=icon] *){pointer-events:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=icon\]\:select-none:is(:where(.group)[data-collapsible=icon] *){-webkit-user-select:none;user-select:none}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--color-sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[viewport\=false\]\/navigation-menu\:top-full:is(:where(.group\/navigation-menu)[data-viewport=false] *){top:100%}.group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5:is(:where(.group\/navigation-menu)[data-viewport=false] *){margin-top:calc(var(--spacing)*1.5)}.group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden:is(:where(.group\/navigation-menu)[data-viewport=false] *){overflow:hidden}.group-data-\[viewport\=false\]\/navigation-menu\:rounded-md:is(:where(.group\/navigation-menu)[data-viewport=false] *){border-radius:var(--radius-md)}.group-data-\[viewport\=false\]\/navigation-menu\:border:is(:where(.group\/navigation-menu)[data-viewport=false] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[viewport\=false\]\/navigation-menu\:bg-popover:is(:where(.group\/navigation-menu)[data-viewport=false] *){background-color:var(--color-popover)}.group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground:is(:where(.group\/navigation-menu)[data-viewport=false] *){color:var(--color-popover-foreground)}.group-data-\[viewport\=false\]\/navigation-menu\:shadow:is(:where(.group\/navigation-menu)[data-viewport=false] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[viewport\=false\]\/navigation-menu\:duration-200:is(:where(.group\/navigation-menu)[data-viewport=false] *){--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--color-sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--color-sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-\(--spacing\(4\)\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - (calc(var(--spacing)*4)))}.selection\:bg-primary ::selection{background-color:var(--color-primary)}.selection\:bg-primary::selection{background-color:var(--color-primary)}.selection\:text-primary-foreground ::selection{color:var(--color-primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--color-primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--color-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-r-0:last-child{border-right-style:var(--tw-border-style);border-right-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:scale-\[1\.1\]:hover{scale:1.1}.hover\:border-sky-400:hover{border-color:var(--color-sky-400)}.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-destructive\/90:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--color-destructive)90%,transparent)}}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200\/50:hover{background-color:#e5e7eb80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-200\/50:hover{background-color:color-mix(in oklab,var(--color-gray-200)50%,transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/50:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.hover\:bg-neutral-200\/60:hover{background-color:#e5e5e599}@supports (color:color-mix(in lab,red,red)){.hover\:bg-neutral-200\/60:hover{background-color:color-mix(in oklab,var(--color-neutral-200)60%,transparent)}}.hover\:bg-primary:hover,.hover\:bg-primary\/90:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--color-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--color-secondary)80%,transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--color-sidebar-accent)}.hover\:bg-sky-50:hover{background-color:var(--color-sky-50)}.hover\:bg-sky-700:hover{background-color:var(--color-sky-700)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-muted-foreground:hover{color:var(--color-muted-foreground)}.hover\:text-neutral-800:hover{color:var(--color-neutral-800)}.hover\:text-primary-foreground:hover{color:var(--color-primary-foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--color-sidebar-accent-foreground)}.hover\:text-sky-500:hover{color:var(--color-sky-500)}.hover\:text-sky-600:hover{color:var(--color-sky-600)}.hover\:text-sky-700:hover{color:var(--color-sky-700)}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-current\!:hover{text-decoration-color:currentColor!important}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--color-sidebar)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--color-sidebar-border)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-sky-500:focus{border-color:var(--color-sky-500)}.focus\:bg-accent:focus{background-color:var(--color-accent)}.focus\:text-accent-foreground:focus{color:var(--color-accent-foreground)}.focus\:ring:focus,.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--color-ring)}.focus\:ring-sky-400\/40:focus{--tw-ring-color:#00bcfe66}@supports (color:color-mix(in lab,red,red)){.focus\:ring-sky-400\/40:focus{--tw-ring-color:color-mix(in oklab,var(--color-sky-400)40%,transparent)}}.focus\:ring-sky-500:focus{--tw-ring-color:var(--color-sky-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-4:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-sidebar-accent:active{background-color:var(--color-sidebar-accent)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.active\:text-sidebar-accent-foreground:active{color:var(--color-sidebar-accent-foreground)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--color-sidebar)}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--color-sidebar-accent)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:var(--color-accent-foreground)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--color-sidebar-accent-foreground)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x:calc(52*var(--spacing))}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x:calc(52*var(--spacing)*-1)}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x:calc(52*var(--spacing))}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x:calc(52*var(--spacing)*-1)}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--color-muted-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive-foreground\/80>*)[data-slot=alert-description]{color:var(--color-destructive-foreground)}@supports (color:color-mix(in lab,red,red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive-foreground\/80>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--color-destructive-foreground)80%,transparent)}}:is(.\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:ring-0 *)[data-slot=navigation-menu-link]:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:outline-none *)[data-slot=navigation-menu-link]:focus{--tw-outline-style:none;outline-style:none}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--color-primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--color-primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--color-primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-opacity:0}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity:0}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--color-accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--color-accent-foreground)}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open],.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--color-secondary)}.data-\[state\=open\]\:bg-sidebar-accent[data-state=open]{background-color:var(--color-sidebar-accent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--color-accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--color-muted-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale:.9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-opacity:0}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-scale:.95}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--color-sidebar-accent)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--color-sidebar-accent-foreground)}}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--color-muted)}.data-\[state\=visible\]\:animate-in[data-state=visible]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity:0}.data-\[variant\=destructive\]\:text-destructive-foreground[data-variant=destructive]{color:var(--color-destructive-foreground)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--color-destructive)10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive-foreground[data-variant=destructive]:focus{color:var(--color-destructive-foreground)}.data-\[variant\=outline\]\:border-l-0[data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.data-\[variant\=outline\]\:shadow-xs[data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[variant\=outline\]\:first\:border-l[data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (min-width:40rem){.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:h-12{height:calc(var(--spacing)*12)}.sm\:w-\[350px\]{width:350px}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:text-center{text-align:center}.sm\:text-left{text-align:left}.sm\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}@media (min-width:48rem){.md\:absolute{position:absolute}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:w-1\/2{width:50%}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-2xl{max-width:var(--container-2xl)}.md\:max-w-7xl{max-width:var(--container-7xl)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:px-4{padding-inline:calc(var(--spacing)*4)}.md\:px-10{padding-inline:calc(var(--spacing)*10)}.md\:py-16{padding-block:calc(var(--spacing)*16)}.md\:py-24{padding-block:calc(var(--spacing)*24)}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-0:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*0)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (min-width:64rem){.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-1\/2{width:50%}.lg\:w-48{width:calc(var(--spacing)*48)}.lg\:max-w-none{max-width:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:flex-row-reverse{flex-direction:row-reverse}.lg\:items-center{align-items:center}:where(.lg\:space-y-32>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*32)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*32)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-x-12>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*12)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-x-reverse)))}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.dark\:divide-gray-800:is(.dark *)>:not(:last-child)){border-color:var(--color-gray-800)}.dark\:border-r:is(.dark *){border-right-style:var(--tw-border-style);border-right-width:1px}.dark\:border-gray-600:is(.dark *){border-color:var(--color-gray-600)}.dark\:border-gray-700:is(.dark *){border-color:var(--color-gray-700)}.dark\:border-gray-800:is(.dark *){border-color:var(--color-gray-800)}.dark\:border-red-200\/10:is(.dark *){border-color:#ffcaca1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-red-200\/10:is(.dark *){border-color:color-mix(in oklab,var(--color-red-200)10%,transparent)}}.dark\:bg-\[\#0a0a0a\]:is(.dark *){background-color:#0a0a0a}.dark\:bg-\[\#0f0f0f\]:is(.dark *){background-color:#0f0f0f}.dark\:bg-\[\#111111\]:is(.dark *){background-color:#111}.dark\:bg-\[\#141414\]:is(.dark *){background-color:#141414}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--color-destructive)60%,transparent)}}.dark\:bg-gray-700:is(.dark *){background-color:var(--color-gray-700)}.dark\:bg-gray-800:is(.dark *){background-color:var(--color-gray-800)}.dark\:bg-gray-900:is(.dark *){background-color:var(--color-gray-900)}.dark\:bg-gray-950:is(.dark *){background-color:var(--color-gray-950)}.dark\:bg-neutral-700:is(.dark *){background-color:var(--color-neutral-700)}.dark\:bg-neutral-800:is(.dark *){background-color:var(--color-neutral-800)}.dark\:bg-red-700\/10:is(.dark *){background-color:#bf000f1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-700\/10:is(.dark *){background-color:color-mix(in oklab,var(--color-red-700)10%,transparent)}}.dark\:bg-sky-900:is(.dark *){background-color:var(--color-sky-900)}.dark\:bg-sky-900\/30:is(.dark *){background-color:#024a704d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-sky-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-sky-900)30%,transparent)}}.dark\:bg-white:is(.dark *){background-color:var(--color-white)}.dark\:from-gray-900:is(.dark *){--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:from-gray-950:is(.dark *){--tw-gradient-from:var(--color-gray-950);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:from-sky-900\/10:is(.dark *){--tw-gradient-from:#024a701a}@supports (color:color-mix(in lab,red,red)){.dark\:from-sky-900\/10:is(.dark *){--tw-gradient-from:color-mix(in oklab,var(--color-sky-900)10%,transparent)}}.dark\:from-sky-900\/10:is(.dark *){--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-gray-900:is(.dark *){--tw-gradient-to:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-primary\/10:is(.dark *){--tw-gradient-to:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.dark\:to-primary\/10:is(.dark *){--tw-gradient-to:color-mix(in oklab,var(--color-primary)10%,transparent)}}.dark\:to-primary\/10:is(.dark *){--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:stroke-neutral-100\/10:is(.dark *){stroke:#f5f5f51a}@supports (color:color-mix(in lab,red,red)){.dark\:stroke-neutral-100\/10:is(.dark *){stroke:color-mix(in oklab,var(--color-neutral-100)10%,transparent)}}.dark\:text-\[\#EDEDEC\]:is(.dark *){color:#ededec}.dark\:text-black:is(.dark *){color:var(--color-black)}.dark\:text-gray-100:is(.dark *){color:var(--color-gray-100)}.dark\:text-gray-200:is(.dark *){color:var(--color-gray-200)}.dark\:text-gray-300:is(.dark *){color:var(--color-gray-300)}.dark\:text-gray-400:is(.dark *){color:var(--color-gray-400)}.dark\:text-gray-600:is(.dark *){color:var(--color-gray-600)}.dark\:text-neutral-100:is(.dark *){color:var(--color-neutral-100)}.dark\:text-neutral-300:is(.dark *){color:var(--color-neutral-300)}.dark\:text-neutral-400:is(.dark *){color:var(--color-neutral-400)}.dark\:text-red-100:is(.dark *){color:var(--color-red-100)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\:text-sky-300:is(.dark *){color:var(--color-sky-300)}.dark\:text-sky-400:is(.dark *){color:var(--color-sky-400)}.dark\:text-white:is(.dark *){color:var(--color-white)}.dark\:decoration-neutral-500:is(.dark *){-webkit-text-decoration-color:var(--color-neutral-500);text-decoration-color:var(--color-neutral-500)}.dark\:ring-ring\/20:is(.dark *){--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab,red,red)){.dark\:ring-ring\/20:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-ring)20%,transparent)}}.dark\:ring-sky-600:is(.dark *){--tw-ring-color:var(--color-sky-600)}.dark\:ring-white\/10:is(.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:ring-white\/10:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:outline-ring\/40:is(.dark *){outline-color:var(--color-ring)}@supports (color:color-mix(in lab,red,red)){.dark\:outline-ring\/40:is(.dark *){outline-color:color-mix(in oklab,var(--color-ring)40%,transparent)}}@media (hover:hover){.dark\:hover\:bg-gray-800\/30:is(.dark *):hover{background-color:#1e29394d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-gray-800\/30:is(.dark *):hover{background-color:color-mix(in oklab,var(--color-gray-800)30%,transparent)}}.dark\:hover\:bg-neutral-700\/60:is(.dark *):hover{background-color:#40404099}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-neutral-700\/60:is(.dark *):hover{background-color:color-mix(in oklab,var(--color-neutral-700)60%,transparent)}}.dark\:hover\:bg-sky-900\/20:is(.dark *):hover{background-color:#024a7033}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-sky-900\/20:is(.dark *):hover{background-color:color-mix(in oklab,var(--color-sky-900)20%,transparent)}}.dark\:hover\:bg-sky-900\/30:is(.dark *):hover{background-color:#024a704d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-sky-900\/30:is(.dark *):hover{background-color:color-mix(in oklab,var(--color-sky-900)30%,transparent)}}.dark\:hover\:bg-sky-950\/40:is(.dark *):hover{background-color:#052f4a66}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-sky-950\/40:is(.dark *):hover{background-color:color-mix(in oklab,var(--color-sky-950)40%,transparent)}}.dark\:hover\:text-gray-300:is(.dark *):hover{color:var(--color-gray-300)}.dark\:hover\:text-neutral-100:is(.dark *):hover{color:var(--color-neutral-100)}.dark\:hover\:text-sky-300:is(.dark *):hover{color:var(--color-sky-300)}.dark\:hover\:text-sky-400:is(.dark *):hover{color:var(--color-sky-400)}}.dark\:focus\:border-blue-700:is(.dark *):focus{border-color:var(--color-blue-700)}.dark\:focus\:border-blue-800:is(.dark *):focus{border-color:var(--color-blue-800)}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}.dark\:active\:bg-gray-700:is(.dark *):active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:is(.dark *):active{color:var(--color-gray-300)}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/40:is(.dark *)[data-variant=destructive]:focus{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/40:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--color-destructive)40%,transparent)}}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--color-muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive-foreground[data-variant=destructive]>*):is(svg){color:var(--color-destructive-foreground)!important}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--color-sidebar-accent-foreground)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}@media (hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--color-accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--color-destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--color-secondary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--color-secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--background:oklch(98% .01 240);--foreground:oklch(20% .02 250);--card:oklch(100% 0 0);--card-foreground:var(--foreground);--popover:oklch(100% 0 0);--popover-foreground:var(--foreground);--primary:oklch(59.3% .151 245.368);--primary-foreground:oklch(98% .01 240);--secondary:oklch(65% .18 190);--secondary-foreground:oklch(98% .01 240);--accent:oklch(65% .18 190);--accent-foreground:oklch(98% .01 240);--muted:oklch(94% .02 250);--muted-foreground:oklch(45% .03 250);--border:oklch(90% .01 250);--input:var(--border);--ring:var(--primary);--success:oklch(70% .18 150);--destructive:oklch(55% .24 25);--destructive-foreground:oklch(98% .01 250);--radius:.625rem;--chart-1:oklch(63% .23 250);--chart-2:oklch(68% .19 170);--chart-3:oklch(80% .19 85);--chart-4:oklch(74% .18 30);--chart-5:oklch(45% .19 150);--sidebar:oklch(98% .01 240);--sidebar-foreground:var(--foreground);--sidebar-primary:var(--primary);--sidebar-primary-foreground:oklch(98% .01 240);--sidebar-accent:oklch(94% .02 250);--sidebar-accent-foreground:var(--foreground);--sidebar-border:oklch(90% .01 250);--sidebar-ring:var(--primary)}.dark{--background:oklch(14% .02 250);--foreground:oklch(97% .01 240);--card:oklch(18% .02 250);--card-foreground:var(--foreground);--popover:oklch(18% .02 250);--popover-foreground:var(--foreground);--primary:oklch(70% .22 250);--primary-foreground:oklch(15% .02 250);--accent:oklch(68% .2 170);--accent-foreground:oklch(15% .02 250);--muted:oklch(25% .02 250);--muted-foreground:oklch(70% .02 250);--border:oklch(28% .02 250);--input:var(--border);--ring:var(--primary);--success:oklch(70% .18 150);--destructive:oklch(50% .22 25);--destructive-foreground:var(--foreground);--chart-1:oklch(70% .22 250);--chart-2:oklch(68% .2 170);--chart-3:oklch(78% .19 85);--chart-4:oklch(74% .18 30);--chart-5:oklch(45% .19 150);--sidebar:oklch(18% .02 250);--sidebar-foreground:var(--foreground);--sidebar-primary:var(--primary);--sidebar-primary-foreground:oklch(15% .02 250);--sidebar-accent:oklch(25% .02 250);--sidebar-accent-foreground:oklch(97% .01 240);--sidebar-border:oklch(28% .02 250);--sidebar-ring:var(--primary)}@keyframes wave{0%{transform:rotate(0)}15%{transform:rotate(14deg)}30%{transform:rotate(-8deg)}40%{transform:rotate(14deg)}50%{transform:rotate(-4deg)}60%{transform:rotate(10deg)}to{transform:rotate(0)}}.wave-emoji{transform-origin:70% 70%;animation:2s wave;display:inline-block}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}} diff --git a/public/build/assets/app-DkuaKs7R.js b/public/build/assets/app-BkR-Yu8_.js similarity index 91% rename from public/build/assets/app-DkuaKs7R.js rename to public/build/assets/app-BkR-Yu8_.js index 80812e4..705cefc 100644 --- a/public/build/assets/app-DkuaKs7R.js +++ b/public/build/assets/app-BkR-Yu8_.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Create-DesrmP0F.js","assets/utils-DFaayVYX.js","assets/app-layout-DjcEY8s3.js","assets/button-DEWTOza6.js","assets/index-DKUWucUl.js","assets/index-BX6ecx82.js","assets/x-GpPVQP8J.js","assets/index-DSWKGzIo.js","assets/send-Dlj8qGrF.js","assets/shield-check-BuNJNOL8.js","assets/users-YqeB5lb8.js","assets/input-DZnmHXM7.js","assets/label-CDV8N_bE.js","assets/textarea-CBQAnq9A.js","assets/badge-kWQkrcyp.js","assets/checkbox-B7HjESRx.js","assets/index-BY0riNnH.js","assets/check-CJ-RwoAT.js","assets/sparkles-B8yJ46Ow.js","assets/phone-hsCuNlVr.js","assets/clock-DV7QfVXP.js","assets/repeat-BVyZxNV4.js","assets/Create-CZ3fAurK.css","assets/app-BA-1rdhG.css","assets/Index-DPBaOM08.js","assets/table-Ct7heC9B.js","assets/pagination-Dl6OfTBJ.js","assets/plus-BK0Er8qt.js","assets/eye-DxQSAGc1.js","assets/Show-DtpYdq5g.js","assets/arrow-left-hSCTN_j4.js","assets/circle-check-big-Bldx-0iH.js","assets/trending-up-BKTVFsY9.js","assets/calendar-CqMR1DvJ.js","assets/Create-DCP20aHc.js","assets/input-error-BHxzSb2r.js","assets/Index-BCtwcybM.js","assets/Index-Ck_DgfJl.js","assets/dialog-Cd-cGV3i.js","assets/upload-CBtpxNKN.js","assets/Index-DdhSlm18.js","assets/trash-2-B96Vyizq.js","assets/Index-q0xEBgUS.js","assets/chevron-down-ww17vaZf.js","assets/card-BJw5CvBs.js","assets/index-DRkoPoPW.js","assets/confirm-password-BCXA4ILw.js","assets/spinner-DWuY5SWP.js","assets/loader-circle-EEaSway7.js","assets/auth-layout-BHpZFXnp.js","assets/index-DgMldkQF.js","assets/forgot-password-BJzzV1TE.js","assets/index-CxgtkgZB.js","assets/text-link-B-tKXwwg.js","assets/login-DHscKq3d.js","assets/register-CQifQjoV.js","assets/reset-password-BSzEgOzY.js","assets/two-factor-challenge-1uRwN3OB.js","assets/use-two-factor-auth-DJjfr3Gu.js","assets/index-l5RZOD5J.js","assets/verify-email-CE0IAx0g.js","assets/index-zQ684VKJ.js","assets/index-old-C_f6eIkv.js","assets/subscribe-C2sw2Jgw.js","assets/refresh-cw-CToqruey.js","assets/triangle-alert-DQlmYtqq.js","assets/zap-C2k3_e6W.js","assets/index-D4brdaKS.js","assets/subscription-stat-DwwwY9vz.js","assets/contactpage-CVQHWllJ.js","assets/footer-BVbbQiro.js","assets/contactus-OQnppBOt.js","assets/dashboard-iROT-MYV.js","assets/chart-column-B172OTP7.js","assets/pricingpage-DXTAm2Q2.js","assets/privacypolicy-CfmoOAwx.js","assets/shield-BU18KplF.js","assets/create-CoK2FYhP.js","assets/index-D0pX3UIY.js","assets/show-C0E_0La-.js","assets/account-billing-BgbKqO2f.js","assets/layout-l-Q4RpTi.js","assets/appearance-qqK2sDAf.js","assets/password-DFVJWXDJ.js","assets/transition-D9JBTmx8.js","assets/profile-DRigR9y8.js","assets/two-factor-C7TfiYRu.js","assets/stories-h1vZOeT8.js","assets/termspage-CmKpvzFr.js","assets/welcome-B8pINf4K.js"])))=>i.map(i=>d[i]); -/* empty css */function zb(a,l){for(var u=0;uc[f]})}}}return Object.freeze(Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}))}const Ub="modulepreload",xb=function(a){return"/build/"+a},Qy={},Ne=function(l,u,c){let f=Promise.resolve();if(u&&u.length>0){let S=function(y){return Promise.all(y.map(v=>Promise.resolve(v).then(g=>({status:"fulfilled",value:g}),g=>({status:"rejected",reason:g}))))};document.getElementsByTagName("link");const h=document.querySelector("meta[property=csp-nonce]"),m=h?.nonce||h?.getAttribute("nonce");f=S(u.map(y=>{if(y=xb(y),y in Qy)return;Qy[y]=!0;const v=y.endsWith(".css"),g=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${y}"]${g}`))return;const w=document.createElement("link");if(w.rel=v?"stylesheet":Ub,v||(w.as="script"),w.crossOrigin="",w.href=y,m&&w.setAttribute("nonce",m),document.head.appendChild(w),v)return new Promise((O,b)=>{w.addEventListener("load",O),w.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${y}`)))})}))}function d(h){const m=new Event("vite:preloadError",{cancelable:!0});if(m.payload=h,window.dispatchEvent(m),!m.defaultPrevented)throw h}return f.then(h=>{for(const m of h||[])m.status==="rejected"&&d(m.reason);return l().catch(d)})};var Xy=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Nb(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}function qb(a){if(Object.prototype.hasOwnProperty.call(a,"__esModule"))return a;var l=a.default;if(typeof l=="function"){var u=function c(){var f=!1;try{f=this instanceof c}catch{}return f?Reflect.construct(l,arguments,this.constructor):l.apply(this,arguments)};u.prototype=l.prototype}else u={};return Object.defineProperty(u,"__esModule",{value:!0}),Object.keys(a).forEach(function(c){var f=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(u,c,f.get?f:{enumerable:!0,get:function(){return a[c]}})}),u}var ds={exports:{}},Wl={};/** +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Create-ChJVr8ap.js","assets/utils-DFaayVYX.js","assets/app-layout-6TmSMbxU.js","assets/button-BkeD6D9C.js","assets/index-C-iMGC_l.js","assets/index-BxSFA7Jd.js","assets/index-BV9LgQgg.js","assets/send-BIH-xC-j.js","assets/shield-check-BR6okPK2.js","assets/users-BPIE1cfL.js","assets/coins-CBBvu4lK.js","assets/input-BFktu1Ja.js","assets/label-B8qNWxTC.js","assets/textarea-dZ5N8NJE.js","assets/badge-jojBb81G.js","assets/checkbox-BiI6uQz7.js","assets/index--_rDGB40.js","assets/check-B5v_CoGh.js","assets/sparkles-lisodQIP.js","assets/phone-JmLs-27P.js","assets/clock-ORU7RUR6.js","assets/repeat-YCiHDVYw.js","assets/Create-CZ3fAurK.css","assets/app-DVsnKvTf.css","assets/Index-DdMw1wEf.js","assets/table-D7Qye2oa.js","assets/pagination-9b1HcMdN.js","assets/plus-D8sy_HuF.js","assets/eye-B-3DQCdc.js","assets/Show-C2fPj8wA.js","assets/arrow-left-CokfllWW.js","assets/circle-check-big-oFmMvvLA.js","assets/trending-up-BgBIKlvu.js","assets/calendar-BhurMeWr.js","assets/Create-BuAS5CP7.js","assets/input-error-mOXaJ-E5.js","assets/Index-CFmz40zl.js","assets/Index-ceQDBOel.js","assets/dialog-Bnza0FdC.js","assets/upload-CyjYyb3G.js","assets/Index-BB8kex5d.js","assets/trash-2-moLY6jfP.js","assets/Index-B7WYc3ld.js","assets/chevron-down-fod5QjCx.js","assets/card-BzTNPnb3.js","assets/index-B3YU2xHo.js","assets/index-xNtUz4J_.js","assets/confirm-password-DG3lTLwG.js","assets/spinner-BRvE27r8.js","assets/loader-circle-DxXgBKva.js","assets/auth-layout-CDuR229S.js","assets/index-LRIX3YnH.js","assets/forgot-password-BGPJfVzl.js","assets/index-BNBOjDlx.js","assets/text-link-CpxNYNj0.js","assets/login-BXKt5Fat.js","assets/register-1ZXoHrXn.js","assets/reset-password-CfPCMKVX.js","assets/two-factor-challenge-B9zw7RhZ.js","assets/use-two-factor-auth-BC3AHbYW.js","assets/index-KVUm80di.js","assets/verify-email-DoHXk_On.js","assets/index-2tgfX3vv.js","assets/index-Dx-Xuif9.js","assets/contactpage-BY3rYpYO.js","assets/footer-BBYXvJjo.js","assets/contactus-3gHJqeG6.js","assets/dashboard-DiS24pni.js","assets/chart-column-Djap3tTG.js","assets/circle-alert-DJL936k5.js","assets/pricingpage-DGHRNvjY.js","assets/privacypolicy-Dn5q_iyL.js","assets/shield-DkT5Efxc.js","assets/create-B9FBFEEm.js","assets/index-C--3ASwP.js","assets/show-B679j3GJ.js","assets/appearance-DhnsY2Pe.js","assets/layout-CTyzX9vx.js","assets/password-CAA1W24S.js","assets/transition-DyuwjdPo.js","assets/profile-CzmQHP1W.js","assets/two-factor-CTWWAGd6.js","assets/stories-GZ3JLYk5.js","assets/termspage-Cz5LMlAo.js","assets/welcome-kqdGoBD3.js"])))=>i.map(i=>d[i]); +/* empty css */function zb(a,l){for(var u=0;uc[f]})}}}return Object.freeze(Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}))}const Ub="modulepreload",xb=function(a){return"/build/"+a},Qy={},He=function(l,u,c){let f=Promise.resolve();if(u&&u.length>0){let S=function(y){return Promise.all(y.map(v=>Promise.resolve(v).then(g=>({status:"fulfilled",value:g}),g=>({status:"rejected",reason:g}))))};document.getElementsByTagName("link");const h=document.querySelector("meta[property=csp-nonce]"),m=h?.nonce||h?.getAttribute("nonce");f=S(u.map(y=>{if(y=xb(y),y in Qy)return;Qy[y]=!0;const v=y.endsWith(".css"),g=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${y}"]${g}`))return;const w=document.createElement("link");if(w.rel=v?"stylesheet":Ub,v||(w.as="script"),w.crossOrigin="",w.href=y,m&&w.setAttribute("nonce",m),document.head.appendChild(w),v)return new Promise((O,b)=>{w.addEventListener("load",O),w.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${y}`)))})}))}function d(h){const m=new Event("vite:preloadError",{cancelable:!0});if(m.payload=h,window.dispatchEvent(m),!m.defaultPrevented)throw h}return f.then(h=>{for(const m of h||[])m.status==="rejected"&&d(m.reason);return l().catch(d)})};var Xy=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Nb(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}function qb(a){if(Object.prototype.hasOwnProperty.call(a,"__esModule"))return a;var l=a.default;if(typeof l=="function"){var u=function c(){var f=!1;try{f=this instanceof c}catch{}return f?Reflect.construct(l,arguments,this.constructor):l.apply(this,arguments)};u.prototype=l.prototype}else u={};return Object.defineProperty(u,"__esModule",{value:!0}),Object.keys(a).forEach(function(c){var f=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(u,c,f.get?f:{enumerable:!0,get:function(){return a[c]}})}),u}var ds={exports:{}},Wl={};/** * @license React * react-jsx-runtime.production.js * @@ -7,15 +7,15 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Create-DesrmP0F * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var $y;function Hb(){if($y)return Wl;$y=1;var a=Symbol.for("react.transitional.element"),l=Symbol.for("react.fragment");function u(c,f,d){var h=null;if(d!==void 0&&(h=""+d),f.key!==void 0&&(h=""+f.key),"key"in f){d={};for(var m in f)m!=="key"&&(d[m]=f[m])}else d=f;return f=d.ref,{$$typeof:a,type:c,key:h,ref:f!==void 0?f:null,props:d}}return Wl.Fragment=l,Wl.jsx=u,Wl.jsxs=u,Wl}var Py;function Bb(){return Py||(Py=1,ds.exports=Hb()),ds.exports}var Zy=Bb(),hs,Ky;function el(){return Ky||(Ky=1,hs=TypeError),hs}const jb={},Lb=Object.freeze(Object.defineProperty({__proto__:null,default:jb},Symbol.toStringTag,{value:"Module"})),Gb=qb(Lb);var ps,Jy;function Xu(){if(Jy)return ps;Jy=1;var a=typeof Map=="function"&&Map.prototype,l=Object.getOwnPropertyDescriptor&&a?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,u=a&&l&&typeof l.get=="function"?l.get:null,c=a&&Map.prototype.forEach,f=typeof Set=="function"&&Set.prototype,d=Object.getOwnPropertyDescriptor&&f?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,h=f&&d&&typeof d.get=="function"?d.get:null,m=f&&Set.prototype.forEach,S=typeof WeakMap=="function"&&WeakMap.prototype,y=S?WeakMap.prototype.has:null,v=typeof WeakSet=="function"&&WeakSet.prototype,g=v?WeakSet.prototype.has:null,w=typeof WeakRef=="function"&&WeakRef.prototype,O=w?WeakRef.prototype.deref:null,b=Boolean.prototype.valueOf,M=Object.prototype.toString,T=Function.prototype.toString,D=String.prototype.match,q=String.prototype.slice,X=String.prototype.replace,Q=String.prototype.toUpperCase,F=String.prototype.toLowerCase,k=RegExp.prototype.test,$=Array.prototype.concat,ee=Array.prototype.join,ne=Array.prototype.slice,ie=Math.floor,pe=typeof BigInt=="function"?BigInt.prototype.valueOf:null,te=Object.getOwnPropertySymbols,we=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,me=typeof Symbol=="function"&&typeof Symbol.iterator=="object",_e=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===me||!0)?Symbol.toStringTag:null,x=Object.prototype.propertyIsEnumerable,Z=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(C){return C.__proto__}:null);function P(C,H){if(C===1/0||C===-1/0||C!==C||C&&C>-1e3&&C<1e3||k.call(/e/,H))return H;var xe=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof C=="number"){var Ve=C<0?-ie(-C):ie(C);if(Ve!==C){var Le=String(Ve),ge=q.call(H,Le.length+1);return X.call(Le,xe,"$&_")+"."+X.call(X.call(ge,/([0-9]{3})/g,"$&_"),/_$/,"")}}return X.call(H,xe,"$&_")}var oe=Gb,ve=oe.custom,A=Ze(ve)?ve:null,L={__proto__:null,double:'"',single:"'"},J={__proto__:null,double:/(["\\])/g,single:/(['\\])/g};ps=function C(H,xe,Ve,Le){var ge=xe||{};if(_t(ge,"quoteStyle")&&!_t(L,ge.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(_t(ge,"maxStringLength")&&(typeof ge.maxStringLength=="number"?ge.maxStringLength<0&&ge.maxStringLength!==1/0:ge.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var Xt=_t(ge,"customInspect")?ge.customInspect:!0;if(typeof Xt!="boolean"&&Xt!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(_t(ge,"indent")&&ge.indent!==null&&ge.indent!==" "&&!(parseInt(ge.indent,10)===ge.indent&&ge.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(_t(ge,"numericSeparator")&&typeof ge.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var Ct=ge.numericSeparator;if(typeof H>"u")return"undefined";if(H===null)return"null";if(typeof H=="boolean")return H?"true":"false";if(typeof H=="string")return rl(H,ge);if(typeof H=="number"){if(H===0)return 1/0/H>0?"0":"-0";var pt=String(H);return Ct?P(H,pt):pt}if(typeof H=="bigint"){var xt=String(H)+"n";return Ct?P(H,xt):xt}var ll=typeof ge.depth>"u"?5:ge.depth;if(typeof Ve>"u"&&(Ve=0),Ve>=ll&&ll>0&&typeof H=="object")return W(H)?"[Array]":"[Object]";var zn=Ha(ge,Ve);if(typeof Le>"u")Le=[];else if(Wt(Le,H)>=0)return"[Circular]";function Mt(Un,Tn,cl){if(Tn&&(Le=ne.call(Le),Le.push(Tn)),cl){var xn={depth:ge.depth};return _t(ge,"quoteStyle")&&(xn.quoteStyle=ge.quoteStyle),C(Un,xn,Ve+1,Le)}return C(Un,ge,Ve+1,Le)}if(typeof H=="function"&&!ue(H)){var ia=En(H),vi=Qt(H,Mt);return"[Function"+(ia?": "+ia:" (anonymous)")+"]"+(vi.length>0?" { "+ee.call(vi,", ")+" }":"")}if(Ze(H)){var il=me?X.call(String(H),/^(Symbol\(.*\))_[^)]*$/,"$1"):we.call(H);return typeof H=="object"&&!me?qa(il):il}if(yi(H)){for(var ua="<"+F.call(String(H.nodeName)),fr=H.attributes||[],oa=0;oa",ua}if(W(H)){if(H.length===0)return"[]";var Ba=Qt(H,Mt);return zn&&!no(Ba)?"["+gt(Ba,zn)+"]":"[ "+ee.call(Ba,", ")+" ]"}if(ae(H)){var dr=Qt(H,Mt);return!("cause"in Error.prototype)&&"cause"in H&&!x.call(H,"cause")?"{ ["+String(H)+"] "+ee.call($.call("[cause]: "+Mt(H.cause),dr),", ")+" }":dr.length===0?"["+String(H)+"]":"{ ["+String(H)+"] "+ee.call(dr,", ")+" }"}if(typeof H=="object"&&Xt){if(A&&typeof H[A]=="function"&&oe)return oe(H,{depth:ll-Ve});if(Xt!=="symbol"&&typeof H.inspect=="function")return H.inspect()}if(Dt(H)){var ul=[];return c&&c.call(H,function(Un,Tn){ul.push(Mt(Tn,H,!0)+" => "+Mt(Un,H))}),mi("Map",u.call(H),ul,zn)}if(it(H)){var dn=[];return m&&m.call(H,function(Un){dn.push(Mt(Un,H))}),mi("Set",h.call(H),dn,zn)}if(ra(H))return sr("WeakMap");if(to(H))return sr("WeakSet");if(la(H))return sr("WeakRef");if(Ue(H))return qa(Mt(Number(H)));if(ft(H))return qa(Mt(pe.call(H)));if(Oe(H))return qa(b.call(H));if(de(H))return qa(Mt(String(H)));if(typeof window<"u"&&H===window)return"{ [object Window] }";if(typeof globalThis<"u"&&H===globalThis||typeof Xy<"u"&&H===Xy)return"{ [object globalThis] }";if(!be(H)&&!ue(H)){var nt=Qt(H,Mt),St=Z?Z(H)===Object.prototype:H instanceof Object||H.constructor===Object,An=H instanceof Object?"":"null prototype",hr=!St&&_e&&Object(H)===H&&_e in H?q.call(Rt(H),8,-1):An?"Object":"",ao=St||typeof H.constructor!="function"?"":H.constructor.name?H.constructor.name+" ":"",ol=ao+(hr||An?"["+ee.call($.call([],hr||[],An||[]),": ")+"] ":"");return nt.length===0?ol+"{}":zn?ol+"{"+gt(nt,zn)+"}":ol+"{ "+ee.call(nt,", ")+" }"}return String(H)};function K(C,H,xe){var Ve=xe.quoteStyle||H,Le=L[Ve];return Le+C+Le}function re(C){return X.call(String(C),/"/g,""")}function se(C){return!_e||!(typeof C=="object"&&(_e in C||typeof C[_e]<"u"))}function W(C){return Rt(C)==="[object Array]"&&se(C)}function be(C){return Rt(C)==="[object Date]"&&se(C)}function ue(C){return Rt(C)==="[object RegExp]"&&se(C)}function ae(C){return Rt(C)==="[object Error]"&&se(C)}function de(C){return Rt(C)==="[object String]"&&se(C)}function Ue(C){return Rt(C)==="[object Number]"&&se(C)}function Oe(C){return Rt(C)==="[object Boolean]"&&se(C)}function Ze(C){if(me)return C&&typeof C=="object"&&C instanceof Symbol;if(typeof C=="symbol")return!0;if(!C||typeof C!="object"||!we)return!1;try{return we.call(C),!0}catch{}return!1}function ft(C){if(!C||typeof C!="object"||!pe)return!1;try{return pe.call(C),!0}catch{}return!1}var lt=Object.prototype.hasOwnProperty||function(C){return C in this};function _t(C,H){return lt.call(C,H)}function Rt(C){return M.call(C)}function En(C){if(C.name)return C.name;var H=D.call(T.call(C),/^function\s*([\w$]+)/);return H?H[1]:null}function Wt(C,H){if(C.indexOf)return C.indexOf(H);for(var xe=0,Ve=C.length;xeH.maxStringLength){var xe=C.length-H.maxStringLength,Ve="... "+xe+" more character"+(xe>1?"s":"");return rl(q.call(C,0,H.maxStringLength),H)+Ve}var Le=J[H.quoteStyle||"single"];Le.lastIndex=0;var ge=X.call(X.call(C,Le,"\\$1"),/[\x00-\x1f]/g,cr);return K(ge,"single",H)}function cr(C){var H=C.charCodeAt(0),xe={8:"b",9:"t",10:"n",12:"f",13:"r"}[H];return xe?"\\"+xe:"\\x"+(H<16?"0":"")+Q.call(H.toString(16))}function qa(C){return"Object("+C+")"}function sr(C){return C+" { ? }"}function mi(C,H,xe,Ve){var Le=Ve?gt(xe,Ve):ee.call(xe,", ");return C+" ("+H+") {"+Le+"}"}function no(C){for(var H=0;H-1e3&&C<1e3||k.call(/e/,H))return H;var xe=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof C=="number"){var Ve=C<0?-ie(-C):ie(C);if(Ve!==C){var Le=String(Ve),ge=q.call(H,Le.length+1);return X.call(Le,xe,"$&_")+"."+X.call(X.call(ge,/([0-9]{3})/g,"$&_"),/_$/,"")}}return X.call(H,xe,"$&_")}var oe=Gb,ve=oe.custom,A=Pe(ve)?ve:null,L={__proto__:null,double:'"',single:"'"},J={__proto__:null,double:/(["\\])/g,single:/(['\\])/g};ps=function C(H,xe,Ve,Le){var ge=xe||{};if(_t(ge,"quoteStyle")&&!_t(L,ge.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(_t(ge,"maxStringLength")&&(typeof ge.maxStringLength=="number"?ge.maxStringLength<0&&ge.maxStringLength!==1/0:ge.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var Xt=_t(ge,"customInspect")?ge.customInspect:!0;if(typeof Xt!="boolean"&&Xt!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(_t(ge,"indent")&&ge.indent!==null&&ge.indent!==" "&&!(parseInt(ge.indent,10)===ge.indent&&ge.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(_t(ge,"numericSeparator")&&typeof ge.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var Ct=ge.numericSeparator;if(typeof H>"u")return"undefined";if(H===null)return"null";if(typeof H=="boolean")return H?"true":"false";if(typeof H=="string")return rl(H,ge);if(typeof H=="number"){if(H===0)return 1/0/H>0?"0":"-0";var pt=String(H);return Ct?Z(H,pt):pt}if(typeof H=="bigint"){var xt=String(H)+"n";return Ct?Z(H,xt):xt}var ll=typeof ge.depth>"u"?5:ge.depth;if(typeof Ve>"u"&&(Ve=0),Ve>=ll&&ll>0&&typeof H=="object")return W(H)?"[Array]":"[Object]";var zn=Ha(ge,Ve);if(typeof Le>"u")Le=[];else if(Wt(Le,H)>=0)return"[Circular]";function Mt(Un,Tn,cl){if(Tn&&(Le=ne.call(Le),Le.push(Tn)),cl){var xn={depth:ge.depth};return _t(ge,"quoteStyle")&&(xn.quoteStyle=ge.quoteStyle),C(Un,xn,Ve+1,Le)}return C(Un,ge,Ve+1,Le)}if(typeof H=="function"&&!ue(H)){var ia=En(H),vi=Qt(H,Mt);return"[Function"+(ia?": "+ia:" (anonymous)")+"]"+(vi.length>0?" { "+ee.call(vi,", ")+" }":"")}if(Pe(H)){var il=me?X.call(String(H),/^(Symbol\(.*\))_[^)]*$/,"$1"):we.call(H);return typeof H=="object"&&!me?qa(il):il}if(yi(H)){for(var ua="<"+F.call(String(H.nodeName)),fr=H.attributes||[],oa=0;oa",ua}if(W(H)){if(H.length===0)return"[]";var Ba=Qt(H,Mt);return zn&&!no(Ba)?"["+gt(Ba,zn)+"]":"[ "+ee.call(Ba,", ")+" ]"}if(ae(H)){var dr=Qt(H,Mt);return!("cause"in Error.prototype)&&"cause"in H&&!x.call(H,"cause")?"{ ["+String(H)+"] "+ee.call($.call("[cause]: "+Mt(H.cause),dr),", ")+" }":dr.length===0?"["+String(H)+"]":"{ ["+String(H)+"] "+ee.call(dr,", ")+" }"}if(typeof H=="object"&&Xt){if(A&&typeof H[A]=="function"&&oe)return oe(H,{depth:ll-Ve});if(Xt!=="symbol"&&typeof H.inspect=="function")return H.inspect()}if(Dt(H)){var ul=[];return c&&c.call(H,function(Un,Tn){ul.push(Mt(Tn,H,!0)+" => "+Mt(Un,H))}),mi("Map",u.call(H),ul,zn)}if(it(H)){var dn=[];return m&&m.call(H,function(Un){dn.push(Mt(Un,H))}),mi("Set",h.call(H),dn,zn)}if(ra(H))return sr("WeakMap");if(to(H))return sr("WeakSet");if(la(H))return sr("WeakRef");if(Ue(H))return qa(Mt(Number(H)));if(ft(H))return qa(Mt(pe.call(H)));if(Oe(H))return qa(b.call(H));if(de(H))return qa(Mt(String(H)));if(typeof window<"u"&&H===window)return"{ [object Window] }";if(typeof globalThis<"u"&&H===globalThis||typeof Xy<"u"&&H===Xy)return"{ [object globalThis] }";if(!be(H)&&!ue(H)){var nt=Qt(H,Mt),St=P?P(H)===Object.prototype:H instanceof Object||H.constructor===Object,An=H instanceof Object?"":"null prototype",hr=!St&&_e&&Object(H)===H&&_e in H?q.call(Rt(H),8,-1):An?"Object":"",ao=St||typeof H.constructor!="function"?"":H.constructor.name?H.constructor.name+" ":"",ol=ao+(hr||An?"["+ee.call($.call([],hr||[],An||[]),": ")+"] ":"");return nt.length===0?ol+"{}":zn?ol+"{"+gt(nt,zn)+"}":ol+"{ "+ee.call(nt,", ")+" }"}return String(H)};function K(C,H,xe){var Ve=xe.quoteStyle||H,Le=L[Ve];return Le+C+Le}function re(C){return X.call(String(C),/"/g,""")}function se(C){return!_e||!(typeof C=="object"&&(_e in C||typeof C[_e]<"u"))}function W(C){return Rt(C)==="[object Array]"&&se(C)}function be(C){return Rt(C)==="[object Date]"&&se(C)}function ue(C){return Rt(C)==="[object RegExp]"&&se(C)}function ae(C){return Rt(C)==="[object Error]"&&se(C)}function de(C){return Rt(C)==="[object String]"&&se(C)}function Ue(C){return Rt(C)==="[object Number]"&&se(C)}function Oe(C){return Rt(C)==="[object Boolean]"&&se(C)}function Pe(C){if(me)return C&&typeof C=="object"&&C instanceof Symbol;if(typeof C=="symbol")return!0;if(!C||typeof C!="object"||!we)return!1;try{return we.call(C),!0}catch{}return!1}function ft(C){if(!C||typeof C!="object"||!pe)return!1;try{return pe.call(C),!0}catch{}return!1}var lt=Object.prototype.hasOwnProperty||function(C){return C in this};function _t(C,H){return lt.call(C,H)}function Rt(C){return M.call(C)}function En(C){if(C.name)return C.name;var H=D.call(T.call(C),/^function\s*([\w$]+)/);return H?H[1]:null}function Wt(C,H){if(C.indexOf)return C.indexOf(H);for(var xe=0,Ve=C.length;xeH.maxStringLength){var xe=C.length-H.maxStringLength,Ve="... "+xe+" more character"+(xe>1?"s":"");return rl(q.call(C,0,H.maxStringLength),H)+Ve}var Le=J[H.quoteStyle||"single"];Le.lastIndex=0;var ge=X.call(X.call(C,Le,"\\$1"),/[\x00-\x1f]/g,cr);return K(ge,"single",H)}function cr(C){var H=C.charCodeAt(0),xe={8:"b",9:"t",10:"n",12:"f",13:"r"}[H];return xe?"\\"+xe:"\\x"+(H<16?"0":"")+Q.call(H.toString(16))}function qa(C){return"Object("+C+")"}function sr(C){return C+" { ? }"}function mi(C,H,xe,Ve){var Le=Ve?gt(xe,Ve):ee.call(xe,", ");return C+" ("+H+") {"+Le+"}"}function no(C){for(var H=0;H=0)return!1;return!0}function Ha(C,H){var xe;if(C.indent===" ")xe=" ";else if(typeof C.indent=="number"&&C.indent>0)xe=ee.call(Array(C.indent+1)," ");else return null;return{base:xe,prev:ee.call(Array(H+1),xe)}}function gt(C,H){if(C.length===0)return"";var xe=` `+H.prev+H.base;return xe+ee.call(C,","+xe)+` -`+H.prev}function Qt(C,H){var xe=W(C),Ve=[];if(xe){Ve.length=C.length;for(var Le=0;Le"u"||!$?a:$(Uint8Array),me={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?a:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?a:ArrayBuffer,"%ArrayIteratorPrototype%":k&&$?$([][Symbol.iterator]()):a,"%AsyncFromSyncIteratorPrototype%":a,"%AsyncFunction%":te,"%AsyncGenerator%":te,"%AsyncGeneratorFunction%":te,"%AsyncIteratorPrototype%":te,"%Atomics%":typeof Atomics>"u"?a:Atomics,"%BigInt%":typeof BigInt>"u"?a:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?a:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?a:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?a:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":u,"%eval%":eval,"%EvalError%":c,"%Float16Array%":typeof Float16Array>"u"?a:Float16Array,"%Float32Array%":typeof Float32Array>"u"?a:Float32Array,"%Float64Array%":typeof Float64Array>"u"?a:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?a:FinalizationRegistry,"%Function%":T,"%GeneratorFunction%":te,"%Int8Array%":typeof Int8Array>"u"?a:Int8Array,"%Int16Array%":typeof Int16Array>"u"?a:Int16Array,"%Int32Array%":typeof Int32Array>"u"?a:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":k&&$?$($([][Symbol.iterator]())):a,"%JSON%":typeof JSON=="object"?JSON:a,"%Map%":typeof Map>"u"?a:Map,"%MapIteratorPrototype%":typeof Map>"u"||!k||!$?a:$(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":l,"%Object.getOwnPropertyDescriptor%":q,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?a:Promise,"%Proxy%":typeof Proxy>"u"?a:Proxy,"%RangeError%":f,"%ReferenceError%":d,"%Reflect%":typeof Reflect>"u"?a:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?a:Set,"%SetIteratorPrototype%":typeof Set>"u"||!k||!$?a:$(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?a:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":k&&$?$(""[Symbol.iterator]()):a,"%Symbol%":k?Symbol:a,"%SyntaxError%":h,"%ThrowTypeError%":F,"%TypedArray%":we,"%TypeError%":m,"%Uint8Array%":typeof Uint8Array>"u"?a:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?a:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?a:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?a:Uint32Array,"%URIError%":S,"%WeakMap%":typeof WeakMap>"u"?a:WeakMap,"%WeakRef%":typeof WeakRef>"u"?a:WeakRef,"%WeakSet%":typeof WeakSet>"u"?a:WeakSet,"%Function.prototype.call%":pe,"%Function.prototype.apply%":ie,"%Object.defineProperty%":X,"%Object.getPrototypeOf%":ee,"%Math.abs%":y,"%Math.floor%":v,"%Math.max%":g,"%Math.min%":w,"%Math.pow%":O,"%Math.round%":b,"%Math.sign%":M,"%Reflect.getPrototypeOf%":ne};if($)try{null.error}catch(ue){var _e=$($(ue));me["%Error.prototype%"]=_e}var x=function ue(ae){var de;if(ae==="%AsyncFunction%")de=D("async function () {}");else if(ae==="%GeneratorFunction%")de=D("function* () {}");else if(ae==="%AsyncGeneratorFunction%")de=D("async function* () {}");else if(ae==="%AsyncGenerator%"){var Ue=ue("%AsyncGeneratorFunction%");Ue&&(de=Ue.prototype)}else if(ae==="%AsyncIteratorPrototype%"){var Oe=ue("%AsyncGenerator%");Oe&&$&&(de=$(Oe.prototype))}return me[ae]=de,de},Z={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},P=$u(),oe=f1(),ve=P.call(pe,Array.prototype.concat),A=P.call(ie,Array.prototype.splice),L=P.call(pe,String.prototype.replace),J=P.call(pe,String.prototype.slice),K=P.call(pe,RegExp.prototype.exec),re=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,se=/\\(\\)?/g,W=function(ae){var de=J(ae,0,1),Ue=J(ae,-1);if(de==="%"&&Ue!=="%")throw new h("invalid intrinsic syntax, expected closing `%`");if(Ue==="%"&&de!=="%")throw new h("invalid intrinsic syntax, expected opening `%`");var Oe=[];return L(ae,re,function(Ze,ft,lt,_t){Oe[Oe.length]=lt?L(_t,se,"$1"):ft||Ze}),Oe},be=function(ae,de){var Ue=ae,Oe;if(oe(Z,Ue)&&(Oe=Z[Ue],Ue="%"+Oe[0]+"%"),oe(me,Ue)){var Ze=me[Ue];if(Ze===te&&(Ze=x(Ue)),typeof Ze>"u"&&!de)throw new m("intrinsic "+ae+" exists, but is not available. Please file an issue!");return{alias:Oe,name:Ue,value:Ze}}throw new h("intrinsic "+ae+" does not exist!")};return Ks=function(ae,de){if(typeof ae!="string"||ae.length===0)throw new m("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof de!="boolean")throw new m('"allowMissing" argument must be a boolean');if(K(/^%?[^%]*%?$/,ae)===null)throw new h("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var Ue=W(ae),Oe=Ue.length>0?Ue[0]:"",Ze=be("%"+Oe+"%",de),ft=Ze.name,lt=Ze.value,_t=!1,Rt=Ze.alias;Rt&&(Oe=Rt[0],A(Ue,ve([0,1],Rt)));for(var En=1,Wt=!0;En=Ue.length){var it=q(lt,Dt);Wt=!!it,Wt&&"get"in it&&!("originalValue"in it.get)?lt=it.get:lt=lt[Dt]}else Wt=oe(lt,Dt),lt=lt[Dt];Wt&&!_t&&(me[ft]=lt)}}return lt},Ks}var Js,Mm;function rg(){if(Mm)return Js;Mm=1;var a=jf(),l=ag(),u=l([a("%String.prototype.indexOf%")]);return Js=function(f,d){var h=a(f,!!d);return typeof h=="function"&&u(f,".prototype.")>-1?l([h]):h},Js}var Fs,zm;function lg(){if(zm)return Fs;zm=1;var a=jf(),l=rg(),u=Xu(),c=el(),f=a("%Map%",!0),d=l("Map.prototype.get",!0),h=l("Map.prototype.set",!0),m=l("Map.prototype.has",!0),S=l("Map.prototype.delete",!0),y=l("Map.prototype.size",!0);return Fs=!!f&&function(){var g,w={assert:function(O){if(!w.has(O))throw new c("Side channel does not contain "+u(O))},delete:function(O){if(g){var b=S(g,O);return y(g)===0&&(g=void 0),b}return!1},get:function(O){if(g)return d(g,O)},has:function(O){return g?m(g,O):!1},set:function(O,b){g||(g=new f),h(g,O,b)}};return w},Fs}var ks,Um;function d1(){if(Um)return ks;Um=1;var a=jf(),l=rg(),u=Xu(),c=lg(),f=el(),d=a("%WeakMap%",!0),h=l("WeakMap.prototype.get",!0),m=l("WeakMap.prototype.set",!0),S=l("WeakMap.prototype.has",!0),y=l("WeakMap.prototype.delete",!0);return ks=d?function(){var g,w,O={assert:function(b){if(!O.has(b))throw new f("Side channel does not contain "+u(b))},delete:function(b){if(d&&b&&(typeof b=="object"||typeof b=="function")){if(g)return y(g,b)}else if(c&&w)return w.delete(b);return!1},get:function(b){return d&&b&&(typeof b=="object"||typeof b=="function")&&g?h(g,b):w&&w.get(b)},has:function(b){return d&&b&&(typeof b=="object"||typeof b=="function")&&g?S(g,b):!!w&&w.has(b)},set:function(b,M){d&&b&&(typeof b=="object"||typeof b=="function")?(g||(g=new d),m(g,b,M)):c&&(w||(w=c()),w.set(b,M))}};return O}:c,ks}var Ws,xm;function h1(){if(xm)return Ws;xm=1;var a=el(),l=Xu(),u=Yb(),c=lg(),f=d1(),d=f||c||u;return Ws=function(){var m,S={assert:function(y){if(!S.has(y))throw new a("Side channel does not contain "+l(y))},delete:function(y){return!!m&&m.delete(y)},get:function(y){return m&&m.get(y)},has:function(y){return!!m&&m.has(y)},set:function(y,v){m||(m=d()),m.set(y,v)}};return S},Ws}var Is,Nm;function Lf(){if(Nm)return Is;Nm=1;var a=String.prototype.replace,l=/%20/g,u={RFC1738:"RFC1738",RFC3986:"RFC3986"};return Is={default:u.RFC3986,formatters:{RFC1738:function(c){return a.call(c,l,"+")},RFC3986:function(c){return String(c)}},RFC1738:u.RFC1738,RFC3986:u.RFC3986},Is}var ef,qm;function ig(){if(qm)return ef;qm=1;var a=Lf(),l=Object.prototype.hasOwnProperty,u=Array.isArray,c=(function(){for(var T=[],D=0;D<256;++D)T.push("%"+((D<16?"0":"")+D.toString(16)).toUpperCase());return T})(),f=function(D){for(;D.length>1;){var q=D.pop(),X=q.obj[q.prop];if(u(X)){for(var Q=[],F=0;F=y?k.slice(ee,ee+y):k,ie=[],pe=0;pe=48&&te<=57||te>=65&&te<=90||te>=97&&te<=122||F===a.RFC1738&&(te===40||te===41)){ie[ie.length]=ne.charAt(pe);continue}if(te<128){ie[ie.length]=c[te];continue}if(te<2048){ie[ie.length]=c[192|te>>6]+c[128|te&63];continue}if(te<55296||te>=57344){ie[ie.length]=c[224|te>>12]+c[128|te>>6&63]+c[128|te&63];continue}pe+=1,te=65536+((te&1023)<<10|ne.charCodeAt(pe)&1023),ie[ie.length]=c[240|te>>18]+c[128|te>>12&63]+c[128|te>>6&63]+c[128|te&63]}$+=ie.join("")}return $},g=function(D){for(var q=[{obj:{o:D},prop:"o"}],X=[],Q=0;Q"u"&&(ve=0)}if(typeof ne=="function"?P=ne(D,P):P instanceof Date?P=te(P):q==="comma"&&d(P)&&(P=l.maybeMap(P,function(ft){return ft instanceof Date?te(ft):ft})),P===null){if(F)return ee&&!_e?ee(D,v.encoder,x,"key",we):D;P=""}if(g(P)||l.isBuffer(P)){if(ee){var J=_e?D:ee(D,v.encoder,x,"key",we);return[me(J)+"="+me(ee(P,v.encoder,x,"value",we))]}return[me(D)+"="+me(String(P))]}var K=[];if(typeof P>"u")return K;var re;if(q==="comma"&&d(P))_e&&ee&&(P=l.maybeMap(P,ee)),re=[{value:P.length>0?P.join(",")||null:void 0}];else if(d(ne))re=ne;else{var se=Object.keys(P);re=ie?se.sort(ie):se}var W=$?String(D).replace(/\./g,"%2E"):String(D),be=X&&d(P)&&P.length===1?W+"[]":W;if(Q&&d(P)&&P.length===0)return be+"[]";for(var ue=0;ue"u"?T.encodeDotInKeys===!0?!0:v.allowDots:!!T.allowDots;return{addQueryPrefix:typeof T.addQueryPrefix=="boolean"?T.addQueryPrefix:v.addQueryPrefix,allowDots:k,allowEmptyArrays:typeof T.allowEmptyArrays=="boolean"?!!T.allowEmptyArrays:v.allowEmptyArrays,arrayFormat:F,charset:D,charsetSentinel:typeof T.charsetSentinel=="boolean"?T.charsetSentinel:v.charsetSentinel,commaRoundTrip:!!T.commaRoundTrip,delimiter:typeof T.delimiter>"u"?v.delimiter:T.delimiter,encode:typeof T.encode=="boolean"?T.encode:v.encode,encodeDotInKeys:typeof T.encodeDotInKeys=="boolean"?T.encodeDotInKeys:v.encodeDotInKeys,encoder:typeof T.encoder=="function"?T.encoder:v.encoder,encodeValuesOnly:typeof T.encodeValuesOnly=="boolean"?T.encodeValuesOnly:v.encodeValuesOnly,filter:Q,format:q,formatter:X,serializeDate:typeof T.serializeDate=="function"?T.serializeDate:v.serializeDate,skipNulls:typeof T.skipNulls=="boolean"?T.skipNulls:v.skipNulls,sort:typeof T.sort=="function"?T.sort:null,strictNullHandling:typeof T.strictNullHandling=="boolean"?T.strictNullHandling:v.strictNullHandling}};return tf=function(M,T){var D=M,q=b(T),X,Q;typeof q.filter=="function"?(Q=q.filter,D=Q("",D)):d(q.filter)&&(Q=q.filter,X=Q);var F=[];if(typeof D!="object"||D===null)return"";var k=f[q.arrayFormat],$=k==="comma"&&q.commaRoundTrip;X||(X=Object.keys(D)),q.sort&&X.sort(q.sort);for(var ee=a(),ne=0;ne0?we+te:""},tf}var nf,Bm;function y1(){if(Bm)return nf;Bm=1;var a=ig(),l=Object.prototype.hasOwnProperty,u=Array.isArray,c={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:a.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictNullHandling:!1,throwOnLimitExceeded:!1},f=function(w){return w.replace(/&#(\d+);/g,function(O,b){return String.fromCharCode(parseInt(b,10))})},d=function(w,O,b){if(w&&typeof w=="string"&&O.comma&&w.indexOf(",")>-1)return w.split(",");if(O.throwOnLimitExceeded&&b>=O.arrayLimit)throw new RangeError("Array limit exceeded. Only "+O.arrayLimit+" element"+(O.arrayLimit===1?"":"s")+" allowed in an array.");return w},h="utf8=%26%2310003%3B",m="utf8=%E2%9C%93",S=function(O,b){var M={__proto__:null},T=b.ignoreQueryPrefix?O.replace(/^\?/,""):O;T=T.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var D=b.parameterLimit===1/0?void 0:b.parameterLimit,q=T.split(b.delimiter,b.throwOnLimitExceeded?D+1:D);if(b.throwOnLimitExceeded&&q.length>D)throw new RangeError("Parameter limit exceeded. Only "+D+" parameter"+(D===1?"":"s")+" allowed.");var X=-1,Q,F=b.charset;if(b.charsetSentinel)for(Q=0;Q-1&&(ie=u(ie)?[ie]:ie);var pe=l.call(M,ne);pe&&b.duplicates==="combine"?M[ne]=a.combine(M[ne],ie):(!pe||b.duplicates==="last")&&(M[ne]=ie)}return M},y=function(w,O,b,M){var T=0;if(w.length>0&&w[w.length-1]==="[]"){var D=w.slice(0,-1).join("");T=Array.isArray(O)&&O[D]?O[D].length:0}for(var q=M?O:d(O,b,T),X=w.length-1;X>=0;--X){var Q,F=w[X];if(F==="[]"&&b.parseArrays)Q=b.allowEmptyArrays&&(q===""||b.strictNullHandling&&q===null)?[]:a.combine([],q);else{Q=b.plainObjects?{__proto__:null}:{};var k=F.charAt(0)==="["&&F.charAt(F.length-1)==="]"?F.slice(1,-1):F,$=b.decodeDotInKeys?k.replace(/%2E/g,"."):k,ee=parseInt($,10);!b.parseArrays&&$===""?Q={0:q}:!isNaN(ee)&&F!==$&&String(ee)===$&&ee>=0&&b.parseArrays&&ee<=b.arrayLimit?(Q=[],Q[ee]=q):$!=="__proto__"&&(Q[$]=q)}q=Q}return q},v=function(O,b,M,T){if(O){var D=M.allowDots?O.replace(/\.([^.[]+)/g,"[$1]"):O,q=/(\[[^[\]]*])/,X=/(\[[^[\]]*])/g,Q=M.depth>0&&q.exec(D),F=Q?D.slice(0,Q.index):D,k=[];if(F){if(!M.plainObjects&&l.call(Object.prototype,F)&&!M.allowPrototypes)return;k.push(F)}for(var $=0;M.depth>0&&(Q=X.exec(D))!==null&&$"u"?c.charset:O.charset,M=typeof O.duplicates>"u"?c.duplicates:O.duplicates;if(M!=="combine"&&M!=="first"&&M!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var T=typeof O.allowDots>"u"?O.decodeDotInKeys===!0?!0:c.allowDots:!!O.allowDots;return{allowDots:T,allowEmptyArrays:typeof O.allowEmptyArrays=="boolean"?!!O.allowEmptyArrays:c.allowEmptyArrays,allowPrototypes:typeof O.allowPrototypes=="boolean"?O.allowPrototypes:c.allowPrototypes,allowSparse:typeof O.allowSparse=="boolean"?O.allowSparse:c.allowSparse,arrayLimit:typeof O.arrayLimit=="number"?O.arrayLimit:c.arrayLimit,charset:b,charsetSentinel:typeof O.charsetSentinel=="boolean"?O.charsetSentinel:c.charsetSentinel,comma:typeof O.comma=="boolean"?O.comma:c.comma,decodeDotInKeys:typeof O.decodeDotInKeys=="boolean"?O.decodeDotInKeys:c.decodeDotInKeys,decoder:typeof O.decoder=="function"?O.decoder:c.decoder,delimiter:typeof O.delimiter=="string"||a.isRegExp(O.delimiter)?O.delimiter:c.delimiter,depth:typeof O.depth=="number"||O.depth===!1?+O.depth:c.depth,duplicates:M,ignoreQueryPrefix:O.ignoreQueryPrefix===!0,interpretNumericEntities:typeof O.interpretNumericEntities=="boolean"?O.interpretNumericEntities:c.interpretNumericEntities,parameterLimit:typeof O.parameterLimit=="number"?O.parameterLimit:c.parameterLimit,parseArrays:O.parseArrays!==!1,plainObjects:typeof O.plainObjects=="boolean"?O.plainObjects:c.plainObjects,strictDepth:typeof O.strictDepth=="boolean"?!!O.strictDepth:c.strictDepth,strictNullHandling:typeof O.strictNullHandling=="boolean"?O.strictNullHandling:c.strictNullHandling,throwOnLimitExceeded:typeof O.throwOnLimitExceeded=="boolean"?O.throwOnLimitExceeded:!1}};return nf=function(w,O){var b=g(O);if(w===""||w===null||typeof w>"u")return b.plainObjects?{__proto__:null}:{};for(var M=typeof w=="string"?S(w,b):w,T=b.plainObjects?{__proto__:null}:{},D=Object.keys(M),q=0;q-1&&a%1==0&&a-1&&a%1==0&&a<=k1}function W1(a){return a!=null&&Qf(a.length)&&!sg(a)}var I1=Object.prototype;function dg(a){var l=a&&a.constructor,u=typeof l=="function"&&l.prototype||I1;return a===u}function eE(a,l){for(var u=-1,c=Array(a);++u-1}function uA(a,l){var u=this.__data__,c=Pu(u,a);return c<0?(++this.size,u.push([a,l])):u[c][1]=l,this}function na(a){var l=-1,u=a==null?0:a.length;for(this.clear();++lm))return!1;var y=d.get(a),v=d.get(l);if(y&&v)return y==l&&v==a;var g=-1,w=!0,O=u&n_?new Yu:void 0;for(d.set(a,l),d.set(l,a);++g":">",'"':""","'":"'"},D_=TA(R_),Rg=/[&<>"']/g,C_=RegExp(Rg.source);function M_(a){return a=Sg(a),a&&C_.test(a)?a.replace(Rg,D_):a}var z_=Object.prototype,U_=z_.hasOwnProperty;function x_(a,l){return a!=null&&U_.call(a,l)}function N_(a,l){return a!=null&&w_(a,l,x_)}function Dg(a,l){return wg(a,l)}function q_(a,l,u,c){if(!Fr(a))return a;l=Pf(l,a);for(var f=-1,d=l.length,h=d-1,m=a;m!=null&&++fl=>{const u=H_.call(l);return a[u]||(a[u]=u.slice(8,-1).toLowerCase())})(Object.create(null)),Sn=a=>(a=a.toLowerCase(),l=>Ju(l)===a),Fu=a=>l=>typeof l===a,{isArray:nl}=Array,Wr=Fu("undefined");function fi(a){return a!==null&&!Wr(a)&&a.constructor!==null&&!Wr(a.constructor)&&Yt(a.constructor.isBuffer)&&a.constructor.isBuffer(a)}const zg=Sn("ArrayBuffer");function B_(a){let l;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?l=ArrayBuffer.isView(a):l=a&&a.buffer&&zg(a.buffer),l}const j_=Fu("string"),Yt=Fu("function"),Ug=Fu("number"),di=a=>a!==null&&typeof a=="object",L_=a=>a===!0||a===!1,Nu=a=>{if(Ju(a)!=="object")return!1;const l=Jf(a);return(l===null||l===Object.prototype||Object.getPrototypeOf(l)===null)&&!(Mg in a)&&!(Ku in a)},G_=a=>{if(!di(a)||fi(a))return!1;try{return Object.keys(a).length===0&&Object.getPrototypeOf(a)===Object.prototype}catch{return!1}},Y_=Sn("Date"),V_=Sn("File"),Q_=Sn("Blob"),X_=Sn("FileList"),$_=a=>di(a)&&Yt(a.pipe),P_=a=>{let l;return a&&(typeof FormData=="function"&&a instanceof FormData||Yt(a.append)&&((l=Ju(a))==="formdata"||l==="object"&&Yt(a.toString)&&a.toString()==="[object FormData]"))},Z_=Sn("URLSearchParams"),[K_,J_,F_,k_]=["ReadableStream","Request","Response","Headers"].map(Sn),W_=a=>a.trim?a.trim():a.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function hi(a,l,{allOwnKeys:u=!1}={}){if(a===null||typeof a>"u")return;let c,f;if(typeof a!="object"&&(a=[a]),nl(a))for(c=0,f=a.length;c0;)if(f=u[c],l===f.toLowerCase())return f;return null}const tr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Ng=a=>!Wr(a)&&a!==tr;function Of(){const{caseless:a,skipUndefined:l}=Ng(this)&&this||{},u={},c=(f,d)=>{const h=a&&xg(u,d)||d;Nu(u[h])&&Nu(f)?u[h]=Of(u[h],f):Nu(f)?u[h]=Of({},f):nl(f)?u[h]=f.slice():(!l||!Wr(f))&&(u[h]=f)};for(let f=0,d=arguments.length;f(hi(l,(f,d)=>{u&&Yt(f)?a[d]=Cg(f,u):a[d]=f},{allOwnKeys:c}),a),eO=a=>(a.charCodeAt(0)===65279&&(a=a.slice(1)),a),tO=(a,l,u,c)=>{a.prototype=Object.create(l.prototype,c),a.prototype.constructor=a,Object.defineProperty(a,"super",{value:l.prototype}),u&&Object.assign(a.prototype,u)},nO=(a,l,u,c)=>{let f,d,h;const m={};if(l=l||{},a==null)return l;do{for(f=Object.getOwnPropertyNames(a),d=f.length;d-- >0;)h=f[d],(!c||c(h,a,l))&&!m[h]&&(l[h]=a[h],m[h]=!0);a=u!==!1&&Jf(a)}while(a&&(!u||u(a,l))&&a!==Object.prototype);return l},aO=(a,l,u)=>{a=String(a),(u===void 0||u>a.length)&&(u=a.length),u-=l.length;const c=a.indexOf(l,u);return c!==-1&&c===u},rO=a=>{if(!a)return null;if(nl(a))return a;let l=a.length;if(!Ug(l))return null;const u=new Array(l);for(;l-- >0;)u[l]=a[l];return u},lO=(a=>l=>a&&l instanceof a)(typeof Uint8Array<"u"&&Jf(Uint8Array)),iO=(a,l)=>{const c=(a&&a[Ku]).call(a);let f;for(;(f=c.next())&&!f.done;){const d=f.value;l.call(a,d[0],d[1])}},uO=(a,l)=>{let u;const c=[];for(;(u=a.exec(l))!==null;)c.push(u);return c},oO=Sn("HTMLFormElement"),cO=a=>a.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(u,c,f){return c.toUpperCase()+f}),dv=(({hasOwnProperty:a})=>(l,u)=>a.call(l,u))(Object.prototype),sO=Sn("RegExp"),qg=(a,l)=>{const u=Object.getOwnPropertyDescriptors(a),c={};hi(u,(f,d)=>{let h;(h=l(f,d,a))!==!1&&(c[d]=h||f)}),Object.defineProperties(a,c)},fO=a=>{qg(a,(l,u)=>{if(Yt(a)&&["arguments","caller","callee"].indexOf(u)!==-1)return!1;const c=a[u];if(Yt(c)){if(l.enumerable=!1,"writable"in l){l.writable=!1;return}l.set||(l.set=()=>{throw Error("Can not rewrite read-only method '"+u+"'")})}})},dO=(a,l)=>{const u={},c=f=>{f.forEach(d=>{u[d]=!0})};return nl(a)?c(a):c(String(a).split(l)),u},hO=()=>{},pO=(a,l)=>a!=null&&Number.isFinite(a=+a)?a:l;function yO(a){return!!(a&&Yt(a.append)&&a[Mg]==="FormData"&&a[Ku])}const mO=a=>{const l=new Array(10),u=(c,f)=>{if(di(c)){if(l.indexOf(c)>=0)return;if(fi(c))return c;if(!("toJSON"in c)){l[f]=c;const d=nl(c)?[]:{};return hi(c,(h,m)=>{const S=u(h,f+1);!Wr(S)&&(d[m]=S)}),l[f]=void 0,d}}return c};return u(a,0)},vO=Sn("AsyncFunction"),gO=a=>a&&(di(a)||Yt(a))&&Yt(a.then)&&Yt(a.catch),Hg=((a,l)=>a?setImmediate:l?((u,c)=>(tr.addEventListener("message",({source:f,data:d})=>{f===tr&&d===u&&c.length&&c.shift()()},!1),f=>{c.push(f),tr.postMessage(u,"*")}))(`axios@${Math.random()}`,[]):u=>setTimeout(u))(typeof setImmediate=="function",Yt(tr.postMessage)),SO=typeof queueMicrotask<"u"?queueMicrotask.bind(tr):typeof process<"u"&&process.nextTick||Hg,bO=a=>a!=null&&Yt(a[Ku]),B={isArray:nl,isArrayBuffer:zg,isBuffer:fi,isFormData:P_,isArrayBufferView:B_,isString:j_,isNumber:Ug,isBoolean:L_,isObject:di,isPlainObject:Nu,isEmptyObject:G_,isReadableStream:K_,isRequest:J_,isResponse:F_,isHeaders:k_,isUndefined:Wr,isDate:Y_,isFile:V_,isBlob:Q_,isRegExp:sO,isFunction:Yt,isStream:$_,isURLSearchParams:Z_,isTypedArray:lO,isFileList:X_,forEach:hi,merge:Of,extend:I_,trim:W_,stripBOM:eO,inherits:tO,toFlatObject:nO,kindOf:Ju,kindOfTest:Sn,endsWith:aO,toArray:rO,forEachEntry:iO,matchAll:uO,isHTMLForm:oO,hasOwnProperty:dv,hasOwnProp:dv,reduceDescriptors:qg,freezeMethods:fO,toObjectSet:dO,toCamelCase:cO,noop:hO,toFiniteNumber:pO,findKey:xg,global:tr,isContextDefined:Ng,isSpecCompliantForm:yO,toJSONObject:mO,isAsyncFn:vO,isThenable:gO,setImmediate:Hg,asap:SO,isIterable:bO};function Ae(a,l,u,c,f){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=a,this.name="AxiosError",l&&(this.code=l),u&&(this.config=u),c&&(this.request=c),f&&(this.response=f,this.status=f.status?f.status:null)}B.inherits(Ae,Error,{toJSON:function(){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:B.toJSONObject(this.config),code:this.code,status:this.status}}});const Bg=Ae.prototype,jg={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(a=>{jg[a]={value:a}});Object.defineProperties(Ae,jg);Object.defineProperty(Bg,"isAxiosError",{value:!0});Ae.from=(a,l,u,c,f,d)=>{const h=Object.create(Bg);B.toFlatObject(a,h,function(v){return v!==Error.prototype},y=>y!=="isAxiosError");const m=a&&a.message?a.message:"Error",S=l==null&&a?a.code:l;return Ae.call(h,m,S,u,c,f),a&&h.cause==null&&Object.defineProperty(h,"cause",{value:a,configurable:!0}),h.name=a&&a.name||"Error",d&&Object.assign(h,d),h};const EO=null;function wf(a){return B.isPlainObject(a)||B.isArray(a)}function Lg(a){return B.endsWith(a,"[]")?a.slice(0,-2):a}function hv(a,l,u){return a?a.concat(l).map(function(f,d){return f=Lg(f),!u&&d?"["+f+"]":f}).join(u?".":""):l}function AO(a){return B.isArray(a)&&!a.some(wf)}const TO=B.toFlatObject(B,{},null,function(l){return/^is[A-Z]/.test(l)});function ku(a,l,u){if(!B.isObject(a))throw new TypeError("target must be an object");l=l||new FormData,u=B.toFlatObject(u,{metaTokens:!0,dots:!1,indexes:!1},!1,function(M,T){return!B.isUndefined(T[M])});const c=u.metaTokens,f=u.visitor||v,d=u.dots,h=u.indexes,S=(u.Blob||typeof Blob<"u"&&Blob)&&B.isSpecCompliantForm(l);if(!B.isFunction(f))throw new TypeError("visitor must be a function");function y(b){if(b===null)return"";if(B.isDate(b))return b.toISOString();if(B.isBoolean(b))return b.toString();if(!S&&B.isBlob(b))throw new Ae("Blob is not supported. Use a Buffer instead.");return B.isArrayBuffer(b)||B.isTypedArray(b)?S&&typeof Blob=="function"?new Blob([b]):Buffer.from(b):b}function v(b,M,T){let D=b;if(b&&!T&&typeof b=="object"){if(B.endsWith(M,"{}"))M=c?M:M.slice(0,-2),b=JSON.stringify(b);else if(B.isArray(b)&&AO(b)||(B.isFileList(b)||B.endsWith(M,"[]"))&&(D=B.toArray(b)))return M=Lg(M),D.forEach(function(X,Q){!(B.isUndefined(X)||X===null)&&l.append(h===!0?hv([M],Q,d):h===null?M:M+"[]",y(X))}),!1}return wf(b)?!0:(l.append(hv(T,M,d),y(b)),!1)}const g=[],w=Object.assign(TO,{defaultVisitor:v,convertValue:y,isVisitable:wf});function O(b,M){if(!B.isUndefined(b)){if(g.indexOf(b)!==-1)throw Error("Circular reference detected in "+M.join("."));g.push(b),B.forEach(b,function(D,q){(!(B.isUndefined(D)||D===null)&&f.call(l,D,B.isString(q)?q.trim():q,M,w))===!0&&O(D,M?M.concat(q):[q])}),g.pop()}}if(!B.isObject(a))throw new TypeError("data must be an object");return O(a),l}function pv(a){const l={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(a).replace(/[!'()~]|%20|%00/g,function(c){return l[c]})}function Ff(a,l){this._pairs=[],a&&ku(a,this,l)}const Gg=Ff.prototype;Gg.append=function(l,u){this._pairs.push([l,u])};Gg.toString=function(l){const u=l?function(c){return l.call(this,c,pv)}:pv;return this._pairs.map(function(f){return u(f[0])+"="+u(f[1])},"").join("&")};function _O(a){return encodeURIComponent(a).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Yg(a,l,u){if(!l)return a;const c=u&&u.encode||_O;B.isFunction(u)&&(u={serialize:u});const f=u&&u.serialize;let d;if(f?d=f(l,u):d=B.isURLSearchParams(l)?l.toString():new Ff(l,u).toString(c),d){const h=a.indexOf("#");h!==-1&&(a=a.slice(0,h)),a+=(a.indexOf("?")===-1?"?":"&")+d}return a}class yv{constructor(){this.handlers=[]}use(l,u,c){return this.handlers.push({fulfilled:l,rejected:u,synchronous:c?c.synchronous:!1,runWhen:c?c.runWhen:null}),this.handlers.length-1}eject(l){this.handlers[l]&&(this.handlers[l]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(l){B.forEach(this.handlers,function(c){c!==null&&l(c)})}}const Vg={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},OO=typeof URLSearchParams<"u"?URLSearchParams:Ff,wO=typeof FormData<"u"?FormData:null,RO=typeof Blob<"u"?Blob:null,DO={isBrowser:!0,classes:{URLSearchParams:OO,FormData:wO,Blob:RO},protocols:["http","https","file","blob","url","data"]},kf=typeof window<"u"&&typeof document<"u",Rf=typeof navigator=="object"&&navigator||void 0,CO=kf&&(!Rf||["ReactNative","NativeScript","NS"].indexOf(Rf.product)<0),MO=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",zO=kf&&window.location.href||"http://localhost",UO=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:kf,hasStandardBrowserEnv:CO,hasStandardBrowserWebWorkerEnv:MO,navigator:Rf,origin:zO},Symbol.toStringTag,{value:"Module"})),wt={...UO,...DO};function xO(a,l){return ku(a,new wt.classes.URLSearchParams,{visitor:function(u,c,f,d){return wt.isNode&&B.isBuffer(u)?(this.append(c,u.toString("base64")),!1):d.defaultVisitor.apply(this,arguments)},...l})}function NO(a){return B.matchAll(/\w+|\[(\w*)]/g,a).map(l=>l[0]==="[]"?"":l[1]||l[0])}function qO(a){const l={},u=Object.keys(a);let c;const f=u.length;let d;for(c=0;c=u.length;return h=!h&&B.isArray(f)?f.length:h,S?(B.hasOwnProp(f,h)?f[h]=[f[h],c]:f[h]=c,!m):((!f[h]||!B.isObject(f[h]))&&(f[h]=[]),l(u,c,f[h],d)&&B.isArray(f[h])&&(f[h]=qO(f[h])),!m)}if(B.isFormData(a)&&B.isFunction(a.entries)){const u={};return B.forEachEntry(a,(c,f)=>{l(NO(c),f,u,0)}),u}return null}function HO(a,l,u){if(B.isString(a))try{return(l||JSON.parse)(a),B.trim(a)}catch(c){if(c.name!=="SyntaxError")throw c}return(u||JSON.stringify)(a)}const pi={transitional:Vg,adapter:["xhr","http","fetch"],transformRequest:[function(l,u){const c=u.getContentType()||"",f=c.indexOf("application/json")>-1,d=B.isObject(l);if(d&&B.isHTMLForm(l)&&(l=new FormData(l)),B.isFormData(l))return f?JSON.stringify(Qg(l)):l;if(B.isArrayBuffer(l)||B.isBuffer(l)||B.isStream(l)||B.isFile(l)||B.isBlob(l)||B.isReadableStream(l))return l;if(B.isArrayBufferView(l))return l.buffer;if(B.isURLSearchParams(l))return u.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),l.toString();let m;if(d){if(c.indexOf("application/x-www-form-urlencoded")>-1)return xO(l,this.formSerializer).toString();if((m=B.isFileList(l))||c.indexOf("multipart/form-data")>-1){const S=this.env&&this.env.FormData;return ku(m?{"files[]":l}:l,S&&new S,this.formSerializer)}}return d||f?(u.setContentType("application/json",!1),HO(l)):l}],transformResponse:[function(l){const u=this.transitional||pi.transitional,c=u&&u.forcedJSONParsing,f=this.responseType==="json";if(B.isResponse(l)||B.isReadableStream(l))return l;if(l&&B.isString(l)&&(c&&!this.responseType||f)){const h=!(u&&u.silentJSONParsing)&&f;try{return JSON.parse(l,this.parseReviver)}catch(m){if(h)throw m.name==="SyntaxError"?Ae.from(m,Ae.ERR_BAD_RESPONSE,this,null,this.response):m}}return l}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:wt.classes.FormData,Blob:wt.classes.Blob},validateStatus:function(l){return l>=200&&l<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};B.forEach(["delete","get","head","post","put","patch"],a=>{pi.headers[a]={}});const BO=B.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),jO=a=>{const l={};let u,c,f;return a&&a.split(` +`+H.prev}function Qt(C,H){var xe=W(C),Ve=[];if(xe){Ve.length=C.length;for(var Le=0;Le"u"||!$?a:$(Uint8Array),me={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?a:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?a:ArrayBuffer,"%ArrayIteratorPrototype%":k&&$?$([][Symbol.iterator]()):a,"%AsyncFromSyncIteratorPrototype%":a,"%AsyncFunction%":te,"%AsyncGenerator%":te,"%AsyncGeneratorFunction%":te,"%AsyncIteratorPrototype%":te,"%Atomics%":typeof Atomics>"u"?a:Atomics,"%BigInt%":typeof BigInt>"u"?a:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?a:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?a:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?a:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":u,"%eval%":eval,"%EvalError%":c,"%Float16Array%":typeof Float16Array>"u"?a:Float16Array,"%Float32Array%":typeof Float32Array>"u"?a:Float32Array,"%Float64Array%":typeof Float64Array>"u"?a:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?a:FinalizationRegistry,"%Function%":T,"%GeneratorFunction%":te,"%Int8Array%":typeof Int8Array>"u"?a:Int8Array,"%Int16Array%":typeof Int16Array>"u"?a:Int16Array,"%Int32Array%":typeof Int32Array>"u"?a:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":k&&$?$($([][Symbol.iterator]())):a,"%JSON%":typeof JSON=="object"?JSON:a,"%Map%":typeof Map>"u"?a:Map,"%MapIteratorPrototype%":typeof Map>"u"||!k||!$?a:$(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":l,"%Object.getOwnPropertyDescriptor%":q,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?a:Promise,"%Proxy%":typeof Proxy>"u"?a:Proxy,"%RangeError%":f,"%ReferenceError%":d,"%Reflect%":typeof Reflect>"u"?a:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?a:Set,"%SetIteratorPrototype%":typeof Set>"u"||!k||!$?a:$(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?a:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":k&&$?$(""[Symbol.iterator]()):a,"%Symbol%":k?Symbol:a,"%SyntaxError%":h,"%ThrowTypeError%":F,"%TypedArray%":we,"%TypeError%":m,"%Uint8Array%":typeof Uint8Array>"u"?a:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?a:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?a:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?a:Uint32Array,"%URIError%":S,"%WeakMap%":typeof WeakMap>"u"?a:WeakMap,"%WeakRef%":typeof WeakRef>"u"?a:WeakRef,"%WeakSet%":typeof WeakSet>"u"?a:WeakSet,"%Function.prototype.call%":pe,"%Function.prototype.apply%":ie,"%Object.defineProperty%":X,"%Object.getPrototypeOf%":ee,"%Math.abs%":y,"%Math.floor%":v,"%Math.max%":g,"%Math.min%":w,"%Math.pow%":O,"%Math.round%":b,"%Math.sign%":M,"%Reflect.getPrototypeOf%":ne};if($)try{null.error}catch(ue){var _e=$($(ue));me["%Error.prototype%"]=_e}var x=function ue(ae){var de;if(ae==="%AsyncFunction%")de=D("async function () {}");else if(ae==="%GeneratorFunction%")de=D("function* () {}");else if(ae==="%AsyncGeneratorFunction%")de=D("async function* () {}");else if(ae==="%AsyncGenerator%"){var Ue=ue("%AsyncGeneratorFunction%");Ue&&(de=Ue.prototype)}else if(ae==="%AsyncIteratorPrototype%"){var Oe=ue("%AsyncGenerator%");Oe&&$&&(de=$(Oe.prototype))}return me[ae]=de,de},P={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},Z=$u(),oe=f1(),ve=Z.call(pe,Array.prototype.concat),A=Z.call(ie,Array.prototype.splice),L=Z.call(pe,String.prototype.replace),J=Z.call(pe,String.prototype.slice),K=Z.call(pe,RegExp.prototype.exec),re=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,se=/\\(\\)?/g,W=function(ae){var de=J(ae,0,1),Ue=J(ae,-1);if(de==="%"&&Ue!=="%")throw new h("invalid intrinsic syntax, expected closing `%`");if(Ue==="%"&&de!=="%")throw new h("invalid intrinsic syntax, expected opening `%`");var Oe=[];return L(ae,re,function(Pe,ft,lt,_t){Oe[Oe.length]=lt?L(_t,se,"$1"):ft||Pe}),Oe},be=function(ae,de){var Ue=ae,Oe;if(oe(P,Ue)&&(Oe=P[Ue],Ue="%"+Oe[0]+"%"),oe(me,Ue)){var Pe=me[Ue];if(Pe===te&&(Pe=x(Ue)),typeof Pe>"u"&&!de)throw new m("intrinsic "+ae+" exists, but is not available. Please file an issue!");return{alias:Oe,name:Ue,value:Pe}}throw new h("intrinsic "+ae+" does not exist!")};return Ks=function(ae,de){if(typeof ae!="string"||ae.length===0)throw new m("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof de!="boolean")throw new m('"allowMissing" argument must be a boolean');if(K(/^%?[^%]*%?$/,ae)===null)throw new h("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var Ue=W(ae),Oe=Ue.length>0?Ue[0]:"",Pe=be("%"+Oe+"%",de),ft=Pe.name,lt=Pe.value,_t=!1,Rt=Pe.alias;Rt&&(Oe=Rt[0],A(Ue,ve([0,1],Rt)));for(var En=1,Wt=!0;En=Ue.length){var it=q(lt,Dt);Wt=!!it,Wt&&"get"in it&&!("originalValue"in it.get)?lt=it.get:lt=lt[Dt]}else Wt=oe(lt,Dt),lt=lt[Dt];Wt&&!_t&&(me[ft]=lt)}}return lt},Ks}var Js,Mm;function rg(){if(Mm)return Js;Mm=1;var a=jf(),l=ag(),u=l([a("%String.prototype.indexOf%")]);return Js=function(f,d){var h=a(f,!!d);return typeof h=="function"&&u(f,".prototype.")>-1?l([h]):h},Js}var Fs,zm;function lg(){if(zm)return Fs;zm=1;var a=jf(),l=rg(),u=Xu(),c=el(),f=a("%Map%",!0),d=l("Map.prototype.get",!0),h=l("Map.prototype.set",!0),m=l("Map.prototype.has",!0),S=l("Map.prototype.delete",!0),y=l("Map.prototype.size",!0);return Fs=!!f&&function(){var g,w={assert:function(O){if(!w.has(O))throw new c("Side channel does not contain "+u(O))},delete:function(O){if(g){var b=S(g,O);return y(g)===0&&(g=void 0),b}return!1},get:function(O){if(g)return d(g,O)},has:function(O){return g?m(g,O):!1},set:function(O,b){g||(g=new f),h(g,O,b)}};return w},Fs}var ks,Um;function d1(){if(Um)return ks;Um=1;var a=jf(),l=rg(),u=Xu(),c=lg(),f=el(),d=a("%WeakMap%",!0),h=l("WeakMap.prototype.get",!0),m=l("WeakMap.prototype.set",!0),S=l("WeakMap.prototype.has",!0),y=l("WeakMap.prototype.delete",!0);return ks=d?function(){var g,w,O={assert:function(b){if(!O.has(b))throw new f("Side channel does not contain "+u(b))},delete:function(b){if(d&&b&&(typeof b=="object"||typeof b=="function")){if(g)return y(g,b)}else if(c&&w)return w.delete(b);return!1},get:function(b){return d&&b&&(typeof b=="object"||typeof b=="function")&&g?h(g,b):w&&w.get(b)},has:function(b){return d&&b&&(typeof b=="object"||typeof b=="function")&&g?S(g,b):!!w&&w.has(b)},set:function(b,M){d&&b&&(typeof b=="object"||typeof b=="function")?(g||(g=new d),m(g,b,M)):c&&(w||(w=c()),w.set(b,M))}};return O}:c,ks}var Ws,xm;function h1(){if(xm)return Ws;xm=1;var a=el(),l=Xu(),u=Yb(),c=lg(),f=d1(),d=f||c||u;return Ws=function(){var m,S={assert:function(y){if(!S.has(y))throw new a("Side channel does not contain "+l(y))},delete:function(y){return!!m&&m.delete(y)},get:function(y){return m&&m.get(y)},has:function(y){return!!m&&m.has(y)},set:function(y,v){m||(m=d()),m.set(y,v)}};return S},Ws}var Is,Nm;function Lf(){if(Nm)return Is;Nm=1;var a=String.prototype.replace,l=/%20/g,u={RFC1738:"RFC1738",RFC3986:"RFC3986"};return Is={default:u.RFC3986,formatters:{RFC1738:function(c){return a.call(c,l,"+")},RFC3986:function(c){return String(c)}},RFC1738:u.RFC1738,RFC3986:u.RFC3986},Is}var ef,qm;function ig(){if(qm)return ef;qm=1;var a=Lf(),l=Object.prototype.hasOwnProperty,u=Array.isArray,c=(function(){for(var T=[],D=0;D<256;++D)T.push("%"+((D<16?"0":"")+D.toString(16)).toUpperCase());return T})(),f=function(D){for(;D.length>1;){var q=D.pop(),X=q.obj[q.prop];if(u(X)){for(var Q=[],F=0;F=y?k.slice(ee,ee+y):k,ie=[],pe=0;pe=48&&te<=57||te>=65&&te<=90||te>=97&&te<=122||F===a.RFC1738&&(te===40||te===41)){ie[ie.length]=ne.charAt(pe);continue}if(te<128){ie[ie.length]=c[te];continue}if(te<2048){ie[ie.length]=c[192|te>>6]+c[128|te&63];continue}if(te<55296||te>=57344){ie[ie.length]=c[224|te>>12]+c[128|te>>6&63]+c[128|te&63];continue}pe+=1,te=65536+((te&1023)<<10|ne.charCodeAt(pe)&1023),ie[ie.length]=c[240|te>>18]+c[128|te>>12&63]+c[128|te>>6&63]+c[128|te&63]}$+=ie.join("")}return $},g=function(D){for(var q=[{obj:{o:D},prop:"o"}],X=[],Q=0;Q"u"&&(ve=0)}if(typeof ne=="function"?Z=ne(D,Z):Z instanceof Date?Z=te(Z):q==="comma"&&d(Z)&&(Z=l.maybeMap(Z,function(ft){return ft instanceof Date?te(ft):ft})),Z===null){if(F)return ee&&!_e?ee(D,v.encoder,x,"key",we):D;Z=""}if(g(Z)||l.isBuffer(Z)){if(ee){var J=_e?D:ee(D,v.encoder,x,"key",we);return[me(J)+"="+me(ee(Z,v.encoder,x,"value",we))]}return[me(D)+"="+me(String(Z))]}var K=[];if(typeof Z>"u")return K;var re;if(q==="comma"&&d(Z))_e&&ee&&(Z=l.maybeMap(Z,ee)),re=[{value:Z.length>0?Z.join(",")||null:void 0}];else if(d(ne))re=ne;else{var se=Object.keys(Z);re=ie?se.sort(ie):se}var W=$?String(D).replace(/\./g,"%2E"):String(D),be=X&&d(Z)&&Z.length===1?W+"[]":W;if(Q&&d(Z)&&Z.length===0)return be+"[]";for(var ue=0;ue"u"?T.encodeDotInKeys===!0?!0:v.allowDots:!!T.allowDots;return{addQueryPrefix:typeof T.addQueryPrefix=="boolean"?T.addQueryPrefix:v.addQueryPrefix,allowDots:k,allowEmptyArrays:typeof T.allowEmptyArrays=="boolean"?!!T.allowEmptyArrays:v.allowEmptyArrays,arrayFormat:F,charset:D,charsetSentinel:typeof T.charsetSentinel=="boolean"?T.charsetSentinel:v.charsetSentinel,commaRoundTrip:!!T.commaRoundTrip,delimiter:typeof T.delimiter>"u"?v.delimiter:T.delimiter,encode:typeof T.encode=="boolean"?T.encode:v.encode,encodeDotInKeys:typeof T.encodeDotInKeys=="boolean"?T.encodeDotInKeys:v.encodeDotInKeys,encoder:typeof T.encoder=="function"?T.encoder:v.encoder,encodeValuesOnly:typeof T.encodeValuesOnly=="boolean"?T.encodeValuesOnly:v.encodeValuesOnly,filter:Q,format:q,formatter:X,serializeDate:typeof T.serializeDate=="function"?T.serializeDate:v.serializeDate,skipNulls:typeof T.skipNulls=="boolean"?T.skipNulls:v.skipNulls,sort:typeof T.sort=="function"?T.sort:null,strictNullHandling:typeof T.strictNullHandling=="boolean"?T.strictNullHandling:v.strictNullHandling}};return tf=function(M,T){var D=M,q=b(T),X,Q;typeof q.filter=="function"?(Q=q.filter,D=Q("",D)):d(q.filter)&&(Q=q.filter,X=Q);var F=[];if(typeof D!="object"||D===null)return"";var k=f[q.arrayFormat],$=k==="comma"&&q.commaRoundTrip;X||(X=Object.keys(D)),q.sort&&X.sort(q.sort);for(var ee=a(),ne=0;ne0?we+te:""},tf}var nf,Bm;function y1(){if(Bm)return nf;Bm=1;var a=ig(),l=Object.prototype.hasOwnProperty,u=Array.isArray,c={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:a.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictNullHandling:!1,throwOnLimitExceeded:!1},f=function(w){return w.replace(/&#(\d+);/g,function(O,b){return String.fromCharCode(parseInt(b,10))})},d=function(w,O,b){if(w&&typeof w=="string"&&O.comma&&w.indexOf(",")>-1)return w.split(",");if(O.throwOnLimitExceeded&&b>=O.arrayLimit)throw new RangeError("Array limit exceeded. Only "+O.arrayLimit+" element"+(O.arrayLimit===1?"":"s")+" allowed in an array.");return w},h="utf8=%26%2310003%3B",m="utf8=%E2%9C%93",S=function(O,b){var M={__proto__:null},T=b.ignoreQueryPrefix?O.replace(/^\?/,""):O;T=T.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var D=b.parameterLimit===1/0?void 0:b.parameterLimit,q=T.split(b.delimiter,b.throwOnLimitExceeded?D+1:D);if(b.throwOnLimitExceeded&&q.length>D)throw new RangeError("Parameter limit exceeded. Only "+D+" parameter"+(D===1?"":"s")+" allowed.");var X=-1,Q,F=b.charset;if(b.charsetSentinel)for(Q=0;Q-1&&(ie=u(ie)?[ie]:ie);var pe=l.call(M,ne);pe&&b.duplicates==="combine"?M[ne]=a.combine(M[ne],ie):(!pe||b.duplicates==="last")&&(M[ne]=ie)}return M},y=function(w,O,b,M){var T=0;if(w.length>0&&w[w.length-1]==="[]"){var D=w.slice(0,-1).join("");T=Array.isArray(O)&&O[D]?O[D].length:0}for(var q=M?O:d(O,b,T),X=w.length-1;X>=0;--X){var Q,F=w[X];if(F==="[]"&&b.parseArrays)Q=b.allowEmptyArrays&&(q===""||b.strictNullHandling&&q===null)?[]:a.combine([],q);else{Q=b.plainObjects?{__proto__:null}:{};var k=F.charAt(0)==="["&&F.charAt(F.length-1)==="]"?F.slice(1,-1):F,$=b.decodeDotInKeys?k.replace(/%2E/g,"."):k,ee=parseInt($,10);!b.parseArrays&&$===""?Q={0:q}:!isNaN(ee)&&F!==$&&String(ee)===$&&ee>=0&&b.parseArrays&&ee<=b.arrayLimit?(Q=[],Q[ee]=q):$!=="__proto__"&&(Q[$]=q)}q=Q}return q},v=function(O,b,M,T){if(O){var D=M.allowDots?O.replace(/\.([^.[]+)/g,"[$1]"):O,q=/(\[[^[\]]*])/,X=/(\[[^[\]]*])/g,Q=M.depth>0&&q.exec(D),F=Q?D.slice(0,Q.index):D,k=[];if(F){if(!M.plainObjects&&l.call(Object.prototype,F)&&!M.allowPrototypes)return;k.push(F)}for(var $=0;M.depth>0&&(Q=X.exec(D))!==null&&$"u"?c.charset:O.charset,M=typeof O.duplicates>"u"?c.duplicates:O.duplicates;if(M!=="combine"&&M!=="first"&&M!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var T=typeof O.allowDots>"u"?O.decodeDotInKeys===!0?!0:c.allowDots:!!O.allowDots;return{allowDots:T,allowEmptyArrays:typeof O.allowEmptyArrays=="boolean"?!!O.allowEmptyArrays:c.allowEmptyArrays,allowPrototypes:typeof O.allowPrototypes=="boolean"?O.allowPrototypes:c.allowPrototypes,allowSparse:typeof O.allowSparse=="boolean"?O.allowSparse:c.allowSparse,arrayLimit:typeof O.arrayLimit=="number"?O.arrayLimit:c.arrayLimit,charset:b,charsetSentinel:typeof O.charsetSentinel=="boolean"?O.charsetSentinel:c.charsetSentinel,comma:typeof O.comma=="boolean"?O.comma:c.comma,decodeDotInKeys:typeof O.decodeDotInKeys=="boolean"?O.decodeDotInKeys:c.decodeDotInKeys,decoder:typeof O.decoder=="function"?O.decoder:c.decoder,delimiter:typeof O.delimiter=="string"||a.isRegExp(O.delimiter)?O.delimiter:c.delimiter,depth:typeof O.depth=="number"||O.depth===!1?+O.depth:c.depth,duplicates:M,ignoreQueryPrefix:O.ignoreQueryPrefix===!0,interpretNumericEntities:typeof O.interpretNumericEntities=="boolean"?O.interpretNumericEntities:c.interpretNumericEntities,parameterLimit:typeof O.parameterLimit=="number"?O.parameterLimit:c.parameterLimit,parseArrays:O.parseArrays!==!1,plainObjects:typeof O.plainObjects=="boolean"?O.plainObjects:c.plainObjects,strictDepth:typeof O.strictDepth=="boolean"?!!O.strictDepth:c.strictDepth,strictNullHandling:typeof O.strictNullHandling=="boolean"?O.strictNullHandling:c.strictNullHandling,throwOnLimitExceeded:typeof O.throwOnLimitExceeded=="boolean"?O.throwOnLimitExceeded:!1}};return nf=function(w,O){var b=g(O);if(w===""||w===null||typeof w>"u")return b.plainObjects?{__proto__:null}:{};for(var M=typeof w=="string"?S(w,b):w,T=b.plainObjects?{__proto__:null}:{},D=Object.keys(M),q=0;q-1&&a%1==0&&a-1&&a%1==0&&a<=k1}function W1(a){return a!=null&&Qf(a.length)&&!sg(a)}var I1=Object.prototype;function dg(a){var l=a&&a.constructor,u=typeof l=="function"&&l.prototype||I1;return a===u}function eE(a,l){for(var u=-1,c=Array(a);++u-1}function uA(a,l){var u=this.__data__,c=Zu(u,a);return c<0?(++this.size,u.push([a,l])):u[c][1]=l,this}function na(a){var l=-1,u=a==null?0:a.length;for(this.clear();++lm))return!1;var y=d.get(a),v=d.get(l);if(y&&v)return y==l&&v==a;var g=-1,w=!0,O=u&n_?new Yu:void 0;for(d.set(a,l),d.set(l,a);++g":">",'"':""","'":"'"},D_=TA(R_),Rg=/[&<>"']/g,C_=RegExp(Rg.source);function M_(a){return a=Sg(a),a&&C_.test(a)?a.replace(Rg,D_):a}var z_=Object.prototype,U_=z_.hasOwnProperty;function x_(a,l){return a!=null&&U_.call(a,l)}function N_(a,l){return a!=null&&w_(a,l,x_)}function Dg(a,l){return wg(a,l)}function q_(a,l,u,c){if(!Fr(a))return a;l=Zf(l,a);for(var f=-1,d=l.length,h=d-1,m=a;m!=null&&++fl=>{const u=H_.call(l);return a[u]||(a[u]=u.slice(8,-1).toLowerCase())})(Object.create(null)),Sn=a=>(a=a.toLowerCase(),l=>Ju(l)===a),Fu=a=>l=>typeof l===a,{isArray:nl}=Array,Wr=Fu("undefined");function fi(a){return a!==null&&!Wr(a)&&a.constructor!==null&&!Wr(a.constructor)&&Yt(a.constructor.isBuffer)&&a.constructor.isBuffer(a)}const zg=Sn("ArrayBuffer");function B_(a){let l;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?l=ArrayBuffer.isView(a):l=a&&a.buffer&&zg(a.buffer),l}const j_=Fu("string"),Yt=Fu("function"),Ug=Fu("number"),di=a=>a!==null&&typeof a=="object",L_=a=>a===!0||a===!1,Nu=a=>{if(Ju(a)!=="object")return!1;const l=Jf(a);return(l===null||l===Object.prototype||Object.getPrototypeOf(l)===null)&&!(Mg in a)&&!(Ku in a)},G_=a=>{if(!di(a)||fi(a))return!1;try{return Object.keys(a).length===0&&Object.getPrototypeOf(a)===Object.prototype}catch{return!1}},Y_=Sn("Date"),V_=Sn("File"),Q_=Sn("Blob"),X_=Sn("FileList"),$_=a=>di(a)&&Yt(a.pipe),Z_=a=>{let l;return a&&(typeof FormData=="function"&&a instanceof FormData||Yt(a.append)&&((l=Ju(a))==="formdata"||l==="object"&&Yt(a.toString)&&a.toString()==="[object FormData]"))},P_=Sn("URLSearchParams"),[K_,J_,F_,k_]=["ReadableStream","Request","Response","Headers"].map(Sn),W_=a=>a.trim?a.trim():a.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function hi(a,l,{allOwnKeys:u=!1}={}){if(a===null||typeof a>"u")return;let c,f;if(typeof a!="object"&&(a=[a]),nl(a))for(c=0,f=a.length;c0;)if(f=u[c],l===f.toLowerCase())return f;return null}const tr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Ng=a=>!Wr(a)&&a!==tr;function Of(){const{caseless:a,skipUndefined:l}=Ng(this)&&this||{},u={},c=(f,d)=>{const h=a&&xg(u,d)||d;Nu(u[h])&&Nu(f)?u[h]=Of(u[h],f):Nu(f)?u[h]=Of({},f):nl(f)?u[h]=f.slice():(!l||!Wr(f))&&(u[h]=f)};for(let f=0,d=arguments.length;f(hi(l,(f,d)=>{u&&Yt(f)?a[d]=Cg(f,u):a[d]=f},{allOwnKeys:c}),a),eO=a=>(a.charCodeAt(0)===65279&&(a=a.slice(1)),a),tO=(a,l,u,c)=>{a.prototype=Object.create(l.prototype,c),a.prototype.constructor=a,Object.defineProperty(a,"super",{value:l.prototype}),u&&Object.assign(a.prototype,u)},nO=(a,l,u,c)=>{let f,d,h;const m={};if(l=l||{},a==null)return l;do{for(f=Object.getOwnPropertyNames(a),d=f.length;d-- >0;)h=f[d],(!c||c(h,a,l))&&!m[h]&&(l[h]=a[h],m[h]=!0);a=u!==!1&&Jf(a)}while(a&&(!u||u(a,l))&&a!==Object.prototype);return l},aO=(a,l,u)=>{a=String(a),(u===void 0||u>a.length)&&(u=a.length),u-=l.length;const c=a.indexOf(l,u);return c!==-1&&c===u},rO=a=>{if(!a)return null;if(nl(a))return a;let l=a.length;if(!Ug(l))return null;const u=new Array(l);for(;l-- >0;)u[l]=a[l];return u},lO=(a=>l=>a&&l instanceof a)(typeof Uint8Array<"u"&&Jf(Uint8Array)),iO=(a,l)=>{const c=(a&&a[Ku]).call(a);let f;for(;(f=c.next())&&!f.done;){const d=f.value;l.call(a,d[0],d[1])}},uO=(a,l)=>{let u;const c=[];for(;(u=a.exec(l))!==null;)c.push(u);return c},oO=Sn("HTMLFormElement"),cO=a=>a.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(u,c,f){return c.toUpperCase()+f}),dv=(({hasOwnProperty:a})=>(l,u)=>a.call(l,u))(Object.prototype),sO=Sn("RegExp"),qg=(a,l)=>{const u=Object.getOwnPropertyDescriptors(a),c={};hi(u,(f,d)=>{let h;(h=l(f,d,a))!==!1&&(c[d]=h||f)}),Object.defineProperties(a,c)},fO=a=>{qg(a,(l,u)=>{if(Yt(a)&&["arguments","caller","callee"].indexOf(u)!==-1)return!1;const c=a[u];if(Yt(c)){if(l.enumerable=!1,"writable"in l){l.writable=!1;return}l.set||(l.set=()=>{throw Error("Can not rewrite read-only method '"+u+"'")})}})},dO=(a,l)=>{const u={},c=f=>{f.forEach(d=>{u[d]=!0})};return nl(a)?c(a):c(String(a).split(l)),u},hO=()=>{},pO=(a,l)=>a!=null&&Number.isFinite(a=+a)?a:l;function yO(a){return!!(a&&Yt(a.append)&&a[Mg]==="FormData"&&a[Ku])}const mO=a=>{const l=new Array(10),u=(c,f)=>{if(di(c)){if(l.indexOf(c)>=0)return;if(fi(c))return c;if(!("toJSON"in c)){l[f]=c;const d=nl(c)?[]:{};return hi(c,(h,m)=>{const S=u(h,f+1);!Wr(S)&&(d[m]=S)}),l[f]=void 0,d}}return c};return u(a,0)},vO=Sn("AsyncFunction"),gO=a=>a&&(di(a)||Yt(a))&&Yt(a.then)&&Yt(a.catch),Hg=((a,l)=>a?setImmediate:l?((u,c)=>(tr.addEventListener("message",({source:f,data:d})=>{f===tr&&d===u&&c.length&&c.shift()()},!1),f=>{c.push(f),tr.postMessage(u,"*")}))(`axios@${Math.random()}`,[]):u=>setTimeout(u))(typeof setImmediate=="function",Yt(tr.postMessage)),SO=typeof queueMicrotask<"u"?queueMicrotask.bind(tr):typeof process<"u"&&process.nextTick||Hg,bO=a=>a!=null&&Yt(a[Ku]),B={isArray:nl,isArrayBuffer:zg,isBuffer:fi,isFormData:Z_,isArrayBufferView:B_,isString:j_,isNumber:Ug,isBoolean:L_,isObject:di,isPlainObject:Nu,isEmptyObject:G_,isReadableStream:K_,isRequest:J_,isResponse:F_,isHeaders:k_,isUndefined:Wr,isDate:Y_,isFile:V_,isBlob:Q_,isRegExp:sO,isFunction:Yt,isStream:$_,isURLSearchParams:P_,isTypedArray:lO,isFileList:X_,forEach:hi,merge:Of,extend:I_,trim:W_,stripBOM:eO,inherits:tO,toFlatObject:nO,kindOf:Ju,kindOfTest:Sn,endsWith:aO,toArray:rO,forEachEntry:iO,matchAll:uO,isHTMLForm:oO,hasOwnProperty:dv,hasOwnProp:dv,reduceDescriptors:qg,freezeMethods:fO,toObjectSet:dO,toCamelCase:cO,noop:hO,toFiniteNumber:pO,findKey:xg,global:tr,isContextDefined:Ng,isSpecCompliantForm:yO,toJSONObject:mO,isAsyncFn:vO,isThenable:gO,setImmediate:Hg,asap:SO,isIterable:bO};function Ae(a,l,u,c,f){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=a,this.name="AxiosError",l&&(this.code=l),u&&(this.config=u),c&&(this.request=c),f&&(this.response=f,this.status=f.status?f.status:null)}B.inherits(Ae,Error,{toJSON:function(){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:B.toJSONObject(this.config),code:this.code,status:this.status}}});const Bg=Ae.prototype,jg={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(a=>{jg[a]={value:a}});Object.defineProperties(Ae,jg);Object.defineProperty(Bg,"isAxiosError",{value:!0});Ae.from=(a,l,u,c,f,d)=>{const h=Object.create(Bg);B.toFlatObject(a,h,function(v){return v!==Error.prototype},y=>y!=="isAxiosError");const m=a&&a.message?a.message:"Error",S=l==null&&a?a.code:l;return Ae.call(h,m,S,u,c,f),a&&h.cause==null&&Object.defineProperty(h,"cause",{value:a,configurable:!0}),h.name=a&&a.name||"Error",d&&Object.assign(h,d),h};const EO=null;function wf(a){return B.isPlainObject(a)||B.isArray(a)}function Lg(a){return B.endsWith(a,"[]")?a.slice(0,-2):a}function hv(a,l,u){return a?a.concat(l).map(function(f,d){return f=Lg(f),!u&&d?"["+f+"]":f}).join(u?".":""):l}function AO(a){return B.isArray(a)&&!a.some(wf)}const TO=B.toFlatObject(B,{},null,function(l){return/^is[A-Z]/.test(l)});function ku(a,l,u){if(!B.isObject(a))throw new TypeError("target must be an object");l=l||new FormData,u=B.toFlatObject(u,{metaTokens:!0,dots:!1,indexes:!1},!1,function(M,T){return!B.isUndefined(T[M])});const c=u.metaTokens,f=u.visitor||v,d=u.dots,h=u.indexes,S=(u.Blob||typeof Blob<"u"&&Blob)&&B.isSpecCompliantForm(l);if(!B.isFunction(f))throw new TypeError("visitor must be a function");function y(b){if(b===null)return"";if(B.isDate(b))return b.toISOString();if(B.isBoolean(b))return b.toString();if(!S&&B.isBlob(b))throw new Ae("Blob is not supported. Use a Buffer instead.");return B.isArrayBuffer(b)||B.isTypedArray(b)?S&&typeof Blob=="function"?new Blob([b]):Buffer.from(b):b}function v(b,M,T){let D=b;if(b&&!T&&typeof b=="object"){if(B.endsWith(M,"{}"))M=c?M:M.slice(0,-2),b=JSON.stringify(b);else if(B.isArray(b)&&AO(b)||(B.isFileList(b)||B.endsWith(M,"[]"))&&(D=B.toArray(b)))return M=Lg(M),D.forEach(function(X,Q){!(B.isUndefined(X)||X===null)&&l.append(h===!0?hv([M],Q,d):h===null?M:M+"[]",y(X))}),!1}return wf(b)?!0:(l.append(hv(T,M,d),y(b)),!1)}const g=[],w=Object.assign(TO,{defaultVisitor:v,convertValue:y,isVisitable:wf});function O(b,M){if(!B.isUndefined(b)){if(g.indexOf(b)!==-1)throw Error("Circular reference detected in "+M.join("."));g.push(b),B.forEach(b,function(D,q){(!(B.isUndefined(D)||D===null)&&f.call(l,D,B.isString(q)?q.trim():q,M,w))===!0&&O(D,M?M.concat(q):[q])}),g.pop()}}if(!B.isObject(a))throw new TypeError("data must be an object");return O(a),l}function pv(a){const l={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(a).replace(/[!'()~]|%20|%00/g,function(c){return l[c]})}function Ff(a,l){this._pairs=[],a&&ku(a,this,l)}const Gg=Ff.prototype;Gg.append=function(l,u){this._pairs.push([l,u])};Gg.toString=function(l){const u=l?function(c){return l.call(this,c,pv)}:pv;return this._pairs.map(function(f){return u(f[0])+"="+u(f[1])},"").join("&")};function _O(a){return encodeURIComponent(a).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Yg(a,l,u){if(!l)return a;const c=u&&u.encode||_O;B.isFunction(u)&&(u={serialize:u});const f=u&&u.serialize;let d;if(f?d=f(l,u):d=B.isURLSearchParams(l)?l.toString():new Ff(l,u).toString(c),d){const h=a.indexOf("#");h!==-1&&(a=a.slice(0,h)),a+=(a.indexOf("?")===-1?"?":"&")+d}return a}class yv{constructor(){this.handlers=[]}use(l,u,c){return this.handlers.push({fulfilled:l,rejected:u,synchronous:c?c.synchronous:!1,runWhen:c?c.runWhen:null}),this.handlers.length-1}eject(l){this.handlers[l]&&(this.handlers[l]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(l){B.forEach(this.handlers,function(c){c!==null&&l(c)})}}const Vg={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},OO=typeof URLSearchParams<"u"?URLSearchParams:Ff,wO=typeof FormData<"u"?FormData:null,RO=typeof Blob<"u"?Blob:null,DO={isBrowser:!0,classes:{URLSearchParams:OO,FormData:wO,Blob:RO},protocols:["http","https","file","blob","url","data"]},kf=typeof window<"u"&&typeof document<"u",Rf=typeof navigator=="object"&&navigator||void 0,CO=kf&&(!Rf||["ReactNative","NativeScript","NS"].indexOf(Rf.product)<0),MO=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",zO=kf&&window.location.href||"http://localhost",UO=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:kf,hasStandardBrowserEnv:CO,hasStandardBrowserWebWorkerEnv:MO,navigator:Rf,origin:zO},Symbol.toStringTag,{value:"Module"})),wt={...UO,...DO};function xO(a,l){return ku(a,new wt.classes.URLSearchParams,{visitor:function(u,c,f,d){return wt.isNode&&B.isBuffer(u)?(this.append(c,u.toString("base64")),!1):d.defaultVisitor.apply(this,arguments)},...l})}function NO(a){return B.matchAll(/\w+|\[(\w*)]/g,a).map(l=>l[0]==="[]"?"":l[1]||l[0])}function qO(a){const l={},u=Object.keys(a);let c;const f=u.length;let d;for(c=0;c=u.length;return h=!h&&B.isArray(f)?f.length:h,S?(B.hasOwnProp(f,h)?f[h]=[f[h],c]:f[h]=c,!m):((!f[h]||!B.isObject(f[h]))&&(f[h]=[]),l(u,c,f[h],d)&&B.isArray(f[h])&&(f[h]=qO(f[h])),!m)}if(B.isFormData(a)&&B.isFunction(a.entries)){const u={};return B.forEachEntry(a,(c,f)=>{l(NO(c),f,u,0)}),u}return null}function HO(a,l,u){if(B.isString(a))try{return(l||JSON.parse)(a),B.trim(a)}catch(c){if(c.name!=="SyntaxError")throw c}return(u||JSON.stringify)(a)}const pi={transitional:Vg,adapter:["xhr","http","fetch"],transformRequest:[function(l,u){const c=u.getContentType()||"",f=c.indexOf("application/json")>-1,d=B.isObject(l);if(d&&B.isHTMLForm(l)&&(l=new FormData(l)),B.isFormData(l))return f?JSON.stringify(Qg(l)):l;if(B.isArrayBuffer(l)||B.isBuffer(l)||B.isStream(l)||B.isFile(l)||B.isBlob(l)||B.isReadableStream(l))return l;if(B.isArrayBufferView(l))return l.buffer;if(B.isURLSearchParams(l))return u.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),l.toString();let m;if(d){if(c.indexOf("application/x-www-form-urlencoded")>-1)return xO(l,this.formSerializer).toString();if((m=B.isFileList(l))||c.indexOf("multipart/form-data")>-1){const S=this.env&&this.env.FormData;return ku(m?{"files[]":l}:l,S&&new S,this.formSerializer)}}return d||f?(u.setContentType("application/json",!1),HO(l)):l}],transformResponse:[function(l){const u=this.transitional||pi.transitional,c=u&&u.forcedJSONParsing,f=this.responseType==="json";if(B.isResponse(l)||B.isReadableStream(l))return l;if(l&&B.isString(l)&&(c&&!this.responseType||f)){const h=!(u&&u.silentJSONParsing)&&f;try{return JSON.parse(l,this.parseReviver)}catch(m){if(h)throw m.name==="SyntaxError"?Ae.from(m,Ae.ERR_BAD_RESPONSE,this,null,this.response):m}}return l}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:wt.classes.FormData,Blob:wt.classes.Blob},validateStatus:function(l){return l>=200&&l<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};B.forEach(["delete","get","head","post","put","patch"],a=>{pi.headers[a]={}});const BO=B.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),jO=a=>{const l={};let u,c,f;return a&&a.split(` `).forEach(function(h){f=h.indexOf(":"),u=h.substring(0,f).trim().toLowerCase(),c=h.substring(f+1).trim(),!(!u||l[u]&&BO[u])&&(u==="set-cookie"?l[u]?l[u].push(c):l[u]=[c]:l[u]=l[u]?l[u]+", "+c:c)}),l},mv=Symbol("internals");function ei(a){return a&&String(a).trim().toLowerCase()}function qu(a){return a===!1||a==null?a:B.isArray(a)?a.map(qu):String(a)}function LO(a){const l=Object.create(null),u=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let c;for(;c=u.exec(a);)l[c[1]]=c[2];return l}const GO=a=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(a.trim());function of(a,l,u,c,f){if(B.isFunction(c))return c.call(this,l,u);if(f&&(l=u),!!B.isString(l)){if(B.isString(c))return l.indexOf(c)!==-1;if(B.isRegExp(c))return c.test(l)}}function YO(a){return a.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(l,u,c)=>u.toUpperCase()+c)}function VO(a,l){const u=B.toCamelCase(" "+l);["get","set","has"].forEach(c=>{Object.defineProperty(a,c+u,{value:function(f,d,h){return this[c].call(this,l,f,d,h)},configurable:!0})})}let Vt=class{constructor(l){l&&this.set(l)}set(l,u,c){const f=this;function d(m,S,y){const v=ei(S);if(!v)throw new Error("header name must be a non-empty string");const g=B.findKey(f,v);(!g||f[g]===void 0||y===!0||y===void 0&&f[g]!==!1)&&(f[g||S]=qu(m))}const h=(m,S)=>B.forEach(m,(y,v)=>d(y,v,S));if(B.isPlainObject(l)||l instanceof this.constructor)h(l,u);else if(B.isString(l)&&(l=l.trim())&&!GO(l))h(jO(l),u);else if(B.isObject(l)&&B.isIterable(l)){let m={},S,y;for(const v of l){if(!B.isArray(v))throw TypeError("Object iterator must return a key-value pair");m[y=v[0]]=(S=m[y])?B.isArray(S)?[...S,v[1]]:[S,v[1]]:v[1]}h(m,u)}else l!=null&&d(u,l,c);return this}get(l,u){if(l=ei(l),l){const c=B.findKey(this,l);if(c){const f=this[c];if(!u)return f;if(u===!0)return LO(f);if(B.isFunction(u))return u.call(this,f,c);if(B.isRegExp(u))return u.exec(f);throw new TypeError("parser must be boolean|regexp|function")}}}has(l,u){if(l=ei(l),l){const c=B.findKey(this,l);return!!(c&&this[c]!==void 0&&(!u||of(this,this[c],c,u)))}return!1}delete(l,u){const c=this;let f=!1;function d(h){if(h=ei(h),h){const m=B.findKey(c,h);m&&(!u||of(c,c[m],m,u))&&(delete c[m],f=!0)}}return B.isArray(l)?l.forEach(d):d(l),f}clear(l){const u=Object.keys(this);let c=u.length,f=!1;for(;c--;){const d=u[c];(!l||of(this,this[d],d,l,!0))&&(delete this[d],f=!0)}return f}normalize(l){const u=this,c={};return B.forEach(this,(f,d)=>{const h=B.findKey(c,d);if(h){u[h]=qu(f),delete u[d];return}const m=l?YO(d):String(d).trim();m!==d&&delete u[d],u[m]=qu(f),c[m]=!0}),this}concat(...l){return this.constructor.concat(this,...l)}toJSON(l){const u=Object.create(null);return B.forEach(this,(c,f)=>{c!=null&&c!==!1&&(u[f]=l&&B.isArray(c)?c.join(", "):c)}),u}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([l,u])=>l+": "+u).join(` -`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(l){return l instanceof this?l:new this(l)}static concat(l,...u){const c=new this(l);return u.forEach(f=>c.set(f)),c}static accessor(l){const c=(this[mv]=this[mv]={accessors:{}}).accessors,f=this.prototype;function d(h){const m=ei(h);c[m]||(VO(f,h),c[m]=!0)}return B.isArray(l)?l.forEach(d):d(l),this}};Vt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);B.reduceDescriptors(Vt.prototype,({value:a},l)=>{let u=l[0].toUpperCase()+l.slice(1);return{get:()=>a,set(c){this[u]=c}}});B.freezeMethods(Vt);function cf(a,l){const u=this||pi,c=l||u,f=Vt.from(c.headers);let d=c.data;return B.forEach(a,function(m){d=m.call(u,d,f.normalize(),l?l.status:void 0)}),f.normalize(),d}function Xg(a){return!!(a&&a.__CANCEL__)}function al(a,l,u){Ae.call(this,a??"canceled",Ae.ERR_CANCELED,l,u),this.name="CanceledError"}B.inherits(al,Ae,{__CANCEL__:!0});function $g(a,l,u){const c=u.config.validateStatus;!u.status||!c||c(u.status)?a(u):l(new Ae("Request failed with status code "+u.status,[Ae.ERR_BAD_REQUEST,Ae.ERR_BAD_RESPONSE][Math.floor(u.status/100)-4],u.config,u.request,u))}function QO(a){const l=/^([-+\w]{1,25})(:?\/\/|:)/.exec(a);return l&&l[1]||""}function XO(a,l){a=a||10;const u=new Array(a),c=new Array(a);let f=0,d=0,h;return l=l!==void 0?l:1e3,function(S){const y=Date.now(),v=c[d];h||(h=y),u[f]=S,c[f]=y;let g=d,w=0;for(;g!==f;)w+=u[g++],g=g%a;if(f=(f+1)%a,f===d&&(d=(d+1)%a),y-h{u=v,f=null,d&&(clearTimeout(d),d=null),a(...y)};return[(...y)=>{const v=Date.now(),g=v-u;g>=c?h(y,v):(f=y,d||(d=setTimeout(()=>{d=null,h(f)},c-g)))},()=>f&&h(f)]}const Vu=(a,l,u=3)=>{let c=0;const f=XO(50,250);return $O(d=>{const h=d.loaded,m=d.lengthComputable?d.total:void 0,S=h-c,y=f(S),v=h<=m;c=h;const g={loaded:h,total:m,progress:m?h/m:void 0,bytes:S,rate:y||void 0,estimated:y&&m&&v?(m-h)/y:void 0,event:d,lengthComputable:m!=null,[l?"download":"upload"]:!0};a(g)},u)},vv=(a,l)=>{const u=a!=null;return[c=>l[0]({lengthComputable:u,total:a,loaded:c}),l[1]]},gv=a=>(...l)=>B.asap(()=>a(...l)),PO=wt.hasStandardBrowserEnv?((a,l)=>u=>(u=new URL(u,wt.origin),a.protocol===u.protocol&&a.host===u.host&&(l||a.port===u.port)))(new URL(wt.origin),wt.navigator&&/(msie|trident)/i.test(wt.navigator.userAgent)):()=>!0,ZO=wt.hasStandardBrowserEnv?{write(a,l,u,c,f,d,h){if(typeof document>"u")return;const m=[`${a}=${encodeURIComponent(l)}`];B.isNumber(u)&&m.push(`expires=${new Date(u).toUTCString()}`),B.isString(c)&&m.push(`path=${c}`),B.isString(f)&&m.push(`domain=${f}`),d===!0&&m.push("secure"),B.isString(h)&&m.push(`SameSite=${h}`),document.cookie=m.join("; ")},read(a){if(typeof document>"u")return null;const l=document.cookie.match(new RegExp("(?:^|; )"+a+"=([^;]*)"));return l?decodeURIComponent(l[1]):null},remove(a){this.write(a,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function KO(a){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(a)}function JO(a,l){return l?a.replace(/\/?\/$/,"")+"/"+l.replace(/^\/+/,""):a}function Pg(a,l,u){let c=!KO(l);return a&&(c||u==!1)?JO(a,l):l}const Sv=a=>a instanceof Vt?{...a}:a;function ir(a,l){l=l||{};const u={};function c(y,v,g,w){return B.isPlainObject(y)&&B.isPlainObject(v)?B.merge.call({caseless:w},y,v):B.isPlainObject(v)?B.merge({},v):B.isArray(v)?v.slice():v}function f(y,v,g,w){if(B.isUndefined(v)){if(!B.isUndefined(y))return c(void 0,y,g,w)}else return c(y,v,g,w)}function d(y,v){if(!B.isUndefined(v))return c(void 0,v)}function h(y,v){if(B.isUndefined(v)){if(!B.isUndefined(y))return c(void 0,y)}else return c(void 0,v)}function m(y,v,g){if(g in l)return c(y,v);if(g in a)return c(void 0,y)}const S={url:d,method:d,data:d,baseURL:h,transformRequest:h,transformResponse:h,paramsSerializer:h,timeout:h,timeoutMessage:h,withCredentials:h,withXSRFToken:h,adapter:h,responseType:h,xsrfCookieName:h,xsrfHeaderName:h,onUploadProgress:h,onDownloadProgress:h,decompress:h,maxContentLength:h,maxBodyLength:h,beforeRedirect:h,transport:h,httpAgent:h,httpsAgent:h,cancelToken:h,socketPath:h,responseEncoding:h,validateStatus:m,headers:(y,v,g)=>f(Sv(y),Sv(v),g,!0)};return B.forEach(Object.keys({...a,...l}),function(v){const g=S[v]||f,w=g(a[v],l[v],v);B.isUndefined(w)&&g!==m||(u[v]=w)}),u}const Zg=a=>{const l=ir({},a);let{data:u,withXSRFToken:c,xsrfHeaderName:f,xsrfCookieName:d,headers:h,auth:m}=l;if(l.headers=h=Vt.from(h),l.url=Yg(Pg(l.baseURL,l.url,l.allowAbsoluteUrls),a.params,a.paramsSerializer),m&&h.set("Authorization","Basic "+btoa((m.username||"")+":"+(m.password?unescape(encodeURIComponent(m.password)):""))),B.isFormData(u)){if(wt.hasStandardBrowserEnv||wt.hasStandardBrowserWebWorkerEnv)h.setContentType(void 0);else if(B.isFunction(u.getHeaders)){const S=u.getHeaders(),y=["content-type","content-length"];Object.entries(S).forEach(([v,g])=>{y.includes(v.toLowerCase())&&h.set(v,g)})}}if(wt.hasStandardBrowserEnv&&(c&&B.isFunction(c)&&(c=c(l)),c||c!==!1&&PO(l.url))){const S=f&&d&&ZO.read(d);S&&h.set(f,S)}return l},FO=typeof XMLHttpRequest<"u",kO=FO&&function(a){return new Promise(function(u,c){const f=Zg(a);let d=f.data;const h=Vt.from(f.headers).normalize();let{responseType:m,onUploadProgress:S,onDownloadProgress:y}=f,v,g,w,O,b;function M(){O&&O(),b&&b(),f.cancelToken&&f.cancelToken.unsubscribe(v),f.signal&&f.signal.removeEventListener("abort",v)}let T=new XMLHttpRequest;T.open(f.method.toUpperCase(),f.url,!0),T.timeout=f.timeout;function D(){if(!T)return;const X=Vt.from("getAllResponseHeaders"in T&&T.getAllResponseHeaders()),F={data:!m||m==="text"||m==="json"?T.responseText:T.response,status:T.status,statusText:T.statusText,headers:X,config:a,request:T};$g(function($){u($),M()},function($){c($),M()},F),T=null}"onloadend"in T?T.onloadend=D:T.onreadystatechange=function(){!T||T.readyState!==4||T.status===0&&!(T.responseURL&&T.responseURL.indexOf("file:")===0)||setTimeout(D)},T.onabort=function(){T&&(c(new Ae("Request aborted",Ae.ECONNABORTED,a,T)),T=null)},T.onerror=function(Q){const F=Q&&Q.message?Q.message:"Network Error",k=new Ae(F,Ae.ERR_NETWORK,a,T);k.event=Q||null,c(k),T=null},T.ontimeout=function(){let Q=f.timeout?"timeout of "+f.timeout+"ms exceeded":"timeout exceeded";const F=f.transitional||Vg;f.timeoutErrorMessage&&(Q=f.timeoutErrorMessage),c(new Ae(Q,F.clarifyTimeoutError?Ae.ETIMEDOUT:Ae.ECONNABORTED,a,T)),T=null},d===void 0&&h.setContentType(null),"setRequestHeader"in T&&B.forEach(h.toJSON(),function(Q,F){T.setRequestHeader(F,Q)}),B.isUndefined(f.withCredentials)||(T.withCredentials=!!f.withCredentials),m&&m!=="json"&&(T.responseType=f.responseType),y&&([w,b]=Vu(y,!0),T.addEventListener("progress",w)),S&&T.upload&&([g,O]=Vu(S),T.upload.addEventListener("progress",g),T.upload.addEventListener("loadend",O)),(f.cancelToken||f.signal)&&(v=X=>{T&&(c(!X||X.type?new al(null,a,T):X),T.abort(),T=null)},f.cancelToken&&f.cancelToken.subscribe(v),f.signal&&(f.signal.aborted?v():f.signal.addEventListener("abort",v)));const q=QO(f.url);if(q&&wt.protocols.indexOf(q)===-1){c(new Ae("Unsupported protocol "+q+":",Ae.ERR_BAD_REQUEST,a));return}T.send(d||null)})},WO=(a,l)=>{const{length:u}=a=a?a.filter(Boolean):[];if(l||u){let c=new AbortController,f;const d=function(y){if(!f){f=!0,m();const v=y instanceof Error?y:this.reason;c.abort(v instanceof Ae?v:new al(v instanceof Error?v.message:v))}};let h=l&&setTimeout(()=>{h=null,d(new Ae(`timeout ${l} of ms exceeded`,Ae.ETIMEDOUT))},l);const m=()=>{a&&(h&&clearTimeout(h),h=null,a.forEach(y=>{y.unsubscribe?y.unsubscribe(d):y.removeEventListener("abort",d)}),a=null)};a.forEach(y=>y.addEventListener("abort",d));const{signal:S}=c;return S.unsubscribe=()=>B.asap(m),S}},IO=function*(a,l){let u=a.byteLength;if(u{const f=e2(a,l);let d=0,h,m=S=>{h||(h=!0,c&&c(S))};return new ReadableStream({async pull(S){try{const{done:y,value:v}=await f.next();if(y){m(),S.close();return}let g=v.byteLength;if(u){let w=d+=g;u(w)}S.enqueue(new Uint8Array(v))}catch(y){throw m(y),y}},cancel(S){return m(S),f.return()}},{highWaterMark:2})},Ev=64*1024,{isFunction:zu}=B,n2=(({Request:a,Response:l})=>({Request:a,Response:l}))(B.global),{ReadableStream:Av,TextEncoder:Tv}=B.global,_v=(a,...l)=>{try{return!!a(...l)}catch{return!1}},a2=a=>{a=B.merge.call({skipUndefined:!0},n2,a);const{fetch:l,Request:u,Response:c}=a,f=l?zu(l):typeof fetch=="function",d=zu(u),h=zu(c);if(!f)return!1;const m=f&&zu(Av),S=f&&(typeof Tv=="function"?(b=>M=>b.encode(M))(new Tv):async b=>new Uint8Array(await new u(b).arrayBuffer())),y=d&&m&&_v(()=>{let b=!1;const M=new u(wt.origin,{body:new Av,method:"POST",get duplex(){return b=!0,"half"}}).headers.has("Content-Type");return b&&!M}),v=h&&m&&_v(()=>B.isReadableStream(new c("").body)),g={stream:v&&(b=>b.body)};f&&["text","arrayBuffer","blob","formData","stream"].forEach(b=>{!g[b]&&(g[b]=(M,T)=>{let D=M&&M[b];if(D)return D.call(M);throw new Ae(`Response type '${b}' is not supported`,Ae.ERR_NOT_SUPPORT,T)})});const w=async b=>{if(b==null)return 0;if(B.isBlob(b))return b.size;if(B.isSpecCompliantForm(b))return(await new u(wt.origin,{method:"POST",body:b}).arrayBuffer()).byteLength;if(B.isArrayBufferView(b)||B.isArrayBuffer(b))return b.byteLength;if(B.isURLSearchParams(b)&&(b=b+""),B.isString(b))return(await S(b)).byteLength},O=async(b,M)=>{const T=B.toFiniteNumber(b.getContentLength());return T??w(M)};return async b=>{let{url:M,method:T,data:D,signal:q,cancelToken:X,timeout:Q,onDownloadProgress:F,onUploadProgress:k,responseType:$,headers:ee,withCredentials:ne="same-origin",fetchOptions:ie}=Zg(b),pe=l||fetch;$=$?($+"").toLowerCase():"text";let te=WO([q,X&&X.toAbortSignal()],Q),we=null;const me=te&&te.unsubscribe&&(()=>{te.unsubscribe()});let _e;try{if(k&&y&&T!=="get"&&T!=="head"&&(_e=await O(ee,D))!==0){let A=new u(M,{method:"POST",body:D,duplex:"half"}),L;if(B.isFormData(D)&&(L=A.headers.get("content-type"))&&ee.setContentType(L),A.body){const[J,K]=vv(_e,Vu(gv(k)));D=bv(A.body,Ev,J,K)}}B.isString(ne)||(ne=ne?"include":"omit");const x=d&&"credentials"in u.prototype,Z={...ie,signal:te,method:T.toUpperCase(),headers:ee.normalize().toJSON(),body:D,duplex:"half",credentials:x?ne:void 0};we=d&&new u(M,Z);let P=await(d?pe(we,ie):pe(M,Z));const oe=v&&($==="stream"||$==="response");if(v&&(F||oe&&me)){const A={};["status","statusText","headers"].forEach(re=>{A[re]=P[re]});const L=B.toFiniteNumber(P.headers.get("content-length")),[J,K]=F&&vv(L,Vu(gv(F),!0))||[];P=new c(bv(P.body,Ev,J,()=>{K&&K(),me&&me()}),A)}$=$||"text";let ve=await g[B.findKey(g,$)||"text"](P,b);return!oe&&me&&me(),await new Promise((A,L)=>{$g(A,L,{data:ve,headers:Vt.from(P.headers),status:P.status,statusText:P.statusText,config:b,request:we})})}catch(x){throw me&&me(),x&&x.name==="TypeError"&&/Load failed|fetch/i.test(x.message)?Object.assign(new Ae("Network Error",Ae.ERR_NETWORK,b,we),{cause:x.cause||x}):Ae.from(x,x&&x.code,b,we)}}},r2=new Map,Kg=a=>{let l=a&&a.env||{};const{fetch:u,Request:c,Response:f}=l,d=[c,f,u];let h=d.length,m=h,S,y,v=r2;for(;m--;)S=d[m],y=v.get(S),y===void 0&&v.set(S,y=m?new Map:a2(l)),v=y;return y};Kg();const Wf={http:EO,xhr:kO,fetch:{get:Kg}};B.forEach(Wf,(a,l)=>{if(a){try{Object.defineProperty(a,"name",{value:l})}catch{}Object.defineProperty(a,"adapterName",{value:l})}});const Ov=a=>`- ${a}`,l2=a=>B.isFunction(a)||a===null||a===!1;function i2(a,l){a=B.isArray(a)?a:[a];const{length:u}=a;let c,f;const d={};for(let h=0;h`adapter ${S} `+(y===!1?"is not supported by the environment":"is not available in the build"));let m=u?h.length>1?`since : +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(l){return l instanceof this?l:new this(l)}static concat(l,...u){const c=new this(l);return u.forEach(f=>c.set(f)),c}static accessor(l){const c=(this[mv]=this[mv]={accessors:{}}).accessors,f=this.prototype;function d(h){const m=ei(h);c[m]||(VO(f,h),c[m]=!0)}return B.isArray(l)?l.forEach(d):d(l),this}};Vt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);B.reduceDescriptors(Vt.prototype,({value:a},l)=>{let u=l[0].toUpperCase()+l.slice(1);return{get:()=>a,set(c){this[u]=c}}});B.freezeMethods(Vt);function cf(a,l){const u=this||pi,c=l||u,f=Vt.from(c.headers);let d=c.data;return B.forEach(a,function(m){d=m.call(u,d,f.normalize(),l?l.status:void 0)}),f.normalize(),d}function Xg(a){return!!(a&&a.__CANCEL__)}function al(a,l,u){Ae.call(this,a??"canceled",Ae.ERR_CANCELED,l,u),this.name="CanceledError"}B.inherits(al,Ae,{__CANCEL__:!0});function $g(a,l,u){const c=u.config.validateStatus;!u.status||!c||c(u.status)?a(u):l(new Ae("Request failed with status code "+u.status,[Ae.ERR_BAD_REQUEST,Ae.ERR_BAD_RESPONSE][Math.floor(u.status/100)-4],u.config,u.request,u))}function QO(a){const l=/^([-+\w]{1,25})(:?\/\/|:)/.exec(a);return l&&l[1]||""}function XO(a,l){a=a||10;const u=new Array(a),c=new Array(a);let f=0,d=0,h;return l=l!==void 0?l:1e3,function(S){const y=Date.now(),v=c[d];h||(h=y),u[f]=S,c[f]=y;let g=d,w=0;for(;g!==f;)w+=u[g++],g=g%a;if(f=(f+1)%a,f===d&&(d=(d+1)%a),y-h{u=v,f=null,d&&(clearTimeout(d),d=null),a(...y)};return[(...y)=>{const v=Date.now(),g=v-u;g>=c?h(y,v):(f=y,d||(d=setTimeout(()=>{d=null,h(f)},c-g)))},()=>f&&h(f)]}const Vu=(a,l,u=3)=>{let c=0;const f=XO(50,250);return $O(d=>{const h=d.loaded,m=d.lengthComputable?d.total:void 0,S=h-c,y=f(S),v=h<=m;c=h;const g={loaded:h,total:m,progress:m?h/m:void 0,bytes:S,rate:y||void 0,estimated:y&&m&&v?(m-h)/y:void 0,event:d,lengthComputable:m!=null,[l?"download":"upload"]:!0};a(g)},u)},vv=(a,l)=>{const u=a!=null;return[c=>l[0]({lengthComputable:u,total:a,loaded:c}),l[1]]},gv=a=>(...l)=>B.asap(()=>a(...l)),ZO=wt.hasStandardBrowserEnv?((a,l)=>u=>(u=new URL(u,wt.origin),a.protocol===u.protocol&&a.host===u.host&&(l||a.port===u.port)))(new URL(wt.origin),wt.navigator&&/(msie|trident)/i.test(wt.navigator.userAgent)):()=>!0,PO=wt.hasStandardBrowserEnv?{write(a,l,u,c,f,d,h){if(typeof document>"u")return;const m=[`${a}=${encodeURIComponent(l)}`];B.isNumber(u)&&m.push(`expires=${new Date(u).toUTCString()}`),B.isString(c)&&m.push(`path=${c}`),B.isString(f)&&m.push(`domain=${f}`),d===!0&&m.push("secure"),B.isString(h)&&m.push(`SameSite=${h}`),document.cookie=m.join("; ")},read(a){if(typeof document>"u")return null;const l=document.cookie.match(new RegExp("(?:^|; )"+a+"=([^;]*)"));return l?decodeURIComponent(l[1]):null},remove(a){this.write(a,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function KO(a){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(a)}function JO(a,l){return l?a.replace(/\/?\/$/,"")+"/"+l.replace(/^\/+/,""):a}function Zg(a,l,u){let c=!KO(l);return a&&(c||u==!1)?JO(a,l):l}const Sv=a=>a instanceof Vt?{...a}:a;function ir(a,l){l=l||{};const u={};function c(y,v,g,w){return B.isPlainObject(y)&&B.isPlainObject(v)?B.merge.call({caseless:w},y,v):B.isPlainObject(v)?B.merge({},v):B.isArray(v)?v.slice():v}function f(y,v,g,w){if(B.isUndefined(v)){if(!B.isUndefined(y))return c(void 0,y,g,w)}else return c(y,v,g,w)}function d(y,v){if(!B.isUndefined(v))return c(void 0,v)}function h(y,v){if(B.isUndefined(v)){if(!B.isUndefined(y))return c(void 0,y)}else return c(void 0,v)}function m(y,v,g){if(g in l)return c(y,v);if(g in a)return c(void 0,y)}const S={url:d,method:d,data:d,baseURL:h,transformRequest:h,transformResponse:h,paramsSerializer:h,timeout:h,timeoutMessage:h,withCredentials:h,withXSRFToken:h,adapter:h,responseType:h,xsrfCookieName:h,xsrfHeaderName:h,onUploadProgress:h,onDownloadProgress:h,decompress:h,maxContentLength:h,maxBodyLength:h,beforeRedirect:h,transport:h,httpAgent:h,httpsAgent:h,cancelToken:h,socketPath:h,responseEncoding:h,validateStatus:m,headers:(y,v,g)=>f(Sv(y),Sv(v),g,!0)};return B.forEach(Object.keys({...a,...l}),function(v){const g=S[v]||f,w=g(a[v],l[v],v);B.isUndefined(w)&&g!==m||(u[v]=w)}),u}const Pg=a=>{const l=ir({},a);let{data:u,withXSRFToken:c,xsrfHeaderName:f,xsrfCookieName:d,headers:h,auth:m}=l;if(l.headers=h=Vt.from(h),l.url=Yg(Zg(l.baseURL,l.url,l.allowAbsoluteUrls),a.params,a.paramsSerializer),m&&h.set("Authorization","Basic "+btoa((m.username||"")+":"+(m.password?unescape(encodeURIComponent(m.password)):""))),B.isFormData(u)){if(wt.hasStandardBrowserEnv||wt.hasStandardBrowserWebWorkerEnv)h.setContentType(void 0);else if(B.isFunction(u.getHeaders)){const S=u.getHeaders(),y=["content-type","content-length"];Object.entries(S).forEach(([v,g])=>{y.includes(v.toLowerCase())&&h.set(v,g)})}}if(wt.hasStandardBrowserEnv&&(c&&B.isFunction(c)&&(c=c(l)),c||c!==!1&&ZO(l.url))){const S=f&&d&&PO.read(d);S&&h.set(f,S)}return l},FO=typeof XMLHttpRequest<"u",kO=FO&&function(a){return new Promise(function(u,c){const f=Pg(a);let d=f.data;const h=Vt.from(f.headers).normalize();let{responseType:m,onUploadProgress:S,onDownloadProgress:y}=f,v,g,w,O,b;function M(){O&&O(),b&&b(),f.cancelToken&&f.cancelToken.unsubscribe(v),f.signal&&f.signal.removeEventListener("abort",v)}let T=new XMLHttpRequest;T.open(f.method.toUpperCase(),f.url,!0),T.timeout=f.timeout;function D(){if(!T)return;const X=Vt.from("getAllResponseHeaders"in T&&T.getAllResponseHeaders()),F={data:!m||m==="text"||m==="json"?T.responseText:T.response,status:T.status,statusText:T.statusText,headers:X,config:a,request:T};$g(function($){u($),M()},function($){c($),M()},F),T=null}"onloadend"in T?T.onloadend=D:T.onreadystatechange=function(){!T||T.readyState!==4||T.status===0&&!(T.responseURL&&T.responseURL.indexOf("file:")===0)||setTimeout(D)},T.onabort=function(){T&&(c(new Ae("Request aborted",Ae.ECONNABORTED,a,T)),T=null)},T.onerror=function(Q){const F=Q&&Q.message?Q.message:"Network Error",k=new Ae(F,Ae.ERR_NETWORK,a,T);k.event=Q||null,c(k),T=null},T.ontimeout=function(){let Q=f.timeout?"timeout of "+f.timeout+"ms exceeded":"timeout exceeded";const F=f.transitional||Vg;f.timeoutErrorMessage&&(Q=f.timeoutErrorMessage),c(new Ae(Q,F.clarifyTimeoutError?Ae.ETIMEDOUT:Ae.ECONNABORTED,a,T)),T=null},d===void 0&&h.setContentType(null),"setRequestHeader"in T&&B.forEach(h.toJSON(),function(Q,F){T.setRequestHeader(F,Q)}),B.isUndefined(f.withCredentials)||(T.withCredentials=!!f.withCredentials),m&&m!=="json"&&(T.responseType=f.responseType),y&&([w,b]=Vu(y,!0),T.addEventListener("progress",w)),S&&T.upload&&([g,O]=Vu(S),T.upload.addEventListener("progress",g),T.upload.addEventListener("loadend",O)),(f.cancelToken||f.signal)&&(v=X=>{T&&(c(!X||X.type?new al(null,a,T):X),T.abort(),T=null)},f.cancelToken&&f.cancelToken.subscribe(v),f.signal&&(f.signal.aborted?v():f.signal.addEventListener("abort",v)));const q=QO(f.url);if(q&&wt.protocols.indexOf(q)===-1){c(new Ae("Unsupported protocol "+q+":",Ae.ERR_BAD_REQUEST,a));return}T.send(d||null)})},WO=(a,l)=>{const{length:u}=a=a?a.filter(Boolean):[];if(l||u){let c=new AbortController,f;const d=function(y){if(!f){f=!0,m();const v=y instanceof Error?y:this.reason;c.abort(v instanceof Ae?v:new al(v instanceof Error?v.message:v))}};let h=l&&setTimeout(()=>{h=null,d(new Ae(`timeout ${l} of ms exceeded`,Ae.ETIMEDOUT))},l);const m=()=>{a&&(h&&clearTimeout(h),h=null,a.forEach(y=>{y.unsubscribe?y.unsubscribe(d):y.removeEventListener("abort",d)}),a=null)};a.forEach(y=>y.addEventListener("abort",d));const{signal:S}=c;return S.unsubscribe=()=>B.asap(m),S}},IO=function*(a,l){let u=a.byteLength;if(u{const f=e2(a,l);let d=0,h,m=S=>{h||(h=!0,c&&c(S))};return new ReadableStream({async pull(S){try{const{done:y,value:v}=await f.next();if(y){m(),S.close();return}let g=v.byteLength;if(u){let w=d+=g;u(w)}S.enqueue(new Uint8Array(v))}catch(y){throw m(y),y}},cancel(S){return m(S),f.return()}},{highWaterMark:2})},Ev=64*1024,{isFunction:zu}=B,n2=(({Request:a,Response:l})=>({Request:a,Response:l}))(B.global),{ReadableStream:Av,TextEncoder:Tv}=B.global,_v=(a,...l)=>{try{return!!a(...l)}catch{return!1}},a2=a=>{a=B.merge.call({skipUndefined:!0},n2,a);const{fetch:l,Request:u,Response:c}=a,f=l?zu(l):typeof fetch=="function",d=zu(u),h=zu(c);if(!f)return!1;const m=f&&zu(Av),S=f&&(typeof Tv=="function"?(b=>M=>b.encode(M))(new Tv):async b=>new Uint8Array(await new u(b).arrayBuffer())),y=d&&m&&_v(()=>{let b=!1;const M=new u(wt.origin,{body:new Av,method:"POST",get duplex(){return b=!0,"half"}}).headers.has("Content-Type");return b&&!M}),v=h&&m&&_v(()=>B.isReadableStream(new c("").body)),g={stream:v&&(b=>b.body)};f&&["text","arrayBuffer","blob","formData","stream"].forEach(b=>{!g[b]&&(g[b]=(M,T)=>{let D=M&&M[b];if(D)return D.call(M);throw new Ae(`Response type '${b}' is not supported`,Ae.ERR_NOT_SUPPORT,T)})});const w=async b=>{if(b==null)return 0;if(B.isBlob(b))return b.size;if(B.isSpecCompliantForm(b))return(await new u(wt.origin,{method:"POST",body:b}).arrayBuffer()).byteLength;if(B.isArrayBufferView(b)||B.isArrayBuffer(b))return b.byteLength;if(B.isURLSearchParams(b)&&(b=b+""),B.isString(b))return(await S(b)).byteLength},O=async(b,M)=>{const T=B.toFiniteNumber(b.getContentLength());return T??w(M)};return async b=>{let{url:M,method:T,data:D,signal:q,cancelToken:X,timeout:Q,onDownloadProgress:F,onUploadProgress:k,responseType:$,headers:ee,withCredentials:ne="same-origin",fetchOptions:ie}=Pg(b),pe=l||fetch;$=$?($+"").toLowerCase():"text";let te=WO([q,X&&X.toAbortSignal()],Q),we=null;const me=te&&te.unsubscribe&&(()=>{te.unsubscribe()});let _e;try{if(k&&y&&T!=="get"&&T!=="head"&&(_e=await O(ee,D))!==0){let A=new u(M,{method:"POST",body:D,duplex:"half"}),L;if(B.isFormData(D)&&(L=A.headers.get("content-type"))&&ee.setContentType(L),A.body){const[J,K]=vv(_e,Vu(gv(k)));D=bv(A.body,Ev,J,K)}}B.isString(ne)||(ne=ne?"include":"omit");const x=d&&"credentials"in u.prototype,P={...ie,signal:te,method:T.toUpperCase(),headers:ee.normalize().toJSON(),body:D,duplex:"half",credentials:x?ne:void 0};we=d&&new u(M,P);let Z=await(d?pe(we,ie):pe(M,P));const oe=v&&($==="stream"||$==="response");if(v&&(F||oe&&me)){const A={};["status","statusText","headers"].forEach(re=>{A[re]=Z[re]});const L=B.toFiniteNumber(Z.headers.get("content-length")),[J,K]=F&&vv(L,Vu(gv(F),!0))||[];Z=new c(bv(Z.body,Ev,J,()=>{K&&K(),me&&me()}),A)}$=$||"text";let ve=await g[B.findKey(g,$)||"text"](Z,b);return!oe&&me&&me(),await new Promise((A,L)=>{$g(A,L,{data:ve,headers:Vt.from(Z.headers),status:Z.status,statusText:Z.statusText,config:b,request:we})})}catch(x){throw me&&me(),x&&x.name==="TypeError"&&/Load failed|fetch/i.test(x.message)?Object.assign(new Ae("Network Error",Ae.ERR_NETWORK,b,we),{cause:x.cause||x}):Ae.from(x,x&&x.code,b,we)}}},r2=new Map,Kg=a=>{let l=a&&a.env||{};const{fetch:u,Request:c,Response:f}=l,d=[c,f,u];let h=d.length,m=h,S,y,v=r2;for(;m--;)S=d[m],y=v.get(S),y===void 0&&v.set(S,y=m?new Map:a2(l)),v=y;return y};Kg();const Wf={http:EO,xhr:kO,fetch:{get:Kg}};B.forEach(Wf,(a,l)=>{if(a){try{Object.defineProperty(a,"name",{value:l})}catch{}Object.defineProperty(a,"adapterName",{value:l})}});const Ov=a=>`- ${a}`,l2=a=>B.isFunction(a)||a===null||a===!1;function i2(a,l){a=B.isArray(a)?a:[a];const{length:u}=a;let c,f;const d={};for(let h=0;h`adapter ${S} `+(y===!1?"is not supported by the environment":"is not available in the build"));let m=u?h.length>1?`since : `+h.map(Ov).join(` `):" "+Ov(h[0]):"as no adapter specified";throw new Ae("There is no suitable adapter to dispatch the request "+m,"ERR_NOT_SUPPORT")}return f}const Jg={getAdapter:i2,adapters:Wf};function sf(a){if(a.cancelToken&&a.cancelToken.throwIfRequested(),a.signal&&a.signal.aborted)throw new al(null,a)}function wv(a){return sf(a),a.headers=Vt.from(a.headers),a.data=cf.call(a,a.transformRequest),["post","put","patch"].indexOf(a.method)!==-1&&a.headers.setContentType("application/x-www-form-urlencoded",!1),Jg.getAdapter(a.adapter||pi.adapter,a)(a).then(function(c){return sf(a),c.data=cf.call(a,a.transformResponse,c),c.headers=Vt.from(c.headers),c},function(c){return Xg(c)||(sf(a),c&&c.response&&(c.response.data=cf.call(a,a.transformResponse,c.response),c.response.headers=Vt.from(c.response.headers))),Promise.reject(c)})}const Fg="1.13.2",Wu={};["object","boolean","number","function","string","symbol"].forEach((a,l)=>{Wu[a]=function(c){return typeof c===a||"a"+(l<1?"n ":" ")+a}});const Rv={};Wu.transitional=function(l,u,c){function f(d,h){return"[Axios v"+Fg+"] Transitional option '"+d+"'"+h+(c?". "+c:"")}return(d,h,m)=>{if(l===!1)throw new Ae(f(h," has been removed"+(u?" in "+u:"")),Ae.ERR_DEPRECATED);return u&&!Rv[h]&&(Rv[h]=!0,console.warn(f(h," has been deprecated since v"+u+" and will be removed in the near future"))),l?l(d,h,m):!0}};Wu.spelling=function(l){return(u,c)=>(console.warn(`${c} is likely a misspelling of ${l}`),!0)};function u2(a,l,u){if(typeof a!="object")throw new Ae("options must be an object",Ae.ERR_BAD_OPTION_VALUE);const c=Object.keys(a);let f=c.length;for(;f-- >0;){const d=c[f],h=l[d];if(h){const m=a[d],S=m===void 0||h(m,d,a);if(S!==!0)throw new Ae("option "+d+" must be "+S,Ae.ERR_BAD_OPTION_VALUE);continue}if(u!==!0)throw new Ae("Unknown option "+d,Ae.ERR_BAD_OPTION)}}const Hu={assertOptions:u2,validators:Wu},Dn=Hu.validators;let ar=class{constructor(l){this.defaults=l||{},this.interceptors={request:new yv,response:new yv}}async request(l,u){try{return await this._request(l,u)}catch(c){if(c instanceof Error){let f={};Error.captureStackTrace?Error.captureStackTrace(f):f=new Error;const d=f.stack?f.stack.replace(/^.+\n/,""):"";try{c.stack?d&&!String(c.stack).endsWith(d.replace(/^.+\n.+\n/,""))&&(c.stack+=` -`+d):c.stack=d}catch{}}throw c}}_request(l,u){typeof l=="string"?(u=u||{},u.url=l):u=l||{},u=ir(this.defaults,u);const{transitional:c,paramsSerializer:f,headers:d}=u;c!==void 0&&Hu.assertOptions(c,{silentJSONParsing:Dn.transitional(Dn.boolean),forcedJSONParsing:Dn.transitional(Dn.boolean),clarifyTimeoutError:Dn.transitional(Dn.boolean)},!1),f!=null&&(B.isFunction(f)?u.paramsSerializer={serialize:f}:Hu.assertOptions(f,{encode:Dn.function,serialize:Dn.function},!0)),u.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?u.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:u.allowAbsoluteUrls=!0),Hu.assertOptions(u,{baseUrl:Dn.spelling("baseURL"),withXsrfToken:Dn.spelling("withXSRFToken")},!0),u.method=(u.method||this.defaults.method||"get").toLowerCase();let h=d&&B.merge(d.common,d[u.method]);d&&B.forEach(["delete","get","head","post","put","patch","common"],b=>{delete d[b]}),u.headers=Vt.concat(h,d);const m=[];let S=!0;this.interceptors.request.forEach(function(M){typeof M.runWhen=="function"&&M.runWhen(u)===!1||(S=S&&M.synchronous,m.unshift(M.fulfilled,M.rejected))});const y=[];this.interceptors.response.forEach(function(M){y.push(M.fulfilled,M.rejected)});let v,g=0,w;if(!S){const b=[wv.bind(this),void 0];for(b.unshift(...m),b.push(...y),w=b.length,v=Promise.resolve(u);g{if(!c._listeners)return;let d=c._listeners.length;for(;d-- >0;)c._listeners[d](f);c._listeners=null}),this.promise.then=f=>{let d;const h=new Promise(m=>{c.subscribe(m),d=m}).then(f);return h.cancel=function(){c.unsubscribe(d)},h},l(function(d,h,m){c.reason||(c.reason=new al(d,h,m),u(c.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(l){if(this.reason){l(this.reason);return}this._listeners?this._listeners.push(l):this._listeners=[l]}unsubscribe(l){if(!this._listeners)return;const u=this._listeners.indexOf(l);u!==-1&&this._listeners.splice(u,1)}toAbortSignal(){const l=new AbortController,u=c=>{l.abort(c)};return this.subscribe(u),l.signal.unsubscribe=()=>this.unsubscribe(u),l.signal}static source(){let l;return{token:new kg(function(f){l=f}),cancel:l}}};function c2(a){return function(u){return a.apply(null,u)}}function s2(a){return B.isObject(a)&&a.isAxiosError===!0}const Df={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(Df).forEach(([a,l])=>{Df[l]=a});function Wg(a){const l=new ar(a),u=Cg(ar.prototype.request,l);return B.extend(u,ar.prototype,l,{allOwnKeys:!0}),B.extend(u,l,null,{allOwnKeys:!0}),u.create=function(f){return Wg(ir(a,f))},u}const tt=Wg(pi);tt.Axios=ar;tt.CanceledError=al;tt.CancelToken=o2;tt.isCancel=Xg;tt.VERSION=Fg;tt.toFormData=ku;tt.AxiosError=Ae;tt.Cancel=tt.CanceledError;tt.all=function(l){return Promise.all(l)};tt.spread=c2;tt.isAxiosError=s2;tt.mergeConfig=ir;tt.AxiosHeaders=Vt;tt.formToJSON=a=>Qg(B.isHTMLForm(a)?new FormData(a):a);tt.getAdapter=Jg.getAdapter;tt.HttpStatusCode=Df;tt.default=tt;const{Axios:xw,AxiosError:Nw,CanceledError:qw,isCancel:Hw,CancelToken:Bw,VERSION:jw,all:Lw,Cancel:Gw,isAxiosError:Yw,spread:Vw,toFormData:Qw,AxiosHeaders:Xw,HttpStatusCode:$w,formToJSON:Pw,getAdapter:Zw,mergeConfig:Kw}=tt;function Cf(a,l){let u;return function(...c){clearTimeout(u),u=setTimeout(()=>a.apply(this,c),l)}}function bn(a,l){return document.dispatchEvent(new CustomEvent(`inertia:${a}`,l))}var Dv=a=>bn("before",{cancelable:!0,detail:{visit:a}}),f2=a=>bn("error",{detail:{errors:a}}),d2=a=>bn("exception",{cancelable:!0,detail:{exception:a}}),h2=a=>bn("finish",{detail:{visit:a}}),p2=a=>bn("invalid",{cancelable:!0,detail:{response:a}}),ui=a=>bn("navigate",{detail:{page:a}}),y2=a=>bn("progress",{detail:{progress:a}}),m2=a=>bn("start",{detail:{visit:a}}),v2=a=>bn("success",{detail:{page:a}}),g2=(a,l)=>bn("prefetched",{detail:{fetchedAt:Date.now(),response:a.data,visit:l}}),S2=a=>bn("prefetching",{detail:{visit:a}}),Ut=class{static set(a,l){typeof window<"u"&&window.sessionStorage.setItem(a,JSON.stringify(l))}static get(a){if(typeof window<"u")return JSON.parse(window.sessionStorage.getItem(a)||"null")}static merge(a,l){const u=this.get(a);u===null?this.set(a,l):this.set(a,{...u,...l})}static remove(a){typeof window<"u"&&window.sessionStorage.removeItem(a)}static removeNested(a,l){const u=this.get(a);u!==null&&(delete u[l],this.set(a,u))}static exists(a){try{return this.get(a)!==null}catch{return!1}}static clear(){typeof window<"u"&&window.sessionStorage.clear()}};Ut.locationVisitKey="inertiaLocationVisit";var b2=async a=>{if(typeof window>"u")throw new Error("Unable to encrypt history");const l=Ig(),u=await e0(),c=await w2(u);if(!c)throw new Error("Unable to encrypt history");return await A2(l,c,a)},Ir={key:"historyKey",iv:"historyIv"},E2=async a=>{const l=Ig(),u=await e0();if(!u)throw new Error("Unable to decrypt history");return await T2(l,u,a)},A2=async(a,l,u)=>{if(typeof window>"u")throw new Error("Unable to encrypt history");if(typeof window.crypto.subtle>"u")return console.warn("Encryption is not supported in this environment. SSL is required."),Promise.resolve(u);const c=new TextEncoder,f=JSON.stringify(u),d=new Uint8Array(f.length*3),h=c.encodeInto(f,d);return window.crypto.subtle.encrypt({name:"AES-GCM",iv:a},l,d.subarray(0,h.written))},T2=async(a,l,u)=>{if(typeof window.crypto.subtle>"u")return console.warn("Decryption is not supported in this environment. SSL is required."),Promise.resolve(u);const c=await window.crypto.subtle.decrypt({name:"AES-GCM",iv:a},l,u);return JSON.parse(new TextDecoder().decode(c))},Ig=()=>{const a=Ut.get(Ir.iv);if(a)return new Uint8Array(a);const l=window.crypto.getRandomValues(new Uint8Array(12));return Ut.set(Ir.iv,Array.from(l)),l},_2=async()=>typeof window.crypto.subtle>"u"?(console.warn("Encryption is not supported in this environment. SSL is required."),Promise.resolve(null)):window.crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),O2=async a=>{if(typeof window.crypto.subtle>"u")return console.warn("Encryption is not supported in this environment. SSL is required."),Promise.resolve();const l=await window.crypto.subtle.exportKey("raw",a);Ut.set(Ir.key,Array.from(new Uint8Array(l)))},w2=async a=>{if(a)return a;const l=await _2();return l?(await O2(l),l):null},e0=async()=>{const a=Ut.get(Ir.key);return a?await window.crypto.subtle.importKey("raw",new Uint8Array(a),{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]):null},gn=class{static save(){je.saveScrollPositions(Array.from(this.regions()).map(a=>({top:a.scrollTop,left:a.scrollLeft})))}static regions(){return document.querySelectorAll("[scroll-region]")}static reset(){const a=typeof window<"u"?window.location.hash:null;a||window.scrollTo(0,0),this.regions().forEach(l=>{typeof l.scrollTo=="function"?l.scrollTo(0,0):(l.scrollTop=0,l.scrollLeft=0)}),this.save(),a&&setTimeout(()=>{const l=document.getElementById(a.slice(1));l?l.scrollIntoView():window.scrollTo(0,0)})}static restore(a){this.restoreDocument(),this.regions().forEach((l,u)=>{const c=a[u];c&&(typeof l.scrollTo=="function"?l.scrollTo(c.left,c.top):(l.scrollTop=c.top,l.scrollLeft=c.left))})}static restoreDocument(){const a=je.getDocumentScrollPosition();typeof window<"u"&&window.scrollTo(a.left,a.top)}static onScroll(a){const l=a.target;typeof l.hasAttribute=="function"&&l.hasAttribute("scroll-region")&&this.save()}static onWindowScroll(){je.saveDocumentScrollPosition({top:window.scrollY,left:window.scrollX})}};function Mf(a){return a instanceof File||a instanceof Blob||a instanceof FileList&&a.length>0||a instanceof FormData&&Array.from(a.values()).some(l=>Mf(l))||typeof a=="object"&&a!==null&&Object.values(a).some(l=>Mf(l))}var zf=a=>a instanceof FormData;function t0(a,l=new FormData,u=null){a=a||{};for(const c in a)Object.prototype.hasOwnProperty.call(a,c)&&a0(l,n0(u,c),a[c]);return l}function n0(a,l){return a?a+"["+l+"]":l}function a0(a,l,u){if(Array.isArray(u))return Array.from(u.keys()).forEach(c=>a0(a,n0(l,c.toString()),u[c]));if(u instanceof Date)return a.append(l,u.toISOString());if(u instanceof File)return a.append(l,u,u.name);if(u instanceof Blob)return a.append(l,u);if(typeof u=="boolean")return a.append(l,u?"1":"0");if(typeof u=="string")return a.append(l,u);if(typeof u=="number")return a.append(l,`${u}`);if(u==null)return a.append(l,"");t0(u,a,l)}function Ua(a){return new URL(a.toString(),typeof window>"u"?void 0:window.location.toString())}var R2=(a,l,u,c,f)=>{let d=typeof a=="string"?Ua(a):a;if((Mf(l)||c)&&!zf(l)&&(l=t0(l)),zf(l))return[d,l];const[h,m]=If(u,d,l,f);return[Ua(h),m]};function If(a,l,u,c="brackets"){const f=a==="get"&&!zf(u)&&Object.keys(u).length>0,d=/^[a-z][a-z0-9+.-]*:\/\//i.test(l.toString()),h=d||l.toString().startsWith("/")||l.toString()==="",m=!h&&!l.toString().startsWith("#")&&!l.toString().startsWith("?"),S=/^[.]{1,2}([/]|$)/.test(l.toString()),y=l.toString().includes("?")||f,v=l.toString().includes("#"),g=new URL(l.toString(),typeof window>"u"?"http://localhost":window.location.toString());if(f){const w={ignoreQueryPrefix:!0,parseArrays:!1};g.search=Lm.stringify({...Lm.parse(g.search,w),...u},{encodeValuesOnly:!0,arrayFormat:c})}return[[d?`${g.protocol}//${g.host}`:"",h?g.pathname:"",m?g.pathname.substring(S?0:1):"",y?g.search:"",v?g.hash:""].join(""),f?{}:u]}function Qu(a){return a=new URL(a.href),a.hash="",a}var Cv=(a,l)=>{a.hash&&!l.hash&&Qu(a).href===l.href&&(l.hash=a.hash)},Uf=(a,l)=>Qu(a).href===Qu(l).href;function rr(a){return a!==null&&typeof a=="object"&&a!==void 0&&"url"in a&&"method"in a}var D2=class{constructor(){this.componentId={},this.listeners=[],this.isFirstPageLoad=!0,this.cleared=!1}init({initialPage:a,swapComponent:l,resolveComponent:u}){return this.page=a,this.swapComponent=l,this.resolveComponent=u,this}set(a,{replace:l=!1,preserveScroll:u=!1,preserveState:c=!1}={}){this.componentId={};const f=this.componentId;return a.clearHistory&&je.clear(),this.resolve(a.component).then(d=>{if(f!==this.componentId)return;a.rememberedState??(a.rememberedState={});const h=typeof window<"u"?window.location:new URL(a.url);return l=l||Uf(Ua(a.url),h),new Promise(m=>{l?je.replaceState(a,()=>m(null)):je.pushState(a,()=>m(null))}).then(()=>{const m=!this.isTheSame(a);return this.page=a,this.cleared=!1,m&&this.fireEventsFor("newComponent"),this.isFirstPageLoad&&this.fireEventsFor("firstLoad"),this.isFirstPageLoad=!1,this.swap({component:d,page:a,preserveState:c}).then(()=>{u||gn.reset(),nr.fireInternalEvent("loadDeferredProps"),l||ui(a)})})})}setQuietly(a,{preserveState:l=!1}={}){return this.resolve(a.component).then(u=>(this.page=a,this.cleared=!1,je.setCurrent(a),this.swap({component:u,page:a,preserveState:l})))}clear(){this.cleared=!0}isCleared(){return this.cleared}get(){return this.page}merge(a){this.page={...this.page,...a}}setUrlHash(a){this.page.url.includes(a)||(this.page.url+=a)}remember(a){this.page.rememberedState=a}swap({component:a,page:l,preserveState:u}){return this.swapComponent({component:a,page:l,preserveState:u})}resolve(a){return Promise.resolve(this.resolveComponent(a))}isTheSame(a){return this.page.component===a.component}on(a,l){return this.listeners.push({event:a,callback:l}),()=>{this.listeners=this.listeners.filter(u=>u.event!==a&&u.callback!==l)}}fireEventsFor(a){this.listeners.filter(l=>l.event===a).forEach(l=>l.callback())}},ye=new D2,r0=class{constructor(){this.items=[],this.processingPromise=null}add(a){return this.items.push(a),this.process()}process(){return this.processingPromise??(this.processingPromise=this.processNext().finally(()=>{this.processingPromise=null})),this.processingPromise}processNext(){const a=this.items.shift();return a?Promise.resolve(a()).then(()=>this.processNext()):Promise.resolve()}},ri=typeof window>"u",ti=new r0,Mv=!ri&&/CriOS/.test(window.navigator.userAgent),C2=class{constructor(){this.rememberedState="rememberedState",this.scrollRegions="scrollRegions",this.preserveUrl=!1,this.current={},this.initialState=null}remember(a,l){this.replaceState({...ye.get(),rememberedState:{...ye.get()?.rememberedState??{},[l]:a}})}restore(a){if(!ri)return this.current[this.rememberedState]?this.current[this.rememberedState]?.[a]:this.initialState?.[this.rememberedState]?.[a]}pushState(a,l=null){if(!ri){if(this.preserveUrl){l&&l();return}this.current=a,ti.add(()=>this.getPageData(a).then(u=>{const c=()=>{this.doPushState({page:u},a.url),l&&l()};Mv?setTimeout(c):c()}))}}getPageData(a){return new Promise(l=>a.encryptHistory?b2(a).then(l):l(a))}processQueue(){return ti.process()}decrypt(a=null){if(ri)return Promise.resolve(a??ye.get());const l=a??window.history.state?.page;return this.decryptPageData(l).then(u=>{if(!u)throw new Error("Unable to decrypt history");return this.initialState===null?this.initialState=u??void 0:this.current=u??{},u})}decryptPageData(a){return a instanceof ArrayBuffer?E2(a):Promise.resolve(a)}saveScrollPositions(a){ti.add(()=>Promise.resolve().then(()=>{window.history.state?.page&&this.doReplaceState({page:window.history.state.page,scrollRegions:a})}))}saveDocumentScrollPosition(a){ti.add(()=>Promise.resolve().then(()=>{window.history.state?.page&&this.doReplaceState({page:window.history.state.page,documentScrollPosition:a})}))}getScrollRegions(){return window.history.state?.scrollRegions||[]}getDocumentScrollPosition(){return window.history.state?.documentScrollPosition||{top:0,left:0}}replaceState(a,l=null){if(ye.merge(a),!ri){if(this.preserveUrl){l&&l();return}this.current=a,ti.add(()=>this.getPageData(a).then(u=>{const c=()=>{this.doReplaceState({page:u},a.url),l&&l()};Mv?setTimeout(c):c()}))}}doReplaceState(a,l){window.history.replaceState({...a,scrollRegions:a.scrollRegions??window.history.state?.scrollRegions,documentScrollPosition:a.documentScrollPosition??window.history.state?.documentScrollPosition},"",l)}doPushState(a,l){window.history.pushState(a,"",l)}getState(a,l){return this.current?.[a]??l}deleteState(a){this.current[a]!==void 0&&(delete this.current[a],this.replaceState(this.current))}hasAnyState(){return!!this.getAllState()}clear(){Ut.remove(Ir.key),Ut.remove(Ir.iv)}setCurrent(a){this.current=a}isValidState(a){return!!a.page}getAllState(){return this.current}};typeof window<"u"&&window.history.scrollRestoration&&(window.history.scrollRestoration="manual");var je=new C2,M2=class{constructor(){this.internalListeners=[]}init(){typeof window<"u"&&(window.addEventListener("popstate",this.handlePopstateEvent.bind(this)),window.addEventListener("scroll",Cf(gn.onWindowScroll.bind(gn),100),!0)),typeof document<"u"&&document.addEventListener("scroll",Cf(gn.onScroll.bind(gn),100),!0)}onGlobalEvent(a,l){const u=c=>{const f=l(c);c.cancelable&&!c.defaultPrevented&&f===!1&&c.preventDefault()};return this.registerListener(`inertia:${a}`,u)}on(a,l){return this.internalListeners.push({event:a,listener:l}),()=>{this.internalListeners=this.internalListeners.filter(u=>u.listener!==l)}}onMissingHistoryItem(){ye.clear(),this.fireInternalEvent("missingHistoryItem")}fireInternalEvent(a){this.internalListeners.filter(l=>l.event===a).forEach(l=>l.listener())}registerListener(a,l){return document.addEventListener(a,l),()=>document.removeEventListener(a,l)}handlePopstateEvent(a){const l=a.state||null;if(l===null){const u=Ua(ye.get().url);u.hash=window.location.hash,je.replaceState({...ye.get(),url:u.href}),gn.reset();return}if(!je.isValidState(l))return this.onMissingHistoryItem();je.decrypt(l.page).then(u=>{if(ye.get().version!==u.version){this.onMissingHistoryItem();return}Gt.cancelAll(),ye.setQuietly(u,{preserveState:!1}).then(()=>{window.requestAnimationFrame(()=>{gn.restore(je.getScrollRegions())}),ui(ye.get())})}).catch(()=>{this.onMissingHistoryItem()})}},nr=new M2,z2=class{constructor(){this.type=this.resolveType()}resolveType(){return typeof window>"u"?"navigate":window.performance&&window.performance.getEntriesByType&&window.performance.getEntriesByType("navigation").length>0?window.performance.getEntriesByType("navigation")[0].type:"navigate"}get(){return this.type}isBackForward(){return this.type==="back_forward"}isReload(){return this.type==="reload"}},ff=new z2,U2=class{static handle(){this.clearRememberedStateOnReload(),[this.handleBackForward,this.handleLocation,this.handleDefault].find(l=>l.bind(this)())}static clearRememberedStateOnReload(){ff.isReload()&&je.deleteState(je.rememberedState)}static handleBackForward(){if(!ff.isBackForward()||!je.hasAnyState())return!1;const a=je.getScrollRegions();return je.decrypt().then(l=>{ye.set(l,{preserveScroll:!0,preserveState:!0}).then(()=>{gn.restore(a),ui(ye.get())})}).catch(()=>{nr.onMissingHistoryItem()}),!0}static handleLocation(){if(!Ut.exists(Ut.locationVisitKey))return!1;const a=Ut.get(Ut.locationVisitKey)||{};return Ut.remove(Ut.locationVisitKey),typeof window<"u"&&ye.setUrlHash(window.location.hash),je.decrypt(ye.get()).then(()=>{const l=je.getState(je.rememberedState,{}),u=je.getScrollRegions();ye.remember(l),ye.set(ye.get(),{preserveScroll:a.preserveScroll,preserveState:!0}).then(()=>{a.preserveScroll&&gn.restore(u),ui(ye.get())})}).catch(()=>{nr.onMissingHistoryItem()}),!0}static handleDefault(){typeof window<"u"&&ye.setUrlHash(window.location.hash),ye.set(ye.get(),{preserveScroll:!0,preserveState:!0}).then(()=>{ff.isReload()&&gn.restore(je.getScrollRegions()),ui(ye.get())})}},x2=class{constructor(a,l,u){this.id=null,this.throttle=!1,this.keepAlive=!1,this.cbCount=0,this.keepAlive=u.keepAlive??!1,this.cb=l,this.interval=a,(u.autoStart??!0)&&this.start()}stop(){this.id&&clearInterval(this.id)}start(){typeof window>"u"||(this.stop(),this.id=window.setInterval(()=>{(!this.throttle||this.cbCount%10===0)&&this.cb(),this.throttle&&this.cbCount++},this.interval))}isInBackground(a){this.throttle=this.keepAlive?!1:a,this.throttle&&(this.cbCount=0)}},N2=class{constructor(){this.polls=[],this.setupVisibilityListener()}add(a,l,u){const c=new x2(a,l,u);return this.polls.push(c),{stop:()=>c.stop(),start:()=>c.start()}}clear(){this.polls.forEach(a=>a.stop()),this.polls=[]}setupVisibilityListener(){typeof document>"u"||document.addEventListener("visibilitychange",()=>{this.polls.forEach(a=>a.isInBackground(document.hidden))},!1)}},q2=new N2,l0=(a,l,u)=>{if(a===l)return!0;for(const c in a)if(!u.includes(c)&&a[c]!==l[c]&&!H2(a[c],l[c]))return!1;return!0},H2=(a,l)=>{switch(typeof a){case"object":return l0(a,l,[]);case"function":return a.toString()===l.toString();default:return a===l}},B2={ms:1,s:1e3,m:1e3*60,h:1e3*60*60,d:1e3*60*60*24},zv=a=>{if(typeof a=="number")return a;for(const[l,u]of Object.entries(B2))if(a.endsWith(l))return parseFloat(a)*u;return parseInt(a)},j2=class{constructor(){this.cached=[],this.inFlightRequests=[],this.removalTimers=[],this.currentUseId=null}add(a,l,{cacheFor:u,cacheTags:c}){if(this.findInFlight(a))return Promise.resolve();const d=this.findCached(a);if(!a.fresh&&d&&d.staleTimestamp>Date.now())return Promise.resolve();const[h,m]=this.extractStaleValues(u),S=new Promise((y,v)=>{l({...a,onCancel:()=>{this.remove(a),a.onCancel(),v()},onError:g=>{this.remove(a),a.onError(g),v()},onPrefetching(g){a.onPrefetching(g)},onPrefetched(g,w){a.onPrefetched(g,w)},onPrefetchResponse(g){y(g)},onPrefetchError(g){In.removeFromInFlight(a),v(g)}})}).then(y=>(this.remove(a),this.cached.push({params:{...a},staleTimestamp:Date.now()+h,response:S,singleUse:m===0,timestamp:Date.now(),inFlight:!1,tags:Array.isArray(c)?c:[c]}),this.scheduleForRemoval(a,m),this.removeFromInFlight(a),y.handlePrefetch(),y));return this.inFlightRequests.push({params:{...a},response:S,staleTimestamp:null,inFlight:!0}),S}removeAll(){this.cached=[],this.removalTimers.forEach(a=>{clearTimeout(a.timer)}),this.removalTimers=[]}removeByTags(a){this.cached=this.cached.filter(l=>!l.tags.some(u=>a.includes(u)))}remove(a){this.cached=this.cached.filter(l=>!this.paramsAreEqual(l.params,a)),this.clearTimer(a)}removeFromInFlight(a){this.inFlightRequests=this.inFlightRequests.filter(l=>!this.paramsAreEqual(l.params,a))}extractStaleValues(a){const[l,u]=this.cacheForToStaleAndExpires(a);return[zv(l),zv(u)]}cacheForToStaleAndExpires(a){if(!Array.isArray(a))return[a,a];switch(a.length){case 0:return[0,0];case 1:return[a[0],a[0]];default:return[a[0],a[1]]}}clearTimer(a){const l=this.removalTimers.find(u=>this.paramsAreEqual(u.params,a));l&&(clearTimeout(l.timer),this.removalTimers=this.removalTimers.filter(u=>u!==l))}scheduleForRemoval(a,l){if(!(typeof window>"u")&&(this.clearTimer(a),l>0)){const u=window.setTimeout(()=>this.remove(a),l);this.removalTimers.push({params:a,timer:u})}}get(a){return this.findCached(a)||this.findInFlight(a)}use(a,l){const u=`${l.url.pathname}-${Date.now()}-${Math.random().toString(36).substring(7)}`;return this.currentUseId=u,a.response.then(c=>{if(this.currentUseId===u)return c.mergeParams({...l,onPrefetched:()=>{}}),this.removeSingleUseItems(l),c.handle()})}removeSingleUseItems(a){this.cached=this.cached.filter(l=>this.paramsAreEqual(l.params,a)?!l.singleUse:!0)}findCached(a){return this.cached.find(l=>this.paramsAreEqual(l.params,a))||null}findInFlight(a){return this.inFlightRequests.find(l=>this.paramsAreEqual(l.params,a))||null}withoutPurposePrefetchHeader(a){const l=ai(a);return l.headers.Purpose==="prefetch"&&delete l.headers.Purpose,l}paramsAreEqual(a,l){return l0(this.withoutPurposePrefetchHeader(a),this.withoutPurposePrefetchHeader(l),["showProgress","replace","prefetch","onBefore","onStart","onProgress","onFinish","onCancel","onSuccess","onError","onPrefetched","onCancelToken","onPrefetching","async"])}},In=new j2,L2=class i0{constructor(l){if(this.callbacks=[],!l.prefetch)this.params=l;else{const u={onBefore:this.wrapCallback(l,"onBefore"),onStart:this.wrapCallback(l,"onStart"),onProgress:this.wrapCallback(l,"onProgress"),onFinish:this.wrapCallback(l,"onFinish"),onCancel:this.wrapCallback(l,"onCancel"),onSuccess:this.wrapCallback(l,"onSuccess"),onError:this.wrapCallback(l,"onError"),onCancelToken:this.wrapCallback(l,"onCancelToken"),onPrefetched:this.wrapCallback(l,"onPrefetched"),onPrefetching:this.wrapCallback(l,"onPrefetching")};this.params={...l,...u,onPrefetchResponse:l.onPrefetchResponse||(()=>{}),onPrefetchError:l.onPrefetchError||(()=>{})}}}static create(l){return new i0(l)}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}onCancelToken(l){this.params.onCancelToken({cancel:l})}markAsFinished(){this.params.completed=!0,this.params.cancelled=!1,this.params.interrupted=!1}markAsCancelled({cancelled:l=!0,interrupted:u=!1}){this.params.onCancel(),this.params.completed=!1,this.params.cancelled=l,this.params.interrupted=u}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(l){this.params.onPrefetchResponse&&this.params.onPrefetchResponse(l)}onPrefetchError(l){this.params.onPrefetchError&&this.params.onPrefetchError(l)}all(){return this.params}headers(){const l={...this.params.headers};this.isPartial()&&(l["X-Inertia-Partial-Component"]=ye.get().component);const u=this.params.only.concat(this.params.reset);return u.length>0&&(l["X-Inertia-Partial-Data"]=u.join(",")),this.params.except.length>0&&(l["X-Inertia-Partial-Except"]=this.params.except.join(",")),this.params.reset.length>0&&(l["X-Inertia-Reset"]=this.params.reset.join(",")),this.params.errorBag&&this.params.errorBag.length>0&&(l["X-Inertia-Error-Bag"]=this.params.errorBag),l}setPreserveOptions(l){this.params.preserveScroll=this.resolvePreserveOption(this.params.preserveScroll,l),this.params.preserveState=this.resolvePreserveOption(this.params.preserveState,l)}runCallbacks(){this.callbacks.forEach(({name:l,args:u})=>{this.params[l](...u)})}merge(l){this.params={...this.params,...l}}wrapCallback(l,u){return(...c)=>{this.recordCallback(u,c),l[u](...c)}}recordCallback(l,u){this.callbacks.push({name:l,args:u})}resolvePreserveOption(l,u){return typeof l=="function"?l(u):l==="errors"?Object.keys(u.props.errors||{}).length>0:l}},G2={modal:null,listener:null,show(a){typeof a=="object"&&(a=`All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.
${JSON.stringify(a)}`);const l=document.createElement("html");l.innerHTML=a,l.querySelectorAll("a").forEach(c=>c.setAttribute("target","_top")),this.modal=document.createElement("div"),this.modal.style.position="fixed",this.modal.style.width="100vw",this.modal.style.height="100vh",this.modal.style.padding="50px",this.modal.style.boxSizing="border-box",this.modal.style.backgroundColor="rgba(0, 0, 0, .6)",this.modal.style.zIndex=2e5,this.modal.addEventListener("click",()=>this.hide());const u=document.createElement("iframe");if(u.style.backgroundColor="white",u.style.borderRadius="5px",u.style.width="100%",u.style.height="100%",this.modal.appendChild(u),document.body.prepend(this.modal),document.body.style.overflow="hidden",!u.contentWindow)throw new Error("iframe not yet ready.");u.contentWindow.document.open(),u.contentWindow.document.write(l.outerHTML),u.contentWindow.document.close(),this.listener=this.hideOnEscape.bind(this),document.addEventListener("keydown",this.listener)},hide(){this.modal.outerHTML="",this.modal=null,document.body.style.overflow="visible",document.removeEventListener("keydown",this.listener)},hideOnEscape(a){a.keyCode===27&&this.hide()}},Y2=new r0,Uv=class u0{constructor(l,u,c){this.requestParams=l,this.response=u,this.originatingPage=c}static create(l,u,c){return new u0(l,u,c)}async handlePrefetch(){Uf(this.requestParams.all().url,window.location)&&this.handle()}async handle(){return Y2.add(()=>this.process())}async process(){if(this.requestParams.all().prefetch)return this.requestParams.all().prefetch=!1,this.requestParams.all().onPrefetched(this.response,this.requestParams.all()),g2(this.response,this.requestParams.all()),Promise.resolve();if(this.requestParams.runCallbacks(),!this.isInertiaResponse())return this.handleNonInertiaResponse();await je.processQueue(),je.preserveUrl=this.requestParams.all().preserveUrl,await this.setPage();const l=ye.get().props.errors||{};if(Object.keys(l).length>0){const u=this.getScopedErrors(l);return f2(u),this.requestParams.all().onError(u)}Gt.flushByCacheTags(this.requestParams.all().invalidateCacheTags||[]),v2(ye.get()),await this.requestParams.all().onSuccess(ye.get()),je.preserveUrl=!1}mergeParams(l){this.requestParams.merge(l)}async handleNonInertiaResponse(){if(this.isLocationVisit()){const u=Ua(this.getHeader("x-inertia-location"));return Cv(this.requestParams.all().url,u),this.locationVisit(u)}const l={...this.response,data:this.getDataFromResponse(this.response.data)};if(p2(l))return G2.show(l.data)}isInertiaResponse(){return this.hasHeader("x-inertia")}hasStatus(l){return this.response.status===l}getHeader(l){return this.response.headers[l]}hasHeader(l){return this.getHeader(l)!==void 0}isLocationVisit(){return this.hasStatus(409)&&this.hasHeader("x-inertia-location")}locationVisit(l){try{if(Ut.set(Ut.locationVisitKey,{preserveScroll:this.requestParams.all().preserveScroll===!0}),typeof window>"u")return;Uf(window.location,l)?window.location.reload():window.location.href=l.href}catch{return!1}}async setPage(){const l=this.getDataFromResponse(this.response.data);return this.shouldSetPage(l)?(this.mergeProps(l),await this.setRememberedState(l),this.requestParams.setPreserveOptions(l),l.url=je.preserveUrl?ye.get().url:this.pageUrl(l),ye.set(l,{replace:this.requestParams.all().replace,preserveScroll:this.requestParams.all().preserveScroll,preserveState:this.requestParams.all().preserveState})):Promise.resolve()}getDataFromResponse(l){if(typeof l!="string")return l;try{return JSON.parse(l)}catch{return l}}shouldSetPage(l){if(!this.requestParams.all().async||this.originatingPage.component!==l.component)return!0;if(this.originatingPage.component!==ye.get().component)return!1;const u=Ua(this.originatingPage.url),c=Ua(ye.get().url);return u.origin===c.origin&&u.pathname===c.pathname}pageUrl(l){const u=Ua(l.url);return Cv(this.requestParams.all().url,u),u.pathname+u.search+u.hash}mergeProps(l){if(!this.requestParams.isPartial()||l.component!==ye.get().component)return;const u=l.mergeProps||[],c=l.deepMergeProps||[],f=l.matchPropsOn||[];u.forEach(d=>{const h=l.props[d];Array.isArray(h)?l.props[d]=this.mergeOrMatchItems(ye.get().props[d]||[],h,d,f):typeof h=="object"&&h!==null&&(l.props[d]={...ye.get().props[d]||[],...h})}),c.forEach(d=>{const h=l.props[d],m=ye.get().props[d],S=(y,v,g)=>Array.isArray(v)?this.mergeOrMatchItems(y,v,g,f):typeof v=="object"&&v!==null?Object.keys(v).reduce((w,O)=>(w[O]=S(y?y[O]:void 0,v[O],`${g}.${O}`),w),{...y}):v;l.props[d]=S(m,h,d)}),l.props={...ye.get().props,...l.props}}mergeOrMatchItems(l,u,c,f){const d=f.find(y=>y.split(".").slice(0,-1).join(".")===c);if(!d)return[...Array.isArray(l)?l:[],...u];const h=d.split(".").pop()||"",m=Array.isArray(l)?l:[],S=new Map;return m.forEach(y=>{y&&typeof y=="object"&&h in y?S.set(y[h],y):S.set(Symbol(),y)}),u.forEach(y=>{y&&typeof y=="object"&&h in y?S.set(y[h],y):S.set(Symbol(),y)}),Array.from(S.values())}async setRememberedState(l){const u=await je.getState(je.rememberedState,{});this.requestParams.all().preserveState&&u&&l.component===ye.get().component&&(l.rememberedState=u)}getScopedErrors(l){return this.requestParams.all().errorBag?l[this.requestParams.all().errorBag||""]||{}:l}},xv=class o0{constructor(l,u){this.page=u,this.requestHasFinished=!1,this.requestParams=L2.create(l),this.cancelToken=new AbortController}static create(l,u){return new o0(l,u)}async send(){this.requestParams.onCancelToken(()=>this.cancel({cancelled:!0})),m2(this.requestParams.all()),this.requestParams.onStart(),this.requestParams.all().prefetch&&(this.requestParams.onPrefetching(),S2(this.requestParams.all()));const l=this.requestParams.all().prefetch;return tt({method:this.requestParams.all().method,url:Qu(this.requestParams.all().url).href,data:this.requestParams.data(),params:this.requestParams.queryParams(),signal:this.cancelToken.signal,headers:this.getHeaders(),onUploadProgress:this.onProgress.bind(this),responseType:"text"}).then(u=>(this.response=Uv.create(this.requestParams,u,this.page),this.response.handle())).catch(u=>u?.response?(this.response=Uv.create(this.requestParams,u.response,this.page),this.response.handle()):Promise.reject(u)).catch(u=>{if(!tt.isCancel(u)&&d2(u))return l&&this.requestParams.onPrefetchError(u),Promise.reject(u)}).finally(()=>{this.finish(),l&&this.response&&this.requestParams.onPrefetchResponse(this.response)})}finish(){this.requestParams.wasCancelledAtAll()||(this.requestParams.markAsFinished(),this.fireFinishEvents())}fireFinishEvents(){this.requestHasFinished||(this.requestHasFinished=!0,h2(this.requestParams.all()),this.requestParams.onFinish())}cancel({cancelled:l=!1,interrupted:u=!1}){this.requestHasFinished||(this.cancelToken.abort(),this.requestParams.markAsCancelled({cancelled:l,interrupted:u}),this.fireFinishEvents())}onProgress(l){this.requestParams.data()instanceof FormData&&(l.percentage=l.progress?Math.round(l.progress*100):0,y2(l),this.requestParams.all().onProgress(l))}getHeaders(){const l={...this.requestParams.headers(),Accept:"text/html, application/xhtml+xml","X-Requested-With":"XMLHttpRequest","X-Inertia":!0};return ye.get().version&&(l["X-Inertia-Version"]=ye.get().version),l}},Nv=class{constructor({maxConcurrent:a,interruptible:l}){this.requests=[],this.maxConcurrent=a,this.interruptible=l}send(a){this.requests.push(a),a.send().then(()=>{this.requests=this.requests.filter(l=>l!==a)})}interruptInFlight(){this.cancel({interrupted:!0},!1)}cancelInFlight(){this.cancel({cancelled:!0},!0)}cancel({cancelled:a=!1,interrupted:l=!1}={},u){if(!this.shouldCancel(u))return;this.requests.shift()?.cancel({interrupted:l,cancelled:a})}shouldCancel(a){return a?!0:this.interruptible&&this.requests.length>=this.maxConcurrent}},V2=class{constructor(){this.syncRequestStream=new Nv({maxConcurrent:1,interruptible:!0}),this.asyncRequestStream=new Nv({maxConcurrent:1/0,interruptible:!1})}init({initialPage:a,resolveComponent:l,swapComponent:u}){ye.init({initialPage:a,resolveComponent:l,swapComponent:u}),U2.handle(),nr.init(),nr.on("missingHistoryItem",()=>{typeof window<"u"&&this.visit(window.location.href,{preserveState:!0,preserveScroll:!0,replace:!0})}),nr.on("loadDeferredProps",()=>{this.loadDeferredProps()})}get(a,l={},u={}){return this.visit(a,{...u,method:"get",data:l})}post(a,l={},u={}){return this.visit(a,{preserveState:!0,...u,method:"post",data:l})}put(a,l={},u={}){return this.visit(a,{preserveState:!0,...u,method:"put",data:l})}patch(a,l={},u={}){return this.visit(a,{preserveState:!0,...u,method:"patch",data:l})}delete(a,l={}){return this.visit(a,{preserveState:!0,...l,method:"delete"})}reload(a={}){if(!(typeof window>"u"))return this.visit(window.location.href,{...a,preserveScroll:!0,preserveState:!0,async:!0,headers:{...a.headers||{},"Cache-Control":"no-cache"}})}remember(a,l="default"){je.remember(a,l)}restore(a="default"){return je.restore(a)}on(a,l){return typeof window>"u"?()=>{}:nr.onGlobalEvent(a,l)}cancel(){this.syncRequestStream.cancelInFlight()}cancelAll(){this.asyncRequestStream.cancelInFlight(),this.syncRequestStream.cancelInFlight()}poll(a,l={},u={}){return q2.add(a,()=>this.reload(l),{autoStart:u.autoStart??!0,keepAlive:u.keepAlive??!1})}visit(a,l={}){const u=this.getPendingVisit(a,{...l,showProgress:l.showProgress??!l.async}),c=this.getVisitEvents(l);if(c.onBefore(u)===!1||!Dv(u))return;const f=u.async?this.asyncRequestStream:this.syncRequestStream;f.interruptInFlight(),!ye.isCleared()&&!u.preserveUrl&&gn.save();const d={...u,...c},h=In.get(d);h?(Bv(h.inFlight),In.use(h,d)):(Bv(!0),f.send(xv.create(d,ye.get())))}getCached(a,l={}){return In.findCached(this.getPrefetchParams(a,l))}flush(a,l={}){In.remove(this.getPrefetchParams(a,l))}flushAll(){In.removeAll()}flushByCacheTags(a){In.removeByTags(Array.isArray(a)?a:[a])}getPrefetching(a,l={}){return In.findInFlight(this.getPrefetchParams(a,l))}prefetch(a,l={},u={}){if((l.method??(rr(a)?a.method:"get"))!=="get")throw new Error("Prefetch requests must use the GET method");const f=this.getPendingVisit(a,{...l,async:!0,showProgress:!1,prefetch:!0}),d=f.url.origin+f.url.pathname+f.url.search,h=window.location.origin+window.location.pathname+window.location.search;if(d===h)return;const m=this.getVisitEvents(l);if(m.onBefore(f)===!1||!Dv(f))return;y0(),this.asyncRequestStream.interruptInFlight();const S={...f,...m};new Promise(v=>{const g=()=>{ye.get()?v():setTimeout(g,50)};g()}).then(()=>{In.add(S,v=>{this.asyncRequestStream.send(xv.create(v,ye.get()))},{cacheFor:3e4,cacheTags:[],...u})})}clearHistory(){je.clear()}decryptHistory(){return je.decrypt()}resolveComponent(a){return ye.resolve(a)}replace(a){this.clientVisit(a,{replace:!0})}push(a){this.clientVisit(a)}clientVisit(a,{replace:l=!1}={}){const u=ye.get(),c=typeof a.props=="function"?a.props(u.props):a.props??u.props,{onError:f,onFinish:d,onSuccess:h,...m}=a;ye.set({...u,...m,props:c},{replace:l,preserveScroll:a.preserveScroll,preserveState:a.preserveState}).then(()=>{const S=ye.get().props.errors||{};if(Object.keys(S).length===0)return h?.(ye.get());const y=a.errorBag?S[a.errorBag||""]||{}:S;return f?.(y)}).finally(()=>d?.(a))}getPrefetchParams(a,l){return{...this.getPendingVisit(a,{...l,async:!0,showProgress:!1,prefetch:!0}),...this.getVisitEvents(l)}}getPendingVisit(a,l,u={}){if(rr(a)){const m=a;a=m.url,l.method=l.method??m.method}const c={method:"get",data:{},replace:!1,preserveScroll:!1,preserveState:!1,only:[],except:[],headers:{},errorBag:"",forceFormData:!1,queryStringArrayFormat:"brackets",async:!1,showProgress:!0,fresh:!1,reset:[],preserveUrl:!1,prefetch:!1,invalidateCacheTags:[],...l},[f,d]=R2(a,c.data,c.method,c.forceFormData,c.queryStringArrayFormat),h={cancelled:!1,completed:!1,interrupted:!1,...c,...u,url:f,data:d};return h.prefetch&&(h.headers.Purpose="prefetch"),h}getVisitEvents(a){return{onCancelToken:a.onCancelToken||(()=>{}),onBefore:a.onBefore||(()=>{}),onStart:a.onStart||(()=>{}),onProgress:a.onProgress||(()=>{}),onFinish:a.onFinish||(()=>{}),onCancel:a.onCancel||(()=>{}),onSuccess:a.onSuccess||(()=>{}),onError:a.onError||(()=>{}),onPrefetched:a.onPrefetched||(()=>{}),onPrefetching:a.onPrefetching||(()=>{})}}loadDeferredProps(){const a=ye.get()?.deferredProps;a&&Object.entries(a).forEach(([l,u])=>{this.reload({only:u})})}};function Q2(a){if(!a.includes("."))return a;const l=u=>u.startsWith("[")&&u.endsWith("]")?u:u.split(".").reduce((c,f,d)=>d===0?f:`${c}[${f}]`);return a.replace(/\\\./g,"__ESCAPED_DOT__").split(/(\[[^\]]*\])/).filter(Boolean).map(l).join("").replace(/__ESCAPED_DOT__/g,".")}function X2(a){const l=[],u=/([^\[\]]+)|\[(\d*)\]/g;let c;for(;(c=u.exec(a))!==null;)c[1]!==void 0?l.push(c[1]):c[2]!==void 0&&l.push(c[2]===""?"":Number(c[2]));return l}function qv(a){const l={};for(const[u,c]of a.entries()){if(c instanceof File&&c.size===0&&c.name==="")continue;const f=X2(Q2(u));if(f[f.length-1]===""){const d=f.slice(0,-1),h=bg(l,d);Array.isArray(h)?h.push(c):ii(l,d,[c]);continue}ii(l,f,c)}return l}var $2={buildDOMElement(a){const l=document.createElement("template");l.innerHTML=a;const u=l.content.firstChild;if(!a.startsWith("