{"version":3,"file":"bevelFilter.cjs","sources":["../../../src/filters/bevelFilter.ts"],"sourcesContent":["import { BevelFilter } from 'pixi-filters';\nimport { type BevelFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates a Bevel filter that applies a bevel effect to an object\n *\n * The BevelFilter gives objects a 3D-like appearance by creating a bevel effect\n * with configurable light and shadow colors, thickness, and rotation.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the Bevel filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createBevelFilter(config: BevelFilterConfig): FilterResult {\n    // Get shader manager instance\n    const shaderManager = ShaderResourceManager.getInstance();\n\n    // Create a unique key for this filter configuration\n    const lightColorKey = config.lightColor ? config.lightColor.toString(16) : 'ffffff';\n    const shadowColorKey = config.shadowColor ? config.shadowColor.toString(16) : '000000';\n    const shaderKey = `bevel-filter-${config.rotation || 45}-${config.thickness || 2}-${lightColorKey}-${shadowColorKey}`;\n\n    // Create options object for the filter\n    const options: any = {\n        rotation: config.rotation ?? 45,\n        thickness: config.thickness ?? 2,\n        lightColor: config.lightColor ?? 0xffffff,\n        lightAlpha: config.lightAlpha ?? 0.7,\n        shadowColor: config.shadowColor ?? 0x000000,\n        shadowAlpha: config.shadowAlpha ?? 0.7\n    };\n\n    // Create the filter with options\n    const filter = new BevelFilter(options);\n\n    // Register filter with shader manager\n    try {\n        shaderManager.registerFilter(filter, shaderKey);\n    } catch (error) {\n        console.warn('Error registering bevel 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 'thickness':\n                    // Map 0-10 to thickness range (0-20 pixels)\n                    filter.thickness = normalizedIntensity * 2;\n                    break;\n                case 'lightAlpha':\n                    // Map 0-10 to alpha range (0-1)\n                    filter.lightAlpha = normalizedIntensity / 10;\n                    break;\n                case 'shadowAlpha':\n                    // Map 0-10 to alpha range (0-1)\n                    filter.shadowAlpha = normalizedIntensity / 10;\n                    break;\n                case 'rotation':\n                    // Map 0-10 to rotation range (0-360 degrees)\n                    filter.rotation = normalizedIntensity * 36;\n                    break;\n                default:\n                    // Default behavior - adjust thickness\n                    filter.thickness = normalizedIntensity * 2;\n            }\n        } else {\n            // Default behavior - adjust thickness\n            filter.thickness = normalizedIntensity * 2;\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 each property to config value if provided, otherwise use default\n\n        // Rotation\n        filter.rotation = config.rotation !== undefined ? config.rotation : 45;\n\n        // Thickness\n        filter.thickness = config.thickness !== undefined ? config.thickness : 2;\n\n        // Light properties\n        filter.lightColor = config.lightColor !== undefined ? config.lightColor : 0xffffff;\n        filter.lightAlpha = config.lightAlpha !== undefined ? config.lightAlpha : 0.7;\n\n        // Shadow properties\n        filter.shadowColor = config.shadowColor !== undefined ? config.shadowColor : 0x000000;\n        filter.shadowAlpha = config.shadowAlpha !== undefined ? config.shadowAlpha : 0.7;\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 bevel filter shader:', error);\n        }\n        filter.destroy();\n    };\n\n    return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","BevelFilter"],"mappings":"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"}