command: sed -n '1,180p' app/Services/Payments/MockPaymentProvider.php && sed -n '1,120p' app/Exceptions/PaymentFailedException.php && sed -n '130,185p' app/Services/CheckoutService.php

PaymentFailedException.php

aggregated_output:
<?php

namespace App\Services\Payments;

use App\Contracts\PaymentProvider;
use App\Enums\PaymentMethod;
use App\Enums\PaymentStatus;
use App\Enums\RefundStatus;
use App\Models\Checkout;
use App\Models\Payment;
use App\ValueObjects\PaymentResult;
use App\ValueObjects\RefundResult;
use Illuminate\Support\Str;

class MockPaymentProvider implements PaymentProvider
{
    /**
     * @param  array<string, mixed>  $paymentMethodData
     */
    public function charge(Checkout $checkout, PaymentMethod $method, array $paymentMethodData = []): PaymentResult
    {
        return match ($method) {
            PaymentMethod::CreditCard => $this->chargeCreditCard($paymentMethodData),
            PaymentMethod::Paypal => $this->captured(),
            PaymentMethod::BankTransfer => new PaymentResult(
                success: true,
                status: PaymentStatus::Pending,
                referenceId: $this->reference('bank'),
            ),
        };
    }

    public function refund(Payment $payment, int $amount): RefundResult
    {
        if ($amount <= 0) {
            return new RefundResult(
                success: false,
                status: RefundStatus::Failed,
                errorCode: 'invalid_refund_amount',
                errorMessage: 'Refund amount must be greater than zero.',
            );
        }

        return new RefundResult(
            success: true,
            status: RefundStatus::Processed,
            referenceId: $this->reference('refund'),
        );
    }

    /**
     * @param  array<string, mixed>  $paymentMethodData
     */
    private function chargeCreditCard(array $paymentMethodData): PaymentResult
    {
        $number = preg_replace('/\D+/', '', (string) data_get(
            $paymentMethodData,
            'card_number',
            data_get($paymentMethodData, 'number', data_get($paymentMethodData, 'card.number', '')),
        ));

        return match ($number) {
            '4000000000000002' => new PaymentResult(
                success: false,
                status: PaymentStatus::Failed,
                errorCode: 'card_declined',
                errorMessage: 'The card was declined.',
            ),
            '4000000000009995' => new PaymentResult(
                success: false,
                status: PaymentStatus::Failed,
                errorCode: 'insufficient_funds',
                errorMessage: 'The card has insufficient funds.',
            ),
            default => $this->captured(),
        };
    }

    private function captured(): PaymentResult
    {
        return new PaymentResult(
            success: true,
            status: PaymentStatus::Captured,
            referenceId: $this->reference('payment'),
        );
    }

    private function reference(string $prefix): string
    {
        return 'mock_'.$prefix.'_'.Str::lower(Str::random(16));
    }
}
<?php

namespace App\Exceptions;

use App\ValueObjects\PaymentResult;
use RuntimeException;

class PaymentFailedException extends RuntimeException
{
    public function __construct(
        public readonly string $paymentErrorCode,
        string $message,
    ) {
        parent::__construct($message);
    }

