ComponentsCalendar & time

Resource calendar

People, rooms or equipment as rows and days or hours as columns, holding blocks: shifts, absences, bookings, allocations. It has a template palette, rule warnings (never hard blocks), a working calendar with holidays, a one-code-per-cell variant for attendance sheets, and a full keyboard grid. Every drag has a menu or key alternative.

Own grid: usePointerDrag, @tanstack/react-virtual, date-fns scheduler/resource-calendar.tsx, scheduler/core/time-scale.ts, scheduler/shared.ts, sortable/use-pointer-drag.ts, styles/calendar.csstheme · material · accent · density · font

November 9 – 15, 2026

Name
Mon9
Tue10
Wed11
Thu12
Fri13
Sat14
Sun15
Kitchen3
Ayşe Demir
Head chef
24 h
Ayşe Demir, Monday, November 9. Morning, 7:00 AM–3:00 PM
Ayşe Demir, Tuesday, November 10. Morning, 7:00 AM–3:00 PM
Ayşe Demir, Wednesday, November 11. Split, 11:00 AM–7:00 PM
Ayşe Demir, Thursday, November 12. empty
Ayşe Demir, Friday, November 13. empty
Ayşe Demir, Saturday, November 14. empty
Ayşe Demir, Sunday, November 15. empty
Liam Carter
Sous chef
24 h
Liam Carter, Monday, November 9. Evening, 3:00 PM–11:00 PM
Liam Carter, Tuesday, November 10. Evening, 3:00 PM–11:00 PM
Liam Carter, Wednesday, November 11. empty
Liam Carter, Thursday, November 12. Morning, 7:00 AM–3:00 PM
Liam Carter, Friday, November 13. empty
Liam Carter, Saturday, November 14. empty
Liam Carter, Sunday, November 15. empty
Can Öztürk
Line cook
24 h
Can Öztürk, Monday, November 9. empty
Can Öztürk, Tuesday, November 10. empty
Can Öztürk, Wednesday, November 11. Evening, 3:00 PM–11:00 PM
Can Öztürk, Thursday, November 12. Evening, 3:00 PM–11:00 PM
Can Öztürk, Friday, November 13. Evening, 3:00 PM–11:00 PM
Can Öztürk, Saturday, November 14. empty
Can Öztürk, Sunday, November 15. empty
Front of house3
Noor Haddad
Host
16 h
Noor Haddad, Monday, November 9. empty
Noor Haddad, Tuesday, November 10. empty
Noor Haddad, Wednesday, November 11. empty
Noor Haddad, Thursday, November 12. empty
Noor Haddad, Friday, November 13. Evening, 3:00 PM–11:00 PM
Noor Haddad, Saturday, November 14. Evening, 3:00 PM–11:00 PM
Noor Haddad, Sunday, November 15. empty
Marta Silva
Server
8 h
Marta Silva, Monday, November 9. empty
Marta Silva, Tuesday, November 10. Annual leave
Marta Silva, Wednesday, November 11. Annual leave
Marta Silva, Thursday, November 12. empty
Marta Silva, Friday, November 13. empty
Marta Silva, Saturday, November 14. Split, 11:00 AM–7:00 PM
Marta Silva, Sunday, November 15. empty
Emre Yıldız
Bartender
16 h
Emre Yıldız, Monday, November 9. empty
Emre Yıldız, Tuesday, November 10. empty
Emre Yıldız, Wednesday, November 11. empty
Emre Yıldız, Thursday, November 12. empty
Emre Yıldız, Friday, November 13. Evening, 3:00 PM–11:00 PM
Emre Yıldız, Saturday, November 14. Evening, 3:00 PM–11:00 PM
Emre Yıldız, Sunday, November 15. empty
Scheduled
2
3
3
2
3
3
0

Installation

$ pnpm add @vamos-ui/react

The whole kit as one package — get updates by bumping the version. Add the styles to globals.css: @import "@vamos-ui/react/styles.css";

Usage

import { ResourceCalendar, minRestRule } from "@vamos-ui/react/scheduler";

<ResourceCalendar
  resources={staff}                       // { id, title, avatarUrl?, group?, meta? }
  blocks={shifts}                         // { id, resourceId, start, end, label?, tone?, status? }
  range={{ start: "2026-11-09", end: "2026-11-15" }}
  onRangeChange={setRange}
  templates={[{ id: "am", label: "Morning", start: "07:00", end: "15:00", tone: "chart-2" }]}
  rules={[minRestRule(11 * 60)]}
  onBlocksChange={({ created, updated, deleted }) => api.shifts.sync({ created, updated, deleted })}
