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.