diff --git a/.env.example b/.env.example index 5d3e7d4f78db..3f43511243f0 100644 --- a/.env.example +++ b/.env.example @@ -24,6 +24,7 @@ QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 +MAIL_MAILER=smtp REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 diff --git a/app/Helpers/Sanitizer.php b/app/Helpers/Sanitizer.php new file mode 100644 index 000000000000..2c8598b00859 --- /dev/null +++ b/app/Helpers/Sanitizer.php @@ -0,0 +1,28 @@ +input('mail_driver'); + $mail_driver = $request->input('mail_driver', 'smtp'); $url = $request->input('url'); $db_host = $request->input('db_host'); diff --git a/app/Http/Requests/Company/UpdateCompanyRequest.php b/app/Http/Requests/Company/UpdateCompanyRequest.php index de12d404af5c..3f7300fb9b0d 100644 --- a/app/Http/Requests/Company/UpdateCompanyRequest.php +++ b/app/Http/Requests/Company/UpdateCompanyRequest.php @@ -98,9 +98,10 @@ class UpdateCompanyRequest extends Request $input['portal_domain'] = rtrim(strtolower($input['portal_domain']), "/"); } - if (isset($input['expense_mailbox']) && Ninja::isHosted() && !($this->company->account->isPaid() && $this->company->account->plan == 'enterprise')) { - unset($input['expense_mailbox']); - } + // /** Disabled on the hosted platform */ + // if (isset($input['expense_mailbox']) && Ninja::isHosted() && !($this->company->account->isPaid() && $this->company->account->plan == 'enterprise')) { + // unset($input['expense_mailbox']); + // } if (isset($input['settings'])) { $input['settings'] = (array) $this->filterSaveableSettings($input['settings']); diff --git a/app/Livewire/BillingPortal/Payments/Methods.php b/app/Livewire/BillingPortal/Payments/Methods.php index d467b0d85aa5..124fe4f8ba45 100644 --- a/app/Livewire/BillingPortal/Payments/Methods.php +++ b/app/Livewire/BillingPortal/Payments/Methods.php @@ -17,7 +17,7 @@ use App\Models\Subscription; use Illuminate\Support\Facades\Cache; class Methods extends Component -{ +{//@todo this breaks down when the cart is in front of the login - we have no context on the user - nor their country/currency public Subscription $subscription; public array $context; @@ -28,10 +28,7 @@ class Methods extends Component { $total = collect($this->context['products'])->sum('total_raw'); - $methods = auth()->guard('contact')->user()->client->service()->getPaymentMethods( - $total, - ); - + $methods = auth()->guard('contact')->user()->client->service()->getPaymentMethods($total); //@todo this breaks down when the cart is in front of the login - we have no context on the user - nor their country/currency() $this->methods = $methods; } diff --git a/app/Livewire/BillingPortalPurchasev2.php b/app/Livewire/BillingPortalPurchasev2.php index a5256fc0828e..cf03d07f75c6 100644 --- a/app/Livewire/BillingPortalPurchasev2.php +++ b/app/Livewire/BillingPortalPurchasev2.php @@ -199,7 +199,8 @@ class BillingPortalPurchasev2 extends Component $this->data = []; $this->price = $this->subscription->price; // ? - + $this->float_amount_total = $this->price; + $this->recurring_products = $this->subscription->service()->recurring_products(); $this->products = $this->subscription->service()->products(); $this->optional_recurring_products = $this->subscription->service()->optional_recurring_products(); @@ -244,7 +245,8 @@ class BillingPortalPurchasev2 extends Component Auth::guard('contact')->loginUsingId($contact->id, true); $this->contact = $contact; } else { - $this->createClientContact(); + // $this->createClientContact(); + $this->createBlankClient(); } $this->getPaymentMethods(); @@ -767,6 +769,8 @@ class BillingPortalPurchasev2 extends Component if ($currency) { $data['settings']->currency_id = $currency->id; } + }else { + $data['settings']->currency_id = $this->subscription->company->getSetting('currency_id'); } if (array_key_exists('locale', $this->request_data)) { @@ -785,8 +789,12 @@ class BillingPortalPurchasev2 extends Component } $client = $client_repo->save($data, ClientFactory::create($company->id, $user->id)); + $contact = $client->fresh()->contacts->first(); + $this->contact = $contact; - return $client->fresh()->contacts->first(); + Auth::guard('contact')->loginUsingId($contact->id, true); + + return $contact; } diff --git a/app/Livewire/Flow2/InvoiceSummary.php b/app/Livewire/Flow2/InvoiceSummary.php index af21a26894a6..f856ab52e3e7 100644 --- a/app/Livewire/Flow2/InvoiceSummary.php +++ b/app/Livewire/Flow2/InvoiceSummary.php @@ -50,7 +50,7 @@ class InvoiceSummary extends Component public function downloadDocument($invoice_hashed_id) { - nlog("here"); + $contact = $this->getContext()['contact']; $_invoices = $this->getContext()['invoices']; $i = $_invoices->first(function ($i) use($invoice_hashed_id){ @@ -61,11 +61,6 @@ class InvoiceSummary extends Component $file = (new \App\Jobs\Entity\CreateRawPdf($i->invitations()->where('client_contact_id', $contact->id)->first()))->handle(); - - nlog("here"); - - nlog($file); - $headers = ['Content-Type' => 'application/pdf']; return response()->streamDownload(function () use ($file) { diff --git a/app/Livewire/Flow2/UnderOverPayment.php b/app/Livewire/Flow2/UnderOverPayment.php index 52c257deb315..3d7a6a5ae63f 100644 --- a/app/Livewire/Flow2/UnderOverPayment.php +++ b/app/Livewire/Flow2/UnderOverPayment.php @@ -52,11 +52,11 @@ class UnderOverPayment extends Component $input_amount = collect($payableInvoices)->sum('amount'); - if($settings->client_portal_allow_under_payment && $settings->client_portal_under_payment_minimum != 0) + if($settings->client_portal_allow_under_payment) { - if($input_amount <= $settings->client_portal_under_payment_minimum){ + if($input_amount <= $settings->client_portal_under_payment_minimum || $input_amount <= 0){ // return error message under payment too low. - $this->errors = ctrans('texts.minimum_required_payment', ['amount' => $settings->client_portal_under_payment_minimum]); + $this->errors = ctrans('texts.minimum_required_payment', ['amount' => max($settings->client_portal_under_payment_minimum, 1)]); $this->dispatch('errorMessageUpdate', errors: $this->errors); } } diff --git a/app/Livewire/RequiredClientInfo.php b/app/Livewire/RequiredClientInfo.php index 11f7e8312a96..4640b9a9b7df 100644 --- a/app/Livewire/RequiredClientInfo.php +++ b/app/Livewire/RequiredClientInfo.php @@ -194,13 +194,14 @@ class RequiredClientInfo extends Component public function mount() { - MultiDB::setDb($this->db); + $contact = ClientContact::withTrashed()->with(['client' => function ($query) { $query->without('gateway_tokens', 'documents', 'contacts.company', 'contacts'); // Exclude 'grandchildren' relation of 'client' }])->find($this->contact_id); $this->company_gateway = CompanyGateway::withTrashed()->with('company')->find($this->company_gateway_id); + $company = $this->company_gateway->company; $this->client_name = $contact->client->name; @@ -240,6 +241,13 @@ class RequiredClientInfo extends Component $this->checkFields(); } + if (count($this->fields) === 0) { + $this->dispatch( + 'passed-required-fields-check', + client_postal_code: $contact->client->postal_code + ); + } + if($this->unfilled_fields > 0 || ($this->company_gateway->always_show_required_fields || $this->is_subscription)) { $this->show_form = true; } @@ -385,7 +393,6 @@ class RequiredClientInfo extends Component public function checkFields() { - MultiDB::setDb($this->db); $_contact = ClientContact::withTrashed()->find($this->contact_id); diff --git a/app/Models/Company.php b/app/Models/Company.php index 97a567d4ef89..69957406f1d4 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -371,7 +371,7 @@ class Company extends BaseModel 'tax_data', 'e_invoice_certificate_passphrase', 'expense_mailbox_active', - 'expense_mailbox', // TODO: @turbo124 custom validation: self-hosted => free change, hosted => not changeable, only changeable with env-mask + 'expense_mailbox', 'inbound_mailbox_allow_company_users', 'inbound_mailbox_allow_vendors', 'inbound_mailbox_allow_clients', diff --git a/app/Models/CompanyGateway.php b/app/Models/CompanyGateway.php index ce561f31bf0c..73dbae6617d7 100644 --- a/app/Models/CompanyGateway.php +++ b/app/Models/CompanyGateway.php @@ -28,6 +28,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property bool $update_details * @property bool $is_deleted * @property string $config + * @property object $settings * @property mixed $fees_and_limits * @property string|null $custom_value1 * @property string|null $custom_value2 @@ -74,6 +75,7 @@ class CompanyGateway extends BaseModel protected $casts = [ 'fees_and_limits' => 'object', + 'settings' => 'object', 'updated_at' => 'timestamp', 'created_at' => 'timestamp', 'deleted_at' => 'timestamp', @@ -156,6 +158,7 @@ class CompanyGateway extends BaseModel '80af24a6a691230bbec33e930ab40666' => 323, 'vpyfbmdrkqcicpkjqdusgjfluebftuva' => 324, //BTPay '91be24c7b792230bced33e930ac61676' => 325, + 'b67581d804dbad1743b61c57285142ad' => 326, //Powerboard ]; protected $touches = []; @@ -483,6 +486,18 @@ class CompanyGateway extends BaseModel return $fee; } + public function getSettings() + { + // return $this->settings; + return $this->settings ?? new \stdClass; + } + + public function setSettings($settings) + { + $this->settings = $settings; + $this->save(); + } + public function webhookUrl() { return route('payment_webhook', ['company_key' => $this->company->company_key, 'company_gateway_id' => $this->hashed_id]); diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index 1bbfe1b95fae..d1276d931348 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -235,6 +235,10 @@ class Gateway extends StaticModel ], GatewayType::ACSS => ['refund' => false, 'token_billing' => true, 'webhooks' => []] ]; // Rotessa + case 64: //b67581d804dbad1743b61c57285142ad - powerboard + return [ + GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true], + ]; default: return []; } diff --git a/app/Models/Subscription.php b/app/Models/Subscription.php index bc0f759222c8..765556c410d9 100644 --- a/app/Models/Subscription.php +++ b/app/Models/Subscription.php @@ -25,6 +25,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property int $user_id * @property int|null $assigned_user_id * @property int $company_id + * @property int $remaining_cycles * @property string|null $product_ids * @property int|null $frequency_id * @property string|null $auto_bill @@ -117,6 +118,7 @@ class Subscription extends BaseModel 'optional_recurring_product_ids', 'use_inventory_management', 'steps', + 'remaining_cycles', ]; protected $casts = [ diff --git a/app/Models/SystemLog.php b/app/Models/SystemLog.php index a24947a0f6d3..acc05c3246db 100644 --- a/app/Models/SystemLog.php +++ b/app/Models/SystemLog.php @@ -156,6 +156,8 @@ class SystemLog extends Model public const TYPE_ROTESSA = 325; + public const TYPE_POWERBOARD = 326; + public const TYPE_QUOTA_EXCEEDED = 400; public const TYPE_UPSTREAM_FAILURE = 401; diff --git a/app/PaymentDrivers/BaseDriver.php b/app/PaymentDrivers/BaseDriver.php index ff89084efc6e..23f7a81545f9 100644 --- a/app/PaymentDrivers/BaseDriver.php +++ b/app/PaymentDrivers/BaseDriver.php @@ -410,6 +410,7 @@ class BaseDriver extends AbstractPaymentDriver if($invoice && $fee_count == 0){ + nlog("apparently no fee, so injecting here!"); if(!$invoice->uses_inclusive_taxes){ //must account for taxes! ? line item taxes also @@ -771,6 +772,18 @@ class BaseDriver extends AbstractPaymentDriver ); } + public function logUnsuccessfulGatewayResponse($response, $gateway_const) + { + SystemLogger::dispatch( + $response, + SystemLog::CATEGORY_GATEWAY_RESPONSE, + SystemLog::EVENT_GATEWAY_FAILURE, + $gateway_const, + $this->client, + $this->client->company, + ); + } + public function genericWebhookUrl() { return route('payment_notification_webhook', [ diff --git a/app/PaymentDrivers/CBAPowerBoard/CreditCard.php b/app/PaymentDrivers/CBAPowerBoard/CreditCard.php new file mode 100644 index 000000000000..aa0c6e80374a --- /dev/null +++ b/app/PaymentDrivers/CBAPowerBoard/CreditCard.php @@ -0,0 +1,491 @@ +cba_gateway = $this->powerboard->settings()->getPaymentGatewayConfiguration(GatewayType::CREDIT_CARD); + } + + public function authorizeView(array $data) + { + $data['payment_method_id'] = GatewayType::CREDIT_CARD; + $data['threeds'] = $this->powerboard->company_gateway->getConfigField('threeds'); + + return render('gateways.powerboard.credit_card.authorize', $this->paymentData($data)); + } + + public function authorizeResponse($request) + { + + if($request->browser_details) + { + $payment_source = $this->storePaymentSource($request); + + nlog($payment_source); + + $browser_details = json_decode($request->browser_details, true); + + $payload = [ + "capture" => false, + "amount" => 1, + "currency" => $this->powerboard->client->currency()->code, + "description" => "Card authorization", + "customer" => [ + "payment_source" => [ + "vault_token" => $payment_source->vault_token, + "gateway_id" => $this->powerboard->settings()->getGatewayId(GatewayType::CREDIT_CARD), + ], + ], + "_3ds" => [ + "browser_details" => $browser_details, + ], + ]; + + nlog($payload); + + $r = $this->powerboard->gatewayRequest('/v1/charges/3ds', (\App\Enum\HttpVerb::POST)->value, $payload, []); + + if ($r->failed()) { + + $error_payload = $this->getErrorFromResponse($r); + return response()->json(['message' => $error_payload[0]], 400); + + // return $this->processUnsuccessfulPayment($r); + } + + $charge = $r->json(); + nlog($charge['resource']['data']); + + return response()->json($charge['resource']['data'], 200); + + } + elseif($request->charge) { + + $charge_request = json_decode($request->charge, true); + nlog("we have the charge request"); + nlog($charge_request); + + $payload = [ + '_3ds' => [ + 'id' => array_key_exists('charge_3ds_id', $charge_request) ? $charge_request['charge_3ds_id'] : $charge_request['_3ds']['id'], + ], + "capture" => false, + "authorization" => true, + "amount"=> 1, + "currency"=> $this->powerboard->client->currency()->code, + "store_cvv"=> true, + ]; + + nlog($payload); + + $r = $this->powerboard->gatewayRequest("/v1/charges", (\App\Enum\HttpVerb::POST)->value, $payload, []); + + if($r->failed()){ + + $error_payload = $this->getErrorFromResponse($r); + throw new PaymentFailed($error_payload[0], $error_payload[1]); + + } + + $charge = (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(Charge::class, $r->object()->resource->data) ?? $r->throw(); + + nlog($charge); + + if ($charge->status == 'complete') { + + $this->powerboard->logSuccessfulGatewayResponse(['response' => $charge, 'data' => $this->powerboard->payment_hash], SystemLog::TYPE_POWERBOARD); + + $vt = $charge->customer->payment_source->vault_token; + + $data = [ + "payment_source" => [ + "vault_token" => $vt, + ], + ]; + + $customer = $this->powerboard->customer()->findOrCreateCustomer($data); + $cgt = $this->powerboard->customer()->storePaymentMethod($charge->customer->payment_source, $charge->customer); + + return redirect()->route('client.payment_methods.show', ['payment_method' => $cgt->hashed_id]); + } + + + } + elseif($request->charge_no3d){ + nlog($request->all()); + + $payment_source = $this->storePaymentSource($request); + + nlog($payment_source); + + $data = [ + "payment_source" => [ + "vault_token" => $payment_source->vault_token, + ], + ]; + + $customer = $this->powerboard->customer()->findOrCreateCustomer($data); + + $cgt = $this->powerboard->customer()->storePaymentMethod($payment_source, $customer); + $cgt->gateway_customer_reference = $this->powerboard->settings()->getGatewayId(GatewayType::CREDIT_CARD); + $cgt->save(); + + return redirect()->route('client.payment_methods.show', ['payment_method' => $cgt->hashed_id]); + + } + + return redirect()->route('client.payment_methods.index'); + + } + + private function getCustomer(): array + { + $data = [ + 'first_name' => $this->powerboard->client->present()->first_name(), + 'last_name' => $this->powerboard->client->present()->first_name(), + 'email' => $this->powerboard->client->present()->email(), + // 'phone' => $this->powerboard->client->present()->phone(), + // 'type' => 'card', + 'address_line1' => $this->powerboard->client->address1 ?? '', + 'address_line2' => $this->powerboard->client->address2 ?? '', + 'address_state' => $this->powerboard->client->state ?? '', + 'address_country' => $this->powerboard->client->country->iso_3166_3 ?? '', + 'address_city' => $this->powerboard->client->city ?? '', + 'address_postcode' => $this->powerboard->client->postal_code ?? '', + ]; + + return \App\Helpers\Sanitizer::removeBlanks($data); + + } + + private function storePaymentSource($request) + { + + $this->powerboard->init(); + + $payment_source = $request->gateway_response; + + $payload = array_merge($this->getCustomer(), [ + 'token' => $payment_source, + "vault_type" => "permanent", + 'store_ccv' => true, + ]); + + nlog($payload); + + $r = $this->powerboard->gatewayRequest('/v1/vault/payment_sources', (\App\Enum\HttpVerb::POST)->value, $payload, []); + + if($r->failed()) + return $this->powerboard->processInternallyFailedPayment($this->powerboard, $r->throw()); + + nlog($r->object()); + + $source = (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(PaymentSource ::class, $r->object()->resource->data); + + return $source; + + } + + + public function paymentData(array $data): array + { + $this->powerboard->init(); + + if($this->cba_gateway->verification_status != "completed") + throw new PaymentFailed("This payment method is not configured as yet. Reference Powerboard portal for further information", 400); + + $merge = [ + 'public_key' => $this->powerboard->company_gateway->getConfigField('publicKey'), + 'widget_endpoint' => $this->powerboard->widget_endpoint, + 'gateway' => $this->powerboard, + 'environment' => $this->powerboard->environment, + 'gateway_id' => $this->cba_gateway->_id, + ]; + + return array_merge($data, $merge); + } + + public function paymentView(array $data) + { + $data = $this->paymentData($data); + + return render('gateways.powerboard.credit_card.pay', $data); + } + + public function livewirePaymentView(array $data): string + { + return 'gateways.powerboard.credit_card.pay_livewire'; + } + + public function tokenBilling($request, $cgt, $client_present = false) + { + + $payload = [ + "amount" => $this->powerboard->payment_hash->data->amount_with_fee, + "currency" => $this->powerboard->client->currency()->code, + "customer" => [ + "payment_source" => [ + "vault_token" => $cgt->token, + "gateway_id" => $cgt->gateway_customer_reference + ] + ] + ]; + + $r = $this->powerboard->gatewayRequest('/v1/charges', (\App\Enum\HttpVerb::POST)->value, $payload, []); + + nlog($r->body()); + + if($r->failed()){ + $error_payload = $this->getErrorFromResponse($r); + throw new PaymentFailed($error_payload[0], $error_payload[1]); + } + + $charge = (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(Charge::class, $r->object()->resource->data) ?? $r->throw(); + + nlog($charge); + + $this->powerboard->logSuccessfulGatewayResponse(['response' => $charge, 'data' => $this->powerboard->payment_hash], SystemLog::TYPE_POWERBOARD); + + return $this->processSuccessfulPayment($charge); + } + + private function get3dsToken(PaymentSource $source, $request) + { + + $payment_hash = PaymentHash::query()->where('hash', $request->payment_hash)->first(); + + $browser_details = json_decode($request->browser_details,true); + + $payload = [ + "amount" => $payment_hash->data->amount_with_fee, + "currency" => $this->powerboard->client->currency()->code, + "description" => $this->powerboard->getDescription(), + "customer" => [ + "payment_source" => [ + "vault_token" => $source->vault_token, + "gateway_id" => $this->powerboard->settings()->getGatewayId(GatewayType::CREDIT_CARD), + ], + ], + "_3ds" => [ + "browser_details" => $browser_details, + ], + ]; + + nlog($payload); + + $r = $this->powerboard->gatewayRequest('/v1/charges/3ds', (\App\Enum\HttpVerb::POST)->value, $payload, []); + + if ($r->failed()) { + $error_payload = $this->getErrorFromResponse($r); + return response()->json(['message' => $error_payload[0]], 400); + } + + $charge = $r->json(); + + return response()->json($charge['resource']['data'], 200); + + } + + public function paymentResponse(PaymentResponseRequest $request) + { + nlog($request->all()); + + $this->powerboard->payment_hash->data = array_merge((array) $this->powerboard->payment_hash->data, ['response' => $request->all()]); + $this->powerboard->payment_hash->save(); + + $payload = []; + + /** Token Payment */ + if($request->input('token', false)) + { + $cgt = $this->powerboard + ->client + ->gateway_tokens() + ->where('company_gateway_id', $this->powerboard->company_gateway->id) + ->where('token', $request->token) + ->first(); + + return $this->tokenBilling($request, $cgt, true); + + } + elseif($request->browser_details) + { + $payment_source = $this->storePaymentSource($request); + + nlog($payment_source); + + return $this->get3dsToken($payment_source, $request); + + } + elseif($request->charge) { + + $charge_request = json_decode($request->charge, true); + + nlog($charge_request); + + $payload = [ + '_3ds' => [ + 'id' => array_key_exists('charge_3ds_id', $charge_request) ? $charge_request['charge_3ds_id'] : $charge_request['_3ds']['id'], + ], + "amount"=> $this->powerboard->payment_hash->data->amount_with_fee, //@phpstan-ignore-line + "currency"=> $this->powerboard->client->currency()->code, + "store_cvv"=> true, + ]; + + $r = $this->powerboard->gatewayRequest("/v1/charges", (\App\Enum\HttpVerb::POST)->value, $payload, []); + + if($r->failed()) + return $this->processUnsuccessfulPayment($r); + + $charge = (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(Charge::class, $r->object()->resource->data) ?? $r->throw(); + + nlog($charge); + + if ($charge->status == 'complete') { + $this->powerboard->logSuccessfulGatewayResponse(['response' => $charge, 'data' => $this->powerboard->payment_hash], SystemLog::TYPE_POWERBOARD); + + $vt = $charge->customer->payment_source->vault_token; + + if($request->store_card){ + $data = [ + "payment_source" => [ + "vault_token" => $vt, + ], + ]; + + $customer = $this->powerboard->customer()->findOrCreateCustomer($data); + $cgt = $this->powerboard->customer()->storePaymentMethod($charge->customer->payment_source, $charge->customer); + } + + return $this->processSuccessfulPayment($charge); + } + elseif($charge->error){ + + $this->powerboard->logUnsuccessfulGatewayResponse($charge, SystemLog::TYPE_POWERBOARD); + + throw new PaymentFailed($charge->error->message, $charge->status); + } + + } + + session()->flash('message', ctrans('texts.payment_token_not_found')); + + return redirect()->back(); + } + + public function processSuccessfulPayment(Charge $charge) + { + + $data = [ + 'payment_type' => PaymentType::CREDIT_CARD_OTHER, + 'amount' => $this->powerboard->payment_hash->data->amount_with_fee, + 'transaction_reference' => $charge->_id, + 'gateway_type_id' => GatewayType::CREDIT_CARD, + ]; + + $payment = $this->powerboard->createPayment($data, Payment::STATUS_COMPLETED); + + SystemLogger::dispatch( + ['response' => $charge, 'data' => $data], + SystemLog::CATEGORY_GATEWAY_RESPONSE, + SystemLog::EVENT_GATEWAY_SUCCESS, + SystemLog::TYPE_POWERBOARD, + $this->powerboard->client, + $this->powerboard->client->company, + ); + + if ($payment->invoices()->whereHas('subscription')->exists()) { + $subscription = $payment->invoices()->first()->subscription; + + if ($subscription && array_key_exists('return_url', $subscription->webhook_configuration) && strlen($subscription->webhook_configuration['return_url']) >= 1) { + return redirect($subscription->webhook_configuration['return_url']); + } + } + + return redirect()->route('client.payments.show', ['payment' => $payment->hashed_id]); + } + + private function getErrorFromResponse($response) + { + + try { + $response->throw(); + } catch (RequestException $exception) { + + $error_object = $exception->response->object(); + + $this->powerboard->logUnsuccessfulGatewayResponse($error_object, SystemLog::TYPE_POWERBOARD); + + $error_message = "Unknown error"; + + match($error_object->error->code) { + "UnfulfilledCondition" => $error_message = $error_object->error->details->messages[0] ?? $error_object->error->message ?? "Unknown error", + "GatewayError" => $error_message = $error_object->error->message, + "UnfulfilledCondition" => $error_message = $error_object->error->message, + "transaction_declined" => $error_message = $error_object->error->details[0]->status_code_description, + default => $error_message = $error_object->error->message ?? "Unknown error", + }; + + return [$error_message, $exception->getCode()]; + + } + + } + public function processUnsuccessfulPayment($response) + { + $error = $this->getErrorFromResponse($response); + + $this->powerboard->sendFailureMail($error[0]); + + // $message = [ + // 'server_response' => $server_response, + // 'data' => $this->stripe->payment_hash->data, + // ]; + + SystemLogger::dispatch( + $error[0], + SystemLog::CATEGORY_GATEWAY_RESPONSE, + SystemLog::EVENT_GATEWAY_FAILURE, + SystemLog::TYPE_POWERBOARD, + $this->powerboard->client, + $this->powerboard->client->company, + ); + + if (request()->wantsJson()) { + return response()->json($error[0], 200); + } + + throw new PaymentFailed('Failed to process the payment.', $error[1]); + } + +} diff --git a/app/PaymentDrivers/CBAPowerBoard/Customer.php b/app/PaymentDrivers/CBAPowerBoard/Customer.php new file mode 100644 index 000000000000..9ac9e75da6c1 --- /dev/null +++ b/app/PaymentDrivers/CBAPowerBoard/Customer.php @@ -0,0 +1,186 @@ +powerboard + ->client + ->gateway_tokens() + ->whereNotNull('gateway_customer_reference') + ->where('company_gateway_id', $this->powerboard->company_gateway->id) + ->first(); + + if($token && $customer = $this->getCustomer($token->gateway_customer_reference)){ + return (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(ModelsCustomer::class, $customer->resource->data); + } + + if($customer = $this->findCustomer()) + return (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(ModelsCustomer::class, $customer); + + + return $this->createCustomer($customer_data); + + } + + public function getCustomer(string $id): mixed + { + $uri = "/v1/customers/{$id}"; + + $r = $this->powerboard->gatewayRequest($uri, (\App\Enum\HttpVerb::GET)->value, [], []); + + nlog($r->json()); + + if($r->successful()) + return $r->object(); + + return false; + } + + public function findCustomer(): mixed + { + $uri = '/v1/customers'; + + $query = [ + 'reference' => $this->powerboard->client->client_hash, + ]; + + $r = $this->powerboard->gatewayRequest($uri, (\App\Enum\HttpVerb::GET)->value, $query, []); + + $search_results = $r->object(); + + nlog($search_results); + + $customers = $search_results->resource->data; + + return reset($customers); // returns first element or false + + } + + public function createCustomer(array $data = []): object + { + + $payload = [ + 'company_name' => $this->powerboard->client->present()->name(), + 'first_name' => $this->powerboard->client->present()->first_name(), + 'last_name' => $this->powerboard->client->present()->first_name(), + 'email' => $this->powerboard->client->present()->email(), + 'reference' => $this->powerboard->client->client_hash, + // 'phone' => $this->powerboard->client->present()->phone(), + ]; + + + $payload = array_merge($payload, $data); + + $payload = Sanitizer::removeBlanks($payload); + + nlog($payload); + + $uri = "/v1/customers"; + + $r = $this->powerboard->gatewayRequest($uri, (\App\Enum\HttpVerb::POST)->value, $payload, []); + + if($r->failed()) + $r->throw(); + + return (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(ModelsCustomer::class, $r->object()->resource->data) ?? $r->throw(); + + } + + public function storePaymentMethod(?PaymentSource $payment_source = null, ?ModelsCustomer $customer = null): ClientGatewayToken + { + + /** @var PaymentSource $source */ + $source = $payment_source ? $payment_source : end($customer->payment_sources); + + $payment_meta = new \stdClass(); + $payment_meta->exp_month = (string) $source->expire_month; + $payment_meta->exp_year = (string) $source->expire_year; + $payment_meta->brand = (string) $source->card_scheme; + $payment_meta->last4 = (string) $source->card_number_last4; + $payment_meta->gateway_id = $source->gateway_id ?? null; + $payment_meta->type = \App\Models\GatewayType::CREDIT_CARD; + + $data = [ + 'payment_meta' => $payment_meta, + 'token' => $source->vault_token, + 'payment_method_id' => \App\Models\GatewayType::CREDIT_CARD, + ]; + + $cgt = $this->powerboard->storeGatewayToken($data, ['gateway_customer_reference' => $source->gateway_id]); + + return $cgt; + + } + + + public function addTokenToCustomer(string $token, ModelsCustomer $customer): mixed + { + nlog("add token to customer"); + + $uri = "/v1/customers/{$customer->_id}"; + + $payload = [ + 'payment_source' => [ + 'vault_token' => $token, + ] + ]; + + $r = $this->powerboard->gatewayRequest($uri, (\App\Enum\HttpVerb::POST)->value, $payload, []); + + if($r->failed()){ + nlog($r->body()); + return $r->throw(); + } + + nlog($r->object()); + + $customer = (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(ModelsCustomer::class, $r->object()->resource->data); + + $source = collect($customer->payment_sources)->first(function (PaymentSource $source) use ($token){ + return $token == $source->vault_token; + }); + + nlog("i found the source"); + nlog($source); + + $cgt = $this->powerboard + ->client + ->gateway_tokens() + ->where('token', $token) + ->first(); + + nlog($cgt->id); + + $meta = $cgt->meta; + $meta->gateway_id = $source->gateway_id; + $cgt->meta = $meta; + $cgt->save(); + + return $r->object(); + } + +} + diff --git a/app/PaymentDrivers/CBAPowerBoard/Models/Charge.php b/app/PaymentDrivers/CBAPowerBoard/Models/Charge.php new file mode 100644 index 000000000000..a165876c0608 --- /dev/null +++ b/app/PaymentDrivers/CBAPowerBoard/Models/Charge.php @@ -0,0 +1,84 @@ +external_id = $external_id; + $this->_id = $_id; + $this->created_at = $created_at; + $this->updated_at = $updated_at; + $this->remittance_date = $remittance_date; + $this->company_id = $company_id; + $this->amount = $amount; + $this->currency = $currency; + $this->__v = $__v; + $this->transactions = $transactions; + $this->one_off = $one_off; + $this->archived = $archived; + $this->customer = $customer; + $this->capture = $capture; + $this->status = $status; + $this->items = $items; + } +} diff --git a/app/PaymentDrivers/CBAPowerBoard/Models/Customer.php b/app/PaymentDrivers/CBAPowerBoard/Models/Customer.php new file mode 100644 index 000000000000..a207b79ec719 --- /dev/null +++ b/app/PaymentDrivers/CBAPowerBoard/Models/Customer.php @@ -0,0 +1,85 @@ +_id = $_id; + $this->_source_ip_address = $_source_ip_address; + $this->first_name = $first_name; + $this->last_name = $last_name; + $this->email = $email; + $this->reference = $reference; + $this->default_source = $default_source; + $this->status = $status; + $this->archived = $archived; + $this->created_at = $created_at; + $this->updated_at = $updated_at; + $this->_check_expire_date = $_check_expire_date; + $this->payment_sources = $payment_sources; + $this->payment_destinations = $payment_destinations; + $this->company_id = $company_id; + $this->payment_source = $payment_source; + } +} \ No newline at end of file diff --git a/app/PaymentDrivers/CBAPowerBoard/Models/Gateway.php b/app/PaymentDrivers/CBAPowerBoard/Models/Gateway.php new file mode 100644 index 000000000000..d36e176d5ffb --- /dev/null +++ b/app/PaymentDrivers/CBAPowerBoard/Models/Gateway.php @@ -0,0 +1,56 @@ +_id = $_id; + $this->name = $name; + $this->type = $type; + $this->mode = $mode; + $this->created_at = $created_at; + $this->updated_at = $updated_at; + $this->archived = $archived; + $this->default = $default; + $this->verification_status = $verification_status; + } +} diff --git a/app/PaymentDrivers/CBAPowerBoard/Models/Parse.php b/app/PaymentDrivers/CBAPowerBoard/Models/Parse.php new file mode 100644 index 000000000000..55d213a33e3e --- /dev/null +++ b/app/PaymentDrivers/CBAPowerBoard/Models/Parse.php @@ -0,0 +1,70 @@ +deserialize(json_encode($document), $object_type, 'json', [\Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer::SKIP_NULL_VALUES => true]); + + return $data; + + } +} \ No newline at end of file diff --git a/app/PaymentDrivers/CBAPowerBoard/Models/PaymentSource.php b/app/PaymentDrivers/CBAPowerBoard/Models/PaymentSource.php new file mode 100644 index 000000000000..019b2fcfa9d0 --- /dev/null +++ b/app/PaymentDrivers/CBAPowerBoard/Models/PaymentSource.php @@ -0,0 +1,96 @@ +_id = $_id; + $this->type = $type; + $this->vault_token = $vault_token; + $this->card_name = $card_name; + $this->card_number_bin = $card_number_bin; + $this->card_number_last4 = $card_number_last4; + $this->card_scheme = $card_scheme; + $this->address_line1 = $address_line1; + $this->address_line2 = $address_line2; + $this->address_city = $address_city; + $this->address_country = $address_country; + $this->address_state = $address_state; + $this->expire_month = $expire_month; + $this->expire_year = $expire_year; + $this->status = $status; + $this->created_at = $created_at; + $this->updated_at = $updated_at; + $this->vault_type = $vault_type; + $this->gateway_id = $gateway_id; + } +} diff --git a/app/PaymentDrivers/CBAPowerBoard/Models/PaymentSources.php b/app/PaymentDrivers/CBAPowerBoard/Models/PaymentSources.php new file mode 100644 index 000000000000..0698e6f4078a --- /dev/null +++ b/app/PaymentDrivers/CBAPowerBoard/Models/PaymentSources.php @@ -0,0 +1,18 @@ +_3ds = $_3ds; + $this->gateway_specific_code = $gateway_specific_code; + $this->gateway_specific_description = $gateway_specific_description; + $this->error_message = $error_message; + $this->error_code = $error_code; + $this->status_code = $status_code; + $this->status_code_description = $status_code_description; + $this->type = $type; + $this->status = $status; + $this->amount = $amount; + $this->currency = $currency; + $this->_id = $_id; + $this->created_at = $created_at; + $this->updated_at = $updated_at; + $this->processed_at = $processed_at; + $this->external_id = $external_id; + $this->external_reference = $external_reference; + $this->authorization_code = $authorization_code; + } +} diff --git a/app/PaymentDrivers/CBAPowerBoard/Settings.php b/app/PaymentDrivers/CBAPowerBoard/Settings.php new file mode 100644 index 000000000000..945a72f48ea7 --- /dev/null +++ b/app/PaymentDrivers/CBAPowerBoard/Settings.php @@ -0,0 +1,96 @@ +powerboard->gatewayRequest('/v1/gateways', (\App\Enum\HttpVerb::GET)->value, [], []); + + if($r->failed()) + $r->throw(); + + nlog($r->object()); + + return (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(Gateway::class."[]", $r->object()->resource->data); + + } + + /** We will need to have a process that updates this at intervals */ + public function updateSettings():self + { + $gateways = $this->getGateways(); + + $settings = $this->powerboard->company_gateway->getSettings(); + $settings->gateways = $gateways; + $this->powerboard->company_gateway->setSettings($settings); + + return $this; + } + + public function getSettings(): mixed + { + return $this->powerboard->company_gateway->getSettings(); + } + + public function getPaymentGatewayConfiguration(int $gateway_type_id): mixed + { + $type = self::GATEWAY_CBA; + + match($gateway_type_id){ + \App\Models\GatewayType::CREDIT_CARD => $type = self::GATEWAY_CBA, + default => $type = self::GATEWAY_CBA, + }; + + return $this->getGatewayByType($type); + } + + private function getGatewayByType(string $gateway_type_const): mixed + { + $settings = $this->getSettings(); + + if(!property_exists($settings,'gateways')){ + $this->updateSettings(); + $settings = $this->getSettings(); + } + + $gateways = (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(Gateway::class."[]", $settings->gateways); + + return collect($gateways)->first(function (Gateway $gateway) use ($gateway_type_const){ + return $gateway->type == $gateway_type_const; + }); + } + + public function getGatewayId(int $gateway_type_id): string + { + $gateway = $this->getPaymentGatewayConfiguration($gateway_type_id); + + return $gateway->_id; + } +} diff --git a/app/PaymentDrivers/CBAPowerBoardPaymentDriver.php b/app/PaymentDrivers/CBAPowerBoardPaymentDriver.php new file mode 100644 index 000000000000..cf03217b350b --- /dev/null +++ b/app/PaymentDrivers/CBAPowerBoardPaymentDriver.php @@ -0,0 +1,231 @@ + CreditCard::class, + ]; + /** + * Returns the gateway types. + */ + public function gatewayTypes(): array + { + + $types = []; + + if ($this->client + && isset($this->client->country) + && in_array($this->client->country->iso_3166_3, ['AUS']) + && in_array($this->client->currency()->code, ['AUD']) + ) { + $types[] = GatewayType::CREDIT_CARD; + } + + return $types; + } + + public function init(): self + { + if($this->company_gateway->getConfigField('testMode')) { + $this->widget_endpoint = 'https://widget.preproduction.powerboard.commbank.com.au/sdk/latest/widget.umd.min.js'; + $this->api_endpoint = 'https://api.preproduction.powerboard.commbank.com.au'; + $this->environment = 'preproduction_cba'; + } + + return $this; + } + + public function setPaymentMethod($payment_method_id) + { + + $class = self::$methods[$payment_method_id]; + + $this->payment_method = new $class($this); + + return $this; + } + + /** + * Proxy method to pass the data into payment method authorizeView(). + * + * @param array $data + * @return \Illuminate\Http\RedirectResponse|mixed + */ + public function authorizeView(array $data) + { + $this->init(); + + return $this->payment_method->authorizeView($data); + } + + /** + * Processes the gateway response for credit card authorization. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse|mixed + */ + public function authorizeResponse($request) + { + return $this->payment_method->authorizeResponse($request); + } + + /** + * View for displaying custom content of the driver. + * + * @param array $data + * @return mixed + */ + public function processPaymentView($data) + { + $this->init(); + + return $this->payment_method->paymentView($data); + } + + /** + * Processing method for payment. Should never be reached with this driver. + * + * @return mixed + */ + public function processPaymentResponse($request) + { + return $this->payment_method->paymentResponse($request); + } + + /** + * Detach payment method from custom payment driver. + * + * @param ClientGatewayToken $token + * @return bool + */ + public function detach(ClientGatewayToken $token): bool + { + // Driver doesn't support this feature. + return true; + } + + public function refund(Payment $payment, $amount, $return_client_response = false) + { + + } + + public function processWebhookRequest($request) + { + } + + public function getClientRequiredFields(): array + { + $fields = []; + + if ($this->company_gateway->require_client_name) { + $fields[] = ['name' => 'client_name', 'label' => ctrans('texts.client_name'), 'type' => 'text', 'validation' => 'required']; + } + + $fields[] = ['name' => 'contact_first_name', 'label' => ctrans('texts.first_name'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'contact_last_name', 'label' => ctrans('texts.last_name'), 'type' => 'text', 'validation' => 'required']; + + return $fields; + } + + public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) + { + } + + public function importCustomers() + { + } + + public function auth(): bool + { + $this->init(); + + + return true; + // try { + // $this->verifyConnect(); + // return true; + // } catch(\Exception $e) { + + // } + + // return false; + + } + + public function gatewayRequest(string $uri, string $verb, array $payload, array $headers = []) + { + $this->init(); + + $r = Http::withHeaders($this->getHeaders($headers)) + ->{$verb}($this->api_endpoint.$uri, $payload); + + nlog($r->body()); + + return $r; + } + + public function getHeaders(array $headers = []): array + { + return array_merge([ + 'x-user-secret-key' => $this->company_gateway->getConfigField('secretKey'), + 'Content-Type' => 'application/json', + ], + $headers); + } + + public function customer(): Customer + { + return new Customer($this); + } + + public function settings(): Settings + { + return new Settings($this); + } +} \ No newline at end of file diff --git a/app/Services/EDocument/Standards/Peppol.php b/app/Services/EDocument/Standards/Peppol.php index cbddc55bd129..e89722ff1c64 100644 --- a/app/Services/EDocument/Standards/Peppol.php +++ b/app/Services/EDocument/Standards/Peppol.php @@ -390,6 +390,14 @@ class Peppol extends AbstractService $this->p_invoice = $this->e->decode('Peppol', json_encode($this->invoice->e_invoice->Invoice), 'json'); + + $this->gateway + ->mutator + ->setInvoice($this->invoice) + ->setPeppol($this->p_invoice) + ->setClientSettings($this->_client_settings) + ->setCompanySettings($this->_company_settings); + return $this; } diff --git a/app/Services/Subscription/SubscriptionService.php b/app/Services/Subscription/SubscriptionService.php index 7ae780bf2409..5cac37bde513 100644 --- a/app/Services/Subscription/SubscriptionService.php +++ b/app/Services/Subscription/SubscriptionService.php @@ -1055,8 +1055,8 @@ class SubscriptionService $recurring_invoice->line_items = $subscription_repo->generateLineItems($this->subscription, true, false); $recurring_invoice->subscription_id = $this->subscription->id; $recurring_invoice->frequency_id = $this->subscription->frequency_id ?: RecurringInvoice::FREQUENCY_MONTHLY; + $recurring_invoice->remaining_cycles = $this->subscription->remaining_cycles ?? -1; $recurring_invoice->date = now(); - $recurring_invoice->remaining_cycles = -1; $recurring_invoice->auto_bill = $client->getSetting('auto_bill'); $recurring_invoice->auto_bill_enabled = $this->setAutoBillFlag($recurring_invoice->auto_bill); $recurring_invoice->due_date_days = 'terms'; @@ -1089,7 +1089,7 @@ class SubscriptionService $recurring_invoice->subscription_id = $this->subscription->id; $recurring_invoice->frequency_id = $this->subscription->frequency_id ?: RecurringInvoice::FREQUENCY_MONTHLY; $recurring_invoice->date = now()->addSeconds($client->timezone_offset()); - $recurring_invoice->remaining_cycles = -1; + $recurring_invoice->remaining_cycles = $this->subscription->remaining_cycles ?? -1; $recurring_invoice->auto_bill = $client->getSetting('auto_bill'); $recurring_invoice->auto_bill_enabled = $this->setAutoBillFlag($recurring_invoice->auto_bill); $recurring_invoice->due_date_days = 'terms'; diff --git a/app/Transformers/SubscriptionTransformer.php b/app/Transformers/SubscriptionTransformer.php index 27c82c5dad73..301da15916ff 100644 --- a/app/Transformers/SubscriptionTransformer.php +++ b/app/Transformers/SubscriptionTransformer.php @@ -73,6 +73,7 @@ class SubscriptionTransformer extends EntityTransformer 'optional_product_ids' => (string) $subscription->optional_product_ids, 'registration_required' => (bool) $subscription->registration_required, 'steps' => $subscription->steps, + 'remaining_cycles' => (int) $subscription->remaining_cycles, ]; } } diff --git a/composer.json b/composer.json index 87b33403ad4e..f67661f328ed 100644 --- a/composer.json +++ b/composer.json @@ -119,7 +119,7 @@ "mockery/mockery": "^1.4.4", "nunomaduro/collision": "^8.1", "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^10", + "phpunit/phpunit": "^11", "spatie/laravel-ignition": "^2.0", "spaze/phpstan-stripe": "^3.0" }, diff --git a/composer.lock b/composer.lock index 816fd8adb1e7..3646644d1739 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": "740a715048e6bf357d8b33e0bd96454c", + "content-hash": "a1fac503f165997d7aa339239e002230", "packages": [ { "name": "adrienrn/php-mimetyper", @@ -15446,16 +15446,16 @@ }, { "name": "brianium/paratest", - "version": "v7.4.6", + "version": "v7.5.4", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "76815564c8d191f71d2cb4df12aed5e0bcd99945" + "reference": "c490591cc9c2f4830633b905547d30d5eb609c88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/76815564c8d191f71d2cb4df12aed5e0bcd99945", - "reference": "76815564c8d191f71d2cb4df12aed5e0bcd99945", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/c490591cc9c2f4830633b905547d30d5eb609c88", + "reference": "c490591cc9c2f4830633b905547d30d5eb609c88", "shasum": "" }, "require": { @@ -15466,24 +15466,25 @@ "fidry/cpu-core-counter": "^1.2.0", "jean85/pretty-package-versions": "^2.0.6", "php": "~8.2.0 || ~8.3.0", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-timer": "^6.0.0", - "phpunit/phpunit": "^10.5.33", - "sebastian/environment": "^6.1.0", - "symfony/console": "^6.4.7 || ^7.1.4", - "symfony/process": "^6.4.7 || ^7.1.3" + "phpunit/php-code-coverage": "^11.0.6", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-timer": "^7.0.1", + "phpunit/phpunit": "^11.3.3", + "sebastian/environment": "^7.2.0", + "symfony/console": "^6.4.11 || ^7.1.4", + "symfony/process": "^6.4.8 || ^7.1.3" }, "require-dev": { "doctrine/coding-standard": "^12.0.0", "ext-pcov": "*", "ext-posix": "*", - "phpstan/phpstan": "^1.12.3", + "infection/infection": "^0.29.6", + "phpstan/phpstan": "^1.12.1", "phpstan/phpstan-deprecation-rules": "^1.2.0", "phpstan/phpstan-phpunit": "^1.4.0", "phpstan/phpstan-strict-rules": "^1.6.0", "squizlabs/php_codesniffer": "^3.10.2", - "symfony/filesystem": "^6.4.3 || ^7.1.2" + "symfony/filesystem": "^6.4.9 || ^7.1.2" }, "bin": [ "bin/paratest", @@ -15523,7 +15524,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.4.6" + "source": "https://github.com/paratestphp/paratest/tree/v7.5.4" }, "funding": [ { @@ -15535,7 +15536,7 @@ "type": "paypal" } ], - "time": "2024-09-09T10:42:18+00:00" + "time": "2024-09-04T21:15:27+00:00" }, { "name": "clue/ndjson-react", @@ -16907,35 +16908,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.16", + "version": "11.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + "reference": "ebdffc9e09585dafa71b9bffcdb0a229d4704c45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ebdffc9e09585dafa71b9bffcdb0a229d4704c45", + "reference": "ebdffc9e09585dafa71b9bffcdb0a229d4704c45", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", + "nikic/php-parser": "^5.1.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.0", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.1", "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -16944,7 +16945,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1.x-dev" + "dev-main": "11.0.x-dev" } }, "autoload": { @@ -16973,7 +16974,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.6" }, "funding": [ { @@ -16981,32 +16982,32 @@ "type": "github" } ], - "time": "2024-08-22T04:31:57+00:00" + "time": "2024-08-22T04:37:56+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -17034,7 +17035,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" }, "funding": [ { @@ -17042,28 +17043,28 @@ "type": "github" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2024-08-27T05:02:59+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcntl": "*" @@ -17071,7 +17072,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -17097,7 +17098,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" }, "funding": [ { @@ -17105,32 +17107,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2024-07-03T05:07:44+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.1", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -17157,7 +17159,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" }, "funding": [ { @@ -17165,32 +17167,32 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2024-07-03T05:08:43+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -17216,7 +17218,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" }, "funding": [ { @@ -17224,20 +17227,20 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2024-07-03T05:09:35+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.34", + "version": "11.3.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3c69d315bdf79080c8e115b69d1961c6905b0e18" + "reference": "4dc07a589a68f8f2d5132ac0849146d122e08347" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3c69d315bdf79080c8e115b69d1961c6905b0e18", - "reference": "3c69d315bdf79080c8e115b69d1961c6905b0e18", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4dc07a589a68f8f2d5132ac0849146d122e08347", + "reference": "4dc07a589a68f8f2d5132ac0849146d122e08347", "shasum": "" }, "require": { @@ -17250,23 +17253,22 @@ "myclabs/deep-copy": "^1.12.0", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-invoker": "^4.0.0", - "phpunit/php-text-template": "^3.0.1", - "phpunit/php-timer": "^6.0.0", - "sebastian/cli-parser": "^2.0.1", - "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.2", - "sebastian/diff": "^5.1.1", - "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", - "sebastian/global-state": "^6.0.2", - "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.0", - "sebastian/type": "^4.0.0", - "sebastian/version": "^4.0.1" + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.6", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.1", + "sebastian/comparator": "^6.1.0", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.0", + "sebastian/exporter": "^6.1.3", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.0.1", + "sebastian/version": "^5.0.1" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -17277,7 +17279,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "11.3-dev" } }, "autoload": { @@ -17309,7 +17311,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.34" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.3.5" }, "funding": [ { @@ -17325,7 +17327,7 @@ "type": "tidelift" } ], - "time": "2024-09-13T05:19:38+00:00" + "time": "2024-09-13T05:22:17+00:00" }, { "name": "react/cache", @@ -17859,28 +17861,28 @@ }, { "name": "sebastian/cli-parser", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -17904,7 +17906,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" }, "funding": [ { @@ -17912,32 +17914,32 @@ "type": "github" } ], - "time": "2024-03-02T07:12:49+00:00" + "time": "2024-07-03T04:41:36+00:00" }, { "name": "sebastian/code-unit", - "version": "2.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + "reference": "6bb7d09d6623567178cf54126afa9c2310114268" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/6bb7d09d6623567178cf54126afa9c2310114268", + "reference": "6bb7d09d6623567178cf54126afa9c2310114268", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -17960,7 +17962,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.1" }, "funding": [ { @@ -17968,32 +17971,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:43+00:00" + "time": "2024-07-03T04:44:28+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -18015,7 +18018,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" }, "funding": [ { @@ -18023,36 +18027,36 @@ "type": "github" } ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2024-07-03T04:45:54+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.2", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53" + "reference": "fa37b9e2ca618cb051d71b60120952ee8ca8b03d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", - "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa37b9e2ca618cb051d71b60120952ee8ca8b03d", + "reference": "fa37b9e2ca618cb051d71b60120952ee8ca8b03d", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.4" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -18092,7 +18096,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.2" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.1.0" }, "funding": [ { @@ -18100,33 +18104,33 @@ "type": "github" } ], - "time": "2024-08-12T06:03:08+00:00" + "time": "2024-09-11T15:42:56+00:00" }, { "name": "sebastian/complexity", - "version": "3.2.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -18150,7 +18154,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" }, "funding": [ { @@ -18158,33 +18162,33 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2024-07-03T04:49:50+00:00" }, { "name": "sebastian/diff", - "version": "5.1.1", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -18217,7 +18221,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { @@ -18225,27 +18229,27 @@ "type": "github" } ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "sebastian/environment", - "version": "6.1.0", + "version": "7.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-posix": "*" @@ -18253,7 +18257,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "7.2-dev" } }, "autoload": { @@ -18281,7 +18285,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0" }, "funding": [ { @@ -18289,34 +18293,34 @@ "type": "github" } ], - "time": "2024-03-23T08:47:14+00:00" + "time": "2024-07-03T04:54:44+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.2", + "version": "6.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", + "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -18359,7 +18363,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.1.3" }, "funding": [ { @@ -18367,35 +18371,35 @@ "type": "github" } ], - "time": "2024-03-02T07:17:12+00:00" + "time": "2024-07-03T04:56:19+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.2", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -18421,7 +18425,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" }, "funding": [ { @@ -18429,33 +18433,33 @@ "type": "github" } ], - "time": "2024-03-02T07:19:19+00:00" + "time": "2024-07-03T04:57:36+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.2", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -18479,7 +18483,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" }, "funding": [ { @@ -18487,34 +18491,34 @@ "type": "github" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2024-07-03T04:58:38+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -18536,7 +18540,8 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" }, "funding": [ { @@ -18544,32 +18549,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2024-07-03T05:00:13+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -18591,7 +18596,8 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" }, "funding": [ { @@ -18599,32 +18605,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2024-07-03T05:01:32+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -18654,7 +18660,8 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" }, "funding": [ { @@ -18662,32 +18669,32 @@ "type": "github" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2024-07-03T05:10:34+00:00" }, { "name": "sebastian/type", - "version": "4.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "reference": "fb6a6566f9589e86661291d13eba708cce5eb4aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb6a6566f9589e86661291d13eba708cce5eb4aa", + "reference": "fb6a6566f9589e86661291d13eba708cce5eb4aa", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -18710,7 +18717,8 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.0.1" }, "funding": [ { @@ -18718,29 +18726,29 @@ "type": "github" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2024-07-03T05:11:49+00:00" }, { "name": "sebastian/version", - "version": "4.0.1", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "reference": "45c9debb7d039ce9b97de2f749c2cf5832a06ac4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/45c9debb7d039ce9b97de2f749c2cf5832a06ac4", + "reference": "45c9debb7d039ce9b97de2f749c2cf5832a06ac4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -18763,7 +18771,8 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.1" }, "funding": [ { @@ -18771,7 +18780,7 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2024-07-03T05:13:08+00:00" }, { "name": "spatie/backtrace", diff --git a/database/migrations/2024_09_06_042040_cba_powerboard.php b/database/migrations/2024_09_06_042040_cba_powerboard.php new file mode 100644 index 000000000000..7c993e310d54 --- /dev/null +++ b/database/migrations/2024_09_06_042040_cba_powerboard.php @@ -0,0 +1,50 @@ +publicKey = ''; + $fields->secretKey = ''; + $fields->testMode = false; + $fields->threeds = false; + + $powerboard = new Gateway(); + $powerboard->id = 64; + $powerboard->name = 'CBA PowerBoard'; + $powerboard->provider = 'CBAPowerBoard'; + $powerboard->key = 'b67581d804dbad1743b61c57285142ad'; + $powerboard->sort_order = 4543; + $powerboard->is_offsite = false; + $powerboard->visible = true; + $powerboard->fields = json_encode($fields); + $powerboard->save(); + + + Schema::table("company_gateways", function (\Illuminate\Database\Schema\Blueprint $table){ + $table->text('settings')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // + } +}; diff --git a/database/migrations/2024_09_16_221343_add_remaining_cycles_to_subscriptions.php b/database/migrations/2024_09_16_221343_add_remaining_cycles_to_subscriptions.php new file mode 100644 index 000000000000..da68156afd4e --- /dev/null +++ b/database/migrations/2024_09_16_221343_add_remaining_cycles_to_subscriptions.php @@ -0,0 +1,25 @@ +integer('remaining_cycles')->nullable()->default(-1); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + } +}; diff --git a/database/seeders/PaymentLibrariesSeeder.php b/database/seeders/PaymentLibrariesSeeder.php index 49c49e87b44e..879b65dc8831 100644 --- a/database/seeders/PaymentLibrariesSeeder.php +++ b/database/seeders/PaymentLibrariesSeeder.php @@ -88,7 +88,8 @@ class PaymentLibrariesSeeder extends Seeder ['id' => 60, 'name' => 'PayPal REST', 'provider' => 'PayPal_Rest', 'key' => '80af24a6a691230bbec33e930ab40665', 'fields' => '{"clientId":"","secret":"","signature":"","testMode":false}'], ['id' => 61, 'name' => 'PayPal Platform', 'provider' => 'PayPal_PPCP', 'key' => '80af24a6a691230bbec33e930ab40666', 'fields' => '{"testMode":false}'], ['id' => 62, 'name' => 'BTCPay', 'provider' => 'BTCPay', 'key' => 'vpyfbmdrkqcicpkjqdusgjfluebftuva', 'fields' => '{"btcpayUrl":"", "apiKey":"", "storeId":"", "webhookSecret":""}'], - ['id' => 63, 'name' => 'Rotessa', 'is_offsite' => false, 'sort_order' => 22, 'provider' => 'Rotessa', 'key' => '91be24c7b792230bced33e930ac61676', 'fields' => '{"apiKey":"", "testMode":""}'], + ['id' => 63, 'name' => 'Rotessa', 'is_offsite' => false, 'sort_order' => 22, 'provider' => 'Rotessa', 'key' => '91be24c7b792230bced33e930ac61676', 'fields' => '{"apiKey":"", "testMode":false}'], + ['id' => 64, 'name' => 'CBA PowerBoard', 'is_offsite' => false, 'sort_order' => 26, 'provider' => 'CBAPowerBoard', 'key' => 'b67581d804dbad1743b61c57285142ad', 'fields' => '{"publicKey":"", "secretKey":"", "testMode":false, "Threeds":true}'], ]; foreach ($gateways as $gateway) { diff --git a/lang/en/texts.php b/lang/en/texts.php index 61fc8268af59..c3ad8e1f214c 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -3891,7 +3891,7 @@ $lang = array( 'payment_method_saving_failed' => 'Payment method can\'t be saved for future use.', 'pay_with' => 'Pay with', 'n/a' => 'N/A', - 'by_clicking_next_you_accept_terms' => 'By clicking "Next step" you accept terms.', + 'by_clicking_next_you_accept_terms' => 'By clicking "Next" you accept terms.', 'not_specified' => 'Not specified', 'before_proceeding_with_payment_warning' => 'Before proceeding with payment, you have to fill following fields', 'after_completing_go_back_to_previous_page' => 'After completing, go back to previous page.', diff --git a/phpunit.xml b/phpunit.xml index 1c27f29b2b43..6347fa92a7d0 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,7 +1,14 @@ - + ./tests/Unit diff --git a/public/build/assets/app-23f93261.css b/public/build/assets/app-23f93261.css deleted file mode 100644 index 2b0a6087f862..000000000000 --- a/public/build/assets/app-23f93261.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.form-input,.form-textarea,.form-select,.form-multiselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}.form-input:focus,.form-textarea:focus,.form-select:focus,.form-multiselect:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}.form-select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.form-select:where([size]:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}.form-checkbox,.form-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}.form-checkbox{border-radius:0}.form-radio{border-radius:100%}.form-checkbox:focus,.form-radio:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.form-checkbox:checked,.form-radio:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}.form-checkbox:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){.form-checkbox:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-radio:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){.form-radio:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-checkbox:checked:hover,.form-checkbox:checked:focus,.form-radio:checked:hover,.form-radio:checked:focus{border-color:transparent;background-color:currentColor}.form-checkbox:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){.form-checkbox:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-checkbox:indeterminate:hover,.form-checkbox:indeterminate:focus{border-color:transparent;background-color:currentColor}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.button{border-radius:.25rem;padding:.75rem 1rem;font-size:.875rem;line-height:1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}button:disabled{cursor:not-allowed;opacity:.5}.button-primary{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.button-primary:hover{font-weight:600}.button-block{display:block;width:100%}.button-danger{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.button-danger:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity))}.button-secondary{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.button-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.button-link{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.button-link:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity));text-decoration-line:underline}.button-link:focus{text-decoration-line:underline;outline:2px solid transparent;outline-offset:2px}.validation{margin-top:.5rem;margin-bottom:.25rem;border-left-width:2px;--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));padding:.25rem .75rem}.validation-fail{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.validation-pass{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.input{margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.input:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}.input-label{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.input-slim{padding-top:.5rem;padding-bottom:.5rem}.form-checkbox{cursor:pointer;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.form-select{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.alert{margin-top:.5rem;margin-bottom:.25rem;border-left-width:2px;--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem}.alert-success{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity))}.alert-failure{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.125rem .625rem;font-size:.75rem;font-weight:500;line-height:1rem}.badge-light{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.badge-primary{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.badge-danger{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.badge-success{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity))}.badge-secondary{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.badge-warning{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity))}.badge-info{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}@media (min-width: 640px){.dataTables_length{margin-top:1.25rem!important;margin-bottom:1.25rem!important}}@media (min-width: 1024px){.dataTables_length{margin-top:1rem!important;margin-bottom:1rem!important}}.dataTables_length select{margin-left:.5rem!important;margin-right:.5rem!important;--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important;margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.dataTables_length select:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}.dataTables_filter{margin-bottom:1rem}.dataTables_filter input{margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.dataTables_filter input:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}@media (min-width: 1024px){.dataTables_filter{margin-top:-3rem!important}}.dataTables_paginate{padding-bottom:1.5rem!important;padding-top:.5rem!important}.dataTables_paginate .paginate_button{margin-right:.25rem!important;cursor:pointer!important;border-width:1px!important;--tw-border-opacity: 1 !important;border-color:rgb(209 213 219 / var(--tw-border-opacity))!important;--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important;font-weight:500!important;--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important;border-radius:.25rem;padding:.75rem 1rem;font-size:.875rem;line-height:1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dataTables_paginate .current{--tw-bg-opacity: 1 !important;background-color:rgb(37 99 235 / var(--tw-bg-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.dataTables_info{font-size:.875rem!important;line-height:1.25rem!important}.dataTables_empty{padding-top:1rem!important;padding-bottom:1rem!important}.pagination{display:flex!important;align-items:center!important}.pagination .page-link{margin-top:-1px!important;display:inline-flex!important;cursor:pointer!important;align-items:center!important;border-top-width:2px!important;border-color:transparent!important;padding-left:1rem!important;padding-right:1rem!important;padding-top:1rem!important;font-size:.875rem!important;font-weight:500!important;line-height:1.25rem!important;--tw-text-opacity: 1 !important;color:rgb(107 114 128 / var(--tw-text-opacity))!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-duration:.15s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.pagination .page-link:hover{--tw-border-opacity: 1 !important;border-color:rgb(209 213 219 / var(--tw-border-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important}.pagination .page-link:focus{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity));outline:2px solid transparent;outline-offset:2px}.pagination .active>span{--tw-border-opacity: 1 !important;border-color:rgb(37 99 235 / var(--tw-border-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(37 99 235 / var(--tw-text-opacity))!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.right-0{right:0}.top-0{top:0}.top-1{top:.25rem}.z-0{z-index:0}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1 / span 1}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-6{grid-column:span 6 / span 6}.col-span-8{grid-column:span 8 / span 8}.float-end{float:inline-end}.float-right{float:right}.m-0{margin:0}.m-auto{margin:auto}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-\[22px\]{margin-left:22px;margin-right:22px}.mx-\[40px\]{margin-left:40px;margin-right:40px}.mx-\[auto\],.mx-auto{margin-left:auto;margin-right:auto}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-1{margin-left:-.25rem}.-ml-4{margin-left:-1rem}.-ml-px{margin-left:-1px}.-mr-1{margin-right:-.25rem}.-mr-14{margin-right:-3.5rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[10px\]{margin-bottom:10px}.mb-\[11px\]{margin-bottom:11px}.mb-\[20px\]{margin-bottom:20px}.mb-\[25px\]{margin-bottom:25px}.mb-\[26px\]{margin-bottom:26px}.mb-\[36px\]{margin-bottom:36px}.mb-\[40px\]{margin-bottom:40px}.mb-\[5px\]{margin-bottom:5px}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-\[10px\]{margin-left:10px}.mr-0{margin-right:0}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mr-6{margin-right:1.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[30px\]{margin-top:30px}.mt-\[50px\]{margin-top:50px}.mt-\[auto\]{margin-top:auto}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-0{height:0px}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-24{height:6rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-8{height:2rem}.h-\[1px\]{height:1px}.h-\[40px\]{height:40px}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.min-h-\[450px\]{min-height:450px}.min-h-screen{min-height:100vh}.w-0{width:0px}.w-1{width:.25rem}.w-1\/2{width:50%}.w-1\/4{width:25%}.w-1\/6{width:16.666667%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-4\/5{width:80%}.w-4\/6{width:66.666667%}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\/6{width:83.333333%}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[100\%\]{width:100%}.w-\[87px\]{width:87px}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-\[212px\]{max-width:212px}.max-w-\[450px\]{max-width:450px}.max-w-\[625px\]{max-width:625px}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-1\/2{flex-basis:50%}.basis-full{flex-basis:100%}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.origin-top-right{transform-origin:top right}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-end{place-content:end}.place-items-center{place-items:center}.content-center{align-content:center}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-stretch{justify-content:stretch}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-\[13px\]{gap:13px}.gap-\[44px\]{gap:44px}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-y-\[20px\]{row-gap:20px}.space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-t-4{border-top-width:4px}.border-t-\[0px\]{border-top-width:0px}.border-t-\[10px\]{border-top-width:10px}.border-t-\[1px\]{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity))}.border-fuchsia-600{--tw-border-opacity: 1;border-color:rgb(192 38 211 / var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.border-red-900{--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-opacity-50{--tw-border-opacity: .5}.bg-\[\#F2F9FE\]{--tw-bg-opacity: 1;background-color:rgb(242 249 254 / var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity))}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-opacity-100{--tw-bg-opacity: 1}.bg-clip-padding{background-clip:padding-box}.fill-current{fill:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-center{-o-object-position:center;object-position:center}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[12px\]{padding:12px}.p-\[20px\]{padding:20px}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-\[12px\]{padding-left:12px;padding-right:12px}.px-\[20px\]{padding-left:20px;padding-right:20px}.px-\[22px\]{padding-left:22px;padding-right:22px}.py-0{padding-top:0;padding-bottom:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[33px\]{padding-top:33px;padding-bottom:33px}.py-\[36px\]{padding-top:36px;padding-bottom:36px}.py-\[9\.5px\]{padding-top:9.5px;padding-bottom:9.5px}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pb-\[20px\]{padding-bottom:20px}.pb-\[56px\]{padding-bottom:56px}.pb-\[58px\]{padding-bottom:58px}.pl-0{padding-left:0}.pl-1\.5{padding-left:.375rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-\[18px\]{padding-left:18px}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-\[18px\]{padding-right:18px}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-\[20px\]{padding-top:20px}.pt-\[29px\]{padding-top:29px}.pt-\[35px\]{padding-top:35px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-\[\'Open_Sans\'\]{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-5xl{font-size:3rem;line-height:1}.text-\[12px\]{font-size:12px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[22px\]{font-size:22px}.text-\[24px\]{font-size:24px}.text-\[35px\]{font-size:35px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[16px\]{font-weight:16px}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.leading-\[1\.2rem\]{line-height:1.2rem}.leading-\[1\.35em\]{line-height:1.35em}.leading-\[1\.36em\]{line-height:1.36em}.leading-\[1\.375em\]{line-height:1.375em}.leading-\[1\.3em\]{line-height:1.3em}.leading-\[1\.5em\]{line-height:1.5em}.leading-\[1\.75em\]{line-height:1.75em}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-\[\#212529\]{--tw-text-opacity: 1;color:rgb(33 37 41 / var(--tw-text-opacity))}.text-\[\#6C727F\]{--tw-text-opacity: 1;color:rgb(108 114 127 / var(--tw-text-opacity))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-black{--tw-ring-opacity: 1;--tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity: .05}.grayscale{--tw-grayscale: grayscale(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)}.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)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[8px\]:after{content:var(--tw-content);left:8px}.after\:top-\[5px\]:after{content:var(--tw-content);top:5px}.after\:h-\[30px\]:after{content:var(--tw-content);height:30px}.after\:w-\[30px\]:after{content:var(--tw-content);width:30px}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.focus-within\:z-10:focus-within{z-index:10}.hover\:list-disc:hover{list-style-type:disc}.hover\:border-blue-600:hover{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity))}.hover\:border-gray-600:hover{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.hover\:border-gray-800:hover{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity))}.hover\:border-transparent:hover{border-color:transparent}.hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.hover\:bg-red-900:hover{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}.hover\:font-semibold:hover{font-weight:600}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity: 1;color:rgb(49 46 129 / var(--tw-text-opacity))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-2xl:hover{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:border-blue-300:focus{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.focus\:border-fuchsia-300:focus{--tw-border-opacity: 1;border-color:rgb(240 171 252 / var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity))}.focus\:border-red-500:focus{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.focus\:bg-gray-100:focus{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.focus\:bg-gray-600:focus{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.focus\:font-semibold:focus{font-weight:600}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-600:focus{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.focus\:text-gray-900:focus{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.focus\:underline:focus{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}.focus\:ring-gray-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(107 114 128 / var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity))}.focus\:ring-indigo-600:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity))}.focus\:ring-red-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity))}.focus\:ring-opacity-50:focus{--tw-ring-opacity: .5}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.active\:bg-gray-50:active{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.active\:text-gray-800:active{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.active\:outline-none:active{outline:2px solid transparent;outline-offset:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-50:disabled{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-75:disabled{opacity:.75}.group:hover .group-hover\:border-transparent{border-color:transparent}.group:hover .group-hover\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.group:hover .group-hover\:opacity-100{opacity:1}.peer:checked~.peer-checked\:text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.peer:checked~.peer-checked\:after\:translate-x-\[140\%\]:after{content:var(--tw-content);--tw-translate-x: 140%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}@media (min-width: 640px){.sm\:inset-0{top:0;right:0;bottom:0;left:0}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:ml-3{margin-left:.75rem}.sm\:ml-4{margin-left:1rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-0{margin-top:0}.sm\:mt-4{margin-top:1rem}.sm\:mt-6{margin-top:1.5rem}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-10{height:2.5rem}.sm\:h-screen{height:100vh}.sm\:w-10{width:2.5rem}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:flex-shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-start-2{grid-column-start:2}.md\:col-start-4{grid-column-start:4}.md\:mx-0,.md\:mx-\[0\]{margin-left:0;margin-right:0}.md\:-mr-1{margin-right:-.25rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mb-\[46px\]{margin-bottom:46px}.md\:ml-2{margin-left:.5rem}.md\:ml-6{margin-left:1.5rem}.md\:mr-0{margin-right:0}.md\:mr-2{margin-right:.5rem}.md\:mt-0{margin-top:0}.md\:mt-10{margin-top:2.5rem}.md\:mt-5{margin-top:1.25rem}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:min-h-\[411px\]{min-height:411px}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.333333%}.md\:max-w-3xl{max-width:48rem}.md\:max-w-xl{max-width:36rem}.md\:flex-shrink-0{flex-shrink:0}.md\:shrink{flex-shrink:1}.md\:grow-0{flex-grow:0}.md\:basis-1\/2{flex-basis:50%}.md\:basis-\[449px\]{flex-basis:449px}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.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\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:gap-6{gap:1.5rem}.md\:gap-x-\[21px\]{-moz-column-gap:21px;column-gap:21px}.md\:gap-y-6{row-gap:1.5rem}.md\:border-r{border-right-width:1px}.md\:border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.md\:p-24{padding:6rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:px-\[40px\]{padding-left:40px;padding-right:40px}.md\:pb-\[40px\]{padding-bottom:40px}.md\:pl-4{padding-left:1rem}.md\:pl-\[52px\]{padding-left:52px}.md\:pl-\[61px\]{padding-left:61px}.md\:pr-\[20px\]{padding-right:20px}.md\:pr-\[48px\]{padding-right:48px}.md\:pt-0{padding-top:0}.md\:pt-\[58px\]{padding-top:58px}.md\:text-left{text-align:left}.md\:text-center{text-align:center}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-\[30px\]{font-size:30px}.md\:text-\[32px\]{font-size:32px}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 1024px){.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-start-3{grid-column-start:3}.lg\:col-start-4{grid-column-start:4}.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:-mb-1{margin-bottom:-.25rem}.lg\:-ml-5{margin-left:-1.25rem}.lg\:mt-24{margin-top:6rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:h-screen{height:100vh}.lg\:w-1\/2{width:50%}.lg\:w-1\/3{width:33.333333%}.lg\:w-1\/4{width:25%}.lg\:w-1\/5{width:20%}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:items-center{align-items:center}.lg\:gap-4{gap:1rem}.lg\:rounded-lg{border-radius:.5rem}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:px-2{padding-left:.5rem;padding-right:.5rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-2{padding-top:.5rem;padding-bottom:.5rem}}@media (min-width: 1280px){.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-start-4{grid-column-start:4}.xl\:ml-5{margin-left:1.25rem}.xl\:mt-0{margin-top:0}.xl\:mt-32{margin-top:8rem}.xl\:flex{display:flex}.xl\:w-auto{width:auto}.xl\:basis-auto{flex-basis:auto}.xl\:flex-row{flex-direction:row}.xl\:flex-nowrap{flex-wrap:nowrap}.xl\:justify-center{justify-content:center}.xl\:border-r{border-right-width:1px}.xl\:border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.xl\:px-16{padding-left:4rem;padding-right:4rem}.xl\:px-20{padding-left:5rem;padding-right:5rem}.xl\:px-5{padding-left:1.25rem;padding-right:1.25rem}.xl\:pr-20{padding-right:5rem}}@media (prefers-color-scheme: dark){.dark\:border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.dark\:bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.dark\:focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}} diff --git a/public/build/assets/app-9c3f71d4.css b/public/build/assets/app-9c3f71d4.css new file mode 100644 index 000000000000..74a0b4483135 --- /dev/null +++ b/public/build/assets/app-9c3f71d4.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.form-input,.form-textarea,.form-select,.form-multiselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}.form-input:focus,.form-textarea:focus,.form-select:focus,.form-multiselect:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}.form-select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.form-select:where([size]:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}.form-checkbox,.form-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}.form-checkbox{border-radius:0}.form-radio{border-radius:100%}.form-checkbox:focus,.form-radio:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.form-checkbox:checked,.form-radio:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}.form-checkbox:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){.form-checkbox:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-radio:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){.form-radio:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-checkbox:checked:hover,.form-checkbox:checked:focus,.form-radio:checked:hover,.form-radio:checked:focus{border-color:transparent;background-color:currentColor}.form-checkbox:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){.form-checkbox:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-checkbox:indeterminate:hover,.form-checkbox:indeterminate:focus{border-color:transparent;background-color:currentColor}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.button{border-radius:.25rem;padding:.75rem 1rem;font-size:.875rem;line-height:1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}button:disabled{cursor:not-allowed;opacity:.5}.button-primary{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.button-primary:hover{font-weight:600}.button-block{display:block;width:100%}.button-danger{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.button-danger:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity))}.button-secondary{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.button-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.button-link{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.button-link:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity));text-decoration-line:underline}.button-link:focus{text-decoration-line:underline;outline:2px solid transparent;outline-offset:2px}.validation{margin-top:.5rem;margin-bottom:.25rem;border-left-width:2px;--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));padding:.25rem .75rem}.validation-fail{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.validation-pass{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.input{margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.input:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}.input-label{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.input-slim{padding-top:.5rem;padding-bottom:.5rem}.form-checkbox{cursor:pointer;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.form-select{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.alert{margin-top:.5rem;margin-bottom:.25rem;border-left-width:2px;--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem}.alert-success{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity))}.alert-failure{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.125rem .625rem;font-size:.75rem;font-weight:500;line-height:1rem}.badge-light{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.badge-primary{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.badge-danger{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.badge-success{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity))}.badge-secondary{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.badge-warning{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity))}.badge-info{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}@media (min-width: 640px){.dataTables_length{margin-top:1.25rem!important;margin-bottom:1.25rem!important}}@media (min-width: 1024px){.dataTables_length{margin-top:1rem!important;margin-bottom:1rem!important}}.dataTables_length select{margin-left:.5rem!important;margin-right:.5rem!important;--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important;margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.dataTables_length select:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}.dataTables_filter{margin-bottom:1rem}.dataTables_filter input{margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.dataTables_filter input:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}@media (min-width: 1024px){.dataTables_filter{margin-top:-3rem!important}}.dataTables_paginate{padding-bottom:1.5rem!important;padding-top:.5rem!important}.dataTables_paginate .paginate_button{margin-right:.25rem!important;cursor:pointer!important;border-width:1px!important;--tw-border-opacity: 1 !important;border-color:rgb(209 213 219 / var(--tw-border-opacity))!important;--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important;font-weight:500!important;--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important;border-radius:.25rem;padding:.75rem 1rem;font-size:.875rem;line-height:1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dataTables_paginate .current{--tw-bg-opacity: 1 !important;background-color:rgb(37 99 235 / var(--tw-bg-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.dataTables_info{font-size:.875rem!important;line-height:1.25rem!important}.dataTables_empty{padding-top:1rem!important;padding-bottom:1rem!important}.pagination{display:flex!important;align-items:center!important}.pagination .page-link{margin-top:-1px!important;display:inline-flex!important;cursor:pointer!important;align-items:center!important;border-top-width:2px!important;border-color:transparent!important;padding-left:1rem!important;padding-right:1rem!important;padding-top:1rem!important;font-size:.875rem!important;font-weight:500!important;line-height:1.25rem!important;--tw-text-opacity: 1 !important;color:rgb(107 114 128 / var(--tw-text-opacity))!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-duration:.15s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.pagination .page-link:hover{--tw-border-opacity: 1 !important;border-color:rgb(209 213 219 / var(--tw-border-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important}.pagination .page-link:focus{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity));outline:2px solid transparent;outline-offset:2px}.pagination .active>span{--tw-border-opacity: 1 !important;border-color:rgb(37 99 235 / var(--tw-border-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(37 99 235 / var(--tw-text-opacity))!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.right-0{right:0}.top-0{top:0}.top-1{top:.25rem}.z-0{z-index:0}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1 / span 1}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-6{grid-column:span 6 / span 6}.col-span-8{grid-column:span 8 / span 8}.float-right{float:right}.m-0{margin:0}.m-auto{margin:auto}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-\[22px\]{margin-left:22px;margin-right:22px}.mx-\[40px\]{margin-left:40px;margin-right:40px}.mx-\[auto\],.mx-auto{margin-left:auto;margin-right:auto}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-1{margin-left:-.25rem}.-ml-4{margin-left:-1rem}.-ml-px{margin-left:-1px}.-mr-1{margin-right:-.25rem}.-mr-14{margin-right:-3.5rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[10px\]{margin-bottom:10px}.mb-\[11px\]{margin-bottom:11px}.mb-\[20px\]{margin-bottom:20px}.mb-\[25px\]{margin-bottom:25px}.mb-\[26px\]{margin-bottom:26px}.mb-\[36px\]{margin-bottom:36px}.mb-\[40px\]{margin-bottom:40px}.mb-\[5px\]{margin-bottom:5px}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-\[10px\]{margin-left:10px}.mr-0{margin-right:0}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mr-6{margin-right:1.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[30px\]{margin-top:30px}.mt-\[50px\]{margin-top:50px}.mt-\[auto\]{margin-top:auto}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-0{height:0px}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-24{height:6rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-8{height:2rem}.h-\[1px\]{height:1px}.h-\[40px\]{height:40px}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.min-h-\[450px\]{min-height:450px}.min-h-screen{min-height:100vh}.w-0{width:0px}.w-1{width:.25rem}.w-1\/2{width:50%}.w-1\/4{width:25%}.w-1\/6{width:16.666667%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-4\/5{width:80%}.w-4\/6{width:66.666667%}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\/6{width:83.333333%}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[100\%\]{width:100%}.w-\[87px\]{width:87px}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-\[212px\]{max-width:212px}.max-w-\[450px\]{max-width:450px}.max-w-\[625px\]{max-width:625px}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-1\/2{flex-basis:50%}.basis-full{flex-basis:100%}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.origin-top-right{transform-origin:top right}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-end{place-content:end}.place-items-center{place-items:center}.content-center{align-content:center}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-stretch{justify-content:stretch}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-\[13px\]{gap:13px}.gap-\[44px\]{gap:44px}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-y-\[20px\]{row-gap:20px}.space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-t-4{border-top-width:4px}.border-t-\[0px\]{border-top-width:0px}.border-t-\[10px\]{border-top-width:10px}.border-t-\[1px\]{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity))}.border-fuchsia-600{--tw-border-opacity: 1;border-color:rgb(192 38 211 / var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.border-red-900{--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-opacity-50{--tw-border-opacity: .5}.bg-\[\#F2F9FE\]{--tw-bg-opacity: 1;background-color:rgb(242 249 254 / var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity))}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-opacity-100{--tw-bg-opacity: 1}.bg-clip-padding{background-clip:padding-box}.fill-current{fill:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-center{-o-object-position:center;object-position:center}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[12px\]{padding:12px}.p-\[20px\]{padding:20px}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-\[12px\]{padding-left:12px;padding-right:12px}.px-\[20px\]{padding-left:20px;padding-right:20px}.px-\[22px\]{padding-left:22px;padding-right:22px}.py-0{padding-top:0;padding-bottom:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[33px\]{padding-top:33px;padding-bottom:33px}.py-\[36px\]{padding-top:36px;padding-bottom:36px}.py-\[9\.5px\]{padding-top:9.5px;padding-bottom:9.5px}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pb-\[20px\]{padding-bottom:20px}.pb-\[56px\]{padding-bottom:56px}.pb-\[58px\]{padding-bottom:58px}.pl-0{padding-left:0}.pl-1\.5{padding-left:.375rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-\[18px\]{padding-left:18px}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-\[18px\]{padding-right:18px}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-\[20px\]{padding-top:20px}.pt-\[29px\]{padding-top:29px}.pt-\[35px\]{padding-top:35px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-\[\'Open_Sans\'\]{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-5xl{font-size:3rem;line-height:1}.text-\[12px\]{font-size:12px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[22px\]{font-size:22px}.text-\[24px\]{font-size:24px}.text-\[35px\]{font-size:35px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[16px\]{font-weight:16px}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.leading-\[1\.2rem\]{line-height:1.2rem}.leading-\[1\.35em\]{line-height:1.35em}.leading-\[1\.36em\]{line-height:1.36em}.leading-\[1\.375em\]{line-height:1.375em}.leading-\[1\.3em\]{line-height:1.3em}.leading-\[1\.5em\]{line-height:1.5em}.leading-\[1\.75em\]{line-height:1.75em}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-\[\#212529\]{--tw-text-opacity: 1;color:rgb(33 37 41 / var(--tw-text-opacity))}.text-\[\#6C727F\]{--tw-text-opacity: 1;color:rgb(108 114 127 / var(--tw-text-opacity))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-black{--tw-ring-opacity: 1;--tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity: .05}.grayscale{--tw-grayscale: grayscale(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)}.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)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[8px\]:after{content:var(--tw-content);left:8px}.after\:top-\[5px\]:after{content:var(--tw-content);top:5px}.after\:h-\[30px\]:after{content:var(--tw-content);height:30px}.after\:w-\[30px\]:after{content:var(--tw-content);width:30px}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.focus-within\:z-10:focus-within{z-index:10}.hover\:list-disc:hover{list-style-type:disc}.hover\:border-blue-600:hover{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity))}.hover\:border-gray-600:hover{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.hover\:border-gray-800:hover{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity))}.hover\:border-transparent:hover{border-color:transparent}.hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.hover\:bg-red-900:hover{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}.hover\:font-semibold:hover{font-weight:600}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity: 1;color:rgb(49 46 129 / var(--tw-text-opacity))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-2xl:hover{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:border-blue-300:focus{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.focus\:border-fuchsia-300:focus{--tw-border-opacity: 1;border-color:rgb(240 171 252 / var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity))}.focus\:border-red-500:focus{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.focus\:bg-gray-100:focus{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.focus\:bg-gray-600:focus{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.focus\:font-semibold:focus{font-weight:600}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-600:focus{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.focus\:text-gray-900:focus{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.focus\:underline:focus{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}.focus\:ring-gray-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(107 114 128 / var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity))}.focus\:ring-indigo-600:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity))}.focus\:ring-red-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity))}.focus\:ring-opacity-50:focus{--tw-ring-opacity: .5}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.active\:bg-gray-50:active{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.active\:text-gray-800:active{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.active\:outline-none:active{outline:2px solid transparent;outline-offset:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-50:disabled{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-75:disabled{opacity:.75}.group:hover .group-hover\:border-transparent{border-color:transparent}.group:hover .group-hover\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.group:hover .group-hover\:opacity-100{opacity:1}.peer:checked~.peer-checked\:text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.peer:checked~.peer-checked\:after\:translate-x-\[140\%\]:after{content:var(--tw-content);--tw-translate-x: 140%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}@media (min-width: 640px){.sm\:inset-0{top:0;right:0;bottom:0;left:0}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:ml-3{margin-left:.75rem}.sm\:ml-4{margin-left:1rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-0{margin-top:0}.sm\:mt-4{margin-top:1rem}.sm\:mt-6{margin-top:1.5rem}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-10{height:2.5rem}.sm\:h-screen{height:100vh}.sm\:w-10{width:2.5rem}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:flex-shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-start-2{grid-column-start:2}.md\:col-start-4{grid-column-start:4}.md\:mx-0,.md\:mx-\[0\]{margin-left:0;margin-right:0}.md\:-mr-1{margin-right:-.25rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mb-\[46px\]{margin-bottom:46px}.md\:ml-2{margin-left:.5rem}.md\:ml-6{margin-left:1.5rem}.md\:mr-0{margin-right:0}.md\:mr-2{margin-right:.5rem}.md\:mt-0{margin-top:0}.md\:mt-10{margin-top:2.5rem}.md\:mt-5{margin-top:1.25rem}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:min-h-\[411px\]{min-height:411px}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.333333%}.md\:max-w-3xl{max-width:48rem}.md\:max-w-xl{max-width:36rem}.md\:flex-shrink-0{flex-shrink:0}.md\:shrink{flex-shrink:1}.md\:grow-0{flex-grow:0}.md\:basis-1\/2{flex-basis:50%}.md\:basis-\[449px\]{flex-basis:449px}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.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\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:gap-6{gap:1.5rem}.md\:gap-x-\[21px\]{-moz-column-gap:21px;column-gap:21px}.md\:gap-y-6{row-gap:1.5rem}.md\:border-r{border-right-width:1px}.md\:border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.md\:p-24{padding:6rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:px-\[40px\]{padding-left:40px;padding-right:40px}.md\:pb-\[40px\]{padding-bottom:40px}.md\:pl-4{padding-left:1rem}.md\:pl-\[52px\]{padding-left:52px}.md\:pl-\[61px\]{padding-left:61px}.md\:pr-\[20px\]{padding-right:20px}.md\:pr-\[48px\]{padding-right:48px}.md\:pt-0{padding-top:0}.md\:pt-\[58px\]{padding-top:58px}.md\:text-left{text-align:left}.md\:text-center{text-align:center}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-\[30px\]{font-size:30px}.md\:text-\[32px\]{font-size:32px}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 1024px){.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-start-3{grid-column-start:3}.lg\:col-start-4{grid-column-start:4}.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:-mb-1{margin-bottom:-.25rem}.lg\:-ml-5{margin-left:-1.25rem}.lg\:mt-24{margin-top:6rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:h-screen{height:100vh}.lg\:w-1\/2{width:50%}.lg\:w-1\/3{width:33.333333%}.lg\:w-1\/4{width:25%}.lg\:w-1\/5{width:20%}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:items-center{align-items:center}.lg\:gap-4{gap:1rem}.lg\:rounded-lg{border-radius:.5rem}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:px-2{padding-left:.5rem;padding-right:.5rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-2{padding-top:.5rem;padding-bottom:.5rem}}@media (min-width: 1280px){.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-start-4{grid-column-start:4}.xl\:ml-5{margin-left:1.25rem}.xl\:mt-0{margin-top:0}.xl\:mt-32{margin-top:8rem}.xl\:flex{display:flex}.xl\:w-auto{width:auto}.xl\:basis-auto{flex-basis:auto}.xl\:flex-row{flex-direction:row}.xl\:flex-nowrap{flex-wrap:nowrap}.xl\:justify-center{justify-content:center}.xl\:border-r{border-right-width:1px}.xl\:border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.xl\:px-16{padding-left:4rem;padding-right:4rem}.xl\:px-20{padding-left:5rem;padding-right:5rem}.xl\:px-5{padding-left:1.25rem;padding-right:1.25rem}.xl\:pr-20{padding-right:5rem}}@media (prefers-color-scheme: dark){.dark\:border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.dark\:bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.dark\:focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}} diff --git a/public/build/assets/authorize-powerboard-card-9db77713.js b/public/build/assets/authorize-powerboard-card-9db77713.js new file mode 100644 index 000000000000..3a8667a56c14 --- /dev/null +++ b/public/build/assets/authorize-powerboard-card-9db77713.js @@ -0,0 +1,13 @@ +import{i as a,w as d}from"./wait-8f4ae121.js";/** + * Invoice Ninja (https://invoiceninja.com). + * + * @link https://github.com/invoiceninja/invoiceninja source repository + * + * @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com) + * + * @license https://www.elastic.co/licensing/elastic-license + */async function i(){const t={name:navigator.userAgent.substring(0,100),java_enabled:navigator.javaEnabled()?"true":"false",language:navigator.language||navigator.userLanguage,screen_height:window.screen.height.toString(),screen_width:window.screen.width.toString(),time_zone:(new Date().getTimezoneOffset()*-1).toString(),color_depth:window.screen.colorDepth.toString()};document.querySelector('input[name="browser_details"]').value=JSON.stringify(t);const n=JSON.stringify({...Object.fromEntries(new FormData(document.getElementById("server-response"))),gateway_response:Array.from(document.querySelectorAll("input[name=gateway_response]")).find(e=>e.value).value}),o=document.querySelector("meta[name=store_route]");try{const e=await fetch(o.content,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest",Accept:"application/json","X-CSRF-Token":document.querySelector('meta[name="csrf-token"]').content},body:n});return e.ok?await e.json():await e.json().then(r=>{throw new Error(r.message??"Unknown error.")})}catch(e){document.getElementById("errors").textContent=`Sorry, your transaction could not be processed... + +${e.message}`,document.getElementById("errors").hidden=!1;let r=document.getElementById("authorize-card");throw r.disabled=!1,r.querySelector("svg").classList.add("hidden"),r.querySelector("span").classList.remove("hidden"),console.error("Fetch error:",e),e}}async function c(){try{const t=await i();if(t.status==="not_authenticated"||t==="not_authenticated")throw s(),new Error("There was an issue authenticating this payment method.");if(t.status==="authentication_not_supported")return document.querySelector('input[name="browser_details"]').value=null,document.querySelector('input[name="charge"]').value=JSON.stringify(t),document.getElementById("server-response").submit();const n=new cba.Canvas3ds("#widget-3dsecure",t._3ds.token);n.load(),document.getElementById("widget").classList.add("hidden"),n.on("chargeAuthSuccess",function(e){document.querySelector('input[name="browser_details"]').value=null,document.querySelector('input[name="charge"]').value=JSON.stringify(e),document.getElementById("server-response").submit()}),n.on("chargeAuthReject",function(e){document.getElementById("errors").textContent="Sorry, your transaction could not be processed...",document.getElementById("errors").hidden=!1,s()}),n.load()}catch(t){console.error("Error fetching 3DS Token:",t),document.getElementById("errors").textContent=`Sorry, your transaction could not be processed... + +${t}`,document.getElementById("errors").hidden=!1;let n=document.getElementById("authorize-card");n.disabled=!1,n.querySelector("svg").classList.add("hidden"),n.querySelector("span").classList.remove("hidden")}}function u(){l();const t=document.querySelector("meta[name=public_key]"),n=document.querySelector("meta[name=gateway_id]"),o=document.querySelector("meta[name=environment]"),e=new cba.HtmlWidget("#widget",t==null?void 0:t.content,n==null?void 0:n.content);e.setEnv(o==null?void 0:o.content),e.useAutoResize(),e.interceptSubmitForm("#stepone"),e.onFinishInsert('#server-response input[name="gateway_response"]',"payment_source"),e.setFormFields(["card_name*"]),e.load();let r=document.getElementById("authorize-card");return r.disabled=!1,r.querySelector("svg").classList.add("hidden"),r.querySelector("span").classList.remove("hidden"),e}function l(){var t;document.querySelector("#widget").innerHTML="",(t=document.querySelector("#widget"))==null||t.classList.remove("hidden"),document.querySelector("#widget-3dsecure").innerHTML=""}function s(){const t=u();function n(){let r=document.getElementById("pay-now");r.disabled=t.isInvalidForm()}t.trigger("tab",n),t.trigger("submit_form",n),t.trigger("tab",n),t.on("finish",function(r){document.getElementById("errors").hidden=!0,c()});const o=document.querySelector('input[name="payment-type"]');o&&o.click();let e=document.getElementById("authorize-card");e.addEventListener("click",()=>{const r=document.getElementById("widget");if(t.getValidationState(),!t.isValidForm()&&r.offsetParent!==null){e.disabled=!1,e.querySelector("svg").classList.add("hidden"),e.querySelector("span").classList.remove("hidden");return}e.disabled=!0,e.querySelector("svg").classList.remove("hidden"),e.querySelector("span").classList.add("hidden"),r.offsetParent!==null?document.getElementById("stepone_submit").click():document.getElementById("server-response").submit()})}a()?s():d("#").then(s); diff --git a/public/build/assets/powerboard-credit-card-9c79019c.js b/public/build/assets/powerboard-credit-card-9c79019c.js new file mode 100644 index 000000000000..e6c0ec6315c1 --- /dev/null +++ b/public/build/assets/powerboard-credit-card-9c79019c.js @@ -0,0 +1,13 @@ +import{i as s,w as c}from"./wait-8f4ae121.js";/** + * Invoice Ninja (https://invoiceninja.com). + * + * @link https://github.com/invoiceninja/invoiceninja source repository + * + * @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com) + * + * @license https://www.elastic.co/licensing/elastic-license + */function i(){const t=document.querySelector("meta[name=public_key]"),n=document.querySelector("meta[name=gateway_id]"),o=document.querySelector("meta[name=environment]"),e=new cba.HtmlWidget("#widget",t==null?void 0:t.content,n==null?void 0:n.content);e.setEnv(o==null?void 0:o.content),e.useAutoResize(),e.interceptSubmitForm("#stepone"),e.onFinishInsert('#server-response input[name="gateway_response"]',"payment_source"),e.setFormFields(["card_name*"]),e.reload();let r=document.getElementById("pay-now");return r.disabled=!1,r.querySelector("svg").classList.add("hidden"),r.querySelector("span").classList.remove("hidden"),document.querySelector('#server-response input[name="gateway_response"]').value="",e}function u(){var t,n,o;(t=document.querySelector("#widget"))==null||t.replaceChildren(),(n=document.querySelector("#widget"))==null||n.classList.remove("hidden"),(o=document.querySelector("#widget-3dsecure"))==null||o.replaceChildren()}function a(){u();const t=i();t.on("finish",()=>{document.getElementById("errors").hidden=!0,l()}),t.on("submit",function(e){document.getElementById("errors").hidden=!0});let n=document.getElementById("pay-now");n.addEventListener("click",()=>{const e=document.getElementById("widget");if(t.getValidationState(),!t.isValidForm()&&e.offsetParent!==null){n.disabled=!1,n.querySelector("svg").classList.add("hidden"),n.querySelector("span").classList.remove("hidden");return}n.disabled=!0,n.querySelector("svg").classList.remove("hidden"),n.querySelector("span").classList.add("hidden");let r=document.querySelector("input[name=token-billing-checkbox]:checked");r&&(document.getElementById("store_card").value=r.value),e.offsetParent!==null?document.getElementById("stepone_submit").click():document.getElementById("server-response").submit()}),document.getElementById("toggle-payment-with-credit-card").addEventListener("click",e=>{var d;document.getElementById("widget").classList.remove("hidden"),document.getElementById("save-card--container").style.display="grid",document.querySelector("input[name=token]").value="",(d=document.querySelector("#powerboard-payment-container"))==null||d.classList.remove("hidden")}),Array.from(document.getElementsByClassName("toggle-payment-with-token")).forEach(e=>e.addEventListener("click",r=>{var d;document.getElementById("widget").classList.add("hidden"),document.getElementById("save-card--container").style.display="none",document.querySelector("input[name=token]").value=r.target.dataset.token,(d=document.querySelector("#powerboard-payment-container"))==null||d.classList.add("hidden")}));const o=document.querySelector('input[name="payment-type"]');o&&o.click()}async function l(){try{const t=await m();if(t.status==="not_authenticated"||t==="not_authenticated")throw a(),new Error("There was an issue authenticating this payment method.");if(t.status==="authentication_not_supported"){document.querySelector('input[name="browser_details"]').value=null,document.querySelector('input[name="charge"]').value=JSON.stringify(t);let e=document.querySelector("input[name=token-billing-checkbox]:checked");return e&&(document.getElementById("store_card").value=e.value),document.getElementById("server-response").submit()}const n=new cba.Canvas3ds("#widget-3dsecure",t._3ds.token);n.load(),document.getElementById("widget").classList.add("hidden"),n.on("chargeAuthSuccess",function(e){document.querySelector('input[name="browser_details"]').value=null,document.querySelector('input[name="charge"]').value=JSON.stringify(e);let r=document.querySelector("input[name=token-billing-checkbox]:checked");r&&(document.getElementById("store_card").value=r.value),document.getElementById("server-response").submit()}),n.on("chargeAuthReject",function(e){document.getElementById("errors").textContent="Sorry, your transaction could not be processed...",document.getElementById("errors").hidden=!1,a()}),n.load()}catch(t){document.getElementById("errors").textContent=`Sorry, your transaction could not be processed... + +${t}`,document.getElementById("errors").hidden=!1,a()}}async function m(){const t={name:navigator.userAgent.substring(0,100),java_enabled:navigator.javaEnabled()?"true":"false",language:navigator.language||navigator.userLanguage,screen_height:window.screen.height.toString(),screen_width:window.screen.width.toString(),time_zone:(new Date().getTimezoneOffset()*-1).toString(),color_depth:window.screen.colorDepth.toString()};document.querySelector('input[name="browser_details"]').value=JSON.stringify(t);const n=JSON.stringify(Object.fromEntries(new FormData(document.getElementById("server-response")))),o=document.querySelector("meta[name=payments_route]");try{const e=await fetch(o.content,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest",Accept:"application/json","X-CSRF-Token":document.querySelector('meta[name="csrf-token"]').content},body:n});return e.ok?await e.json():await e.json().then(r=>{throw new Error(r.message??"Unknown error.")})}catch(e){document.getElementById("errors").textContent=`Sorry, your transaction could not be processed... + +${e.message}`,document.getElementById("errors").hidden=!1,console.error("Fetch error:",e),a()}}s()?a():c("#powerboard-credit-card-payment").then(()=>a()); diff --git a/public/build/manifest.json b/public/build/manifest.json index 07e7f3bd97d8..bdbb984e0698 100644 --- a/public/build/manifest.json +++ b/public/build/manifest.json @@ -48,6 +48,14 @@ "isEntry": true, "src": "resources/js/clients/payment_methods/authorize-checkout-card.js" }, + "resources/js/clients/payment_methods/authorize-powerboard-card.js": { + "file": "assets/authorize-powerboard-card-9db77713.js", + "imports": [ + "_wait-8f4ae121.js" + ], + "isEntry": true, + "src": "resources/js/clients/payment_methods/authorize-powerboard-card.js" + }, "resources/js/clients/payment_methods/authorize-stripe-acss.js": { "file": "assets/authorize-stripe-acss-f6bd46c1.js", "imports": [ @@ -141,6 +149,14 @@ "isEntry": true, "src": "resources/js/clients/payments/paytrace-credit-card.js" }, + "resources/js/clients/payments/powerboard-credit-card.js": { + "file": "assets/powerboard-credit-card-9c79019c.js", + "imports": [ + "_wait-8f4ae121.js" + ], + "isEntry": true, + "src": "resources/js/clients/payments/powerboard-credit-card.js" + }, "resources/js/clients/payments/razorpay-aio.js": { "file": "assets/razorpay-aio-f8e8c7f0.js", "imports": [ @@ -348,7 +364,7 @@ "src": "resources/js/setup/setup.js" }, "resources/sass/app.scss": { - "file": "assets/app-23f93261.css", + "file": "assets/app-9c3f71d4.css", "isEntry": true, "src": "resources/sass/app.scss" } diff --git a/resources/js/clients/payment_methods/authorize-powerboard-card.js b/resources/js/clients/payment_methods/authorize-powerboard-card.js new file mode 100644 index 000000000000..9452810b4cef --- /dev/null +++ b/resources/js/clients/payment_methods/authorize-powerboard-card.js @@ -0,0 +1,239 @@ +/** + * Invoice Ninja (https://invoiceninja.com). + * + * @link https://github.com/invoiceninja/invoiceninja source repository + * + * @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com) + * + * @license https://www.elastic.co/licensing/elastic-license + */ + +import { instant, wait } from '../wait'; + +async function get3dsToken() { + const browserDetails = { + name: navigator.userAgent.substring(0, 100), // The full user agent string, which contains the browser name and version + java_enabled: navigator.javaEnabled() ? 'true' : 'false', // Indicates if Java is enabled in the browser + language: navigator.language || navigator.userLanguage, // The browser language + screen_height: window.screen.height.toString(), // Screen height in pixels + screen_width: window.screen.width.toString(), // Screen width in pixels + time_zone: (new Date().getTimezoneOffset() * -1).toString(), // Timezone offset in minutes (negative for behind UTC) + color_depth: window.screen.colorDepth.toString(), // Color depth in bits per pixel + }; + + document.querySelector('input[name="browser_details"]').value = + JSON.stringify(browserDetails); + + const formData = JSON.stringify({ + ...Object.fromEntries( + new FormData(document.getElementById('server-response')) + ), + gateway_response: Array.from(document.querySelectorAll('input[name=gateway_response]')).find(input => input.value).value, + }); + + const paymentsRoute = document.querySelector('meta[name=store_route]'); + + try { + // Return the fetch promise to handle it externally + const response = await fetch(paymentsRoute.content, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Requested-With': 'XMLHttpRequest', + Accept: 'application/json', + 'X-CSRF-Token': document.querySelector( + 'meta[name="csrf-token"]' + ).content, + }, + body: formData, + }); + + if (!response.ok) { + return await response.json().then((errorData) => { + throw new Error(errorData.message ?? 'Unknown error.'); + }); + + // const text = await response.text(); + // throw new Error(`Network response was not ok: ${response.statusText}. Response text: ${text}`); + } + + return await response.json(); + } catch (error) { + document.getElementById( + 'errors' + ).textContent = `Sorry, your transaction could not be processed...\n\n${error.message}`; + document.getElementById('errors').hidden = false; + + + let payNow = document.getElementById('authorize-card'); + + payNow.disabled = false; + payNow.querySelector('svg').classList.add('hidden'); + payNow.querySelector('span').classList.remove('hidden'); + + console.error('Fetch error:', error); // Log error for debugging + throw error; // + } +} + +async function process3ds() { + try { + const resource = await get3dsToken(); + + if (resource.status === 'not_authenticated' || resource === 'not_authenticated') { + authorize(); + + throw new Error( + 'There was an issue authenticating this payment method.' + ); + } + + if (resource.status === 'authentication_not_supported') { + document.querySelector('input[name="browser_details"]').value = + null; + + document.querySelector('input[name="charge"]').value = + JSON.stringify(resource); + + return document.getElementById('server-response').submit(); + } + + const canvas = new cba.Canvas3ds( + '#widget-3dsecure', + resource._3ds.token + ); + + canvas.load(); + + let widget = document.getElementById('widget'); + widget.classList.add('hidden'); + + canvas.on('chargeAuthSuccess', function (data) { + document.querySelector('input[name="browser_details"]').value = + null; + + document.querySelector('input[name="charge"]').value = + JSON.stringify(data); + + document.getElementById('server-response').submit(); + }); + + canvas.on('chargeAuthReject', function (data) { + document.getElementById( + 'errors' + ).textContent = `Sorry, your transaction could not be processed...`; + document.getElementById('errors').hidden = false; + + authorize(); + }); + + canvas.load(); + } catch (error) { + console.error('Error fetching 3DS Token:', error); + + document.getElementById( + 'errors' + ).textContent = `Sorry, your transaction could not be processed...\n\n${error}`; + document.getElementById('errors').hidden = false; + + let payNow = document.getElementById('authorize-card'); + + payNow.disabled = false; + payNow.querySelector('svg').classList.add('hidden'); + payNow.querySelector('span').classList.remove('hidden'); + } +} + +function setup() { + reload(); + + const publicKey = document.querySelector('meta[name=public_key]'); + const gatewayId = document.querySelector('meta[name=gateway_id]'); + const env = document.querySelector('meta[name=environment]'); + + const widget = new cba.HtmlWidget( + '#widget', + publicKey?.content, + gatewayId?.content + ); + + widget.setEnv(env?.content); + widget.useAutoResize(); + widget.interceptSubmitForm('#stepone'); + widget.onFinishInsert( + '#server-response input[name="gateway_response"]', + 'payment_source' + ); + + widget.setFormFields(['card_name*']); + + widget.load(); + + let payNow = document.getElementById('authorize-card'); + + payNow.disabled = false; + payNow.querySelector('svg').classList.add('hidden'); + payNow.querySelector('span').classList.remove('hidden'); + + return widget; +} + +function reload() { + document.querySelector('#widget').innerHTML = ''; + document.querySelector('#widget')?.classList.remove('hidden'); + document.querySelector('#widget-3dsecure').innerHTML = ''; +} + +export function authorize() { + const widget = setup(); + + function handleTrigger() { + let payNow = document.getElementById('pay-now'); + + payNow.disabled = widget.isInvalidForm(); + } + + widget.trigger('tab', handleTrigger); + widget.trigger('submit_form', handleTrigger); + widget.trigger('tab', handleTrigger); + + widget.on('finish', function (data) { + document.getElementById('errors').hidden = true; + + process3ds(); + }); + + const first = document.querySelector('input[name="payment-type"]'); + + if (first) { + first.click(); + } + + let authorizeCard = document.getElementById('authorize-card'); + + authorizeCard.addEventListener('click', () => { + const div = document.getElementById('widget'); + + widget.getValidationState(); + + if (!widget.isValidForm() && div.offsetParent !== null) { + authorizeCard.disabled = false; + authorizeCard.querySelector('svg').classList.add('hidden'); + authorizeCard.querySelector('span').classList.remove('hidden'); + + return; + } + + authorizeCard.disabled = true; + authorizeCard.querySelector('svg').classList.remove('hidden'); + authorizeCard.querySelector('span').classList.add('hidden'); + + if (div.offsetParent !== null) { + document.getElementById('stepone_submit').click(); + } else { + document.getElementById('server-response').submit(); + } + }); +} + +instant() ? authorize() : wait('#').then(authorize); diff --git a/resources/js/clients/payments/powerboard-credit-card.js b/resources/js/clients/payments/powerboard-credit-card.js new file mode 100644 index 000000000000..3930b672aa9b --- /dev/null +++ b/resources/js/clients/payments/powerboard-credit-card.js @@ -0,0 +1,276 @@ +/** + * Invoice Ninja (https://invoiceninja.com). + * + * @link https://github.com/invoiceninja/invoiceninja source repository + * + * @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com) + * + * @license https://www.elastic.co/licensing/elastic-license + */ + +import { instant, wait } from '../wait'; + +function setup() { + const publicKey = document.querySelector('meta[name=public_key]'); + const gatewayId = document.querySelector('meta[name=gateway_id]'); + const env = document.querySelector('meta[name=environment]'); + + const widget = new cba.HtmlWidget( + '#widget', + publicKey?.content, + gatewayId?.content + ); + + widget.setEnv(env?.content); + widget.useAutoResize(); + widget.interceptSubmitForm('#stepone'); + widget.onFinishInsert( + '#server-response input[name="gateway_response"]', + 'payment_source' + ); + + widget.setFormFields(['card_name*']); + widget.reload(); + + let payNow = document.getElementById('pay-now'); + + payNow.disabled = false; + payNow.querySelector('svg').classList.add('hidden'); + payNow.querySelector('span').classList.remove('hidden'); + + document.querySelector( + '#server-response input[name="gateway_response"]' + ).value = ''; + + return widget; +} + +function reload() { + document.querySelector('#widget')?.replaceChildren(); + document.querySelector('#widget')?.classList.remove('hidden'); + + document.querySelector('#widget-3dsecure')?.replaceChildren(); +} + +function pay() { + reload(); + + const widget = setup(); + + widget.on('finish', () => { + document.getElementById('errors').hidden = true; + + process3ds(); + }); + + widget.on('submit', function (data) { + document.getElementById('errors').hidden = true; + }); + + let payNow = document.getElementById('pay-now'); + + payNow.addEventListener('click', () => { + const div = document.getElementById('widget'); + + widget.getValidationState(); + + if (!widget.isValidForm() && div.offsetParent !== null) { + payNow.disabled = false; + payNow.querySelector('svg').classList.add('hidden'); + payNow.querySelector('span').classList.remove('hidden'); + + return; + } + + payNow.disabled = true; + payNow.querySelector('svg').classList.remove('hidden'); + payNow.querySelector('span').classList.add('hidden'); + + let storeCard = document.querySelector( + 'input[name=token-billing-checkbox]:checked' + ); + + if (storeCard) { + document.getElementById('store_card').value = storeCard.value; + } + + if (div.offsetParent !== null) + document.getElementById('stepone_submit').click(); + else document.getElementById('server-response').submit(); + }); + + document + .getElementById('toggle-payment-with-credit-card') + .addEventListener('click', (element) => { + let widget = document.getElementById('widget'); + + widget.classList.remove('hidden'); + + document.getElementById('save-card--container').style.display = + 'grid'; + document.querySelector('input[name=token]').value = ''; + + document + .querySelector('#powerboard-payment-container') + ?.classList.remove('hidden'); + }); + + Array.from( + document.getElementsByClassName('toggle-payment-with-token') + ).forEach((element) => + element.addEventListener('click', (element) => { + document.getElementById('widget').classList.add('hidden'); + document.getElementById('save-card--container').style.display = + 'none'; + document.querySelector('input[name=token]').value = + element.target.dataset.token; + + document + .querySelector('#powerboard-payment-container') + ?.classList.add('hidden'); + }) + ); + + const first = document.querySelector('input[name="payment-type"]'); + + if (first) { + first.click(); + } +} + +async function process3ds() { + try { + const resource = await get3dsToken(); + + if (resource.status === 'not_authenticated' || resource === 'not_authenticated') { + pay(); + + throw new Error( + 'There was an issue authenticating this payment method.' + ); + } + + if (resource.status === 'authentication_not_supported') { + document.querySelector('input[name="browser_details"]').value = + null; + + document.querySelector('input[name="charge"]').value = + JSON.stringify(resource); + + let storeCard = document.querySelector( + 'input[name=token-billing-checkbox]:checked' + ); + + if (storeCard) { + document.getElementById('store_card').value = storeCard.value; + } + + return document.getElementById('server-response').submit(); + } + + const canvas = new cba.Canvas3ds( + '#widget-3dsecure', + resource._3ds.token + ); + canvas.load(); + + let widget = document.getElementById('widget'); + widget.classList.add('hidden'); + + canvas.on('chargeAuthSuccess', function (data) { + document.querySelector('input[name="browser_details"]').value = + null; + + document.querySelector('input[name="charge"]').value = + JSON.stringify(data); + + let storeCard = document.querySelector( + 'input[name=token-billing-checkbox]:checked' + ); + + if (storeCard) { + document.getElementById('store_card').value = storeCard.value; + } + + document.getElementById('server-response').submit(); + }); + + canvas.on('chargeAuthReject', function (data) { + document.getElementById( + 'errors' + ).textContent = `Sorry, your transaction could not be processed...`; + document.getElementById('errors').hidden = false; + + pay(); + }); + + canvas.load(); + } catch (error) { + document.getElementById( + 'errors' + ).textContent = `Sorry, your transaction could not be processed...\n\n${error}`; + document.getElementById('errors').hidden = false; + pay(); + } +} + +async function get3dsToken() { + const browserDetails = { + name: navigator.userAgent.substring(0, 100), // The full user agent string, which contains the browser name and version + java_enabled: navigator.javaEnabled() ? 'true' : 'false', // Indicates if Java is enabled in the browser + language: navigator.language || navigator.userLanguage, // The browser language + screen_height: window.screen.height.toString(), // Screen height in pixels + screen_width: window.screen.width.toString(), // Screen width in pixels + time_zone: (new Date().getTimezoneOffset() * -1).toString(), // Timezone offset in minutes (negative for behind UTC) + color_depth: window.screen.colorDepth.toString(), // Color depth in bits per pixel + }; + + document.querySelector('input[name="browser_details"]').value = + JSON.stringify(browserDetails); + + const formData = JSON.stringify( + Object.fromEntries( + new FormData(document.getElementById('server-response')) + ) + ); + + const paymentsRoute = document.querySelector('meta[name=payments_route]'); + + try { + // Return the fetch promise to handle it externally + const response = await fetch(paymentsRoute.content, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Requested-With': 'XMLHttpRequest', + Accept: 'application/json', + 'X-CSRF-Token': document.querySelector( + 'meta[name="csrf-token"]' + ).content, + }, + body: formData, + }); + + if (!response.ok) { + return await response.json().then((errorData) => { + throw new Error(errorData.message ?? 'Unknown error.'); + }); + + // const text = await response.text(); + // throw new Error(`Network response was not ok: ${response.statusText}. Response text: ${text}`); + } + + return await response.json(); + } catch (error) { + document.getElementById( + 'errors' + ).textContent = `Sorry, your transaction could not be processed...\n\n${error.message}`; + document.getElementById('errors').hidden = false; + + console.error('Fetch error:', error); // Log error for debugging + pay(); + + } +} + +instant() ? pay() : wait('#powerboard-credit-card-payment').then(() => pay()); diff --git a/resources/views/portal/ninja2020/components/livewire/billing-portal-purchasev2.blade.php b/resources/views/portal/ninja2020/components/livewire/billing-portal-purchasev2.blade.php index 21c74c7f1791..c9e81ebc7cf1 100644 --- a/resources/views/portal/ninja2020/components/livewire/billing-portal-purchasev2.blade.php +++ b/resources/views/portal/ninja2020/components/livewire/billing-portal-purchasev2.blade.php @@ -304,6 +304,14 @@ {{ $total }} + @if(isset($tax)) +
+ {{ ctrans('texts.tax') }} + {{ $tax }} +
+ + @endif +

