{"version":3,"sources":["../src/index.tsx","../src/gradientBackground.tsx","../src/gradientUtils.ts","../src/particles.ts"],"sourcesContent":["export * from \"./gradientBackground\"\nexport * from \"./types\"\nexport * from \"./gradientUtils\"\nexport * from \"./particles\"","import {GradientBackgroundProps, ParticleOptions} from \"./types\";\nimport React, {FC, useEffect, useLayoutEffect, useRef} from \"react\";\nimport {Particle} from \"./particles\";\nimport {\n    debounce,\n    getSkewTransform,\n    hexToRgb,\n    isValidBlendingMode\n} from \"./gradientUtils\";\n\nconst useIsomorphicLayoutEffect =\n    typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\nconst GradientBackground: FC<GradientBackgroundProps> = ({\n                                                             count = 12,\n                                                             size = {min: 1000, max: 1200, pulse: 0.1},\n                                                             speed = {\n                                                                 x: {min: 0.6, max: 3},\n                                                                 y: {min: 0.6, max: 3}\n                                                             },\n                                                             colors = {\n                                                                 background: \"transparent\",\n                                                                 particles: [\"#ff681c\", \"#87ddfe\", \"#231efe\"],\n                                                             },\n                                                             blending = \"overlay\",\n                                                             opacity = {center: 0.45, edge: 0},\n                                                             skew = -1.5,\n                                                             shapes: initialShapes = [\"c\"],\n                                                             className = \"\",\n                                                             translateYcorrection = true,\n                                                             style = {},\n                                                             onLoaded,\n                                                         }) => {\n    const canvasRef = useRef<HTMLCanvasElement | null>(null);\n    const animationRef = useRef<number | null>(null);\n    const particlesRef = useRef<Particle[]>([]);\n    const configRef = useRef<ParticleOptions>({\n        count,\n        size,\n        speed,\n        colors,\n        blending,\n        opacity,\n        skew,\n        shapes: initialShapes,\n        c: {w: 0, h: 0},\n    });\n\n    // Utility to detect mobile devices\n    const isMobile = (): boolean => {\n        if (typeof window === \"undefined\") return false;\n        return /Mobi|Android/i.test(window.navigator.userAgent);\n    };\n\n    // Compute styles before render\n    const computedStyles: React.CSSProperties = React.useMemo(() => {\n        const canvasWidth = configRef.current.c.w;\n\n        const skewValue = getSkewTransform(\n            skew,\n            translateYcorrection && canvasWidth > 0,\n            canvasWidth\n        );\n\n        return {\n            transform: skewValue,\n            WebkitTransform: skewValue,\n            position: \"absolute\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            zIndex: -1,\n            pointerEvents: \"none\",\n            backgroundColor: colors.background,\n            ...style,\n        };\n    }, [skew, translateYcorrection, colors.background, style]);\n\n    const initParticles = (): void => {\n        const {count, colors, shapes, opacity} = configRef.current;\n        particlesRef.current = [];\n        for (let i = 0; i < count; i++) {\n            const color = hexToRgb(colors.particles[i % colors.particles.length]);\n            const shape = shapes[i % shapes.length];\n            particlesRef.current.push(\n                new Particle(color, shape, configRef.current, opacity)\n            );\n        }\n    };\n\n    const animate = (\n        ctx: CanvasRenderingContext2D,\n        canvasWidth: number,\n        canvasHeight: number\n    ): void => {\n        ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n        particlesRef.current.forEach((particle) => {\n            particle.update(canvasWidth, canvasHeight);\n            particle.draw(ctx, configRef.current.blending);\n        });\n        animationRef.current = window.requestAnimationFrame(() =>\n            animate(ctx, canvasWidth, canvasHeight)\n        );\n    };\n\n    const adjustCanvasSize = (\n        canvas: HTMLCanvasElement,\n        ctx: CanvasRenderingContext2D\n    ) => {\n        const parent = canvas.parentElement;\n        if (!parent) return;\n\n        const dpr = window.devicePixelRatio || 1;\n        configRef.current.c.w = parent.clientWidth;\n        configRef.current.c.h = parent.clientHeight;\n        canvas.width = configRef.current.c.w * dpr;\n        canvas.height = configRef.current.c.h * dpr;\n\n        const skewValue = getSkewTransform(\n            skew,\n            translateYcorrection,\n            configRef.current.c.w\n        );\n        if (style.transform === undefined) {\n            canvas.style.transform = skewValue;\n        }\n        if (style.WebkitTransform === undefined) {\n            canvas.style.webkitTransform = skewValue;\n        }\n\n        ctx.setTransform(1, 0, 0, 1, 0, 0);\n        ctx.scale(dpr, dpr);\n    };\n\n    const handleResize = (): void => {\n        const canvas = canvasRef.current;\n        if (canvas) {\n            const ctx = canvas.getContext(\"2d\");\n            if (!ctx) return;\n\n            if (animationRef.current) {\n                window.cancelAnimationFrame(animationRef.current);\n            }\n\n            adjustCanvasSize(canvas, ctx);\n            initParticles();\n\n            const {c} = configRef.current;\n            animate(ctx, c.w, c.h);\n        }\n    };\n\n    useIsomorphicLayoutEffect(() => {\n        // Adjust particle count and speed for mobile devices\n        if (isMobile()) {\n            configRef.current.count = Math.floor(count / 2);\n            configRef.current.speed = {\n                x: {min: speed.x.min * 0.5, max: speed.x.max * 0.5},\n                y: {min: speed.y.min * 0.5, max: speed.y.max * 0.5},\n            };\n        } else {\n            configRef.current.count = count;\n            configRef.current.speed = speed;\n        }\n\n        configRef.current = {\n            ...configRef.current,\n            size,\n            colors,\n            blending,\n            opacity,\n            skew,\n            shapes: initialShapes,\n        };\n\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n        const ctx = canvas.getContext(\"2d\");\n        if (!ctx) return;\n\n        adjustCanvasSize(canvas, ctx);\n\n        ctx.globalCompositeOperation = isValidBlendingMode(blending)\n            ? blending\n            : \"source-over\";\n\n        initParticles();\n        animate(ctx, configRef.current.c.w, configRef.current.c.h);\n\n        const debouncedHandleResize = debounce(handleResize, 200);\n        window.addEventListener(\"resize\", debouncedHandleResize);\n        const resizeObserver =\n            typeof ResizeObserver === \"undefined\"\n                ? null\n                : new ResizeObserver(debouncedHandleResize);\n        if (canvas.parentElement) {\n            resizeObserver?.observe(canvas.parentElement);\n        }\n\n        const handleVisibilityChange = () => {\n            if (!document.hidden) {\n                handleResize();\n            }\n        };\n\n        document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n\n        if (onLoaded) {\n            onLoaded();\n        }\n\n        return () => {\n            window.removeEventListener(\"resize\", debouncedHandleResize);\n            debouncedHandleResize.cancel();\n            resizeObserver?.disconnect();\n            document.removeEventListener(\"visibilitychange\", handleVisibilityChange);\n            if (animationRef.current) {\n                window.cancelAnimationFrame(animationRef.current);\n            }\n        };\n    }, [\n        count,\n        size,\n        speed,\n        colors,\n        blending,\n        opacity,\n        skew,\n        initialShapes,\n        translateYcorrection,\n        onLoaded,\n        style.transform,\n        style.WebkitTransform,\n    ]);\n\n    return (\n        <canvas ref={canvasRef} className={className} style={computedStyles}/>\n    );\n};\n\nexport {GradientBackground};\n","// List of valid global composite operations\nimport type {RGB} from \"./types\";\n\nexport const getSkewTransform = (\n    skew: number,\n    translateYcorrection: boolean,\n    canvasWidth: number\n): string => {\n    const translateY = translateYcorrection\n        ? ` translateY(-${Math.ceil(\n            Math.tan((Math.abs(skew) * Math.PI) / 180) * (canvasWidth / 2)\n        )}px)`\n        : \"\";\n\n    return `skewY(${skew}deg)${translateY}`;\n};\n\nconst validBlendingModes: GlobalCompositeOperation[] = [\n    \"source-over\",\n    \"source-in\",\n    \"source-out\",\n    \"source-atop\",\n    \"destination-over\",\n    \"destination-in\",\n    \"destination-out\",\n    \"destination-atop\",\n    \"lighter\",\n    \"copy\",\n    \"xor\",\n    \"multiply\",\n    \"screen\",\n    \"overlay\",\n    \"darken\",\n    \"lighten\",\n    \"color-dodge\",\n    \"color-burn\",\n    \"hard-light\",\n    \"soft-light\",\n    \"difference\",\n    \"exclusion\",\n    \"hue\",\n    \"saturation\",\n    \"color\",\n    \"luminosity\",\n];\n\nexport const isValidBlendingMode = (\n    mode: string\n): mode is GlobalCompositeOperation => {\n    return validBlendingModes.includes(mode as GlobalCompositeOperation);\n};\n\ntype Debounced<T extends (...args: any[]) => void> = ((\n    ...args: Parameters<T>\n) => void) & {cancel: () => void};\n\nexport const debounce = <T extends (...args: any[]) => void>(\n    func: T,\n    wait: number\n): Debounced<T> => {\n    let timeout: ReturnType<typeof setTimeout> | undefined;\n    const debounced = ((...args: Parameters<T>) => {\n        if (timeout !== undefined) {\n            clearTimeout(timeout);\n        }\n\n        timeout = setTimeout(() => {\n            timeout = undefined;\n            func(...args);\n        }, wait);\n    }) as Debounced<T>;\n\n    debounced.cancel = () => {\n        if (timeout !== undefined) {\n            clearTimeout(timeout);\n            timeout = undefined;\n        }\n    };\n\n    return debounced;\n};\n\nexport const hexToRgb = (hex: string): RGB => {\n    const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n    hex = hex.replace(shorthandRegex, (_, r, g, b) => r + r + g + g + b + b);\n\n    const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    if (result) {\n        return {\n            r: parseInt(result[1], 16),\n            g: parseInt(result[2], 16),\n            b: parseInt(result[3], 16),\n        };\n    } else {\n        throw new Error(\"Invalid hex color format\");\n    }\n};\n\nexport const getRandom = (min: number, max: number): number => {\n    return Math.random() * (max - min) + min;\n};\n\nexport const getRandomDirection = (): number => (Math.random() > 0.5 ? 1 : -1);\n","import {getRandom, getRandomDirection, isValidBlendingMode,} from \"./gradientUtils\";\nimport {OpacityConfig, ParticleOptions, RGB, ShapeType} from \"./types\";\n\nexport class Particle {\n    color: RGB;\n    shape: ShapeType;\n    options: ParticleOptions;\n    rgba: string;\n    rgbaEdge: string;\n    size: number;\n    direction: number;\n    vx: number;\n    vy: number;\n    x: number;\n    y: number;\n    pulseDirection: number;\n\n    constructor(\n        color: RGB,\n        shape: ShapeType,\n        options: ParticleOptions,\n        opacity: OpacityConfig\n    ) {\n        this.color = color;\n        this.shape = shape;\n        this.options = options;\n        this.rgba = `rgba(${this.color.r}, ${this.color.g}, ${this.color.b}, ${opacity.center})`;\n        this.rgbaEdge = `rgba(${this.color.r}, ${this.color.g}, ${this.color.b}, ${opacity.edge})`;\n        this.size = Math.abs(getRandom(options.size.min, options.size.max));\n        this.direction = getRandomDirection();\n        this.vx =\n            getRandom(options.speed.x.min, options.speed.x.max) * this.direction;\n        this.vy =\n            getRandom(options.speed.y.min, options.speed.y.max) * this.direction;\n        this.x = getRandom(0, options.c.w);\n        this.y = getRandom(0, options.c.h);\n        this.pulseDirection = 1;\n    }\n\n    update(canvasWidth: number, canvasHeight: number): void {\n        if (this.options.size.pulse !== 0) {\n            this.size += this.options.size.pulse * this.pulseDirection;\n            if (\n                this.size > this.options.size.max ||\n                this.size < this.options.size.min\n            ) {\n                this.pulseDirection *= -1;\n            }\n        }\n\n        this.x += this.vx;\n        this.y += this.vy;\n\n        if (this.x < 0 || this.x > canvasWidth) {\n            this.vx *= -1;\n            this.x = Math.max(0, Math.min(this.x, canvasWidth));\n        }\n        if (this.y < 0 || this.y > canvasHeight) {\n            this.vy *= -1;\n            this.y = Math.max(0, Math.min(this.y, canvasHeight));\n        }\n    }\n\n    draw(\n        ctx: CanvasRenderingContext2D,\n        blending: GlobalCompositeOperation | \"none\"\n    ): void {\n        ctx.beginPath();\n\n        const validBlending = isValidBlendingMode(blending)\n            ? blending\n            : \"source-over\";\n\n        if (validBlending !== \"source-over\") {\n            ctx.globalCompositeOperation = validBlending;\n        }\n\n        const gradient = ctx.createRadialGradient(\n            this.x,\n            this.y,\n            0.01,\n            this.x,\n            this.y,\n            this.size / 2\n        );\n        gradient.addColorStop(0, this.rgba);\n        gradient.addColorStop(1, this.rgbaEdge);\n\n        ctx.fillStyle = gradient;\n\n        switch (this.shape) {\n            case \"c\":\n                ctx.arc(this.x, this.y, this.size / 2, 0, Math.PI * 2, false);\n                break;\n            case \"s\":\n                ctx.rect(\n                    this.x - this.size / 2,\n                    this.y - this.size / 2,\n                    this.size,\n                    this.size\n                );\n                break;\n            case \"t\":\n                const height = (Math.sqrt(3) / 2) * this.size;\n                ctx.moveTo(this.x, this.y - (2 / 3) * height);\n                ctx.lineTo(this.x - this.size / 2, this.y + height / 3);\n                ctx.lineTo(this.x + this.size / 2, this.y + height / 3);\n                break;\n            default:\n                ctx.arc(this.x, this.y, this.size / 2, 0, Math.PI * 2, false);\n        }\n\n        ctx.closePath();\n        ctx.fill();\n\n        ctx.globalCompositeOperation = \"source-over\";\n    }\n}\n"],"mappings":"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","names":["React","count","colors","opacity"]}