From ae9fe3e1421a65c4a0649f3cc73b7ad9ea3654f5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 27 Mar 2026 10:25:41 +0000 Subject: [PATCH] Deploy 1.x docs --- 200.html | 2 +- 404.html | 2 +- _payload.json | 2 +- assets/builds/latest.json | 2 +- .../104eaefb-2807-4f31-a2e7-dea9dddf5fbd.json | 1 - .../5da4b7a8-cb97-457e-937d-04908275ca61.json | 1 + community/contributing.html | 4 +-- community/contributing/_payload.json | 2 +- community/license.html | 4 +-- community/license/_payload.json | 2 +- essentials/attachments.html | 4 +-- essentials/attachments/_payload.json | 2 +- essentials/authorization.html | 4 +-- essentials/authorization/_payload.json | 2 +- essentials/configuration.html | 4 +-- essentials/configuration/_payload.json | 2 +- essentials/database-schema.html | 4 +-- essentials/database-schema/_payload.json | 2 +- essentials/mentions.html | 4 +-- essentials/mentions/_payload.json | 2 +- essentials/notifications.html | 4 +-- essentials/notifications/_payload.json | 2 +- essentials/reactions.html | 4 +-- essentials/reactions/_payload.json | 2 +- getting-started/installation.html | 4 +-- getting-started/installation/_payload.json | 2 +- getting-started/introduction.html | 2 +- getting-started/introduction/_payload.json | 2 +- getting-started/upgrading.html | 2 +- getting-started/upgrading/_payload.json | 2 +- index.html | 2 +- logo-dark.svg | 27 +++++++++++++++++++ logo-light.svg | 27 +++++++++++++++++++ 33 files changed, 94 insertions(+), 40 deletions(-) delete mode 100644 assets/builds/meta/104eaefb-2807-4f31-a2e7-dea9dddf5fbd.json create mode 100644 assets/builds/meta/5da4b7a8-cb97-457e-937d-04908275ca61.json create mode 100644 logo-dark.svg create mode 100644 logo-light.svg diff --git a/200.html b/200.html index 88153a9..1e6f7f6 100644 --- a/200.html +++ b/200.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/404.html b/404.html index d529355..4cbbc64 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/_payload.json b/_payload.json index eff7bca..4d3ab19 100644 --- a/_payload.json +++ b/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":221},["ShallowReactive",2],{"navigation_docs":3,"landing":80},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":82,"body":83,"description":82,"extension":211,"meta":212,"navigation":213,"path":214,"seo":215,"stem":219,"__hash__":220},"landing\u002Findex.md","",{"type":84,"value":85,"toc":208},"minimark",[86,117,177],[87,88,89,93,102],"u-page-hero",{},[90,91,92],"template",{"v-slot:title":82},"Comments",[90,94,95,99],{"v-slot:description":82},[96,97,98],"p",{},"A full-featured commenting system for Filament panels with threaded replies, @mentions, emoji reactions, and real-time updates.",[96,100,101],{},"Drop-in integration with any Filament resource.",[90,103,104,111],{"v-slot:links":82},[105,106,110],"u-button",{"color":107,"size":108,"to":17,"trailing-icon":109},"neutral","xl","i-lucide-arrow-right","Get started",[105,112,116],{"color":107,"size":108,"to":113,"icon":114,"variant":115},"https:\u002F\u002Fgithub.com\u002Frelaticle\u002Fcomments","simple-icons:github","outline","GitHub",[118,119,120,123],"u-page-section",{},[90,121,122],{"v-slot:title":82},"Why choose Comments?",[90,124,125,135,143,151,159,168],{"v-slot:features":82},[126,127,129,132],"u-page-feature",{"icon":128},"i-lucide-messages-square",[90,130,131],{"v-slot:title":82},"Threaded Replies",[90,133,134],{"v-slot:description":82},"Nested comment threads with configurable depth limits. Users can reply to specific comments creating organized discussions.",[126,136,137,140],{"icon":44},[90,138,139],{"v-slot:title":82},"@Mentions",[90,141,142],{"v-slot:description":82},"Autocomplete user mentions with a customizable resolver interface. Dispatches events for notification handling.",[126,144,145,148],{"icon":49},[90,146,147],{"v-slot:title":82},"Emoji Reactions",[90,149,150],{"v-slot:description":82},"Six built-in emoji reactions with a configurable set. Users can react to comments with a single click.",[126,152,153,156],{"icon":54},[90,154,155],{"v-slot:title":82},"File Attachments",[90,157,158],{"v-slot:description":82},"Upload images and documents to comments with configurable storage, size limits, and MIME type validation.",[126,160,162,165],{"icon":161},"i-lucide-radio",[90,163,164],{"v-slot:title":82},"Real-time Updates",[90,166,167],{"v-slot:description":82},"Optional broadcasting via private channels with automatic polling fallback. Comments stay in sync across sessions.",[126,169,171,174],{"icon":170},"i-lucide-puzzle",[90,172,173],{"v-slot:title":82},"Full Filament Integration",[90,175,176],{"v-slot:description":82},"Three integration patterns: slide-over action, table row action, and infolist entry. Works with any Filament resource.",[118,178,179,182,185],{},[90,180,181],{"v-slot:title":82},"Our Ecosystem",[90,183,184],{"v-slot:description":82},"Extend your Laravel applications with our ecosystem of complementary tools",[186,187,188,196,202],"card-group",{},[189,190,195],"card",{"icon":191,"target":192,"title":193,"to":194},"i-simple-icons-laravel","_blank","FilaForms","https:\u002F\u002Ffilaforms.app","Visual form builder for all your public-facing forms.",[189,197,201],{"icon":198,"target":192,"title":199,"to":200},"i-lucide-sliders","Custom Fields","https:\u002F\u002Frelaticle.github.io\u002Fcustom-fields","Let users add custom fields to any model without code changes.",[189,203,207],{"icon":204,"target":192,"title":205,"to":206},"i-lucide-kanban","Flowforge","https:\u002F\u002Frelaticle.github.io\u002Fflowforge","Transform any Laravel model into a drag-and-drop Kanban board.",{"title":82,"searchDepth":209,"depth":209,"links":210},2,[],"md",{},true,"\u002F",{"title":216,"description":217,"ogImage":218},"Filament Comments System","A full-featured commenting system for Filament panels with threaded replies, @mentions, emoji reactions, file attachments, and real-time updates.","\u002Fog-image.png","index","KnPuzCG4OM-mpF7YBkVGlucnrSP5MMe9P1HG4oMQnAc",1774606186119] \ No newline at end of file +[{"data":1,"prerenderedAt":221},["ShallowReactive",2],{"navigation_docs":3,"landing":80},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":82,"body":83,"description":82,"extension":211,"meta":212,"navigation":213,"path":214,"seo":215,"stem":219,"__hash__":220},"landing\u002Findex.md","",{"type":84,"value":85,"toc":208},"minimark",[86,117,177],[87,88,89,93,102],"u-page-hero",{},[90,91,92],"template",{"v-slot:title":82},"Comments",[90,94,95,99],{"v-slot:description":82},[96,97,98],"p",{},"A full-featured commenting system for Filament panels with threaded replies, @mentions, emoji reactions, and real-time updates.",[96,100,101],{},"Drop-in integration with any Filament resource.",[90,103,104,111],{"v-slot:links":82},[105,106,110],"u-button",{"color":107,"size":108,"to":17,"trailing-icon":109},"neutral","xl","i-lucide-arrow-right","Get started",[105,112,116],{"color":107,"size":108,"to":113,"icon":114,"variant":115},"https:\u002F\u002Fgithub.com\u002Frelaticle\u002Fcomments","simple-icons:github","outline","GitHub",[118,119,120,123],"u-page-section",{},[90,121,122],{"v-slot:title":82},"Why choose Comments?",[90,124,125,135,143,151,159,168],{"v-slot:features":82},[126,127,129,132],"u-page-feature",{"icon":128},"i-lucide-messages-square",[90,130,131],{"v-slot:title":82},"Threaded Replies",[90,133,134],{"v-slot:description":82},"Nested comment threads with configurable depth limits. Users can reply to specific comments creating organized discussions.",[126,136,137,140],{"icon":44},[90,138,139],{"v-slot:title":82},"@Mentions",[90,141,142],{"v-slot:description":82},"Autocomplete user mentions with a customizable resolver interface. Dispatches events for notification handling.",[126,144,145,148],{"icon":49},[90,146,147],{"v-slot:title":82},"Emoji Reactions",[90,149,150],{"v-slot:description":82},"Six built-in emoji reactions with a configurable set. Users can react to comments with a single click.",[126,152,153,156],{"icon":54},[90,154,155],{"v-slot:title":82},"File Attachments",[90,157,158],{"v-slot:description":82},"Upload images and documents to comments with configurable storage, size limits, and MIME type validation.",[126,160,162,165],{"icon":161},"i-lucide-radio",[90,163,164],{"v-slot:title":82},"Real-time Updates",[90,166,167],{"v-slot:description":82},"Optional broadcasting via private channels with automatic polling fallback. Comments stay in sync across sessions.",[126,169,171,174],{"icon":170},"i-lucide-puzzle",[90,172,173],{"v-slot:title":82},"Full Filament Integration",[90,175,176],{"v-slot:description":82},"Three integration patterns: slide-over action, table row action, and infolist entry. Works with any Filament resource.",[118,178,179,182,185],{},[90,180,181],{"v-slot:title":82},"Our Ecosystem",[90,183,184],{"v-slot:description":82},"Extend your Laravel applications with our ecosystem of complementary tools",[186,187,188,196,202],"card-group",{},[189,190,195],"card",{"icon":191,"target":192,"title":193,"to":194},"i-simple-icons-laravel","_blank","FilaForms","https:\u002F\u002Ffilaforms.app","Visual form builder for all your public-facing forms.",[189,197,201],{"icon":198,"target":192,"title":199,"to":200},"i-lucide-sliders","Custom Fields","https:\u002F\u002Frelaticle.github.io\u002Fcustom-fields","Let users add custom fields to any model without code changes.",[189,203,207],{"icon":204,"target":192,"title":205,"to":206},"i-lucide-kanban","Flowforge","https:\u002F\u002Frelaticle.github.io\u002Fflowforge","Transform any Laravel model into a drag-and-drop Kanban board.",{"title":82,"searchDepth":209,"depth":209,"links":210},2,[],"md",{},true,"\u002F",{"title":216,"description":217,"ogImage":218},"Filament Comments System","A full-featured commenting system for Filament panels with threaded replies, @mentions, emoji reactions, file attachments, and real-time updates.","\u002Fog-image.png","index","KnPuzCG4OM-mpF7YBkVGlucnrSP5MMe9P1HG4oMQnAc",1774607131407] \ No newline at end of file diff --git a/assets/builds/latest.json b/assets/builds/latest.json index 270a911..1ccac10 100644 --- a/assets/builds/latest.json +++ b/assets/builds/latest.json @@ -1 +1 @@ -{"id":"104eaefb-2807-4f31-a2e7-dea9dddf5fbd","timestamp":1774606153236} \ No newline at end of file +{"id":"5da4b7a8-cb97-457e-937d-04908275ca61","timestamp":1774607098696} \ No newline at end of file diff --git a/assets/builds/meta/104eaefb-2807-4f31-a2e7-dea9dddf5fbd.json b/assets/builds/meta/104eaefb-2807-4f31-a2e7-dea9dddf5fbd.json deleted file mode 100644 index f6a765d..0000000 --- a/assets/builds/meta/104eaefb-2807-4f31-a2e7-dea9dddf5fbd.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"104eaefb-2807-4f31-a2e7-dea9dddf5fbd","timestamp":1774606153236,"prerendered":["/","/getting-started/installation","/essentials/configuration","/community/license","/getting-started/introduction","/essentials/reactions","/essentials/authorization","/essentials/attachments","/essentials/notifications","/essentials/database-schema","/getting-started/upgrading","/community/contributing","/essentials/mentions"]} \ No newline at end of file diff --git a/assets/builds/meta/5da4b7a8-cb97-457e-937d-04908275ca61.json b/assets/builds/meta/5da4b7a8-cb97-457e-937d-04908275ca61.json new file mode 100644 index 0000000..f41f881 --- /dev/null +++ b/assets/builds/meta/5da4b7a8-cb97-457e-937d-04908275ca61.json @@ -0,0 +1 @@ +{"id":"5da4b7a8-cb97-457e-937d-04908275ca61","timestamp":1774607098696,"prerendered":["/","/getting-started/installation","/essentials/configuration","/community/license","/getting-started/upgrading","/essentials/authorization","/getting-started/introduction","/essentials/reactions","/essentials/attachments","/essentials/notifications","/essentials/database-schema","/essentials/mentions","/community/contributing"]} \ No newline at end of file diff --git a/community/contributing.html b/community/contributing.html index 27881a1..79c8834 100644 --- a/community/contributing.html +++ b/community/contributing.html @@ -94,7 +94,7 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Contributing - Comments
Community

Contributing

How to contribute to Comments

Quick Start

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run tests: composer test
  5. Submit a pull request

Guidelines

  • Follow the existing code style
  • Add tests for new features
  • Update documentation as needed
  • One feature per pull request

Development Commands

# Run tests
+}Contributing - Comments
Community

Contributing

How to contribute to Comments

Quick Start

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run tests: composer test
  5. Submit a pull request

Guidelines

  • Follow the existing code style
  • Add tests for new features
  • Update documentation as needed
  • One feature per pull request

Development Commands

# Run tests
 composer test
 
 # Format code
@@ -102,4 +102,4 @@
 
 # Static analysis
 composer analyse
-

Need Help?

Copyright © 2026
\ No newline at end of file +

Need Help?

Copyright © 2026
\ No newline at end of file diff --git a/community/contributing/_payload.json b/community/contributing/_payload.json index 021ec06..0b6e304 100644 --- a/community/contributing/_payload.json +++ b/community/contributing/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":267},["ShallowReactive",2],{"navigation_docs":3,"-community-contributing":80,"-community-contributing-surround":262},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":71,"body":82,"description":255,"extension":256,"links":257,"meta":258,"navigation":259,"path":72,"seo":260,"stem":73,"__hash__":261},"docs\u002F4.community\u002F1.contributing.md",{"type":83,"value":84,"toc":249},"minimark",[85,90,129,133,148,152,221,225,245],[86,87,89],"h2",{"id":88},"quick-start","Quick Start",[91,92,93,101,107,113,123],"ol",{},[94,95,96,100],"li",{},[97,98,99],"strong",{},"Fork"," the repository",[94,102,103,106],{},[97,104,105],{},"Create"," a feature branch",[94,108,109,112],{},[97,110,111],{},"Make"," your changes",[94,114,115,118,119],{},[97,116,117],{},"Run"," tests: ",[120,121,122],"code",{},"composer test",[94,124,125,128],{},[97,126,127],{},"Submit"," a pull request",[86,130,132],{"id":131},"guidelines","Guidelines",[134,135,136,139,142,145],"ul",{},[94,137,138],{},"Follow the existing code style",[94,140,141],{},"Add tests for new features",[94,143,144],{},"Update documentation as needed",[94,146,147],{},"One feature per pull request",[86,149,151],{"id":150},"development-commands","Development Commands",[153,154,159],"pre",{"className":155,"code":156,"language":157,"meta":158,"style":158},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Run tests\ncomposer test\n\n# Format code\ncomposer pint\n\n# Static analysis\ncomposer analyse\n","bash","",[120,160,161,170,181,188,194,202,207,213],{"__ignoreMap":158},[162,163,166],"span",{"class":164,"line":165},"line",1,[162,167,169],{"class":168},"sHwdD","# Run tests\n",[162,171,173,177],{"class":164,"line":172},2,[162,174,176],{"class":175},"sBMFI","composer",[162,178,180],{"class":179},"sfazB"," test\n",[162,182,184],{"class":164,"line":183},3,[162,185,187],{"emptyLinePlaceholder":186},true,"\n",[162,189,191],{"class":164,"line":190},4,[162,192,193],{"class":168},"# Format code\n",[162,195,197,199],{"class":164,"line":196},5,[162,198,176],{"class":175},[162,200,201],{"class":179}," pint\n",[162,203,205],{"class":164,"line":204},6,[162,206,187],{"emptyLinePlaceholder":186},[162,208,210],{"class":164,"line":209},7,[162,211,212],{"class":168},"# Static analysis\n",[162,214,216,218],{"class":164,"line":215},8,[162,217,176],{"class":175},[162,219,220],{"class":179}," analyse\n",[86,222,224],{"id":223},"need-help","Need Help?",[134,226,227,237],{},[94,228,229,236],{},[230,231,235],"a",{"href":232,"rel":233},"https:\u002F\u002Fgithub.com\u002Frelaticle\u002Fcomments\u002Fissues",[234],"nofollow","Open an issue"," for bugs or questions",[94,238,239,240,244],{},"Check ",[230,241,243],{"href":232,"rel":242},[234],"existing issues"," first",[246,247,248],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":158,"searchDepth":172,"depth":172,"links":250},[251,252,253,254],{"id":88,"depth":172,"text":89},{"id":131,"depth":172,"text":132},{"id":150,"depth":172,"text":151},{"id":223,"depth":172,"text":224},"How to contribute to Comments","md",null,{},{"icon":74},{"title":71,"description":255},"WizyvP9psZ6kzi7GfqkI0Riqpld0llpTEbjKit0RwM0",[263,265],{"title":61,"path":62,"stem":63,"description":264,"icon":64,"children":-1},"Tables, relationships, and indexes used by the Comments package.",{"title":76,"path":77,"stem":78,"description":266,"icon":79,"children":-1},"MIT License terms and what it means for you",1774606188039] \ No newline at end of file +[{"data":1,"prerenderedAt":267},["ShallowReactive",2],{"navigation_docs":3,"-community-contributing":80,"-community-contributing-surround":262},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":71,"body":82,"description":255,"extension":256,"links":257,"meta":258,"navigation":259,"path":72,"seo":260,"stem":73,"__hash__":261},"docs\u002F4.community\u002F1.contributing.md",{"type":83,"value":84,"toc":249},"minimark",[85,90,129,133,148,152,221,225,245],[86,87,89],"h2",{"id":88},"quick-start","Quick Start",[91,92,93,101,107,113,123],"ol",{},[94,95,96,100],"li",{},[97,98,99],"strong",{},"Fork"," the repository",[94,102,103,106],{},[97,104,105],{},"Create"," a feature branch",[94,108,109,112],{},[97,110,111],{},"Make"," your changes",[94,114,115,118,119],{},[97,116,117],{},"Run"," tests: ",[120,121,122],"code",{},"composer test",[94,124,125,128],{},[97,126,127],{},"Submit"," a pull request",[86,130,132],{"id":131},"guidelines","Guidelines",[134,135,136,139,142,145],"ul",{},[94,137,138],{},"Follow the existing code style",[94,140,141],{},"Add tests for new features",[94,143,144],{},"Update documentation as needed",[94,146,147],{},"One feature per pull request",[86,149,151],{"id":150},"development-commands","Development Commands",[153,154,159],"pre",{"className":155,"code":156,"language":157,"meta":158,"style":158},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Run tests\ncomposer test\n\n# Format code\ncomposer pint\n\n# Static analysis\ncomposer analyse\n","bash","",[120,160,161,170,181,188,194,202,207,213],{"__ignoreMap":158},[162,163,166],"span",{"class":164,"line":165},"line",1,[162,167,169],{"class":168},"sHwdD","# Run tests\n",[162,171,173,177],{"class":164,"line":172},2,[162,174,176],{"class":175},"sBMFI","composer",[162,178,180],{"class":179},"sfazB"," test\n",[162,182,184],{"class":164,"line":183},3,[162,185,187],{"emptyLinePlaceholder":186},true,"\n",[162,189,191],{"class":164,"line":190},4,[162,192,193],{"class":168},"# Format code\n",[162,195,197,199],{"class":164,"line":196},5,[162,198,176],{"class":175},[162,200,201],{"class":179}," pint\n",[162,203,205],{"class":164,"line":204},6,[162,206,187],{"emptyLinePlaceholder":186},[162,208,210],{"class":164,"line":209},7,[162,211,212],{"class":168},"# Static analysis\n",[162,214,216,218],{"class":164,"line":215},8,[162,217,176],{"class":175},[162,219,220],{"class":179}," analyse\n",[86,222,224],{"id":223},"need-help","Need Help?",[134,226,227,237],{},[94,228,229,236],{},[230,231,235],"a",{"href":232,"rel":233},"https:\u002F\u002Fgithub.com\u002Frelaticle\u002Fcomments\u002Fissues",[234],"nofollow","Open an issue"," for bugs or questions",[94,238,239,240,244],{},"Check ",[230,241,243],{"href":232,"rel":242},[234],"existing issues"," first",[246,247,248],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":158,"searchDepth":172,"depth":172,"links":250},[251,252,253,254],{"id":88,"depth":172,"text":89},{"id":131,"depth":172,"text":132},{"id":150,"depth":172,"text":151},{"id":223,"depth":172,"text":224},"How to contribute to Comments","md",null,{},{"icon":74},{"title":71,"description":255},"WizyvP9psZ6kzi7GfqkI0Riqpld0llpTEbjKit0RwM0",[263,265],{"title":61,"path":62,"stem":63,"description":264,"icon":64,"children":-1},"Tables, relationships, and indexes used by the Comments package.",{"title":76,"path":77,"stem":78,"description":266,"icon":79,"children":-1},"MIT License terms and what it means for you",1774607133407] \ No newline at end of file diff --git a/community/license.html b/community/license.html index b035266..9b38892 100644 --- a/community/license.html +++ b/community/license.html @@ -94,7 +94,7 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}License - Comments
Community

License

MIT License terms and what it means for you

MIT License

Copyright (c) Relaticle
+}License - Comments
Community

License

MIT License terms and what it means for you

MIT License

Copyright (c) Relaticle
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -116,4 +116,4 @@ THE SOFTWARE.
 

What This Means

You can use Comments in commercial projects. You can modify and distribute it. You can use it in closed source projects. -You can sell applications that include it.

Just include the license notice in your copy.

Copyright © 2026
\ No newline at end of file +You can sell applications that include it.

Just include the license notice in your copy.

Copyright © 2026
\ No newline at end of file diff --git a/community/license/_payload.json b/community/license/_payload.json index 11433e0..86be332 100644 --- a/community/license/_payload.json +++ b/community/license/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":141},["ShallowReactive",2],{"navigation_docs":3,"-community-license":80,"-community-license-surround":138},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":76,"body":82,"description":131,"extension":132,"links":133,"meta":134,"navigation":135,"path":77,"seo":136,"stem":78,"__hash__":137},"docs\u002F4.community\u002F2.license.md",{"type":83,"value":84,"toc":126},"minimark",[85,90,101,105,123],[86,87,89],"h2",{"id":88},"mit-license","MIT License",[91,92,97],"pre",{"className":93,"code":95,"language":96},[94],"language-text","Copyright (c) Relaticle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and\u002For sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","text",[98,99,95],"code",{"__ignoreMap":100},"",[86,102,104],{"id":103},"what-this-means","What This Means",[106,107,108,109,113,114,116,117,119,120,122],"p",{},"You ",[110,111,112],"strong",{},"can"," use Comments in commercial projects.\nYou ",[110,115,112],{}," modify and distribute it.\nYou ",[110,118,112],{}," use it in closed source projects.\nYou ",[110,121,112],{}," sell applications that include it.",[106,124,125],{},"Just include the license notice in your copy.",{"title":100,"searchDepth":127,"depth":127,"links":128},2,[129,130],{"id":88,"depth":127,"text":89},{"id":103,"depth":127,"text":104},"MIT License terms and what it means for you","md",null,{},{"icon":79},{"title":76,"description":131},"0vOJT-zB-Vz0zBt_oMaewM8TIacFMi_ctus0AaWjZAI",[139,133],{"title":71,"path":72,"stem":73,"description":140,"icon":74,"children":-1},"How to contribute to Comments",1774606188039] \ No newline at end of file +[{"data":1,"prerenderedAt":141},["ShallowReactive",2],{"navigation_docs":3,"-community-license":80,"-community-license-surround":138},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":76,"body":82,"description":131,"extension":132,"links":133,"meta":134,"navigation":135,"path":77,"seo":136,"stem":78,"__hash__":137},"docs\u002F4.community\u002F2.license.md",{"type":83,"value":84,"toc":126},"minimark",[85,90,101,105,123],[86,87,89],"h2",{"id":88},"mit-license","MIT License",[91,92,97],"pre",{"className":93,"code":95,"language":96},[94],"language-text","Copyright (c) Relaticle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and\u002For sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","text",[98,99,95],"code",{"__ignoreMap":100},"",[86,102,104],{"id":103},"what-this-means","What This Means",[106,107,108,109,113,114,116,117,119,120,122],"p",{},"You ",[110,111,112],"strong",{},"can"," use Comments in commercial projects.\nYou ",[110,115,112],{}," modify and distribute it.\nYou ",[110,118,112],{}," use it in closed source projects.\nYou ",[110,121,112],{}," sell applications that include it.",[106,124,125],{},"Just include the license notice in your copy.",{"title":100,"searchDepth":127,"depth":127,"links":128},2,[129,130],{"id":88,"depth":127,"text":89},{"id":103,"depth":127,"text":104},"MIT License terms and what it means for you","md",null,{},{"icon":79},{"title":76,"description":131},"0vOJT-zB-Vz0zBt_oMaewM8TIacFMi_ctus0AaWjZAI",[139,133],{"title":71,"path":72,"stem":73,"description":140,"icon":74,"children":-1},"How to contribute to Comments",1774607133407] \ No newline at end of file diff --git a/essentials/attachments.html b/essentials/attachments.html index 57ebdc5..7360f76 100644 --- a/essentials/attachments.html +++ b/essentials/attachments.html @@ -94,7 +94,7 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Attachments - Comments
Essentials

Attachments

File uploads for comments.

Overview

Comments support file attachments for both images and documents. Images are displayed inline within the comment body, while documents appear as downloadable links.

Configuration

// config/comments.php
+}Attachments - Comments
Essentials

Attachments

File uploads for comments.

Overview

Comments support file attachments for both images and documents. Images are displayed inline within the comment body, while documents appear as downloadable links.

Configuration

