|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
|   | 
|   | 
| /** | 
|  * AUTO-GENERATED FILE. DO NOT MODIFY. | 
|  */ | 
|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
| import { __extends } from "tslib"; | 
| import { ECPolygon } from '../line/poly.js'; | 
| import * as graphic from '../../util/graphic.js'; | 
| import { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js'; | 
| import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js'; | 
| import { bind } from 'zrender/lib/core/util.js'; | 
| import DataDiffer from '../../data/DataDiffer.js'; | 
| import ChartView from '../../view/Chart.js'; | 
| import { saveOldStyle } from '../../animation/basicTransition.js'; | 
| var ThemeRiverView = /** @class */function (_super) { | 
|   __extends(ThemeRiverView, _super); | 
|   function ThemeRiverView() { | 
|     var _this = _super !== null && _super.apply(this, arguments) || this; | 
|     _this.type = ThemeRiverView.type; | 
|     _this._layers = []; | 
|     return _this; | 
|   } | 
|   ThemeRiverView.prototype.render = function (seriesModel, ecModel, api) { | 
|     var data = seriesModel.getData(); | 
|     var self = this; | 
|     var group = this.group; | 
|     var layersSeries = seriesModel.getLayerSeries(); | 
|     var layoutInfo = data.getLayout('layoutInfo'); | 
|     var rect = layoutInfo.rect; | 
|     var boundaryGap = layoutInfo.boundaryGap; | 
|     group.x = 0; | 
|     group.y = rect.y + boundaryGap[0]; | 
|     function keyGetter(item) { | 
|       return item.name; | 
|     } | 
|     var dataDiffer = new DataDiffer(this._layersSeries || [], layersSeries, keyGetter, keyGetter); | 
|     var newLayersGroups = []; | 
|     dataDiffer.add(bind(process, this, 'add')).update(bind(process, this, 'update')).remove(bind(process, this, 'remove')).execute(); | 
|     function process(status, idx, oldIdx) { | 
|       var oldLayersGroups = self._layers; | 
|       if (status === 'remove') { | 
|         group.remove(oldLayersGroups[idx]); | 
|         return; | 
|       } | 
|       var points0 = []; | 
|       var points1 = []; | 
|       var style; | 
|       var indices = layersSeries[idx].indices; | 
|       var j = 0; | 
|       for (; j < indices.length; j++) { | 
|         var layout = data.getItemLayout(indices[j]); | 
|         var x = layout.x; | 
|         var y0 = layout.y0; | 
|         var y = layout.y; | 
|         points0.push(x, y0); | 
|         points1.push(x, y0 + y); | 
|         style = data.getItemVisual(indices[j], 'style'); | 
|       } | 
|       var polygon; | 
|       var textLayout = data.getItemLayout(indices[0]); | 
|       var labelModel = seriesModel.getModel('label'); | 
|       var margin = labelModel.get('margin'); | 
|       var emphasisModel = seriesModel.getModel('emphasis'); | 
|       if (status === 'add') { | 
|         var layerGroup = newLayersGroups[idx] = new graphic.Group(); | 
|         polygon = new ECPolygon({ | 
|           shape: { | 
|             points: points0, | 
|             stackedOnPoints: points1, | 
|             smooth: 0.4, | 
|             stackedOnSmooth: 0.4, | 
|             smoothConstraint: false | 
|           }, | 
|           z2: 0 | 
|         }); | 
|         layerGroup.add(polygon); | 
|         group.add(layerGroup); | 
|         if (seriesModel.isAnimationEnabled()) { | 
|           polygon.setClipPath(createGridClipShape(polygon.getBoundingRect(), seriesModel, function () { | 
|             polygon.removeClipPath(); | 
|           })); | 
|         } | 
|       } else { | 
|         var layerGroup = oldLayersGroups[oldIdx]; | 
|         polygon = layerGroup.childAt(0); | 
|         group.add(layerGroup); | 
|         newLayersGroups[idx] = layerGroup; | 
|         graphic.updateProps(polygon, { | 
|           shape: { | 
|             points: points0, | 
|             stackedOnPoints: points1 | 
|           } | 
|         }, seriesModel); | 
|         saveOldStyle(polygon); | 
|       } | 
|       setLabelStyle(polygon, getLabelStatesModels(seriesModel), { | 
|         labelDataIndex: indices[j - 1], | 
|         defaultText: data.getName(indices[j - 1]), | 
|         inheritColor: style.fill | 
|       }, { | 
|         normal: { | 
|           verticalAlign: 'middle' | 
|           // align: 'right' | 
|         } | 
|       }); | 
|       polygon.setTextConfig({ | 
|         position: null, | 
|         local: true | 
|       }); | 
|       var labelEl = polygon.getTextContent(); | 
|       // TODO More label position options. | 
|       if (labelEl) { | 
|         labelEl.x = textLayout.x - margin; | 
|         labelEl.y = textLayout.y0 + textLayout.y / 2; | 
|       } | 
|       polygon.useStyle(style); | 
|       data.setItemGraphicEl(idx, polygon); | 
|       setStatesStylesFromModel(polygon, seriesModel); | 
|       toggleHoverEmphasis(polygon, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled')); | 
|     } | 
|     this._layersSeries = layersSeries; | 
|     this._layers = newLayersGroups; | 
|   }; | 
|   ThemeRiverView.type = 'themeRiver'; | 
|   return ThemeRiverView; | 
| }(ChartView); | 
| ; | 
| // add animation to the view | 
| function createGridClipShape(rect, seriesModel, cb) { | 
|   var rectEl = new graphic.Rect({ | 
|     shape: { | 
|       x: rect.x - 10, | 
|       y: rect.y - 10, | 
|       width: 0, | 
|       height: rect.height + 20 | 
|     } | 
|   }); | 
|   graphic.initProps(rectEl, { | 
|     shape: { | 
|       x: rect.x - 50, | 
|       width: rect.width + 100, | 
|       height: rect.height + 20 | 
|     } | 
|   }, seriesModel, cb); | 
|   return rectEl; | 
| } | 
| export default ThemeRiverView; |