Repository: lunarphp/lunar (php)

Issue:
Add support for Laravel 12
<!-- DO NOT THROW THIS AWAY -->
<!-- Fill out the FULL versions with patch versions -->

- Lunar version: latest
- Laravel Version: 12.x
- PHP Version: 8.4.0

### Expected Behaviour:
Allow to be installed in a laravel 12 project.

### Actual Behaviour:
  Problem 2
    - Root composer.json requires lunarphp/core * -> satisfiable by lunarphp/core[dev-main].
    - lunarphp/core dev-main requires laravel/framework ^10.0|^11.0 -> found laravel/framework[v10.0.0, ..., 10.x-dev, v11.0.0, ..., 11.x-dev] but it conflicts with your root composer.json require (^12.0).

### Steps To Reproduce:
Fresh laravel 12 project and try to install this package.

Pull request:
Laravel 12 Support
Fixes #2121 

- Introduces support for Laravel 12.
- Adds PHP 8.4 to automated tests.
- Move filament-input-select-affix into admin panel
- Changes root composer.json to use the `lunarphp/lunarmono` name
- Updates docs to show L12 compatibility
- Introduces new Laravel Installer starter kit installation approach
- Updates VitePress docs to latest version
- Fixes some Larastan errors with CartSessionManager


Patch:
diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml
index 3ccfd745..f46dcd8b 100644
--- a/.github/workflows/static-analysis.yml
+++ b/.github/workflows/static-analysis.yml
@@ -12,10 +12,18 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        php: ["8.2", "8.3"]
-        laravel: ["^10.0", "^11.0"]
+        php: ["8.2", "8.3", "8.4"]
+        laravel: ["^10.0", "^11.0", "^12.0"]
         dependencies: ["highest"]
-
+        exclude:
+          - php: "8.3"
+            laravel: "^10.0"
+          - php: "8.4"
+            laravel: "^10.0"
+          - php: "8.2"
+            laravel: "^11.0"
+          - php: "8.2"
+            laravel: "^12.0"
     name: "PHP ${{ matrix.php }} - L${{ matrix.laravel }} ${{ matrix.dependencies == 'highest' && '↑' || '↓' }}"
 
     runs-on: "ubuntu-latest"
