[{"data":1,"prerenderedAt":2670},["ShallowReactive",2],{"navigation_docs":3,"-essentials-sources":111,"-essentials-sources-surround":2665},[4,20,30,66,82,89,96],{"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-rocket",{"title":21,"icon":22,"path":23,"stem":24,"children":25,"page":6},"Concepts","i-lucide-compass","\u002Fconcepts","2.concepts",[26],{"title":27,"path":28,"stem":29,"icon":22},"How it works","\u002Fconcepts\u002Fhow-it-works","2.concepts\u002F1.how-it-works",{"title":31,"icon":32,"path":33,"stem":34,"children":35,"page":6},"Essentials","i-lucide-book-open","\u002Fessentials","3.essentials",[36,41,46,51,56,61],{"title":37,"path":38,"stem":39,"icon":40},"Sources","\u002Fessentials\u002Fsources","3.essentials\u002F1.sources","i-lucide-layers",{"title":42,"path":43,"stem":44,"icon":45},"Filament UI","\u002Fessentials\u002Ffilament-ui","3.essentials\u002F2.filament-ui","i-lucide-layout-dashboard",{"title":47,"path":48,"stem":49,"icon":50},"Refining the timeline","\u002Fessentials\u002Frefining-the-timeline","3.essentials\u002F3.refining-the-timeline","i-lucide-filter",{"title":52,"path":53,"stem":54,"icon":55},"Customization","\u002Fessentials\u002Fcustomization","3.essentials\u002F4.customization","i-lucide-paintbrush",{"title":57,"path":58,"stem":59,"icon":60},"Caching","\u002Fessentials\u002Fcaching","3.essentials\u002F5.caching","i-lucide-database",{"title":62,"path":63,"stem":64,"icon":65},"Configuration","\u002Fessentials\u002Fconfiguration","3.essentials\u002F6.configuration","i-lucide-settings",{"title":67,"icon":68,"path":69,"stem":70,"children":71,"page":6},"Recipes","i-lucide-chef-hat","\u002Frecipes","4.recipes",[72,77],{"title":73,"path":74,"stem":75,"icon":76},"CRM person feed","\u002Frecipes\u002Fcrm-person-feed","4.recipes\u002F1.crm-person-feed","i-lucide-users",{"title":78,"path":79,"stem":80,"icon":81},"Audit log for admins","\u002Frecipes\u002Faudit-log-for-admins","4.recipes\u002F2.audit-log-for-admins","i-lucide-shield",{"title":83,"path":84,"stem":85,"children":86,"icon":88},"Testing","\u002Ftesting","5.testing\u002F1.index",[87],{"title":83,"path":84,"stem":85,"icon":88},"i-lucide-flask-conical",{"title":90,"path":91,"stem":92,"children":93,"icon":95},"Troubleshooting","\u002Ftroubleshooting","6.troubleshooting\u002F1.index",[94],{"title":90,"path":91,"stem":92,"icon":95},"i-lucide-life-buoy",{"title":97,"path":98,"stem":99,"children":100,"page":6},"Community","\u002Fcommunity","7.community",[101,106],{"title":102,"path":103,"stem":104,"icon":105},"Contributing","\u002Fcommunity\u002Fcontributing","7.community\u002F1.contributing","i-lucide-heart-handshake",{"title":107,"path":108,"stem":109,"icon":110},"License","\u002Fcommunity\u002Flicense","7.community\u002F2.license","i-lucide-scale",{"id":112,"title":37,"body":113,"description":2656,"extension":2657,"links":2658,"meta":2659,"navigation":2660,"path":38,"seo":2661,"stem":39,"__hash__":2664},"docs\u002F3.essentials\u002F1.sources.md",{"type":114,"value":115,"toc":2644},"minimark",[116,141,148,155,204,255,277,307,321,327,333,376,440,450,476,502,508,514,565,1078,1085,1186,1204,1210,1220,1259,1798,1816,1832,1838,1845,2445,2487,2497,2504,2517,2629,2640],[117,118,119,120,124,125,128,129,132,133,136,137,140],"p",{},"Sources own where entries come from. The ",[121,122,123],"code",{},"Relaticle\\ActivityLog\\Timeline\\TimelineBuilder"," composes one or more sources, asks each to ",[121,126,127],{},"resolve()"," inside a shared ",[121,130,131],{},"Window",", and merges the streams. This page covers every built-in source plus the ",[121,134,135],{},"addSource()"," extension hook. For dedup mechanics, source-priority defaults, and the entry-type taxonomy, see ",[138,139,28],"a",{"href":28},".",[142,143,145],"h2",{"id":144},"fromactivitylog",[121,146,147],{},"fromActivityLog()",[117,149,150,151,154],{},"Registers ",[121,152,153],{},"Relaticle\\ActivityLog\\Timeline\\Sources\\ActivityLogSource"," — the subject's own spatie activity log.",[156,157,162],"pre",{"className":158,"code":159,"language":160,"meta":161,"style":161},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","public function fromActivityLog(?int $priority = null): self\n","php","",[121,163,164],{"__ignoreMap":161},[165,166,169,173,176,180,184,188,191,195,198,201],"span",{"class":167,"line":168},"line",1,[165,170,172],{"class":171},"spNyl","public",[165,174,175],{"class":171}," function",[165,177,179],{"class":178},"s2Zo4"," fromActivityLog",[165,181,183],{"class":182},"sMK4o","(?",[165,185,187],{"class":186},"sbssI","int",[165,189,190],{"class":182}," $",[165,192,194],{"class":193},"sTEyZ","priority ",[165,196,197],{"class":182},"=",[165,199,200],{"class":182}," null):",[165,202,203],{"class":171}," self\n",[156,205,207],{"className":158,"code":206,"language":160,"meta":161,"style":161},"$entries = $record->timeline()\n    ->fromActivityLog()\n    ->get();\n",[121,208,209,233,244],{"__ignoreMap":161},[165,210,211,214,217,219,221,224,227,230],{"class":167,"line":168},[165,212,213],{"class":182},"$",[165,215,216],{"class":193},"entries ",[165,218,197],{"class":182},[165,220,190],{"class":182},[165,222,223],{"class":193},"record",[165,225,226],{"class":182},"->",[165,228,229],{"class":178},"timeline",[165,231,232],{"class":182},"()\n",[165,234,236,239,242],{"class":167,"line":235},2,[165,237,238],{"class":182},"    ->",[165,240,241],{"class":178},"fromActivityLog",[165,243,232],{"class":182},[165,245,247,249,252],{"class":167,"line":246},3,[165,248,238],{"class":182},[165,250,251],{"class":178},"get",[165,253,254],{"class":182},"();\n",[117,256,257,258,261,262,265,266,269,270,273,274,140],{},"Reads from the ",[121,259,260],{},"activity_log"," table where ",[121,263,264],{},"subject_type"," and ",[121,267,268],{},"subject_id"," match the subject. Each row becomes a ",[121,271,272],{},"TimelineEntry"," with ",[121,275,276],{},"type='activity_log'",[278,279,282,286,287,290,291,294,295,298,299,302,303,306],"callout",{"color":280,"icon":281},"warning","i-lucide-alert-triangle",[283,284,285],"strong",{},"Subject must be persisted."," ",[121,288,289],{},"ActivityLogSource::resolve()"," throws a ",[121,292,293],{},"DomainException"," when ",[121,296,297],{},"$subject->getKey() === null",". Don't call ",[121,300,301],{},"timeline()"," from a ",[121,304,305],{},"creating"," model event or on a fresh, unsaved instance.",[117,308,309,312,313,316,317,320],{},[121,310,311],{},"$priority"," overrides the default of ",[121,314,315],{},"10"," (see ",[121,318,319],{},"source_priorities.activity_log",").",[142,322,324],{"id":323},"fromactivitylogofarray-relations",[121,325,326],{},"fromActivityLogOf(array $relations)",[117,328,150,329,332],{},[121,330,331],{},"Relaticle\\ActivityLog\\Timeline\\Sources\\RelatedActivityLogSource"," — spatie activity-log entries that belong to the subject's related models.",[156,334,336],{"className":158,"code":335,"language":160,"meta":161,"style":161},"public function fromActivityLogOf(array $relations, ?int $priority = null): self\n",[121,337,338],{"__ignoreMap":161},[165,339,340,342,344,347,350,353,355,358,361,364,366,368,370,372,374],{"class":167,"line":168},[165,341,172],{"class":171},[165,343,175],{"class":171},[165,345,346],{"class":178}," fromActivityLogOf",[165,348,349],{"class":182},"(",[165,351,352],{"class":186},"array",[165,354,190],{"class":182},[165,356,357],{"class":193},"relations",[165,359,360],{"class":182},",",[165,362,363],{"class":182}," ?",[165,365,187],{"class":186},[165,367,190],{"class":182},[165,369,194],{"class":193},[165,371,197],{"class":182},[165,373,200],{"class":182},[165,375,203],{"class":171},[156,377,379],{"className":158,"code":378,"language":160,"meta":161,"style":161},"$entries = $opportunity->timeline()\n    ->fromActivityLogOf(['comments', 'tasks'])\n    ->get();\n",[121,380,381,400,432],{"__ignoreMap":161},[165,382,383,385,387,389,391,394,396,398],{"class":167,"line":168},[165,384,213],{"class":182},[165,386,216],{"class":193},[165,388,197],{"class":182},[165,390,190],{"class":182},[165,392,393],{"class":193},"opportunity",[165,395,226],{"class":182},[165,397,229],{"class":178},[165,399,232],{"class":182},[165,401,402,404,407,410,413,417,419,421,424,427,429],{"class":167,"line":235},[165,403,238],{"class":182},[165,405,406],{"class":178},"fromActivityLogOf",[165,408,409],{"class":182},"([",[165,411,412],{"class":182},"'",[165,414,416],{"class":415},"sfazB","comments",[165,418,412],{"class":182},[165,420,360],{"class":182},[165,422,423],{"class":182}," '",[165,425,426],{"class":415},"tasks",[165,428,412],{"class":182},[165,430,431],{"class":182},"])\n",[165,433,434,436,438],{"class":167,"line":246},[165,435,238],{"class":182},[165,437,251],{"class":178},[165,439,254],{"class":182},[117,441,442,443,445,446,449],{},"For each named relation, the source loads the related rows, then queries ",[121,444,260],{}," for matching ",[121,447,448],{},"(subject_type, subject_id)"," pairs.",[278,451,452,286,455,458,459,462,463,469,470,475],{"color":280,"icon":281},[283,453,454],{},"Unbounded relation fetch.",[121,456,457],{},"RelatedActivityLogSource"," calls ",[121,460,461],{},"$subject->{$relation}()->get()"," with no limit to discover IDs to look up. For relations with thousands of rows this is a real cost — every timeline render loads every related row into memory. Tracked by ",[138,464,468],{"href":465,"rel":466},"https:\u002F\u002Fgithub.com\u002Frelaticle\u002Factivity-log\u002Fissues\u002F14",[467],"nofollow","issue #14",". Workaround: use ",[138,471,473],{"href":472},"#addsourcetimelinesource-source",[121,474,135],{}," with a custom-scoped source if the relation is large.",[278,477,480,481,483,484,286,487,490,491,494,495,498,499,140],{"color":478,"icon":479},"info","i-lucide-info","Entries from this source carry ",[121,482,276],{},", ",[283,485,486],{},"not",[121,488,489],{},"'related_activity_log'",". The ",[121,492,493],{},"related_activity_log"," key only exists in ",[121,496,497],{},"config('activity-log.source_priorities')"," for priority configuration. See the type taxonomy in ",[138,500,28],{"href":501},"\u002Fconcepts\u002Fhow-it-works#type-taxonomy",[142,503,505],{"id":504},"fromrelationstring-relation-closure-configure",[121,506,507],{},"fromRelation(string $relation, Closure $configure)",[117,509,150,510,513],{},[121,511,512],{},"Relaticle\\ActivityLog\\Timeline\\Sources\\RelatedModelSource"," — synthetic events derived from timestamp columns on related rows. Use this when you don't log the related model with spatie but still want its lifecycle on the timeline.",[156,515,517],{"className":158,"code":516,"language":160,"meta":161,"style":161},"public function fromRelation(string $relation, Closure $configure, ?int $priority = null): self\n",[121,518,519],{"__ignoreMap":161},[165,520,521,523,525,528,530,533,535,538,540,544,546,549,551,553,555,557,559,561,563],{"class":167,"line":168},[165,522,172],{"class":171},[165,524,175],{"class":171},[165,526,527],{"class":178}," fromRelation",[165,529,349],{"class":182},[165,531,532],{"class":186},"string",[165,534,190],{"class":182},[165,536,537],{"class":193},"relation",[165,539,360],{"class":182},[165,541,543],{"class":542},"sBMFI"," Closure",[165,545,190],{"class":182},[165,547,548],{"class":193},"configure",[165,550,360],{"class":182},[165,552,363],{"class":182},[165,554,187],{"class":186},[165,556,190],{"class":182},[165,558,194],{"class":193},[165,560,197],{"class":182},[165,562,200],{"class":182},[165,564,203],{"class":171},[156,566,568],{"className":158,"code":567,"language":160,"meta":161,"style":161},"use Filament\\Support\\Icons\\Heroicon;\nuse Relaticle\\ActivityLog\\Timeline\\Sources\\RelatedModelSource;\n\n$record->timeline()\n    ->fromRelation('invoices', function (RelatedModelSource $source): void {\n        $source\n            ->event('issued_at', 'invoice.issued', icon: Heroicon::DocumentText->value, color: 'info')\n            ->event('paid_at', 'invoice.paid', icon: Heroicon::CheckCircle->value, color: 'success')\n            ->event('voided_at', 'invoice.voided', color: 'danger', when: fn ($invoice): bool => $invoice->total > 0)\n            ->with(['customer'])\n            ->using(fn ($query) => $query->where('archived', false))\n            ->title(fn ($invoice): string => \"Invoice #{$invoice->number}\")\n            ->description(fn ($invoice): string => \"{$invoice->total} {$invoice->currency}\")\n            ->causer('createdBy');\n    });\n",[121,569,570,597,625,631,644,684,693,758,815,894,913,959,1003,1052,1072],{"__ignoreMap":161},[165,571,572,575,578,581,584,586,589,591,594],{"class":167,"line":168},[165,573,574],{"class":186},"use",[165,576,577],{"class":193}," Filament",[165,579,580],{"class":182},"\\",[165,582,583],{"class":193},"Support",[165,585,580],{"class":182},[165,587,588],{"class":193},"Icons",[165,590,580],{"class":182},[165,592,593],{"class":193},"Heroicon",[165,595,596],{"class":182},";\n",[165,598,599,601,604,606,609,611,614,616,618,620,623],{"class":167,"line":235},[165,600,574],{"class":186},[165,602,603],{"class":193}," Relaticle",[165,605,580],{"class":182},[165,607,608],{"class":193},"ActivityLog",[165,610,580],{"class":182},[165,612,613],{"class":193},"Timeline",[165,615,580],{"class":182},[165,617,37],{"class":193},[165,619,580],{"class":182},[165,621,622],{"class":193},"RelatedModelSource",[165,624,596],{"class":182},[165,626,627],{"class":167,"line":246},[165,628,630],{"emptyLinePlaceholder":629},true,"\n",[165,632,634,636,638,640,642],{"class":167,"line":633},4,[165,635,213],{"class":182},[165,637,223],{"class":193},[165,639,226],{"class":182},[165,641,229],{"class":178},[165,643,232],{"class":182},[165,645,647,649,652,654,656,659,661,663,665,668,670,672,675,678,681],{"class":167,"line":646},5,[165,648,238],{"class":182},[165,650,651],{"class":178},"fromRelation",[165,653,349],{"class":182},[165,655,412],{"class":182},[165,657,658],{"class":415},"invoices",[165,660,412],{"class":182},[165,662,360],{"class":182},[165,664,175],{"class":171},[165,666,667],{"class":182}," (",[165,669,622],{"class":542},[165,671,190],{"class":182},[165,673,674],{"class":193},"source",[165,676,677],{"class":182},"):",[165,679,680],{"class":186}," void",[165,682,683],{"class":182}," {\n",[165,685,687,690],{"class":167,"line":686},6,[165,688,689],{"class":182},"        $",[165,691,692],{"class":193},"source\n",[165,694,696,699,702,704,706,709,711,713,715,718,720,722,725,728,731,734,737,739,742,744,747,749,751,753,755],{"class":167,"line":695},7,[165,697,698],{"class":182},"            ->",[165,700,701],{"class":178},"event",[165,703,349],{"class":182},[165,705,412],{"class":182},[165,707,708],{"class":415},"issued_at",[165,710,412],{"class":182},[165,712,360],{"class":182},[165,714,423],{"class":182},[165,716,717],{"class":415},"invoice.issued",[165,719,412],{"class":182},[165,721,360],{"class":182},[165,723,724],{"class":542}," icon",[165,726,727],{"class":182},":",[165,729,730],{"class":542}," Heroicon",[165,732,733],{"class":182},"::",[165,735,736],{"class":193},"DocumentText",[165,738,226],{"class":182},[165,740,741],{"class":193},"value",[165,743,360],{"class":182},[165,745,746],{"class":542}," color",[165,748,727],{"class":182},[165,750,423],{"class":182},[165,752,478],{"class":415},[165,754,412],{"class":182},[165,756,757],{"class":182},")\n",[165,759,761,763,765,767,769,772,774,776,778,781,783,785,787,789,791,793,796,798,800,802,804,806,808,811,813],{"class":167,"line":760},8,[165,762,698],{"class":182},[165,764,701],{"class":178},[165,766,349],{"class":182},[165,768,412],{"class":182},[165,770,771],{"class":415},"paid_at",[165,773,412],{"class":182},[165,775,360],{"class":182},[165,777,423],{"class":182},[165,779,780],{"class":415},"invoice.paid",[165,782,412],{"class":182},[165,784,360],{"class":182},[165,786,724],{"class":542},[165,788,727],{"class":182},[165,790,730],{"class":542},[165,792,733],{"class":182},[165,794,795],{"class":193},"CheckCircle",[165,797,226],{"class":182},[165,799,741],{"class":193},[165,801,360],{"class":182},[165,803,746],{"class":542},[165,805,727],{"class":182},[165,807,423],{"class":182},[165,809,810],{"class":415},"success",[165,812,412],{"class":182},[165,814,757],{"class":182},[165,816,818,820,822,824,826,829,831,833,835,838,840,842,844,846,848,851,853,855,858,860,863,866,869,871,874,877,879,881,883,886,889,892],{"class":167,"line":817},9,[165,819,698],{"class":182},[165,821,701],{"class":178},[165,823,349],{"class":182},[165,825,412],{"class":182},[165,827,828],{"class":415},"voided_at",[165,830,412],{"class":182},[165,832,360],{"class":182},[165,834,423],{"class":182},[165,836,837],{"class":415},"invoice.voided",[165,839,412],{"class":182},[165,841,360],{"class":182},[165,843,746],{"class":542},[165,845,727],{"class":182},[165,847,423],{"class":182},[165,849,850],{"class":415},"danger",[165,852,412],{"class":182},[165,854,360],{"class":182},[165,856,857],{"class":542}," when",[165,859,727],{"class":182},[165,861,862],{"class":171}," fn",[165,864,865],{"class":182}," ($",[165,867,868],{"class":193},"invoice",[165,870,677],{"class":182},[165,872,873],{"class":186}," bool",[165,875,876],{"class":182}," =>",[165,878,190],{"class":182},[165,880,868],{"class":193},[165,882,226],{"class":182},[165,884,885],{"class":193},"total ",[165,887,888],{"class":182},">",[165,890,891],{"class":186}," 0",[165,893,757],{"class":182},[165,895,897,899,902,904,906,909,911],{"class":167,"line":896},10,[165,898,698],{"class":182},[165,900,901],{"class":178},"with",[165,903,409],{"class":182},[165,905,412],{"class":182},[165,907,908],{"class":415},"customer",[165,910,412],{"class":182},[165,912,431],{"class":182},[165,914,916,918,921,923,926,928,931,934,936,938,940,942,945,947,949,952,954,956],{"class":167,"line":915},11,[165,917,698],{"class":182},[165,919,920],{"class":178},"using",[165,922,349],{"class":182},[165,924,925],{"class":171},"fn",[165,927,865],{"class":182},[165,929,930],{"class":193},"query",[165,932,933],{"class":182},")",[165,935,876],{"class":182},[165,937,190],{"class":182},[165,939,930],{"class":193},[165,941,226],{"class":182},[165,943,944],{"class":178},"where",[165,946,349],{"class":182},[165,948,412],{"class":182},[165,950,951],{"class":415},"archived",[165,953,412],{"class":182},[165,955,360],{"class":182},[165,957,958],{"class":182}," false))\n",[165,960,962,964,967,969,971,973,975,977,980,982,985,988,991,993,995,998,1001],{"class":167,"line":961},12,[165,963,698],{"class":182},[165,965,966],{"class":178},"title",[165,968,349],{"class":182},[165,970,925],{"class":171},[165,972,865],{"class":182},[165,974,868],{"class":193},[165,976,677],{"class":182},[165,978,979],{"class":186}," string",[165,981,876],{"class":182},[165,983,984],{"class":182}," \"",[165,986,987],{"class":415},"Invoice #",[165,989,990],{"class":182},"{$",[165,992,868],{"class":193},[165,994,226],{"class":182},[165,996,997],{"class":193},"number",[165,999,1000],{"class":182},"}\"",[165,1002,757],{"class":182},[165,1004,1006,1008,1011,1013,1015,1017,1019,1021,1023,1025,1028,1030,1032,1035,1038,1041,1043,1045,1048,1050],{"class":167,"line":1005},13,[165,1007,698],{"class":182},[165,1009,1010],{"class":178},"description",[165,1012,349],{"class":182},[165,1014,925],{"class":171},[165,1016,865],{"class":182},[165,1018,868],{"class":193},[165,1020,677],{"class":182},[165,1022,979],{"class":186},[165,1024,876],{"class":182},[165,1026,1027],{"class":182}," \"{$",[165,1029,868],{"class":193},[165,1031,226],{"class":182},[165,1033,1034],{"class":193},"total",[165,1036,1037],{"class":182},"}",[165,1039,1040],{"class":182}," {$",[165,1042,868],{"class":193},[165,1044,226],{"class":182},[165,1046,1047],{"class":193},"currency",[165,1049,1000],{"class":182},[165,1051,757],{"class":182},[165,1053,1055,1057,1060,1062,1064,1067,1069],{"class":167,"line":1054},14,[165,1056,698],{"class":182},[165,1058,1059],{"class":178},"causer",[165,1061,349],{"class":182},[165,1063,412],{"class":182},[165,1065,1066],{"class":415},"createdBy",[165,1068,412],{"class":182},[165,1070,1071],{"class":182},");\n",[165,1073,1075],{"class":167,"line":1074},15,[165,1076,1077],{"class":182},"    });\n",[1079,1080,1082,1084],"h3",{"id":1081},"relatedmodelsource-api",[121,1083,622],{}," API",[1086,1087,1088,1101],"table",{},[1089,1090,1091],"thead",{},[1092,1093,1094,1098],"tr",{},[1095,1096,1097],"th",{},"Method",[1095,1099,1100],{},"Purpose",[1102,1103,1104,1122,1132,1142,1154,1166],"tbody",{},[1092,1105,1106,1112],{},[1107,1108,1109],"td",{},[121,1110,1111],{},"event($column, $event, $icon = null, $color = null, $when = null)",[1107,1113,1114,1115,1118,1119,140],{},"Register one event per timestamp column. ",[121,1116,1117],{},"$when"," is an optional row-level filter returning ",[121,1120,1121],{},"bool",[1092,1123,1124,1129],{},[1107,1125,1126],{},[121,1127,1128],{},"with(array $relations)",[1107,1130,1131],{},"Eager-loads relations on every event query. Prevents N+1 in renderers.",[1092,1133,1134,1139],{},[1107,1135,1136],{},[121,1137,1138],{},"using(Closure $modifier)",[1107,1140,1141],{},"SQL-level query modifier — receives the query builder. Use for tenant scopes, soft-delete, archived flags.",[1092,1143,1144,1149],{},[1107,1145,1146],{},[121,1147,1148],{},"title(Closure $resolver)",[1107,1150,1151,1152,140],{},"Per-row resolver for the entry title. Receives the related row, returns ",[121,1153,532],{},[1092,1155,1156,1161],{},[1107,1157,1158],{},[121,1159,1160],{},"description(Closure $resolver)",[1107,1162,1163,1164,140],{},"Per-row resolver for the entry description. Receives the related row, returns ",[121,1165,532],{},[1092,1167,1168,1173],{},[1107,1169,1170],{},[121,1171,1172],{},"causer(Closure|string $resolver)",[1107,1174,1175,1176,1178,1179,1182,1183,140],{},"Relation name as a ",[121,1177,532],{},", or a ",[121,1180,1181],{},"Closure"," returning ",[121,1184,1185],{},"Model|null",[278,1187,1189,1195,1196,1199,1200,1203],{"color":478,"icon":1188},"i-lucide-lightbulb",[283,1190,1191,1194],{},[121,1192,1193],{},"event(when: ...)"," runs post-fetch in PHP."," It filters yielded entries one-by-one after the SQL query has already loaded the rows — it does not reduce the row count fetched from the database. For SQL-level filtering (tenant scope, soft-delete, archived flag), use ",[121,1197,1198],{},"using()"," instead so the predicate becomes a ",[121,1201,1202],{},"WHERE"," clause.",[142,1205,1207],{"id":1206},"fromcustomclosure-resolver",[121,1208,1209],{},"fromCustom(Closure $resolver)",[117,1211,150,1212,1215,1216,1219],{},[121,1213,1214],{},"Relaticle\\ActivityLog\\Timeline\\Sources\\CustomEventSource"," — yields ",[121,1217,1218],{},"Relaticle\\ActivityLog\\Timeline\\TimelineEntry"," instances directly, with no assumptions about where they come from.",[156,1221,1223],{"className":158,"code":1222,"language":160,"meta":161,"style":161},"public function fromCustom(Closure $resolver, ?int $priority = null): self\n",[121,1224,1225],{"__ignoreMap":161},[165,1226,1227,1229,1231,1234,1236,1238,1240,1243,1245,1247,1249,1251,1253,1255,1257],{"class":167,"line":168},[165,1228,172],{"class":171},[165,1230,175],{"class":171},[165,1232,1233],{"class":178}," fromCustom",[165,1235,349],{"class":182},[165,1237,1181],{"class":542},[165,1239,190],{"class":182},[165,1241,1242],{"class":193},"resolver",[165,1244,360],{"class":182},[165,1246,363],{"class":182},[165,1248,187],{"class":186},[165,1250,190],{"class":182},[165,1252,194],{"class":193},[165,1254,197],{"class":182},[165,1256,200],{"class":182},[165,1258,203],{"class":171},[156,1260,1262],{"className":158,"code":1261,"language":160,"meta":161,"style":161},"use Carbon\\CarbonImmutable;\nuse Relaticle\\ActivityLog\\Timeline\\TimelineEntry;\nuse Relaticle\\ActivityLog\\Timeline\\Window;\n\n$record->timeline()\n    ->fromCustom(function ($subject, Window $window) {\n        $query = $subject->stripeCharges()\n            ->orderByDesc('created_at')\n            ->limit($window->cap);\n\n        if ($window->from instanceof CarbonImmutable) {\n            $query->where('created_at', '>=', $window->from);\n        }\n\n        if ($window->to instanceof CarbonImmutable) {\n            $query->where('created_at', '\u003C=', $window->to);\n        }\n\n        foreach ($query->cursor() as $charge) {\n            yield new TimelineEntry(\n                id: \"stripe:charge:{$charge->id}\",\n                type: 'custom',\n                event: 'charge.succeeded',\n                occurredAt: CarbonImmutable::parse($charge->created_at),\n                dedupKey: \"stripe:charge:{$charge->id}\",\n                sourcePriority: 30,\n                subject: $subject,\n                title: \"Charge {$charge->amount_formatted}\",\n            );\n        }\n    });\n",[121,1263,1264,1278,1298,1318,1322,1334,1365,1385,1403,1422,1426,1451,1492,1497,1501,1522,1563,1568,1573,1603,1618,1645,1662,1679,1705,1729,1742,1756,1782,1788,1793],{"__ignoreMap":161},[165,1265,1266,1268,1271,1273,1276],{"class":167,"line":168},[165,1267,574],{"class":186},[165,1269,1270],{"class":193}," Carbon",[165,1272,580],{"class":182},[165,1274,1275],{"class":193},"CarbonImmutable",[165,1277,596],{"class":182},[165,1279,1280,1282,1284,1286,1288,1290,1292,1294,1296],{"class":167,"line":235},[165,1281,574],{"class":186},[165,1283,603],{"class":193},[165,1285,580],{"class":182},[165,1287,608],{"class":193},[165,1289,580],{"class":182},[165,1291,613],{"class":193},[165,1293,580],{"class":182},[165,1295,272],{"class":193},[165,1297,596],{"class":182},[165,1299,1300,1302,1304,1306,1308,1310,1312,1314,1316],{"class":167,"line":246},[165,1301,574],{"class":186},[165,1303,603],{"class":193},[165,1305,580],{"class":182},[165,1307,608],{"class":193},[165,1309,580],{"class":182},[165,1311,613],{"class":193},[165,1313,580],{"class":182},[165,1315,131],{"class":193},[165,1317,596],{"class":182},[165,1319,1320],{"class":167,"line":633},[165,1321,630],{"emptyLinePlaceholder":629},[165,1323,1324,1326,1328,1330,1332],{"class":167,"line":646},[165,1325,213],{"class":182},[165,1327,223],{"class":193},[165,1329,226],{"class":182},[165,1331,229],{"class":178},[165,1333,232],{"class":182},[165,1335,1336,1338,1341,1343,1346,1348,1351,1353,1356,1358,1361,1363],{"class":167,"line":686},[165,1337,238],{"class":182},[165,1339,1340],{"class":178},"fromCustom",[165,1342,349],{"class":182},[165,1344,1345],{"class":171},"function",[165,1347,865],{"class":182},[165,1349,1350],{"class":193},"subject",[165,1352,360],{"class":182},[165,1354,1355],{"class":542}," Window",[165,1357,190],{"class":182},[165,1359,1360],{"class":193},"window",[165,1362,933],{"class":182},[165,1364,683],{"class":182},[165,1366,1367,1369,1372,1374,1376,1378,1380,1383],{"class":167,"line":695},[165,1368,689],{"class":182},[165,1370,1371],{"class":193},"query ",[165,1373,197],{"class":182},[165,1375,190],{"class":182},[165,1377,1350],{"class":193},[165,1379,226],{"class":182},[165,1381,1382],{"class":178},"stripeCharges",[165,1384,232],{"class":182},[165,1386,1387,1389,1392,1394,1396,1399,1401],{"class":167,"line":760},[165,1388,698],{"class":182},[165,1390,1391],{"class":178},"orderByDesc",[165,1393,349],{"class":182},[165,1395,412],{"class":182},[165,1397,1398],{"class":415},"created_at",[165,1400,412],{"class":182},[165,1402,757],{"class":182},[165,1404,1405,1407,1410,1413,1415,1417,1420],{"class":167,"line":817},[165,1406,698],{"class":182},[165,1408,1409],{"class":178},"limit",[165,1411,1412],{"class":182},"($",[165,1414,1360],{"class":193},[165,1416,226],{"class":182},[165,1418,1419],{"class":193},"cap",[165,1421,1071],{"class":182},[165,1423,1424],{"class":167,"line":896},[165,1425,630],{"emptyLinePlaceholder":629},[165,1427,1428,1432,1434,1436,1438,1441,1444,1447,1449],{"class":167,"line":915},[165,1429,1431],{"class":1430},"s7zQu","        if",[165,1433,865],{"class":182},[165,1435,1360],{"class":193},[165,1437,226],{"class":182},[165,1439,1440],{"class":193},"from ",[165,1442,1443],{"class":182},"instanceof",[165,1445,1446],{"class":542}," CarbonImmutable",[165,1448,933],{"class":182},[165,1450,683],{"class":182},[165,1452,1453,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1477,1479,1481,1483,1485,1487,1490],{"class":167,"line":961},[165,1454,1455],{"class":182},"            $",[165,1457,930],{"class":193},[165,1459,226],{"class":182},[165,1461,944],{"class":178},[165,1463,349],{"class":182},[165,1465,412],{"class":182},[165,1467,1398],{"class":415},[165,1469,412],{"class":182},[165,1471,360],{"class":182},[165,1473,423],{"class":182},[165,1475,1476],{"class":415},">=",[165,1478,412],{"class":182},[165,1480,360],{"class":182},[165,1482,190],{"class":182},[165,1484,1360],{"class":193},[165,1486,226],{"class":182},[165,1488,1489],{"class":193},"from",[165,1491,1071],{"class":182},[165,1493,1494],{"class":167,"line":1005},[165,1495,1496],{"class":182},"        }\n",[165,1498,1499],{"class":167,"line":1054},[165,1500,630],{"emptyLinePlaceholder":629},[165,1502,1503,1505,1507,1509,1511,1514,1516,1518,1520],{"class":167,"line":1074},[165,1504,1431],{"class":1430},[165,1506,865],{"class":182},[165,1508,1360],{"class":193},[165,1510,226],{"class":182},[165,1512,1513],{"class":193},"to ",[165,1515,1443],{"class":182},[165,1517,1446],{"class":542},[165,1519,933],{"class":182},[165,1521,683],{"class":182},[165,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1548,1550,1552,1554,1556,1558,1561],{"class":167,"line":1524},16,[165,1526,1455],{"class":182},[165,1528,930],{"class":193},[165,1530,226],{"class":182},[165,1532,944],{"class":178},[165,1534,349],{"class":182},[165,1536,412],{"class":182},[165,1538,1398],{"class":415},[165,1540,412],{"class":182},[165,1542,360],{"class":182},[165,1544,423],{"class":182},[165,1546,1547],{"class":415},"\u003C=",[165,1549,412],{"class":182},[165,1551,360],{"class":182},[165,1553,190],{"class":182},[165,1555,1360],{"class":193},[165,1557,226],{"class":182},[165,1559,1560],{"class":193},"to",[165,1562,1071],{"class":182},[165,1564,1566],{"class":167,"line":1565},17,[165,1567,1496],{"class":182},[165,1569,1571],{"class":167,"line":1570},18,[165,1572,630],{"emptyLinePlaceholder":629},[165,1574,1576,1579,1581,1583,1585,1588,1591,1594,1596,1599,1601],{"class":167,"line":1575},19,[165,1577,1578],{"class":1430},"        foreach",[165,1580,865],{"class":182},[165,1582,930],{"class":193},[165,1584,226],{"class":182},[165,1586,1587],{"class":178},"cursor",[165,1589,1590],{"class":182},"()",[165,1592,1593],{"class":182}," as",[165,1595,190],{"class":182},[165,1597,1598],{"class":193},"charge",[165,1600,933],{"class":182},[165,1602,683],{"class":182},[165,1604,1606,1609,1612,1615],{"class":167,"line":1605},20,[165,1607,1608],{"class":1430},"            yield",[165,1610,1611],{"class":186}," new",[165,1613,1614],{"class":542}," TimelineEntry",[165,1616,1617],{"class":182},"(\n",[165,1619,1621,1624,1626,1628,1631,1633,1635,1637,1640,1642],{"class":167,"line":1620},21,[165,1622,1623],{"class":542},"                id",[165,1625,727],{"class":182},[165,1627,984],{"class":182},[165,1629,1630],{"class":415},"stripe:charge:",[165,1632,990],{"class":182},[165,1634,1598],{"class":193},[165,1636,226],{"class":182},[165,1638,1639],{"class":193},"id",[165,1641,1000],{"class":182},[165,1643,1644],{"class":182},",\n",[165,1646,1648,1651,1653,1655,1658,1660],{"class":167,"line":1647},22,[165,1649,1650],{"class":542},"                type",[165,1652,727],{"class":182},[165,1654,423],{"class":182},[165,1656,1657],{"class":415},"custom",[165,1659,412],{"class":182},[165,1661,1644],{"class":182},[165,1663,1665,1668,1670,1672,1675,1677],{"class":167,"line":1664},23,[165,1666,1667],{"class":542},"                event",[165,1669,727],{"class":182},[165,1671,423],{"class":182},[165,1673,1674],{"class":415},"charge.succeeded",[165,1676,412],{"class":182},[165,1678,1644],{"class":182},[165,1680,1682,1685,1687,1689,1691,1694,1696,1698,1700,1702],{"class":167,"line":1681},24,[165,1683,1684],{"class":542},"                occurredAt",[165,1686,727],{"class":182},[165,1688,1446],{"class":542},[165,1690,733],{"class":182},[165,1692,1693],{"class":178},"parse",[165,1695,1412],{"class":182},[165,1697,1598],{"class":193},[165,1699,226],{"class":182},[165,1701,1398],{"class":193},[165,1703,1704],{"class":182},"),\n",[165,1706,1708,1711,1713,1715,1717,1719,1721,1723,1725,1727],{"class":167,"line":1707},25,[165,1709,1710],{"class":542},"                dedupKey",[165,1712,727],{"class":182},[165,1714,984],{"class":182},[165,1716,1630],{"class":415},[165,1718,990],{"class":182},[165,1720,1598],{"class":193},[165,1722,226],{"class":182},[165,1724,1639],{"class":193},[165,1726,1000],{"class":182},[165,1728,1644],{"class":182},[165,1730,1732,1735,1737,1740],{"class":167,"line":1731},26,[165,1733,1734],{"class":542},"                sourcePriority",[165,1736,727],{"class":182},[165,1738,1739],{"class":186}," 30",[165,1741,1644],{"class":182},[165,1743,1745,1748,1750,1752,1754],{"class":167,"line":1744},27,[165,1746,1747],{"class":542},"                subject",[165,1749,727],{"class":182},[165,1751,190],{"class":182},[165,1753,1350],{"class":193},[165,1755,1644],{"class":182},[165,1757,1759,1762,1764,1766,1769,1771,1773,1775,1778,1780],{"class":167,"line":1758},28,[165,1760,1761],{"class":542},"                title",[165,1763,727],{"class":182},[165,1765,984],{"class":182},[165,1767,1768],{"class":415},"Charge ",[165,1770,990],{"class":182},[165,1772,1598],{"class":193},[165,1774,226],{"class":182},[165,1776,1777],{"class":193},"amount_formatted",[165,1779,1000],{"class":182},[165,1781,1644],{"class":182},[165,1783,1785],{"class":167,"line":1784},29,[165,1786,1787],{"class":182},"            );\n",[165,1789,1791],{"class":167,"line":1790},30,[165,1792,1496],{"class":182},[165,1794,1796],{"class":167,"line":1795},31,[165,1797,1077],{"class":182},[117,1799,1800,1801,1803,1804,483,1806,1808,1809,1811,1812,1815],{},"The closure receives the subject and the active ",[121,1802,131],{}," — respect ",[121,1805,1419],{},[121,1807,1489],{},", and ",[121,1810,1560],{}," to keep memory bounded and honor ",[121,1813,1814],{},"->between(...)"," filters.",[278,1817,1818,1824,1825,1827,1828,1831],{"color":280,"icon":281},[283,1819,1820,1823],{},[121,1821,1822],{},"CustomEventSource"," validates yield types."," Yielding anything other than a ",[121,1826,272],{}," instance throws ",[121,1829,1830],{},"TypeError"," with the offending type name. Don't yield arrays, raw models, or DTOs.",[142,1833,1835],{"id":1834},"addsourcetimelinesource-source",[121,1836,1837],{},"addSource(TimelineSource $source)",[117,1839,1840,1841,1844],{},"For reusable source classes. Implement the ",[121,1842,1843],{},"Relaticle\\ActivityLog\\Contracts\\TimelineSource"," contract and register the instance directly:",[156,1846,1848],{"className":158,"code":1847,"language":160,"meta":161,"style":161},"namespace App\\Timeline\\Sources;\n\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ActivityLog\\Contracts\\TimelineSource;\nuse Relaticle\\ActivityLog\\Timeline\\TimelineEntry;\nuse Relaticle\\ActivityLog\\Timeline\\Window;\n\nfinal class StripePaymentSource implements TimelineSource\n{\n    public function __construct(private readonly int $priority = 30) {}\n\n    public function priority(): int\n    {\n        return $this->priority;\n    }\n\n    public function resolve(Model $subject, Window $window): iterable\n    {\n        $query = $subject->stripePayments()\n            ->orderByDesc('created_at')\n            ->limit($window->cap);\n\n        if ($window->from instanceof CarbonImmutable) {\n            $query->where('created_at', '>=', $window->from);\n        }\n\n        foreach ($query->cursor() as $payment) {\n            yield new TimelineEntry(\n                id: \"stripe:payment:{$payment->id}\",\n                type: 'custom',\n                event: \"payment.{$payment->status}\",\n                occurredAt: CarbonImmutable::parse($payment->created_at),\n                dedupKey: \"stripe:payment:{$payment->id}\",\n                sourcePriority: $this->priority,\n                subject: $subject,\n                title: \"Payment {$payment->amount_formatted}\",\n            );\n        }\n    }\n}\n",[121,1849,1850,1868,1872,1884,1908,1930,1950,1970,1974,1991,1996,2030,2034,2049,2054,2067,2072,2076,2106,2110,2129,2145,2161,2165,2185,2223,2227,2231,2256,2266,2289,2303,2328,2351,2374,2387,2400,2424,2429,2434,2439],{"__ignoreMap":161},[165,1851,1852,1855,1858,1860,1862,1864,1866],{"class":167,"line":168},[165,1853,1854],{"class":186},"namespace",[165,1856,1857],{"class":542}," App",[165,1859,580],{"class":182},[165,1861,613],{"class":542},[165,1863,580],{"class":182},[165,1865,37],{"class":542},[165,1867,596],{"class":182},[165,1869,1870],{"class":167,"line":235},[165,1871,630],{"emptyLinePlaceholder":629},[165,1873,1874,1876,1878,1880,1882],{"class":167,"line":246},[165,1875,574],{"class":186},[165,1877,1270],{"class":193},[165,1879,580],{"class":182},[165,1881,1275],{"class":193},[165,1883,596],{"class":182},[165,1885,1886,1888,1891,1893,1896,1898,1901,1903,1906],{"class":167,"line":633},[165,1887,574],{"class":186},[165,1889,1890],{"class":193}," Illuminate",[165,1892,580],{"class":182},[165,1894,1895],{"class":193},"Database",[165,1897,580],{"class":182},[165,1899,1900],{"class":193},"Eloquent",[165,1902,580],{"class":182},[165,1904,1905],{"class":193},"Model",[165,1907,596],{"class":182},[165,1909,1910,1912,1914,1916,1918,1920,1923,1925,1928],{"class":167,"line":646},[165,1911,574],{"class":186},[165,1913,603],{"class":193},[165,1915,580],{"class":182},[165,1917,608],{"class":193},[165,1919,580],{"class":182},[165,1921,1922],{"class":193},"Contracts",[165,1924,580],{"class":182},[165,1926,1927],{"class":193},"TimelineSource",[165,1929,596],{"class":182},[165,1931,1932,1934,1936,1938,1940,1942,1944,1946,1948],{"class":167,"line":686},[165,1933,574],{"class":186},[165,1935,603],{"class":193},[165,1937,580],{"class":182},[165,1939,608],{"class":193},[165,1941,580],{"class":182},[165,1943,613],{"class":193},[165,1945,580],{"class":182},[165,1947,272],{"class":193},[165,1949,596],{"class":182},[165,1951,1952,1954,1956,1958,1960,1962,1964,1966,1968],{"class":167,"line":695},[165,1953,574],{"class":186},[165,1955,603],{"class":193},[165,1957,580],{"class":182},[165,1959,608],{"class":193},[165,1961,580],{"class":182},[165,1963,613],{"class":193},[165,1965,580],{"class":182},[165,1967,131],{"class":193},[165,1969,596],{"class":182},[165,1971,1972],{"class":167,"line":760},[165,1973,630],{"emptyLinePlaceholder":629},[165,1975,1976,1979,1982,1985,1988],{"class":167,"line":817},[165,1977,1978],{"class":171},"final",[165,1980,1981],{"class":171}," class",[165,1983,1984],{"class":542}," StripePaymentSource",[165,1986,1987],{"class":171}," implements",[165,1989,1990],{"class":542}," TimelineSource\n",[165,1992,1993],{"class":167,"line":896},[165,1994,1995],{"class":182},"{\n",[165,1997,1998,2001,2003,2006,2008,2011,2014,2017,2019,2021,2023,2025,2027],{"class":167,"line":915},[165,1999,2000],{"class":171},"    public",[165,2002,175],{"class":171},[165,2004,2005],{"class":178}," __construct",[165,2007,349],{"class":182},[165,2009,2010],{"class":171},"private",[165,2012,2013],{"class":171}," readonly",[165,2015,2016],{"class":186}," int",[165,2018,190],{"class":182},[165,2020,194],{"class":193},[165,2022,197],{"class":182},[165,2024,1739],{"class":186},[165,2026,933],{"class":182},[165,2028,2029],{"class":182}," {}\n",[165,2031,2032],{"class":167,"line":961},[165,2033,630],{"emptyLinePlaceholder":629},[165,2035,2036,2038,2040,2043,2046],{"class":167,"line":1005},[165,2037,2000],{"class":171},[165,2039,175],{"class":171},[165,2041,2042],{"class":178}," priority",[165,2044,2045],{"class":182},"():",[165,2047,2048],{"class":186}," int\n",[165,2050,2051],{"class":167,"line":1054},[165,2052,2053],{"class":182},"    {\n",[165,2055,2056,2059,2062,2065],{"class":167,"line":1074},[165,2057,2058],{"class":1430},"        return",[165,2060,2061],{"class":182}," $this->",[165,2063,2064],{"class":193},"priority",[165,2066,596],{"class":182},[165,2068,2069],{"class":167,"line":1524},[165,2070,2071],{"class":182},"    }\n",[165,2073,2074],{"class":167,"line":1565},[165,2075,630],{"emptyLinePlaceholder":629},[165,2077,2078,2080,2082,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103],{"class":167,"line":1570},[165,2079,2000],{"class":171},[165,2081,175],{"class":171},[165,2083,2084],{"class":178}," resolve",[165,2086,349],{"class":182},[165,2088,1905],{"class":542},[165,2090,190],{"class":182},[165,2092,1350],{"class":193},[165,2094,360],{"class":182},[165,2096,1355],{"class":542},[165,2098,190],{"class":182},[165,2100,1360],{"class":193},[165,2102,677],{"class":182},[165,2104,2105],{"class":186}," iterable\n",[165,2107,2108],{"class":167,"line":1575},[165,2109,2053],{"class":182},[165,2111,2112,2114,2116,2118,2120,2122,2124,2127],{"class":167,"line":1605},[165,2113,689],{"class":182},[165,2115,1371],{"class":193},[165,2117,197],{"class":182},[165,2119,190],{"class":182},[165,2121,1350],{"class":193},[165,2123,226],{"class":182},[165,2125,2126],{"class":178},"stripePayments",[165,2128,232],{"class":182},[165,2130,2131,2133,2135,2137,2139,2141,2143],{"class":167,"line":1620},[165,2132,698],{"class":182},[165,2134,1391],{"class":178},[165,2136,349],{"class":182},[165,2138,412],{"class":182},[165,2140,1398],{"class":415},[165,2142,412],{"class":182},[165,2144,757],{"class":182},[165,2146,2147,2149,2151,2153,2155,2157,2159],{"class":167,"line":1647},[165,2148,698],{"class":182},[165,2150,1409],{"class":178},[165,2152,1412],{"class":182},[165,2154,1360],{"class":193},[165,2156,226],{"class":182},[165,2158,1419],{"class":193},[165,2160,1071],{"class":182},[165,2162,2163],{"class":167,"line":1664},[165,2164,630],{"emptyLinePlaceholder":629},[165,2166,2167,2169,2171,2173,2175,2177,2179,2181,2183],{"class":167,"line":1681},[165,2168,1431],{"class":1430},[165,2170,865],{"class":182},[165,2172,1360],{"class":193},[165,2174,226],{"class":182},[165,2176,1440],{"class":193},[165,2178,1443],{"class":182},[165,2180,1446],{"class":542},[165,2182,933],{"class":182},[165,2184,683],{"class":182},[165,2186,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2217,2219,2221],{"class":167,"line":1707},[165,2188,1455],{"class":182},[165,2190,930],{"class":193},[165,2192,226],{"class":182},[165,2194,944],{"class":178},[165,2196,349],{"class":182},[165,2198,412],{"class":182},[165,2200,1398],{"class":415},[165,2202,412],{"class":182},[165,2204,360],{"class":182},[165,2206,423],{"class":182},[165,2208,1476],{"class":415},[165,2210,412],{"class":182},[165,2212,360],{"class":182},[165,2214,190],{"class":182},[165,2216,1360],{"class":193},[165,2218,226],{"class":182},[165,2220,1489],{"class":193},[165,2222,1071],{"class":182},[165,2224,2225],{"class":167,"line":1731},[165,2226,1496],{"class":182},[165,2228,2229],{"class":167,"line":1744},[165,2230,630],{"emptyLinePlaceholder":629},[165,2232,2233,2235,2237,2239,2241,2243,2245,2247,2249,2252,2254],{"class":167,"line":1758},[165,2234,1578],{"class":1430},[165,2236,865],{"class":182},[165,2238,930],{"class":193},[165,2240,226],{"class":182},[165,2242,1587],{"class":178},[165,2244,1590],{"class":182},[165,2246,1593],{"class":182},[165,2248,190],{"class":182},[165,2250,2251],{"class":193},"payment",[165,2253,933],{"class":182},[165,2255,683],{"class":182},[165,2257,2258,2260,2262,2264],{"class":167,"line":1784},[165,2259,1608],{"class":1430},[165,2261,1611],{"class":186},[165,2263,1614],{"class":542},[165,2265,1617],{"class":182},[165,2267,2268,2270,2272,2274,2277,2279,2281,2283,2285,2287],{"class":167,"line":1790},[165,2269,1623],{"class":542},[165,2271,727],{"class":182},[165,2273,984],{"class":182},[165,2275,2276],{"class":415},"stripe:payment:",[165,2278,990],{"class":182},[165,2280,2251],{"class":193},[165,2282,226],{"class":182},[165,2284,1639],{"class":193},[165,2286,1000],{"class":182},[165,2288,1644],{"class":182},[165,2290,2291,2293,2295,2297,2299,2301],{"class":167,"line":1795},[165,2292,1650],{"class":542},[165,2294,727],{"class":182},[165,2296,423],{"class":182},[165,2298,1657],{"class":415},[165,2300,412],{"class":182},[165,2302,1644],{"class":182},[165,2304,2306,2308,2310,2312,2315,2317,2319,2321,2324,2326],{"class":167,"line":2305},32,[165,2307,1667],{"class":542},[165,2309,727],{"class":182},[165,2311,984],{"class":182},[165,2313,2314],{"class":415},"payment.",[165,2316,990],{"class":182},[165,2318,2251],{"class":193},[165,2320,226],{"class":182},[165,2322,2323],{"class":193},"status",[165,2325,1000],{"class":182},[165,2327,1644],{"class":182},[165,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349],{"class":167,"line":2330},33,[165,2332,1684],{"class":542},[165,2334,727],{"class":182},[165,2336,1446],{"class":542},[165,2338,733],{"class":182},[165,2340,1693],{"class":178},[165,2342,1412],{"class":182},[165,2344,2251],{"class":193},[165,2346,226],{"class":182},[165,2348,1398],{"class":193},[165,2350,1704],{"class":182},[165,2352,2354,2356,2358,2360,2362,2364,2366,2368,2370,2372],{"class":167,"line":2353},34,[165,2355,1710],{"class":542},[165,2357,727],{"class":182},[165,2359,984],{"class":182},[165,2361,2276],{"class":415},[165,2363,990],{"class":182},[165,2365,2251],{"class":193},[165,2367,226],{"class":182},[165,2369,1639],{"class":193},[165,2371,1000],{"class":182},[165,2373,1644],{"class":182},[165,2375,2377,2379,2381,2383,2385],{"class":167,"line":2376},35,[165,2378,1734],{"class":542},[165,2380,727],{"class":182},[165,2382,2061],{"class":182},[165,2384,2064],{"class":193},[165,2386,1644],{"class":182},[165,2388,2390,2392,2394,2396,2398],{"class":167,"line":2389},36,[165,2391,1747],{"class":542},[165,2393,727],{"class":182},[165,2395,190],{"class":182},[165,2397,1350],{"class":193},[165,2399,1644],{"class":182},[165,2401,2403,2405,2407,2409,2412,2414,2416,2418,2420,2422],{"class":167,"line":2402},37,[165,2404,1761],{"class":542},[165,2406,727],{"class":182},[165,2408,984],{"class":182},[165,2410,2411],{"class":415},"Payment ",[165,2413,990],{"class":182},[165,2415,2251],{"class":193},[165,2417,226],{"class":182},[165,2419,1777],{"class":193},[165,2421,1000],{"class":182},[165,2423,1644],{"class":182},[165,2425,2427],{"class":167,"line":2426},38,[165,2428,1787],{"class":182},[165,2430,2432],{"class":167,"line":2431},39,[165,2433,1496],{"class":182},[165,2435,2437],{"class":167,"line":2436},40,[165,2438,2071],{"class":182},[165,2440,2442],{"class":167,"line":2441},41,[165,2443,2444],{"class":182},"}\n",[156,2446,2448],{"className":158,"code":2447,"language":160,"meta":161,"style":161},"$record->timeline()\n    ->fromActivityLog()\n    ->addSource(new StripePaymentSource());\n",[121,2449,2450,2462,2470],{"__ignoreMap":161},[165,2451,2452,2454,2456,2458,2460],{"class":167,"line":168},[165,2453,213],{"class":182},[165,2455,223],{"class":193},[165,2457,226],{"class":182},[165,2459,229],{"class":178},[165,2461,232],{"class":182},[165,2463,2464,2466,2468],{"class":167,"line":235},[165,2465,238],{"class":182},[165,2467,241],{"class":178},[165,2469,232],{"class":182},[165,2471,2472,2474,2477,2479,2482,2484],{"class":167,"line":246},[165,2473,238],{"class":182},[165,2475,2476],{"class":178},"addSource",[165,2478,349],{"class":182},[165,2480,2481],{"class":186},"new",[165,2483,1984],{"class":542},[165,2485,2486],{"class":182},"());\n",[117,2488,2489,2490,2492,2493,2496],{},"Prefer ",[121,2491,135],{}," over ",[121,2494,2495],{},"fromCustom()"," when the source is reusable across models, has its own constructor dependencies, or needs to be tested in isolation.",[142,2498,2500,2501,2503],{"id":2499},"per-call-priority-override","Per-call ",[121,2502,311],{}," override",[117,2505,2506,2507,2510,2511,2513,2514,727],{},"Every ",[121,2508,2509],{},"from*()"," method accepts an optional ",[121,2512,311],{}," argument that overrides the default from ",[121,2515,2516],{},"config('activity-log.source_priorities.*')",[156,2518,2520],{"className":158,"code":2519,"language":160,"meta":161,"style":161},"$record->timeline()\n    ->fromActivityLog(priority: 50)\n    ->fromActivityLogOf(['comments'], priority: 60)\n    ->fromRelation('invoices', $configure, priority: 80)\n    ->fromCustom($resolver, priority: 100);\n",[121,2521,2522,2534,2551,2577,2608],{"__ignoreMap":161},[165,2523,2524,2526,2528,2530,2532],{"class":167,"line":168},[165,2525,213],{"class":182},[165,2527,223],{"class":193},[165,2529,226],{"class":182},[165,2531,229],{"class":178},[165,2533,232],{"class":182},[165,2535,2536,2538,2540,2542,2544,2546,2549],{"class":167,"line":235},[165,2537,238],{"class":182},[165,2539,241],{"class":178},[165,2541,349],{"class":182},[165,2543,2064],{"class":542},[165,2545,727],{"class":182},[165,2547,2548],{"class":186}," 50",[165,2550,757],{"class":182},[165,2552,2553,2555,2557,2559,2561,2563,2565,2568,2570,2572,2575],{"class":167,"line":246},[165,2554,238],{"class":182},[165,2556,406],{"class":178},[165,2558,409],{"class":182},[165,2560,412],{"class":182},[165,2562,416],{"class":415},[165,2564,412],{"class":182},[165,2566,2567],{"class":182},"],",[165,2569,2042],{"class":542},[165,2571,727],{"class":182},[165,2573,2574],{"class":186}," 60",[165,2576,757],{"class":182},[165,2578,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2606],{"class":167,"line":633},[165,2580,238],{"class":182},[165,2582,651],{"class":178},[165,2584,349],{"class":182},[165,2586,412],{"class":182},[165,2588,658],{"class":415},[165,2590,412],{"class":182},[165,2592,360],{"class":182},[165,2594,190],{"class":182},[165,2596,548],{"class":193},[165,2598,360],{"class":182},[165,2600,2042],{"class":542},[165,2602,727],{"class":182},[165,2604,2605],{"class":186}," 80",[165,2607,757],{"class":182},[165,2609,2610,2612,2614,2616,2618,2620,2622,2624,2627],{"class":167,"line":646},[165,2611,238],{"class":182},[165,2613,1340],{"class":178},[165,2615,1412],{"class":182},[165,2617,1242],{"class":193},[165,2619,360],{"class":182},[165,2621,2042],{"class":542},[165,2623,727],{"class":182},[165,2625,2626],{"class":186}," 100",[165,2628,1071],{"class":182},[117,2630,2631,2632,2635,2636,2639],{},"Useful when one resource needs a non-default priority without touching ",[121,2633,2634],{},"config\u002Factivity-log.php",". See ",[138,2637,28],{"href":2638},"\u002Fconcepts\u002Fhow-it-works#source-priorities"," for how priority resolves dedup ties.",[2641,2642,2643],"style",{},"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 .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 .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);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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":161,"searchDepth":235,"depth":235,"links":2645},[2646,2647,2648,2652,2653,2654],{"id":144,"depth":235,"text":147},{"id":323,"depth":235,"text":326},{"id":504,"depth":235,"text":507,"children":2649},[2650],{"id":1081,"depth":246,"text":2651},"RelatedModelSource API",{"id":1206,"depth":235,"text":1209},{"id":1834,"depth":235,"text":1837},{"id":2499,"depth":235,"text":2655},"Per-call $priority override","The four built-in source types and how to register custom ones.","md",null,{},{"icon":40},{"description":2662,"ogImage":2663,"title":37},"Reference for the four built-in TimelineSource implementations and addSource() for custom sources in relaticle\u002Factivity-log.","\u002Fpreview.png","Ku1ngWHhccvCzg6hzyIq--_YfjqjRiWfVOC67FtAf-k",[2666,2668],{"title":27,"path":28,"stem":29,"description":2667,"icon":22,"children":-1},"The mental model and vocabulary behind the timeline pipeline.",{"title":42,"path":43,"stem":44,"description":2669,"icon":45,"children":-1},"The infolist component, relation manager, header action, and URL filter UI.",1780504149910]