KQ-1181 · INK/BLEED
Ink Bleed
A status line written in ink: each phrase soaks into the paper letter by letter on a seeded pen rhythm, landing as a drop on the baseline and wicking up through the glyph behind a feathered front, glossy while wet and drying to a lighter matte, and when it has rested a pad of blotting paper sweeps across and lifts it for the next phrase. Pressing the paper brings the blotter down under the pointer on springs.flick and dragging rubs it along 1:1, blotting every letter still wet under it lighter (and smeared when the pass was fast); the paper's height follows a wrapping phrase on springs.glide. The paper is a real button — Enter or Space runs the same pad along the whole line — and each phrase is announced once.
Coldbrook Bank · letter of credit 0412
Drafting your letter
writing · 1 of 3 · drag across wet ink to blot
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/ink-bleed
Props
- phrases
- string[]
- default —
- The status phrases, written one after another and cycled in order.
- active
- boolean
- default true
- Writing. False lifts the line, writes doneText in dry ink and stops every loop.
- doneText
- string
- default —
- What stays written once inactive. Defaults to the last phrase.
- speed
- number
- default 1
- How fast the pen, the drying, the rest and the blotter run, 0.5 to 2.
- spread
- number
- default 0.5
- How far the ink feathers into the paper, 0 (a crisp nib) to 1 (blotting paper): the soak front's softness, the halo, the drop and the smear.
- paper
- "plain" | "laid" | "kraft"
- default "laid"
- The stock and how ink behaves on it: plain is coated and dries slowly with a long gloss, laid is cream with laid and chain lines, kraft is brown and thirsty — fast, matte and feathered.
- sound
- boolean
- default false
- Play the blotter: a soft rustle as the pad comes down, a paper rustle for each letter it blots and a swish for the keyboard's pass or a flicked release. Writing and lifting are silent.
- disabled
- boolean
- default false
- The line keeps writing but cannot be blotted.
- onPhraseChange
- (index: number) => void
- default —
- A phrase began: its index in phrases, or -1 for doneText. Also reported on the first commit.
- className
- string
- default —
- Classes for the root; it is w-full by default.
| Prop | Type | Default | Description |
|---|---|---|---|
| phrases | string[] | — | The status phrases, written one after another and cycled in order. |
| active | boolean | true | Writing. False lifts the line, writes doneText in dry ink and stops every loop. |
| doneText | string | — | What stays written once inactive. Defaults to the last phrase. |
| speed | number | 1 | How fast the pen, the drying, the rest and the blotter run, 0.5 to 2. |
| spread | number | 0.5 | How far the ink feathers into the paper, 0 (a crisp nib) to 1 (blotting paper): the soak front's softness, the halo, the drop and the smear. |
| paper | "plain" | "laid" | "kraft" | "laid" | The stock and how ink behaves on it: plain is coated and dries slowly with a long gloss, laid is cream with laid and chain lines, kraft is brown and thirsty — fast, matte and feathered. |
| sound | boolean | false | Play the blotter: a soft rustle as the pad comes down, a paper rustle for each letter it blots and a swish for the keyboard's pass or a flicked release. Writing and lifting are silent. |
| disabled | boolean | false | The line keeps writing but cannot be blotted. |
| onPhraseChange | (index: number) => void | — | A phrase began: its index in phrases, or -1 for doneText. Also reported on the first commit. |
| className | string | — | Classes for the root; it is w-full by default. |