A wall of scrambling glyphs that decodes scattered words, line by line
| Name | Type | Default | Description |
|---|---|---|---|
words | string | (string | { label, href })[] | "Work|Studio|Journal|Archive|Careers|Press|Contact|Newsletter" | The words the wall decodes, as an array or a string separated by |. Give a word an href to make it a real link. |
colors | [string, string] | ["#F4F1FF", "#B19EEF"] | The colour of the decoded words, and the colour of the glyph wall. The scan band blends between the two. |
charset | string | "letters" | Glyphs the wall scrambles through: "letters", "upper", "lower", "digits", "binary", "hex", "symbols", or any string of your own characters. |
layout | "scatter" | "diagonal" | "list" | "center" | "scatter" | Where the words land: scattered across the wall, stepping down a diagonal, in a left-aligned index, or stacked in the centre like a menu. |
direction | "down" | "up" | "right" | "left" | "diagonal" | "down" | Direction the scan sweeps across the wall. |
fontFamily | string | system monospace | Font for the wall and the words. A monospace font keeps the grid even. |
fontWeight | number | 500 | Font weight. |
fontSize | number | 14 | Size of every glyph in pixels. |
lineHeight | number | 1.8 | Row height as a multiple of the font size. |
letterSpacing | number | 0.12 | Extra space between columns, in em. |
density | number | 0.7 | Share of the wall that is filled with glyphs, from 0 to 1. Cells slowly come and go around this level. |
wallOpacity | number | 0.1 | Opacity of the resting wall, from 0 to 1. |
shimmer | number | 0.35 | How many times per second each resting glyph changes. |
scrambleRate | number | 12 | How many times per second glyphs change inside the scan band and while a word decodes. |
scanDuration | number | 2.6 | Seconds for the scan to sweep the whole wall. |
holdDuration | number | 5 | Seconds the words stay before the wall dissolves them. |
restDuration | number | 0.8 | Seconds of plain wall between a dissolve and the next reveal. |
stagger | number | 0.5 | How long each word takes to type itself in letter by letter after the scan reaches it, from 0 (all at once) to 1. |
bandWidth | number | 0.09 | Width of the bright scan band, as a fraction of the wall. |
loop | boolean | true | Dissolve and reveal again after every hold. Turn off to decode once and keep the words. |
shuffle | boolean | true | Place the words somewhere new on every cycle. |
edgeFade | number | 0.1 | Softens the wall into the page at its edges, as a fraction of the shorter side. |
interactive | boolean | true | Hovering or focusing a word clears the noise around it, dims the other words and draws an underline beneath it. The wall holds while a word is focused. |
clickToShuffle | boolean | true | Clicking the wall away from the words dissolves them and decodes a new arrangement. |
onWordClick | (word: string, index: number) => void | — | Called when a word is clicked. Words without an href become buttons when this is set. |
paused | boolean | false | Freeze the wall with every word shown. Reduced-motion users always get this still state. |
quality | number | 1 | Resolution scale from 0.25 to 1. |
ref | { shuffle, replay, focus } | — | shuffle() decodes a new arrangement, replay() dissolves and decodes the same one again, focus(index) highlights a word (null clears it). |
children | ReactNode | — | Content placed over the wall. |
className | string | — | Classes for the root element. It fills its parent, with a 240px minimum height. |
style | CSSProperties | — | Inline styles for the root element. |
wordsstring | (string | { label, href })[]The words the wall decodes, as an array or a string separated by |. Give a word an href to make it a real link.
"Work|Studio|Journal|Archive|Careers|Press|Contact|Newsletter"colors[string, string]The colour of the decoded words, and the colour of the glyph wall. The scan band blends between the two.
["#F4F1FF", "#B19EEF"]charsetstringGlyphs the wall scrambles through: "letters", "upper", "lower", "digits", "binary", "hex", "symbols", or any string of your own characters.
"letters"layout"scatter" | "diagonal" | "list" | "center"Where the words land: scattered across the wall, stepping down a diagonal, in a left-aligned index, or stacked in the centre like a menu.
"scatter"direction"down" | "up" | "right" | "left" | "diagonal"Direction the scan sweeps across the wall.
"down"fontFamilystringFont for the wall and the words. A monospace font keeps the grid even.
system monospacefontWeightnumberFont weight.
500fontSizenumberSize of every glyph in pixels.
14lineHeightnumberRow height as a multiple of the font size.
1.8letterSpacingnumberExtra space between columns, in em.
0.12densitynumberShare of the wall that is filled with glyphs, from 0 to 1. Cells slowly come and go around this level.
0.7wallOpacitynumberOpacity of the resting wall, from 0 to 1.
0.1shimmernumberHow many times per second each resting glyph changes.
0.35scrambleRatenumberHow many times per second glyphs change inside the scan band and while a word decodes.
12scanDurationnumberSeconds for the scan to sweep the whole wall.
2.6holdDurationnumberSeconds the words stay before the wall dissolves them.
5restDurationnumberSeconds of plain wall between a dissolve and the next reveal.
0.8staggernumberHow long each word takes to type itself in letter by letter after the scan reaches it, from 0 (all at once) to 1.
0.5bandWidthnumberWidth of the bright scan band, as a fraction of the wall.
0.09loopbooleanDissolve and reveal again after every hold. Turn off to decode once and keep the words.
trueshufflebooleanPlace the words somewhere new on every cycle.
trueedgeFadenumberSoftens the wall into the page at its edges, as a fraction of the shorter side.
0.1interactivebooleanHovering or focusing a word clears the noise around it, dims the other words and draws an underline beneath it. The wall holds while a word is focused.
trueclickToShufflebooleanClicking the wall away from the words dissolves them and decodes a new arrangement.
trueonWordClick(word: string, index: number) => voidCalled when a word is clicked. Words without an href become buttons when this is set.
—pausedbooleanFreeze the wall with every word shown. Reduced-motion users always get this still state.
falsequalitynumberResolution scale from 0.25 to 1.
1ref{ shuffle, replay, focus }shuffle() decodes a new arrangement, replay() dissolves and decodes the same one again, focus(index) highlights a word (null clears it).
—childrenReactNodeContent placed over the wall.
—classNamestringClasses for the root element. It fills its parent, with a 240px minimum height.
—styleCSSPropertiesInline styles for the root element.
—