{"version":3,"file":"dropShadowFilter.cjs","sources":["../../../src/filters/dropShadowFilter.ts"],"sourcesContent":["import { DropShadowFilter } from 'pixi-filters';\nimport { type DropShadowFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n// Get the shader manager singleton\nconst shaderManager = ShaderResourceManager.getInstance();\n\n/**\n * Creates a DropShadow filter that applies a shadow effect to objects\n *\n * Uses shader pooling via ShaderResourceManager for improved performance.\n *\n * @param config - Configuration for the DropShadow filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createDropShadowFilter(config: DropShadowFilterConfig): FilterResult {\n    // Create options object for the filter\n    const options: any = {};\n\n    // Apply configuration values if provided, otherwise use defaults\n    if (config.alpha !== undefined) options.alpha = config.alpha;\n    if (config.blur !== undefined) options.blur = config.blur;\n    if (config.color !== undefined) options.color = config.color;\n    if (config.offset !== undefined) options.offset = config.offset;\n    if (config.offsetX !== undefined) options.offsetX = config.offsetX;\n    if (config.offsetY !== undefined) options.offsetY = config.offsetY;\n    if (config.pixelSize !== undefined) options.pixelSize = config.pixelSize;\n    if (config.pixelSizeX !== undefined) options.pixelSizeX = config.pixelSizeX;\n    if (config.pixelSizeY !== undefined) options.pixelSizeY = config.pixelSizeY;\n    if (config.quality !== undefined) options.quality = config.quality;\n    if (config.shadowOnly !== undefined) options.shadowOnly = config.shadowOnly;\n\n    // Create the filter with options\n    const filter = new DropShadowFilter(options);\n\n    // Generate a unique key for this filter configuration\n    const shaderKey = `dropshadow-${config.quality || 3}-${config.blur || 2}-${config.alpha || 1}`;\n\n    // Register filter with shader manager for reuse\n    try {\n        shaderManager.getShaderProgram(shaderKey, filter);\n    } catch (error) {\n        console.warn('Failed to register dropShadow 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 'alpha':\n                    // Map 0-10 to 0-1 for alpha\n                    filter.alpha = normalizedIntensity / 10;\n                    break;\n                case 'blur':\n                    // Map 0-10 to 0-20 for blur\n                    filter.blur = normalizedIntensity * 2;\n                    break;\n                case 'offsetX':\n                    // Map 0-10 to 0-20 for offset\n                    filter.offsetX = normalizedIntensity * 2;\n                    break;\n                case 'offsetY':\n                    // Map 0-10 to 0-20 for offset\n                    filter.offsetY = normalizedIntensity * 2;\n                    break;\n                default:\n                    // Default to blur adjustment\n                    filter.blur = normalizedIntensity * 2;\n            }\n        } else {\n            // Default behavior - adjust blur and offset together for a balanced shadow effect\n            filter.blur = normalizedIntensity * 2;\n            filter.offsetX = 2 + normalizedIntensity;\n            filter.offsetY = 2 + normalizedIntensity;\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 alpha to config value if provided, otherwise use default (1)\n        if ('alpha' in filter) {\n            filter.alpha = config.alpha !== undefined ? config.alpha : 1;\n        }\n\n        // Reset enabled property to config value if provided, otherwise use default (true)\n        if ('enabled' in filter) {\n            (filter as any).enabled = config.enabled !== undefined ? config.enabled : true;\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     * Cleanup function to release shader when filter is no longer used\n     */\n    const dispose = (): void => {\n        try {\n            shaderManager.releaseShader(shaderKey);\n        } catch (error) {\n            console.warn('Failed to release dropShadow filter shader:', error);\n        }\n\n        if (filter.destroy) {\n            filter.destroy();\n        }\n    };\n\n    // Create a properly typed FilterResult object\n    const result: FilterResult = {\n        filter,\n        updateIntensity,\n        reset,\n        dispose\n    };\n    return result;\n}"],"names":["ShaderResourceManager","DropShadowFilter"],"mappings":";;;;;AAKA,MAAM,aAAA,GAAgBA,4CAAsB,WAAY,EAAA;AAUjD,SAAS,uBAAuB,MAA8C,EAAA;AAEjF,EAAA,MAAM,UAAe,EAAC;AAGtB,EAAA,IAAI,MAAO,CAAA,KAAA,KAAU,MAAW,EAAA,OAAA,CAAQ,QAAQ,MAAO,CAAA,KAAA;AACvD,EAAA,IAAI,MAAO,CAAA,IAAA,KAAS,MAAW,EAAA,OAAA,CAAQ,OAAO,MAAO,CAAA,IAAA;AACrD,EAAA,IAAI,MAAO,CAAA,KAAA,KAAU,MAAW,EAAA,OAAA,CAAQ,QAAQ,MAAO,CAAA,KAAA;AACvD,EAAA,IAAI,MAAO,CAAA,MAAA,KAAW,MAAW,EAAA,OAAA,CAAQ,SAAS,MAAO,CAAA,MAAA;AACzD,EAAA,IAAI,MAAO,CAAA,OAAA,KAAY,MAAW,EAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,OAAA;AAC3D,EAAA,IAAI,MAAO,CAAA,OAAA,KAAY,MAAW,EAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,OAAA;AAC3D,EAAA,IAAI,MAAO,CAAA,SAAA,KAAc,MAAW,EAAA,OAAA,CAAQ,YAAY,MAAO,CAAA,SAAA;AAC/D,EAAA,IAAI,MAAO,CAAA,UAAA,KAAe,MAAW,EAAA,OAAA,CAAQ,aAAa,MAAO,CAAA,UAAA;AACjE,EAAA,IAAI,MAAO,CAAA,UAAA,KAAe,MAAW,EAAA,OAAA,CAAQ,aAAa,MAAO,CAAA,UAAA;AACjE,EAAA,IAAI,MAAO,CAAA,OAAA,KAAY,MAAW,EAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,OAAA;AAC3D,EAAA,IAAI,MAAO,CAAA,UAAA,KAAe,MAAW,EAAA,OAAA,CAAQ,aAAa,MAAO,CAAA,UAAA;AAGjE,EAAM,MAAA,MAAA,GAAS,IAAIC,4BAAA,CAAiB,OAAO,CAAA;AAG3C,EAAA,MAAM,SAAY,GAAA,CAAA,WAAA,EAAc,MAAO,CAAA,OAAA,IAAW,CAAC,CAAA,CAAA,EAAI,MAAO,CAAA,IAAA,IAAQ,CAAC,CAAA,CAAA,EAAI,MAAO,CAAA,KAAA,IAAS,CAAC,CAAA,CAAA;AAG5F,EAAI,IAAA;AACA,IAAc,aAAA,CAAA,gBAAA,CAAiB,WAAW,MAAM,CAAA;AAAA,WAC3C,KAAO,EAAA;AACZ,IAAQ,OAAA,CAAA,IAAA,CAAK,6DAA6D,KAAK,CAAA;AAAA;AAQnF,EAAM,MAAA,eAAA,GAAkB,CAAC,SAA4B,KAAA;AAEjD,IAAM,MAAA,mBAAA,GAAsB,KAAK,GAAI,CAAA,CAAA,EAAG,KAAK,GAAI,CAAA,EAAA,EAAI,SAAS,CAAC,CAAA;AAG/D,IAAA,IAAI,OAAO,eAAiB,EAAA;AACxB,MAAA,QAAQ,OAAO,eAAiB;AAAA,QAC5B,KAAK,OAAA;AAED,UAAA,MAAA,CAAO,QAAQ,mBAAsB,GAAA,EAAA;AACrC,UAAA;AAAA,QACJ,KAAK,MAAA;AAED,UAAA,MAAA,CAAO,OAAO,mBAAsB,GAAA,CAAA;AACpC,UAAA;AAAA,QACJ,KAAK,SAAA;AAED,UAAA,MAAA,CAAO,UAAU,mBAAsB,GAAA,CAAA;AACvC,UAAA;AAAA,QACJ,KAAK,SAAA;AAED,UAAA,MAAA,CAAO,UAAU,mBAAsB,GAAA,CAAA;AACvC,UAAA;AAAA,QACJ;AAEI,UAAA,MAAA,CAAO,OAAO,mBAAsB,GAAA,CAAA;AAAA;AAC5C,KACG,MAAA;AAEH,MAAA,MAAA,CAAO,OAAO,mBAAsB,GAAA,CAAA;AACpC,MAAA,MAAA,CAAO,UAAU,CAAI,GAAA,mBAAA;AACrB,MAAA,MAAA,CAAO,UAAU,CAAI,GAAA,mBAAA;AAAA;AACzB,GACJ;AAGA,EAAA,eAAA,CAAgB,OAAO,SAAS,CAAA;AAKhC,EAAA,MAAM,QAAQ,MAAY;AAEtB,IAAA,IAAI,WAAW,MAAQ,EAAA;AACnB,MAAA,MAAA,CAAO,KAAQ,GAAA,MAAA,CAAO,KAAU,KAAA,MAAA,GAAY,OAAO,KAAQ,GAAA,CAAA;AAAA;AAI/D,IAAA,IAAI,aAAa,MAAQ,EAAA;AACrB,MAAC,OAAe,OAAU,GAAA,MAAA,CAAO,OAAY,KAAA,MAAA,GAAY,OAAO,OAAU,GAAA,IAAA;AAAA;AAI9E,IAAI,IAAA,MAAA,CAAO,cAAc,MAAW,EAAA;AAChC,MAAA,eAAA,CAAgB,OAAO,SAAS,CAAA;AAAA;AACpC,GACJ;AAKA,EAAA,MAAM,UAAU,MAAY;AACxB,IAAI,IAAA;AACA,MAAA,aAAA,CAAc,cAAc,SAAS,CAAA;AAAA,aAChC,KAAO,EAAA;AACZ,MAAQ,OAAA,CAAA,IAAA,CAAK,+CAA+C,KAAK,CAAA;AAAA;AAGrE,IAAA,IAAI,OAAO,OAAS,EAAA;AAChB,MAAA,MAAA,CAAO,OAAQ,EAAA;AAAA;AACnB,GACJ;AAGA,EAAA,MAAM,MAAuB,GAAA;AAAA,IACzB,MAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACJ;AACA,EAAO,OAAA,MAAA;AACX;;;;"}