{"version":3,"sources":["../src/core/types.ts","../src/core/createStarfield.ts","../src/react/Starfield.tsx"],"names":["useRef","useState","useEffect","jsxs","jsx"],"mappings":"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","file":"index.cjs","sourcesContent":["export type StarfieldOptions = {\n  /** Number of stars. Default `263`. */\n  particleCount?: number\n  /** Palette slot 1. Default `#ffffff`. */\n  color1?: string\n  /** Palette slot 2. Default `#ffffff`. */\n  color2?: string\n  /** Palette slot 3. Default `#ffffff`. */\n  color3?: string\n  /** Fly-toward speed multiplier. Default `1`. */\n  speed?: number\n  /** Radial spread (higher = wider field). Default `48`. */\n  density?: number\n  /** Base star size. Default `8`. */\n  starSize?: number\n  /** Perspective near clip (0–100 scale). Default `13`. */\n  focalDepth?: number\n  /** Lateral wobble. Default `0`. */\n  turbulence?: number\n  /** Overall brightness (0–100). Default `73`. */\n  brightness?: number\n  /** Twinkle intensity (0–10). Default `4`. */\n  glitterIntensity?: number\n  /** Trail persistence (0–100). Default `26`. */\n  trailAmount?: number\n  /** Fly away from camera instead of toward. Default `false`. */\n  reverse?: boolean\n}\n\nexport type StarfieldInstance = {\n  setOptions(partial: StarfieldOptions): void\n  resize(): void\n  destroy(): void\n}\n\nexport const DEFAULTS = {\n  particleCount: 263,\n  color1: '#ffffff',\n  color2: '#ffffff',\n  color3: '#ffffff',\n  speed: 1,\n  density: 48,\n  starSize: 8,\n  focalDepth: 13,\n  turbulence: 0,\n  brightness: 73,\n  glitterIntensity: 4,\n  trailAmount: 26,\n  reverse: false,\n} as const satisfies Required<StarfieldOptions>\n","import { DEFAULTS, type StarfieldInstance, type StarfieldOptions } from './types'\n\ntype Star = {\n  x: number\n  y: number\n  z: number\n  px: number\n  py: number\n  seed: number\n  vmul: number\n  colorIdx: number\n  flashUntil: number\n  nextFlash: number\n}\n\ntype ParsedColor = [number, number, number, number]\n\nfunction parseColor(input: string | null | undefined): ParsedColor {\n  if (!input) return [255, 255, 255, 1]\n  const s = input.trim()\n  if (s.charAt(0) === '#') {\n    let hex = s.slice(1)\n    if (hex.length === 3) {\n      hex = hex\n        .split('')\n        .map((c) => c + c)\n        .join('')\n    }\n    const num = parseInt(hex, 16)\n    return [(num >> 16) & 255, (num >> 8) & 255, num & 255, 1]\n  }\n  const m = s.match(/rgba?\\(([^)]+)\\)/i)\n  if (m?.[1]) {\n    const parts = m[1].split(',').map((p) => parseFloat(p.trim()))\n    return [parts[0] || 0, parts[1] || 0, parts[2] || 0, parts[3] == null ? 1 : parts[3]]\n  }\n  return [255, 255, 255, 1]\n}\n\ntype RuntimeConfig = {\n  reverse: boolean\n  density: number\n  stepZ: number\n  focalDepth: number\n  starScale: number\n  turbulence: number\n  glitter: number\n  brightness: number\n  trail: number\n}\n\nfunction toRuntime(options: Required<StarfieldOptions>): RuntimeConfig {\n  return {\n    reverse: options.reverse,\n    density: options.density,\n    stepZ: options.speed * 0.0008,\n    focalDepth: options.focalDepth / 100,\n    starScale: options.starSize * 0.15,\n    turbulence: options.turbulence * 0.2,\n    glitter: options.glitterIntensity * 0.1,\n    brightness: Math.min(1, options.brightness / 100),\n    trail: options.trailAmount / 100,\n  }\n}\n\n/**\n * Canvas 2D starfield tunnel: stars fly toward (or away from) the camera\n * with perspective projection, optional glitter flashes, and additive trails.\n */\nexport function createStarfield(\n  canvas: HTMLCanvasElement,\n  options: StarfieldOptions = {},\n): StarfieldInstance {\n  let config: Required<StarfieldOptions> = { ...DEFAULTS, ...options }\n  const maybeCtx = canvas.getContext('2d')\n  if (!maybeCtx) {\n    return {\n      setOptions() {},\n      resize() {},\n      destroy() {},\n    }\n  }\n  const ctx = maybeCtx\n\n  const container = canvas.parentElement\n  let w = 0\n  let h = 0\n  let dpr = 1\n  let stars: Star[] = []\n  let elapsed = 0\n  let lastT = performance.now()\n  let raf: number | null = null\n  let destroyed = false\n\n  const colorCache = {\n    color1: '',\n    color2: '',\n    color3: '',\n    parsed1: [255, 255, 255, 1] as ParsedColor,\n    parsed2: [255, 255, 255, 1] as ParsedColor,\n    parsed3: [255, 255, 255, 1] as ParsedColor,\n  }\n\n  function getCachedColors() {\n    if (config.color1 !== colorCache.color1) {\n      colorCache.color1 = config.color1\n      colorCache.parsed1 = parseColor(config.color1)\n    }\n    if (config.color2 !== colorCache.color2) {\n      colorCache.color2 = config.color2\n      colorCache.parsed2 = parseColor(config.color2)\n    }\n    if (config.color3 !== colorCache.color3) {\n      colorCache.color3 = config.color3\n      colorCache.parsed3 = parseColor(config.color3)\n    }\n    return colorCache\n  }\n\n  function makeStar(): Star {\n    return {\n      x: 0,\n      y: 0,\n      z: 0,\n      px: NaN,\n      py: NaN,\n      seed: 0,\n      vmul: 1,\n      colorIdx: 0,\n      flashUntil: 0,\n      nextFlash: 0,\n    }\n  }\n\n  function resetStar(s: Star, initial = false) {\n    const c = toRuntime(config)\n    const angle = Math.random() * Math.PI * 2\n    const radius = (0.2 + Math.random() * 0.8) * (c.density / 15)\n    s.x = Math.cos(angle) * radius\n    s.y = Math.sin(angle) * radius\n    if (c.reverse) {\n      s.z = initial ? c.focalDepth + Math.random() * (1 - c.focalDepth) : c.focalDepth\n    } else {\n      s.z = initial ? Math.random() : 1.0\n    }\n    s.px = NaN\n    s.py = NaN\n    s.seed = Math.random() * 1000\n    s.vmul = 0.6 + Math.random() * 0.8\n    s.colorIdx = Math.floor(Math.random() * 3)\n    s.flashUntil = 0\n    s.nextFlash = elapsed + 1 + Math.random() * 4 * (1 / Math.max(0.0001, c.glitter))\n  }\n\n  function syncCount() {\n    const count = Math.max(1, Math.floor(config.particleCount))\n    if (stars.length === count) return\n    if (stars.length > count) {\n      stars.length = count\n      return\n    }\n    while (stars.length < count) {\n      const s = makeStar()\n      resetStar(s, true)\n      stars.push(s)\n    }\n  }\n\n  function resize() {\n    if (destroyed) return\n    const nextDpr = Math.min(window.devicePixelRatio || 1, 2)\n    const rectW =\n      container?.clientWidth || container?.getBoundingClientRect().width || canvas.clientWidth\n    const rectH =\n      container?.clientHeight || container?.getBoundingClientRect().height || canvas.clientHeight\n    const nextW = Math.max(1, Math.floor(rectW) || 600)\n    const nextH = Math.max(1, Math.floor(rectH) || 400)\n    if (w === nextW && h === nextH && dpr === nextDpr) return\n    w = nextW\n    h = nextH\n    dpr = nextDpr\n    canvas.width = Math.floor(w * dpr)\n    canvas.height = Math.floor(h * dpr)\n    canvas.style.width = w + 'px'\n    canvas.style.height = h + 'px'\n    ctx.setTransform(dpr, 0, 0, dpr, 0, 0)\n    ctx.clearRect(0, 0, w, h)\n  }\n\n  function drawFrame(deltaSec: number) {\n    const c = toRuntime(config)\n    syncCount()\n    const colors = getCachedColors()\n    const palette = [colors.parsed1, colors.parsed2, colors.parsed3]\n    const rgbStrs = [\n      'rgb(' + palette[0]![0] + ', ' + palette[0]![1] + ', ' + palette[0]![2] + ')',\n      'rgb(' + palette[1]![0] + ', ' + palette[1]![1] + ', ' + palette[1]![2] + ')',\n      'rgb(' + palette[2]![0] + ', ' + palette[2]![1] + ', ' + palette[2]![2] + ')',\n    ]\n    const cx = w / 2\n    const cy = h / 2\n    const projScale = Math.min(w, h) * 0.9\n    const dt = Math.max(0.001, Math.min(0.1, deltaSec)) * 60\n    const keep = Math.pow(Math.min(0.98, Math.max(0, c.trail)), dt)\n    const trailAlpha = Math.max(0.02, 1 - keep)\n    ctx.globalAlpha = 1\n    ctx.globalCompositeOperation = 'destination-out'\n    ctx.fillStyle = 'rgba(0, 0, 0, ' + trailAlpha + ')'\n    ctx.fillRect(0, 0, w, h)\n    ctx.globalCompositeOperation = 'lighter'\n\n    for (let i = 0; i < stars.length; i++) {\n      const s = stars[i]!\n      const vz = c.stepZ * s.vmul * dt\n      if (c.reverse) {\n        s.z += vz\n        if (s.z >= 1.0) {\n          resetStar(s)\n          continue\n        }\n      } else {\n        s.z -= vz\n        if (s.z <= c.focalDepth) {\n          resetStar(s)\n          continue\n        }\n      }\n      let tx = s.x\n      let ty = s.y\n      if (c.turbulence > 0) {\n        const tVal = elapsed * 1.2 + s.seed\n        const amp = c.turbulence * (1 - s.z) * 0.25\n        tx += Math.sin(tVal + s.seed) * amp\n        ty += Math.cos(tVal * 1.13 + s.seed * 0.7) * amp\n      }\n      const persp = c.focalDepth / Math.max(s.z, 0.0001)\n      const sx = cx + tx * persp * projScale\n      const sy = cy + ty * persp * projScale\n      if (!c.reverse && (sx < -20 || sx > w + 20 || sy < -20 || sy > h + 20)) {\n        resetStar(s)\n        continue\n      }\n      let flashMult = 1\n      if (c.glitter > 0) {\n        if (elapsed >= s.nextFlash && s.flashUntil < elapsed) {\n          s.flashUntil = elapsed + 0.04 + Math.random() * 0.07\n          s.nextFlash = elapsed + 1 + Math.random() * 4 * (1 / Math.max(0.0001, c.glitter))\n        }\n        if (elapsed <= s.flashUntil) {\n          flashMult = 1 + 2.5 * c.glitter\n        }\n      }\n      const sizePersp = Math.min(2.5, (c.focalDepth / Math.max(s.z, 0.0001)) * 0.6)\n      const baseR = Math.max(0.25, c.starScale * (0.4 + sizePersp))\n      const maxR = 1 + c.starScale * 2.5\n      const r = Math.min(baseR * flashMult, maxR)\n      const lifeT = c.reverse ? s.z : 1 - s.z\n      const fadeIn = c.reverse\n        ? Math.min(1, (s.z - c.focalDepth) / (1 - c.focalDepth) / 0.12)\n        : 1\n      const a =\n        Math.min(1, c.reverse ? 0.85 - lifeT * 0.6 : lifeT * 0.9 + 0.05) *\n        fadeIn *\n        c.brightness *\n        (flashMult > 1 ? 1 : 0.85)\n      const colStr = rgbStrs[s.colorIdx]!\n      if (!Number.isNaN(s.px) && !Number.isNaN(s.py)) {\n        ctx.globalAlpha = a * 0.5\n        ctx.strokeStyle = colStr\n        ctx.lineWidth = Math.max(0.4, r * 0.4)\n        ctx.beginPath()\n        ctx.moveTo(s.px, s.py)\n        ctx.lineTo(sx, sy)\n        ctx.stroke()\n      }\n      ctx.globalAlpha = a\n      ctx.fillStyle = colStr\n      ctx.fillRect(sx - r, sy - r, r * 2, r * 2)\n      if (flashMult > 1) {\n        const rf = Math.min(r * 1.4, maxR * 1.4)\n        ctx.globalAlpha = a * 0.5\n        ctx.fillRect(sx - rf, sy - rf, rf * 2, rf * 2)\n      }\n      s.px = sx\n      s.py = sy\n    }\n    ctx.globalAlpha = 1\n    ctx.globalCompositeOperation = 'source-over'\n    elapsed += Math.min(0.1, Math.max(0, deltaSec))\n  }\n\n  function loop(t: number) {\n    if (destroyed) return\n    const deltaSec = (t - lastT) / 1000\n    lastT = t\n    drawFrame(deltaSec)\n    raf = requestAnimationFrame(loop)\n  }\n\n  syncCount()\n  resize()\n  raf = requestAnimationFrame(loop)\n\n  let resizeObserver: ResizeObserver | null = null\n  if (container && typeof ResizeObserver !== 'undefined') {\n    resizeObserver = new ResizeObserver(() => resize())\n    resizeObserver.observe(container)\n  }\n\n  return {\n    setOptions(partial) {\n      config = { ...config, ...partial }\n      syncCount()\n    },\n    resize,\n    destroy() {\n      destroyed = true\n      if (raf != null) cancelAnimationFrame(raf)\n      raf = null\n      resizeObserver?.disconnect()\n      resizeObserver = null\n      stars = []\n    },\n  }\n}\n\nexport { DEFAULTS }\nexport type { StarfieldInstance, StarfieldOptions }\n","'use client'\n\nimport {\n  useEffect,\n  useRef,\n  useState,\n  type CSSProperties,\n  type ReactNode,\n} from 'react'\nimport {\n  createStarfield,\n  type StarfieldInstance,\n  type StarfieldOptions,\n} from '../core/createStarfield'\n\nexport type StarfieldProps = StarfieldOptions & {\n  children?: ReactNode\n  className?: string\n  style?: CSSProperties\n  /** Accessible label for the canvas. */\n  ariaLabel?: string\n}\n\nexport function Starfield({\n  children,\n  className,\n  style,\n  ariaLabel = 'Starfield background',\n  ...options\n}: StarfieldProps) {\n  const canvasRef = useRef<HTMLCanvasElement>(null)\n  const instanceRef = useRef<StarfieldInstance | null>(null)\n  const [initialOptions] = useState(options)\n\n  useEffect(() => {\n    const canvas = canvasRef.current\n    if (!canvas) return\n    instanceRef.current = createStarfield(canvas, initialOptions)\n    return () => {\n      instanceRef.current?.destroy()\n      instanceRef.current = null\n    }\n  }, [initialOptions])\n\n  useEffect(() => {\n    instanceRef.current?.setOptions(options)\n  })\n\n  return (\n    <div\n      className={className}\n      style={{ position: 'relative', overflow: 'hidden', ...style }}\n    >\n      <canvas\n        ref={canvasRef}\n        aria-label={ariaLabel}\n        style={{\n          position: 'absolute',\n          inset: 0,\n          width: '100%',\n          height: '100%',\n          display: 'block',\n          pointerEvents: 'none',\n        }}\n      />\n      {children != null ? (\n        <div style={{ position: 'relative', zIndex: 1, height: '100%' }}>\n          {children}\n        </div>\n      ) : null}\n    </div>\n  )\n}\n\nexport default Starfield"]}