    public static function fromResult(PaymentResult $result): self
    {
        return new self(
            $result->errorCode ?? 'payment_failed',
            $result->errorMessage ?? 'Payment could not be processed.',
        );
    }
}

            if ($checkout->status === CheckoutStatus::PaymentSelected) {
                return $checkout;
            }

            $this->assertStatus($checkout, [CheckoutStatus::ShippingSelected]);

            if (! in_array($paymentMethod, ['credit_card', 'paypal', 'bank_transfer'], true)) {
                throw InvalidCheckoutTransitionException::because('Payment method is invalid.');
            }

            if ($checkout->totals_json === null) {
                $this->pricing->calculate($checkout);
            }

            CartLine::withoutGlobalScopes()
                ->where('cart_id', $checkout->cart_id)
                ->get()
                ->each(function (CartLine $line): void {
                    $inventory = InventoryItem::withoutGlobalScopes()
                        ->where('variant_id', $line->variant_id)
                        ->firstOrFail();

                    $this->inventory->reserve($inventory, $line->quantity);
                });

            $checkout->forceFill([
                'payment_method' => $paymentMethod,
                'status' => CheckoutStatus::PaymentSelected,
                'expires_at' => now()->addDay(),
            ])->save();

            return $checkout->refresh();
        });
    }

    public function expireCheckout(Checkout $checkout): Checkout
    {
        return DB::transaction(function () use ($checkout): Checkout {
            $checkout = $this->freshCheckout($checkout);

            if (in_array($checkout->status, [CheckoutStatus::Completed, CheckoutStatus::Expired], true)) {
                return $checkout;
            }

            if ($checkout->status === CheckoutStatus::PaymentSelected) {
                CartLine::withoutGlobalScopes()
                    ->where('cart_id', $checkout->cart_id)
                    ->get()
                    ->each(function (CartLine $line): void {
                        $inventory = InventoryItem::withoutGlobalScopes()
                            ->where('variant_id', $line->variant_id)
                            ->firstOrFail();

                        $this->inventory->release($inventory, $line->quantity);
                    });


output:
Chunk ID: 46e942
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 1403
Output:
<?php

namespace App\Services\Payments;

use App\Contracts\PaymentProvider;
use App\Enums\PaymentMethod;
use App\Enums\PaymentStatus;
use App\Enums\RefundStatus;
use App\Models\Checkout;
use App\Models\Payment;
use App\ValueObjects\PaymentResult;
use App\ValueObjects\RefundResult;
use Illuminate\Support\Str;

class MockPaymentProvider implements PaymentProvider
{
    /**
     * @param  array<string, mixed>  $paymentMethodData
     */
    public function charge(Checkout $checkout, PaymentMethod $method, array $paymentMethodData = []): PaymentResult
    {
        return match ($method) {
            PaymentMethod::CreditCard => $this->chargeCreditCard($paymentMethodData),
            PaymentMethod::Paypal => $this->captured(),
            PaymentMethod::BankTransfer => new PaymentResult(
                success: true,
                status: PaymentStatus::Pending,
                referenceId: $this->reference('bank'),
            ),
        };
    }

    public function refund(Payment $payment, int $amount): RefundResult
    {
        if ($amount <= 0) {
            return new RefundResult(
                success: false,
                status: RefundStatus::Failed,
                errorCode: 'invalid_refund_amount',
                errorMessage: 'Refund amount must be greater than zero.',
            );
        }

        return new RefundResult(
            success: true,
            status: RefundStatus::Processed,
            referenceId: $this->reference('refund'),
        );
    }

    /**
     * @param  array<string, mixed>  $paymentMethodData
     */
    private function chargeCreditCard(array $paymentMethodData): PaymentResult
    {
        $number = preg_replace('/\D+/', '', (string) data_get(
            $paymentMethodData,
            'card_number',
            data_get($paymentMethodData, 'number', data_get($paymentMethodData, 'card.number', '')),
        ));

        return match ($number) {
            '4000000000000002' => new PaymentResult(
                success: false,
                status: PaymentStatus::Failed,
                errorCode: 'card_declined',
                errorMessage: 'The card was declined.',
            ),
            '4000000000009995' => new PaymentResult(
                success: false,
                status: PaymentStatus::Failed,
                errorCode: 'insufficient_funds',
                errorMessage: 'The card has insufficient funds.',
            ),
            default => $this->captured(),
        };
    }

    private function captured(): PaymentResult
    {
        return new PaymentResult(
            success: true,
            status: PaymentStatus::Captured,
            referenceId: $this->reference('payment'),
        );
    }

    private function reference(string $prefix): string
    {
        return 'mock_'.$prefix.'_'.Str::lower(Str::random(16));
    }
}
<?php

namespace App\Exceptions;

use App\ValueObjects\PaymentResult;
use RuntimeException;

class PaymentFailedException extends RuntimeException
{
    public function __construct(
        public readonly string $paymentErrorCode,
        string $message,
    ) {
        parent::__construct($message);
    }

    public static function fromResult(PaymentResult $result): self
    {
        return new self(
            $result->errorCode ?? 'payment_failed',
            $result->errorMessage ?? 'Payment could not be processed.',
        );
    }
}

            if ($checkout->status === CheckoutStatus::PaymentSelected) {
                return $checkout;
            }

            $this->assertStatus($checkout, [CheckoutStatus::ShippingSelected]);

            if (! in_array($paymentMethod, ['credit_card', 'paypal', 'bank_transfer'], true)) {
                throw InvalidCheckoutTransitionException::because('Payment method is invalid.');
            }

            if ($checkout->totals_json === null) {
                $this->pricing->calculate($checkout);
            }

            CartLine::withoutGlobalScopes()
                ->where('cart_id', $checkout->cart_id)
                ->get()
                ->each(function (CartLine $line): void {
                    $inventory = InventoryItem::withoutGlobalScopes()
                        ->where('variant_id', $line->variant_id)
                        ->firstOrFail();

                    $this->inventory->reserve($inventory, $line->quantity);
                });

            $checkout->forceFill([
                'payment_method' => $paymentMethod,
                'status' => CheckoutStatus::PaymentSelected,
                'expires_at' => now()->addDay(),
            ])->save();

            return $checkout->refresh();
        });
    }

    public function expireCheckout(Checkout $checkout): Checkout
    {
        return DB::transaction(function () use ($checkout): Checkout {
            $checkout = $this->freshCheckout($checkout);

            if (in_array($checkout->status, [CheckoutStatus::Completed, CheckoutStatus::Expired], true)) {
                return $checkout;
            }

            if ($checkout->status === CheckoutStatus::PaymentSelected) {
                CartLine::withoutGlobalScopes()
                    ->where('cart_id', $checkout->cart_id)
                    ->get()
                    ->each(function (CartLine $line): void {
                        $inventory = InventoryItem::withoutGlobalScopes()
                            ->where('variant_id', $line->variant_id)
                            ->firstOrFail();

                        $this->inventory->release($inventory, $line->quantity);
                    });


cmd: sed -n '90,140p' tests/Feature/Api/StorefrontCheckoutApiTest.php && sed -n '90,115p' tests/Feature/Storefront/CartCheckoutUiTest.php


command: sed -n '90,140p' tests/Feature/Api/StorefrontCheckoutApiTest.php && sed -n '90,115p' tests/Feature/Storefront/CartCheckoutUiTest.php

StorefrontCheckoutApiTest.php

type: read

CartCheckoutUiTest.php

aggregated_output:
        ->assertJsonPath('data.totals.subtotal', 4998)
        ->assertJsonPath('data.cart.line_count', 2);

    $checkoutId = $checkoutResponse['data']['id'];

    $addressResponse = $api()
        ->putJson("/api/storefront/v1/checkouts/{$checkoutId}/address", [
            'shipping_address' => storefrontApiCheckoutAddress(),
        ]);

    $addressResponse
        ->assertOk()
        ->assertJsonPath('data.status', 'addressed')
        ->assertJsonPath('data.shipping_address.country', 'DE')
        ->assertJsonCount(3, 'data.available_shipping_rates');

    $shippingRateId = $addressResponse['data']['available_shipping_rates'][0]['id'];

    $api()
        ->putJson("/api/storefront/v1/checkouts/{$checkoutId}/shipping-method", [
            'shipping_rate_id' => $shippingRateId,
        ])
        ->assertOk()
        ->assertJsonPath('data.status', 'shipping_selected')
        ->assertJsonPath('data.shipping_method_id', $shippingRateId)
        ->assertJsonPath('data.totals.shipping', 799);

    $api()
        ->postJson("/api/storefront/v1/checkouts/{$checkoutId}/apply-discount", ['code' => 'SAVE10'])
        ->assertOk()
        ->assertJsonPath('data.discount_code', 'SAVE10')
        ->assertJsonPath('data.totals.discount', 500);

    $api()
        ->deleteJson("/api/storefront/v1/checkouts/{$checkoutId}/discount")
        ->assertOk()
        ->assertJsonPath('data.discount_code', null)
        ->assertJsonPath('data.totals.discount', 0);

    $api()
        ->putJson("/api/storefront/v1/checkouts/{$checkoutId}/payment-method", [
            'payment_method' => 'credit_card',
        ])
        ->assertOk()
        ->assertJsonPath('data.status', 'payment_selected')
        ->assertJsonPath('data.payment_method', 'credit_card');

    $checkout = Checkout::withoutGlobalScopes()->findOrFail($checkoutId);
    $inventory = InventoryItem::withoutGlobalScopes()->where('variant_id', $variant->getKey())->firstOrFail();

    expect($checkout->status)->toBe(CheckoutStatus::PaymentSelected)
    session(['cart_id' => $cart->getKey()]);
    app(CartService::class)->addLine($cart, $variant->getKey(), 2);

    $component = Livewire::test(CartShow::class)
        ->set('discountCode', 'SAVE10')
        ->call('applyDiscount')
        ->assertHasNoErrors()
        ->assertSet('appliedDiscountCode', 'SAVE10')
        ->set('shippingCountry', 'DE')
        ->set('shippingPostalCode', '10115')
        ->call('estimateShipping')
        ->assertHasNoErrors()
        ->assertSee('Standard Shipping');

    expect(session('cart_discount_code'))->toBe('SAVE10')
        ->and($component->instance()->discountAmount())->toBe(500)
        ->and($component->instance()->estimatedShippingAmount())->toBe(799)
        ->and($component->instance()->estimatedTotal())->toBe(5297);

    Livewire::test(CheckoutShow::class)
        ->assertSet('discountCode', 'SAVE10');

    $checkout = Checkout::withoutGlobalScopes()->where('cart_id', $cart->getKey())->firstOrFail();

    expect($checkout->discount_code)->toBe('SAVE10')
        ->and($checkout->totals_json['discount'])->toBe(500);

status: completed


output:
Chunk ID: e1539e
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 778
Output:
        ->assertJsonPath('data.totals.subtotal', 4998)
        ->assertJsonPath('data.cart.line_count', 2);

    $checkoutId = $checkoutResponse['data']['id'];

    $addressResponse = $api()
        ->putJson("/api/storefront/v1/checkouts/{$checkoutId}/address", [
            'shipping_address' => storefrontApiCheckoutAddress(),
        ]);

    $addressResponse
        ->assertOk()
        ->assertJsonPath('data.status', 'addressed')
        ->assertJsonPath('data.shipping_address.country', 'DE')
        ->assertJsonCount(3, 'data.available_shipping_rates');

    $shippingRateId = $addressResponse['data']['available_shipping_rates'][0]['id'];

    $api()
        ->putJson("/api/storefront/v1/checkouts/{$checkoutId}/shipping-method", [
            'shipping_rate_id' => $shippingRateId,
        ])
        ->assertOk()
        ->assertJsonPath('data.status', 'shipping_selected')
        ->assertJsonPath('data.shipping_method_id', $shippingRateId)
        ->assertJsonPath('data.totals.shipping', 799);

    $api()
        ->postJson("/api/storefront/v1/checkouts/{$checkoutId}/apply-discount", ['code' => 'SAVE10'])
        ->assertOk()
        ->assertJsonPath('data.discount_code', 'SAVE10')
        ->assertJsonPath('data.totals.discount', 500);

    $api()
        ->deleteJson("/api/storefront/v1/checkouts/{$checkoutId}/discount")
        ->assertOk()
        ->assertJsonPath('data.discount_code', null)
        ->assertJsonPath('data.totals.discount', 0);

    $api()
        ->putJson("/api/storefront/v1/checkouts/{$checkoutId}/payment-method", [
            'payment_method' => 'credit_card',
        ])
        ->assertOk()
        ->assertJsonPath('data.status', 'payment_selected')
        ->assertJsonPath('data.payment_method', 'credit_card');

    $checkout = Checkout::withoutGlobalScopes()->findOrFail($checkoutId);
    $inventory = InventoryItem::withoutGlobalScopes()->where('variant_id', $variant->getKey())->firstOrFail();

    expect($checkout->status)->toBe(CheckoutStatus::PaymentSelected)
    session(['cart_id' => $cart->getKey()]);
    app(CartService::class)->addLine($cart, $variant->getKey(), 2);

    $component = Livewire::test(CartShow::class)
        ->set('discountCode', 'SAVE10')
        ->call('applyDiscount')
        ->assertHasNoErrors()
        ->assertSet('appliedDiscountCode', 'SAVE10')
        ->set('shippingCountry', 'DE')
        ->set('shippingPostalCode', '10115')
        ->call('estimateShipping')
        ->assertHasNoErrors()
        ->assertSee('Standard Shipping');

    expect(session('cart_discount_code'))->toBe('SAVE10')
        ->and($component->instance()->discountAmount())->toBe(500)
        ->and($component->instance()->estimatedShippingAmount())->toBe(799)
        ->and($component->instance()->estimatedTotal())->toBe(5297);

    Livewire::test(CheckoutShow::class)
        ->assertSet('discountCode', 'SAVE10');

    $checkout = Checkout::withoutGlobalScopes()->where('cart_id', $cart->getKey())->firstOrFail();

    expect($checkout->discount_code)->toBe('SAVE10')
        ->and($checkout->totals_json['discount'])->toBe(500);


cmd: rg "DACH|Standard Shipping|Express Shipping|shipping zone" tests/Feature tests/Browser -n


command: rg "DACH|Standard Shipping|Express Shipping|shipping zone" tests/Feature tests/Browser -n

type: search

cmd: rg 'DACH|Standard Shipping|Express Shipping|shipping zone' tests/Feature tests/Browser -n

query: DACH|Standard Shipping|Express Shipping|shipping zone

path: Feature

aggregated_output:
tests/Feature/Storefront/OrderViewsTest.php:55:        ->where('name', 'Standard Shipping')
tests/Feature/Storefront/CartCheckoutUiTest.php:102:        ->assertSee('Standard Shipping');
tests/Feature/Storefront/CartCheckoutUiTest.php:151:        ->where('name', 'Standard Shipping')
tests/Feature/Api/AdminShippingSettingsApiTest.php:45:        ->assertJsonPath('data.0.name', 'DACH')


output:
Chunk ID: c3f313
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 97
Output:
tests/Feature/Storefront/OrderViewsTest.php:55:        ->where('name', 'Standard Shipping')
tests/Feature/Storefront/CartCheckoutUiTest.php:102:        ->assertSee('Standard Shipping');
tests/Feature/Storefront/CartCheckoutUiTest.php:151:        ->where('name', 'Standard Shipping')
tests/Feature/Api/AdminShippingSettingsApiTest.php:45:        ->assertJsonPath('data.0.name', 'DACH')


cmd: sed -n '1,90p' tests/Feature/Api/AdminShippingSettingsApiTest.php


command: sed -n '1,90p' tests/Feature/Api/AdminShippingSettingsApiTest.php

aggregated_output:
<?php

use App\Enums\ShippingRateType;
use App\Models\ShippingRate;
use App\Models\ShippingZone;
use App\Models\Store;
use App\Models\User;
use App\Services\WebhookService;
use Database\Seeders\DatabaseSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;

uses(RefreshDatabase::class);

beforeEach(function (): void {
    $this->withoutVite();
    $this->seed(DatabaseSeeder::class);
});

function adminShippingSettingsApiStore(): Store
{
    return Store::query()->where('handle', 'acme-fashion')->firstOrFail();
}

function adminShippingSettingsApiUser(): User
{
    return User::query()->where('email', 'admin@acme.test')->firstOrFail();
}

/**
 * @param  list<string>  $abilities
 * @return array{token: \App\Models\OauthToken, plain_text: string}
 */
function adminShippingSettingsApiToken(Store $store, array $abilities): array
{
    return app(WebhookService::class)->createApiToken($store, 'Shipping settings integration', $abilities);
}

test('admin shipping settings api lists creates updates zones and adds rates', function (): void {
    $store = adminShippingSettingsApiStore();
    $user = adminShippingSettingsApiUser();

    $this->actingAs($user)
        ->getJson("/api/admin/v1/stores/{$store->getKey()}/shipping/zones")
        ->assertOk()
        ->assertJsonPath('data.0.name', 'DACH')
        ->assertJsonPath('data.0.rates.0.config_json.currency', $store->default_currency);

    $createResponse = $this->actingAs($user)
        ->postJson("/api/admin/v1/stores/{$store->getKey()}/shipping/zones", [
            'name' => 'Nordics API',
            'countries_json' => ['se', 'no'],
            'regions_json' => ['stockholm'],
        ])
        ->assertCreated()
        ->assertJsonPath('data.name', 'Nordics API')
        ->assertJsonPath('data.countries_json.0', 'SE')
        ->assertJsonPath('data.regions_json.0', 'STOCKHOLM');

    $zone = ShippingZone::withoutGlobalScopes()->findOrFail($createResponse->json('data.id'));

    $this->actingAs($user)
        ->putJson("/api/admin/v1/stores/{$store->getKey()}/shipping/zones/{$zone->getKey()}", [
            'name' => 'Nordics and Baltics API',
            'countries_json' => ['SE', 'DK'],
            'regions_json' => [],
        ])
        ->assertOk()
        ->assertJsonPath('data.name', 'Nordics and Baltics API')
        ->assertJsonPath('data.countries_json.1', 'DK');

    $rateResponse = $this->actingAs($user)
        ->postJson("/api/admin/v1/stores/{$store->getKey()}/shipping/zones/{$zone->getKey()}/rates", [
            'name' => 'API Express',
            'type' => 'flat',
            'config_json' => [
                'price_amount' => 1200,
                'currency' => $store->default_currency,
            ],
            'is_active' => true,
        ])
        ->assertCreated()
        ->assertJsonPath('data.name', 'API Express')
        ->assertJsonPath('data.type', 'flat')
        ->assertJsonPath('data.config_json.price_amount', 1200);

    $rate = ShippingRate::withoutGlobalScopes()->findOrFail($rateResponse->json('data.id'));

    expect($zone->refresh()->countries_json)->toBe(['SE', 'DK'])
        ->and($rate->type)->toBe(ShippingRateType::Flat)
        ->and($rate->config_json['amount'])->toBe(1200);


output:
Chunk ID: e41234
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 809
Output:
<?php

use App\Enums\ShippingRateType;
use App\Models\ShippingRate;
use App\Models\ShippingZone;
use App\Models\Store;
use App\Models\User;
use App\Services\WebhookService;
use Database\Seeders\DatabaseSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;

uses(RefreshDatabase::class);

beforeEach(function (): void {
    $this->withoutVite();
    $this->seed(DatabaseSeeder::class);
});

function adminShippingSettingsApiStore(): Store
{
    return Store::query()->where('handle', 'acme-fashion')->firstOrFail();
}

function adminShippingSettingsApiUser(): User
{
    return User::query()->where('email', 'admin@acme.test')->firstOrFail();
}

/**
 * @param  list<string>  $abilities
 * @return array{token: \App\Models\OauthToken, plain_text: string}
 */
function adminShippingSettingsApiToken(Store $store, array $abilities): array
{
    return app(WebhookService::class)->createApiToken($store, 'Shipping settings integration', $abilities);
}

test('admin shipping settings api lists creates updates zones and adds rates', function (): void {
    $store = adminShippingSettingsApiStore();
    $user = adminShippingSettingsApiUser();

    $this->actingAs($user)
        ->getJson("/api/admin/v1/stores/{$store->getKey()}/shipping/zones")
        ->assertOk()
        ->assertJsonPath('data.0.name', 'DACH')
        ->assertJsonPath('data.0.rates.0.config_json.currency', $store->default_currency);

    $createResponse = $this->actingAs($user)
        ->postJson("/api/admin/v1/stores/{$store->getKey()}/shipping/zones", [
            'name' => 'Nordics API',
            'countries_json' => ['se', 'no'],
            'regions_json' => ['stockholm'],
        ])
        ->assertCreated()
        ->assertJsonPath('data.name', 'Nordics API')
        ->assertJsonPath('data.countries_json.0', 'SE')
        ->assertJsonPath('data.regions_json.0', 'STOCKHOLM');

    $zone = ShippingZone::withoutGlobalScopes()->findOrFail($createResponse->json('data.id'));

    $this->actingAs($user)
        ->putJson("/api/admin/v1/stores/{$store->getKey()}/shipping/zones/{$zone->getKey()}", [
            'name' => 'Nordics and Baltics API',
            'countries_json' => ['SE', 'DK'],
            'regions_json' => [],
        ])
        ->assertOk()
        ->assertJsonPath('data.name', 'Nordics and Baltics API')
        ->assertJsonPath('data.countries_json.1', 'DK');

    $rateResponse = $this->actingAs($user)
        ->postJson("/api/admin/v1/stores/{$store->getKey()}/shipping/zones/{$zone->getKey()}/rates", [
            'name' => 'API Express',
            'type' => 'flat',
            'config_json' => [
                'price_amount' => 1200,
                'currency' => $store->default_currency,
            ],
            'is_active' => true,
        ])
        ->assertCreated()
        ->assertJsonPath('data.name', 'API Express')
        ->assertJsonPath('data.type', 'flat')
        ->assertJsonPath('data.config_json.price_amount', 1200);

    $rate = ShippingRate::withoutGlobalScopes()->findOrFail($rateResponse->json('data.id'));

    expect($zone->refresh()->countries_json)->toBe(['SE', 'DK'])
        ->and($rate->type)->toBe(ShippingRateType::Flat)
        ->and($rate->config_json['amount'])->toBe(1200);


message: Suite 9 reveals a couple of spec mismatches in the checkout foundation before tests can be faithful: seeded shipping still uses the old DACH/7.99 setup, the checkout country list lacks US, and the payment UI still has an internal “Reserve items” step. I’m aligning those to the spec while keeping the existing service methods intact.

phase: commentary


type: message

role: assistant

text: Suite 9 reveals a couple of spec mismatches in the checkout foundation before tests can be faithful: seeded shipping still uses the old DACH/7.99 setup, the checkout country list lacks US, and the payment UI still has an internal “Reserve items” step. I’m aligning those to the spec while keeping the existing service methods intact.


status: completed

input:
*** Begin Patch
*** Update File: database/seeders/ShippingZoneSeeder.php
@@
     public function run(): void
     {
         Store::query()->get()->each(function (Store $store): void {
+            ShippingZone::withoutGlobalScopes()
+                ->where('store_id', $store->getKey())
+                ->delete();
+
             ShippingZone::withoutGlobalScopes()->updateOrCreate(
                 [
                     'store_id' => $store->getKey(),
-                    'name' => 'DACH',
+                    'name' => 'Domestic',
                 ],
                 [
-                    'countries_json' => ['DE', 'AT', 'CH'],
+                    'countries_json' => ['DE'],
+                    'regions_json' => [],
+                ],
+            );
+
+            ShippingZone::withoutGlobalScopes()->updateOrCreate(
+                [
+                    'store_id' => $store->getKey(),
+                    'name' => 'International',
+                ],
+                [
+                    'countries_json' => ['AT', 'CH', 'US', 'GB', 'CA', 'AU'],
                     'regions_json' => [],
                 ],
             );
         });
     }
 }
*** End Patch


stdout:
Success. Updated the following files:
M database/seeders/ShippingZoneSeeder.php

type: update

unified_diff:
@@ -16,2 +16,6 @@
         Store::query()->get()->each(function (Store $store): void {
+            ShippingZone::withoutGlobalScopes()
+                ->where('store_id', $store->getKey())
+                ->delete();
+
             ShippingZone::withoutGlobalScopes()->updateOrCreate(
@@ -19,6 +23,17 @@
                     'store_id' => $store->getKey(),
-                    'name' => 'DACH',
+                    'name' => 'Domestic',
                 ],
                 [
-                    'countries_json' => ['DE', 'AT', 'CH'],
+                    'countries_json' => ['DE'],
+                    'regions_json' => [],
+                ],
+            );
+
+            ShippingZone::withoutGlobalScopes()->updateOrCreate(
+                [
+                    'store_id' => $store->getKey(),
+                    'name' => 'International',
+                ],
+                [
+                    'countries_json' => ['AT', 'CH', 'US', 'GB', 'CA', 'AU'],
                     'regions_json' => [],


output: {"output":"Success. Updated the following files:\nM database/seeders/ShippingZoneSeeder.php\n","metadata":{"exit_code":0,"duration_seconds":0.0}}


status: completed

input:
*** Begin Patch
*** Update File: database/seeders/ShippingRateSeeder.php
@@
     public function run(): void
     {
         ShippingZone::withoutGlobalScopes()->get()->each(function (ShippingZone $zone): void {
-            foreach ($this->rates() as $rate) {
+            foreach ($this->ratesForZone($zone) as $rate) {
                 ShippingRate::withoutGlobalScopes()->updateOrCreate(
                     [
                         'zone_id' => $zone->getKey(),
@@
     /**
      * @return array<int, array{name: string, type: string, config_json: array<string, mixed>}>
      */
-    private function rates(): array
+    private function ratesForZone(ShippingZone $zone): array
     {
-        return [
-            ['name' => 'Standard Shipping', 'type' => 'flat', 'config_json' => ['amount' => 799]],
-            ['name' => 'Express Shipping', 'type' => 'flat', 'config_json' => ['amount' => 1499]],
-            [
-                'name' => 'Free Shipping Over 75',
-                'type' => 'price',
-                'config_json' => [
-                    'ranges' => [
-                        ['min_amount' => 0, 'max_amount' => 7499, 'amount' => 799],
-                        ['min_amount' => 7500, 'amount' => 0],
-                    ],
-                ],
-            ],
-        ];
+        return match ($zone->name) {
+            'Domestic' => [
+                ['name' => 'Standard Shipping', 'type' => 'flat', 'config_json' => ['amount' => 499]],
+                ['name' => 'Express Shipping', 'type' => 'flat', 'config_json' => ['amount' => 999]],
+                [
+                    'name' => 'Free Shipping Over 75',
+                    'type' => 'price',
+                    'config_json' => [
+                        'ranges' => [
+                            ['min_amount' => 0, 'max_amount' => 7499, 'amount' => 499],
+                            ['min_amount' => 7500, 'amount' => 0],
+                        ],
+                    ],
+                ],
+            ],
+            'International' => [
+                ['name' => 'International Shipping', 'type' => 'flat', 'config_json' => ['amount' => 1499]],
+            ],
+            default => [],
+        };
     }
 }
*** End Patch


stdout:
Success. Updated the following files:
M database/seeders/ShippingRateSeeder.php

unified_diff:
@@ -16,3 +16,3 @@
         ShippingZone::withoutGlobalScopes()->get()->each(function (ShippingZone $zone): void {
-            foreach ($this->rates() as $rate) {
+            foreach ($this->ratesForZone($zone) as $rate) {
                 ShippingRate::withoutGlobalScopes()->updateOrCreate(
@@ -35,14 +35,16 @@
      */
-    private function rates(): array
+    private function ratesForZone(ShippingZone $zone): array
     {
-        return [
-            ['name' => 'Standard Shipping', 'type' => 'flat', 'config_json' => ['amount' => 799]],
-            ['name' => 'Express Shipping', 'type' => 'flat', 'config_json' => ['amount' => 1499]],
-            [
-                'name' => 'Free Shipping Over 75',
-                'type' => 'price',
-                'config_json' => [
-                    'ranges' => [
-                        ['min_amount' => 0, 'max_amount' => 7499, 'amount' => 799],
-                        ['min_amount' => 7500, 'amount' => 0],
+        return match ($zone->name) {
+            'Domestic' => [
+                ['name' => 'Standard Shipping', 'type' => 'flat', 'config_json' => ['amount' => 499]],
+                ['name' => 'Express Shipping', 'type' => 'flat', 'config_json' => ['amount' => 999]],
+                [
+                    'name' => 'Free Shipping Over 75',
+                    'type' => 'price',
+                    'config_json' => [
+                        'ranges' => [
+                            ['min_amount' => 0, 'max_amount' => 7499, 'amount' => 499],
+                            ['min_amount' => 7500, 'amount' => 0],
+                        ],
                     ],
@@ -50,3 +52,7 @@
             ],
-        ];
+            'International' => [
+                ['name' => 'International Shipping', 'type' => 'flat', 'config_json' => ['amount' => 1499]],
+            ],
+            default => [],
+        };
     }


output: {"output":"Success. Updated the following files:\nM database/seeders/ShippingRateSeeder.php\n","metadata":{"exit_code":0,"duration_seconds":0.0}}


status: completed

input:
*** Begin Patch
*** Update File: resources/views/livewire/storefront/cart/show.blade.php
@@
                         <flux:select wire:model.live="shippingCountry" label="Ship to">
                             <flux:select.option value="DE">Germany</flux:select.option>
                             <flux:select.option value="AT">Austria</flux:select.option>
                             <flux:select.option value="CH">Switzerland</flux:select.option>
+                            <flux:select.option value="US">United States</flux:select.option>
                         </flux:select>
*** End Patch


stdout:
Success. Updated the following files:
M resources/views/livewire/storefront/cart/show.blade.php

unified_diff:
@@ -132,2 +132,3 @@
                             <flux:select.option value="CH">Switzerland</flux:select.option>
+                            <flux:select.option value="US">United States</flux:select.option>
                         </flux:select>


output: {"output":"Success. Updated the following files:\nM resources/views/livewire/storefront/cart/show.blade.php\n","metadata":{"exit_code":0,"duration_seconds":0.0}}


status: completed

input:
*** Begin Patch
*** Update File: resources/views/livewire/storefront/checkout/show.blade.php
@@
-                        <flux:input wire:model="shippingAddress.first_name" label="First name" />
-                        <flux:input wire:model="shippingAddress.last_name" label="Last name" />
+

+                            <flux:input wire:model="shippingAddress.first_name" label="First name" />
+                            <flux:error name="shippingAddress.first_name" />
+

+

+                            <flux:input wire:model="shippingAddress.last_name" label="Last name" />
+                            <flux:error name="shippingAddress.last_name" />
+

@@
-                        <flux:input wire:model="shippingAddress.city" label="City" />
-                        <flux:input wire:model="shippingAddress.postal_code" label="Postal code" />
+

+                            <flux:input wire:model="shippingAddress.city" label="City" />
+                            <flux:error name="shippingAddress.city" />
+

+

+                            <flux:input wire:model="shippingAddress.postal_code" label="Postal code" />
+                            <flux:error name="shippingAddress.postal_code" />
+

                         <flux:input wire:model="shippingAddress.province_code" label="Region code" placeholder="DE-BE" />
-                        <flux:select wire:model="shippingAddress.country" label="Country">
-                            <flux:select.option value="DE">Germany</flux:select.option>
-                            <flux:select.option value="AT">Austria</flux:select.option>
-                            <flux:select.option value="CH">Switzerland</flux:select.option>
-                        </flux:select>
+

+                            <flux:select wire:model="shippingAddress.country" label="Country">
+                                <flux:select.option value="DE">Germany</flux:select.option>
+                                <flux:select.option value="AT">Austria</flux:select.option>
+                                <flux:select.option value="CH">Switzerland</flux:select.option>
+                                <flux:select.option value="US">United States</flux:select.option>
+                            </flux:select>
+                            <flux:error name="shippingAddress.country" />
+

@@
-                            <flux:select wire:model="paymentMethod" label="Payment method">
-                                <flux:select.option value="credit_card">Credit card</flux:select.option>
+                            <flux:select wire:model.live="paymentMethod" label="Payment method">
+                                <flux:select.option value="credit_card">Credit Card</flux:select.option>
                                 <flux:select.option value="paypal">PayPal</flux:select.option>
-                                <flux:select.option value="bank_transfer">Bank transfer</flux:select.option>
+                                <flux:select.option value="bank_transfer">Bank Transfer</flux:select.option>
                             </flux:select>
                             <flux:error name="paymentMethod" />

                             @if ($paymentMethod === 'credit_card')
@@
                                     <flux:input wire:model="cardCvc" label="CVC" />

                             @endif

-                            @if ($step === 'reserved')
-                                <flux:button wire:click="placeOrder" wire:loading.attr="disabled" variant="primary" class="w-full">
-                                    Place order
-                                </flux:button>
-                            @else
-                                <flux:button wire:click="selectPaymentMethod" wire:loading.attr="disabled" variant="primary" class="w-full">
-                                    Reserve items
-                                </flux:button>
+                            @if ($paymentMethod === 'paypal')
+
Your PayPal payment will be processed securely.

                             @endif
+
+                            @if ($paymentMethod === 'bank_transfer')
+
After placing your order, bank transfer instructions will be shown on the confirmation page.

+                            @endif
+
+                            <flux:button wire:click="placeOrder" wire:loading.attr="disabled" variant="primary" class="w-full">
+                                @if ($paymentMethod === 'paypal')
+                                    Pay with PayPal
+                                @elseif ($paymentMethod === 'credit_card')
+                                    Pay now
+                                @else
+                                    Place order
+                                @endif
+                            </flux:button>

                     @endif

*** End Patch


stdout:
Success. Updated the following files:
M resources/views/livewire/storefront/checkout/show.blade.php

unified_diff:
@@ -51,4 +51,10 @@

-                        <flux:input wire:model="shippingAddress.first_name" label="First name" />
-                        <flux:input wire:model="shippingAddress.last_name" label="Last name" />
+

+                            <flux:input wire:model="shippingAddress.first_name" label="First name" />
+                            <flux:error name="shippingAddress.first_name" />
+

+

+                            <flux:input wire:model="shippingAddress.last_name" label="Last name" />
+                            <flux:error name="shippingAddress.last_name" />
+

@@ -63,11 +69,21 @@

-                        <flux:input wire:model="shippingAddress.city" label="City" />
-                        <flux:input wire:model="shippingAddress.postal_code" label="Postal code" />
+

+                            <flux:input wire:model="shippingAddress.city" label="City" />
+                            <flux:error name="shippingAddress.city" />
+

+

+                            <flux:input wire:model="shippingAddress.postal_code" label="Postal code" />
+                            <flux:error name="shippingAddress.postal_code" />
+

                         <flux:input wire:model="shippingAddress.province_code" label="Region code" placeholder="DE-BE" />
-                        <flux:select wire:model="shippingAddress.country" label="Country">
-                            <flux:select.option value="DE">Germany</flux:select.option>
-                            <flux:select.option value="AT">Austria</flux:select.option>
-                            <flux:select.option value="CH">Switzerland</flux:select.option>
-                        </flux:select>
+

+                            <flux:select wire:model="shippingAddress.country" label="Country">
+                                <flux:select.option value="DE">Germany</flux:select.option>
+                                <flux:select.option value="AT">Austria</flux:select.option>
+                                <flux:select.option value="CH">Switzerland</flux:select.option>
+                                <flux:select.option value="US">United States</flux:select.option>
+                            </flux:select>
+                            <flux:error name="shippingAddress.country" />
+

@@ -159,6 +175,6 @@

-                            <flux:select wire:model="paymentMethod" label="Payment method">
-                                <flux:select.option value="credit_card">Credit card</flux:select.option>
+                            <flux:select wire:model.live="paymentMethod" label="Payment method">
+                                <flux:select.option value="credit_card">Credit Card</flux:select.option>
                                 <flux:select.option value="paypal">PayPal</flux:select.option>
-                                <flux:select.option value="bank_transfer">Bank transfer</flux:select.option>
+                                <flux:select.option value="bank_transfer">Bank Transfer</flux:select.option>
                             </flux:select>
@@ -178,11 +194,19 @@

-                            @if ($step === 'reserved')
-                                <flux:button wire:click="placeOrder" wire:loading.attr="disabled" variant="primary" class="w-full">
+                            @if ($paymentMethod === 'paypal')
+
Your PayPal payment will be processed securely.

+                            @endif
+
+                            @if ($paymentMethod === 'bank_transfer')
+
After placing your order, bank transfer instructions will be shown on the confirmation page.

+                            @endif
+
+                            <flux:button wire:click="placeOrder" wire:loading.attr="disabled" variant="primary" class="w-full">
+                                @if ($paymentMethod === 'paypal')
+                                    Pay with PayPal
+                                @elseif ($paymentMethod === 'credit_card')
+                                    Pay now
+                                @else
                                     Place order
-                                </flux:button>
-                            @else
-                                <flux:button wire:click="selectPaymentMethod" wire:loading.attr="disabled" variant="primary" class="w-full">
-                                    Reserve items
-                                </flux:button>
-                            @endif
+                                @endif
+                            </flux:button>


output: {"output":"Success. Updated the following files:\nM resources/views/livewire/storefront/checkout/show.blade.php\n","metadata":{"exit_code":0,"duration_seconds":0.0}}


status: completed

input:
*** Begin Patch
*** Update File: app/Livewire/Storefront/Checkout/Show.php
@@
 namespace App\Livewire\Storefront\Checkout;

 use App\Enums\CheckoutStatus;
 use App\Exceptions\InvalidCheckoutTransitionException;
 use App\Exceptions\InvalidDiscountException;
@@
 use App\Services\CheckoutService;
 use App\Services\PricingEngine;
 use App\Services\ShippingCalculator;
+use Closure;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Validation\ValidationException;
@@
             'shippingAddress.address1' => ['required', 'string'],
             'shippingAddress.city' => ['required', 'string'],
             'shippingAddress.country' => ['required', 'string', 'size:2'],
-            'shippingAddress.postal_code' => ['required', 'string'],
+            'shippingAddress.postal_code' => [
+                'required',
+                'string',
+                function (string $attribute, mixed $value, Closure $fail): void {
+                    if (strtoupper($this->shippingAddress['country']) === 'DE' && preg_match('/^\d{5}$/', (string) $value) !== 1) {
+                        $fail('The postal code format is invalid.');
+                    }
+                },
+            ],
             'billingSame' => ['boolean'],
         ]);
*** End Patch


stdout:
Success. Updated the following files:
M app/Livewire/Storefront/Checkout/Show.php

unified_diff:
@@ -19,2 +19,3 @@
 use App\Services\ShippingCalculator;
+use Closure;
 use Illuminate\Support\Collection;
@@ -95,3 +96,11 @@
             'shippingAddress.country' => ['required', 'string', 'size:2'],
-            'shippingAddress.postal_code' => ['required', 'string'],
+            'shippingAddress.postal_code' => [
+                'required',
+                'string',
+                function (string $attribute, mixed $value, Closure $fail): void {
+                    if (strtoupper($this->shippingAddress['country']) === 'DE' && preg_match('/^\d{5}$/', (string) $value) !== 1) {
+                        $fail('The postal code format is invalid.');
+                    }
+                },
+            ],
             'billingSame' => ['boolean'],


output: {"output":"Success. Updated the following files:\nM app/Livewire/Storefront/Checkout/Show.php\n","metadata":{"exit_code":0,"duration_seconds":0.0}}


status: completed

input:
*** Begin Patch
*** Update File: resources/views/livewire/storefront/checkout/confirmation.blade.php
@@

+    @php($paymentMethodLabel = match ($order->payment_method) {
+        \App\Enums\PaymentMethod::CreditCard => 'Credit Card',
+        \App\Enums\PaymentMethod::Paypal => 'PayPal',
+        \App\Enums\PaymentMethod::BankTransfer => 'Bank Transfer',
+    })
+
     <x-storefront.breadcrumbs :items="[
         ['label' => 'Cart', 'url' => route('cart.show')],
         ['label' => 'Checkout', 'url' => route('checkout.show')],
@@
                 <flux:badge color="green">Order placed</flux:badge>

-                    {{ $order->order_number }}
+                    Thank you for your order!

-                    Confirmation sent to {{ $order->email }}.
+                    Order {{ $order->order_number }} has been placed. Confirmation sent to {{ $order->email }}.

@@

                     Tax
                     <x-storefront.price :amount="$order->tax_amount" :currency="$order->currency" />

+

+                    Payment method
+                    {{ $paymentMethodLabel }}
+

                     Total
                     <x-storefront.price :amount="$order->total_amount" :currency="$order->currency" />
*** End Patch


stdout:
Success. Updated the following files:
M resources/views/livewire/storefront/checkout/confirmation.blade.php

unified_diff:
@@ -1,2 +1,8 @@

+    @php($paymentMethodLabel = match ($order->payment_method) {
+        \App\Enums\PaymentMethod::CreditCard => 'Credit Card',
+        \App\Enums\PaymentMethod::Paypal => 'PayPal',
+        \App\Enums\PaymentMethod::BankTransfer => 'Bank Transfer',
+    })
+
     <x-storefront.breadcrumbs :items="[
@@ -12,6 +18,6 @@

-                    {{ $order->order_number }}
+                    Thank you for your order!

-                    Confirmation sent to {{ $order->email }}.
+                    Order {{ $order->order_number }} has been placed. Confirmation sent to {{ $order->email }}.

@@ -82,2 +88,6 @@

+

+                    Payment method
+                    {{ $paymentMethodLabel }}
+


output: {"output":"Success. Updated the following files:\nM resources/views/livewire/storefront/checkout/confirmation.blade.php\n","metadata":{"exit_code":0,"duration_seconds":0.0}}


status: completed

input:
*** Begin Patch
*** Update File: resources/views/livewire/storefront/checkout/confirmation.blade.php
@@
-    @php($paymentMethodLabel = match ($order->payment_method) {
-        \App\Enums\PaymentMethod::CreditCard => 'Credit Card',
-        \App\Enums\PaymentMethod::Paypal => 'PayPal',
-        \App\Enums\PaymentMethod::BankTransfer => 'Bank Transfer',
-    })
+    @php
+        $paymentMethodLabel = match ($order->payment_method) {
+            \App\Enums\PaymentMethod::CreditCard => 'Credit Card',
+            \App\Enums\PaymentMethod::Paypal => 'PayPal',
+            \App\Enums\PaymentMethod::BankTransfer => 'Bank Transfer',
+        };
+    @endphp
*** End Patch


unified_diff:
@@ -1,7 +1,9 @@
 <section class="mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8">
-    @php($paymentMethodLabel = match ($order->payment_method) {
-        \App\Enums\PaymentMethod::CreditCard => 'Credit Card',
-        \App\Enums\PaymentMethod::Paypal => 'PayPal',
-        \App\Enums\PaymentMethod::BankTransfer => 'Bank Transfer',
-    })
+    @php
+        $paymentMethodLabel = match ($order->payment_method) {
+            \App\Enums\PaymentMethod::CreditCard => 'Credit Card',
+            \App\Enums\PaymentMethod::Paypal => 'PayPal',
+            \App\Enums\PaymentMethod::BankTransfer => 'Bank Transfer',
+        };
+    @endphp


output: {"output":"Success. Updated the following files:\nM resources/views/livewire/storefront/checkout/confirmation.blade.php\n","metadata":{"exit_code":0,"duration_seconds":0.0}}


status: completed

input:
*** Begin Patch
*** Update File: tests/Feature/Storefront/CartCheckoutUiTest.php
@@
     expect(session('cart_discount_code'))->toBe('SAVE10')
         ->and($component->instance()->discountAmount())->toBe(500)
-        ->and($component->instance()->estimatedShippingAmount())->toBe(799)
-        ->and($component->instance()->estimatedTotal())->toBe(5297);
+        ->and($component->instance()->estimatedShippingAmount())->toBe(499)
+        ->and($component->instance()->estimatedTotal())->toBe(4997);
*** End Patch


stdout:
Success. Updated the following files:
M tests/Feature/Storefront/CartCheckoutUiTest.php

unified_diff:
@@ -105,4 +105,4 @@
         ->and($component->instance()->discountAmount())->toBe(500)
-        ->and($component->instance()->estimatedShippingAmount())->toBe(799)
-        ->and($component->instance()->estimatedTotal())->toBe(5297);
+        ->and($component->instance()->estimatedShippingAmount())->toBe(499)
+        ->and($component->instance()->estimatedTotal())->toBe(4997);


output: {"output":"Success. Updated the following files:\nM tests/Feature/Storefront/CartCheckoutUiTest.php\n","metadata":{"exit_code":0,"duration_seconds":0.0}}


status: completed

input:
*** Begin Patch
*** Update File: tests/Feature/Api/StorefrontCheckoutApiTest.php
@@
         ->assertOk()
         ->assertJsonPath('data.status', 'shipping_selected')
         ->assertJsonPath('data.shipping_method_id', $shippingRateId)
-        ->assertJsonPath('data.totals.shipping', 799);
+        ->assertJsonPath('data.totals.shipping', 499);
*** End Patch


stdout:
Success. Updated the following files:
M tests/Feature/Api/StorefrontCheckoutApiTest.php

unified_diff:
@@ -114,3 +114,3 @@
         ->assertJsonPath('data.shipping_method_id', $shippingRateId)
-        ->assertJsonPath('data.totals.shipping', 799);
+        ->assertJsonPath('data.totals.shipping', 499);


output: {"output":"Success. Updated the following files:\nM tests/Feature/Api/StorefrontCheckoutApiTest.php\n","metadata":{"exit_code":0,"duration_seconds":0.0}}


status: completed

input:
*** Begin Patch
*** Update File: tests/Feature/Api/AdminShippingSettingsApiTest.php
@@
         ->getJson("/api/admin/v1/stores/{$store->getKey()}/shipping/zones")
         ->assertOk()
-        ->assertJsonPath('data.0.name', 'DACH')
+        ->assertJsonPath('data.0.name', 'Domestic')
         ->assertJsonPath('data.0.rates.0.config_json.currency', $store->default_currency);
*** End Patch


stdout:
Success. Updated the following files:
M tests/Feature/Api/AdminShippingSettingsApiTest.php

unified_diff:
@@ -44,3 +44,3 @@
         ->assertOk()
-        ->assertJsonPath('data.0.name', 'DACH')
+        ->assertJsonPath('data.0.name', 'Domestic')
         ->assertJsonPath('data.0.rates.0.config_json.currency', $store->default_currency);


output: {"output":"Success. Updated the following files:\nM tests/Feature/Api/AdminShippingSettingsApiTest.php\n","metadata":{"exit_code":0,"duration_seconds":0.0}}


message: The checkout UI and shipping fixtures are now closer to Spec 08/07: domestic 4.99 shipping, international US coverage, one-click payment buttons, visible payment method on confirmation, and postal-code validation. I’m creating the Suite 9 browser test next.


text: The checkout UI and shipping fixtures are now closer to Spec 08/07: domestic 4.99 shipping, international US coverage, one-click payment buttons, visible payment method on confirmation, and postal-code validation. I’m creating the Suite 9 browser test next.


cmd: php artisan make:test Browser/Storefront/CheckoutTest --pest --no-interaction


output:
Chunk ID: 095b15
Wall time: 0.2732 seconds
Process exited with code 0
Original token count: 23
Output:

   INFO  Test [tests/Feature/Browser/Storefront/CheckoutTest.php] created successfully.


command: php artisan make:test Browser/Storefront/CheckoutTest --pest --no-interaction

type: unknown

aggregated_output: INFO  Test [tests/Feature/Browser/Storefront/CheckoutTest.php] created successfully.


output:
Chunk ID: 1dc9d1
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 0
Output:


command:
/bin/zsh
-lc
rmdir tests/Feature/Browser/Storefront

cmd: rmdir tests/Feature/Browser/Storefront


output:
Chunk ID: 3be581
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 0
Output:


command:
/bin/zsh
-lc
rmdir tests/Feature/Browser

cmd: rmdir tests/Feature/Browser


output:
Chunk ID: 144429
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 0
Output:


cmd: rg "data-flux-select|<select|flux:select" vendor/livewire/flux -n | head -80


command: rg "data-flux-select|<select|flux:select" vendor/livewire/flux -n | head -80

type: search

cmd: rg 'data-flux-select|<select|flux:select' vendor/livewire/flux -n

query: data-flux-select|<select|flux:select

path: flux


output:
Chunk ID: 97f62a
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 9775
Output:
vendor/livewire/flux/dist/flux.css:82:select[data-flux-select-native] {
vendor/livewire/flux/dist/flux.css:92:[dir="rtl"] select[data-flux-select-native] {
vendor/livewire/flux/dist/flux.css:96:select[data-flux-select-native]:hover:not(:disabled) {
vendor/livewire/flux/dist/flux.css:100:.dark select[data-flux-select-native] {
vendor/livewire/flux/dist/flux.css:104:.dark select[data-flux-select-native]:hover:not(:disabled) {
vendor/livewire/flux/dist/flux-lite.min.js:128:`);A("field",gi);A("label",vi);A("description",wi);var yi=class extends x{mount(){let e=N(this,"legend"),i=this.closest("fieldset");i&&c(i,"aria-labelledby",e)}};T(({css:t})=>t`ui-legend { display: block; }`);A("legend",yi);var Ai=class t extends F{boot(){this._disableable=new O(this),this._disableable.onInitAndChange(e=>{this.walker().each(i=>{i.disabled=e})}),this._selectable=new j(this),this._controllable=new M(this,{disabled:this._disabled,bubbles:!0}),this._focusable=new _e(this,{wrap:!0}),this._submittable=new $(this,{name:this.getAttribute("name"),value:this._selectable.getState(),includeWhenEmpty:!1}),this._controllable.initial(e=>e&&this._selectable.setState(e)),this._controllable.getter(()=>this._selectable.getState()),this._detangled=D(),this._controllable.setter(this._detangled(e=>{this._selectable.setState(e)})),this._selectable.onChange(this._detangled(()=>{this._controllable.dispatch()})),this._selectable.onInitAndChange(()=>{this._submittable.update(this._selectable.getState())}),p(this,"keydown",e=>{["ArrowDown","ArrowRight"].includes(e.key)?(this._focusable.focusNext(),e.preventDefault(),e.stopPropagation()):["ArrowUp","ArrowLeft"].includes(e.key)&&(this._focusable.focusPrev(),e.preventDefault(),e.stopPropagation())}),c(this,"role","radiogroup"),queueMicrotask(()=>{this._submittable.update(this._selectable.getState())})}walker(){return I(this,(e,{skip:i,reject:s})=>{if(e instanceof t)return s();if(e.localName!=="ui-radio")return i()})}},xi=class extends F{boot(){let e=this;this._disableable=new O(this),this._selectable=new S(e,{value:this.hasAttribute("value")?this.getAttribute("value"):Math.random().toString(36).substring(2,10),label:this.hasAttribute("label")?this.getAttribute("label"):null,selectedInitially:this.hasAttribute("checked"),dataAttr:"data-checked",ariaAttr:"aria-checked"}),this.value=this._selectable.getValue(),this._selectable.onChange(()=>{this._selectable.isSelected()&&this._focusable.focus(!1)}),this._disableable.onChange(i=>{i?this._focusable.untabbable():this._selectable.isSelected()&&this._focusable.tabbable()}),c(e,"role","radio"),this._focusable=new H(e,{disableable:this._disableable,tabbableAttr:"data-active"}),p(e,"click",this._disableable.disabled(i=>{i.preventDefault(),i.stopPropagation()}),{capture:!0}),p(e,"click",this._disableable.enabled(i=>{this._selectable.press()})),p(e,"keydown",this._disableable.enabled(i=>{i.key==="Enter"&&this.closest("form")?.requestSubmit()})),p(e,"keydown",this._disableable.enabled(i=>{i.key===" "&&(i.preventDefault(),i.stopPropagation())})),p(e,"keyup",this._disableable.enabled(i=>{i.key===" "&&(this._selectable.press(),i.preventDefault(),i.stopPropagation())})),sn(e),p(e,"focus",i=>{we()&&this._selectable.select()})}get checked(){return this._selectable.isSelected()}set checked(e){(this.closest("ui-radio-group")?._detangled||(()=>{}))(()=>{e&&this._selectable.select()})()}};function sn(t){t.closest("label")?.addEventListener("click",e=>{t.contains(e.target)||t.click()})}T(({css:t})=>t`ui-radio-group { display: block; }`);T(({css:t})=>t`ui-radio { display: inline-block; user-select: none; }`);A("radio-group",Ai);A("radio",xi);var It=class extends x{boot(){if(this.querySelectorAll("[data-appended]").forEach(e=>e.remove()),!this.querySelector("template")){let e=document.createElement("template");e.setAttribute("name","placeholder"),e.innerHTML=""+this.innerHTML+"",this.innerHTML="",this.appendChild(e)}if(!this.querySelector('template[name="options"]')){let e=document.createElement("template");e.setAttribute("name","options"),e.innerHTML="
<slot></slot>
",this.appendChild(e)}if(!this.querySelector('template[name="option"]')){let e=document.createElement("template");e.setAttribute("name","option"),e.innerHTML="
<slot></slot>
",this.appendChild(e)}this.templates={placeholder:this.querySelector('template[name="placeholder"]'),overflow:this.querySelector('template[name="overflow"]'),options:this.querySelector('template[name="options"]'),option:this.querySelector('template[name="option"]')},this.templates.options.elsByValue=new Map,this.max=this.templates.overflow?.getAttribute("max")?this.templates.overflow.getAttribute("max"):1/0,this.selecteds=new Map,this.picker=this.closest("ui-select,ui-pillbox"),this.multiple=this.picker.hasAttribute("multiple")}mount(){queueMicrotask(()=>{this.picker._selectable.onInitAndChange(()=>{this.render(!0)});let e=this.picker.list();e&&new MutationObserver(i=>{queueMicrotask(()=>this.render())}).observe(e,{childList:!0})})}render(e){if(this.multiple){let i=this.picker.value,s=Array.from(this.selecteds.keys()).filter(r=>!i.includes(r)),o=i.filter(r=>!this.selecteds.has(r));s.forEach(r=>this.selecteds.delete(r));let n=new Map;for(let r of o){let u=this.picker._selectable.findByValue(r);if(!u){if(e)return setTimeout(()=>this.render());throw`Could not find option for value "${r}"`}n.set(r,u)}n.forEach((r,u)=>this.selecteds.set(u,r)),this.templates.placeholder?.clearPlaceholder?.(),this.templates.overflow?.clearOverflow?.(),this.templates.options?.clearOptions?.(),this.selecteds.size>0?this.renderOptions({hasOverflowed:r=>{if(this.max==="auto"){let u=!1;if(this.renderOverflow(this.selecteds.size,this.selecteds.size-r),this.clientWidth<this.scrollWidth&&(u=!0),this.templates.overflow?.clearOverflow?.(),u)return!0}return r>parseInt(this.max)},renderOverflow:r=>{this.templates?.overflow?.getAttribute("mode")!=="append"&&this.templates.options?.clearOptions?.(),this.renderOverflow(this.selecteds.size,r)}}):this.renderPlaceholder()}else{let i=this.picker.value;if(Array.from(this.selecteds.keys()).includes(i))return;this.selecteds.clear();let s=this.picker._selectable.findByValue(i);if(s)this.selecteds.set(i,s);else if(!["",null,void 0].includes(i)){if(e)return setTimeout(()=>{this.render()});throw`Could not find option for value "${i}"`}this.templates.placeholder?.clearPlaceholder?.(),this.templates.option?.clearOption?.(),this.selecteds.size>0?this.renderOption():this.renderPlaceholder()}}renderOptions({hasOverflowed:e,renderOverflow:i}){let s=document.createElement("div");s.style.display="contents";let o=et(this.templates.options,{default:s});this.templates.options.after(o),this.templates.options.clearOptions=()=>{o.remove(),this.templates.options.clearOptions=()=>{}};let n=0,r=!1;for(let[l,a]of this.selecteds){let f=new DocumentFragment;f.append(...a.el.cloneNode(!0).childNodes);let d=et(this.templates.option,{text:a.getSelectedLabel()??a.getLabel(),default:a.getSelectedLabel()??f,value:l});if(d.setAttribute("data-value",l),d.setAttribute("data-appended",""),d.deselect=()=>a.deselect(),s.appendChild(d),n++,e(n)){r=!0,s.removeChild(d),n--;break}}let u=new DocumentFragment;u.append(...s.childNodes),s.replaceWith(u),r&&i(this.selecteds.size-n)}renderOption(){for(let[e,i]of this.selecteds){let s=new DocumentFragment;s.append(...i.el.cloneNode(!0).childNodes);let o=et(this.templates.option,{text:i.getSelectedLabel()??i.getLabel(),default:i.getSelectedLabel()??s,value:e});o.setAttribute("data-value",e),o.setAttribute("data-appended",e),o.deselect=()=>i.deselect(),this.templates.option.after(o),this.templates.option.clearOption=()=>{o.remove(),this.templates.option.clearOption=()=>{}}}}renderPlaceholder(){if(!this.templates.placeholder)return;let e=et(this.templates.placeholder);e.setAttribute("data-appended",""),this.templates.placeholder.after(e),this.templates.placeholder.clearPlaceholder=()=>{e.remove(),this.templates.placeholder.clearPlaceholder=()=>{}}}renderOverflow(e,i){if(!this.templates.overflow)return;let s=et(this.templates.overflow,{remainder:i,count:this.selecteds.size});s.setAttribute("data-appended",""),this.templates.overflow.after(s),this.templates.overflow.clearOverflow=()=>{s.remove(),this.templates.placeholder.clearOverflow=()=>{}}}},Rt=class extends x{boot(){this.addEventListener("click",e=>{e.stopPropagation();let i=this.closest("[data-value]")?.getAttribute("data-value");if(i===void 0)return;let s=this.closest("ui-pillbox")._selectable,o=s.selectableByValue(i);o?o.deselect():s.deselectByValue(i)})}};function et(t,e={}){let i=t.content.cloneNode(!0);return Object.entries(e).forEach(([s,o])=>{(s==="default"?i.querySelectorAll("slot:not([name])"):i.querySelectorAll(`slot[name="${s}"]`)).forEach(r=>r.replaceWith(typeof o=="string"?document.createTextNode(o):o))}),i.firstElementChild}var tt=class extends Z{groupOfType=W;boot({options:e}){e({wrap:!1,filter:!1}),this.onChanges=[]}onChange(e){this.onChanges.push(e)}activated(e){this.onChanges.forEach(i=>i())}activateFirst(){this.filterAwareWalker().first()?.use(W).activate()}activateBySearch(e){this.filterAwareWalker().find(s=>s.textContent.toLowerCase().trim().startsWith(e.toLowerCase()))?.use(W).activate()}activateSelectedOrFirst(e){if(!e||(s=>s.matches("ui-option, ui-option-create")?getComputedStyle(s).display==="none":!1)(e)){this.filterAwareWalker().first()?.use(W).activate();return}e?.use(W).activate()}activateActiveOrFirst(){let e=this.getActive();if(!e){this.filterAwareWalker().first()?.use(W).activate();return}e?.use(W).activate()}activateActiveOrLast(){let e=this.getActive();if(!e){this.filterAwareWalker().last()?.use(W).activate();return}e?.use(W).activate()}activatePrev(){let e=this.getActive();if(!e){this.filterAwareWalker().last()?.use(W).activate();return}let i;this.options.wrap?i=this.filterAwareWalker().prevOrLast(e):i=this.filterAwareWalker().prev(e),i?.use(W).activate()}activateNext(){let e=this.getActive();if(!e){this.filterAwareWalker().first()?.use(W).activate();return}let i;this.options.wrap?i=this.filterAwareWalker().nextOrFirst(e):i=this.filterAwareWalker().next(e),i?.use(W).activate()}getActive(){return this.walker().find(e=>e.use(W).isActive())}clearActive(){this.getActive()?.use(W).deactivate()}filterAwareWalker(){let e=i=>i.matches("ui-option, ui-option-create")?getComputedStyle(i).display==="none":!1;return I(this.el,(i,{skip:s,reject:o})=>{if(i[this.constructor.name]&&i!==this.el)return o();if(!i[this.groupOfType.name])return s();if(i.hasAttribute("disabled")||e(i))return o()})}},W=class t extends k{groupedByType=tt;mount(){this.el.addEventListener("mouseenter",()=>{this.activate()}),this.el.addEventListener("mouseleave",()=>{this.deactivate()})}activate(e=!1){this.group()&&this.group().walker().each(i=>i.use(t).deactivate(!1)),!(this.el.hasAttribute("disabled")&&!e)&&(c(this.el,"data-active",""),we()&&this.el.scrollIntoView({block:"nearest"}),this.group()&&this.group().activated(this.el))}deactivate(e=!0){w(this.el,"data-active"),e&&this.group()&&this.group().activated(this.el)}isActive(){return this.el.hasAttribute("data-active")}};var it=class extends Z{groupOfType=Se;boot({options:e}){e({}),this.onChanges=[],this.lastSearch=""}onChange(e){this.onChanges.push(e)}filter(e){e===""?this.walker().each(i=>{i.use(Se).unfilter()}):this.walker().each(i=>{this.matches(i,e)?i.use(Se).unfilter():i.use(Se).filter()}),this.lastSearch!==e&&this.onChanges.forEach(i=>i()),this.lastSearch=e}matches(e,i){return this.normalize(e.textContent).includes(this.normalize(i))}normalize(e){return e.normalize("NFD").replace(/\p{Diacritic}/gu,"").toLowerCase().trim()}hasResults(){return this.walker().some(e=>!e.use(Se).isFiltered())}},Se=class extends k{groupedByType=it;boot({options:e}){e({mirror:null,keep:!1}),this.onChanges=[]}filter(){this.options().keep||(c(this.el,"data-hidden",""),this.options().mirror&&c(this.options().mirror,"data-hidden",""))}unfilter(){this.options().keep||(w(this.el,"data-hidden"),this.options().mirror&&w(this.options().mirror,"data-hidden",""))}isFiltered(){return this.el.hasAttribute("data-hidden")}};var nt=class extends F{boot(){let e=this.list();this._controllable=new M(this,{bubbles:!0}),this._selectable=new j(e,{multiple:this.hasAttribute("multiple")}),this._submittable=new $(this,{name:this.getAttribute("name"),value:this._selectable.getState()}),this._controllable.initial(s=>s&&this._selectable.setState(s)),this._controllable.getter(()=>this._selectable.getState());let i=D();this._controllable.setter(i(s=>{this._selectable.setState(s)})),this._selectable.onChange(i(()=>{this._controllable.dispatch(),this.dispatchEvent(new CustomEvent("select",{bubbles:!1}))})),this._selectable.onInitAndChange(()=>{this._submittable.update(this._selectable.getState())})}mount(){this._disableable=new O(this),queueMicrotask(()=>{this._submittable.update(this._selectable.getState())});let e=this.input(),i=this.button(),s=this.list(),o=this.hasAttribute("multiple"),n=this.hasAttribute("autocomplete"),r=this.hasAttribute("autocomplete")&&this.getAttribute("autocomplete").trim().split(" ").includes("strict"),u=this.querySelector("ui-options")||this,l=on(u,"options",o);this._activatable=new tt(u,{filter:"data-hidden"}),!e&&!i&&this._disableable.onInitAndChange(h=>{h?this.removeAttribute("tabindex"):this.setAttribute("tabindex","0")}),this.hasAttribute("filter")&&this.getAttribute("filter")!=="manual"&&(this._filterable=new it(s),this._filterable.onChange(()=>{this._activatable.clearActive(),this._filterable.hasResults()&&this._activatable.activateFirst()}),this.addEventListener("close",()=>{this._filterable&&requestAnimationFrame(()=>{this._filterable.filter("")})}));let a=this.querySelector("[popover]:not(ui-tooltip > [popover])"),f=a?.querySelector('input:not([type="hidden"])'),d=this.querySelector('input:not([type="hidden"])');d=a?.contains(d)?null:d;let m=this.querySelector("button,ui-button");if(m=a?.contains(m)?null:m,!(a||d))st(this,this._activatable),ot(this,this,this._activatable),qs(this,this._activatable,this._selectable);else if(!a&&d){let h=d;this._disableable.onInitAndChange(b=>{b?h&&c(h,"disabled",""):h&&w(h,"disabled")}),Pi(this,h,this._selectable,this._popoverable),qs(h,this._activatable,this._selectable),zs(n,r,this,h,this._selectable,this._popoverable,this._filterable),Oi(h),Ti(h),this._filterable&&Ci(s,h,this._filterable),Ht(h,this._activatable,this._selectable),st(h,this._activatable),ot(this,h,this._activatable),Nt(this,this._activatable)}else if(a&&d){let h=d;c(h,"role","combobox"),c(h,"aria-controls",l);let b=a;this._popoverable=new K(b),this._anchorable=new Y(b,{reference:h,matchWidth:!0,position:this.hasAttribute("position")?this.getAttribute("position"):void 0,gap:this.hasAttribute("gap")?this.getAttribute("gap"):void 0,offset:this.hasAttribute("offset")?this.getAttribute("offset"):void 0}),zs(n,r,this,h,this._selectable,this._popoverable,this._filterable),this._disableable.onInitAndChange(v=>{v?h&&c(h,"disabled",""):h&&w(h,"disabled")}),this.querySelectorAll("button,ui-button").forEach(v=>{b.contains(v)||(c(v,"tabindex","-1"),c(v,"aria-controls",l),c(v,"aria-haspopup","listbox"),Ft(v,this._popoverable),p(v,"click",()=>{this._popoverable.toggle(),Et()||h.focus()}))}),Pi(this,h,this._selectable,this._popoverable),Ei(this,h,b,this._popoverable,this._anchorable),Di(this,this._popoverable,[h]),Ft(h,this._popoverable),Oi(h),Ti(h),this._filterable&&Ci(s,h,this._filterable),Ht(h,this._activatable,this._selectable),ln(h,this._popoverable),ki(h,this._popoverable,this._activatable,this._selectable),nn(h,this._popoverable),Si(this,this._popoverable),st(h,this._activatable),ot(this,h,this._activatable),Nt(this,this._activatable),_i(this._popoverable,this._activatable,this._selectable),Li(this,this._selectable,this._popoverable,o)}else if(a&&f){let h=m,b=f,v=a;c(h,"role","combobox"),c(b,"role","combobox"),c(h,"aria-controls",l),this._disableable.onInitAndChange(y=>{y?(h&&c(h,"disabled",""),b&&c(b,"disabled","")):(h&&w(h,"disabled"),b&&w(b,"disabled"))}),this._popoverable=new K(v),this._anchorable=new Y(v,{reference:h,matchWidth:!0,position:this.hasAttribute("position")?this.getAttribute("position"):void 0,gap:this.hasAttribute("gap")?this.getAttribute("gap"):void 0,offset:this.hasAttribute("offset")?this.getAttribute("offset"):void 0,scrollY:!1}),Oi(b),Ti(b),this._filterable&&Ci(s,b,this._filterable),Ht(b,this._activatable,this._selectable),rn(b,this._popoverable),Ei(this,h,v,this._popoverable,this._anchorable),Di(this,this._popoverable,[b]),Ft(h,this._popoverable),Pi(this,b,this._selectable,this._popoverable),ki(h,this._popoverable,this._activatable,this._selectable),$s(h,this._popoverable),Si(this,this._popoverable),st(b,this._activatable),Bs(h,this._activatable,this._popoverable),ot(this,b,this._activatable),Nt(this,this._activatable),_i(this._popoverable,this._activatable,this._selectable),Li(this,this._selectable,this._popoverable,o)}else if(a){let h=m,b=a;c(h,"role","combobox"),c(h,"aria-controls",l),this._disableable.onInitAndChange(v=>{v?(h&&c(h,"disabled",""),e&&c(e,"disabled","")):(h&&w(h,"disabled"),e&&w(e,"disabled"))}),this._popoverable=new K(b),this._anchorable=new Y(b,{reference:h,matchWidth:!0,position:this.hasAttribute("position")?this.getAttribute("position"):void 0,gap:this.hasAttribute("gap")?this.getAttribute("gap"):void 0,offset:this.hasAttribute("offset")?this.getAttribute("offset"):void 0}),Ei(this,h,b,this._popoverable,this._anchorable),Di(this,this._popoverable),Ft(h,this._popoverable),ki(h,this._popoverable,this._activatable,this._selectable),$s(h,this._popoverable),Ht(h,this._activatable,this._selectable),Si(this,this._popoverable),st(h,this._activatable),Bs(h,this._activatable,this._popoverable),ot(this,h,this._activatable),Nt(this,this._activatable),_i(this._popoverable,this._activatable,this._selectable),Li(this,this._selectable,this._popoverable,o)}new MutationObserver(()=>{requestAnimationFrame(()=>{if(!this._popoverable||this._popoverable.getState()){let h=this._selectable.selecteds().find(b=>!b.el._disableable.isDisabled())?.el;this._activatable.activateSelectedOrFirst(h)}else this._activatable.clearActive()})}).observe(s,{childList:!0})}unmount(){if(this._popoverable?.getState()){let{unlock:e}=oe();e()}}trigger(){return this.button()||this.input()}button(){return Array.from(this.querySelectorAll("button,ui-button")).find(e=>e.nextElementSibling?.matches("[popover]"))||null}input(){return this.querySelector('input:not([type="hidden"])')}list(){return this.querySelector("ui-options")||this}clear(){this._selectable.setState(null),this.dispatchEvent(new CustomEvent("clear",{bubbles:!1}))}open(){this._popoverable.setState(!0)}close(){this._popoverable.setState(!1)}deselectLast(){!this.hasAttribute("multiple")&&this.value!==null&&(this.value=null,this.dispatchEvent(new Event("input",{bubbles:!1})),this.dispatchEvent(new Event("change",{bubbles:!1}))),this.hasAttribute("multiple")&&this.value.length!==0&&(this.value=this.value.slice(0,-1),this.dispatchEvent(new Event("input",{bubbles:!1})),this.dispatchEvent(new Event("change",{bubbles:!1})))}};A("selected-remove",Rt);A("selected",It);A("select",nt);T(({css:t})=>t`ui-select { display: block; }`);T(({css:t})=>t`ui-selected-option { display: contents; }`);function st(t,e){p(t,"keydown",i=>{["ArrowDown","ArrowUp"].includes(i.key)&&(i.key==="ArrowDown"?(e.activateNext(),i.preventDefault(),i.stopPropagation()):i.key==="ArrowUp"&&(e.activatePrev(),i.preventDefault(),i.stopPropagation()))})}function Bs(t,e,i){_t(t,s=>{e.activateBySearch(s),i.getState()||e.getActive()?.click()})}function ot(t,e,i){p(e,"keydown",s=>{if(s.key==="Enter"){let o=i.getActive();if(s.preventDefault(),s.stopPropagation(),!o||o._disableable?.isDisabled())return;o.click(),t.dispatchEvent(new CustomEvent("interaction",{bubbles:!1,cancelable:!1,detail:{optionEl:o}})),o.hasAttribute("action")&&t.dispatchEvent(new CustomEvent("action",{bubbles:!1,cancelable:!1,detail:{optionEl:o}}))}})}function Nt(t,e,i=!1){p(t,i?"pointerdown":"click",s=>{if(s.target.closest("ui-option, ui-option-create")){let o=s.target.closest("ui-option, ui-option-create");if(o._disableable.isDisabled())return;o._selectable?.trigger(),t.dispatchEvent(new CustomEvent("interaction",{bubbles:!1,cancelable:!1,detail:{optionEl:o}})),o.hasAttribute("action")&&t.dispatchEvent(new CustomEvent("action",{bubbles:!1,cancelable:!1,detail:{optionEl:o}})),s.preventDefault(),s.stopPropagation()}})}function qs(t,e,i){p(t,"focus",()=>{let s=i.selecteds().find(o=>!o.el._disableable.isDisabled())?.el;e.activateSelectedOrFirst(s)}),p(t,"blur",()=>{e.clearActive()})}function on(t,e){let i=N(t,"options");return c(t,"role","listbox"),c(t,"aria-multiselectable",e?"true":"false"),i}function Ft(t,e){c(t,"aria-haspopup","listbox");let i=()=>{c(t,"aria-expanded",e.getState()?"true":"false"),e.getState()?c(t,"data-open",""):w(t,"data-open","")};e.onChange(()=>{i()}),i()}function Ei(t,e,i,s,o){let n=()=>{Array.from([t,i]).forEach(r=>{s.getState()?c(r,"data-open",""):w(r,"data-open","")}),s.getState()?o.reposition():o.cleanup()};s.onChange(()=>n()),n(),s.onChange(()=>{s.getState()?t.dispatchEvent(new Event("open",{bubbles:!1,cancelable:!1})):t.dispatchEvent(new Event("close",{bubbles:!1,cancelable:!1}))})}function _i(t,e,i){t.onChange(()=>{if(t.getState()){let s=i.selecteds().find(o=>!o.el._disableable.isDisabled())?.el;setTimeout(()=>{e.activateSelectedOrFirst(s)})}else e.clearActive()})}function Si(t,e){p(t,"keydown",i=>{i.key==="Escape"&&e.getState()&&(e.setState(!1),i.preventDefault(),i.stopImmediatePropagation())})}function ki(t,e){p(t,"keydown",i=>{["ArrowDown","ArrowUp"].includes(i.key)&&(i.key==="ArrowDown"||i.key==="ArrowUp")&&(e.getState()||(e.setState(!0),i.preventDefault(),i.stopImmediatePropagation()))})}function nn(t,e){p(t,"click",()=>{e.getState()||(e.setState(!0),t.focus())})}function $s(t,e){p(t,"click",()=>{e.setState(!e.getState()),t.focus()})}function rn(t,e){e.onChange(()=>{e.getState()&&!Et()&&setTimeout(()=>t.focus())})}function Ci(t,e,i){p(e,"input",o=>{i.filter(o.target.value)}),new MutationObserver(()=>{requestAnimationFrame(()=>{i.filter(e.value)})}).observe(t,{childList:!0})}function Ti(t){p(t,"focus",()=>t.select())}function Oi(t){p(t,"change",e=>e.stopPropagation()),p(t,"input",e=>e.stopPropagation())}function ln(t,e){p(t,"keydown",i=>{(/^[a-zA-Z0-9]$/.test(i.key)||i.key==="Backspace")&&(e.getState()||e.setState(!0))})}function Pi(t,e,i,s){if(!t.hasAttribute("clear"))return;let n=d=>{e.value!==d&&(e.value=d,e.dispatchEvent(new Event("input",{bubbles:!1})))},r=t.getAttribute("clear"),u=r===""||r.split(" ").includes("action"),l=r===""||r.split(" ").includes("select"),a=r===""||r.split(" ").includes("close"),f=r===""||r.split(" ").includes("esc");r==="none"&&(u=l=a=f=!1),u?t.addEventListener("action",d=>{n("")}):l&&i.onChange(()=>{queueMicrotask(()=>n(""))}),a&&s.onChange(()=>{s.getState()||n("")}),f&&p(e,"keydown",d=>{d.key==="Escape"&&n("")})}function Li(t,e,i,s){let o=!s,n=!s,r=!s;if(t.hasAttribute("close")){let u=t.getAttribute("close");if(o=u==="",n=u.split(" ").includes("action"),r=u.split(" ").includes("select"),u==="none")return}o||n?t.addEventListener("interaction",u=>{let l=u.detail.optionEl;if(!l.hasAttribute("action")){i.setState(!1);return}setTimeout(()=>{if(!l.hasAttribute("data-flux-loading")&&!l.hasAttribute("data-loading")){i.setState(!1);return}let a=new MutationObserver(()=>{requestAnimationFrame(()=>{t.querySelector("input[data-invalid]")||i.setState(!1)}),a.disconnect()});a.observe(l,{attributes:!0,attributeFilter:["data-loading","data-flux-loading"]})},10)}):r&&e.onChange(()=>{i.setState(!1)})}function Ht(t,e,i){e.onChange(()=>{let s=e.getActive();s?c(t,"aria-activedescendant",s.id):w(t,"aria-activedescendant")}),i.onChange(s=>{if(!s)return;let o=s.el;o&&c(t,"aria-activedescendant",o.id)})}function zs(t,e,i,s,o,n,r){if(!t){c(s,"autocomplete","off"),c(s,"aria-autocomplete","none");return}let u=a=>{s.value!==a&&(s.value=a,s.dispatchEvent(new Event("input",{bubbles:!1})))};c(s,"autocomplete","off"),c(s,"aria-autocomplete","list"),s.value!==""&&o.setState(s.value);let l=()=>{o.isNotEmpty()?requestAnimationFrame(()=>{u(o.selectedTextValue()),e&&c(s,"data-selected",o.selectedTextValue())}):(u(""),w(s,"data-selected"))};queueMicrotask(()=>{o.onInitAndChange(()=>l())}),i.addEventListener("interaction",a=>{a.detail.optionEl._selectable?.isSelected()&&l()}),e&&n.onChange(()=>{n.getState()||requestAnimationFrame(()=>{u(s.getAttribute("data-selected"))})})}function Di(t,e,i=[]){let{lock:s,unlock:o}=oe(e.el,!1,i);e.onChange(()=>{e.getState()?s():o()})}var Mi=class t extends x{boot(){if(this._focusable=new _e(this,{wrap:!1,ensureTabbable:!1}),p(this,"keydown",e=>{["ArrowDown"].includes(e.key)?(e.target===this?this._focusable.focusFirst():this._focusable.focusNext(),e.preventDefault(),e.stopPropagation()):["ArrowUp"].includes(e.key)&&(e.target===this?this._focusable.focusFirst():this._focusable.focusPrev(),e.preventDefault(),e.stopPropagation())}),_t(this,e=>this._focusable.focusBySearch(e)),this.hasAttribute("popover")&&this.addEventListener("lofi-close-popovers",e=>{this.hasAttribute("keep-open")||(e.detail?.immediate?this.hidePopover():setTimeout(()=>this.hidePopover(),50))}),this.parentElement.localName==="ui-dropdown"){let e=this.parentElement;p(e.trigger(),"keydown",i=>{i.key==="ArrowDown"&&(this.fromArrowDown=!0,this.showPopover(),i.preventDefault(),i.stopPropagation())})}c(this,"role","menu"),c(this,"tabindex","-1")}mount(){this.initializeMenuItems(),new MutationObserver(i=>{this.initializeMenuItems()}).observe(this,{childList:!0,subtree:!0})}onPopoverShow(){requestAnimationFrame(()=>{this.fromArrowDown?(this._focusable.focusFirst(),this.fromArrowDown=!1):this.focus()})}onPopoverHide(){this._focusable.wipeTabbables()}initializeMenuItems(){this.walker().each(e=>{e._disableable||an(e)})}walker(){return I(this,(e,{skip:i,reject:s})=>{if(e instanceof t||e instanceof nt)return s();if(!["a","button"].includes(e.localName))return i()})}},Ii=class extends x{boot(){}},Ri=class extends x{boot(){this._disabled=this.hasAttribute("disabled"),this._disableable=new O(this);let e=this;if(this._disabled&&(c(e,"disabled",""),c(e,"aria-disabled","true")),N(e,"menu-checkbox"),c(e,"role","menuitemcheckbox"),this._disabled)return;e._focusable=new H(e,{disableable:this._disableable,hover:!0,tabbableAttr:"data-active"}),e._selectable=new S(e,{toggleable:!0,value:this.hasAttribute("value")?this.getAttribute("value"):e.textContent.trim(),label:this.hasAttribute("label")?this.getAttribute("label"):e.textContent.trim(),dataAttr:"data-checked",ariaAttr:"aria-checked",selectedInitially:this.hasAttribute("checked")}),this._controllable=new M(this),this._controllable.initial(s=>s&&e._selectable.setState(s)),this._controllable.getter(()=>e._selectable.getState());let i=D();this._controllable.setter(i(s=>{this._selectable.setState(s)})),this._selectable.onChange(i(()=>{this._controllable.dispatch()})),p(e,"click",()=>{this.hasAttribute("keep-open")||this.dispatchEvent(new CustomEvent("lofi-close-popovers",{bubbles:!0})),e._selectable.press()}),Wi(e)}},Ni=class extends x{boot(){this._disabled=this.hasAttribute("disabled"),this._disableable=new O(this);let e=this;this._disabled&&(c(e,"disabled",""),c(e,"aria-disabled","true")),N(e,"menu-radio"),c(e,"role","menuitemradio"),!this._disabled&&(e._focusable=new H(e,{disableable:this._disableable,hover:!0,tabbableAttr:"data-active"}),e._selectable=new S(e,{toggleable:!1,value:this.hasAttribute("value")?this.getAttribute("value"):e.textContent.trim(),label:this.hasAttribute("label")?this.getAttribute("label"):e.textContent.trim(),dataAttr:"data-checked",ariaAttr:"aria-checked",selectedInitially:this.hasAttribute("checked")}),p(e,"click",()=>{this.hasAttribute("keep-open")||this.dispatchEvent(new CustomEvent("lofi-close-popovers",{bubbles:!0})),e._selectable.press()}),Wi(e))}},Fi=class extends x{boot(){this._selectable=new j(this),this._controllable=new M(this),c(this,"role","group"),this._controllable.initial(i=>i&&this._selectable.setState(i)),this._controllable.getter(()=>this._selectable.getState());let e=D();this._controllable.setter(e(i=>{this._selectable.setState(i)})),this._selectable.onChange(e(()=>{this._controllable.dispatch()})),p(this,"lofi-close-popovers",i=>{this.hasAttribute("keep-open")&&(i.preventDefault(),i.stopPropagation())})}},Hi=class extends x{boot(){this._selectable=new j(this,{multiple:!0}),this._controllable=new M(this),c(this,"role","group"),this._controllable.initial(i=>i&&this._selectable.setState(i)),this._controllable.getter(()=>this._selectable.getState());let e=D();this._controllable.setter(e(i=>{this._selectable.setState(i)})),this._selectable.onChange(e(()=>{this._controllable.dispatch()}))}};T(({css:t})=>t`ui-menu[popover]:popover-open { display: block; }`);T(({css:t})=>t`ui-menu[popover].\:popover-open { display: block; }`);T(({css:t})=>t`ui-menu-checkbox, ui-menu-radio { cursor: default; display: contents; }`);A("menu",Mi);A("submenu",Ii);A("menu-checkbox",Ri);A("menu-radio",Ni);A("menu-radio-group",Fi);A("menu-checkbox-group",Hi);function Wi(t){p(t,"keydown",e=>{e.key==="Enter"&&(t.click(),e.preventDefault(),e.stopPropagation())}),p(t,"keydown",e=>{e.key===" "&&(e.preventDefault(),e.stopPropagation())}),p(t,"keyup",e=>{e.key===" "&&(t.click(),e.preventDefault(),e.stopPropagation())})}function an(t){t._disableable=new O(t),t._disabled=t.hasAttribute("disabled");let e=t.querySelector("a"),i=t,s=t.parentElement.matches("ui-submenu")&&t.parentElement.querySelector("ui-menu[popover]"),o=e||i;if(N(o,"menu-item"),c(o,"role","menuitem"),!t._disabled)if(o._focusable=new H(o,{disableable:t._disableable,hover:!0,tabbableAttr:"data-active"}),s){s._popoverable=new K(s,{triggers:[i]}),s._anchorable=new Y(s,{reference:i,position:s.hasAttribute("position")?s.getAttribute("position"):he()?"left start":"right start",gap:s.hasAttribute("gap")?s.getAttribute("gap"):"-5",crossAxis:!0}),i.addEventListener("click",r=>{s._popoverable.setState(!0)});let{clear:n}=Me(i,s,{gain(){s._popoverable.setState(!0)},lose(){s._popoverable.setState(!1)},focusable:!1,useSafeArea:!0});s._popoverable.onChange(()=>{s._popoverable.getState()||(n(),s._focusable.wipeTabbables()),s._popoverable.getState()?s._anchorable.reposition():s._anchorable.cleanup()}),p(i,"keydown",r=>{r.key==="Enter"&&(s._popoverable.setState(!0),setTimeout(()=>s._focusable.focusFirst()))}),p(i,"keydown",r=>{r.key==="ArrowRight"&&(s._popoverable.setState(!0),setTimeout(()=>s._focusable.focusFirst()))}),p(s,"keydown",r=>{r.key==="ArrowLeft"&&(s._popoverable.setState(!1),i.focus(),r.stopPropagation())})}else{if(!t.hasAttribute("disabled")){let n=()=>{t.hasAttribute("keep-open")||t.dispatchEvent(new CustomEvent("lofi-close-popovers",{bubbles:!0,detail:{immediate:!0}}))};p(t,"mouseup",n),p(t,"click",r=>!r.isTrusted&&n())}Wi(i)}}var Vi=class extends F{mount(){this.inputEls=this.querySelectorAll("[data-flux-otp-input]"),this.length=this.inputEls.length,this.config={mode:this.getAttribute("mode")||"numeric",autocomplete:this.getAttribute("autocomplete")||"one-time-code",autoSubmit:this.getAttribute("submit")==="auto",inputAriaLabelTemplate:this.getAttribute("data-flux-input-aria-label")||"Character {current} of {total}"},this.state={length:0,onChanges:[],getValue:()=>Array.from(this.inputEls).map(i=>i.value).join(""),setValue:i=>{let s=(i??"").replace(/\s/g,"").replace(this.invalidCharacters(),"").toUpperCase();for(let o=0;o<this.length;o++)this.inputEls[o].value=s[o]||"";this.state.length=s.length,this.state.onChanges.forEach(o=>o(s))},notify:()=>{let i=this.state.getValue();this.state.length=i.length,this.state.onChanges.forEach(s=>s(i))},reapply:()=>{let i=this.state.getValue();this.state.setValue(i)},onChange:i=>{this.state.onChanges.push(i)}},this.hasAttribute("value")&&this.state.setValue(this.getAttribute("value")),this._controllable=new M(this),this._controllable.initial(i=>i&&this.state.setValue(i)),this._controllable.getter(()=>this.state.getValue());let e=D();this._controllable.setter(e(i=>this.state.setValue(i))),this.state.onChange(e(()=>this._controllable.dispatch())),this._submittable=new $(this,{name:this.getAttribute("name"),value:this.state.getValue()}),this.state.onChange(i=>{this._submittable.update(i),i.length===this.length&&this.config.autoSubmit&&this.closest("form")?.requestSubmit(),Array.from(this.inputEls).findIndex(o=>o===document.activeElement)>this.nextIndex()&&this.focusIndex(this.nextIndex())}),this._disableable=new O(this),this._disableable.onInitAndChange(i=>{for(let s of this.inputEls)i?c(s,"disabled",i):w(s,"disabled")}),this.updateTabIndexes(this.nextIndex());for(let i=0;i<this.length;i++){c(this.inputEls[i],"autocomplete",i===0?this.config.autocomplete:"off"),c(this.inputEls[i],"aria-label",this.config.inputAriaLabelTemplate.replace("{current}",i+1).replace("{total}",this.length));let s;p(this.inputEls[i],"beforeinput",o=>{s=o.target.value}),p(this.inputEls[i],"input",o=>{o.stopPropagation();let n=o.target.value;if(n.length>1){this.state.setValue(n),this.focusIndex(this.nextIndex()),o.preventDefault();return}if(n==""){this.state.reapply(),i<this.nextIndex()?this.focusIndex(i):this.focusPrev(i);return}if(this.invalidCharacters().test(n)){o.target.value=s,this.focusIndex(i);return}this.config.mode!=="numeric"&&(o.target.value=n.toUpperCase()),this.inputEls[i].blur(),this.state.notify(),this.focusNext(i)}),p(this.inputEls[i],"keydown",o=>{["Backspace","Delete","Clear"].includes(o.key)?o.target.value===""&&requestAnimationFrame(()=>this.focusPrev(i)):o.key==="ArrowRight"?(he()?this.focusPrev(i):this.focusNext(i),o.preventDefault()):o.key==="ArrowLeft"&&(he()?this.focusNext(i):this.focusPrev(i),o.preventDefault())}),p(this.inputEls[i],"pointerdown",o=>{this.focusIndex(Math.min(i,this.nextIndex())),o.preventDefault()}),p(this.inputEls[i],"focus",o=>{o.target.setSelectionRange(0,1),this.updateTabIndexes(i)})}}trigger(){return this.inputEls[this.nextIndex()]}focusIndex(e){let i=this.inputEls[e];document.activeElement===i&&i.blur(),i.focus()}focusPrev(e){this.focusIndex(Math.max(0,e-1))}focusNext(e){this.focusIndex(Math.min(e+1,this.nextIndex()))}nextIndex(){return Math.min(this.state.length,this.length-1)}updateTabIndexes(e){for(let i=0;i<this.length;i++)i===e?c(this.inputEls[i],"tabindex","0"):c(this.inputEls[i],"tabindex","-1")}invalidCharacters(){switch(this.config.mode){case"numeric":return/[^\d]/g;case"alpha":return/[^a-zA-Z]/g;case"alphanumeric":return/[^a-zA-Z0-9]/g;default:throw new Error(`Unknown OTP input mode "${this.config.mode}"`)}}};A("otp",Vi);document.addEventListener("alpine:init",()=>{let t=window.Alpine,e=window.Flux?.applyAppearance;e||(e=()=>{window.Flux.appearance=null,window.localStorage.removeItem("flux.appearance")});let i=t.reactive({toast(...o){let n={slots:{},dataset:{}};typeof o[0]=="string"&&(n.slots.text=o.shift()),typeof o[0]=="string"&&(n.slots.heading=n.slots.text,n.slots.text=o.shift());let r=o.shift()||{};r.text&&(n.slots.text=r.text),r.heading&&(n.slots.heading=r.heading),r.variant&&(n.dataset.variant=r.variant),r.position&&(n.dataset.position=r.position),r.duration!==void 0&&(n.duration=r.duration),document.dispatchEvent(new CustomEvent("toast-show",{detail:n}))},modal(o){return{show(){document.dispatchEvent(new CustomEvent("modal-show",{detail:{name:o}}))},close(){document.dispatchEvent(new CustomEvent("modal-close",{detail:{name:o}}))}}},modals(){return{close(){document.dispatchEvent(new CustomEvent("modal-close",{detail:{}}))}}},appearance:window.localStorage.getItem("flux.appearance")||"system",systemAppearanceChanged:1,get dark(){return JSON.stringify(i.systemAppearanceChanged),i.appearance==="system"?window.matchMedia("(prefers-color-scheme: dark)").matches:i.appearance==="dark"},set dark(o){let n=this.dark;o!==n&&(o?i.appearance="dark":i.appearance="light")}});window.Flux=i,t.magic("flux",()=>i),t.effect(()=>{e(i.appearance)}),document.addEventListener("livewire:navigating",o=>{o.detail.onSwap(()=>{e(i.appearance)})}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{i.systemAppearanceChanged++,e(i.appearance)}),t.data("fluxInputClearable",()=>({clear(){let o=this.$el.closest("[data-flux-input]").querySelector("input");o.value="",o.dispatchEvent(new Event("input",{bubbles:!1})),o.dispatchEvent(new Event("change",{bubbles:!1})),o.dispatchEvent(new CustomEvent("clear",{bubbles:!1})),o.focus()}})),t.data("fluxInputViewable",()=>({open:!1,toggle(){this.open=!this.open,this.$el.closest("[data-flux-input]").querySelector("input").setAttribute("type",this.open?"text":"password")},init(){let o=this.$el.closest("[data-flux-input]")?.querySelector("input");if(!o)return;new MutationObserver(()=>{let r=this.open?"text":"password";o.getAttribute("type")!==r&&o.setAttribute("type",r)}).observe(o,{attributes:!0,attributeFilter:["type"]})}})),t.data("fluxInputCopyable",()=>({copied:!1,copy(){this.copied=!this.copied;let o=this.$el.closest("[data-flux-input]").querySelector("input");navigator.clipboard&&navigator.clipboard.writeText(o.value),o.dispatchEvent(new CustomEvent("copy",{bubbles:!1})),setTimeout(()=>this.copied=!1,2e3)}})),t.data("fluxInputFile",o=>({updateLabel(n){this.$refs.name.textContent=n.target.files[1]?n.target.files.length+" "+o.files:n.target.files[0]?.name||o.noFile},init(){Object.defineProperty(this.$refs.input,"value",{...Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value"),set(n){Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value").set.call(this,n),n||this.dispatchEvent(new Event("change",{bubbles:!0}))}})}})),t.data("fluxModal",(o,n)=>({handleShow(r){r.detail.name===o&&(n&&r.detail.scope===n?this.$el.showModal():r.detail.scope||this.$el.showModal())},handleClose(r){r.detail.name?r.detail.name===o&&(n&&r.detail.scope===n?this.$el.close():r.detail.scope||this.$el.close()):this.$el.close()}})),t.data("fluxCommandInputClearable",()=>({clear(){let o=this.$el.closest("[data-flux-command-input]").querySelector("input");o.value="",o.dispatchEvent(new Event("input",{bubbles:!1})),o.dispatchEvent(new CustomEvent("clear",{bubbles:!1})),o.focus()}})),t.data("fluxSelectSearchClearable",()=>({clear(){let o=this.$el.closest("[data-flux-select-search]").querySelector("input");o.value="",o.dispatchEvent(new Event("input",{bubbles:!1})),o.dispatchEvent(new CustomEvent("clear",{bubbles:!1})),o.focus()}})),t.data("fluxPillboxSearchClearable",()=>({clear(){let o=this.$el.closest("[data-flux-pillbox-search]").querySelector("input");o.value="",o.dispatchEvent(new Event("input",{bubbles:!1})),o.dispatchEvent(new CustomEvent("clear",{bubbles:!1})),o.focus()}}))});!os()&&!ns()&&rs();})();
vendor/livewire/flux/stubs/resources/views/flux/select/variants/default.blade.php:14:    ->add('appearance-none') // Strip the browser's default <select> styles...
vendor/livewire/flux/stubs/resources/views/flux/select/variants/default.blade.php:36:<select
vendor/livewire/flux/stubs/resources/views/flux/select/variants/default.blade.php:42:    data-flux-select-native


cmd: sed -n '1,90p' database/seeders/DatabaseSeeder.php


command: sed -n '1,90p' database/seeders/DatabaseSeeder.php

aggregated_output:
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        $this->call([
            OrganizationSeeder::class,
            StoreSeeder::class,
            StoreDomainSeeder::class,
            AppSeeder::class,
            UserSeeder::class,
            StoreUserSeeder::class,
            StoreSettingsSeeder::class,
            SearchSettingsSeeder::class,
            CollectionSeeder::class,
            ProductSeeder::class,
            ThemeSeeder::class,
            ThemeFileSeeder::class,
            ThemeSettingsSeeder::class,
            PageSeeder::class,
            NavigationMenuSeeder::class,
            NavigationItemSeeder::class,
            TaxSettingsSeeder::class,
            ShippingZoneSeeder::class,
            ShippingRateSeeder::class,
            DiscountSeeder::class,
            CustomerSeeder::class,
            AnalyticsSeeder::class,
        ]);
    }
}


output:
Chunk ID: ff9a64
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 261
Output:
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        $this->call([
            OrganizationSeeder::class,
            StoreSeeder::class,
            StoreDomainSeeder::class,
            AppSeeder::class,
            UserSeeder::class,
            StoreUserSeeder::class,
            StoreSettingsSeeder::class,
            SearchSettingsSeeder::class,
            CollectionSeeder::class,
            ProductSeeder::class,
            ThemeSeeder::class,
            ThemeFileSeeder::class,
            ThemeSettingsSeeder::class,
            PageSeeder::class,
            NavigationMenuSeeder::class,
            NavigationItemSeeder::class,
            TaxSettingsSeeder::class,
            ShippingZoneSeeder::class,
            ShippingRateSeeder::class,
            DiscountSeeder::class,
            CustomerSeeder::class,
            AnalyticsSeeder::class,
        ]);
    }
}