/>

Keyboard: the grid has one tab stop. Use the arrow keys to move, Shift+arrows to select, Enter for the cell menu (assign template, remove, your actions) and Delete to clear (with Undo). Alt+arrows move the cell's blocks. In codes mode, type a code.

Pointer: drag across cells to select. Click a palette template to arm it, then click or drag over cells to paint. You can also drag a template or a block onto a cell. Every drag has a menu or keyboard path (WCAG 2.5.7).

Blocks are opaque colour mixes and never blur. Only the outer surface uses the glass material.

Examples

Leave plan (month)

HR leave plan: multi-day blocks run across cells. Pending is striped, approved is solid, rejected is hidden unless you show it, and a half day takes half a cell. The cell menu has a custom “Request time off…” action.

November 1 – 30, 2026

Striped = pending
Name
Sun1
Mon2
Tue3
Wed4
Thu5
Fri6
Sat7
Sun8
Mon9
Tue10
Wed11
Thu12
Fri13
Sat14
Sun15
Mon16
Tue17
Wed18
Thu19
Fri20
Sat21
Sun22
Mon23
Tue24
Wed25
Thu26
Fri27
Sat28
Sun29
Mon30
Defne Aydın
12 days left
Defne Aydın, Sunday, November 1. empty
Defne Aydın, Monday, November 2. Annual leave
Defne Aydın, Tuesday, November 3. Annual leave
Defne Aydın, Wednesday, November 4. Annual leave
Defne Aydın, Thursday, November 5. Annual leave
Defne Aydın, Friday, November 6. Annual leave
Defne Aydın, Saturday, November 7. empty
Defne Aydın, Sunday, November 8. empty
Defne Aydın, Monday, November 9. empty
Defne Aydın, Tuesday, November 10. empty
Defne Aydın, Wednesday, November 11. empty
Defne Aydın, Thursday, November 12. empty
Defne Aydın, Friday, November 13. empty
Defne Aydın, Saturday, November 14. empty
Defne Aydın, Sunday, November 15. empty
Defne Aydın, Monday, November 16. empty
Defne Aydın, Tuesday, November 17. empty
Defne Aydın, Wednesday, November 18. empty
Defne Aydın, Thursday, November 19. empty
Defne Aydın, Friday, November 20. empty
Defne Aydın, Saturday, November 21. empty
Defne Aydın, Sunday, November 22. empty
Defne Aydın, Monday, November 23. empty
Defne Aydın, Tuesday, November 24. empty
Defne Aydın, Wednesday, November 25. Doctor, afternoon
Defne Aydın, Thursday, November 26. empty
Defne Aydın, Friday, November 27. empty
Defne Aydın, Saturday, November 28. empty
Defne Aydın, Sunday, November 29. empty
Defne Aydın, Monday, November 30. empty
James O’Neill
4 days left
James O’Neill, Sunday, November 1. empty
James O’Neill, Monday, November 2. empty
James O’Neill, Tuesday, November 3. empty
James O’Neill, Wednesday, November 4. empty
James O’Neill, Thursday, November 5. empty
James O’Neill, Friday, November 6. empty
James O’Neill, Saturday, November 7. empty
James O’Neill, Sunday, November 8. empty
James O’Neill, Monday, November 9. empty
James O’Neill, Tuesday, November 10. empty
James O’Neill, Wednesday, November 11. Annual leave, pending approval
James O’Neill, Thursday, November 12. Annual leave, pending approval
James O’Neill, Friday, November 13. Annual leave, pending approval
James O’Neill, Saturday, November 14. empty
James O’Neill, Sunday, November 15. empty
James O’Neill, Monday, November 16. empty
James O’Neill, Tuesday, November 17. empty
James O’Neill, Wednesday, November 18. empty
James O’Neill, Thursday, November 19. empty
James O’Neill, Friday, November 20. empty
James O’Neill, Saturday, November 21. empty
James O’Neill, Sunday, November 22. empty
James O’Neill, Monday, November 23. empty
James O’Neill, Tuesday, November 24. empty
James O’Neill, Wednesday, November 25. empty
James O’Neill, Thursday, November 26. empty
James O’Neill, Friday, November 27. empty
James O’Neill, Saturday, November 28. empty
James O’Neill, Sunday, November 29. empty
James O’Neill, Monday, November 30. empty
Selin Arslan
18 days left
Selin Arslan, Sunday, November 1. empty
Selin Arslan, Monday, November 2. empty
Selin Arslan, Tuesday, November 3. empty
Selin Arslan, Wednesday, November 4. empty
Selin Arslan, Thursday, November 5. empty
Selin Arslan, Friday, November 6. empty
Selin Arslan, Saturday, November 7. empty
Selin Arslan, Sunday, November 8. empty
Selin Arslan, Monday, November 9. empty
Selin Arslan, Tuesday, November 10. empty
Selin Arslan, Wednesday, November 11. empty
Selin Arslan, Thursday, November 12. empty
Selin Arslan, Friday, November 13. empty
Selin Arslan, Saturday, November 14. empty
Selin Arslan, Sunday, November 15. empty
Selin Arslan, Monday, November 16. Sick
Selin Arslan, Tuesday, November 17. empty
Selin Arslan, Wednesday, November 18. empty
Selin Arslan, Thursday, November 19. empty
Selin Arslan, Friday, November 20. empty
Selin Arslan, Saturday, November 21. empty
Selin Arslan, Sunday, November 22. empty
Selin Arslan, Monday, November 23. empty
Selin Arslan, Tuesday, November 24. empty
Selin Arslan, Wednesday, November 25. empty
Selin Arslan, Thursday, November 26. empty
Selin Arslan, Friday, November 27. empty
Selin Arslan, Saturday, November 28. empty
Selin Arslan, Sunday, November 29. empty
Selin Arslan, Monday, November 30. empty
Tomás Rivera
9 days left
Tomás Rivera, Sunday, November 1. empty
Tomás Rivera, Monday, November 2. empty
Tomás Rivera, Tuesday, November 3. empty
Tomás Rivera, Wednesday, November 4. empty
Tomás Rivera, Thursday, November 5. empty
Tomás Rivera, Friday, November 6. empty
Tomás Rivera, Saturday, November 7. empty
Tomás Rivera, Sunday, November 8. empty
Tomás Rivera, Monday, November 9. empty
Tomás Rivera, Tuesday, November 10. empty
Tomás Rivera, Wednesday, November 11. empty
Tomás Rivera, Thursday, November 12. empty
Tomás Rivera, Friday, November 13. empty
Tomás Rivera, Saturday, November 14. empty
Tomás Rivera, Sunday, November 15. empty
Tomás Rivera, Monday, November 16. empty
Tomás Rivera, Tuesday, November 17. empty
Tomás Rivera, Wednesday, November 18. empty
Tomás Rivera, Thursday, November 19. empty
Tomás Rivera, Friday, November 20. empty
Tomás Rivera, Saturday, November 21. empty
Tomás Rivera, Sunday, November 22. empty
Tomás Rivera, Monday, November 23. Parental leave
Tomás Rivera, Tuesday, November 24. Parental leave
Tomás Rivera, Wednesday, November 25. Parental leave
Tomás Rivera, Thursday, November 26. Parental leave
Tomás Rivera, Friday, November 27. Parental leave
Tomás Rivera, Saturday, November 28. empty
Tomás Rivera, Sunday, November 29. empty
Tomás Rivera, Monday, November 30. empty
Hana Sato
15 days left
Hana Sato, Sunday, November 1. empty
Hana Sato, Monday, November 2. empty
Hana Sato, Tuesday, November 3. empty
Hana Sato, Wednesday, November 4. empty
Hana Sato, Thursday, November 5. empty
Hana Sato, Friday, November 6. empty
Hana Sato, Saturday, November 7. empty
Hana Sato, Sunday, November 8. empty
Hana Sato, Monday, November 9. empty
Hana Sato, Tuesday, November 10. empty
Hana Sato, Wednesday, November 11. empty
Hana Sato, Thursday, November 12. empty
Hana Sato, Friday, November 13. empty
Hana Sato, Saturday, November 14. empty
Hana Sato, Sunday, November 15. empty
Hana Sato, Monday, November 16. empty
Hana Sato, Tuesday, November 17. empty
Hana Sato, Wednesday, November 18. empty
Hana Sato, Thursday, November 19. Annual leave, pending approval
Hana Sato, Friday, November 20. Annual leave, pending approval
Hana Sato, Saturday, November 21. empty
Hana Sato, Sunday, November 22. empty
Hana Sato, Monday, November 23. empty
Hana Sato, Tuesday, November 24. empty
Hana Sato, Wednesday, November 25. empty
Hana Sato, Thursday, November 26. empty
Hana Sato, Friday, November 27. empty
Hana Sato, Saturday, November 28. empty
Hana Sato, Sunday, November 29. empty
Hana Sato, Monday, November 30. empty
Scheduled
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1