// config/comments.php
 'attachments' => [
     'enabled' => true,
     'disk' => 'public',
@@ -116,4 +116,4 @@
 

This removes the file upload UI from the comment form entirely.

Storage

Attachments are stored via Livewire's file upload mechanism. Each attachment record tracks:

  • file_path -- Path on the configured disk
  • original_name -- Original filename for display
  • mime_type -- MIME type for rendering decisions
  • size -- File size in bytes
  • disk -- Storage disk name

When a comment is deleted, its attachments are cascade deleted from the database. The physical files are removed from the disk.

Helper Methods

The CommentAttachment model provides:

$attachment->isImage();       // Check if attachment is an image
 $attachment->url();           // Get the storage URL
 $attachment->formattedSize(); // Human-readable size (e.g., "2.5 MB")
-
Copyright © 2026
\ No newline at end of file +
Copyright © 2026
\ No newline at end of file diff --git a/essentials/attachments/_payload.json b/essentials/attachments/_payload.json index 25ef476..e407043 100644 --- a/essentials/attachments/_payload.json +++ b/essentials/attachments/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":574},["ShallowReactive",2],{"navigation_docs":3,"-essentials-attachments":80,"-essentials-attachments-surround":569},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":51,"body":82,"description":561,"extension":562,"links":563,"meta":564,"navigation":565,"path":52,"seo":566,"stem":53,"__hash__":568},"docs\u002F2.essentials\u002F5.attachments.md",{"type":83,"value":84,"toc":554},"minimark",[85,90,94,97,319,396,400,434,437,441,444,477,480,484,491,550],[86,87,89],"h2",{"id":88},"overview","Overview",[91,92,93],"p",{},"Comments support file attachments for both images and documents. Images are displayed inline within the comment body, while documents appear as downloadable links.",[86,95,31],{"id":96},"configuration",[98,99,104],"pre",{"className":100,"code":101,"language":102,"meta":103,"style":103},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F config\u002Fcomments.php\n'attachments' => [\n 'enabled' => true,\n 'disk' => 'public',\n 'max_size' => 10240, \u002F\u002F KB (10 MB)\n 'allowed_types' => [\n 'image\u002Fjpeg',\n 'image\u002Fpng',\n 'image\u002Fgif',\n 'image\u002Fwebp',\n 'application\u002Fpdf',\n 'text\u002Fplain',\n 'application\u002Fmsword',\n 'application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document',\n ],\n],\n","php","",[105,106,107,116,135,151,174,196,210,223,235,247,259,271,283,295,307,313],"code",{"__ignoreMap":103},[108,109,112],"span",{"class":110,"line":111},"line",1,[108,113,115],{"class":114},"sHwdD","\u002F\u002F config\u002Fcomments.php\n",[108,117,119,123,127,129,132],{"class":110,"line":118},2,[108,120,122],{"class":121},"sMK4o","'",[108,124,126],{"class":125},"sfazB","attachments",[108,128,122],{"class":121},[108,130,131],{"class":121}," =>",[108,133,134],{"class":121}," [\n",[108,136,138,141,144,146,148],{"class":110,"line":137},3,[108,139,140],{"class":121}," '",[108,142,143],{"class":125},"enabled",[108,145,122],{"class":121},[108,147,131],{"class":121},[108,149,150],{"class":121}," true,\n",[108,152,154,156,159,161,163,166,169,171],{"class":110,"line":153},4,[108,155,140],{"class":121},[108,157,158],{"class":125},"disk",[108,160,122],{"class":121},[108,162,131],{"class":121},[108,164,165],{"class":121}," '",[108,167,168],{"class":125},"public",[108,170,122],{"class":121},[108,172,173],{"class":121},",\n",[108,175,177,179,182,184,186,190,193],{"class":110,"line":176},5,[108,178,140],{"class":121},[108,180,181],{"class":125},"max_size",[108,183,122],{"class":121},[108,185,131],{"class":121},[108,187,189],{"class":188},"sbssI"," 10240",[108,191,192],{"class":121},",",[108,194,195],{"class":114}," \u002F\u002F KB (10 MB)\n",[108,197,199,201,204,206,208],{"class":110,"line":198},6,[108,200,140],{"class":121},[108,202,203],{"class":125},"allowed_types",[108,205,122],{"class":121},[108,207,131],{"class":121},[108,209,134],{"class":121},[108,211,213,216,219,221],{"class":110,"line":212},7,[108,214,215],{"class":121}," '",[108,217,218],{"class":125},"image\u002Fjpeg",[108,220,122],{"class":121},[108,222,173],{"class":121},[108,224,226,228,231,233],{"class":110,"line":225},8,[108,227,215],{"class":121},[108,229,230],{"class":125},"image\u002Fpng",[108,232,122],{"class":121},[108,234,173],{"class":121},[108,236,238,240,243,245],{"class":110,"line":237},9,[108,239,215],{"class":121},[108,241,242],{"class":125},"image\u002Fgif",[108,244,122],{"class":121},[108,246,173],{"class":121},[108,248,250,252,255,257],{"class":110,"line":249},10,[108,251,215],{"class":121},[108,253,254],{"class":125},"image\u002Fwebp",[108,256,122],{"class":121},[108,258,173],{"class":121},[108,260,262,264,267,269],{"class":110,"line":261},11,[108,263,215],{"class":121},[108,265,266],{"class":125},"application\u002Fpdf",[108,268,122],{"class":121},[108,270,173],{"class":121},[108,272,274,276,279,281],{"class":110,"line":273},12,[108,275,215],{"class":121},[108,277,278],{"class":125},"text\u002Fplain",[108,280,122],{"class":121},[108,282,173],{"class":121},[108,284,286,288,291,293],{"class":110,"line":285},13,[108,287,215],{"class":121},[108,289,290],{"class":125},"application\u002Fmsword",[108,292,122],{"class":121},[108,294,173],{"class":121},[108,296,298,300,303,305],{"class":110,"line":297},14,[108,299,215],{"class":121},[108,301,302],{"class":125},"application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document",[108,304,122],{"class":121},[108,306,173],{"class":121},[108,308,310],{"class":110,"line":309},15,[108,311,312],{"class":121}," ],\n",[108,314,316],{"class":110,"line":315},16,[108,317,318],{"class":121},"],\n",[320,321,322,338],"table",{},[323,324,325],"thead",{},[326,327,328,332,335],"tr",{},[329,330,331],"th",{},"Key",[329,333,334],{},"Default",[329,336,337],{},"Description",[339,340,341,356,370,384],"tbody",{},[326,342,343,348,353],{},[344,345,346],"td",{},[105,347,143],{},[344,349,350],{},[105,351,352],{},"true",[344,354,355],{},"Show\u002Fhide the attachment upload UI",[326,357,358,362,367],{},[344,359,360],{},[105,361,158],{},[344,363,364],{},[105,365,366],{},"'public'",[344,368,369],{},"Laravel filesystem disk for storage",[326,371,372,376,381],{},[344,373,374],{},[105,375,181],{},[344,377,378],{},[105,379,380],{},"10240",[344,382,383],{},"Maximum file size in kilobytes",[326,385,386,390,393],{},[344,387,388],{},[105,389,203],{},[344,391,392],{},"images, pdf, text, word",[344,394,395],{},"Array of allowed MIME types",[86,397,399],{"id":398},"disabling-attachments","Disabling Attachments",[98,401,403],{"className":100,"code":402,"language":102,"meta":103,"style":103},"'attachments' => [\n 'enabled' => false,\n],\n",[105,404,405,417,430],{"__ignoreMap":103},[108,406,407,409,411,413,415],{"class":110,"line":111},[108,408,122],{"class":121},[108,410,126],{"class":125},[108,412,122],{"class":121},[108,414,131],{"class":121},[108,416,134],{"class":121},[108,418,419,421,423,425,427],{"class":110,"line":118},[108,420,140],{"class":121},[108,422,143],{"class":125},[108,424,122],{"class":121},[108,426,131],{"class":121},[108,428,429],{"class":121}," false,\n",[108,431,432],{"class":110,"line":137},[108,433,318],{"class":121},[91,435,436],{},"This removes the file upload UI from the comment form entirely.",[86,438,440],{"id":439},"storage","Storage",[91,442,443],{},"Attachments are stored via Livewire's file upload mechanism. Each attachment record tracks:",[445,446,447,454,460,466,472],"ul",{},[448,449,450,453],"li",{},[105,451,452],{},"file_path"," -- Path on the configured disk",[448,455,456,459],{},[105,457,458],{},"original_name"," -- Original filename for display",[448,461,462,465],{},[105,463,464],{},"mime_type"," -- MIME type for rendering decisions",[448,467,468,471],{},[105,469,470],{},"size"," -- File size in bytes",[448,473,474,476],{},[105,475,158],{}," -- Storage disk name",[91,478,479],{},"When a comment is deleted, its attachments are cascade deleted from the database. The physical files are removed from the disk.",[86,481,483],{"id":482},"helper-methods","Helper Methods",[91,485,486,487,490],{},"The ",[105,488,489],{},"CommentAttachment"," model provides:",[98,492,494],{"className":100,"code":493,"language":102,"meta":103,"style":103},"$attachment->isImage(); \u002F\u002F Check if attachment is an image\n$attachment->url(); \u002F\u002F Get the storage URL\n$attachment->formattedSize(); \u002F\u002F Human-readable size (e.g., \"2.5 MB\")\n",[105,495,496,518,534],{"__ignoreMap":103},[108,497,498,501,505,508,512,515],{"class":110,"line":111},[108,499,500],{"class":121},"$",[108,502,504],{"class":503},"sTEyZ","attachment",[108,506,507],{"class":121},"->",[108,509,511],{"class":510},"s2Zo4","isImage",[108,513,514],{"class":121},"();",[108,516,517],{"class":114}," \u002F\u002F Check if attachment is an image\n",[108,519,520,522,524,526,529,531],{"class":110,"line":118},[108,521,500],{"class":121},[108,523,504],{"class":503},[108,525,507],{"class":121},[108,527,528],{"class":510},"url",[108,530,514],{"class":121},[108,532,533],{"class":114}," \u002F\u002F Get the storage URL\n",[108,535,536,538,540,542,545,547],{"class":110,"line":137},[108,537,500],{"class":121},[108,539,504],{"class":503},[108,541,507],{"class":121},[108,543,544],{"class":510},"formattedSize",[108,546,514],{"class":121},[108,548,549],{"class":114}," \u002F\u002F Human-readable size (e.g., \"2.5 MB\")\n",[551,552,553],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":103,"searchDepth":118,"depth":118,"links":555},[556,557,558,559,560],{"id":88,"depth":118,"text":89},{"id":96,"depth":118,"text":31},{"id":398,"depth":118,"text":399},{"id":439,"depth":118,"text":440},{"id":482,"depth":118,"text":483},"File uploads for comments.","md",null,{},{"icon":54},{"description":567,"title":51},"Configure file attachments for comments.","xrbGvfci8GzWkScxlilgm825K9pTzq8qX89Dvwoimu0",[570,572],{"title":46,"path":47,"stem":48,"description":571,"icon":49,"children":-1},"Emoji reactions on comments.",{"title":56,"path":57,"stem":58,"description":573,"icon":59,"children":-1},"Comment notifications, subscriptions, and real-time updates.",1774606188039] \ No newline at end of file +[{"data":1,"prerenderedAt":574},["ShallowReactive",2],{"navigation_docs":3,"-essentials-attachments":80,"-essentials-attachments-surround":569},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":51,"body":82,"description":561,"extension":562,"links":563,"meta":564,"navigation":565,"path":52,"seo":566,"stem":53,"__hash__":568},"docs\u002F2.essentials\u002F5.attachments.md",{"type":83,"value":84,"toc":554},"minimark",[85,90,94,97,319,396,400,434,437,441,444,477,480,484,491,550],[86,87,89],"h2",{"id":88},"overview","Overview",[91,92,93],"p",{},"Comments support file attachments for both images and documents. Images are displayed inline within the comment body, while documents appear as downloadable links.",[86,95,31],{"id":96},"configuration",[98,99,104],"pre",{"className":100,"code":101,"language":102,"meta":103,"style":103},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F config\u002Fcomments.php\n'attachments' => [\n 'enabled' => true,\n 'disk' => 'public',\n 'max_size' => 10240, \u002F\u002F KB (10 MB)\n 'allowed_types' => [\n 'image\u002Fjpeg',\n 'image\u002Fpng',\n 'image\u002Fgif',\n 'image\u002Fwebp',\n 'application\u002Fpdf',\n 'text\u002Fplain',\n 'application\u002Fmsword',\n 'application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document',\n ],\n],\n","php","",[105,106,107,116,135,151,174,196,210,223,235,247,259,271,283,295,307,313],"code",{"__ignoreMap":103},[108,109,112],"span",{"class":110,"line":111},"line",1,[108,113,115],{"class":114},"sHwdD","\u002F\u002F config\u002Fcomments.php\n",[108,117,119,123,127,129,132],{"class":110,"line":118},2,[108,120,122],{"class":121},"sMK4o","'",[108,124,126],{"class":125},"sfazB","attachments",[108,128,122],{"class":121},[108,130,131],{"class":121}," =>",[108,133,134],{"class":121}," [\n",[108,136,138,141,144,146,148],{"class":110,"line":137},3,[108,139,140],{"class":121}," '",[108,142,143],{"class":125},"enabled",[108,145,122],{"class":121},[108,147,131],{"class":121},[108,149,150],{"class":121}," true,\n",[108,152,154,156,159,161,163,166,169,171],{"class":110,"line":153},4,[108,155,140],{"class":121},[108,157,158],{"class":125},"disk",[108,160,122],{"class":121},[108,162,131],{"class":121},[108,164,165],{"class":121}," '",[108,167,168],{"class":125},"public",[108,170,122],{"class":121},[108,172,173],{"class":121},",\n",[108,175,177,179,182,184,186,190,193],{"class":110,"line":176},5,[108,178,140],{"class":121},[108,180,181],{"class":125},"max_size",[108,183,122],{"class":121},[108,185,131],{"class":121},[108,187,189],{"class":188},"sbssI"," 10240",[108,191,192],{"class":121},",",[108,194,195],{"class":114}," \u002F\u002F KB (10 MB)\n",[108,197,199,201,204,206,208],{"class":110,"line":198},6,[108,200,140],{"class":121},[108,202,203],{"class":125},"allowed_types",[108,205,122],{"class":121},[108,207,131],{"class":121},[108,209,134],{"class":121},[108,211,213,216,219,221],{"class":110,"line":212},7,[108,214,215],{"class":121}," '",[108,217,218],{"class":125},"image\u002Fjpeg",[108,220,122],{"class":121},[108,222,173],{"class":121},[108,224,226,228,231,233],{"class":110,"line":225},8,[108,227,215],{"class":121},[108,229,230],{"class":125},"image\u002Fpng",[108,232,122],{"class":121},[108,234,173],{"class":121},[108,236,238,240,243,245],{"class":110,"line":237},9,[108,239,215],{"class":121},[108,241,242],{"class":125},"image\u002Fgif",[108,244,122],{"class":121},[108,246,173],{"class":121},[108,248,250,252,255,257],{"class":110,"line":249},10,[108,251,215],{"class":121},[108,253,254],{"class":125},"image\u002Fwebp",[108,256,122],{"class":121},[108,258,173],{"class":121},[108,260,262,264,267,269],{"class":110,"line":261},11,[108,263,215],{"class":121},[108,265,266],{"class":125},"application\u002Fpdf",[108,268,122],{"class":121},[108,270,173],{"class":121},[108,272,274,276,279,281],{"class":110,"line":273},12,[108,275,215],{"class":121},[108,277,278],{"class":125},"text\u002Fplain",[108,280,122],{"class":121},[108,282,173],{"class":121},[108,284,286,288,291,293],{"class":110,"line":285},13,[108,287,215],{"class":121},[108,289,290],{"class":125},"application\u002Fmsword",[108,292,122],{"class":121},[108,294,173],{"class":121},[108,296,298,300,303,305],{"class":110,"line":297},14,[108,299,215],{"class":121},[108,301,302],{"class":125},"application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document",[108,304,122],{"class":121},[108,306,173],{"class":121},[108,308,310],{"class":110,"line":309},15,[108,311,312],{"class":121}," ],\n",[108,314,316],{"class":110,"line":315},16,[108,317,318],{"class":121},"],\n",[320,321,322,338],"table",{},[323,324,325],"thead",{},[326,327,328,332,335],"tr",{},[329,330,331],"th",{},"Key",[329,333,334],{},"Default",[329,336,337],{},"Description",[339,340,341,356,370,384],"tbody",{},[326,342,343,348,353],{},[344,345,346],"td",{},[105,347,143],{},[344,349,350],{},[105,351,352],{},"true",[344,354,355],{},"Show\u002Fhide the attachment upload UI",[326,357,358,362,367],{},[344,359,360],{},[105,361,158],{},[344,363,364],{},[105,365,366],{},"'public'",[344,368,369],{},"Laravel filesystem disk for storage",[326,371,372,376,381],{},[344,373,374],{},[105,375,181],{},[344,377,378],{},[105,379,380],{},"10240",[344,382,383],{},"Maximum file size in kilobytes",[326,385,386,390,393],{},[344,387,388],{},[105,389,203],{},[344,391,392],{},"images, pdf, text, word",[344,394,395],{},"Array of allowed MIME types",[86,397,399],{"id":398},"disabling-attachments","Disabling Attachments",[98,401,403],{"className":100,"code":402,"language":102,"meta":103,"style":103},"'attachments' => [\n 'enabled' => false,\n],\n",[105,404,405,417,430],{"__ignoreMap":103},[108,406,407,409,411,413,415],{"class":110,"line":111},[108,408,122],{"class":121},[108,410,126],{"class":125},[108,412,122],{"class":121},[108,414,131],{"class":121},[108,416,134],{"class":121},[108,418,419,421,423,425,427],{"class":110,"line":118},[108,420,140],{"class":121},[108,422,143],{"class":125},[108,424,122],{"class":121},[108,426,131],{"class":121},[108,428,429],{"class":121}," false,\n",[108,431,432],{"class":110,"line":137},[108,433,318],{"class":121},[91,435,436],{},"This removes the file upload UI from the comment form entirely.",[86,438,440],{"id":439},"storage","Storage",[91,442,443],{},"Attachments are stored via Livewire's file upload mechanism. Each attachment record tracks:",[445,446,447,454,460,466,472],"ul",{},[448,449,450,453],"li",{},[105,451,452],{},"file_path"," -- Path on the configured disk",[448,455,456,459],{},[105,457,458],{},"original_name"," -- Original filename for display",[448,461,462,465],{},[105,463,464],{},"mime_type"," -- MIME type for rendering decisions",[448,467,468,471],{},[105,469,470],{},"size"," -- File size in bytes",[448,473,474,476],{},[105,475,158],{}," -- Storage disk name",[91,478,479],{},"When a comment is deleted, its attachments are cascade deleted from the database. The physical files are removed from the disk.",[86,481,483],{"id":482},"helper-methods","Helper Methods",[91,485,486,487,490],{},"The ",[105,488,489],{},"CommentAttachment"," model provides:",[98,492,494],{"className":100,"code":493,"language":102,"meta":103,"style":103},"$attachment->isImage(); \u002F\u002F Check if attachment is an image\n$attachment->url(); \u002F\u002F Get the storage URL\n$attachment->formattedSize(); \u002F\u002F Human-readable size (e.g., \"2.5 MB\")\n",[105,495,496,518,534],{"__ignoreMap":103},[108,497,498,501,505,508,512,515],{"class":110,"line":111},[108,499,500],{"class":121},"$",[108,502,504],{"class":503},"sTEyZ","attachment",[108,506,507],{"class":121},"->",[108,509,511],{"class":510},"s2Zo4","isImage",[108,513,514],{"class":121},"();",[108,516,517],{"class":114}," \u002F\u002F Check if attachment is an image\n",[108,519,520,522,524,526,529,531],{"class":110,"line":118},[108,521,500],{"class":121},[108,523,504],{"class":503},[108,525,507],{"class":121},[108,527,528],{"class":510},"url",[108,530,514],{"class":121},[108,532,533],{"class":114}," \u002F\u002F Get the storage URL\n",[108,535,536,538,540,542,545,547],{"class":110,"line":137},[108,537,500],{"class":121},[108,539,504],{"class":503},[108,541,507],{"class":121},[108,543,544],{"class":510},"formattedSize",[108,546,514],{"class":121},[108,548,549],{"class":114}," \u002F\u002F Human-readable size (e.g., \"2.5 MB\")\n",[551,552,553],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":103,"searchDepth":118,"depth":118,"links":555},[556,557,558,559,560],{"id":88,"depth":118,"text":89},{"id":96,"depth":118,"text":31},{"id":398,"depth":118,"text":399},{"id":439,"depth":118,"text":440},{"id":482,"depth":118,"text":483},"File uploads for comments.","md",null,{},{"icon":54},{"description":567,"title":51},"Configure file attachments for comments.","xrbGvfci8GzWkScxlilgm825K9pTzq8qX89Dvwoimu0",[570,572],{"title":46,"path":47,"stem":48,"description":571,"icon":49,"children":-1},"Emoji reactions on comments.",{"title":56,"path":57,"stem":58,"description":573,"icon":59,"children":-1},"Comment notifications, subscriptions, and real-time updates.",1774607133407] \ No newline at end of file diff --git a/essentials/authorization.html b/essentials/authorization.html index b9e7fba..460eb4a 100644 --- a/essentials/authorization.html +++ b/essentials/authorization.html @@ -94,7 +94,7 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Authorization - Comments
Essentials

Authorization

Control who can create, edit, delete, and reply to comments.

Default Policy

The built-in CommentPolicy provides sensible defaults:

MethodDefaultDescription
viewAny()trueEveryone can view comments
create()trueEveryone can create comments
update()Owner onlyOnly the comment author can edit
delete()Owner onlyOnly the comment author can delete
reply()Depth checkCan reply if max_depth not exceeded

Custom Policy

Create your own policy to customize authorization:

namespace App\Policies;
+}Authorization - Comments
Essentials

Authorization

Control who can create, edit, delete, and reply to comments.

Default Policy

The built-in CommentPolicy provides sensible defaults:

MethodDefaultDescription
viewAny()trueEveryone can view comments
create()trueEveryone can create comments
update()Owner onlyOnly the comment author can edit
delete()Owner onlyOnly the comment author can delete
reply()Depth checkCan reply if max_depth not exceeded

Custom Policy

Create your own policy to customize authorization:

namespace App\Policies;
 
 use Relaticle\Comments\Comment;
 use Relaticle\Comments\Contracts\Commenter;
@@ -130,4 +130,4 @@
 }
 

Register it in your config:

// config/comments.php
 'policy' => App\Policies\CustomCommentPolicy::class,
-

How Authorization Works

The Livewire components check the policy before rendering action buttons. Edit and delete buttons only appear for authorized users. Reply buttons are hidden when the thread has reached the configured max_depth.

The policy is registered automatically by the service provider using Laravel's Gate system.

Copyright © 2026
\ No newline at end of file +

How Authorization Works

The Livewire components check the policy before rendering action buttons. Edit and delete buttons only appear for authorized users. Reply buttons are hidden when the thread has reached the configured max_depth.

The policy is registered automatically by the service provider using Laravel's Gate system.

Copyright © 2026
\ No newline at end of file diff --git a/essentials/authorization/_payload.json b/essentials/authorization/_payload.json index c945ff5..d124886 100644 --- a/essentials/authorization/_payload.json +++ b/essentials/authorization/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":754},["ShallowReactive",2],{"navigation_docs":3,"-essentials-authorization":80,"-essentials-authorization-surround":749},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":36,"body":82,"description":741,"extension":742,"links":743,"meta":744,"navigation":745,"path":37,"seo":746,"stem":38,"__hash__":748},"docs\u002F2.essentials\u002F2.authorization.md",{"type":83,"value":84,"toc":736},"minimark",[85,90,99,193,197,200,674,677,719,723,729,732],[86,87,89],"h2",{"id":88},"default-policy","Default Policy",[91,92,93,94,98],"p",{},"The built-in ",[95,96,97],"code",{},"CommentPolicy"," provides sensible defaults:",[100,101,102,118],"table",{},[103,104,105],"thead",{},[106,107,108,112,115],"tr",{},[109,110,111],"th",{},"Method",[109,113,114],{},"Default",[109,116,117],{},"Description",[119,120,121,137,151,164,176],"tbody",{},[106,122,123,129,134],{},[124,125,126],"td",{},[95,127,128],{},"viewAny()",[124,130,131],{},[95,132,133],{},"true",[124,135,136],{},"Everyone can view comments",[106,138,139,144,148],{},[124,140,141],{},[95,142,143],{},"create()",[124,145,146],{},[95,147,133],{},[124,149,150],{},"Everyone can create comments",[106,152,153,158,161],{},[124,154,155],{},[95,156,157],{},"update()",[124,159,160],{},"Owner only",[124,162,163],{},"Only the comment author can edit",[106,165,166,171,173],{},[124,167,168],{},[95,169,170],{},"delete()",[124,172,160],{},[124,174,175],{},"Only the comment author can delete",[106,177,178,183,186],{},[124,179,180],{},[95,181,182],{},"reply()",[124,184,185],{},"Depth check",[124,187,188,189,192],{},"Can reply if ",[95,190,191],{},"max_depth"," not exceeded",[86,194,196],{"id":195},"custom-policy","Custom Policy",[91,198,199],{},"Create your own policy to customize authorization:",[201,202,207],"pre",{"className":203,"code":204,"language":205,"meta":206,"style":206},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","namespace App\\Policies;\n\nuse Relaticle\\Comments\\Comment;\nuse Relaticle\\Comments\\Contracts\\Commenter;\n\nclass CustomCommentPolicy\n{\n public function viewAny(Commenter $user): bool\n {\n return true;\n }\n\n public function create(Commenter $user): bool\n {\n return true;\n }\n\n public function update(Commenter $user, Comment $comment): bool\n {\n return $comment->user_id === $user->getKey()\n && $comment->user_type === $user->getMorphClass();\n }\n\n public function delete(Commenter $user, Comment $comment): bool\n {\n return $comment->user_id === $user->getKey()\n || $user->hasRole('admin');\n }\n\n public function reply(Commenter $user, Comment $comment): bool\n {\n return $comment->canReply();\n }\n}\n","php","",[95,208,209,232,239,261,284,289,299,305,335,341,351,357,362,384,389,396,401,406,439,444,474,503,508,513,543,548,573,602,607,612,642,647,663,668],{"__ignoreMap":206},[210,211,214,218,222,226,229],"span",{"class":212,"line":213},"line",1,[210,215,217],{"class":216},"sbssI","namespace",[210,219,221],{"class":220},"sBMFI"," App",[210,223,225],{"class":224},"sMK4o","\\",[210,227,228],{"class":220},"Policies",[210,230,231],{"class":224},";\n",[210,233,235],{"class":212,"line":234},2,[210,236,238],{"emptyLinePlaceholder":237},true,"\n",[210,240,242,245,249,251,254,256,259],{"class":212,"line":241},3,[210,243,244],{"class":216},"use",[210,246,248],{"class":247},"sTEyZ"," Relaticle",[210,250,225],{"class":224},[210,252,253],{"class":247},"Comments",[210,255,225],{"class":224},[210,257,258],{"class":247},"Comment",[210,260,231],{"class":224},[210,262,264,266,268,270,272,274,277,279,282],{"class":212,"line":263},4,[210,265,244],{"class":216},[210,267,248],{"class":247},[210,269,225],{"class":224},[210,271,253],{"class":247},[210,273,225],{"class":224},[210,275,276],{"class":247},"Contracts",[210,278,225],{"class":224},[210,280,281],{"class":247},"Commenter",[210,283,231],{"class":224},[210,285,287],{"class":212,"line":286},5,[210,288,238],{"emptyLinePlaceholder":237},[210,290,292,296],{"class":212,"line":291},6,[210,293,295],{"class":294},"spNyl","class",[210,297,298],{"class":220}," CustomCommentPolicy\n",[210,300,302],{"class":212,"line":301},7,[210,303,304],{"class":224},"{\n",[210,306,308,311,314,318,321,323,326,329,332],{"class":212,"line":307},8,[210,309,310],{"class":294}," public",[210,312,313],{"class":294}," function",[210,315,317],{"class":316},"s2Zo4"," viewAny",[210,319,320],{"class":224},"(",[210,322,281],{"class":220},[210,324,325],{"class":224}," $",[210,327,328],{"class":247},"user",[210,330,331],{"class":224},"):",[210,333,334],{"class":216}," bool\n",[210,336,338],{"class":212,"line":337},9,[210,339,340],{"class":224}," {\n",[210,342,344,348],{"class":212,"line":343},10,[210,345,347],{"class":346},"s7zQu"," return",[210,349,350],{"class":224}," true;\n",[210,352,354],{"class":212,"line":353},11,[210,355,356],{"class":224}," }\n",[210,358,360],{"class":212,"line":359},12,[210,361,238],{"emptyLinePlaceholder":237},[210,363,365,367,369,372,374,376,378,380,382],{"class":212,"line":364},13,[210,366,310],{"class":294},[210,368,313],{"class":294},[210,370,371],{"class":316}," create",[210,373,320],{"class":224},[210,375,281],{"class":220},[210,377,325],{"class":224},[210,379,328],{"class":247},[210,381,331],{"class":224},[210,383,334],{"class":216},[210,385,387],{"class":212,"line":386},14,[210,388,340],{"class":224},[210,390,392,394],{"class":212,"line":391},15,[210,393,347],{"class":346},[210,395,350],{"class":224},[210,397,399],{"class":212,"line":398},16,[210,400,356],{"class":224},[210,402,404],{"class":212,"line":403},17,[210,405,238],{"emptyLinePlaceholder":237},[210,407,409,411,413,416,418,420,422,424,427,430,432,435,437],{"class":212,"line":408},18,[210,410,310],{"class":294},[210,412,313],{"class":294},[210,414,415],{"class":316}," update",[210,417,320],{"class":224},[210,419,281],{"class":220},[210,421,325],{"class":224},[210,423,328],{"class":247},[210,425,426],{"class":224},",",[210,428,429],{"class":220}," Comment",[210,431,325],{"class":224},[210,433,434],{"class":247},"comment",[210,436,331],{"class":224},[210,438,334],{"class":216},[210,440,442],{"class":212,"line":441},19,[210,443,340],{"class":224},[210,445,447,449,451,453,456,459,462,464,466,468,471],{"class":212,"line":446},20,[210,448,347],{"class":346},[210,450,325],{"class":224},[210,452,434],{"class":247},[210,454,455],{"class":224},"->",[210,457,458],{"class":247},"user_id ",[210,460,461],{"class":224},"===",[210,463,325],{"class":224},[210,465,328],{"class":247},[210,467,455],{"class":224},[210,469,470],{"class":316},"getKey",[210,472,473],{"class":224},"()\n",[210,475,477,480,482,484,486,489,491,493,495,497,500],{"class":212,"line":476},21,[210,478,479],{"class":224}," &&",[210,481,325],{"class":224},[210,483,434],{"class":247},[210,485,455],{"class":224},[210,487,488],{"class":247},"user_type ",[210,490,461],{"class":224},[210,492,325],{"class":224},[210,494,328],{"class":247},[210,496,455],{"class":224},[210,498,499],{"class":316},"getMorphClass",[210,501,502],{"class":224},"();\n",[210,504,506],{"class":212,"line":505},22,[210,507,356],{"class":224},[210,509,511],{"class":212,"line":510},23,[210,512,238],{"emptyLinePlaceholder":237},[210,514,516,518,520,523,525,527,529,531,533,535,537,539,541],{"class":212,"line":515},24,[210,517,310],{"class":294},[210,519,313],{"class":294},[210,521,522],{"class":316}," delete",[210,524,320],{"class":224},[210,526,281],{"class":220},[210,528,325],{"class":224},[210,530,328],{"class":247},[210,532,426],{"class":224},[210,534,429],{"class":220},[210,536,325],{"class":224},[210,538,434],{"class":247},[210,540,331],{"class":224},[210,542,334],{"class":216},[210,544,546],{"class":212,"line":545},25,[210,547,340],{"class":224},[210,549,551,553,555,557,559,561,563,565,567,569,571],{"class":212,"line":550},26,[210,552,347],{"class":346},[210,554,325],{"class":224},[210,556,434],{"class":247},[210,558,455],{"class":224},[210,560,458],{"class":247},[210,562,461],{"class":224},[210,564,325],{"class":224},[210,566,328],{"class":247},[210,568,455],{"class":224},[210,570,470],{"class":316},[210,572,473],{"class":224},[210,574,576,579,581,583,585,588,590,593,597,599],{"class":212,"line":575},27,[210,577,578],{"class":224}," ||",[210,580,325],{"class":224},[210,582,328],{"class":247},[210,584,455],{"class":224},[210,586,587],{"class":316},"hasRole",[210,589,320],{"class":224},[210,591,592],{"class":224},"'",[210,594,596],{"class":595},"sfazB","admin",[210,598,592],{"class":224},[210,600,601],{"class":224},");\n",[210,603,605],{"class":212,"line":604},28,[210,606,356],{"class":224},[210,608,610],{"class":212,"line":609},29,[210,611,238],{"emptyLinePlaceholder":237},[210,613,615,617,619,622,624,626,628,630,632,634,636,638,640],{"class":212,"line":614},30,[210,616,310],{"class":294},[210,618,313],{"class":294},[210,620,621],{"class":316}," reply",[210,623,320],{"class":224},[210,625,281],{"class":220},[210,627,325],{"class":224},[210,629,328],{"class":247},[210,631,426],{"class":224},[210,633,429],{"class":220},[210,635,325],{"class":224},[210,637,434],{"class":247},[210,639,331],{"class":224},[210,641,334],{"class":216},[210,643,645],{"class":212,"line":644},31,[210,646,340],{"class":224},[210,648,650,652,654,656,658,661],{"class":212,"line":649},32,[210,651,347],{"class":346},[210,653,325],{"class":224},[210,655,434],{"class":247},[210,657,455],{"class":224},[210,659,660],{"class":316},"canReply",[210,662,502],{"class":224},[210,664,666],{"class":212,"line":665},33,[210,667,356],{"class":224},[210,669,671],{"class":212,"line":670},34,[210,672,673],{"class":224},"}\n",[91,675,676],{},"Register it in your config:",[201,678,680],{"className":203,"code":679,"language":205,"meta":206,"style":206},"\u002F\u002F config\u002Fcomments.php\n'policy' => App\\Policies\\CustomCommentPolicy::class,\n",[95,681,682,688],{"__ignoreMap":206},[210,683,684],{"class":212,"line":213},[210,685,687],{"class":686},"sHwdD","\u002F\u002F config\u002Fcomments.php\n",[210,689,690,692,695,697,700,702,704,706,708,711,714,716],{"class":212,"line":234},[210,691,592],{"class":224},[210,693,694],{"class":595},"policy",[210,696,592],{"class":224},[210,698,699],{"class":224}," =>",[210,701,221],{"class":247},[210,703,225],{"class":224},[210,705,228],{"class":247},[210,707,225],{"class":224},[210,709,710],{"class":220},"CustomCommentPolicy",[210,712,713],{"class":224},"::",[210,715,295],{"class":216},[210,717,718],{"class":224},",\n",[86,720,722],{"id":721},"how-authorization-works","How Authorization Works",[91,724,725,726,728],{},"The Livewire components check the policy before rendering action buttons. Edit and delete buttons only appear for authorized users. Reply buttons are hidden when the thread has reached the configured ",[95,727,191],{},".",[91,730,731],{},"The policy is registered automatically by the service provider using Laravel's Gate system.",[733,734,735],"style",{},"html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":206,"searchDepth":234,"depth":234,"links":737},[738,739,740],{"id":88,"depth":234,"text":89},{"id":195,"depth":234,"text":196},{"id":721,"depth":234,"text":722},"Control who can create, edit, delete, and reply to comments.","md",null,{},{"icon":39},{"description":747,"title":36},"Configure comment authorization policies.","YnHyEHTZ0JhpjKoVXd3F9RBoyGiM3pyczDpn5a5Grfo",[750,752],{"title":31,"path":32,"stem":33,"description":751,"icon":34,"children":-1},"Configure threading, reactions, mentions, attachments, notifications, and more.",{"title":41,"path":42,"stem":43,"description":753,"icon":44,"children":-1},"User @mentions with autocomplete and notification support.",1774606188039] \ No newline at end of file +[{"data":1,"prerenderedAt":754},["ShallowReactive",2],{"navigation_docs":3,"-essentials-authorization":80,"-essentials-authorization-surround":749},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":36,"body":82,"description":741,"extension":742,"links":743,"meta":744,"navigation":745,"path":37,"seo":746,"stem":38,"__hash__":748},"docs\u002F2.essentials\u002F2.authorization.md",{"type":83,"value":84,"toc":736},"minimark",[85,90,99,193,197,200,674,677,719,723,729,732],[86,87,89],"h2",{"id":88},"default-policy","Default Policy",[91,92,93,94,98],"p",{},"The built-in ",[95,96,97],"code",{},"CommentPolicy"," provides sensible defaults:",[100,101,102,118],"table",{},[103,104,105],"thead",{},[106,107,108,112,115],"tr",{},[109,110,111],"th",{},"Method",[109,113,114],{},"Default",[109,116,117],{},"Description",[119,120,121,137,151,164,176],"tbody",{},[106,122,123,129,134],{},[124,125,126],"td",{},[95,127,128],{},"viewAny()",[124,130,131],{},[95,132,133],{},"true",[124,135,136],{},"Everyone can view comments",[106,138,139,144,148],{},[124,140,141],{},[95,142,143],{},"create()",[124,145,146],{},[95,147,133],{},[124,149,150],{},"Everyone can create comments",[106,152,153,158,161],{},[124,154,155],{},[95,156,157],{},"update()",[124,159,160],{},"Owner only",[124,162,163],{},"Only the comment author can edit",[106,165,166,171,173],{},[124,167,168],{},[95,169,170],{},"delete()",[124,172,160],{},[124,174,175],{},"Only the comment author can delete",[106,177,178,183,186],{},[124,179,180],{},[95,181,182],{},"reply()",[124,184,185],{},"Depth check",[124,187,188,189,192],{},"Can reply if ",[95,190,191],{},"max_depth"," not exceeded",[86,194,196],{"id":195},"custom-policy","Custom Policy",[91,198,199],{},"Create your own policy to customize authorization:",[201,202,207],"pre",{"className":203,"code":204,"language":205,"meta":206,"style":206},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","namespace App\\Policies;\n\nuse Relaticle\\Comments\\Comment;\nuse Relaticle\\Comments\\Contracts\\Commenter;\n\nclass CustomCommentPolicy\n{\n public function viewAny(Commenter $user): bool\n {\n return true;\n }\n\n public function create(Commenter $user): bool\n {\n return true;\n }\n\n public function update(Commenter $user, Comment $comment): bool\n {\n return $comment->user_id === $user->getKey()\n && $comment->user_type === $user->getMorphClass();\n }\n\n public function delete(Commenter $user, Comment $comment): bool\n {\n return $comment->user_id === $user->getKey()\n || $user->hasRole('admin');\n }\n\n public function reply(Commenter $user, Comment $comment): bool\n {\n return $comment->canReply();\n }\n}\n","php","",[95,208,209,232,239,261,284,289,299,305,335,341,351,357,362,384,389,396,401,406,439,444,474,503,508,513,543,548,573,602,607,612,642,647,663,668],{"__ignoreMap":206},[210,211,214,218,222,226,229],"span",{"class":212,"line":213},"line",1,[210,215,217],{"class":216},"sbssI","namespace",[210,219,221],{"class":220},"sBMFI"," App",[210,223,225],{"class":224},"sMK4o","\\",[210,227,228],{"class":220},"Policies",[210,230,231],{"class":224},";\n",[210,233,235],{"class":212,"line":234},2,[210,236,238],{"emptyLinePlaceholder":237},true,"\n",[210,240,242,245,249,251,254,256,259],{"class":212,"line":241},3,[210,243,244],{"class":216},"use",[210,246,248],{"class":247},"sTEyZ"," Relaticle",[210,250,225],{"class":224},[210,252,253],{"class":247},"Comments",[210,255,225],{"class":224},[210,257,258],{"class":247},"Comment",[210,260,231],{"class":224},[210,262,264,266,268,270,272,274,277,279,282],{"class":212,"line":263},4,[210,265,244],{"class":216},[210,267,248],{"class":247},[210,269,225],{"class":224},[210,271,253],{"class":247},[210,273,225],{"class":224},[210,275,276],{"class":247},"Contracts",[210,278,225],{"class":224},[210,280,281],{"class":247},"Commenter",[210,283,231],{"class":224},[210,285,287],{"class":212,"line":286},5,[210,288,238],{"emptyLinePlaceholder":237},[210,290,292,296],{"class":212,"line":291},6,[210,293,295],{"class":294},"spNyl","class",[210,297,298],{"class":220}," CustomCommentPolicy\n",[210,300,302],{"class":212,"line":301},7,[210,303,304],{"class":224},"{\n",[210,306,308,311,314,318,321,323,326,329,332],{"class":212,"line":307},8,[210,309,310],{"class":294}," public",[210,312,313],{"class":294}," function",[210,315,317],{"class":316},"s2Zo4"," viewAny",[210,319,320],{"class":224},"(",[210,322,281],{"class":220},[210,324,325],{"class":224}," $",[210,327,328],{"class":247},"user",[210,330,331],{"class":224},"):",[210,333,334],{"class":216}," bool\n",[210,336,338],{"class":212,"line":337},9,[210,339,340],{"class":224}," {\n",[210,342,344,348],{"class":212,"line":343},10,[210,345,347],{"class":346},"s7zQu"," return",[210,349,350],{"class":224}," true;\n",[210,352,354],{"class":212,"line":353},11,[210,355,356],{"class":224}," }\n",[210,358,360],{"class":212,"line":359},12,[210,361,238],{"emptyLinePlaceholder":237},[210,363,365,367,369,372,374,376,378,380,382],{"class":212,"line":364},13,[210,366,310],{"class":294},[210,368,313],{"class":294},[210,370,371],{"class":316}," create",[210,373,320],{"class":224},[210,375,281],{"class":220},[210,377,325],{"class":224},[210,379,328],{"class":247},[210,381,331],{"class":224},[210,383,334],{"class":216},[210,385,387],{"class":212,"line":386},14,[210,388,340],{"class":224},[210,390,392,394],{"class":212,"line":391},15,[210,393,347],{"class":346},[210,395,350],{"class":224},[210,397,399],{"class":212,"line":398},16,[210,400,356],{"class":224},[210,402,404],{"class":212,"line":403},17,[210,405,238],{"emptyLinePlaceholder":237},[210,407,409,411,413,416,418,420,422,424,427,430,432,435,437],{"class":212,"line":408},18,[210,410,310],{"class":294},[210,412,313],{"class":294},[210,414,415],{"class":316}," update",[210,417,320],{"class":224},[210,419,281],{"class":220},[210,421,325],{"class":224},[210,423,328],{"class":247},[210,425,426],{"class":224},",",[210,428,429],{"class":220}," Comment",[210,431,325],{"class":224},[210,433,434],{"class":247},"comment",[210,436,331],{"class":224},[210,438,334],{"class":216},[210,440,442],{"class":212,"line":441},19,[210,443,340],{"class":224},[210,445,447,449,451,453,456,459,462,464,466,468,471],{"class":212,"line":446},20,[210,448,347],{"class":346},[210,450,325],{"class":224},[210,452,434],{"class":247},[210,454,455],{"class":224},"->",[210,457,458],{"class":247},"user_id ",[210,460,461],{"class":224},"===",[210,463,325],{"class":224},[210,465,328],{"class":247},[210,467,455],{"class":224},[210,469,470],{"class":316},"getKey",[210,472,473],{"class":224},"()\n",[210,475,477,480,482,484,486,489,491,493,495,497,500],{"class":212,"line":476},21,[210,478,479],{"class":224}," &&",[210,481,325],{"class":224},[210,483,434],{"class":247},[210,485,455],{"class":224},[210,487,488],{"class":247},"user_type ",[210,490,461],{"class":224},[210,492,325],{"class":224},[210,494,328],{"class":247},[210,496,455],{"class":224},[210,498,499],{"class":316},"getMorphClass",[210,501,502],{"class":224},"();\n",[210,504,506],{"class":212,"line":505},22,[210,507,356],{"class":224},[210,509,511],{"class":212,"line":510},23,[210,512,238],{"emptyLinePlaceholder":237},[210,514,516,518,520,523,525,527,529,531,533,535,537,539,541],{"class":212,"line":515},24,[210,517,310],{"class":294},[210,519,313],{"class":294},[210,521,522],{"class":316}," delete",[210,524,320],{"class":224},[210,526,281],{"class":220},[210,528,325],{"class":224},[210,530,328],{"class":247},[210,532,426],{"class":224},[210,534,429],{"class":220},[210,536,325],{"class":224},[210,538,434],{"class":247},[210,540,331],{"class":224},[210,542,334],{"class":216},[210,544,546],{"class":212,"line":545},25,[210,547,340],{"class":224},[210,549,551,553,555,557,559,561,563,565,567,569,571],{"class":212,"line":550},26,[210,552,347],{"class":346},[210,554,325],{"class":224},[210,556,434],{"class":247},[210,558,455],{"class":224},[210,560,458],{"class":247},[210,562,461],{"class":224},[210,564,325],{"class":224},[210,566,328],{"class":247},[210,568,455],{"class":224},[210,570,470],{"class":316},[210,572,473],{"class":224},[210,574,576,579,581,583,585,588,590,593,597,599],{"class":212,"line":575},27,[210,577,578],{"class":224}," ||",[210,580,325],{"class":224},[210,582,328],{"class":247},[210,584,455],{"class":224},[210,586,587],{"class":316},"hasRole",[210,589,320],{"class":224},[210,591,592],{"class":224},"'",[210,594,596],{"class":595},"sfazB","admin",[210,598,592],{"class":224},[210,600,601],{"class":224},");\n",[210,603,605],{"class":212,"line":604},28,[210,606,356],{"class":224},[210,608,610],{"class":212,"line":609},29,[210,611,238],{"emptyLinePlaceholder":237},[210,613,615,617,619,622,624,626,628,630,632,634,636,638,640],{"class":212,"line":614},30,[210,616,310],{"class":294},[210,618,313],{"class":294},[210,620,621],{"class":316}," reply",[210,623,320],{"class":224},[210,625,281],{"class":220},[210,627,325],{"class":224},[210,629,328],{"class":247},[210,631,426],{"class":224},[210,633,429],{"class":220},[210,635,325],{"class":224},[210,637,434],{"class":247},[210,639,331],{"class":224},[210,641,334],{"class":216},[210,643,645],{"class":212,"line":644},31,[210,646,340],{"class":224},[210,648,650,652,654,656,658,661],{"class":212,"line":649},32,[210,651,347],{"class":346},[210,653,325],{"class":224},[210,655,434],{"class":247},[210,657,455],{"class":224},[210,659,660],{"class":316},"canReply",[210,662,502],{"class":224},[210,664,666],{"class":212,"line":665},33,[210,667,356],{"class":224},[210,669,671],{"class":212,"line":670},34,[210,672,673],{"class":224},"}\n",[91,675,676],{},"Register it in your config:",[201,678,680],{"className":203,"code":679,"language":205,"meta":206,"style":206},"\u002F\u002F config\u002Fcomments.php\n'policy' => App\\Policies\\CustomCommentPolicy::class,\n",[95,681,682,688],{"__ignoreMap":206},[210,683,684],{"class":212,"line":213},[210,685,687],{"class":686},"sHwdD","\u002F\u002F config\u002Fcomments.php\n",[210,689,690,692,695,697,700,702,704,706,708,711,714,716],{"class":212,"line":234},[210,691,592],{"class":224},[210,693,694],{"class":595},"policy",[210,696,592],{"class":224},[210,698,699],{"class":224}," =>",[210,701,221],{"class":247},[210,703,225],{"class":224},[210,705,228],{"class":247},[210,707,225],{"class":224},[210,709,710],{"class":220},"CustomCommentPolicy",[210,712,713],{"class":224},"::",[210,715,295],{"class":216},[210,717,718],{"class":224},",\n",[86,720,722],{"id":721},"how-authorization-works","How Authorization Works",[91,724,725,726,728],{},"The Livewire components check the policy before rendering action buttons. Edit and delete buttons only appear for authorized users. Reply buttons are hidden when the thread has reached the configured ",[95,727,191],{},".",[91,730,731],{},"The policy is registered automatically by the service provider using Laravel's Gate system.",[733,734,735],"style",{},"html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":206,"searchDepth":234,"depth":234,"links":737},[738,739,740],{"id":88,"depth":234,"text":89},{"id":195,"depth":234,"text":196},{"id":721,"depth":234,"text":722},"Control who can create, edit, delete, and reply to comments.","md",null,{},{"icon":39},{"description":747,"title":36},"Configure comment authorization policies.","YnHyEHTZ0JhpjKoVXd3F9RBoyGiM3pyczDpn5a5Grfo",[750,752],{"title":31,"path":32,"stem":33,"description":751,"icon":34,"children":-1},"Configure threading, reactions, mentions, attachments, notifications, and more.",{"title":41,"path":42,"stem":43,"description":753,"icon":44,"children":-1},"User @mentions with autocomplete and notification support.",1774607133407] \ No newline at end of file diff --git a/essentials/configuration.html b/essentials/configuration.html index a1e55dc..d0c967d 100644 --- a/essentials/configuration.html +++ b/essentials/configuration.html @@ -94,7 +94,7 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Configuration - Comments
Essentials

Configuration

Configure threading, reactions, mentions, attachments, notifications, and more.

Publish the configuration file:

php artisan vendor:publish --tag=comments-config
+}Configuration - Comments
Essentials