{{ $heading_text ?? ctrans('texts.checkout') }}

@if (session()->has('message')) diff --git a/resources/views/portal/ninja2020/components/livewire/terms.blade.php b/resources/views/portal/ninja2020/components/livewire/terms.blade.php index d79305195cac..107aa435fa8c 100644 --- a/resources/views/portal/ninja2020/components/livewire/terms.blade.php +++ b/resources/views/portal/ninja2020/components/livewire/terms.blade.php @@ -13,8 +13,11 @@ @endif
-
- +
+
+ +
+ {{ ctrans('texts.by_clicking_next_you_accept_terms')}}
diff --git a/resources/views/portal/ninja2020/flow2/under-over-payments.blade.php b/resources/views/portal/ninja2020/flow2/under-over-payments.blade.php index 45bd3cc76e3d..70bb1d9b8436 100644 --- a/resources/views/portal/ninja2020/flow2/under-over-payments.blade.php +++ b/resources/views/portal/ninja2020/flow2/under-over-payments.blade.php @@ -22,7 +22,7 @@
- @if($settings->client_portal_allow_under_payment) + @if($settings->client_portal_allow_under_payment && $settings->client_portal_under_payment_minimum != 0) {{ ctrans('texts.minimum_payment') }}: {{ $settings->client_portal_under_payment_minimum }} @endif diff --git a/resources/views/portal/ninja2020/gateways/paypal/pay.blade.php b/resources/views/portal/ninja2020/gateways/paypal/pay.blade.php index b6c83d9149e9..cac76ec1a7ce 100644 --- a/resources/views/portal/ninja2020/gateways/paypal/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/paypal/pay.blade.php @@ -93,7 +93,7 @@ inset: 6px; document.getElementById("gateway_response").value =JSON.stringify( data ); formData = JSON.stringify(Object.fromEntries(new FormData(document.getElementById("server_response")))), - + fetch('{{ route('client.payments.response') }}', { method: 'POST', headers: { diff --git a/resources/views/portal/ninja2020/gateways/powerboard/credit_card/authorize.blade.php b/resources/views/portal/ninja2020/gateways/powerboard/credit_card/authorize.blade.php new file mode 100644 index 000000000000..5085ac75d7f0 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/powerboard/credit_card/authorize.blade.php @@ -0,0 +1,54 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'Credit card', 'card_title' => 'Credit card']) + +@section('gateway_head') + + + + + +@endsection + +@section('gateway_content') +
+ + +
+ +
+ @csrf + + + + + + +
+ + + +
+
+
+
+ + @component('portal.ninja2020.gateways.includes.pay_now', ['id' => 'authorize-card']) + {{ ctrans('texts.add_payment_method') }} + @endcomponent +@endsection + +@section('gateway_footer') + + + + + @vite('resources/js/clients/payment_methods/authorize-powerboard-card.js') +@endsection + + + diff --git a/resources/views/portal/ninja2020/gateways/powerboard/credit_card/pay.blade.php b/resources/views/portal/ninja2020/gateways/powerboard/credit_card/pay.blade.php new file mode 100644 index 000000000000..8f0f1996f7f2 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/powerboard/credit_card/pay.blade.php @@ -0,0 +1,99 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'Credit card', 'card_title' => 'Credit card']) + +@section('gateway_head') + + + + + +@endsection + +@section('gateway_content') + +
+ + +
+ +
+ @csrf + + + + + + + + + + + + +
+ + + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.payment_type')]) + {{ ctrans('texts.credit_card') }} + @endcomponent + + @include('portal.ninja2020.gateways.includes.payment_details') + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) +
    + @if(count($tokens) > 0) + @foreach($tokens as $token) +
  • + +
  • + @endforeach + @endisset + +
  • + +
  • +
