{"version":3,"file":"index.cjs","sources":["../src/components/svgs/GhostSVG.tsx","../src/components/utils.ts","../src/components/Haunted/GhostAnimator.tsx","../src/components/Haunted/Haunted.tsx","../src/components/Eyes/Eye.tsx","../src/components/Eyes/Eyes.tsx","../src/components/svgs/HeartSVG.tsx","../src/components/svgs/StarCrossSVG.tsx","../src/components/MagicalText/animators/MagicalTextScaleAnimator.tsx","../src/components/MagicalText/animators/MagicalTextSparkleAnimator.tsx","../src/components/MagicalText/MagicalText.tsx","../src/components/LightsOut/SpotLight.tsx","../node_modules/color-fader/dist/color-fader.js","../src/components/DoomFire/DoomFireTorch.tsx","../src/components/DoomFire/DoomFire.tsx","../src/components/svgs/GhostAltSVG.tsx","../src/components/LightsOut/LightsOut.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface GhostSVGProps {\n  width: number;\n  height: number;\n  style?: React.CSSProperties;\n  className?: string;\n  onClick?: () => void;\n  onMouseEnter?: () => void;\n  onMouseLeave?: () => void;\n  onFocus?: () => void;\n  onBlur?: () => void;\n  onKeyDown?: (event: React.KeyboardEvent<SVGSVGElement>) => void;\n  ref: React.RefObject<SVGSVGElement> | null;\n}\n\n/**\n * @component\n * A component that returns an SVG component that can be used with several of the components in this library.\n * Original SVG was CC0 (source: https://www.svgrepo.com/svg/400277/ghost)\n */\nconst GhostSVG = ({\n  width,\n  height,\n  style = {},\n  className = '',\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  onFocus,\n  onBlur,\n  onKeyDown,\n  ref = null,\n}: GhostSVGProps) => {\n  const ghostStyle = {\n    enableBackground: 'new 0 0 512 512',\n    ...style,\n  };\n\n  return (\n    <svg\n      ref={ref}\n      width={`${width}`}\n      height={`${height}`}\n      className={className}\n      version=\"1.1\"\n      id=\"Layer_1\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n      x=\"0px\"\n      y=\"0px\"\n      viewBox=\"0 0 512 512\"\n      style={ghostStyle}\n      xmlSpace=\"preserve\"\n      onClick={onClick}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      onFocus={onFocus}\n      onBlur={onBlur}\n      onKeyDown={onKeyDown}\n    >\n      <path\n        style={{ fill: '#E6E6E6' }}\n        d=\"M420.607,164.6v303.522c0,20.451-23.636,31.857-39.647,19.119v-0.013\nc-8.906-7.079-21.53-7.079-30.436,0l-24.435,19.449c-8.906,7.092-21.517,7.092-30.423,0l-24.435-19.449\nc-8.906-7.079-21.53-7.079-30.436,0l-24.435,19.462c-8.906,7.079-21.517,7.079-30.423,0l-24.448-19.462\nc-8.906-7.079-21.53-7.079-30.436,0l-0.013,0.013c-15.998,12.738-39.647,1.345-39.647-19.119V164.6\nC91.393,73.686,165.092,0,256.006,0c45.445,0,86.601,18.421,116.39,48.21C402.185,77.987,420.607,119.143,420.607,164.6z\"\n      />\n      <g>\n        <path\n          style={{ fill: '#666666' }}\n          d=\"M327.878,275.928H184.122c0-39.697,32.187-71.884,71.884-71.884S327.878,236.231,327.878,275.928z\"\n        />\n        <path\n          style={{ fill: '#666666' }}\n          d=\"M195.084,114.487c17.838,0,32.301,14.45,32.301,32.288s-14.463,32.301-32.301,32.301\ns-32.288-14.463-32.288-32.301S177.246,114.487,195.084,114.487z\"\n        />\n        <path\n          style={{ fill: '#666666' }}\n          d=\"M316.916,114.487c17.838,0,32.288,14.45,32.288,32.288s-14.45,32.301-32.288,32.301\nc-17.838,0-32.288-14.463-32.288-32.301S299.078,114.487,316.916,114.487z\"\n        />\n      </g>\n      <path\n        style={{ fill: '#CCCCCC' }}\n        d=\"M283.918,2.36C274.846,0.812,265.522,0,256.006,0C165.092,0,91.393,73.686,91.393,164.6v303.522\n  c0,20.464,23.648,31.857,39.647,19.119l0.013-0.013c6.014-4.783,13.727-6.331,20.845-4.656c-2.918-3.933-4.681-8.855-4.681-14.45\n  V164.6C147.216,83.201,206.299,15.605,283.918,2.36z\"\n      />\n    </svg>\n  );\n};\n\nexport { GhostSVG };\n","export function randomNumber(min: number, max: number): number {\n  return Math.random() * (max - min) + min;\n}\n\nexport function randomIntFromInterval(min: number, max: number): number {\n  // min and max included\n  return Math.floor(Math.random() * (max - min + 1) + min);\n}\n\nconst cssColorLookup: Record<string, string> = {\n  aliceblue: '#f0f8ff',\n  antiquewhite: '#faebd7',\n  aqua: '#00ffff',\n  aquamarine: '#7fffd4',\n  azure: '#f0ffff',\n  beige: '#f5f5dc',\n  bisque: '#ffe4c4',\n  black: '#000000',\n  blanchedalmond: '#ffebcd',\n  blue: '#0000ff',\n  blueviolet: '#8a2be2',\n  brown: '#a52a2a',\n  burlywood: '#deb887',\n  cadetblue: '#5f9ea0',\n  chartreuse: '#7fff00',\n  chocolate: '#d2691e',\n  coral: '#ff7f50',\n  cornflowerblue: '#6495ed',\n  cornsilk: '#fff8dc',\n  crimson: '#dc143c',\n  cyan: '#00ffff',\n  darkblue: '#00008b',\n  darkcyan: '#008b8b',\n  darkgoldenrod: '#b8860b',\n  darkgray: '#a9a9a9',\n  darkgreen: '#006400',\n  darkgrey: '#a9a9a9',\n  darkkhaki: '#bdb76b',\n  darkmagenta: '#8b008b',\n  darkolivegreen: '#556b2f',\n  darkorange: '#ff8c00',\n  darkorchid: '#9932cc',\n  darkred: '#8b0000',\n  darksalmon: '#e9967a',\n  darkseagreen: '#8fbc8f',\n  darkslateblue: '#483d8b',\n  darkslategray: '#2f4f4f',\n  darkslategrey: '#2f4f4f',\n  darkturquoise: '#00ced1',\n  darkviolet: '#9400d3',\n  deeppink: '#ff1493',\n  deepskyblue: '#00bfff',\n  dimgray: '#696969',\n  dimgrey: '#696969',\n  dodgerblue: '#1e90ff',\n  firebrick: '#b22222',\n  floralwhite: '#fffaf0',\n  forestgreen: '#228b22',\n  fuchsia: '#ff00ff',\n  gainsboro: '#dcdcdc',\n  ghostwhite: '#f8f8ff',\n  goldenrod: '#daa520',\n  gold: '#ffd700',\n  gray: '#808080',\n  green: '#008000',\n  greenyellow: '#adff2f',\n  grey: '#808080',\n  honeydew: '#f0fff0',\n  hotpink: '#ff69b4',\n  indianred: '#cd5c5c',\n  indigo: '#4b0082',\n  ivory: '#fffff0',\n  khaki: '#f0e68c',\n  lavenderblush: '#fff0f5',\n  lavender: '#e6e6fa',\n  lawngreen: '#7cfc00',\n  lemonchiffon: '#fffacd',\n  lightblue: '#add8e6',\n  lightcoral: '#f08080',\n  lightcyan: '#e0ffff',\n  lightgoldenrodyellow: '#fafad2',\n  lightgray: '#d3d3d3',\n  lightgreen: '#90ee90',\n  lightgrey: '#d3d3d3',\n  lightpink: '#ffb6c1',\n  lightsalmon: '#ffa07a',\n  lightseagreen: '#20b2aa',\n  lightskyblue: '#87cefa',\n  lightslategray: '#778899',\n  lightslategrey: '#778899',\n  lightsteelblue: '#b0c4de',\n  lightyellow: '#ffffe0',\n  lime: '#00ff00',\n  limegreen: '#32cd32',\n  linen: '#faf0e6',\n  magenta: '#ff00ff',\n  maroon: '#800000',\n  mediumaquamarine: '#66cdaa',\n  mediumblue: '#0000cd',\n  mediumorchid: '#ba55d3',\n  mediumpurple: '#9370db',\n  mediumseagreen: '#3cb371',\n  mediumslateblue: '#7b68ee',\n  mediumspringgreen: '#00fa9a',\n  mediumturquoise: '#48d1cc',\n  mediumvioletred: '#c71585',\n  midnightblue: '#191970',\n  mintcream: '#f5fffa',\n  mistyrose: '#ffe4e1',\n  moccasin: '#ffe4b5',\n  navajowhite: '#ffdead',\n  navy: '#000080',\n  oldlace: '#fdf5e6',\n  olive: '#808000',\n  olivedrab: '#6b8e23',\n  orange: '#ffa500',\n  orangered: '#ff4500',\n  orchid: '#da70d6',\n  palegoldenrod: '#eee8aa',\n  palegreen: '#98fb98',\n  paleturquoise: '#afeeee',\n  palevioletred: '#db7093',\n  papayawhip: '#ffefd5',\n  peachpuff: '#ffdab9',\n  peru: '#cd853f',\n  pink: '#ffc0cb',\n  plum: '#dda0dd',\n  powderblue: '#b0e0e6',\n  purple: '#800080',\n  rebeccapurple: '#663399',\n  red: '#ff0000',\n  rosybrown: '#bc8f8f',\n  royalblue: '#4169e1',\n  saddlebrown: '#8b4513',\n  salmon: '#fa8072',\n  sandybrown: '#f4a460',\n  seagreen: '#2e8b57',\n  seashell: '#fff5ee',\n  sienna: '#a0522d',\n  silver: '#c0c0c0',\n  skyblue: '#87ceeb',\n  slateblue: '#6a5acd',\n  slategray: '#708090',\n  slategrey: '#708090',\n  snow: '#fffafa',\n  springgreen: '#00ff7f',\n  steelblue: '#4682b4',\n  tan: '#d2b48c',\n  teal: '#008080',\n  thistle: '#d8bfd8',\n  tomato: '#ff6347',\n  turquoise: '#40e0d0',\n  violet: '#ee82ee',\n  wheat: '#f5deb3',\n  white: '#ffffff',\n  whitesmoke: '#f5f5f5',\n  yellow: '#ffff00',\n  yellowgreen: '#9acd32',\n};\n\ninterface RGBColor {\n  r: number;\n  g: number;\n  b: number;\n}\n\nfunction twoColorFade(color1: RGBColor, color2: RGBColor, length: number): RGBColor[] {\n  const rIncr = (color2.r - color1.r) / (length - 1);\n  const gIncr = (color2.g - color1.g) / (length - 1);\n  const bIncr = (color2.b - color1.b) / (length - 1);\n  const colors: RGBColor[] = [];\n  let { r } = color1;\n  let { g } = color1;\n  let { b } = color1;\n  let ii: number;\n\n  for (ii = 0; ii < length; ii++) {\n    colors.push({ r, b, g });\n    r += rIncr;\n    g += gIncr;\n    b += bIncr;\n  }\n\n  return colors;\n}\n\nfunction multiColorFade(colors: RGBColor[], length: number): RGBColor[] {\n  const colorIncr = (length - 1) / (colors.length - 1);\n  let ii: number;\n  const len = Math.min(colors.length - 1, length);\n  let startPos = 0;\n  let endPos = 1;\n  let retColors: RGBColor[] = [];\n  let tmpColors: RGBColor[];\n  let dist: number;\n\n  for (ii = 0; ii < len; ii++) {\n    endPos = Math.max(startPos + 2, endPos + colorIncr);\n    dist = Math.round(endPos) - Math.round(startPos);\n\n    tmpColors = twoColorFade(colors[ii], colors[ii + 1], dist);\n    retColors.pop(); // remove last color\n    retColors = retColors.concat(tmpColors);\n\n    startPos = Math.round(endPos) - 1;\n  }\n  return retColors;\n}\n\nfunction parseCSSColor(color: string) {\n  const retColor: RGBColor = { r: 255, g: 255, b: 255 };\n  const lookup = cssColorLookup[color];\n  if (lookup) {\n    retColor.r = parseInt(lookup.substring(1, 3), 16);\n    retColor.g = parseInt(lookup.substring(3, 5), 16);\n    retColor.b = parseInt(lookup.substring(5, 7), 16);\n    return retColor;\n  }\n  if (color.match(/^#[0-9a-fA-F]{3}$/)) {\n    retColor.r = parseInt(color.substring(1, 2) + color.substring(1, 2), 16);\n    retColor.g = parseInt(color.substring(2, 3) + color.substring(2, 3), 16);\n    retColor.b = parseInt(color.substring(3, 4) + color.substring(3, 4), 16);\n    return retColor;\n  }\n  if (color.match(/^#[0-9a-fA-F]{6}$/)) {\n    retColor.r = parseInt(color.substring(1, 3), 16);\n    retColor.g = parseInt(color.substring(3, 5), 16);\n    retColor.b = parseInt(color.substring(5, 7), 16);\n  } else if (color.indexOf('rgb') !== -1) {\n    const matches = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i);\n    if (matches) {\n      retColor.r = parseInt(matches[1], 10);\n      retColor.g = parseInt(matches[2], 10);\n      retColor.b = parseInt(matches[3], 10);\n    } else {\n      console.warn(`Unknown rgb color: ${color}`);\n      return retColor;\n    }\n  }\n  console.warn(`Unknown color: ${color}`);\n  return retColor;\n}\n\nexport { multiColorFade, parseCSSColor };\n","import React, { useEffect, useMemo, useState, useCallback } from 'react';\nimport { motion, useAnimation, type Easing } from 'motion/react';\nimport { GhostSVG as GhostDefault } from '../svgs/GhostSVG';\nimport { randomIntFromInterval, randomNumber } from '../utils';\n\nexport interface GhostAnimatorProps {\n  animationTimeMax: number;\n  distance: number;\n  container: React.RefObject<HTMLDivElement | null>;\n  mouseOver: boolean;\n  Creature?: React.ElementType | null;\n  index: number;\n  repeat: boolean;\n  dimensions: {\n    width: number;\n    height: number;\n  };\n  ref: React.Ref<HTMLDivElement>;\n}\n\n/**\n * @component\n */\nconst GhostAnimator = ({\n  animationTimeMax,\n  distance,\n  container,\n  mouseOver,\n  Creature = null,\n  index = 0,\n  repeat = true,\n  dimensions,\n  ref,\n}: GhostAnimatorProps) => {\n  const basicStyles: Record<string, string> = useMemo(\n    () => ({\n      position: 'absolute',\n      transformOrigin: 'center',\n      fontSize: '2em',\n      pointerEvents: 'none',\n    }),\n    [],\n  );\n  const [canPlayAnimation, setCanPlayAnimation] = useState<boolean>(true);\n  const [containerStyles, setContainerStyles] = useState(basicStyles);\n  const controls = useAnimation();\n  const [animationStarted, setAnimationStarted] = useState(false);\n\n  const animationTime = animationTimeMax === 0 ? 0 : randomNumber(animationTimeMax / 2, animationTimeMax);\n\n  const waveKeyFrames = useMemo(() => {\n    const waveAmount = randomIntFromInterval(5, 10);\n    const waves = [`${waveAmount}px`, `-${waveAmount}px`];\n    return new Array(randomIntFromInterval(3, 5)).fill(0).reduce((prev) => [...prev, ...waves], []);\n  }, []);\n\n  // Calculate initial Y position\n  const getInitY = useCallback(() => {\n    const rect = container.current?.getBoundingClientRect() || {\n      width: 0,\n      height: 0,\n    };\n    return (Math.round(Math.min(rect.width, rect.height)) * -1) / 2;\n  }, [container]);\n\n  // Define full animation sequence with proper fade-out timing\n  const getAnimationSequence = useCallback(() => {\n    const initY = getInitY();\n    const endY = distance * -1 + initY;\n\n    // Calculate key points in the animation sequence\n    // The ghost should be fully visible in the middle of the journey\n    // and completely faded out at the end\n    return {\n      x: waveKeyFrames,\n      y: [initY, endY],\n      opacity: [0, 1, 0], // Start invisible, become visible, end invisible\n      transition: {\n        x: {\n          duration: animationTime,\n        },\n        y: {\n          duration: animationTime,\n          // Using easier-out timing to make the ghost move faster initially\n          // and slower as it approaches the edge\n          ease: 'easeOut' as Easing,\n        },\n        opacity: {\n          duration: animationTime,\n          // Custom times for opacity to ensure ghost is visible during most of the animation\n          // but completely faded out at the end\n          times: [0, 0.3, 1],\n        },\n      },\n    };\n  }, [getInitY, waveKeyFrames, animationTime, distance]);\n\n  const getOffVariant = useCallback(() => {\n    const initY = getInitY();\n    return {\n      x: 0,\n      y: `${initY}px`,\n      opacity: 0,\n      transition: {\n        duration: 0.3,\n      },\n    };\n  }, [getInitY]);\n\n  /*\n    Handle animation start/stop and container visibility\n    */\n  useEffect(() => {\n    if (mouseOver === true && !animationStarted && canPlayAnimation === true) {\n      // don't allow future repeats of animation\n      setCanPlayAnimation(repeat);\n\n      // Show the container\n      setContainerStyles({\n        ...basicStyles,\n        display: 'block',\n      });\n\n      // Start animation and mark it as started\n      controls.start(getAnimationSequence());\n      setAnimationStarted(true);\n\n      // Hide the container after animation completes\n      const timer = setTimeout(() => {\n        setContainerStyles({\n          ...basicStyles,\n          display: 'none',\n        });\n        setAnimationStarted(false);\n      }, animationTime * 1000);\n\n      return () => {\n        window.clearTimeout(timer);\n      };\n    }\n    if (!mouseOver && !animationStarted) {\n      // Only reset to off state if animation hasn't started\n      controls.start(getOffVariant());\n    }\n    return undefined;\n  }, [\n    mouseOver,\n    canPlayAnimation,\n    animationStarted,\n    controls,\n    animationTime,\n    basicStyles,\n    getAnimationSequence,\n    getOffVariant,\n    repeat,\n  ]);\n\n  useEffect(() => {\n    if (!mouseOver) {\n      setCanPlayAnimation(true);\n    }\n  }, [mouseOver]);\n\n  const GhostComponent = Creature || GhostDefault;\n\n  let initY = 0;\n  if (container.current) {\n    const rect = container.current?.getBoundingClientRect();\n    initY = (Math.round(Math.min(rect.width, rect.height)) * -1) / 2;\n  }\n\n  return (\n    <div ref={ref} style={containerStyles}>\n      <motion.div\n        initial={{ opacity: 0, x: 0, y: `${initY}px` }}\n        animate={controls}\n        onAnimationComplete={() => {\n          if (animationStarted) {\n            // Animation is complete, reset the flag and ensure ghost is hidden\n            setAnimationStarted(false);\n            controls.set({ opacity: 0 }); // Ensure ghost is completely invisible\n          }\n        }}\n      >\n        <GhostComponent width={dimensions.width} height={dimensions.height} index={index} />\n      </motion.div>\n    </div>\n  );\n};\n\nexport { GhostAnimator };\n","import React, { type CSSProperties, useCallback, useRef, useState } from 'react';\nimport { type Easing, motion } from 'motion/react';\nimport { GhostAnimator } from './GhostAnimator';\n\nconst defaultGlowOptions = {\n  animationTime: 3,\n  boxShadowOff: '0px 0px 0px rgba(255,0,0,0)',\n  boxShadowOn: '0px 0px 40px rgba(255,0,0,1)',\n};\nconst defaultCreatureOptions = {\n  animationTime: 1.5,\n  numberOf: 6,\n  distance: 200,\n  repeat: true,\n  dimensions: { width: 44, height: 44 },\n};\n\nexport interface HauntedProps {\n  glowOptions?: {\n    animationTime?: number;\n    boxShadowOff?: string;\n    boxShadowOn?: string;\n  };\n  creatureOptions?: {\n    distance?: number;\n    numberOf?: number;\n    animationTime?: number;\n    repeat?: boolean;\n    dimensions?: {\n      width: number;\n      height: number;\n    };\n  };\n  disableFun?: boolean;\n  Creature?: React.ElementType | null;\n  style?: CSSProperties;\n  children?: React.ReactNode;\n}\n\n/**\n * @component\n */\nfunction Haunted({\n  glowOptions = defaultGlowOptions,\n  creatureOptions = defaultCreatureOptions,\n  disableFun = false,\n  Creature = null,\n  style = {},\n  children,\n}: HauntedProps) {\n  const fullGlowOptions = {\n    ...defaultGlowOptions,\n    ...glowOptions,\n  };\n  const fullCreatureOptions = {\n    ...defaultCreatureOptions,\n    ...creatureOptions,\n  };\n  const [mouseOver, setMouseOver] = useState(false);\n  const container = useRef<HTMLDivElement>(null);\n  const creatureRefs = useRef<HTMLElement[]>([]);\n\n  const onMouseEnter = useCallback(() => {\n    if (!container.current) return;\n\n    const rect = container.current.getBoundingClientRect();\n\n    const halfCreatureWidth = (fullCreatureOptions?.dimensions?.width || 0) / 2;\n    const halfCreatureHeight = (fullCreatureOptions?.dimensions?.height || 0) / 2;\n\n    const newX = Math.round(rect.width / 2) - halfCreatureWidth;\n    const newY = Math.round(rect.height / 2) - halfCreatureHeight;\n\n    const rotationAmount = 360 / creatureRefs.current.length;\n    let rotation = 0;\n    creatureRefs.current.forEach((item) => {\n      rotation += rotationAmount;\n      // eslint-disable-next-line no-param-reassign\n      item.style.transform = `translateX(${newX}px) translateY(${newY}px) rotate(${Math.round(rotation)}deg)`;\n    });\n\n    setMouseOver(true);\n  }, [fullCreatureOptions?.dimensions?.width, fullCreatureOptions?.dimensions?.height]);\n  const onMouseLeave = useCallback(() => {\n    setMouseOver(false);\n  }, []);\n\n  const variants = {\n    on: () => ({\n      boxShadow: [fullGlowOptions.boxShadowOff, fullGlowOptions.boxShadowOn, fullGlowOptions.boxShadowOff],\n      transition: {\n        boxShadow: {\n          repeat: Infinity,\n          duration: fullGlowOptions?.animationTime || 0,\n          ease: 'easeInOut' as Easing,\n        },\n      },\n    }),\n    off: () => ({\n      boxShadow: fullGlowOptions.boxShadowOff,\n      transition: {\n        boxShadow: {\n          duration: fullGlowOptions?.animationTime || 0,\n        },\n      },\n    }),\n  };\n\n  return (\n    <motion.div\n      variants={variants}\n      animate={glowOptions && disableFun === false ? (mouseOver ? 'on' : 'off') : ''}\n      ref={container}\n      style={{\n        ...style,\n        display: 'inline-block',\n        position: 'relative',\n      }}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n    >\n      {disableFun === false && (\n        <div\n          style={{\n            zIndex: 0,\n            position: 'absolute',\n          }}\n        >\n          {creatureOptions &&\n            Array(fullCreatureOptions.numberOf)\n              .fill(0)\n              .map((val, index) => (\n                <GhostAnimator\n                  key={index}\n                  index={index}\n                  container={container}\n                  ref={(el: HTMLDivElement) => {\n                    creatureRefs.current[index] = el;\n                  }}\n                  animationTimeMax={fullCreatureOptions.animationTime}\n                  mouseOver={mouseOver}\n                  distance={fullCreatureOptions.distance}\n                  Creature={Creature}\n                  dimensions={fullCreatureOptions.dimensions}\n                  repeat={fullCreatureOptions.repeat}\n                />\n              ))}\n        </div>\n      )}\n      <div style={{ zIndex: 1, position: 'relative' }}>{children}</div>\n    </motion.div>\n  );\n}\n\nexport { Haunted };\n","import React, { useEffect, useRef, useState } from 'react';\nimport { motion } from 'motion/react';\n\n// Useful tool for editing and creating paths (for things like the eye shape)\n// https://yqnn.github.io/svg-path-editor/\n\nconst simpleOpenedPath = 'M 0 4 C 3 7 7 7 10 4 C 7 1 3 1 0 4';\nconst simpleClosedPath = 'M 0 4 C 3 4 7 4 10 4 C 7 4 3 4 0 4';\n\nexport interface EyeProps {\n  animationTime?: number;\n  open?: boolean;\n  openedClipPath?: string;\n  closedClipPath?: string;\n  irisColor?: string;\n  eyeBallColor?: string;\n  pupilColor?: string;\n  pupilSize?: number;\n  follow?: boolean;\n  pupilCoords?: { cx: number; cy: number };\n  width?: number;\n}\n\n/**\n * @Component\n * Component for an eye which follows the mouse.\n */\nfunction Eye({\n  animationTime = 0.75,\n  open = true,\n  openedClipPath = simpleOpenedPath,\n  closedClipPath = simpleClosedPath,\n  irisColor = '#333',\n  eyeBallColor = 'white',\n  pupilColor = 'black',\n  pupilSize = 1,\n  follow = true,\n  pupilCoords = { cx: 5, cy: 4 },\n  width = 50,\n}: EyeProps) {\n  const pupilRef = useRef<SVGCircleElement>(null);\n  const eyeContainerRef = useRef<SVGCircleElement>(null);\n  const irisRef = useRef<SVGCircleElement>(null);\n  const groupRef = useRef<SVGGElement>(null);\n  const [eyeMaskId] = useState(`eyemask_${Math.random()}`);\n\n  useEffect(() => {\n    if (follow === false) return undefined;\n\n    // based on https://buipalsulich.com/post/gopher-eyes/\n    const onMouseMove = (evt: MouseEvent) => {\n      const pupil = pupilRef.current;\n      const iris = irisRef.current;\n      if (!pupil) return;\n\n      const eyeBall = eyeContainerRef.current;\n\n      if (!eyeBall) return;\n\n      const pupilR = pupil.r.baseVal.value;\n      const eyeR = eyeBall.r.baseVal.value;\n      const bound = eyeBall.getBoundingClientRect();\n\n      const cx = bound.left + eyeR;\n      const cy = bound.bottom - eyeR;\n      const x = evt.clientX - cx;\n      const y = evt.clientY - cy;\n      let d = Math.sqrt(x * x + y * y);\n      const theta = Math.atan2(y, x);\n      const angle = (theta * 180) / Math.PI + 360;\n\n      const max = width * 5;\n      if (d > max) d = max;\n      const t = (d / max) * (eyeR - pupilR);\n\n      pupil.style.transform = `translate(${`${t}px`}) rotate(${`${angle}deg`})`;\n      pupil.style.transformOrigin = `${`${eyeBall.cx.baseVal.value - t}px`} ${`${eyeBall.cy.baseVal.value}px`}`;\n\n      if (!iris) return;\n\n      iris.style.transform = `translate(${`${t}px`}) rotate(${`${angle}deg`})`;\n      iris.style.transformOrigin = `${`${eyeBall.cx.baseVal.value - t}px`} ${`${eyeBall.cy.baseVal.value}px`}`;\n    };\n    document.addEventListener('mousemove', onMouseMove);\n    return () => {\n      document.removeEventListener('mousemove', onMouseMove);\n    };\n  }, [pupilRef, follow, width]);\n\n  const variants = {\n    opened: () => ({\n      clipPath: `path('${openedClipPath}')`,\n      transition: {\n        clipPath: {\n          duration: animationTime,\n        },\n      },\n    }),\n    closed: () => ({\n      clipPath: `path('${closedClipPath}')`,\n      transition: {\n        clipPath: {\n          duration: animationTime,\n        },\n      },\n    }),\n  };\n\n  return (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 10 8\" width={width}>\n      <mask id={eyeMaskId}>\n        <rect width=\"10\" height=\"14\" fill=\"black\" />\n        <path d={openedClipPath} fill=\"white\" />\n      </mask>\n      <motion.g\n        variants={variants}\n        initial={{ clipPath: `path('${closedClipPath}')` }}\n        animate={open ? 'opened' : 'closed'}\n        ref={groupRef}\n        mask={`url(#${eyeMaskId})`}\n      >\n        <rect width=\"10\" height=\"14\" fill={eyeBallColor} />\n        <circle cx={pupilCoords.cx} cy={pupilCoords.cy} r=\"2\" fill={eyeBallColor} ref={eyeContainerRef} />\n        <circle cx={pupilCoords.cx} cy={pupilCoords.cy} r=\"2\" fill={irisColor} ref={irisRef} />\n        <circle cx={pupilCoords.cx} cy={pupilCoords.cy} r={pupilSize} fill={pupilColor} ref={pupilRef} />\n      </motion.g>\n    </svg>\n  );\n}\n\nexport { Eye };\n","import React, { type CSSProperties } from 'react';\nimport { Eye } from './Eye';\n\nexport interface EyeLayout {\n  left: {\n    opened: string;\n    closed: string;\n  };\n  right: {\n    opened: string;\n    closed: string;\n  };\n  pupil: {\n    cx: number;\n    cy: number;\n  };\n}\n\n// design path with: https://yqnn.github.io/svg-path-editor/\nconst eyeLayoutVariants: Record<string, EyeLayout> = {\n  unfriendly: {\n    left: {\n      opened: 'M 0 4 C 3 6 6 7 10 4 C 6 3 3 3 0 4',\n      closed: 'M 0 4 C 4 4 7 4 10 4 C 7 4 4 4 0 4',\n    },\n    right: {\n      opened: 'M 0 4 C 4 7 7 6 10 4 C 7 3 4 3 0 4',\n      closed: 'M 0 4 C 4 4 7 4 10 4 C 7 4 4 4 0 4',\n    },\n    pupil: {\n      cx: 5,\n      cy: 4.5,\n    },\n  },\n  menacing: {\n    left: {\n      opened: 'M 0 4 C 3 7 6 7 10 4 C 6 3 3 2 0 4',\n      closed: 'M 0 4 C 4 4 7 4 10 4 C 7 4 4 4 0 4',\n    },\n    right: {\n      opened: 'M 0 4 C 4 7 7 7 10 4 C 7 2 4 3 0 4',\n      closed: 'M 0 4 C 4 4 7 4 10 4 C 7 4 4 4 0 4',\n    },\n    pupil: {\n      cx: 5,\n      cy: 4.5,\n    },\n  },\n  neutral: {\n    left: {\n      opened: 'M 0 4 C 3 7 7 7 10 4 C 7 1 3 1 0 4',\n      closed: 'M 0 4 C 3 4 7 4 10 4 C 7 4 3 4 0 4',\n    },\n    right: {\n      opened: 'M 0 4 C 3 7 7 7 10 4 C 7 1 3 1 0 4',\n      closed: 'M 0 4 C 3 4 7 4 10 4 C 7 4 3 4 0 4',\n    },\n    pupil: {\n      cx: 5,\n      cy: 4,\n    },\n  },\n};\n\nexport type EyeLayoutPresets = 'unfriendly' | 'menacing' | 'neutral';\n\nexport interface EyesProps {\n  open?: boolean;\n  eyeLayout?: EyeLayoutPresets | EyeLayout;\n  animationTime?: number;\n  width?: number;\n  irisColor?: string;\n  eyeBallColor?: string;\n  pupilColor?: string;\n  style?: CSSProperties;\n  pupilSize?: number;\n  follow?: boolean;\n}\n\nfunction Eyes({\n  open = true,\n  eyeLayout = 'unfriendly',\n  animationTime = 0.75,\n  width = 200,\n  irisColor = '#333',\n  eyeBallColor = 'white',\n  pupilColor = 'black',\n  style = {},\n  pupilSize = 1,\n  follow = true,\n}: EyesProps) {\n  if (typeof pupilSize !== 'number') console.error('pupilSize must be a number');\n  if (pupilSize < 0 || pupilSize > 2) console.error('pupilSize must be between 0 and 2');\n\n  let eyeVariant: EyeLayout;\n  if (typeof eyeLayout === 'string') {\n    eyeVariant = eyeLayoutVariants[eyeLayout];\n  } else {\n    eyeVariant = {\n      ...eyeLayoutVariants.unfriendly,\n      ...eyeLayout,\n    };\n  }\n\n  const { left, right, pupil } = eyeVariant;\n\n  const containerStyles = {\n    display: 'flex',\n    justifyContent: 'space-between',\n    width: `${width}px`,\n    ...style,\n  };\n\n  return (\n    <div style={containerStyles}>\n      <Eye\n        open={open}\n        width={(width / 10) * 4.5}\n        animationTime={animationTime}\n        openedClipPath={left.opened}\n        closedClipPath={left.closed}\n        irisColor={irisColor}\n        eyeBallColor={eyeBallColor}\n        pupilColor={pupilColor}\n        pupilSize={pupilSize}\n        follow={follow}\n        pupilCoords={pupil}\n      />\n      <Eye\n        open={open}\n        width={(width / 10) * 4.5}\n        animationTime={animationTime}\n        openedClipPath={right.opened}\n        closedClipPath={right.closed}\n        irisColor={irisColor}\n        eyeBallColor={eyeBallColor}\n        pupilColor={pupilColor}\n        pupilSize={pupilSize}\n        follow={follow}\n        pupilCoords={pupil}\n      />\n    </div>\n  );\n}\n\nexport { Eyes };\n","import React from 'react';\n\nexport interface HeartSVGProps {\n  width: number;\n  height: number;\n  style?: React.CSSProperties;\n  className?: string;\n  onClick?: () => void;\n  onMouseEnter?: () => void;\n  onMouseLeave?: () => void;\n  onFocus?: () => void;\n  onBlur?: () => void;\n  onKeyDown?: (event: React.KeyboardEvent<SVGSVGElement>) => void;\n  ref: React.RefObject<SVGSVGElement> | null;\n}\n\n/**\n * A component that returns an SVG component that can be used with several of the components in this library.\n * Original SVG was CC0 (source: https://www.svgrepo.com/svg/165566/heart)\n */\nconst HeartSVG = ({\n  width,\n  height,\n  style = {},\n  className = '',\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  onFocus,\n  onBlur,\n  onKeyDown,\n  ref = null,\n}: HeartSVGProps) => {\n  const svgStyle = {\n    enableBackground: '0 0 230 230',\n    ...style,\n  };\n  return (\n    <svg\n      version=\"1.1\"\n      ref={ref}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n      x=\"0px\"\n      y=\"0px\"\n      viewBox=\"0 0 230 230\"\n      style={svgStyle}\n      xmlSpace=\"preserve\"\n      width={width}\n      height={height}\n      onClick={onClick}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      onFocus={onFocus}\n      onBlur={onBlur}\n      onKeyDown={onKeyDown}\n    >\n      <path\n        fill=\"#f00\"\n        d=\"M213.588,120.982L115,213.445l-98.588-92.463C-6.537,96.466-5.26,57.99,19.248,35.047l2.227-2.083\n        c24.51-22.942,62.984-21.674,85.934,2.842L115,43.709l7.592-7.903c22.949-24.516,61.424-25.784,85.936-2.842l2.227,2.083\n        C235.26,57.99,236.537,96.466,213.588,120.982z\"\n      />\n    </svg>\n  );\n};\n\nexport { HeartSVG };\n","import React from 'react';\n\nexport interface StarCrossSVGProps {\n  pathRef: React.Ref<SVGPathElement>;\n  width: number;\n  height: number;\n  style?: React.CSSProperties;\n  className?: string;\n  onClick?: () => void;\n  onMouseEnter?: () => void;\n  onMouseLeave?: () => void;\n  onFocus?: () => void;\n  onBlur?: () => void;\n  onKeyDown?: (event: React.KeyboardEvent<SVGSVGElement>) => void;\n  ref: React.RefObject<SVGSVGElement> | null;\n}\n\n/**\n * @component\n * A component that returns an SVG component that can be used with several of the components in this library.\n * It takes in a pathRef component which is used in the MagicalTextSparkleAnimator (for MagicalText).\n */\nconst StarCrossSVG = ({\n  pathRef,\n  width,\n  height,\n  style = {},\n  className,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  onFocus,\n  onBlur,\n  onKeyDown,\n  ref = null,\n}: StarCrossSVGProps) => (\n  <svg\n    ref={ref}\n    className={className}\n    width={width}\n    height={height}\n    style={style}\n    viewBox=\"0 0 16 16\"\n    version=\"1.1\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    onClick={onClick}\n    onMouseEnter={onMouseEnter}\n    onMouseLeave={onMouseLeave}\n    onFocus={onFocus}\n    onBlur={onBlur}\n    onKeyDown={onKeyDown}\n  >\n    <g>\n      <path ref={pathRef} d=\"M 9.5, 6.5 8, 0 6.5, 6.5 0, 8 6.5, 9.5 8, 16 9.5, 9.5 16, 8 Z\" />\n    </g>\n  </svg>\n);\n\nexport { StarCrossSVG };\n","import React, { useCallback, useRef } from 'react';\nimport { motion } from 'motion/react';\nimport { type ResolvedValues } from 'motion';\nimport { randomIntFromInterval } from '../../utils';\nimport { GhostSVG } from '../../svgs';\n\nexport interface MagicalTextScaleAnimatorProps {\n  Adornment?: React.ElementType;\n  container?: React.RefObject<HTMLElement | null>;\n  delay?: number;\n  duration?: number;\n  opacity?: number;\n  width?: number;\n  height?: number;\n  colors?: string[];\n}\n\nfunction MagicalTextScaleAnimator({\n  Adornment = GhostSVG,\n  container,\n  delay = 0,\n  duration = 1,\n  opacity = 0.7,\n  width = 16,\n  height = 16,\n  colors = [] /* eslint-disable-line */,\n}: MagicalTextScaleAnimatorProps) {\n  const ghostRef = useRef<HTMLDivElement>(null);\n\n  const variants = {\n    on: () => ({\n      scale: [0, 1, 0],\n      opacity,\n      transition: {\n        scale: {\n          animationFillMode: 'forwards',\n          duration,\n          repeat: Infinity,\n          delay,\n        },\n      },\n    }),\n    off: () => ({}),\n  };\n\n  const setPosition = useCallback(() => {\n    if (container?.current) {\n      const rect = container.current.getBoundingClientRect();\n\n      const halfWidth = width / 2;\n      const halfHeight = height / 2;\n\n      if (!ghostRef.current) return;\n\n      ghostRef.current.style.left = `${randomIntFromInterval(-halfWidth, rect.width - halfWidth)}px`;\n      ghostRef.current.style.top = `${randomIntFromInterval(-halfHeight, rect.height - halfHeight)}px`;\n    }\n  }, [ghostRef, container, width, height]);\n\n  const setup = useCallback(\n    (variant: string) => {\n      if (variant === 'on') {\n        setPosition();\n      }\n    },\n    [setPosition],\n  );\n\n  const onUpdate = useCallback(\n    (latest: ResolvedValues) => {\n      const { scale } = latest;\n      if (typeof scale === 'number' && scale < 0.01) {\n        setPosition();\n      }\n    },\n    [setPosition],\n  );\n\n  return (\n    <motion.div\n      ref={ghostRef}\n      variants={variants}\n      initial={{ opacity: 0 }}\n      exit={{ opacity: 0, scale: 0, transition: { duration: 1 } }}\n      animate=\"on\"\n      style={{ position: 'absolute', pointerEvents: 'none', width: `${width}px`, height: `${height}px` }}\n      onUpdate={onUpdate}\n      onAnimationStart={setup}\n    >\n      <Adornment width={width} height={height} />\n    </motion.div>\n  );\n}\n\nexport { MagicalTextScaleAnimator };\n","import React, { useCallback, useRef, useState } from 'react';\nimport { motion, type Easing } from 'motion/react';\nimport { type ResolvedValues } from 'motion';\nimport { randomIntFromInterval } from '../../utils';\nimport { StarCrossSVG } from '../../svgs';\n\nconst defaultGetColor = () => null;\n\nexport interface MagicalTextSparkleAnimatorProps {\n  Adornment?: React.ElementType;\n  container?: React.RefObject<HTMLElement | null>;\n  delay?: number;\n  duration?: number;\n  getColor?: (pos: number) => string | null;\n  width?: number;\n  height?: number;\n  colors?: string[];\n}\n\nfunction MagicalTextSparkleAnimator({\n  Adornment = StarCrossSVG,\n  container,\n  delay = 0,\n  duration = 1,\n  getColor = defaultGetColor,\n  width = 16,\n  height = 16,\n  colors = [] /* eslint-disable-line */,\n}: MagicalTextSparkleAnimatorProps) {\n  const starRef = useRef<HTMLDivElement>(null);\n  const pathRef = useRef<SVGSVGElement>(null);\n  const [leftPos, setLeftPos] = useState(0);\n  const [leftMax, setLeftMax] = useState(0);\n  const [leftMin, setLeftMin] = useState(0);\n\n  const variants = {\n    on: () => ({\n      rotate: [0, 180],\n      scale: [0, 1, 0],\n      opacity: 0.7,\n      transition: {\n        rotate: {\n          repeat: Infinity,\n          duration,\n          ease: 'linear' as Easing,\n          delay,\n        },\n        scale: {\n          animationFillMode: 'forwards',\n          duration,\n          repeat: Infinity,\n          delay,\n        },\n      },\n    }),\n    off: () => ({}),\n  };\n\n  const setPosition = useCallback(() => {\n    if (container?.current) {\n      const rect = container.current.getBoundingClientRect();\n\n      const halfWidth = width / 2;\n      const halfHeight = height / 2;\n      const leftStart = -halfWidth;\n      const leftEnd = rect.width - halfWidth;\n      const left = randomIntFromInterval(leftStart, leftEnd);\n      const top = randomIntFromInterval(-halfHeight, rect.height - halfHeight);\n\n      if (!starRef.current) return;\n\n      starRef.current.style.left = `${left}px`;\n      starRef.current.style.top = `${top}px`;\n\n      setLeftPos(left);\n      setLeftMin(leftStart);\n      setLeftMax(leftEnd);\n    }\n  }, [container, starRef, width, height]);\n\n  const setup = useCallback(\n    (variant: string) => {\n      if (variant === 'on') {\n        setPosition();\n      }\n    },\n    [setPosition],\n  );\n\n  const onUpdate = useCallback(\n    (latest: ResolvedValues) => {\n      const { scale } = latest;\n      const color = getColor((leftPos - leftMin) / (leftMax - leftMin)) || '';\n\n      if (pathRef.current) pathRef.current.style.fill = color;\n      if (typeof scale === 'number' && scale < 0.01) {\n        setPosition();\n      }\n    },\n    [setPosition, getColor, leftMax, leftMin, leftPos],\n  );\n\n  return (\n    <motion.div\n      style={{\n        position: 'absolute',\n      }}\n      ref={starRef}\n      initial={{ opacity: 0 }}\n      variants={variants}\n      animate=\"on\"\n      exit={{ opacity: 0, scale: 0, transition: { duration: 1 } }}\n      onAnimationStart={setup}\n      onUpdate={onUpdate}\n    >\n      <Adornment pathRef={pathRef} width={width} height={height} />\n    </motion.div>\n  );\n}\n\nexport { MagicalTextSparkleAnimator };\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { AnimatePresence, motion, type Easing } from 'motion/react';\nimport { type ResolvedValues } from 'motion';\nimport { MagicalTextSparkleAnimator, MagicalTextScaleAnimator } from './animators';\nimport { StarCrossSVG } from '../svgs';\nimport { multiColorFade, parseCSSColor } from '../utils';\n\nconst defaultColors = ['darkorange', 'purple'];\n\nconst defaultAdornmentOptions = {\n  animationType: 'sparkle',\n  width: 16,\n  height: 16,\n  opacity: 0.7,\n  duration: 1.25,\n  numberOf: 3,\n};\n\nexport interface MagicalTextProps {\n  text: string;\n  animationTime?: number;\n  colors?: string[];\n  style?: React.CSSProperties;\n  textStyle?: React.CSSProperties;\n  disableFun?: boolean;\n  fadeText?: boolean;\n  Adornment?: React.ElementType;\n  showAdornments?: boolean;\n  adornmentOptions?: {\n    animationType?: string | React.ElementType;\n  };\n}\n\n/**\n * @component\n * This is a component that displays text in a faded fashion with optional adornments (such as sparkles or hearts).\n *\n * Inspiration:\n * https://patorjk.com/text-color-fader - Initial goal\n * https://www.youtube.com/watch?v=yu0Cm4BqQv0 - Idea for the sparkles and movement of the color fade\n * https://linear.app/readme - What inspired the above youtube video\n *\n */\nfunction MagicalText({\n  text,\n  animationTime = 10,\n  colors = defaultColors,\n  style = {},\n  textStyle = {},\n  disableFun = false,\n  fadeText = true,\n  showAdornments = true,\n  Adornment = StarCrossSVG,\n  adornmentOptions,\n}: MagicalTextProps) {\n  const {\n    animationType,\n    width: adornmentWidth,\n    height: adornmentHeight,\n    opacity: adornmentOpacity,\n    duration: adornmentDuration,\n    numberOf: numberOfAdornments,\n  } = {\n    ...defaultAdornmentOptions,\n    ...adornmentOptions,\n  };\n  const fadeOffsetRef = useRef<number>(0);\n\n  const colorsStr = colors.join('█');\n  const rgbColors = useMemo(() => {\n    const parsedColors = colorsStr.split('█');\n    return parsedColors.map((color) => parseCSSColor(color)).concat(parseCSSColor(parsedColors[0]));\n  }, [colorsStr]);\n  const fadeReference = useMemo(() => multiColorFade(rgbColors, 200), [rgbColors]);\n\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const backgroundSize = '200%';\n  const completeColors = [...colors, colors[0]];\n  const [adornmentKey, setAdornmentKey] = useState(`_akey${Math.random()}`);\n  const AdornmentAnimator: React.ElementType =\n    animationType === 'sparkle'\n      ? MagicalTextSparkleAnimator\n      : typeof animationType === 'object'\n        ? animationType\n        : MagicalTextScaleAnimator;\n\n  useEffect(() => {\n    setAdornmentKey(`_akey${Math.random()}`);\n  }, [showAdornments]);\n\n  const divStyle = {\n    display: 'inline-block',\n    background: `linear-gradient(to right, ${completeColors.join(',')})`,\n    WebkitBackgroundClip: 'text',\n    backgroundClip: 'text',\n    WebkitTextFillColor: 'transparent',\n    paddingBottom: '0.1em',\n    backgroundSize,\n    ...textStyle,\n  };\n\n  const variants = {\n    on: () => ({\n      backgroundPosition: ['0% center', `-${backgroundSize} center`],\n      transition: {\n        backgroundPosition: {\n          repeat: Infinity,\n          ease: 'linear' as Easing,\n          duration: animationTime,\n        },\n      },\n    }),\n    off: () => ({}),\n  };\n\n  const getColor = useCallback(\n    (pos: number) => {\n      const position = pos || 0;\n      let offsetPos = Math.round(200 - fadeOffsetRef.current + position * 100);\n      if (offsetPos >= 200) {\n        offsetPos -= 200;\n      }\n      const color = fadeReference[offsetPos];\n      if (color) {\n        return `rgb(${Math.round(color.r)},${Math.round(color.g)},${Math.round(color.b)})`;\n      }\n      // if color not found, use first color\n      return colors[0];\n    },\n    [colors, fadeReference],\n  );\n\n  const onUpdate = useCallback((param: ResolvedValues) => {\n    if (typeof param.backgroundPosition !== 'string') return;\n    const matches = param.backgroundPosition.match(/[0-9]+/);\n    if (matches) {\n      fadeOffsetRef.current = parseInt(matches[0], 10);\n    }\n  }, []);\n\n  return (\n    <div\n      ref={containerRef}\n      style={{\n        display: 'inline-block',\n        position: 'relative',\n        ...style,\n      }}\n    >\n      {disableFun ? (\n        <span>{text}</span>\n      ) : (\n        <motion.div\n          style={fadeText ? divStyle : textStyle}\n          variants={variants}\n          animate={fadeText ? 'on' : 'off'}\n          onUpdate={animationType === 'sparkle' ? onUpdate : undefined}\n        >\n          {text}\n        </motion.div>\n      )}\n\n      <AnimatePresence>\n        {!disableFun &&\n          showAdornments &&\n          Array(numberOfAdornments)\n            .fill(0)\n            .map((item, idx) => (\n              <AdornmentAnimator\n                Adornment={Adornment}\n                key={`${adornmentKey}_${idx}`}\n                getColor={getColor}\n                duration={adornmentDuration}\n                container={containerRef}\n                colors={colors}\n                delay={idx * (adornmentDuration / numberOfAdornments)}\n                width={adornmentWidth}\n                height={adornmentHeight}\n                opacity={adornmentOpacity}\n              />\n            ))}\n      </AnimatePresence>\n    </div>\n  );\n}\n\nexport { MagicalText };\n","import React, { useCallback, useEffect, useRef, useState, useMemo, type CSSProperties } from 'react';\nimport { motion } from 'motion/react';\n\nexport interface SpotLightProps {\n  size: number;\n  onClick: ((evt: React.MouseEvent<SVGSVGElement, MouseEvent>) => void) | null;\n  darkColor: string;\n  zIndex: number;\n  ref: React.RefObject<SVGSVGElement | null>;\n}\n\nconst SpotLight = ({ size, onClick, darkColor, zIndex, ref }: SpotLightProps) => {\n  const lightStyle: CSSProperties = useMemo(\n    () => ({\n      position: 'fixed',\n      zIndex,\n      pointerEvents: onClick ? 'auto' : 'none',\n      cursor: 'pointer',\n    }),\n    [zIndex, onClick],\n  );\n  const [gradientUrl] = useState(`gradientUrl_${Math.random()}`);\n  const [spotLightState, setSpotLightState] = useState('off'); // on, off, lightsOn\n  const mouseMoveTimer = useRef<number>(null);\n\n  const onMouseMove = useCallback(() => {\n    if (spotLightState === 'lightsOn') return;\n    setSpotLightState('on');\n    if (mouseMoveTimer.current) window.clearTimeout(mouseMoveTimer.current);\n    mouseMoveTimer.current = window.setTimeout(() => {\n      if (spotLightState === 'lightsOn') return;\n      setSpotLightState('off');\n    }, 3000);\n  }, [spotLightState]);\n\n  useEffect(() => {\n    window.addEventListener('mousemove', onMouseMove, true);\n    return () => {\n      window.removeEventListener('mousemove', onMouseMove, true);\n    };\n  }, [onMouseMove]);\n\n  const onSvgClick = useCallback(\n    (evt: React.MouseEvent<SVGSVGElement, MouseEvent>) => {\n      if (spotLightState === 'lightsOn') return;\n      setSpotLightState('lightsOn');\n      if (onClick) onClick(evt);\n    },\n    [onClick, spotLightState],\n  );\n\n  const variants = {\n    lightsOn: () => ({\n      stopColor: 'rgba(0,0,0,0)', // transparent\n      transition: {\n        duration: 0.1,\n      },\n    }),\n    on: () => ({\n      stopColor: 'rgba(0,0,0,0)', // transparent\n      transition: {\n        duration: 1,\n      },\n    }),\n    off: () => ({\n      stopColor: darkColor,\n      transition: {\n        duration: 1,\n      },\n    }),\n  };\n\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n      viewBox=\"0 0 100 100\"\n      version=\"1.1\"\n      style={lightStyle}\n      ref={ref}\n      width={size}\n      height={size}\n      // @ts-expect-error TODO: figure this out later\n      onClick={onClick ? onSvgClick : null}\n    >\n      <defs>\n        <radialGradient id={gradientUrl}>\n          <motion.stop variants={variants} animate={spotLightState} initial={{ stopColor: darkColor }} offset=\"0%\" />\n          <stop stopColor={`${darkColor}`} offset=\"100%\" />\n        </radialGradient>\n      </defs>\n\n      <rect\n        id=\"r1\"\n        x=\"0\"\n        y=\"0\"\n        width=\"100\"\n        height=\"100\"\n        stroke=\"black\"\n        strokeWidth=\"0\"\n        fill={`url('#${gradientUrl}')`}\n      />\n    </svg>\n  );\n};\n\nexport { SpotLight };\n","const b = {\n  transparent: \"#00000000\",\n  aliceblue: \"#f0f8ff\",\n  antiquewhite: \"#faebd7\",\n  aqua: \"#00ffff\",\n  aquamarine: \"#7fffd4\",\n  azure: \"#f0ffff\",\n  beige: \"#f5f5dc\",\n  bisque: \"#ffe4c4\",\n  black: \"#000000\",\n  blanchedalmond: \"#ffebcd\",\n  blue: \"#0000ff\",\n  blueviolet: \"#8a2be2\",\n  brown: \"#a52a2a\",\n  burlywood: \"#deb887\",\n  cadetblue: \"#5f9ea0\",\n  chartreuse: \"#7fff00\",\n  chocolate: \"#d2691e\",\n  coral: \"#ff7f50\",\n  cornflowerblue: \"#6495ed\",\n  cornsilk: \"#fff8dc\",\n  crimson: \"#dc143c\",\n  cyan: \"#00ffff\",\n  darkblue: \"#00008b\",\n  darkcyan: \"#008b8b\",\n  darkgoldenrod: \"#b8860b\",\n  darkgray: \"#a9a9a9\",\n  darkgreen: \"#006400\",\n  darkgrey: \"#a9a9a9\",\n  darkkhaki: \"#bdb76b\",\n  darkmagenta: \"#8b008b\",\n  darkolivegreen: \"#556b2f\",\n  darkorange: \"#ff8c00\",\n  darkorchid: \"#9932cc\",\n  darkred: \"#8b0000\",\n  darksalmon: \"#e9967a\",\n  darkseagreen: \"#8fbc8f\",\n  darkslateblue: \"#483d8b\",\n  darkslategray: \"#2f4f4f\",\n  darkslategrey: \"#2f4f4f\",\n  darkturquoise: \"#00ced1\",\n  darkviolet: \"#9400d3\",\n  deeppink: \"#ff1493\",\n  deepskyblue: \"#00bfff\",\n  dimgray: \"#696969\",\n  dimgrey: \"#696969\",\n  dodgerblue: \"#1e90ff\",\n  firebrick: \"#b22222\",\n  floralwhite: \"#fffaf0\",\n  forestgreen: \"#228b22\",\n  fuchsia: \"#ff00ff\",\n  gainsboro: \"#dcdcdc\",\n  ghostwhite: \"#f8f8ff\",\n  gold: \"#ffd700\",\n  goldenrod: \"#daa520\",\n  gray: \"#808080\",\n  green: \"#008000\",\n  greenyellow: \"#adff2f\",\n  grey: \"#808080\",\n  honeydew: \"#f0fff0\",\n  hotpink: \"#ff69b4\",\n  indianred: \"#cd5c5c\",\n  indigo: \"#4b0082\",\n  ivory: \"#fffff0\",\n  khaki: \"#f0e68c\",\n  lavender: \"#e6e6fa\",\n  lavenderblush: \"#fff0f5\",\n  lawngreen: \"#7cfc00\",\n  lemonchiffon: \"#fffacd\",\n  lightblue: \"#add8e6\",\n  lightcoral: \"#f08080\",\n  lightcyan: \"#e0ffff\",\n  lightgoldenrodyellow: \"#fafad2\",\n  lightgray: \"#d3d3d3\",\n  lightgreen: \"#90ee90\",\n  lightgrey: \"#d3d3d3\",\n  lightpink: \"#ffb6c1\",\n  lightsalmon: \"#ffa07a\",\n  lightseagreen: \"#20b2aa\",\n  lightskyblue: \"#87cefa\",\n  lightslategray: \"#778899\",\n  lightslategrey: \"#778899\",\n  lightsteelblue: \"#b0c4de\",\n  lightyellow: \"#ffffe0\",\n  lime: \"#00ff00\",\n  limegreen: \"#32cd32\",\n  linen: \"#faf0e6\",\n  magenta: \"#ff00ff\",\n  maroon: \"#800000\",\n  mediumaquamarine: \"#66cdaa\",\n  mediumblue: \"#0000cd\",\n  mediumorchid: \"#ba55d3\",\n  mediumpurple: \"#9370db\",\n  mediumseagreen: \"#3cb371\",\n  mediumslateblue: \"#7b68ee\",\n  mediumspringgreen: \"#00fa9a\",\n  mediumturquoise: \"#48d1cc\",\n  mediumvioletred: \"#c71585\",\n  midnightblue: \"#191970\",\n  mintcream: \"#f5fffa\",\n  mistyrose: \"#ffe4e1\",\n  moccasin: \"#ffe4b5\",\n  navajowhite: \"#ffdead\",\n  navy: \"#000080\",\n  oldlace: \"#fdf5e6\",\n  olive: \"#808000\",\n  olivedrab: \"#6b8e23\",\n  orange: \"#ffa500\",\n  orangered: \"#ff4500\",\n  orchid: \"#da70d6\",\n  palegoldenrod: \"#eee8aa\",\n  palegreen: \"#98fb98\",\n  paleturquoise: \"#afeeee\",\n  palevioletred: \"#db7093\",\n  papayawhip: \"#ffefd5\",\n  peachpuff: \"#ffdab9\",\n  peru: \"#cd853f\",\n  pink: \"#ffc0cb\",\n  plum: \"#dda0dd\",\n  powderblue: \"#b0e0e6\",\n  purple: \"#800080\",\n  rebeccapurple: \"#663399\",\n  red: \"#ff0000\",\n  rosybrown: \"#bc8f8f\",\n  royalblue: \"#4169e1\",\n  saddlebrown: \"#8b4513\",\n  salmon: \"#fa8072\",\n  sandybrown: \"#f4a460\",\n  seagreen: \"#2e8b57\",\n  seashell: \"#fff5ee\",\n  sienna: \"#a0522d\",\n  silver: \"#c0c0c0\",\n  skyblue: \"#87ceeb\",\n  slateblue: \"#6a5acd\",\n  slategray: \"#708090\",\n  slategrey: \"#708090\",\n  snow: \"#fffafa\",\n  springgreen: \"#00ff7f\",\n  steelblue: \"#4682b4\",\n  tan: \"#d2b48c\",\n  teal: \"#008080\",\n  thistle: \"#d8bfd8\",\n  tomato: \"#ff6347\",\n  turquoise: \"#40e0d0\",\n  violet: \"#ee82ee\",\n  wheat: \"#f5deb3\",\n  white: \"#ffffff\",\n  whitesmoke: \"#f5f5f5\",\n  yellow: \"#ffff00\",\n  yellowgreen: \"#9acd32\"\n};\nfunction w(r) {\n  const e = r.trim().toLowerCase();\n  if (e.startsWith(\"#\"))\n    return u(e);\n  if (e.startsWith(\"rgb\"))\n    return y(e);\n  if (e.startsWith(\"hsl\"))\n    return k(e);\n  if (b[e])\n    return I(e);\n  throw new Error(`Unsupported color format: ${r}`);\n}\nfunction u(r) {\n  const e = r.slice(1);\n  if (e.length < 3) throw new Error(`Invalid hex color format: ${r}`);\n  let a, f, n, i = 1;\n  if (e.length <= 4) {\n    if (typeof e[0] != \"string\") throw new Error(`Invalid hex color format: ${r}`);\n    if (typeof e[1] != \"string\") throw new Error(`Invalid hex color format: ${r}`);\n    if (typeof e[2] != \"string\") throw new Error(`Invalid hex color format: ${r}`);\n    if (a = parseInt(e[0] + e[0], 16), f = parseInt(e[1] + e[1], 16), n = parseInt(e[2] + e[2], 16), e.length === 4) {\n      if (typeof e[3] != \"string\") throw new Error(`Invalid hex color format: ${r}`);\n      i = parseInt(e[3] + e[3], 16) / 255;\n    }\n  } else if (e.length === 6)\n    a = parseInt(e.slice(0, 2), 16), f = parseInt(e.slice(2, 4), 16), n = parseInt(e.slice(4, 6), 16);\n  else if (e.length === 8)\n    a = parseInt(e.slice(0, 2), 16), f = parseInt(e.slice(2, 4), 16), n = parseInt(e.slice(4, 6), 16), i = parseInt(e.slice(6, 8), 16) / 255;\n  else\n    throw new Error(`Invalid hex color format: ${r}`);\n  return { r: a, g: f, b: n, a: i };\n}\nfunction y(r) {\n  const e = r.match(/rgba?\\(([^)]+)\\)/);\n  if (!e)\n    throw new Error(`Invalid RGB color format: ${r}`);\n  if (typeof e[1] != \"string\") throw new Error(\"Invalid RGB color format: \" + r);\n  const a = e[1].trim().split(/[ ,/]+/).map((s) => s.trim());\n  if (a.length < 3 || a.length > 4)\n    throw new Error(`Invalid RGB color format: ${r}`);\n  if (typeof a[0] != \"string\" || typeof a[1] != \"string\" || typeof a[2] != \"string\")\n    throw new Error(`Invalid RGB color format: ${r}`);\n  const f = h(a[0], 255), n = h(a[1], 255), i = h(a[2], 255);\n  let t = 1;\n  return a.length === 4 && typeof a[3] == \"string\" && (t = m(a[3], 1)), { r: f, g: n, b: i, a: t };\n}\nfunction k(r) {\n  const e = r.match(/hsla?\\(([^)]+)\\)/);\n  if (!e)\n    throw new Error(`Invalid HSL color format: ${r}`);\n  if (typeof e[1] != \"string\") throw new Error(\"Invalid RGB color format: \" + r);\n  const a = e[1].trim().split(/[ ,/]+/).map((o) => o.trim());\n  if (a.length < 3 || a.length > 4)\n    throw new Error(`Invalid HSL color format: ${r}`);\n  if (typeof a[0] != \"string\" || typeof a[1] != \"string\" || typeof a[2] != \"string\")\n    throw new Error(`Invalid HSL color format: ${r}`);\n  const f = parseFloat(a[0]) / 360, n = parseFloat(a[1].replace(\"%\", \"\")) / 100, i = parseFloat(a[2].replace(\"%\", \"\")) / 100;\n  let t = 1;\n  a.length === 4 && typeof a[3] == \"string\" && (t = m(a[3], 1));\n  const { r: s, g: c, b: d } = v(f, n, i);\n  return { r: s, g: c, b: d, a: t };\n}\nfunction h(r, e) {\n  return r.includes(\"%\") ? Math.round(parseFloat(r.replace(\"%\", \"\")) / 100 * e) : Math.min(e, Math.max(0, Math.round(parseFloat(r))));\n}\nfunction m(r, e) {\n  return r.includes(\"%\") ? parseFloat(r.replace(\"%\", \"\")) / 100 * e : Math.min(e, Math.max(0, parseFloat(r)));\n}\nfunction v(r, e, a) {\n  let f, n, i;\n  if (e === 0)\n    f = n = i = a;\n  else {\n    const t = (d, o, l) => (l < 0 && (l += 1), l > 1 && (l -= 1), l < 0.16666666666666666 ? d + (o - d) * 6 * l : l < 0.5 ? o : l < 0.6666666666666666 ? d + (o - d) * (0.6666666666666666 - l) * 6 : d), s = a < 0.5 ? a * (1 + e) : a + e - a * e, c = 2 * a - s;\n    f = t(c, s, r + 1 / 3), n = t(c, s, r), i = t(c, s, r - 1 / 3);\n  }\n  return {\n    r: Math.round(f * 255),\n    g: Math.round(n * 255),\n    b: Math.round(i * 255)\n  };\n}\nfunction I(r) {\n  return b[r] ? u(b[r]) : null;\n}\nconst $ = (r, e) => {\n  const a = r.map((t) => typeof t == \"string\" ? w(t) : t);\n  if (a.length === 0)\n    throw new Error(\"Colors array cannot be empty\");\n  if (e <= 0)\n    throw new Error(\"Output size must be greater than 0\");\n  if (e === 1) {\n    if (a[0])\n      return [{ r: a[0].r, g: a[0].g, b: a[0].b, a: a[0].a }];\n    throw new Error(\"Colors array cannot be empty\");\n  }\n  if (a.length === 1) {\n    const t = a[0];\n    if (typeof t < \"u\")\n      return Array(e).fill(null).map(() => ({ r: t.r, g: t.g, b: t.b, a: t.a }));\n    throw new Error(\"Colors array cannot be empty\");\n  }\n  const f = [], n = a.length - 1, i = (e - 1) / n;\n  for (let t = 0; t < e; t++) {\n    const s = Math.min(\n      Math.floor(t / i),\n      n - 1\n    ), c = t / i - s, d = Math.min(c, 1), o = a[s], l = a[s + 1];\n    if (o && l) {\n      const p = {\n        r: Math.round(o.r + (l.r - o.r) * d),\n        g: Math.round(o.g + (l.g - o.g) * d),\n        b: Math.round(o.b + (l.b - o.b) * d),\n        a: o.a + (l.a - o.a) * d\n      };\n      f.push(p);\n    }\n  }\n  return f;\n};\nfunction E(r) {\n  return `rgba(${r.r}, ${r.g}, ${r.b}, ${r.a})`;\n}\nconst g = (r) => {\n  const e = Math.round(Math.max(0, Math.min(255, r))).toString(16);\n  return e.length === 1 ? \"0\" + e : e;\n};\nfunction C(r) {\n  const e = g(r.r), a = g(r.g), f = g(r.b);\n  if (r.a === 1)\n    return `#${e}${a}${f}`;\n  const n = g(r.a * 255);\n  return `#${e}${a}${f}${n}`;\n}\nexport {\n  $ as fadeColors,\n  C as getCssHexColor,\n  E as getCssRgbaColor\n};\n//# sourceMappingURL=color-fader.js.map\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { fadeColors, type RgbaColor } from 'color-fader';\n\n/**\n * Algorithm that explains Doom Fire is talked about here:\n * https://fabiensanglard.net/doom_fire_psx/\n */\n\n/**\n * Gets an index into the 1D array that represents the fire.\n *\n * @param x {number} X position.\n * @param y {number} Y position.\n * @param width {number} Width of the fire.\n */\nconst getPixelIndex = (x: number, y: number, width: number) => y * width + x;\n\n/**\n * Takes in an existing fireBuffer and creates the next iteration\n *\n * @param fireBuffer {number[]} 1D array representing a 2D plane. Top-left pixel is at array index zero\n *   and bottom-right pixel is at index height*width-1.\n * @param width {number} Width of the fire in pixels.\n * @param height {number} Height of hte fire in pixels.\n * @param maxIntensity {number} Number indicating the intensity. Higher the number, higher the intensity. Max height of\n *   the fire is the max intensity.\n * @param fireDecay\n * @param fireEnabled {boolean} Toggling on/off leads to a mini animation.\n * @param mousePos {{ x: number; y: number } | null} Mouse position in fire coordinates\n * @param fireRadius {number} Size of the fire source\n * @param burningPixels\n * @oaram burningPixels {Set<string>}\n */\nfunction updateFire(\n  fireBuffer: number[] | null,\n  width: number,\n  height: number,\n  maxIntensity: number,\n  fireDecay: number,\n  fireEnabled: boolean = true,\n  mousePos: { x: number; y: number } | null = null,\n  fireRadius: number,\n  burningPixels: Set<string>,\n) {\n  if (!fireBuffer) return [];\n\n  const newFireBuffer = Array.from(fireBuffer);\n\n  /**\n   * We do averages here because without taking average the fire will\n   * drift slightly to the left. This is because pixels are processed\n   * left-to-right and each pixel writes to a target position.\n   * When multiple pixels write to the same position, the last writes\n   * wins. So the average approach is aimed at getting rid of this bias.\n   */\n\n  // Track contributions for averaging\n  const contributionCounts = new Array(width * height).fill(0);\n  const contributionSums = new Array(width * height).fill(0);\n\n  for (let y = 0; y < height - 1; y++) {\n    for (let x = 0; x < width; x++) {\n      const belowPixelIndex = getPixelIndex(x, y + 1, width);\n      const fireIntensity = fireBuffer[belowPixelIndex];\n\n      const randomDecay = Math.floor(Math.random() * fireDecay);\n      const randomWind = Math.floor(Math.random() * 3) - 1;\n\n      const newIntensity = Math.max(0, fireIntensity - randomDecay);\n      const targetX = Math.max(0, Math.min(width - 1, x + randomWind));\n      const targetIndex = getPixelIndex(targetX, y, width);\n\n      // Accumulate values for averaging\n      contributionSums[targetIndex] += newIntensity;\n      contributionCounts[targetIndex]++;\n    }\n  }\n\n  // Average out all contributions\n  for (let i = 0; i < height - 1; i++) {\n    for (let j = 0; j < width; j++) {\n      const index = getPixelIndex(j, i, width);\n      if (contributionCounts[index] > 0) {\n        newFireBuffer[index] = Math.round(contributionSums[index] / contributionCounts[index]);\n      }\n    }\n  }\n\n  // Bottom row\n  for (let i = height - 1; i < height; i++) {\n    for (let j = 0; j < width; j++) {\n      const index = getPixelIndex(j, i, width);\n      newFireBuffer[index] = 0;\n    }\n  }\n\n  // Ensure burning pixels stay burning\n  for (const pixel of burningPixels) {\n    const [x, y] = pixel.split(',').map(Number);\n    const index = getPixelIndex(x, y, width);\n    newFireBuffer[index] = maxIntensity;\n  }\n\n  // Fire source follows mouse - ensure the fire remains strong around it\n  // Point of this section is to create a fire source that emanates from the mouse position\n  if (fireEnabled && mousePos) {\n    for (let dy = -fireRadius; dy <= fireRadius; dy++) {\n      for (let dx = -fireRadius; dx <= fireRadius; dx++) {\n        const distance = Math.sqrt(dx * dx + dy * dy);\n        if (distance <= fireRadius) {\n          const x = Math.round(mousePos.x + dx);\n          const y = Math.round(mousePos.y + dy);\n\n          if (x >= 0 && x < width && y >= 0 && y < height) {\n            // Use exponential falloff for more natural decay\n            const normalizedDistance = distance / fireRadius;\n            const falloff = Math.pow(1 - normalizedDistance, 2); // Quadratic falloff\n\n            // Add randomness to create more natural-looking fire\n            const randomVariation = 0.5 + Math.random() * 0.5;\n            const intensity = maxIntensity * falloff * randomVariation;\n\n            const index = getPixelIndex(x, y, width);\n            // blend with existing fire\n            newFireBuffer[index] = Math.max(newFireBuffer[index], Math.floor(intensity));\n          }\n        }\n      }\n    }\n  }\n\n  return newFireBuffer;\n}\n\n/**\n * Draws the fires onto the canvas.\n *\n * @param canvas {HTMLCanvasElement} Canvas that will hold the fire.\n * @param ctx {CanvasRenderingContext2D} Canvas context of the canvas.\n * @param fireBuffer {number[]} 1D array representing a 2D plane. Top-left pixel is at array index zero\n *   and bottom-right pixel is at index height*width-1.\n * @param firePalette {RgbaColor[]} An array of color values that map to a fire intensity.\n * @param fireWidth {number} Width of fire.\n * @param fireHeight {number} Height of fire.\n */\nfunction renderFire(\n  canvas: HTMLCanvasElement | null,\n  ctx: CanvasRenderingContext2D | null,\n  fireBuffer: number[],\n  firePalette: RgbaColor[],\n  fireWidth: number,\n  fireHeight: number,\n) {\n  if (!canvas || !ctx) return;\n\n  const imageData = ctx.createImageData(fireWidth, fireHeight);\n\n  for (let y = 0; y < fireHeight; y++) {\n    for (let x = 0; x < fireWidth; x++) {\n      const pixelIndex = getPixelIndex(x, y, fireWidth);\n      const fireIntensity = Math.min(fireBuffer[pixelIndex], firePalette.length - 1);\n\n      const color = firePalette[fireIntensity];\n      if (!color) continue;\n\n      const imageIndex = (y * fireWidth + x) * 4;\n      imageData.data[imageIndex] = color.r;\n      imageData.data[imageIndex + 1] = color.g;\n      imageData.data[imageIndex + 2] = color.b;\n      imageData.data[imageIndex + 3] = color.a * 255;\n    }\n  }\n\n  const tempCanvas = document.createElement('canvas');\n  const tempCtx = tempCanvas.getContext('2d');\n  tempCanvas.width = fireWidth;\n  tempCanvas.height = fireHeight;\n\n  if (!tempCtx) return;\n\n  tempCtx.putImageData(imageData, 0, 0);\n\n  // Scale up the image with pixelated rendering\n  ctx.imageSmoothingEnabled = false;\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.drawImage(tempCanvas, 0, 0, canvas.width, canvas.height);\n}\n\nfunction initFire(width: number, height: number, maxIntensity: number = 36): number[] {\n  return Array(width * height).fill(0);\n}\n\nconst defaultFireColors = ['#771f0700', '#771f07', '#DF4F07', '#cf770f', '#BF9F1F', '#B7B72F', '#ffffff'];\n\nfunction usePrevious(value: number) {\n  const ref = useRef<number>(undefined);\n\n  useEffect(() => {\n    ref.current = value;\n  }, [value]);\n\n  return ref.current;\n}\n\nexport interface DoomFireTorchProps {\n  height?: number;\n  width?: number;\n  pixelSize?: number;\n  fireColors?: string[];\n  fireEnabled?: boolean;\n  fireStrength?: number;\n  fireRadius?: number;\n  flammable?: Set<string>;\n  fireDecay?: number;\n}\n\n/**\n *\n * @param height {number} Height of canvas in pixels.\n * @param width {number} Width of canvas in pixels.\n * @param pixelSize {number} How big a pixel should be in the output. Larger means more pixelated.\n * @param fireColors {string[]} Array of CSS color values.\n * @param fireEnabled {boolean} If the fire is on.\n * @param fireStrength {number} Number between 0 and 1, represents the \"strength\" of the fire.\n * @param fireRadius {number} Radius of fire.\n * @param flammable {String<string>} Pixels that can catch fire.\n * @param fireDecay {number} How fast the fire decays\n * @constructor\n */\nconst DoomFireTorch = ({\n  height = 300,\n  width = 400,\n  pixelSize = 2,\n  fireColors = defaultFireColors,\n  fireEnabled = true,\n  fireStrength = 0.75,\n  fireRadius = 7,\n  flammable = new Set(),\n  fireDecay = 3,\n}: DoomFireTorchProps) => {\n  const canvasRef = React.useRef<HTMLCanvasElement>(null);\n  const [mousePos, setMousePos] = useState<{ x: number; y: number } | null>(null);\n\n  const fireWidth = Math.ceil(width / pixelSize);\n  const fireHeight = Math.ceil(height / pixelSize);\n\n  const prevStrength = usePrevious(fireStrength);\n  const prevFireWidth = usePrevious(fireWidth);\n  const prevFireHeight = usePrevious(fireHeight);\n\n  const fireBufferRef = useRef<number[]>(null);\n  const burningPixelsRef = useRef<Set<string>>(new Set());\n\n  const flamePalette: RgbaColor[] = useMemo(() => {\n    const fadedColors = fadeColors(fireColors ?? defaultFireColors, fireHeight * fireStrength);\n    if (fireStrength !== prevStrength || prevFireWidth !== fireWidth || prevFireHeight !== fireHeight) {\n      fireBufferRef.current = initFire(fireWidth, fireHeight, fadedColors.length - 1);\n    }\n    return fadedColors;\n  }, [fireColors, fireWidth, fireHeight, fireStrength, prevStrength, prevFireWidth, prevFireHeight]);\n\n  useEffect(() => {\n    if (!fireEnabled) {\n      burningPixelsRef.current = new Set<string>();\n    }\n  }, [fireEnabled]);\n\n  // Handle mouse/touch movement\n  useEffect(() => {\n    const canvas = canvasRef.current;\n    if (!canvas) return;\n\n    const updateMousePosition = (clientX: number, clientY: number) => {\n      const rect = canvas.getBoundingClientRect();\n      const x = Math.floor((clientX - rect.left) / pixelSize);\n      const y = Math.floor((clientY - rect.top) / pixelSize);\n\n      const pixelSets = [\n        `${x},${y}`,\n        `${x - 1},${y}`,\n        `${x},${y - 1}`,\n        `${x + 1},${y}`,\n        `${x},${y + 1}`,\n        `${x - 1},${y - 1}`,\n        `${x + 1},${y + 1}`,\n        `${x - 1},${y + 1}`,\n        `${x + 1},${y - 1}`,\n      ];\n\n      pixelSets.forEach((pixelSet) => {\n        if (flammable.has(pixelSet)) {\n          burningPixelsRef.current.add(pixelSet);\n        }\n      });\n\n      setMousePos({ x, y });\n    };\n\n    const handleMouseMove = (e: MouseEvent) => {\n      updateMousePosition(e.clientX, e.clientY);\n    };\n\n    const handleTouchMove = (e: TouchEvent) => {\n      e.preventDefault();\n      if (e.touches.length > 0) {\n        const touch = e.touches[0];\n        updateMousePosition(touch.clientX, touch.clientY);\n      }\n    };\n\n    const handleMouseLeave = () => {\n      setMousePos(null);\n    };\n\n    const handleTouchEnd = () => {\n      setMousePos(null);\n    };\n\n    canvas.addEventListener('mousemove', handleMouseMove);\n    canvas.addEventListener('mouseleave', handleMouseLeave);\n    canvas.addEventListener('touchmove', handleTouchMove, { passive: false });\n    canvas.addEventListener('touchend', handleTouchEnd);\n\n    return () => {\n      canvas.removeEventListener('mousemove', handleMouseMove);\n      canvas.removeEventListener('mouseleave', handleMouseLeave);\n      canvas.removeEventListener('touchmove', handleTouchMove);\n      canvas.removeEventListener('touchend', handleTouchEnd);\n    };\n  }, [pixelSize]);\n\n  /**\n   * This effect governs the animation.\n   */\n  useEffect(() => {\n    let animationFrameId: number;\n\n    const animate = () => {\n      if (!fireBufferRef.current) return;\n\n      fireBufferRef.current = updateFire(\n        fireBufferRef.current,\n        fireWidth,\n        fireHeight,\n        flamePalette.length - 1,\n        fireDecay,\n        fireEnabled,\n        mousePos,\n        fireRadius,\n        burningPixelsRef.current,\n      );\n      renderFire(\n        canvasRef.current,\n        canvasRef.current?.getContext('2d') || null,\n        fireBufferRef.current,\n        flamePalette,\n        fireWidth,\n        fireHeight,\n      );\n      animationFrameId = window.requestAnimationFrame(animate);\n    };\n\n    animationFrameId = window.requestAnimationFrame(animate);\n\n    // Cleanup\n    return () => {\n      cancelAnimationFrame(animationFrameId);\n    };\n  }, [fireWidth, fireHeight, flamePalette, fireEnabled, mousePos, fireRadius, fireDecay]);\n\n  return (\n    <canvas\n      id=\"doomfire\"\n      width={`${width}px`}\n      height={`${height}px`}\n      ref={canvasRef}\n      style={{ touchAction: 'none', cursor: fireEnabled ? 'none' : 'default' }}\n    />\n  );\n};\n\nexport { DoomFireTorch };\n","import React, { useEffect, useMemo, useRef } from 'react';\nimport { fadeColors, type RgbaColor } from 'color-fader';\n\n/**\n * Algorithm that explains Doom Fire is talked about here:\n * https://fabiensanglard.net/doom_fire_psx/\n */\n\n/**\n * Gets an index into the 1D array that represents the fire.\n *\n * @param x {number} X position.\n * @param y {number} Y position.\n * @param width {number} Width of the fire.\n */\nconst getPixelIndex = (x: number, y: number, width: number) => y * width + x;\n\n/**\n * Takes in an existing fireBuffer and creates the next iteration\n *\n * @param fireBuffer {number[]} 1D array representing a 2D plane. Top-left pixel is at array index zero\n *   and bottom-right pixel is at index height*width-1.\n * @param width {number} Width of the fire in pixels.\n * @param height {number} Height of hte fire in pixels.\n * @param maxIntensity {number} Number indicating the intensity. Higher the number, higher the intensity. Max height of\n *   the fire is the max intensity.\n * @param fireEnabled {boolean} Toggling on/off leads to a mini animation.\n */\nfunction updateFire(\n  fireBuffer: number[] | null,\n  width: number,\n  height: number,\n  maxIntensity: number,\n  fireEnabled: boolean = true,\n) {\n  if (!fireBuffer) return [];\n\n  const newFireBuffer = Array.from(fireBuffer);\n  for (let y = 0; y < height - 1; y++) {\n    for (let x = 0; x < width; x++) {\n      const pixelIndex = getPixelIndex(x, y, width);\n      const belowPixelIndex = getPixelIndex(x, y + 1, width);\n\n      const fireIntensity = fireBuffer[belowPixelIndex];\n\n      // Add randomness to create flickering effect\n      const randomDecay = Math.floor(Math.random() * 3); // 0, 1, or 2\n      const randomWind = Math.floor(Math.random() * 3) - 1; // -1, 0, or 1\n\n      const newIntensity = fireIntensity - randomDecay;\n      const targetX = Math.max(0, Math.min(width - 1, x + randomWind));\n      const targetIndex = getPixelIndex(targetX, y, width);\n\n      newFireBuffer[targetIndex] = Math.max(0, newIntensity);\n    }\n  }\n\n  for (let x = 0; x < width; x++) {\n    if (fireEnabled) {\n      // Maintain fire source at bottom if fire is enabled\n      newFireBuffer[getPixelIndex(x, height - 1, width)] = maxIntensity;\n    } else {\n      // extinguish the fire by killing the bottom source\n      newFireBuffer[getPixelIndex(x, height - 1, width)] = Math.max(\n        0,\n        newFireBuffer[getPixelIndex(x, height - 1, width)] - Math.floor(Math.random() * 3),\n      );\n    }\n  }\n\n  return newFireBuffer;\n}\n\n/**\n * Draws the fires onto the canvas.\n *\n * @param canvas {HTMLCanvasElement} Canvas that will hold the fire.\n * @param ctx {CanvasRenderingContext2D} Canvas context of the canvas.\n * @param fireBuffer {number[]} 1D array representing a 2D plane. Top-left pixel is at array index zero\n *   and bottom-right pixel is at index height*width-1.\n * @param firePalette {RgbaColor[]} An array of color values that map to a fire intensity.\n * @param fireWidth {number} Width of fire.\n * @param fireHeight {number} Height of fire.\n */\nfunction renderFire(\n  canvas: HTMLCanvasElement | null,\n  ctx: CanvasRenderingContext2D | null,\n  fireBuffer: number[],\n  firePalette: RgbaColor[],\n  fireWidth: number,\n  fireHeight: number,\n) {\n  if (!canvas || !ctx) return;\n  if (!fireWidth || !fireHeight) return;\n\n  const imageData = ctx.createImageData(fireWidth, fireHeight);\n\n  for (let y = 0; y < fireHeight; y++) {\n    for (let x = 0; x < fireWidth; x++) {\n      const pixelIndex = getPixelIndex(x, y, fireWidth);\n      const fireIntensity = Math.min(fireBuffer[pixelIndex], firePalette.length - 1);\n\n      const color = firePalette[fireIntensity];\n      if (!color) continue;\n\n      const imageIndex = (y * fireWidth + x) * 4;\n      imageData.data[imageIndex] = color.r;\n      imageData.data[imageIndex + 1] = color.g;\n      imageData.data[imageIndex + 2] = color.b;\n      imageData.data[imageIndex + 3] = color.a * 255;\n    }\n  }\n\n  // Create temporary canvas for scaling\n  const tempCanvas = document.createElement('canvas');\n  const tempCtx = tempCanvas.getContext('2d');\n  tempCanvas.width = fireWidth;\n  tempCanvas.height = fireHeight;\n\n  if (!tempCtx) return;\n  if (!canvas.width || !canvas.height) return;\n  if (!tempCanvas.width || !tempCanvas.height) return;\n\n  tempCtx.putImageData(imageData, 0, 0);\n\n  // Scale up the image with pixelated rendering\n  ctx.imageSmoothingEnabled = false;\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.drawImage(tempCanvas, 0, 0, canvas.width, canvas.height);\n}\n\nfunction initFire(width: number, height: number, maxIntensity: number = 36): number[] {\n  const fireBuffer = Array(width * height).fill(0);\n\n  // While fire is on, bottom row should be at maximum fire intensity\n  for (let x = 0; x < width; x++) {\n    fireBuffer[getPixelIndex(x, height - 1, width)] = maxIntensity;\n  }\n  return fireBuffer;\n}\n\nconst defaultFireColors = ['#771f0700', '#771f07', '#DF4F07', '#cf770f', '#BF9F1F', '#B7B72F', '#ffffff'];\n\nfunction usePrevious(value: number) {\n  const ref = useRef<number>(undefined);\n\n  useEffect(() => {\n    ref.current = value; // Update the ref's current value after every render\n  }, [value]); // Rerun this effect only when 'value' changes\n\n  return ref.current; // Return the value from the previous render\n}\n\nexport interface DoomFireProps {\n  height?: number;\n  width?: number;\n  pixelSize?: number;\n  fireColors?: string[];\n  fireEnabled?: boolean;\n  fireStrength?: number;\n}\n\n/**\n *\n * @param height {number} Height of canvas in pixels.\n * @param width {number} Width of canvas in pixels.\n * @param pixelSize {number} How big a pixel should be in the output. Larger means more pixelated.\n * @param fireColors {string[]} Array of CSS color values.\n * @param fireEnabled {boolean} If the fire is on.\n * @param fireStrength {number} Number between 0 and 1, represents the \"strength\" of the fire.\n * @constructor\n */\nconst DoomFire = ({\n  height = 300,\n  width = 400,\n  pixelSize = 2,\n  fireColors = defaultFireColors,\n  fireEnabled = true,\n  fireStrength = 0.75,\n}: DoomFireProps) => {\n  const canvasRef = React.useRef<HTMLCanvasElement>(null);\n\n  const fireWidth = Math.ceil(width / pixelSize);\n  const fireHeight = Math.ceil(height / pixelSize);\n\n  const prevStrength = usePrevious(fireStrength);\n  const prevFireWidth = usePrevious(fireWidth);\n  const prevFireHeight = usePrevious(fireHeight);\n\n  const fireBufferRef = useRef<number[]>(null);\n\n  const flamePalette: RgbaColor[] = useMemo(() => {\n    const fadedColors = fadeColors(fireColors ?? defaultFireColors, fireHeight * fireStrength);\n    if (fireStrength !== prevStrength || prevFireWidth !== fireWidth || prevFireHeight !== fireHeight) {\n      fireBufferRef.current = initFire(fireWidth, fireHeight, fadedColors.length - 1);\n    }\n    return fadedColors;\n  }, [fireColors, fireWidth, fireHeight, fireStrength, prevStrength, prevFireWidth, prevFireHeight]);\n\n  /**\n   * This effect governs the animation.\n   */\n  useEffect(() => {\n    let animationFrameId: number;\n\n    const animate = () => {\n      fireBufferRef.current = updateFire(\n        fireBufferRef.current,\n        fireWidth,\n        fireHeight,\n        flamePalette.length - 1,\n        fireEnabled,\n      );\n      renderFire(\n        canvasRef.current,\n        canvasRef.current?.getContext('2d') || null,\n        fireBufferRef.current,\n        flamePalette,\n        fireWidth,\n        fireHeight,\n      );\n      animationFrameId = window.requestAnimationFrame(animate);\n    };\n\n    animationFrameId = window.requestAnimationFrame(animate);\n\n    // Cleanup\n    return () => {\n      cancelAnimationFrame(animationFrameId);\n    };\n  }, [fireWidth, fireHeight, flamePalette, fireEnabled]);\n\n  return <canvas id=\"doomfire\" width={`${width}px`} height={`${height}px`} ref={canvasRef} />;\n};\n\nexport { DoomFire };\n","import React from 'react';\n\nexport interface GhostAltSVGProps {\n  width: number;\n  height: number;\n  style?: React.CSSProperties;\n  className?: string;\n  onClick?: () => void;\n  onMouseEnter?: () => void;\n  onMouseLeave?: () => void;\n  onFocus?: () => void;\n  onBlur?: () => void;\n  onKeyDown?: (event: React.KeyboardEvent<SVGSVGElement>) => void;\n}\n\n/**\n * @component\n * A component that returns an SVG component that can be used with several of the components in this library.\n * Original SVG was CC0 (source: https://www.svgrepo.com/svg/400277/ghost)\n */\nfunction GhostAltSVG({\n  width,\n  height,\n  style = {},\n  className = '',\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  onFocus,\n  onBlur,\n  onKeyDown,\n}: GhostAltSVGProps) {\n  return (\n    <svg\n      width={`${width}`}\n      height={`${height}`}\n      style={style}\n      viewBox=\"0 0 72 72\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n      aria-hidden=\"true\"\n      role=\"img\"\n      className={`iconify iconify--fxemoji ${className}`}\n      preserveAspectRatio=\"xMidYMid meet\"\n      onClick={onClick}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      onFocus={onFocus}\n      onBlur={onBlur}\n      onKeyDown={onKeyDown}\n    >\n      <path\n        fill=\"#D1CFC3\"\n        d=\"M22.541 39.677c-8.687 0-16.824-3.548-21.238-9.26a5.384 5.384 0 1 1 8.519-6.584c2.383 3.083 7.375 5.075 12.72 5.075a5.385 5.385 0 0 1-.001 10.769zm48.323-9.26a5.384 5.384 0 1 0-8.519-6.584c-2.383 3.083-7.375 5.075-12.72 5.075a5.383 5.383 0 1 0 0 10.768c8.687.001 16.825-3.546 21.239-9.259z\"\n      />\n      <path\n        fill=\"#E5E4DF\"\n        d=\"M60.38 68.154a4.633 4.633 0 0 1-3.438 1.429c-1.786 0-3.454-.941-4.462-2.513c-.562-.874-1.437-1.383-2.399-1.397c-.925.013-1.797.522-2.359 1.397c-1.026 1.597-2.652 2.513-4.462 2.513h-.117c-1.786 0-3.454-.941-4.462-2.513c-.562-.874-1.437-1.383-2.399-1.397c-.925.013-1.797.522-2.359 1.397c-1.026 1.597-2.655 2.513-4.465 2.513a.735.735 0 0 0-.115 0c-1.786 0-3.454-.941-4.462-2.513c-.562-.874-1.437-1.383-2.399-1.397c-.925.013-1.799.522-2.359 1.394c-1.026 1.599-2.655 2.516-4.465 2.516c-.075 0-.152-.008-.227-.024c-1.303-.056-2.431-.576-3.212-1.405c-.608-.642-1.309-1.783-1.205-3.577c.138-2.402 4.829-40.319 5.078-42.323c.057-11.085 9.087-20.086 20.186-20.086c11.097 0 20.129 8.999 20.188 20.083c.247 1.986 4.98 39.921 5.118 42.326c.105 1.794-.596 2.937-1.204 3.577z\"\n      />\n      <path\n        fill=\"#2B3B47\"\n        d=\"M29.464 22.523v3.656h-.005c0 .005.005.007.005.01a2.602 2.602 0 0 1-5.202 0v-.01h-.011v-3.656h.031a2.595 2.595 0 0 1 2.581-2.38a2.59 2.59 0 0 1 2.575 2.38h.026zm18.708-1.126c-.181-2.103-1.921-3.758-4.066-3.758c-2.151 0-3.892 1.655-4.075 3.758h-.049v5.773H40v.016c0 2.267 1.84 4.107 4.107 4.107s4.107-1.84 4.107-4.107c0-.004-.009-.007-.009-.016h.009v-5.773h-.042zm1.607 12.514c-.052-.101-.129-.181-.239-.193c-1.108-.11-25.417-.106-26.522 0a.299.299 0 0 0-.139.057c-.006.004-.014.003-.02.008a.39.39 0 0 0-.082.51l.241.386a18.612 18.612 0 0 0 1.658 2.262a20.765 20.765 0 0 0 1.659 1.728c1.101 1.022 2.213 1.766 3.315 2.412c.45.264.655.324.906.43c.018-.013.046-.024.065-.036c1.796.874 3.725 1.375 5.746 1.375c1.982 0 3.876-.482 5.643-1.324l.004.002c.298-.138.597-.258.898-.423c1.104-.637 2.209-1.39 3.314-2.414a19.706 19.706 0 0 0 1.655-1.737a18.424 18.424 0 0 0 1.66-2.274l.241-.388a.405.405 0 0 0 .056-.177a.369.369 0 0 0-.059-.204z\"\n      />\n      <path\n        fill=\"#FF473E\"\n        d=\"M42.35 33.637v7.606c0 3.358-2.716 6.081-6.066 6.081a6.078 6.078 0 0 1-6.077-6.081v-7.606H42.35z\"\n      />\n      <path\n        fill=\"#2B3B47\"\n        d=\"M29.619 36.086v-.831c0-2.12-5.67-1.618 6.228-1.618s7.091-.503 7.091 1.618v.831H29.619zm7.601 8.151v-6.396a.941.941 0 0 0-1.882 0v6.396a.942.942 0 0 0 1.882 0z\"\n      />\n    </svg>\n  );\n}\n\nexport { GhostAltSVG };\n","import React, { type CSSProperties, useCallback, useEffect, useRef } from 'react';\nimport { SpotLight } from './SpotLight';\n\nexport interface LightsOutProps {\n  size?: number;\n  darkColor?: string;\n  clickToTurnOnLights?: boolean;\n  zIndex?: number;\n  onLightsOnStart?: (() => void) | undefined;\n  onLightsOnEnd?: (() => void) | undefined;\n}\n\nfunction LightsOut({\n  size = 300,\n  darkColor = 'rgba(0,0,0,0.9)',\n  clickToTurnOnLights = true,\n  zIndex = 100000,\n  onLightsOnStart,\n  onLightsOnEnd,\n}: LightsOutProps) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const svgRef = useRef<SVGSVGElement>(null);\n  const northRef = useRef<HTMLDivElement>(null);\n  const eastRef = useRef<HTMLDivElement>(null);\n  const southRef = useRef<HTMLDivElement>(null);\n  const westRef = useRef<HTMLDivElement>(null);\n  const lightsOn = useRef<boolean>(false);\n\n  const darkStyle: CSSProperties = {\n    position: 'fixed',\n    backgroundColor: darkColor,\n    zIndex,\n  };\n  const halfSize = size / 2;\n\n  const setPositions = useCallback(\n    (clientX = 0, clientY = 0) => {\n      const pageWidth = document.documentElement.scrollWidth;\n      const pageHeight = document.documentElement.scrollHeight;\n\n      if (!northRef.current || !eastRef.current || !southRef.current || !westRef.current) return;\n\n      northRef.current.style.top = '0';\n      northRef.current.style.left = '0';\n      northRef.current.style.width = `${pageWidth}px`;\n      northRef.current.style.height = `${Math.max(0, clientY - halfSize)}px`;\n\n      southRef.current.style.top = `${clientY + halfSize}px`;\n      southRef.current.style.left = '0';\n      southRef.current.style.width = `${pageWidth}px`;\n      southRef.current.style.height = `${Math.max(0, pageHeight - (clientY + halfSize))}px`;\n\n      westRef.current.style.top = `${clientY - halfSize}px`;\n      westRef.current.style.left = '0';\n      westRef.current.style.width = `${Math.max(0, clientX - halfSize)}px`;\n      westRef.current.style.height = `${size}px`;\n\n      eastRef.current.style.left = `${clientX + halfSize}px`;\n      eastRef.current.style.top = `${clientY - halfSize}px`;\n      eastRef.current.style.width = `${Math.max(0, pageWidth - (clientX + halfSize))}px`;\n      eastRef.current.style.height = `${size}px`;\n\n      if (!svgRef.current) return;\n\n      svgRef.current.style.left = `${clientX - halfSize}px`;\n      svgRef.current.style.top = `${clientY - halfSize}px`;\n    },\n    [northRef, southRef, westRef, eastRef, svgRef, halfSize, size],\n  );\n\n  useEffect(() => {\n    setPositions();\n  }, [setPositions]);\n\n  useEffect(() => {\n    const handleResize = () => {\n      setPositions(-1000, -1000);\n    };\n\n    window.addEventListener('resize', handleResize);\n\n    return () => {\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [setPositions]);\n\n  const turnLightsOn = useCallback(\n    (evt: React.MouseEvent<SVGSVGElement, MouseEvent>) => {\n      if (onLightsOnStart) onLightsOnStart();\n\n      const cx = evt.clientX;\n      const cy = evt.clientY;\n\n      if (lightsOn.current === true) return;\n      lightsOn.current = true;\n\n      const pageWidth = document.documentElement.scrollWidth;\n      const pageHeight = document.documentElement.scrollHeight;\n\n      let northHeight = cy - halfSize;\n\n      let westWidth = cx - halfSize;\n\n      let eastLeft = cx + halfSize;\n      let eastWidth = pageWidth - (cx + halfSize);\n\n      let southTop = cy + halfSize;\n      let southHeight = pageHeight - (cy + halfSize);\n\n      let svgTop = cy - halfSize;\n      let svgLeft = cx - halfSize;\n      let svgWidth = size;\n      let svgHeight = size;\n\n      // disable pointer-events\n      if (svgRef.current) svgRef.current.style.pointerEvents = 'none';\n      if (northRef.current) northRef.current.style.pointerEvents = 'none';\n      if (eastRef.current) eastRef.current.style.pointerEvents = 'none';\n      if (southRef.current) southRef.current.style.pointerEvents = 'none';\n      if (westRef.current) westRef.current.style.pointerEvents = 'none';\n\n      let count = 0;\n      const countMax = 200;\n      const opacityBreakPoint = 100;\n      const moveSize = 12;\n\n      const timer = setInterval(() => {\n        northHeight -= moveSize;\n        westWidth -= moveSize;\n        eastLeft += moveSize;\n        eastWidth -= moveSize;\n\n        southTop += moveSize;\n        southHeight -= moveSize;\n\n        svgTop -= moveSize;\n        svgLeft -= moveSize;\n        svgWidth += moveSize * 2;\n        svgHeight += moveSize * 2;\n\n        count += 1;\n\n        try {\n          if (count < opacityBreakPoint) {\n            if (!northRef.current || !eastRef.current || !southRef.current || !westRef.current) return;\n\n            northRef.current.style.height = `${Math.max(0, northHeight)}px`;\n\n            eastRef.current.style.top = `${svgTop}px`;\n            eastRef.current.style.height = `${svgHeight}px`;\n            eastRef.current.style.left = `${eastLeft}px`;\n            eastRef.current.style.width = `${Math.max(0, eastWidth)}px`;\n\n            westRef.current.style.top = `${svgTop}px`;\n            westRef.current.style.height = `${svgHeight}px`;\n            westRef.current.style.width = `${Math.max(0, westWidth)}px`;\n\n            southRef.current.style.top = `${southTop}px`;\n            southRef.current.style.height = `${Math.max(0, southHeight)}px`;\n\n            if (!svgRef.current) return;\n\n            svgRef.current.style.top = `${svgTop}px`;\n            svgRef.current.style.left = `${svgLeft}px`;\n            svgRef.current.style.width = `${svgWidth}px`;\n            svgRef.current.style.height = `${svgHeight}px`;\n          } else {\n            const opacity = 1 - (count - opacityBreakPoint) / (countMax - opacityBreakPoint);\n\n            if (!northRef.current || !eastRef.current || !southRef.current || !westRef.current) return;\n            if (!svgRef.current) return;\n\n            svgRef.current.style.opacity = `${opacity}`;\n            northRef.current.style.opacity = `${opacity}`;\n            eastRef.current.style.opacity = `${opacity}`;\n            southRef.current.style.opacity = `${opacity}`;\n            westRef.current.style.opacity = `${opacity}`;\n          }\n        } catch (err) {\n          console.error(err);\n          clearInterval(timer);\n          if (onLightsOnEnd) onLightsOnEnd();\n        }\n\n        if (count >= countMax) {\n          clearInterval(timer);\n          if (onLightsOnEnd) onLightsOnEnd();\n        }\n      }, 10);\n    },\n    [halfSize, size, onLightsOnStart, onLightsOnEnd],\n  );\n\n  useEffect(() => {\n    if (lightsOn.current) return;\n    const onMouseMove = (evt: MouseEvent) => {\n      if (lightsOn.current) return;\n      setPositions(evt.clientX, evt.clientY);\n    };\n    const onKeyDown = (evt: KeyboardEvent) => {\n      if (lightsOn.current) return;\n      if (evt.key === 'Escape') {\n        const clientX = document.documentElement.clientWidth / 2;\n        const clientY = document.documentElement.clientHeight / 2;\n        turnLightsOn({ clientX, clientY } as React.MouseEvent<SVGSVGElement, MouseEvent>);\n      }\n    };\n\n    window.addEventListener('mousemove', onMouseMove, true);\n    if (clickToTurnOnLights) {\n      window.addEventListener('keydown', onKeyDown, true);\n    }\n    // eslint-disable-next-line consistent-return\n    return () => {\n      window.removeEventListener('mousemove', onMouseMove, true);\n      if (clickToTurnOnLights) {\n        window.removeEventListener('keydown', onKeyDown, true);\n      }\n    };\n  }, [halfSize, lightsOn, turnLightsOn, clickToTurnOnLights, setPositions]);\n\n  return (\n    <div ref={containerRef}>\n      <div ref={northRef} style={darkStyle} />\n      <div ref={eastRef} style={darkStyle} />\n      <div ref={southRef} style={darkStyle} />\n      <div ref={westRef} style={darkStyle} />\n      <SpotLight\n        ref={svgRef}\n        size={size}\n        zIndex={zIndex}\n        darkColor={darkColor}\n        onClick={clickToTurnOnLights ? turnLightsOn : null}\n      />\n    </div>\n  );\n}\n\nexport { LightsOut };\n"],"names":["GhostSVG","_ref","width","height","_ref$style","style","_ref$className","className","onClick","onMouseEnter","onMouseLeave","onFocus","onBlur","onKeyDown","_ref$ref","ref","ghostStyle","enableBackground","React","createElement","concat","version","id","xmlns","xmlnsXlink","x","y","viewBox","xmlSpace","fill","d","randomIntFromInterval","min","max","Math","floor","random","cssColorLookup","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","goldenrod","gold","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavenderblush","lavender","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","twoColorFade","color1","color2","length","ii","rIncr","r","gIncr","g","bIncr","b","colors","push","parseCSSColor","color","retColor","lookup","parseInt","substring","match","indexOf","matches","console","warn","GhostAnimator","animationTimeMax","distance","container","mouseOver","_ref$Creature","Creature","_ref$index","index","_ref$repeat","repeat","dimensions","basicStyles","useMemo","position","transformOrigin","fontSize","pointerEvents","_useState2","_slicedToArray","useState","canPlayAnimation","setCanPlayAnimation","_useState4","containerStyles","setContainerStyles","controls","useAnimation","_useState6","animationStarted","setAnimationStarted","animationTime","waveKeyFrames","waveAmount","waves","Array","reduce","prev","_toConsumableArray","getInitY","useCallback","rect","_a","current","getBoundingClientRect","round","getAnimationSequence","initY","opacity","transition","duration","ease","times","getOffVariant","useEffect","display","start","timer","setTimeout","window","clearTimeout","GhostComponent","GhostDefault","motion","div","initial","animate","onAnimationComplete","set","defaultGlowOptions","boxShadowOff","boxShadowOn","defaultCreatureOptions","numberOf","Eye","_ref$animationTime","_ref$open","open","_ref$openedClipPath","openedClipPath","_ref$closedClipPath","closedClipPath","_ref$irisColor","irisColor","_ref$eyeBallColor","eyeBallColor","_ref$pupilColor","pupilColor","_ref$pupilSize","pupilSize","_ref$follow","follow","_ref$pupilCoords","pupilCoords","cx","cy","_ref$width","pupilRef","useRef","eyeContainerRef","irisRef","groupRef","eyeMaskId","onMouseMove","evt","pupil","iris","eyeBall","pupilR","baseVal","value","eyeR","bound","left","bottom","clientX","clientY","sqrt","angle","atan2","PI","t","transform","document","addEventListener","removeEventListener","variants","opened","clipPath","closed","mask","eyeLayoutVariants","unfriendly","right","menacing","neutral","StarCrossSVG","pathRef","MagicalTextScaleAnimator","_ref$Adornment","Adornment","_ref$delay","delay","_ref$duration","_ref$opacity","_ref$height","ghostRef","on","scale","animationFillMode","Infinity","off","setPosition","halfWidth","halfHeight","top","setup","variant","onUpdate","latest","exit","onAnimationStart","defaultGetColor","MagicalTextSparkleAnimator","_ref$getColor","getColor","starRef","leftPos","setLeftPos","leftMax","setLeftMax","leftMin","setLeftMin","rotate","leftStart","leftEnd","defaultColors","defaultAdornmentOptions","animationType","SpotLight","size","darkColor","zIndex","lightStyle","cursor","gradientUrl","spotLightState","setSpotLightState","mouseMoveTimer","onSvgClick","lightsOn","stopColor","stop","offset","stroke","strokeWidth","transparent","w","e","trim","toLowerCase","startsWith","u","Error","a","split","map","s","f","h","n","i","m","o","parseFloat","replace","c","l","v","k","I","slice","includes","$","p","getPixelIndex","updateFire","fireBuffer","maxIntensity","fireDecay","fireEnabled","arguments","undefined","mousePos","fireRadius","burningPixels","newFireBuffer","from","contributionCounts","contributionSums","fireIntensity","randomDecay","randomWind","newIntensity","targetX","targetIndex","j","_step","_iterator","_createForOfIteratorHelper","done","_pixel$split$map2","Number","err","dy","dx","normalizedDistance","intensity","pow","defaultFireColors","usePrevious","_ref$pixelSize","pixelSize","_ref$fireColors","fireColors","_ref$fireEnabled","_ref$fireStrength","fireStrength","canvasRef","fireWidth","ceil","fireHeight","prevStrength","prevFireWidth","prevFireHeight","fireBufferRef","flamePalette","fadedColors","fadeColors","initFire","animationFrameId","canvas","ctx","firePalette","imageData","createImageData","pixelIndex","imageIndex","data","tempCanvas","tempCtx","getContext","putImageData","imageSmoothingEnabled","clearRect","drawImage","renderFire","requestAnimationFrame","cancelAnimationFrame","_ref$fireRadius","_ref$flammable","flammable","Set","_ref$fireDecay","setMousePos","burningPixelsRef","updateMousePosition","forEach","pixelSet","has","add","handleMouseMove","handleTouchMove","preventDefault","touches","touch","handleMouseLeave","handleTouchEnd","passive","touchAction","_ref$eyeLayout","eyeLayout","error","_eyeVariant","Object","assign","justifyContent","role","preserveAspectRatio","_ref$glowOptions","glowOptions","_ref$creatureOptions","creatureOptions","_ref$disableFun","disableFun","children","fullGlowOptions","fullCreatureOptions","setMouseOver","creatureRefs","halfCreatureWidth","halfCreatureHeight","_b","newX","newY","rotationAmount","rotation","item","boxShadow","val","key","el","svgStyle","_ref$size","_ref$darkColor","_ref$clickToTurnOnLig","clickToTurnOnLights","_ref$zIndex","onLightsOnStart","onLightsOnEnd","containerRef","svgRef","northRef","eastRef","southRef","westRef","darkStyle","backgroundColor","halfSize","setPositions","pageWidth","documentElement","scrollWidth","pageHeight","scrollHeight","handleResize","turnLightsOn","northHeight","westWidth","eastLeft","eastWidth","southTop","southHeight","svgTop","svgLeft","svgWidth","svgHeight","count","moveSize","setInterval","clearInterval","clientWidth","clientHeight","text","_ref$colors","_ref$textStyle","textStyle","_ref$fadeText","fadeText","_ref$showAdornments","showAdornments","adornmentOptions","_Object$assign","adornmentWidth","adornmentHeight","adornmentOpacity","adornmentDuration","numberOfAdornments","fadeOffsetRef","colorsStr","join","rgbColors","parsedColors","fadeReference","tmpColors","dist","colorIncr","len","startPos","endPos","retColors","pop","multiColorFade","backgroundSize","completeColors","adornmentKey","setAdornmentKey","AdornmentAnimator","_typeof","divStyle","background","WebkitBackgroundClip","backgroundClip","WebkitTextFillColor","paddingBottom","backgroundPosition","pos","offsetPos","param","AnimatePresence","idx"],"mappings":"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","x_google_ignoreList":[12]}