[{"data":1,"prerenderedAt":587},["ShallowReactive",2],{"navigation_docs":3,"-essentials-components":85,"-essentials-components-surround":582},[4,20,45,70],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","i-lucide-download",{"title":16,"path":17,"stem":18,"icon":19},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F2.quick-start","i-lucide-play",{"title":21,"path":22,"stem":23,"children":24,"page":6},"Essentials","\u002Fessentials","2.essentials",[25,30,35,40],{"title":26,"path":27,"stem":28,"icon":29},"Core Concepts","\u002Fessentials\u002Fcore-concepts","2.essentials\u002F1.core-concepts","i-lucide-book-open",{"title":31,"path":32,"stem":33,"icon":34},"Data Sources","\u002Fessentials\u002Fdata-sources","2.essentials\u002F2.data-sources","i-lucide-database",{"title":36,"path":37,"stem":38,"icon":39},"Refining the Timeline","\u002Fessentials\u002Frefining-the-timeline","2.essentials\u002F3.refining-the-timeline","i-lucide-filter",{"title":41,"path":42,"stem":43,"icon":44},"Components","\u002Fessentials\u002Fcomponents","2.essentials\u002F4.components","i-lucide-layout-panel-left",{"title":46,"path":47,"stem":48,"children":49,"page":6},"Customization","\u002Fcustomization","3.customization",[50,55,60,65],{"title":51,"path":52,"stem":53,"icon":54},"Custom Renderers","\u002Fcustomization\u002Fcustom-renderers","3.customization\u002F1.custom-renderers","i-lucide-paintbrush",{"title":56,"path":57,"stem":58,"icon":59},"Caching","\u002Fcustomization\u002Fcaching","3.customization\u002F2.caching","i-lucide-database-zap",{"title":61,"path":62,"stem":63,"icon":64},"Configuration","\u002Fcustomization\u002Fconfiguration","3.customization\u002F3.configuration","i-lucide-settings",{"title":66,"path":67,"stem":68,"icon":69},"Tailwind","\u002Fcustomization\u002Ftailwind","3.customization\u002F4.tailwind","i-simple-icons-tailwindcss",{"title":71,"path":72,"stem":73,"children":74,"page":6},"Advanced","\u002Fadvanced","4.advanced",[75,80],{"title":76,"path":77,"stem":78,"icon":79},"Performance Notes","\u002Fadvanced\u002Fperformance","4.advanced\u002F1.performance","i-lucide-gauge",{"title":81,"path":82,"stem":83,"icon":84},"Testing","\u002Fadvanced\u002Ftesting","4.advanced\u002F2.testing","i-lucide-flask-conical",{"id":86,"title":41,"body":87,"description":575,"extension":576,"links":577,"meta":578,"navigation":579,"path":42,"seo":580,"stem":43,"__hash__":581},"docs\u002F2.essentials\u002F4.components.md",{"type":88,"value":89,"toc":567},"minimark",[90,95,108,294,302,309,333,337,340,433,446,453,474,478,481,560,563],[91,92,94],"h2",{"id":93},"infolist-component","Infolist component",[96,97,98,99,103,104,107],"p",{},"One infolist entry is shipped. It calls ",[100,101,102],"code",{},"$record->timeline()"," and requires ",[100,105,106],{},"HasTimeline",".",[109,110,115],"pre",{"className":111,"code":112,"language":113,"meta":114,"style":114},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use Relaticle\\ActivityLog\\Filament\\Infolists\\Components\\ActivityLog;\n\nActivityLog::make('activity')\n    ->heading('Activity')\n    ->groupByDate()                  \u002F\u002F bucket by today \u002F this week \u002F older (default: true)\n    ->perPage(20)                    \u002F\u002F Livewire page size (default: 3)\n    ->emptyState('No activity yet.') \u002F\u002F custom empty-state message\n    ->infiniteScroll(true)           \u002F\u002F false renders a \"Load more\" button (default: true)\n    ->columnSpanFull();\n","php","",[100,116,117,158,165,193,213,228,247,269,283],{"__ignoreMap":114},[118,119,122,126,130,134,137,139,142,144,147,149,151,153,155],"span",{"class":120,"line":121},"line",1,[118,123,125],{"class":124},"sbssI","use",[118,127,129],{"class":128},"sTEyZ"," Relaticle",[118,131,133],{"class":132},"sMK4o","\\",[118,135,136],{"class":128},"ActivityLog",[118,138,133],{"class":132},[118,140,141],{"class":128},"Filament",[118,143,133],{"class":132},[118,145,146],{"class":128},"Infolists",[118,148,133],{"class":132},[118,150,41],{"class":128},[118,152,133],{"class":132},[118,154,136],{"class":128},[118,156,157],{"class":132},";\n",[118,159,161],{"class":120,"line":160},2,[118,162,164],{"emptyLinePlaceholder":163},true,"\n",[118,166,168,171,174,178,181,184,188,190],{"class":120,"line":167},3,[118,169,136],{"class":170},"sBMFI",[118,172,173],{"class":132},"::",[118,175,177],{"class":176},"s2Zo4","make",[118,179,180],{"class":132},"(",[118,182,183],{"class":132},"'",[118,185,187],{"class":186},"sfazB","activity",[118,189,183],{"class":132},[118,191,192],{"class":132},")\n",[118,194,196,199,202,204,206,209,211],{"class":120,"line":195},4,[118,197,198],{"class":132},"    ->",[118,200,201],{"class":176},"heading",[118,203,180],{"class":132},[118,205,183],{"class":132},[118,207,208],{"class":186},"Activity",[118,210,183],{"class":132},[118,212,192],{"class":132},[118,214,216,218,221,224],{"class":120,"line":215},5,[118,217,198],{"class":132},[118,219,220],{"class":176},"groupByDate",[118,222,223],{"class":132},"()",[118,225,227],{"class":226},"sHwdD","                  \u002F\u002F bucket by today \u002F this week \u002F older (default: true)\n",[118,229,231,233,236,238,241,244],{"class":120,"line":230},6,[118,232,198],{"class":132},[118,234,235],{"class":176},"perPage",[118,237,180],{"class":132},[118,239,240],{"class":124},"20",[118,242,243],{"class":132},")",[118,245,246],{"class":226},"                    \u002F\u002F Livewire page size (default: 3)\n",[118,248,250,252,255,257,259,262,264,266],{"class":120,"line":249},7,[118,251,198],{"class":132},[118,253,254],{"class":176},"emptyState",[118,256,180],{"class":132},[118,258,183],{"class":132},[118,260,261],{"class":186},"No activity yet.",[118,263,183],{"class":132},[118,265,243],{"class":132},[118,267,268],{"class":226}," \u002F\u002F custom empty-state message\n",[118,270,272,274,277,280],{"class":120,"line":271},8,[118,273,198],{"class":132},[118,275,276],{"class":176},"infiniteScroll",[118,278,279],{"class":132},"(true)",[118,281,282],{"class":226},"           \u002F\u002F false renders a \"Load more\" button (default: true)\n",[118,284,286,288,291],{"class":120,"line":285},9,[118,287,198],{"class":132},[118,289,290],{"class":176},"columnSpanFull",[118,292,293],{"class":132},"();\n",[295,296,298,299],"h3",{"id":297},"pagination-ux-infinitescrollbool","Pagination UX: ",[100,300,301],{},"infiniteScroll(bool)",[96,303,304,305,308],{},"The ",[100,306,307],{},"infiniteScroll()"," fluent flag switches the bottom control:",[310,311,312,323],"ul",{},[313,314,315,318,319,322],"li",{},[100,316,317],{},"true"," (default) - renders a ",[100,320,321],{},"wire:intersect"," sentinel; the next page loads automatically as the user scrolls (Livewire 4).",[313,324,325,328,329,332],{},[100,326,327],{},"false"," - renders a ",[100,330,331],{},"Load more"," button the user clicks.",[91,334,336],{"id":335},"relation-manager","Relation manager",[96,338,339],{},"A read-only relation manager renders the activity log as a tab on the resource's view\u002Fedit page:",[109,341,343],{"className":111,"code":342,"language":113,"meta":114,"style":114},"use Relaticle\\ActivityLog\\Filament\\RelationManagers\\ActivityLogRelationManager;\n\npublic static function getRelations(): array\n{\n    return [\n        ActivityLogRelationManager::class,\n    ];\n}\n",[100,344,345,371,375,396,401,410,423,428],{"__ignoreMap":114},[118,346,347,349,351,353,355,357,359,361,364,366,369],{"class":120,"line":121},[118,348,125],{"class":124},[118,350,129],{"class":128},[118,352,133],{"class":132},[118,354,136],{"class":128},[118,356,133],{"class":132},[118,358,141],{"class":128},[118,360,133],{"class":132},[118,362,363],{"class":128},"RelationManagers",[118,365,133],{"class":132},[118,367,368],{"class":128},"ActivityLogRelationManager",[118,370,157],{"class":132},[118,372,373],{"class":120,"line":160},[118,374,164],{"emptyLinePlaceholder":163},[118,376,377,381,384,387,390,393],{"class":120,"line":167},[118,378,380],{"class":379},"spNyl","public",[118,382,383],{"class":379}," static",[118,385,386],{"class":379}," function",[118,388,389],{"class":176}," getRelations",[118,391,392],{"class":132},"():",[118,394,395],{"class":124}," array\n",[118,397,398],{"class":120,"line":195},[118,399,400],{"class":132},"{\n",[118,402,403,407],{"class":120,"line":215},[118,404,406],{"class":405},"s7zQu","    return",[118,408,409],{"class":132}," [\n",[118,411,412,415,417,420],{"class":120,"line":230},[118,413,414],{"class":170},"        ActivityLogRelationManager",[118,416,173],{"class":132},[118,418,419],{"class":124},"class",[118,421,422],{"class":132},",\n",[118,424,425],{"class":120,"line":249},[118,426,427],{"class":132},"    ];\n",[118,429,430],{"class":120,"line":271},[118,431,432],{"class":132},"}\n",[96,434,435,438,439,441,442,445],{},[100,436,437],{},"canViewForRecord()"," always returns ",[100,440,317],{},". It declares a dummy ",[100,443,444],{},"HasOne"," relationship so it doesn't write to the DB - the page just hosts the Livewire component.",[96,447,448,449,452],{},"The relation manager carries a ",[100,450,451],{},"protected static bool $infiniteScroll = true"," that is forwarded to the Livewire component. Flip it from a service provider if you want the opposite UX:",[109,454,456],{"className":111,"code":455,"language":113,"meta":114,"style":114},"ActivityLogRelationManager::$infiniteScroll = false;\n",[100,457,458],{"__ignoreMap":114},[118,459,460,462,465,468,471],{"class":120,"line":121},[118,461,368],{"class":170},[118,463,464],{"class":132},"::$",[118,466,467],{"class":128},"infiniteScroll ",[118,469,470],{"class":132},"=",[118,472,473],{"class":132}," false;\n",[91,475,477],{"id":476},"header-action","Header action",[96,479,480],{},"Show the activity log in a slide-over modal from any resource table or page header:",[109,482,484],{"className":111,"code":483,"language":113,"meta":114,"style":114},"use Relaticle\\ActivityLog\\Filament\\Actions\\ActivityLogAction;\n\nprotected function getHeaderActions(): array\n{\n    return [\n        ActivityLogAction::make(),\n    ];\n}\n",[100,485,486,512,516,530,534,540,552,556],{"__ignoreMap":114},[118,487,488,490,492,494,496,498,500,502,505,507,510],{"class":120,"line":121},[118,489,125],{"class":124},[118,491,129],{"class":128},[118,493,133],{"class":132},[118,495,136],{"class":128},[118,497,133],{"class":132},[118,499,141],{"class":128},[118,501,133],{"class":132},[118,503,504],{"class":128},"Actions",[118,506,133],{"class":132},[118,508,509],{"class":128},"ActivityLogAction",[118,511,157],{"class":132},[118,513,514],{"class":120,"line":160},[118,515,164],{"emptyLinePlaceholder":163},[118,517,518,521,523,526,528],{"class":120,"line":167},[118,519,520],{"class":379},"protected",[118,522,386],{"class":379},[118,524,525],{"class":176}," getHeaderActions",[118,527,392],{"class":132},[118,529,395],{"class":124},[118,531,532],{"class":120,"line":195},[118,533,400],{"class":132},[118,535,536,538],{"class":120,"line":215},[118,537,406],{"class":405},[118,539,409],{"class":132},[118,541,542,545,547,549],{"class":120,"line":230},[118,543,544],{"class":170},"        ActivityLogAction",[118,546,173],{"class":132},[118,548,177],{"class":176},[118,550,551],{"class":132},"(),\n",[118,553,554],{"class":120,"line":249},[118,555,427],{"class":132},[118,557,558],{"class":120,"line":271},[118,559,432],{"class":132},[96,561,562],{},"The action opens a 2XL slide-over with the Livewire component. Customize label\u002Ficon\u002Fmodal width as with any Filament action.",[564,565,566],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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":114,"searchDepth":160,"depth":160,"links":568},[569,573,574],{"id":93,"depth":160,"text":94,"children":570},[571],{"id":297,"depth":167,"text":572},"Pagination UX: infiniteScroll(bool)",{"id":335,"depth":160,"text":336},{"id":476,"depth":160,"text":477},"Infolist component, relation manager, and header action.","md",null,{},{"icon":44},{"title":41,"description":575},"xiUvgfgz_qZxDdTOZDbR1QrzM6IZ9BYKb-9Lu6-yNu0",[583,585],{"title":36,"path":37,"stem":38,"description":584,"icon":39,"children":-1},"Filters, sorting, and deduplication.",{"title":51,"path":52,"stem":53,"description":586,"icon":54,"children":-1},"Register renderers per event or type.",1776704455777]