Calendar Heatmap
A year of days as a dot calendar: round or square cells in week columns, quarters set apart by a gap with a hairline that fades at both ends, single-letter day labels, months and quarters above, and future days left as faint empties.
$149 once · every Pro piece
Levels climb the grey ladder and only the busiest day runs hot; the blackbody heat ramp is opt-in. Start the week on Monday and the weekend rows fade back so the working week leads. Hover a day and it swells on a spring while its neighbours give way, so the gap around it grows; its level lights in the legend, and hovering a legend level isolates every day at that level. Narrow widths scroll horizontally with faded edges, starting at the latest weeks, while the day letters stay pinned. Tab in and the arrows walk the days, a week or a day at a time. Loading is a shimmer wave across the same lattice.
Install
npx shadcn@latest add @obsyde/calendar-heatmapNeeds your licence key · Get Pro
Usage
Import it from where the CLI puts it, or copy the files below by hand.
import { CalendarHeatmap } from '@/components/obsyde/ember/calendar-heatmap/CalendarHeatmap';
export function Example() {
return (
<CalendarHeatmap shape="round" />
);
}
Files
What you get with Pro: plain React, TypeScript and CSS, with no dependencies.
ember/calendar-heatmap/CalendarHeatmap.tsxcomponentember/calendar-heatmap/calendar-heatmap.cssstylesember/calendar-heatmap/CalendarHeatmapDemo.tsxdemoember/viz-kit/viz-kit.csssharedember/viz-kit/Tooltip.tsxsharedember/viz-kit/focus.tssharedember/viz-kit/patterns.tsxsharedember/viz-kit/roll.tssharedember/shared/rolling-number.csssharedember/shared/spring.tssharedember/shared/accent.tssharedember/viz-kit/scale.tssharedember/viz-kit/motion.tssharedember/viz-kit/chart.tsxsharedember/shared/ember.csssharedember/viz-kit/touch.tssharedember/viz-kit/keyboard.tssharedember/viz-kit/size.tssharedember/viz-kit/state-messages.tsxsharedember/viz-kit/Legend.tsxsharedember/viz-kit/demo.tsxsharedember/viz-kit/demo.cssshared
API
| Prop | Type | Default |
|---|---|---|
accentAccent | 'ember' | 'volt' | 'arc' | 'ember' |
shapeShape | 'round' | 'square' | 'round' |
weekStartWeek starts | 'sunday' | 'monday' | 'sunday' |
scaleScale | 'heat' | 'mono' | 'mono' |
separatorsSeparators | 'fade' | 'none' | 'fade' |
dayLabelsDay labels | 'all' | 'alternate' | 'all' |
monthsMonths | number | 12 |
legendLegend | 'levels' | 'none' | 'levels' |
tooltipTooltip | 'panel' | 'none' | 'panel' |
revealReveal | 'wave' | 'none' | 'wave' |
statusStatus | 'ready' | 'loading' | 'empty' | 'ready' |
seedSeed | number | 11 |