ns-ui

Date Range Tape

Date-range calendar where the selection is a tape measure: clicking anchors the hook, moving extends a mono-ticked strip across the grid with a live night count on its free end, and confirming locks it in place or Escape recoils it to zero.

Use when a date range where the duration itself is the thing being decided at the point of selection (booking a stay, sizing a sprint, bounding a report window) — the tape is an instrument with ticks and a printed 'N nights' count, not a colored region whose length you have to infer. Pick date-picker-moon instead for a single date, not a span.

Install

npx shadcn add https://design.helpmarq.com/r/date-range-tape.json
  • date-picker
  • calendar
  • range
  • grid
  • keyboard
  • measurement
  • form
  • micro-interaction

ns-ui / date-range-tape

Cabin on Lake Verity

Pick your dates — the tape measures the stay as you drag, not after.

Stay dates

Select a start date

August 2026

Su
Mo
Tu
We
Th
Fr
Sa

No dates selected

Click a day to hook the tape, move toward another to extend it — the count prints on the free end. Click again (or Enter) to lock it, Escape to let it recoil back to zero.

Props

PropTypeDefaultDescription
label?stringvisible label above the grid
initialMonth?Datemonth to open on, when uncontrolled and no value is set
value?SpanTapeRange | nullcontrolled confirmed range; pass null for "no selection"
onValueChange?(range: SpanTapeRange | null) => voidfires with the locked range on confirm, or null on cancel
className?string