Week Agenda View

Data Display
Navigation

Week overview with day selector and event details for scheduling.

Preview

Week overview with day selector and event details

This Week

Nov 25 - Dec 1

Team Standup

09:00 - 09:30Zoom
3

Product Review

10:30 - 11:30Conference Room A
5

Focus Time

12:00 - 14:00

Client Call

14:30 - 15:15Phone
2

With Custom Data

Customize days, events, and handle user interactions

This Week

Dec 25 - Dec 31

Team Standup

09:00 - 09:30Zoom
3

Product Review

10:30 - 11:30Conference Room A
5

Focus Time

12:00 - 14:00

Client Call

14:30 - 15:15Phone
2

Props

Component API reference

WeekAgendaView

PropTypeDefaultDescription
daysDayConfig[]Default daysDays configuration
eventsAgendaEvent[]Default eventsEvents for selected day
weekLabelstring"Nov 25 - Dec 1"Week label text
titlestring"This Week"Header title
defaultSelectedDaynumber4Initial selected day index
onDaySelect(dayIndex: number, day: DayConfig) => voidCallback when day is selected
onWeekChange(direction: 'prev' | 'next') => voidCallback when navigating weeks
onEventClick(event: AgendaEvent) => voidCallback when event is clicked
classNamestringAdditional CSS classes

DayConfig

PropTypeDefaultDescription
day*stringDay abbreviation (Mon, Tue, etc.)
date*numberDay of month
events*numberNumber of events
hasImportantbooleanHas important events
isTodaybooleanWhether this is today

AgendaEvent

PropTypeDefaultDescription
id*string | numberUnique identifier
title*stringEvent title
time*stringTime range (e.g., "09:00 - 09:30")
type*'meeting' | 'call' | 'focus'Event type
locationstringEvent location
attendeesnumberNumber of attendees

Usage

Import and implementation examples

import { WeekAgendaView, type AgendaEvent, type DayConfig } from '@/blocks/calendar/week-agenda-view'

// Basic usage with defaults
<WeekAgendaView />

// With custom days and events
const days: DayConfig[] = [
  { day: 'Mon', date: 25, events: 3, hasImportant: false },
  { day: 'Tue', date: 26, events: 2, hasImportant: false },
  { day: 'Wed', date: 27, events: 5, hasImportant: true },
  { day: 'Thu', date: 28, events: 1, hasImportant: false },
  { day: 'Fri', date: 29, events: 4, isToday: true },
  { day: 'Sat', date: 30, events: 0 },
  { day: 'Sun', date: 1, events: 1 }
]

const events: AgendaEvent[] = [
  {
    id: 1,
    title: 'Team Standup',
    time: '09:00 - 09:30',
    type: 'meeting',
    location: 'Zoom',
    attendees: 3
  },
  {
    id: 2,
    title: 'Focus Time',
    time: '12:00 - 14:00',
    type: 'focus'
  }
]

<WeekAgendaView
  days={days}
  events={events}
  weekLabel="Nov 25 - Dec 1"
  title="This Week"
  defaultSelectedDay={4}
  onDaySelect={(dayIndex, day) => {
    console.log('Day selected:', day)
    loadEventsForDay(dayIndex)
  }}
  onWeekChange={(direction) => {
    if (direction === 'next') loadNextWeek()
    else loadPreviousWeek()
  }}
  onEventClick={(event) => openEventModal(event)}
/>

Built With

1 component

This block uses the following UI components from the design system:

Features

Built-in functionality

  • 7-day week selector: Day selector with dates and event counts
  • Event count indicators: Up to 4 dots per day showing event count
  • Important event badges: Red dot indicator for important events
  • Week navigation: Previous/next week controls
  • Selected day highlighting: Indigo background for selected day
  • Today indicator: Subtle background for current day
  • Color-coded events: Meeting, call, and focus types with colors
  • Event details: Time, location, and attendee count
  • Interactive events: Hover states and click handlers
  • Dark mode: Full dark mode support

Accessibility

Accessibility considerations

ARIA Attributes

role="tablist" for day selectoraria-selected for selected dayaria-label for navigation buttons

Keyboard Navigation

KeyAction
Arrow keysNavigate between days
EnterSelect day or event
TabNavigate between sections

Notes

  • Screen readers announce day and event information
  • Event counts are announced for each day
  • Focus indicators on all interactive elements