Configuration

Configure threading, reactions, mentions, attachments, notifications, and more.

Publish the configuration file:

php artisan vendor:publish --tag=comments-config
 

This creates config/comments.php with all available options.

Table Name

'tables' => [
     'comments' => 'comments',
 ],
@@ -168,4 +168,4 @@
 Config::resolveAuthenticatedUserUsing(function () {
     return auth()->user();
 });
-

This is useful for multi-guard applications or custom authentication flows.

Copyright © 2026
\ No newline at end of file +

This is useful for multi-guard applications or custom authentication flows.

Copyright © 2026
\ No newline at end of file diff --git a/essentials/configuration/_payload.json b/essentials/configuration/_payload.json index ca61d0c..28de60c 100644 --- a/essentials/configuration/_payload.json +++ b/essentials/configuration/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":1381},["ShallowReactive",2],{"navigation_docs":3,"-essentials-configuration":80,"-essentials-configuration-surround":1376},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":31,"body":82,"description":1368,"extension":1369,"links":1370,"meta":1371,"navigation":1372,"path":32,"seo":1373,"stem":33,"__hash__":1375},"docs\u002F2.essentials\u002F1.configuration.md",{"type":83,"value":84,"toc":1352},"minimark",[85,89,118,125,130,182,185,189,306,309,313,352,359,363,400,411,415,452,455,458,623,626,629,700,706,710,826,829,832,890,904,908,942,945,948,1131,1142,1146,1199,1206,1210,1251,1258,1262,1265,1345,1348],[86,87,88],"p",{},"Publish the configuration file:",[90,91,96],"pre",{"className":92,"code":93,"language":94,"meta":95,"style":95},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","php artisan vendor:publish --tag=comments-config\n","bash","",[97,98,99],"code",{"__ignoreMap":95},[100,101,104,108,112,115],"span",{"class":102,"line":103},"line",1,[100,105,107],{"class":106},"sBMFI","php",[100,109,111],{"class":110},"sfazB"," artisan",[100,113,114],{"class":110}," vendor:publish",[100,116,117],{"class":110}," --tag=comments-config\n",[86,119,120,121,124],{},"This creates ",[97,122,123],{},"config\u002Fcomments.php"," with all available options.",[126,127,129],"h2",{"id":128},"table-name","Table Name",[90,131,134],{"className":132,"code":133,"language":107,"meta":95,"style":95},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","'tables' => [\n 'comments' => 'comments',\n],\n",[97,135,136,153,176],{"__ignoreMap":95},[100,137,138,142,145,147,150],{"class":102,"line":103},[100,139,141],{"class":140},"sMK4o","'",[100,143,144],{"class":110},"tables",[100,146,141],{"class":140},[100,148,149],{"class":140}," =>",[100,151,152],{"class":140}," [\n",[100,154,156,159,162,164,166,169,171,173],{"class":102,"line":155},2,[100,157,158],{"class":140}," '",[100,160,161],{"class":110},"comments",[100,163,141],{"class":140},[100,165,149],{"class":140},[100,167,168],{"class":140}," '",[100,170,161],{"class":110},[100,172,141],{"class":140},[100,174,175],{"class":140},",\n",[100,177,179],{"class":102,"line":178},3,[100,180,181],{"class":140},"],\n",[86,183,184],{},"Change the table name if it conflicts with your application.",[126,186,188],{"id":187},"models","Models",[90,190,192],{"className":132,"code":191,"language":107,"meta":95,"style":95},"'models' => [\n 'comment' => \\Relaticle\\Comments\\Comment::class,\n],\n\n'commenter' => [\n 'model' => \\App\\Models\\User::class,\n],\n",[97,193,194,206,244,248,255,269,301],{"__ignoreMap":95},[100,195,196,198,200,202,204],{"class":102,"line":103},[100,197,141],{"class":140},[100,199,187],{"class":110},[100,201,141],{"class":140},[100,203,149],{"class":140},[100,205,152],{"class":140},[100,207,208,210,213,215,217,220,224,227,230,232,235,238,242],{"class":102,"line":155},[100,209,158],{"class":140},[100,211,212],{"class":110},"comment",[100,214,141],{"class":140},[100,216,149],{"class":140},[100,218,219],{"class":140}," \\",[100,221,223],{"class":222},"sTEyZ","Relaticle",[100,225,226],{"class":140},"\\",[100,228,229],{"class":222},"Comments",[100,231,226],{"class":140},[100,233,234],{"class":106},"Comment",[100,236,237],{"class":140},"::",[100,239,241],{"class":240},"sbssI","class",[100,243,175],{"class":140},[100,245,246],{"class":102,"line":178},[100,247,181],{"class":140},[100,249,251],{"class":102,"line":250},4,[100,252,254],{"emptyLinePlaceholder":253},true,"\n",[100,256,258,260,263,265,267],{"class":102,"line":257},5,[100,259,141],{"class":140},[100,261,262],{"class":110},"commenter",[100,264,141],{"class":140},[100,266,149],{"class":140},[100,268,152],{"class":140},[100,270,272,274,277,279,281,283,286,288,290,292,295,297,299],{"class":102,"line":271},6,[100,273,158],{"class":140},[100,275,276],{"class":110},"model",[100,278,141],{"class":140},[100,280,149],{"class":140},[100,282,219],{"class":140},[100,284,285],{"class":222},"App",[100,287,226],{"class":140},[100,289,188],{"class":222},[100,291,226],{"class":140},[100,293,294],{"class":106},"User",[100,296,237],{"class":140},[100,298,241],{"class":240},[100,300,175],{"class":140},[100,302,304],{"class":102,"line":303},7,[100,305,181],{"class":140},[86,307,308],{},"Override the Comment model to add custom behavior. The commenter model defines which class represents the user who comments.",[126,310,312],{"id":311},"policy","Policy",[90,314,316],{"className":132,"code":315,"language":107,"meta":95,"style":95},"'policy' => \\Relaticle\\Comments\\Policies\\CommentPolicy::class,\n",[97,317,318],{"__ignoreMap":95},[100,319,320,322,324,326,328,330,332,334,336,338,341,343,346,348,350],{"class":102,"line":103},[100,321,141],{"class":140},[100,323,311],{"class":110},[100,325,141],{"class":140},[100,327,149],{"class":140},[100,329,219],{"class":140},[100,331,223],{"class":222},[100,333,226],{"class":140},[100,335,229],{"class":222},[100,337,226],{"class":140},[100,339,340],{"class":222},"Policies",[100,342,226],{"class":140},[100,344,345],{"class":106},"CommentPolicy",[100,347,237],{"class":140},[100,349,241],{"class":240},[100,351,175],{"class":140},[86,353,354,355,358],{},"See the ",[356,357,36],"a",{"href":37}," page for customization details.",[126,360,362],{"id":361},"threading","Threading",[90,364,366],{"className":132,"code":365,"language":107,"meta":95,"style":95},"'threading' => [\n 'max_depth' => 2,\n],\n",[97,367,368,380,396],{"__ignoreMap":95},[100,369,370,372,374,376,378],{"class":102,"line":103},[100,371,141],{"class":140},[100,373,361],{"class":110},[100,375,141],{"class":140},[100,377,149],{"class":140},[100,379,152],{"class":140},[100,381,382,384,387,389,391,394],{"class":102,"line":155},[100,383,158],{"class":140},[100,385,386],{"class":110},"max_depth",[100,388,141],{"class":140},[100,390,149],{"class":140},[100,392,393],{"class":240}," 2",[100,395,175],{"class":140},[100,397,398],{"class":102,"line":178},[100,399,181],{"class":140},[86,401,402,403,406,407,410],{},"Controls how many levels of nested replies are allowed. A depth of ",[97,404,405],{},"2"," means top-level comments and one level of replies. Set to ",[97,408,409],{},"1"," to disable replies entirely.",[126,412,414],{"id":413},"pagination","Pagination",[90,416,418],{"className":132,"code":417,"language":107,"meta":95,"style":95},"'pagination' => [\n 'per_page' => 10,\n],\n",[97,419,420,432,448],{"__ignoreMap":95},[100,421,422,424,426,428,430],{"class":102,"line":103},[100,423,141],{"class":140},[100,425,413],{"class":110},[100,427,141],{"class":140},[100,429,149],{"class":140},[100,431,152],{"class":140},[100,433,434,436,439,441,443,446],{"class":102,"line":155},[100,435,158],{"class":140},[100,437,438],{"class":110},"per_page",[100,440,141],{"class":140},[100,442,149],{"class":140},[100,444,445],{"class":240}," 10",[100,447,175],{"class":140},[100,449,450],{"class":102,"line":178},[100,451,181],{"class":140},[86,453,454],{},"Number of comments loaded initially and per \"Load More\" click.",[126,456,46],{"id":457},"reactions",[90,459,461],{"className":132,"code":460,"language":107,"meta":95,"style":95},"'reactions' => [\n 'emoji_set' => [\n 'thumbs_up' => \"\\u{1F44D}\",\n 'heart' => \"\\u{2764}\\u{FE0F}\",\n 'celebrate' => \"\\u{1F389}\",\n 'laugh' => \"\\u{1F604}\",\n 'thinking' => \"\\u{1F914}\",\n 'sad' => \"\\u{1F622}\",\n ],\n],\n",[97,462,463,475,488,511,531,551,571,591,612,618],{"__ignoreMap":95},[100,464,465,467,469,471,473],{"class":102,"line":103},[100,466,141],{"class":140},[100,468,457],{"class":110},[100,470,141],{"class":140},[100,472,149],{"class":140},[100,474,152],{"class":140},[100,476,477,479,482,484,486],{"class":102,"line":155},[100,478,158],{"class":140},[100,480,481],{"class":110},"emoji_set",[100,483,141],{"class":140},[100,485,149],{"class":140},[100,487,152],{"class":140},[100,489,490,493,496,498,500,503,506,509],{"class":102,"line":178},[100,491,492],{"class":140}," '",[100,494,495],{"class":110},"thumbs_up",[100,497,141],{"class":140},[100,499,149],{"class":140},[100,501,502],{"class":140}," \"",[100,504,505],{"class":222},"\\u{1F44D}",[100,507,508],{"class":140},"\"",[100,510,175],{"class":140},[100,512,513,515,518,520,522,524,527,529],{"class":102,"line":250},[100,514,492],{"class":140},[100,516,517],{"class":110},"heart",[100,519,141],{"class":140},[100,521,149],{"class":140},[100,523,502],{"class":140},[100,525,526],{"class":222},"\\u{2764}\\u{FE0F}",[100,528,508],{"class":140},[100,530,175],{"class":140},[100,532,533,535,538,540,542,544,547,549],{"class":102,"line":257},[100,534,492],{"class":140},[100,536,537],{"class":110},"celebrate",[100,539,141],{"class":140},[100,541,149],{"class":140},[100,543,502],{"class":140},[100,545,546],{"class":222},"\\u{1F389}",[100,548,508],{"class":140},[100,550,175],{"class":140},[100,552,553,555,558,560,562,564,567,569],{"class":102,"line":271},[100,554,492],{"class":140},[100,556,557],{"class":110},"laugh",[100,559,141],{"class":140},[100,561,149],{"class":140},[100,563,502],{"class":140},[100,565,566],{"class":222},"\\u{1F604}",[100,568,508],{"class":140},[100,570,175],{"class":140},[100,572,573,575,578,580,582,584,587,589],{"class":102,"line":303},[100,574,492],{"class":140},[100,576,577],{"class":110},"thinking",[100,579,141],{"class":140},[100,581,149],{"class":140},[100,583,502],{"class":140},[100,585,586],{"class":222},"\\u{1F914}",[100,588,508],{"class":140},[100,590,175],{"class":140},[100,592,594,596,599,601,603,605,608,610],{"class":102,"line":593},8,[100,595,492],{"class":140},[100,597,598],{"class":110},"sad",[100,600,141],{"class":140},[100,602,149],{"class":140},[100,604,502],{"class":140},[100,606,607],{"class":222},"\\u{1F622}",[100,609,508],{"class":140},[100,611,175],{"class":140},[100,613,615],{"class":102,"line":614},9,[100,616,617],{"class":140}," ],\n",[100,619,621],{"class":102,"line":620},10,[100,622,181],{"class":140},[86,624,625],{},"Customize the available emoji reactions. Keys are used as identifiers in the database, values are the displayed emoji characters.",[126,627,41],{"id":628},"mentions",[90,630,632],{"className":132,"code":631,"language":107,"meta":95,"style":95},"'mentions' => [\n 'resolver' => \\Relaticle\\Comments\\Mentions\\DefaultMentionResolver::class,\n 'max_results' => 5,\n],\n",[97,633,634,646,680,696],{"__ignoreMap":95},[100,635,636,638,640,642,644],{"class":102,"line":103},[100,637,141],{"class":140},[100,639,628],{"class":110},[100,641,141],{"class":140},[100,643,149],{"class":140},[100,645,152],{"class":140},[100,647,648,650,653,655,657,659,661,663,665,667,669,671,674,676,678],{"class":102,"line":155},[100,649,158],{"class":140},[100,651,652],{"class":110},"resolver",[100,654,141],{"class":140},[100,656,149],{"class":140},[100,658,219],{"class":140},[100,660,223],{"class":222},[100,662,226],{"class":140},[100,664,229],{"class":222},[100,666,226],{"class":140},[100,668,41],{"class":222},[100,670,226],{"class":140},[100,672,673],{"class":106},"DefaultMentionResolver",[100,675,237],{"class":140},[100,677,241],{"class":240},[100,679,175],{"class":140},[100,681,682,684,687,689,691,694],{"class":102,"line":178},[100,683,158],{"class":140},[100,685,686],{"class":110},"max_results",[100,688,141],{"class":140},[100,690,149],{"class":140},[100,692,693],{"class":240}," 5",[100,695,175],{"class":140},[100,697,698],{"class":102,"line":250},[100,699,181],{"class":140},[86,701,702,703,705],{},"The resolver handles searching for users during @mention autocomplete. See the ",[356,704,41],{"href":42}," page for creating a custom resolver.",[126,707,709],{"id":708},"editor-toolbar","Editor Toolbar",[90,711,713],{"className":132,"code":712,"language":107,"meta":95,"style":95},"'editor' => [\n 'toolbar' => [\n ['bold', 'italic', 'strike', 'link'],\n ['bulletList', 'orderedList'],\n ['codeBlock'],\n ],\n],\n",[97,714,715,728,741,783,805,818,822],{"__ignoreMap":95},[100,716,717,719,722,724,726],{"class":102,"line":103},[100,718,141],{"class":140},[100,720,721],{"class":110},"editor",[100,723,141],{"class":140},[100,725,149],{"class":140},[100,727,152],{"class":140},[100,729,730,732,735,737,739],{"class":102,"line":155},[100,731,158],{"class":140},[100,733,734],{"class":110},"toolbar",[100,736,141],{"class":140},[100,738,149],{"class":140},[100,740,152],{"class":140},[100,742,743,746,748,751,753,756,758,761,763,765,767,770,772,774,776,779,781],{"class":102,"line":178},[100,744,745],{"class":140}," [",[100,747,141],{"class":140},[100,749,750],{"class":110},"bold",[100,752,141],{"class":140},[100,754,755],{"class":140},",",[100,757,168],{"class":140},[100,759,760],{"class":110},"italic",[100,762,141],{"class":140},[100,764,755],{"class":140},[100,766,168],{"class":140},[100,768,769],{"class":110},"strike",[100,771,141],{"class":140},[100,773,755],{"class":140},[100,775,168],{"class":140},[100,777,778],{"class":110},"link",[100,780,141],{"class":140},[100,782,181],{"class":140},[100,784,785,787,789,792,794,796,798,801,803],{"class":102,"line":250},[100,786,745],{"class":140},[100,788,141],{"class":140},[100,790,791],{"class":110},"bulletList",[100,793,141],{"class":140},[100,795,755],{"class":140},[100,797,168],{"class":140},[100,799,800],{"class":110},"orderedList",[100,802,141],{"class":140},[100,804,181],{"class":140},[100,806,807,809,811,814,816],{"class":102,"line":257},[100,808,745],{"class":140},[100,810,141],{"class":140},[100,812,813],{"class":110},"codeBlock",[100,815,141],{"class":140},[100,817,181],{"class":140},[100,819,820],{"class":102,"line":271},[100,821,617],{"class":140},[100,823,824],{"class":102,"line":303},[100,825,181],{"class":140},[86,827,828],{},"Defines which formatting buttons appear in the comment editor. Groups create visual separators in the toolbar.",[126,830,56],{"id":831},"notifications",[90,833,835],{"className":132,"code":834,"language":107,"meta":95,"style":95},"'notifications' => [\n 'channels' => ['database'],\n 'enabled' => true,\n],\n",[97,836,837,849,872,886],{"__ignoreMap":95},[100,838,839,841,843,845,847],{"class":102,"line":103},[100,840,141],{"class":140},[100,842,831],{"class":110},[100,844,141],{"class":140},[100,846,149],{"class":140},[100,848,152],{"class":140},[100,850,851,853,856,858,860,863,865,868,870],{"class":102,"line":155},[100,852,158],{"class":140},[100,854,855],{"class":110},"channels",[100,857,141],{"class":140},[100,859,149],{"class":140},[100,861,862],{"class":140}," [",[100,864,141],{"class":140},[100,866,867],{"class":110},"database",[100,869,141],{"class":140},[100,871,181],{"class":140},[100,873,874,876,879,881,883],{"class":102,"line":178},[100,875,158],{"class":140},[100,877,878],{"class":110},"enabled",[100,880,141],{"class":140},[100,882,149],{"class":140},[100,884,885],{"class":140}," true,\n",[100,887,888],{"class":102,"line":250},[100,889,181],{"class":140},[86,891,892,893,896,897,899,900,903],{},"Add ",[97,894,895],{},"'mail'"," to the channels array to send email notifications. Set ",[97,898,878],{}," to ",[97,901,902],{},"false"," to disable all notifications.",[126,905,907],{"id":906},"subscriptions","Subscriptions",[90,909,911],{"className":132,"code":910,"language":107,"meta":95,"style":95},"'subscriptions' => [\n 'auto_subscribe' => true,\n],\n",[97,912,913,925,938],{"__ignoreMap":95},[100,914,915,917,919,921,923],{"class":102,"line":103},[100,916,141],{"class":140},[100,918,906],{"class":110},[100,920,141],{"class":140},[100,922,149],{"class":140},[100,924,152],{"class":140},[100,926,927,929,932,934,936],{"class":102,"line":155},[100,928,158],{"class":140},[100,930,931],{"class":110},"auto_subscribe",[100,933,141],{"class":140},[100,935,149],{"class":140},[100,937,885],{"class":140},[100,939,940],{"class":102,"line":178},[100,941,181],{"class":140},[86,943,944],{},"When enabled, users are automatically subscribed to a thread when they create a comment or are mentioned. They receive notifications for subsequent replies.",[126,946,51],{"id":947},"attachments",[90,949,951],{"className":132,"code":950,"language":107,"meta":95,"style":95},"'attachments' => [\n 'enabled' => true,\n 'disk' => 'public',\n 'max_size' => 10240, \u002F\u002F KB\n 'allowed_types' => [\n 'image\u002Fjpeg',\n 'image\u002Fpng',\n 'image\u002Fgif',\n 'image\u002Fwebp',\n 'application\u002Fpdf',\n 'text\u002Fplain',\n 'application\u002Fmsword',\n 'application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document',\n ],\n],\n",[97,952,953,965,977,997,1017,1030,1041,1052,1063,1074,1085,1097,1109,1121,1126],{"__ignoreMap":95},[100,954,955,957,959,961,963],{"class":102,"line":103},[100,956,141],{"class":140},[100,958,947],{"class":110},[100,960,141],{"class":140},[100,962,149],{"class":140},[100,964,152],{"class":140},[100,966,967,969,971,973,975],{"class":102,"line":155},[100,968,158],{"class":140},[100,970,878],{"class":110},[100,972,141],{"class":140},[100,974,149],{"class":140},[100,976,885],{"class":140},[100,978,979,981,984,986,988,990,993,995],{"class":102,"line":178},[100,980,158],{"class":140},[100,982,983],{"class":110},"disk",[100,985,141],{"class":140},[100,987,149],{"class":140},[100,989,168],{"class":140},[100,991,992],{"class":110},"public",[100,994,141],{"class":140},[100,996,175],{"class":140},[100,998,999,1001,1004,1006,1008,1011,1013],{"class":102,"line":250},[100,1000,158],{"class":140},[100,1002,1003],{"class":110},"max_size",[100,1005,141],{"class":140},[100,1007,149],{"class":140},[100,1009,1010],{"class":240}," 10240",[100,1012,755],{"class":140},[100,1014,1016],{"class":1015},"sHwdD"," \u002F\u002F KB\n",[100,1018,1019,1021,1024,1026,1028],{"class":102,"line":257},[100,1020,158],{"class":140},[100,1022,1023],{"class":110},"allowed_types",[100,1025,141],{"class":140},[100,1027,149],{"class":140},[100,1029,152],{"class":140},[100,1031,1032,1034,1037,1039],{"class":102,"line":271},[100,1033,492],{"class":140},[100,1035,1036],{"class":110},"image\u002Fjpeg",[100,1038,141],{"class":140},[100,1040,175],{"class":140},[100,1042,1043,1045,1048,1050],{"class":102,"line":303},[100,1044,492],{"class":140},[100,1046,1047],{"class":110},"image\u002Fpng",[100,1049,141],{"class":140},[100,1051,175],{"class":140},[100,1053,1054,1056,1059,1061],{"class":102,"line":593},[100,1055,492],{"class":140},[100,1057,1058],{"class":110},"image\u002Fgif",[100,1060,141],{"class":140},[100,1062,175],{"class":140},[100,1064,1065,1067,1070,1072],{"class":102,"line":614},[100,1066,492],{"class":140},[100,1068,1069],{"class":110},"image\u002Fwebp",[100,1071,141],{"class":140},[100,1073,175],{"class":140},[100,1075,1076,1078,1081,1083],{"class":102,"line":620},[100,1077,492],{"class":140},[100,1079,1080],{"class":110},"application\u002Fpdf",[100,1082,141],{"class":140},[100,1084,175],{"class":140},[100,1086,1088,1090,1093,1095],{"class":102,"line":1087},11,[100,1089,492],{"class":140},[100,1091,1092],{"class":110},"text\u002Fplain",[100,1094,141],{"class":140},[100,1096,175],{"class":140},[100,1098,1100,1102,1105,1107],{"class":102,"line":1099},12,[100,1101,492],{"class":140},[100,1103,1104],{"class":110},"application\u002Fmsword",[100,1106,141],{"class":140},[100,1108,175],{"class":140},[100,1110,1112,1114,1117,1119],{"class":102,"line":1111},13,[100,1113,492],{"class":140},[100,1115,1116],{"class":110},"application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document",[100,1118,141],{"class":140},[100,1120,175],{"class":140},[100,1122,1124],{"class":102,"line":1123},14,[100,1125,617],{"class":140},[100,1127,1129],{"class":102,"line":1128},15,[100,1130,181],{"class":140},[86,1132,1133,1134,899,1136,1138,1139,1141],{},"Controls file upload behavior. Set ",[97,1135,878],{},[97,1137,902],{}," to remove the attachment UI entirely. The ",[97,1140,1003],{}," is in kilobytes (default 10 MB).",[126,1143,1145],{"id":1144},"broadcasting","Broadcasting",[90,1147,1149],{"className":132,"code":1148,"language":107,"meta":95,"style":95},"'broadcasting' => [\n 'enabled' => false,\n 'channel_prefix' => 'comments',\n],\n",[97,1150,1151,1163,1176,1195],{"__ignoreMap":95},[100,1152,1153,1155,1157,1159,1161],{"class":102,"line":103},[100,1154,141],{"class":140},[100,1156,1144],{"class":110},[100,1158,141],{"class":140},[100,1160,149],{"class":140},[100,1162,152],{"class":140},[100,1164,1165,1167,1169,1171,1173],{"class":102,"line":155},[100,1166,158],{"class":140},[100,1168,878],{"class":110},[100,1170,141],{"class":140},[100,1172,149],{"class":140},[100,1174,1175],{"class":140}," false,\n",[100,1177,1178,1180,1183,1185,1187,1189,1191,1193],{"class":102,"line":178},[100,1179,158],{"class":140},[100,1181,1182],{"class":110},"channel_prefix",[100,1184,141],{"class":140},[100,1186,149],{"class":140},[100,1188,168],{"class":140},[100,1190,161],{"class":110},[100,1192,141],{"class":140},[100,1194,175],{"class":140},[100,1196,1197],{"class":102,"line":250},[100,1198,181],{"class":140},[86,1200,1201,1202,1205],{},"When enabled, comment events are broadcast on private channels using the format ",[97,1203,1204],{},"{prefix}.{commentable_type}.{commentable_id}",". Requires Laravel Echo and a broadcasting driver.",[126,1207,1209],{"id":1208},"polling","Polling",[90,1211,1213],{"className":132,"code":1212,"language":107,"meta":95,"style":95},"'polling' => [\n 'interval' => '10s',\n],\n",[97,1214,1215,1227,1247],{"__ignoreMap":95},[100,1216,1217,1219,1221,1223,1225],{"class":102,"line":103},[100,1218,141],{"class":140},[100,1220,1208],{"class":110},[100,1222,141],{"class":140},[100,1224,149],{"class":140},[100,1226,152],{"class":140},[100,1228,1229,1231,1234,1236,1238,1240,1243,1245],{"class":102,"line":155},[100,1230,158],{"class":140},[100,1232,1233],{"class":110},"interval",[100,1235,141],{"class":140},[100,1237,149],{"class":140},[100,1239,168],{"class":140},[100,1241,1242],{"class":110},"10s",[100,1244,141],{"class":140},[100,1246,175],{"class":140},[100,1248,1249],{"class":102,"line":178},[100,1250,181],{"class":140},[86,1252,1253,1254,1257],{},"When broadcasting is disabled, the Livewire component polls for new comments at this interval. Set to ",[97,1255,1256],{},"null"," to disable polling.",[126,1259,1261],{"id":1260},"custom-user-resolution","Custom User Resolution",[86,1263,1264],{},"Override how the authenticated user is resolved:",[90,1266,1268],{"className":132,"code":1267,"language":107,"meta":95,"style":95},"use Relaticle\\Comments\\Config;\n\n\u002F\u002F In AppServiceProvider::boot()\nConfig::resolveAuthenticatedUserUsing(function () {\n return auth()->user();\n});\n",[97,1269,1270,1290,1294,1299,1322,1340],{"__ignoreMap":95},[100,1271,1272,1275,1278,1280,1282,1284,1287],{"class":102,"line":103},[100,1273,1274],{"class":240},"use",[100,1276,1277],{"class":222}," Relaticle",[100,1279,226],{"class":140},[100,1281,229],{"class":222},[100,1283,226],{"class":140},[100,1285,1286],{"class":222},"Config",[100,1288,1289],{"class":140},";\n",[100,1291,1292],{"class":102,"line":155},[100,1293,254],{"emptyLinePlaceholder":253},[100,1295,1296],{"class":102,"line":178},[100,1297,1298],{"class":1015},"\u002F\u002F In AppServiceProvider::boot()\n",[100,1300,1301,1303,1305,1309,1312,1316,1319],{"class":102,"line":250},[100,1302,1286],{"class":106},[100,1304,237],{"class":140},[100,1306,1308],{"class":1307},"s2Zo4","resolveAuthenticatedUserUsing",[100,1310,1311],{"class":140},"(",[100,1313,1315],{"class":1314},"spNyl","function",[100,1317,1318],{"class":140}," ()",[100,1320,1321],{"class":140}," {\n",[100,1323,1324,1328,1331,1334,1337],{"class":102,"line":257},[100,1325,1327],{"class":1326},"s7zQu"," return",[100,1329,1330],{"class":1307}," auth",[100,1332,1333],{"class":140},"()->",[100,1335,1336],{"class":1307},"user",[100,1338,1339],{"class":140},"();\n",[100,1341,1342],{"class":102,"line":271},[100,1343,1344],{"class":140},"});\n",[86,1346,1347],{},"This is useful for multi-guard applications or custom authentication flows.",[1349,1350,1351],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":95,"searchDepth":155,"depth":155,"links":1353},[1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367],{"id":128,"depth":155,"text":129},{"id":187,"depth":155,"text":188},{"id":311,"depth":155,"text":312},{"id":361,"depth":155,"text":362},{"id":413,"depth":155,"text":414},{"id":457,"depth":155,"text":46},{"id":628,"depth":155,"text":41},{"id":708,"depth":155,"text":709},{"id":831,"depth":155,"text":56},{"id":906,"depth":155,"text":907},{"id":947,"depth":155,"text":51},{"id":1144,"depth":155,"text":1145},{"id":1208,"depth":155,"text":1209},{"id":1260,"depth":155,"text":1261},"Configure threading, reactions, mentions, attachments, notifications, and more.","md",null,{},{"icon":34},{"description":1374,"title":31},"Complete configuration reference for the Comments package.","TvFOm5T-P3dGPliy66VKV_R_c9hzHMsR26iqUAm-DLc",[1377,1379],{"title":21,"path":22,"stem":23,"description":1378,"icon":24,"children":-1},"Upgrade guide for Comments.",{"title":36,"path":37,"stem":38,"description":1380,"icon":39,"children":-1},"Control who can create, edit, delete, and reply to comments.",1774606188039] \ No newline at end of file +[{"data":1,"prerenderedAt":1381},["ShallowReactive",2],{"navigation_docs":3,"-essentials-configuration":80,"-essentials-configuration-surround":1376},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":31,"body":82,"description":1368,"extension":1369,"links":1370,"meta":1371,"navigation":1372,"path":32,"seo":1373,"stem":33,"__hash__":1375},"docs\u002F2.essentials\u002F1.configuration.md",{"type":83,"value":84,"toc":1352},"minimark",[85,89,118,125,130,182,185,189,306,309,313,352,359,363,400,411,415,452,455,458,623,626,629,700,706,710,826,829,832,890,904,908,942,945,948,1131,1142,1146,1199,1206,1210,1251,1258,1262,1265,1345,1348],[86,87,88],"p",{},"Publish the configuration file:",[90,91,96],"pre",{"className":92,"code":93,"language":94,"meta":95,"style":95},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","php artisan vendor:publish --tag=comments-config\n","bash","",[97,98,99],"code",{"__ignoreMap":95},[100,101,104,108,112,115],"span",{"class":102,"line":103},"line",1,[100,105,107],{"class":106},"sBMFI","php",[100,109,111],{"class":110},"sfazB"," artisan",[100,113,114],{"class":110}," vendor:publish",[100,116,117],{"class":110}," --tag=comments-config\n",[86,119,120,121,124],{},"This creates ",[97,122,123],{},"config\u002Fcomments.php"," with all available options.",[126,127,129],"h2",{"id":128},"table-name","Table Name",[90,131,134],{"className":132,"code":133,"language":107,"meta":95,"style":95},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","'tables' => [\n 'comments' => 'comments',\n],\n",[97,135,136,153,176],{"__ignoreMap":95},[100,137,138,142,145,147,150],{"class":102,"line":103},[100,139,141],{"class":140},"sMK4o","'",[100,143,144],{"class":110},"tables",[100,146,141],{"class":140},[100,148,149],{"class":140}," =>",[100,151,152],{"class":140}," [\n",[100,154,156,159,162,164,166,169,171,173],{"class":102,"line":155},2,[100,157,158],{"class":140}," '",[100,160,161],{"class":110},"comments",[100,163,141],{"class":140},[100,165,149],{"class":140},[100,167,168],{"class":140}," '",[100,170,161],{"class":110},[100,172,141],{"class":140},[100,174,175],{"class":140},",\n",[100,177,179],{"class":102,"line":178},3,[100,180,181],{"class":140},"],\n",[86,183,184],{},"Change the table name if it conflicts with your application.",[126,186,188],{"id":187},"models","Models",[90,190,192],{"className":132,"code":191,"language":107,"meta":95,"style":95},"'models' => [\n 'comment' => \\Relaticle\\Comments\\Comment::class,\n],\n\n'commenter' => [\n 'model' => \\App\\Models\\User::class,\n],\n",[97,193,194,206,244,248,255,269,301],{"__ignoreMap":95},[100,195,196,198,200,202,204],{"class":102,"line":103},[100,197,141],{"class":140},[100,199,187],{"class":110},[100,201,141],{"class":140},[100,203,149],{"class":140},[100,205,152],{"class":140},[100,207,208,210,213,215,217,220,224,227,230,232,235,238,242],{"class":102,"line":155},[100,209,158],{"class":140},[100,211,212],{"class":110},"comment",[100,214,141],{"class":140},[100,216,149],{"class":140},[100,218,219],{"class":140}," \\",[100,221,223],{"class":222},"sTEyZ","Relaticle",[100,225,226],{"class":140},"\\",[100,228,229],{"class":222},"Comments",[100,231,226],{"class":140},[100,233,234],{"class":106},"Comment",[100,236,237],{"class":140},"::",[100,239,241],{"class":240},"sbssI","class",[100,243,175],{"class":140},[100,245,246],{"class":102,"line":178},[100,247,181],{"class":140},[100,249,251],{"class":102,"line":250},4,[100,252,254],{"emptyLinePlaceholder":253},true,"\n",[100,256,258,260,263,265,267],{"class":102,"line":257},5,[100,259,141],{"class":140},[100,261,262],{"class":110},"commenter",[100,264,141],{"class":140},[100,266,149],{"class":140},[100,268,152],{"class":140},[100,270,272,274,277,279,281,283,286,288,290,292,295,297,299],{"class":102,"line":271},6,[100,273,158],{"class":140},[100,275,276],{"class":110},"model",[100,278,141],{"class":140},[100,280,149],{"class":140},[100,282,219],{"class":140},[100,284,285],{"class":222},"App",[100,287,226],{"class":140},[100,289,188],{"class":222},[100,291,226],{"class":140},[100,293,294],{"class":106},"User",[100,296,237],{"class":140},[100,298,241],{"class":240},[100,300,175],{"class":140},[100,302,304],{"class":102,"line":303},7,[100,305,181],{"class":140},[86,307,308],{},"Override the Comment model to add custom behavior. The commenter model defines which class represents the user who comments.",[126,310,312],{"id":311},"policy","Policy",[90,314,316],{"className":132,"code":315,"language":107,"meta":95,"style":95},"'policy' => \\Relaticle\\Comments\\Policies\\CommentPolicy::class,\n",[97,317,318],{"__ignoreMap":95},[100,319,320,322,324,326,328,330,332,334,336,338,341,343,346,348,350],{"class":102,"line":103},[100,321,141],{"class":140},[100,323,311],{"class":110},[100,325,141],{"class":140},[100,327,149],{"class":140},[100,329,219],{"class":140},[100,331,223],{"class":222},[100,333,226],{"class":140},[100,335,229],{"class":222},[100,337,226],{"class":140},[100,339,340],{"class":222},"Policies",[100,342,226],{"class":140},[100,344,345],{"class":106},"CommentPolicy",[100,347,237],{"class":140},[100,349,241],{"class":240},[100,351,175],{"class":140},[86,353,354,355,358],{},"See the ",[356,357,36],"a",{"href":37}," page for customization details.",[126,360,362],{"id":361},"threading","Threading",[90,364,366],{"className":132,"code":365,"language":107,"meta":95,"style":95},"'threading' => [\n 'max_depth' => 2,\n],\n",[97,367,368,380,396],{"__ignoreMap":95},[100,369,370,372,374,376,378],{"class":102,"line":103},[100,371,141],{"class":140},[100,373,361],{"class":110},[100,375,141],{"class":140},[100,377,149],{"class":140},[100,379,152],{"class":140},[100,381,382,384,387,389,391,394],{"class":102,"line":155},[100,383,158],{"class":140},[100,385,386],{"class":110},"max_depth",[100,388,141],{"class":140},[100,390,149],{"class":140},[100,392,393],{"class":240}," 2",[100,395,175],{"class":140},[100,397,398],{"class":102,"line":178},[100,399,181],{"class":140},[86,401,402,403,406,407,410],{},"Controls how many levels of nested replies are allowed. A depth of ",[97,404,405],{},"2"," means top-level comments and one level of replies. Set to ",[97,408,409],{},"1"," to disable replies entirely.",[126,412,414],{"id":413},"pagination","Pagination",[90,416,418],{"className":132,"code":417,"language":107,"meta":95,"style":95},"'pagination' => [\n 'per_page' => 10,\n],\n",[97,419,420,432,448],{"__ignoreMap":95},[100,421,422,424,426,428,430],{"class":102,"line":103},[100,423,141],{"class":140},[100,425,413],{"class":110},[100,427,141],{"class":140},[100,429,149],{"class":140},[100,431,152],{"class":140},[100,433,434,436,439,441,443,446],{"class":102,"line":155},[100,435,158],{"class":140},[100,437,438],{"class":110},"per_page",[100,440,141],{"class":140},[100,442,149],{"class":140},[100,444,445],{"class":240}," 10",[100,447,175],{"class":140},[100,449,450],{"class":102,"line":178},[100,451,181],{"class":140},[86,453,454],{},"Number of comments loaded initially and per \"Load More\" click.",[126,456,46],{"id":457},"reactions",[90,459,461],{"className":132,"code":460,"language":107,"meta":95,"style":95},"'reactions' => [\n 'emoji_set' => [\n 'thumbs_up' => \"\\u{1F44D}\",\n 'heart' => \"\\u{2764}\\u{FE0F}\",\n 'celebrate' => \"\\u{1F389}\",\n 'laugh' => \"\\u{1F604}\",\n 'thinking' => \"\\u{1F914}\",\n 'sad' => \"\\u{1F622}\",\n ],\n],\n",[97,462,463,475,488,511,531,551,571,591,612,618],{"__ignoreMap":95},[100,464,465,467,469,471,473],{"class":102,"line":103},[100,466,141],{"class":140},[100,468,457],{"class":110},[100,470,141],{"class":140},[100,472,149],{"class":140},[100,474,152],{"class":140},[100,476,477,479,482,484,486],{"class":102,"line":155},[100,478,158],{"class":140},[100,480,481],{"class":110},"emoji_set",[100,483,141],{"class":140},[100,485,149],{"class":140},[100,487,152],{"class":140},[100,489,490,493,496,498,500,503,506,509],{"class":102,"line":178},[100,491,492],{"class":140}," '",[100,494,495],{"class":110},"thumbs_up",[100,497,141],{"class":140},[100,499,149],{"class":140},[100,501,502],{"class":140}," \"",[100,504,505],{"class":222},"\\u{1F44D}",[100,507,508],{"class":140},"\"",[100,510,175],{"class":140},[100,512,513,515,518,520,522,524,527,529],{"class":102,"line":250},[100,514,492],{"class":140},[100,516,517],{"class":110},"heart",[100,519,141],{"class":140},[100,521,149],{"class":140},[100,523,502],{"class":140},[100,525,526],{"class":222},"\\u{2764}\\u{FE0F}",[100,528,508],{"class":140},[100,530,175],{"class":140},[100,532,533,535,538,540,542,544,547,549],{"class":102,"line":257},[100,534,492],{"class":140},[100,536,537],{"class":110},"celebrate",[100,539,141],{"class":140},[100,541,149],{"class":140},[100,543,502],{"class":140},[100,545,546],{"class":222},"\\u{1F389}",[100,548,508],{"class":140},[100,550,175],{"class":140},[100,552,553,555,558,560,562,564,567,569],{"class":102,"line":271},[100,554,492],{"class":140},[100,556,557],{"class":110},"laugh",[100,559,141],{"class":140},[100,561,149],{"class":140},[100,563,502],{"class":140},[100,565,566],{"class":222},"\\u{1F604}",[100,568,508],{"class":140},[100,570,175],{"class":140},[100,572,573,575,578,580,582,584,587,589],{"class":102,"line":303},[100,574,492],{"class":140},[100,576,577],{"class":110},"thinking",[100,579,141],{"class":140},[100,581,149],{"class":140},[100,583,502],{"class":140},[100,585,586],{"class":222},"\\u{1F914}",[100,588,508],{"class":140},[100,590,175],{"class":140},[100,592,594,596,599,601,603,605,608,610],{"class":102,"line":593},8,[100,595,492],{"class":140},[100,597,598],{"class":110},"sad",[100,600,141],{"class":140},[100,602,149],{"class":140},[100,604,502],{"class":140},[100,606,607],{"class":222},"\\u{1F622}",[100,609,508],{"class":140},[100,611,175],{"class":140},[100,613,615],{"class":102,"line":614},9,[100,616,617],{"class":140}," ],\n",[100,619,621],{"class":102,"line":620},10,[100,622,181],{"class":140},[86,624,625],{},"Customize the available emoji reactions. Keys are used as identifiers in the database, values are the displayed emoji characters.",[126,627,41],{"id":628},"mentions",[90,630,632],{"className":132,"code":631,"language":107,"meta":95,"style":95},"'mentions' => [\n 'resolver' => \\Relaticle\\Comments\\Mentions\\DefaultMentionResolver::class,\n 'max_results' => 5,\n],\n",[97,633,634,646,680,696],{"__ignoreMap":95},[100,635,636,638,640,642,644],{"class":102,"line":103},[100,637,141],{"class":140},[100,639,628],{"class":110},[100,641,141],{"class":140},[100,643,149],{"class":140},[100,645,152],{"class":140},[100,647,648,650,653,655,657,659,661,663,665,667,669,671,674,676,678],{"class":102,"line":155},[100,649,158],{"class":140},[100,651,652],{"class":110},"resolver",[100,654,141],{"class":140},[100,656,149],{"class":140},[100,658,219],{"class":140},[100,660,223],{"class":222},[100,662,226],{"class":140},[100,664,229],{"class":222},[100,666,226],{"class":140},[100,668,41],{"class":222},[100,670,226],{"class":140},[100,672,673],{"class":106},"DefaultMentionResolver",[100,675,237],{"class":140},[100,677,241],{"class":240},[100,679,175],{"class":140},[100,681,682,684,687,689,691,694],{"class":102,"line":178},[100,683,158],{"class":140},[100,685,686],{"class":110},"max_results",[100,688,141],{"class":140},[100,690,149],{"class":140},[100,692,693],{"class":240}," 5",[100,695,175],{"class":140},[100,697,698],{"class":102,"line":250},[100,699,181],{"class":140},[86,701,702,703,705],{},"The resolver handles searching for users during @mention autocomplete. See the ",[356,704,41],{"href":42}," page for creating a custom resolver.",[126,707,709],{"id":708},"editor-toolbar","Editor Toolbar",[90,711,713],{"className":132,"code":712,"language":107,"meta":95,"style":95},"'editor' => [\n 'toolbar' => [\n ['bold', 'italic', 'strike', 'link'],\n ['bulletList', 'orderedList'],\n ['codeBlock'],\n ],\n],\n",[97,714,715,728,741,783,805,818,822],{"__ignoreMap":95},[100,716,717,719,722,724,726],{"class":102,"line":103},[100,718,141],{"class":140},[100,720,721],{"class":110},"editor",[100,723,141],{"class":140},[100,725,149],{"class":140},[100,727,152],{"class":140},[100,729,730,732,735,737,739],{"class":102,"line":155},[100,731,158],{"class":140},[100,733,734],{"class":110},"toolbar",[100,736,141],{"class":140},[100,738,149],{"class":140},[100,740,152],{"class":140},[100,742,743,746,748,751,753,756,758,761,763,765,767,770,772,774,776,779,781],{"class":102,"line":178},[100,744,745],{"class":140}," [",[100,747,141],{"class":140},[100,749,750],{"class":110},"bold",[100,752,141],{"class":140},[100,754,755],{"class":140},",",[100,757,168],{"class":140},[100,759,760],{"class":110},"italic",[100,762,141],{"class":140},[100,764,755],{"class":140},[100,766,168],{"class":140},[100,768,769],{"class":110},"strike",[100,771,141],{"class":140},[100,773,755],{"class":140},[100,775,168],{"class":140},[100,777,778],{"class":110},"link",[100,780,141],{"class":140},[100,782,181],{"class":140},[100,784,785,787,789,792,794,796,798,801,803],{"class":102,"line":250},[100,786,745],{"class":140},[100,788,141],{"class":140},[100,790,791],{"class":110},"bulletList",[100,793,141],{"class":140},[100,795,755],{"class":140},[100,797,168],{"class":140},[100,799,800],{"class":110},"orderedList",[100,802,141],{"class":140},[100,804,181],{"class":140},[100,806,807,809,811,814,816],{"class":102,"line":257},[100,808,745],{"class":140},[100,810,141],{"class":140},[100,812,813],{"class":110},"codeBlock",[100,815,141],{"class":140},[100,817,181],{"class":140},[100,819,820],{"class":102,"line":271},[100,821,617],{"class":140},[100,823,824],{"class":102,"line":303},[100,825,181],{"class":140},[86,827,828],{},"Defines which formatting buttons appear in the comment editor. Groups create visual separators in the toolbar.",[126,830,56],{"id":831},"notifications",[90,833,835],{"className":132,"code":834,"language":107,"meta":95,"style":95},"'notifications' => [\n 'channels' => ['database'],\n 'enabled' => true,\n],\n",[97,836,837,849,872,886],{"__ignoreMap":95},[100,838,839,841,843,845,847],{"class":102,"line":103},[100,840,141],{"class":140},[100,842,831],{"class":110},[100,844,141],{"class":140},[100,846,149],{"class":140},[100,848,152],{"class":140},[100,850,851,853,856,858,860,863,865,868,870],{"class":102,"line":155},[100,852,158],{"class":140},[100,854,855],{"class":110},"channels",[100,857,141],{"class":140},[100,859,149],{"class":140},[100,861,862],{"class":140}," [",[100,864,141],{"class":140},[100,866,867],{"class":110},"database",[100,869,141],{"class":140},[100,871,181],{"class":140},[100,873,874,876,879,881,883],{"class":102,"line":178},[100,875,158],{"class":140},[100,877,878],{"class":110},"enabled",[100,880,141],{"class":140},[100,882,149],{"class":140},[100,884,885],{"class":140}," true,\n",[100,887,888],{"class":102,"line":250},[100,889,181],{"class":140},[86,891,892,893,896,897,899,900,903],{},"Add ",[97,894,895],{},"'mail'"," to the channels array to send email notifications. Set ",[97,898,878],{}," to ",[97,901,902],{},"false"," to disable all notifications.",[126,905,907],{"id":906},"subscriptions","Subscriptions",[90,909,911],{"className":132,"code":910,"language":107,"meta":95,"style":95},"'subscriptions' => [\n 'auto_subscribe' => true,\n],\n",[97,912,913,925,938],{"__ignoreMap":95},[100,914,915,917,919,921,923],{"class":102,"line":103},[100,916,141],{"class":140},[100,918,906],{"class":110},[100,920,141],{"class":140},[100,922,149],{"class":140},[100,924,152],{"class":140},[100,926,927,929,932,934,936],{"class":102,"line":155},[100,928,158],{"class":140},[100,930,931],{"class":110},"auto_subscribe",[100,933,141],{"class":140},[100,935,149],{"class":140},[100,937,885],{"class":140},[100,939,940],{"class":102,"line":178},[100,941,181],{"class":140},[86,943,944],{},"When enabled, users are automatically subscribed to a thread when they create a comment or are mentioned. They receive notifications for subsequent replies.",[126,946,51],{"id":947},"attachments",[90,949,951],{"className":132,"code":950,"language":107,"meta":95,"style":95},"'attachments' => [\n 'enabled' => true,\n 'disk' => 'public',\n 'max_size' => 10240, \u002F\u002F KB\n 'allowed_types' => [\n 'image\u002Fjpeg',\n 'image\u002Fpng',\n 'image\u002Fgif',\n 'image\u002Fwebp',\n 'application\u002Fpdf',\n 'text\u002Fplain',\n 'application\u002Fmsword',\n 'application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document',\n ],\n],\n",[97,952,953,965,977,997,1017,1030,1041,1052,1063,1074,1085,1097,1109,1121,1126],{"__ignoreMap":95},[100,954,955,957,959,961,963],{"class":102,"line":103},[100,956,141],{"class":140},[100,958,947],{"class":110},[100,960,141],{"class":140},[100,962,149],{"class":140},[100,964,152],{"class":140},[100,966,967,969,971,973,975],{"class":102,"line":155},[100,968,158],{"class":140},[100,970,878],{"class":110},[100,972,141],{"class":140},[100,974,149],{"class":140},[100,976,885],{"class":140},[100,978,979,981,984,986,988,990,993,995],{"class":102,"line":178},[100,980,158],{"class":140},[100,982,983],{"class":110},"disk",[100,985,141],{"class":140},[100,987,149],{"class":140},[100,989,168],{"class":140},[100,991,992],{"class":110},"public",[100,994,141],{"class":140},[100,996,175],{"class":140},[100,998,999,1001,1004,1006,1008,1011,1013],{"class":102,"line":250},[100,1000,158],{"class":140},[100,1002,1003],{"class":110},"max_size",[100,1005,141],{"class":140},[100,1007,149],{"class":140},[100,1009,1010],{"class":240}," 10240",[100,1012,755],{"class":140},[100,1014,1016],{"class":1015},"sHwdD"," \u002F\u002F KB\n",[100,1018,1019,1021,1024,1026,1028],{"class":102,"line":257},[100,1020,158],{"class":140},[100,1022,1023],{"class":110},"allowed_types",[100,1025,141],{"class":140},[100,1027,149],{"class":140},[100,1029,152],{"class":140},[100,1031,1032,1034,1037,1039],{"class":102,"line":271},[100,1033,492],{"class":140},[100,1035,1036],{"class":110},"image\u002Fjpeg",[100,1038,141],{"class":140},[100,1040,175],{"class":140},[100,1042,1043,1045,1048,1050],{"class":102,"line":303},[100,1044,492],{"class":140},[100,1046,1047],{"class":110},"image\u002Fpng",[100,1049,141],{"class":140},[100,1051,175],{"class":140},[100,1053,1054,1056,1059,1061],{"class":102,"line":593},[100,1055,492],{"class":140},[100,1057,1058],{"class":110},"image\u002Fgif",[100,1060,141],{"class":140},[100,1062,175],{"class":140},[100,1064,1065,1067,1070,1072],{"class":102,"line":614},[100,1066,492],{"class":140},[100,1068,1069],{"class":110},"image\u002Fwebp",[100,1071,141],{"class":140},[100,1073,175],{"class":140},[100,1075,1076,1078,1081,1083],{"class":102,"line":620},[100,1077,492],{"class":140},[100,1079,1080],{"class":110},"application\u002Fpdf",[100,1082,141],{"class":140},[100,1084,175],{"class":140},[100,1086,1088,1090,1093,1095],{"class":102,"line":1087},11,[100,1089,492],{"class":140},[100,1091,1092],{"class":110},"text\u002Fplain",[100,1094,141],{"class":140},[100,1096,175],{"class":140},[100,1098,1100,1102,1105,1107],{"class":102,"line":1099},12,[100,1101,492],{"class":140},[100,1103,1104],{"class":110},"application\u002Fmsword",[100,1106,141],{"class":140},[100,1108,175],{"class":140},[100,1110,1112,1114,1117,1119],{"class":102,"line":1111},13,[100,1113,492],{"class":140},[100,1115,1116],{"class":110},"application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document",[100,1118,141],{"class":140},[100,1120,175],{"class":140},[100,1122,1124],{"class":102,"line":1123},14,[100,1125,617],{"class":140},[100,1127,1129],{"class":102,"line":1128},15,[100,1130,181],{"class":140},[86,1132,1133,1134,899,1136,1138,1139,1141],{},"Controls file upload behavior. Set ",[97,1135,878],{},[97,1137,902],{}," to remove the attachment UI entirely. The ",[97,1140,1003],{}," is in kilobytes (default 10 MB).",[126,1143,1145],{"id":1144},"broadcasting","Broadcasting",[90,1147,1149],{"className":132,"code":1148,"language":107,"meta":95,"style":95},"'broadcasting' => [\n 'enabled' => false,\n 'channel_prefix' => 'comments',\n],\n",[97,1150,1151,1163,1176,1195],{"__ignoreMap":95},[100,1152,1153,1155,1157,1159,1161],{"class":102,"line":103},[100,1154,141],{"class":140},[100,1156,1144],{"class":110},[100,1158,141],{"class":140},[100,1160,149],{"class":140},[100,1162,152],{"class":140},[100,1164,1165,1167,1169,1171,1173],{"class":102,"line":155},[100,1166,158],{"class":140},[100,1168,878],{"class":110},[100,1170,141],{"class":140},[100,1172,149],{"class":140},[100,1174,1175],{"class":140}," false,\n",[100,1177,1178,1180,1183,1185,1187,1189,1191,1193],{"class":102,"line":178},[100,1179,158],{"class":140},[100,1181,1182],{"class":110},"channel_prefix",[100,1184,141],{"class":140},[100,1186,149],{"class":140},[100,1188,168],{"class":140},[100,1190,161],{"class":110},[100,1192,141],{"class":140},[100,1194,175],{"class":140},[100,1196,1197],{"class":102,"line":250},[100,1198,181],{"class":140},[86,1200,1201,1202,1205],{},"When enabled, comment events are broadcast on private channels using the format ",[97,1203,1204],{},"{prefix}.{commentable_type}.{commentable_id}",". Requires Laravel Echo and a broadcasting driver.",[126,1207,1209],{"id":1208},"polling","Polling",[90,1211,1213],{"className":132,"code":1212,"language":107,"meta":95,"style":95},"'polling' => [\n 'interval' => '10s',\n],\n",[97,1214,1215,1227,1247],{"__ignoreMap":95},[100,1216,1217,1219,1221,1223,1225],{"class":102,"line":103},[100,1218,141],{"class":140},[100,1220,1208],{"class":110},[100,1222,141],{"class":140},[100,1224,149],{"class":140},[100,1226,152],{"class":140},[100,1228,1229,1231,1234,1236,1238,1240,1243,1245],{"class":102,"line":155},[100,1230,158],{"class":140},[100,1232,1233],{"class":110},"interval",[100,1235,141],{"class":140},[100,1237,149],{"class":140},[100,1239,168],{"class":140},[100,1241,1242],{"class":110},"10s",[100,1244,141],{"class":140},[100,1246,175],{"class":140},[100,1248,1249],{"class":102,"line":178},[100,1250,181],{"class":140},[86,1252,1253,1254,1257],{},"When broadcasting is disabled, the Livewire component polls for new comments at this interval. Set to ",[97,1255,1256],{},"null"," to disable polling.",[126,1259,1261],{"id":1260},"custom-user-resolution","Custom User Resolution",[86,1263,1264],{},"Override how the authenticated user is resolved:",[90,1266,1268],{"className":132,"code":1267,"language":107,"meta":95,"style":95},"use Relaticle\\Comments\\Config;\n\n\u002F\u002F In AppServiceProvider::boot()\nConfig::resolveAuthenticatedUserUsing(function () {\n return auth()->user();\n});\n",[97,1269,1270,1290,1294,1299,1322,1340],{"__ignoreMap":95},[100,1271,1272,1275,1278,1280,1282,1284,1287],{"class":102,"line":103},[100,1273,1274],{"class":240},"use",[100,1276,1277],{"class":222}," Relaticle",[100,1279,226],{"class":140},[100,1281,229],{"class":222},[100,1283,226],{"class":140},[100,1285,1286],{"class":222},"Config",[100,1288,1289],{"class":140},";\n",[100,1291,1292],{"class":102,"line":155},[100,1293,254],{"emptyLinePlaceholder":253},[100,1295,1296],{"class":102,"line":178},[100,1297,1298],{"class":1015},"\u002F\u002F In AppServiceProvider::boot()\n",[100,1300,1301,1303,1305,1309,1312,1316,1319],{"class":102,"line":250},[100,1302,1286],{"class":106},[100,1304,237],{"class":140},[100,1306,1308],{"class":1307},"s2Zo4","resolveAuthenticatedUserUsing",[100,1310,1311],{"class":140},"(",[100,1313,1315],{"class":1314},"spNyl","function",[100,1317,1318],{"class":140}," ()",[100,1320,1321],{"class":140}," {\n",[100,1323,1324,1328,1331,1334,1337],{"class":102,"line":257},[100,1325,1327],{"class":1326},"s7zQu"," return",[100,1329,1330],{"class":1307}," auth",[100,1332,1333],{"class":140},"()->",[100,1335,1336],{"class":1307},"user",[100,1338,1339],{"class":140},"();\n",[100,1341,1342],{"class":102,"line":271},[100,1343,1344],{"class":140},"});\n",[86,1346,1347],{},"This is useful for multi-guard applications or custom authentication flows.",[1349,1350,1351],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":95,"searchDepth":155,"depth":155,"links":1353},[1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367],{"id":128,"depth":155,"text":129},{"id":187,"depth":155,"text":188},{"id":311,"depth":155,"text":312},{"id":361,"depth":155,"text":362},{"id":413,"depth":155,"text":414},{"id":457,"depth":155,"text":46},{"id":628,"depth":155,"text":41},{"id":708,"depth":155,"text":709},{"id":831,"depth":155,"text":56},{"id":906,"depth":155,"text":907},{"id":947,"depth":155,"text":51},{"id":1144,"depth":155,"text":1145},{"id":1208,"depth":155,"text":1209},{"id":1260,"depth":155,"text":1261},"Configure threading, reactions, mentions, attachments, notifications, and more.","md",null,{},{"icon":34},{"description":1374,"title":31},"Complete configuration reference for the Comments package.","TvFOm5T-P3dGPliy66VKV_R_c9hzHMsR26iqUAm-DLc",[1377,1379],{"title":21,"path":22,"stem":23,"description":1378,"icon":24,"children":-1},"Upgrade guide for Comments.",{"title":36,"path":37,"stem":38,"description":1380,"icon":39,"children":-1},"Control who can create, edit, delete, and reply to comments.",1774607133407] \ No newline at end of file diff --git a/essentials/database-schema.html b/essentials/database-schema.html index be1f565..d623964 100644 --- a/essentials/database-schema.html +++ b/essentials/database-schema.html @@ -94,7 +94,7 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Database Schema - Comments
Essentials

