| import { __extends } from "tslib"; | 
| import Definable from './Definable.js'; | 
| import * as zrUtil from '../../core/util.js'; | 
| import { getIdURL, isGradient, isLinearGradient, isRadialGradient, normalizeColor, round4 } from '../../svg/helper.js'; | 
| import { createElement } from '../../svg/core.js'; | 
| var GradientManager = (function (_super) { | 
|     __extends(GradientManager, _super); | 
|     function GradientManager(zrId, svgRoot) { | 
|         return _super.call(this, zrId, svgRoot, ['linearGradient', 'radialGradient'], '__gradient_in_use__') || this; | 
|     } | 
|     GradientManager.prototype.addWithoutUpdate = function (svgElement, displayable) { | 
|         if (displayable && displayable.style) { | 
|             var that_1 = this; | 
|             zrUtil.each(['fill', 'stroke'], function (fillOrStroke) { | 
|                 var value = displayable.style[fillOrStroke]; | 
|                 if (isGradient(value)) { | 
|                     var gradient = value; | 
|                     var defs = that_1.getDefs(true); | 
|                     var dom = void 0; | 
|                     if (gradient.__dom) { | 
|                         dom = gradient.__dom; | 
|                         if (!defs.contains(gradient.__dom)) { | 
|                             that_1.addDom(dom); | 
|                         } | 
|                     } | 
|                     else { | 
|                         dom = that_1.add(gradient); | 
|                     } | 
|                     that_1.markUsed(displayable); | 
|                     svgElement.setAttribute(fillOrStroke, getIdURL(dom.getAttribute('id'))); | 
|                 } | 
|             }); | 
|         } | 
|     }; | 
|     GradientManager.prototype.add = function (gradient) { | 
|         var dom; | 
|         if (isLinearGradient(gradient)) { | 
|             dom = createElement('linearGradient'); | 
|         } | 
|         else if (isRadialGradient(gradient)) { | 
|             dom = createElement('radialGradient'); | 
|         } | 
|         else { | 
|             if (process.env.NODE_ENV !== 'production') { | 
|                 zrUtil.logError('Illegal gradient type.'); | 
|             } | 
|             return null; | 
|         } | 
|         gradient.id = gradient.id || this.nextId++; | 
|         dom.setAttribute('id', 'zr' + this._zrId | 
|             + '-gradient-' + gradient.id); | 
|         this.updateDom(gradient, dom); | 
|         this.addDom(dom); | 
|         return dom; | 
|     }; | 
|     GradientManager.prototype.update = function (gradient) { | 
|         if (!isGradient(gradient)) { | 
|             return; | 
|         } | 
|         var that = this; | 
|         this.doUpdate(gradient, function () { | 
|             var dom = gradient.__dom; | 
|             if (!dom) { | 
|                 return; | 
|             } | 
|             var tagName = dom.tagName; | 
|             var type = gradient.type; | 
|             if (type === 'linear' && tagName === 'linearGradient' | 
|                 || type === 'radial' && tagName === 'radialGradient') { | 
|                 that.updateDom(gradient, gradient.__dom); | 
|             } | 
|             else { | 
|                 that.removeDom(gradient); | 
|                 that.add(gradient); | 
|             } | 
|         }); | 
|     }; | 
|     GradientManager.prototype.updateDom = function (gradient, dom) { | 
|         if (isLinearGradient(gradient)) { | 
|             dom.setAttribute('x1', gradient.x); | 
|             dom.setAttribute('y1', gradient.y); | 
|             dom.setAttribute('x2', gradient.x2); | 
|             dom.setAttribute('y2', gradient.y2); | 
|         } | 
|         else if (isRadialGradient(gradient)) { | 
|             dom.setAttribute('cx', gradient.x); | 
|             dom.setAttribute('cy', gradient.y); | 
|             dom.setAttribute('r', gradient.r); | 
|         } | 
|         else { | 
|             if (process.env.NODE_ENV !== 'production') { | 
|                 zrUtil.logError('Illegal gradient type.'); | 
|             } | 
|             return; | 
|         } | 
|         dom.setAttribute('gradientUnits', gradient.global | 
|             ? 'userSpaceOnUse' | 
|             : 'objectBoundingBox'); | 
|         dom.innerHTML = ''; | 
|         var colors = gradient.colorStops; | 
|         for (var i = 0, len = colors.length; i < len; ++i) { | 
|             var stop_1 = createElement('stop'); | 
|             stop_1.setAttribute('offset', round4(colors[i].offset) * 100 + '%'); | 
|             var stopColor = colors[i].color; | 
|             var _a = normalizeColor(stopColor), color = _a.color, opacity = _a.opacity; | 
|             stop_1.setAttribute('stop-color', color); | 
|             if (opacity < 1) { | 
|                 stop_1.setAttribute('stop-opacity', opacity); | 
|             } | 
|             dom.appendChild(stop_1); | 
|         } | 
|         gradient.__dom = dom; | 
|     }; | 
|     GradientManager.prototype.markUsed = function (displayable) { | 
|         if (displayable.style) { | 
|             var gradient = displayable.style.fill; | 
|             if (gradient && gradient.__dom) { | 
|                 _super.prototype.markDomUsed.call(this, gradient.__dom); | 
|             } | 
|             gradient = displayable.style.stroke; | 
|             if (gradient && gradient.__dom) { | 
|                 _super.prototype.markDomUsed.call(this, gradient.__dom); | 
|             } | 
|         } | 
|     }; | 
|     return GradientManager; | 
| }(Definable)); | 
| export default GradientManager; |