Rules: rest hours and weekly cap

Rules are plain objects. Here they use Turkish labour-law values as an example dataset: 11 h rest, a 45 h week, at most one person off per day. Problems get a corner flag and are part of the cell's accessible name. Team rules flag the day header.

Name
Mon9
Tue10
Wed11
Thu12
Fri13
Sat14
Sun15
Kerem Polat
Warehouse
Kerem Polat, Monday, November 9. Late, 2:00 PM–10:00 PM
Kerem Polat, Tuesday, November 10. Early, 6:00 AM–2:00 PM. Warning: Only 8 h rest before this shift
Kerem Polat, Wednesday, November 11. empty
Kerem Polat, Thursday, November 12. Sick
Kerem Polat, Friday, November 13. empty
Kerem Polat, Saturday, November 14. empty
Kerem Polat, Sunday, November 15. empty
Mara Fischer
Warehouse
Mara Fischer, Monday, November 9. Day, 8:00 AM–5:00 PM
Mara Fischer, Tuesday, November 10. Day, 8:00 AM–5:00 PM
Mara Fischer, Wednesday, November 11. Day, 8:00 AM–5:00 PM
Mara Fischer, Thursday, November 12. Day, 8:00 AM–5:00 PM
Mara Fischer, Friday, November 13. Day, 8:00 AM–5:00 PM
Mara Fischer, Saturday, November 14. Day, 8:00 AM–5:00 PM. Problem: 54 h scheduled, over the 45 h limit
Mara Fischer, Sunday, November 15. empty
Murat Çelik
Dispatch
Murat Çelik, Monday, November 9. empty
Murat Çelik, Tuesday, November 10. empty
Murat Çelik, Wednesday, November 11. empty
Murat Çelik, Thursday, November 12. Annual leave
Murat Çelik, Friday, November 13. empty
Murat Çelik, Saturday, November 14. empty
Murat Çelik, Sunday, November 15. empty
Scheduled
2
2
1
3
1
1
0