diff --git a/composer.json b/composer.json
index 526ffbbf..05c4790b 100644
--- a/composer.json
+++ b/composer.json
@@ -1,5 +1,5 @@
 {
-    "name": "lunarphp/lunar",
+    "name": "lunarphp/lunarmono",
     "description": "Lunar Monorepo",
     "license": "MIT",
     "authors": [
@@ -10,44 +10,44 @@
     ],
     "require": {
         "awcodes/filament-badgeable-column": "^2.3.2",
-        "awcodes/shout": "^2.0.2",
-        "barryvdh/laravel-dompdf": "^2.0",
-        "cartalyst/converter": "^8.0|^9.0",
+        "awcodes/shout": "^2.0.4",
+        "barryvdh/laravel-dompdf": "^3.0",
+        "cartalyst/converter": "^8.0|^9.0|^10",
         "doctrine/dbal": "^3.6",
-        "dompdf/dompdf": "^2.0.7",
+        "dompdf/dompdf": "^3.1",
         "ext-bcmath": "*",
         "ext-exif": "*",
         "ext-intl": "*",
-        "filament/filament": "^3.2.25",
-        "filament/spatie-laravel-media-library-plugin": "^3.2",
+        "filament/filament": "^3.3.4",
+        "filament/spatie-laravel-media-library-plugin": "^3.3.4",
         "guzzlehttp/guzzle": "^7.3",
         "http-interop/http-factory-guzzle": "^1.2",
-        "kalnoy/nestedset": "^v6.x-dev",
-        "laravel/framework": "^10.0|^11.0",
-        "laravel/scout": "^10.0",
-        "leandrocfe/filament-apex-charts": "^3.1.3",
+        "kalnoy/nestedset": "^v6.0.5",
+        "laravel/framework": "^10.0|^11.0|^12.0",
+        "laravel/scout": "^10.13.1",
+        "leandrocfe/filament-apex-charts": "^3.2.0",
         "livewire/livewire": "^3.0",
         "lukascivil/treewalker": "0.9.1",
-        "marvinosswald/filament-input-select-affix": "^0.2.0",
+        "lunarphp/lunar": "self.version",
         "meilisearch/meilisearch-php": "^1.10",
         "php": "^8.2",
-        "spatie/laravel-activitylog": "^4.4",
-        "spatie/laravel-blink": "^1.7",
-        "spatie/laravel-data": "^4.9.0",
-        "spatie/laravel-medialibrary": "^11.0.0",
-        "spatie/laravel-permission": "^6.4",
-        "spatie/php-structure-discoverer": "^2.0",
+        "spatie/laravel-activitylog": "^4.10.1",
+        "spatie/laravel-blink": "^1.7.1",
+        "spatie/laravel-data": "^4.13.1",
+        "spatie/laravel-medialibrary": "^11.12.7",
+        "spatie/laravel-permission": "^6.12",
+        "spatie/php-structure-discoverer": "^2.3.1",
         "stripe/stripe-php": "^14.4",
         "technikermathe/blade-lucide-icons": "^v3.0",
         "typesense/typesense-php": "^4.9"
     },
     "require-dev": {
-        "larastan/larastan": "^2.9",
+        "larastan/larastan": "^2.9|^3.0",
         "laravel/pint": "1.17.0",
         "mockery/mockery": "^1.6.9",
-        "orchestra/testbench": "^8.0|^9.0",
-        "pestphp/pest": "^2.34.7",
-        "pestphp/pest-plugin-laravel": "^2.4",
+        "orchestra/testbench": "^8.0|^9.0|^10.0",
+        "pestphp/pest": "^2.0|^3.0",
+        "pestphp/pest-plugin-laravel": "^2.0|^3.0",
         "symplify/monorepo-builder": "^10.0"
     },
     "autoload": {
diff --git a/docs/core/installation.md b/docs/core/installation.md
index cd572157..5445fd69 100644
--- a/docs/core/installation.md
+++ b/docs/core/installation.md
@@ -8,7 +8,7 @@ # Installation
 ## Requirements
 
 - PHP >= 8.2
-- Laravel 10 / Laravel 11
+- Laravel 10, 11, 12
 - MySQL 8.0+ / PostgreSQL 9.2+
 - exif PHP extension (on most systems it will be installed by default)
 - intl PHP extension (on most systems it will be installed by default)
diff --git a/docs/core/local-development.md b/docs/core/local-development.md
index c5ec4233..658b528f 100644
--- a/docs/core/local-development.md
+++ b/docs/core/local-development.md
@@ -41,7 +41,7 @@ ## Set-Up
     }],
 
     "require": {
-        "lunarphp/lunar": "*",
+        "lunarphp/lunarmono": "*",
     }
 ````
 
diff --git a/docs/core/starter-kits.md b/docs/core/starter-kits.md
index ae471610..f8ac506c 100644
--- a/docs/core/starter-kits.md
+++ b/docs/core/starter-kits.md
@@ -28,11 +28,20 @@ ## Installation
 ### Create a New Project
 
 ```bash
-composer create-project --stability dev lunarphp/livewire-starter-kit example-store
+composer create-project --stability dev lunarphp/livewire-starter-kit my-store
 
-cd example-store
+cd my-store
 ```
 
+or using the latest Laravel Installer you can do...
+
+```bash
+laravel new my-store --using=lunarphp/livewire-starter-kit
+
+cd my-store
+```
+
+
 ### Configure the Laravel app
 
 Copy the `.env.example` file to `.env` and make sure the details match to your install.
diff --git a/docs/package.json b/docs/package.json
index acf8a969..9306c527 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -1,6 +1,6 @@
 {
     "devDependencies": {
-        "vitepress": "^1.0.0-rc.31"
+        "vitepress": "^1.6.3"
     },
     "scripts": {
         "docs:dev": "vitepress dev",
diff --git a/monorepo-builder.php b/monorepo-builder.php
index f4cbaeb6..f2756cf7 100644
--- a/monorepo-builder.php
+++ b/monorepo-builder.php
@@ -41,8 +41,8 @@
         ComposerJsonSection::REQUIRE_DEV => [
             'laravel/pint' => '1.17.0',
             'mockery/mockery' => '^1.6.9',
-            'pestphp/pest' => '^2.34.7',
-            'pestphp/pest-plugin-laravel' => '^2.4',
+            'pestphp/pest' => '^2.0|^3.0',
+            'pestphp/pest-plugin-laravel' => '^2.0|^3.0',
             'symplify/monorepo-builder' => '^10.0',
         ],
     ]);
