# Velora UI — full documentation > Free, MIT-licensed animated React components and complete sections (blocks) for > Tailwind CSS 4 and shadcn/ui. 100 components, 31 blocks. Every > component respects prefers-reduced-motion and documents its keyboard and > screen-reader behavior. Components import only react, motion/react (some), > lucide-react (a few) and a cn() helper from @/lib/utils. Install any item with the shadcn CLI: `npx shadcn@latest add https://velora.colorlib.com/r/.json`. Brand colors come from CSS variables (--brand, --brand-from, --brand-via, --brand-to) that the CLI adds to your globals.css. ## Components ### Aurora Background Velora's signature drifting aurora gradient backdrop. (0.6 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/aurora-background - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/aurora-background.json` (creates `components/velora/aurora-background.tsx`) **Accessibility** - Reduced motion: The drift animation is off; the three blurred colour blobs rest at their default positions, so the glow is unchanged but static. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; the wrapper is aria-hidden and ignored by assistive tech. **Props** #### AuroraBackground - `intensity?: "subtle" | "medium" | "vivid"` (default `"medium"`) — Overall opacity of the aurora blobs - …and every `React.HTMLAttributes` prop **Example** ```tsx import { AuroraBackground } from "@/components/velora/aurora-background"; export default function AuroraBackgroundDemo() { return (

Aurora

); } ``` ### Background Beams Light beams flowing along curved paths behind content. (1.1 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/background-beams - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/background-beams.json` (creates `components/velora/background-beams.tsx`) **Accessibility** - Reduced motion: Only the faint static base curves render; the coloured beams and their gradient animations are not mounted. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; the wrapper is aria-hidden. **Props** #### BackgroundBeams - `className?: string` - `count?: number` (default `7`) — Number of beams **Example** ```tsx import { BackgroundBeams } from "@/components/velora/background-beams"; export default function BackgroundBeamsDemo() { return (

Beams

); } ``` ### Background Boxes An isometric grid whose cells light up in brand tints under the pointer. (1.2 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/background-boxes - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/background-boxes.json` (creates `components/velora/background-boxes.tsx`) **Accessibility** - Reduced motion: The grid never moves. Cells still tint on hover and fade back through a colour transition, which involves no movement, so it is kept under reduced motion. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; the grid is aria-hidden and has no focusable cells, so only the content above it is announced. **Props** #### BackgroundBoxes - `rows?: number` (default `32`) — Number of rows (capped at 40) - `cols?: number` (default `32`) — Number of columns (capped at 40) - `cellSize?: number` (default `48`) — Cell edge length in px, before the isometric tilt - `fade?: number` (default `1400`) — How long a lit cell takes to fade back, in ms - …and every `React.HTMLAttributes` prop **Example** ```tsx import { BackgroundBoxes } from "@/components/velora/background-boxes"; export default function BackgroundBoxesDemo() { return (

Hover the grid

); } ``` ### Dotted Glow Background Canvas dot grid where drifting glows brighten dots and tint them toward the brand. (2.4 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/dotted-glow-background - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/dotted-glow-background.json` (creates `components/velora/dotted-glow-background.tsx`) **Accessibility** - Reduced motion: No animation runs: one still frame with the glows at fixed positions is drawn, and redrawn on resize and theme change. - Keyboard: Not focusable. The glows stop while focus is inside the parent element (and while it is hovered, unless pauseOnHover is false); they also stop offscreen and in hidden tabs. - Screen readers: Decorative; the wrapper and canvas are aria-hidden, so only the content layered above is announced. **Props** #### DottedGlowBackground - `gap?: number` (default `18`) — Distance between dot centres in px - `radius?: number` (default `1.2`) — Dot radius in px (lit dots grow up to 1.6×) - `opacity?: number` (default `0.25`) — Opacity of unlit dots, 0–1 - `speed?: number` (default `1`) — Glow travel speed multiplier - `glows?: number` (default `3`) — Number of travelling glows - `pauseOnHover?: boolean` (default `true`) — Pause while the pointer is over the parent element (focus inside it always pauses) - …and every `React.HTMLAttributes` prop **Example** ```tsx import { DottedGlowBackground } from "@/components/velora/dotted-glow-background"; export default function DottedGlowBackgroundDemo() { return (

Realtime sync

Every edit, everywhere, instantly

); } ``` ### Flickering Grid Grid of squares fading in and out on staggered timers. (0.8 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/flickering-grid - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/flickering-grid.json` (creates `components/velora/flickering-grid.tsx`) **Accessibility** - Reduced motion: The flicker stops and every square rests at a fixed opacity halfway between --flicker-min and --flicker-max (about 0.27 by default), leaving an even, dim dot pattern. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative: the grid is aria-hidden and ignores pointer events. **Props** #### FlickeringGrid - `squareSize?: number` (default `4`) — Square size in px - `gap?: number` (default `6`) — Gap between squares in px - `columns?: number` (default `40`) — Number of columns and rows to render - `rows?: number` (default `20`) - `className?: string` **Example** ```tsx import { FlickeringGrid } from "@/components/velora/flickering-grid"; export default function FlickeringGridDemo() { return (

Flickering Grid

); } ``` ### Grid & Dot Pattern SVG grid and dot backdrops with maskable depth. (0.8 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/grid-pattern - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/grid-pattern.json` (creates `components/velora/grid-pattern.tsx`) **Accessibility** - Reduced motion: Nothing changes: GridPattern and DotPattern are static SVG patterns with no animation. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; both SVGs are aria-hidden. **Props** #### GridPattern - `width?: number` (default `40`) - `height?: number` (default `40`) - `x?: number` (default `-1`) - `y?: number` (default `-1`) - `squares?: Array<[number, number]>` — Cells to fill, as [col, row] pairs - `strokeDasharray?: string` (default `"0"`) - …and every `React.SVGProps` prop #### DotPattern - `width?: number` (default `20`) - `height?: number` (default `20`) - `cx?: number` (default `1`) - `cy?: number` (default `1`) - `cr?: number` (default `1`) - …and every `React.SVGProps` prop **Example** ```tsx import { DotPattern, GridPattern } from "@/components/velora/grid-pattern"; export default function GridPatternDemo() { return (

Patterns

); } ``` ### Lamp A glowing lamp-line header that expands into view. (0.9 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/lamp - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/lamp.json` (creates `components/velora/lamp.tsx`) **Accessibility** - Reduced motion: The cones and lamp line appear at full width and opacity when scrolled into view, with no expansion. - Keyboard: Decorative; nothing to operate. - Screen readers: Every lamp layer is aria-hidden; only the children are exposed, as normal content. **Props** #### Lamp - `children: React.ReactNode` - `className?: string` **Example** ```tsx import { Lamp } from "@/components/velora/lamp"; export default function LampDemo() { return (

Lit from above

); } ``` ### Light Rays God rays fanning down from the top of a section. (0.7 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/light-rays - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/light-rays.json` (creates `components/velora/light-rays.tsx`) **Accessibility** - Reduced motion: No change: the rays are static gradients with no animation. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative: the rays are aria-hidden. **Props** #### LightRays - `count?: number` (default `9`) — Number of rays fanning out from the origin - `spread?: number` (default `70`) — Total spread of the fan, in degrees - `className?: string` **Example** ```tsx import { LightRays } from "@/components/velora/light-rays"; export default function LightRaysDemo() { return (

Light Rays

); } ``` ### Meteors Falling meteor streaks for dark hero and CTA sections. (0.7 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/meteors - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/meteors.json` (creates `components/velora/meteors.tsx`) **Accessibility** - Reduced motion: The meteors are hidden entirely; no streaks are shown. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; the wrapper is aria-hidden. **Props** #### Meteors - `number?: number` (default `12`) - `className?: string` **Example** ```tsx import { Meteors } from "@/components/velora/meteors"; export default function MeteorsDemo() { return (

Meteors

); } ``` ### Noise Background Drifting brand-gradient blobs under a static film-grain overlay; wraps its content. (1.8 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/noise-background - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/noise-background.json` (creates `components/velora/noise-background.tsx`) **Accessibility** - Reduced motion: The blobs never move; the gradient wash and grain render as a still backdrop. - Keyboard: The wrapper is not focusable. The drift stops while focus is inside it (and while hovered, unless pauseOnHover is false); it also stops offscreen and in hidden tabs. - Screen readers: The blob and grain layers are aria-hidden; only the children are announced. **Props** #### NoiseBackground - `grain?: number` (default `0.35`) — Film-grain opacity, 0–1 (0 hides the grain) - `speed?: number` (default `1`) — Drift speed multiplier - `pauseOnHover?: boolean` (default `true`) — Pause the drift while hovered (focus inside always pauses it) - …and every `React.HTMLAttributes` prop **Example** ```tsx import { NoiseBackground } from "@/components/velora/noise-background"; export default function NoiseBackgroundDemo() { return (

Quiet software for loud ideas

A calm workspace for teams that ship.

); } ``` ### Particles Drifting, twinkling particle field on a lightweight canvas. (1.4 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/particles - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/particles.json` (creates `components/velora/particles.tsx`) **Accessibility** - Reduced motion: The drift and twinkle loop does not run; the canvas draws one still frame of dots and redraws it on resize and theme change. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; the canvas is aria-hidden. **Props** #### Particles - `className?: string` - `quantity?: number` (default `60`) - `color?: string` — "r, g, b" string. Defaults to the inherited text color, so it adapts to the theme. **Example** ```tsx import { Particles } from "@/components/velora/particles"; export default function ParticlesDemo() { return (

Particles

); } ``` ### Retro Grid Perspective grid scrolling forever toward the horizon. (0.7 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/retro-grid - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/retro-grid.json` (creates `components/velora/retro-grid.tsx`) **Accessibility** - Reduced motion: The scroll animation is off; the perspective grid plane shows as a still grid under the top and bottom fades. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; the wrapper is aria-hidden. **Props** #### RetroGrid - `angle?: number` (default `55`) — Perspective angle of the grid plane - `cellSize?: number` (default `56`) - `opacity?: number` (default `0.4`) - …and every `React.HTMLAttributes` prop **Example** ```tsx import { RetroGrid } from "@/components/velora/retro-grid"; export default function RetroGridDemo() { return (