Database Schema

Tables, relationships, and indexes used by the Comments package.

Tables

Five tables are created by the package migrations.

comments

The main comments table with polymorphic relationships and threading support.

ColumnTypeDescription
idbigintPrimary key
commentable_typestringPolymorphic model type
commentable_idbigintPolymorphic model ID
user_typestringCommenter model type
user_idbigintCommenter model ID
parent_idbigint (nullable)Parent comment for replies
bodytextHTML comment content
edited_attimestamp (nullable)When the comment was last edited
deleted_attimestamp (nullable)Soft delete timestamp
created_attimestamp
updated_attimestamp

Indexes: (commentable_type, commentable_id, parent_id)

comment_reactions

Tracks emoji reactions per user per comment.

ColumnTypeDescription
idbigintPrimary key
comment_idbigintForeign key to comments
user_typestringReactor model type
user_idbigintReactor model ID
reactionstringReaction key (e.g., thumbs_up)
created_attimestamp

Unique constraint: (comment_id, user_id, user_type, reaction)

comment_mentions

Tracks @mentioned users per comment.

ColumnTypeDescription
idbigintPrimary key
comment_idbigintForeign key to comments
user_typestringMentioned user model type
user_idbigintMentioned user model ID
created_attimestamp

Unique constraint: (comment_id, user_id, user_type)

comment_subscriptions

Tracks which users are subscribed to comment threads on specific models.

ColumnTypeDescription
idbigintPrimary key
commentable_typestringSubscribed model type
commentable_idbigintSubscribed model ID
user_typestringSubscriber model type
user_idbigintSubscriber model ID
created_attimestamp

Unique constraint: (commentable_type, commentable_id, user_type, user_id)

comment_attachments

Stores file attachment metadata for comments.

ColumnTypeDescription
idbigintPrimary key
comment_idbigintForeign key to comments
file_pathstringPath on the storage disk
original_namestringOriginal uploaded filename
mime_typestringFile MIME type
sizebigintFile size in bytes
diskstringLaravel filesystem disk
created_attimestamp
updated_attimestamp

Relationships

Commentable Model (e.g., Project)
+}Database Schema - Comments
Essentials

Database Schema

Tables, relationships, and indexes used by the Comments package.

Tables

Five tables are created by the package migrations.

comments

The main comments table with polymorphic relationships and threading support.

ColumnTypeDescription
idbigintPrimary key
commentable_typestringPolymorphic model type
commentable_idbigintPolymorphic model ID
user_typestringCommenter model type
user_idbigintCommenter model ID
parent_idbigint (nullable)Parent comment for replies
bodytextHTML comment content
edited_attimestamp (nullable)When the comment was last edited
deleted_attimestamp (nullable)Soft delete timestamp
created_attimestamp
updated_attimestamp

Indexes: (commentable_type, commentable_id, parent_id)

comment_reactions

Tracks emoji reactions per user per comment.

ColumnTypeDescription
idbigintPrimary key
comment_idbigintForeign key to comments
user_typestringReactor model type
user_idbigintReactor model ID
reactionstringReaction key (e.g., thumbs_up)
created_attimestamp

Unique constraint: (comment_id, user_id, user_type, reaction)

comment_mentions

Tracks @mentioned users per comment.

ColumnTypeDescription
idbigintPrimary key
comment_idbigintForeign key to comments
user_typestringMentioned user model type
user_idbigintMentioned user model ID
created_attimestamp

Unique constraint: (comment_id, user_id, user_type)

comment_subscriptions

Tracks which users are subscribed to comment threads on specific models.

ColumnTypeDescription
idbigintPrimary key
commentable_typestringSubscribed model type
commentable_idbigintSubscribed model ID
user_typestringSubscriber model type
user_idbigintSubscriber model ID
created_attimestamp

Unique constraint: (commentable_type, commentable_id, user_type, user_id)

comment_attachments

Stores file attachment metadata for comments.

ColumnTypeDescription
idbigintPrimary key
comment_idbigintForeign key to comments
file_pathstringPath on the storage disk
original_namestringOriginal uploaded filename
mime_typestringFile MIME type
sizebigintFile size in bytes
diskstringLaravel filesystem disk
created_attimestamp
updated_attimestamp

Relationships

Commentable Model (e.g., Project)
   └── comments (morphMany)
         ├── user (morphTo → User)
         ├── parent (belongsTo → Comment)
@@ -102,4 +102,4 @@
         ├── reactions (hasMany → CommentReaction)
         ├── attachments (hasMany → CommentAttachment)
         └── mentions (morphToMany → User)
-

All relationships are polymorphic, allowing the same comment system to work across any number of models in your application.

Copyright © 2026
\ No newline at end of file +

All relationships are polymorphic, allowing the same comment system to work across any number of models in your application.

