EvilEyeButton wraps the React Bits EvilEye shader in an evil-buttons style button shell. It keeps the same single-component install shape as DitherButton while using a registry dependency for the WebGL background, so consumers own both the button and the shader source after install.

Preview

EvilEyeButton

Interactive

Variants

Tune the shader color, pupil shape, glow, speed, and button shell with props and className.

Blue Nazar

Blue Nazar

Cool eye color

Install

Add the item with the shadcn CLI.

npx shadcn@latest add @evilbuttons/evil-eye-button

Usage

[]txt
import EvilEyeButton from "@/components/evil-buttons/evil-eye-button";

export function ButtonDemo() {
  return <EvilEyeButton>I SEE YOU</EvilEyeButton>;
}

Props

The component spreads any <button> HTML attributes.

PropTypeDefaultDescription
childrenReact.ReactNode-The visible button label or content.
classNamestring-Extra classes passed to the button shell.
labelClassNamestring-Extra classes passed to the label span.
effectClassNamestring-Extra classes passed to the shader wrapper.
effectOpacitynumber0.95CSS opacity applied to the effect wrapper.
eyeColorstring"#ff6f37"Hex color used by the Evil Eye shader.
intensitynumber1.65Brightness multiplier for the shader.
pupilSizenumber0.62Size of the slit pupil. Lower values make it tighter.
irisWidthnumber0.22Width of the iris ring.
glowIntensitynumber0.56Strength of the outer glow.
scalenumber1.15Shader scale inside the button. Lower values zoom in.
noiseScalenumber1Scale of the procedural noise texture.
pupilFollownumber0.55Cursor-follow strength for the pupil.
flameSpeednumber0.8Animation speed for the fiery iris motion.
backgroundColorstring"#050000"Hex background color passed into the shader.

Notes

  • Uses the React Bits EvilEye WebGL shader through a registry dependency.
  • The button itself is a client component because the shader uses browser APIs.
  • Honors prefers-reduced-motion by rendering a static CSS evil-eye fallback instead of mounting the animated shader.
  • Keep label text short enough for button layouts; labelClassName is available when custom sizing needs tighter typography.

Registry

The registry item includes components/evil-buttons/evil-eye-button.tsx, installs clsx and tailwind-merge, and pulls @react-bits/EvilEye-TS-TW as a registry dependency.