Retro Grid

); } ``` ### Ripple Concentric rings pulsing outward — calm 'listening' backdrop. (0.6 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/ripple - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/ripple.json` (creates `components/velora/ripple.tsx`) **Accessibility** - Reduced motion: The rings stop pulsing and sit still as concentric circles at their nominal sizes, fading outward. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative: the rings are aria-hidden. **Props** #### Ripple - `circles?: number` (default `6`) — Number of concentric rings - `baseSize?: number` (default `180`) — Diameter of the innermost ring, in px - `className?: string` **Example** ```tsx import { Ripple } from "@/components/velora/ripple"; export default function RippleDemo() { return (

Ripple

); } ``` ### Shooting Stars A twinkling star field with brand-tinted streaks shooting across at random. (3.0 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/shooting-stars - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/shooting-stars.json` (creates `components/velora/shooting-stars.tsx`) **Accessibility** - Reduced motion: Stars stop twinkling and no streaks launch; one streak is painted frozen mid-flight. Both canvases repaint that still frame on resize and theme change. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; both layers are aria-hidden, so only the content above them is announced. **Props** #### StarsBackground - `density?: number` (default `5`) — Stars per 10,000 px² - …and every `React.HTMLAttributes` prop #### ShootingStars - `delay?: number` (default `2400`) — Average pause between streaks in ms; each pause varies ±60% - `speed?: number` (default `900`) — Travel speed in px per second; each streak varies ±30% - `angle?: number` (default `25`) — Direction in degrees below horizontal; each streak varies ±12° - `length?: number` (default `150`) — Trail length in px - `color?: string` (default `"--brand-to"`) — Any CSS colour or custom property name - …and every `React.HTMLAttributes` prop **Example** ```tsx import { ShootingStars, StarsBackground } from "@/components/velora/shooting-stars"; export default function ShootingStarsDemo() { return (

Make a wish

); } ``` ### Vortex Brand-tinted particles spiralling into the centre, leaving soft fading trails. (2.8 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/vortex - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/vortex.json` (creates `components/velora/vortex.tsx`) **Accessibility** - Reduced motion: No animation runs: the canvas pre-computes a short burst of motion and shows it as one frozen swirl, redrawn on resize and theme change. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; the wrapper is aria-hidden, so only the content layered above is announced. **Props** #### Vortex - `particles?: number` (default `520`) — Maximum particle count; capped by container area so small screens draw fewer - `speed?: number` (default `1`) — Rotation speed multiplier - `range?: number` (default `1`) — How far the swirl reaches towards the edges, 0–1 - …and every `React.HTMLAttributes` prop **Example** ```tsx import { Vortex } from "@/components/velora/vortex"; export default function VortexDemo() { return (

Into the vortex

); } ``` ### Wavy Background Blurred, translucent ribbons of brand colour flowing sideways on a canvas. (2.8 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/wavy-background - Category: Backgrounds - Install: `npx shadcn@latest add https://velora.colorlib.com/r/wavy-background.json` (creates `components/velora/wavy-background.tsx`) **Accessibility** - Reduced motion: The waves do not move: the canvas paints one still frame of the ribbons and repaints it on resize and theme change. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; the wrapper is aria-hidden, so only the content layered above is announced. **Props** #### WavyBackground - `waves?: number` (default `5`) — Number of layered waves - `speed?: "slow" | "fast"` (default `"slow"`) — How quickly the waves drift - `blur?: number` (default `16`) — Blur radius in px applied to the wave layer - `colors?: string[]` (default `["--brand-from", "--brand-via", "--brand-to"]`) — Any CSS colours or custom property names (e.g. "--brand-from"); cycled across the waves - `opacity?: number` (default `0.5`) — Opacity of each wave, 0–1 - …and every `React.HTMLAttributes` prop **Example** ```tsx import { WavyBackground } from "@/components/velora/wavy-background"; export default function WavyBackgroundDemo() { return (

Make some waves

); } ``` ### Animated Gradient Text Brand gradient sweeping continuously through text. (0.3 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/animated-gradient-text - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/animated-gradient-text.json` (creates `components/velora/animated-gradient-text.tsx`) **Accessibility** - Reduced motion: The pan animation is off; the text keeps a fixed gradient (the brand-from to brand-via section). - Keyboard: Decorative; nothing to operate. - Screen readers: Children are read as normal text; the gradient is a background-clip effect and adds nothing to the accessible text. **Props** #### AnimatedGradientText - `children: React.ReactNode` - …and every `React.HTMLAttributes` prop **Example** ```tsx import { AnimatedGradientText } from "@/components/velora/animated-gradient-text"; export default function AnimatedGradientTextDemo() { return (

Ship beautiful pages

); } ``` ### Flip Words Cycles words with a springy blur-flip transition. (0.9 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/flip-words - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/flip-words.json` (creates `components/velora/flip-words.tsx`) **Accessibility** - Reduced motion: The first word stays on screen and the words don't cycle. With motion allowed, cycling pauses while the pointer is over the word or focus is inside it. - Keyboard: Decorative; nothing to operate. - Screen readers: All words are exposed once, comma-separated, in an sr-only span; the rotating visual word is aria-hidden, so nothing is announced on change. **Props** #### FlipWords - `words: string[]` - `duration?: number` (default `2600`) — ms each word stays on screen - `className?: string` **Example** ```tsx import { FlipWords } from "@/components/velora/flip-words"; export default function FlipWordsDemo() { return (

Make it{" "}

); } ``` ### Hyper Text Scrambles through letters and resolves into the real text. (1.0 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/hyper-text - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/hyper-text.json` (creates `components/velora/hyper-text.tsx`) **Accessibility** - Reduced motion: No scramble runs, on mount or on hover; the text renders as-is. - Keyboard: Decorative; nothing to operate. - Screen readers: The real text is in an sr-only span and the scrambling visual copy is aria-hidden, so assistive tech never reads random letters. **Props** #### HyperText - `children: string` - `frame?: number` (default `40`) — Milliseconds between scramble frames - `onHover?: boolean` (default `false`) — Scramble on hover instead of on mount - `className?: string` **Example** ```tsx import { HyperText } from "@/components/velora/hyper-text"; export default function HyperTextDemo() { return VELORA UI; } ``` ### Morphing Text Blurs one phrase out as the next resolves in. (0.9 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/morphing-text - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/morphing-text.json` (creates `components/velora/morphing-text.tsx`) **Accessibility** - Reduced motion: Only the first phrase is shown, statically, with no blur. With motion allowed, cycling pauses while the pointer is over the text, while focus is inside it, and while the tab is hidden. - Keyboard: Decorative; nothing to operate. - Screen readers: All phrases are exposed once, comma-separated, in an sr-only span; the morphing visual phrase is aria-hidden, so nothing is announced on change. **Props** #### MorphingText - `texts: string[]` - `hold?: number` (default `2`) — Seconds each phrase is held at full clarity - `morph?: number` (default `0.8`) — Seconds spent blurring between phrases - `className?: string` **Example** ```tsx import { MorphingText } from "@/components/velora/morphing-text"; export default function MorphingTextDemo() { return (
); } ``` ### Number Ticker Springs a number up when it enters the viewport. (0.9 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/number-ticker - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/number-ticker.json` (creates `components/velora/number-ticker.tsx`) **Accessibility** - Reduced motion: The final value appears at once when the element scrolls into view, with no count-up. - Keyboard: Decorative; nothing to operate. - Screen readers: The final formatted value is always in an sr-only span; the animating digits are aria-hidden. **Props** #### NumberTicker - `value: number` - `startValue?: number` (default `0`) - `delay?: number` (default `0`) — Seconds to wait after entering the viewport - `decimalPlaces?: number` (default `0`) - `prefix?: string` (default `""`) - `suffix?: string` (default `""`) - …and every `React.HTMLAttributes` prop **Example** ```tsx import { NumberTicker } from "@/components/velora/number-ticker"; export default function NumberTickerDemo() { return (

); } ``` ### Sparkles Text Twinkling stars orbiting your headline. (1.0 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/sparkles-text - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/sparkles-text.json` (creates `components/velora/sparkles-text.tsx`) **Accessibility** - Reduced motion: No sparkles render; only the plain text is shown. - Keyboard: Decorative; nothing to operate. - Screen readers: Children are read normally; each sparkle SVG is aria-hidden. **Props** #### SparklesText - `children: React.ReactNode` - `count?: number` (default `9`) — Number of sparkles - …and every `React.HTMLAttributes` prop **Example** ```tsx import { SparklesText } from "@/components/velora/sparkles-text"; export default function SparklesTextDemo() { return ( Magic moments ); } ``` ### Text Highlighter Marker-pen sweep that draws in when the phrase scrolls into view. (0.8 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/text-highlighter - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/text-highlighter.json` (creates `components/velora/text-highlighter.tsx`) **Accessibility** - Reduced motion: The marker wash appears instantly at full width once the phrase scrolls into view, with no sweep. - Keyboard: Decorative; nothing to operate. - Screen readers: The text is read normally; the highlight bar is aria-hidden and the emphasis is visual only (no or semantics). **Props** #### TextHighlighter - `children: React.ReactNode` - `color?: string` (default `"color-mix(in oklch, var(--brand) 30%, transparent)"`) — Any CSS colour; defaults to a translucent brand wash - `duration?: number` (default `0.7`) — Seconds for the sweep - `className?: string` **Example** ```tsx import { TextHighlighter } from "@/components/velora/text-highlighter"; export default function TextHighlighterDemo() { return (

