mohamedsabil83/filament-rich-editor-extra
A Filament plugin that extends the RichEditor form field with extra toolbar buttons and formatting options, making it easier to build content-rich Laravel admin panels. Lightweight, configurable, and designed to drop into existing Filament forms with minimal setup.
mohamedsabil83/filament-rich-editor-extra is a companion package for Filament's RichEditor field: it ships extra TipTap extensions you attach to the editor so you get behaviour Filament doesn't bundle (mentions, rich media rendering, and — as of v1.4.0 — fullscreen mode and a sticky toolbar).
Minimal path from zero to a visible result:
composer require mohamedsabil83/filament-rich-editor-extra
composer.json output — this package tracks Filament v3's TipTap build, so it must match your panel's major version.vendor/ in all setups):php artisan filament:assets
php artisan optimize:clear
vendor/mohamedsabil83/filament-rich-editor-extra/src/Extensions/ — the class names there are the authoritative list of what you can attach, and the README shows the fluent make() signature for each.use Filament\Forms\Components\RichEditor;
use Mohamedsabil83\FilamentRichEditorExtra\Extensions\Fullscreen;
RichEditor::make('content')
->extensions([
Fullscreen::make(),
]);
First real use case: a CMS/blog "body" field where editors write long content. Pair StickyToolbar + Fullscreen there — it's the highest-value, lowest-risk adoption, because both extensions are purely UI chrome and cannot alter stored HTML.
Attach per field when behaviour should differ. Keep the extension array explicit on the component so a reader of the form class knows exactly what the editor can do:
RichEditor::make('body')
->extensions([
StickyToolbar::make(),
Fullscreen::make(),
])
->toolbarButtons([...])
Attach globally when it's a house style. Sticky toolbars and fullscreen are "every editor should feel like this" features, not per-model decisions. Register once in a service provider (AppServiceProvider::boot() or a dedicated FilamentServiceProvider) rather than editing dozens of resources:
use Filament\Forms\Components\RichEditor;
RichEditor::configureUsing(function (RichEditor $editor): void {
$editor->extensions([
StickyToolbar::make(),
Fullscreen::make(),
]);
});
This is the pattern to reach for in an existing app: one diff, every rich editor upgraded.
Compose extensions per content type. A short "summary" field rarely needs fullscreen; a long-form article field needs both new extensions plus media handling. Split into small factory methods or a custom App\Filament\Fields\ArticleEditor component that returns a pre-configured RichEditor, so the composition lives in one place and forms stay readable.
Toolbar integration. The new extensions surface as toolbar buttons. If a button doesn't appear, the usual cause is a ->toolbarButtons([...]) whitelist or ->disableToolbarButtons([...]) on the same field — the explicit whitelist wins over extension-registered buttons. Decide one source of truth: either let the extension add its button, or list it yourself, but don't do both half-way.
Front-end rendering. Extensions change what the editor emits; they don't style your public pages. Render stored content through Filament's RichContentRenderer (or {!! $model->body !!}) and make sure the CSS for the emitted nodes — including anything the media extension produces — is present in your front-end build, not just in the panel.
Testing split. Fullscreen and sticky toolbar are JavaScript-only. Livewire/Pest form tests can only assert the schema (field exists, extensions attached); the actual button behaviour needs a browser check (Dusk, or a manual pass on the review checklist). Don't write a Livewire test asserting "fullscreen works" — it will pass while the feature is broken.
Upgrade routine. Because this package ships JS, treat composer update as a two-step deploy: bump the package, run php artisan filament:assets, then smoke-test one editor in staging. Add that to the release checklist next to optimize:clear.
php artisan filament:assets + php artisan optimize:clear + hard browser reload, in that order, before debugging anything else.position: sticky sticks relative to the nearest scrolling container. Inside a Filament modal, a Section/Tabs wrapper with overflow-hidden, or a custom max-h-* overflow-y-auto panel, the toolbar may appear to do nothing. Test in the exact context (page vs. modal vs. slide-over) where editors will use it.Escape exits cleanly and the modal footer stays reachable.->extensions([...]) with a class the asset bundle doesn't know about just does nothing — no PHP exception. If a feature is missing, confirm the class exists in src/Extensions for your installed version (composer show mohamedsabil83/filament-rich-editor-extra) before assuming a config problem.{!! !!} raw editor HTML from untrusted authors.How can I help you explore Laravel packages today?