Rooms × hours

unit="hour" makes each column an hour slot, for spa or meeting-room booking. Blocks span slots by their real start and end.

Tuesday, November 10, 2026

Name
10 Tue9 AM
 10 AM
 11 AM
 12 PM
 1 PM
 2 PM
 3 PM
 4 PM
 5 PM
 6 PM
 7 PM
Treatment room 1
Massage
Treatment room 1, Tue, Nov 10 9:00 AM. Deep tissue · Elif K., 9:00 AM–10:30 AM
Treatment room 1, Tue, Nov 10 10:00 AM. empty
Treatment room 1, Tue, Nov 10 11:00 AM. empty
Treatment room 1, Tue, Nov 10 12:00 PM. empty
Treatment room 1, Tue, Nov 10 1:00 PM. Swedish · Jonas W., 1:00 PM–2:00 PM
Treatment room 1, Tue, Nov 10 2:00 PM. empty
Treatment room 1, Tue, Nov 10 3:00 PM. empty
Treatment room 1, Tue, Nov 10 4:00 PM. empty
Treatment room 1, Tue, Nov 10 5:00 PM. empty
Treatment room 1, Tue, Nov 10 6:00 PM. empty
Treatment room 1, Tue, Nov 10 7:00 PM. empty
Treatment room 2
Facial
Treatment room 2, Tue, Nov 10 9:00 AM. empty
Treatment room 2, Tue, Nov 10 10:00 AM. Hydrafacial · Aylin, 10:00 AM–11:00 AM
Treatment room 2, Tue, Nov 10 11:00 AM. empty
Treatment room 2, Tue, Nov 10 12:00 PM. empty
Treatment room 2, Tue, Nov 10 1:00 PM. empty
Treatment room 2, Tue, Nov 10 2:00 PM. empty
Treatment room 2, Tue, Nov 10 3:00 PM. empty
Treatment room 2, Tue, Nov 10 4:00 PM. empty
Treatment room 2, Tue, Nov 10 5:00 PM. empty
Treatment room 2, Tue, Nov 10 6:00 PM. empty
Treatment room 2, Tue, Nov 10 7:00 PM. empty
Hammam
Up to 4 guests
Hammam, Tue, Nov 10 9:00 AM. empty
Hammam, Tue, Nov 10 10:00 AM. empty
Hammam, Tue, Nov 10 11:00 AM. Group ritual, 11:00 AM–1:00 PM, pending approval
Hammam, Tue, Nov 10 12:00 PM. empty
Hammam, Tue, Nov 10 1:00 PM. empty
Hammam, Tue, Nov 10 2:00 PM. empty
Hammam, Tue, Nov 10 3:00 PM. empty
Hammam, Tue, Nov 10 4:00 PM. empty
Hammam, Tue, Nov 10 5:00 PM. empty
Hammam, Tue, Nov 10 6:00 PM. empty
Hammam, Tue, Nov 10 7:00 PM. empty
Couples suite
Massage · 2 beds
Couples suite, Tue, Nov 10 9:00 AM. empty
Couples suite, Tue, Nov 10 10:00 AM. empty
Couples suite, Tue, Nov 10 11:00 AM. empty
Couples suite, Tue, Nov 10 12:00 PM. empty
Couples suite, Tue, Nov 10 1:00 PM. empty
Couples suite, Tue, Nov 10 2:00 PM. empty
Couples suite, Tue, Nov 10 3:00 PM. empty
Couples suite, Tue, Nov 10 4:00 PM. Anniversary package, 4:00 PM–6:00 PM
Couples suite, Tue, Nov 10 5:00 PM. empty
Couples suite, Tue, Nov 10 6:00 PM. empty
Couples suite, Tue, Nov 10 7:00 PM. empty

