KQ-1151 · PAPER/SLIP

Paper Slip

Notices print out of a till printer as slips of paper: a new slip's lane opens a print line at a time, pushing the older slips up while the housing chatters, and its loose end curls toward you before relaxing on the drift spring. Pull a slip down and its body strains against the perforation with rubber-band give while seeded fibres stretch and snap one by one; past the tear the last fibres spring apart on the recoil spring, the body flutters out on the exit ease and the older slips drop into its place on glide, while a short pull springs back on snap. Slips share one tab stop where Up and Down move and Delete tears the focused slip through the same pull.

KQ-1151 · PAPER/SLIP
Till 23 on paper
  1. Done: Card payment

    Table 6 paid 38.40 by card. The receipt went to the diner.

  2. Notice: Refund issued

    4.20 back to the card for an oat flat white.

  3. Warning: Paper running low

    About three metres left on the roll. Swap it before lunch.

Pull a slip down past its perforation to tear it off, or press Delete.

3 on paper · last: Paper running low

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/paper-slip

Props

notices
{ id: string; title: string; body?: string; tone?: "info" | "success" | "warn" | "danger" }[]
default —
Every notice, oldest first. The newest stands at the printer's slot; only the newest `max` are on the paper.
onDismiss
(id: string) => void
default —
Fires the moment a slip tears, from the pull, key or Tear button that tore it.
label
string
default "Notifications"
The list's accessible name, printed on the printer.
curl
number
default 0.4
How far the loose end of each slip rolls toward you, 0 to 1.
speed
number
default 1
Paper feed rate and how fast a torn slip falls, 0.5 to 2.
paper
"white" | "cream" | "thermal"
default "thermal"
The paper stock and its ink; warnings and alerts print in a second, red ink.
max
number
default 4
How many slips stand on the paper at once, 2 to 6; older ones are counted above.
sound
boolean
default false
The tear, the flutter, and the print head's whir (heard only when a print follows the visitor's own press).
disabled
boolean
default false
Slips can be read but not torn.
className
string
default —
Classes for the root; it is 416px tall by default and a height class resizes it.