KQ-1223 · WAX/SEAL
Wax Seal
A letter folded into panels and closed with a wax seal. Holding the seal makes the wax give on the flick spring while seeded cracks spread from the exact point pressed, drawn to the length the hold has reached; let go early and they close, hold for the full time and it snaps along the flap's edge, chips fly, and each panel unfolds about its crease on the glide spring with perspective while the sheet glides to stay centred. Reseal folds it back, pours a drop of wax that spreads with a wobble on the recoil spring and presses the monogram in; the seal is a real button that Enter or Space cracks to the end, and Escape stops.
Press and hold the seal, or press Enter, to break it.
sealed · hold the seal to open
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/wax-seal
Props
- to
- string
- default —
- Who the letter is for: written on the outside and in the greeting.
- from
- string
- default —
- Who sealed it: the monogram pressed into the wax and the signature.
- date
- string
- default —
- Written on the outside and at the head of the letter.
- message
- string
- default —
- The letter itself, written across the panels and their creases.
- open / defaultOpen
- boolean
- default false
- Whether the seal is broken and the letter open. A host that changes it gets the same motion, silently.
- onOpenChange
- (open: boolean) => void
- default —
- Fires from the hold or key that broke the seal (true) and from Reseal (false).
- hold
- number
- default 800
- How long the seal must be held before it breaks, in ms (400–1500): the cracks spread over exactly this long.
- wax
- "crimson" | "navy" | "forest"
- default "crimson"
- The wax's pigment, the same in either theme; it also tunes the snap.
- folds
- number
- default 3
- Panels the letter is folded into: 2 (one flap, a wider packet that leaves a wax remnant in the margin) or 3 (two flaps).
- resealLabel
- string
- default "Reseal"
- The Reseal button's text.
- sound
- boolean
- default false
- The snap of the wax, a paper sound for each fold and a soft press when it is sealed again — only for the visitor's own hold and presses.
- disabled
- boolean
- default false
- Shows the letter but takes no hold or presses.
- className
- string
- default —
- Classes for the root.
| Prop | Type | Default | Description |
|---|---|---|---|
| to | string | — | Who the letter is for: written on the outside and in the greeting. |
| from | string | — | Who sealed it: the monogram pressed into the wax and the signature. |
| date | string | — | Written on the outside and at the head of the letter. |
| message | string | — | The letter itself, written across the panels and their creases. |
| open / defaultOpen | boolean | false | Whether the seal is broken and the letter open. A host that changes it gets the same motion, silently. |
| onOpenChange | (open: boolean) => void | — | Fires from the hold or key that broke the seal (true) and from Reseal (false). |
| hold | number | 800 | How long the seal must be held before it breaks, in ms (400–1500): the cracks spread over exactly this long. |
| wax | "crimson" | "navy" | "forest" | "crimson" | The wax's pigment, the same in either theme; it also tunes the snap. |
| folds | number | 3 | Panels the letter is folded into: 2 (one flap, a wider packet that leaves a wax remnant in the margin) or 3 (two flaps). |
| resealLabel | string | "Reseal" | The Reseal button's text. |
| sound | boolean | false | The snap of the wax, a paper sound for each fold and a soft press when it is sealed again — only for the visitor's own hold and presses. |
| disabled | boolean | false | Shows the letter but takes no hold or presses. |
| className | string | — | Classes for the root. |