Attendance codes

variant="codes" puts one short code in each cell, for attendance sheets (the Time tracker recipe). Type a code to set it, Shift+arrows select a range, Delete clears it (with Undo).

Focus a cell and type W, R, L or S to set it. Shift + arrows select a range, Delete clears it.

November 2 – 15, 2026

Name
Mon2
Tue3
Wed4
Thu5
Fri6
Sat7
Sun8
Mon9
Tue10
Wed11
Thu12
Fri13
Sat14
Sun15
Olivia Brooks
Olivia Brooks, Monday, November 2. Worked
Olivia Brooks, Tuesday, November 3. Worked
Olivia Brooks, Wednesday, November 4. Remote
Olivia Brooks, Thursday, November 5. Worked
Olivia Brooks, Friday, November 6. Worked
Olivia Brooks, Saturday, November 7. empty
Olivia Brooks, Sunday, November 8. empty
Olivia Brooks, Monday, November 9. Worked
Olivia Brooks, Tuesday, November 10. Leave
Olivia Brooks, Wednesday, November 11. Leave
Olivia Brooks, Thursday, November 12. Worked
Olivia Brooks, Friday, November 13. Remote
Olivia Brooks, Saturday, November 14. empty
Olivia Brooks, Sunday, November 15. empty
Deniz Koç
Deniz Koç, Monday, November 2. Worked
Deniz Koç, Tuesday, November 3. Remote
Deniz Koç, Wednesday, November 4. Worked
Deniz Koç, Thursday, November 5. Worked
Deniz Koç, Friday, November 6. empty
Deniz Koç, Saturday, November 7. empty
Deniz Koç, Sunday, November 8. Worked
Deniz Koç, Monday, November 9. Leave
Deniz Koç, Tuesday, November 10. Leave
Deniz Koç, Wednesday, November 11. Worked
Deniz Koç, Thursday, November 12. Remote
Deniz Koç, Friday, November 13. empty
Deniz Koç, Saturday, November 14. empty
Deniz Koç, Sunday, November 15. Worked
Rafael Costa
Rafael Costa, Monday, November 2. Remote
Rafael Costa, Tuesday, November 3. Worked
Rafael Costa, Wednesday, November 4. Worked
Rafael Costa, Thursday, November 5. Sick
Rafael Costa, Friday, November 6. empty
Rafael Costa, Saturday, November 7. Worked
Rafael Costa, Sunday, November 8. Leave
Rafael Costa, Monday, November 9. Leave
Rafael Costa, Tuesday, November 10. Worked
Rafael Costa, Wednesday, November 11. Remote
Rafael Costa, Thursday, November 12. empty
Rafael Costa, Friday, November 13. empty
Rafael Costa, Saturday, November 14. Worked
Rafael Costa, Sunday, November 15. Worked
Ines Moreau
Ines Moreau, Monday, November 2. Worked
Ines Moreau, Tuesday, November 3. Worked
Ines Moreau, Wednesday, November 4. empty
Ines Moreau, Thursday, November 5. empty
Ines Moreau, Friday, November 6. Worked
Ines Moreau, Saturday, November 7. Leave
Ines Moreau, Sunday, November 8. Leave
Ines Moreau, Monday, November 9. Worked
Ines Moreau, Tuesday, November 10. Remote
Ines Moreau, Wednesday, November 11. empty
Ines Moreau, Thursday, November 12. empty
Ines Moreau, Friday, November 13. Worked
Ines Moreau, Saturday, November 14. Worked
Ines Moreau, Sunday, November 15. Remote
Scheduled
4
4
3
2
2
1
1
2
2
2
2
2
2
3

