| 
/* 
 | 
* 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 * as graphic from '../../util/graphic.js'; 
 | 
import { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js'; 
 | 
import ChartView from '../../view/Chart.js'; 
 | 
import { setLabelLineStyle, getLabelLineStatesModels } from '../../label/labelGuideHelper.js'; 
 | 
import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js'; 
 | 
import { saveOldStyle } from '../../animation/basicTransition.js'; 
 | 
var opacityAccessPath = ['itemStyle', 'opacity']; 
 | 
/** 
 | 
 * Piece of pie including Sector, Label, LabelLine 
 | 
 */ 
 | 
var FunnelPiece = /** @class */function (_super) { 
 | 
  __extends(FunnelPiece, _super); 
 | 
  function FunnelPiece(data, idx) { 
 | 
    var _this = _super.call(this) || this; 
 | 
    var polygon = _this; 
 | 
    var labelLine = new graphic.Polyline(); 
 | 
    var text = new graphic.Text(); 
 | 
    polygon.setTextContent(text); 
 | 
    _this.setTextGuideLine(labelLine); 
 | 
    _this.updateData(data, idx, true); 
 | 
    return _this; 
 | 
  } 
 | 
  FunnelPiece.prototype.updateData = function (data, idx, firstCreate) { 
 | 
    var polygon = this; 
 | 
    var seriesModel = data.hostModel; 
 | 
    var itemModel = data.getItemModel(idx); 
 | 
    var layout = data.getItemLayout(idx); 
 | 
    var emphasisModel = itemModel.getModel('emphasis'); 
 | 
    var opacity = itemModel.get(opacityAccessPath); 
 | 
    opacity = opacity == null ? 1 : opacity; 
 | 
    if (!firstCreate) { 
 | 
      saveOldStyle(polygon); 
 | 
    } 
 | 
    // Update common style 
 | 
    polygon.useStyle(data.getItemVisual(idx, 'style')); 
 | 
    polygon.style.lineJoin = 'round'; 
 | 
    if (firstCreate) { 
 | 
      polygon.setShape({ 
 | 
        points: layout.points 
 | 
      }); 
 | 
      polygon.style.opacity = 0; 
 | 
      graphic.initProps(polygon, { 
 | 
        style: { 
 | 
          opacity: opacity 
 | 
        } 
 | 
      }, seriesModel, idx); 
 | 
    } else { 
 | 
      graphic.updateProps(polygon, { 
 | 
        style: { 
 | 
          opacity: opacity 
 | 
        }, 
 | 
        shape: { 
 | 
          points: layout.points 
 | 
        } 
 | 
      }, seriesModel, idx); 
 | 
    } 
 | 
    setStatesStylesFromModel(polygon, itemModel); 
 | 
    this._updateLabel(data, idx); 
 | 
    toggleHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled')); 
 | 
  }; 
 | 
  FunnelPiece.prototype._updateLabel = function (data, idx) { 
 | 
    var polygon = this; 
 | 
    var labelLine = this.getTextGuideLine(); 
 | 
    var labelText = polygon.getTextContent(); 
 | 
    var seriesModel = data.hostModel; 
 | 
    var itemModel = data.getItemModel(idx); 
 | 
    var layout = data.getItemLayout(idx); 
 | 
    var labelLayout = layout.label; 
 | 
    var style = data.getItemVisual(idx, 'style'); 
 | 
    var visualColor = style.fill; 
 | 
    setLabelStyle( 
 | 
    // position will not be used in setLabelStyle 
 | 
    labelText, getLabelStatesModels(itemModel), { 
 | 
      labelFetcher: data.hostModel, 
 | 
      labelDataIndex: idx, 
 | 
      defaultOpacity: style.opacity, 
 | 
      defaultText: data.getName(idx) 
 | 
    }, { 
 | 
      normal: { 
 | 
        align: labelLayout.textAlign, 
 | 
        verticalAlign: labelLayout.verticalAlign 
 | 
      } 
 | 
    }); 
 | 
    polygon.setTextConfig({ 
 | 
      local: true, 
 | 
      inside: !!labelLayout.inside, 
 | 
      insideStroke: visualColor, 
 | 
      // insideFill: 'auto', 
 | 
      outsideFill: visualColor 
 | 
    }); 
 | 
    var linePoints = labelLayout.linePoints; 
 | 
    labelLine.setShape({ 
 | 
      points: linePoints 
 | 
    }); 
 | 
    polygon.textGuideLineConfig = { 
 | 
      anchor: linePoints ? new graphic.Point(linePoints[0][0], linePoints[0][1]) : null 
 | 
    }; 
 | 
    // Make sure update style on labelText after setLabelStyle. 
 | 
    // Because setLabelStyle will replace a new style on it. 
 | 
    graphic.updateProps(labelText, { 
 | 
      style: { 
 | 
        x: labelLayout.x, 
 | 
        y: labelLayout.y 
 | 
      } 
 | 
    }, seriesModel, idx); 
 | 
    labelText.attr({ 
 | 
      rotation: labelLayout.rotation, 
 | 
      originX: labelLayout.x, 
 | 
      originY: labelLayout.y, 
 | 
      z2: 10 
 | 
    }); 
 | 
    setLabelLineStyle(polygon, getLabelLineStatesModels(itemModel), { 
 | 
      // Default use item visual color 
 | 
      stroke: visualColor 
 | 
    }); 
 | 
  }; 
 | 
  return FunnelPiece; 
 | 
}(graphic.Polygon); 
 | 
var FunnelView = /** @class */function (_super) { 
 | 
  __extends(FunnelView, _super); 
 | 
  function FunnelView() { 
 | 
    var _this = _super !== null && _super.apply(this, arguments) || this; 
 | 
    _this.type = FunnelView.type; 
 | 
    _this.ignoreLabelLineUpdate = true; 
 | 
    return _this; 
 | 
  } 
 | 
  FunnelView.prototype.render = function (seriesModel, ecModel, api) { 
 | 
    var data = seriesModel.getData(); 
 | 
    var oldData = this._data; 
 | 
    var group = this.group; 
 | 
    data.diff(oldData).add(function (idx) { 
 | 
      var funnelPiece = new FunnelPiece(data, idx); 
 | 
      data.setItemGraphicEl(idx, funnelPiece); 
 | 
      group.add(funnelPiece); 
 | 
    }).update(function (newIdx, oldIdx) { 
 | 
      var piece = oldData.getItemGraphicEl(oldIdx); 
 | 
      piece.updateData(data, newIdx); 
 | 
      group.add(piece); 
 | 
      data.setItemGraphicEl(newIdx, piece); 
 | 
    }).remove(function (idx) { 
 | 
      var piece = oldData.getItemGraphicEl(idx); 
 | 
      graphic.removeElementWithFadeOut(piece, seriesModel, idx); 
 | 
    }).execute(); 
 | 
    this._data = data; 
 | 
  }; 
 | 
  FunnelView.prototype.remove = function () { 
 | 
    this.group.removeAll(); 
 | 
    this._data = null; 
 | 
  }; 
 | 
  FunnelView.prototype.dispose = function () {}; 
 | 
  FunnelView.type = 'funnel'; 
 | 
  return FunnelView; 
 | 
}(ChartView); 
 | 
export default FunnelView; 
 |