diff --git a/packages/admin/composer.json b/packages/admin/composer.json
index 71699e24..6bd2994c 100644
--- a/packages/admin/composer.json
+++ b/packages/admin/composer.json
@@ -15,14 +15,13 @@
     "minimum-stability": "dev",
     "require": {
         "lunarphp/core": "self.version",
-        "filament/filament": "^3.2.25",
-        "filament/spatie-laravel-media-library-plugin": "^3.2",
-        "spatie/laravel-permission": "^6.4",
-        "barryvdh/laravel-dompdf": "^2.0",
+        "filament/filament": "^3.3.4",
+        "filament/spatie-laravel-media-library-plugin": "^3.3.4",
+        "spatie/laravel-permission": "^6.12",
+        "barryvdh/laravel-dompdf": "^3.0",
         "technikermathe/blade-lucide-icons": "^v3.0",
-        "marvinosswald/filament-input-select-affix": "^0.2.0",
-        "leandrocfe/filament-apex-charts": "^3.1.3",
-        "awcodes/shout": "^2.0.2",
+        "leandrocfe/filament-apex-charts": "^3.2.0",
+        "awcodes/shout": "^2.0.4",
         "awcodes/filament-badgeable-column": "^2.3.2"
     },
     "extra": {
diff --git a/packages/admin/resources/views/forms/components/text-input-select-affix.blade.php b/packages/admin/resources/views/forms/components/text-input-select-affix.blade.php
new file mode 100644
index 00000000..eadb9925
--- /dev/null
+++ b/packages/admin/resources/views/forms/components/text-input-select-affix.blade.php
@@ -0,0 +1,89 @@
+@php
+    $datalistOptions = $getDatalistOptions();
+    $extraAlpineAttributes = $getExtraAlpineAttributes();
+    $id = $getId();
+    $isConcealed = $isConcealed();
+    $isDisabled = $isDisabled();
+    $isPrefixInline = $isPrefixInline();
+    $isSuffixInline = $isSuffixInline();
+    $mask = $getMask();
+    $prefixActions = $getPrefixActions();
+    $prefixIcon = $getPrefixIcon();
+    $prefixLabel = $getPrefixLabel();
+    $suffixActions = $getSuffixActions();
+    $suffixIcon = $getSuffixIcon();
+    $suffixLabel = $getSuffixLabel();
+    $statePath = $getStatePath();
+    $hasSelect = $hasSelect();
+@endphp
+
+<x-dynamic-component :component="$getFieldWrapperView()" :field="$field">
+    <x-filament::input.wrapper
+        :disabled="$isDisabled"
+        :inline-prefix="$isPrefixInline"
+        :inline-suffix="$isSuffixInline"
+        :prefix="$prefixLabel"
+        :prefix-actions="$prefixActions"
+        :prefix-icon="$prefixIcon"
+        :prefix-icon-color="$getPrefixIconColor()"
+        :suffix="$suffixLabel"
+        :suffix-actions="$suffixActions"
+        :suffix-icon="$suffixIcon"
+        :suffix-icon-color="$getSuffixIconColor()"
+        :valid="! $errors->has($statePath)"
+        class="fi-fo-text-input"
+        :attributes="
+            \Filament\Support\prepare_inherited_attributes($getExtraAttributeBag())
+                ->class([])
+        "
+    >
+        <x-filament::input
+            :attributes="
+                \Filament\Support\prepare_inherited_attributes($getExtraInputAttributeBag())
+                    ->merge($extraAlpineAttributes, escape: false)
+                    ->merge([
+                        'autocapitalize' => $getAutocapitalize(),
+                        'autocomplete' => $getAutocomplete(),
+                        'autofocus' => $isAutofocused(),
+                        'disabled' => $isDisabled,
+                        'id' => $id,
+                        'inlinePrefix' => $isPrefixInline && (count($prefixActions) || $prefixIcon || filled($prefixLabel)),
+                        'inlineSuffix' => $isSuffixInline && (count($suffixActions) || $suffixIcon || filled($suffixLabel)),
+                        'inputmode' => $getInputMode(),
+                        'list' => $datalistOptions ? $id . '-list' : null,
+                        'max' => (! $isConcealed) ? $getMaxValue() : null,
+                        'maxlength' => (! $isConcealed) ? $getMaxLength() : null,
+                        'min' => (! $isConcealed) ? $getMinValue() : null,
+                        'minlength' => (! $isConcealed) ? $getMinLength() : null,
+                        'placeholder' => $getPlaceholder(),
+                        'readonly' => $isReadOnly(),
+                        'required' => $isRequired() && (! $isConcealed),
+                        'step' => $getStep(),
+                        'type' => blank($mask) ? $getType() : 'text',
+                        $applyStateBindingModifiers('wire:model') => $statePath,
+                        'x-data' => (count($extraAlpineAttributes) || filled($mask)) ? '{}' : null,
+                        'x-mask' . ($mask instanceof \Filament\Support\RawJs ? ':dynamic' : '') => filled($mask) ? $mask : null,
+                    ], escape: false)
+            "
+        />
+        @if($hasSelect)
+            @if($getPosition() === 'prefix')
+                <x-slot:prefix>
+                    {{ $getSelectComponent() }}
+                </x-slot:prefix>
+            @else
+                <x-slot:suffix>
+                    {{ $getSelectComponent() }}
+                </x-slot:suffix>
+            @endif
+        @endif
+    </x-filament::input.wrapper>
+
+    @if ($datalistOptions)
+        <datalist id="{{ $id }}-list">
+            @foreach ($datalistOptions as $option)
+                <option value="{{ $option }}" />
+            @endforeach
+        </datalist>
+    @endif
+</x-dynamic-component>
diff --git a/packages/admin/src/Filament/Resources/ProductResource/Pages/ManageProductShipping.php b/packages/admin/src/Filament/Resources/ProductResource/Pages/ManageProductShipping.php
index 6021a948..cb764787 100644
--- a/packages/admin/src/Filament/Resources/ProductResource/Pages/ManageProductShipping.php
+++ b/packages/admin/src/Filament/Resources/ProductResource/Pages/ManageProductShipping.php
@@ -12,9 +12,9 @@
 use Illuminate\Database\Eloquent\Model;
 use Lunar\Admin\Filament\Resources\ProductResource;
 use Lunar\Admin\Filament\Resources\ProductVariantResource\Pages\ManageVariantShipping;
+use Lunar\Admin\Support\Forms\Components\TextInputSelectAffix;
 use Lunar\Admin\Support\Pages\BaseEditRecord;
 use Lunar\Models\ProductVariant;
-use Marvinosswald\FilamentInputSelectAffix\TextInputSelectAffix;
 
 class ManageProductShipping extends BaseEditRecord
 {
diff --git a/packages/admin/src/Filament/Resources/ProductVariantResource.php b/packages/admin/src/Filament/Resources/ProductVariantResource.php
index a5e1404b..b35f5d96 100644
--- a/packages/admin/src/Filament/Resources/ProductVariantResource.php
+++ b/packages/admin/src/Filament/Resources/ProductVariantResource.php
@@ -12,10 +12,10 @@
 use Illuminate\Database\Eloquent\Model;
 use Lunar\Admin\Filament\Resources\ProductVariantResource\Pages;
 use Lunar\Admin\Support\Forms\Components\Attributes;
+use Lunar\Admin\Support\Forms\Components\TextInputSelectAffix;
 use Lunar\Admin\Support\Resources\BaseResource;
 use Lunar\Models\Contracts\ProductVariant;
 use Lunar\Models\TaxClass;
-use Marvinosswald\FilamentInputSelectAffix\TextInputSelectAffix;
 
 class ProductVariantResource extends BaseResource
 {
diff --git a/packages/admin/src/Support/Forms/Components/TextInputSelectAffix.php b/packages/admin/src/Support/Forms/Components/TextInputSelectAffix.php
new file mode 100644
index 00000000..0a5e417b
--- /dev/null
+++ b/packages/admin/src/Support/Forms/Components/TextInputSelectAffix.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace Lunar\Admin\Support\Forms\Components;
+
+use Filament\Forms\ComponentContainer;
+use Filament\Forms\Components\Select;
+use Filament\Forms\Components\TextInput;
+use Filament\Forms\Concerns\HasComponents;
+
+class TextInputSelectAffix extends TextInput
+{
+    use HasComponents;
+
+    protected string $view = 'lunarpanel::forms.components.text-input-select-affix';
+
+    protected ?\Closure $selectComponentClosure = null;
+
+    protected ?Select $selectComponent = null;
+
+    protected string $position = 'suffix';
+
+    public function select(\Closure|Select $closure): TextInputSelectAffix
+    {
+        if ($closure instanceof Select) {
+            $this->selectComponentClosure = fn () => $closure;
+
+            return $this;
+        }
+        $this->selectComponentClosure = $closure;
+
+        return $this;
+    }
+
+    public function position(string $position = 'suffix'): TextInputSelectAffix
+    {
+        $this->position = $position;
+
+        return $this;
+    }
+
+    public function hasSelect(): bool
+    {
+        return $this->selectComponentClosure !== null;
+    }
+
+    public function dehydrateValidationAttributes(array &$attributes): void
+    {
+        $attributes[$this->getStatePath()] = $this->getValidationAttribute();
+        $attributes[$this->getSelectComponent()->getComponents()[0]->getStatePath()] = $this->evaluate($this->selectComponent->validationAttribute) ?? $this->evaluate($this->selectComponent->getLabel());
+    }
+
+    public function dehydrateValidationRules(array &$rules): void
+    {
+        $statePath = $this->getStatePath();
+
+        if (count($componentRules = $this->getValidationRules())) {
+            $rules[$statePath] = $componentRules;
+        }
+
+        $statePathSelect = $this->getSelectComponent()->getComponents()[0]->getStatePath();
+
+        if (count($selectComponentRules = $this->selectComponent->getValidationRules())) {
+            $rules[$statePathSelect] = $selectComponentRules;
+        }
+    }
+
+    public function hydrateState(?array &$hydratedDefaultState, bool $andCallHydrationHooks = true): void
+    {
+        parent::hydrateState($hydratedDefaultState, $andCallHydrationHooks);
+        if ($this->hasSelect()) {
+            $this->getSelectComponent()->hydrateState($hydratedDefaultState, $andCallHydrationHooks);
+        }
+    }
+
+    public function getPosition(): string
+    {
+        return $this->position;
+    }
+
+    public function getSelectComponent(): ComponentContainer
+    {
+        $evaluated = $this->evaluate($this->selectComponentClosure);
+
+        if (! $evaluated instanceof Select) {
+            throw new \RuntimeException('Passed component must be of type Select');
+        }
+
+        $this->selectComponent = $evaluated->hiddenLabel()
+            ->extraAttributes(array_merge($evaluated->getExtraAttributes(), [
+                'style' => 'border: none !important; background: transparent;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);',
+            ]));
+        $path = explode('.', $this->getStatePath());
+        unset($path[count($path) - 1]);
+
+        return ComponentContainer::make($this->getLivewire())
+            ->statePath(implode('.', $path))
+            ->components([$this->selectComponent]);
+    }
+}
diff --git a/packages/core/README.md b/packages/core/README.md
index 3ba7b893..36336b08 100644
--- a/packages/core/README.md
+++ b/packages/core/README.md
@@ -10,7 +10,7 @@ ## About Lunar
 
 ## Requirements
 - PHP >= 8.2
-- Laravel 10 / Laravel 11
+- Laravel 10, 11, 12
 - MySQL 8.0+ / PostgreSQL 9.2+
 - exif PHP extension (on most systems it will be installed by default)
 - GD PHP extension (used for image manipulation)
diff --git a/packages/core/composer.json b/packages/core/composer.json
index 21ee2f24..1175b6f9 100644
--- a/packages/core/composer.json
+++ b/packages/core/composer.json
@@ -33,15 +33,15 @@
         "ext-bcmath": "*",
         "ext-exif": "*",
         "ext-intl": "*",
-        "laravel/framework": "^10.0|^11.0",
-        "spatie/laravel-medialibrary": "^11.0.0",
-        "spatie/laravel-activitylog": "^4.4",
-        "laravel/scout": "^10.0",
-        "cartalyst/converter": "^8.0|^9.0",
-        "kalnoy/nestedset": "^v6.x-dev",
+        "laravel/framework": "^10.0|^11.0|^12.0",
+        "spatie/laravel-medialibrary": "^11.12.7",
+        "spatie/laravel-activitylog": "^4.10.1",
+        "laravel/scout": "^10.13.1",
+        "cartalyst/converter": "^8.0|^9.0|^10",
+        "kalnoy/nestedset": "^v6.0.5",
         "doctrine/dbal": "^3.6",
         "lukascivil/treewalker": "0.9.1",
-        "spatie/php-structure-discoverer": "^2.0",
-        "spatie/laravel-blink": "^1.7"
+        "spatie/php-structure-discoverer": "^2.3.1",
+        "spatie/laravel-blink": "^1.7.1"
     }
 }
diff --git a/packages/core/src/Managers/CartSessionManager.php b/packages/core/src/Managers/CartSessionManager.php
index 5884193f..c9449e3b 100644
--- a/packages/core/src/Managers/CartSessionManager.php
+++ b/packages/core/src/Managers/CartSessionManager.php
@@ -20,7 +20,7 @@ public function __construct(
         protected AuthManager $authManager,
         protected Channel $channel,
         protected Currency $currency,
-        public Cart $cart,
+        public ?Cart $cart = null,
     ) {
         //
     }
@@ -75,7 +75,7 @@ public function forget(bool $delete = true): void
             );
         }
 