Copyright © 2026
\ No newline at end of file diff --git a/essentials/database-schema/_payload.json b/essentials/database-schema/_payload.json index 4abe4b9..89badec 100644 --- a/essentials/database-schema/_payload.json +++ b/essentials/database-schema/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":700},["ShallowReactive",2],{"navigation_docs":3,"-essentials-database-schema":80,"-essentials-database-schema-surround":695},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":61,"body":82,"description":687,"extension":688,"links":689,"meta":690,"navigation":691,"path":62,"seo":692,"stem":63,"__hash__":694},"docs\u002F2.essentials\u002F7.database-schema.md",{"type":83,"value":84,"toc":675},"minimark",[85,90,94,98,101,261,271,274,277,361,369,372,375,441,448,451,454,532,539,542,545,659,663,672],[86,87,89],"h2",{"id":88},"tables","Tables",[91,92,93],"p",{},"Five tables are created by the package migrations.",[95,96,97],"h3",{"id":97},"comments",[91,99,100],{},"The main comments table with polymorphic relationships and threading support.",[102,103,104,120],"table",{},[105,106,107],"thead",{},[108,109,110,114,117],"tr",{},[111,112,113],"th",{},"Column",[111,115,116],{},"Type",[111,118,119],{},"Description",[121,122,123,138,151,163,175,187,200,213,226,238,250],"tbody",{},[108,124,125,132,135],{},[126,127,128],"td",{},[129,130,131],"code",{},"id",[126,133,134],{},"bigint",[126,136,137],{},"Primary key",[108,139,140,145,148],{},[126,141,142],{},[129,143,144],{},"commentable_type",[126,146,147],{},"string",[126,149,150],{},"Polymorphic model type",[108,152,153,158,160],{},[126,154,155],{},[129,156,157],{},"commentable_id",[126,159,134],{},[126,161,162],{},"Polymorphic model ID",[108,164,165,170,172],{},[126,166,167],{},[129,168,169],{},"user_type",[126,171,147],{},[126,173,174],{},"Commenter model type",[108,176,177,182,184],{},[126,178,179],{},[129,180,181],{},"user_id",[126,183,134],{},[126,185,186],{},"Commenter model ID",[108,188,189,194,197],{},[126,190,191],{},[129,192,193],{},"parent_id",[126,195,196],{},"bigint (nullable)",[126,198,199],{},"Parent comment for replies",[108,201,202,207,210],{},[126,203,204],{},[129,205,206],{},"body",[126,208,209],{},"text",[126,211,212],{},"HTML comment content",[108,214,215,220,223],{},[126,216,217],{},[129,218,219],{},"edited_at",[126,221,222],{},"timestamp (nullable)",[126,224,225],{},"When the comment was last edited",[108,227,228,233,235],{},[126,229,230],{},[129,231,232],{},"deleted_at",[126,234,222],{},[126,236,237],{},"Soft delete timestamp",[108,239,240,245,248],{},[126,241,242],{},[129,243,244],{},"created_at",[126,246,247],{},"timestamp",[126,249],{},[108,251,252,257,259],{},[126,253,254],{},[129,255,256],{},"updated_at",[126,258,247],{},[126,260],{},[91,262,263,267,268],{},[264,265,266],"strong",{},"Indexes:"," ",[129,269,270],{},"(commentable_type, commentable_id, parent_id)",[95,272,273],{"id":273},"comment_reactions",[91,275,276],{},"Tracks emoji reactions per user per comment.",[102,278,279,289],{},[105,280,281],{},[108,282,283,285,287],{},[111,284,113],{},[111,286,116],{},[111,288,119],{},[121,290,291,301,313,324,335,351],{},[108,292,293,297,299],{},[126,294,295],{},[129,296,131],{},[126,298,134],{},[126,300,137],{},[108,302,303,308,310],{},[126,304,305],{},[129,306,307],{},"comment_id",[126,309,134],{},[126,311,312],{},"Foreign key to comments",[108,314,315,319,321],{},[126,316,317],{},[129,318,169],{},[126,320,147],{},[126,322,323],{},"Reactor model type",[108,325,326,330,332],{},[126,327,328],{},[129,329,181],{},[126,331,134],{},[126,333,334],{},"Reactor model ID",[108,336,337,342,344],{},[126,338,339],{},[129,340,341],{},"reaction",[126,343,147],{},[126,345,346,347,350],{},"Reaction key (e.g., ",[129,348,349],{},"thumbs_up",")",[108,352,353,357,359],{},[126,354,355],{},[129,356,244],{},[126,358,247],{},[126,360],{},[91,362,363,267,366],{},[264,364,365],{},"Unique constraint:",[129,367,368],{},"(comment_id, user_id, user_type, reaction)",[95,370,371],{"id":371},"comment_mentions",[91,373,374],{},"Tracks @mentioned users per comment.",[102,376,377,387],{},[105,378,379],{},[108,380,381,383,385],{},[111,382,113],{},[111,384,116],{},[111,386,119],{},[121,388,389,399,409,420,431],{},[108,390,391,395,397],{},[126,392,393],{},[129,394,131],{},[126,396,134],{},[126,398,137],{},[108,400,401,405,407],{},[126,402,403],{},[129,404,307],{},[126,406,134],{},[126,408,312],{},[108,410,411,415,417],{},[126,412,413],{},[129,414,169],{},[126,416,147],{},[126,418,419],{},"Mentioned user model type",[108,421,422,426,428],{},[126,423,424],{},[129,425,181],{},[126,427,134],{},[126,429,430],{},"Mentioned user model ID",[108,432,433,437,439],{},[126,434,435],{},[129,436,244],{},[126,438,247],{},[126,440],{},[91,442,443,267,445],{},[264,444,365],{},[129,446,447],{},"(comment_id, user_id, user_type)",[95,449,450],{"id":450},"comment_subscriptions",[91,452,453],{},"Tracks which users are subscribed to comment threads on specific models.",[102,455,456,466],{},[105,457,458],{},[108,459,460,462,464],{},[111,461,113],{},[111,463,116],{},[111,465,119],{},[121,467,468,478,489,500,511,522],{},[108,469,470,474,476],{},[126,471,472],{},[129,473,131],{},[126,475,134],{},[126,477,137],{},[108,479,480,484,486],{},[126,481,482],{},[129,483,144],{},[126,485,147],{},[126,487,488],{},"Subscribed model type",[108,490,491,495,497],{},[126,492,493],{},[129,494,157],{},[126,496,134],{},[126,498,499],{},"Subscribed model ID",[108,501,502,506,508],{},[126,503,504],{},[129,505,169],{},[126,507,147],{},[126,509,510],{},"Subscriber model type",[108,512,513,517,519],{},[126,514,515],{},[129,516,181],{},[126,518,134],{},[126,520,521],{},"Subscriber model ID",[108,523,524,528,530],{},[126,525,526],{},[129,527,244],{},[126,529,247],{},[126,531],{},[91,533,534,267,536],{},[264,535,365],{},[129,537,538],{},"(commentable_type, commentable_id, user_type, user_id)",[95,540,541],{"id":541},"comment_attachments",[91,543,544],{},"Stores file attachment metadata for comments.",[102,546,547,557],{},[105,548,549],{},[108,550,551,553,555],{},[111,552,113],{},[111,554,116],{},[111,556,119],{},[121,558,559,569,579,591,603,615,627,639,649],{},[108,560,561,565,567],{},[126,562,563],{},[129,564,131],{},[126,566,134],{},[126,568,137],{},[108,570,571,575,577],{},[126,572,573],{},[129,574,307],{},[126,576,134],{},[126,578,312],{},[108,580,581,586,588],{},[126,582,583],{},[129,584,585],{},"file_path",[126,587,147],{},[126,589,590],{},"Path on the storage disk",[108,592,593,598,600],{},[126,594,595],{},[129,596,597],{},"original_name",[126,599,147],{},[126,601,602],{},"Original uploaded filename",[108,604,605,610,612],{},[126,606,607],{},[129,608,609],{},"mime_type",[126,611,147],{},[126,613,614],{},"File MIME type",[108,616,617,622,624],{},[126,618,619],{},[129,620,621],{},"size",[126,623,134],{},[126,625,626],{},"File size in bytes",[108,628,629,634,636],{},[126,630,631],{},[129,632,633],{},"disk",[126,635,147],{},[126,637,638],{},"Laravel filesystem disk",[108,640,641,645,647],{},[126,642,643],{},[129,644,244],{},[126,646,247],{},[126,648],{},[108,650,651,655,657],{},[126,652,653],{},[129,654,256],{},[126,656,247],{},[126,658],{},[86,660,662],{"id":661},"relationships","Relationships",[664,665,669],"pre",{"className":666,"code":668,"language":209},[667],"language-text","Commentable Model (e.g., Project)\n └── comments (morphMany)\n ├── user (morphTo → User)\n ├── parent (belongsTo → Comment)\n ├── replies (hasMany → Comment)\n ├── reactions (hasMany → CommentReaction)\n ├── attachments (hasMany → CommentAttachment)\n └── mentions (morphToMany → User)\n",[129,670,668],{"__ignoreMap":671},"",[91,673,674],{},"All relationships are polymorphic, allowing the same comment system to work across any number of models in your application.",{"title":671,"searchDepth":676,"depth":676,"links":677},2,[678,686],{"id":88,"depth":676,"text":89,"children":679},[680,682,683,684,685],{"id":97,"depth":681,"text":97},3,{"id":273,"depth":681,"text":273},{"id":371,"depth":681,"text":371},{"id":450,"depth":681,"text":450},{"id":541,"depth":681,"text":541},{"id":661,"depth":676,"text":662},"Tables, relationships, and indexes used by the Comments package.","md",null,{},{"icon":64},{"description":693,"title":61},"Database schema reference for the Comments package.","Yte6rX8x8upsowLURd9q9HFQY5Q9t4nTMbfY0ErhnKY",[696,698],{"title":56,"path":57,"stem":58,"description":697,"icon":59,"children":-1},"Comment notifications, subscriptions, and real-time updates.",{"title":71,"path":72,"stem":73,"description":699,"icon":74,"children":-1},"How to contribute to Comments",1774606188039] \ No newline at end of file +[{"data":1,"prerenderedAt":700},["ShallowReactive",2],{"navigation_docs":3,"-essentials-database-schema":80,"-essentials-database-schema-surround":695},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":61,"body":82,"description":687,"extension":688,"links":689,"meta":690,"navigation":691,"path":62,"seo":692,"stem":63,"__hash__":694},"docs\u002F2.essentials\u002F7.database-schema.md",{"type":83,"value":84,"toc":675},"minimark",[85,90,94,98,101,261,271,274,277,361,369,372,375,441,448,451,454,532,539,542,545,659,663,672],[86,87,89],"h2",{"id":88},"tables","Tables",[91,92,93],"p",{},"Five tables are created by the package migrations.",[95,96,97],"h3",{"id":97},"comments",[91,99,100],{},"The main comments table with polymorphic relationships and threading support.",[102,103,104,120],"table",{},[105,106,107],"thead",{},[108,109,110,114,117],"tr",{},[111,112,113],"th",{},"Column",[111,115,116],{},"Type",[111,118,119],{},"Description",[121,122,123,138,151,163,175,187,200,213,226,238,250],"tbody",{},[108,124,125,132,135],{},[126,127,128],"td",{},[129,130,131],"code",{},"id",[126,133,134],{},"bigint",[126,136,137],{},"Primary key",[108,139,140,145,148],{},[126,141,142],{},[129,143,144],{},"commentable_type",[126,146,147],{},"string",[126,149,150],{},"Polymorphic model type",[108,152,153,158,160],{},[126,154,155],{},[129,156,157],{},"commentable_id",[126,159,134],{},[126,161,162],{},"Polymorphic model ID",[108,164,165,170,172],{},[126,166,167],{},[129,168,169],{},"user_type",[126,171,147],{},[126,173,174],{},"Commenter model type",[108,176,177,182,184],{},[126,178,179],{},[129,180,181],{},"user_id",[126,183,134],{},[126,185,186],{},"Commenter model ID",[108,188,189,194,197],{},[126,190,191],{},[129,192,193],{},"parent_id",[126,195,196],{},"bigint (nullable)",[126,198,199],{},"Parent comment for replies",[108,201,202,207,210],{},[126,203,204],{},[129,205,206],{},"body",[126,208,209],{},"text",[126,211,212],{},"HTML comment content",[108,214,215,220,223],{},[126,216,217],{},[129,218,219],{},"edited_at",[126,221,222],{},"timestamp (nullable)",[126,224,225],{},"When the comment was last edited",[108,227,228,233,235],{},[126,229,230],{},[129,231,232],{},"deleted_at",[126,234,222],{},[126,236,237],{},"Soft delete timestamp",[108,239,240,245,248],{},[126,241,242],{},[129,243,244],{},"created_at",[126,246,247],{},"timestamp",[126,249],{},[108,251,252,257,259],{},[126,253,254],{},[129,255,256],{},"updated_at",[126,258,247],{},[126,260],{},[91,262,263,267,268],{},[264,265,266],"strong",{},"Indexes:"," ",[129,269,270],{},"(commentable_type, commentable_id, parent_id)",[95,272,273],{"id":273},"comment_reactions",[91,275,276],{},"Tracks emoji reactions per user per comment.",[102,278,279,289],{},[105,280,281],{},[108,282,283,285,287],{},[111,284,113],{},[111,286,116],{},[111,288,119],{},[121,290,291,301,313,324,335,351],{},[108,292,293,297,299],{},[126,294,295],{},[129,296,131],{},[126,298,134],{},[126,300,137],{},[108,302,303,308,310],{},[126,304,305],{},[129,306,307],{},"comment_id",[126,309,134],{},[126,311,312],{},"Foreign key to comments",[108,314,315,319,321],{},[126,316,317],{},[129,318,169],{},[126,320,147],{},[126,322,323],{},"Reactor model type",[108,325,326,330,332],{},[126,327,328],{},[129,329,181],{},[126,331,134],{},[126,333,334],{},"Reactor model ID",[108,336,337,342,344],{},[126,338,339],{},[129,340,341],{},"reaction",[126,343,147],{},[126,345,346,347,350],{},"Reaction key (e.g., ",[129,348,349],{},"thumbs_up",")",[108,352,353,357,359],{},[126,354,355],{},[129,356,244],{},[126,358,247],{},[126,360],{},[91,362,363,267,366],{},[264,364,365],{},"Unique constraint:",[129,367,368],{},"(comment_id, user_id, user_type, reaction)",[95,370,371],{"id":371},"comment_mentions",[91,373,374],{},"Tracks @mentioned users per comment.",[102,376,377,387],{},[105,378,379],{},[108,380,381,383,385],{},[111,382,113],{},[111,384,116],{},[111,386,119],{},[121,388,389,399,409,420,431],{},[108,390,391,395,397],{},[126,392,393],{},[129,394,131],{},[126,396,134],{},[126,398,137],{},[108,400,401,405,407],{},[126,402,403],{},[129,404,307],{},[126,406,134],{},[126,408,312],{},[108,410,411,415,417],{},[126,412,413],{},[129,414,169],{},[126,416,147],{},[126,418,419],{},"Mentioned user model type",[108,421,422,426,428],{},[126,423,424],{},[129,425,181],{},[126,427,134],{},[126,429,430],{},"Mentioned user model ID",[108,432,433,437,439],{},[126,434,435],{},[129,436,244],{},[126,438,247],{},[126,440],{},[91,442,443,267,445],{},[264,444,365],{},[129,446,447],{},"(comment_id, user_id, user_type)",[95,449,450],{"id":450},"comment_subscriptions",[91,452,453],{},"Tracks which users are subscribed to comment threads on specific models.",[102,455,456,466],{},[105,457,458],{},[108,459,460,462,464],{},[111,461,113],{},[111,463,116],{},[111,465,119],{},[121,467,468,478,489,500,511,522],{},[108,469,470,474,476],{},[126,471,472],{},[129,473,131],{},[126,475,134],{},[126,477,137],{},[108,479,480,484,486],{},[126,481,482],{},[129,483,144],{},[126,485,147],{},[126,487,488],{},"Subscribed model type",[108,490,491,495,497],{},[126,492,493],{},[129,494,157],{},[126,496,134],{},[126,498,499],{},"Subscribed model ID",[108,501,502,506,508],{},[126,503,504],{},[129,505,169],{},[126,507,147],{},[126,509,510],{},"Subscriber model type",[108,512,513,517,519],{},[126,514,515],{},[129,516,181],{},[126,518,134],{},[126,520,521],{},"Subscriber model ID",[108,523,524,528,530],{},[126,525,526],{},[129,527,244],{},[126,529,247],{},[126,531],{},[91,533,534,267,536],{},[264,535,365],{},[129,537,538],{},"(commentable_type, commentable_id, user_type, user_id)",[95,540,541],{"id":541},"comment_attachments",[91,543,544],{},"Stores file attachment metadata for comments.",[102,546,547,557],{},[105,548,549],{},[108,550,551,553,555],{},[111,552,113],{},[111,554,116],{},[111,556,119],{},[121,558,559,569,579,591,603,615,627,639,649],{},[108,560,561,565,567],{},[126,562,563],{},[129,564,131],{},[126,566,134],{},[126,568,137],{},[108,570,571,575,577],{},[126,572,573],{},[129,574,307],{},[126,576,134],{},[126,578,312],{},[108,580,581,586,588],{},[126,582,583],{},[129,584,585],{},"file_path",[126,587,147],{},[126,589,590],{},"Path on the storage disk",[108,592,593,598,600],{},[126,594,595],{},[129,596,597],{},"original_name",[126,599,147],{},[126,601,602],{},"Original uploaded filename",[108,604,605,610,612],{},[126,606,607],{},[129,608,609],{},"mime_type",[126,611,147],{},[126,613,614],{},"File MIME type",[108,616,617,622,624],{},[126,618,619],{},[129,620,621],{},"size",[126,623,134],{},[126,625,626],{},"File size in bytes",[108,628,629,634,636],{},[126,630,631],{},[129,632,633],{},"disk",[126,635,147],{},[126,637,638],{},"Laravel filesystem disk",[108,640,641,645,647],{},[126,642,643],{},[129,644,244],{},[126,646,247],{},[126,648],{},[108,650,651,655,657],{},[126,652,653],{},[129,654,256],{},[126,656,247],{},[126,658],{},[86,660,662],{"id":661},"relationships","Relationships",[664,665,669],"pre",{"className":666,"code":668,"language":209},[667],"language-text","Commentable Model (e.g., Project)\n └── comments (morphMany)\n ├── user (morphTo → User)\n ├── parent (belongsTo → Comment)\n ├── replies (hasMany → Comment)\n ├── reactions (hasMany → CommentReaction)\n ├── attachments (hasMany → CommentAttachment)\n └── mentions (morphToMany → User)\n",[129,670,668],{"__ignoreMap":671},"",[91,673,674],{},"All relationships are polymorphic, allowing the same comment system to work across any number of models in your application.",{"title":671,"searchDepth":676,"depth":676,"links":677},2,[678,686],{"id":88,"depth":676,"text":89,"children":679},[680,682,683,684,685],{"id":97,"depth":681,"text":97},3,{"id":273,"depth":681,"text":273},{"id":371,"depth":681,"text":371},{"id":450,"depth":681,"text":450},{"id":541,"depth":681,"text":541},{"id":661,"depth":676,"text":662},"Tables, relationships, and indexes used by the Comments package.","md",null,{},{"icon":64},{"description":693,"title":61},"Database schema reference for the Comments package.","Yte6rX8x8upsowLURd9q9HFQY5Q9t4nTMbfY0ErhnKY",[696,698],{"title":56,"path":57,"stem":58,"description":697,"icon":59,"children":-1},"Comment notifications, subscriptions, and real-time updates.",{"title":71,"path":72,"stem":73,"description":699,"icon":74,"children":-1},"How to contribute to Comments",1774607133407] \ No newline at end of file diff --git a/essentials/mentions.html b/essentials/mentions.html index 60d18e0..7335eb0 100644 --- a/essentials/mentions.html +++ b/essentials/mentions.html @@ -94,7 +94,7 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Mentions - Comments
Essentials

Mentions

User @mentions with autocomplete and notification support.

How Mentions Work

Type @ in the comment editor to trigger user autocomplete. Select a user to insert a mention. When the comment is saved, the MentionParser extracts mentions and:

  1. Syncs mention records in the comment_mentions table
  2. Dispatches a UserMentioned event for each newly mentioned user
  3. The SendUserMentionedNotification listener sends notifications
  4. If auto-subscribe is enabled, mentioned users are subscribed to the thread

Default Resolver

The DefaultMentionResolver searches the commenter model by name:

// Searches: User::where('name', 'like', "{$query}%")
+}Mentions - Comments
Essentials

Mentions

User @mentions with autocomplete and notification support.

How Mentions Work

Type @ in the comment editor to trigger user autocomplete. Select a user to insert a mention. When the comment is saved, the MentionParser extracts mentions and:

  1. Syncs mention records in the comment_mentions table
  2. Dispatches a UserMentioned event for each newly mentioned user
  3. The SendUserMentionedNotification listener sends notifications
  4. If auto-subscribe is enabled, mentioned users are subscribed to the thread

Default Resolver

The DefaultMentionResolver searches the commenter model by name:

// Searches: User::where('name', 'like', "{$query}%")
 // Limited to: config('comments.mentions.max_results') results
 

Custom Mention Resolver

Implement the MentionResolver interface to customize user search behavior:

namespace App\Comments;
 
@@ -125,4 +125,4 @@
     'resolver' => App\Comments\TeamMentionResolver::class,
     'max_results' => 5,
 ],
-

Configuration

KeyDefaultDescription
mentions.resolverDefaultMentionResolver::classUser search implementation
mentions.max_results5Maximum autocomplete results
Copyright © 2026
\ No newline at end of file +

Configuration

KeyDefaultDescription
mentions.resolverDefaultMentionResolver::classUser search implementation
mentions.max_results5Maximum autocomplete results
Copyright © 2026
\ No newline at end of file diff --git a/essentials/mentions/_payload.json b/essentials/mentions/_payload.json index 479a489..2b7cdc3 100644 --- a/essentials/mentions/_payload.json +++ b/essentials/mentions/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":737},["ShallowReactive",2],{"navigation_docs":3,"-essentials-mentions":80,"-essentials-mentions-surround":732},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":41,"body":82,"description":724,"extension":725,"links":726,"meta":727,"navigation":728,"path":42,"seo":729,"stem":43,"__hash__":731},"docs\u002F2.essentials\u002F3.mentions.md",{"type":83,"value":84,"toc":718},"minimark",[85,90,103,131,135,141,165,169,176,579,582,658,661,714],[86,87,89],"h2",{"id":88},"how-mentions-work","How Mentions Work",[91,92,93,94,98,99,102],"p",{},"Type ",[95,96,97],"code",{},"@"," in the comment editor to trigger user autocomplete. Select a user to insert a mention. When the comment is saved, the ",[95,100,101],{},"MentionParser"," extracts mentions and:",[104,105,106,114,121,128],"ol",{},[107,108,109,110,113],"li",{},"Syncs mention records in the ",[95,111,112],{},"comment_mentions"," table",[107,115,116,117,120],{},"Dispatches a ",[95,118,119],{},"UserMentioned"," event for each newly mentioned user",[107,122,123,124,127],{},"The ",[95,125,126],{},"SendUserMentionedNotification"," listener sends notifications",[107,129,130],{},"If auto-subscribe is enabled, mentioned users are subscribed to the thread",[86,132,134],{"id":133},"default-resolver","Default Resolver",[91,136,123,137,140],{},[95,138,139],{},"DefaultMentionResolver"," searches the commenter model by name:",[142,143,148],"pre",{"className":144,"code":145,"language":146,"meta":147,"style":147},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Searches: User::where('name', 'like', \"{$query}%\")\n\u002F\u002F Limited to: config('comments.mentions.max_results') results\n","php","",[95,149,150,159],{"__ignoreMap":147},[151,152,155],"span",{"class":153,"line":154},"line",1,[151,156,158],{"class":157},"sHwdD","\u002F\u002F Searches: User::where('name', 'like', \"{$query}%\")\n",[151,160,162],{"class":153,"line":161},2,[151,163,164],{"class":157},"\u002F\u002F Limited to: config('comments.mentions.max_results') results\n",[86,166,168],{"id":167},"custom-mention-resolver","Custom Mention Resolver",[91,170,171,172,175],{},"Implement the ",[95,173,174],{},"MentionResolver"," interface to customize user search behavior:",[142,177,179],{"className":144,"code":178,"language":146,"meta":147,"style":147},"namespace App\\Comments;\n\nuse Illuminate\\Support\\Collection;\nuse Relaticle\\Comments\\Contracts\\MentionResolver;\n\nclass TeamMentionResolver implements MentionResolver\n{\n public function search(string $query): Collection\n {\n return User::query()\n ->where('team_id', auth()->user()->team_id)\n ->where('name', 'like', \"{$query}%\")\n ->limit(config('comments.mentions.max_results'))\n ->get();\n }\n\n public function resolveByNames(array $names): Collection\n {\n return User::query()\n ->where('team_id', auth()->user()->team_id)\n ->whereIn('name', $names)\n ->get();\n }\n}\n",[95,180,181,201,207,229,252,257,273,279,310,316,334,373,417,442,453,459,464,488,493,506,535,559,568,573],{"__ignoreMap":147},[151,182,183,187,191,195,198],{"class":153,"line":154},[151,184,186],{"class":185},"sbssI","namespace",[151,188,190],{"class":189},"sBMFI"," App",[151,192,194],{"class":193},"sMK4o","\\",[151,196,197],{"class":189},"Comments",[151,199,200],{"class":193},";\n",[151,202,203],{"class":153,"line":161},[151,204,206],{"emptyLinePlaceholder":205},true,"\n",[151,208,210,213,217,219,222,224,227],{"class":153,"line":209},3,[151,211,212],{"class":185},"use",[151,214,216],{"class":215},"sTEyZ"," Illuminate",[151,218,194],{"class":193},[151,220,221],{"class":215},"Support",[151,223,194],{"class":193},[151,225,226],{"class":215},"Collection",[151,228,200],{"class":193},[151,230,232,234,237,239,241,243,246,248,250],{"class":153,"line":231},4,[151,233,212],{"class":185},[151,235,236],{"class":215}," Relaticle",[151,238,194],{"class":193},[151,240,197],{"class":215},[151,242,194],{"class":193},[151,244,245],{"class":215},"Contracts",[151,247,194],{"class":193},[151,249,174],{"class":215},[151,251,200],{"class":193},[151,253,255],{"class":153,"line":254},5,[151,256,206],{"emptyLinePlaceholder":205},[151,258,260,264,267,270],{"class":153,"line":259},6,[151,261,263],{"class":262},"spNyl","class",[151,265,266],{"class":189}," TeamMentionResolver",[151,268,269],{"class":262}," implements",[151,271,272],{"class":189}," MentionResolver\n",[151,274,276],{"class":153,"line":275},7,[151,277,278],{"class":193},"{\n",[151,280,282,285,288,292,295,298,301,304,307],{"class":153,"line":281},8,[151,283,284],{"class":262}," public",[151,286,287],{"class":262}," function",[151,289,291],{"class":290},"s2Zo4"," search",[151,293,294],{"class":193},"(",[151,296,297],{"class":185},"string",[151,299,300],{"class":193}," $",[151,302,303],{"class":215},"query",[151,305,306],{"class":193},"):",[151,308,309],{"class":189}," Collection\n",[151,311,313],{"class":153,"line":312},9,[151,314,315],{"class":193}," {\n",[151,317,319,323,326,329,331],{"class":153,"line":318},10,[151,320,322],{"class":321},"s7zQu"," return",[151,324,325],{"class":189}," User",[151,327,328],{"class":193},"::",[151,330,303],{"class":290},[151,332,333],{"class":193},"()\n",[151,335,337,340,343,345,348,352,354,357,360,363,366,368,370],{"class":153,"line":336},11,[151,338,339],{"class":193}," ->",[151,341,342],{"class":290},"where",[151,344,294],{"class":193},[151,346,347],{"class":193},"'",[151,349,351],{"class":350},"sfazB","team_id",[151,353,347],{"class":193},[151,355,356],{"class":193},",",[151,358,359],{"class":290}," auth",[151,361,362],{"class":193},"()->",[151,364,365],{"class":290},"user",[151,367,362],{"class":193},[151,369,351],{"class":215},[151,371,372],{"class":193},")\n",[151,374,376,378,380,382,384,387,389,391,394,397,399,401,404,406,409,412,415],{"class":153,"line":375},12,[151,377,339],{"class":193},[151,379,342],{"class":290},[151,381,294],{"class":193},[151,383,347],{"class":193},[151,385,386],{"class":350},"name",[151,388,347],{"class":193},[151,390,356],{"class":193},[151,392,393],{"class":193}," '",[151,395,396],{"class":350},"like",[151,398,347],{"class":193},[151,400,356],{"class":193},[151,402,403],{"class":193}," \"{$",[151,405,303],{"class":215},[151,407,408],{"class":193},"}",[151,410,411],{"class":350},"%",[151,413,414],{"class":193},"\"",[151,416,372],{"class":193},[151,418,420,422,425,427,430,432,434,437,439],{"class":153,"line":419},13,[151,421,339],{"class":193},[151,423,424],{"class":290},"limit",[151,426,294],{"class":193},[151,428,429],{"class":290},"config",[151,431,294],{"class":193},[151,433,347],{"class":193},[151,435,436],{"class":350},"comments.mentions.max_results",[151,438,347],{"class":193},[151,440,441],{"class":193},"))\n",[151,443,445,447,450],{"class":153,"line":444},14,[151,446,339],{"class":193},[151,448,449],{"class":290},"get",[151,451,452],{"class":193},"();\n",[151,454,456],{"class":153,"line":455},15,[151,457,458],{"class":193}," }\n",[151,460,462],{"class":153,"line":461},16,[151,463,206],{"emptyLinePlaceholder":205},[151,465,467,469,471,474,476,479,481,484,486],{"class":153,"line":466},17,[151,468,284],{"class":262},[151,470,287],{"class":262},[151,472,473],{"class":290}," resolveByNames",[151,475,294],{"class":193},[151,477,478],{"class":185},"array",[151,480,300],{"class":193},[151,482,483],{"class":215},"names",[151,485,306],{"class":193},[151,487,309],{"class":189},[151,489,491],{"class":153,"line":490},18,[151,492,315],{"class":193},[151,494,496,498,500,502,504],{"class":153,"line":495},19,[151,497,322],{"class":321},[151,499,325],{"class":189},[151,501,328],{"class":193},[151,503,303],{"class":290},[151,505,333],{"class":193},[151,507,509,511,513,515,517,519,521,523,525,527,529,531,533],{"class":153,"line":508},20,[151,510,339],{"class":193},[151,512,342],{"class":290},[151,514,294],{"class":193},[151,516,347],{"class":193},[151,518,351],{"class":350},[151,520,347],{"class":193},[151,522,356],{"class":193},[151,524,359],{"class":290},[151,526,362],{"class":193},[151,528,365],{"class":290},[151,530,362],{"class":193},[151,532,351],{"class":215},[151,534,372],{"class":193},[151,536,538,540,543,545,547,549,551,553,555,557],{"class":153,"line":537},21,[151,539,339],{"class":193},[151,541,542],{"class":290},"whereIn",[151,544,294],{"class":193},[151,546,347],{"class":193},[151,548,386],{"class":350},[151,550,347],{"class":193},[151,552,356],{"class":193},[151,554,300],{"class":193},[151,556,483],{"class":215},[151,558,372],{"class":193},[151,560,562,564,566],{"class":153,"line":561},22,[151,563,339],{"class":193},[151,565,449],{"class":290},[151,567,452],{"class":193},[151,569,571],{"class":153,"line":570},23,[151,572,458],{"class":193},[151,574,576],{"class":153,"line":575},24,[151,577,578],{"class":193},"}\n",[91,580,581],{},"Register it in your config:",[142,583,585],{"className":144,"code":584,"language":146,"meta":147,"style":147},"\u002F\u002F config\u002Fcomments.php\n'mentions' => [\n 'resolver' => App\\Comments\\TeamMentionResolver::class,\n 'max_results' => 5,\n],\n",[95,586,587,592,607,637,653],{"__ignoreMap":147},[151,588,589],{"class":153,"line":154},[151,590,591],{"class":157},"\u002F\u002F config\u002Fcomments.php\n",[151,593,594,596,599,601,604],{"class":153,"line":161},[151,595,347],{"class":193},[151,597,598],{"class":350},"mentions",[151,600,347],{"class":193},[151,602,603],{"class":193}," =>",[151,605,606],{"class":193}," [\n",[151,608,609,612,615,617,619,621,623,625,627,630,632,634],{"class":153,"line":209},[151,610,611],{"class":193}," '",[151,613,614],{"class":350},"resolver",[151,616,347],{"class":193},[151,618,603],{"class":193},[151,620,190],{"class":215},[151,622,194],{"class":193},[151,624,197],{"class":215},[151,626,194],{"class":193},[151,628,629],{"class":189},"TeamMentionResolver",[151,631,328],{"class":193},[151,633,263],{"class":185},[151,635,636],{"class":193},",\n",[151,638,639,641,644,646,648,651],{"class":153,"line":231},[151,640,611],{"class":193},[151,642,643],{"class":350},"max_results",[151,645,347],{"class":193},[151,647,603],{"class":193},[151,649,650],{"class":185}," 5",[151,652,636],{"class":193},[151,654,655],{"class":153,"line":254},[151,656,657],{"class":193},"],\n",[86,659,31],{"id":660},"configuration",[662,663,664,680],"table",{},[665,666,667],"thead",{},[668,669,670,674,677],"tr",{},[671,672,673],"th",{},"Key",[671,675,676],{},"Default",[671,678,679],{},"Description",[681,682,683,699],"tbody",{},[668,684,685,691,696],{},[686,687,688],"td",{},[95,689,690],{},"mentions.resolver",[686,692,693],{},[95,694,695],{},"DefaultMentionResolver::class",[686,697,698],{},"User search implementation",[668,700,701,706,711],{},[686,702,703],{},[95,704,705],{},"mentions.max_results",[686,707,708],{},[95,709,710],{},"5",[686,712,713],{},"Maximum autocomplete results",[715,716,717],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":147,"searchDepth":161,"depth":161,"links":719},[720,721,722,723],{"id":88,"depth":161,"text":89},{"id":133,"depth":161,"text":134},{"id":167,"depth":161,"text":168},{"id":660,"depth":161,"text":31},"User @mentions with autocomplete and notification support.","md",null,{},{"icon":44},{"description":730,"title":41},"Configure @mention autocomplete and create custom mention resolvers.","kQQwvRy9HYB1t8O3MnVh58m8bi_XmvTWpYWrdhjepK8",[733,735],{"title":36,"path":37,"stem":38,"description":734,"icon":39,"children":-1},"Control who can create, edit, delete, and reply to comments.",{"title":46,"path":47,"stem":48,"description":736,"icon":49,"children":-1},"Emoji reactions on comments.",1774606188039] \ No newline at end of file +[{"data":1,"prerenderedAt":737},["ShallowReactive",2],{"navigation_docs":3,"-essentials-mentions":80,"-essentials-mentions-surround":732},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":41,"body":82,"description":724,"extension":725,"links":726,"meta":727,"navigation":728,"path":42,"seo":729,"stem":43,"__hash__":731},"docs\u002F2.essentials\u002F3.mentions.md",{"type":83,"value":84,"toc":718},"minimark",[85,90,103,131,135,141,165,169,176,579,582,658,661,714],[86,87,89],"h2",{"id":88},"how-mentions-work","How Mentions Work",[91,92,93,94,98,99,102],"p",{},"Type ",[95,96,97],"code",{},"@"," in the comment editor to trigger user autocomplete. Select a user to insert a mention. When the comment is saved, the ",[95,100,101],{},"MentionParser"," extracts mentions and:",[104,105,106,114,121,128],"ol",{},[107,108,109,110,113],"li",{},"Syncs mention records in the ",[95,111,112],{},"comment_mentions"," table",[107,115,116,117,120],{},"Dispatches a ",[95,118,119],{},"UserMentioned"," event for each newly mentioned user",[107,122,123,124,127],{},"The ",[95,125,126],{},"SendUserMentionedNotification"," listener sends notifications",[107,129,130],{},"If auto-subscribe is enabled, mentioned users are subscribed to the thread",[86,132,134],{"id":133},"default-resolver","Default Resolver",[91,136,123,137,140],{},[95,138,139],{},"DefaultMentionResolver"," searches the commenter model by name:",[142,143,148],"pre",{"className":144,"code":145,"language":146,"meta":147,"style":147},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Searches: User::where('name', 'like', \"{$query}%\")\n\u002F\u002F Limited to: config('comments.mentions.max_results') results\n","php","",[95,149,150,159],{"__ignoreMap":147},[151,152,155],"span",{"class":153,"line":154},"line",1,[151,156,158],{"class":157},"sHwdD","\u002F\u002F Searches: User::where('name', 'like', \"{$query}%\")\n",[151,160,162],{"class":153,"line":161},2,[151,163,164],{"class":157},"\u002F\u002F Limited to: config('comments.mentions.max_results') results\n",[86,166,168],{"id":167},"custom-mention-resolver","Custom Mention Resolver",[91,170,171,172,175],{},"Implement the ",[95,173,174],{},"MentionResolver"," interface to customize user search behavior:",[142,177,179],{"className":144,"code":178,"language":146,"meta":147,"style":147},"namespace App\\Comments;\n\nuse Illuminate\\Support\\Collection;\nuse Relaticle\\Comments\\Contracts\\MentionResolver;\n\nclass TeamMentionResolver implements MentionResolver\n{\n public function search(string $query): Collection\n {\n return User::query()\n ->where('team_id', auth()->user()->team_id)\n ->where('name', 'like', \"{$query}%\")\n ->limit(config('comments.mentions.max_results'))\n ->get();\n }\n\n public function resolveByNames(array $names): Collection\n {\n return User::query()\n ->where('team_id', auth()->user()->team_id)\n ->whereIn('name', $names)\n ->get();\n }\n}\n",[95,180,181,201,207,229,252,257,273,279,310,316,334,373,417,442,453,459,464,488,493,506,535,559,568,573],{"__ignoreMap":147},[151,182,183,187,191,195,198],{"class":153,"line":154},[151,184,186],{"class":185},"sbssI","namespace",[151,188,190],{"class":189},"sBMFI"," App",[151,192,194],{"class":193},"sMK4o","\\",[151,196,197],{"class":189},"Comments",[151,199,200],{"class":193},";\n",[151,202,203],{"class":153,"line":161},[151,204,206],{"emptyLinePlaceholder":205},true,"\n",[151,208,210,213,217,219,222,224,227],{"class":153,"line":209},3,[151,211,212],{"class":185},"use",[151,214,216],{"class":215},"sTEyZ"," Illuminate",[151,218,194],{"class":193},[151,220,221],{"class":215},"Support",[151,223,194],{"class":193},[151,225,226],{"class":215},"Collection",[151,228,200],{"class":193},[151,230,232,234,237,239,241,243,246,248,250],{"class":153,"line":231},4,[151,233,212],{"class":185},[151,235,236],{"class":215}," Relaticle",[151,238,194],{"class":193},[151,240,197],{"class":215},[151,242,194],{"class":193},[151,244,245],{"class":215},"Contracts",[151,247,194],{"class":193},[151,249,174],{"class":215},[151,251,200],{"class":193},[151,253,255],{"class":153,"line":254},5,[151,256,206],{"emptyLinePlaceholder":205},[151,258,260,264,267,270],{"class":153,"line":259},6,[151,261,263],{"class":262},"spNyl","class",[151,265,266],{"class":189}," TeamMentionResolver",[151,268,269],{"class":262}," implements",[151,271,272],{"class":189}," MentionResolver\n",[151,274,276],{"class":153,"line":275},7,[151,277,278],{"class":193},"{\n",[151,280,282,285,288,292,295,298,301,304,307],{"class":153,"line":281},8,[151,283,284],{"class":262}," public",[151,286,287],{"class":262}," function",[151,289,291],{"class":290},"s2Zo4"," search",[151,293,294],{"class":193},"(",[151,296,297],{"class":185},"string",[151,299,300],{"class":193}," $",[151,302,303],{"class":215},"query",[151,305,306],{"class":193},"):",[151,308,309],{"class":189}," Collection\n",[151,311,313],{"class":153,"line":312},9,[151,314,315],{"class":193}," {\n",[151,317,319,323,326,329,331],{"class":153,"line":318},10,[151,320,322],{"class":321},"s7zQu"," return",[151,324,325],{"class":189}," User",[151,327,328],{"class":193},"::",[151,330,303],{"class":290},[151,332,333],{"class":193},"()\n",[151,335,337,340,343,345,348,352,354,357,360,363,366,368,370],{"class":153,"line":336},11,[151,338,339],{"class":193}," ->",[151,341,342],{"class":290},"where",[151,344,294],{"class":193},[151,346,347],{"class":193},"'",[151,349,351],{"class":350},"sfazB","team_id",[151,353,347],{"class":193},[151,355,356],{"class":193},",",[151,358,359],{"class":290}," auth",[151,361,362],{"class":193},"()->",[151,364,365],{"class":290},"user",[151,367,362],{"class":193},[151,369,351],{"class":215},[151,371,372],{"class":193},")\n",[151,374,376,378,380,382,384,387,389,391,394,397,399,401,404,406,409,412,415],{"class":153,"line":375},12,[151,377,339],{"class":193},[151,379,342],{"class":290},[151,381,294],{"class":193},[151,383,347],{"class":193},[151,385,386],{"class":350},"name",[151,388,347],{"class":193},[151,390,356],{"class":193},[151,392,393],{"class":193}," '",[151,395,396],{"class":350},"like",[151,398,347],{"class":193},[151,400,356],{"class":193},[151,402,403],{"class":193}," \"{$",[151,405,303],{"class":215},[151,407,408],{"class":193},"}",[151,410,411],{"class":350},"%",[151,413,414],{"class":193},"\"",[151,416,372],{"class":193},[151,418,420,422,425,427,430,432,434,437,439],{"class":153,"line":419},13,[151,421,339],{"class":193},[151,423,424],{"class":290},"limit",[151,426,294],{"class":193},[151,428,429],{"class":290},"config",[151,431,294],{"class":193},[151,433,347],{"class":193},[151,435,436],{"class":350},"comments.mentions.max_results",[151,438,347],{"class":193},[151,440,441],{"class":193},"))\n",[151,443,445,447,450],{"class":153,"line":444},14,[151,446,339],{"class":193},[151,448,449],{"class":290},"get",[151,451,452],{"class":193},"();\n",[151,454,456],{"class":153,"line":455},15,[151,457,458],{"class":193}," }\n",[151,460,462],{"class":153,"line":461},16,[151,463,206],{"emptyLinePlaceholder":205},[151,465,467,469,471,474,476,479,481,484,486],{"class":153,"line":466},17,[151,468,284],{"class":262},[151,470,287],{"class":262},[151,472,473],{"class":290}," resolveByNames",[151,475,294],{"class":193},[151,477,478],{"class":185},"array",[151,480,300],{"class":193},[151,482,483],{"class":215},"names",[151,485,306],{"class":193},[151,487,309],{"class":189},[151,489,491],{"class":153,"line":490},18,[151,492,315],{"class":193},[151,494,496,498,500,502,504],{"class":153,"line":495},19,[151,497,322],{"class":321},[151,499,325],{"class":189},[151,501,328],{"class":193},[151,503,303],{"class":290},[151,505,333],{"class":193},[151,507,509,511,513,515,517,519,521,523,525,527,529,531,533],{"class":153,"line":508},20,[151,510,339],{"class":193},[151,512,342],{"class":290},[151,514,294],{"class":193},[151,516,347],{"class":193},[151,518,351],{"class":350},[151,520,347],{"class":193},[151,522,356],{"class":193},[151,524,359],{"class":290},[151,526,362],{"class":193},[151,528,365],{"class":290},[151,530,362],{"class":193},[151,532,351],{"class":215},[151,534,372],{"class":193},[151,536,538,540,543,545,547,549,551,553,555,557],{"class":153,"line":537},21,[151,539,339],{"class":193},[151,541,542],{"class":290},"whereIn",[151,544,294],{"class":193},[151,546,347],{"class":193},[151,548,386],{"class":350},[151,550,347],{"class":193},[151,552,356],{"class":193},[151,554,300],{"class":193},[151,556,483],{"class":215},[151,558,372],{"class":193},[151,560,562,564,566],{"class":153,"line":561},22,[151,563,339],{"class":193},[151,565,449],{"class":290},[151,567,452],{"class":193},[151,569,571],{"class":153,"line":570},23,[151,572,458],{"class":193},[151,574,576],{"class":153,"line":575},24,[151,577,578],{"class":193},"}\n",[91,580,581],{},"Register it in your config:",[142,583,585],{"className":144,"code":584,"language":146,"meta":147,"style":147},"\u002F\u002F config\u002Fcomments.php\n'mentions' => [\n 'resolver' => App\\Comments\\TeamMentionResolver::class,\n 'max_results' => 5,\n],\n",[95,586,587,592,607,637,653],{"__ignoreMap":147},[151,588,589],{"class":153,"line":154},[151,590,591],{"class":157},"\u002F\u002F config\u002Fcomments.php\n",[151,593,594,596,599,601,604],{"class":153,"line":161},[151,595,347],{"class":193},[151,597,598],{"class":350},"mentions",[151,600,347],{"class":193},[151,602,603],{"class":193}," =>",[151,605,606],{"class":193}," [\n",[151,608,609,612,615,617,619,621,623,625,627,630,632,634],{"class":153,"line":209},[151,610,611],{"class":193}," '",[151,613,614],{"class":350},"resolver",[151,616,347],{"class":193},[151,618,603],{"class":193},[151,620,190],{"class":215},[151,622,194],{"class":193},[151,624,197],{"class":215},[151,626,194],{"class":193},[151,628,629],{"class":189},"TeamMentionResolver",[151,631,328],{"class":193},[151,633,263],{"class":185},[151,635,636],{"class":193},",\n",[151,638,639,641,644,646,648,651],{"class":153,"line":231},[151,640,611],{"class":193},[151,642,643],{"class":350},"max_results",[151,645,347],{"class":193},[151,647,603],{"class":193},[151,649,650],{"class":185}," 5",[151,652,636],{"class":193},[151,654,655],{"class":153,"line":254},[151,656,657],{"class":193},"],\n",[86,659,31],{"id":660},"configuration",[662,663,664,680],"table",{},[665,666,667],"thead",{},[668,669,670,674,677],"tr",{},[671,672,673],"th",{},"Key",[671,675,676],{},"Default",[671,678,679],{},"Description",[681,682,683,699],"tbody",{},[668,684,685,691,696],{},[686,687,688],"td",{},[95,689,690],{},"mentions.resolver",[686,692,693],{},[95,694,695],{},"DefaultMentionResolver::class",[686,697,698],{},"User search implementation",[668,700,701,706,711],{},[686,702,703],{},[95,704,705],{},"mentions.max_results",[686,707,708],{},[95,709,710],{},"5",[686,712,713],{},"Maximum autocomplete results",[715,716,717],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":147,"searchDepth":161,"depth":161,"links":719},[720,721,722,723],{"id":88,"depth":161,"text":89},{"id":133,"depth":161,"text":134},{"id":167,"depth":161,"text":168},{"id":660,"depth":161,"text":31},"User @mentions with autocomplete and notification support.","md",null,{},{"icon":44},{"description":730,"title":41},"Configure @mention autocomplete and create custom mention resolvers.","kQQwvRy9HYB1t8O3MnVh58m8bi_XmvTWpYWrdhjepK8",[733,735],{"title":36,"path":37,"stem":38,"description":734,"icon":39,"children":-1},"Control who can create, edit, delete, and reply to comments.",{"title":46,"path":47,"stem":48,"description":736,"icon":49,"children":-1},"Emoji reactions on comments.",1774607133407] \ No newline at end of file diff --git a/essentials/notifications.html b/essentials/notifications.html index 328b1e7..8337569 100644 --- a/essentials/notifications.html +++ b/essentials/notifications.html @@ -94,7 +94,7 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Notifications - Comments
Essentials

Notifications

Comment notifications, subscriptions, and real-time updates.

Notification Types

Two notification classes are included:

CommentRepliedNotification

Sent to all thread subscribers when a new comment or reply is posted. The comment author is excluded from receiving their own notification.

UserMentionedNotification

Sent to a user when they are @mentioned in a comment. Self-mentions are ignored.

Channels

// config/comments.php
+}Notifications - Comments
Essentials