Every component ships its own receipts.

); } ``` ### Text Hover Effect Giant outlined word that draws in, then glows in brand colours under the pointer. (2.3 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/text-hover-effect - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/text-hover-effect.json` (creates `components/velora/text-hover-effect.tsx`) **Accessibility** - Reduced motion: The outline appears fully drawn with no draw-in, and the spotlight does not track the pointer: hovering fades in the gradient version around the centre of the word. - Keyboard: Decorative; nothing to operate. - Screen readers: The SVG is a role="img" named by the text, so the word is read once; the stacked outline and gradient copies are not announced. **Props** #### TextHoverEffect - `text: string` — The word or short phrase to draw - `strokeWidth?: number` (default `0.75`) — Outline width in SVG units (the glyphs are 100 units tall) - `revealRadius?: number` (default `28`) — Radius of the pointer reveal, as a percentage of the drawing's size - `drawDuration?: number` (default `3`) — Seconds the outline takes to draw itself in on mount - …and every `Omit, "children">` prop **Example** ```tsx import { TextHoverEffect } from "@/components/velora/text-hover-effect"; export default function TextHoverEffectDemo() { return ; } ``` ### Text Reveal Word-by-word blur reveal on scroll. (0.8 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/text-reveal - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/text-reveal.json` (creates `components/velora/text-reveal.tsx`) **Accessibility** - Reduced motion: All words are visible immediately, including before hydration, with no fade, blur or slide. - Keyboard: Decorative; nothing to operate. - Screen readers: The full sentence is read once from an sr-only span; the per-word animated spans are aria-hidden. **Props** #### TextReveal - `text: string` — Plain text — revealed word by word - `className?: string` - `as?: "h1" | "h2" | "h3" | "p" | "span"` (default `"span"`) - `delay?: number` (default `0`) - `stagger?: number` (default `0.045`) — Seconds between each word - `once?: boolean` (default `true`) **Example** ```tsx import { TextReveal } from "@/components/velora/text-reveal"; export default function TextRevealDemo() { return ( ); } ``` ### Text Shimmer A soft light sweep — great for AI loading states. (0.4 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/text-shimmer - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/text-shimmer.json` (creates `components/velora/text-shimmer.tsx`) **Accessibility** - Reduced motion: The sweep is off; the text rests in the muted foreground colour with a slight brightening at the right edge and stays fully readable. - Keyboard: Decorative; nothing to operate. - Screen readers: Children are read as normal text. It is not a live region, so add role="status" yourself if you use it as a loading indicator. **Props** #### TextShimmer - `children: React.ReactNode` - …and every `React.HTMLAttributes` prop **Example** ```tsx import { TextShimmer } from "@/components/velora/text-shimmer"; export default function TextShimmerDemo() { return ( Generating your page… ); } ``` ### Typewriter Types, holds and deletes through a list of words. (1.3 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/typewriter - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/typewriter.json` (creates `components/velora/typewriter.tsx`) **Accessibility** - Reduced motion: The first word shows as static text with no typing, deleting or cursor. With motion allowed, typing pauses while the pointer is over the text or focus is inside it. - Keyboard: Decorative; nothing to operate. - Screen readers: All words are exposed once, comma-separated, in an sr-only span; the typed text and cursor are aria-hidden. **Props** #### Typewriter - `words: string[]` - `typeSpeed?: number` (default `70`) — ms per typed character - `deleteSpeed?: number` (default `40`) — ms per deleted character - `holdTime?: number` (default `1800`) — ms to hold a completed word - `loop?: boolean` (default `true`) - `cursor?: boolean` (default `true`) - …and every `React.HTMLAttributes` prop **Example** ```tsx import { AnimatedGradientText } from "@/components/velora/animated-gradient-text"; import { Typewriter } from "@/components/velora/typewriter"; export default function TypewriterDemo() { return (

Build it{" "}

); } ``` ### Word Rotate Swaps a single word on a quiet vertical roll. (0.9 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/word-rotate - Category: Text - Install: `npx shadcn@latest add https://velora.colorlib.com/r/word-rotate.json` (creates `components/velora/word-rotate.tsx`) **Accessibility** - Reduced motion: The first word stays on screen and the words don't rotate. With motion allowed, rotation pauses while the pointer is over the word, while focus is inside it, and while the tab is hidden. - Keyboard: Decorative; nothing to operate. - Screen readers: All words are exposed once, comma-separated, in an sr-only span; the rotating visual word is aria-hidden, so nothing is announced on change. **Props** #### WordRotate - `words: string[]` - `interval?: number` (default `2.5`) — Seconds each word is held - `className?: string` **Example** ```tsx import { WordRotate } from "@/components/velora/word-rotate"; export default function WordRotateDemo() { return (

Build{" "}

); } ``` ### Confetti Dependency-free confetti burst, fired from anywhere. (1.6 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/confetti - Category: Buttons - Install: `npx shadcn@latest add https://velora.colorlib.com/r/confetti.json` (creates `components/velora/confetti.tsx`) **Accessibility** - Reduced motion: confettiBurst does nothing, so clicking shows no burst; the button's own onClick still runs. - Keyboard: Native setLoading(false)} /> ); } ``` ### Animated Testimonials Crossfades portraits behind a rotating quote. (2.0 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/animated-testimonials - Category: Social Proof - Install: `npx shadcn@latest add https://velora.colorlib.com/r/animated-testimonials.json` (creates `components/velora/animated-testimonials.tsx`) **Accessibility** - Reduced motion: Autoplay is off and the pause button is hidden. Changing slides with the dots swaps the portrait and quote instantly, with no scale, rotate or slide. - Keyboard: The pause/play button and the dots are native buttons with visible focus rings and 24px hit areas. Autoplay also pauses while the pointer or focus is inside the component. - Screen readers: Each dot is named "Show testimonial from {name}" with aria-current on the shown one, the quote is a blockquote, and slide changes are not announced. **Props** #### AnimatedTestimonials - `testimonials: Testimonial[]` - `interval?: number` (default `6`) — Seconds between slides; 0 disables autoplay - `className?: string` **Example** ```tsx import { AnimatedTestimonials } from "@/components/velora/animated-testimonials"; const quotes = [ { quote: "Swapped three separate animation libraries for Velora and the bundle got smaller.", name: "Dana Whitfield", role: "Staff engineer, Corvine", }, { quote: "The size on every docs page is the reason we shipped it without a review meeting.", name: "Marco Elias", role: "Design engineer, Halyard", }, { quote: "Reduced-motion worked out of the box. That never happens.", name: "Priya Raman", role: "Accessibility lead, Northbeam", }, ]; export default function AnimatedTestimonialsDemo() { return ; } ``` ### Logo Cloud Customer logos muted until hovered, so they read as texture. (0.8 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/logo-cloud - Category: Social Proof - Install: `npx shadcn@latest add https://velora.colorlib.com/r/logo-cloud.json` (creates `components/velora/logo-cloud.tsx`) **Accessibility** - Reduced motion: The 300ms fade is removed, so a hovered logo switches straight from dimmed grayscale to full color. - Keyboard: Decorative; nothing to operate. - Screen readers: A list with one item per logo, each announced by its `name`; the logo node itself is aria-hidden. **Props** #### LogoCloud - `logos: { name: string; logo: React.ReactNode }[]` — One entry per logo — pass SVGs, `img` elements or plain wordmarks - `dimUntilHover?: boolean` (default `true`) — Show logos muted until hovered - …and every `React.HTMLAttributes` prop **Example** ```tsx import { LogoCloud } from "@/components/velora/logo-cloud"; const chips = ["Astro", "Next.js", "Remix", "Vite", "Nuxt", "SvelteKit"]; export default function LogoCloudDemo() { return ( ({ name, logo: {name}, }))} /> ); } ``` ### Tweet Card Static social-proof card — props, not an API call. (1.2 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/tweet-card - Category: Social Proof - Install: `npx shadcn@latest add https://velora.colorlib.com/r/tweet-card.json` (creates `components/velora/tweet-card.tsx`) **Accessibility** - Reduced motion: Nothing animates beyond a background-color change on hover. - Keyboard: Decorative; nothing to operate. - Screen readers: A figure with name, @handle and time followed by a blockquote; the avatar is decorative and the verified badge is announced as "Verified account". **Props** #### TweetCard - `name: string` - `handle: string` - `content: React.ReactNode` - `avatar?: string` — Optional avatar URL; falls back to the author's initial - `time?: string` — Free-form, e.g. "2h" or "Mar 14" - `verified?: boolean` (default `false`) - …and every `Omit, "content">` prop **Example** ```tsx import { TweetCard } from "@/components/velora/tweet-card"; export default function TweetCardDemo() { return ( ); } ``` ### Container Scroll Screenshot panel that rotates flat as it scrolls into view. (0.8 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/container-scroll - Category: Scroll - Install: `npx shadcn@latest add https://velora.colorlib.com/r/container-scroll.json` (creates `components/velora/container-scroll.tsx`) **Accessibility** - Reduced motion: A CSS override keeps the panel flat and the header in place: no 26° tilt, no scale, no scroll offset. - Keyboard: Decorative; nothing to operate. - Screen readers: Plain wrapper divs; the header and children pass through unchanged. **Props** #### ContainerScroll - `header?: React.ReactNode` — Headline area above the panel - `children: React.ReactNode` - `className?: string` **Example** ```tsx import { ContainerScroll } from "@/components/velora/container-scroll"; export default function ContainerScrollDemo() { return (
Your screenshot
); } ``` ### Hero Parallax Hero copy over three card rows that slide apart as a tilted block flattens. (2.1 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/hero-parallax - Category: Scroll - Install: `npx shadcn@latest add https://velora.colorlib.com/r/hero-parallax.json` (creates `components/velora/hero-parallax.tsx`) **Accessibility** - Reduced motion: The block renders flat with no tilt, slide or fade, and the rows wrap so every card is visible without scrolling sideways. - Keyboard: Cards with an href are links in the Tab order with a visible focus ring; a focused card that has drifted past the edge slides its row back into view. - Screen readers: Cards are announced as three lists; each card's accessible name is its visible title, and the image uses empty alt text. **Props** #### HeroParallax - `products: HeroParallaxProduct[]` — Cards, split evenly across three rows - `children?: React.ReactNode` — Hero copy shown above the rows - `drift?: number` (default `480`) — How far each row slides sideways over the scroll, in px - `cardClassName?: string` — Extra classes for every card, e.g. to resize them - `container?: React.RefObject` — Scrollable element to track instead of the window - …and every `React.HTMLAttributes` prop **Example** ```tsx "use client"; import { useRef } from "react"; import { HeroParallax } from "@/components/velora/hero-parallax"; const photo = (id: string) => `https://images.unsplash.com/photo-${id}?w=800&q=70&auto=format&fit=crop`; const products = [ { title: "Ledger Analytics", image: photo("1460925895917-afdab827c52f"), href: "#ledger" }, { title: "Pulse Dashboard", image: photo("1551288049-bebda4e38f71"), href: "#pulse" }, { title: "Wander Mobile", image: photo("1545235617-9465d2a55698"), href: "#wander" }, { title: "Flowboard", image: photo("1531403009284-440f080d1e12"), href: "#flowboard" }, { title: "Hue Design System", image: photo("1561070791-2526d30994b5"), href: "#hue" }, { title: "Aurora Brand Kit", image: photo("1618005182384-a83a8bd57fbe"), href: "#aurora" }, { title: "Helix Identity", image: photo("1618172193622-ae2d025f4032"), href: "#helix" }, { title: "Sketchpad Pro", image: photo("1558655146-9f40138edfeb"), href: "#sketchpad" }, { title: "Northwind Docs", image: photo("1517694712202-14dd9538aa97"), href: "#northwind" }, { title: "Tidal Campaign", image: photo("1604871000636-074fa5117945"), href: "#tidal" }, { title: "Reactor CLI", image: photo("1633356122544-f134324a6cee"), href: "#reactor" }, { title: "Studio Desk", image: photo("1498050108023-c5249f4df085"), href: "#studio" }, { title: "Arcade Rewind", image: photo("1550745165-9bc0b252726f"), href: "#arcade" }, { title: "Prism Labs", image: photo("1523961131990-5ea7c61b2107"), href: "#prism" }, { title: "Glow Wallpapers", image: photo("1579546929518-9e396f3cc809"), href: "#glow" }, ]; export default function HeroParallaxDemo() { const scrollRef = useRef(null); return ( // `@container-size` makes the component's cqh heights measure this // box instead of the viewport. On a real page, drop it and `container`.