+ @endcomponent + + @include('portal.ninja2020.gateways.includes.save_card') + + + + @include('portal.ninja2020.gateways.includes.pay_now') +@endsection + +@section('gateway_footer') + + + + + + @vite('resources/js/clients/payments/powerboard-credit-card.js') +@endsection + + + diff --git a/resources/views/portal/ninja2020/gateways/powerboard/credit_card/pay_livewire.blade.php b/resources/views/portal/ninja2020/gateways/powerboard/credit_card/pay_livewire.blade.php new file mode 100644 index 000000000000..5a4e7e440f40 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/powerboard/credit_card/pay_livewire.blade.php @@ -0,0 +1,90 @@ +
+ + + + + +
+ + +
+ +
+ @csrf + + + + + + + + + + + + +
+ + + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.payment_type')]) + {{ ctrans('texts.credit_card') }} + @endcomponent + + @include('portal.ninja2020.gateways.includes.payment_details') + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) +
    + @if(count($tokens) > 0) + @foreach($tokens as $token) +
  • + +
  • + @endforeach + @endisset + +
  • + +
  • +
+ @endcomponent + + @include('portal.ninja2020.gateways.includes.save_card') + + + + @include('portal.ninja2020.gateways.includes.pay_now') + + +
+ +@assets + + + @vite('resources/js/clients/payments/powerboard-credit-card.js') +@endassets diff --git a/resources/views/portal/ninja2020/layout/payments.blade.php b/resources/views/portal/ninja2020/layout/payments.blade.php index 13c7fdda443e..5ad906bb18a0 100644 --- a/resources/views/portal/ninja2020/layout/payments.blade.php +++ b/resources/views/portal/ninja2020/layout/payments.blade.php @@ -52,8 +52,8 @@ Livewire.on('passed-required-fields-check', () => { document.querySelector('div[data-ref="required-fields-container"]').classList.toggle('h-0'); - // document.querySelector('div[data-ref="required-fields-container"]').classList.add('opacity-25'); - // document.querySelector('div[data-ref="required-fields-container"]').classList.add('pointer-events-none'); + document.querySelector('div[data-ref="required-fields-container"]').classList.add('opacity-25'); + document.querySelector('div[data-ref="required-fields-container"]').classList.add('pointer-events-none'); document.querySelector('div[data-ref="gateway-container"]').classList.remove('opacity-25'); document.querySelector('div[data-ref="gateway-container"]').classList.remove('pointer-events-none'); diff --git a/resources/views/portal/ninja2020/recurring_invoices/show.blade.php b/resources/views/portal/ninja2020/recurring_invoices/show.blade.php index aed229b7fbe5..b569dddbdbb3 100644 --- a/resources/views/portal/ninja2020/recurring_invoices/show.blade.php +++ b/resources/views/portal/ninja2020/recurring_invoices/show.blade.php @@ -16,10 +16,10 @@
- {{ ctrans('texts.start_date') }} + {{ ctrans('texts.last_sent') }}
- {{ $invoice->translateDate($invoice->start_date, $invoice->client->date_format(), $invoice->client->locale()) }} + {{ $invoice->translateDate($invoice->last_sent_date, $invoice->client->date_format(), $invoice->client->locale()) }}
diff --git a/tests/Feature/ActivityApiTest.php b/tests/Feature/ActivityApiTest.php index 806385295331..cb76e731ce15 100644 --- a/tests/Feature/ActivityApiTest.php +++ b/tests/Feature/ActivityApiTest.php @@ -17,10 +17,7 @@ use Illuminate\Validation\ValidationException; use Tests\MockAccountData; use Tests\TestCase; -/** - * @test - * @covers App\Http\Controllers\ActivityController - */ + class ActivityApiTest extends TestCase { use DatabaseTransactions; diff --git a/tests/Feature/ApplePayDomainMerchantUrlTest.php b/tests/Feature/ApplePayDomainMerchantUrlTest.php index cc3485bfab60..baeee38faf9e 100644 --- a/tests/Feature/ApplePayDomainMerchantUrlTest.php +++ b/tests/Feature/ApplePayDomainMerchantUrlTest.php @@ -17,10 +17,6 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Tests\MockAccountData; use Tests\TestCase; -/** - * @test - * @covers App\Http\Controllers\ApplePayDomainController - */ class ApplePayDomainMerchantUrlTest extends TestCase { use DatabaseTransactions; diff --git a/tests/Feature/BankIntegrationApiTest.php b/tests/Feature/BankIntegrationApiTest.php index 8e4ba332aace..ecec2192ee76 100644 --- a/tests/Feature/BankIntegrationApiTest.php +++ b/tests/Feature/BankIntegrationApiTest.php @@ -18,10 +18,7 @@ use Illuminate\Support\Facades\Session; use Tests\MockAccountData; use Tests\TestCase; -/** - * @test - * @covers App\Http\Controllers\BankIntegrationController - */ + class BankIntegrationApiTest extends TestCase { use MakesHash; diff --git a/tests/Feature/BankTransactionApiTest.php b/tests/Feature/BankTransactionApiTest.php index c4e5ad3fe3f7..739910539e7a 100644 --- a/tests/Feature/BankTransactionApiTest.php +++ b/tests/Feature/BankTransactionApiTest.php @@ -21,10 +21,7 @@ use Illuminate\Support\Facades\Session; use Tests\MockAccountData; use Tests\TestCase; -/** - * @test - * @covers App\Http\Controllers\BankTransactionController - */ + class BankTransactionApiTest extends TestCase { use MakesHash; diff --git a/tests/Feature/BankTransactionRuleApiTest.php b/tests/Feature/BankTransactionRuleApiTest.php index 1d9483835412..6571c13dcad3 100644 --- a/tests/Feature/BankTransactionRuleApiTest.php +++ b/tests/Feature/BankTransactionRuleApiTest.php @@ -18,10 +18,7 @@ use Illuminate\Support\Facades\Session; use Tests\MockAccountData; use Tests\TestCase; -/** - * @test - * @covers App\Http\Controllers\BankTransactionRuleController - */ + class BankTransactionRuleApiTest extends TestCase { use MakesHash; diff --git a/tests/Feature/BaseApiTest.php b/tests/Feature/BaseApiTest.php index 1debe9673cba..9000a9217d3d 100644 --- a/tests/Feature/BaseApiTest.php +++ b/tests/Feature/BaseApiTest.php @@ -54,10 +54,6 @@ use Illuminate\Testing\Fluent\AssertableJson; use Tests\MockAccountData; use Tests\TestCase; -/** - * @test - * @covers App\Http\Controllers\BaseController - */ class BaseApiTest extends TestCase { use MockAccountData; diff --git a/tests/Feature/CancelInvoiceTest.php b/tests/Feature/CancelInvoiceTest.php index 4fd846da243e..b1dadb7ea254 100644 --- a/tests/Feature/CancelInvoiceTest.php +++ b/tests/Feature/CancelInvoiceTest.php @@ -19,10 +19,7 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Tests\MockAccountData; use Tests\TestCase; -/** - * @test - * @covers App\Services\Invoice\HandleCancellation - */ + class CancelInvoiceTest extends TestCase { use MakesHash; diff --git a/tests/Feature/ClassificationTest.php b/tests/Feature/ClassificationTest.php index 65c7d07f7062..4ed072e92837 100644 --- a/tests/Feature/ClassificationTest.php +++ b/tests/Feature/ClassificationTest.php @@ -17,7 +17,7 @@ use Tests\MockUnitData; use Tests\TestCase; /** - * @test + * */ class ClassificationTest extends TestCase { diff --git a/tests/Feature/ClientApiTest.php b/tests/Feature/ClientApiTest.php index 97050e68546b..33f6b37a6ae8 100644 --- a/tests/Feature/ClientApiTest.php +++ b/tests/Feature/ClientApiTest.php @@ -33,10 +33,6 @@ use Illuminate\Validation\ValidationException; use Tests\MockAccountData; use Tests\TestCase; -/** - * @test - * @covers App\Http\Controllers\ClientController - */ class ClientApiTest extends TestCase { use MakesHash; diff --git a/tests/Feature/ClientDeletedInvoiceCreationTest.php b/tests/Feature/ClientDeletedInvoiceCreationTest.php index ce14b2db89b7..1ee73ecf149b 100644 --- a/tests/Feature/ClientDeletedInvoiceCreationTest.php +++ b/tests/Feature/ClientDeletedInvoiceCreationTest.php @@ -19,10 +19,6 @@ use Illuminate\Support\Facades\Session; use Tests\MockAccountData; use Tests\TestCase; -/** - * @test - * @covers App\Http\Controllers\InvoiceController - */ class ClientDeletedInvoiceCreationTest extends TestCase { use MakesHash; diff --git a/tests/Feature/ClientGatewayTokenApiTest.php b/tests/Feature/ClientGatewayTokenApiTest.php index df9ee7f6d9cb..8c10ecab2691 100644 --- a/tests/Feature/ClientGatewayTokenApiTest.php +++ b/tests/Feature/ClientGatewayTokenApiTest.php @@ -20,10 +20,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\Foundation\Testing\DatabaseTransactions; -/** - * @test - * @covers App\Http\Controllers\ClientGatewayTokenController - */ + class ClientGatewayTokenApiTest extends TestCase { use MakesHash; diff --git a/tests/Feature/ClientModelTest.php b/tests/Feature/ClientModelTest.php index cd8e21918e21..2157a61695c4 100644 --- a/tests/Feature/ClientModelTest.php +++ b/tests/Feature/ClientModelTest.php @@ -18,10 +18,6 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; use Tests\MockAccountData; use Tests\TestCase; -/** - * @test - * @covers App\Models\Client - */ class ClientModelTest extends TestCase { use MockAccountData; diff --git a/tests/Feature/ClientPresenterTest.php b/tests/Feature/ClientPresenterTest.php index 1f03f69146bb..27542d9d990d 100644 --- a/tests/Feature/ClientPresenterTest.php +++ b/tests/Feature/ClientPresenterTest.php @@ -16,8 +16,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Models\Presenters\ClientPresenter + * + * App\Models\Presenters\ClientPresenter */ class ClientPresenterTest extends TestCase { diff --git a/tests/Feature/ClientTest.php b/tests/Feature/ClientTest.php index 0aa7fd42bfe0..1cc816920423 100644 --- a/tests/Feature/ClientTest.php +++ b/tests/Feature/ClientTest.php @@ -37,8 +37,8 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Http\Controllers\ClientController + * + * App\Http\Controllers\ClientController */ class ClientTest extends TestCase { @@ -405,7 +405,7 @@ class ClientTest extends TestCase } /* - * @covers ClientController + * ClientController */ public function testClientRestEndPoints() { diff --git a/tests/Feature/CompanyGatewayApiTest.php b/tests/Feature/CompanyGatewayApiTest.php index e2690a00e8a8..234027bad84c 100644 --- a/tests/Feature/CompanyGatewayApiTest.php +++ b/tests/Feature/CompanyGatewayApiTest.php @@ -24,8 +24,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Models\CompanyGateway + * + * App\Models\CompanyGateway */ class CompanyGatewayApiTest extends TestCase { diff --git a/tests/Feature/CompanyGatewayResolutionTest.php b/tests/Feature/CompanyGatewayResolutionTest.php index 2a85d84dd2ff..eaed02985d74 100644 --- a/tests/Feature/CompanyGatewayResolutionTest.php +++ b/tests/Feature/CompanyGatewayResolutionTest.php @@ -23,7 +23,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class CompanyGatewayResolutionTest extends TestCase { @@ -105,7 +105,7 @@ class CompanyGatewayResolutionTest extends TestCase } /** - * @covers \App\Models\CompanyGateway::calcGatewayFee() + * \App\Models\CompanyGateway::calcGatewayFee() */ public function testGatewayResolution() { @@ -114,7 +114,7 @@ class CompanyGatewayResolutionTest extends TestCase } /** - * @covers \App|Models\Client::validGatewayForAmount() + * \App|Models\Client::validGatewayForAmount() */ public function testValidationForGatewayAmount() { diff --git a/tests/Feature/CompanyGatewayTest.php b/tests/Feature/CompanyGatewayTest.php index ba5f891acf99..5946b1261593 100644 --- a/tests/Feature/CompanyGatewayTest.php +++ b/tests/Feature/CompanyGatewayTest.php @@ -21,8 +21,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Models\CompanyGateway + * + * App\Models\CompanyGateway */ class CompanyGatewayTest extends TestCase { diff --git a/tests/Feature/CompanySettingsTest.php b/tests/Feature/CompanySettingsTest.php index 255f5fb3d088..20d9d367a8b7 100644 --- a/tests/Feature/CompanySettingsTest.php +++ b/tests/Feature/CompanySettingsTest.php @@ -22,8 +22,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Utils\Traits\CompanySettingsSaver + * + * App\Utils\Traits\CompanySettingsSaver */ class CompanySettingsTest extends TestCase { diff --git a/tests/Feature/CompanyTest.php b/tests/Feature/CompanyTest.php index 55b15b45ef67..fafd348c62c2 100644 --- a/tests/Feature/CompanyTest.php +++ b/tests/Feature/CompanyTest.php @@ -11,29 +11,30 @@ namespace Tests\Feature; -use App\DataMapper\CompanySettings; -use App\Http\Middleware\PasswordProtection; -use App\Models\Company; -use App\Models\CompanyToken; -use App\Models\TaxRate; -use App\Utils\Traits\MakesHash; -use Illuminate\Database\Eloquent\Model; -use Illuminate\Foundation\Testing\DatabaseTransactions; -use Illuminate\Http\UploadedFile; -use Illuminate\Support\Facades\Log; -use Illuminate\Support\Facades\Session; -use Tests\MockAccountData; use Tests\TestCase; +use App\Models\Account; +use App\Models\Company; +use App\Models\TaxRate; +use Tests\MockAccountData; +use App\Models\CompanyToken; +use App\Utils\Traits\MakesHash; +use Illuminate\Http\UploadedFile; +use App\DataMapper\CompanySettings; +use Illuminate\Support\Facades\Log; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Session; +use App\Http\Middleware\PasswordProtection; +use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Http\Controllers\CompanyController + * + * App\Http\Controllers\CompanyController */ class CompanyTest extends TestCase { use MakesHash; use MockAccountData; - use DatabaseTransactions; + // use DatabaseTransactions; public $faker; @@ -41,30 +42,29 @@ class CompanyTest extends TestCase { parent::setUp(); - Session::start(); - $this->faker = \Faker\Factory::create(); - Model::reguard(); - $this->makeTestData(); } public function testCompanyExpenseMailbox() { + $safeEmail = $this->faker->safeEmail(); + // Test valid email address $company_update = [ - 'expense_mailbox' => 'valid@example.com', + 'expense_mailbox' => $safeEmail, ]; $response = $this->withHeaders([ 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, - ])->putJson('/api/v1/companies/'.$this->encodePrimaryKey($this->company->id), $company_update); + ])->putJson('/api/v1/companies/'.$this->company->hashed_id, $company_update); $response->assertStatus(200); - $this->assertEquals('valid@example.com', $response->json('data.expense_mailbox')); + $arr = $response->json(); + $this->assertEquals($safeEmail, $arr['data']['expense_mailbox']); // Test invalid email address $company_update = [ @@ -260,5 +260,11 @@ class CompanyTest extends TestCase ->assertStatus(200); } + public function tearDown(): void + { + Account::query()->where('id', $this->company->account_id)->delete(); + + parent::tearDown(); + } } diff --git a/tests/Feature/CompanyTokenApiTest.php b/tests/Feature/CompanyTokenApiTest.php index 66de08b0e224..18695d2e6db4 100644 --- a/tests/Feature/CompanyTokenApiTest.php +++ b/tests/Feature/CompanyTokenApiTest.php @@ -22,8 +22,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\TokenController + * + * App\Http\Controllers\TokenController */ class CompanyTokenApiTest extends TestCase { diff --git a/tests/Feature/DeleteInvoiceTest.php b/tests/Feature/DeleteInvoiceTest.php index deae43cb0cf2..54b12595a5e2 100644 --- a/tests/Feature/DeleteInvoiceTest.php +++ b/tests/Feature/DeleteInvoiceTest.php @@ -23,7 +23,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class DeleteInvoiceTest extends TestCase { @@ -302,7 +302,7 @@ class DeleteInvoiceTest extends TestCase } /** - * @covers App\Services\Invoice\MarkInvoiceDeleted + * App\Services\Invoice\MarkInvoiceDeleted */ public function testInvoiceDeletion() { @@ -410,7 +410,7 @@ class DeleteInvoiceTest extends TestCase } /** - * @covers App\Services\Invoice\HandleRestore + * App\Services\Invoice\HandleRestore */ public function testInvoiceDeletionAndRestoration() { diff --git a/tests/Feature/DesignApiTest.php b/tests/Feature/DesignApiTest.php index 1fc71867c5d7..d5d7a4df4641 100644 --- a/tests/Feature/DesignApiTest.php +++ b/tests/Feature/DesignApiTest.php @@ -21,8 +21,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\DesignController + * + * App\Http\Controllers\DesignController */ class DesignApiTest extends TestCase { diff --git a/tests/Feature/DocumentsApiTest.php b/tests/Feature/DocumentsApiTest.php index c4a1ad50e2c6..6cb2bcbcc671 100644 --- a/tests/Feature/DocumentsApiTest.php +++ b/tests/Feature/DocumentsApiTest.php @@ -21,8 +21,8 @@ use Illuminate\Support\Facades\Session; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Http\Controllers\DocumentController + * + * App\Http\Controllers\DocumentController */ class DocumentsApiTest extends TestCase { diff --git a/tests/Feature/EInvoice/FacturaeTest.php b/tests/Feature/EInvoice/FacturaeTest.php index d1752aeff074..9856aa044698 100644 --- a/tests/Feature/EInvoice/FacturaeTest.php +++ b/tests/Feature/EInvoice/FacturaeTest.php @@ -17,7 +17,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class FacturaeTest extends TestCase { diff --git a/tests/Feature/EInvoice/FatturaPATest.php b/tests/Feature/EInvoice/FatturaPATest.php index b53fad3d4d28..df07e0f2b469 100644 --- a/tests/Feature/EInvoice/FatturaPATest.php +++ b/tests/Feature/EInvoice/FatturaPATest.php @@ -29,7 +29,7 @@ use InvoiceNinja\EInvoice\Models\FatturaPA\FatturaElettronicaBodyType\FatturaEle use InvoiceNinja\EInvoice\Models\FatturaPA\FatturaElettronicaHeaderType\FatturaElettronicaHeader; /** - * @test + * */ class FatturaPATest extends TestCase { diff --git a/tests/Feature/EInvoice/PeppolTest.php b/tests/Feature/EInvoice/PeppolTest.php index 060116bbd386..efb362e266e7 100644 --- a/tests/Feature/EInvoice/PeppolTest.php +++ b/tests/Feature/EInvoice/PeppolTest.php @@ -34,7 +34,7 @@ use InvoiceNinja\EInvoice\Models\FatturaPA\FatturaElettronicaBodyType\FatturaEle use InvoiceNinja\EInvoice\Models\FatturaPA\FatturaElettronicaHeaderType\FatturaElettronicaHeader; /** - * @test + * */ class PeppolTest extends TestCase { diff --git a/tests/Feature/EntityPaidToDateTest.php b/tests/Feature/EntityPaidToDateTest.php index 0c34440db6ad..f086ca6d7a1c 100644 --- a/tests/Feature/EntityPaidToDateTest.php +++ b/tests/Feature/EntityPaidToDateTest.php @@ -23,7 +23,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class EntityPaidToDateTest extends TestCase { diff --git a/tests/Feature/ExpenseApiTest.php b/tests/Feature/ExpenseApiTest.php index ccaa75fcbd59..193145b7029f 100644 --- a/tests/Feature/ExpenseApiTest.php +++ b/tests/Feature/ExpenseApiTest.php @@ -23,8 +23,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\ExpenseController + * + * App\Http\Controllers\ExpenseController */ class ExpenseApiTest extends TestCase { diff --git a/tests/Feature/ExpenseCategoryApiTest.php b/tests/Feature/ExpenseCategoryApiTest.php index 97f18e3a6c0e..67589c380b8b 100644 --- a/tests/Feature/ExpenseCategoryApiTest.php +++ b/tests/Feature/ExpenseCategoryApiTest.php @@ -19,8 +19,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\ExpenseCategoryController + * + * App\Http\Controllers\ExpenseCategoryController */ class ExpenseCategoryApiTest extends TestCase { diff --git a/tests/Feature/Export/ArDetailReportTest.php b/tests/Feature/Export/ArDetailReportTest.php index cd8c4368bb30..1a726911b315 100644 --- a/tests/Feature/Export/ArDetailReportTest.php +++ b/tests/Feature/Export/ArDetailReportTest.php @@ -25,7 +25,7 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Tests\TestCase; /** - * @test + * */ class ArDetailReportTest extends TestCase { diff --git a/tests/Feature/Export/ArSummaryReportTest.php b/tests/Feature/Export/ArSummaryReportTest.php index 367138e00482..513ba917e382 100644 --- a/tests/Feature/Export/ArSummaryReportTest.php +++ b/tests/Feature/Export/ArSummaryReportTest.php @@ -24,7 +24,7 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Tests\TestCase; /** - * @test + * */ class ArSummaryReportTest extends TestCase { diff --git a/tests/Feature/Export/ClientBalanceReportTest.php b/tests/Feature/Export/ClientBalanceReportTest.php index 5604d3b4e52d..6624e7afa345 100644 --- a/tests/Feature/Export/ClientBalanceReportTest.php +++ b/tests/Feature/Export/ClientBalanceReportTest.php @@ -24,7 +24,7 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Tests\TestCase; /** - * @test + * */ class ClientBalanceReportTest extends TestCase { diff --git a/tests/Feature/Export/ClientCsvTest.php b/tests/Feature/Export/ClientCsvTest.php index dc5a3f834d6e..5f55b4b69773 100644 --- a/tests/Feature/Export/ClientCsvTest.php +++ b/tests/Feature/Export/ClientCsvTest.php @@ -17,7 +17,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class ClientCsvTest extends TestCase { diff --git a/tests/Feature/Export/ClientSalesReportTest.php b/tests/Feature/Export/ClientSalesReportTest.php index 6acb55403dc2..2c626d678284 100644 --- a/tests/Feature/Export/ClientSalesReportTest.php +++ b/tests/Feature/Export/ClientSalesReportTest.php @@ -24,7 +24,7 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Tests\TestCase; /** - * @test + * */ class ClientSalesReportTest extends TestCase { diff --git a/tests/Feature/Export/ExportCompanyTest.php b/tests/Feature/Export/ExportCompanyTest.php index c96c7fb347fc..a4905c7b09cf 100644 --- a/tests/Feature/Export/ExportCompanyTest.php +++ b/tests/Feature/Export/ExportCompanyTest.php @@ -18,7 +18,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class ExportCompanyTest extends TestCase { diff --git a/tests/Feature/Export/ExportCsvTest.php b/tests/Feature/Export/ExportCsvTest.php index d23402b1f0d5..977c2d54ac96 100644 --- a/tests/Feature/Export/ExportCsvTest.php +++ b/tests/Feature/Export/ExportCsvTest.php @@ -20,7 +20,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class ExportCsvTest extends TestCase { diff --git a/tests/Feature/Export/ProductSalesReportTest.php b/tests/Feature/Export/ProductSalesReportTest.php index 85df92bc534c..4b137cbdca77 100644 --- a/tests/Feature/Export/ProductSalesReportTest.php +++ b/tests/Feature/Export/ProductSalesReportTest.php @@ -26,8 +26,8 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Tests\TestCase; /** - * @test - * @covers App\Services\Report\ProductSalesExport + * + * App\Services\Report\ProductSalesExport */ class ProductSalesReportTest extends TestCase { diff --git a/tests/Feature/Export/ProfitAndLossReportTest.php b/tests/Feature/Export/ProfitAndLossReportTest.php index 968737569a72..d13e4412d75e 100644 --- a/tests/Feature/Export/ProfitAndLossReportTest.php +++ b/tests/Feature/Export/ProfitAndLossReportTest.php @@ -28,8 +28,8 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Tests\TestCase; /** - * @test - * @covers App\Services\Report\ProfitLoss + * + * App\Services\Report\ProfitLoss */ class ProfitAndLossReportTest extends TestCase { diff --git a/tests/Feature/Export/ReportApiTest.php b/tests/Feature/Export/ReportApiTest.php index 9715b91e1ad8..42144a6c2e76 100644 --- a/tests/Feature/Export/ReportApiTest.php +++ b/tests/Feature/Export/ReportApiTest.php @@ -17,7 +17,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class ReportApiTest extends TestCase { diff --git a/tests/Feature/Export/ReportCsvGenerationTest.php b/tests/Feature/Export/ReportCsvGenerationTest.php index 000a80e80fa8..5ddddb55f1e6 100644 --- a/tests/Feature/Export/ReportCsvGenerationTest.php +++ b/tests/Feature/Export/ReportCsvGenerationTest.php @@ -34,7 +34,7 @@ use League\Csv\Reader; use Tests\TestCase; /** - * @test + * */ class ReportCsvGenerationTest extends TestCase { diff --git a/tests/Feature/Export/ReportPreviewTest.php b/tests/Feature/Export/ReportPreviewTest.php index 336c9a739157..a5fd2200bff6 100644 --- a/tests/Feature/Export/ReportPreviewTest.php +++ b/tests/Feature/Export/ReportPreviewTest.php @@ -33,7 +33,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class ReportPreviewTest extends TestCase { diff --git a/tests/Feature/Export/TaxSummaryReportTest.php b/tests/Feature/Export/TaxSummaryReportTest.php index 5ea14d8762b4..4cdb961a1fd7 100644 --- a/tests/Feature/Export/TaxSummaryReportTest.php +++ b/tests/Feature/Export/TaxSummaryReportTest.php @@ -24,7 +24,7 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Tests\TestCase; /** - * @test + * */ class TaxSummaryReportTest extends TestCase { diff --git a/tests/Feature/Export/UserSalesReportTest.php b/tests/Feature/Export/UserSalesReportTest.php index a5bf0d6e12db..ad2adc9a6a29 100644 --- a/tests/Feature/Export/UserSalesReportTest.php +++ b/tests/Feature/Export/UserSalesReportTest.php @@ -26,7 +26,7 @@ use Illuminate\Support\Facades\Schema; use Tests\TestCase; /** - * @test + * */ class UserSalesReportTest extends TestCase { diff --git a/tests/Feature/FilterApiTest.php b/tests/Feature/FilterApiTest.php index 98222f3604ae..a83b3cf600ee 100644 --- a/tests/Feature/FilterApiTest.php +++ b/tests/Feature/FilterApiTest.php @@ -17,8 +17,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\FilterController + * + * App\Http\Controllers\FilterController */ class FilterApiTest extends TestCase { diff --git a/tests/Feature/GoCardlessInstantBankPaymentTest.php b/tests/Feature/GoCardlessInstantBankPaymentTest.php index db1b68ecfd61..c99bf49acf38 100644 --- a/tests/Feature/GoCardlessInstantBankPaymentTest.php +++ b/tests/Feature/GoCardlessInstantBankPaymentTest.php @@ -24,7 +24,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class GoCardlessInstantBankPaymentTest extends TestCase { diff --git a/tests/Feature/Import/CSV/BaseTransformerTest.php b/tests/Feature/Import/CSV/BaseTransformerTest.php index 53260aa11d1a..92e4b7cab619 100644 --- a/tests/Feature/Import/CSV/BaseTransformerTest.php +++ b/tests/Feature/Import/CSV/BaseTransformerTest.php @@ -24,8 +24,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Import\Transformer\BaseTransformer + * + * App\Import\Transformer\BaseTransformer */ class BaseTransformerTest extends TestCase { diff --git a/tests/Feature/Import/CSV/CsvImportTest.php b/tests/Feature/Import/CSV/CsvImportTest.php index d12648349f22..7ec6269d07b1 100644 --- a/tests/Feature/Import/CSV/CsvImportTest.php +++ b/tests/Feature/Import/CSV/CsvImportTest.php @@ -25,8 +25,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Import\Providers\Csv + * + * App\Import\Providers\Csv */ class CsvImportTest extends TestCase { diff --git a/tests/Feature/Import/CSV/TaskImportTest.php b/tests/Feature/Import/CSV/TaskImportTest.php index 194da39e5d5c..ba8a7182826d 100644 --- a/tests/Feature/Import/CSV/TaskImportTest.php +++ b/tests/Feature/Import/CSV/TaskImportTest.php @@ -22,8 +22,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Import\Providers\Csv + * + * App\Import\Providers\Csv */ class TaskImportTest extends TestCase { diff --git a/tests/Feature/Import/Freshbooks/FreshbooksTest.php b/tests/Feature/Import/Freshbooks/FreshbooksTest.php index 8b8e2e7b4971..0729dee7d634 100644 --- a/tests/Feature/Import/Freshbooks/FreshbooksTest.php +++ b/tests/Feature/Import/Freshbooks/FreshbooksTest.php @@ -24,8 +24,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Import\Providers\Freshbooks + * + * App\Import\Providers\Freshbooks */ class FreshbooksTest extends TestCase { diff --git a/tests/Feature/Import/ImportCompanyTest.php b/tests/Feature/Import/ImportCompanyTest.php index 76c5432d0e22..1d21a297c3eb 100644 --- a/tests/Feature/Import/ImportCompanyTest.php +++ b/tests/Feature/Import/ImportCompanyTest.php @@ -53,7 +53,7 @@ use Illuminate\Support\Facades\Artisan; use Tests\TestCase; /** - * @test + * */ class ImportCompanyTest extends TestCase { diff --git a/tests/Feature/Import/Invoice2Go/Invoice2GoTest.php b/tests/Feature/Import/Invoice2Go/Invoice2GoTest.php index f1f442153422..5dbd0a64a5cc 100644 --- a/tests/Feature/Import/Invoice2Go/Invoice2GoTest.php +++ b/tests/Feature/Import/Invoice2Go/Invoice2GoTest.php @@ -24,8 +24,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Import\Providers\Invoice2Go + * + * App\Import\Providers\Invoice2Go */ class Invoice2GoTest extends TestCase { diff --git a/tests/Feature/Import/Invoicely/InvoicelyTest.php b/tests/Feature/Import/Invoicely/InvoicelyTest.php index f066a538c0e6..b00d518ff9a1 100644 --- a/tests/Feature/Import/Invoicely/InvoicelyTest.php +++ b/tests/Feature/Import/Invoicely/InvoicelyTest.php @@ -24,8 +24,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Import\Providers\Invoicely + * + * App\Import\Providers\Invoicely */ class InvoicelyTest extends TestCase { diff --git a/tests/Feature/Import/Wave/WaveTest.php b/tests/Feature/Import/Wave/WaveTest.php index 3a194dd0b7d8..db2403327979 100644 --- a/tests/Feature/Import/Wave/WaveTest.php +++ b/tests/Feature/Import/Wave/WaveTest.php @@ -26,8 +26,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Import\Providers\Wave + * + * App\Import\Providers\Wave */ class WaveTest extends TestCase { diff --git a/tests/Feature/Import/Zoho/ZohoTest.php b/tests/Feature/Import/Zoho/ZohoTest.php index 0ab065f392fd..552ea83664d4 100644 --- a/tests/Feature/Import/Zoho/ZohoTest.php +++ b/tests/Feature/Import/Zoho/ZohoTest.php @@ -25,8 +25,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Import\Providers\Zoho + * + * App\Import\Providers\Zoho */ class ZohoTest extends TestCase { diff --git a/tests/Feature/Inventory/InventoryManagementTest.php b/tests/Feature/Inventory/InventoryManagementTest.php index 1f67e25bc33f..3c5dc52ca3c8 100644 --- a/tests/Feature/Inventory/InventoryManagementTest.php +++ b/tests/Feature/Inventory/InventoryManagementTest.php @@ -21,7 +21,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class InventoryManagementTest extends TestCase { diff --git a/tests/Feature/InvitationTest.php b/tests/Feature/InvitationTest.php index bccb8636657b..384f9ceb88e2 100644 --- a/tests/Feature/InvitationTest.php +++ b/tests/Feature/InvitationTest.php @@ -26,8 +26,8 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; /** - * @test - * @covers App\Models\InvoiceInvitation + * + * App\Models\InvoiceInvitation */ class InvitationTest extends TestCase { diff --git a/tests/Feature/InvoiceAmountPaymentTest.php b/tests/Feature/InvoiceAmountPaymentTest.php index 8acd42f2b975..ca9209472db5 100644 --- a/tests/Feature/InvoiceAmountPaymentTest.php +++ b/tests/Feature/InvoiceAmountPaymentTest.php @@ -20,7 +20,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class InvoiceAmountPaymentTest extends TestCase { diff --git a/tests/Feature/InvoiceEmailTest.php b/tests/Feature/InvoiceEmailTest.php index 6e1f3f8ff116..9c1dbd3550e4 100644 --- a/tests/Feature/InvoiceEmailTest.php +++ b/tests/Feature/InvoiceEmailTest.php @@ -23,8 +23,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Jobs\Invoice\EmailInvoice + * + * App\Jobs\Invoice\EmailInvoice */ class InvoiceEmailTest extends TestCase { diff --git a/tests/Feature/InvoiceLinkTasksTest.php b/tests/Feature/InvoiceLinkTasksTest.php index 325ada761c5e..06e12ad0c082 100644 --- a/tests/Feature/InvoiceLinkTasksTest.php +++ b/tests/Feature/InvoiceLinkTasksTest.php @@ -19,7 +19,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class InvoiceLinkTasksTest extends TestCase { diff --git a/tests/Feature/InvoiceTest.php b/tests/Feature/InvoiceTest.php index 9e3d9e970ac5..1429c39c1598 100644 --- a/tests/Feature/InvoiceTest.php +++ b/tests/Feature/InvoiceTest.php @@ -28,8 +28,8 @@ use Illuminate\Support\Facades\Session; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Http\Controllers\InvoiceController + * + * App\Http\Controllers\InvoiceController */ class InvoiceTest extends TestCase { diff --git a/tests/Feature/LiveDesignTest.php b/tests/Feature/LiveDesignTest.php index 3e6d24bb75c2..62f5c1bb5961 100644 --- a/tests/Feature/LiveDesignTest.php +++ b/tests/Feature/LiveDesignTest.php @@ -20,8 +20,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\PreviewController + * + * App\Http\Controllers\PreviewController */ class LiveDesignTest extends TestCase { diff --git a/tests/Feature/LoadTest.php b/tests/Feature/LoadTest.php index a1dcdae8aab2..450c73aae99c 100644 --- a/tests/Feature/LoadTest.php +++ b/tests/Feature/LoadTest.php @@ -37,7 +37,7 @@ use Illuminate\Support\Str; use Tests\TestCase; /** - * @test + * */ class LoadTest extends TestCase { diff --git a/tests/Feature/LoginTest.php b/tests/Feature/LoginTest.php index b328c02b49f0..14a163384947 100644 --- a/tests/Feature/LoginTest.php +++ b/tests/Feature/LoginTest.php @@ -22,8 +22,8 @@ use Illuminate\Validation\ValidationException; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\Auth\LoginController + * + * App\Http\Controllers\Auth\LoginController */ class LoginTest extends TestCase { diff --git a/tests/Feature/MaxAmountTest.php b/tests/Feature/MaxAmountTest.php index badc55e26a4b..af03637cbfd0 100644 --- a/tests/Feature/MaxAmountTest.php +++ b/tests/Feature/MaxAmountTest.php @@ -24,8 +24,8 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Http\Controllers\ActivityController + * + * App\Http\Controllers\ActivityController */ class MaxAmountTest extends TestCase { diff --git a/tests/Feature/MigrationTest.php b/tests/Feature/MigrationTest.php index 17c897de80f0..62c83d120d48 100644 --- a/tests/Feature/MigrationTest.php +++ b/tests/Feature/MigrationTest.php @@ -21,8 +21,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\MigrationController + * + * App\Http\Controllers\MigrationController */ class MigrationTest extends TestCase { diff --git a/tests/Feature/MultiPaymentDeleteTest.php b/tests/Feature/MultiPaymentDeleteTest.php index 0a8d28f70330..e2949e5f5451 100644 --- a/tests/Feature/MultiPaymentDeleteTest.php +++ b/tests/Feature/MultiPaymentDeleteTest.php @@ -27,7 +27,7 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; use Tests\TestCase; /** - * @test + * */ class MultiPaymentDeleteTest extends TestCase { diff --git a/tests/Feature/Ninja/PlanTest.php b/tests/Feature/Ninja/PlanTest.php index 9f96440d0375..5b36d9beba1d 100644 --- a/tests/Feature/Ninja/PlanTest.php +++ b/tests/Feature/Ninja/PlanTest.php @@ -24,7 +24,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class PlanTest extends TestCase { diff --git a/tests/Feature/Notify/NotificationTest.php b/tests/Feature/Notify/NotificationTest.php index a868ddcddb96..69d937a9cea2 100644 --- a/tests/Feature/Notify/NotificationTest.php +++ b/tests/Feature/Notify/NotificationTest.php @@ -25,8 +25,8 @@ use App\Utils\Traits\Notifications\UserNotifies; use Illuminate\Routing\Middleware\ThrottleRequests; /** - * @test - * @covers App\Utils\Traits\Notifications\UserNotifies + * + * App\Utils\Traits\Notifications\UserNotifies */ class NotificationTest extends TestCase { diff --git a/tests/Feature/PaymentLink/PaymentLinkTest.php b/tests/Feature/PaymentLink/PaymentLinkTest.php index f9e96ffa1eb9..76b5e4f20f6e 100644 --- a/tests/Feature/PaymentLink/PaymentLinkTest.php +++ b/tests/Feature/PaymentLink/PaymentLinkTest.php @@ -22,7 +22,7 @@ use App\Factory\InvoiceItemFactory; use App\Helpers\Subscription\SubscriptionCalculator; /** - * @test + * */ class PaymentLinkTest extends TestCase { diff --git a/tests/Feature/PaymentTermsApiTest.php b/tests/Feature/PaymentTermsApiTest.php index 017974d04c11..9c7518246901 100644 --- a/tests/Feature/PaymentTermsApiTest.php +++ b/tests/Feature/PaymentTermsApiTest.php @@ -22,8 +22,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\PaymentTermController + * + * App\Http\Controllers\PaymentTermController */ class PaymentTermsApiTest extends TestCase { diff --git a/tests/Feature/PaymentTest.php b/tests/Feature/PaymentTest.php index 89aff184f10e..fa028184bd07 100644 --- a/tests/Feature/PaymentTest.php +++ b/tests/Feature/PaymentTest.php @@ -33,8 +33,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\PaymentController + * + * App\Http\Controllers\PaymentController */ class PaymentTest extends TestCase { diff --git a/tests/Feature/PaymentV2Test.php b/tests/Feature/PaymentV2Test.php index 87a3b5f70dd7..aafc0d4233fc 100644 --- a/tests/Feature/PaymentV2Test.php +++ b/tests/Feature/PaymentV2Test.php @@ -27,8 +27,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\PaymentController + * + * App\Http\Controllers\PaymentController */ class PaymentV2Test extends TestCase { diff --git a/tests/Feature/Payments/AutoUnappliedPaymentTest.php b/tests/Feature/Payments/AutoUnappliedPaymentTest.php index 18784b90b624..ee384e53b0a1 100644 --- a/tests/Feature/Payments/AutoUnappliedPaymentTest.php +++ b/tests/Feature/Payments/AutoUnappliedPaymentTest.php @@ -28,7 +28,7 @@ use Tests\MockUnitData; use Tests\TestCase; /** - * @test + * */ class AutoUnappliedPaymentTest extends TestCase { diff --git a/tests/Feature/Payments/CreditPaymentTest.php b/tests/Feature/Payments/CreditPaymentTest.php index 26aed0eea083..c548b40f2592 100644 --- a/tests/Feature/Payments/CreditPaymentTest.php +++ b/tests/Feature/Payments/CreditPaymentTest.php @@ -27,7 +27,7 @@ use Tests\MockUnitData; use Tests\TestCase; /** - * @test + * */ class CreditPaymentTest extends TestCase { diff --git a/tests/Feature/Payments/DeletePaymentTest.php b/tests/Feature/Payments/DeletePaymentTest.php index 4d1cbac865e1..3e5015eb6ce2 100644 --- a/tests/Feature/Payments/DeletePaymentTest.php +++ b/tests/Feature/Payments/DeletePaymentTest.php @@ -21,7 +21,7 @@ use Tests\MockUnitData; use Tests\TestCase; /** - * @test + * */ class DeletePaymentTest extends TestCase { diff --git a/tests/Feature/Payments/StorePaymentValidationTest.php b/tests/Feature/Payments/StorePaymentValidationTest.php index b82cf7dba6e1..64188bbdadb1 100644 --- a/tests/Feature/Payments/StorePaymentValidationTest.php +++ b/tests/Feature/Payments/StorePaymentValidationTest.php @@ -21,7 +21,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class StorePaymentValidationTest extends TestCase { diff --git a/tests/Feature/Payments/UnappliedPaymentDeleteTest.php b/tests/Feature/Payments/UnappliedPaymentDeleteTest.php index 687ea37b61ec..5cc5b561a0fb 100644 --- a/tests/Feature/Payments/UnappliedPaymentDeleteTest.php +++ b/tests/Feature/Payments/UnappliedPaymentDeleteTest.php @@ -23,7 +23,7 @@ use Tests\MockUnitData; use Tests\TestCase; /** - * @test + * */ class UnappliedPaymentDeleteTest extends TestCase { diff --git a/tests/Feature/Payments/UnappliedPaymentRefundTest.php b/tests/Feature/Payments/UnappliedPaymentRefundTest.php index 0ea04e34c199..9ce55b28bb3c 100644 --- a/tests/Feature/Payments/UnappliedPaymentRefundTest.php +++ b/tests/Feature/Payments/UnappliedPaymentRefundTest.php @@ -20,7 +20,7 @@ use Tests\MockUnitData; use Tests\TestCase; /** - * @test + * */ class UnappliedPaymentRefundTest extends TestCase { diff --git a/tests/Feature/PingTest.php b/tests/Feature/PingTest.php index 26ac9b2a11ae..f4e03c6573a3 100644 --- a/tests/Feature/PingTest.php +++ b/tests/Feature/PingTest.php @@ -17,8 +17,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\PingController + * + * App\Http\Controllers\PingController */ class PingTest extends TestCase { diff --git a/tests/Feature/PreviewTest.php b/tests/Feature/PreviewTest.php index 0710a7d3599a..183b721bae32 100644 --- a/tests/Feature/PreviewTest.php +++ b/tests/Feature/PreviewTest.php @@ -17,8 +17,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\PreviewController + * + * App\Http\Controllers\PreviewController */ class PreviewTest extends TestCase { diff --git a/tests/Feature/ProductTest.php b/tests/Feature/ProductTest.php index d39634b2f118..b394870de75b 100644 --- a/tests/Feature/ProductTest.php +++ b/tests/Feature/ProductTest.php @@ -23,8 +23,8 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Http\Controllers\ProductController + * + * App\Http\Controllers\ProductController */ class ProductTest extends TestCase { diff --git a/tests/Feature/ProjectApiTest.php b/tests/Feature/ProjectApiTest.php index 48df7e863297..87fecdc9ce8b 100644 --- a/tests/Feature/ProjectApiTest.php +++ b/tests/Feature/ProjectApiTest.php @@ -23,8 +23,8 @@ use Illuminate\Validation\ValidationException; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Http\Controllers\ProjectController + * + * App\Http\Controllers\ProjectController */ class ProjectApiTest extends TestCase { diff --git a/tests/Feature/QuoteReminderTest.php b/tests/Feature/QuoteReminderTest.php index 8962a45a1d2e..d8db0d72ad9d 100644 --- a/tests/Feature/QuoteReminderTest.php +++ b/tests/Feature/QuoteReminderTest.php @@ -31,8 +31,8 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Jobs\Util\QuoteReminderJob + * + * App\Jobs\Util\QuoteReminderJob */ class QuoteReminderTest extends TestCase { diff --git a/tests/Feature/QuoteTest.php b/tests/Feature/QuoteTest.php index ed7b2ed87123..9a2d4e5b02bc 100644 --- a/tests/Feature/QuoteTest.php +++ b/tests/Feature/QuoteTest.php @@ -26,8 +26,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\QuoteController + * + * App\Http\Controllers\QuoteController */ class QuoteTest extends TestCase { diff --git a/tests/Feature/RecurringExpenseApiTest.php b/tests/Feature/RecurringExpenseApiTest.php index 2b0e8f1f9a6e..fc874696bb59 100644 --- a/tests/Feature/RecurringExpenseApiTest.php +++ b/tests/Feature/RecurringExpenseApiTest.php @@ -23,8 +23,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\RecurringExpenseController + * + * App\Http\Controllers\RecurringExpenseController */ class RecurringExpenseApiTest extends TestCase { diff --git a/tests/Feature/RecurringInvoiceTest.php b/tests/Feature/RecurringInvoiceTest.php index 8bdb96067dd7..184a2206a4be 100644 --- a/tests/Feature/RecurringInvoiceTest.php +++ b/tests/Feature/RecurringInvoiceTest.php @@ -33,8 +33,8 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Http\Controllers\RecurringInvoiceController + * + * App\Http\Controllers\RecurringInvoiceController */ class RecurringInvoiceTest extends TestCase { diff --git a/tests/Feature/RecurringInvoicesCronTest.php b/tests/Feature/RecurringInvoicesCronTest.php index 6a11f484abb0..ad18ae0316ea 100644 --- a/tests/Feature/RecurringInvoicesCronTest.php +++ b/tests/Feature/RecurringInvoicesCronTest.php @@ -18,8 +18,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Jobs\Cron\RecurringInvoicesCron + * + * App\Jobs\Cron\RecurringInvoicesCron */ class RecurringInvoicesCronTest extends TestCase { diff --git a/tests/Feature/RecurringQuoteTest.php b/tests/Feature/RecurringQuoteTest.php index 913ec9efff8a..74a227df6d30 100644 --- a/tests/Feature/RecurringQuoteTest.php +++ b/tests/Feature/RecurringQuoteTest.php @@ -21,8 +21,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\RecurringQuoteController + * + * App\Http\Controllers\RecurringQuoteController */ class RecurringQuoteTest extends TestCase { diff --git a/tests/Feature/RecurringQuotesTest.php b/tests/Feature/RecurringQuotesTest.php index 655bad239bc8..fc564004afab 100644 --- a/tests/Feature/RecurringQuotesTest.php +++ b/tests/Feature/RecurringQuotesTest.php @@ -25,8 +25,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\RecurringQuoteController + * + * App\Http\Controllers\RecurringQuoteController */ class RecurringQuotesTest extends TestCase { diff --git a/tests/Feature/RefundTest.php b/tests/Feature/RefundTest.php index 1637024a2345..0bbd46f6a9dc 100644 --- a/tests/Feature/RefundTest.php +++ b/tests/Feature/RefundTest.php @@ -31,8 +31,8 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Utils\Traits\Payment\Refundable + * + * App\Utils\Traits\Payment\Refundable */ class RefundTest extends TestCase { diff --git a/tests/Feature/ReminderTest.php b/tests/Feature/ReminderTest.php index 884714621f5c..65e7eabf35f6 100644 --- a/tests/Feature/ReminderTest.php +++ b/tests/Feature/ReminderTest.php @@ -31,8 +31,8 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Jobs\Util\ReminderJob + * + * App\Jobs\Util\ReminderJob */ class ReminderTest extends TestCase { diff --git a/tests/Feature/ReverseInvoiceTest.php b/tests/Feature/ReverseInvoiceTest.php index e3404029d278..520e175d40fa 100644 --- a/tests/Feature/ReverseInvoiceTest.php +++ b/tests/Feature/ReverseInvoiceTest.php @@ -27,8 +27,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Services\Invoice\HandleReversal + * + * App\Services\Invoice\HandleReversal */ class ReverseInvoiceTest extends TestCase { diff --git a/tests/Feature/Scheduler/ScheduleEntityTest.php b/tests/Feature/Scheduler/ScheduleEntityTest.php index 9aa319fb7e76..bcf5c9b5b468 100644 --- a/tests/Feature/Scheduler/ScheduleEntityTest.php +++ b/tests/Feature/Scheduler/ScheduleEntityTest.php @@ -20,8 +20,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Services\Scheduler\EmailRecord + * + * App\Services\Scheduler\EmailRecord */ class ScheduleEntityTest extends TestCase { diff --git a/tests/Feature/Scheduler/SchedulerTest.php b/tests/Feature/Scheduler/SchedulerTest.php index 4ab67cb80149..ba9965b23395 100644 --- a/tests/Feature/Scheduler/SchedulerTest.php +++ b/tests/Feature/Scheduler/SchedulerTest.php @@ -29,8 +29,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Services\Scheduler\SchedulerService + * + * App\Services\Scheduler\SchedulerService */ class SchedulerTest extends TestCase { diff --git a/tests/Feature/Search/SearchApiTest.php b/tests/Feature/Search/SearchApiTest.php index ac60a6d1a5fe..93ecfa1e754b 100644 --- a/tests/Feature/Search/SearchApiTest.php +++ b/tests/Feature/Search/SearchApiTest.php @@ -17,8 +17,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\ActivityController + * + * App\Http\Controllers\ActivityController */ class SearchApiTest extends TestCase { diff --git a/tests/Feature/Shop/ShopInvoiceTest.php b/tests/Feature/Shop/ShopInvoiceTest.php index 33a24a78dfe0..ae756999d26d 100644 --- a/tests/Feature/Shop/ShopInvoiceTest.php +++ b/tests/Feature/Shop/ShopInvoiceTest.php @@ -20,8 +20,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\Shop\InvoiceController + * + * App\Http\Controllers\Shop\InvoiceController */ class ShopInvoiceTest extends TestCase { diff --git a/tests/Feature/SubscriptionApiTest.php b/tests/Feature/SubscriptionApiTest.php index 1f7cdd6a4982..abaf676d7bd6 100644 --- a/tests/Feature/SubscriptionApiTest.php +++ b/tests/Feature/SubscriptionApiTest.php @@ -31,8 +31,8 @@ use Illuminate\Validation\ValidationException; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Http\Controllers\SubscriptionController + * + * App\Http\Controllers\SubscriptionController */ class SubscriptionApiTest extends TestCase { diff --git a/tests/Feature/SystemLogApiTest.php b/tests/Feature/SystemLogApiTest.php index a4748bce16f3..873ceea19657 100644 --- a/tests/Feature/SystemLogApiTest.php +++ b/tests/Feature/SystemLogApiTest.php @@ -18,8 +18,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\SystemLogController + * + * App\Http\Controllers\SystemLogController */ class SystemLogApiTest extends TestCase { diff --git a/tests/Feature/TaskApiTest.php b/tests/Feature/TaskApiTest.php index 97085fcbb8bb..930b8304ee69 100644 --- a/tests/Feature/TaskApiTest.php +++ b/tests/Feature/TaskApiTest.php @@ -24,8 +24,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\TaskController + * + * App\Http\Controllers\TaskController */ class TaskApiTest extends TestCase { diff --git a/tests/Feature/TaskStatusApiTest.php b/tests/Feature/TaskStatusApiTest.php index 8bc204ae2138..c317ccc4d232 100644 --- a/tests/Feature/TaskStatusApiTest.php +++ b/tests/Feature/TaskStatusApiTest.php @@ -20,8 +20,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\TaskStatusController + * + * App\Http\Controllers\TaskStatusController */ class TaskStatusApiTest extends TestCase { diff --git a/tests/Feature/TaxRateApiTest.php b/tests/Feature/TaxRateApiTest.php index c52b801ef223..ee9b494ad91e 100644 --- a/tests/Feature/TaxRateApiTest.php +++ b/tests/Feature/TaxRateApiTest.php @@ -21,8 +21,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\TaxRateController + * + * App\Http\Controllers\TaxRateController */ class TaxRateApiTest extends TestCase { diff --git a/tests/Feature/Template/TemplateTest.php b/tests/Feature/Template/TemplateTest.php index c700d5a83106..3d8ca20cd613 100644 --- a/tests/Feature/Template/TemplateTest.php +++ b/tests/Feature/Template/TemplateTest.php @@ -33,8 +33,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers + * + * */ class TemplateTest extends TestCase { diff --git a/tests/Feature/UpdateExchangeRatesTest.php b/tests/Feature/UpdateExchangeRatesTest.php index 51afacc5ef94..deed4825df4f 100644 --- a/tests/Feature/UpdateExchangeRatesTest.php +++ b/tests/Feature/UpdateExchangeRatesTest.php @@ -20,8 +20,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Jobs\Util\UpdateExchangeRates + * + * App\Jobs\Util\UpdateExchangeRates */ class UpdateExchangeRatesTest extends TestCase { diff --git a/tests/Feature/UpdatePaymentTest.php b/tests/Feature/UpdatePaymentTest.php index 66af4067f756..a1f575452ae6 100644 --- a/tests/Feature/UpdatePaymentTest.php +++ b/tests/Feature/UpdatePaymentTest.php @@ -24,8 +24,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\PaymentController + * + * App\Http\Controllers\PaymentController */ class UpdatePaymentTest extends TestCase { diff --git a/tests/Feature/UserTest.php b/tests/Feature/UserTest.php index f1a9e799f756..441fea7cefa5 100644 --- a/tests/Feature/UserTest.php +++ b/tests/Feature/UserTest.php @@ -28,8 +28,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\UserController + * + * App\Http\Controllers\UserController */ class UserTest extends TestCase { diff --git a/tests/Feature/VendorApiTest.php b/tests/Feature/VendorApiTest.php index cabdad09fabd..03e1fbc706f3 100644 --- a/tests/Feature/VendorApiTest.php +++ b/tests/Feature/VendorApiTest.php @@ -23,8 +23,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\VendorController + * + * App\Http\Controllers\VendorController */ class VendorApiTest extends TestCase { diff --git a/tests/Feature/WebhookAPITest.php b/tests/Feature/WebhookAPITest.php index fc59c60b1c45..43028e6a0584 100644 --- a/tests/Feature/WebhookAPITest.php +++ b/tests/Feature/WebhookAPITest.php @@ -19,8 +19,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\WebhookController + * + * App\Http\Controllers\WebhookController */ class WebhookAPITest extends TestCase { diff --git a/tests/Integration/CheckCacheTest.php b/tests/Integration/CheckCacheTest.php index e13b4d7a62b6..b54cf342e48f 100644 --- a/tests/Integration/CheckCacheTest.php +++ b/tests/Integration/CheckCacheTest.php @@ -17,7 +17,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class CheckCacheTest extends TestCase { diff --git a/tests/Integration/CheckLockedInvoiceValidationTest.php b/tests/Integration/CheckLockedInvoiceValidationTest.php index 30c8c5c0b1f6..4e4a1e01ad5e 100644 --- a/tests/Integration/CheckLockedInvoiceValidationTest.php +++ b/tests/Integration/CheckLockedInvoiceValidationTest.php @@ -17,8 +17,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\ValidationRules\Invoice\LockedInvoiceRule + * + * App\Http\ValidationRules\Invoice\LockedInvoiceRule */ class CheckLockedInvoiceValidationTest extends TestCase { diff --git a/tests/Integration/CheckRemindersTest.php b/tests/Integration/CheckRemindersTest.php index d6422d71e3c4..aad69313cffa 100644 --- a/tests/Integration/CheckRemindersTest.php +++ b/tests/Integration/CheckRemindersTest.php @@ -18,7 +18,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class CheckRemindersTest extends TestCase { diff --git a/tests/Integration/CompanyLedgerTest.php b/tests/Integration/CompanyLedgerTest.php index 2e37078dca82..9009b6dfad7a 100644 --- a/tests/Integration/CompanyLedgerTest.php +++ b/tests/Integration/CompanyLedgerTest.php @@ -31,7 +31,7 @@ use Illuminate\Support\Facades\Hash; use Illuminate\Validation\ValidationException; use Illuminate\Foundation\Testing\DatabaseTransactions; -/** @test*/ +/** */ class CompanyLedgerTest extends TestCase { use DatabaseTransactions; diff --git a/tests/Integration/ContainerTest.php b/tests/Integration/ContainerTest.php index 610b2db5bf9f..abdc31c5953c 100644 --- a/tests/Integration/ContainerTest.php +++ b/tests/Integration/ContainerTest.php @@ -16,7 +16,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class ContainerTest extends TestCase { diff --git a/tests/Integration/DTO/AccountSummaryTest.php b/tests/Integration/DTO/AccountSummaryTest.php index b703b1ca3d3e..da2903990791 100644 --- a/tests/Integration/DTO/AccountSummaryTest.php +++ b/tests/Integration/DTO/AccountSummaryTest.php @@ -14,7 +14,7 @@ namespace Tests\Integration\DTO; use Tests\TestCase; /** - * @test + * */ class AccountSummaryTest extends TestCase { diff --git a/tests/Integration/DownloadHistoricalInvoiceTest.php b/tests/Integration/DownloadHistoricalInvoiceTest.php index a56a7cd56acc..85730cb7aeeb 100644 --- a/tests/Integration/DownloadHistoricalInvoiceTest.php +++ b/tests/Integration/DownloadHistoricalInvoiceTest.php @@ -19,8 +19,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\ActivityController + * + * App\Http\Controllers\ActivityController */ class DownloadHistoricalInvoiceTest extends TestCase { diff --git a/tests/Integration/Einvoice/Fact1Test.php b/tests/Integration/Einvoice/Fact1Test.php index 35b5da22d334..3c12d43f0104 100644 --- a/tests/Integration/Einvoice/Fact1Test.php +++ b/tests/Integration/Einvoice/Fact1Test.php @@ -65,7 +65,7 @@ use InvoiceNinja\EInvoice\Models\Peppol\PartyIdentificationType\PartyIdentificat use InvoiceNinja\EInvoice\Models\Peppol\TaxCategoryType\TaxCategory; /** - * @test + * */ class Fact1Test extends TestCase { diff --git a/tests/Integration/Einvoice/Storecove/StorecoveTest.php b/tests/Integration/Einvoice/Storecove/StorecoveTest.php index 2983da18de29..2607ba820fc7 100644 --- a/tests/Integration/Einvoice/Storecove/StorecoveTest.php +++ b/tests/Integration/Einvoice/Storecove/StorecoveTest.php @@ -1155,10 +1155,10 @@ class StorecoveTest extends TestCase $xml = $p->toXml(); nlog($xml); - $identifiers = $p->getStorecoveMeta(); + // $identifiers = $p->getStorecoveMeta(); - $sc = new \App\Services\EDocument\Gateway\Storecove\Storecove(); - $sc->sendDocument($xml, $this->routing_id, $identifiers); + // $sc = new \App\Services\EDocument\Gateway\Storecove\Storecove(); + // $sc->sendDocument($xml, $this->routing_id, $identifiers); } diff --git a/tests/Integration/EventTest.php b/tests/Integration/EventTest.php index ff8ca0c971eb..762c311ddf22 100644 --- a/tests/Integration/EventTest.php +++ b/tests/Integration/EventTest.php @@ -86,7 +86,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class EventTest extends TestCase { diff --git a/tests/Integration/FileUploadValidationTest.php b/tests/Integration/FileUploadValidationTest.php index c7401b2ff6d5..04fc92ba7a46 100644 --- a/tests/Integration/FileUploadValidationTest.php +++ b/tests/Integration/FileUploadValidationTest.php @@ -19,7 +19,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class FileUploadValidationTest extends TestCase { diff --git a/tests/Integration/HtmlGenerationTest.php b/tests/Integration/HtmlGenerationTest.php index d35c6faae26a..602347aae686 100644 --- a/tests/Integration/HtmlGenerationTest.php +++ b/tests/Integration/HtmlGenerationTest.php @@ -26,7 +26,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class HtmlGenerationTest extends TestCase { diff --git a/tests/Integration/InvoiceUploadTest.php b/tests/Integration/InvoiceUploadTest.php index 1cfdfabe9aff..b94afa76d1f3 100644 --- a/tests/Integration/InvoiceUploadTest.php +++ b/tests/Integration/InvoiceUploadTest.php @@ -16,8 +16,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Services\Invoice\GetInvoicePdf + * + * App\Services\Invoice\GetInvoicePdf */ class InvoiceUploadTest extends TestCase { diff --git a/tests/Integration/MarkInvoicePaidTest.php b/tests/Integration/MarkInvoicePaidTest.php index 024d5860809f..22e2626bb7e2 100644 --- a/tests/Integration/MarkInvoicePaidTest.php +++ b/tests/Integration/MarkInvoicePaidTest.php @@ -17,7 +17,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class MarkInvoicePaidTest extends TestCase { diff --git a/tests/Integration/MultiDBUserTest.php b/tests/Integration/MultiDBUserTest.php index 3950cc6854c6..14c07204e6a6 100644 --- a/tests/Integration/MultiDBUserTest.php +++ b/tests/Integration/MultiDBUserTest.php @@ -24,8 +24,8 @@ use Illuminate\Validation\ValidationException; use Tests\TestCase; /** - * @test - * @covers App\Libraries\MultiDB + * + * App\Libraries\MultiDB * * Proves that we can reliably switch database connections at runtime */ diff --git a/tests/Integration/PaymentDrivers/AuthorizeTest.php b/tests/Integration/PaymentDrivers/AuthorizeTest.php index 4688da4b7f79..fdd129ea58a5 100644 --- a/tests/Integration/PaymentDrivers/AuthorizeTest.php +++ b/tests/Integration/PaymentDrivers/AuthorizeTest.php @@ -34,7 +34,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class AuthorizeTest extends TestCase { diff --git a/tests/Integration/PostmarkWebhookTest.php b/tests/Integration/PostmarkWebhookTest.php index 0a0d7d28aac4..a9d278a79a29 100644 --- a/tests/Integration/PostmarkWebhookTest.php +++ b/tests/Integration/PostmarkWebhookTest.php @@ -17,7 +17,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class PostmarkWebhookTest extends TestCase { diff --git a/tests/Integration/SendFailedEmailsTest.php b/tests/Integration/SendFailedEmailsTest.php index 45161a52ec85..52f8fee9c9d1 100644 --- a/tests/Integration/SendFailedEmailsTest.php +++ b/tests/Integration/SendFailedEmailsTest.php @@ -18,8 +18,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Jobs\Util\SendFailedEmails + * + * App\Jobs\Util\SendFailedEmails */ class SendFailedEmailsTest extends TestCase { diff --git a/tests/Integration/SystemHealthTest.php b/tests/Integration/SystemHealthTest.php index 801f6f521bda..e321e54910de 100644 --- a/tests/Integration/SystemHealthTest.php +++ b/tests/Integration/SystemHealthTest.php @@ -16,7 +16,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class SystemHealthTest extends TestCase { diff --git a/tests/Integration/UniqueEmailTest.php b/tests/Integration/UniqueEmailTest.php index 6707b9b5cc68..d7ca2e7da3fd 100644 --- a/tests/Integration/UniqueEmailTest.php +++ b/tests/Integration/UniqueEmailTest.php @@ -21,8 +21,8 @@ use Illuminate\Support\Facades\Hash; use Tests\TestCase; /** - * @test - * @covers App\Http\ValidationRules\NewUniqueUserRule + * + * App\Http\ValidationRules\NewUniqueUserRule */ class UniqueEmailTest extends TestCase { diff --git a/tests/Integration/UpdateCompanyLedgerTest.php b/tests/Integration/UpdateCompanyLedgerTest.php index ec2cc6d733cc..6247d461f61e 100644 --- a/tests/Integration/UpdateCompanyLedgerTest.php +++ b/tests/Integration/UpdateCompanyLedgerTest.php @@ -16,7 +16,7 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; use Tests\MockAccountData; use Tests\TestCase; -/** @test*/ +/** */ class UpdateCompanyLedgerTest extends TestCase { use MockAccountData; @@ -30,7 +30,7 @@ class UpdateCompanyLedgerTest extends TestCase } /** - * @test + * */ public function testPaymentIsPresentInLedger() { @@ -46,7 +46,7 @@ class UpdateCompanyLedgerTest extends TestCase } /** - * @test + * */ public function testInvoiceIsPresentInLedger() { diff --git a/tests/Integration/UpdateCompanyUserTest.php b/tests/Integration/UpdateCompanyUserTest.php index 121f7829137e..831274156fae 100644 --- a/tests/Integration/UpdateCompanyUserTest.php +++ b/tests/Integration/UpdateCompanyUserTest.php @@ -19,8 +19,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\CompanyUserController + * + * App\Http\Controllers\CompanyUserController */ class UpdateCompanyUserTest extends TestCase { diff --git a/tests/Integration/UploadFileTest.php b/tests/Integration/UploadFileTest.php index 59654f40c677..938f1cf8e8cc 100644 --- a/tests/Integration/UploadFileTest.php +++ b/tests/Integration/UploadFileTest.php @@ -19,8 +19,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Jobs\Util\UploadFile + * + * App\Jobs\Util\UploadFile */ class UploadFileTest extends TestCase { diff --git a/tests/Integration/UploadLogoTest.php b/tests/Integration/UploadLogoTest.php index 99ced9c3bdce..68ca139efccd 100644 --- a/tests/Integration/UploadLogoTest.php +++ b/tests/Integration/UploadLogoTest.php @@ -20,7 +20,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class UploadLogoTest extends TestCase { diff --git a/tests/Integration/Validation/AmountValidationRuleTest.php b/tests/Integration/Validation/AmountValidationRuleTest.php index 9a03b812fa55..6f0f3426427b 100644 --- a/tests/Integration/Validation/AmountValidationRuleTest.php +++ b/tests/Integration/Validation/AmountValidationRuleTest.php @@ -15,7 +15,7 @@ use App\Http\ValidationRules\ValidAmount; use Tests\TestCase; /** - * @test + * */ class AmountValidationRuleTest extends TestCase { diff --git a/tests/Integration/Validation/ValidCompanyQuantityTest.php b/tests/Integration/Validation/ValidCompanyQuantityTest.php index dec9a978bdec..873dc9a09514 100644 --- a/tests/Integration/Validation/ValidCompanyQuantityTest.php +++ b/tests/Integration/Validation/ValidCompanyQuantityTest.php @@ -18,7 +18,7 @@ use Illuminate\Support\Facades\Validator; use App\Http\ValidationRules\Company\ValidCompanyQuantity; /** - * @test + * */ class ValidCompanyQuantityTest extends TestCase { @@ -32,7 +32,7 @@ class ValidCompanyQuantityTest extends TestCase } - /** @test */ + /** */ public function testCompanyQuantityValidation() { auth()->login($this->user, true); @@ -46,7 +46,7 @@ class ValidCompanyQuantityTest extends TestCase } - /** @test */ + /** */ public function testCompanyQuantityValidationFails() { diff --git a/tests/Integration/Validation/ValidSubdomainTest.php b/tests/Integration/Validation/ValidSubdomainTest.php index 0a801f014d19..2889e34b01c0 100644 --- a/tests/Integration/Validation/ValidSubdomainTest.php +++ b/tests/Integration/Validation/ValidSubdomainTest.php @@ -19,7 +19,7 @@ use App\Http\ValidationRules\Company\ValidCompanyQuantity; use App\Http\ValidationRules\Company\ValidSubdomain; /** - * @test + * */ class ValidSubdomainTest extends TestCase { @@ -30,7 +30,7 @@ class ValidSubdomainTest extends TestCase parent::setUp(); } - /** @test */ + /** */ public function testCheckValidSubdomainName() { @@ -67,7 +67,7 @@ class ValidSubdomainTest extends TestCase } - /** @test */ + /** */ public function testCheckInValidSubdomainName() { diff --git a/tests/Pdf/PdfGenerationTest.php b/tests/Pdf/PdfGenerationTest.php index e653bd077b4a..77dc5e7b96f6 100644 --- a/tests/Pdf/PdfGenerationTest.php +++ b/tests/Pdf/PdfGenerationTest.php @@ -16,8 +16,8 @@ use Beganovich\Snappdf\Snappdf; use Tests\TestCase; /** - * @test - * @covers App\DataMapper\BaseSettings + * + * App\DataMapper\BaseSettings */ class PdfGenerationTest extends TestCase { diff --git a/tests/Pdf/PdfServiceTest.php b/tests/Pdf/PdfServiceTest.php index 722dacd02710..2d0334479b12 100644 --- a/tests/Pdf/PdfServiceTest.php +++ b/tests/Pdf/PdfServiceTest.php @@ -18,8 +18,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Services\Pdf\PdfService + * + * App\Services\Pdf\PdfService */ class PdfServiceTest extends TestCase { diff --git a/tests/Pdf/PdfmockTest.php b/tests/Pdf/PdfmockTest.php index aacdcbb0d808..6ffa4e5406a9 100644 --- a/tests/Pdf/PdfmockTest.php +++ b/tests/Pdf/PdfmockTest.php @@ -26,8 +26,8 @@ use App\Services\Pdf\PdfService; use Tests\TestCase; /** - * @test - * @covers App\Services\Pdf\PdfService + * + * App\Services\Pdf\PdfService */ class PdfmockTest extends TestCase { diff --git a/tests/Unit/ArrayFiltersTest.php b/tests/Unit/ArrayFiltersTest.php index 7eef828d71fe..95b42a301529 100644 --- a/tests/Unit/ArrayFiltersTest.php +++ b/tests/Unit/ArrayFiltersTest.php @@ -17,7 +17,7 @@ use App\Models\User; use Tests\TestCase; /** - * @test + * */ class ArrayFiltersTest extends TestCase { diff --git a/tests/Unit/AutoBillInvoiceTest.php b/tests/Unit/AutoBillInvoiceTest.php index 31a02cb1c845..77ed0b65dea1 100644 --- a/tests/Unit/AutoBillInvoiceTest.php +++ b/tests/Unit/AutoBillInvoiceTest.php @@ -16,8 +16,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Services\Invoice\AutoBillInvoice + * + * App\Services\Invoice\AutoBillInvoice */ class AutoBillInvoiceTest extends TestCase { diff --git a/tests/Unit/Base64Test.php b/tests/Unit/Base64Test.php index 09bf603d0d07..5800acb70820 100644 --- a/tests/Unit/Base64Test.php +++ b/tests/Unit/Base64Test.php @@ -15,7 +15,7 @@ use App\Utils\Ninja; use Tests\TestCase; /** - * @test + * */ class Base64Test extends TestCase { diff --git a/tests/Unit/BaseSettingsTest.php b/tests/Unit/BaseSettingsTest.php index 77571075594f..bcacf275e17a 100644 --- a/tests/Unit/BaseSettingsTest.php +++ b/tests/Unit/BaseSettingsTest.php @@ -15,8 +15,8 @@ use App\DataMapper\ClientSettings; use Tests\TestCase; /** - * @test - * @covers App\DataMapper\BaseSettings + * + * App\DataMapper\BaseSettings */ class BaseSettingsTest extends TestCase { diff --git a/tests/Unit/CentConversionTest.php b/tests/Unit/CentConversionTest.php index 8817c393a633..6d0fabc19c5c 100644 --- a/tests/Unit/CentConversionTest.php +++ b/tests/Unit/CentConversionTest.php @@ -14,7 +14,7 @@ namespace Tests\Unit; use Tests\TestCase; /** - * @test + * */ class CentConversionTest extends TestCase { diff --git a/tests/Unit/Chart/ChartCurrencyTest.php b/tests/Unit/Chart/ChartCurrencyTest.php index 25aee6a60813..bc68c0a79a15 100644 --- a/tests/Unit/Chart/ChartCurrencyTest.php +++ b/tests/Unit/Chart/ChartCurrencyTest.php @@ -24,8 +24,8 @@ use App\Services\Chart\ChartService; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Services\Chart\ChartService + * + * App\Services\Chart\ChartService */ class ChartCurrencyTest extends TestCase { diff --git a/tests/Unit/CheckDataTest.php b/tests/Unit/CheckDataTest.php index 7cafacc17c2c..8e25ace823bf 100644 --- a/tests/Unit/CheckDataTest.php +++ b/tests/Unit/CheckDataTest.php @@ -26,7 +26,7 @@ use Illuminate\Routing\Middleware\ThrottleRequests; use Tests\TestCase; /** - * @test + * */ class CheckDataTest extends TestCase { diff --git a/tests/Unit/ClientSettingsTest.php b/tests/Unit/ClientSettingsTest.php index 11958a402cc6..7d2c2fad5f3c 100644 --- a/tests/Unit/ClientSettingsTest.php +++ b/tests/Unit/ClientSettingsTest.php @@ -17,7 +17,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class ClientSettingsTest extends TestCase { diff --git a/tests/Unit/CloneQuoteToInvoiceFactoryTest.php b/tests/Unit/CloneQuoteToInvoiceFactoryTest.php index 2e9d55b1d3b4..916ba930fec6 100644 --- a/tests/Unit/CloneQuoteToInvoiceFactoryTest.php +++ b/tests/Unit/CloneQuoteToInvoiceFactoryTest.php @@ -19,7 +19,7 @@ use App\Factory\CloneQuoteToInvoiceFactory; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test + * */ class CloneQuoteToInvoiceFactoryTest extends TestCase { diff --git a/tests/Unit/CollectionMergingTest.php b/tests/Unit/CollectionMergingTest.php index df2f4e2595bc..433a1feced57 100644 --- a/tests/Unit/CollectionMergingTest.php +++ b/tests/Unit/CollectionMergingTest.php @@ -16,7 +16,7 @@ use App\Factory\InvoiceItemFactory; use Tests\TestCase; /** - * @test + * */ class CollectionMergingTest extends TestCase { diff --git a/tests/Unit/CompanySettingsSaveableTest.php b/tests/Unit/CompanySettingsSaveableTest.php index 1d385ccd0690..56c547a4e181 100644 --- a/tests/Unit/CompanySettingsSaveableTest.php +++ b/tests/Unit/CompanySettingsSaveableTest.php @@ -15,8 +15,8 @@ use App\DataMapper\CompanySettings; use Tests\TestCase; /** - * @test - * @covers App\Http\Requests\Company\UpdateCompanyRequest + * + * App\Http\Requests\Company\UpdateCompanyRequest */ class CompanySettingsSaveableTest extends TestCase { diff --git a/tests/Unit/CompanySettingsTest.php b/tests/Unit/CompanySettingsTest.php index 8055bb9d7119..bc402a8a9681 100644 --- a/tests/Unit/CompanySettingsTest.php +++ b/tests/Unit/CompanySettingsTest.php @@ -15,8 +15,8 @@ use App\DataMapper\CompanySettings; use Tests\TestCase; /** - * @test - * @covers App\DataMapper\CompanySettings + * + * App\DataMapper\CompanySettings */ class CompanySettingsTest extends TestCase { diff --git a/tests/Unit/CompareCollectionTest.php b/tests/Unit/CompareCollectionTest.php index 160fae11b7ed..cb810ef624d9 100644 --- a/tests/Unit/CompareCollectionTest.php +++ b/tests/Unit/CompareCollectionTest.php @@ -15,8 +15,8 @@ use App\Utils\Traits\MakesHash; use Tests\TestCase; /** - * @test - * @covers App\Utils\Number + * + * App\Utils\Number */ class CompareCollectionTest extends TestCase { diff --git a/tests/Unit/CompareObjectTest.php b/tests/Unit/CompareObjectTest.php index 6a58d49486d2..028f4a864b3b 100644 --- a/tests/Unit/CompareObjectTest.php +++ b/tests/Unit/CompareObjectTest.php @@ -16,8 +16,8 @@ use App\DataMapper\CompanySettings; use Tests\TestCase; /** - * @test - * @covers App\DataMapper\ClientSettings + * + * App\DataMapper\ClientSettings */ class CompareObjectTest extends TestCase { diff --git a/tests/Unit/CreditBalanceTest.php b/tests/Unit/CreditBalanceTest.php index c60eeb1213cf..32513d1d84d7 100644 --- a/tests/Unit/CreditBalanceTest.php +++ b/tests/Unit/CreditBalanceTest.php @@ -17,7 +17,7 @@ use Tests\MockUnitData; use Tests\TestCase; /** - * @test + * */ class CreditBalanceTest extends TestCase { diff --git a/tests/Unit/CurrencyApiTest.php b/tests/Unit/CurrencyApiTest.php index 80882d2654c5..e1211c66cda4 100644 --- a/tests/Unit/CurrencyApiTest.php +++ b/tests/Unit/CurrencyApiTest.php @@ -17,8 +17,8 @@ use Illuminate\Support\Carbon; use Tests\TestCase; /** - * @test - * @covers App\Libraries\Currency\Conversion\CurrencyApi + * + * App\Libraries\Currency\Conversion\CurrencyApi */ class CurrencyApiTest extends TestCase { diff --git a/tests/Unit/DatesTest.php b/tests/Unit/DatesTest.php index 6e2b95be7467..11efc775dfc8 100644 --- a/tests/Unit/DatesTest.php +++ b/tests/Unit/DatesTest.php @@ -17,7 +17,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class DatesTest extends TestCase { diff --git a/tests/Unit/DomainCheckTest.php b/tests/Unit/DomainCheckTest.php index 11c88ebe29d6..299f3c35a79d 100644 --- a/tests/Unit/DomainCheckTest.php +++ b/tests/Unit/DomainCheckTest.php @@ -15,7 +15,7 @@ use App\DataProviders\Domains; use Tests\TestCase; /** - * @test + * */ class DomainCheckTest extends TestCase { diff --git a/tests/Unit/EInvoiceTest.php b/tests/Unit/EInvoiceTest.php index 42004703692c..b348a15a99c7 100644 --- a/tests/Unit/EInvoiceTest.php +++ b/tests/Unit/EInvoiceTest.php @@ -20,8 +20,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Jobs\Invoice\CreateXInvoice + * + * App\Jobs\Invoice\CreateXInvoice */ class EInvoiceTest extends TestCase { diff --git a/tests/Unit/EncryptionSettingsTest.php b/tests/Unit/EncryptionSettingsTest.php index 657fffcfc852..8a53ebaf94ff 100644 --- a/tests/Unit/EncryptionSettingsTest.php +++ b/tests/Unit/EncryptionSettingsTest.php @@ -14,7 +14,7 @@ namespace Tests\Unit; use Tests\TestCase; /** - * @test + * */ class EncryptionSettingsTest extends TestCase { diff --git a/tests/Unit/EntityTest.php b/tests/Unit/EntityTest.php index 2f9aef3a110f..c6b28fdb1c31 100644 --- a/tests/Unit/EntityTest.php +++ b/tests/Unit/EntityTest.php @@ -29,7 +29,7 @@ use App\Models\Vendor; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test + * */ class EntityTest extends TestCase { diff --git a/tests/Unit/EntityTranslationTest.php b/tests/Unit/EntityTranslationTest.php index a340a678c312..d123c1c197eb 100644 --- a/tests/Unit/EntityTranslationTest.php +++ b/tests/Unit/EntityTranslationTest.php @@ -31,7 +31,7 @@ use App\Models\Vendor; use Tests\TestCase; /** - * @test + * */ class EntityTranslationTest extends TestCase { diff --git a/tests/Unit/EvaluateStringTest.php b/tests/Unit/EvaluateStringTest.php index 5e08ccbce2ad..bc645646d480 100644 --- a/tests/Unit/EvaluateStringTest.php +++ b/tests/Unit/EvaluateStringTest.php @@ -15,7 +15,7 @@ use App\Models\Client; use Tests\TestCase; /** - * @test + * */ class EvaluateStringTest extends TestCase { diff --git a/tests/Unit/FactoryCreationTest.php b/tests/Unit/FactoryCreationTest.php index ede575441ce7..11d301037bfe 100644 --- a/tests/Unit/FactoryCreationTest.php +++ b/tests/Unit/FactoryCreationTest.php @@ -25,7 +25,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class FactoryCreationTest extends TestCase { @@ -47,8 +47,8 @@ class FactoryCreationTest extends TestCase } /** - * @test - * @covers App\Factory\ProductFactory + * + * App\Factory\ProductFactory */ public function testProductionCreation() { @@ -61,8 +61,8 @@ class FactoryCreationTest extends TestCase } /** - * @test - * @covers App\Factory\InvoiceFactory + * + * App\Factory\InvoiceFactory */ public function testInvoiceCreation() { @@ -80,8 +80,8 @@ class FactoryCreationTest extends TestCase } /** - * @test - * @covers App\Factory\CloneInvoiceFactory + * + * App\Factory\CloneInvoiceFactory */ public function testCloneInvoiceCreation() { @@ -106,8 +106,8 @@ class FactoryCreationTest extends TestCase } /** - * @test - * @covers App\Factory\ClientFactory + * + * App\Factory\ClientFactory */ public function testClientCreate() { @@ -121,8 +121,8 @@ class FactoryCreationTest extends TestCase } /** - * @test - * @covers App\Factory\ClientContactFactory + * + * App\Factory\ClientContactFactory */ public function testClientContactCreate() { @@ -136,8 +136,8 @@ class FactoryCreationTest extends TestCase } /** - * @test - * @covers App\Factory\UserFactory + * + * App\Factory\UserFactory */ public function testUserCreate() { diff --git a/tests/Unit/GeneratesConvertedQuoteCounterTest.php b/tests/Unit/GeneratesConvertedQuoteCounterTest.php index a3cf04897791..7930bb774a29 100644 --- a/tests/Unit/GeneratesConvertedQuoteCounterTest.php +++ b/tests/Unit/GeneratesConvertedQuoteCounterTest.php @@ -26,8 +26,8 @@ use Illuminate\Support\Facades\Session; use Tests\TestCase; /** - * @test - * @covers App\Utils\Traits\GeneratesConvertedQuoteCounter + * + * App\Utils\Traits\GeneratesConvertedQuoteCounter */ class GeneratesConvertedQuoteCounterTest extends TestCase { diff --git a/tests/Unit/GeneratesCounterTest.php b/tests/Unit/GeneratesCounterTest.php index e8997280a572..6d15856067d4 100644 --- a/tests/Unit/GeneratesCounterTest.php +++ b/tests/Unit/GeneratesCounterTest.php @@ -31,8 +31,8 @@ use Illuminate\Support\Facades\Session; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test - * @covers App\Utils\Traits\GeneratesCounter + * + * App\Utils\Traits\GeneratesCounter */ class GeneratesCounterTest extends TestCase { diff --git a/tests/Unit/GoogleAnalyticsTest.php b/tests/Unit/GoogleAnalyticsTest.php index 7d856b25b69d..e40aff267a34 100644 --- a/tests/Unit/GoogleAnalyticsTest.php +++ b/tests/Unit/GoogleAnalyticsTest.php @@ -17,8 +17,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Listeners\Payment\PaymentNotification + * + * App\Listeners\Payment\PaymentNotification */ class GoogleAnalyticsTest extends TestCase { diff --git a/tests/Unit/GroupSettingsTest.php b/tests/Unit/GroupSettingsTest.php index 974ea2ddd39a..fb4d9757b81e 100644 --- a/tests/Unit/GroupSettingsTest.php +++ b/tests/Unit/GroupSettingsTest.php @@ -19,8 +19,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @coversDefaultClass App\Models\Client + * + * DefaultClass App\Models\Client */ class GroupSettingsTest extends TestCase { @@ -143,7 +143,7 @@ class GroupSettingsTest extends TestCase } /** - * @covers ::getMergedSettings + * ::getMergedSettings */ public function testGroupPriority() { @@ -173,7 +173,7 @@ class GroupSettingsTest extends TestCase } /** - * @covers ::getSetting + * ::getSetting */ public function testCompanyFallBackPriority() { diff --git a/tests/Unit/GroupTest.php b/tests/Unit/GroupTest.php index 6c3dd4d3653f..546c57be365d 100644 --- a/tests/Unit/GroupTest.php +++ b/tests/Unit/GroupTest.php @@ -16,7 +16,7 @@ use App\DataMapper\CompanySettings; use Tests\TestCase; /** - * @test + * */ class GroupTest extends TestCase { diff --git a/tests/Unit/InvoiceActionsTest.php b/tests/Unit/InvoiceActionsTest.php index cd2dd41b1a13..30c36ee3dfad 100644 --- a/tests/Unit/InvoiceActionsTest.php +++ b/tests/Unit/InvoiceActionsTest.php @@ -18,8 +18,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Utils\Traits\Invoice\ActionsInvoice + * + * App\Utils\Traits\Invoice\ActionsInvoice */ class InvoiceActionsTest extends TestCase { diff --git a/tests/Unit/InvoiceBalanceTest.php b/tests/Unit/InvoiceBalanceTest.php index 9917e3bd07bd..04dedc728248 100644 --- a/tests/Unit/InvoiceBalanceTest.php +++ b/tests/Unit/InvoiceBalanceTest.php @@ -19,8 +19,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Helpers\Invoice\InvoiceSum + * + * App\Helpers\Invoice\InvoiceSum */ class InvoiceBalanceTest extends TestCase { diff --git a/tests/Unit/InvoiceInclusiveTest.php b/tests/Unit/InvoiceInclusiveTest.php index 60ad36ea728e..1b92505f2490 100644 --- a/tests/Unit/InvoiceInclusiveTest.php +++ b/tests/Unit/InvoiceInclusiveTest.php @@ -18,8 +18,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Helpers\Invoice\InvoiceSumInclusive + * + * App\Helpers\Invoice\InvoiceSumInclusive */ class InvoiceInclusiveTest extends TestCase { diff --git a/tests/Unit/InvoiceItemInclusiveTest.php b/tests/Unit/InvoiceItemInclusiveTest.php index 26a0b0cdd9b7..40be6abca8e5 100644 --- a/tests/Unit/InvoiceItemInclusiveTest.php +++ b/tests/Unit/InvoiceItemInclusiveTest.php @@ -18,8 +18,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Helpers\Invoice\InvoiceItemSumInclusive + * + * App\Helpers\Invoice\InvoiceItemSumInclusive */ class InvoiceItemInclusiveTest extends TestCase { diff --git a/tests/Unit/InvoiceItemTest.php b/tests/Unit/InvoiceItemTest.php index 4ba034f74a18..541f974c5a42 100644 --- a/tests/Unit/InvoiceItemTest.php +++ b/tests/Unit/InvoiceItemTest.php @@ -20,8 +20,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Helpers\Invoice\InvoiceItemSum + * + * App\Helpers\Invoice\InvoiceItemSum */ class InvoiceItemTest extends TestCase { diff --git a/tests/Unit/InvoiceItemV2Test.php b/tests/Unit/InvoiceItemV2Test.php index 5cc03d41e73c..b8e39a3710f2 100644 --- a/tests/Unit/InvoiceItemV2Test.php +++ b/tests/Unit/InvoiceItemV2Test.php @@ -18,8 +18,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Helpers\Invoice\InvoiceItemSum + * + * App\Helpers\Invoice\InvoiceItemSum */ class InvoiceItemV2Test extends TestCase { diff --git a/tests/Unit/InvoiceStatusTest.php b/tests/Unit/InvoiceStatusTest.php index a9ae53449ff2..090367c0be95 100644 --- a/tests/Unit/InvoiceStatusTest.php +++ b/tests/Unit/InvoiceStatusTest.php @@ -17,8 +17,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Helpers\Invoice\InvoiceSum + * + * App\Helpers\Invoice\InvoiceSum */ class InvoiceStatusTest extends TestCase { diff --git a/tests/Unit/InvoiceTest.php b/tests/Unit/InvoiceTest.php index 8cefdc8c969f..28cd6778cdb3 100644 --- a/tests/Unit/InvoiceTest.php +++ b/tests/Unit/InvoiceTest.php @@ -22,8 +22,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Helpers\Invoice\InvoiceSum + * + * App\Helpers\Invoice\InvoiceSum */ class InvoiceTest extends TestCase { diff --git a/tests/Unit/LateFeeTest.php b/tests/Unit/LateFeeTest.php index 4f35fe536aa4..d116e1586f48 100644 --- a/tests/Unit/LateFeeTest.php +++ b/tests/Unit/LateFeeTest.php @@ -26,7 +26,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class LateFeeTest extends TestCase { diff --git a/tests/Unit/MakesDatesTest.php b/tests/Unit/MakesDatesTest.php index fa3f5a2007a6..67266438ed5b 100644 --- a/tests/Unit/MakesDatesTest.php +++ b/tests/Unit/MakesDatesTest.php @@ -15,8 +15,8 @@ use App\Utils\Traits\MakesDates; use Tests\TestCase; /** - * @test - * @covers App\Utils\Traits\MakesDates + * + * App\Utils\Traits\MakesDates */ class MakesDatesTest extends TestCase { diff --git a/tests/Unit/MakesInvoiceValuesTest.php b/tests/Unit/MakesInvoiceValuesTest.php index fd8c5d1c7445..ee530f2afa7a 100644 --- a/tests/Unit/MakesInvoiceValuesTest.php +++ b/tests/Unit/MakesInvoiceValuesTest.php @@ -14,8 +14,8 @@ namespace Tests\Unit; use Tests\TestCase; /** - * @test - * @covers App\Utils\Traits\MakesInvoiceValues + * + * App\Utils\Traits\MakesInvoiceValues */ class MakesInvoiceValuesTest extends TestCase { diff --git a/tests/Unit/MollieAmountFormatTest.php b/tests/Unit/MollieAmountFormatTest.php index 464843320491..cb738ac23b25 100644 --- a/tests/Unit/MollieAmountFormatTest.php +++ b/tests/Unit/MollieAmountFormatTest.php @@ -17,7 +17,7 @@ use PHPUnit\Framework\TestCase; class MollieAmountFormatTest extends TestCase { /** - * @covers \App\PaymentDrivers\MolliePaymentDriver::convertToMollieAmount() + * \App\PaymentDrivers\MolliePaymentDriver::convertToMollieAmount() */ public function testFormatterIsWorkingCorrectly() { diff --git a/tests/Unit/NestedCollectionTest.php b/tests/Unit/NestedCollectionTest.php index 4ca1afd33462..eb92f34b2ac8 100644 --- a/tests/Unit/NestedCollectionTest.php +++ b/tests/Unit/NestedCollectionTest.php @@ -14,8 +14,8 @@ namespace Tests\Unit; use Tests\TestCase; /** - * @test - * @covers App\Utils\Number + * + * App\Utils\Number */ class NestedCollectionTest extends TestCase { diff --git a/tests/Unit/NumberTest.php b/tests/Unit/NumberTest.php index ad989d4039dc..dd3dae956c11 100644 --- a/tests/Unit/NumberTest.php +++ b/tests/Unit/NumberTest.php @@ -15,8 +15,8 @@ use App\Utils\Number; use Tests\TestCase; /** - * @test - * @covers App\Utils\Number + * + * App\Utils\Number */ class NumberTest extends TestCase { diff --git a/tests/Unit/PasswordTimeoutTest.php b/tests/Unit/PasswordTimeoutTest.php index 61af35fd8fdb..53225083bde0 100644 --- a/tests/Unit/PasswordTimeoutTest.php +++ b/tests/Unit/PasswordTimeoutTest.php @@ -17,8 +17,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Http\Controllers\Auth\PasswordTimeoutController + * + * App\Http\Controllers\Auth\PasswordTimeoutController */ class PasswordTimeoutTest extends TestCase { diff --git a/tests/Unit/PaymentTypeTest.php b/tests/Unit/PaymentTypeTest.php index 8ac58496d934..734d785a1d64 100644 --- a/tests/Unit/PaymentTypeTest.php +++ b/tests/Unit/PaymentTypeTest.php @@ -16,8 +16,8 @@ use Illuminate\Support\Facades\Lang; use Tests\TestCase; /** - * @test - * @covers App\Models\PaymentType + * + * App\Models\PaymentType */ class PaymentTypeTest extends TestCase { diff --git a/tests/Unit/PdfVariablesTest.php b/tests/Unit/PdfVariablesTest.php index 6e54320c9059..e6413dd129ad 100644 --- a/tests/Unit/PdfVariablesTest.php +++ b/tests/Unit/PdfVariablesTest.php @@ -15,7 +15,7 @@ use App\DataMapper\CompanySettings; use Tests\TestCase; /** - * @test + * */ class PdfVariablesTest extends TestCase { diff --git a/tests/Unit/PermissionsTest.php b/tests/Unit/PermissionsTest.php index 74ea2c933ac9..bf895156b3c2 100644 --- a/tests/Unit/PermissionsTest.php +++ b/tests/Unit/PermissionsTest.php @@ -23,7 +23,7 @@ use App\Models\User; use Tests\TestCase; /** - * @test + * */ class PermissionsTest extends TestCase { diff --git a/tests/Unit/Phantom/PhantomJsTest.php b/tests/Unit/Phantom/PhantomJsTest.php index 89622120fd7c..a3de1df2b26b 100644 --- a/tests/Unit/Phantom/PhantomJsTest.php +++ b/tests/Unit/Phantom/PhantomJsTest.php @@ -14,8 +14,8 @@ namespace Tests\Unit\Phantom; use Tests\TestCase; /** - * @test - * @covers App\Utils\PhantomJS\Phantom + * + * App\Utils\PhantomJS\Phantom */ class PhantomJsTest extends TestCase { diff --git a/tests/Unit/PrimaryKeyTransformationTest.php b/tests/Unit/PrimaryKeyTransformationTest.php index d4f8865be805..94d0adb2e921 100644 --- a/tests/Unit/PrimaryKeyTransformationTest.php +++ b/tests/Unit/PrimaryKeyTransformationTest.php @@ -15,8 +15,8 @@ use App\Utils\Traits\MakesHash; use Tests\TestCase; /** - * @test - * @covers App\Utils\Traits\MakesHash + * + * App\Utils\Traits\MakesHash */ class PrimaryKeyTransformationTest extends TestCase { diff --git a/tests/Unit/RangeDetectionTest.php b/tests/Unit/RangeDetectionTest.php index 55cabd5fd357..ccdcab6b4ec8 100644 --- a/tests/Unit/RangeDetectionTest.php +++ b/tests/Unit/RangeDetectionTest.php @@ -14,7 +14,7 @@ namespace Tests\Unit; use Tests\TestCase; /** - * @test + * */ class RangeDetectionTest extends TestCase { diff --git a/tests/Unit/RecurringDateTest.php b/tests/Unit/RecurringDateTest.php index 3ea5114ee7f3..91bc6fd115d1 100644 --- a/tests/Unit/RecurringDateTest.php +++ b/tests/Unit/RecurringDateTest.php @@ -17,7 +17,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class RecurringDateTest extends TestCase { diff --git a/tests/Unit/RecurringDatesTest.php b/tests/Unit/RecurringDatesTest.php index 2d2607eace57..7c0328197198 100644 --- a/tests/Unit/RecurringDatesTest.php +++ b/tests/Unit/RecurringDatesTest.php @@ -27,8 +27,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers \App\Models\RecurringInvoice + * + * \App\Models\RecurringInvoice */ class RecurringDatesTest extends TestCase { diff --git a/tests/Unit/RecurringDueDatesTest.php b/tests/Unit/RecurringDueDatesTest.php index cb1494ff8fb4..918d566c8df6 100644 --- a/tests/Unit/RecurringDueDatesTest.php +++ b/tests/Unit/RecurringDueDatesTest.php @@ -16,8 +16,8 @@ use Illuminate\Support\Carbon; use Tests\TestCase; /** - * @test - * @covers App\Utils\Traits\Recurring\HasRecurrence + * + * App\Utils\Traits\Recurring\HasRecurrence */ class RecurringDueDatesTest extends TestCase { diff --git a/tests/Unit/RecurringExpenseCloneTest.php b/tests/Unit/RecurringExpenseCloneTest.php index 6cbee96f9a25..a16e7957a4f1 100644 --- a/tests/Unit/RecurringExpenseCloneTest.php +++ b/tests/Unit/RecurringExpenseCloneTest.php @@ -21,7 +21,7 @@ use App\Utils\Traits\AppSetup; use Tests\TestCase; /** - * @test + * */ class RecurringExpenseCloneTest extends TestCase { diff --git a/tests/Unit/RedisVsDatabaseTest.php b/tests/Unit/RedisVsDatabaseTest.php index ecef88ef1817..67270d790737 100644 --- a/tests/Unit/RedisVsDatabaseTest.php +++ b/tests/Unit/RedisVsDatabaseTest.php @@ -16,7 +16,7 @@ use Illuminate\Support\Facades\Cache; use Tests\TestCase; /** - * @test + * */ class RedisVsDatabaseTest extends TestCase { diff --git a/tests/Unit/RefundUnitTest.php b/tests/Unit/RefundUnitTest.php index e67bfc26e42e..422a5ff20908 100644 --- a/tests/Unit/RefundUnitTest.php +++ b/tests/Unit/RefundUnitTest.php @@ -17,7 +17,7 @@ use Illuminate\Support\Carbon; use Tests\TestCase; /** - * @test + * */ class RefundUnitTest extends TestCase { diff --git a/tests/Unit/RelationExistsTest.php b/tests/Unit/RelationExistsTest.php index 5795ed06ac27..3223739d033e 100644 --- a/tests/Unit/RelationExistsTest.php +++ b/tests/Unit/RelationExistsTest.php @@ -27,7 +27,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class RelationExistsTest extends TestCase { diff --git a/tests/Unit/S3CleanupTest.php b/tests/Unit/S3CleanupTest.php index bece069190ac..22134da9d76f 100644 --- a/tests/Unit/S3CleanupTest.php +++ b/tests/Unit/S3CleanupTest.php @@ -14,7 +14,7 @@ namespace Tests\Unit; use Tests\TestCase; /** - * @test + * */ class S3CleanupTest extends TestCase { diff --git a/tests/Unit/SettingsSaverTest.php b/tests/Unit/SettingsSaverTest.php index 3f8e270095df..e275c9597311 100644 --- a/tests/Unit/SettingsSaverTest.php +++ b/tests/Unit/SettingsSaverTest.php @@ -15,7 +15,7 @@ use App\Utils\Traits\SettingsSaver; use Tests\TestCase; /** - * @test + * */ class SettingsSaverTest extends TestCase { diff --git a/tests/Unit/Shop/ShopProfileTest.php b/tests/Unit/Shop/ShopProfileTest.php index 9e33e5886250..89020c5fbfd6 100644 --- a/tests/Unit/Shop/ShopProfileTest.php +++ b/tests/Unit/Shop/ShopProfileTest.php @@ -16,8 +16,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers \App\Http\Controllers\Shop\ProfileController + * + * \App\Http\Controllers\Shop\ProfileController */ class ShopProfileTest extends TestCase { diff --git a/tests/Unit/SmsNumberTest.php b/tests/Unit/SmsNumberTest.php index 8d3b7728a4d4..5c5470b7f6ac 100644 --- a/tests/Unit/SmsNumberTest.php +++ b/tests/Unit/SmsNumberTest.php @@ -15,7 +15,7 @@ use App\DataProviders\SMSNumbers; use Tests\TestCase; /** - * @test + * */ class SmsNumberTest extends TestCase { diff --git a/tests/Unit/SubscriptionsCalcTest.php b/tests/Unit/SubscriptionsCalcTest.php index 332d817f66e9..8e1bebe0ecd8 100644 --- a/tests/Unit/SubscriptionsCalcTest.php +++ b/tests/Unit/SubscriptionsCalcTest.php @@ -20,7 +20,7 @@ use Tests\MockUnitData; use Tests\TestCase; /** - * @test + * */ class SubscriptionsCalcTest extends TestCase { diff --git a/tests/Unit/SystemHealthTest.php b/tests/Unit/SystemHealthTest.php index 8df1c9ac3a2c..67319f9adc98 100644 --- a/tests/Unit/SystemHealthTest.php +++ b/tests/Unit/SystemHealthTest.php @@ -15,8 +15,8 @@ use App\Utils\SystemHealth; use Tests\TestCase; /** - * @test - * @covers App\Utils\SystemHealth + * + * App\Utils\SystemHealth */ class SystemHealthTest extends TestCase { diff --git a/tests/Unit/TaskRoundingTest.php b/tests/Unit/TaskRoundingTest.php index bad9e9e62a1d..2c65b1929d43 100644 --- a/tests/Unit/TaskRoundingTest.php +++ b/tests/Unit/TaskRoundingTest.php @@ -22,7 +22,7 @@ use Illuminate\Support\Facades\Session; use Illuminate\Foundation\Testing\DatabaseTransactions; /** - * @test + * */ class TaskRoundingTest extends TestCase { diff --git a/tests/Unit/TaskSortingTest.php b/tests/Unit/TaskSortingTest.php index c8cdd30b943e..f012657df29e 100644 --- a/tests/Unit/TaskSortingTest.php +++ b/tests/Unit/TaskSortingTest.php @@ -14,7 +14,7 @@ namespace Tests\Unit; use Tests\TestCase; /** - * @test + * */ class TaskSortingTest extends TestCase { diff --git a/tests/Unit/Tax/EuTaxTest.php b/tests/Unit/Tax/EuTaxTest.php index a769b5ae45b6..1ba8638c9104 100644 --- a/tests/Unit/Tax/EuTaxTest.php +++ b/tests/Unit/Tax/EuTaxTest.php @@ -25,7 +25,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test App\Services\Tax\Providers\EuTax + * App\Services\Tax\Providers\EuTax */ class EuTaxTest extends TestCase { diff --git a/tests/Unit/Tax/SumTaxTest.php b/tests/Unit/Tax/SumTaxTest.php index be53d841619d..bbc8589d9849 100644 --- a/tests/Unit/Tax/SumTaxTest.php +++ b/tests/Unit/Tax/SumTaxTest.php @@ -27,7 +27,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class SumTaxTest extends TestCase { diff --git a/tests/Unit/Tax/TaxConfigTest.php b/tests/Unit/Tax/TaxConfigTest.php index f187f821b14d..b032ff761d2a 100644 --- a/tests/Unit/Tax/TaxConfigTest.php +++ b/tests/Unit/Tax/TaxConfigTest.php @@ -20,7 +20,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test App\Services\Tax\Providers\EuTax + * App\Services\Tax\Providers\EuTax */ class TaxConfigTest extends TestCase { diff --git a/tests/Unit/Tax/UsTaxTest.php b/tests/Unit/Tax/UsTaxTest.php index 39d0e72f8203..da56eab4df2d 100644 --- a/tests/Unit/Tax/UsTaxTest.php +++ b/tests/Unit/Tax/UsTaxTest.php @@ -24,7 +24,7 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test + * */ class UsTaxTest extends TestCase { diff --git a/tests/Unit/Tax/VatNumberTest.php b/tests/Unit/Tax/VatNumberTest.php index 72f155c08865..0304895dc9a8 100644 --- a/tests/Unit/Tax/VatNumberTest.php +++ b/tests/Unit/Tax/VatNumberTest.php @@ -15,7 +15,7 @@ use App\Services\Tax\VatNumberCheck; use Tests\TestCase; /** - * @test App\Services\Tax\VatNumberCheck + * App\Services\Tax\VatNumberCheck */ class VatNumberTest extends TestCase { diff --git a/tests/Unit/TimeZoneTest.php b/tests/Unit/TimeZoneTest.php index a77f8daf3c29..341dd1499f44 100644 --- a/tests/Unit/TimeZoneTest.php +++ b/tests/Unit/TimeZoneTest.php @@ -14,7 +14,7 @@ namespace Tests\Unit; use Tests\TestCase; /** - * @test + * */ class TimeZoneTest extends TestCase { diff --git a/tests/Unit/TranslationTest.php b/tests/Unit/TranslationTest.php index 783269f5ab34..c10925797618 100644 --- a/tests/Unit/TranslationTest.php +++ b/tests/Unit/TranslationTest.php @@ -15,7 +15,7 @@ use Illuminate\Support\Facades\Lang; use Tests\TestCase; /** - * @test + * */ class TranslationTest extends TestCase { diff --git a/tests/Unit/UBLInvoiceTest.php b/tests/Unit/UBLInvoiceTest.php index 99b7ca79f482..b7e37c67ef7a 100644 --- a/tests/Unit/UBLInvoiceTest.php +++ b/tests/Unit/UBLInvoiceTest.php @@ -18,8 +18,8 @@ use Tests\MockAccountData; use Tests\TestCase; /** - * @test - * @covers App\Jobs\Invoice\CreateUbl + * + * App\Jobs\Invoice\CreateUbl */ class UBLInvoiceTest extends TestCase { diff --git a/tests/Unit/UrlTest.php b/tests/Unit/UrlTest.php index 1f888cc1c79a..35d889a5ee39 100644 --- a/tests/Unit/UrlTest.php +++ b/tests/Unit/UrlTest.php @@ -14,7 +14,7 @@ namespace Tests\Unit; use Tests\TestCase; /** - * @test + * */ class UrlTest extends TestCase { diff --git a/tests/Unit/ValidationRules/BlacklistValidationTest.php b/tests/Unit/ValidationRules/BlacklistValidationTest.php index e469d403437d..201dca67e9a5 100644 --- a/tests/Unit/ValidationRules/BlacklistValidationTest.php +++ b/tests/Unit/ValidationRules/BlacklistValidationTest.php @@ -16,8 +16,8 @@ use App\Http\ValidationRules\Account\BlackListRule; use App\Http\ValidationRules\Account\EmailBlackListRule; /** - * @test - * @covers App\Http\ValidationRules\Account\BlackListRule + * + * App\Http\ValidationRules\Account\BlackListRule */ class BlacklistValidationTest extends TestCase { diff --git a/tests/Unit/ValidationRules/EmailBlacklistValidationTest.php b/tests/Unit/ValidationRules/EmailBlacklistValidationTest.php index 90a6c5f8ae90..095706f5253c 100644 --- a/tests/Unit/ValidationRules/EmailBlacklistValidationTest.php +++ b/tests/Unit/ValidationRules/EmailBlacklistValidationTest.php @@ -15,8 +15,8 @@ use App\Http\ValidationRules\Account\EmailBlackListRule; use Tests\TestCase; /** - * @test - * @covers App\Http\ValidationRules\Account\EmailBlackListRule + * + * App\Http\ValidationRules\Account\EmailBlackListRule */ class EmailBlacklistValidationTest extends TestCase { diff --git a/tests/Unit/ValidationRules/UniqueInvoiceNumberValidationTest.php b/tests/Unit/ValidationRules/UniqueInvoiceNumberValidationTest.php index cf82b4055412..0fd76f201c04 100644 --- a/tests/Unit/ValidationRules/UniqueInvoiceNumberValidationTest.php +++ b/tests/Unit/ValidationRules/UniqueInvoiceNumberValidationTest.php @@ -20,7 +20,7 @@ use App\Http\Requests\Invoice\StoreInvoiceRequest; use Illuminate\Routing\Middleware\ThrottleRequests; /** - * @test + * */ class UniqueInvoiceNumberValidationTest extends TestCase { diff --git a/vite.config.ts b/vite.config.ts index 2536460c80f7..7ce94baf88cb 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -53,6 +53,8 @@ export default defineConfig({ 'resources/js/clients/payments/stripe-ach-pay.js', 'resources/js/clients/payments/stripe-bank-transfer.js', 'resources/js/clients/payment_methods/authorize-stripe-acss.js', + 'resources/js/clients/payment_methods/authorize-powerboard-card.js', + 'resources/js/clients/payments/powerboard-credit-card.js', ]), viteStaticCopy({ targets: [