Notifications

Comment notifications, subscriptions, and real-time updates.

Notification Types

Two notification classes are included:

CommentRepliedNotification

Sent to all thread subscribers when a new comment or reply is posted. The comment author is excluded from receiving their own notification.

UserMentionedNotification

Sent to a user when they are @mentioned in a comment. Self-mentions are ignored.

Channels

// config/comments.php
 'notifications' => [
     'channels' => ['database'],
     'enabled' => true,
@@ -128,4 +128,4 @@
 

Set to null to disable polling entirely.

Disabling Notifications

'notifications' => [
     'enabled' => false,
 ],
-

This disables all notification dispatching. Subscriptions and events still work, but no notifications are sent.

Copyright © 2026
\ No newline at end of file +

This disables all notification dispatching. Subscriptions and events still work, but no notifications are sent.

Copyright © 2026
\ No newline at end of file diff --git a/essentials/notifications/_payload.json b/essentials/notifications/_payload.json index 9ee40b0..802dcb7 100644 --- a/essentials/notifications/_payload.json +++ b/essentials/notifications/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":799},["ShallowReactive",2],{"navigation_docs":3,"-essentials-notifications":80,"-essentials-notifications-surround":794},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":56,"body":82,"description":786,"extension":787,"links":788,"meta":789,"navigation":790,"path":57,"seo":791,"stem":58,"__hash__":793},"docs\u002F2.essentials\u002F6.notifications.md",{"type":83,"value":84,"toc":768},"minimark",[85,90,94,99,102,106,109,113,196,207,271,275,278,282,316,319,329,333,336,340,500,504,589,593,597,600,658,664,667,671,674,716,723,727,761,764],[86,87,89],"h2",{"id":88},"notification-types","Notification Types",[91,92,93],"p",{},"Two notification classes are included:",[95,96,98],"h3",{"id":97},"commentrepliednotification","CommentRepliedNotification",[91,100,101],{},"Sent to all thread subscribers when a new comment or reply is posted. The comment author is excluded from receiving their own notification.",[95,103,105],{"id":104},"usermentionednotification","UserMentionedNotification",[91,107,108],{},"Sent to a user when they are @mentioned in a comment. Self-mentions are ignored.",[86,110,112],{"id":111},"channels","Channels",[114,115,120],"pre",{"className":116,"code":117,"language":118,"meta":119,"style":119},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F config\u002Fcomments.php\n'notifications' => [\n 'channels' => ['database'],\n 'enabled' => true,\n],\n","php","",[121,122,123,132,151,176,191],"code",{"__ignoreMap":119},[124,125,128],"span",{"class":126,"line":127},"line",1,[124,129,131],{"class":130},"sHwdD","\u002F\u002F config\u002Fcomments.php\n",[124,133,135,139,143,145,148],{"class":126,"line":134},2,[124,136,138],{"class":137},"sMK4o","'",[124,140,142],{"class":141},"sfazB","notifications",[124,144,138],{"class":137},[124,146,147],{"class":137}," =>",[124,149,150],{"class":137}," [\n",[124,152,154,157,159,161,163,166,168,171,173],{"class":126,"line":153},3,[124,155,156],{"class":137}," '",[124,158,111],{"class":141},[124,160,138],{"class":137},[124,162,147],{"class":137},[124,164,165],{"class":137}," [",[124,167,138],{"class":137},[124,169,170],{"class":141},"database",[124,172,138],{"class":137},[124,174,175],{"class":137},"],\n",[124,177,179,181,184,186,188],{"class":126,"line":178},4,[124,180,156],{"class":137},[124,182,183],{"class":141},"enabled",[124,185,138],{"class":137},[124,187,147],{"class":137},[124,189,190],{"class":137}," true,\n",[124,192,194],{"class":126,"line":193},5,[124,195,175],{"class":137},[91,197,198,199,202,203,206],{},"Available channels: ",[121,200,201],{},"'database'"," and ",[121,204,205],{},"'mail'",". Add both to send email notifications alongside database notifications:",[114,208,210],{"className":116,"code":209,"language":118,"meta":119,"style":119},"'notifications' => [\n 'channels' => ['database', 'mail'],\n 'enabled' => true,\n],\n",[121,211,212,224,255,267],{"__ignoreMap":119},[124,213,214,216,218,220,222],{"class":126,"line":127},[124,215,138],{"class":137},[124,217,142],{"class":141},[124,219,138],{"class":137},[124,221,147],{"class":137},[124,223,150],{"class":137},[124,225,226,228,230,232,234,236,238,240,242,245,248,251,253],{"class":126,"line":134},[124,227,156],{"class":137},[124,229,111],{"class":141},[124,231,138],{"class":137},[124,233,147],{"class":137},[124,235,165],{"class":137},[124,237,138],{"class":137},[124,239,170],{"class":141},[124,241,138],{"class":137},[124,243,244],{"class":137},",",[124,246,247],{"class":137}," '",[124,249,250],{"class":141},"mail",[124,252,138],{"class":137},[124,254,175],{"class":137},[124,256,257,259,261,263,265],{"class":126,"line":153},[124,258,156],{"class":137},[124,260,183],{"class":141},[124,262,138],{"class":137},[124,264,147],{"class":137},[124,266,190],{"class":137},[124,268,269],{"class":126,"line":178},[124,270,175],{"class":137},[86,272,274],{"id":273},"subscriptions","Subscriptions",[91,276,277],{},"Users can subscribe to comment threads on any commentable model. Subscribers receive notifications when new comments are posted.",[95,279,281],{"id":280},"auto-subscribe","Auto-Subscribe",[114,283,285],{"className":116,"code":284,"language":118,"meta":119,"style":119},"'subscriptions' => [\n 'auto_subscribe' => true,\n],\n",[121,286,287,299,312],{"__ignoreMap":119},[124,288,289,291,293,295,297],{"class":126,"line":127},[124,290,138],{"class":137},[124,292,273],{"class":141},[124,294,138],{"class":137},[124,296,147],{"class":137},[124,298,150],{"class":137},[124,300,301,303,306,308,310],{"class":126,"line":134},[124,302,156],{"class":137},[124,304,305],{"class":141},"auto_subscribe",[124,307,138],{"class":137},[124,309,147],{"class":137},[124,311,190],{"class":137},[124,313,314],{"class":126,"line":153},[124,315,175],{"class":137},[91,317,318],{},"When enabled:",[320,321,322,326],"ul",{},[323,324,325],"li",{},"Users are auto-subscribed when they post a comment",[323,327,328],{},"Users are auto-subscribed when they are @mentioned",[95,330,332],{"id":331},"manual-subscription","Manual Subscription",[91,334,335],{},"Users can toggle their subscription using the subscribe\u002Funsubscribe button in the comments UI.",[95,337,339],{"id":338},"programmatic-access","Programmatic Access",[114,341,343],{"className":116,"code":342,"language":118,"meta":119,"style":119},"use Relaticle\\Comments\\CommentSubscription;\n\n\u002F\u002F Check subscription status\nCommentSubscription::isSubscribed($commentable, $user);\n\n\u002F\u002F Subscribe\u002Funsubscribe\nCommentSubscription::subscribe($commentable, $user);\nCommentSubscription::unsubscribe($commentable, $user);\n\n\u002F\u002F Get all subscribers for a commentable\n$subscribers = CommentSubscription::subscribersFor($commentable);\n",[121,344,345,369,375,380,409,413,419,441,463,468,474],{"__ignoreMap":119},[124,346,347,351,355,358,361,363,366],{"class":126,"line":127},[124,348,350],{"class":349},"sbssI","use",[124,352,354],{"class":353},"sTEyZ"," Relaticle",[124,356,357],{"class":137},"\\",[124,359,360],{"class":353},"Comments",[124,362,357],{"class":137},[124,364,365],{"class":353},"CommentSubscription",[124,367,368],{"class":137},";\n",[124,370,371],{"class":126,"line":134},[124,372,374],{"emptyLinePlaceholder":373},true,"\n",[124,376,377],{"class":126,"line":153},[124,378,379],{"class":130},"\u002F\u002F Check subscription status\n",[124,381,382,385,388,392,395,398,400,403,406],{"class":126,"line":178},[124,383,365],{"class":384},"sBMFI",[124,386,387],{"class":137},"::",[124,389,391],{"class":390},"s2Zo4","isSubscribed",[124,393,394],{"class":137},"($",[124,396,397],{"class":353},"commentable",[124,399,244],{"class":137},[124,401,402],{"class":137}," $",[124,404,405],{"class":353},"user",[124,407,408],{"class":137},");\n",[124,410,411],{"class":126,"line":193},[124,412,374],{"emptyLinePlaceholder":373},[124,414,416],{"class":126,"line":415},6,[124,417,418],{"class":130},"\u002F\u002F Subscribe\u002Funsubscribe\n",[124,420,422,424,426,429,431,433,435,437,439],{"class":126,"line":421},7,[124,423,365],{"class":384},[124,425,387],{"class":137},[124,427,428],{"class":390},"subscribe",[124,430,394],{"class":137},[124,432,397],{"class":353},[124,434,244],{"class":137},[124,436,402],{"class":137},[124,438,405],{"class":353},[124,440,408],{"class":137},[124,442,444,446,448,451,453,455,457,459,461],{"class":126,"line":443},8,[124,445,365],{"class":384},[124,447,387],{"class":137},[124,449,450],{"class":390},"unsubscribe",[124,452,394],{"class":137},[124,454,397],{"class":353},[124,456,244],{"class":137},[124,458,402],{"class":137},[124,460,405],{"class":353},[124,462,408],{"class":137},[124,464,466],{"class":126,"line":465},9,[124,467,374],{"emptyLinePlaceholder":373},[124,469,471],{"class":126,"line":470},10,[124,472,473],{"class":130},"\u002F\u002F Get all subscribers for a commentable\n",[124,475,477,480,483,486,489,491,494,496,498],{"class":126,"line":476},11,[124,478,479],{"class":137},"$",[124,481,482],{"class":353},"subscribers ",[124,484,485],{"class":137},"=",[124,487,488],{"class":384}," CommentSubscription",[124,490,387],{"class":137},[124,492,493],{"class":390},"subscribersFor",[124,495,394],{"class":137},[124,497,397],{"class":353},[124,499,408],{"class":137},[86,501,503],{"id":502},"events","Events",[505,506,507,523],"table",{},[508,509,510],"thead",{},[511,512,513,517,520],"tr",{},[514,515,516],"th",{},"Event",[514,518,519],{},"Trigger",[514,521,522],{},"Broadcasts",[524,525,526,540,552,564,576],"tbody",{},[511,527,528,534,537],{},[529,530,531],"td",{},[121,532,533],{},"CommentCreated",[529,535,536],{},"New comment or reply",[529,538,539],{},"Yes",[511,541,542,547,550],{},[529,543,544],{},[121,545,546],{},"CommentUpdated",[529,548,549],{},"Comment edited",[529,551,539],{},[511,553,554,559,562],{},[529,555,556],{},[121,557,558],{},"CommentDeleted",[529,560,561],{},"Comment soft-deleted",[529,563,539],{},[511,565,566,571,574],{},[529,567,568],{},[121,569,570],{},"CommentReacted",[529,572,573],{},"Reaction added\u002Fremoved",[529,575,539],{},[511,577,578,583,586],{},[529,579,580],{},[121,581,582],{},"UserMentioned",[529,584,585],{},"User @mentioned",[529,587,588],{},"No",[86,590,592],{"id":591},"real-time-updates","Real-time Updates",[95,594,596],{"id":595},"broadcasting","Broadcasting",[91,598,599],{},"Enable broadcasting for instant updates across browser sessions:",[114,601,603],{"className":116,"code":602,"language":118,"meta":119,"style":119},"\u002F\u002F config\u002Fcomments.php\n'broadcasting' => [\n 'enabled' => true,\n 'channel_prefix' => 'comments',\n],\n",[121,604,605,609,621,633,654],{"__ignoreMap":119},[124,606,607],{"class":126,"line":127},[124,608,131],{"class":130},[124,610,611,613,615,617,619],{"class":126,"line":134},[124,612,138],{"class":137},[124,614,595],{"class":141},[124,616,138],{"class":137},[124,618,147],{"class":137},[124,620,150],{"class":137},[124,622,623,625,627,629,631],{"class":126,"line":153},[124,624,156],{"class":137},[124,626,183],{"class":141},[124,628,138],{"class":137},[124,630,147],{"class":137},[124,632,190],{"class":137},[124,634,635,637,640,642,644,646,649,651],{"class":126,"line":178},[124,636,156],{"class":137},[124,638,639],{"class":141},"channel_prefix",[124,641,138],{"class":137},[124,643,147],{"class":137},[124,645,247],{"class":137},[124,647,648],{"class":141},"comments",[124,650,138],{"class":137},[124,652,653],{"class":137},",\n",[124,655,656],{"class":126,"line":193},[124,657,175],{"class":137},[91,659,660,661],{},"Events are broadcast on private channels: ",[121,662,663],{},"{prefix}.{commentable_type}.{commentable_id}",[91,665,666],{},"This requires Laravel Echo and a broadcasting driver (Pusher, Ably, etc.) configured in your application.",[95,668,670],{"id":669},"polling-fallback","Polling Fallback",[91,672,673],{},"When broadcasting is disabled, the Livewire component polls for updates:",[114,675,677],{"className":116,"code":676,"language":118,"meta":119,"style":119},"'polling' => [\n 'interval' => '10s',\n],\n",[121,678,679,692,712],{"__ignoreMap":119},[124,680,681,683,686,688,690],{"class":126,"line":127},[124,682,138],{"class":137},[124,684,685],{"class":141},"polling",[124,687,138],{"class":137},[124,689,147],{"class":137},[124,691,150],{"class":137},[124,693,694,696,699,701,703,705,708,710],{"class":126,"line":134},[124,695,156],{"class":137},[124,697,698],{"class":141},"interval",[124,700,138],{"class":137},[124,702,147],{"class":137},[124,704,247],{"class":137},[124,706,707],{"class":141},"10s",[124,709,138],{"class":137},[124,711,653],{"class":137},[124,713,714],{"class":126,"line":153},[124,715,175],{"class":137},[91,717,718,719,722],{},"Set to ",[121,720,721],{},"null"," to disable polling entirely.",[86,724,726],{"id":725},"disabling-notifications","Disabling Notifications",[114,728,730],{"className":116,"code":729,"language":118,"meta":119,"style":119},"'notifications' => [\n 'enabled' => false,\n],\n",[121,731,732,744,757],{"__ignoreMap":119},[124,733,734,736,738,740,742],{"class":126,"line":127},[124,735,138],{"class":137},[124,737,142],{"class":141},[124,739,138],{"class":137},[124,741,147],{"class":137},[124,743,150],{"class":137},[124,745,746,748,750,752,754],{"class":126,"line":134},[124,747,156],{"class":137},[124,749,183],{"class":141},[124,751,138],{"class":137},[124,753,147],{"class":137},[124,755,756],{"class":137}," false,\n",[124,758,759],{"class":126,"line":153},[124,760,175],{"class":137},[91,762,763],{},"This disables all notification dispatching. Subscriptions and events still work, but no notifications are sent.",[765,766,767],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":119,"searchDepth":134,"depth":134,"links":769},[770,774,775,780,781,785],{"id":88,"depth":134,"text":89,"children":771},[772,773],{"id":97,"depth":153,"text":98},{"id":104,"depth":153,"text":105},{"id":111,"depth":134,"text":112},{"id":273,"depth":134,"text":274,"children":776},[777,778,779],{"id":280,"depth":153,"text":281},{"id":331,"depth":153,"text":332},{"id":338,"depth":153,"text":339},{"id":502,"depth":134,"text":503},{"id":591,"depth":134,"text":592,"children":782},[783,784],{"id":595,"depth":153,"text":596},{"id":669,"depth":153,"text":670},{"id":725,"depth":134,"text":726},"Comment notifications, subscriptions, and real-time updates.","md",null,{},{"icon":59},{"description":792,"title":56},"Configure comment notifications, subscriptions, broadcasting, and polling.","IShzf0gxRwqSzEvhZKCCHfv_bSAPbP2T6TYVaQvFsEo",[795,797],{"title":51,"path":52,"stem":53,"description":796,"icon":54,"children":-1},"File uploads for comments.",{"title":61,"path":62,"stem":63,"description":798,"icon":64,"children":-1},"Tables, relationships, and indexes used by the Comments package.",1774606188039] \ No newline at end of file +[{"data":1,"prerenderedAt":799},["ShallowReactive",2],{"navigation_docs":3,"-essentials-notifications":80,"-essentials-notifications-surround":794},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":56,"body":82,"description":786,"extension":787,"links":788,"meta":789,"navigation":790,"path":57,"seo":791,"stem":58,"__hash__":793},"docs\u002F2.essentials\u002F6.notifications.md",{"type":83,"value":84,"toc":768},"minimark",[85,90,94,99,102,106,109,113,196,207,271,275,278,282,316,319,329,333,336,340,500,504,589,593,597,600,658,664,667,671,674,716,723,727,761,764],[86,87,89],"h2",{"id":88},"notification-types","Notification Types",[91,92,93],"p",{},"Two notification classes are included:",[95,96,98],"h3",{"id":97},"commentrepliednotification","CommentRepliedNotification",[91,100,101],{},"Sent to all thread subscribers when a new comment or reply is posted. The comment author is excluded from receiving their own notification.",[95,103,105],{"id":104},"usermentionednotification","UserMentionedNotification",[91,107,108],{},"Sent to a user when they are @mentioned in a comment. Self-mentions are ignored.",[86,110,112],{"id":111},"channels","Channels",[114,115,120],"pre",{"className":116,"code":117,"language":118,"meta":119,"style":119},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F config\u002Fcomments.php\n'notifications' => [\n 'channels' => ['database'],\n 'enabled' => true,\n],\n","php","",[121,122,123,132,151,176,191],"code",{"__ignoreMap":119},[124,125,128],"span",{"class":126,"line":127},"line",1,[124,129,131],{"class":130},"sHwdD","\u002F\u002F config\u002Fcomments.php\n",[124,133,135,139,143,145,148],{"class":126,"line":134},2,[124,136,138],{"class":137},"sMK4o","'",[124,140,142],{"class":141},"sfazB","notifications",[124,144,138],{"class":137},[124,146,147],{"class":137}," =>",[124,149,150],{"class":137}," [\n",[124,152,154,157,159,161,163,166,168,171,173],{"class":126,"line":153},3,[124,155,156],{"class":137}," '",[124,158,111],{"class":141},[124,160,138],{"class":137},[124,162,147],{"class":137},[124,164,165],{"class":137}," [",[124,167,138],{"class":137},[124,169,170],{"class":141},"database",[124,172,138],{"class":137},[124,174,175],{"class":137},"],\n",[124,177,179,181,184,186,188],{"class":126,"line":178},4,[124,180,156],{"class":137},[124,182,183],{"class":141},"enabled",[124,185,138],{"class":137},[124,187,147],{"class":137},[124,189,190],{"class":137}," true,\n",[124,192,194],{"class":126,"line":193},5,[124,195,175],{"class":137},[91,197,198,199,202,203,206],{},"Available channels: ",[121,200,201],{},"'database'"," and ",[121,204,205],{},"'mail'",". Add both to send email notifications alongside database notifications:",[114,208,210],{"className":116,"code":209,"language":118,"meta":119,"style":119},"'notifications' => [\n 'channels' => ['database', 'mail'],\n 'enabled' => true,\n],\n",[121,211,212,224,255,267],{"__ignoreMap":119},[124,213,214,216,218,220,222],{"class":126,"line":127},[124,215,138],{"class":137},[124,217,142],{"class":141},[124,219,138],{"class":137},[124,221,147],{"class":137},[124,223,150],{"class":137},[124,225,226,228,230,232,234,236,238,240,242,245,248,251,253],{"class":126,"line":134},[124,227,156],{"class":137},[124,229,111],{"class":141},[124,231,138],{"class":137},[124,233,147],{"class":137},[124,235,165],{"class":137},[124,237,138],{"class":137},[124,239,170],{"class":141},[124,241,138],{"class":137},[124,243,244],{"class":137},",",[124,246,247],{"class":137}," '",[124,249,250],{"class":141},"mail",[124,252,138],{"class":137},[124,254,175],{"class":137},[124,256,257,259,261,263,265],{"class":126,"line":153},[124,258,156],{"class":137},[124,260,183],{"class":141},[124,262,138],{"class":137},[124,264,147],{"class":137},[124,266,190],{"class":137},[124,268,269],{"class":126,"line":178},[124,270,175],{"class":137},[86,272,274],{"id":273},"subscriptions","Subscriptions",[91,276,277],{},"Users can subscribe to comment threads on any commentable model. Subscribers receive notifications when new comments are posted.",[95,279,281],{"id":280},"auto-subscribe","Auto-Subscribe",[114,283,285],{"className":116,"code":284,"language":118,"meta":119,"style":119},"'subscriptions' => [\n 'auto_subscribe' => true,\n],\n",[121,286,287,299,312],{"__ignoreMap":119},[124,288,289,291,293,295,297],{"class":126,"line":127},[124,290,138],{"class":137},[124,292,273],{"class":141},[124,294,138],{"class":137},[124,296,147],{"class":137},[124,298,150],{"class":137},[124,300,301,303,306,308,310],{"class":126,"line":134},[124,302,156],{"class":137},[124,304,305],{"class":141},"auto_subscribe",[124,307,138],{"class":137},[124,309,147],{"class":137},[124,311,190],{"class":137},[124,313,314],{"class":126,"line":153},[124,315,175],{"class":137},[91,317,318],{},"When enabled:",[320,321,322,326],"ul",{},[323,324,325],"li",{},"Users are auto-subscribed when they post a comment",[323,327,328],{},"Users are auto-subscribed when they are @mentioned",[95,330,332],{"id":331},"manual-subscription","Manual Subscription",[91,334,335],{},"Users can toggle their subscription using the subscribe\u002Funsubscribe button in the comments UI.",[95,337,339],{"id":338},"programmatic-access","Programmatic Access",[114,341,343],{"className":116,"code":342,"language":118,"meta":119,"style":119},"use Relaticle\\Comments\\CommentSubscription;\n\n\u002F\u002F Check subscription status\nCommentSubscription::isSubscribed($commentable, $user);\n\n\u002F\u002F Subscribe\u002Funsubscribe\nCommentSubscription::subscribe($commentable, $user);\nCommentSubscription::unsubscribe($commentable, $user);\n\n\u002F\u002F Get all subscribers for a commentable\n$subscribers = CommentSubscription::subscribersFor($commentable);\n",[121,344,345,369,375,380,409,413,419,441,463,468,474],{"__ignoreMap":119},[124,346,347,351,355,358,361,363,366],{"class":126,"line":127},[124,348,350],{"class":349},"sbssI","use",[124,352,354],{"class":353},"sTEyZ"," Relaticle",[124,356,357],{"class":137},"\\",[124,359,360],{"class":353},"Comments",[124,362,357],{"class":137},[124,364,365],{"class":353},"CommentSubscription",[124,367,368],{"class":137},";\n",[124,370,371],{"class":126,"line":134},[124,372,374],{"emptyLinePlaceholder":373},true,"\n",[124,376,377],{"class":126,"line":153},[124,378,379],{"class":130},"\u002F\u002F Check subscription status\n",[124,381,382,385,388,392,395,398,400,403,406],{"class":126,"line":178},[124,383,365],{"class":384},"sBMFI",[124,386,387],{"class":137},"::",[124,389,391],{"class":390},"s2Zo4","isSubscribed",[124,393,394],{"class":137},"($",[124,396,397],{"class":353},"commentable",[124,399,244],{"class":137},[124,401,402],{"class":137}," $",[124,404,405],{"class":353},"user",[124,407,408],{"class":137},");\n",[124,410,411],{"class":126,"line":193},[124,412,374],{"emptyLinePlaceholder":373},[124,414,416],{"class":126,"line":415},6,[124,417,418],{"class":130},"\u002F\u002F Subscribe\u002Funsubscribe\n",[124,420,422,424,426,429,431,433,435,437,439],{"class":126,"line":421},7,[124,423,365],{"class":384},[124,425,387],{"class":137},[124,427,428],{"class":390},"subscribe",[124,430,394],{"class":137},[124,432,397],{"class":353},[124,434,244],{"class":137},[124,436,402],{"class":137},[124,438,405],{"class":353},[124,440,408],{"class":137},[124,442,444,446,448,451,453,455,457,459,461],{"class":126,"line":443},8,[124,445,365],{"class":384},[124,447,387],{"class":137},[124,449,450],{"class":390},"unsubscribe",[124,452,394],{"class":137},[124,454,397],{"class":353},[124,456,244],{"class":137},[124,458,402],{"class":137},[124,460,405],{"class":353},[124,462,408],{"class":137},[124,464,466],{"class":126,"line":465},9,[124,467,374],{"emptyLinePlaceholder":373},[124,469,471],{"class":126,"line":470},10,[124,472,473],{"class":130},"\u002F\u002F Get all subscribers for a commentable\n",[124,475,477,480,483,486,489,491,494,496,498],{"class":126,"line":476},11,[124,478,479],{"class":137},"$",[124,481,482],{"class":353},"subscribers ",[124,484,485],{"class":137},"=",[124,487,488],{"class":384}," CommentSubscription",[124,490,387],{"class":137},[124,492,493],{"class":390},"subscribersFor",[124,495,394],{"class":137},[124,497,397],{"class":353},[124,499,408],{"class":137},[86,501,503],{"id":502},"events","Events",[505,506,507,523],"table",{},[508,509,510],"thead",{},[511,512,513,517,520],"tr",{},[514,515,516],"th",{},"Event",[514,518,519],{},"Trigger",[514,521,522],{},"Broadcasts",[524,525,526,540,552,564,576],"tbody",{},[511,527,528,534,537],{},[529,530,531],"td",{},[121,532,533],{},"CommentCreated",[529,535,536],{},"New comment or reply",[529,538,539],{},"Yes",[511,541,542,547,550],{},[529,543,544],{},[121,545,546],{},"CommentUpdated",[529,548,549],{},"Comment edited",[529,551,539],{},[511,553,554,559,562],{},[529,555,556],{},[121,557,558],{},"CommentDeleted",[529,560,561],{},"Comment soft-deleted",[529,563,539],{},[511,565,566,571,574],{},[529,567,568],{},[121,569,570],{},"CommentReacted",[529,572,573],{},"Reaction added\u002Fremoved",[529,575,539],{},[511,577,578,583,586],{},[529,579,580],{},[121,581,582],{},"UserMentioned",[529,584,585],{},"User @mentioned",[529,587,588],{},"No",[86,590,592],{"id":591},"real-time-updates","Real-time Updates",[95,594,596],{"id":595},"broadcasting","Broadcasting",[91,598,599],{},"Enable broadcasting for instant updates across browser sessions:",[114,601,603],{"className":116,"code":602,"language":118,"meta":119,"style":119},"\u002F\u002F config\u002Fcomments.php\n'broadcasting' => [\n 'enabled' => true,\n 'channel_prefix' => 'comments',\n],\n",[121,604,605,609,621,633,654],{"__ignoreMap":119},[124,606,607],{"class":126,"line":127},[124,608,131],{"class":130},[124,610,611,613,615,617,619],{"class":126,"line":134},[124,612,138],{"class":137},[124,614,595],{"class":141},[124,616,138],{"class":137},[124,618,147],{"class":137},[124,620,150],{"class":137},[124,622,623,625,627,629,631],{"class":126,"line":153},[124,624,156],{"class":137},[124,626,183],{"class":141},[124,628,138],{"class":137},[124,630,147],{"class":137},[124,632,190],{"class":137},[124,634,635,637,640,642,644,646,649,651],{"class":126,"line":178},[124,636,156],{"class":137},[124,638,639],{"class":141},"channel_prefix",[124,641,138],{"class":137},[124,643,147],{"class":137},[124,645,247],{"class":137},[124,647,648],{"class":141},"comments",[124,650,138],{"class":137},[124,652,653],{"class":137},",\n",[124,655,656],{"class":126,"line":193},[124,657,175],{"class":137},[91,659,660,661],{},"Events are broadcast on private channels: ",[121,662,663],{},"{prefix}.{commentable_type}.{commentable_id}",[91,665,666],{},"This requires Laravel Echo and a broadcasting driver (Pusher, Ably, etc.) configured in your application.",[95,668,670],{"id":669},"polling-fallback","Polling Fallback",[91,672,673],{},"When broadcasting is disabled, the Livewire component polls for updates:",[114,675,677],{"className":116,"code":676,"language":118,"meta":119,"style":119},"'polling' => [\n 'interval' => '10s',\n],\n",[121,678,679,692,712],{"__ignoreMap":119},[124,680,681,683,686,688,690],{"class":126,"line":127},[124,682,138],{"class":137},[124,684,685],{"class":141},"polling",[124,687,138],{"class":137},[124,689,147],{"class":137},[124,691,150],{"class":137},[124,693,694,696,699,701,703,705,708,710],{"class":126,"line":134},[124,695,156],{"class":137},[124,697,698],{"class":141},"interval",[124,700,138],{"class":137},[124,702,147],{"class":137},[124,704,247],{"class":137},[124,706,707],{"class":141},"10s",[124,709,138],{"class":137},[124,711,653],{"class":137},[124,713,714],{"class":126,"line":153},[124,715,175],{"class":137},[91,717,718,719,722],{},"Set to ",[121,720,721],{},"null"," to disable polling entirely.",[86,724,726],{"id":725},"disabling-notifications","Disabling Notifications",[114,728,730],{"className":116,"code":729,"language":118,"meta":119,"style":119},"'notifications' => [\n 'enabled' => false,\n],\n",[121,731,732,744,757],{"__ignoreMap":119},[124,733,734,736,738,740,742],{"class":126,"line":127},[124,735,138],{"class":137},[124,737,142],{"class":141},[124,739,138],{"class":137},[124,741,147],{"class":137},[124,743,150],{"class":137},[124,745,746,748,750,752,754],{"class":126,"line":134},[124,747,156],{"class":137},[124,749,183],{"class":141},[124,751,138],{"class":137},[124,753,147],{"class":137},[124,755,756],{"class":137}," false,\n",[124,758,759],{"class":126,"line":153},[124,760,175],{"class":137},[91,762,763],{},"This disables all notification dispatching. Subscriptions and events still work, but no notifications are sent.",[765,766,767],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":119,"searchDepth":134,"depth":134,"links":769},[770,774,775,780,781,785],{"id":88,"depth":134,"text":89,"children":771},[772,773],{"id":97,"depth":153,"text":98},{"id":104,"depth":153,"text":105},{"id":111,"depth":134,"text":112},{"id":273,"depth":134,"text":274,"children":776},[777,778,779],{"id":280,"depth":153,"text":281},{"id":331,"depth":153,"text":332},{"id":338,"depth":153,"text":339},{"id":502,"depth":134,"text":503},{"id":591,"depth":134,"text":592,"children":782},[783,784],{"id":595,"depth":153,"text":596},{"id":669,"depth":153,"text":670},{"id":725,"depth":134,"text":726},"Comment notifications, subscriptions, and real-time updates.","md",null,{},{"icon":59},{"description":792,"title":56},"Configure comment notifications, subscriptions, broadcasting, and polling.","IShzf0gxRwqSzEvhZKCCHfv_bSAPbP2T6TYVaQvFsEo",[795,797],{"title":51,"path":52,"stem":53,"description":796,"icon":54,"children":-1},"File uploads for comments.",{"title":61,"path":62,"stem":63,"description":798,"icon":64,"children":-1},"Tables, relationships, and indexes used by the Comments package.",1774607133407] \ No newline at end of file diff --git a/essentials/reactions.html b/essentials/reactions.html index ac24d9d..2006a47 100644 --- a/essentials/reactions.html +++ b/essentials/reactions.html @@ -94,7 +94,7 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Reactions - Comments
Essentials

