KQ-739 · BILL/CALENDAR

Bill Calendar

A month of bills, each on the day it lands, over a balance line that shows what the account holds on every one of those days. The line is one column per day — a balance is piecewise-constant between bills — and each column's height animates on glide, so moving a bill re-plots the month with a layout's physics. Dragging a chip captures the pointer only after 4px of travel while a carry chip follows it inside the card's frame and the day beneath lights as the drop target; on release the bill lands on recoil. Arrows walk days, Enter lifts the bill on the focused day, arrows choose its new day, Enter drops it and Escape cancels.

KQ-739 · BILL/CALENDAR
Coldbrook Bank · November bills5 due · $1,638.00
Low $542.00 on the 26opens $2,180.00
November 3 · Fernworks Rent $1,150.00$1,030.00

November · 5 bills $1,638.00 · low $542.00 on the 26 · no moves yet

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/bill-calendar

Props

bills / defaultBills
Bill[]
default []
Controlled or initial bills, each with id, label, amount and day.
onBillsChange
(bills: Bill[]) => void
default
Fires from the drop or the keyboard move that changed a day.
onBillMove
(bill: Bill, fromDay: number, toDay: number) => void
default
Fires alongside it with the move itself, for an undo line.
openingBalance
number
default
What the account holds before the first of the month.
days
number
default 30
Days in the month.
startWeekday
number
default 0
Column the 1st sits in, 0 = Monday.
monthLabel
string
default This month
Printed in the header and in every day's label.
floor
number
default 0
Balance under this reads danger and the day's label says overdrawn.
format
(value: number) => string
default USD Intl.NumberFormat
Formats every amount.
label
string
default Bill calendar
Names the grid for assistive technology.