Scheduler - Scoped Outlets
Use global and view-scoped child outlets.
#Choose a Scope
Outlet resolution moves from broad declarations to specific declarations. Use the broadest fallback that gives users a consistent surface, then override only the views or grouped layouts that need different content.
| Scope | Use |
|---|---|
| Global fallback | Scheduler.Content > Scheduler.Event covers every event surface that does not declare a more specific outlet. |
| View scope | Scheduler.Month > Scheduler.MonthEvent or Scheduler.Week > Scheduler.TimeGridEvent changes one view family. |
| Resource scope | Scheduler.ResourceTimeline > Scheduler.TimelineEvent or Scheduler.ResourceTimeline > Scheduler.ResourceRow changes resource timeline surfaces. |
| Date scope | Scheduler.DateWeek or Scheduler.DateMonth changes date-grouped layouts. |
| Resource column scope | Scheduler.ResourceWeek > Scheduler.ResourceColumnHeader changes horizontal resource headers. |
Use Style when the default surface only needs state color, size, or token changes. Use Event UI when the main question is how a card should be built. Use scoped outlets when the same Scheduler instance needs different UI per view or grouping mode.
#Small Override
A global fallback plus one scoped month override is the smallest useful precedence pattern.
<Scheduler.Content>
<Scheduler.Event>
<DefaultEventCard />
</Scheduler.Event>
<Scheduler.Month>
<Scheduler.MonthEvent>
<CompactMonthEvent />
</Scheduler.MonthEvent>
</Scheduler.Month>
</Scheduler.Content>With that structure, month uses CompactMonthEvent. Week, day, timeline, and agenda can still use DefaultEventCard until they declare their own scoped outlet.
#Precedence
More specific declarations win over broader declarations. Scheduler does not merge two components for the same event surface.
- Resource scopes beat view and global scopes, such as
ResourceTimelinedeclaring its ownTimelineEvent. - Date scopes beat view and global scopes, such as
DateWeekdeclaring its own resource column header. - View scopes beat global scopes, such as
Monthdeclaring its ownMonthEvent. - Global scopes beat the built-in fallback, such as
ContentdeclaringEvent.
Combine a broad fallback with a few overrides when the product has a default card and one or two special views. Declare a surface only once within the scope that should win. Duplicate declarations can make later maintainers think both components render, but only the resolved outlet is used.
#Views
One Scheduler instance can use a global event fallback plus visibly different month, week, timeline, and agenda scoped outlets.
One Scheduler instance can use a compact month card, a detailed week card, a resource-aware timeline card, and a custom agenda row. No branching around the entire scheduler is needed.
<Scheduler.Content>
<Scheduler.Event>
<DefaultEvent />
</Scheduler.Event>
<Scheduler.Month>
<Scheduler.MonthEvent>
<MonthEvent />
</Scheduler.MonthEvent>
</Scheduler.Month>
<Scheduler.ResourceTimeline>
<Scheduler.TimelineEvent>
<ResourceTimelineEvent />
</Scheduler.TimelineEvent>
</Scheduler.ResourceTimeline>
</Scheduler.Content>#Advanced Example
Customize only the active resource scope with scoped outlets. The global fallback keeps the rest of the Scheduler consistent.
#Troubleshooting
| Problem | Check |
|---|---|
| My override is not used. | Confirm the active view matches the scope. A Scheduler.MonthEvent inside Scheduler.Month will not render in week or timeline. |
| The fallback still appears. | A more specific outlet may be missing for the active view, so Scheduler correctly falls back to Scheduler.Event. |
| I see a card inside another card. | Set event-shell="none" when the child component paints the event chrome. Use agenda-event-shell="none" for agenda rows. |
| Resource UI ignores my event override. | Resource timeline events need a Scheduler.ResourceTimeline > Scheduler.TimelineEvent override when the resource view needs different event UI. |
| Date-grouped columns share the wrong header. | Move the header outlet into the date-grouped scope that owns the active view. |
#API
Public scope parts include Scheduler.Month, Scheduler.Week, Scheduler.Day, Scheduler.Timeline, Scheduler.Agenda, Scheduler.Year, Scheduler.ResourceDay, Scheduler.ResourceWeek, Scheduler.ResourceMonth, Scheduler.ResourceTimeline, Scheduler.DateDay, Scheduler.DateWeek, and Scheduler.DateMonth. Payload fields are listed in Slots and Contexts.