-        unset($this->cart);
+        $this->cart = null;
 
         $this->sessionManager->forget('shipping_estimate_meta');
         $this->sessionManager->forget(
diff --git a/packages/search/composer.json b/packages/search/composer.json
index a792b1e4..47f97b2b 100644
--- a/packages/search/composer.json
+++ b/packages/search/composer.json
@@ -13,7 +13,7 @@
   "require": {
     "php": "^8.2",
     "lunarphp/core": "self.version",
-    "spatie/laravel-data": "^4.9.0",
+    "spatie/laravel-data": "^4.13.1",
     "typesense/typesense-php": "^4.9",
     "meilisearch/meilisearch-php": "^1.10",
     "http-interop/http-factory-guzzle": "^1.2"
diff --git a/phpstan.neon.dist b/phpstan.neon.dist
index 3cdecfd2..75ec9fa1 100644
--- a/phpstan.neon.dist
+++ b/phpstan.neon.dist
@@ -5,6 +5,7 @@ parameters:
     paths:
         - packages
     excludePaths:
+        - packages/*/config/*
         - packages/*/tests/*
         - packages/vendor/*
         - packages/*/vendor/*


Test patch:
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 1f3b6720..884865fe 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -9,15 +9,26 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        php: [8.3, 8.2]
-        laravel: [11.*, 10.*]
+        php: [8.2, 8.3, 8.4]
+        laravel: [10.*, 11.*, 12.*]
         dependency-version: [prefer-stable]
         testsuite: [core, admin, shipping, stripe, search]
         include:
+          - laravel: 12.*
+            testbench: 10.*
           - laravel: 11.*
             testbench: 9.*
           - laravel: 10.*
             testbench: 8.*
+        exclude:
+          - php: 8.3
+            laravel: 10.*
+          - php: 8.4
+            laravel: 10.*
+          - php: 8.2
+            laravel: 11.*
+          - php: 8.2
+            laravel: 12.*
     name: ${{ matrix.testsuite }} - PHP ${{ matrix.php }} - L${{ matrix.laravel }} ${{ matrix.dependency-version == 'prefer-lowest' && '↓' || '↑' }}
     steps:
       - name: Checkout code
diff --git a/tests/admin/TestCase.php b/tests/admin/TestCase.php
index 5c54e045..1baffc85 100644
--- a/tests/admin/TestCase.php
+++ b/tests/admin/TestCase.php
@@ -22,7 +22,6 @@
 use Lunar\LunarServiceProvider;
 use Lunar\Tests\Admin\Providers\LunarPanelTestServiceProvider;
 use Lunar\Tests\Admin\Stubs\User;
-use Marvinosswald\FilamentInputSelectAffix\FilamentInputSelectAffixServiceProvider;
 use Orchestra\Testbench\TestCase as BaseTestCase;
 use RyanChandler\BladeCaptureDirective\BladeCaptureDirectiveServiceProvider;
 use Spatie\Activitylog\ActivitylogServiceProvider;
@@ -63,7 +62,6 @@ protected function getPackageProviders($app): array
             TablesServiceProvider::class,
             WidgetsServiceProvider::class,
             BladeLucideIconsServiceProvider::class,
-            FilamentInputSelectAffixServiceProvider::class,
             ShoutServiceProvider::class,
 
             LunarPanelTestServiceProvider::class,