KQ-1190 · LENS/SWEEP
Lens Sweep
A status line read over by a loupe: outside the lens the words are soft and faint, under it they are sharp, full ink and magnified about the lens's centre. The lens reads in saccades, gliding from word to word on the glide spring from rest to rest and pausing on each as if checking it, with a small nod and a hairline check drawn under the word that stays as it moves on; a read phrase rests, fades, and the lens sweeps back for the next. The lens follows a finger 1:1 anywhere along the line, ticking as it enters each word, and on release settles onto the word the throw was heading for and reads on from there; a tap on a word sends it there, and as a slider Left, Right, Home and End move it a word at a time.
Fieldline · lease renewal
Reading the terms
reading · word 1 of 3 · drag the lens
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/lens-sweep
Props
- phrases
- string[]
- default —
- The status phrases, read over one after another and cycled in order.
- active
- boolean
- default true
- Reading. False puts the lens down beside the line and leaves doneText sharp, full ink and still; every timer stops.
- doneText
- string
- default —
- What stays, read, once inactive. Defaults to the last phrase.
- speed
- number
- default 1
- How long the lens checks each word and rests on a read phrase, 0.5 to 2; the glide itself stays the house glide.
- zoom
- number
- default 1.5
- How much the lens magnifies, 1.2 to 2.
- blur
- number
- default 1.5
- How soft the words outside the lens are, 0 to 4 px.
- lens
- "round" | "bar"
- default "round"
- A jeweller's loupe, or a reading bar that magnifies a wider span of the line.
- sound
- boolean
- default false
- Play the lens under the visitor's hand: a tick for each word it enters while dragged, tapped to or moved by key, pitched along the line. The automatic reading is silent.
- disabled
- boolean
- default false
- The lens keeps reading, but it cannot be moved by hand or by key.
- onPhraseChange
- (index: number) => void
- default —
- A phrase began: its index in phrases, or -1 for doneText. Also reported on the first commit.
- onWordChange
- (word: number) => void
- default —
- The lens came to rest on a word and checked it: its index in the phrase.
- className
- string
- default —
- Classes for the root; it is w-full by default.
| Prop | Type | Default | Description |
|---|---|---|---|
| phrases | string[] | — | The status phrases, read over one after another and cycled in order. |
| active | boolean | true | Reading. False puts the lens down beside the line and leaves doneText sharp, full ink and still; every timer stops. |
| doneText | string | — | What stays, read, once inactive. Defaults to the last phrase. |
| speed | number | 1 | How long the lens checks each word and rests on a read phrase, 0.5 to 2; the glide itself stays the house glide. |
| zoom | number | 1.5 | How much the lens magnifies, 1.2 to 2. |
| blur | number | 1.5 | How soft the words outside the lens are, 0 to 4 px. |
| lens | "round" | "bar" | "round" | A jeweller's loupe, or a reading bar that magnifies a wider span of the line. |
| sound | boolean | false | Play the lens under the visitor's hand: a tick for each word it enters while dragged, tapped to or moved by key, pitched along the line. The automatic reading is silent. |
| disabled | boolean | false | The lens keeps reading, but it cannot be moved by hand or by key. |
| onPhraseChange | (index: number) => void | — | A phrase began: its index in phrases, or -1 for doneText. Also reported on the first commit. |
| onWordChange | (word: number) => void | — | The lens came to rest on a word and checked it: its index in the phrase. |
| className | string | — | Classes for the root; it is w-full by default. |