A liquid stream of glyph tiles that pours after the cursor and splashes on click
| Name | Type | Default | Description |
|---|---|---|---|
colors | [string, string] | ["#5227FF", "#FF9FFC"] | Colour of fresh liquid at the head and of aged liquid in the tail, blended in OKLab along the stream. Accepts any CSS colour, including currentColor. |
glyphColor | string | "rgba(255, 255, 255, 0.82)" | Colour of the characters inside the cells. Use its alpha to set how strongly they read. |
characters | string | "A–Z0–9" | The pool of characters the stream is made of. Whitespace is ignored. |
fontFamily | string | ui-monospace stack | Font of the characters. |
cellSize | number | 14 | Size of one grid cell in pixels. The stream is drawn on this grid. |
cellGap | number | 2 | Gap between neighbouring cells in pixels. |
cellRadius | number | 2 | Corner radius of each cell in pixels. 0 gives sharp pixels. |
glyphScale | number | 0.56 | Character size relative to the cell, from 0 (no characters) to 1. |
thickness | number | 0.7 | Width of the stream. Fast strokes swell it, slow ones thin it to a fine line. |
trailLength | number | 0.85 | Seconds the liquid lasts before it has evaporated. |
smoothing | number | 0.45 | Damping between the pointer and the nozzle that pours the stream, from 0 (glued to the pointer) to 1 (slow and fluid). |
wobble | number | 0.35 | How far the nozzle overshoots on sharp turns before it settles, from 0 to 1. |
momentum | number | 0.7 | How much of the stroke's speed the liquid keeps, so it flows on after you stop. |
viscosity | number | 0.15 | Drag on the liquid, from runny (0) to thick (1). |
tension | number | 0.15 | Surface tension. It smooths kinks out of the stream and pulls the tail back as it drains. |
breakup | number | 0.9 | How strongly the thinning tail pinches off into droplets, from 0 (an unbroken ribbon) to 1. |
edgeSoftness | number | 0.5 | Fade at the edge of the stream, from 0 (crisp pixel edge) to 1 (a soft, translucent rim). |
sheen | number | 0.45 | Light catching the upper rim of the stream, from 0 to 1. |
scramble | number | 8 | How often characters change per second at the fresh head of the stream. The tail settles. |
splash | boolean | true | Click or tap to splash a crown of droplets that fly out and evaporate. |
splashSize | number | 1.2 | Size and reach of the splash. |
autoplay | boolean | false | Pour on its own along flowing curves while the pointer is away, with the odd splash. The pointer takes over the stream the moment it enters. |
autoplaySpeed | number | 1 | Speed multiplier for autoplay. |
idleDelay | number | 1.5 | Seconds after the pointer leaves before autoplay resumes. |
intro | boolean | true | Pour one stroke across the component the first time it scrolls into view. With autoplay on, the stream flows in from the edge instead. |
interactive | boolean | true | Follow the visitor's pointer. Turn it off to show only autoplay and scripted splashes. |
disabled | boolean | false | Stop pouring and ignore input. Liquid already on screen drains away. |
ref | { splash, clear, replay } | — | splash(x?, y?) splashes at a point in pixels (or at the stream), clear() empties it, replay() pours the intro again. |
children | ReactNode | — | Content the stream pours over. |
className | string | — | Classes for the root element. It fills its parent and is at least 240px tall. |
style | CSSProperties | — | Inline styles for the root element. |
colors[string, string]Colour of fresh liquid at the head and of aged liquid in the tail, blended in OKLab along the stream. Accepts any CSS colour, including currentColor.
["#5227FF", "#FF9FFC"]glyphColorstringColour of the characters inside the cells. Use its alpha to set how strongly they read.
"rgba(255, 255, 255, 0.82)"charactersstringThe pool of characters the stream is made of. Whitespace is ignored.
"A–Z0–9"fontFamilystringFont of the characters.
ui-monospace stackcellSizenumberSize of one grid cell in pixels. The stream is drawn on this grid.
14cellGapnumberGap between neighbouring cells in pixels.
2cellRadiusnumberCorner radius of each cell in pixels. 0 gives sharp pixels.
2glyphScalenumberCharacter size relative to the cell, from 0 (no characters) to 1.
0.56thicknessnumberWidth of the stream. Fast strokes swell it, slow ones thin it to a fine line.
0.7trailLengthnumberSeconds the liquid lasts before it has evaporated.
0.85smoothingnumberDamping between the pointer and the nozzle that pours the stream, from 0 (glued to the pointer) to 1 (slow and fluid).
0.45wobblenumberHow far the nozzle overshoots on sharp turns before it settles, from 0 to 1.
0.35momentumnumberHow much of the stroke's speed the liquid keeps, so it flows on after you stop.
0.7viscositynumberDrag on the liquid, from runny (0) to thick (1).
0.15tensionnumberSurface tension. It smooths kinks out of the stream and pulls the tail back as it drains.
0.15breakupnumberHow strongly the thinning tail pinches off into droplets, from 0 (an unbroken ribbon) to 1.
0.9edgeSoftnessnumberFade at the edge of the stream, from 0 (crisp pixel edge) to 1 (a soft, translucent rim).
0.5sheennumberLight catching the upper rim of the stream, from 0 to 1.
0.45scramblenumberHow often characters change per second at the fresh head of the stream. The tail settles.
8splashbooleanClick or tap to splash a crown of droplets that fly out and evaporate.
truesplashSizenumberSize and reach of the splash.
1.2autoplaybooleanPour on its own along flowing curves while the pointer is away, with the odd splash. The pointer takes over the stream the moment it enters.
falseautoplaySpeednumberSpeed multiplier for autoplay.
1idleDelaynumberSeconds after the pointer leaves before autoplay resumes.
1.5introbooleanPour one stroke across the component the first time it scrolls into view. With autoplay on, the stream flows in from the edge instead.
trueinteractivebooleanFollow the visitor's pointer. Turn it off to show only autoplay and scripted splashes.
truedisabledbooleanStop pouring and ignore input. Liquid already on screen drains away.
falseref{ splash, clear, replay }splash(x?, y?) splashes at a point in pixels (or at the stream), clear() empties it, replay() pours the intro again.
—childrenReactNodeContent the stream pours over.
—classNamestringClasses for the root element. It fills its parent and is at least 240px tall.
—styleCSSPropertiesInline styles for the root element.
—