Product studio

We design and ship{" "} software people love

Fifteen launches this year, from analytics suites to brand systems. Scroll to browse the work.

); } ``` ### Macbook Scroll A CSS-drawn laptop pins in place and opens its lid as the screenshot scales up. (2.0 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/macbook-scroll - Category: Scroll - Install: `npx shadcn@latest add https://velora.colorlib.com/r/macbook-scroll.json` (creates `components/velora/macbook-scroll.tsx`) **Accessibility** - Reduced motion: The laptop renders open with the screenshot at full size, the section drops its extra scroll height, and nothing moves while scrolling. - Keyboard: Decorative; nothing to operate. - Screen readers: The title is an h2 and the screenshot uses the `alt` you pass (empty by default); the lid shell, keyboard and trackpad are aria-hidden. **Props** #### MacbookScroll - `src?: string` — Screenshot shown on the screen - `alt?: string` (default `""`) — Alt text for `src`; leave empty if the image is decorative - `children?: React.ReactNode` — Custom screen content, used instead of `src`; `cqw` units scale with the screen - `title?: React.ReactNode` — Heading above the laptop, rendered in an h2 - `badge?: React.ReactNode` — Small element on the lower-left of the deck, e.g. a logo - `container?: React.RefObject` — Scrollable element to track instead of the window - …and every `Omit, "title">` prop **Example** ```tsx "use client"; import { useRef } from "react"; import { MacbookScroll } from "@/components/velora/macbook-scroll"; export default function MacbookScrollDemo() { const scrollRef = useRef(null); return ( // `@container-size` makes the component's cqh heights measure this // box instead of the viewport. On a real page, drop it and `container`.
V } />
); } ``` ### Parallax Grid Gallery columns drifting at different rates for depth. (0.8 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/parallax-grid - Category: Scroll - Install: `npx shadcn@latest add https://velora.colorlib.com/r/parallax-grid.json` (creates `components/velora/parallax-grid.tsx`) **Accessibility** - Reduced motion: A CSS override pins every tile in its grid cell, so the columns do not drift. - Keyboard: Decorative; nothing to operate. - Screen readers: Plain divs, one wrapper per child, with no list or grid semantics beyond what the children provide. **Props** #### ParallaxGrid - `children: React.ReactNode[]` — Each child becomes one tile; columns drift at different speeds - `depth?: number` (default `90`) — Maximum vertical drift in px - `className?: string` **Example** ```tsx import { ParallaxGrid } from "@/components/velora/parallax-grid"; export default function ParallaxGridDemo() { return ( {[0, 1, 2, 3, 4, 5].map((i) => (
))} ); } ``` ### Scroll Progress Gradient page-progress bar pinned to the top. (0.5 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/scroll-progress - Category: Scroll - Install: `npx shadcn@latest add https://velora.colorlib.com/r/scroll-progress.json` (creates `components/velora/scroll-progress.tsx`) **Accessibility** - Reduced motion: The bar follows the scroll position directly, with no spring easing or overshoot. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; aria-hidden. **Props** #### ScrollProgress - `className?: string` - `container?: React.RefObject` — Track this scroll box instead of the window **Example** ```tsx "use client"; import { useRef } from "react"; import { ScrollProgress } from "@/components/velora/scroll-progress"; export default function ScrollProgressDemo() { const container = useRef(null); return (
{/* On a real page, drop `container` and the default fixed position. */}

Scroll this box

{Array.from({ length: 12 }, (_, i) => (

Paragraph {i + 1}. The bar above fills as you read, easing on a spring so it never jitters.

))}
); } ``` ### Scroll Velocity Marquee whose speed and direction follow your scrolling. (1.4 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/scroll-velocity - Category: Scroll - Install: `npx shadcn@latest add https://velora.colorlib.com/r/scroll-velocity.json` (creates `components/velora/scroll-velocity.tsx`) **Accessibility** - Reduced motion: The row stays still at its starting position and does not react to scrolling. - Keyboard: Nothing is interactive by default. If children contain links, only the first copy is focusable, and the marquee pauses while the pointer or focus is inside it. - Screen readers: Only the first copy of the children is exposed; the three duplicates are aria-hidden and inert. **Props** #### ScrollVelocity - `children: React.ReactNode` - `baseVelocity?: number` (default `4`) — Base speed in percent of content width per second - `className?: string` **Example** ```tsx import { ScrollVelocity } from "@/components/velora/scroll-velocity"; export default function ScrollVelocityDemo() { return ( Velora UI · Animations with receipts · ); } ``` ### Sticky Scroll Copy scrolls past a pinned panel that swaps per section. (1.3 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/sticky-scroll - Category: Scroll - Install: `npx shadcn@latest add https://velora.colorlib.com/r/sticky-scroll.json` (creates `components/velora/sticky-scroll.tsx`) **Accessibility** - Reduced motion: The pinned panel swaps instantly with no crossfade or scale, and titles switch between full and 60% opacity without fading. - Keyboard: Nothing is interactive by default. Interactive `content` in inactive panels is inert, so only the visible panel's controls take focus. - Screen readers: Titles are h3 headings with a paragraph each; inactive panels are aria-hidden and inert, and the panel column is hidden below the lg breakpoint. **Props** #### StickyScroll - `items: StickyScrollItem[]` - `container?: React.RefObject` — Scrollable element to track instead of the window - `className?: string` **Example** ```tsx "use client"; import { useRef } from "react"; import { StickyScroll } from "@/components/velora/sticky-scroll"; const items = [ { title: "Install", description: "Add a component with one CLI command. The source lands in your repo.", content: npx shadcn add …, }, { title: "Customize", description: "Every class is yours to edit. Tokens come from your theme.", content: Your tokens, }, { title: "Ship", description: "No runtime to configure. It is just a React component.", content: Deployed, }, ]; export default function StickyScrollDemo() { const scrollRef = useRef(null); return ( // `@container-size` makes the component's cqh heights measure this // box instead of the viewport. On a real page, drop it and `container`.
); } ``` ### Timeline Vertical timeline with sticky labels and a gradient beam that fills as you scroll. (1.3 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/timeline - Category: Scroll - Install: `npx shadcn@latest add https://velora.colorlib.com/r/timeline.json` (creates `components/velora/timeline.tsx`) **Accessibility** - Reduced motion: The beam is drawn in full from the start and its glowing head is hidden; labels still stick, which is layout rather than animation. - Keyboard: Decorative; nothing to operate. - Screen readers: Entries are an ordered list; each label is an h3 followed by its content, and the track, beam and dots are aria-hidden. **Props** #### Timeline - `items: TimelineItem[]` — Entries, rendered in order as an ordered list - `container?: React.RefObject` — Scrollable element to track instead of the window - …and every `React.HTMLAttributes` prop **Example** ```tsx "use client"; import { useRef } from "react"; import { Timeline } from "@/components/velora/timeline"; function Tiles({ labels }: { labels: string[] }) { return (
{labels.map((label) => (
{label}
))}
); } const items = [ { title: "2023", content: ( <>

Two engineers, one spare room and a shared belief that UI libraries should ship as source you own.

), }, { title: "2024", content: ( <>

The first public release. A thousand teams installed a component in the first month, and the issue tracker never slept again.

), }, { title: "2025", content: ( <>

Theming, reduced-motion support and an accessibility audit of every component. Contributors from 40 countries.

), }, { title: "Today", content: (

Still small, still shipping. The next chapter is being written in the open.

), }, ]; export default function TimelineDemo() { const scrollRef = useRef(null); return ( // `@container-size` makes the component's cqh offsets measure this // box instead of the viewport. On a real page, drop it and `container`.
); } ``` ### Tracing Beam Gradient line that draws itself down long-form content. (0.8 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/tracing-beam - Category: Scroll - Install: `npx shadcn@latest add https://velora.colorlib.com/r/tracing-beam.json` (creates `components/velora/tracing-beam.tsx`) **Accessibility** - Reduced motion: The beam is drawn at full length from the start instead of following your scroll. - Keyboard: Decorative; nothing to operate. - Screen readers: The beam is aria-hidden; children render unchanged. **Props** #### TracingBeam - `children: React.ReactNode` - `className?: string` **Example** ```tsx import { TracingBeam } from "@/components/velora/tracing-beam"; export default function TracingBeamDemo() { return (

