diff --git a/README.md b/README.md index d9d92e2..faef36d 100644 --- a/README.md +++ b/README.md @@ -245,7 +245,7 @@ use Kirschbaum\Commentions\Filament\Actions\CommentsAction; CommentsAction::make() ->mentionables(User::all()) ->perPage(10) - + ]) ``` Without Pagination: @@ -257,7 +257,7 @@ use Kirschbaum\Commentions\Filament\Actions\CommentsAction; CommentsAction::make() ->mentionables(User::all()) ->disablePagination(); - + ]) ``` Advanced Usage: @@ -386,6 +386,40 @@ class User extends Authenticatable implements Commenter, HasName, HasAvatar } ``` +### Customizing TipTap Editor Styles + +You can customize the TipTap editor CSS classes used using the `Config` class. + +```php +use Kirschbaum\Commentions\Config; + +Config::resolveTipTapCssClassesUsing(function () { + return 'prose max-w-none focus:outline-none p-4'; +}); +``` + +And you can also override the classes on a per-component basis using the `tipTapCssClasses()` method: + +```php +use Kirschbaum\Commentions\Filament\Infolists\Components\CommentsEntry; + +CommentsEntry::make('comments') + ->mentionables(fn (Model $record) => User::all()) + ->tipTapCssClasses('prose max-w-none focus:outline-none p-4') +``` + +Or with actions: + +```php +use Kirschbaum\Commentions\Filament\Actions\CommentsAction; + +CommentsAction::make() + ->mentionables(User::all()) + ->tipTapCssClasses('prose max-w-none focus:outline-none p-4') +``` + +**Important**: Make sure to whitelist the classes in your Tailwind config if you override them. + ### Translations You can publish the package translation files and override any strings used by the UI. diff --git a/resources/dist/commentions.js b/resources/dist/commentions.js index 25e363a..b6c8626 100644 --- a/resources/dist/commentions.js +++ b/resources/dist/commentions.js @@ -99,4 +99,4 @@ img.ProseMirror-separator { :class="{ 'comm:bg-gray-100': $store.filamentCommentsMentionsFiltered.selectedIndex === index }" > - `,s})(),showOnCreate:!0,interactive:!0,trigger:"manual",placement:document.dir==="rtl"?"bottom-end":"bottom-start",theme:"light",arrow:!0})},onUpdate:o=>{o.clientRect&&t[0].setProps({getReferenceClientRect:o.clientRect})},onKeyDown:o=>{let s=Alpine.store("filamentCommentsMentionsFiltered").items,l=Alpine.store("filamentCommentsMentionsFiltered").selectedIndex;if(o.event.key==="ArrowDown")return Alpine.store("filamentCommentsMentionsFiltered").selectedIndex=(l+1)%s.length,!0;if(o.event.key==="ArrowUp")return Alpine.store("filamentCommentsMentionsFiltered").selectedIndex=(l-1+s.length)%s.length,!0;if(o.event.key==="Enter"){let a=s[l];return a&&i({id:a.id,label:a.name}),!0}return o.event.key==="Escape"?(t[0].hide(),!0):!1},onExit:()=>{t[0].hide()}}}}},Kf=Xg;document.addEventListener("alpine:init",()=>{Alpine.data("editor",(n,e,t,r)=>{let i;return{updatedAt:Date.now(),init(){let o=this;i=new gi({element:this.$refs.element,extensions:[of,lf.configure({HTMLAttributes:{class:"mention"},suggestion:Kf(e)}),af.configure({placeholder:r})],editorProps:{attributes:{class:"comm:prose comm:dark:prose-invert comm:prose-sm comm:sm:prose-base comm:lg:prose-lg comm:xl:prose-2xl comm:focus:outline-none comm:p-4 comm:min-w-full comm:w-full comm:rounded-lg comm:border comm:border-gray-300 comm:dark:border-gray-700"}},placeholder:"Type something...",content:n,onCreate({editor:s}){o.updatedAt=Date.now()},onUpdate({editor:s}){Livewire.dispatchTo(`commentions::${t}`,"body:updated",{value:s.getHTML()}),o.updatedAt=Date.now()},onSelectionUpdate({editor:s}){o.updatedAt=Date.now()}}),Livewire.on(`${t}:content:cleared`,()=>{i.commands.setContent("")})},isLoaded(){return i},isActive(o,s={}){return i.isActive(o,s)}}})}); + `,s})(),showOnCreate:!0,interactive:!0,trigger:"manual",placement:document.dir==="rtl"?"bottom-end":"bottom-start",theme:"light",arrow:!0})},onUpdate:o=>{o.clientRect&&t[0].setProps({getReferenceClientRect:o.clientRect})},onKeyDown:o=>{let s=Alpine.store("filamentCommentsMentionsFiltered").items,l=Alpine.store("filamentCommentsMentionsFiltered").selectedIndex;if(o.event.key==="ArrowDown")return Alpine.store("filamentCommentsMentionsFiltered").selectedIndex=(l+1)%s.length,!0;if(o.event.key==="ArrowUp")return Alpine.store("filamentCommentsMentionsFiltered").selectedIndex=(l-1+s.length)%s.length,!0;if(o.event.key==="Enter"){let a=s[l];return a&&i({id:a.id,label:a.name}),!0}return o.event.key==="Escape"?(t[0].hide(),!0):!1},onExit:()=>{t[0].hide()}}}}},Kf=Xg;document.addEventListener("alpine:init",()=>{Alpine.data("editor",(n,e,t,r,i)=>{let o;return{updatedAt:Date.now(),init(){let s=this,l="comm:prose comm:dark:prose-invert comm:prose-sm comm:sm:prose-base comm:lg:prose-lg comm:xl:prose-2xl comm:focus:outline-none comm:p-4 comm:min-w-full comm:w-full comm:rounded-lg comm:border comm:border-gray-300 comm:dark:border-gray-700";o=new gi({element:this.$refs.element,extensions:[of,lf.configure({HTMLAttributes:{class:"mention"},suggestion:Kf(e)}),af.configure({placeholder:r})],editorProps:{attributes:{class:i||l}},placeholder:"Type something...",content:n,onCreate({editor:a}){s.updatedAt=Date.now()},onUpdate({editor:a}){Livewire.dispatchTo(`commentions::${t}`,"body:updated",{value:a.getHTML()}),s.updatedAt=Date.now()},onSelectionUpdate({editor:a}){s.updatedAt=Date.now()}}),Livewire.on(`${t}:content:cleared`,()=>{o.commands.setContent("")})},isLoaded(){return o},isActive(s,l={}){return o.isActive(s,l)}}})}); diff --git a/resources/js/commentions.js b/resources/js/commentions.js index c245176..617f169 100644 --- a/resources/js/commentions.js +++ b/resources/js/commentions.js @@ -5,9 +5,11 @@ import Placeholder from '@tiptap/extension-placeholder' import suggestion from './suggestion' document.addEventListener('alpine:init', () => { - Alpine.data('editor', (content, mentions, component, placeholder) => { + Alpine.data('editor', (content, mentions, component, placeholder, editorCssClasses) => { let editor + const defaultEditorCssClasses = `comm:prose comm:dark:prose-invert comm:prose-sm comm:sm:prose-base comm:lg:prose-lg comm:xl:prose-2xl comm:focus:outline-none comm:p-4 comm:min-w-full comm:w-full comm:rounded-lg comm:border comm:border-gray-300 comm:dark:border-gray-700`; + return { updatedAt: Date.now(), @@ -30,7 +32,7 @@ document.addEventListener('alpine:init', () => { ], editorProps: { attributes: { - class: `comm:prose comm:dark:prose-invert comm:prose-sm comm:sm:prose-base comm:lg:prose-lg comm:xl:prose-2xl comm:focus:outline-none comm:p-4 comm:min-w-full comm:w-full comm:rounded-lg comm:border comm:border-gray-300 comm:dark:border-gray-700`, + class: editorCssClasses || defaultEditorCssClasses, }, }, placeholder: 'Type something...', diff --git a/resources/views/comment-list.blade.php b/resources/views/comment-list.blade.php index 0bf33ad..bef0d29 100644 --- a/resources/views/comment-list.blade.php +++ b/resources/views/comment-list.blade.php @@ -19,6 +19,7 @@ class="comm:w-8 comm:h-8 comm:text-gray-400 comm:dark:text-gray-500" :key="$comment->getContentHash()" :comment="$comment" :mentionables="$mentionables" + :tip-tap-css-classes="$tipTapCssClasses" /> @endforeach diff --git a/resources/views/comment.blade.php b/resources/views/comment.blade.php index d574332..0d24835 100644 --- a/resources/views/comment.blade.php +++ b/resources/views/comment.blade.php @@ -92,7 +92,7 @@ class="comm:text-xs comm:text-gray-300 comm:ml-1" @if ($editing)