Skip to content

COMPONENT / ticker-marquee

Ticker Marquee_

Signal band that scrolls its items endlessly, with hover, focus and button pause and a static reduced-motion state. Requires @cybr/tokens and @cybr/effects.

Install

  1. 1. Map the @cybr namespace, once per project. Add this inside your components.json, or into its existing "registries" object. No components.json yet? Run npx shadcn@latest init first to create one.

    "registries": { "@cybr": "https://cybr-ui.com/r/{name}.json" }
  2. 2. Add components:

    $ npx shadcn@latest add @cybr/ticker-marquee

If shadcn reports Unknown registry "@cybr", step 1 is missing from that project's components.json.

Preview

  • 01 / TICKER MARQUEE
  • // NEW DROP: GLITCH BUTTON
  • // REV 0.1 LIVE
  • // SYS:OK
  • // NPX SHADCN ADD @CYBR/TICKER-MARQUEE

Props

Component props
PropTypeDefaultDescription
itemsReactNode[]—The ticker entries. Pass enough to fill the widest band, or a gap shows before the loop repeats.
durationnumber26Seconds for one full loop.
reversebooleanfalseScroll left to right instead.
pauseControlbooleantrueShow the PAUSE/PLAY button. Keep it unless the page offers another way to stop the motion.
...propsOmit<ComponentProps<"div">, "children">—Every other native <div> attribute is forwarded, such as aria-label; className is merged last with cn().

Usage

Needs the stylesheets from @cybr/tokens and @cybr/effects. After the install, import them in app/globals.css:

@import "tailwindcss";
@import "../styles/cybr-tokens.css";
@import "../styles/cybr-effects.css";
import { TickerMarquee } from "@/components/ui/ticker-marquee";

export function News() {
  return <TickerMarquee aria-label="Latest updates" items={["// REV 0.1 LIVE", "// SYS:OK", "// NEW DROP"]} />;
}

States

Accessibility