{"version":3,"file":"bulgePinchFilter.cjs","sources":["../../../src/filters/bulgePinchFilter.ts"],"sourcesContent":["import { BulgePinchFilter } from 'pixi-filters';\nimport { type BulgePinchFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates a BulgePinch filter that applies a bulge or pinch effect in a circle\n *\n * The BulgePinchFilter creates either a bulge (magnifying glass) effect or\n * a pinch effect within a circular area of the image.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the BulgePinch filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createBulgePinchFilter(config: BulgePinchFilterConfig): FilterResult {\n    // Get shader manager instance\n    const shaderManager = ShaderResourceManager.getInstance();\n\n    // Create options object for the filter\n    const options: any = {\n        radius: config.radius ?? 100,\n        strength: config.strength ?? 1,\n    };\n\n    // Handle center coordinates\n    if (config.center) {\n        options.center = config.center;\n    } else {\n        options.center = { x: 0.5, y: 0.5 }; // Default center (middle of the screen)\n    }\n\n    // Create a unique key for this filter configuration\n    const centerX = options.center.x.toFixed(2);\n    const centerY = options.center.y.toFixed(2);\n    const shaderKey = `bulge-pinch-filter-r${options.radius}-s${options.strength}-c${centerX},${centerY}`;\n\n    // Create the filter with options\n    const filter = new BulgePinchFilter(options);\n\n    // Register filter with shader manager\n    try {\n        shaderManager.registerFilter(filter, shaderKey);\n    } catch (error) {\n        console.warn('Error registering bulge pinch 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 which property to adjust based on config\n        if (config.primaryProperty) {\n            switch (config.primaryProperty) {\n                case 'strength':\n                    // Map 0-10 to -1 to 1 range if specified to include pinch effect\n                    if (config.allowPinch) {\n                        // Map 0-10 to -1 to 1 (0-5 is pinch, 5-10 is bulge)\n                        filter.strength = (normalizedIntensity - 5) / 5;\n                    } else {\n                        // Map 0-10 to 0-1 (only bulge effect)\n                        filter.strength = normalizedIntensity / 10;\n                    }\n                    break;\n                case 'radius':\n                    // Map 0-10 to 10-200 radius range\n                    filter.radius = 10 + (normalizedIntensity * 19); // 10-200 range\n                    break;\n                case 'centerX':\n                    // Map 0-10 to 0-1 for x position\n                    filter.center.x = normalizedIntensity / 10;\n                    break;\n                case 'centerY':\n                    // Map 0-10 to 0-1 for y position\n                    filter.center.y = normalizedIntensity / 10;\n                    break;\n                default:\n                    // Default to strength adjustment\n                    if (config.allowPinch) {\n                        filter.strength = (normalizedIntensity - 5) / 5;\n                    } else {\n                        filter.strength = normalizedIntensity / 10;\n                    }\n            }\n        } else {\n            // Default behavior - adjust strength\n            if (config.allowPinch) {\n                filter.strength = (normalizedIntensity - 5) / 5;\n            } else {\n                filter.strength = normalizedIntensity / 10;\n            }\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        // Reset center to config value if provided, otherwise use default\n        if (config.center !== undefined) {\n            filter.center = config.center;\n        } else {\n            filter.center = { x: 0.5, y: 0.5 };\n        }\n\n        // Reset radius to config value if provided, otherwise use default\n        filter.radius = config.radius !== undefined ? config.radius : 100;\n\n        // Reset strength to config value if provided, otherwise use default\n        // If no strength was provided but intensity was, we'll handle that with updateIntensity\n        if (config.strength !== undefined) {\n            filter.strength = config.strength;\n        } else if (config.intensity === undefined) {\n            // Only set to 0 if neither strength nor intensity were provided\n            filter.strength = 0;\n        }\n\n        // If intensity was provided in config, use updateIntensity to reset properly\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 bulge pinch filter shader:', error);\n        }\n        filter.destroy();\n    };\n\n    return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","BulgePinchFilter"],"mappings":"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"}