
Calendar
A month on a plate. The month and year sit on two drums behind a window and roll when you page; the chosen day is a latched cap, a range is a groove cut between two caps, and events are lamps named in the line below.
Kit parts
A date picker as the block calendar that hangs in a kitchen: a thick pad bound at the top, one thin sheet a day, torn off along its perforation as you move forward and laid back on when you go back. The small printed month at the foot of the sheet is the picker.
The sheet is paper from the kit’s paper tokens, so a dark finish dims it rather than darkening it, and the second ink is mixed from the paper ink and the kit red. A change forward keeps the new day as the base and lays a copy of the old sheet over it: a CSS 3D turn from the binding corner, a shadow that passes under the curl, and a jagged stub left at the perforation for a moment. A move of several days fans up to five copies, each a little behind the last, then lands on the date. A move back lays a copy of the earlier sheet on from above and settles it. The printed month is rebuilt from the calendar part’s own weeks and weekday arithmetic; tearSheets(from, to) is pure and caps the fan at five. Reduced motion skips the copies and changes the sheet at once, and the hidden field follows every change.
| Name | Kind | Description |
|---|---|---|
| value | attribute | The chosen day, also written to the hidden field. Set it to change the sheet from your own code. |
| name | attribute | The hidden input carries the ISO date with the form. |
| min · max | attribute | The ends of the range. Days outside stay printed, are disabled and can never be chosen. |
| flagged | attribute | Days printed in the second ink beside Sundays: closures, no-delivery days. |
| locale · first-day | attribute | Month, weekday and day names come from Intl; the week starts on the calendar part’s own setting. |
| change | event | Fires once the chosen day has changed, after the tear has settled. |
| tearSheets(from, to) | function | Pure: how many sheets a move tears, from 0 (back) to 5 (the fan), or null for a date it cannot read. |
Press a date in the printed month and the sheet tears forward to that date (an earlier date lays a sheet back on); press the big printed day or the next-day key and it tears one sheet. It picks one day, never a range: a range is a different part, the Date picker or the Calendar. Use the day keys beside the block or the printed month at the foot. Arrows move a day or a week, Home and End a week’s ends, Page Up and Page Down a month, Enter chooses. The tear plays on a change forward; reduced motion changes the sheet at once.

A month on a plate. The month and year sit on two drums behind a window and roll when you page; the chosen day is a latched cap, a range is a groove cut between two caps, and events are lamps named in the line below.

A date field with its calendar card in a slot underneath: type a date in any common form for your locale, or press the key and the card slides out. Single dates and ranges; shown the Intl way, posted as ISO.

A date typed in three segments, day, month and year, in the field’s own well. Each segment is a small number you can step with the arrow keys or type over, and typing moves you on by itself once a number is complete. The order and the separator are the reader’s. A calendar key at the right of the well opens the kit’s calendar for anyone who would rather point. The form gets an ISO date, yyyy-mm-dd, or nothing while the date is not complete, and a wrong date says what is wrong in a sentence: February has 28 days in 2026.