{"version":3,"file":"bloomFilter.cjs","sources":["../../../src/filters/bloomFilter.ts"],"sourcesContent":["import { BloomFilter } from 'pixi-filters';\nimport { type BloomFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * This file should be placed at:\n * src/components/KineticSlider/filters/bloomFilter.ts\n */\n\n/**\n * Creates a Bloom filter that applies a Gaussian blur to create a bloom effect\n *\n * The BloomFilter applies a Gaussian blur to an object, creating a glow effect.\n * The strength of the blur can be set for x- and y-axis separately.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the Bloom filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createBloomFilter(config: BloomFilterConfig): FilterResult {\n    // Get shader manager instance\n    const shaderManager = ShaderResourceManager.getInstance();\n\n    // Create options object based on the configuration\n    const options: any = {};\n\n    // Set the strength if provided (for both X and Y)\n    if (config.strength !== undefined) {\n        options.strength = config.strength;\n    }\n\n    // Set individual X and Y strengths if provided\n    if (config.strengthX !== undefined) {\n        options.strengthX = config.strengthX;\n    }\n\n    if (config.strengthY !== undefined) {\n        options.strengthY = config.strengthY;\n    }\n\n    // Create a unique key for this filter configuration\n    const strengthXKey = config.strengthX !== undefined ? config.strengthX.toString() : 'default';\n    const strengthYKey = config.strengthY !== undefined ? config.strengthY.toString() : 'default';\n    const shaderKey = `bloom-filter-${config.strength || 2}-${strengthXKey}-${strengthYKey}`;\n\n    // Create the filter with options\n    const filter = new BloomFilter(options);\n\n    // Register filter with shader manager\n    try {\n        shaderManager.registerFilter(filter, shaderKey);\n    } catch (error) {\n        console.warn('Error registering bloom filter with shader manager:', error);\n    }\n\n    /**\n     * Update the filter's intensity based on the configuration\n     *\n     * @param intensity - New intensity value (0-10 scale)\n     */\n    const updateIntensity = (intensity: number): void => {\n        // Normalize intensity to a 0-10 scale\n        const normalizedIntensity = Math.max(0, Math.min(10, intensity));\n\n        // Determine how to apply the intensity based on config\n        if (config.primaryProperty) {\n            switch (config.primaryProperty) {\n                case 'strength':\n                    // Apply to overall strength (both X and Y)\n                    filter.strength = {x: normalizedIntensity * 2, y: normalizedIntensity * 2} ; // 0-10 → 0-20\n                    break;\n                case 'strengthX':\n                    // Apply to X strength only\n                    filter.strengthX = normalizedIntensity * 2; // 0-10 → 0-20\n                    break;\n                case 'strengthY':\n                    // Apply to Y strength only\n                    filter.strengthY = normalizedIntensity * 2; // 0-10 → 0-20\n                    break;\n                default:\n                    // Default to overall strength\n                    filter.strength = normalizedIntensity * 2; // 0-10 → 0-20\n            }\n        } else {\n            // Default behavior - apply to overall strength\n            filter.strength = normalizedIntensity * 2; // 0-10 → 0-20\n        }\n    };\n\n    // Set initial intensity\n    updateIntensity(config.intensity);\n\n    /**\n     * Reset the filter to initial configuration values or defaults\n     */\n    const reset = (): void => {\n        // Use config values if provided, otherwise use default value of 2\n        if (config.strength !== undefined) {\n            filter.strength = config.strength;\n        } else if (config.strengthX !== undefined && config.strengthY !== undefined) {\n            filter.strengthX = config.strengthX;\n            filter.strengthY = config.strengthY;\n        } else if (config.strengthX !== undefined) {\n            filter.strengthX = config.strengthX;\n            filter.strengthY = 2; // Default for Y if only X is provided\n        } else if (config.strengthY !== undefined) {\n            filter.strengthX = 2; // Default for X if only Y is provided\n            filter.strengthY = config.strengthY;\n        } else {\n            // Reset to default values if no config values were provided\n            filter.strength = 2; // Default value is 2\n        }\n\n        // If intensity was provided in config, apply that\n        if (config.intensity !== undefined) {\n            updateIntensity(config.intensity);\n        }\n    };\n\n    /**\n     * Release any WebGL resources used by this filter\n     */\n    const dispose = (): void => {\n        try {\n            shaderManager.releaseFilter(filter, shaderKey);\n        } catch (error) {\n            console.warn('Error releasing bloom filter shader:', error);\n        }\n        filter.destroy();\n    };\n\n    return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","BloomFilter"],"mappings":"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"}