KQ-1230 · BOOTH/STRIP
Booth Strip
A photo booth's panel and the strip it prints: for each shot the readout counts down, the reflector charges and fires a white wash over the booth, and the strip feeds out of the slot by one frame on a tween stepped into roller lines, newest shot nearest the slot. A fresh strip is wet — darker and glossy, the gloss shrinking from the edges as it dries — and shaking it dries it faster: it pivots at the slot, follows the finger 1:1 with rubber-banded edges, then swings as a pendulum spring taking the release velocity. Any frame enlarges into a viewer that grows out of the frame's own box on the glide spring and shrinks back on the exit ease; the frames are buttons in one tab stop where Up and Down move, Enter enlarges and Left and Right shake.
Up and Down move between shots, Enter enlarges one, Left and Right shake the strip to dry it.
ready · strip № 1 dry
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/booth-strip
Props
- caption
- string
- default —
- Printed on the strip's tail, e.g. "Fernworks 01.10.26".
- photos
- React.ReactNode[]
- default —
- Your own frame contents, used in turn; by default each frame is a drawn booth portrait, new poses every strip.
- label
- string
- default "Photo booth"
- The booth's accessible name.
- value / defaultValue
- number | null
- default null
- The shot shown enlarged (0 is the first shot), or null; controlled or uncontrolled.
- onValueChange
- (shot: number | null) => void
- default —
- Fires from the pick, key or button that opened, stepped or closed a shot.
- defaultPrinted
- boolean
- default true
- A dry strip already hangs from the slot at first.
- onPrint
- () => void
- default —
- Fires when a new strip has finished printing.
- onPhaseChange
- (phase: "idle" | "shooting" | "wet" | "dry") => void
- default —
- Fires as the booth moves between phases.
- frames
- number
- default 4
- Shots per strip, 3 or 4.
- tone
- "bw" | "sepia" | "colour"
- default "bw"
- The print's chemistry, applied to whatever is in the frames.
- flash
- boolean
- default true
- The booth flashes white on each shot (never more than once a second). Off: only the reflector lights.
- sound
- boolean
- default false
- A shutter snap on each shot and the print feed's whir while the strip feeds, only during a strip the visitor started.
- disabled
- boolean
- default false
- The strip can be looked at but not taken, shaken or enlarged.
- className
- string
- default —
- Classes for the root.
| Prop | Type | Default | Description |
|---|---|---|---|
| caption | string | — | Printed on the strip's tail, e.g. "Fernworks 01.10.26". |
| photos | React.ReactNode[] | — | Your own frame contents, used in turn; by default each frame is a drawn booth portrait, new poses every strip. |
| label | string | "Photo booth" | The booth's accessible name. |
| value / defaultValue | number | null | null | The shot shown enlarged (0 is the first shot), or null; controlled or uncontrolled. |
| onValueChange | (shot: number | null) => void | — | Fires from the pick, key or button that opened, stepped or closed a shot. |
| defaultPrinted | boolean | true | A dry strip already hangs from the slot at first. |
| onPrint | () => void | — | Fires when a new strip has finished printing. |
| onPhaseChange | (phase: "idle" | "shooting" | "wet" | "dry") => void | — | Fires as the booth moves between phases. |
| frames | number | 4 | Shots per strip, 3 or 4. |
| tone | "bw" | "sepia" | "colour" | "bw" | The print's chemistry, applied to whatever is in the frames. |
| flash | boolean | true | The booth flashes white on each shot (never more than once a second). Off: only the reflector lights. |
| sound | boolean | false | A shutter snap on each shot and the print feed's whir while the strip feeds, only during a strip the visitor started. |
| disabled | boolean | false | The strip can be looked at but not taken, shaken or enlarged. |
| className | string | — | Classes for the root. |