The beam draws as you read.

); } ``` ### Animated Beam Draws an animated connection between any two elements. (1.5 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/animated-beam - Category: Effects - Install: `npx shadcn@latest add https://velora.colorlib.com/r/animated-beam.json` (creates `components/velora/animated-beam.tsx`) **Accessibility** - Reduced motion: The pulse stops; each connection shows a still gradient stroke along the full path. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; the svg is aria-hidden. **Props** #### AnimatedBeam - `containerRef: RefObject` - `fromRef: RefObject` - `toRef: RefObject` - `curvature?: number` (default `0`) — Vertical bend of the beam in px (positive bends up) - `reverse?: boolean` (default `false`) - `duration?: number` (default `5`) - `delay?: number` (default `0`) - `pathWidth?: number` (default `2`) - `pathOpacity?: number` (default `0.15`) - `gradientStartColor?: string` (default `"#8b5cf6"`) - `gradientStopColor?: string` (default `"#22d3ee"`) - `className?: string` **Example** ```tsx "use client"; import { useRef, type Ref } from "react"; import { BoxIcon, CloudIcon, CodeIcon, DatabaseIcon, MailIcon, SparklesIcon, WalletIcon, } from "lucide-react"; import { AnimatedBeam } from "@/components/velora/animated-beam"; import { cn } from "@/lib/utils"; function Node({ ref, className, children, }: { ref?: Ref; className?: string; children: React.ReactNode; }) { return (
{children}
); } /** Six service nodes beaming into a central hub. */ export default function AnimatedBeamDemo() { const containerRef = useRef(null); const centerRef = useRef(null); const left1 = useRef(null); const left2 = useRef(null); const left3 = useRef(null); const right1 = useRef(null); const right2 = useRef(null); const right3 = useRef(null); return (
); } ``` ### Blur Fade The workhorse entrance — blur, fade and drift into view. (1.0 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/blur-fade - Category: Effects - Install: `npx shadcn@latest add https://velora.colorlib.com/r/blur-fade.json` (creates `components/velora/blur-fade.tsx`) **Accessibility** - Reduced motion: Content still starts hidden and appears instantly, with no blur or slide, once it scrolls 10% into view. - Keyboard: Decorative; nothing to operate. - Screen readers: Children stay in the DOM before they are revealed, so they are always read. **Props** #### BlurFade - `children: React.ReactNode` - `className?: string` - `delay?: number` (default `0`) — Seconds before the animation starts - `duration?: number` (default `0.5`) - `direction?: "up" | "down" | "left" | "right" | "none"` (default `"up"`) — Direction the element enters from - `offset?: number` (default `16`) — Distance travelled in px - `once?: boolean` (default `true`) — Animate only the first time it enters the viewport - `inView?: boolean` — Start animating immediately instead of waiting to scroll into view **Example** ```tsx import { BlurFade } from "@/components/velora/blur-fade"; export default function BlurFadeDemo() { return (
{[0, 0.15, 0.3].map((delay) => (
{delay}s
))}
); } ``` ### Border Beam A beam of light traveling around any border. (0.9 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/border-beam - Category: Effects - Install: `npx shadcn@latest add https://velora.colorlib.com/r/border-beam.json` (creates `components/velora/border-beam.tsx`) **Accessibility** - Reduced motion: The beam is hidden entirely; only the parent's normal border remains. - Keyboard: Decorative; nothing to operate. - Screen readers: Decorative; aria-hidden. **Props** #### BorderBeam - `className?: string` - `size?: number` (default `64`) — Size of the beam in px - `duration?: number` (default `6`) — Seconds for one full loop - `delay?: number` (default `0`) — Seconds of delay before starting - `reverse?: boolean` (default `false`) - `colorFrom?: string` (default `"var(--brand-from)"`) - `colorTo?: string` (default `"var(--brand-to)"`) **Example** ```tsx import { BorderBeam } from "@/components/velora/border-beam"; export default function BorderBeamDemo() { return (

<BorderBeam />

); } ``` ### Glowing Effect Border glow that follows the pointer around a card's edge as it comes near. (1.8 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/glowing-effect - Category: Effects - Install: `npx shadcn@latest add https://velora.colorlib.com/r/glowing-effect.json` (creates `components/velora/glowing-effect.tsx`) **Accessibility** - Reduced motion: The arc stops following the pointer; hovering the card shows a soft glow around the whole border instead. - Keyboard: The effect is not focusable; the full border lights up while the card or anything inside it has keyboard focus. - Screen readers: The glow layer is aria-hidden and ignores pointer events; only the card content is read. **Props** #### GlowingEffect - `proximity?: number` (default `64`) — Distance in px outside the card at which the glow starts to fade in - `spread?: number` (default `80`) — Length of the lit arc, in degrees of the border - `borderWidth?: number` (default `2`) — Thickness of the glowing border in px - `halo?: boolean` (default `true`) — Add a soft blurred halo behind the lit border - …and every `React.HTMLAttributes` prop **Example** ```tsx import { Sparkles } from "lucide-react"; import { GlowingEffect } from "@/components/velora/glowing-effect"; export default function GlowingEffectDemo() { return (

Follows your pointer

Bring the cursor near any edge and the border lights up where you are.

Learn more
); } ``` ### 3D Card Perspective card that turns toward the pointer while its layers lift to different depths. (1.6 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/3d-card - Category: 3D - Install: `npx shadcn@latest add https://velora.colorlib.com/r/3d-card.json` (creates `components/velora/3d-card.tsx`) **Accessibility** - Reduced motion: The card stays flat and its layers stay on the surface; pointer movement and focus change nothing. - Keyboard: The card is not focusable itself; when a link or button inside it gets keyboard focus, the layers rise to 40% of their depth without tilting. - Screen readers: A transparent wrapper; the children are read in source order. **Props** #### Card3D - `maxTilt?: number` (default `10`) — Maximum rotation toward the pointer, in degrees - `perspective?: number` (default `1000`) — CSS perspective distance in px (smaller = stronger 3D) - `cardClassName?: string` — Classes for the rotating surface (avoid overflow-hidden: it flattens the layers) - `children: React.ReactNode` — Card content; wrap layers that should lift in Card3DItem - …and every `React.HTMLAttributes` prop #### Card3DItem - `depth?: number` (default `40`) — How far the item lifts toward the viewer, in px (translateZ) - `rotateX?: number` (default `0`) — Extra rotation around the X axis at full lift, in degrees - `rotateY?: number` (default `0`) — Extra rotation around the Y axis at full lift, in degrees - `rotateZ?: number` (default `0`) — Extra rotation around the Z axis at full lift, in degrees - …and every `React.HTMLAttributes` prop **Example** ```tsx import { Card3D, Card3DItem } from "@/components/velora/3d-card"; export default function Card3DDemo() { return ( Depth on demand Every layer floats at its own height as the card turns toward you.
+130px
Hover or tab in
); } ``` ### 3D Pin Card that tilts back as a glowing pin rises with a label chip and rippling rings. (1.9 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/3d-pin - Category: 3D - Install: `npx shadcn@latest add https://velora.colorlib.com/r/3d-pin.json` (creates `components/velora/3d-pin.tsx`) **Accessibility** - Reduced motion: The card never tilts and the pin does not rise; on hover or focus the pin, chip and three static rings simply appear over the flat card. - Keyboard: With href the whole card is one link; without it the root is a plain div and the effect shows while a link or button inside it has keyboard focus. The focused card gets a visible ring. - Screen readers: The chip's title is real text read with the card content (it forms part of the link name when href is set); the beam, dot and rings are aria-hidden. **Props** #### Pin3D - `title: string` — Label shown in the chip at the top of the pin - `href?: string` — Makes the whole card a link; without it the root is a plain div - `cardClassName?: string` — Classes for the card surface that holds the children - `children: React.ReactNode` — Card content, drawn on the tilting surface - …and every `Omit, "title">` prop **Example** ```tsx import { Pin3D } from "@/components/velora/3d-pin"; export default function Pin3DDemo() { return (
Velora UI

Components that move

Copy, paste and ship animated interfaces.

); } ``` ### 3D Marquee A tilted 3D grid of images whose columns scroll up and down in an endless loop. (1.8 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/3d-marquee - Category: Carousels - Install: `npx shadcn@latest add https://velora.colorlib.com/r/3d-marquee.json` (creates `components/velora/3d-marquee.tsx`) **Accessibility** - Reduced motion: The columns stop scrolling and the grid rests as a static tilted wall. Scrolling also pauses on hover and while offscreen. - Keyboard: Decorative; nothing to operate. - Screen readers: Images are decorative (empty alt) unless you pass alt text, in which case each is read once; duplicated copies are aria-hidden and inert. **Props** #### Marquee3D - `images: Marquee3DImage[]` — Image URLs, or { src, alt } objects (images without alt are decorative) - `columns?: number` (default `5`) — Number of columns on the tilted plane - `duration?: number` (default `40`) — Seconds for one full loop of a column - `fade?: boolean` (default `true`) — Fade the edges into the background - `pauseOnHover?: boolean` (default `true`) — Pause scrolling while hovered - `imageClassName?: string` — Extra classes for every image tile - …and every `React.HTMLAttributes` prop **Example** ```tsx import { Marquee3D } from "@/components/velora/3d-marquee"; const photo = (id: string) => `https://images.unsplash.com/photo-${id}?w=800&q=70&auto=format&fit=crop`; const images = [ "1506905925346-21bda4d32df4", "1441974231531-c6227db76b6e", "1507525428034-b723cf961d3e", "1493246507139-91e8fad9978e", "1531366936337-7c912a4589a7", "1470071459604-3b5ec3a7fe05", "1500530855697-b586d89ba3ee", "1518509562904-e7ef99cdcc86", "1469474968028-56623f02e42e", "1476514525535-07fb3b4ae5f1", "1447752875215-b2761acb3c5d", "1485470733090-0aae1788d5af", ].map(photo); export default function Marquee3DDemo() { return ; } ``` ### Apple Cards Carousel Snap-scrolling row of tall image cards that morph into a full modal story. (3.1 KB gzipped, deps: react-dom, motion/react) - Docs: https://velora.colorlib.com/components/apple-cards-carousel - Category: Carousels - Install: `npx shadcn@latest add https://velora.colorlib.com/r/apple-cards-carousel.json` (creates `components/velora/apple-cards-carousel.tsx`) **Accessibility** - Reduced motion: Cards open and close instantly with no shared-element morph or backdrop fade, and the previous/next buttons jump instead of smooth-scrolling. - Keyboard: The row is a focusable region that arrow keys scroll; each card is a button that opens a modal dialog. Focus moves into the dialog, Tab and Shift+Tab stay inside it, Escape or Close dismisses it, and focus returns to the card. Previous/next buttons are disabled at either end. - Screen readers: The row is a labelled region containing a list of buttons named by category and title (aria-haspopup="dialog", aria-expanded); the dialog is aria-modal and named by its heading, and card images are decorative. **Props** #### CardsCarousel - `children: React.ReactNode` — `CarouselCard` elements - `label?: string` (default `"Carousel"`) — Accessible name for the scrollable region - …and every `React.HTMLAttributes` prop #### CarouselCard - `src: string` — Cover image URL - `category: string` — Small label above the title - `title: string` — Card title and dialog heading - `children: React.ReactNode` — Rich content shown once the card is opened - `className?: string` — Extra classes for the card **Example** ```tsx import { CardsCarousel, CarouselCard } from "@/components/velora/apple-cards-carousel"; const photo = (id: string) => `https://images.unsplash.com/photo-${id}?w=800&q=70&auto=format&fit=crop`; const stories = [ { category: "Photo essay", title: "A week above the clouds", src: photo("1506905925346-21bda4d32df4") }, { category: "Lakes", title: "Rowing out before sunrise", src: photo("1476514525535-07fb3b4ae5f1") }, { category: "Night skies", title: "Chasing the northern lights", src: photo("1531366936337-7c912a4589a7") }, { category: "Road trip", title: "Four hundred miles of red rock", src: photo("1500530855697-b586d89ba3ee") }, { category: "Islands", title: "Where the lagoon turns turquoise", src: photo("1518509562904-e7ef99cdcc86") }, { category: "Coastline", title: "Golden hour on an empty beach", src: photo("1507525428034-b723cf961d3e") }, ]; export default function CardsCarouselDemo() { return ( {stories.map((story) => (

{story.title}.{" "} We packed light, left the itinerary loose and let the weather decide where to go next. These are the moments that made the trip.

Every photo was shot handheld on a single prime lens, then edited only for exposure — what you see is what we saw.

))}
); } ``` ### Image Slider Full-bleed image slider with crossfade-zoom, autoplay, dots, arrows and swipe. (3.0 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/image-slider - Category: Carousels - Install: `npx shadcn@latest add https://velora.colorlib.com/r/image-slider.json` (creates `components/velora/image-slider.tsx`) **Accessibility** - Reduced motion: Autoplay never starts on its own and slides change instantly with no fade or zoom; pressing Play opts in to autoplay with instant changes. - Keyboard: Previous, next, pause/play and dot buttons are native buttons; Left/Right arrows (and Home/End) change slides while focus is inside the slider. Autoplay pauses while hovered or while focus is inside. - Screen readers: A region with aria-roledescription="carousel" whose current slide is a group labelled "n of N"; image alt text is read, and slide changes are announced politely only while autoplay is not running. **Props** #### ImageSlider - `images: SliderImage[]` — Images to cycle through - `children?: React.ReactNode` — Content layered above the images (headline, call-to-action…) - `autoplay?: boolean` (default `true`) — Advance automatically (never starts on its own under reduced motion) - `interval?: number` (default `5000`) — ms each slide stays on screen while autoplaying - `scrim?: boolean` (default `true`) — Darken the images so overlay text and controls stay legible - `label?: string` (default `"Image slider"`) — Accessible name for the carousel region - …and every `React.HTMLAttributes` prop **Example** ```tsx import { ImageSlider } from "@/components/velora/image-slider"; const photo = (id: string) => `https://images.unsplash.com/photo-${id}?w=1600&q=70&auto=format&fit=crop`; const images = [ { src: photo("1506905925346-21bda4d32df4"), alt: "Mountain peaks rising above a sea of clouds" }, { src: photo("1507525428034-b723cf961d3e"), alt: "An empty beach at golden hour" }, { src: photo("1470071459604-3b5ec3a7fe05"), alt: "Morning fog over green highland hills" }, { src: photo("1531366936337-7c912a4589a7"), alt: "Northern lights over a snowy ridge" }, { src: photo("1500530855697-b586d89ba3ee"), alt: "A road winding through red rock canyons" }, ]; export default function ImageSliderDemo() { return ( ); } ``` ### Following Pointer Swaps the cursor for an arrow and a name tag that trail the pointer inside a region. (1.7 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/following-pointer - Category: Cursor & Pointer - Install: `npx shadcn@latest add https://velora.colorlib.com/r/following-pointer.json` (creates `components/velora/following-pointer.tsx`) **Accessibility** - Reduced motion: The arrow and tag track the pointer 1:1 with no spring, and appear and hide without a scale or fade. - Keyboard: Decorative; nothing to operate. - Screen readers: The arrow and tag are aria-hidden; the wrapped content is read and focused as normal. **Props** #### FollowingPointer - `label?: React.ReactNode` — Content of the name tag next to the arrow; leave empty for an arrow only - `color?: string` (default `"var(--brand)"`) — Any CSS colour for the arrow and tag - `children: React.ReactNode` - …and every `Omit, "color">` prop **Example** ```tsx import { FollowingPointer } from "@/components/velora/following-pointer"; export default function FollowingPointerDemo() { return (

Q3 launch board

Move your mouse around the canvas to see a teammate's cursor.

{["bg-brand-from", "bg-brand-via", "bg-brand-to"].map((tone) => ( ))}
); } ``` ### Lens Circular magnifier that follows the pointer or arrow keys to zoom into an image. (1.7 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/lens - Category: Cursor & Pointer - Install: `npx shadcn@latest add https://velora.colorlib.com/r/lens.json` (creates `components/velora/lens.tsx`) **Accessibility** - Reduced motion: The lens tracks the pointer directly with no easing, and appears and hides without a fade or scale. - Keyboard: The wrapper is a tab stop; keyboard focus shows the lens at its last position, arrow keys move it (Shift for larger steps) and Escape hides it. With staticPosition the lens stays pinned. - Screen readers: Content is read once from the original children; the magnified copy is aria-hidden and inert, so its links and images are neither announced nor focusable. **Props** #### Lens - `children: React.ReactNode` — The content to magnify, usually an `` that fills the box - `zoomFactor?: number` (default `2`) — How many times the lens magnifies - `radius?: number` (default `80`) — Lens radius in px - `staticPosition?: { x: number; y: number }` — Pin the lens open at this spot (percentages of width and height) and ignore the pointer — handy for touch screens and product callouts - …and every `React.HTMLAttributes` prop **Example** ```tsx import { Lens } from "@/components/velora/lens"; export default function LensDemo() { return ( {/* eslint-disable-next-line @next/next/no-img-element */} Close-up of a circuit board covered in chips and components ); } ``` ### Pointer Highlight Draws an outline around a phrase on scroll, then glides a pointer icon to its corner. (1.2 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/pointer-highlight - Category: Cursor & Pointer - Install: `npx shadcn@latest add https://velora.colorlib.com/r/pointer-highlight.json` (creates `components/velora/pointer-highlight.tsx`) **Accessibility** - Reduced motion: The outline and pointer are shown in their final place as soon as the phrase is on screen, with no drawing or glide. - Keyboard: Decorative; nothing to operate. - Screen readers: The text is read normally; the outline and pointer icon are aria-hidden. **Props** #### PointerHighlight - `children: React.ReactNode` — The phrase to frame - `rectangleClassName?: string` — Classes for the drawn outline (border colour, width, radius, fill) - `pointerClassName?: string` — Classes for the pointer icon (colour, size) - `once?: boolean` (default `true`) — Play only the first time the phrase enters the viewport - …and every `React.HTMLAttributes` prop **Example** ```tsx import { PointerHighlight } from "@/components/velora/pointer-highlight"; export default function PointerHighlightDemo() { return (

Every component ships with reduced motion built in.

); } ``` ### Smooth Cursor Dot-and-ring custom cursor; the ring trails on a spring and grows over links and buttons. (1.9 KB gzipped, deps: react-dom, motion/react) - Docs: https://velora.colorlib.com/components/smooth-cursor - Category: Cursor & Pointer - Install: `npx shadcn@latest add https://velora.colorlib.com/r/smooth-cursor.json` (creates `components/velora/smooth-cursor.tsx`) **Accessibility** - Reduced motion: The ring snaps to the dot instead of trailing, and grows or shrinks without easing. - Keyboard: Decorative; nothing to operate. - Screen readers: The dot and ring are aria-hidden and never take pointer events; nothing is announced. **Props** #### SmoothCursor - `container?: React.RefObject` — Limit the cursor to this element; defaults to the whole document - `hideNativeCursor?: boolean` (default `true`) — Hide the system cursor while the custom one is showing - `interactiveSelector?: string` (default `"a, button, [role=button], input, select, textarea, label, summary"`) — CSS selector for elements that make the ring grow - `dotClassName?: string` — Classes for the dot - `ringClassName?: string` — Classes for the trailing ring **Example** ```tsx "use client"; import { useRef } from "react"; import { SmoothCursor } from "@/components/velora/smooth-cursor"; export default function SmoothCursorDemo() { // Scoped to this box for the demo. In an app, render // once in your root layout without a container. const area = useRef(null); return (

Move your mouse around this box

The ring trails behind the dot and grows over{" "} links {" "} and buttons.

); } ``` ### Globe Dotted canvas globe with markers, great-circle arcs, drag and keyboard rotation. (5.2 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/globe - Category: Data & Maps - Install: `npx shadcn@latest add https://velora.colorlib.com/r/globe.json` (creates `components/velora/globe.tsx`) **Accessibility** - Reduced motion: Auto-rotation, marker pulses and travelling arc highlights stop; one static frame is drawn with arcs shown in full. Dragging and arrow keys still rotate it, arrow keys in instant 15° steps. - Keyboard: The globe is a single Tab stop with a focus ring; Left/Right arrows turn it west/east and Up/Down tilt it north/south. Auto-rotation pauses while it has focus or is hovered. - Screen readers: Exposed as one image (role="img") named from the marker labels and arc count, or from the label prop; the canvas is aria-hidden. **Props** #### Globe - `markers?: GlobeMarker[]` (default `[]`) — Highlighted points, as { lat, lng, label? } - `arcs?: GlobeArc[]` (default `[]`) — Great-circle connections, as { from: [lat, lng], to: [lat, lng] } - `center?: [number, number]` (default `[20, 10]`) — [lat, lng] facing the viewer on first paint - `speed?: number` (default `6`) — Auto-rotation in degrees per second (negative spins west); 0 turns it off - `samples?: number` (default `12000`) — Points sampled over the sphere; roughly 3 in 10 land and become dots - `dotColor?: string` (default `"var(--muted-foreground)"`) — Land dot color: any CSS color, var() tokens included - `accentColor?: string` (default `"var(--brand)"`) — Marker and arc color: any CSS color, var() tokens included - `label?: string` — Accessible name; generated from marker labels when omitted - …and every `React.HTMLAttributes` prop **Example** ```tsx import { Globe, type GlobeArc } from "@/components/velora/globe"; const markers = [ { lat: 51.51, lng: -0.13, label: "London" }, { lat: 40.71, lng: -74.01, label: "New York" }, { lat: -23.55, lng: -46.63, label: "São Paulo" }, { lat: 25.2, lng: 55.27, label: "Dubai" }, { lat: 1.35, lng: 103.82, label: "Singapore" }, ]; const arcs: GlobeArc[] = [ { from: [51.51, -0.13], to: [40.71, -74.01] }, { from: [51.51, -0.13], to: [25.2, 55.27] }, { from: [40.71, -74.01], to: [-23.55, -46.63] }, ]; export default function GlobeDemo() { return ( ); } ``` ### World Map Dotted SVG world map with markers, pulsing hubs and animated connection arcs. (3.8 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/world-map - Category: Data & Maps - Install: `npx shadcn@latest add https://velora.colorlib.com/r/world-map.json` (creates `components/velora/world-map.tsx`) **Accessibility** - Reduced motion: Arcs are drawn in full with no travelling highlight and markers do not pulse. The server render is this static state too; animation is added after hydration. - Keyboard: Decorative; nothing to operate. - Screen readers: Exposed as one image (role="img") whose name lists each connection by marker label (or coordinates), or uses the label prop; the SVG and label pills are aria-hidden. **Props** #### WorldMap - `markers?: WorldMapMarker[]` (default `[]`) — Highlighted points, as { lat, lng, label?, pulse? } - `arcs?: WorldMapArc[]` (default `[]`) — Curved connections, as { from: [lat, lng], to: [lat, lng] } - `duration?: number` (default `4`) — Seconds for one highlight to travel along an arc (including a short rest) - `label?: string` — Accessible name; generated from the arcs and marker labels when omitted - …and every `React.HTMLAttributes` prop **Example** ```tsx import { WorldMap, type WorldMapArc } from "@/components/velora/world-map"; const markers = [ { lat: 37.77, lng: -122.42, label: "San Francisco", pulse: true }, { lat: 40.71, lng: -74.01 }, { lat: 51.51, lng: -0.13 }, { lat: -23.55, lng: -46.63 }, { lat: 1.35, lng: 103.82 }, { lat: 35.68, lng: 139.69 }, ]; const arcs: WorldMapArc[] = [ { from: [37.77, -122.42], to: [40.71, -74.01] }, { from: [37.77, -122.42], to: [-23.55, -46.63] }, { from: [40.71, -74.01], to: [51.51, -0.13] }, { from: [51.51, -0.13], to: [1.35, 103.82] }, { from: [1.35, 103.82], to: [35.68, 139.69] }, ]; export default function WorldMapDemo() { return ; } ``` ### Browser Mockup Browser window frame for product screenshots. (0.5 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/browser-mockup - Category: Mockups - Install: `npx shadcn@latest add https://velora.colorlib.com/r/browser-mockup.json` (creates `components/velora/browser-mockup.tsx`) **Accessibility** - Reduced motion: Static; no animation. - Keyboard: Decorative; nothing to operate. - Screen readers: The URL text is read as plain text, then the children; the window dots are empty. **Props** #### BrowserMockup - `url?: string` (default `"velora.dev"`) - `children: React.ReactNode` - …and every `React.HTMLAttributes` prop **Example** ```tsx import { BrowserMockup } from "@/components/velora/browser-mockup"; export default function BrowserMockupDemo() { return (

Your product here

); } ``` ### Code Block Code panel with tabs, line numbers, highlighted lines and a copy button. (2.9 KB gzipped, deps: lucide-react) - Docs: https://velora.colorlib.com/components/code-block - Category: Mockups - Install: `npx shadcn@latest add https://velora.colorlib.com/r/code-block.json` (creates `components/velora/code-block.tsx`) **Accessibility** - Reduced motion: Nothing animates, so there is no reduced-motion difference; the copy icon swaps to a check mark instantly. - Keyboard: The code area is focusable and scrolls with the arrow keys. With tabs, the tab list is one Tab stop: Left/Right arrows, Home and End switch files. The copy button is a native button. - Screen readers: The code region is labelled with the file name, line numbers are aria-hidden, tabs use tablist/tab/tabpanel roles, and a status region announces "Copied to clipboard". **Props** #### CodeBlock - `code?: string` (default `""`) — Source to show (ignored when `tabs` is set) - `language?: string` (default `"tsx"`) — Language for highlighting: tsx, ts, jsx, js, css, bash, json - `filename?: string` — File name shown in the header and used as the code region's label - `tabs?: CodeFile[]` — Several files, shown as tabs - `highlightLines?: number[]` (default `[]`) — 1-based line numbers to highlight - `lineNumbers?: boolean` (default `true`) — Show the line-number gutter - …and every `React.HTMLAttributes` prop **Example** ```tsx import { CodeBlock } from "@/components/velora/code-block"; const code = `import { useState } from "react"; // A counter that remembers its last value export function Counter({ start = 0 }: { start?: number }) { const [count, setCount] = useState(start); const label = \`Clicked \${count} times\`; return ( ); }`; export default function CodeBlockDemo() { return ( ); } ``` ### iPhone Mockup iPhone frame with dynamic island — pure CSS. (0.6 KB gzipped, zero deps) - Docs: https://velora.colorlib.com/components/iphone-mockup - Category: Mockups - Install: `npx shadcn@latest add https://velora.colorlib.com/r/iphone-mockup.json` (creates `components/velora/iphone-mockup.tsx`) **Accessibility** - Reduced motion: Static; no animation. - Keyboard: Decorative; nothing to operate. - Screen readers: The frame parts are empty elements; only the children are read. **Props** #### IphoneMockup - `children: React.ReactNode` - …and every `React.HTMLAttributes` prop **Example** ```tsx import { IphoneMockup } from "@/components/velora/iphone-mockup"; export default function IphoneMockupDemo() { return (

Your app here

); } ``` ### Terminal A terminal window that types its lines in view. (1.4 KB gzipped, deps: motion/react) - Docs: https://velora.colorlib.com/components/terminal - Category: Mockups - Install: `npx shadcn@latest add https://velora.colorlib.com/r/terminal.json` (creates `components/velora/terminal.tsx`) **Accessibility** - Reduced motion: All lines render in full immediately with no typing effect and no blinking cursor. - Keyboard: Decorative; nothing to operate. - Screen readers: The full lines are always available as visually hidden text; the typed visual layer is aria-hidden. **Props** #### Terminal - `lines: string[]` — Lines to type. Prefix with "$ " to render a prompt-colored command. - `title?: string` (default `"bash"`) - `speed?: number` (default `18`) — ms per character - `className?: string` **Example** ```tsx import { Terminal } from "@/components/velora/terminal"; export default function TerminalDemo() { return ( ); } ``` ## Blocks ### Aurora hero Centered hero with a drifting aurora, dotted backdrop, announcement pill and staggered copy. - Preview: https://velora.colorlib.com/blocks/hero-sections#hero-aurora - Install: `npx shadcn@latest add https://velora.colorlib.com/r/hero-aurora.json` (creates `components/blocks/hero-aurora.tsx` and installs animated-gradient-text, aurora-background, blur-fade, grid-pattern, shimmer-button) ### Globe split hero Split hero with copy, CTAs and live stats beside an interactive dotted globe with arcs. - Preview: https://velora.colorlib.com/blocks/hero-sections#hero-globe - Install: `npx shadcn@latest add https://velora.colorlib.com/r/hero-globe.json` (creates `components/blocks/hero-globe.tsx` and installs blur-fade, globe, number-ticker) ### Product screenshot hero Centered headline above a dashboard in a browser frame with a border beam and a logo row. - Preview: https://velora.colorlib.com/blocks/hero-sections#hero-screenshot - Install: `npx shadcn@latest add https://velora.colorlib.com/r/hero-screenshot.json` (creates `components/blocks/hero-screenshot.tsx` and installs blur-fade, border-beam, browser-mockup, logo-cloud) ### Phone split hero App launch hero with an email capture on the left and an app screen in an iPhone frame. - Preview: https://velora.colorlib.com/blocks/hero-sections#hero-split-phone - Install: `npx shadcn@latest add https://velora.colorlib.com/r/hero-split-phone.json` (creates `components/blocks/hero-split-phone.tsx` and installs blur-fade, iphone-mockup, ripple) ### Wavy hero Bold centered hero over flowing waves, with a rotating headline word and avatar social proof. - Preview: https://velora.colorlib.com/blocks/hero-sections#hero-waves - Install: `npx shadcn@latest add https://velora.colorlib.com/r/hero-waves.json` (creates `components/blocks/hero-waves.tsx` and installs avatar-circles, blur-fade, flip-words, shimmer-button, wavy-background) ### Developer tool hero Minimal hero on a retro grid with a typed headline accent, an install terminal and two CTAs. - Preview: https://velora.colorlib.com/blocks/hero-sections#hero-grid-minimal - Install: `npx shadcn@latest add https://velora.colorlib.com/r/hero-grid-minimal.json` (creates `components/blocks/hero-grid-minimal.tsx` and installs blur-fade, retro-grid, terminal, typewriter) ### Bento feature grid Five-card bento grid with live visuals: integration beams, orbiting icons, a chart, a tag marquee and a globe. - Preview: https://velora.colorlib.com/blocks/feature-sections#features-bento - Install: `npx shadcn@latest add https://velora.colorlib.com/r/features-bento.json` (creates `components/blocks/features-bento.tsx` and installs animated-beam, bento-grid, blur-fade, globe, marquee, number-ticker, orbiting-circles) ### Icon feature grid Heading and six icon feature cards in a three-column grid, each border lit by a cursor-following glow. - Preview: https://velora.colorlib.com/blocks/feature-sections#features-icon-grid - Install: `npx shadcn@latest add https://velora.colorlib.com/r/features-icon-grid.json` (creates `components/blocks/features-icon-grid.tsx` and installs blur-fade, glowing-effect) ### Tabbed product tour Product tour with animated tabs; each tab pairs short copy and a checklist with a Tailwind-built app mock. - Preview: https://velora.colorlib.com/blocks/feature-sections#features-tabs - Install: `npx shadcn@latest add https://velora.colorlib.com/r/features-tabs.json` (creates `components/blocks/features-tabs.tsx` and installs animated-tabs, blur-fade) ### Alternating screenshot rows Two alternating rows of copy with a checklist beside a browser-framed dashboard mock, sides swapped. - Preview: https://velora.colorlib.com/blocks/feature-sections#features-split-screenshot - Install: `npx shadcn@latest add https://velora.colorlib.com/r/features-split-screenshot.json` (creates `components/blocks/features-split-screenshot.tsx` and installs blur-fade, border-beam, browser-mockup) ### Numbered steps How-it-works section with four numbered steps on a gradient connector line, each with a small UI visual. - Preview: https://velora.colorlib.com/blocks/feature-sections#features-steps - Install: `npx shadcn@latest add https://velora.colorlib.com/r/features-steps.json` (creates `components/blocks/features-steps.tsx` and installs avatar-circles, blur-fade, border-beam, number-ticker) ### Three-tier pricing Three plan cards with a monthly/yearly switch, a savings badge and a highlighted middle plan. - Preview: https://velora.colorlib.com/blocks/pricing-sections#pricing-three-tiers - Install: `npx shadcn@latest add https://velora.colorlib.com/r/pricing-three-tiers.json` (creates `components/blocks/pricing-three-tiers.tsx` and installs blur-fade, border-beam, grid-pattern, number-ticker) ### Single plan pricing One all-inclusive plan card beside a benefit list and short reassurance answers. - Preview: https://velora.colorlib.com/blocks/pricing-sections#pricing-single-plan - Install: `npx shadcn@latest add https://velora.colorlib.com/r/pricing-single-plan.json` (creates `components/blocks/pricing-single-plan.tsx` and installs avatar-circles, blur-fade, glowing-effect, grid-pattern, spotlight-card) ### Pricing comparison table Grouped feature comparison table with a sticky plan header, and per-plan tabs on mobile. - Preview: https://velora.colorlib.com/blocks/pricing-sections#pricing-comparison - Install: `npx shadcn@latest add https://velora.colorlib.com/r/pricing-comparison.json` (creates `components/blocks/pricing-comparison.tsx` and installs blur-fade) ### Testimonial marquee Two rows of review cards scrolling in opposite directions, with faded edges and pause on hover or focus. - Preview: https://velora.colorlib.com/blocks/testimonial-sections#testimonials-marquee - Install: `npx shadcn@latest add https://velora.colorlib.com/r/testimonials-marquee.json` (creates `components/blocks/testimonials-marquee.tsx` and installs blur-fade, marquee) ### Featured testimonial One rotating quote with crossfading portraits, framed by a beam card over a row of counting stats. - Preview: https://velora.colorlib.com/blocks/testimonial-sections#testimonials-featured - Install: `npx shadcn@latest add https://velora.colorlib.com/r/testimonials-featured.json` (creates `components/blocks/testimonials-featured.tsx` and installs animated-testimonials, blur-fade, border-beam, grid-pattern, number-ticker) ### Testimonial grid Masonry wall of social posts and quote cards, led by a wide case-study quote with a headline metric. - Preview: https://velora.colorlib.com/blocks/testimonial-sections#testimonials-grid - Install: `npx shadcn@latest add https://velora.colorlib.com/r/testimonials-grid.json` (creates `components/blocks/testimonials-grid.tsx` and installs blur-fade, text-highlighter, tweet-card) ### Vortex CTA band Dark rounded call-to-action band over a brand-tinted particle vortex, with two actions and fine print. - Preview: https://velora.colorlib.com/blocks/cta-sections#cta-vortex - Install: `npx shadcn@latest add https://velora.colorlib.com/r/cta-vortex.json` (creates `components/blocks/cta-vortex.tsx` and installs vortex) ### Split CTA with product visual Two-column CTA card with a benefit list and a dashboard mock-up, traced by an animated border beam. - Preview: https://velora.colorlib.com/blocks/cta-sections#cta-split-image - Install: `npx shadcn@latest add https://velora.colorlib.com/r/cta-split-image.json` (creates `components/blocks/cta-split-image.tsx` and installs border-beam, grid-pattern, meteors) ### Newsletter sign-up Newsletter card over a glowing dot grid with a labelled email field, subscriber avatars and a privacy note. - Preview: https://velora.colorlib.com/blocks/cta-sections#cta-newsletter - Install: `npx shadcn@latest add https://velora.colorlib.com/r/cta-newsletter.json` (creates `components/blocks/cta-newsletter.tsx` and installs avatar-circles, dotted-glow-background) ### Logo marquee A “Trusted by” line over a scrolling strip of grayscale logos that take their colour on hover. - Preview: https://velora.colorlib.com/blocks/logo-clouds#logos-marquee - Install: `npx shadcn@latest add https://velora.colorlib.com/r/logos-marquee.json` (creates `components/blocks/logos-marquee.tsx` and installs marquee) ### Logo grid Bordered grid of customer logos with a cursor spotlight per cell, beside a heading and stories link. - Preview: https://velora.colorlib.com/blocks/logo-clouds#logos-grid - Install: `npx shadcn@latest add https://velora.colorlib.com/r/logos-grid.json` (creates `components/blocks/logos-grid.tsx` and installs blur-fade, spotlight-card) ### Centered FAQ accordion Centered heading over an accordion of eight questions, closed by a contact row. - Preview: https://velora.colorlib.com/blocks/faq-sections#faq-accordion - Install: `npx shadcn@latest add https://velora.colorlib.com/r/faq-accordion.json` (creates `components/blocks/faq-accordion.tsx` and installs avatar-circles, blur-fade, grid-pattern) ### Two-column FAQ Sticky intro and contact card on the left, an accordion of questions on the right. - Preview: https://velora.colorlib.com/blocks/faq-sections#faq-two-column - Install: `npx shadcn@latest add https://velora.colorlib.com/r/faq-two-column.json` (creates `components/blocks/faq-two-column.tsx` and installs blur-fade, spotlight-card) ### Floating pill navbar Full-width navbar that shrinks into a blurred floating pill on scroll, with a CTA and mobile menu. - Preview: https://velora.colorlib.com/blocks/navbars#navbar-floating - Install: `npx shadcn@latest add https://velora.colorlib.com/r/navbar-floating.json` (creates `components/blocks/navbar-floating.tsx` and installs resizable-navbar) ### Mega menu navbar Top bar with a keyboard-accessible Product mega menu, search, sign-in and a slide-over mobile menu. - Preview: https://velora.colorlib.com/blocks/navbars#navbar-mega - Install: `npx shadcn@latest add https://velora.colorlib.com/r/navbar-mega.json` (creates `components/blocks/navbar-mega.tsx` and installs no Velora components) ### Link columns footer Footer with logo, tagline and social links, four link columns and a copyright bar with legal links. - Preview: https://velora.colorlib.com/blocks/footers#footer-columns - Install: `npx shadcn@latest add https://velora.colorlib.com/r/footer-columns.json` (creates `components/blocks/footer-columns.tsx` and installs no Velora components) ### Giant wordmark footer Minimal footer that ends in an oversized outlined wordmark lighting up in brand colours under the pointer. - Preview: https://velora.colorlib.com/blocks/footers#footer-wordmark - Install: `npx shadcn@latest add https://velora.colorlib.com/r/footer-wordmark.json` (creates `components/blocks/footer-wordmark.tsx` and installs text-hover-effect) ### Newsletter footer Footer with a newsletter sign-up row, link columns and a live “All systems normal” status badge. - Preview: https://velora.colorlib.com/blocks/footers#footer-newsletter - Install: `npx shadcn@latest add https://velora.colorlib.com/r/footer-newsletter.json` (creates `components/blocks/footer-newsletter.tsx` and installs stateful-button) ### Split login page Login form with password reveal, remember-me and social sign-in beside an aurora testimonial panel. - Preview: https://velora.colorlib.com/blocks/auth-sections#auth-login-split - Install: `npx shadcn@latest add https://velora.colorlib.com/r/auth-login-split.json` (creates `components/blocks/auth-login-split.tsx` and installs aurora-background, grid-pattern) ### Sign-up card Centered sign-up card over a grid and light beams, with live password rules, terms and social sign-up. - Preview: https://velora.colorlib.com/blocks/auth-sections#auth-signup-card - Install: `npx shadcn@latest add https://velora.colorlib.com/r/auth-signup-card.json` (creates `components/blocks/auth-signup-card.tsx` and installs background-beams, grid-pattern)