photon-beam
eldoraui/photon-beamFreeComponent
A photon beam background component with animated light trails.
Live preview
live · rendered by the registry
Rendered by eldoraui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://eldoraui.site/r/photon-beam.jsonSource
1"use client"23import { useEffect, useRef } from "react"4import * as THREE from "three"5import { EffectComposer } from "three/examples/jsm/postprocessing/EffectComposer.js"6import { RenderPass } from "three/examples/jsm/postprocessing/RenderPass.js"7import { UnrealBloomPass } from "three/examples/jsm/postprocessing/UnrealBloomPass.js"89interface Signal {10 mesh: THREE.Line11 laneIndex: number12 speed: number13 progress: number14 history: THREE.Vector3[]15 assignedColor: THREE.Color16}1718interface Params {19 colorBg: string20 colorLine: string21 colorSignal: string22 useColor2: boolean23 colorSignal2: string24 useColor3: boolean25 colorSignal3: string26 lineCount: number27 globalRotation: number28 positionX: number29 positionY: number30 spreadHeight: number31 spreadDepth: number32 curveLength: number33 straightLength: number34 curvePower: number35 waveSpeed: number36 waveHeight: number37 lineOpacity: number38 signalCount: number39 speedGlobal: number40 trailLength: number41 bloomStrength: number42 bloomRadius: number43}4445interface PhotonBeamProps {46 colorBg?: string47 colorLine?: string48 colorSignal?: string49 useColor2?: boolean50 colorSignal2?: string51 useColor3?: boolean52 colorSignal3?: string53 lineCount?: number54 spreadHeight?: number55 spreadDepth?: number56 curveLength?: number57 straightLength?: number58 curvePower?: number59 waveSpeed?: number60 waveHeight?: number61 lineOpacity?: number62 signalCount?: number63 speedGlobal?: number64 trailLength?: number65 bloomStrength?: number66 bloomRadius?: number67}6869const CONSTANTS = {70 segmentCount: 150,71}7273export default function PhotonBeam(props: PhotonBeamProps = {}) {74 const containerRef = useRef<HTMLDivElement>(null)7576 useEffect(() => {77 const container = containerRef.current78 if (!container) return7980 let frameId: number81 let cancelled = false82 let renderer: THREE.WebGLRenderer | null = null83 let composer: InstanceType<typeof EffectComposer> | null = null84 let handleResize: (() => void) | null = null85 let backgroundLines: THREE.Line[] = []86 let signals: Signal[] = []8788 const init = (): void => {89 if (cancelled) return9091 const width = container.clientWidth92 const height = container.clientHeight93 if (width === 0 || height === 0) {94 frameId = requestAnimationFrame(init)95 return96 }9798 // --- CONFIGURATION ---99 const params: Params = {100 colorBg: props.colorBg ?? "#080808",101// … truncated
What it pulls in
npm packages
Files it writes
More from eldoraui
All 115 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| animated-badgeanimated-badge | eldoraui | Components | Free | 2 deps | |
| animated-frameworksanimated-frameworks | eldoraui | Components | Free | 2 deps | |
| animated-grid-patternanimated-grid-pattern | eldoraui | Components | Free | 3 deps | |
| animated-listanimated-list | eldoraui | Components | Free | 1 dep | |
| animated-shiny-buttonanimated-shiny-button | eldoraui | Components | Free | 1 dep | |
| blur-in-textblur-in-text | eldoraui | Components | Free | 3 deps | |
| browserbrowser | eldoraui | Components | Free | 2 deps | |
| card-flip-hovercard-flip-hover | eldoraui | Components | Free | 1 dep |
