kisame76/filament-advanced-rich-editor
Advanced rich text editor for Filament and Laravel admin panels. Adds a customizable WYSIWYG field with formatting, media, and content tools, making it easy to author, edit, and manage polished rich content directly in forms, resources, and admin interfaces. Built for FilamentPHP and Laravel project...
composer.json, then confirm the package's own constraints before installing. The v1.7.0 notes include a fix aimed squarely at Filament 5.10 (toolbar pickers rendering in the bar instead of over the text), so pin both your Filament minor and this package's version together — a mismatch here presents as a visual bug, not an install error.php artisan filament:assets after install and after every update. As of v1.7.0 the stylesheet is split in two: filament-advanced-rich-editor.css loads on every panel page, and filament-advanced-rich-editor-overlays.css is pulled in by the editor via x-load-css when it starts. If you skip asset publishing, the first sheet works and the second is missing — pickers, menus, the media browser, find/replace and dialogs render unstyled. That looks exactly like a broken editor and is not one.description_list (plus a fourth lists entry) and invisibles (plus two tools_menu entries). Re-publish into a temp location and diff rather than overwriting:
php artisan vendor:publish --tag=filament-advanced-rich-editor-config
php artisan filament:assets
php artisan optimize:clear
Verify the exact publish tags in the README or service provider before relying on them.resources/lang folder, and now the JS entry points (menu-position.js, image-panel.js, color-picker.js, font-size-picker.js) are the practical references.RichEditor in a scratch Resource form. Keep the old field in place until you have tested create, edit, save, reload, and frontend rendering.RichEditor::make('content') for the package field only where the extra authoring features are worth the dependency.// Illustrative only — verify the exact class and method names in the package source.
AdvancedRichEditor::make('content')
->toolbar(['bold', 'italic', 'link', 'callout', 'media'])
->columnSpanFull();
<dl>/<dt>/<dd> for glossaries. It is off by default for good reason: enabling it over a run of existing paragraphs converts every other one into a term. Turn it on per field with ->descriptionList() — and note "switching it on over a run of paragraphs" is a mutation, so never enable it on a field with live content without exporting first. Stored definition lists render whether or not the feature is enabled on the field, so output styling is safe to adopt ahead of input.tools_menu; useless (and confusing) as a QA gate, since nothing persists.->mediaLibraryDocuments() or media_library.documents. In multi-model apps, configure deliberately.MediaSource contract and, for replacement, ReplacesMedia, rather than patching the media browser.menu-position.js, image-panel.js, color-picker.js, font-size-picker.js and the invisibles script are all new or newly extracted. Any of them missing produces a plausible-looking failure (unstyled picker, misplaced dropdown, missing toolbar affordance). Before debugging anything, run php artisan filament:assets and hard-reload with browser cache disabled. Add it to your deploy script and to your upgrade checklist.description_list and invisibles keys plus new menu entries that only arrive if you re-publish. Diff, don't overwrite — you will otherwise lose your customized tools_menu and lists.mediaLibraryDocuments() explicitly. Silent misses are harder to debug than an upfront error./enum finds énumération), so command aliases you expose to users should be checked for accidental collisions — ø, æ, ł and ß remain distinct letters.php artisan config:clear; cached config hides changes in production-like environments. For a new locale, follow the translation test conventions in CONTRIBUTING.md.data-arte-emoji, data-arte-characters) written once per editor. If you extended them by string-matching PHP output or duplicating x-data scripts, that code is gone in this release. The supported seam is calling openEmojiPicker() / openCharacterPicker() from your own button with the second argument.CharacterCount::measuredBy() is the new hook for expensive counters. The closure runs lazily, the first time the numbers are read — not on every form walk. Good for a custom counter that queries something; don't assume it fires eagerly, and don't put side effects in it.storage/logs/laravel.log for server-side failures. CSP is now a bigger factor: x-load-css / x-load-src fetch assets at runtime, so a policy that allows only eagerly-loaded assets will break overlays while the base editor still looks fine.MediaSource, ReplacesMedia, config closures, per-field methods, and CharacterCount::measuredBy() are the intended surface. Prefer them over patching vendor code so upgrades stay possible.php artisan filament:assets on every deploy and after every update, diff your published config on each upgrade, review the unreviewed locales, test media deletion/replacement aggressively, and keep a plain Filament RichEditor fallback until the package has more production mileage.How can I help you explore Laravel packages today?