| import { __extends } from "tslib"; | 
| import Definable from './Definable.js'; | 
| import { getIdURL, getShadowKey, hasShadow, normalizeColor } from '../../svg/helper.js'; | 
| import { createElement } from '../../svg/core.js'; | 
| var ShadowManager = (function (_super) { | 
|     __extends(ShadowManager, _super); | 
|     function ShadowManager(zrId, svgRoot) { | 
|         var _this = _super.call(this, zrId, svgRoot, ['filter'], '__filter_in_use__', '_shadowDom') || this; | 
|         _this._shadowDomMap = {}; | 
|         _this._shadowDomPool = []; | 
|         return _this; | 
|     } | 
|     ShadowManager.prototype._getFromPool = function () { | 
|         var shadowDom = this._shadowDomPool.pop(); | 
|         if (!shadowDom) { | 
|             shadowDom = createElement('filter'); | 
|             shadowDom.setAttribute('id', 'zr' + this._zrId + '-shadow-' + this.nextId++); | 
|             var domChild = createElement('feDropShadow'); | 
|             shadowDom.appendChild(domChild); | 
|             this.addDom(shadowDom); | 
|         } | 
|         return shadowDom; | 
|     }; | 
|     ShadowManager.prototype.update = function (svgElement, displayable) { | 
|         var style = displayable.style; | 
|         if (hasShadow(style)) { | 
|             var shadowKey = getShadowKey(displayable); | 
|             var shadowDom = displayable._shadowDom = this._shadowDomMap[shadowKey]; | 
|             if (!shadowDom) { | 
|                 shadowDom = this._getFromPool(); | 
|                 this._shadowDomMap[shadowKey] = shadowDom; | 
|             } | 
|             this.updateDom(svgElement, displayable, shadowDom); | 
|         } | 
|         else { | 
|             this.remove(svgElement, displayable); | 
|         } | 
|     }; | 
|     ShadowManager.prototype.remove = function (svgElement, displayable) { | 
|         if (displayable._shadowDom != null) { | 
|             displayable._shadowDom = null; | 
|             svgElement.removeAttribute('filter'); | 
|         } | 
|     }; | 
|     ShadowManager.prototype.updateDom = function (svgElement, displayable, shadowDom) { | 
|         var domChild = shadowDom.children[0]; | 
|         var style = displayable.style; | 
|         var globalScale = displayable.getGlobalScale(); | 
|         var scaleX = globalScale[0]; | 
|         var scaleY = globalScale[1]; | 
|         if (!scaleX || !scaleY) { | 
|             return; | 
|         } | 
|         var offsetX = style.shadowOffsetX || 0; | 
|         var offsetY = style.shadowOffsetY || 0; | 
|         var blur = style.shadowBlur; | 
|         var normalizedColor = normalizeColor(style.shadowColor); | 
|         domChild.setAttribute('dx', offsetX / scaleX + ''); | 
|         domChild.setAttribute('dy', offsetY / scaleY + ''); | 
|         domChild.setAttribute('flood-color', normalizedColor.color); | 
|         domChild.setAttribute('flood-opacity', normalizedColor.opacity + ''); | 
|         var stdDx = blur / 2 / scaleX; | 
|         var stdDy = blur / 2 / scaleY; | 
|         var stdDeviation = stdDx + ' ' + stdDy; | 
|         domChild.setAttribute('stdDeviation', stdDeviation); | 
|         shadowDom.setAttribute('x', '-100%'); | 
|         shadowDom.setAttribute('y', '-100%'); | 
|         shadowDom.setAttribute('width', '300%'); | 
|         shadowDom.setAttribute('height', '300%'); | 
|         displayable._shadowDom = shadowDom; | 
|         svgElement.setAttribute('filter', getIdURL(shadowDom.getAttribute('id'))); | 
|     }; | 
|     ShadowManager.prototype.removeUnused = function () { | 
|         var defs = this.getDefs(false); | 
|         if (!defs) { | 
|             return; | 
|         } | 
|         var shadowDomsPool = this._shadowDomPool; | 
|         var shadowDomMap = this._shadowDomMap; | 
|         for (var key in shadowDomMap) { | 
|             if (shadowDomMap.hasOwnProperty(key)) { | 
|                 shadowDomsPool.push(shadowDomMap[key]); | 
|             } | 
|         } | 
|         this._shadowDomMap = {}; | 
|     }; | 
|     return ShadowManager; | 
| }(Definable)); | 
| export default ShadowManager; |