{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "canvas-fractal-grid", "description": "Interactive canvas-based fractal dot grid with mouse tracking and wave effects", "dependencies": [ "motion" ], "files": [ { "path": "registry/default/ui/canvas-fractal-grid.tsx", "content": "\"use client\"\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { AnimatePresence, motion, useAnimation } from \"motion/react\"\n\ninterface GradientStop {\n color: string\n position: number\n}\n\ninterface GradientType {\n stops: GradientStop[]\n centerX: number\n centerY: number\n}\n\ninterface CanvasFractalGridProps {\n /** Size of each dot in pixels */\n dotSize?: number\n /** Spacing between dots in pixels */\n dotSpacing?: number\n /** Opacity of dots (0-1) */\n dotOpacity?: number\n /** Duration of the background gradient animation in seconds */\n gradientAnimationDuration?: number\n /** Stiffness of mouse tracking (higher values make it more responsive) */\n mouseTrackingStiffness?: number\n /** Damping of mouse tracking (higher values make it less bouncy) */\n mouseTrackingDamping?: number\n /** Intensity of the wave effect when hovering */\n waveIntensity?: number\n /** Radius of the wave effect in pixels */\n waveRadius?: number\n /** Array of gradient configurations for the background */\n gradients?: GradientType[]\n /** Color of the dots (supports any valid CSS color) */\n dotColor?: string\n /** Color of the dot glow effect (supports any valid CSS color) */\n glowColor?: string\n /** Enable or disable the noise overlay */\n enableNoise?: boolean\n /** Opacity of the noise overlay (0-1) */\n noiseOpacity?: number\n /** Enable or disable the mouse glow effect */\n enableMouseGlow?: boolean\n /** Set the initial performance level */\n initialPerformance?: \"low\" | \"medium\" | \"high\"\n /** Enable or disable the gradient animation */\n enableGradient?: boolean\n}\n\nconst NoiseSVG = React.memo(() => (\n \n))\n\nNoiseSVG.displayName = \"NoiseSVG\"\n\nconst NoiseOverlay: React.FC<{ opacity: number }> = ({ opacity }) => (\n