import { Marquee3D, Marquee3DFloating, Marquee3DPreset } from '@hanzo/ui'
A row of items crawling left through a slight tilt, `gap` spacing them and `autoFill` laying them out until the frame is covered.
export function Default() {return (<Marquee3D autoFill rotateX={-6} gap={32}><span>🚀 Innovation</span><span>⚡ Speed</span><span>💎 Quality</span><span>🎯 Precision</span><span>🌟 Excellence</span></Marquee3D>)}
The five named looks, each with its own size, speed and tilt already set.
export function Presets() {return (<YStack gap="$3"><Marquee3DPreset.Hero autoFill gap={48}>HANZO</Marquee3DPreset.Hero><Marquee3DPreset.Neon autoFill gap={48}>NEON NIGHTS</Marquee3DPreset.Neon><Marquee3DPreset.Metallic autoFill gap={48}>BRUSHED STEEL</Marquee3DPreset.Metallic><Marquee3DPreset.Fire autoFill gap={48}>ON FIRE</Marquee3DPreset.Fire><Marquee3DPreset.Glass autoFill gap={48}>FROSTED</Marquee3DPreset.Glass></YStack>)}
`direction="up"` runs the track along the block axis, and `gradient` fades both ends by `gradientWidth`.
export function Vertical() {return (<Marquee3D direction="up" variant="glass" size="lg" gap={12} gradient gradientWidth={16}><span>Alpha</span><span>Beta</span><span>Gamma</span></Marquee3D>)}
`pauseOnHover` holds the track while the pointer is over the frame.
export function PauseOnHover() {return (<Marquee3D autoFill gap={24} pauseOnHover><span>Hover to pause</span></Marquee3D>)}
Each character of the string bobs on top of the scroll.
export function Floating() {return (<Marquee3DFloating autoFill variant="rainbow" size="2xl" gap={64} floatIntensity={8}>HANZO UI</Marquee3DFloating>)}
export type Marquee3DVariant = 'default' | 'neon' | 'rainbow' | 'metallic' | 'fire' | 'glass'
export type Marquee3DSize = 'sm' | 'default' | 'lg' | 'xl' | '2xl' | '3xl'
export type Marquee3DDirection = 'left' | 'right' | 'up' | 'down'
export type Marquee3DPerspective = 'none' | 'sm' | 'default' | 'lg' | 'xl'
export type Marquee3DProps = Omit<React.ComponentPropsWithoutRef<'div'>, 'children' | 'style'> & {children: React.ReactNodevariant?: Marquee3DVariantsize?: Marquee3DSizedirection?: Marquee3DDirectionperspective?: Marquee3DPerspective/** Track travel, px/s. */speed?: numberpauseOnHover?: boolean/** Run against `direction`. */reverse?: boolean/** How many times `children` is laid out per loop. */repeat?: number/** Lay `children` out as many times as it takes to cover the frame, whatever `repeat` says. */autoFill?: boolean/** Space between items, px — across the loop's seam too. */gap?: numberrotateX?: numberrotateY?: numberrotateZ?: number/** Fade both ends of the frame. */gradient?: booleangradientColor?: string/** Length of each fade, px. */gradientWidth?: numberstyle?: React.CSSProperties}
export type Marquee3DFloatingProps = Marquee3DProps & {/** Peak lift of each glyph, px. */floatIntensity?: number/** Seconds per bob. */floatSpeed?: number}