Components
Marquee
A seamless infinite belt of content: children are duplicated (the copy is `aria-hidden`) and the track translates exactly one copy's width per loop, so the seam never shows.
SnapDriftGlideLumenQuietGlow
Install
Copies the component source — plus its small internal deps — into your project. You own the code from the first minute.
terminal
npx lumora-ui@latest add marqueeImport
Using the workspace package instead? Deep imports keep cold starts lean; the barrel is fully tree-shakable either way.
app/page.tsx
import { Marquee } from "@lumora/ui/components/marquee";
// or from the barrel:
import { Marquee } from "@lumora/ui";Props worth knowing
speed is travel in px per second (default 48); direction flips the belt; pauseOnHover stops it under the cursor; fade soft-masks both edges; gap spaces the items. The duplicate loop copy is aria-hidden. Props extend the natural HTML element, so className, event handlers, and aria attributes pass straight through.