Skip to content
Signature

Ticker

Scrolling status marquee.

● LIVE
SUBNET NOMINALLINK 0x4A2● ONLINETRACE 0%AUTH VERIFIEDUPLINK STABLE0x4A2 // SYNCEDLATENCY 42MS● SIGNAL LOCKEDCHANNEL CLEAR
npx shadcn@latest add https://okibi.cndr.dev/r/ticker.json

Installation

Install the theme first, then add the component:

npx shadcn@latest add https://okibi.cndr.dev/r/ticker.json

Copy the source from the Code tab above into components/ui/ticker.tsx. It uses the cn helper and the okibi theme tokens — install the theme first if you haven't.

Usage

import { Ticker } from "@/components/ui/ticker"

<Ticker items={["UPLINK STABLE", "RX 0x4A2", "PWR 98%"]} speed={20} />

Examples

Speed

Tune the marquee loop with speed (seconds per cycle) and swap the inter-item glyph with separator.

● LIVE
SUBNET NOMINALLINK 0x4A2● ONLINETRACE 0%AUTH VERIFIED
SUBNET NOMINALLINK 0x4A2● ONLINETRACE 0%AUTH VERIFIED

API Reference

Ticker

PropTypeDefaultDescription
itemsReactNode[]The marquee items.
separatorReactNode"+"Glyph rendered between items. Defaults to a signal +.
speednumber20Loop duration in seconds.

Accessibility

  • A WCAG 2.2.2 stop mechanism is built in: the track is group-hover: / group-focus-within: paused, and the strip is focusable (tabIndex={0}) with an aria-label of "Status ticker", so keyboard users can halt the scroll.
  • The scroll pauses on hover and on focus, giving pointer and keyboard users a way to stop the moving content.
  • Under prefers-reduced-motion (handled globally) the track is simply parked, not hidden — the content stays fully readable.
  • The duplicated sequence that makes the loop gapless is aria-hidden, and the inter-item separator is aria-hidden + select-none, so each status is read exactly once.

Guidelines

Do

  • Feed it short status atoms via items — "UPLINK STABLE", "RX 0x4A2", "PWR 98%".
  • Adjust the loop with speed (seconds) and swap the inter-item glyph through separator.
  • Provide enough items to fill the viewport width so the seamless loop has no mid-cycle gap.

Don't

  • Do not put links, buttons or other interactive nodes in items; the duplicated copy is aria-hidden and the strip itself takes focus to pause.
  • Do not use it for content a reader must catch in full — it is an ambient status marquee, not primary copy.

On this page