Extending a built-in widget
To modify an existing widget's behavior, extend its class:
<?php
declare(strict_types=1);
namespace App\Layup\Widgets;
use Crumbls\Layup\View\HeadingWidget;
use Filament\Forms\Components\Select;
class CustomHeadingWidget extends HeadingWidget
{
public static function getType(): string
{
return 'custom-heading';
}
public static function getLabel(): string
{
return 'Custom Heading';
}
public static function getContentFormSchema(): array
{
return array_merge(parent::getContentFormSchema(), [
Select::make('style')
->label('Style')
->options([
'default' => 'Default',
'underline' => 'With Underline',
'accent' => 'Accent Color',
]),
]);
}
}
Replacing a built-in widget
To completely replace a built-in widget, use withoutWidgets() on the plugin and register your replacement:
Swapping render technology only? If you want to keep the editor experience identical (same form, same defaults, same preview) but render through a Livewire component instead of a Blade view, see Livewire-rendered widgets. The four built-in widgets that ship identity traits (
HeadingWidget,ButtonWidget,NumberCounterWidget,NewsletterWidget) can be swapped without redeclaring any metadata.
use Crumbls\Layup\LayupPlugin;
use Crumbls\Layup\View\HeadingWidget;
use App\Layup\Widgets\CustomHeadingWidget;
LayupPlugin::make()
->withoutWidgets([HeadingWidget::class])
->widgets([CustomHeadingWidget::class]),
Removing widgets
Remove widgets you do not need:
use Crumbls\Layup\View\LoginWidget;
use Crumbls\Layup\View\CookieConsentWidget;
LayupPlugin::make()
->withoutWidgets([
LoginWidget::class,
CookieConsentWidget::class,
]),
Using only specific widgets
To start with no built-in widgets and register only the ones you need:
LayupPlugin::make()
->withoutConfigWidgets()
->widgets([
\Crumbls\Layup\View\TextWidget::class,
\Crumbls\Layup\View\HeadingWidget::class,
\Crumbls\Layup\View\ImageWidget::class,
\Crumbls\Layup\View\ButtonWidget::class,
\App\Layup\Widgets\BannerWidget::class,
]),
Customizing widget views
Publish the Blade views to override rendering for any built-in widget:
php artisan vendor:publish --tag=layup-views
Views are published to resources/views/vendor/layup/components/. Edit the specific widget view (e.g., heading.blade.php) to change its HTML output.
Contributors
Thank you to everyone who has contributed to this package. Every pull request, bug report, and idea makes a difference.