Reactions

Emoji reactions on comments.

Default Reactions

Six emoji reactions are available out of the box:

KeyEmojiLabel
thumbs_up:thumbsup:Like
heart❤️Love
celebrate🎉Celebrate
laugh😄Laugh
thinking🤔Thinking
sad😢Sad

How Reactions Work

  • Each user can add one reaction of each type per comment
  • Clicking the same reaction again removes it (toggle behavior)
  • The reaction summary shows which users reacted with each emoji
  • A CommentReacted event is dispatched with action: 'added' or 'removed'

Customizing Reactions

Override the emoji set in your config:

// config/comments.php
+}Reactions - Comments
Essentials

Reactions

Emoji reactions on comments.

Default Reactions

Six emoji reactions are available out of the box:

KeyEmojiLabel
thumbs_up:thumbsup:Like
heart❤️Love
celebrate🎉Celebrate
laugh😄Laugh
thinking🤔Thinking
sad😢Sad

How Reactions Work

  • Each user can add one reaction of each type per comment
  • Clicking the same reaction again removes it (toggle behavior)
  • The reaction summary shows which users reacted with each emoji
  • A CommentReacted event is dispatched with action: 'added' or 'removed'

Customizing Reactions

Override the emoji set in your config:

// config/comments.php
 'reactions' => [
     'emoji_set' => [
         'thumbs_up' => "\u{1F44D}",
@@ -104,4 +104,4 @@
         'eyes' => "\u{1F440}",
     ],
 ],
-

Keys are stored in the database. If you change a key, existing reactions with the old key will no longer display.

Storage

Reactions are stored in the comment_reactions table with a unique constraint on (comment_id, user_id, user_type, reaction), ensuring one reaction of each type per user per comment.

Copyright © 2026
\ No newline at end of file +

Keys are stored in the database. If you change a key, existing reactions with the old key will no longer display.

Storage

Reactions are stored in the comment_reactions table with a unique constraint on (comment_id, user_id, user_type, reaction), ensuring one reaction of each type per user per comment.

Copyright © 2026
\ No newline at end of file diff --git a/essentials/reactions/_payload.json b/essentials/reactions/_payload.json index c3d2940..e86f3ca 100644 --- a/essentials/reactions/_payload.json +++ b/essentials/reactions/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":447},["ShallowReactive",2],{"navigation_docs":3,"-essentials-reactions":80,"-essentials-reactions-surround":442},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":46,"body":82,"description":434,"extension":435,"links":436,"meta":437,"navigation":438,"path":47,"seo":439,"stem":48,"__hash__":441},"docs\u002F2.essentials\u002F4.reactions.md",{"type":83,"value":84,"toc":428},"minimark",[85,90,94,196,200,227,231,234,406,409,413,424],[86,87,89],"h2",{"id":88},"default-reactions","Default Reactions",[91,92,93],"p",{},"Six emoji reactions are available out of the box:",[95,96,97,113],"table",{},[98,99,100],"thead",{},[101,102,103,107,110],"tr",{},[104,105,106],"th",{},"Key",[104,108,109],{},"Emoji",[104,111,112],{},"Label",[114,115,116,131,144,157,170,183],"tbody",{},[101,117,118,125,128],{},[119,120,121],"td",{},[122,123,124],"code",{},"thumbs_up",[119,126,127],{},":thumbsup:",[119,129,130],{},"Like",[101,132,133,138,141],{},[119,134,135],{},[122,136,137],{},"heart",[119,139,140],{},"❤️",[119,142,143],{},"Love",[101,145,146,151,154],{},[119,147,148],{},[122,149,150],{},"celebrate",[119,152,153],{},"🎉",[119,155,156],{},"Celebrate",[101,158,159,164,167],{},[119,160,161],{},[122,162,163],{},"laugh",[119,165,166],{},"😄",[119,168,169],{},"Laugh",[101,171,172,177,180],{},[119,173,174],{},[122,175,176],{},"thinking",[119,178,179],{},"🤔",[119,181,182],{},"Thinking",[101,184,185,190,193],{},[119,186,187],{},[122,188,189],{},"sad",[119,191,192],{},"😢",[119,194,195],{},"Sad",[86,197,199],{"id":198},"how-reactions-work","How Reactions Work",[201,202,203,207,210,213],"ul",{},[204,205,206],"li",{},"Each user can add one reaction of each type per comment",[204,208,209],{},"Clicking the same reaction again removes it (toggle behavior)",[204,211,212],{},"The reaction summary shows which users reacted with each emoji",[204,214,215,216,219,220,223,224],{},"A ",[122,217,218],{},"CommentReacted"," event is dispatched with ",[122,221,222],{},"action: 'added'"," or ",[122,225,226],{},"'removed'",[86,228,230],{"id":229},"customizing-reactions","Customizing Reactions",[91,232,233],{},"Override the emoji set in your config:",[235,236,241],"pre",{"className":237,"code":238,"language":239,"meta":240,"style":240},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F config\u002Fcomments.php\n'reactions' => [\n 'emoji_set' => [\n 'thumbs_up' => \"\\u{1F44D}\",\n 'thumbs_down' => \"\\u{1F44E}\",\n 'heart' => \"\\u{2764}\\u{FE0F}\",\n 'fire' => \"\\u{1F525}\",\n 'eyes' => \"\\u{1F440}\",\n ],\n],\n","php","",[122,242,243,252,271,286,311,332,352,373,394,400],{"__ignoreMap":240},[244,245,248],"span",{"class":246,"line":247},"line",1,[244,249,251],{"class":250},"sHwdD","\u002F\u002F config\u002Fcomments.php\n",[244,253,255,259,263,265,268],{"class":246,"line":254},2,[244,256,258],{"class":257},"sMK4o","'",[244,260,262],{"class":261},"sfazB","reactions",[244,264,258],{"class":257},[244,266,267],{"class":257}," =>",[244,269,270],{"class":257}," [\n",[244,272,274,277,280,282,284],{"class":246,"line":273},3,[244,275,276],{"class":257}," '",[244,278,279],{"class":261},"emoji_set",[244,281,258],{"class":257},[244,283,267],{"class":257},[244,285,270],{"class":257},[244,287,289,292,294,296,298,301,305,308],{"class":246,"line":288},4,[244,290,291],{"class":257}," '",[244,293,124],{"class":261},[244,295,258],{"class":257},[244,297,267],{"class":257},[244,299,300],{"class":257}," \"",[244,302,304],{"class":303},"sTEyZ","\\u{1F44D}",[244,306,307],{"class":257},"\"",[244,309,310],{"class":257},",\n",[244,312,314,316,319,321,323,325,328,330],{"class":246,"line":313},5,[244,315,291],{"class":257},[244,317,318],{"class":261},"thumbs_down",[244,320,258],{"class":257},[244,322,267],{"class":257},[244,324,300],{"class":257},[244,326,327],{"class":303},"\\u{1F44E}",[244,329,307],{"class":257},[244,331,310],{"class":257},[244,333,335,337,339,341,343,345,348,350],{"class":246,"line":334},6,[244,336,291],{"class":257},[244,338,137],{"class":261},[244,340,258],{"class":257},[244,342,267],{"class":257},[244,344,300],{"class":257},[244,346,347],{"class":303},"\\u{2764}\\u{FE0F}",[244,349,307],{"class":257},[244,351,310],{"class":257},[244,353,355,357,360,362,364,366,369,371],{"class":246,"line":354},7,[244,356,291],{"class":257},[244,358,359],{"class":261},"fire",[244,361,258],{"class":257},[244,363,267],{"class":257},[244,365,300],{"class":257},[244,367,368],{"class":303},"\\u{1F525}",[244,370,307],{"class":257},[244,372,310],{"class":257},[244,374,376,378,381,383,385,387,390,392],{"class":246,"line":375},8,[244,377,291],{"class":257},[244,379,380],{"class":261},"eyes",[244,382,258],{"class":257},[244,384,267],{"class":257},[244,386,300],{"class":257},[244,388,389],{"class":303},"\\u{1F440}",[244,391,307],{"class":257},[244,393,310],{"class":257},[244,395,397],{"class":246,"line":396},9,[244,398,399],{"class":257}," ],\n",[244,401,403],{"class":246,"line":402},10,[244,404,405],{"class":257},"],\n",[91,407,408],{},"Keys are stored in the database. If you change a key, existing reactions with the old key will no longer display.",[86,410,412],{"id":411},"storage","Storage",[91,414,415,416,419,420,423],{},"Reactions are stored in the ",[122,417,418],{},"comment_reactions"," table with a unique constraint on ",[122,421,422],{},"(comment_id, user_id, user_type, reaction)",", ensuring one reaction of each type per user per comment.",[425,426,427],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":240,"searchDepth":254,"depth":254,"links":429},[430,431,432,433],{"id":88,"depth":254,"text":89},{"id":198,"depth":254,"text":199},{"id":229,"depth":254,"text":230},{"id":411,"depth":254,"text":412},"Emoji reactions on comments.","md",null,{},{"icon":49},{"description":440,"title":46},"Configure emoji reactions for comments.","khYPp6eC0edZfAruTrAlDJPdOG0ElBC05t8LgYgsdSY",[443,445],{"title":41,"path":42,"stem":43,"description":444,"icon":44,"children":-1},"User @mentions with autocomplete and notification support.",{"title":51,"path":52,"stem":53,"description":446,"icon":54,"children":-1},"File uploads for comments.",1774606188039] \ No newline at end of file +[{"data":1,"prerenderedAt":447},["ShallowReactive",2],{"navigation_docs":3,"-essentials-reactions":80,"-essentials-reactions-surround":442},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":46,"body":82,"description":434,"extension":435,"links":436,"meta":437,"navigation":438,"path":47,"seo":439,"stem":48,"__hash__":441},"docs\u002F2.essentials\u002F4.reactions.md",{"type":83,"value":84,"toc":428},"minimark",[85,90,94,196,200,227,231,234,406,409,413,424],[86,87,89],"h2",{"id":88},"default-reactions","Default Reactions",[91,92,93],"p",{},"Six emoji reactions are available out of the box:",[95,96,97,113],"table",{},[98,99,100],"thead",{},[101,102,103,107,110],"tr",{},[104,105,106],"th",{},"Key",[104,108,109],{},"Emoji",[104,111,112],{},"Label",[114,115,116,131,144,157,170,183],"tbody",{},[101,117,118,125,128],{},[119,120,121],"td",{},[122,123,124],"code",{},"thumbs_up",[119,126,127],{},":thumbsup:",[119,129,130],{},"Like",[101,132,133,138,141],{},[119,134,135],{},[122,136,137],{},"heart",[119,139,140],{},"❤️",[119,142,143],{},"Love",[101,145,146,151,154],{},[119,147,148],{},[122,149,150],{},"celebrate",[119,152,153],{},"🎉",[119,155,156],{},"Celebrate",[101,158,159,164,167],{},[119,160,161],{},[122,162,163],{},"laugh",[119,165,166],{},"😄",[119,168,169],{},"Laugh",[101,171,172,177,180],{},[119,173,174],{},[122,175,176],{},"thinking",[119,178,179],{},"🤔",[119,181,182],{},"Thinking",[101,184,185,190,193],{},[119,186,187],{},[122,188,189],{},"sad",[119,191,192],{},"😢",[119,194,195],{},"Sad",[86,197,199],{"id":198},"how-reactions-work","How Reactions Work",[201,202,203,207,210,213],"ul",{},[204,205,206],"li",{},"Each user can add one reaction of each type per comment",[204,208,209],{},"Clicking the same reaction again removes it (toggle behavior)",[204,211,212],{},"The reaction summary shows which users reacted with each emoji",[204,214,215,216,219,220,223,224],{},"A ",[122,217,218],{},"CommentReacted"," event is dispatched with ",[122,221,222],{},"action: 'added'"," or ",[122,225,226],{},"'removed'",[86,228,230],{"id":229},"customizing-reactions","Customizing Reactions",[91,232,233],{},"Override the emoji set in your config:",[235,236,241],"pre",{"className":237,"code":238,"language":239,"meta":240,"style":240},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F config\u002Fcomments.php\n'reactions' => [\n 'emoji_set' => [\n 'thumbs_up' => \"\\u{1F44D}\",\n 'thumbs_down' => \"\\u{1F44E}\",\n 'heart' => \"\\u{2764}\\u{FE0F}\",\n 'fire' => \"\\u{1F525}\",\n 'eyes' => \"\\u{1F440}\",\n ],\n],\n","php","",[122,242,243,252,271,286,311,332,352,373,394,400],{"__ignoreMap":240},[244,245,248],"span",{"class":246,"line":247},"line",1,[244,249,251],{"class":250},"sHwdD","\u002F\u002F config\u002Fcomments.php\n",[244,253,255,259,263,265,268],{"class":246,"line":254},2,[244,256,258],{"class":257},"sMK4o","'",[244,260,262],{"class":261},"sfazB","reactions",[244,264,258],{"class":257},[244,266,267],{"class":257}," =>",[244,269,270],{"class":257}," [\n",[244,272,274,277,280,282,284],{"class":246,"line":273},3,[244,275,276],{"class":257}," '",[244,278,279],{"class":261},"emoji_set",[244,281,258],{"class":257},[244,283,267],{"class":257},[244,285,270],{"class":257},[244,287,289,292,294,296,298,301,305,308],{"class":246,"line":288},4,[244,290,291],{"class":257}," '",[244,293,124],{"class":261},[244,295,258],{"class":257},[244,297,267],{"class":257},[244,299,300],{"class":257}," \"",[244,302,304],{"class":303},"sTEyZ","\\u{1F44D}",[244,306,307],{"class":257},"\"",[244,309,310],{"class":257},",\n",[244,312,314,316,319,321,323,325,328,330],{"class":246,"line":313},5,[244,315,291],{"class":257},[244,317,318],{"class":261},"thumbs_down",[244,320,258],{"class":257},[244,322,267],{"class":257},[244,324,300],{"class":257},[244,326,327],{"class":303},"\\u{1F44E}",[244,329,307],{"class":257},[244,331,310],{"class":257},[244,333,335,337,339,341,343,345,348,350],{"class":246,"line":334},6,[244,336,291],{"class":257},[244,338,137],{"class":261},[244,340,258],{"class":257},[244,342,267],{"class":257},[244,344,300],{"class":257},[244,346,347],{"class":303},"\\u{2764}\\u{FE0F}",[244,349,307],{"class":257},[244,351,310],{"class":257},[244,353,355,357,360,362,364,366,369,371],{"class":246,"line":354},7,[244,356,291],{"class":257},[244,358,359],{"class":261},"fire",[244,361,258],{"class":257},[244,363,267],{"class":257},[244,365,300],{"class":257},[244,367,368],{"class":303},"\\u{1F525}",[244,370,307],{"class":257},[244,372,310],{"class":257},[244,374,376,378,381,383,385,387,390,392],{"class":246,"line":375},8,[244,377,291],{"class":257},[244,379,380],{"class":261},"eyes",[244,382,258],{"class":257},[244,384,267],{"class":257},[244,386,300],{"class":257},[244,388,389],{"class":303},"\\u{1F440}",[244,391,307],{"class":257},[244,393,310],{"class":257},[244,395,397],{"class":246,"line":396},9,[244,398,399],{"class":257}," ],\n",[244,401,403],{"class":246,"line":402},10,[244,404,405],{"class":257},"],\n",[91,407,408],{},"Keys are stored in the database. If you change a key, existing reactions with the old key will no longer display.",[86,410,412],{"id":411},"storage","Storage",[91,414,415,416,419,420,423],{},"Reactions are stored in the ",[122,417,418],{},"comment_reactions"," table with a unique constraint on ",[122,421,422],{},"(comment_id, user_id, user_type, reaction)",", ensuring one reaction of each type per user per comment.",[425,426,427],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":240,"searchDepth":254,"depth":254,"links":429},[430,431,432,433],{"id":88,"depth":254,"text":89},{"id":198,"depth":254,"text":199},{"id":229,"depth":254,"text":230},{"id":411,"depth":254,"text":412},"Emoji reactions on comments.","md",null,{},{"icon":49},{"description":440,"title":46},"Configure emoji reactions for comments.","khYPp6eC0edZfAruTrAlDJPdOG0ElBC05t8LgYgsdSY",[443,445],{"title":41,"path":42,"stem":43,"description":444,"icon":44,"children":-1},"User @mentions with autocomplete and notification support.",{"title":51,"path":52,"stem":53,"description":446,"icon":54,"children":-1},"File uploads for comments.",1774607133407] \ No newline at end of file diff --git a/getting-started/installation.html b/getting-started/installation.html index d13e94d..bf94173 100644 --- a/getting-started/installation.html +++ b/getting-started/installation.html @@ -94,7 +94,7 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Installation - Comments
Getting Started

Installation

Get started with Comments in minutes.

Requirements

  • PHP: 8.2+
  • Laravel: 12+
  • Filament: 4.x / 5.x
  • Livewire: 3.5+ / 4.x

Quick Setup

Install Package

Terminal
composer require relaticle/comments
+}Installation - Comments
Getting Started

Installation

Get started with Comments in minutes.

Requirements

  • PHP: 8.2+
  • Laravel: 12+
  • Filament: 4.x / 5.x
  • Livewire: 3.5+ / 4.x

Quick Setup

Install Package

Terminal
composer require relaticle/comments
 

Publish and Run Migrations

Terminal
php artisan vendor:publish --tag=comments-migrations
 php artisan migrate
 

Include CSS Assets

Prerequisite: You need a custom Filament theme to include the Comments styles.

If you haven't set up a custom theme for Filament, follow the Filament Docs first.

Add the plugin's views to your theme CSS file:

resources/css/filament/admin/theme.css
@source "../../../../vendor/relaticle/comments/resources/views/**/*.blade.php";
@@ -129,4 +129,4 @@
         CommentsAction::make(),
     ];
 }
-

Done! Visit your Filament panel to see comments in action.

Optional Configuration

CommandAction
php artisan vendor:publish --tag=comments-configPublish the configuration file
php artisan vendor:publish --tag=comments-viewsPublish the Blade views for customization
php artisan vendor:publish --tag=comments-translationsPublish the translation files
Copyright © 2026
\ No newline at end of file +

Done! Visit your Filament panel to see comments in action.

Optional Configuration

