Punch Card
Day by hour as a grid of dots sized, and optionally shaded up the grey ladder, by value, so the busy hours of the week read at a glance and empty slots stay as pinpricks.
$149 once · every Pro piece
The current hour is live: its dot burns in the accent inside a slow pilot-light ring, the one hot value on the card. Hover any dot and its row and column rise as soft filled bands that fade at both ends, their labels brighten, the dot lifts on a spring and the rest of the week steps back; the panel compares the hour with that day's average. Tab in and the arrows walk the grid. Dots ripple in diagonally; loading is a shimmering lattice.
Install
npx shadcn@latest add @obsyde/punch-cardNeeds your licence key · Get Pro
Usage
Import it from where the CLI puts it, or copy the files below by hand.
import { PunchCard } from '@/components/obsyde/ember/punch-card/PunchCard';
export function Example() {
return (
<PunchCard encode="size-shade" />
);
}
Files
What you get with Pro: plain React, TypeScript and CSS, with no dependencies.
ember/punch-card/PunchCard.tsxcomponentember/punch-card/punch-card.cssstylesember/punch-card/PunchCardDemo.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/demo.tsxsharedember/viz-kit/demo.cssshared
API
| Prop | Type | Default |
|---|---|---|
accentAccent | 'ember' | 'volt' | 'arc' | 'ember' |
shapeShape | 'circle' | 'square' | 'circle' |
encodeEncode | 'size-shade' | 'size' | 'size-shade' |
crosshairHover bands | 'band' | 'none' | 'band' |
nowLive hour | boolean | true |
legendLegend | 'size' | 'none' | 'size' |
tooltipTooltip | 'panel' | 'none' | 'panel' |
revealReveal | 'wave' | 'none' | 'wave' |
statusStatus | 'ready' | 'loading' | 'empty' | 'ready' |
seedSeed | number | 4 |