300 people

Rows are virtualized from 60 resources (virtualizeAt). The header and row names stay sticky.

Name
Mon9
Tue10
Wed11
Thu12
Fri13
Sat14
Sun15
Scheduled
200
200
200
200
200
0
0

API

ResourceCalendar

PropTypeDefault
resources
{ id, title, avatarUrl?, group?, meta?, readOnly? }. meta is the second line, such as “Head chef” or “9 days left”.
Resource[]—
blocks
{ id, resourceId, start, end, label?, code?, kind?, tone?, status?, halfDay?, editable?, note? }. In day mode, YYYY-MM-DD dates (inclusive) or UTC ISO instants for timed shifts. In hour mode, UTC ISO instants.
ResourceBlock[]—
range
Visible days, inclusive YYYY-MM-DD.
{ start, end }—
onRangeChange
Shows Today, ‹ and › in the toolbar. Steps by the range length, or by month when the range is a whole month.
(range) => void—
unit
Day columns, or hour slots of each day.
"day" | "hour""day"
hours
Hour mode: the visible hours.
{ start: "08:00", end: "20:00" }08:00–20:00
variant
codes puts one short code in each cell. Assigning replaces what's there.
"blocks" | "codes""blocks"
templates
{ id, label, start?, end?, tone?, code?, kind?, shortcut?, status? }. Shown as the palette and in the cell menu. With start and end the template makes a timed shift (overnight works).
ResourceTemplate[]—
rules
{ id, check?(ctx), checkTeam?(ctx) } returning { blockId? | day?, message, severity }. Rules only warn. Built-in factories: minRestRule, maxHoursRule, maxConcurrentRule.
ResourceRule[]—
workCalendar
Work days and holidays (tr → Turkish public holidays). Weekend and holiday columns are shaded.
WorkCalendarfrom locale
onBlocksChange
Every edit in one change set. Applied at once; a rejected promise reverts it. Deletes offer Undo.
({ created?, updated?, deleted? }) => void | Promise<void>—
cellActions / onCellAction
Extra cell-menu items, such as “Request time off”. Receives the selected cells.
{ id, label, tone? }[] / ({ id, cells }) => void—
onBlockOpen
Adds the cell's blocks to the cell menu as items that open them.
(block) => void—
renderBlock
Custom block content.
(block, { compact }) => ReactNode—
summary
The sticky summary row.
((day, blocks) => ReactNode) | falseheadcount
rowSummary
A trailing value in each row header, such as “38 h”.
(resource, blocks) => ReactNode—
groupBy
Group rows by resource.group, with a header row for each group.
"group" | nullnull
showRejected
Show rejected blocks, struck through.
booleanfalse
readOnly / loading
No edits / skeleton rows (or dimmed rows while reloading).
booleanfalse
timeZone
Zone for timed blocks and templates.
stringLocaleProvider timeZone
height / virtualizeAt
Scroll height, and the resource count from which rows are virtualized.
string | number / number"32rem" / 60
toolbar
Extra toolbar content.
ReactNode—
labels
Overrides for the resourceCalendar namespace strings.
Partial<ResourceCalendarLabels>—

Rule factories

PropTypeDefault
minRestRule(minutes, message?)
Warns when two timed blocks of one person are closer than minutes apart.
ResourceRule—
maxHoursRule(minutes, message?)
Danger when a person's timed blocks in the range go over the cap.
ResourceRule—
maxConcurrentRule(max, kinds, message?)
Flags days on which more than max people have a block of those kinds.
ResourceRule—