CommandAction
php artisan vendor:publish --tag=comments-configPublish the configuration file
php artisan vendor:publish --tag=comments-viewsPublish the Blade views for customization
php artisan vendor:publish --tag=comments-translationsPublish the translation files
Copyright © 2026
\ No newline at end of file diff --git a/getting-started/installation/_payload.json b/getting-started/installation/_payload.json index 6cb7074..31a4589 100644 --- a/getting-started/installation/_payload.json +++ b/getting-started/installation/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":738},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":80,"-getting-started-installation-surround":733},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":16,"body":82,"description":724,"extension":725,"links":726,"meta":727,"navigation":728,"path":17,"seo":729,"stem":18,"__hash__":732},"docs\u002F1.getting-started\u002F2.installation.md",{"type":83,"value":84,"toc":712},"minimark",[85,90,119,123,648,654,658,708],[86,87,89],"h2",{"id":88},"requirements","Requirements",[91,92,93,101,107,113],"ul",{},[94,95,96,100],"li",{},[97,98,99],"strong",{},"PHP:"," 8.2+",[94,102,103,106],{},[97,104,105],{},"Laravel:"," 12+",[94,108,109,112],{},[97,110,111],{},"Filament:"," 4.x \u002F 5.x",[94,114,115,118],{},[97,116,117],{},"Livewire:"," 3.5+ \u002F 4.x",[86,120,122],{"id":121},"quick-setup","Quick Setup",[124,125,126,131,158,162,191,195,199,212,215,237,241,364,368,375,466,472,557,561,564],"steps",{},[127,128,130],"h3",{"id":129},"install-package","Install Package",[132,133,139],"pre",{"className":134,"code":135,"filename":136,"language":137,"meta":138,"style":138},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","composer require relaticle\u002Fcomments\n","Terminal","bash","",[140,141,142],"code",{"__ignoreMap":138},[143,144,147,151,155],"span",{"class":145,"line":146},"line",1,[143,148,150],{"class":149},"sBMFI","composer",[143,152,154],{"class":153},"sfazB"," require",[143,156,157],{"class":153}," relaticle\u002Fcomments\n",[127,159,161],{"id":160},"publish-and-run-migrations","Publish and Run Migrations",[132,163,165],{"className":134,"code":164,"filename":136,"language":137,"meta":138,"style":138},"php artisan vendor:publish --tag=comments-migrations\nphp artisan migrate\n",[140,166,167,181],{"__ignoreMap":138},[143,168,169,172,175,178],{"class":145,"line":146},[143,170,171],{"class":149},"php",[143,173,174],{"class":153}," artisan",[143,176,177],{"class":153}," vendor:publish",[143,179,180],{"class":153}," --tag=comments-migrations\n",[143,182,184,186,188],{"class":145,"line":183},2,[143,185,171],{"class":149},[143,187,174],{"class":153},[143,189,190],{"class":153}," migrate\n",[127,192,194],{"id":193},"include-css-assets","Include CSS Assets",[196,197,198],"p",{},"Prerequisite: You need a custom Filament theme to include the Comments styles.",[200,201,203,204,211],"alert",{"type":202},"warning","If you haven't set up a custom theme for Filament, follow the ",[205,206,210],"a",{"href":207,"rel":208},"https:\u002F\u002Ffilamentphp.com\u002Fdocs\u002F5.x\u002Fstyling\u002Foverview#creating-a-custom-theme",[209],"nofollow","Filament Docs"," first.",[196,213,214],{},"Add the plugin's views to your theme CSS file:",[132,216,221],{"className":217,"code":218,"filename":219,"language":220,"meta":138,"style":138},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@source \"..\u002F..\u002F..\u002F..\u002Fvendor\u002Frelaticle\u002Fcomments\u002Fresources\u002Fviews\u002F**\u002F*.blade.php\";\n","resources\u002Fcss\u002Ffilament\u002Fadmin\u002Ftheme.css","css",[140,222,223],{"__ignoreMap":138},[143,224,225,229,233],{"class":145,"line":146},[143,226,228],{"class":227},"s7zQu","@source",[143,230,232],{"class":231},"sTEyZ"," \"..\u002F..\u002F..\u002F..\u002Fvendor\u002Frelaticle\u002Fcomments\u002Fresources\u002Fviews\u002F**\u002F*.blade.php\"",[143,234,236],{"class":235},"sMK4o",";\n",[127,238,240],{"id":239},"register-the-plugin","Register the Plugin",[132,242,246],{"className":243,"code":244,"filename":245,"language":171,"meta":138,"style":138},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use Relaticle\\Comments\\CommentsPlugin;\n\npublic function panel(Panel $panel): Panel\n{\n return $panel\n ->plugins([\n CommentsPlugin::make(),\n ]);\n}\n","AdminPanelProvider.php",[140,247,248,270,276,308,314,325,337,352,358],{"__ignoreMap":138},[143,249,250,254,257,260,263,265,268],{"class":145,"line":146},[143,251,253],{"class":252},"sbssI","use",[143,255,256],{"class":231}," Relaticle",[143,258,259],{"class":235},"\\",[143,261,262],{"class":231},"Comments",[143,264,259],{"class":235},[143,266,267],{"class":231},"CommentsPlugin",[143,269,236],{"class":235},[143,271,272],{"class":145,"line":183},[143,273,275],{"emptyLinePlaceholder":274},true,"\n",[143,277,279,283,286,290,293,296,299,302,305],{"class":145,"line":278},3,[143,280,282],{"class":281},"spNyl","public",[143,284,285],{"class":281}," function",[143,287,289],{"class":288},"s2Zo4"," panel",[143,291,292],{"class":235},"(",[143,294,295],{"class":149},"Panel",[143,297,298],{"class":235}," $",[143,300,301],{"class":231},"panel",[143,303,304],{"class":235},"):",[143,306,307],{"class":149}," Panel\n",[143,309,311],{"class":145,"line":310},4,[143,312,313],{"class":235},"{\n",[143,315,317,320,322],{"class":145,"line":316},5,[143,318,319],{"class":227}," return",[143,321,298],{"class":235},[143,323,324],{"class":231},"panel\n",[143,326,328,331,334],{"class":145,"line":327},6,[143,329,330],{"class":235}," ->",[143,332,333],{"class":288},"plugins",[143,335,336],{"class":235},"([\n",[143,338,340,343,346,349],{"class":145,"line":339},7,[143,341,342],{"class":149}," CommentsPlugin",[143,344,345],{"class":235},"::",[143,347,348],{"class":288},"make",[143,350,351],{"class":235},"(),\n",[143,353,355],{"class":145,"line":354},8,[143,356,357],{"class":235}," ]);\n",[143,359,361],{"class":145,"line":360},9,[143,362,363],{"class":235},"}\n",[127,365,367],{"id":366},"set-up-your-models","Set Up Your Models",[196,369,370,371,374],{},"Add the ",[140,372,373],{},"HasComments"," trait to any model you want to comment on:",[132,376,379],{"className":243,"code":377,"filename":378,"language":171,"meta":138,"style":138},"use Relaticle\\Comments\\Concerns\\HasComments;\nuse Relaticle\\Comments\\Contracts\\Commentable;\n\nclass Project extends Model implements Commentable\n{\n use HasComments;\n}\n","app\u002FModels\u002FProject.php",[140,380,381,402,424,428,448,452,462],{"__ignoreMap":138},[143,382,383,385,387,389,391,393,396,398,400],{"class":145,"line":146},[143,384,253],{"class":252},[143,386,256],{"class":231},[143,388,259],{"class":235},[143,390,262],{"class":231},[143,392,259],{"class":235},[143,394,395],{"class":231},"Concerns",[143,397,259],{"class":235},[143,399,373],{"class":231},[143,401,236],{"class":235},[143,403,404,406,408,410,412,414,417,419,422],{"class":145,"line":183},[143,405,253],{"class":252},[143,407,256],{"class":231},[143,409,259],{"class":235},[143,411,262],{"class":231},[143,413,259],{"class":235},[143,415,416],{"class":231},"Contracts",[143,418,259],{"class":235},[143,420,421],{"class":231},"Commentable",[143,423,236],{"class":235},[143,425,426],{"class":145,"line":278},[143,427,275],{"emptyLinePlaceholder":274},[143,429,430,433,436,439,442,445],{"class":145,"line":310},[143,431,432],{"class":281},"class",[143,434,435],{"class":149}," Project",[143,437,438],{"class":281}," extends",[143,440,441],{"class":149}," Model",[143,443,444],{"class":281}," implements",[143,446,447],{"class":149}," Commentable\n",[143,449,450],{"class":145,"line":316},[143,451,313],{"class":235},[143,453,454,457,460],{"class":145,"line":327},[143,455,456],{"class":252}," use",[143,458,459],{"class":231}," HasComments",[143,461,236],{"class":235},[143,463,464],{"class":145,"line":339},[143,465,363],{"class":235},[196,467,370,468,471],{},[140,469,470],{},"IsCommenter"," trait to your User model:",[132,473,476],{"className":243,"code":474,"filename":475,"language":171,"meta":138,"style":138},"use Relaticle\\Comments\\Concerns\\IsCommenter;\nuse Relaticle\\Comments\\Contracts\\Commenter;\n\nclass User extends Authenticatable implements Commenter\n{\n use IsCommenter;\n}\n","app\u002FModels\u002FUser.php",[140,477,478,498,519,523,540,544,553],{"__ignoreMap":138},[143,479,480,482,484,486,488,490,492,494,496],{"class":145,"line":146},[143,481,253],{"class":252},[143,483,256],{"class":231},[143,485,259],{"class":235},[143,487,262],{"class":231},[143,489,259],{"class":235},[143,491,395],{"class":231},[143,493,259],{"class":235},[143,495,470],{"class":231},[143,497,236],{"class":235},[143,499,500,502,504,506,508,510,512,514,517],{"class":145,"line":183},[143,501,253],{"class":252},[143,503,256],{"class":231},[143,505,259],{"class":235},[143,507,262],{"class":231},[143,509,259],{"class":235},[143,511,416],{"class":231},[143,513,259],{"class":235},[143,515,516],{"class":231},"Commenter",[143,518,236],{"class":235},[143,520,521],{"class":145,"line":278},[143,522,275],{"emptyLinePlaceholder":274},[143,524,525,527,530,532,535,537],{"class":145,"line":310},[143,526,432],{"class":281},[143,528,529],{"class":149}," User",[143,531,438],{"class":281},[143,533,534],{"class":149}," Authenticatable",[143,536,444],{"class":281},[143,538,539],{"class":149}," Commenter\n",[143,541,542],{"class":145,"line":316},[143,543,313],{"class":235},[143,545,546,548,551],{"class":145,"line":327},[143,547,456],{"class":252},[143,549,550],{"class":231}," IsCommenter",[143,552,236],{"class":235},[143,554,555],{"class":145,"line":339},[143,556,363],{"class":235},[127,558,560],{"id":559},"add-to-your-resources","Add to Your Resources",[196,562,563],{},"Use the slide-over action on view or edit pages:",[132,565,568],{"className":243,"code":566,"filename":567,"language":171,"meta":138,"style":138},"use Relaticle\\Comments\\Filament\\Actions\\CommentsAction;\n\nprotected function getHeaderActions(): array\n{\n return [\n CommentsAction::make(),\n ];\n}\n","app\u002FFilament\u002FResources\u002FProjectResource\u002FPages\u002FViewProject.php",[140,569,570,597,601,617,621,628,639,644],{"__ignoreMap":138},[143,571,572,574,576,578,580,582,585,587,590,592,595],{"class":145,"line":146},[143,573,253],{"class":252},[143,575,256],{"class":231},[143,577,259],{"class":235},[143,579,262],{"class":231},[143,581,259],{"class":235},[143,583,584],{"class":231},"Filament",[143,586,259],{"class":235},[143,588,589],{"class":231},"Actions",[143,591,259],{"class":235},[143,593,594],{"class":231},"CommentsAction",[143,596,236],{"class":235},[143,598,599],{"class":145,"line":183},[143,600,275],{"emptyLinePlaceholder":274},[143,602,603,606,608,611,614],{"class":145,"line":278},[143,604,605],{"class":281},"protected",[143,607,285],{"class":281},[143,609,610],{"class":288}," getHeaderActions",[143,612,613],{"class":235},"():",[143,615,616],{"class":252}," array\n",[143,618,619],{"class":145,"line":310},[143,620,313],{"class":235},[143,622,623,625],{"class":145,"line":316},[143,624,319],{"class":227},[143,626,627],{"class":235}," [\n",[143,629,630,633,635,637],{"class":145,"line":327},[143,631,632],{"class":149}," CommentsAction",[143,634,345],{"class":235},[143,636,348],{"class":288},[143,638,351],{"class":235},[143,640,641],{"class":145,"line":339},[143,642,643],{"class":235}," ];\n",[143,645,646],{"class":145,"line":354},[143,647,363],{"class":235},[196,649,650,653],{},[97,651,652],{},"Done!"," Visit your Filament panel to see comments in action.",[86,655,657],{"id":656},"optional-configuration","Optional Configuration",[659,660,661,674],"table",{},[662,663,664],"thead",{},[665,666,667,671],"tr",{},[668,669,670],"th",{},"Command",[668,672,673],{},"Action",[675,676,677,688,698],"tbody",{},[665,678,679,685],{},[680,681,682],"td",{},[140,683,684],{},"php artisan vendor:publish --tag=comments-config",[680,686,687],{},"Publish the configuration file",[665,689,690,695],{},[680,691,692],{},[140,693,694],{},"php artisan vendor:publish --tag=comments-views",[680,696,697],{},"Publish the Blade views for customization",[665,699,700,705],{},[680,701,702],{},[140,703,704],{},"php artisan vendor:publish --tag=comments-translations",[680,706,707],{},"Publish the translation files",[709,710,711],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":138,"searchDepth":183,"depth":183,"links":713},[714,715,723],{"id":88,"depth":183,"text":89},{"id":121,"depth":183,"text":122,"children":716},[717,718,719,720,721,722],{"id":129,"depth":278,"text":130},{"id":160,"depth":278,"text":161},{"id":193,"depth":278,"text":194},{"id":239,"depth":278,"text":240},{"id":366,"depth":278,"text":367},{"id":559,"depth":278,"text":560},{"id":656,"depth":183,"text":657},"Get started with Comments in minutes.","md",null,{},{"icon":19},{"description":730,"ogImage":731,"title":16},"Install Comments and add commenting to your Filament resources.","\u002Fpreview.png","P-D2nmzwgaER3VhGsRqb9LLvO_CS3iwjGQuk2_o2Svc",[734,736],{"title":11,"path":12,"stem":13,"description":735,"icon":14,"children":-1},"A full-featured commenting system for Filament panels.",{"title":21,"path":22,"stem":23,"description":737,"icon":24,"children":-1},"Upgrade guide for Comments.",1774606187444] \ No newline at end of file +[{"data":1,"prerenderedAt":738},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":80,"-getting-started-installation-surround":733},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":16,"body":82,"description":724,"extension":725,"links":726,"meta":727,"navigation":728,"path":17,"seo":729,"stem":18,"__hash__":732},"docs\u002F1.getting-started\u002F2.installation.md",{"type":83,"value":84,"toc":712},"minimark",[85,90,119,123,648,654,658,708],[86,87,89],"h2",{"id":88},"requirements","Requirements",[91,92,93,101,107,113],"ul",{},[94,95,96,100],"li",{},[97,98,99],"strong",{},"PHP:"," 8.2+",[94,102,103,106],{},[97,104,105],{},"Laravel:"," 12+",[94,108,109,112],{},[97,110,111],{},"Filament:"," 4.x \u002F 5.x",[94,114,115,118],{},[97,116,117],{},"Livewire:"," 3.5+ \u002F 4.x",[86,120,122],{"id":121},"quick-setup","Quick Setup",[124,125,126,131,158,162,191,195,199,212,215,237,241,364,368,375,466,472,557,561,564],"steps",{},[127,128,130],"h3",{"id":129},"install-package","Install Package",[132,133,139],"pre",{"className":134,"code":135,"filename":136,"language":137,"meta":138,"style":138},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","composer require relaticle\u002Fcomments\n","Terminal","bash","",[140,141,142],"code",{"__ignoreMap":138},[143,144,147,151,155],"span",{"class":145,"line":146},"line",1,[143,148,150],{"class":149},"sBMFI","composer",[143,152,154],{"class":153},"sfazB"," require",[143,156,157],{"class":153}," relaticle\u002Fcomments\n",[127,159,161],{"id":160},"publish-and-run-migrations","Publish and Run Migrations",[132,163,165],{"className":134,"code":164,"filename":136,"language":137,"meta":138,"style":138},"php artisan vendor:publish --tag=comments-migrations\nphp artisan migrate\n",[140,166,167,181],{"__ignoreMap":138},[143,168,169,172,175,178],{"class":145,"line":146},[143,170,171],{"class":149},"php",[143,173,174],{"class":153}," artisan",[143,176,177],{"class":153}," vendor:publish",[143,179,180],{"class":153}," --tag=comments-migrations\n",[143,182,184,186,188],{"class":145,"line":183},2,[143,185,171],{"class":149},[143,187,174],{"class":153},[143,189,190],{"class":153}," migrate\n",[127,192,194],{"id":193},"include-css-assets","Include CSS Assets",[196,197,198],"p",{},"Prerequisite: You need a custom Filament theme to include the Comments styles.",[200,201,203,204,211],"alert",{"type":202},"warning","If you haven't set up a custom theme for Filament, follow the ",[205,206,210],"a",{"href":207,"rel":208},"https:\u002F\u002Ffilamentphp.com\u002Fdocs\u002F5.x\u002Fstyling\u002Foverview#creating-a-custom-theme",[209],"nofollow","Filament Docs"," first.",[196,213,214],{},"Add the plugin's views to your theme CSS file:",[132,216,221],{"className":217,"code":218,"filename":219,"language":220,"meta":138,"style":138},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@source \"..\u002F..\u002F..\u002F..\u002Fvendor\u002Frelaticle\u002Fcomments\u002Fresources\u002Fviews\u002F**\u002F*.blade.php\";\n","resources\u002Fcss\u002Ffilament\u002Fadmin\u002Ftheme.css","css",[140,222,223],{"__ignoreMap":138},[143,224,225,229,233],{"class":145,"line":146},[143,226,228],{"class":227},"s7zQu","@source",[143,230,232],{"class":231},"sTEyZ"," \"..\u002F..\u002F..\u002F..\u002Fvendor\u002Frelaticle\u002Fcomments\u002Fresources\u002Fviews\u002F**\u002F*.blade.php\"",[143,234,236],{"class":235},"sMK4o",";\n",[127,238,240],{"id":239},"register-the-plugin","Register the Plugin",[132,242,246],{"className":243,"code":244,"filename":245,"language":171,"meta":138,"style":138},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use Relaticle\\Comments\\CommentsPlugin;\n\npublic function panel(Panel $panel): Panel\n{\n return $panel\n ->plugins([\n CommentsPlugin::make(),\n ]);\n}\n","AdminPanelProvider.php",[140,247,248,270,276,308,314,325,337,352,358],{"__ignoreMap":138},[143,249,250,254,257,260,263,265,268],{"class":145,"line":146},[143,251,253],{"class":252},"sbssI","use",[143,255,256],{"class":231}," Relaticle",[143,258,259],{"class":235},"\\",[143,261,262],{"class":231},"Comments",[143,264,259],{"class":235},[143,266,267],{"class":231},"CommentsPlugin",[143,269,236],{"class":235},[143,271,272],{"class":145,"line":183},[143,273,275],{"emptyLinePlaceholder":274},true,"\n",[143,277,279,283,286,290,293,296,299,302,305],{"class":145,"line":278},3,[143,280,282],{"class":281},"spNyl","public",[143,284,285],{"class":281}," function",[143,287,289],{"class":288},"s2Zo4"," panel",[143,291,292],{"class":235},"(",[143,294,295],{"class":149},"Panel",[143,297,298],{"class":235}," $",[143,300,301],{"class":231},"panel",[143,303,304],{"class":235},"):",[143,306,307],{"class":149}," Panel\n",[143,309,311],{"class":145,"line":310},4,[143,312,313],{"class":235},"{\n",[143,315,317,320,322],{"class":145,"line":316},5,[143,318,319],{"class":227}," return",[143,321,298],{"class":235},[143,323,324],{"class":231},"panel\n",[143,326,328,331,334],{"class":145,"line":327},6,[143,329,330],{"class":235}," ->",[143,332,333],{"class":288},"plugins",[143,335,336],{"class":235},"([\n",[143,338,340,343,346,349],{"class":145,"line":339},7,[143,341,342],{"class":149}," CommentsPlugin",[143,344,345],{"class":235},"::",[143,347,348],{"class":288},"make",[143,350,351],{"class":235},"(),\n",[143,353,355],{"class":145,"line":354},8,[143,356,357],{"class":235}," ]);\n",[143,359,361],{"class":145,"line":360},9,[143,362,363],{"class":235},"}\n",[127,365,367],{"id":366},"set-up-your-models","Set Up Your Models",[196,369,370,371,374],{},"Add the ",[140,372,373],{},"HasComments"," trait to any model you want to comment on:",[132,376,379],{"className":243,"code":377,"filename":378,"language":171,"meta":138,"style":138},"use Relaticle\\Comments\\Concerns\\HasComments;\nuse Relaticle\\Comments\\Contracts\\Commentable;\n\nclass Project extends Model implements Commentable\n{\n use HasComments;\n}\n","app\u002FModels\u002FProject.php",[140,380,381,402,424,428,448,452,462],{"__ignoreMap":138},[143,382,383,385,387,389,391,393,396,398,400],{"class":145,"line":146},[143,384,253],{"class":252},[143,386,256],{"class":231},[143,388,259],{"class":235},[143,390,262],{"class":231},[143,392,259],{"class":235},[143,394,395],{"class":231},"Concerns",[143,397,259],{"class":235},[143,399,373],{"class":231},[143,401,236],{"class":235},[143,403,404,406,408,410,412,414,417,419,422],{"class":145,"line":183},[143,405,253],{"class":252},[143,407,256],{"class":231},[143,409,259],{"class":235},[143,411,262],{"class":231},[143,413,259],{"class":235},[143,415,416],{"class":231},"Contracts",[143,418,259],{"class":235},[143,420,421],{"class":231},"Commentable",[143,423,236],{"class":235},[143,425,426],{"class":145,"line":278},[143,427,275],{"emptyLinePlaceholder":274},[143,429,430,433,436,439,442,445],{"class":145,"line":310},[143,431,432],{"class":281},"class",[143,434,435],{"class":149}," Project",[143,437,438],{"class":281}," extends",[143,440,441],{"class":149}," Model",[143,443,444],{"class":281}," implements",[143,446,447],{"class":149}," Commentable\n",[143,449,450],{"class":145,"line":316},[143,451,313],{"class":235},[143,453,454,457,460],{"class":145,"line":327},[143,455,456],{"class":252}," use",[143,458,459],{"class":231}," HasComments",[143,461,236],{"class":235},[143,463,464],{"class":145,"line":339},[143,465,363],{"class":235},[196,467,370,468,471],{},[140,469,470],{},"IsCommenter"," trait to your User model:",[132,473,476],{"className":243,"code":474,"filename":475,"language":171,"meta":138,"style":138},"use Relaticle\\Comments\\Concerns\\IsCommenter;\nuse Relaticle\\Comments\\Contracts\\Commenter;\n\nclass User extends Authenticatable implements Commenter\n{\n use IsCommenter;\n}\n","app\u002FModels\u002FUser.php",[140,477,478,498,519,523,540,544,553],{"__ignoreMap":138},[143,479,480,482,484,486,488,490,492,494,496],{"class":145,"line":146},[143,481,253],{"class":252},[143,483,256],{"class":231},[143,485,259],{"class":235},[143,487,262],{"class":231},[143,489,259],{"class":235},[143,491,395],{"class":231},[143,493,259],{"class":235},[143,495,470],{"class":231},[143,497,236],{"class":235},[143,499,500,502,504,506,508,510,512,514,517],{"class":145,"line":183},[143,501,253],{"class":252},[143,503,256],{"class":231},[143,505,259],{"class":235},[143,507,262],{"class":231},[143,509,259],{"class":235},[143,511,416],{"class":231},[143,513,259],{"class":235},[143,515,516],{"class":231},"Commenter",[143,518,236],{"class":235},[143,520,521],{"class":145,"line":278},[143,522,275],{"emptyLinePlaceholder":274},[143,524,525,527,530,532,535,537],{"class":145,"line":310},[143,526,432],{"class":281},[143,528,529],{"class":149}," User",[143,531,438],{"class":281},[143,533,534],{"class":149}," Authenticatable",[143,536,444],{"class":281},[143,538,539],{"class":149}," Commenter\n",[143,541,542],{"class":145,"line":316},[143,543,313],{"class":235},[143,545,546,548,551],{"class":145,"line":327},[143,547,456],{"class":252},[143,549,550],{"class":231}," IsCommenter",[143,552,236],{"class":235},[143,554,555],{"class":145,"line":339},[143,556,363],{"class":235},[127,558,560],{"id":559},"add-to-your-resources","Add to Your Resources",[196,562,563],{},"Use the slide-over action on view or edit pages:",[132,565,568],{"className":243,"code":566,"filename":567,"language":171,"meta":138,"style":138},"use Relaticle\\Comments\\Filament\\Actions\\CommentsAction;\n\nprotected function getHeaderActions(): array\n{\n return [\n CommentsAction::make(),\n ];\n}\n","app\u002FFilament\u002FResources\u002FProjectResource\u002FPages\u002FViewProject.php",[140,569,570,597,601,617,621,628,639,644],{"__ignoreMap":138},[143,571,572,574,576,578,580,582,585,587,590,592,595],{"class":145,"line":146},[143,573,253],{"class":252},[143,575,256],{"class":231},[143,577,259],{"class":235},[143,579,262],{"class":231},[143,581,259],{"class":235},[143,583,584],{"class":231},"Filament",[143,586,259],{"class":235},[143,588,589],{"class":231},"Actions",[143,591,259],{"class":235},[143,593,594],{"class":231},"CommentsAction",[143,596,236],{"class":235},[143,598,599],{"class":145,"line":183},[143,600,275],{"emptyLinePlaceholder":274},[143,602,603,606,608,611,614],{"class":145,"line":278},[143,604,605],{"class":281},"protected",[143,607,285],{"class":281},[143,609,610],{"class":288}," getHeaderActions",[143,612,613],{"class":235},"():",[143,615,616],{"class":252}," array\n",[143,618,619],{"class":145,"line":310},[143,620,313],{"class":235},[143,622,623,625],{"class":145,"line":316},[143,624,319],{"class":227},[143,626,627],{"class":235}," [\n",[143,629,630,633,635,637],{"class":145,"line":327},[143,631,632],{"class":149}," CommentsAction",[143,634,345],{"class":235},[143,636,348],{"class":288},[143,638,351],{"class":235},[143,640,641],{"class":145,"line":339},[143,642,643],{"class":235}," ];\n",[143,645,646],{"class":145,"line":354},[143,647,363],{"class":235},[196,649,650,653],{},[97,651,652],{},"Done!"," Visit your Filament panel to see comments in action.",[86,655,657],{"id":656},"optional-configuration","Optional Configuration",[659,660,661,674],"table",{},[662,663,664],"thead",{},[665,666,667,671],"tr",{},[668,669,670],"th",{},"Command",[668,672,673],{},"Action",[675,676,677,688,698],"tbody",{},[665,678,679,685],{},[680,681,682],"td",{},[140,683,684],{},"php artisan vendor:publish --tag=comments-config",[680,686,687],{},"Publish the configuration file",[665,689,690,695],{},[680,691,692],{},[140,693,694],{},"php artisan vendor:publish --tag=comments-views",[680,696,697],{},"Publish the Blade views for customization",[665,699,700,705],{},[680,701,702],{},[140,703,704],{},"php artisan vendor:publish --tag=comments-translations",[680,706,707],{},"Publish the translation files",[709,710,711],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":138,"searchDepth":183,"depth":183,"links":713},[714,715,723],{"id":88,"depth":183,"text":89},{"id":121,"depth":183,"text":122,"children":716},[717,718,719,720,721,722],{"id":129,"depth":278,"text":130},{"id":160,"depth":278,"text":161},{"id":193,"depth":278,"text":194},{"id":239,"depth":278,"text":240},{"id":366,"depth":278,"text":367},{"id":559,"depth":278,"text":560},{"id":656,"depth":183,"text":657},"Get started with Comments in minutes.","md",null,{},{"icon":19},{"description":730,"ogImage":731,"title":16},"Install Comments and add commenting to your Filament resources.","\u002Fpreview.png","P-D2nmzwgaER3VhGsRqb9LLvO_CS3iwjGQuk2_o2Svc",[734,736],{"title":11,"path":12,"stem":13,"description":735,"icon":14,"children":-1},"A full-featured commenting system for Filament panels.",{"title":21,"path":22,"stem":23,"description":737,"icon":24,"children":-1},"Upgrade guide for Comments.",1774607132745] \ No newline at end of file diff --git a/getting-started/introduction.html b/getting-started/introduction.html index ea80833..a86f210 100644 --- a/getting-started/introduction.html +++ b/getting-started/introduction.html @@ -94,4 +94,4 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Introduction - Comments
Getting Started

Introduction

A full-featured commenting system for Filament panels.

Welcome to Comments, a powerful Laravel package that adds a full-featured commenting system to any Filament panel.

What is Comments?

Comments provides polymorphic commenting on any Eloquent model with deep Filament integration. Add threaded discussions, @mentions, emoji reactions, file attachments, and real-time notifications to your admin panel with minimal setup.

Why Choose Comments?

Threaded Discussions

Nested replies with configurable depth limits keep conversations organized and easy to follow.

Quick Setup

Add traits to your models, register the plugin, and you have a working comment system in minutes.

3 Integration Patterns

Use as a slide-over action, table row action, or inline infolist entry - whatever fits your resource.

Built-in Notifications

Database and mail notifications with subscription management and auto-subscribe for authors and mentioned users.
Copyright © 2026
\ No newline at end of file +}Introduction - Comments
Getting Started

Introduction

A full-featured commenting system for Filament panels.

Welcome to Comments, a powerful Laravel package that adds a full-featured commenting system to any Filament panel.

What is Comments?

Comments provides polymorphic commenting on any Eloquent model with deep Filament integration. Add threaded discussions, @mentions, emoji reactions, file attachments, and real-time notifications to your admin panel with minimal setup.

Why Choose Comments?

Threaded Discussions

Nested replies with configurable depth limits keep conversations organized and easy to follow.

Quick Setup

Add traits to your models, register the plugin, and you have a working comment system in minutes.

3 Integration Patterns

Use as a slide-over action, table row action, or inline infolist entry - whatever fits your resource.

Built-in Notifications

Database and mail notifications with subscription management and auto-subscribe for authors and mentioned users.
Copyright © 2026
\ No newline at end of file diff --git a/getting-started/introduction/_payload.json b/getting-started/introduction/_payload.json index 914742a..f48c547 100644 --- a/getting-started/introduction/_payload.json +++ b/getting-started/introduction/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":147},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-introduction":80,"-getting-started-introduction-surround":144},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":11,"body":82,"description":135,"extension":136,"links":137,"meta":138,"navigation":139,"path":12,"seo":140,"stem":13,"__hash__":143},"docs\u002F1.getting-started\u002F1.introduction.md",{"type":83,"value":84,"toc":129},"minimark",[85,94,99,102,106],[86,87,88,89,93],"p",{},"Welcome to ",[90,91,92],"strong",{},"Comments",", a powerful Laravel package that adds a full-featured commenting system to any Filament panel.",[95,96,98],"h2",{"id":97},"what-is-comments","What is Comments?",[86,100,101],{},"Comments provides polymorphic commenting on any Eloquent model with deep Filament integration. Add threaded discussions, @mentions, emoji reactions, file attachments, and real-time notifications to your admin panel with minimal setup.",[95,103,105],{"id":104},"why-choose-comments","Why Choose Comments?",[107,108,109,115,120,125],"card-group",{},[110,111,114],"card",{"icon":112,"title":113},"i-lucide-messages-square","Threaded Discussions","Nested replies with configurable depth limits keep conversations organized and easy to follow.",[110,116,119],{"icon":117,"title":118},"i-lucide-clock","Quick Setup","Add traits to your models, register the plugin, and you have a working comment system in minutes.",[110,121,124],{"icon":122,"title":123},"i-lucide-puzzle","3 Integration Patterns","Use as a slide-over action, table row action, or inline infolist entry - whatever fits your resource.",[110,126,128],{"icon":59,"title":127},"Built-in Notifications","Database and mail notifications with subscription management and auto-subscribe for authors and mentioned users.",{"title":130,"searchDepth":131,"depth":131,"links":132},"",2,[133,134],{"id":97,"depth":131,"text":98},{"id":104,"depth":131,"text":105},"A full-featured commenting system for Filament panels.","md",null,{},{"icon":14},{"title":11,"description":141,"ogImage":142},"Learn about Comments - a full-featured commenting system for Filament panels with threaded replies, @mentions, emoji reactions, and real-time updates.","\u002Fpreview.png","6eZJf_TpqGxPgrJEFN3Q_zLaPhqa1QmWrn9m5QqijF0",[137,145],{"title":16,"path":17,"stem":18,"description":146,"icon":19,"children":-1},"Get started with Comments in minutes.",1774606188038] \ No newline at end of file +[{"data":1,"prerenderedAt":147},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-introduction":80,"-getting-started-introduction-surround":144},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":11,"body":82,"description":135,"extension":136,"links":137,"meta":138,"navigation":139,"path":12,"seo":140,"stem":13,"__hash__":143},"docs\u002F1.getting-started\u002F1.introduction.md",{"type":83,"value":84,"toc":129},"minimark",[85,94,99,102,106],[86,87,88,89,93],"p",{},"Welcome to ",[90,91,92],"strong",{},"Comments",", a powerful Laravel package that adds a full-featured commenting system to any Filament panel.",[95,96,98],"h2",{"id":97},"what-is-comments","What is Comments?",[86,100,101],{},"Comments provides polymorphic commenting on any Eloquent model with deep Filament integration. Add threaded discussions, @mentions, emoji reactions, file attachments, and real-time notifications to your admin panel with minimal setup.",[95,103,105],{"id":104},"why-choose-comments","Why Choose Comments?",[107,108,109,115,120,125],"card-group",{},[110,111,114],"card",{"icon":112,"title":113},"i-lucide-messages-square","Threaded Discussions","Nested replies with configurable depth limits keep conversations organized and easy to follow.",[110,116,119],{"icon":117,"title":118},"i-lucide-clock","Quick Setup","Add traits to your models, register the plugin, and you have a working comment system in minutes.",[110,121,124],{"icon":122,"title":123},"i-lucide-puzzle","3 Integration Patterns","Use as a slide-over action, table row action, or inline infolist entry - whatever fits your resource.",[110,126,128],{"icon":59,"title":127},"Built-in Notifications","Database and mail notifications with subscription management and auto-subscribe for authors and mentioned users.",{"title":130,"searchDepth":131,"depth":131,"links":132},"",2,[133,134],{"id":97,"depth":131,"text":98},{"id":104,"depth":131,"text":105},"A full-featured commenting system for Filament panels.","md",null,{},{"icon":14},{"title":11,"description":141,"ogImage":142},"Learn about Comments - a full-featured commenting system for Filament panels with threaded replies, @mentions, emoji reactions, and real-time updates.","\u002Fpreview.png","6eZJf_TpqGxPgrJEFN3Q_zLaPhqa1QmWrn9m5QqijF0",[137,145],{"title":16,"path":17,"stem":18,"description":146,"icon":19,"children":-1},"Get started with Comments in minutes.",1774607133407] \ No newline at end of file diff --git a/getting-started/upgrading.html b/getting-started/upgrading.html index 19fdd5e..7423c6c 100644 --- a/getting-started/upgrading.html +++ b/getting-started/upgrading.html @@ -94,4 +94,4 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Upgrading - Comments
Getting Started

Upgrading

Upgrade guide for Comments.

1.x

This is the initial release of Comments. Future upgrade guides will be documented here as new versions are released.

Copyright © 2026
\ No newline at end of file +}Upgrading - Comments
Getting Started

Upgrading

Upgrade guide for Comments.

1.x

This is the initial release of Comments. Future upgrade guides will be documented here as new versions are released.

Copyright © 2026
\ No newline at end of file diff --git a/getting-started/upgrading/_payload.json b/getting-started/upgrading/_payload.json index 9dff5d7..513625c 100644 --- a/getting-started/upgrading/_payload.json +++ b/getting-started/upgrading/_payload.json @@ -1 +1 @@ -[{"data":1,"prerenderedAt":112},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-upgrading":80,"-getting-started-upgrading-surround":107},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":21,"body":82,"description":99,"extension":100,"links":101,"meta":102,"navigation":103,"path":22,"seo":104,"stem":23,"__hash__":106},"docs\u002F1.getting-started\u002F3.upgrading.md",{"type":83,"value":84,"toc":94},"minimark",[85,90],[86,87,89],"h2",{"id":88},"_1x","1.x",[91,92,93],"p",{},"This is the initial release of Comments. Future upgrade guides will be documented here as new versions are released.",{"title":95,"searchDepth":96,"depth":96,"links":97},"",2,[98],{"id":88,"depth":96,"text":89},"Upgrade guide for Comments.","md",null,{},{"icon":24},{"description":105,"title":21},"How to upgrade Comments between versions.","WRPY70h_uCwuGQCscqg2hKh33EW3Mw7hxSY_P7K6bQI",[108,110],{"title":16,"path":17,"stem":18,"description":109,"icon":19,"children":-1},"Get started with Comments in minutes.",{"title":31,"path":32,"stem":33,"description":111,"icon":34,"children":-1},"Configure threading, reactions, mentions, attachments, notifications, and more.",1774606188039] \ No newline at end of file +[{"data":1,"prerenderedAt":112},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-upgrading":80,"-getting-started-upgrading-surround":107},[4,25,65],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-home",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F3.upgrading","i-lucide-arrow-up-circle",{"title":26,"path":27,"stem":28,"children":29,"page":6},"Essentials","\u002Fessentials","2.essentials",[30,35,40,45,50,55,60],{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":41,"path":42,"stem":43,"icon":44},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":46,"path":47,"stem":48,"icon":49},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":51,"path":52,"stem":53,"icon":54},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":56,"path":57,"stem":58,"icon":59},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":61,"path":62,"stem":63,"icon":64},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":66,"path":67,"stem":68,"children":69,"page":6},"Community","\u002Fcommunity","4.community",[70,75],{"title":71,"path":72,"stem":73,"icon":74},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":76,"path":77,"stem":78,"icon":79},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":81,"title":21,"body":82,"description":99,"extension":100,"links":101,"meta":102,"navigation":103,"path":22,"seo":104,"stem":23,"__hash__":106},"docs\u002F1.getting-started\u002F3.upgrading.md",{"type":83,"value":84,"toc":94},"minimark",[85,90],[86,87,89],"h2",{"id":88},"_1x","1.x",[91,92,93],"p",{},"This is the initial release of Comments. Future upgrade guides will be documented here as new versions are released.",{"title":95,"searchDepth":96,"depth":96,"links":97},"",2,[98],{"id":88,"depth":96,"text":89},"Upgrade guide for Comments.","md",null,{},{"icon":24},{"description":105,"title":21},"How to upgrade Comments between versions.","WRPY70h_uCwuGQCscqg2hKh33EW3Mw7hxSY_P7K6bQI",[108,110],{"title":16,"path":17,"stem":18,"description":109,"icon":19,"children":-1},"Get started with Comments in minutes.",{"title":31,"path":32,"stem":33,"description":111,"icon":34,"children":-1},"Configure threading, reactions, mentions, attachments, notifications, and more.",1774607133407] \ No newline at end of file diff --git a/index.html b/index.html index cb49136..8b5ccd1 100644 --- a/index.html +++ b/index.html @@ -94,4 +94,4 @@ --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); } -}Filament Comments System - Comments

Comments

A full-featured commenting system for Filament panels with threaded replies, @mentions, emoji reactions, and real-time updates.

Drop-in integration with any Filament resource.

Why choose Comments?

    Threaded Replies
    Nested comment threads with configurable depth limits. Users can reply to specific comments creating organized discussions.
    @Mentions
    Autocomplete user mentions with a customizable resolver interface. Dispatches events for notification handling.
    Emoji Reactions
    Six built-in emoji reactions with a configurable set. Users can react to comments with a single click.
    File Attachments
    Upload images and documents to comments with configurable storage, size limits, and MIME type validation.
    Real-time Updates
    Optional broadcasting via private channels with automatic polling fallback. Comments stay in sync across sessions.
    Full Filament Integration
    Three integration patterns: slide-over action, table row action, and infolist entry. Works with any Filament resource.

Our Ecosystem

Extend your Laravel applications with our ecosystem of complementary tools

FilaForms

Visual form builder for all your public-facing forms.

Custom Fields

Let users add custom fields to any model without code changes.

Flowforge

Transform any Laravel model into a drag-and-drop Kanban board.
Copyright © 2026
\ No newline at end of file +}Filament Comments System - Comments

Comments

A full-featured commenting system for Filament panels with threaded replies, @mentions, emoji reactions, and real-time updates.

Drop-in integration with any Filament resource.

Why choose Comments?

    Threaded Replies
    Nested comment threads with configurable depth limits. Users can reply to specific comments creating organized discussions.
    @Mentions
    Autocomplete user mentions with a customizable resolver interface. Dispatches events for notification handling.
    Emoji Reactions
    Six built-in emoji reactions with a configurable set. Users can react to comments with a single click.
    File Attachments
    Upload images and documents to comments with configurable storage, size limits, and MIME type validation.
    Real-time Updates
    Optional broadcasting via private channels with automatic polling fallback. Comments stay in sync across sessions.
    Full Filament Integration
    Three integration patterns: slide-over action, table row action, and infolist entry. Works with any Filament resource.

Our Ecosystem

Extend your Laravel applications with our ecosystem of complementary tools

FilaForms

Visual form builder for all your public-facing forms.

Custom Fields

Let users add custom fields to any model without code changes.

Flowforge

Transform any Laravel model into a drag-and-drop Kanban board.
Copyright © 2026
\ No newline at end of file diff --git a/logo-dark.svg b/logo-dark.svg new file mode 100644 index 0000000..624c93b --- /dev/null +++ b/logo-dark.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + Comments + + + + + + + + + + + + + + + + diff --git a/logo-light.svg b/logo-light.svg new file mode 100644 index 0000000..61659a0 --- /dev/null +++ b/logo-light.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + Comments + + + + + + + + + + + + + + + +