KQ-571 · SIDE/SCROLL
Side Scroll
A section that pins itself while the track inside it moves sideways. The container's vertical travel maps linearly onto the track's horizontal travel — deliberately no spring, because a scroll-linked value that springs lags the finger and reads as jank — and the section reserves exactly its frame height plus the track's travel, so the pin lasts as long as there is track left. Native scroll means Page Down and the arrow keys already work, and a skip control at the top of the pin jumps a keyboard past the run and lands focus on the far side.
Season kit
Keep scrolling. The track below moves across instead of down.
Bench survey
Every rail is measured cold before it goes on the bench, and the sheet travels with it.
Twin sweep
Two passes, one cold and one at working temperature. The drift between them is the record.
Paired clamps
Clamps torque in pairs so the plate never carries load on one side alone.
Depot handover
The run leaves as one crate. The depot signs for the drift figures, not the count.
Past the track the page carries on as usual.
Progress 0%
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/side-scroll
Props
- panels
- React.ReactNode[]
- default —
- The panels, left to right.
- container
- React.RefObject<HTMLElement | null>
- default —
- The scrolling element whose travel drives the track.
- panelWidth
- number
- default 280
- Width of one panel, px.
- onProgressChange
- (percent: number) => void
- default —
- Fires with whole-percent progress, 0–100, when the percent changes.
- label
- string
- default Pinned track
- Names the pinned section.
- skipLabel
- string
- default Skip the track
- Text of the control that jumps past the pinned run.
| Prop | Type | Default | Description |
|---|---|---|---|
| panels | React.ReactNode[] | — | The panels, left to right. |
| container | React.RefObject<HTMLElement | null> | — | The scrolling element whose travel drives the track. |
| panelWidth | number | 280 | Width of one panel, px. |
| onProgressChange | (percent: number) => void | — | Fires with whole-percent progress, 0–100, when the percent changes. |
| label | string | Pinned track | Names the pinned section. |
| skipLabel | string | Skip the track | Text of the control that jumps past the pinned run. |