wallacemaxters/filament-image-color-picker
A Filament form field that lets users pick colors straight from an uploaded image. Click any pixel to capture its hex value, making it handy for theme builders, brand palette selection, and other image-driven design workflows inside Laravel admin panels.
This release (0.1.0-beta) is the first cut that declares Filament 4 compatibility, so treat it as the entry point for any Laravel app running the Filament 4 panel stack — and as effectively an untested/unknown quantity on Filament 3.
composer.json for filament/filament (or filament/support) requirements. A ^3.0|^4.0 style constraint means the package claims both; a ^4.0 only constraint means you cannot use it on a Filament 3 panel at all.
composer require vendor/package:0.1.0-beta --with-dependencies
composer show vendor/package # verify resolved filament/filament version
extra.laravel.providers) or requires a manual config/app.php entry. Most Filament plugins register a single provider and nothing else.PanelProvider::panel():
public function panel(Panel $panel): Panel
{
return $panel
->id('admin')
->path('admin')
->plugins([
\Vendor\Package\PackagePlugin::make(),
]);
}
php artisan vendor:publish --tag="package-config"
php artisan vendor:publish --tag="package-migrations"
php artisan migrate
php artisan filament:assets # if the plugin ships CSS/JS
Where to look first when something is wrong, in order: the package's README, its src/*ServiceProvider.php, its composer.json constraints, then the Filament 4 upgrade guide.
Panel-scoped overrides. Filament plugins are usually configured fluently and per-panel. Keep plugin configuration inside the PanelProvider rather than in a global service provider so that a second panel (e.g. a customer-facing panel vs. an admin panel) can opt out or use different settings:
->plugins([
PackagePlugin::make()
->navigationGroup('Settings')
->enabled(fn () => auth()->user()?->isAdmin()),
])
Multi-panel and tenancy. Because Filament 4 tightened panel/tenant resolution, verify the plugin behaves under ->tenant(Team::class). If the plugin ships resources, confirm they implement tenant scoping (or that the package documents it as unsupported). Test with two tenants and at least one user who belongs to both.
Guard the beta behind config. For a 0.1.0-beta, wrap adoption in a feature flag so a rollback is a config change, not a deploy:
// config/features.php
'filament_package' => env('FEATURE_FILAMENT_PACKAGE', false),
and conditionally merge the plugin into the plugins() array.
Testing integration. Use Filament's testing helpers inside your own suite so that an upstream beta break shows up in CI rather than production:
it('renders the plugin page', function () {
$this->actingAs(User::factory()->create())
->get('/admin')
->assertSuccessful();
});
livewire(SomePluginPage::class)->assertOk();
Add a CI matrix entry that pins filament/filament:^4.0 explicitly — do not let the resolver pick the version for you.
Extension points over forks. Prefer the package's published config, view overrides (php artisan vendor:publish --tag="package-views"), and Filament's own component/column extension APIs. With a 0.x beta, avoid subclassing internal classes: minor releases are free to rename them.
Composition with existing plugins. If you already use other Filament plugins, install this one last and re-run php artisan filament:assets plus php artisan optimize:clear, so that asset/registration conflicts are attributable to a single change.
Blade/Livewire escape hatch. For behaviour the plugin doesn't expose, a small custom Livewire component or a custom Filament Page that reuses the plugin's underlying service/model is generally safer than patching vendor code.
"vendor/package": "0.1.0-beta") rather than ^0.1, and read the diff of every 0.x bump.Filament\Forms\Form / Filament\Tables\Table in ways that only half-work in v4 (Schemas were unified). If you see "class not found" or a silently empty form, check whether the package's composer.json truly requires ^4.0 or merely allows it.composer.json between the previous tag and this one before upgrading an existing Filament 3 app — a dropped ^3.0 constraint will break your install on composer update.php artisan filament:clear-cached-components (and php artisan optimize:clear) after registering a new plugin, and re-run php artisan filament:assets if the plugin ships assets.public/css/filament and republish rather than debugging the plugin.php artisan config:cache will freeze plugin config at deploy time; any closure-based plugin options (like ->enabled(fn () => ...)) must survive serialization — closures in config files are fine, closures evaluated at cache time are not.config/app.php yields double registration and duplicated navigation items. Check php artisan about / bootstrap/cache/packages.php.plugins([...]) array and re-test — Filament 4 made boot order more consequential for navigation and render hooks.vendor/vendor/package/src is cheap insurance: look for hardcoded panel IDs, env() calls outside config, and unpublishable migrations.PanelProvider entry plus config), so replacing the plugin with a hand-rolled Filament Page is a day's work rather than a rewrite.How can I help you explore Laravel packages today?