diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index dd850c742042..04bb33545951 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -13,8 +13,8 @@ jobs: runs-on: ${{ matrix.operating-system }} strategy: matrix: - operating-system: ['ubuntu-20.04', 'ubuntu-22.04'] - php-versions: ['8.1','8.2'] + operating-system: ['ubuntu-22.04','ubuntu-24.04'] + php-versions: ['8.2'] phpunit-versions: ['latest'] ci_node_total: [ 8 ] ci_node_index: [ 0, 1, 2, 3, 4, 5, 6, 7] @@ -95,14 +95,15 @@ jobs: - name: Get Composer Cache Directory id: composer-cache run: | - echo "::set-output name=dir::$(composer config cache-files-dir)" - - uses: actions/cache@v3 + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + - uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-${{ matrix.php }}-composer- + - name: Install composer dependencies run: | composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }} diff --git a/VERSION.txt b/VERSION.txt index 5a2fcfc24009..01959b109939 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -5.8.57 +5.8.57 \ No newline at end of file diff --git a/app/Console/Commands/EDocLint.php b/app/Console/Commands/EDocLint.php deleted file mode 100644 index 8604dd2edaa8..000000000000 --- a/app/Console/Commands/EDocLint.php +++ /dev/null @@ -1,69 +0,0 @@ -classes as $class) - { - - $provider = new $class(); - - foreach($provider as $key => $value) { - - $json = json_encode($provider->{$key}, JSON_PRETTY_PRINT); - Storage::disk('local')->put($key.'.json', $json); - - } - - } - - } -} diff --git a/app/DataProviders/FACT1.php b/app/DataProviders/FACT1.php new file mode 100644 index 000000000000..3572e15253bb --- /dev/null +++ b/app/DataProviders/FACT1.php @@ -0,0 +1,24 @@ + "Regime ordinario", - "RF02" => "Regime dei contribuenti minimi (art. 1,c.96-117, L. 244/2007)", - "RF04" => "Agricoltura e attività connesse e pesca (artt. 34 e 34-bis, D.P.R. 633/1972)", - "RF05" => "Vendita sali e tabacchi (art. 74, c.1, D.P.R. 633/1972)", - "RF06" => "Commercio dei fiammiferi (art. 74, c.1, D.P.R. 633/1972)", - "RF07" => "Editoria (art. 74, c.1, D.P.R. 633/1972)", - "RF08" => "Gestione di servizi di telefonia pubblica (art. 74, c.1, D.P.R. 633/1972)" , - "RF09" => "Rivendita di documenti di trasporto pubblico e di sosta (art. 74, c.1, D.P.R. 633/1972)" , - "RF10" => "Intrattenimenti, giochi e altre attività di cui alla tariffa allegata al D.P.R. 640/72 (art. 74, c.6, D.P.R. 633/1972)" , - "RF11" => "Agenzie di viaggi e turismo (art. 74-ter, D.P.R. 633/1972)" , - "RF12" => "Agriturismo (art. 5, c.2, L. 413/1991)" , - "RF13" => "Vendite a domicilio (art. 25-bis, c.6, D.P.R. 600/1973)" , - "RF14" => "Rivendita di beni usati, di oggetti d’arte, d’antiquariato o da collezione (art. 36, D.L. 41/1995)" , - "RF15" => "Agenzie di vendite all’asta di oggetti d’arte, antiquariato o da collezione (art. 40-bis, D.L. 41/1995)" , - "RF16" => "IVA per cassa P.A. (art. 6, c.5, D.P.R. 633/1972)" , - "RF17" => "IVA per cassa (art. 32-bis, D.L. 83/2012)" , - "RF19" => "Regime forfettario" , - "RF18" => "Altro" - ]; - - public array $tipo_documento = [ - 'TD01' => 'Fattura', - 'TD02' => 'Acconto/Anticipo su fattura', - 'TD03' => 'Acconto/Anticipo su parcella', - 'TD04' => 'Nota di Credito', - 'TD05' => 'Nota di Debito', - 'TD06' => 'Parcella', - 'TD16' => 'Integrazione fattura reverse charge interno', - 'TD17' => 'Integrazione/autofattura per acquisto servizi dall’estero', - 'TD18' => 'Integrazione per acquisto di beni intracomunitari', - 'TD19' => 'Integrazione/autofattura per acquisto di beni ex art.17 c.2 DPR 633/72', - 'TD20' => 'Autofattura per regolarizzazione e integrazione delle fatture', - 'TD21' => 'Autofattura per splafonamento', - 'TD22' => 'Estrazione beni da Deposito IVA', - 'TD23' => 'Estrazione beni da Deposito IVA con versamento dell’IVA', - 'TD24' => 'Fattura differita di cui all’art.21, comma 4, lett. a)', - 'TD25' => 'Fattura differita di cui all’art.21, comma 4, terzo periodo lett. b)', - 'TD26' => 'Cessione di beni ammortizzabili e per passaggi interni ', - 'TD27' => 'Fattura per autoconsumo o per cessioni gratuite senza rivalsa', - ]; - - public array $esigibilita_iva = [ - 'I' => 'IVA ad esigibilità immediata', - 'D' => 'IVA ad esigibilità differita', - 'S' => 'Scissione dei pagamenti', - ]; - - public array $modalita_pagamento = [ - 'MP01' => 'contanti', //cash - 'MP02' => 'assegno', //check - 'MP03' => 'assegno circolare', //cashier's check - 'MP04' => 'contanti presso Tesoreria', //cash at treasury - 'MP05' => 'bonifico', //bank transfer - 'MP06' => 'vaglia cambiario', //bill of exchange - 'MP07' => 'bollettino bancario', //bank bulletin - 'MP08' => 'carta di pagamento', //payment card - 'MP09' => 'RID', //RID - 'MP10' => 'RID utenze', //RID utilities - 'MP11' => 'RID veloce', //fast RID - 'MP12' => 'Riba', //Riba - 'MP13' => 'MAV //MAV', - 'MP14' => 'quietanza erario stato', //state treasury receipt - 'MP15' => 'giroconto su conti di contabilità speciale', //transfer to special accounting accounts - 'MP16' => 'domiciliazione bancaria', //bank domiciliation - 'MP17' => 'domiciliazione postale', //postal domiciliation - 'MP18' => 'bollettino di c/c postale', //postal giro account - 'MP19' => 'SEPA Direct Debit', //SEPA Direct Debit - 'MP20' => 'SEPA Direct Debit CORE', //SEPA Direct Debit CORE - 'MP21' => 'SEPA Direct Debit B2B', //SEPA Direct Debit B2B - 'MP22' => 'Trattenuta su somme già riscosse', //Withholding on sums already collected - 'MP23' => 'PagoPA', //PagoPA - ]; - - public array $esigibilita_pagamento = [ - 'TP01' => 'Pagamento a rate', - 'TP02' => 'Pagamento completo', - 'TP03' => 'Anticipo', - ]; - - public function __construct() - { - } - - public function getRegimeFiscale(): array - { - return $this->regime_fiscale; - } - public function getTipoDocumento(): array - { - return $this->tipo_documento; - } - - public function getEsigibilitaIva(): array - { - return $this->esigibilita_iva; - } - - public function getModalitaPagamento(): array - { - return $this->modalita_pagamento; - } - - public function getEsigibilitaPagamento(): array - { - return $this->esigibilita_pagamento; - } - -} \ No newline at end of file diff --git a/app/Export/CSV/ClientExport.php b/app/Export/CSV/ClientExport.php index 736b2285c098..de3ee42c0650 100644 --- a/app/Export/CSV/ClientExport.php +++ b/app/Export/CSV/ClientExport.php @@ -125,8 +125,10 @@ class ClientExport extends BaseExport $query = Client::query()->with('contacts') ->withTrashed() - ->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->where('company_id', $this->company->id); + + if(!$this->input['include_deleted'] ?? false) + $query->where('is_deleted', 0); $query = $this->addDateRange($query); diff --git a/app/Export/CSV/ExpenseExport.php b/app/Export/CSV/ExpenseExport.php index fe1db16d1b2b..67ba75c1695e 100644 --- a/app/Export/CSV/ExpenseExport.php +++ b/app/Export/CSV/ExpenseExport.php @@ -82,8 +82,12 @@ class ExpenseExport extends BaseExport $query = Expense::query() ->with('client') ->withTrashed() - ->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->where('company_id', $this->company->id); + + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Export/CSV/InvoiceExport.php b/app/Export/CSV/InvoiceExport.php index 5d9fd4442253..b0435e3859fd 100644 --- a/app/Export/CSV/InvoiceExport.php +++ b/app/Export/CSV/InvoiceExport.php @@ -60,8 +60,12 @@ class InvoiceExport extends BaseExport ->whereHas('client', function ($q){ $q->where('is_deleted', false); }) - ->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->where('company_id', $this->company->id); + + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Export/CSV/InvoiceItemExport.php b/app/Export/CSV/InvoiceItemExport.php index fcc0470400da..20308854f2ac 100644 --- a/app/Export/CSV/InvoiceItemExport.php +++ b/app/Export/CSV/InvoiceItemExport.php @@ -73,8 +73,11 @@ class InvoiceItemExport extends BaseExport ->whereHas('client', function ($q){ $q->where('is_deleted', false); }) - ->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->where('company_id', $this->company->id); + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Export/CSV/ProductExport.php b/app/Export/CSV/ProductExport.php index b1ef871c2522..cd874d16eb92 100644 --- a/app/Export/CSV/ProductExport.php +++ b/app/Export/CSV/ProductExport.php @@ -73,8 +73,12 @@ class ProductExport extends BaseExport $query = Product::query() ->withTrashed() - ->where('company_id', $this->company->id) - ->where('is_deleted', 0); + ->where('company_id', $this->company->id); + + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Export/CSV/PurchaseOrderExport.php b/app/Export/CSV/PurchaseOrderExport.php index ff092f3fbd3e..cbe54e51b2c9 100644 --- a/app/Export/CSV/PurchaseOrderExport.php +++ b/app/Export/CSV/PurchaseOrderExport.php @@ -61,8 +61,11 @@ class PurchaseOrderExport extends BaseExport ->whereHas('vendor', function ($q){ $q->where('is_deleted', false); }) - ->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->where('company_id', $this->company->id); + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Export/CSV/PurchaseOrderItemExport.php b/app/Export/CSV/PurchaseOrderItemExport.php index d7839448bcec..96c4c03aff28 100644 --- a/app/Export/CSV/PurchaseOrderItemExport.php +++ b/app/Export/CSV/PurchaseOrderItemExport.php @@ -65,8 +65,11 @@ class PurchaseOrderItemExport extends BaseExport ->whereHas('vendor', function ($q){ $q->where('is_deleted', false); }) - ->with('vendor')->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->with('vendor')->where('company_id', $this->company->id); + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Export/CSV/QuoteExport.php b/app/Export/CSV/QuoteExport.php index ceaafeffce6f..13c53cb0dc3a 100644 --- a/app/Export/CSV/QuoteExport.php +++ b/app/Export/CSV/QuoteExport.php @@ -67,8 +67,11 @@ class QuoteExport extends BaseExport ->whereHas('client', function ($q){ $q->where('is_deleted', false); }) - ->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->where('company_id', $this->company->id); + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Export/CSV/QuoteItemExport.php b/app/Export/CSV/QuoteItemExport.php index d3c004c1c201..d3f8be4b91f8 100644 --- a/app/Export/CSV/QuoteItemExport.php +++ b/app/Export/CSV/QuoteItemExport.php @@ -68,8 +68,11 @@ class QuoteItemExport extends BaseExport ->whereHas('client', function ($q){ $q->where('is_deleted', false); }) - ->with('client')->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->with('client')->where('company_id', $this->company->id); + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Export/CSV/RecurringInvoiceExport.php b/app/Export/CSV/RecurringInvoiceExport.php index df80d2d2a92b..9c88f33f7ab9 100644 --- a/app/Export/CSV/RecurringInvoiceExport.php +++ b/app/Export/CSV/RecurringInvoiceExport.php @@ -59,8 +59,11 @@ class RecurringInvoiceExport extends BaseExport ->whereHas('client', function ($q){ $q->where('is_deleted', false); }) - ->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->where('company_id', $this->company->id); + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Export/CSV/TaskExport.php b/app/Export/CSV/TaskExport.php index 7830114f260a..5b1985ce4782 100644 --- a/app/Export/CSV/TaskExport.php +++ b/app/Export/CSV/TaskExport.php @@ -68,8 +68,11 @@ class TaskExport extends BaseExport $query = Task::query() ->withTrashed() - ->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->where('company_id', $this->company->id); + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Export/CSV/VendorExport.php b/app/Export/CSV/VendorExport.php index 5037e4d43b7f..187487a14765 100644 --- a/app/Export/CSV/VendorExport.php +++ b/app/Export/CSV/VendorExport.php @@ -62,8 +62,11 @@ class VendorExport extends BaseExport $query = Vendor::query()->with('contacts') ->withTrashed() - ->where('company_id', $this->company->id) - ->where('is_deleted', $this->input['include_deleted'] ?? false); + ->where('company_id', $this->company->id); + + if(!$this->input['include_deleted'] ?? false){ + $query->where('is_deleted', 0); + } $query = $this->addDateRange($query); diff --git a/app/Factory/UserFactory.php b/app/Factory/UserFactory.php index 960584cceead..e0c46bbcda2a 100644 --- a/app/Factory/UserFactory.php +++ b/app/Factory/UserFactory.php @@ -12,6 +12,7 @@ namespace App\Factory; use App\Models\User; +use Illuminate\Support\Str; class UserFactory { @@ -29,6 +30,7 @@ class UserFactory $user->signature = ''; $user->theme_id = 0; $user->user_logged_in_notification = true; + $user->referral_code = Str::lower(Str::random(32)); return $user; } diff --git a/app/Helpers/Mail/GmailTransport.php b/app/Helpers/Mail/GmailTransport.php index e13c6f07923c..0655c710cad8 100644 --- a/app/Helpers/Mail/GmailTransport.php +++ b/app/Helpers/Mail/GmailTransport.php @@ -64,23 +64,23 @@ class GmailTransport extends AbstractTransport $body->setRaw($this->base64_encode($bcc_list.$message->toString())); - try { + // try { $service->users_messages->send('me', $body, []); - } catch(\Google\Service\Exception $e) { - /* Need to slow down */ - if ($e->getCode() == '429') { - nlog("429 google - retrying "); + // } catch(\Google\Service\Exception $e) { + // /* Need to slow down */ + // if ($e->getCode() == '429') { + // nlog("429 google - retrying "); - sleep(rand(3,8)); + // sleep(rand(3,8)); - try { - $service->users_messages->send('me', $body, []); - } catch(\Google\Service\Exception $e) { + // try { + // $service->users_messages->send('me', $body, []); + // } catch(\Google\Service\Exception $e) { - } + // } - } - } + // } + // } } private function base64_encode($data) diff --git a/app/Http/Controllers/Bank/NordigenController.php b/app/Http/Controllers/Bank/NordigenController.php index ebefc7b5bd8f..5e6764ecb006 100644 --- a/app/Http/Controllers/Bank/NordigenController.php +++ b/app/Http/Controllers/Bank/NordigenController.php @@ -35,7 +35,7 @@ class NordigenController extends BaseController /** @var array $context */ $context = $request->getTokenContent(); $company = $request->getCompany(); - $lang = $company->locale(); + $lang = substr($company->locale(), 0, 2); $context["lang"] = $lang; if (!$context) { @@ -143,7 +143,7 @@ class NordigenController extends BaseController $data = $request->all(); $company = $request->getCompany(); $account = $company->account; - $lang = $company->locale(); + $lang = substr($company->locale(), 0, 2); /** @var array $context */ $context = $request->getTokenContent(); diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index 8e2c8de91f25..f573fa72e00f 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -38,6 +38,7 @@ use App\Transformers\ArraySerializer; use App\Transformers\EntityTransformer; use League\Fractal\Resource\Collection; use Illuminate\Database\Eloquent\Builder; +use Invoiceninja\Einvoice\Decoder\Schema; use League\Fractal\Serializer\JsonApiSerializer; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use Illuminate\Contracts\Container\BindingResolutionException; @@ -996,8 +997,8 @@ class BaseController extends Controller if(request()->has('einvoice')){ - // $ro = new Schema(); - // $response_data['einvoice_schema'] = $ro('FACT1'); + $ro = new Schema(); + $response_data['einvoice_schema'] = $ro('FACT1'); } diff --git a/app/Http/Controllers/PreviewController.php b/app/Http/Controllers/PreviewController.php index 08537427a5d5..a23465d688d1 100644 --- a/app/Http/Controllers/PreviewController.php +++ b/app/Http/Controllers/PreviewController.php @@ -29,6 +29,7 @@ use App\Utils\HostedPDF\NinjaPdf; use App\Utils\HtmlEngine; use App\Utils\Ninja; use App\Utils\PhantomJS\Phantom; +use App\Utils\Traits\GeneratesCounter; use App\Utils\Traits\MakesHash; use App\Utils\Traits\MakesInvoiceHtml; use App\Utils\Traits\Pdf\PageNumbering; @@ -40,6 +41,7 @@ use Twig\Error\SyntaxError; class PreviewController extends BaseController { + use GeneratesCounter; use MakesHash; use MakesInvoiceHtml; use PageNumbering; @@ -404,23 +406,24 @@ class PreviewController extends BaseController /** @var \App\Models\Client $client */ $client = Client::factory()->create([ - 'user_id' => auth()->user()->id, + 'user_id' => $user->id, 'company_id' => $company->id, ]); /** @var \App\Models\ClientContact $contact */ $contact = ClientContact::factory()->create([ - 'user_id' => auth()->user()->id, + 'user_id' => $user->id, 'company_id' => $company->id, 'client_id' => $client->id, 'is_primary' => 1, 'send_email' => true, ]); - /** @var \App\Models\Invoice $invoice */ + $settings = $company->settings; + /** @var \App\Models\Invoice $invoice */ $invoice = Invoice::factory()->create([ - 'user_id' => auth()->user()->id, + 'user_id' => $user->id, 'company_id' => $company->id, 'client_id' => $client->id, 'terms' => $company->settings->invoice_terms, @@ -428,8 +431,18 @@ class PreviewController extends BaseController 'public_notes' => 'Sample Public Notes', ]); + if ($settings->invoice_number_pattern) { + $invoice->number = $this->getFormattedEntityNumber( + $invoice, + rand(1, 9999), + $settings->counter_padding ?: 4, + $settings->invoice_number_pattern, + ); + $invoice->save(); + } + $invitation = InvoiceInvitation::factory()->create([ - 'user_id' => auth()->user()->id, + 'user_id' => $user->id, 'company_id' => $company->id, 'invoice_id' => $invoice->id, 'client_contact_id' => $contact->id, @@ -454,7 +467,7 @@ class PreviewController extends BaseController 'template' => $design->elements([ 'client' => $invoice->client, 'entity' => $invoice, - 'pdf_variables' => (array) $invoice->company->settings->pdf_variables, + 'pdf_variables' => (array) $settings->pdf_variables, 'products' => request()->design['design']['product'], ]), 'variables' => $html->generateLabelsAndValues(), diff --git a/app/Http/Controllers/SelfUpdateController.php b/app/Http/Controllers/SelfUpdateController.php index 4af43a2a1224..de5808b0f120 100644 --- a/app/Http/Controllers/SelfUpdateController.php +++ b/app/Http/Controllers/SelfUpdateController.php @@ -26,8 +26,6 @@ class SelfUpdateController extends BaseController use ClientGroupSettingsSaver; use AppSetup; - // private bool $use_zip = false; - private string $filename = 'invoiceninja.tar'; private array $purge_file_list = [ diff --git a/app/Http/Controllers/StaticController.php b/app/Http/Controllers/StaticController.php index 135384fb9697..71403d055d1b 100644 --- a/app/Http/Controllers/StaticController.php +++ b/app/Http/Controllers/StaticController.php @@ -13,6 +13,7 @@ namespace App\Http\Controllers; use App\Utils\Statics; use Illuminate\Http\Response; +use Invoiceninja\Einvoice\Decoder\Schema; class StaticController extends BaseController { @@ -60,8 +61,8 @@ class StaticController extends BaseController if(request()->has('einvoice')){ - // $schema = new Schema(); - // $response_data['einvoice_schema'] = $schema('FACT1'); + $schema = new Schema(); + $response_data['einvoice_schema'] = $schema('FACT1'); } diff --git a/app/Http/Controllers/WePayController.php b/app/Http/Controllers/WePayController.php deleted file mode 100644 index b8669efd8540..000000000000 --- a/app/Http/Controllers/WePayController.php +++ /dev/null @@ -1,56 +0,0 @@ -firstOrFail(); - - $data['user_id'] = $user->id; - $data['user_company'] = $company; - - // $data['company_key'] = $company->company_key; - // $data['db'] = $company->db; - - $wepay_driver = new WePayPaymentDriver(new CompanyGateway(), null, null); - - return $wepay_driver->setup($data); - } - - public function finished() - { - return render('gateways.wepay.signup.finished'); - } -} diff --git a/app/Http/Requests/CompanyUser/UpdateCompanyUserRequest.php b/app/Http/Requests/CompanyUser/UpdateCompanyUserRequest.php index f0927348ab24..5c17f5ccd52a 100644 --- a/app/Http/Requests/CompanyUser/UpdateCompanyUserRequest.php +++ b/app/Http/Requests/CompanyUser/UpdateCompanyUserRequest.php @@ -35,4 +35,14 @@ class UpdateCompanyUserRequest extends Request { return []; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['company_user']['user'])) + unset($input['company_user']['user']); + + $this->replace($input); + } } diff --git a/app/Http/Requests/Nordigen/ConnectNordigenBankIntegrationRequest.php b/app/Http/Requests/Nordigen/ConnectNordigenBankIntegrationRequest.php index 1796d30fa785..9852d8e60316 100644 --- a/app/Http/Requests/Nordigen/ConnectNordigenBankIntegrationRequest.php +++ b/app/Http/Requests/Nordigen/ConnectNordigenBankIntegrationRequest.php @@ -45,6 +45,9 @@ class ConnectNordigenBankIntegrationRequest extends Request $context = $this->getTokenContent(); + if(isset($context['institution_id'])) + $input['institution_id'] = $context['institution_id']; + $input["redirect"] = isset($context["is_react"]) && $context['is_react'] ? config('ninja.react_url') . "/#/settings/bank_accounts" : config('ninja.app_url'); $this->replace($input); diff --git a/app/Http/Requests/Report/GenericReportRequest.php b/app/Http/Requests/Report/GenericReportRequest.php index 7c8521a19305..1ebd60dc4321 100644 --- a/app/Http/Requests/Report/GenericReportRequest.php +++ b/app/Http/Requests/Report/GenericReportRequest.php @@ -26,7 +26,7 @@ class GenericReportRequest extends Request */ public function authorize(): bool { - return $this->checkAuthority(); + return true; } public function rules() @@ -68,27 +68,25 @@ class GenericReportRequest extends Request $input['user_id'] = auth()->user()->id; + if(!$this->checkAuthority()){ + $input['date_range'] = ''; + $input['start_date'] = ''; + $input['end_date'] = ''; + $input['send_email'] = true; + $input['report_keys'] = []; + $input['document_email_attachment'] = false; + } + $this->replace($input); } private function checkAuthority() { - $this->error_message = ctrans('texts.authorization_failure'); /** @var \App\Models\User $user */ $user = auth()->user(); - - if(Ninja::isHosted() && $user->account->isFreeHostedClient()){ - $this->error_message = ctrans('texts.upgrade_to_view_reports'); - return false; - } - + return $user->isAdmin() || $user->hasPermission('view_reports'); } - - protected function failedAuthorization() - { - throw new AuthorizationException($this->error_message); - } } diff --git a/app/Jobs/Bank/MatchBankTransactions.php b/app/Jobs/Bank/MatchBankTransactions.php index 5748dcecc052..2dabff1e05c7 100644 --- a/app/Jobs/Bank/MatchBankTransactions.php +++ b/app/Jobs/Bank/MatchBankTransactions.php @@ -289,6 +289,8 @@ class MatchBankTransactions implements ShouldQueue private function createPayment($invoices, float $amount): void { + + $this->attachable_invoices = []; $this->available_balance = $amount; \DB::connection(config('database.default'))->transaction(function () use ($invoices) { diff --git a/app/Jobs/Mail/NinjaMailerJob.php b/app/Jobs/Mail/NinjaMailerJob.php index b1b1c94690eb..04edfe884073 100644 --- a/app/Jobs/Mail/NinjaMailerJob.php +++ b/app/Jobs/Mail/NinjaMailerJob.php @@ -152,19 +152,39 @@ class NinjaMailerJob implements ShouldQueue LightLogs::create(new EmailSuccess($this->nmo->company->company_key, $this->nmo->mailable->subject)) ->send(); - } catch (\Symfony\Component\Mime\Exception\RfcComplianceException $e) { + } + catch (\Symfony\Component\Mime\Exception\RfcComplianceException $e) { nlog("Mailer failed with a Logic Exception {$e->getMessage()}"); $this->fail(); $this->cleanUpMailers(); $this->logMailError($e->getMessage(), $this->company->clients()->first()); return; - } catch (\Symfony\Component\Mime\Exception\LogicException $e) { + } + catch (\Symfony\Component\Mime\Exception\LogicException $e) { nlog("Mailer failed with a Logic Exception {$e->getMessage()}"); $this->fail(); $this->cleanUpMailers(); $this->logMailError($e->getMessage(), $this->company->clients()->first()); return; - } catch (\Exception | \Google\Service\Exception $e) { + } + catch(\Symfony\Component\Mailer\Transport\Dsn $e){ + nlog("Incorrectly configured mail server - setting to default mail driver."); + $this->nmo->settings->email_sending_method = 'default'; + return $this->setMailDriver(); + } + catch(\Google\Service\Exception $e){ + + if ($e->getCode() == '429') { + + $message = "Google rate limiting triggered, we are queueing based on Gmail requirements."; + $this->logMailError($message, $this->company->clients()->first()); + sleep(rand(1, 2)); + $this->release(900); + + } + + } + catch (\Exception $e) { nlog("Mailer failed with {$e->getMessage()}"); $message = $e->getMessage(); @@ -221,8 +241,7 @@ class NinjaMailerJob implements ShouldQueue } /* Releasing immediately does not add in the backoff */ - sleep(rand(5, 10)); - + sleep(rand(2, 3)); $this->release($this->backoff()[$this->attempts() - 1]); } @@ -779,15 +798,20 @@ class NinjaMailerJob implements ShouldQueue return false; } - $token = json_decode($guzzle->post($url, [ - 'form_params' => [ - 'client_id' => config('ninja.o365.client_id'), - 'client_secret' => config('ninja.o365.client_secret'), - 'scope' => 'email Mail.Send offline_access profile User.Read openid', - 'grant_type' => 'refresh_token', - 'refresh_token' => $user->oauth_user_refresh_token - ], - ])->getBody()->getContents()); + try { + $token = json_decode($guzzle->post($url, [ + 'form_params' => [ + 'client_id' => config('ninja.o365.client_id'), + 'client_secret' => config('ninja.o365.client_secret'), + 'scope' => 'email Mail.Send offline_access profile User.Read openid', + 'grant_type' => 'refresh_token', + 'refresh_token' => $user->oauth_user_refresh_token + ], + ])->getBody()->getContents()); + } + catch(\Exception $e){ + nlog("Problem getting new Microsoft token for User: {$user->email}"); + } if ($token) { $user->oauth_user_refresh_token = property_exists($token, 'refresh_token') ? $token->refresh_token : $user->oauth_user_refresh_token; diff --git a/app/Jobs/User/CreateUser.php b/app/Jobs/User/CreateUser.php index 504a27b80a1c..73f5e968f325 100644 --- a/app/Jobs/User/CreateUser.php +++ b/app/Jobs/User/CreateUser.php @@ -17,6 +17,7 @@ use App\Models\User; use App\Utils\Ninja; use App\Utils\Traits\MakesHash; use Illuminate\Foundation\Bus\Dispatchable; +use Illuminate\Support\Str; class CreateUser { @@ -62,6 +63,7 @@ class CreateUser $user->fill($this->request); $user->email = $this->request['email']; //todo need to remove this in production $user->last_login = now(); + $user->referral_code = Str::lower(Str::random(32)); $user->ip = request()->ip(); if (Ninja::isSelfHost()) { diff --git a/app/Livewire/WepaySignup.php b/app/Livewire/WepaySignup.php deleted file mode 100644 index 7ed96676e2dd..000000000000 --- a/app/Livewire/WepaySignup.php +++ /dev/null @@ -1,215 +0,0 @@ - ['required'], - 'last_name' => ['required'], - 'email' => ['required', 'email'], - 'company_name' => ['required'], - 'country' => ['required'], - 'ach' => ['sometimes'], - 'wepay_payment_tos_agree' => ['accepted'], - 'debit_cards' => ['sometimes'], - ]; - - public function mount() - { - MultiDB::setDb($this->company->db); - - $user = User::find($this->user_id); - $this->company = Company::query()->where('company_key', $this->company->company_key)->first(); - - $this->fill([ - 'wepay_payment_tos_agree' => '', - 'ach' => '', - 'country' => 'US', - 'user' => $user, - 'first_name' => $user->first_name, - 'last_name' => $user->last_name, - 'email' => $user->email, - 'company_name' => $this->company->present()->name(), - 'saved' => ctrans('texts.confirm'), - 'terms' => ''.ctrans('texts.terms_of_service').'', - 'privacy_policy' => ''.ctrans('texts.privacy_policy').'', - ]); - } - - public function render() - { - return render('gateways.wepay.signup.wepay-signup'); - } - - public function submit() - { - MultiDB::setDb($this->company->db); - - $data = $this->validate($this->rules); - - //need to create or get a new WePay CompanyGateway - $cg = CompanyGateway::query()->where('gateway_key', '8fdeed552015b3c7b44ed6c8ebd9e992') - ->where('company_id', $this->company->id) - ->firstOrNew(); - - if (! $cg->id) { - $fees_and_limits = new \stdClass(); - $fees_and_limits->{GatewayType::CREDIT_CARD} = new FeesAndLimits(); - $fees_and_limits->{GatewayType::BANK_TRANSFER} = new FeesAndLimits(); - - $cg = CompanyGatewayFactory::create($this->company->id, $this->user->id); - $cg->gateway_key = '8fdeed552015b3c7b44ed6c8ebd9e992'; - $cg->require_cvv = false; - $cg->require_billing_address = false; - $cg->require_shipping_address = false; - $cg->update_details = false; - $cg->config = encrypt(config('ninja.testvars.checkout')); - $cg->fees_and_limits = $fees_and_limits; - $cg->token_billing = 'always'; - $cg->save(); - } - - $this->saved = ctrans('texts.processing'); - - $wepay_driver = new WePayPaymentDriver($cg, null, null); - - $wepay = $wepay_driver->init()->wepay; - - $user_details = [ - 'client_id' => config('ninja.wepay.client_id'), - 'client_secret' => config('ninja.wepay.client_secret'), - 'email' => $data['email'], - 'first_name' => $data['first_name'], - 'last_name' => $data['last_name'], - 'original_ip' => request()->ip(), - 'original_device' => request()->server('HTTP_USER_AGENT'), - 'tos_acceptance_time' => time(), - 'redirect_uri' => route('wepay.finished'), - 'scope' => 'manage_accounts,collect_payments,view_user,preapprove_payments,send_money', - ]; - - $wepay_user = $wepay->request('user/register/', $user_details); - - $access_token = $wepay_user->access_token; - - $access_token_expires = $wepay_user->expires_in ? (time() + $wepay_user->expires_in) : null; - - $wepay = new WePay($access_token); - - $account_details = [ - 'name' => $data['company_name'], - 'description' => ctrans('texts.wepay_account_description'), - 'theme_object' => json_decode('{"name":"Invoice Ninja","primary_color":"0b4d78","secondary_color":"0b4d78","background_color":"f8f8f8","button_color":"33b753"}'), - 'callback_uri' => route('payment_webhook', ['company_key' => $this->company->company_key, 'company_gateway_id' => $cg->hashed_id]), - 'rbits' => $this->company->rBits(), - 'country' => $data['country'], - ]; - - if ($data['country'] == 'CA') { - $account_details['currencies'] = ['CAD']; - $account_details['country_options'] = ['debit_opt_in' => boolval($data['debit_cards'])]; - } elseif ($data['country'] == 'GB') { - $account_details['currencies'] = ['GBP']; - } - - $wepay_account = $wepay->request('account/create/', $account_details); - $confirmation_required = false; - - try { - $wepay->request('user/send_confirmation/', []); - $confirmation_required = true; - } catch (\WePayException $ex) { - if ($ex->getMessage() == 'This access_token is already approved.') { - $confirmation_required = false; - } else { - - /** @phpstan-ignore-next-line */ - request()->session()->flash('message', $ex->getMessage()); - } - - nlog('failed in try catch '); - nlog($ex->getMessage()); - } - - $config = [ - 'userId' => $wepay_user->user_id, - 'accessToken' => $access_token, - 'tokenType' => $wepay_user->token_type, - 'tokenExpires' => $access_token_expires, - 'accountId' => $wepay_account->account_id, - 'state' => $wepay_account->state, - 'testMode' => config('ninja.wepay.environment') == 'staging', - 'country' => $data['country'], - ]; - - $cg->setConfig($config); - $cg->save(); - - if ($confirmation_required) { - - /** @phpstan-ignore-next-line **/ - request()->session()->flash('message', trans('texts.created_wepay_confirmation_required')); - } else { - $update_uri = $wepay->request('/account/get_update_uri', [ - 'account_id' => $wepay_account->account_id, - 'redirect_uri' => config('ninja.app_url'), - ]); - - return redirect($update_uri->uri); - } - - return redirect()->to('/wepay/finished'); - } -} diff --git a/app/Models/Presenters/ClientContactPresenter.php b/app/Models/Presenters/ClientContactPresenter.php index c42d7c0f6097..3fc2e9aed3fa 100644 --- a/app/Models/Presenters/ClientContactPresenter.php +++ b/app/Models/Presenters/ClientContactPresenter.php @@ -44,4 +44,15 @@ class ClientContactPresenter extends EntityPresenter { return $this->name().' <'.$this->entity->email.'>' ?? ''; } + + public function phone() + { + return strlen($this->phone ?? '') > 1 ? $this->phone : ''; + } + + public function email() + { + return strlen($this->email ?? '') > 1 ? $this->email : ''; + } + } diff --git a/app/Notifications/Ninja/WePayFailureNotification.php b/app/Notifications/Ninja/WePayFailureNotification.php deleted file mode 100644 index 74199a4eb1d2..000000000000 --- a/app/Notifications/Ninja/WePayFailureNotification.php +++ /dev/null @@ -1,79 +0,0 @@ -company_id = $company_id; - } - - /** - * Get the notification's delivery channels. - * - * @param mixed $notifiable - * @return array - */ - public function via($notifiable) - { - return ['slack']; - } - - /** - * Get the mail representation of the notification. - * - * @param mixed $notifiable - * - */ - public function toMail($notifiable) - { - } - - /** - * Get the array representation of the notification. - * - * @param mixed $notifiable - * @return array - */ - public function toArray($notifiable) - { - return [ - // - ]; - } - - public function toSlack($notifiable) - { - $ip = ''; - - if (request()) { - $ip = request()->getClientIp(); - } - - return (new SlackMessage()) - ->success() - ->from(ctrans('texts.notification_bot')) - ->image('https://app.invoiceninja.com/favicon.png') - ->content("New WePay ACH Failure from Company ID: {$this->company_id} IP: {$ip}"); - } -} diff --git a/app/PaymentDrivers/Sample/resources/pay.blade.php b/app/PaymentDrivers/Sample/resources/pay.blade.php index ea05015e1c90..1734c9f328a9 100644 --- a/app/PaymentDrivers/Sample/resources/pay.blade.php +++ b/app/PaymentDrivers/Sample/resources/pay.blade.php @@ -45,7 +45,7 @@ @include('portal.ninja2020.gateways.includes.save_card') - @include('portal.ninja2020.gateways.wepay.includes.credit_card') + @include('portal.ninja2020.gateways.stripe.includes.credit_card') @include('portal.ninja2020.gateways.includes.pay_now') diff --git a/app/PaymentDrivers/WePay/ACH.php b/app/PaymentDrivers/WePay/ACH.php deleted file mode 100644 index d6dea4e464c7..000000000000 --- a/app/PaymentDrivers/WePay/ACH.php +++ /dev/null @@ -1,354 +0,0 @@ -wepay_payment_driver = $wepay_payment_driver; - } - - public function authorizeView($data) - { - $data['gateway'] = $this->wepay_payment_driver; - $data['country_code'] = $this->wepay_payment_driver?->client?->country ? $this->wepay_payment_driver->client->country->iso_3166_2 : $this->wepay_payment_driver->company_gateway->company->country()->iso_3166_2; - - return render('gateways.wepay.authorize.bank_transfer', $data); - } - - public function authorizeResponse($request) - { - //https://developer.wepay.com/api/api-calls/credit_card#authorize - $data = $request->all(); - // authorize the credit card - - //nlog($data); - /* - '_token' => '1Fk5CRj34up5ntKPvrFyMIAJhDdUNF3boqT3iIN3', - 'company_gateway_id' => '39', - 'payment_method_id' => '1', - 'gateway_response' => NULL, - 'is_default' => NULL, - 'credit_card_id' => '180642154638', - 'q' => '/client/payment_methods', - 'method' => '1', - */ - - try { - $response = $this->wepay_payment_driver->wepay->request('payment_bank/persist', [ - 'client_id' => config('ninja.wepay.client_id'), - 'client_secret' => config('ninja.wepay.client_secret'), - 'payment_bank_id' => (int) $data['bank_account_id'], - ]); - } catch (\Exception $e) { - $this->wepay_payment_driver->sendFailureMail($e->getMessage()); - - $message = [ - 'server_response' => $e->getMessage(), - ]; - - SystemLogger::dispatch( - $e->getMessage(), - SystemLog::CATEGORY_GATEWAY_RESPONSE, - SystemLog::EVENT_GATEWAY_FAILURE, - SystemLog::TYPE_WEPAY, - $this->wepay_payment_driver->client, - $this->wepay_payment_driver->client->company, - ); - - if (config('ninja.notification.slack')) { - $this->wepay_payment_driver->company_gateway->company->notification(new WePayFailureNotification($this->wepay_payment_driver->company_gateway->company))->ninja(); - } - - throw new PaymentFailed($e->getMessage(), 400); - } - // display the response - // nlog($response); - - if (in_array($response->state, ['new', 'pending', 'authorized'])) { - $this->storePaymentMethod($response, GatewayType::BANK_TRANSFER); - - return redirect()->route('client.payment_methods.index'); - } - - throw new PaymentFailed('There was a problem adding this payment method.', 400); - /* - { - "payment_bank_id": 12345, - "bank_name": "Wells Fargo", - "account_last_four": "6789", - "state": "authorized" - } - - state options: new, pending, authorized, disabled. - */ - } - - /* If the bank transfer token is PENDING - we need to verify!! */ - // - - public function verificationView(ClientGatewayToken $token) - { - $this->wepay_payment_driver->init(); - - $data = [ - 'token' => $token, - 'gateway' => $this->wepay_payment_driver, - ]; - - return render('gateways.wepay.authorize.verify', $data); - } - - /** - { - "client_id": 1234, - "client_secret": "b1fc2f68-4d1f-4a", - "payment_bank_id": 12345, - "type": "microdeposits", - "microdeposits": [ - 8, - 12 - ] - } - */ - public function processVerification(Request $request, ClientGatewayToken $token) - { - $transactions = $request->input('transactions'); - - $transformed_transactions = []; - - foreach ($transactions as $transaction) { - $transformed_transactions[] = (int) $transaction; - } - - try { - $response = $this->wepay_payment_driver->wepay->request('payment_bank/verify', [ - 'client_id' => config('ninja.wepay.client_id'), - 'client_secret' => config('ninja.wepay.client_secret'), - 'payment_bank_id' => $token->token, - 'type' => 'microdeposits', - 'microdeposits' => $transformed_transactions, - ]); - } catch (\Exception $e) { - nlog('we pay exception'); - nlog($e->getMessage()); - - return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]) - ->with('error', $e->getMessage()); - } - /* - { - "payment_bank_id": 12345, - "bank_name": "Wells Fargo", - "account_last_four": "6789", - "state": "authorized" - } - */ - nlog($response); - - //$meta = $token->meta; - if ($response->state == 'authorized') { - $meta = $token->meta; - $meta->state = $response->state; - $token->meta = $meta; - $token->save(); - - return redirect()->route('client.payment_methods.index'); - } else { - return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]) - ->with('error', ctrans('texts.verification_failed')); - } - } - - /////////////////////////////////////////////////////////////////////////////////////// - public function paymentView(array $data) - { - $data['gateway'] = $this->wepay_payment_driver; - $data['currency'] = $this->wepay_payment_driver->client->getCurrencyCode(); - $data['payment_method_id'] = GatewayType::BANK_TRANSFER; - $data['amount'] = $data['total']['amount_with_fee']; - - return render('gateways.wepay.bank_transfer', $data); - } - - public function paymentResponse($request) - { - $token = ClientGatewayToken::query()->find($this->decodePrimaryKey($request->input('source'))); - $token_meta = $token->meta; - - if (! property_exists($token_meta, 'state') || $token_meta->state != 'authorized') { - $response = $this->wepay_payment_driver->wepay->request('/payment_bank', [ - 'client_id' => config('ninja.wepay.client_id'), - 'client_secret' => config('ninja.wepay.client_secret'), - 'payment_bank_id' => $token->token, - ]); - - if ($response->state == 'authorized') { - $meta = $token->meta; - $meta->state = $response->state; - $token->meta = $meta; - $token->save(); - } else { - return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]); - } - } - - $app_fee = (config('ninja.wepay.fee_ach_multiplier') * $this->wepay_payment_driver->payment_hash->data->amount_with_fee) + config('ninja.wepay.fee_fixed'); - - try { - $response = $this->wepay_payment_driver->wepay->request('checkout/create', [ - // 'callback_uri' => route('payment_webhook', ['company_key' => $this->wepay_payment_driver->company_gateway->company->company_key, 'company_gateway_id' => $this->wepay_payment_driver->company_gateway->hashed_id]), - 'unique_id' => Str::random(40), - 'account_id' => $this->wepay_payment_driver->company_gateway->getConfigField('accountId'), - 'amount' => $this->wepay_payment_driver->payment_hash->data->amount_with_fee, - 'currency' => $this->wepay_payment_driver->client->getCurrencyCode(), - 'short_description' => 'Goods and Services', - 'type' => 'goods', - 'fee' => [ - 'fee_payer' => config('ninja.wepay.fee_payer'), - 'app_fee' => $app_fee, - ], - 'payment_method' => [ - 'type' => 'payment_bank', - 'payment_bank' => [ - 'id' => $token->token, - ], - ], - ]); - } catch (\Exception $e) { - throw new PaymentFailed($e->getMessage(), 500); - } - - /* Merge all data and store in the payment hash*/ - $state = [ - 'server_response' => $response, - 'payment_hash' => $request->payment_hash, - ]; - - $state = array_merge($state, $request->all()); - $this->wepay_payment_driver->payment_hash->data = array_merge((array) $this->wepay_payment_driver->payment_hash->data, $state); - $this->wepay_payment_driver->payment_hash->save(); - - if (in_array($response->state, ['authorized', 'captured'])) { - //success - nlog('success'); - $payment_status = $response->state == 'authorized' ? Payment::STATUS_COMPLETED : Payment::STATUS_PENDING; - - return $this->processSuccessfulPayment($response, $payment_status, GatewayType::BANK_TRANSFER); - } - - if (in_array($response->state, ['released', 'cancelled', 'failed', 'expired'])) { - //some type of failure - nlog('failure'); - - $payment_status = $response->state == 'cancelled' ? Payment::STATUS_CANCELLED : Payment::STATUS_FAILED; - - $this->processUnSuccessfulPayment($response, $payment_status); - } - } - - private function storePaymentMethod($response, $payment_method_id) - { - $payment_meta = new \stdClass(); - $payment_meta->exp_month = (string) ''; - $payment_meta->exp_year = (string) ''; - $payment_meta->brand = (string) $response->bank_name; - $payment_meta->last4 = (string) $response->account_last_four; - $payment_meta->type = GatewayType::BANK_TRANSFER; - $payment_meta->state = $response->state; - - $data = [ - 'payment_meta' => $payment_meta, - 'token' => $response->payment_bank_id, - 'payment_method_id' => $payment_method_id, - ]; - - $this->wepay_payment_driver->storeGatewayToken($data); - } - - public function tokenBilling($token, $payment_hash) - { - $token_meta = $token->meta; - - if (! property_exists($token_meta, 'state') || $token_meta->state != 'authorized') { - return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]); - } - - $amount = array_sum(array_column($this->wepay_payment_driver->payment_hash->invoices(), 'amount')) + $this->wepay_payment_driver->payment_hash->fee_total; - - $app_fee = (config('ninja.wepay.fee_cc_multiplier') * $amount) + config('ninja.wepay.fee_fixed'); - - $response = $this->wepay_payment_driver->wepay->request('checkout/create', [ - 'unique_id' => Str::random(40), - 'account_id' => $this->wepay_payment_driver->company_gateway->getConfigField('accountId'), - 'amount' => $amount, - 'currency' => $this->wepay_payment_driver->client->getCurrencyCode(), - 'short_description' => 'Goods and Services', - 'type' => 'goods', - 'fee' => [ - 'fee_payer' => config('ninja.wepay.fee_payer'), - 'app_fee' => $app_fee, - ], - 'payment_method' => [ - 'type' => 'payment_bank', - 'payment_bank' => [ - 'id' => $token->token, - ], - ], - ]); - - /* Merge all data and store in the payment hash*/ - $state = [ - 'server_response' => $response, - 'payment_hash' => $this->wepay_payment_driver->payment_hash, - ]; - - $this->wepay_payment_driver->payment_hash->data = array_merge((array) $this->wepay_payment_driver->payment_hash->data, $state); - $this->wepay_payment_driver->payment_hash->save(); - - if (in_array($response->state, ['authorized', 'captured'])) { - //success - nlog('success'); - $payment_status = $response->state == 'authorized' ? Payment::STATUS_COMPLETED : Payment::STATUS_PENDING; - - return $this->processSuccessfulPayment($response, $payment_status, GatewayType::BANK_TRANSFER, true); - } - - if (in_array($response->state, ['released', 'cancelled', 'failed', 'expired'])) { - //some type of failure - nlog('failure'); - - $payment_status = $response->state == 'cancelled' ? Payment::STATUS_CANCELLED : Payment::STATUS_FAILED; - - $this->processUnSuccessfulPayment($response, $payment_status); - } - } -} diff --git a/app/PaymentDrivers/WePay/CreditCard.php b/app/PaymentDrivers/WePay/CreditCard.php deleted file mode 100644 index 2e15012d7c1f..000000000000 --- a/app/PaymentDrivers/WePay/CreditCard.php +++ /dev/null @@ -1,346 +0,0 @@ -wepay_payment_driver = $wepay_payment_driver; - } - - public function authorizeView($data) - { - $data['gateway'] = $this->wepay_payment_driver; - $data['country_code'] = $this->wepay_payment_driver?->client?->country ? $this->wepay_payment_driver->client->country->iso_3166_2 : $this->wepay_payment_driver->company_gateway->company->country()->iso_3166_2; - - return render('gateways.wepay.authorize.authorize', $data); - } - - public function authorizeResponse($request) - { - //https://developer.wepay.com/api/api-calls/credit_card#authorize - $data = $request->all(); - // authorize the credit card - - // nlog($data); - /* - '_token' => '1Fk5CRj34up5ntKPvrFyMIAJhDdUNF3boqT3iIN3', - 'company_gateway_id' => '39', - 'payment_method_id' => '1', - 'gateway_response' => NULL, - 'is_default' => NULL, - 'credit_card_id' => '180642154638', - 'q' => '/client/payment_methods', - 'method' => '1', - */ - - try { - $response = $this->wepay_payment_driver->wepay->request('credit_card/authorize', [ - 'client_id' => config('ninja.wepay.client_id'), - 'client_secret' => config('ninja.wepay.client_secret'), - 'credit_card_id' => (int) $data['credit_card_id'], - ]); - } catch (\Exception $e) { - return $this->wepay_payment_driver->processInternallyFailedPayment($this->wepay_payment_driver, $e); - } - // display the response - // nlog($response); - - if (in_array($response->state, ['new', 'authorized'])) { - $this->storePaymentMethod($response, GatewayType::CREDIT_CARD); - - return redirect()->route('client.payment_methods.index'); - } - - throw new PaymentFailed('There was a problem adding this payment method.', 400); - /* - [credit_card_id] => 348084962473 - [credit_card_name] => Visa xxxxxx4018 - [state] => authorized - [user_name] => Joey Diaz - [email] => user@example.com - [create_time] => 1623798172 - [expiration_month] => 10 - [expiration_year] => 2023 - [last_four] => 4018 - [input_source] => card_keyed - [virtual_terminal_mode] => none - [card_on_file] => - [recurring] => - [cvv_provided] => 1 - [auto_update] => - */ - } - - public function paymentView(array $data) - { - $data['gateway'] = $this->wepay_payment_driver; - $data['description'] = ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number'); - $data['country_code'] = $this->wepay_payment_driver?->client?->country ? $this->wepay_payment_driver->client->country->iso_3166_2 : $this->wepay_payment_driver->company_gateway->company()->iso_3166_2; - - return render('gateways.wepay.credit_card.pay', $data); - } - - public function paymentResponse(PaymentResponseRequest $request) - { - nlog('payment response'); - - //it could be an existing token or a new credit_card_id that needs to be converted into a wepay token - if ($request->has('credit_card_id') && $request->input('credit_card_id')) { - nlog('authorize the card first!'); - - try { - $response = $this->wepay_payment_driver->wepay->request('credit_card/authorize', [ - 'client_id' => config('ninja.wepay.client_id'), - 'client_secret' => config('ninja.wepay.client_secret'), - 'credit_card_id' => (int) $request->input('credit_card_id'), - ]); - } catch (\Exception $e) { - return $this->wepay_payment_driver->processInternallyFailedPayment($this->wepay_payment_driver, $e); - } - - $credit_card_id = (int) $response->credit_card_id; - - if (in_array($response->state, ['new', 'authorized']) && boolval($request->input('store_card'))) { - $this->storePaymentMethod($response, GatewayType::CREDIT_CARD); - } - } else { - $credit_card_id = (int) $request->input('token'); - } - - // USD, CAD, and GBP. - // nlog($request->all()); - - $app_fee = (config('ninja.wepay.fee_cc_multiplier') * $this->wepay_payment_driver->payment_hash->data->amount_with_fee) + config('ninja.wepay.fee_fixed'); - // charge the credit card - - try { - $response = $this->wepay_payment_driver->wepay->request('checkout/create', [ - 'unique_id' => Str::random(40), - 'account_id' => $this->wepay_payment_driver->company_gateway->getConfigField('accountId'), - 'amount' => $this->wepay_payment_driver->payment_hash->data->amount_with_fee, - 'currency' => $this->wepay_payment_driver->client->getCurrencyCode(), - 'short_description' => 'Goods and services', - 'type' => 'goods', - 'fee' => [ - 'fee_payer' => config('ninja.wepay.fee_payer'), - 'app_fee' => $app_fee, - ], - 'payment_method' => [ - 'type' => 'credit_card', - 'credit_card' => [ - 'id' => $credit_card_id, - ], - ], - ]); - } catch (\Exception $e) { - $this->wepay_payment_driver->sendFailureMail($e->getMessage()); - - $message = [ - 'server_response' => $e->getMessage(), - 'data' => $this->wepay_payment_driver->payment_hash->data, - ]; - - SystemLogger::dispatch( - $e->getMessage(), - SystemLog::CATEGORY_GATEWAY_RESPONSE, - SystemLog::EVENT_GATEWAY_FAILURE, - SystemLog::TYPE_WEPAY, - $this->wepay_payment_driver->client, - $this->wepay_payment_driver->client->company, - ); - - throw new PaymentFailed($e->getMessage(), 500); - } - - /* Merge all data and store in the payment hash*/ - $state = [ - 'server_response' => $response, - 'payment_hash' => $request->payment_hash, - ]; - - $state = array_merge($state, $request->all()); - $this->wepay_payment_driver->payment_hash->data = array_merge((array) $this->wepay_payment_driver->payment_hash->data, $state); - $this->wepay_payment_driver->payment_hash->save(); - - if (in_array($response->state, ['authorized', 'captured'])) { - //success - nlog('success'); - $payment_status = $response->state == 'authorized' ? Payment::STATUS_COMPLETED : Payment::STATUS_PENDING; - - return $this->processSuccessfulPayment($response, $payment_status, GatewayType::CREDIT_CARD); - } - - if (in_array($response->state, ['released', 'cancelled', 'failed', 'expired'])) { - //some type of failure - nlog('failure'); - - $payment_status = $response->state == 'cancelled' ? Payment::STATUS_CANCELLED : Payment::STATUS_FAILED; - - $this->processUnSuccessfulPayment($response, $payment_status); - } - } - - /* - new The checkout was created by the application. This state typically indicates that checkouts created in WePay's hosted checkout flow are waiting for the payer to submit their information. - authorized The payer entered their payment info and confirmed the payment on WePay. WePay has successfully charged the card. - captured The payment has been reserved from the payer. - released The payment has been credited to the payee account. Note that the released state may be active although there are active partial refunds or partial chargebacks. - cancelled The payment has been cancelled by the payer, payee, or application. - refunded The payment was captured and then refunded by the payer, payee, or application. The payment has been debited from the payee account. - charged back The payment has been charged back by the payer and the payment has been debited from the payee account. - failed The payment has failed. - expired Checkouts expire if they remain in the new state for more than 30 minutes (e.g., they have been abandoned). - */ - - /* - https://developer.wepay.com/api/api-calls/checkout - { - "checkout_id": 649945633, - "account_id": 1548718026, - "type": "donation", - "short_description": "test checkout", - "currency": "USD", - "amount": 20, - "state": "authorized", - "soft_descriptor": "WPY*Wolverine", - "auto_release": true, - "create_time": 1463589958, - "gross": 20.88, - "reference_id": null, - "callback_uri": null, - "long_description": null, - "delivery_type": null, - "initiated_by": "merchant", - "in_review": false, - "fee": { - "app_fee": 0, - "processing_fee": 0.88, - "fee_payer": "payer" - }, - "chargeback": { - "amount_charged_back": 0, - "dispute_uri": null - }, - "refund": { - "amount_refunded": 0, - "refund_reason": null - }, - "payment_method": { - "type": "credit_card", - "credit_card": { - "id": 1684847614, - "data": { - "emv_receipt": null, - "signature_url": null - }, - "auto_release": false - } - }, - "hosted_checkout": null, - "payer": { - "email": "test@example.com", - "name": "Mr Smith", - "home_address": null - }, - "npo_information": null, - "payment_error": null - } - */ - - private function storePaymentMethod($response, $payment_method_id) - { - nlog('storing card'); - - $payment_meta = new \stdClass(); - $payment_meta->exp_month = (string) $response->expiration_month; - $payment_meta->exp_year = (string) $response->expiration_year; - $payment_meta->brand = (string) $response->credit_card_name; - $payment_meta->last4 = (string) $response->last_four; - $payment_meta->type = GatewayType::CREDIT_CARD; - - $data = [ - 'payment_meta' => $payment_meta, - 'token' => $response->credit_card_id, - 'payment_method_id' => $payment_method_id, - ]; - - $this->wepay_payment_driver->storeGatewayToken($data); - } - - public function tokenBilling($cgt, $payment_hash) - { - $amount = array_sum(array_column($this->wepay_payment_driver->payment_hash->invoices(), 'amount')) + $this->wepay_payment_driver->payment_hash->fee_total; - - $app_fee = (config('ninja.wepay.fee_cc_multiplier') * $amount) + config('ninja.wepay.fee_fixed'); - // charge the credit card - $response = $this->wepay_payment_driver->wepay->request('checkout/create', [ - 'unique_id' => Str::random(40), - 'account_id' => $this->wepay_payment_driver->company_gateway->getConfigField('accountId'), - 'amount' => $amount, - 'currency' => $this->wepay_payment_driver->client->getCurrencyCode(), - 'short_description' => 'Goods and services', - 'type' => 'goods', - 'fee' => [ - 'fee_payer' => config('ninja.wepay.fee_payer'), - 'app_fee' => $app_fee, - ], - 'payment_method' => [ - 'type' => 'credit_card', - 'credit_card' => [ - 'id' => $cgt->token, - ], - ], - ]); - - /* Merge all data and store in the payment hash*/ - $state = [ - 'server_response' => $response, - 'payment_hash' => $payment_hash, - ]; - - $this->wepay_payment_driver->payment_hash->data = array_merge((array) $this->wepay_payment_driver->payment_hash->data, $state); - $this->wepay_payment_driver->payment_hash->save(); - - if (in_array($response->state, ['authorized', 'captured'])) { - //success - nlog('success'); - $payment_status = $response->state == 'authorized' ? Payment::STATUS_COMPLETED : Payment::STATUS_PENDING; - - return $this->processSuccessfulPayment($response, $payment_status, GatewayType::CREDIT_CARD, true); - } - - if (in_array($response->state, ['released', 'cancelled', 'failed', 'expired'])) { - //some type of failure - nlog('failure'); - - $payment_status = $response->state == 'cancelled' ? Payment::STATUS_CANCELLED : Payment::STATUS_FAILED; - - $this->processUnSuccessfulPayment($response, $payment_status); - } - } -} diff --git a/app/PaymentDrivers/WePay/Setup.php b/app/PaymentDrivers/WePay/Setup.php deleted file mode 100644 index 19b04e95c27a..000000000000 --- a/app/PaymentDrivers/WePay/Setup.php +++ /dev/null @@ -1,34 +0,0 @@ -wepay = $wepay; - } - - public function boot($data) - { - /* - 'user_id', - 'user_company', - */ - - return render('gateways.wepay.signup.index', $data); - } -} diff --git a/app/PaymentDrivers/WePay/WePayCommon.php b/app/PaymentDrivers/WePay/WePayCommon.php deleted file mode 100644 index ab3365f41655..000000000000 --- a/app/PaymentDrivers/WePay/WePayCommon.php +++ /dev/null @@ -1,75 +0,0 @@ - $payment_type, - 'amount' => $response->amount, - 'transaction_reference' => $response->checkout_id, - 'gateway_type_id' => $gateway_type, - ]; - - $payment = $this->wepay_payment_driver->createPayment($data, $payment_status); - - SystemLogger::dispatch( - ['response' => $this->wepay_payment_driver->payment_hash->data->server_response, 'data' => $data], - SystemLog::CATEGORY_GATEWAY_RESPONSE, - SystemLog::EVENT_GATEWAY_SUCCESS, - SystemLog::TYPE_WEPAY, - $this->wepay_payment_driver->client, - $this->wepay_payment_driver->client->company, - ); - - if ($return_payment) { - return $payment; - } - - return redirect()->route('client.payments.show', ['payment' => $this->wepay_payment_driver->encodePrimaryKey($payment->id)]); - } - - private function processUnSuccessfulPayment($response, $payment_status) - { - $this->wepay_payment_driver->sendFailureMail($response->state); - - $message = [ - 'server_response' => $response, - 'data' => $this->wepay_payment_driver->payment_hash->data, - ]; - - SystemLogger::dispatch( - $message, - SystemLog::CATEGORY_GATEWAY_RESPONSE, - SystemLog::EVENT_GATEWAY_FAILURE, - SystemLog::TYPE_WEPAY, - $this->wepay_payment_driver->client, - $this->wepay_payment_driver->client->company, - ); - - throw new PaymentFailed('Failed to process the payment.', 500); - } -} diff --git a/app/PaymentDrivers/WePayPaymentDriver.php b/app/PaymentDrivers/WePayPaymentDriver.php index 4b7254344e80..2cd93f7905de 100644 --- a/app/PaymentDrivers/WePayPaymentDriver.php +++ b/app/PaymentDrivers/WePayPaymentDriver.php @@ -17,13 +17,12 @@ use App\Models\GatewayType; use App\Models\Payment; use App\Models\PaymentHash; use App\Models\SystemLog; -use App\PaymentDrivers\WePay\ACH; -use App\PaymentDrivers\WePay\CreditCard; -use App\PaymentDrivers\WePay\Setup; use App\Utils\Traits\MakesHash; use Illuminate\Http\Request; -use WePay; +/** + * @deprecated 5.9 + */ class WePayPaymentDriver extends BaseDriver { use MakesHash; @@ -45,27 +44,14 @@ class WePayPaymentDriver extends BaseDriver /* Maps the Payment Gateway Type - to its implementation */ public static $methods = [ - GatewayType::CREDIT_CARD => CreditCard::class, - GatewayType::BANK_TRANSFER => ACH::class, ]; public const SYSTEM_LOG_TYPE = SystemLog::TYPE_WEPAY; public function init() { - if (WePay::getEnvironment() == 'none') { - if (config('ninja.wepay.environment') == 'staging') { - WePay::useStaging(config('ninja.wepay.client_id'), config('ninja.wepay.client_secret')); - } else { - WePay::useProduction(config('ninja.wepay.client_id'), config('ninja.wepay.client_secret')); - } - } + throw new \Exception("Gateway no longer supported", 500); - if ($this->company_gateway) { - $this->wepay = new WePay($this->company_gateway->getConfigField('accessToken')); - } else { - $this->wepay = new WePay(null); - } return $this; } @@ -93,7 +79,6 @@ class WePayPaymentDriver extends BaseDriver */ public function setup(array $data) { - return (new Setup($this))->boot($data); } /** @@ -168,140 +153,17 @@ class WePayPaymentDriver extends BaseDriver public function processWebhookRequest(PaymentWebhookRequest $request, Payment $payment = null) { $this->init(); - - $input = $request->all(); - - $config = $this->company_gateway->getConfig(); - - $accountId = $this->company_gateway->getConfigField('accountId'); - $objectId = false; - $objectType = ''; - - foreach (array_keys($input) as $key) { - if ('_id' == substr($key, -3)) { - $objectType = substr($key, 0, -3); - $objectId = $input[$key]; - break; - } - } - - if (! $objectId) { - throw new \Exception('Could not find object id parameter'); - } - - if ($objectType == 'credit_card') { - $payment_method = ClientGatewayToken::where('token', $objectId)->first(); - - if (! $payment_method) { - throw new \Exception('Unknown payment method'); - } - - $source = $this->wepay->request('credit_card', [ - 'client_id' => config('ninja.wepay.client_id'), - 'client_secret' => config('ninja.wepay.client_secret'), - 'credit_card_id' => (int) $objectId, - ]); - - if ($source->state == 'deleted') { - $payment_method->delete(); - } else { - //$this->paymentService->convertPaymentMethodFromWePay($source, null, $paymentMethod)->save(); - } - - return 'Processed successfully'; - } elseif ($objectType == 'account') { - if ($accountId != $objectId) { - throw new \Exception('Unknown account '.$accountId.' does not equal '.$objectId); - } - - $wepayAccount = $this->wepay->request('account', [ - 'account_id' => (int) $objectId, - ]); - - if ($wepayAccount->state == 'deleted') { - $this->company_gateway->delete(); - } else { - $config->state = $wepayAccount->state; - $this->company_gateway->setConfig($config); - $this->company_gateway->save(); - } - - return ['message' => 'Processed successfully']; - } elseif ($objectType == 'checkout') { - /** @var \App\Models\Payment $payment */ - $payment = Payment::where('company_id', $this->company_gateway->company_id) - ->where('transaction_reference', '=', $objectId) - ->first(); - - if (! $payment) { - throw new \Exception('Unknown payment'); - } - - if ($payment->is_deleted) { - throw new \Exception('Payment is deleted'); - } - - $checkout = $this->wepay->request('checkout', [ - 'checkout_id' => intval($objectId), - ]); - - if ($checkout->state == 'captured') { - $payment->status_id = Payment::STATUS_COMPLETED; - $payment->save(); - } elseif ($checkout->state == 'cancelled') { - $payment->service()->deletePayment()->save(); - } elseif ($checkout->state == 'failed') { - $payment->status_id = Payment::STATUS_FAILED; - $payment->save(); - } - - return 'Processed successfully'; - } else { - return 'Ignoring event'; - } - - return true; } public function refund(Payment $payment, $amount, $return_client_response = false) { $this->init(); - $response = $this->wepay->request('checkout/refund', [ - 'checkout_id' => $payment->transaction_reference, - 'refund_reason' => 'Refund by merchant', - 'amount' => $amount, - ]); - - return [ - 'transaction_reference' => $response->checkout_id, - 'transaction_response' => json_encode($response), - 'success' => $response->state == 'refunded' ? true : false, - 'description' => 'refund', - 'code' => 0, - ]; } public function detach(ClientGatewayToken $token) { - /*Bank accounts cannot be deleted - only CC*/ - if ($token->gateway_type_id == 2) { - return true; - } - - $this->init(); - - $response = $this->wepay->request('/credit_card/delete', [ - 'client_id' => config('ninja.wepay.client_id'), - 'client_secret' => config('ninja.wepay.client_secret'), - 'credit_card_id' => intval($token->token), - ]); - - if ($response->state == 'deleted') { - return true; - } else { - throw new \Exception(trans('texts.failed_remove_payment_method')); - } + } public function getClientRequiredFields(): array diff --git a/app/Providers/ClientPortalServiceProvider.php b/app/Providers/ClientPortalServiceProvider.php index 46abc838b0cc..5c134bdb8e90 100644 --- a/app/Providers/ClientPortalServiceProvider.php +++ b/app/Providers/ClientPortalServiceProvider.php @@ -1,4 +1,13 @@ bank_integration_id = $data['bank_integration_id']; } - $bank_transaction->fill($data); $bank_transaction->save(); @@ -43,7 +42,7 @@ class BankTransactionRepository extends BaseRepository $data['transactions'] = $bank_transactions->map(function ($bt) { return ['id' => $bt->id, 'invoice_ids' => $bt->invoice_ids, 'ninja_category_id' => $bt->ninja_category_id]; })->toArray(); - + $bts = (new MatchBankTransactions($user->company()->id, $user->company()->db, $data))->handle(); } diff --git a/app/Services/EDocument/Standards/FatturaPANew.php b/app/Services/EDocument/Standards/FatturaPANew.php new file mode 100644 index 000000000000..870021d08ddd --- /dev/null +++ b/app/Services/EDocument/Standards/FatturaPANew.php @@ -0,0 +1,288 @@ +init() + ->setIdTrasmittente() //order of execution matters. + ->setDatiTrasmissione() + ->setIdFiscaleIVA() + ->setAnagrafica() + ->setDatiAnagrafici() + ->setCedentePrestatore() + ->setClientDetails() + ->setDatiGeneraliDocumento() + ->setDatiGenerali() + ->setLineItems() + ->setDettaglioPagamento() + ->setFatturaElettronica(); + } + + public function getFatturaElettronica(): FatturaElettronica + { + return $this->FatturaElettronica; + } + + private function setDatiTrasmissione(): self + { + + $this->DatiTrasmissione->FormatoTrasmissione = "FPR12"; + $this->DatiTrasmissione->CodiceDestinatario = $this->invoice->client->routing_id; + $this->DatiTrasmissione->ProgressivoInvio = $this->invoice->number; + + $this->DatiTrasmissione->IdTrasmittente = $this->IdTrasmittente; + + $this->FatturaElettronicaHeader->DatiTrasmissione = $this->DatiTrasmissione; + + return $this; + } + + + private function setIdTrasmittente():self + { + $this->IdTrasmittente->IdPaese = $this->invoice->company->country()->iso_3166_2; + $this->IdTrasmittente->IdCodice = $this->invoice->company->settings->vat_number; + + return $this; + } + + private function setCedentePrestatore():self + { + $this->CedentePrestatore->DatiAnagrafici = $this->DatiAnagrafici; + + $sede = new Sede; + $sede->Indirizzo = $this->invoice->company->settings->address1; + $sede->CAP = (int)$this->invoice->company->settings->postal_code; + $sede->Comune = $this->invoice->company->settings->city; + $sede->Provincia = $this->invoice->company->settings->state; + $sede->Nazione = $this->invoice->company->country()->iso_3166_2; + $this->CedentePrestatore->Sede = $sede; + + $this->FatturaElettronicaHeader->CedentePrestatore = $this->CedentePrestatore; + + return $this; + } + + private function setDatiAnagrafici():self + { + $this->DatiAnagrafici->RegimeFiscale = "RF01"; + $this->DatiAnagrafici->Anagrafica = $this->Anagrafica; + $this->DatiAnagrafici->IdFiscaleIVA = $this->IdFiscaleIVA; + + return $this; + } + + private function setClientDetails():self + { + + $datiAnagrafici = new DatiAnagrafici(); + $anagrafica = new Anagrafica(); + $anagrafica->Denominazione = $this->invoice->client->present()->name(); + $datiAnagrafici->Anagrafica = $anagrafica; + + $idFiscale = new IdFiscaleIVA; + $idFiscale->IdCodice= $this->invoice->client->vat_number; + $idFiscale->IdPaese = $this->invoice->client->country->iso_3166_2; + + $datiAnagrafici->IdFiscaleIVA = $idFiscale; + + $sede = new Sede; + $sede->Indirizzo = $this->invoice->client->address1; + $sede->CAP = (int)$this->invoice->client->postal_code; + $sede->Comune = $this->invoice->client->city; + $sede->Provincia = $this->invoice->client->state; + $sede->Nazione = $this->invoice->client->country->iso_3166_2; + + $cessionarioCommittente = new CessionarioCommittente; + $cessionarioCommittente->DatiAnagrafici = $datiAnagrafici; + $cessionarioCommittente->Sede = $sede; + + $this->FatturaElettronicaHeader->CessionarioCommittente = $cessionarioCommittente; + + return $this; + } + + private function setIdFiscaleIVA():self + { + + $this->IdFiscaleIVA->IdPaese = $this->invoice->company->country()->iso_3166_2; + $this->IdFiscaleIVA->IdCodice = $this->invoice->company->settings->vat_number; + + return $this; + } + + //this is a choice, need to switch based on values here. + private function setAnagrafica():self + { + $this->Anagrafica->Denominazione = $this->invoice->company->present()->name(); + + return $this; + } + + private function setDatiGeneraliDocumento():self + { + + $this->DatiGeneraliDocumento->TipoDocumento = "TD01"; + $this->DatiGeneraliDocumento->Divisa = $this->invoice->client->currency()->code; + $this->DatiGeneraliDocumento->Data = new \DateTime($this->invoice->date); + $this->DatiGeneraliDocumento->Numero = $this->invoice->number; + $this->DatiGeneraliDocumento->Causale[] = substr($this->invoice->public_notes ?? '',0, 200); //unsure.. + + return $this; + } + + private function setDatiGenerali():self + { + $this->DatiGenerali->DatiGeneraliDocumento = $this->DatiGeneraliDocumento; + + $this->FatturaElettronicaBody->DatiGenerali = $this->DatiGenerali; + + return $this; + } + + private function setDettaglioPagamento():self + { + + $this->DettaglioPagamento->ModalitaPagamento = "MP01"; //String + $this->DettaglioPagamento->DataScadenzaPagamento = new \DateTime($this->invoice->due_date ?? $this->invoice->date); + $this->DettaglioPagamento->ImportoPagamento = (string) sprintf('%0.2f', $this->invoice->balance); + + $DatiPagamento = new DatiPagamento; + $DatiPagamento->CondizioniPagamento = "TP02"; + $DatiPagamento->DettaglioPagamento[] = $this->DettaglioPagamento; + + $this->FatturaElettronicaBody->DatiPagamento[] = $DatiPagamento; + + return $this; + } + + private function setLineItems(): self + { + + $calc = $this->invoice->calc(); + + $datiBeniServizi = new DatiBeniServizi(); + $tax_rate_level = 0; + //line items + foreach ($this->invoice->line_items as $key => $item) { + + $numero = $key + 1; + $dettaglioLinee = new DettaglioLinee; + $dettaglioLinee->NumeroLinea = "{$numero}"; + $dettaglioLinee->Descrizione = $item->notes ?? 'Descrizione'; + $dettaglioLinee->Quantita = sprintf('%0.2f', $item->quantity); + $dettaglioLinee->PrezzoUnitario = sprintf('%0.2f', $item->cost); + $dettaglioLinee->PrezzoTotale = sprintf('%0.2f', $item->line_total); + $dettaglioLinee->AliquotaIVA = sprintf('%0.2f', $item->tax_rate1); + + + $datiBeniServizi->DettaglioLinee[] = $dettaglioLinee; + + if ($item->tax_rate1 > $tax_rate_level) { + $tax_rate_level = sprintf('%0.2f', $item->tax_rate1); + } + + } + + //totals + if($this->invoice->tax_rate1 > $tax_rate_level) { + $tax_rate_level = sprintf('%0.2f', $this->invoice->tax_rate1); + } + + $subtotal = sprintf('%0.2f', $calc->getSubTotal()); + $taxes = sprintf('%0.2f', $calc->getTotalTaxes()); + + $datiRiepilogo = new DatiRiepilogo; + $datiRiepilogo->AliquotaIVA = "{$tax_rate_level}"; + $datiRiepilogo->ImponibileImporto = "{$subtotal}"; + $datiRiepilogo->Imposta = "{$taxes}"; + $datiRiepilogo->EsigibilitaIVA = "I"; + + $datiBeniServizi->DatiRiepilogo[] = $datiRiepilogo; + + $this->FatturaElettronicaBody->DatiBeniServizi = $datiBeniServizi; + + return $this; + } + + private function setFatturaElettronica(): self + { + + $this->FatturaElettronica->FatturaElettronicaBody[] = $this->FatturaElettronicaBody; + $this->FatturaElettronica->FatturaElettronicaHeader = $this->FatturaElettronicaHeader; + + return $this; + } + + private function init(): self + { + + $this->FatturaElettronica = new FatturaElettronica; + $this->FatturaElettronicaBody = new FatturaElettronicaBody; + $this->FatturaElettronicaHeader = new FatturaElettronicaHeader; + $this->DatiTrasmissione = new DatiTrasmissione; + $this->IdTrasmittente = new IdTrasmittente; + $this->CedentePrestatore = new CedentePrestatore; + $this->DatiAnagrafici = new DatiAnagrafici; + $this->IdFiscaleIVA = new IdFiscaleIVA; + $this->Anagrafica = new Anagrafica; + $this->DatiGeneraliDocumento = new DatiGeneraliDocumento; + $this->DatiGenerali = new DatiGenerali; + $this->DettaglioPagamento = new DettaglioPagamento; + + return $this; + + } +} \ No newline at end of file diff --git a/app/Services/Email/Email.php b/app/Services/Email/Email.php index e56091c909d5..f1bd7ee01d11 100644 --- a/app/Services/Email/Email.php +++ b/app/Services/Email/Email.php @@ -302,7 +302,26 @@ class Email implements ShouldQueue $this->cleanUpMailers(); $this->logMailError($e->getMessage(), $this->company->clients()->first()); return; - } catch (\Exception | \RuntimeException | \Google\Service\Exception $e) { + } + catch(\Symfony\Component\Mailer\Transport\Dsn $e){ + nlog("Incorrectly configured mail server - setting to default mail driver."); + $this->email_object->settings->email_sending_method = 'default'; + return $this->setMailDriver(); + } + catch(\Google\Service\Exception $e){ + + if ($e->getCode() == '429') { + + $message = "Google rate limiting triggered, we are queueing based on Gmail requirements."; + $this->logMailError($message, $this->company->clients()->first()); + sleep(rand(1, 2)); + $this->release(900); + $message = null; + } + + } + + catch (\Exception | \RuntimeException $e) { nlog("Mailer failed with {$e->getMessage()}"); $message = $e->getMessage(); @@ -916,15 +935,20 @@ class Email implements ShouldQueue $guzzle = new \GuzzleHttp\Client(); $url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'; - $token = json_decode($guzzle->post($url, [ - 'form_params' => [ - 'client_id' => config('ninja.o365.client_id'), - 'client_secret' => config('ninja.o365.client_secret'), - 'scope' => 'email Mail.Send offline_access profile User.Read openid', - 'grant_type' => 'refresh_token', - 'refresh_token' => $user->oauth_user_refresh_token - ], - ])->getBody()->getContents()); + try { + $token = json_decode($guzzle->post($url, [ + 'form_params' => [ + 'client_id' => config('ninja.o365.client_id'), + 'client_secret' => config('ninja.o365.client_secret'), + 'scope' => 'email Mail.Send offline_access profile User.Read openid', + 'grant_type' => 'refresh_token', + 'refresh_token' => $user->oauth_user_refresh_token + ], + ])->getBody()->getContents()); + } + catch(\Exception $e){ + nlog("Problem getting new Microsoft token for User: {$user->email}"); + } if ($token) { $user->oauth_user_refresh_token = property_exists($token, 'refresh_token') ? $token->refresh_token : $user->oauth_user_refresh_token; diff --git a/app/Services/Email/EmailDefaults.php b/app/Services/Email/EmailDefaults.php index efcc85660683..718ac515dc6b 100644 --- a/app/Services/Email/EmailDefaults.php +++ b/app/Services/Email/EmailDefaults.php @@ -166,9 +166,9 @@ class EmailDefaults private function setBody(): self { - if (strlen($this->email->email_object->body) > 3) { + if (strlen($this->email->email_object->body ?? '') > 3) { // A Custom Message has been set in the email screen. - } elseif (strlen($this->email->email_object->settings?->{$this->email->email_object->email_template_body}) > 3) { + } elseif (strlen($this->email->email_object->settings?->{$this->email->email_object->email_template_body} ?? '') > 3) { // A body has been saved in the settings. $this->email->email_object->body = $this->email->email_object->settings?->{$this->email->email_object->email_template_body}; } else { diff --git a/app/Services/Payment/DeletePayment.php b/app/Services/Payment/DeletePayment.php index c7d0a63270c6..74973c0f8a46 100644 --- a/app/Services/Payment/DeletePayment.php +++ b/app/Services/Payment/DeletePayment.php @@ -59,6 +59,7 @@ class DeletePayment $this->payment->delete(); BankTransaction::query()->where('payment_id', $this->payment->id)->cursor()->each(function ($bt) { + $bt->invoice_ids = null; $bt->payment_id = null; $bt->status_id = 1; $bt->save(); diff --git a/app/Services/Pdf/PdfMock.php b/app/Services/Pdf/PdfMock.php index 4d7f6a7a50dc..9801d89cc6c3 100644 --- a/app/Services/Pdf/PdfMock.php +++ b/app/Services/Pdf/PdfMock.php @@ -27,11 +27,13 @@ use App\Models\PurchaseOrderInvitation; use App\Models\Quote; use App\Models\QuoteInvitation; use App\Models\Vendor; +use App\Utils\Traits\GeneratesCounter; use App\Utils\Traits\MakesHash; class PdfMock { use MakesHash; + use GeneratesCounter; private mixed $mock; @@ -206,6 +208,20 @@ class PdfMock */ public function getStubVariables(): array { + $entity_pattern = $this->entity_string.'_number_pattern'; + $entity_number = '0029'; + + if (!empty($this->settings->{$entity_pattern})) { + // Although $this->mock is the Invoice/etc entity, + // we need the invitation to get company details. + $entity_number = $this->getFormattedEntityNumber( + $this->mock->invitation, + (int) $entity_number, + $this->settings->counter_padding, + $this->settings->{$entity_pattern}, + ); + } + return ['values' => [ '$client.shipping_postal_code' => '46420', @@ -309,10 +325,10 @@ class PdfMock '$invoice.custom2' => 'custom value', '$invoice.custom3' => 'custom value', '$invoice.custom4' => 'custom value', - '$company.custom1' => $this->company->custom_value1, - '$company.custom2' => $this->company->custom_value2, - '$company.custom3' => $this->company->custom_value3, - '$company.custom4' => $this->company->custom_value4, + '$company.custom1' => $this->company->settings->custom_value1, + '$company.custom2' => $this->company->settings->custom_value2, + '$company.custom3' => $this->company->settings->custom_value3, + '$company.custom4' => $this->company->settings->custom_value4, '$quote.po_number' => 'PO12345', '$company.website' => $this->settings->website, '$balance_due_raw' => '0.00', @@ -325,7 +341,7 @@ class PdfMock '$client.currency' => 'USD', '$company.country' => $this->company->country()?->name ?? 'USA', '$company.address' => $this->company->present()->address(), - '$tech_hero_image' => 'http://ninja.test:8000/images/pdf-designs/tech-hero-image.jpg', + '$tech_hero_image' => 'https://invoicing.co/images/pdf-designs/tech-hero-image.jpg', '$task.tax_name1' => '', '$task.tax_name2' => '', '$task.tax_name3' => '', @@ -370,7 +386,7 @@ class PdfMock '$company.phone' => $this->settings->phone, '$company.state' => $this->settings->state, '$credit.number' => '0029', - '$entity_number' => '0029', + '$entity_number' => $entity_number, '$credit_number' => '0029', '$global_margin' => '6.35mm', '$contact.phone' => '681-480-9828', @@ -456,10 +472,10 @@ class PdfMock '$task.tax' => '', '$discount' => '$0.00', '$subtotal' => '$0.00', - '$company1' => $this->company->custom_value1, - '$company2' => $this->company->custom_value2, - '$company3' => $this->company->custom_value3, - '$company4' => $this->company->custom_value4, + '$company1' => $this->company->settings->custom_value1, + '$company2' => $this->company->settings->custom_value2, + '$company3' => $this->company->settings->custom_value3, + '$company4' => $this->company->settings->custom_value4, '$due_date' => '2022-01-01', '$poNumber' => 'PO-123456', '$quote_no' => '0029', @@ -606,10 +622,10 @@ class PdfMock '$task.description_label' => ctrans('texts.description'), '$product.discount_label' => ctrans('texts.discount'), '$product.quantity_label' => ctrans('texts.quantity'), - '$entity_issued_to_label' => ctrans('texts.quote_issued_to'), + '$entity_issued_to_label' => ctrans("texts.{$this->entity_string}_issued_to") ?: ctrans('texts.quote_issued_to'), '$partial_due_date_label' => ctrans('texts.partial_due_date'), '$invoice.datetime_label' => ctrans('texts.datetime_format_id'), - '$invoice.due_date_label' => ctrans('texts.due_date'), + '$invoice.due_date_label' => ctrans('texts.invoice_due_date'), '$company.address1_label' => ctrans('texts.address1'), '$company.address2_label' => ctrans('texts.address2'), '$total_tax_labels_label' => ctrans('texts.total_taxes'), @@ -704,16 +720,16 @@ class PdfMock '$contact.email_label' => ctrans('texts.email'), '$invoice.taxes_label' => ctrans('texts.taxes'), '$credit_amount_label' => ctrans('texts.credit_amount'), - '$invoice.total_label' => ctrans('texts.total'), + '$invoice.total_label' => ctrans('texts.invoice_total'), '$product.date_label' => ctrans('texts.date'), '$product.item_label' => ctrans('texts.item'), '$public_notes_label' => ctrans('texts.public_notes'), '$entity.terms_label' => ctrans('texts.terms'), '$task.service_label' => ctrans('texts.service'), '$portalButton_label' => '', - '$payment.date_label' => ctrans('texts.date'), + '$payment.date_label' => ctrans('texts.payment_date'), '$client.phone_label' => ctrans('texts.phone'), - '$invoice.date_label' => ctrans('texts.date'), + '$invoice.date_label' => ctrans('texts.invoice_date'), '$client.state_label' => ctrans('texts.state'), '$number_short_label' => '', '$quote.number_label' => ctrans('texts.number'), diff --git a/app/Utils/Traits/GeneratesCounter.php b/app/Utils/Traits/GeneratesCounter.php index 731e39a504ea..39448d02dbb3 100644 --- a/app/Utils/Traits/GeneratesCounter.php +++ b/app/Utils/Traits/GeneratesCounter.php @@ -288,7 +288,6 @@ trait GeneratesCounter */ public function getNextProjectNumber(Project $project): string { - $entity_number = $this->getNextEntityNumber(Project::class, $project->client, false); return $this->replaceUserVars($project, $entity_number); @@ -412,7 +411,7 @@ trait GeneratesCounter * * @param string $pattern * @param string $prefix - * @return string The padded and prefixed entity number + * @return string The padded, prefixed and unique entity number */ private function checkEntityNumber($class, $entity, $counter, $padding, $pattern, $prefix = ''): string { @@ -420,11 +419,7 @@ trait GeneratesCounter $check_counter = 1; do { - $number = $this->padCounter($counter, $padding); - - $number = $this->applyNumberPattern($entity, $number, $pattern); - - $number = $this->prefixCounter($number, $prefix); + $number = $this->getFormattedEntityNumber($entity, $counter, $padding, $pattern); $check = $class::where('company_id', $entity->company_id)->where('number', $number)->withTrashed()->exists(); @@ -443,6 +438,26 @@ trait GeneratesCounter return $number; } + /** + * Formats the entity number according to pattern, prefix and padding. + * + * @param Collection $entity The entity ie App\Models\Client, Invoice, Quote etc + * @param int $counter The counter + * @param int $padding The padding + * @param string $pattern + * @param string $prefix + * + * @return string The padded and prefixed entity number + */ + public function getFormattedEntityNumber($entity, $counter, $padding, $pattern, $prefix = ''): string + { + $number = $this->padCounter($counter, $padding); + + $number = $this->applyNumberPattern($entity, $number, $pattern); + + return $this->prefixCounter($number, $prefix); + } + /*Check if a number is available for use. */ public function checkNumberAvailable($class, $entity, $number): bool { diff --git a/composer.json b/composer.json index 06738df83297..801f0decb20a 100644 --- a/composer.json +++ b/composer.json @@ -31,7 +31,7 @@ ], "type": "project", "require": { - "php": "^8.1|^8.2", + "php": "^8.2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -56,7 +56,6 @@ "hashids/hashids": "^4.0", "hedii/laravel-gelf-logger": "^8", "horstoeko/zugferd": "^1", - "horstoeko/orderx": "^1", "imdhemy/laravel-purchases": "^1.7", "intervention/image": "^2.5", "invoiceninja/inspector": "^2.0", @@ -87,7 +86,6 @@ "sentry/sentry-laravel": "^3", "setasign/fpdf": "^1.8", "setasign/fpdi": "^2.3", - "shopify/shopify-api": "^4.3", "socialiteproviders/apple": "dev-master", "socialiteproviders/microsoft": "^4.1", "spatie/laravel-data": "^3.5", @@ -103,12 +101,13 @@ "twig/twig": "^3", "twilio/sdk": "^6.40", "webpatser/laravel-countries": "dev-master#75992ad", - "wepay/php-sdk": "^0.3", "wildbit/postmark-php": "^4.0", - "hyvor/php-json-exporter": "^0.0.3" + "hyvor/php-json-exporter": "^0.0.3", + "invoiceninja/einvoice": "dev-main", + "horstoeko/orderx": "dev-master" }, "require-dev": { - "php": "^8.1|^8.2", + "php": "^8.2", "barryvdh/laravel-debugbar": "^3.6", "barryvdh/laravel-ide-helper": "^2.13", "beyondcode/laravel-query-detector": "^1.8", @@ -120,7 +119,7 @@ "mockery/mockery": "^1.4.4", "nunomaduro/collision": "^7.0", "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^10.0", + "phpunit/phpunit": "^10", "spatie/laravel-ignition": "^2.0", "spaze/phpstan-stripe": "^3.0" }, @@ -184,6 +183,10 @@ { "type":"vcs", "url": "https://github.com/invoiceninja/einvoice" + }, + { + "type": "vcs", + "url": "https://github.com/turbo124/orderx" } ], "minimum-stability": "dev", diff --git a/composer.lock b/composer.lock index ab4aa4eec903..9fa157960e63 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": "6904626bbe465492796c27cd86ad4d2c", + "content-hash": "4a46c646e01374b4a5aaff1875fa9975", "packages": [ { "name": "adrienrn/php-mimetyper", @@ -959,16 +959,16 @@ }, { "name": "apimatic/core", - "version": "0.3.9", + "version": "0.3.10", "source": { "type": "git", "url": "https://github.com/apimatic/core-lib-php.git", - "reference": "faea523afc30a9fa5ed2b08d929b5a14ba3c00b1" + "reference": "8c111790b8d6f67812ba651ebb9513b5233863d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/apimatic/core-lib-php/zipball/faea523afc30a9fa5ed2b08d929b5a14ba3c00b1", - "reference": "faea523afc30a9fa5ed2b08d929b5a14ba3c00b1", + "url": "https://api.github.com/repos/apimatic/core-lib-php/zipball/8c111790b8d6f67812ba651ebb9513b5233863d0", + "reference": "8c111790b8d6f67812ba651ebb9513b5233863d0", "shasum": "" }, "require": { @@ -1007,9 +1007,9 @@ ], "support": { "issues": "https://github.com/apimatic/core-lib-php/issues", - "source": "https://github.com/apimatic/core-lib-php/tree/0.3.9" + "source": "https://github.com/apimatic/core-lib-php/tree/0.3.10" }, - "time": "2024-05-09T08:01:58+00:00" + "time": "2024-05-30T06:32:24+00:00" }, { "name": "apimatic/core-interfaces", @@ -1226,16 +1226,16 @@ }, { "name": "authorizenet/authorizenet", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/AuthorizeNet/sdk-php.git", - "reference": "a3e76f96f674d16e892f87c58bedb99dada4b067" + "reference": "e1acf55c9cb22bef1852b1e494502973ade11cce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AuthorizeNet/sdk-php/zipball/a3e76f96f674d16e892f87c58bedb99dada4b067", - "reference": "a3e76f96f674d16e892f87c58bedb99dada4b067", + "url": "https://api.github.com/repos/AuthorizeNet/sdk-php/zipball/e1acf55c9cb22bef1852b1e494502973ade11cce", + "reference": "e1acf55c9cb22bef1852b1e494502973ade11cce", "shasum": "" }, "require": { @@ -1263,9 +1263,9 @@ ], "support": { "issues": "https://github.com/AuthorizeNet/sdk-php/issues", - "source": "https://github.com/AuthorizeNet/sdk-php/tree/2.0.2" + "source": "https://github.com/AuthorizeNet/sdk-php/tree/2.0.3" }, - "time": "2021-03-31T18:22:14+00:00" + "time": "2024-05-29T17:33:13+00:00" }, { "name": "awobaz/compoships", @@ -1385,16 +1385,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.308.3", + "version": "3.308.6", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "7fa0625056fa1fcf6732f89ba37b3f630d78de59" + "reference": "d119265faba226b3fab1514b6fa27a2986b91453" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7fa0625056fa1fcf6732f89ba37b3f630d78de59", - "reference": "7fa0625056fa1fcf6732f89ba37b3f630d78de59", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d119265faba226b3fab1514b6fa27a2986b91453", + "reference": "d119265faba226b3fab1514b6fa27a2986b91453", "shasum": "" }, "require": { @@ -1474,9 +1474,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.308.3" + "source": "https://github.com/aws/aws-sdk-php/tree/3.308.6" }, - "time": "2024-05-24T18:29:40+00:00" + "time": "2024-05-30T18:08:56+00:00" }, { "name": "bacon/bacon-qr-code", @@ -3602,16 +3602,16 @@ }, { "name": "google/apiclient-services", - "version": "v0.356.0", + "version": "v0.357.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "8e22b0a6f661f2db3f99abb6ee5a1dcf28d370e7" + "reference": "c84b0ac2191d56d40d43bc18e62b37a2781040a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/8e22b0a6f661f2db3f99abb6ee5a1dcf28d370e7", - "reference": "8e22b0a6f661f2db3f99abb6ee5a1dcf28d370e7", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/c84b0ac2191d56d40d43bc18e62b37a2781040a9", + "reference": "c84b0ac2191d56d40d43bc18e62b37a2781040a9", "shasum": "" }, "require": { @@ -3640,9 +3640,9 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.356.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.357.0" }, - "time": "2024-05-18T01:10:18+00:00" + "time": "2024-05-27T01:02:20+00:00" }, { "name": "google/auth", @@ -4466,16 +4466,16 @@ }, { "name": "horstoeko/orderx", - "version": "v1.0.21", + "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/horstoeko/orderx.git", - "reference": "eaa2bd74b03c6845a38ef4611501cc4e70adbef7" + "url": "https://github.com/turbo124/orderx.git", + "reference": "92b5f713ae3d07ba409f38218e1f0b131ad5fb05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/horstoeko/orderx/zipball/eaa2bd74b03c6845a38ef4611501cc4e70adbef7", - "reference": "eaa2bd74b03c6845a38ef4611501cc4e70adbef7", + "url": "https://api.github.com/repos/turbo124/orderx/zipball/92b5f713ae3d07ba409f38218e1f0b131ad5fb05", + "reference": "92b5f713ae3d07ba409f38218e1f0b131ad5fb05", "shasum": "" }, "require": { @@ -4488,7 +4488,7 @@ "setasign/fpdf": "^1", "setasign/fpdi": "^2", "smalot/pdfparser": "^0", - "symfony/validator": "^5|^6", + "symfony/validator": "^5|^6|^7", "symfony/yaml": "^5|^6" }, "require-dev": { @@ -4501,13 +4501,56 @@ "sebastian/phpcpd": "^6", "squizlabs/php_codesniffer": "^3" }, + "default-branch": true, "type": "package", "autoload": { "psr-4": { "horstoeko\\orderx\\": "src" } }, - "notification-url": "https://packagist.org/downloads/", + "autoload-dev": { + "psr-4": { + "horstoeko\\orderx\\tests\\": "tests" + } + }, + "scripts": { + "tests": [ + "./vendor/bin/phpunit ./tests/" + ], + "testsreal": [ + "./vendor/bin/phpunit --configuration ./build/phpunit.xml" + ], + "phpcs": [ + "./vendor/bin/phpcs --standard=./build/phpcsrules.xml --extensions=php --ignore=autoload.php ./src ./tests" + ], + "phpcs12": [ + "./vendor/bin/phpcs --standard=./build/phpcsrules_psr12.xml --extensions=php --ignore=autoload.php ./src ./tests" + ], + "phpcbf": [ + "./vendor/bin/phpcbf -q ./src ./tests" + ], + "phpcbf1": [ + "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr1.xml -q ./src ./tests" + ], + "phpcbf2": [ + "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr2.xml -q ./src ./tests" + ], + "phpcbf12": [ + "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr12.xml -q ./src ./tests" + ], + "phpcbfsq": [ + "./vendor/bin/phpcbf --standard=./build/phpcsrules_squiz.xml -q ./src ./tests" + ], + "phpstan": [ + "./vendor/bin/phpstan analyze -c ./build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --xdebug" + ], + "phpstan_cs": [ + "./vendor/bin/phpstan analyze -c ./build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle --xdebug" + ], + "makedoc": [ + "phing -f ./build.xml projectdoc" + ] + }, "license": [ "MIT" ], @@ -4527,10 +4570,9 @@ "orderx" ], "support": { - "issues": "https://github.com/horstoeko/orderx/issues", - "source": "https://github.com/horstoeko/orderx/tree/v1.0.21" + "source": "https://github.com/turbo124/orderx/tree/master" }, - "time": "2024-04-18T04:14:03+00:00" + "time": "2024-05-26T21:58:53+00:00" }, { "name": "horstoeko/stringmanagement", @@ -4588,16 +4630,16 @@ }, { "name": "horstoeko/zugferd", - "version": "v1.0.47", + "version": "v1.0.49", "source": { "type": "git", "url": "https://github.com/horstoeko/zugferd.git", - "reference": "7a5a8b7bb44f7aebfd66af112662c30383f31dd9" + "reference": "bc4f9180c455deae20fb0281b519a550cbfbd1ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/7a5a8b7bb44f7aebfd66af112662c30383f31dd9", - "reference": "7a5a8b7bb44f7aebfd66af112662c30383f31dd9", + "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/bc4f9180c455deae20fb0281b519a550cbfbd1ea", + "reference": "bc4f9180c455deae20fb0281b519a550cbfbd1ea", "shasum": "" }, "require": { @@ -4657,9 +4699,9 @@ ], "support": { "issues": "https://github.com/horstoeko/zugferd/issues", - "source": "https://github.com/horstoeko/zugferd/tree/v1.0.47" + "source": "https://github.com/horstoeko/zugferd/tree/v1.0.49" }, - "time": "2024-05-23T03:12:53+00:00" + "time": "2024-05-30T14:58:49+00:00" }, { "name": "http-interop/http-factory-guzzle", @@ -5028,6 +5070,59 @@ ], "time": "2022-05-21T17:30:32+00:00" }, + { + "name": "invoiceninja/einvoice", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/invoiceninja/einvoice.git", + "reference": "6bc18a07aa1792277950388422550e1d4ddf042b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/invoiceninja/einvoice/zipball/6bc18a07aa1792277950388422550e1d4ddf042b", + "reference": "6bc18a07aa1792277950388422550e1d4ddf042b", + "shasum": "" + }, + "require": { + "illuminate/collections": "^10.48", + "phpdocumentor/reflection-docblock": "^5.4", + "sabre/xml": "^4.0", + "symfony/property-access": "^7", + "symfony/property-info": "^7.0", + "symfony/serializer": "^7", + "symfony/validator": "^7" + }, + "require-dev": { + "milo/schematron": "^1.0", + "nette/php-generator": "^4.1", + "phpstan/phpstan": "^1.11", + "phpunit/phpunit": "^10.5", + "symfony/console": "^7" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Invoiceninja\\Einvoice\\": "src/" + } + }, + "license": [ + "Elastic-2.0" + ], + "authors": [ + { + "name": "David Bomba", + "email": "turbo124@gmail.com" + } + ], + "description": "Schema for einvoicing standards", + "support": { + "source": "https://github.com/invoiceninja/einvoice/tree/main", + "issues": "https://github.com/invoiceninja/einvoice/issues" + }, + "time": "2024-05-31T02:34:14+00:00" + }, { "name": "invoiceninja/inspector", "version": "v2.0", @@ -5589,16 +5684,16 @@ }, { "name": "laravel/framework", - "version": "v10.48.11", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "afdc2b03bd8d126446583da5414d659491aa4f54" + "reference": "590afea38e708022662629fbf5184351fa82cf08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/afdc2b03bd8d126446583da5414d659491aa4f54", - "reference": "afdc2b03bd8d126446583da5414d659491aa4f54", + "url": "https://api.github.com/repos/laravel/framework/zipball/590afea38e708022662629fbf5184351fa82cf08", + "reference": "590afea38e708022662629fbf5184351fa82cf08", "shasum": "" }, "require": { @@ -5792,20 +5887,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-05-21T17:53:51+00:00" + "time": "2024-05-28T15:46:19+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.22", + "version": "v0.1.23", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "37f94de71758dbfbccc9d299b0e5eb76e02a40f5" + "reference": "9bc4df7c699b0452c6b815e64a2d84b6d7f99400" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/37f94de71758dbfbccc9d299b0e5eb76e02a40f5", - "reference": "37f94de71758dbfbccc9d299b0e5eb76e02a40f5", + "url": "https://api.github.com/repos/laravel/prompts/zipball/9bc4df7c699b0452c6b815e64a2d84b6d7f99400", + "reference": "9bc4df7c699b0452c6b815e64a2d84b6d7f99400", "shasum": "" }, "require": { @@ -5848,9 +5943,9 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.22" + "source": "https://github.com/laravel/prompts/tree/v0.1.23" }, - "time": "2024-05-10T19:22:18+00:00" + "time": "2024-05-27T13:53:20+00:00" }, { "name": "laravel/serializable-closure", @@ -6176,34 +6271,34 @@ }, { "name": "lcobucci/clock", - "version": "3.0.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc" + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/039ef98c6b57b101d10bd11d8fdfda12cbd996dc", - "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0", + "php": "~8.2.0 || ~8.3.0", "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "infection/infection": "^0.26", - "lcobucci/coding-standard": "^9.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.27" + "infection/infection": "^0.27", + "lcobucci/coding-standard": "^11.0.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^10.2.3" }, "type": "library", "autoload": { @@ -6224,7 +6319,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/3.0.0" + "source": "https://github.com/lcobucci/clock/tree/3.2.0" }, "funding": [ { @@ -6236,7 +6331,7 @@ "type": "patreon" } ], - "time": "2022-12-19T15:00:24+00:00" + "time": "2023-11-17T17:00:27+00:00" }, { "name": "lcobucci/jwt", @@ -9480,6 +9575,70 @@ }, "time": "2020-06-27T09:03:43+00:00" }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.4.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" + }, + "time": "2024-05-21T05:55:05+00:00" + }, { "name": "phpdocumentor/type-resolver", "version": "1.8.2", @@ -9830,16 +9989,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.29.0", + "version": "1.29.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc" + "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc", - "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4", + "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4", "shasum": "" }, "require": { @@ -9871,9 +10030,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1" }, - "time": "2024-05-06T12:04:23+00:00" + "time": "2024-05-31T08:52:43+00:00" }, { "name": "pragmarx/google2fa", @@ -11534,69 +11693,6 @@ ], "time": "2023-12-11T16:03:32+00:00" }, - { - "name": "shopify/shopify-api", - "version": "v4.3.0", - "source": { - "type": "git", - "url": "https://github.com/Shopify/shopify-api-php.git", - "reference": "80cde593a69acb9b9095235fa8f7748e9389294c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Shopify/shopify-api-php/zipball/80cde593a69acb9b9095235fa8f7748e9389294c", - "reference": "80cde593a69acb9b9095235fa8f7748e9389294c", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^2.0", - "ext-json": "*", - "firebase/php-jwt": "^5.2 || ^6.2", - "guzzlehttp/guzzle": "^7.0", - "php": "^7.4 || ^8.0 || ^8.1", - "psr/http-client": "^1.0", - "psr/log": "^1.1 || ^2.0 || ^3.0", - "ramsey/uuid": "^4.1" - }, - "require-dev": { - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Shopify\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Shopify Inc.", - "email": "dev-tools-education@shopify.com" - } - ], - "description": "Shopify API Library for PHP", - "keywords": [ - "Storefront API", - "admin api", - "app", - "graphql", - "jwt", - "node", - "rest", - "shopify", - "webhook" - ], - "support": { - "issues": "https://github.com/Shopify/shopify-api-php/issues", - "source": "https://github.com/Shopify/shopify-api-php/tree/v4.3.0" - }, - "time": "2023-04-12T15:42:26+00:00" - }, { "name": "smalot/pdfparser", "version": "v0.19.0", @@ -12421,20 +12517,20 @@ }, { "name": "symfony/css-selector", - "version": "v6.4.7", + "version": "v7.1.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "1c5d5c2103c3762aff27a27e1e2409e30a79083b" + "reference": "843f2f7ac5e4c5bf0ec77daef23ca6d4d8922adc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c5d5c2103c3762aff27a27e1e2409e30a79083b", - "reference": "1c5d5c2103c3762aff27a27e1e2409e30a79083b", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/843f2f7ac5e4c5bf0ec77daef23ca6d4d8922adc", + "reference": "843f2f7ac5e4c5bf0ec77daef23ca6d4d8922adc", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -12466,7 +12562,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.7" + "source": "https://github.com/symfony/css-selector/tree/v7.1.0" }, "funding": [ { @@ -12482,7 +12578,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/deprecation-contracts", @@ -12628,24 +12724,24 @@ }, { "name": "symfony/event-dispatcher", - "version": "v6.4.7", + "version": "v7.1.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d84384f3f67de3cb650db64d685d70395dacfc3f" + "reference": "522d2772d6c7bab843b0c52466dc7844622bacc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d84384f3f67de3cb650db64d685d70395dacfc3f", - "reference": "d84384f3f67de3cb650db64d685d70395dacfc3f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/522d2772d6c7bab843b0c52466dc7844622bacc2", + "reference": "522d2772d6c7bab843b0c52466dc7844622bacc2", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -12654,13 +12750,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -12688,7 +12784,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.7" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.0" }, "funding": [ { @@ -12704,7 +12800,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -13274,25 +13370,28 @@ }, { "name": "symfony/intl", - "version": "v6.4.7", + "version": "v7.1.0", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "9ed7dfeeba5759b61798358100bb63230509b337" + "reference": "1b8974c7ff07c61d4acf0e873e34dfb75190b2bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/9ed7dfeeba5759b61798358100bb63230509b337", - "reference": "9ed7dfeeba5759b61798358100bb63230509b337", + "url": "https://api.github.com/repos/symfony/intl/zipball/1b8974c7ff07c61d4acf0e873e34dfb75190b2bb", + "reference": "1b8974c7ff07c61d4acf0e873e34dfb75190b2bb", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/string": "<7.1" }, "require-dev": { - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -13337,7 +13436,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v6.4.7" + "source": "https://github.com/symfony/intl/tree/v7.1.0" }, "funding": [ { @@ -13353,7 +13452,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/mailer", @@ -13591,20 +13690,20 @@ }, { "name": "symfony/options-resolver", - "version": "v6.4.7", + "version": "v7.1.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "9a3c92b490716ba6771f5beced13c6eda7183eed" + "reference": "9564f64c16f99e29f252eafc642965e8fcb755ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9a3c92b490716ba6771f5beced13c6eda7183eed", - "reference": "9a3c92b490716ba6771f5beced13c6eda7183eed", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9564f64c16f99e29f252eafc642965e8fcb755ce", + "reference": "9564f64c16f99e29f252eafc642965e8fcb755ce", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -13638,7 +13737,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.7" + "source": "https://github.com/symfony/options-resolver/tree/v7.1.0" }, "funding": [ { @@ -13654,7 +13753,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/polyfill-ctype", @@ -14582,6 +14681,166 @@ ], "time": "2024-04-18T09:22:46+00:00" }, + { + "name": "symfony/property-access", + "version": "v7.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "1e8c1e6ac1b19cf945d8094a0ee50296872c4cb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/1e8c1e6ac1b19cf945d8094a0ee50296872c4cb2", + "reference": "1e8c1e6ac1b19cf945d8094a0ee50296872c4cb2", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/property-info": "^6.4|^7.0" + }, + "require-dev": { + "symfony/cache": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v7.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/property-info", + "version": "v7.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "b10cb8cf0179aec96769df2affb881ecfc293f79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/b10cb8cf0179aec96769df2affb881ecfc293f79", + "reference": "b10cb8cf0179aec96769df2affb881ecfc293f79", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/string": "^6.4|^7.0", + "symfony/type-info": "^7.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^5.2", + "phpstan/phpdoc-parser": "^1.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v7.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-30T12:09:55+00:00" + }, { "name": "symfony/psr-http-message-bridge", "version": "v2.3.1", @@ -14754,6 +15013,103 @@ ], "time": "2024-04-18T09:22:46+00:00" }, + { + "name": "symfony/serializer", + "version": "v7.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "972eb05320d06d07399b71b05e6da9032c865f1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/972eb05320d06d07399b71b05e6da9032c865f1d", + "reference": "972eb05320d06d07399b71b05e6da9032c865f1d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/uid": "<6.4", + "symfony/validator": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "seld/jsonlint": "^1.10", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/type-info": "^7.1", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/serializer/tree/v7.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-21T15:59:31+00:00" + }, { "name": "symfony/service-contracts", "version": "v3.5.0", @@ -14839,20 +15195,20 @@ }, { "name": "symfony/string", - "version": "v6.4.7", + "version": "v7.1.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69" + "reference": "6f41b185e742737917e6f2e3eca37767fba5f17a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ffeb9591c61f65a68d47f77d12b83fa530227a69", - "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69", + "url": "https://api.github.com/repos/symfony/string/zipball/6f41b185e742737917e6f2e3eca37767fba5f17a", + "reference": "6f41b185e742737917e6f2e3eca37767fba5f17a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -14862,11 +15218,12 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -14905,7 +15262,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.7" + "source": "https://github.com/symfony/string/tree/v7.1.0" }, "funding": [ { @@ -14921,7 +15278,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-05-17T10:55:18+00:00" }, { "name": "symfony/translation", @@ -15096,6 +15453,88 @@ ], "time": "2024-04-18T09:32:20+00:00" }, + { + "name": "symfony/type-info", + "version": "v7.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/type-info.git", + "reference": "b429d0710588fc396ba5def5329cf637d9861f9f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/type-info/zipball/b429d0710588fc396ba5def5329cf637d9861f9f", + "reference": "b429d0710588fc396ba5def5329cf637d9861f9f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0" + }, + "conflict": { + "phpstan/phpdoc-parser": "<1.0", + "symfony/dependency-injection": "<6.4", + "symfony/property-info": "<6.4" + }, + "require-dev": { + "phpstan/phpdoc-parser": "^1.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\TypeInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts PHP types information.", + "homepage": "https://symfony.com", + "keywords": [ + "PHPStan", + "phpdoc", + "symfony", + "type" + ], + "support": { + "source": "https://github.com/symfony/type-info/tree/v7.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-02T10:19:13+00:00" + }, { "name": "symfony/uid", "version": "v6.4.7", @@ -15172,20 +15611,20 @@ }, { "name": "symfony/validator", - "version": "v6.4.7", + "version": "v7.1.0", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "4761a08d161d823ec281151ade0905547e0502a7" + "reference": "ffcc8c56502f6adaeaf6307aef5b98b53a8d0326" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/4761a08d161d823ec281151ade0905547e0502a7", - "reference": "4761a08d161d823ec281151ade0905547e0502a7", + "url": "https://api.github.com/repos/symfony/validator/zipball/ffcc8c56502f6adaeaf6307aef5b98b53a8d0326", + "reference": "ffcc8c56502f6adaeaf6307aef5b98b53a8d0326", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", @@ -15193,34 +15632,34 @@ "symfony/translation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.13", "doctrine/lexer": "<1.1", - "symfony/dependency-injection": "<5.4", - "symfony/expression-language": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/intl": "<5.4", - "symfony/property-info": "<5.4", - "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", - "symfony/yaml": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.13|^2", "egulias/email-validator": "^2.1.10|^3|^4", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/type-info": "^7.1", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -15248,7 +15687,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.7" + "source": "https://github.com/symfony/validator/tree/v7.1.0" }, "funding": [ { @@ -15264,7 +15703,7 @@ "type": "tidelift" } ], - "time": "2024-04-28T10:38:38+00:00" + "time": "2024-05-21T15:59:31+00:00" }, { "name": "symfony/var-dumper", @@ -16017,57 +16456,6 @@ }, "time": "2023-02-08T11:09:34+00:00" }, - { - "name": "wepay/php-sdk", - "version": "0.3.1", - "source": { - "type": "git", - "url": "https://github.com/wepay/PHP-SDK.git", - "reference": "2a89ceb2954d117d082f869d3bfcb7864e6c2a7d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wepay/PHP-SDK/zipball/2a89ceb2954d117d082f869d3bfcb7864e6c2a7d", - "reference": "2a89ceb2954d117d082f869d3bfcb7864e6c2a7d", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "wepay.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "WePay", - "email": "api@wepay.com" - } - ], - "description": "WePay APIv2 SDK for PHP", - "keywords": [ - "payment", - "sdk", - "wepay" - ], - "support": { - "issues": "https://github.com/wepay/PHP-SDK/issues", - "source": "https://github.com/wepay/PHP-SDK/tree/master" - }, - "time": "2017-01-21T07:03:26+00:00" - }, { "name": "wildbit/postmark-php", "version": "v4.0.5", @@ -16400,16 +16788,16 @@ }, { "name": "brianium/paratest", - "version": "v7.3.1", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "551f46f52a93177d873f3be08a1649ae886b4a30" + "reference": "bfe354e71aca261cf37bf70bf47791081100000d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/551f46f52a93177d873f3be08a1649ae886b4a30", - "reference": "551f46f52a93177d873f3be08a1649ae886b4a30", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/bfe354e71aca261cf37bf70bf47791081100000d", + "reference": "bfe354e71aca261cf37bf70bf47791081100000d", "shasum": "" }, "require": { @@ -16417,28 +16805,27 @@ "ext-pcre": "*", "ext-reflection": "*", "ext-simplexml": "*", - "fidry/cpu-core-counter": "^0.5.1 || ^1.0.0", - "jean85/pretty-package-versions": "^2.0.5", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0", - "phpunit/php-code-coverage": "^10.1.7", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-timer": "^6.0", - "phpunit/phpunit": "^10.4.2", - "sebastian/environment": "^6.0.1", - "symfony/console": "^6.3.4 || ^7.0.0", - "symfony/process": "^6.3.4 || ^7.0.0" + "fidry/cpu-core-counter": "^1.1.0", + "jean85/pretty-package-versions": "^2.0.6", + "php": "~8.2.0 || ~8.3.0", + "phpunit/php-code-coverage": "^10.1.14 || ^11.0.3", + "phpunit/php-file-iterator": "^4.1.0 || ^5.0.0", + "phpunit/php-timer": "^6.0.0 || ^7.0.0", + "phpunit/phpunit": "^10.5.20 || ^11.1.3", + "sebastian/environment": "^6.1.0 || ^7.1.0", + "symfony/console": "^6.4.7 || ^7.0.7", + "symfony/process": "^6.4.7 || ^7.0.7" }, "require-dev": { "doctrine/coding-standard": "^12.0.0", "ext-pcov": "*", "ext-posix": "*", - "infection/infection": "^0.27.6", - "phpstan/phpstan": "^1.10.40", + "phpstan/phpstan": "^1.10.67", "phpstan/phpstan-deprecation-rules": "^1.1.4", - "phpstan/phpstan-phpunit": "^1.3.15", - "phpstan/phpstan-strict-rules": "^1.5.2", - "squizlabs/php_codesniffer": "^3.7.2", - "symfony/filesystem": "^6.3.1 || ^7.0.0" + "phpstan/phpstan-phpunit": "^1.3.16", + "phpstan/phpstan-strict-rules": "^1.5.5", + "squizlabs/php_codesniffer": "^3.9.2", + "symfony/filesystem": "^6.4.3 || ^7.0.7" }, "bin": [ "bin/paratest", @@ -16479,7 +16866,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.3.1" + "source": "https://github.com/paratestphp/paratest/tree/v7.4.4" }, "funding": [ { @@ -16491,7 +16878,7 @@ "type": "paypal" } ], - "time": "2023-10-31T09:24:17+00:00" + "time": "2024-05-03T13:01:49+00:00" }, { "name": "clue/ndjson-react", @@ -16632,16 +17019,16 @@ }, { "name": "composer/pcre", - "version": "3.1.3", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" + "reference": "04229f163664973f68f38f6f73d917799168ef24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", + "reference": "04229f163664973f68f38f6f73d917799168ef24", "shasum": "" }, "require": { @@ -16683,7 +17070,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.3" + "source": "https://github.com/composer/pcre/tree/3.1.4" }, "funding": [ { @@ -16699,7 +17086,7 @@ "type": "tidelift" } ], - "time": "2024-03-19T10:26:25+00:00" + "time": "2024-05-27T13:40:54+00:00" }, { "name": "composer/semver", @@ -17029,16 +17416,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.57.2", + "version": "v3.58.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "22f7f3145606df92b02fb1bd22c30abfce956d3c" + "reference": "04e9424025677a86914b9a4944dbbf4060bb0aff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/22f7f3145606df92b02fb1bd22c30abfce956d3c", - "reference": "22f7f3145606df92b02fb1bd22c30abfce956d3c", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/04e9424025677a86914b9a4944dbbf4060bb0aff", + "reference": "04e9424025677a86914b9a4944dbbf4060bb0aff", "shasum": "" }, "require": { @@ -17117,7 +17504,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.57.2" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.58.1" }, "funding": [ { @@ -17125,7 +17512,7 @@ "type": "github" } ], - "time": "2024-05-20T20:41:57+00:00" + "time": "2024-05-29T16:39:07+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -17239,16 +17626,16 @@ }, { "name": "larastan/larastan", - "version": "v2.9.6", + "version": "v2.9.7", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f" + "reference": "5c805f636095cc2e0b659e3954775cf8f1dad1bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f", - "reference": "93d5b95d2e29cdb8203363d44abfdbc0bc7ef57f", + "url": "https://api.github.com/repos/larastan/larastan/zipball/5c805f636095cc2e0b659e3954775cf8f1dad1bb", + "reference": "5c805f636095cc2e0b659e3954775cf8f1dad1bb", "shasum": "" }, "require": { @@ -17262,7 +17649,7 @@ "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", "php": "^8.0.2", "phpmyadmin/sql-parser": "^5.9.0", - "phpstan/phpstan": "^1.10.66" + "phpstan/phpstan": "^1.11.1" }, "require-dev": { "doctrine/coding-standard": "^12.0", @@ -17317,7 +17704,7 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.6" + "source": "https://github.com/larastan/larastan/tree/v2.9.7" }, "funding": [ { @@ -17337,7 +17724,7 @@ "type": "patreon" } ], - "time": "2024-05-09T11:53:26+00:00" + "time": "2024-05-27T18:33:26+00:00" }, { "name": "maximebf/debugbar", @@ -19911,16 +20298,16 @@ }, { "name": "spatie/ignition", - "version": "1.14.1", + "version": "1.14.2", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "c23cc018c5f423d2f413b99f84655fceb6549811" + "reference": "5e11c11f675bb5251f061491a493e04a1a571532" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/c23cc018c5f423d2f413b99f84655fceb6549811", - "reference": "c23cc018c5f423d2f413b99f84655fceb6549811", + "url": "https://api.github.com/repos/spatie/ignition/zipball/5e11c11f675bb5251f061491a493e04a1a571532", + "reference": "5e11c11f675bb5251f061491a493e04a1a571532", "shasum": "" }, "require": { @@ -19990,7 +20377,7 @@ "type": "github" } ], - "time": "2024-05-03T15:56:16+00:00" + "time": "2024-05-29T08:10:20+00:00" }, { "name": "spatie/laravel-ignition", @@ -20224,20 +20611,20 @@ }, { "name": "symfony/stopwatch", - "version": "v6.4.7", + "version": "v7.1.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "ffec95ba269e541eb2232126c0c20f83086b5c68" + "reference": "13c750a45ac43c45f45d944d22499768aa1b72d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/ffec95ba269e541eb2232126c0c20f83086b5c68", - "reference": "ffec95ba269e541eb2232126c0c20f83086b5c68", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/13c750a45ac43c45f45d944d22499768aa1b72d8", + "reference": "13c750a45ac43c45f45d944d22499768aa1b72d8", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -20266,7 +20653,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.4.7" + "source": "https://github.com/symfony/stopwatch/tree/v7.1.0" }, "funding": [ { @@ -20282,7 +20669,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "theseer/tokenizer", @@ -20339,18 +20726,20 @@ "minimum-stability": "dev", "stability-flags": { "socialiteproviders/apple": 20, - "webpatser/laravel-countries": 20 + "webpatser/laravel-countries": 20, + "invoiceninja/einvoice": 20, + "horstoeko/orderx": 20 }, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.1|^8.2", + "php": "^8.2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*" }, "platform-dev": { - "php": "^8.1|^8.2" + "php": "^8.2" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/config/ninja.php b/config/ninja.php index 1543dfb44c9f..0d4f30250d7c 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -54,17 +54,14 @@ return [ 'hosted' => env('TERMS_OF_SERVICE_URL', 'https://www.invoiceninja.com/terms/'), 'selfhost' => env('TERMS_OF_SERVICE_URL', 'https://www.invoiceninja.com/self-hosting-terms-service/'), ], - 'privacy_policy_url' => [ 'hosted' => env('PRIVACY_POLICY_URL', 'https://www.invoiceninja.com/privacy-policy/'), 'selfhost' => env('PRIVACY_POLICY_URL', 'https://www.invoiceninja.com/self-hosting-privacy-data-control/'), ], - 'db' => [ 'multi_db_enabled' => env('MULTI_DB_ENABLED', false), 'default' => env('DB_CONNECTION', 'mysql'), ], - 'i18n' => [ 'timezone_id' => env('DEFAULT_TIMEZONE', 1), 'country_id' => env('DEFAULT_COUNTRY', 840), // United Stated @@ -79,7 +76,6 @@ return [ 'first_day_of_week' => env('FIRST_DATE_OF_WEEK', 0), 'first_month_of_year' => env('FIRST_MONTH_OF_YEAR', '2000-01-01'), ], - 'testvars' => [ 'username' => 'user@example.com', 'clientname' => 'client@example.com', diff --git a/database/factories/ClientFactory.php b/database/factories/ClientFactory.php index 3b0463502f76..f979c8d7d30e 100644 --- a/database/factories/ClientFactory.php +++ b/database/factories/ClientFactory.php @@ -13,6 +13,7 @@ namespace Database\Factories; use App\DataMapper\ClientSettings; use Illuminate\Database\Eloquent\Factories\Factory; +use Str; class ClientFactory extends Factory { @@ -49,6 +50,7 @@ class ClientFactory extends Factory 'shipping_country_id' => 4, 'settings' => ClientSettings::defaults(), 'client_hash' => \Illuminate\Support\Str::random(40), + 'routing_id' => rand(100000,200000), ]; } } diff --git a/database/migrations/2024_05_26_210407_2024_05_28_kwd_precision.php b/database/migrations/2024_05_26_210407_2024_05_28_kwd_precision.php new file mode 100644 index 000000000000..779abac80f41 --- /dev/null +++ b/database/migrations/2024_05_26_210407_2024_05_28_kwd_precision.php @@ -0,0 +1,28 @@ +precision = 3; + $currency->save(); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // + } +}; diff --git a/database/seeders/CurrenciesSeeder.php b/database/seeders/CurrenciesSeeder.php index 1c69e5771e7b..90c900835bdc 100644 --- a/database/seeders/CurrenciesSeeder.php +++ b/database/seeders/CurrenciesSeeder.php @@ -111,7 +111,7 @@ class CurrenciesSeeder extends Seeder ['id' => 86, 'name' => 'CFP Franc', 'code' => 'XPF', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], // precision should be zero ['id' => 87, 'name' => 'Mauritian Rupee', 'code' => 'MUR', 'symbol' => 'Rs', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['id' => 88, 'name' => 'Cape Verdean Escudo', 'code' => 'CVE', 'symbol' => '', 'precision' => '2', 'thousand_separator' => '.', 'decimal_separator' => '$'], - ['id' => 89, 'name' => 'Kuwaiti Dinar', 'code' => 'KWD', 'symbol' => 'KD', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], + ['id' => 89, 'name' => 'Kuwaiti Dinar', 'code' => 'KWD', 'symbol' => 'KD', 'precision' => '3', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['id' => 90, 'name' => 'Algerian Dinar', 'code' => 'DZD', 'symbol' => 'DA', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['id' => 91, 'name' => 'Macedonian Denar', 'code' => 'MKD', 'symbol' => 'ден', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['id' => 92, 'name' => 'Fijian Dollar', 'code' => 'FJD', 'symbol' => 'FJ$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], diff --git a/lang/en/texts.php b/lang/en/texts.php index dea5124960d6..003509f2c939 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -199,7 +199,7 @@ $lang = array( 'removed_logo' => 'Successfully removed logo', 'sent_message' => 'Successfully sent message', 'invoice_error' => 'Please make sure to select a client and correct any errors', - 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.', + 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!', 'payment_error' => 'There was an error processing your payment. Please try again later.', 'registration_required' => 'Registration Required', 'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.', @@ -5147,7 +5147,7 @@ $lang = array( 'payment_refund_receipt' => 'Payment Refund Receipt # :number', 'payment_receipt' => 'Payment Receipt # :number', 'load_template_description' => 'The template will be applied to following:', - 'run_template' => 'Run template', + 'run_template' => 'Run Template', 'statement_design' => 'Statement Design', 'delivery_note_design' => 'Delivery Note Design', 'payment_receipt_design' => 'Payment Receipt Design', @@ -5306,18 +5306,20 @@ $lang = array( 'activity_140' => 'Statement sent to :client', 'invoice_net_amount' => 'Invoice Net Amount', 'round_to_minutes' => 'Round To Minutes', + '1_second' => '1 Second', '1_minute' => '1 Minute', '5_minutes' => '5 Minutes', '15_minutes' => '15 Minutes', '30_minutes' => '30 Minutes', '1_hour' => '1 Hour', '1_day' => '1 Day', - 'round_tasks' => 'Round Tasks', - 'round_tasks_help' => 'Round time intervals when saving tasks', + 'round_tasks' => 'Task Rounding Direction', + 'round_tasks_help' => 'Round task times up or down.', 'direction' => 'Direction', 'round_up' => 'Round Up', 'round_down' => 'Round Down', 'task_round_to_nearest' => 'Round To Nearest', + 'task_round_to_nearest_help' => 'The interval to round the task to.', 'bulk_updated' => 'Successfully updated data', 'bulk_update' => 'Bulk Update', 'calculate' => 'Calculate', @@ -5330,6 +5332,8 @@ $lang = array( 'e_invoice_settings' => 'E-Invoice Settings', 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay', 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:', + 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya', + 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum', ); return $lang; \ No newline at end of file diff --git a/lang/fr_CA/texts.php b/lang/fr_CA/texts.php index 49df693e0a54..8a7abbb0fbea 100644 --- a/lang/fr_CA/texts.php +++ b/lang/fr_CA/texts.php @@ -5322,6 +5322,12 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'money' => 'Argent', 'web_app' => 'App web', 'desktop_app' => 'App de bureau', + 'disconnected' => 'Déconnecté', + 'reconnect' => 'Reconnecté', + 'e_invoice_settings' => 'Paramètres E-Facture', + 'currency_mauritanian_ouguiya' => 'Ouguiya mauritanien', + 'currency_bhutan_ngultrum' => 'Ngultrum Bhoutan', + ); return $lang; diff --git a/package-lock.json b/package-lock.json index 1e4593041b24..3c873758a1f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,10 @@ { - "name": "invoiceninja", + "name": "@invoiceninja/invoiceninja", "lockfileVersion": 2, "requires": true, "packages": { "": { "dependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/line-clamp": "^0.3.1", - "@tailwindcss/typography": "^0.4.1", - "autoprefixer": "^10.3.7", "axios": "^0.25", "card-js": "^1.0.13", "card-validator": "^8.1.1", @@ -19,24 +15,40 @@ "laravel-mix": "^6.0.34", "linkify-urls": "^4.0.0", "lodash": "^4.17.21", - "postcss": "^8.3.11", "resolve-url-loader": "^4.0.0", "sass": "^1.43.4", - "sass-loader": "^12.3.0", - "tailwindcss": "^2.2.17" + "sass-loader": "^12.3.0" }, "devDependencies": { "@babel/compat-data": "7.15.0", "@babel/plugin-proposal-class-properties": "^7.14.5", "@tailwindcss/aspect-ratio": "^0.4.2", + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/line-clamp": "^0.4.4", + "@tailwindcss/typography": "^0.5.10", + "autoprefixer": "^10.4.18", "cypress": "^12.5.1", "laravel-mix-purgecss": "^6.0.0", "laravel-vite-plugin": "^0.8.0", + "postcss": "^8.4.35", + "tailwindcss": "^3.4.1", "vite": "^4.4.9", "vite-plugin-static-copy": "^0.17.0", "vue-template-compiler": "^2.6.14" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -2010,6 +2022,102 @@ "purgecss": "^3.1.3" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -2031,9 +2139,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } @@ -2066,12 +2174,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@leichtgewicht/ip-codec": { @@ -2111,6 +2219,16 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@tailwindcss/aspect-ratio": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz", @@ -2121,36 +2239,52 @@ } }, "node_modules/@tailwindcss/forms": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.3.4.tgz", - "integrity": "sha512-vlAoBifNJUkagB+PAdW4aHMe4pKmSLroH398UPgIogBFc91D2VlHUxe4pjxQhiJl0Nfw53sHSJSQBSTQBZP3vA==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz", + "integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==", + "dev": true, "dependencies": { "mini-svg-data-uri": "^1.2.3" }, "peerDependencies": { - "tailwindcss": ">=2.0.0" + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" } }, "node_modules/@tailwindcss/line-clamp": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.3.1.tgz", - "integrity": "sha512-pNr0T8LAc3TUx/gxCfQZRe9NB2dPEo/cedPHzUGIPxqDMhgjwNm6jYxww4W5l0zAsAddxr+XfZcqttGiFDgrGg==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz", + "integrity": "sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==", + "dev": true, "peerDependencies": { "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" } }, "node_modules/@tailwindcss/typography": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.4.1.tgz", - "integrity": "sha512-ovPPLUhs7zAIJfr0y1dbGlyCuPhpuv/jpBoFgqAc658DWGGrOBWBMpAWLw2KlzbNeVk4YBJMzue1ekvIbdw6XA==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", + "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", + "dev": true, "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0" + "postcss-selector-parser": "6.0.10" }, "peerDependencies": { - "tailwindcss": ">=2.0.0" + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, "node_modules/@trysound/sax": { @@ -2629,35 +2763,6 @@ "node": ">= 0.6" } }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/adjust-sourcemap-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", @@ -2808,6 +2913,12 @@ "node": ">=4" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -2843,7 +2954,8 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true }, "node_modules/array-flatten": { "version": "2.1.2", @@ -2945,9 +3057,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", "funding": [ { "type": "opencollective", @@ -2956,12 +3068,16 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -3304,9 +3420,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "funding": [ { "type": "opencollective", @@ -3315,13 +3431,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -3428,6 +3548,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, "engines": { "node": ">= 6" } @@ -3444,9 +3565,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001469", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", - "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", + "version": "1.0.30001593", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001593.tgz", + "integrity": "sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==", "funding": [ { "type": "opencollective", @@ -3455,6 +3576,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -3668,18 +3793,6 @@ "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.34.3.tgz", "integrity": "sha512-aFr67xDazPwthsGm729mnClgNuh15JEagU6McKBKqxuHOkWL7vMFzGbhsXDdPZ+H6ia5QKIMGYuGOMENBHnVpg==" }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -3693,31 +3806,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -4053,14 +4141,6 @@ "node": "*" } }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", - "engines": { - "node": "*" - } - }, "node_modules/css-declaration-sorter": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", @@ -4187,11 +4267,6 @@ "node": ">=8.0.0" } }, - "node_modules/css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" - }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -4573,14 +4648,6 @@ "node": ">=8" } }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -4626,26 +4693,11 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true }, "node_modules/diffie-hellman": { "version": "5.0.3", @@ -4676,7 +4728,8 @@ "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true }, "node_modules/dns-equal": { "version": "1.0.0", @@ -4804,6 +4857,12 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -4820,9 +4879,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.338", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.338.tgz", - "integrity": "sha512-Kfq90LFsNtGOwCZJ77XQa2fSuGQVlEBIGqiccfXxkoYTe5o79dE/9GMXR2R9OWjKGFfRVX4GHYxeCUyA8mRJlw==" + "version": "1.4.690", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.690.tgz", + "integrity": "sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -5230,9 +5289,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5432,6 +5491,34 @@ } } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -5464,15 +5551,15 @@ } }, "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "engines": { "node": "*" }, "funding": { "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fresh": { @@ -5522,9 +5609,12 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -5757,6 +5847,17 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -5765,11 +5866,6 @@ "he": "bin/he" } }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -5791,16 +5887,6 @@ "wbuf": "^1.1.0" } }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==" - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==" - }, "node_modules/html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", @@ -6238,25 +6324,12 @@ "is-ci": "bin.js" } }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6422,6 +6495,24 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -6457,6 +6548,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6904,7 +7004,8 @@ "node_modules/lodash.castarray": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -6914,7 +7015,8 @@ "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -6924,7 +7026,8 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/lodash.once": { "version": "4.1.1", @@ -6932,11 +7035,6 @@ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, - "node_modules/lodash.topath": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", - "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==" - }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -7318,6 +7416,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, "bin": { "mini-svg-data-uri": "cli.js" } @@ -7351,15 +7450,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/modern-normalize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", - "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16 || 14 >=14.17" } }, "node_modules/ms": { @@ -7379,10 +7476,21 @@ "multicast-dns": "cli.js" } }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -7418,14 +7526,6 @@ "tslib": "^2.0.3" } }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dependencies": { - "lodash": "^4.17.21" - } - }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -7518,9 +7618,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -7580,9 +7680,10 @@ } }, "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, "engines": { "node": ">= 6" } @@ -7844,6 +7945,31 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -7909,6 +8035,15 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -7921,9 +8056,9 @@ } }, "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "funding": [ { "type": "opencollective", @@ -7939,7 +8074,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -8035,20 +8170,40 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-js": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", - "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, "dependencies": { - "camelcase-css": "^2.0.1", - "postcss": "^8.1.6" + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "engines": { - "node": ">=10.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" } }, "node_modules/postcss-load-config": { @@ -8278,11 +8433,12 @@ } }, "node_modules/postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.11" }, "engines": { "node": ">=12.0" @@ -8534,14 +8690,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/pretty-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", @@ -8703,17 +8851,6 @@ } ] }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -8753,6 +8890,15 @@ "node": ">= 0.8" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -8802,20 +8948,6 @@ "node": ">= 0.10" } }, - "node_modules/reduce-css-calc": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", - "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", - "dependencies": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - } - }, - "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -8932,11 +9064,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -9058,16 +9190,6 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==" - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==" - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -9477,19 +9599,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -9712,6 +9821,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/stringify-attributes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stringify-attributes/-/stringify-attributes-3.0.0.tgz", @@ -9748,6 +9872,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -9807,6 +9944,97 @@ "postcss": "^8.2.15" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -9858,125 +10086,47 @@ } }, "node_modules/tailwindcss": { - "version": "2.2.19", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.19.tgz", - "integrity": "sha512-6Ui7JSVtXadtTUo2NtkBBacobzWiQYVjYW0ZnKaP9S1ZCKQ0w7KVNz+YSDI/j7O7KCMHbOkz94ZMQhbT9pOqjw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "dev": true, "dependencies": { - "arg": "^5.0.1", - "bytes": "^3.0.0", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "color": "^4.0.1", - "cosmiconfig": "^7.0.1", - "detective": "^5.2.0", + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.7", - "fs-extra": "^10.0.0", - "glob-parent": "^6.0.1", - "html-tags": "^3.1.0", - "is-color-stop": "^1.1.0", - "is-glob": "^4.0.1", - "lodash": "^4.17.21", - "lodash.topath": "^4.5.2", - "modern-normalize": "^1.1.0", - "node-emoji": "^1.11.0", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "object-hash": "^2.2.0", - "postcss-js": "^3.0.3", - "postcss-load-config": "^3.1.0", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.6", - "postcss-value-parser": "^4.1.0", - "pretty-hrtime": "^1.0.3", - "purgecss": "^4.0.3", - "quick-lru": "^5.1.1", - "reduce-css-calc": "^2.1.8", - "resolve": "^1.20.0", - "tmp": "^0.2.1" + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" }, "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "autoprefixer": "^10.0.2", - "postcss": "^8.0.9" - } - }, - "node_modules/tailwindcss/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tailwindcss/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/tailwindcss/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tailwindcss/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/tailwindcss/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/tailwindcss/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "node": ">=14.0.0" } }, "node_modules/tailwindcss/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -9984,37 +10134,63 @@ "node": ">=10.13.0" } }, - "node_modules/tailwindcss/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/tailwindcss/node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, "engines": { - "node": ">=8" + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/tailwindcss/node_modules/purgecss": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", - "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", - "dependencies": { - "commander": "^8.0.0", - "glob": "^7.1.7", - "postcss": "^8.3.5", - "postcss-selector-parser": "^6.0.6" + "node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "dev": true, + "engines": { + "node": ">=14" }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/tailwindcss/node_modules/yaml": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.0.tgz", + "integrity": "sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==", + "dev": true, "bin": { - "purgecss": "bin/purgecss.js" - } - }, - "node_modules/tailwindcss/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" + "yaml": "bin.mjs" }, "engines": { - "node": ">=8" + "node": ">= 14" } }, "node_modules/tapable": { @@ -10108,6 +10284,27 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", @@ -10145,6 +10342,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, "dependencies": { "rimraf": "^3.0.0" }, @@ -10206,6 +10404,12 @@ "node": ">=6" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "node_modules/tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", @@ -10319,9 +10523,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "funding": [ { "type": "opencollective", @@ -10330,6 +10534,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -10337,7 +10545,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -11100,6 +11308,57 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -11221,6 +11480,12 @@ } }, "dependencies": { + "@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true + }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -12492,6 +12757,71 @@ "purgecss": "^3.1.3" } }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -12507,9 +12837,9 @@ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" }, "@jridgewell/source-map": { "version": "0.3.2", @@ -12538,12 +12868,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@leichtgewicht/ip-codec": { @@ -12574,6 +12904,13 @@ "fastq": "^1.6.0" } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, "@tailwindcss/aspect-ratio": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz", @@ -12582,28 +12919,43 @@ "requires": {} }, "@tailwindcss/forms": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.3.4.tgz", - "integrity": "sha512-vlAoBifNJUkagB+PAdW4aHMe4pKmSLroH398UPgIogBFc91D2VlHUxe4pjxQhiJl0Nfw53sHSJSQBSTQBZP3vA==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz", + "integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==", + "dev": true, "requires": { "mini-svg-data-uri": "^1.2.3" } }, "@tailwindcss/line-clamp": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.3.1.tgz", - "integrity": "sha512-pNr0T8LAc3TUx/gxCfQZRe9NB2dPEo/cedPHzUGIPxqDMhgjwNm6jYxww4W5l0zAsAddxr+XfZcqttGiFDgrGg==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz", + "integrity": "sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==", + "dev": true, "requires": {} }, "@tailwindcss/typography": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.4.1.tgz", - "integrity": "sha512-ovPPLUhs7zAIJfr0y1dbGlyCuPhpuv/jpBoFgqAc658DWGGrOBWBMpAWLw2KlzbNeVk4YBJMzue1ekvIbdw6XA==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", + "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", + "dev": true, "requires": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0" + "postcss-selector-parser": "6.0.10" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "@trysound/sax": { @@ -13063,26 +13415,6 @@ "negotiator": "0.6.3" } }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - }, "adjust-sourcemap-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", @@ -13186,6 +13518,12 @@ "color-convert": "^1.9.0" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -13204,7 +13542,8 @@ "arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true }, "array-flatten": { "version": "2.1.2", @@ -13298,13 +13637,13 @@ "dev": true }, "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -13586,14 +13925,14 @@ } }, "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" } }, "buffer": { @@ -13664,7 +14003,8 @@ "camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true }, "caniuse-api": { "version": "3.0.0", @@ -13678,9 +14018,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001469", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", - "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==" + "version": "1.0.30001593", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001593.tgz", + "integrity": "sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==" }, "card-js": { "version": "1.0.13", @@ -13834,30 +14174,6 @@ "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.34.3.tgz", "integrity": "sha512-aFr67xDazPwthsGm729mnClgNuh15JEagU6McKBKqxuHOkWL7vMFzGbhsXDdPZ+H6ia5QKIMGYuGOMENBHnVpg==" }, - "color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "dependencies": { - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -13871,15 +14187,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -14154,11 +14461,6 @@ "randomfill": "^1.0.3" } }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==" - }, "css-declaration-sorter": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", @@ -14246,11 +14548,6 @@ "source-map": "^0.6.1" } }, - "css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" - }, "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -14527,11 +14824,6 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, - "defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -14567,20 +14859,11 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, - "detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - } - }, "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true }, "diffie-hellman": { "version": "5.0.3", @@ -14610,7 +14893,8 @@ "dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true }, "dns-equal": { "version": "1.0.0", @@ -14702,6 +14986,12 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -14718,9 +15008,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.338", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.338.tgz", - "integrity": "sha512-Kfq90LFsNtGOwCZJ77XQa2fSuGQVlEBIGqiccfXxkoYTe5o79dE/9GMXR2R9OWjKGFfRVX4GHYxeCUyA8mRJlw==" + "version": "1.4.690", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.690.tgz", + "integrity": "sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA==" }, "elliptic": { "version": "6.5.4", @@ -15044,9 +15334,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -15186,6 +15476,24 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -15209,9 +15517,9 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" }, "fresh": { "version": "0.5.2", @@ -15247,9 +15555,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "gensync": { "version": "1.0.0-beta.2", @@ -15430,16 +15738,19 @@ "minimalistic-assert": "^1.0.1" } }, + "hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -15461,16 +15772,6 @@ "wbuf": "^1.1.0" } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==" - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==" - }, "html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", @@ -15779,25 +16080,12 @@ "ci-info": "^3.2.0" } }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-docker": { @@ -15903,6 +16191,16 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -15928,6 +16226,12 @@ } } }, + "jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -16254,7 +16558,8 @@ "lodash.castarray": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true }, "lodash.debounce": { "version": "4.0.8", @@ -16264,7 +16569,8 @@ "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true }, "lodash.memoize": { "version": "4.1.2", @@ -16274,7 +16580,8 @@ "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "lodash.once": { "version": "4.1.1", @@ -16282,11 +16589,6 @@ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, - "lodash.topath": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", - "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==" - }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -16568,7 +16870,8 @@ "mini-svg-data-uri": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==" + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true }, "minimalistic-assert": { "version": "1.0.1", @@ -16593,10 +16896,11 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, - "modern-normalize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", - "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==" + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true }, "ms": { "version": "2.1.2", @@ -16612,10 +16916,21 @@ "thunky": "^1.0.2" } }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "negotiator": { "version": "0.6.3", @@ -16636,14 +16951,6 @@ "tslib": "^2.0.3" } }, - "node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "requires": { - "lodash": "^4.17.21" - } - }, "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -16728,9 +17035,9 @@ } }, "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "normalize-path": { "version": "3.0.0", @@ -16769,9 +17076,10 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true }, "object-inspect": { "version": "1.12.3", @@ -16961,6 +17269,24 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true + } + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -17011,6 +17337,12 @@ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -17020,11 +17352,11 @@ } }, "postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "requires": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -17082,13 +17414,24 @@ "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "requires": {} }, - "postcss-js": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", - "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, "requires": { - "camelcase-css": "^2.0.1", - "postcss": "^8.1.6" + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" } }, "postcss-load-config": { @@ -17222,11 +17565,12 @@ } }, "postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, "requires": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.11" } }, "postcss-normalize-charset": { @@ -17373,11 +17717,6 @@ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==" - }, "pretty-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", @@ -17500,11 +17839,6 @@ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -17538,6 +17872,15 @@ "unpipe": "1.0.0" } }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, "readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -17583,22 +17926,6 @@ "resolve": "^1.9.0" } }, - "reduce-css-calc": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", - "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", - "requires": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -17693,11 +18020,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -17776,16 +18103,6 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==" - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==" - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -18077,21 +18394,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -18276,6 +18578,17 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "stringify-attributes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stringify-attributes/-/stringify-attributes-3.0.0.tgz", @@ -18299,6 +18612,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -18334,6 +18656,71 @@ "postcss-selector-parser": "^6.0.4" } }, + "sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -18369,120 +18756,67 @@ } }, "tailwindcss": { - "version": "2.2.19", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.19.tgz", - "integrity": "sha512-6Ui7JSVtXadtTUo2NtkBBacobzWiQYVjYW0ZnKaP9S1ZCKQ0w7KVNz+YSDI/j7O7KCMHbOkz94ZMQhbT9pOqjw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "dev": true, "requires": { - "arg": "^5.0.1", - "bytes": "^3.0.0", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "color": "^4.0.1", - "cosmiconfig": "^7.0.1", - "detective": "^5.2.0", + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.7", - "fs-extra": "^10.0.0", - "glob-parent": "^6.0.1", - "html-tags": "^3.1.0", - "is-color-stop": "^1.1.0", - "is-glob": "^4.0.1", - "lodash": "^4.17.21", - "lodash.topath": "^4.5.2", - "modern-normalize": "^1.1.0", - "node-emoji": "^1.11.0", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "object-hash": "^2.2.0", - "postcss-js": "^3.0.3", - "postcss-load-config": "^3.1.0", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.6", - "postcss-value-parser": "^4.1.0", - "pretty-hrtime": "^1.0.3", - "purgecss": "^4.0.3", - "quick-lru": "^5.1.1", - "reduce-css-calc": "^2.1.8", - "resolve": "^1.20.0", - "tmp": "^0.2.1" + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "requires": { "is-glob": "^4.0.3" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "purgecss": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", - "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", + "postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, "requires": { - "commander": "^8.0.0", - "glob": "^7.1.7", - "postcss": "^8.3.5", - "postcss-selector-parser": "^6.0.6" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "dependencies": { + "lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "dev": true + } } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } + "yaml": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.0.tgz", + "integrity": "sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==", + "dev": true } } }, @@ -18538,6 +18872,24 @@ } } }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", @@ -18572,6 +18924,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, "requires": { "rimraf": "^3.0.0" } @@ -18617,6 +18970,12 @@ } } }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", @@ -18697,9 +19056,9 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -19250,6 +19609,43 @@ } } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index f7318d6ee651..bff788fc32b2 100644 --- a/package.json +++ b/package.json @@ -9,18 +9,20 @@ "@babel/compat-data": "7.15.0", "@babel/plugin-proposal-class-properties": "^7.14.5", "@tailwindcss/aspect-ratio": "^0.4.2", + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/line-clamp": "^0.4.4", + "@tailwindcss/typography": "^0.5.10", + "autoprefixer": "^10.4.18", "cypress": "^12.5.1", "laravel-mix-purgecss": "^6.0.0", "laravel-vite-plugin": "^0.8.0", + "postcss": "^8.4.35", + "tailwindcss": "^3.4.1", "vite": "^4.4.9", "vite-plugin-static-copy": "^0.17.0", "vue-template-compiler": "^2.6.14" }, "dependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/line-clamp": "^0.3.1", - "@tailwindcss/typography": "^0.4.1", - "autoprefixer": "^10.3.7", "axios": "^0.25", "card-js": "^1.0.13", "card-validator": "^8.1.1", @@ -31,11 +33,9 @@ "laravel-mix": "^6.0.34", "linkify-urls": "^4.0.0", "lodash": "^4.17.21", - "postcss": "^8.3.11", "resolve-url-loader": "^4.0.0", "sass": "^1.43.4", - "sass-loader": "^12.3.0", - "tailwindcss": "^2.2.17" + "sass-loader": "^12.3.0" }, "type": "module" } diff --git a/phpunit.xml b/phpunit.xml index 113938ad5e36..1c27f29b2b43 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -25,7 +25,7 @@ - + diff --git a/public/build/assets/app-8722f22d.js b/public/build/assets/app-8722f22d.js new file mode 100644 index 000000000000..0ea9e0562080 --- /dev/null +++ b/public/build/assets/app-8722f22d.js @@ -0,0 +1,109 @@ +import{A as Sl}from"./index-08e160a7.js";import{c as zt,g as El}from"./_commonjsHelpers-725317a4.js";var Ol={visa:{niceType:"Visa",type:"visa",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:"CVV",size:3}},mastercard:{niceType:"Mastercard",type:"mastercard",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},"american-express":{niceType:"American Express",type:"american-express",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:"CID",size:4}},"diners-club":{niceType:"Diners Club",type:"diners-club",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:"CVV",size:3}},discover:{niceType:"Discover",type:"discover",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:"CID",size:3}},jcb:{niceType:"JCB",type:"jcb",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVV",size:3}},unionpay:{niceType:"UnionPay",type:"unionpay",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:"CVN",size:3}},maestro:{niceType:"Maestro",type:"maestro",patterns:[493698,[5e5,504174],[504176,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:"CVC",size:3}},elo:{niceType:"Elo",type:"elo",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:"CVE",size:3}},mir:{niceType:"Mir",type:"mir",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVP2",size:3}},hiper:{niceType:"Hiper",type:"hiper",patterns:[637095,63737423,63743358,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},hipercard:{niceType:"Hipercard",type:"hipercard",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}}},Cl=Ol,ni={},Sn={};Object.defineProperty(Sn,"__esModule",{value:!0});Sn.clone=void 0;function Al(e){return e?JSON.parse(JSON.stringify(e)):null}Sn.clone=Al;var ii={};Object.defineProperty(ii,"__esModule",{value:!0});ii.matches=void 0;function Tl(e,r,n){var a=String(r).length,s=e.substr(0,a),l=parseInt(s,10);return r=parseInt(String(r).substr(0,s.length),10),n=parseInt(String(n).substr(0,s.length),10),l>=r&&l<=n}function Pl(e,r){return r=String(r),r.substring(0,e.length)===e.substring(0,r.length)}function Rl(e,r){return Array.isArray(r)?Tl(e,r[0],r[1]):Pl(e,r)}ii.matches=Rl;Object.defineProperty(ni,"__esModule",{value:!0});ni.addMatchingCardsToResults=void 0;var Ml=Sn,kl=ii;function Nl(e,r,n){var a,s;for(a=0;a=s&&(v.matchStrength=s),n.push(v);break}}}ni.addMatchingCardsToResults=Nl;var ai={};Object.defineProperty(ai,"__esModule",{value:!0});ai.isValidInputType=void 0;function Ll(e){return typeof e=="string"||e instanceof String}ai.isValidInputType=Ll;var oi={};Object.defineProperty(oi,"__esModule",{value:!0});oi.findBestMatch=void 0;function jl(e){var r=e.filter(function(n){return n.matchStrength}).length;return r>0&&r===e.length}function Il(e){return jl(e)?e.reduce(function(r,n){return!r||Number(r.matchStrength)Hl?vn(!1,!1):Ul.test(e)?vn(!1,!0):vn(!0,!0)}si.cardholderName=ql;var li={};function Vl(e){for(var r=0,n=!1,a=e.length-1,s;a>=0;)s=parseInt(e.charAt(a),10),n&&(s*=2,s>9&&(s=s%10+1)),n=!n,r+=s,a--;return r%10===0}var zl=Vl;Object.defineProperty(li,"__esModule",{value:!0});li.cardNumber=void 0;var Wl=zl,ao=Uo;function wr(e,r,n){return{card:e,isPotentiallyValid:r,isValid:n}}function Kl(e,r){r===void 0&&(r={});var n,a,s;if(typeof e!="string"&&typeof e!="number")return wr(null,!1,!1);var l=String(e).replace(/-|\s/g,"");if(!/^\d*$/.test(l))return wr(null,!1,!1);var v=ao(l);if(v.length===0)return wr(null,!1,!1);if(v.length!==1)return wr(null,!0,!1);var g=v[0];if(r.maxLength&&l.length>r.maxLength)return wr(g,!1,!1);g.type===ao.types.UNIONPAY&&r.luhnValidateUnionPay!==!0?a=!0:a=Wl(l),s=Math.max.apply(null,g.lengths),r.maxLength&&(s=Math.min(r.maxLength,s));for(var T=0;T4)return ir(!1,!1);var g=parseInt(e,10),T=Number(String(s).substr(2,2)),B=!1;if(a===2){if(String(s).substr(0,2)===e)return ir(!1,!0);n=T===g,B=g>=T&&g<=T+r}else a===4&&(n=s===g,B=g>=s&&g<=s+r);return ir(B,B,n)}Xr.expirationYear=Gl;var fi={};Object.defineProperty(fi,"__esModule",{value:!0});fi.isArray=void 0;fi.isArray=Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"};Object.defineProperty(ci,"__esModule",{value:!0});ci.parseDate=void 0;var Yl=Xr,Xl=fi;function Ql(e){var r=Number(e[0]),n;return r===0?2:r>1||r===1&&Number(e[1])>2?1:r===1?(n=e.substr(1),Yl.expirationYear(n).isPotentiallyValid?1:2):e.length===5?1:e.length>5?2:1}function Zl(e){var r;if(/^\d{4}-\d{1,2}$/.test(e)?r=e.split("-").reverse():/\//.test(e)?r=e.split(/\s*\/\s*/g):/\s/.test(e)&&(r=e.split(/ +/g)),Xl.isArray(r))return{month:r[0]||"",year:r.slice(1).join()};var n=Ql(e),a=e.substr(0,n);return{month:a,year:e.substr(a.length)}}ci.parseDate=Zl;var On={};Object.defineProperty(On,"__esModule",{value:!0});On.expirationMonth=void 0;function yn(e,r,n){return{isValid:e,isPotentiallyValid:r,isValidForThisYear:n||!1}}function eu(e){var r=new Date().getMonth()+1;if(typeof e!="string")return yn(!1,!1);if(e.replace(/\s/g,"")===""||e==="0")return yn(!1,!0);if(!/^\d*$/.test(e))return yn(!1,!1);var n=parseInt(e,10);if(isNaN(Number(e)))return yn(!1,!1);var a=n>0&&n<13;return yn(a,a,a&&n>=r)}On.expirationMonth=eu;var ra=zt&&zt.__assign||function(){return ra=Object.assign||function(e){for(var r,n=1,a=arguments.length;nr?e[n]:r;return r}function Hr(e,r){return{isValid:e,isPotentiallyValid:r}}function su(e,r){return r===void 0&&(r=Ho),r=r instanceof Array?r:[r],typeof e!="string"||!/^\d*$/.test(e)?Hr(!1,!1):au(r,e.length)?Hr(!0,!0):e.lengthou(r)?Hr(!1,!1):Hr(!0,!0)}di.cvv=su;var pi={};Object.defineProperty(pi,"__esModule",{value:!0});pi.postalCode=void 0;var lu=3;function Ji(e,r){return{isValid:e,isPotentiallyValid:r}}function uu(e,r){r===void 0&&(r={});var n=r.minLength||lu;return typeof e!="string"?Ji(!1,!1):e.lengthfunction(){return r||(0,e[Vo(e)[0]])((r={exports:{}}).exports,r),r.exports},Tu=(e,r,n,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of Vo(r))!Au.call(e,s)&&s!==n&&qo(e,s,{get:()=>r[s],enumerable:!(a=Ou(r,s))||a.enumerable});return e},tt=(e,r,n)=>(n=e!=null?Eu(Cu(e)):{},Tu(r||!e||!e.__esModule?qo(n,"default",{value:e,enumerable:!0}):n,e)),Ot=Zt({"../alpine/packages/alpinejs/dist/module.cjs.js"(e,r){var n=Object.create,a=Object.defineProperty,s=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,v=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty,T=(t,i)=>function(){return i||(0,t[l(t)[0]])((i={exports:{}}).exports,i),i.exports},B=(t,i)=>{for(var o in i)a(t,o,{get:i[o],enumerable:!0})},le=(t,i,o,c)=>{if(i&&typeof i=="object"||typeof i=="function")for(let d of l(i))!g.call(t,d)&&d!==o&&a(t,d,{get:()=>i[d],enumerable:!(c=s(i,d))||c.enumerable});return t},ne=(t,i,o)=>(o=t!=null?n(v(t)):{},le(i||!t||!t.__esModule?a(o,"default",{value:t,enumerable:!0}):o,t)),z=t=>le(a({},"__esModule",{value:!0}),t),Y=T({"node_modules/@vue/shared/dist/shared.cjs.js"(t){Object.defineProperty(t,"__esModule",{value:!0});function i(b,K){const ee=Object.create(null),fe=b.split(",");for(let qe=0;qe!!ee[qe.toLowerCase()]:qe=>!!ee[qe]}var o={1:"TEXT",2:"CLASS",4:"STYLE",8:"PROPS",16:"FULL_PROPS",32:"HYDRATE_EVENTS",64:"STABLE_FRAGMENT",128:"KEYED_FRAGMENT",256:"UNKEYED_FRAGMENT",512:"NEED_PATCH",1024:"DYNAMIC_SLOTS",2048:"DEV_ROOT_FRAGMENT",[-1]:"HOISTED",[-2]:"BAIL"},c={1:"STABLE",2:"DYNAMIC",3:"FORWARDED"},d="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt",p=i(d),m=2;function x(b,K=0,ee=b.length){let fe=b.split(/(\r?\n)/);const qe=fe.filter((xt,dt)=>dt%2===1);fe=fe.filter((xt,dt)=>dt%2===0);let et=0;const wt=[];for(let xt=0;xt=K){for(let dt=xt-m;dt<=xt+m||ee>et;dt++){if(dt<0||dt>=fe.length)continue;const gn=dt+1;wt.push(`${gn}${" ".repeat(Math.max(3-String(gn).length,0))}| ${fe[dt]}`);const Br=fe[dt].length,Zn=qe[dt]&&qe[dt].length||0;if(dt===xt){const Ur=K-(et-(Br+Zn)),Wi=Math.max(1,ee>et?Br-Ur:ee-K);wt.push(" | "+" ".repeat(Ur)+"^".repeat(Wi))}else if(dt>xt){if(ee>et){const Ur=Math.max(Math.min(ee-et,Br),1);wt.push(" | "+"^".repeat(Ur))}et+=Br+Zn}}break}return wt.join(` +`)}var M="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Z=i(M),Me=i(M+",async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected"),Qe=/[>/="'\u0009\u000a\u000c\u0020]/,De={};function Je(b){if(De.hasOwnProperty(b))return De[b];const K=Qe.test(b);return K&&console.error(`unsafe attribute name: ${b}`),De[b]=!K}var Tt={acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},Ut=i("animation-iteration-count,border-image-outset,border-image-slice,border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,stroke-miterlimit,stroke-opacity,stroke-width"),we=i("accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap");function Ue(b){if(Dt(b)){const K={};for(let ee=0;ee{if(ee){const fe=ee.split(He);fe.length>1&&(K[fe[0].trim()]=fe[1].trim())}}),K}function It(b){let K="";if(!b)return K;for(const ee in b){const fe=b[ee],qe=ee.startsWith("--")?ee:Xn(ee);(vr(fe)||typeof fe=="number"&&Ut(qe))&&(K+=`${qe}:${fe};`)}return K}function Ht(b){let K="";if(vr(b))K=b;else if(Dt(b))for(let ee=0;ee]/;function Ii(b){const K=""+b,ee=ji.exec(K);if(!ee)return K;let fe="",qe,et,wt=0;for(et=ee.index;et||--!>|Mr(ee,K))}var Bn=b=>b==null?"":qt(b)?JSON.stringify(b,Fi,2):String(b),Fi=(b,K)=>mr(K)?{[`Map(${K.size})`]:[...K.entries()].reduce((ee,[fe,qe])=>(ee[`${fe} =>`]=qe,ee),{})}:$t(K)?{[`Set(${K.size})`]:[...K.values()]}:qt(K)&&!Dt(K)&&!Wn(K)?String(K):K,Bi=["bigInt","optionalChaining","nullishCoalescingOperator"],un=Object.freeze({}),cn=Object.freeze([]),fn=()=>{},kr=()=>!1,Nr=/^on[^a-z]/,Lr=b=>Nr.test(b),jr=b=>b.startsWith("onUpdate:"),Un=Object.assign,Hn=(b,K)=>{const ee=b.indexOf(K);ee>-1&&b.splice(ee,1)},qn=Object.prototype.hasOwnProperty,Vn=(b,K)=>qn.call(b,K),Dt=Array.isArray,mr=b=>yr(b)==="[object Map]",$t=b=>yr(b)==="[object Set]",dn=b=>b instanceof Date,pn=b=>typeof b=="function",vr=b=>typeof b=="string",Ui=b=>typeof b=="symbol",qt=b=>b!==null&&typeof b=="object",Ir=b=>qt(b)&&pn(b.then)&&pn(b.catch),zn=Object.prototype.toString,yr=b=>zn.call(b),Hi=b=>yr(b).slice(8,-1),Wn=b=>yr(b)==="[object Object]",Kn=b=>vr(b)&&b!=="NaN"&&b[0]!=="-"&&""+parseInt(b,10)===b,Jn=i(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),br=b=>{const K=Object.create(null);return ee=>K[ee]||(K[ee]=b(ee))},Gn=/-(\w)/g,Yn=br(b=>b.replace(Gn,(K,ee)=>ee?ee.toUpperCase():"")),qi=/\B([A-Z])/g,Xn=br(b=>b.replace(qi,"-$1").toLowerCase()),_r=br(b=>b.charAt(0).toUpperCase()+b.slice(1)),Vi=br(b=>b?`on${_r(b)}`:""),hn=(b,K)=>b!==K&&(b===b||K===K),zi=(b,K)=>{for(let ee=0;ee{Object.defineProperty(b,K,{configurable:!0,enumerable:!1,value:ee})},$r=b=>{const K=parseFloat(b);return isNaN(K)?b:K},Fr,Qn=()=>Fr||(Fr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});t.EMPTY_ARR=cn,t.EMPTY_OBJ=un,t.NO=kr,t.NOOP=fn,t.PatchFlagNames=o,t.babelParserDefaultPlugins=Bi,t.camelize=Yn,t.capitalize=_r,t.def=Dr,t.escapeHtml=Ii,t.escapeHtmlComment=Di,t.extend=Un,t.generateCodeFrame=x,t.getGlobalThis=Qn,t.hasChanged=hn,t.hasOwn=Vn,t.hyphenate=Xn,t.invokeArrayFns=zi,t.isArray=Dt,t.isBooleanAttr=Me,t.isDate=dn,t.isFunction=pn,t.isGloballyWhitelisted=p,t.isHTMLTag=Pr,t.isIntegerKey=Kn,t.isKnownAttr=we,t.isMap=mr,t.isModelListener=jr,t.isNoUnitNumericStyleProp=Ut,t.isObject=qt,t.isOn=Lr,t.isPlainObject=Wn,t.isPromise=Ir,t.isReservedProp=Jn,t.isSSRSafeAttrName=Je,t.isSVGTag=Li,t.isSet=$t,t.isSpecialBooleanAttr=Z,t.isString=vr,t.isSymbol=Ui,t.isVoidTag=Rr,t.looseEqual=Mr,t.looseIndexOf=Fn,t.makeMap=i,t.normalizeClass=Ht,t.normalizeStyle=Ue,t.objectToString=zn,t.parseStringStyle=_t,t.propsToAttrMap=Tt,t.remove=Hn,t.slotFlagsText=c,t.stringifyStyle=It,t.toDisplayString=Bn,t.toHandlerKey=Vi,t.toNumber=$r,t.toRawType=Hi,t.toTypeString=yr}}),S=T({"node_modules/@vue/shared/index.js"(t,i){i.exports=Y()}}),y=T({"node_modules/@vue/reactivity/dist/reactivity.cjs.js"(t){Object.defineProperty(t,"__esModule",{value:!0});var i=S(),o=new WeakMap,c=[],d,p=Symbol("iterate"),m=Symbol("Map key iterate");function x(u){return u&&u._isEffect===!0}function M(u,A=i.EMPTY_OBJ){x(u)&&(u=u.raw);const N=Qe(u,A);return A.lazy||N(),N}function Z(u){u.active&&(De(u),u.options.onStop&&u.options.onStop(),u.active=!1)}var Me=0;function Qe(u,A){const N=function(){if(!N.active)return u();if(!c.includes(N)){De(N);try{return we(),c.push(N),d=N,u()}finally{c.pop(),Ue(),d=c[c.length-1]}}};return N.id=Me++,N.allowRecurse=!!A.allowRecurse,N._isEffect=!0,N.active=!0,N.raw=u,N.deps=[],N.options=A,N}function De(u){const{deps:A}=u;if(A.length){for(let N=0;N{vt&&vt.forEach(Ft=>{(Ft!==d||Ft.allowRecurse)&&nt.add(Ft)})};if(A==="clear")Le.forEach(St);else if(N==="length"&&i.isArray(u))Le.forEach((vt,Ft)=>{(Ft==="length"||Ft>=ae)&&St(vt)});else switch(N!==void 0&&St(Le.get(N)),A){case"add":i.isArray(u)?i.isIntegerKey(N)&&St(Le.get("length")):(St(Le.get(p)),i.isMap(u)&&St(Le.get(m)));break;case"delete":i.isArray(u)||(St(Le.get(p)),i.isMap(u)&&St(Le.get(m)));break;case"set":i.isMap(u)&&St(Le.get(p));break}const mn=vt=>{vt.options.onTrigger&&vt.options.onTrigger({effect:vt,target:u,key:N,type:A,newValue:ae,oldValue:J,oldTarget:ge}),vt.options.scheduler?vt.options.scheduler(vt):vt()};nt.forEach(mn)}var _t=i.makeMap("__proto__,__v_isRef,__isVue"),It=new Set(Object.getOwnPropertyNames(Symbol).map(u=>Symbol[u]).filter(i.isSymbol)),Ht=Rr(),Tr=Rr(!1,!0),sn=Rr(!0),ln=Rr(!0,!0),Pr=Li();function Li(){const u={};return["includes","indexOf","lastIndexOf"].forEach(A=>{u[A]=function(...N){const ae=b(this);for(let ge=0,Le=this.length;ge{u[A]=function(...N){Ut();const ae=b(this)[A].apply(this,N);return Ue(),ae}}),u}function Rr(u=!1,A=!1){return function(ae,J,ge){if(J==="__v_isReactive")return!u;if(J==="__v_isReadonly")return u;if(J==="__v_raw"&&ge===(u?A?Yn:Gn:A?br:Jn).get(ae))return ae;const Le=i.isArray(ae);if(!u&&Le&&i.hasOwn(Pr,J))return Reflect.get(Pr,J,ge);const nt=Reflect.get(ae,J,ge);return(i.isSymbol(J)?It.has(J):_t(J))||(u||Ne(ae,"get",J),A)?nt:fe(nt)?!Le||!i.isIntegerKey(J)?nt.value:nt:i.isObject(nt)?u?hn(nt):_r(nt):nt}}var ji=$n(),Ii=$n(!0);function $n(u=!1){return function(N,ae,J,ge){let Le=N[ae];if(!u&&(J=b(J),Le=b(Le),!i.isArray(N)&&fe(Le)&&!fe(J)))return Le.value=J,!0;const nt=i.isArray(N)&&i.isIntegerKey(ae)?Number(ae)i.isObject(u)?_r(u):u,cn=u=>i.isObject(u)?hn(u):u,fn=u=>u,kr=u=>Reflect.getPrototypeOf(u);function Nr(u,A,N=!1,ae=!1){u=u.__v_raw;const J=b(u),ge=b(A);A!==ge&&!N&&Ne(J,"get",A),!N&&Ne(J,"get",ge);const{has:Le}=kr(J),nt=ae?fn:N?cn:un;if(Le.call(J,A))return nt(u.get(A));if(Le.call(J,ge))return nt(u.get(ge));u!==J&&u.get(A)}function Lr(u,A=!1){const N=this.__v_raw,ae=b(N),J=b(u);return u!==J&&!A&&Ne(ae,"has",u),!A&&Ne(ae,"has",J),u===J?N.has(u):N.has(u)||N.has(J)}function jr(u,A=!1){return u=u.__v_raw,!A&&Ne(b(u),"iterate",p),Reflect.get(u,"size",u)}function Un(u){u=b(u);const A=b(this);return kr(A).has.call(A,u)||(A.add(u),He(A,"add",u,u)),this}function Hn(u,A){A=b(A);const N=b(this),{has:ae,get:J}=kr(N);let ge=ae.call(N,u);ge?Kn(N,ae,u):(u=b(u),ge=ae.call(N,u));const Le=J.call(N,u);return N.set(u,A),ge?i.hasChanged(A,Le)&&He(N,"set",u,A,Le):He(N,"add",u,A),this}function qn(u){const A=b(this),{has:N,get:ae}=kr(A);let J=N.call(A,u);J?Kn(A,N,u):(u=b(u),J=N.call(A,u));const ge=ae?ae.call(A,u):void 0,Le=A.delete(u);return J&&He(A,"delete",u,void 0,ge),Le}function Vn(){const u=b(this),A=u.size!==0,N=i.isMap(u)?new Map(u):new Set(u),ae=u.clear();return A&&He(u,"clear",void 0,void 0,N),ae}function Dt(u,A){return function(ae,J){const ge=this,Le=ge.__v_raw,nt=b(Le),St=A?fn:u?cn:un;return!u&&Ne(nt,"iterate",p),Le.forEach((mn,vt)=>ae.call(J,St(mn),St(vt),ge))}}function mr(u,A,N){return function(...ae){const J=this.__v_raw,ge=b(J),Le=i.isMap(ge),nt=u==="entries"||u===Symbol.iterator&&Le,St=u==="keys"&&Le,mn=J[u](...ae),vt=N?fn:A?cn:un;return!A&&Ne(ge,"iterate",St?m:p),{next(){const{value:Ft,done:Ki}=mn.next();return Ki?{value:Ft,done:Ki}:{value:nt?[vt(Ft[0]),vt(Ft[1])]:vt(Ft),done:Ki}},[Symbol.iterator](){return this}}}}function $t(u){return function(...A){{const N=A[0]?`on key "${A[0]}" `:"";console.warn(`${i.capitalize(u)} operation ${N}failed: target is readonly.`,b(this))}return u==="delete"?!1:this}}function dn(){const u={get(ge){return Nr(this,ge)},get size(){return jr(this)},has:Lr,add:Un,set:Hn,delete:qn,clear:Vn,forEach:Dt(!1,!1)},A={get(ge){return Nr(this,ge,!1,!0)},get size(){return jr(this)},has:Lr,add:Un,set:Hn,delete:qn,clear:Vn,forEach:Dt(!1,!0)},N={get(ge){return Nr(this,ge,!0)},get size(){return jr(this,!0)},has(ge){return Lr.call(this,ge,!0)},add:$t("add"),set:$t("set"),delete:$t("delete"),clear:$t("clear"),forEach:Dt(!0,!1)},ae={get(ge){return Nr(this,ge,!0,!0)},get size(){return jr(this,!0)},has(ge){return Lr.call(this,ge,!0)},add:$t("add"),set:$t("set"),delete:$t("delete"),clear:$t("clear"),forEach:Dt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(ge=>{u[ge]=mr(ge,!1,!1),N[ge]=mr(ge,!0,!1),A[ge]=mr(ge,!1,!0),ae[ge]=mr(ge,!0,!0)}),[u,N,A,ae]}var[pn,vr,Ui,qt]=dn();function Ir(u,A){const N=A?u?qt:Ui:u?vr:pn;return(ae,J,ge)=>J==="__v_isReactive"?!u:J==="__v_isReadonly"?u:J==="__v_raw"?ae:Reflect.get(i.hasOwn(N,J)&&J in ae?N:ae,J,ge)}var zn={get:Ir(!1,!1)},yr={get:Ir(!1,!0)},Hi={get:Ir(!0,!1)},Wn={get:Ir(!0,!0)};function Kn(u,A,N){const ae=b(N);if(ae!==N&&A.call(u,ae)){const J=i.toRawType(u);console.warn(`Reactive ${J} contains both the raw and reactive versions of the same object${J==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}var Jn=new WeakMap,br=new WeakMap,Gn=new WeakMap,Yn=new WeakMap;function qi(u){switch(u){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Xn(u){return u.__v_skip||!Object.isExtensible(u)?0:qi(i.toRawType(u))}function _r(u){return u&&u.__v_isReadonly?u:Dr(u,!1,Fn,zn,Jn)}function Vi(u){return Dr(u,!1,Fi,yr,br)}function hn(u){return Dr(u,!0,Bn,Hi,Gn)}function zi(u){return Dr(u,!0,Bi,Wn,Yn)}function Dr(u,A,N,ae,J){if(!i.isObject(u))return console.warn(`value cannot be made reactive: ${String(u)}`),u;if(u.__v_raw&&!(A&&u.__v_isReactive))return u;const ge=J.get(u);if(ge)return ge;const Le=Xn(u);if(Le===0)return u;const nt=new Proxy(u,Le===2?ae:N);return J.set(u,nt),nt}function $r(u){return Fr(u)?$r(u.__v_raw):!!(u&&u.__v_isReactive)}function Fr(u){return!!(u&&u.__v_isReadonly)}function Qn(u){return $r(u)||Fr(u)}function b(u){return u&&b(u.__v_raw)||u}function K(u){return i.def(u,"__v_skip",!0),u}var ee=u=>i.isObject(u)?_r(u):u;function fe(u){return!!(u&&u.__v_isRef===!0)}function qe(u){return xt(u)}function et(u){return xt(u,!0)}var wt=class{constructor(u,A=!1){this._shallow=A,this.__v_isRef=!0,this._rawValue=A?u:b(u),this._value=A?u:ee(u)}get value(){return Ne(b(this),"get","value"),this._value}set value(u){u=this._shallow?u:b(u),i.hasChanged(u,this._rawValue)&&(this._rawValue=u,this._value=this._shallow?u:ee(u),He(b(this),"set","value",u))}};function xt(u,A=!1){return fe(u)?u:new wt(u,A)}function dt(u){He(b(u),"set","value",u.value)}function gn(u){return fe(u)?u.value:u}var Br={get:(u,A,N)=>gn(Reflect.get(u,A,N)),set:(u,A,N,ae)=>{const J=u[A];return fe(J)&&!fe(N)?(J.value=N,!0):Reflect.set(u,A,N,ae)}};function Zn(u){return $r(u)?u:new Proxy(u,Br)}var Ur=class{constructor(u){this.__v_isRef=!0;const{get:A,set:N}=u(()=>Ne(this,"get","value"),()=>He(this,"set","value"));this._get=A,this._set=N}get value(){return this._get()}set value(u){this._set(u)}};function Wi(u){return new Ur(u)}function bl(u){Qn(u)||console.warn("toRefs() expects a reactive object but received a plain one.");const A=i.isArray(u)?new Array(u.length):{};for(const N in u)A[N]=io(u,N);return A}var _l=class{constructor(u,A){this._object=u,this._key=A,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(u){this._object[this._key]=u}};function io(u,A){return fe(u[A])?u[A]:new _l(u,A)}var wl=class{constructor(u,A,N){this._setter=A,this._dirty=!0,this.__v_isRef=!0,this.effect=M(u,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,He(b(this),"set","value"))}}),this.__v_isReadonly=N}get value(){const u=b(this);return u._dirty&&(u._value=this.effect(),u._dirty=!1),Ne(u,"get","value"),u._value}set value(u){this._setter(u)}};function xl(u){let A,N;return i.isFunction(u)?(A=u,N=()=>{console.warn("Write operation failed: computed value is readonly")}):(A=u.get,N=u.set),new wl(A,N,i.isFunction(u)||!u.set)}t.ITERATE_KEY=p,t.computed=xl,t.customRef=Wi,t.effect=M,t.enableTracking=we,t.isProxy=Qn,t.isReactive=$r,t.isReadonly=Fr,t.isRef=fe,t.markRaw=K,t.pauseTracking=Ut,t.proxyRefs=Zn,t.reactive=_r,t.readonly=hn,t.ref=qe,t.resetTracking=Ue,t.shallowReactive=Vi,t.shallowReadonly=zi,t.shallowRef=et,t.stop=Z,t.toRaw=b,t.toRef=io,t.toRefs=bl,t.track=Ne,t.trigger=He,t.triggerRef=dt,t.unref=gn}}),_=T({"node_modules/@vue/reactivity/index.js"(t,i){i.exports=y()}}),O={};B(O,{Alpine:()=>no,default:()=>yl}),r.exports=z(O);var R=!1,I=!1,H=[],Pe=-1;function D(t){C(t)}function C(t){H.includes(t)||H.push(t),re()}function L(t){let i=H.indexOf(t);i!==-1&&i>Pe&&H.splice(i,1)}function re(){!I&&!R&&(R=!0,queueMicrotask(ye))}function ye(){R=!1,I=!0;for(let t=0;tt.effect(i,{scheduler:o=>{Ye?D(o):o()}}),Ge=t.raw}function ht(t){X=t}function yt(t){let i=()=>{};return[c=>{let d=X(c);return t._x_effects||(t._x_effects=new Set,t._x_runEffects=()=>{t._x_effects.forEach(p=>p())}),t._x_effects.add(d),i=()=>{d!==void 0&&(t._x_effects.delete(d),Ae(d))},d},()=>{i()}]}function Ct(t,i){let o=!0,c,d=X(()=>{let p=t();JSON.stringify(p),o?c=p:queueMicrotask(()=>{i(p,c),c=p}),o=!1});return()=>Ae(d)}var Ee=[],be=[],Oe=[];function xe(t){Oe.push(t)}function de(t,i){typeof i=="function"?(t._x_cleanups||(t._x_cleanups=[]),t._x_cleanups.push(i)):(i=t,be.push(i))}function Q(t){Ee.push(t)}function Ve(t,i,o){t._x_attributeCleanups||(t._x_attributeCleanups={}),t._x_attributeCleanups[i]||(t._x_attributeCleanups[i]=[]),t._x_attributeCleanups[i].push(o)}function W(t,i){t._x_attributeCleanups&&Object.entries(t._x_attributeCleanups).forEach(([o,c])=>{(i===void 0||i.includes(o))&&(c.forEach(d=>d()),delete t._x_attributeCleanups[o])})}function ie(t){if(t._x_cleanups)for(;t._x_cleanups.length;)t._x_cleanups.pop()()}var ve=new MutationObserver(We),$e=!1;function me(){ve.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),$e=!0}function ue(){Ze(),ve.disconnect(),$e=!1}var ut=[];function Ze(){let t=ve.takeRecords();ut.push(()=>t.length>0&&We(t));let i=ut.length;queueMicrotask(()=>{if(ut.length===i)for(;ut.length>0;)ut.shift()()})}function te(t){if(!$e)return t();ue();let i=t();return me(),i}var k=!1,j=[];function he(){k=!0}function V(){k=!1,We(j),j=[]}function We(t){if(k){j=j.concat(t);return}let i=new Set,o=new Set,c=new Map,d=new Map;for(let p=0;pm.nodeType===1&&i.add(m)),t[p].removedNodes.forEach(m=>m.nodeType===1&&o.add(m))),t[p].type==="attributes")){let m=t[p].target,x=t[p].attributeName,M=t[p].oldValue,Z=()=>{c.has(m)||c.set(m,[]),c.get(m).push({name:x,value:m.getAttribute(x)})},Me=()=>{d.has(m)||d.set(m,[]),d.get(m).push(x)};m.hasAttribute(x)&&M===null?Z():m.hasAttribute(x)?(Me(),Z()):Me()}d.forEach((p,m)=>{W(m,p)}),c.forEach((p,m)=>{Ee.forEach(x=>x(m,p))});for(let p of o)i.has(p)||be.forEach(m=>m(p));i.forEach(p=>{p._x_ignoreSelf=!0,p._x_ignore=!0});for(let p of i)o.has(p)||p.isConnected&&(delete p._x_ignoreSelf,delete p._x_ignore,Oe.forEach(m=>m(p)),p._x_ignore=!0,p._x_ignoreSelf=!0);i.forEach(p=>{delete p._x_ignoreSelf,delete p._x_ignore}),i=null,o=null,c=null,d=null}function pe(t){return ce(q(t))}function $(t,i,o){return t._x_dataStack=[i,...q(o||t)],()=>{t._x_dataStack=t._x_dataStack.filter(c=>c!==i)}}function q(t){return t._x_dataStack?t._x_dataStack:typeof ShadowRoot=="function"&&t instanceof ShadowRoot?q(t.host):t.parentNode?q(t.parentNode):[]}function ce(t){return new Proxy({objects:t},Be)}var Be={ownKeys({objects:t}){return Array.from(new Set(t.flatMap(i=>Object.keys(i))))},has({objects:t},i){return i==Symbol.unscopables?!1:t.some(o=>Object.prototype.hasOwnProperty.call(o,i)||Reflect.has(o,i))},get({objects:t},i,o){return i=="toJSON"?Ce:Reflect.get(t.find(c=>Reflect.has(c,i))||{},i,o)},set({objects:t},i,o,c){const d=t.find(m=>Object.prototype.hasOwnProperty.call(m,i))||t[t.length-1],p=Object.getOwnPropertyDescriptor(d,i);return p!=null&&p.set&&(p!=null&&p.get)?Reflect.set(d,i,o,c):Reflect.set(d,i,o)}};function Ce(){return Reflect.ownKeys(this).reduce((i,o)=>(i[o]=Reflect.get(this,o),i),{})}function ot(t){let i=c=>typeof c=="object"&&!Array.isArray(c)&&c!==null,o=(c,d="")=>{Object.entries(Object.getOwnPropertyDescriptors(c)).forEach(([p,{value:m,enumerable:x}])=>{if(x===!1||m===void 0||typeof m=="object"&&m!==null&&m.__v_skip)return;let M=d===""?p:`${d}.${p}`;typeof m=="object"&&m!==null&&m._x_interceptor?c[p]=m.initialize(t,M,p):i(m)&&m!==c&&!(m instanceof Element)&&o(m,M)})};return o(t)}function it(t,i=()=>{}){let o={initialValue:void 0,_x_interceptor:!0,initialize(c,d,p){return t(this.initialValue,()=>Rt(c,d),m=>Lt(c,d,m),d,p)}};return i(o),c=>{if(typeof c=="object"&&c!==null&&c._x_interceptor){let d=o.initialize.bind(o);o.initialize=(p,m,x)=>{let M=c.initialize(p,m,x);return o.initialValue=M,d(p,m,x)}}else o.initialValue=c;return o}}function Rt(t,i){return i.split(".").reduce((o,c)=>o[c],t)}function Lt(t,i,o){if(typeof i=="string"&&(i=i.split(".")),i.length===1)t[i[0]]=o;else{if(i.length===0)throw error;return t[i[0]]||(t[i[0]]={}),Lt(t[i[0]],i.slice(1),o)}}var lr={};function At(t,i){lr[t]=i}function Wt(t,i){return Object.entries(lr).forEach(([o,c])=>{let d=null;function p(){if(d)return d;{let[m,x]=G(i);return d={interceptor:it,...m},de(i,x),d}}Object.defineProperty(t,`$${o}`,{get(){return c(i,p())},enumerable:!1})}),t}function ur(t,i,o,...c){try{return o(...c)}catch(d){er(d,t,i)}}function er(t,i,o=void 0){t=Object.assign(t??{message:"No error message given."},{el:i,expression:o}),console.warn(`Alpine Expression Error: ${t.message} + +${o?'Expression: "'+o+`" + +`:""}`,i),setTimeout(()=>{throw t},0)}var cr=!0;function An(t){let i=cr;cr=!1;let o=t();return cr=i,o}function Kt(t,i,o={}){let c;return bt(t,i)(d=>c=d,o),c}function bt(...t){return Tn(...t)}var Tn=Qr;function Pn(t){Tn=t}function Qr(t,i){let o={};Wt(o,t);let c=[o,...q(t)],d=typeof i=="function"?yi(c,i):_i(c,i,t);return ur.bind(null,t,i,d)}function yi(t,i){return(o=()=>{},{scope:c={},params:d=[]}={})=>{let p=i.apply(ce([c,...t]),d);Cr(o,p)}}var Zr={};function bi(t,i){if(Zr[t])return Zr[t];let o=Object.getPrototypeOf(async function(){}).constructor,c=/^[\n\s]*if.*\(.*\)/.test(t.trim())||/^(let|const)\s/.test(t.trim())?`(async()=>{ ${t} })()`:t,p=(()=>{try{let m=new o(["__self","scope"],`with (scope) { __self.result = ${c} }; __self.finished = true; return __self.result;`);return Object.defineProperty(m,"name",{value:`[Alpine] ${t}`}),m}catch(m){return er(m,i,t),Promise.resolve()}})();return Zr[t]=p,p}function _i(t,i,o){let c=bi(i,o);return(d=()=>{},{scope:p={},params:m=[]}={})=>{c.result=void 0,c.finished=!1;let x=ce([p,...t]);if(typeof c=="function"){let M=c(c,x).catch(Z=>er(Z,o,i));c.finished?(Cr(d,c.result,x,m,o),c.result=void 0):M.then(Z=>{Cr(d,Z,x,m,o)}).catch(Z=>er(Z,o,i)).finally(()=>c.result=void 0)}}}function Cr(t,i,o,c,d){if(cr&&typeof i=="function"){let p=i.apply(o,c);p instanceof Promise?p.then(m=>Cr(t,m,o,c)).catch(m=>er(m,d,i)):t(p)}else typeof i=="object"&&i instanceof Promise?i.then(p=>t(p)):t(i)}var en="x-";function Jt(t=""){return en+t}function Rn(t){en=t}var fr={};function st(t,i){return fr[t]=i,{before(o){if(!fr[o]){console.warn(String.raw`Cannot find directive \`${o}\`. \`${t}\` will use the default order of execution`);return}const c=Ke.indexOf(o);Ke.splice(c>=0?c:Ke.indexOf("DEFAULT"),0,t)}}}function f(t){return Object.keys(fr).includes(t)}function h(t,i,o){if(i=Array.from(i),t._x_virtualDirectives){let p=Object.entries(t._x_virtualDirectives).map(([x,M])=>({name:x,value:M})),m=w(p);p=p.map(x=>m.find(M=>M.name===x.name)?{name:`x-bind:${x.name}`,value:`"${x.value}"`}:x),i=i.concat(p)}let c={};return i.map(Te((p,m)=>c[p]=m)).filter(Re).map(rt(c,o)).sort(ct).map(p=>oe(t,p))}function w(t){return Array.from(t).map(Te()).filter(i=>!Re(i))}var E=!1,P=new Map,F=Symbol();function U(t){E=!0;let i=Symbol();F=i,P.set(i,[]);let o=()=>{for(;P.get(i).length;)P.get(i).shift()();P.delete(i)},c=()=>{E=!1,o()};t(o),c()}function G(t){let i=[],o=x=>i.push(x),[c,d]=yt(t);return i.push(d),[{Alpine:on,effect:c,cleanup:o,evaluateLater:bt.bind(bt,t),evaluate:Kt.bind(Kt,t)},()=>i.forEach(x=>x())]}function oe(t,i){let o=()=>{},c=fr[i.type]||o,[d,p]=G(t);Ve(t,i.original,p);let m=()=>{t._x_ignore||t._x_ignoreSelf||(c.inline&&c.inline(t,i,d),c=c.bind(c,t,i,d),E?P.get(F).push(c):c())};return m.runCleanups=p,m}var se=(t,i)=>({name:o,value:c})=>(o.startsWith(t)&&(o=o.replace(t,i)),{name:o,value:c}),ke=t=>t;function Te(t=()=>{}){return({name:i,value:o})=>{let{name:c,value:d}=Fe.reduce((p,m)=>m(p),{name:i,value:o});return c!==i&&t(c,i),{name:c,value:d}}}var Fe=[];function _e(t){Fe.push(t)}function Re({name:t}){return je().test(t)}var je=()=>new RegExp(`^${en}([^:^.]+)\\b`);function rt(t,i){return({name:o,value:c})=>{let d=o.match(je()),p=o.match(/:([a-zA-Z0-9\-_:]+)/),m=o.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],x=i||t[o]||o;return{type:d?d[1]:null,value:p?p[1]:null,modifiers:m.map(M=>M.replace(".","")),expression:c,original:x}}}var Ie="DEFAULT",Ke=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",Ie,"teleport"];function ct(t,i){let o=Ke.indexOf(t.type)===-1?Ie:t.type,c=Ke.indexOf(i.type)===-1?Ie:i.type;return Ke.indexOf(o)-Ke.indexOf(c)}function mt(t,i,o={}){t.dispatchEvent(new CustomEvent(i,{detail:o,bubbles:!0,composed:!0,cancelable:!0}))}function Xe(t,i){if(typeof ShadowRoot=="function"&&t instanceof ShadowRoot){Array.from(t.children).forEach(d=>Xe(d,i));return}let o=!1;if(i(t,()=>o=!0),o)return;let c=t.firstElementChild;for(;c;)Xe(c,i),c=c.nextElementSibling}function ft(t,...i){console.warn(`Alpine Warning: ${t}`,...i)}var dr=!1;function pr(){dr&&ft("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),dr=!0,document.body||ft("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `