Meteor Shower
Falling diagonal streaks with staggered delays for hero backgrounds.
pnpm dlx @glinui/cli@latest add meteor-showerEverything we shipped this quarter
Forty two improvements across builds, caching and observability, with migration notes where behavior changed.
Works with
- Vercel
- GitHub
- Cloudflare
- Astro
Installation$
pnpm dlx @glinui/cli@latest add meteor-showerPrefer the package?
Usage$
Place inside a relative container. Meteors fall diagonally with staggered delays and randomized positions.
Examples$
Variants$
import { MeteorShower } from "@glinui/ui"
export function Variants() { return ( <div data-glin-theme="dark" className="grid w-full gap-3 sm:grid-cols-3"> <div className="relative isolate flex h-44 items-end overflow-hidden rounded-xl bg-[var(--surface-0)] p-3"> <MeteorShower count={10} /> <span className="relative z-10 rounded-full bg-black/70 px-2.5 py-1 text-xs font-medium text-white">Default</span> </div> <div className="relative isolate flex h-44 items-end overflow-hidden rounded-xl bg-[var(--surface-0)] p-3"> <MeteorShower count={10} angle={235} /> <span className="relative z-10 rounded-full bg-black/70 px-2.5 py-1 text-xs font-medium text-white">Steep</span> </div> <div className="relative isolate flex h-44 items-end overflow-hidden rounded-xl bg-[var(--surface-0)] p-3"> <MeteorShower count={24} minDuration={2} maxDuration={5} /> <span className="relative z-10 rounded-full bg-black/70 px-2.5 py-1 text-xs font-medium text-white">Heavy</span> </div> </div> )}Behind a sign in card$
import { MeteorShower, Button, Heading, Input, Label, Text } from "@glinui/ui"
export function SignIn() { return ( <section data-glin-theme="dark" className="relative isolate flex min-h-[26rem] w-full items-center justify-center overflow-hidden rounded-xl bg-[var(--surface-0)] px-4 py-10"> <MeteorShower count={14} /> <form className="relative z-10 flex w-full max-w-sm flex-col gap-4 rounded-2xl border border-[var(--line-soft)] bg-[var(--surface-1)] p-6 text-left [box-shadow:var(--shadow-lg)]"> <div className="flex flex-col gap-1"> <Heading level={2} size="sm">Sign in to Northwind</Heading> <Text size="sm" variant="muted">Use your work email to continue.</Text> </div> <div className="flex flex-col gap-1.5"> <Label htmlFor="email">Work email</Label> <Input id="email" type="email" autoComplete="email" placeholder="you@company.com" /> </div> <div className="flex flex-col gap-1.5"> <Label htmlFor="password">Password</Label> <Input id="password" type="password" autoComplete="current-password" placeholder="At least 12 characters" /> </div> <Button type="submit" className="w-full">Continue</Button> </form> </section> )}Engines$
The engine prop is not applicable. Many independent css keyframe loops; an engine swap adds no value. It stays css only and still honors motion level none and reduced motion.
Accessibility$
- Decorative (
aria-hidden), invisible to screen readers. - No interactive elements.
Reduced Motion$
Component returns null when prefers-reduced-motion is active.
API Reference$
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
angle | number | No | 215 | Auto-generated from TypeScript source. |
count | number | No | 12 | Auto-generated from TypeScript source. |
maxDelay | number | No | 4 | Auto-generated from TypeScript source. |
maxDuration | number | No | 5 | Auto-generated from TypeScript source. |
minDelay | number | No | 0 | Auto-generated from TypeScript source. |
minDuration | number | No | 2 | Auto-generated from TypeScript source. |
Source$
import { MeteorShower } from "@glinui/ui"Generated API Snapshot
Beta
Generated API Snapshot
BetaAuto-extracted from TypeScript source in packages/ui/src/components/meteor-shower.tsx. This section is in beta and may lag behind hand-curated docs. Regenerate with pnpm --filter @glinui/docs api:generate.
Generated: 2026-10-08T01:41:21.546Z · Full index: /docs/api-metadata
Primary Props Type
MeteorShowerProps
MeteorShowerProps
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
angle | number | No | 215 | - |
count | number | No | 12 | - |
maxDelay | number | No | 4 | - |
maxDuration | number | No | 5 | - |
minDelay | number | No | 0 | - |
minDuration | number | No | 2 | - |