| 
/* 
 | 
* 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 zrUtil from 'zrender/lib/core/util.js'; 
 | 
import visualDefault from '../../visual/visualDefault.js'; 
 | 
import VisualMapping from '../../visual/VisualMapping.js'; 
 | 
import * as visualSolution from '../../visual/visualSolution.js'; 
 | 
import * as modelUtil from '../../util/model.js'; 
 | 
import * as numberUtil from '../../util/number.js'; 
 | 
import ComponentModel from '../../model/Component.js'; 
 | 
var mapVisual = VisualMapping.mapVisual; 
 | 
var eachVisual = VisualMapping.eachVisual; 
 | 
var isArray = zrUtil.isArray; 
 | 
var each = zrUtil.each; 
 | 
var asc = numberUtil.asc; 
 | 
var linearMap = numberUtil.linearMap; 
 | 
var VisualMapModel = /** @class */function (_super) { 
 | 
  __extends(VisualMapModel, _super); 
 | 
  function VisualMapModel() { 
 | 
    var _this = _super !== null && _super.apply(this, arguments) || this; 
 | 
    _this.type = VisualMapModel.type; 
 | 
    _this.stateList = ['inRange', 'outOfRange']; 
 | 
    _this.replacableOptionKeys = ['inRange', 'outOfRange', 'target', 'controller', 'color']; 
 | 
    _this.layoutMode = { 
 | 
      type: 'box', 
 | 
      ignoreSize: true 
 | 
    }; 
 | 
    /** 
 | 
     * [lowerBound, upperBound] 
 | 
     */ 
 | 
    _this.dataBound = [-Infinity, Infinity]; 
 | 
    _this.targetVisuals = {}; 
 | 
    _this.controllerVisuals = {}; 
 | 
    return _this; 
 | 
  } 
 | 
  VisualMapModel.prototype.init = function (option, parentModel, ecModel) { 
 | 
    this.mergeDefaultAndTheme(option, ecModel); 
 | 
  }; 
 | 
  /** 
 | 
   * @protected 
 | 
   */ 
 | 
  VisualMapModel.prototype.optionUpdated = function (newOption, isInit) { 
 | 
    var thisOption = this.option; 
 | 
    !isInit && visualSolution.replaceVisualOption(thisOption, newOption, this.replacableOptionKeys); 
 | 
    this.textStyleModel = this.getModel('textStyle'); 
 | 
    this.resetItemSize(); 
 | 
    this.completeVisualOption(); 
 | 
  }; 
 | 
  /** 
 | 
   * @protected 
 | 
   */ 
 | 
  VisualMapModel.prototype.resetVisual = function (supplementVisualOption) { 
 | 
    var stateList = this.stateList; 
 | 
    supplementVisualOption = zrUtil.bind(supplementVisualOption, this); 
 | 
    this.controllerVisuals = visualSolution.createVisualMappings(this.option.controller, stateList, supplementVisualOption); 
 | 
    this.targetVisuals = visualSolution.createVisualMappings(this.option.target, stateList, supplementVisualOption); 
 | 
  }; 
 | 
  /** 
 | 
   * @public 
 | 
   */ 
 | 
  VisualMapModel.prototype.getItemSymbol = function () { 
 | 
    return null; 
 | 
  }; 
 | 
  /** 
 | 
   * @protected 
 | 
   * @return {Array.<number>} An array of series indices. 
 | 
   */ 
 | 
  VisualMapModel.prototype.getTargetSeriesIndices = function () { 
 | 
    var optionSeriesIndex = this.option.seriesIndex; 
 | 
    var seriesIndices = []; 
 | 
    if (optionSeriesIndex == null || optionSeriesIndex === 'all') { 
 | 
      this.ecModel.eachSeries(function (seriesModel, index) { 
 | 
        seriesIndices.push(index); 
 | 
      }); 
 | 
    } else { 
 | 
      seriesIndices = modelUtil.normalizeToArray(optionSeriesIndex); 
 | 
    } 
 | 
    return seriesIndices; 
 | 
  }; 
 | 
  /** 
 | 
   * @public 
 | 
   */ 
 | 
  VisualMapModel.prototype.eachTargetSeries = function (callback, context) { 
 | 
    zrUtil.each(this.getTargetSeriesIndices(), function (seriesIndex) { 
 | 
      var seriesModel = this.ecModel.getSeriesByIndex(seriesIndex); 
 | 
      if (seriesModel) { 
 | 
        callback.call(context, seriesModel); 
 | 
      } 
 | 
    }, this); 
 | 
  }; 
 | 
  /** 
 | 
   * @pubilc 
 | 
   */ 
 | 
  VisualMapModel.prototype.isTargetSeries = function (seriesModel) { 
 | 
    var is = false; 
 | 
    this.eachTargetSeries(function (model) { 
 | 
      model === seriesModel && (is = true); 
 | 
    }); 
 | 
    return is; 
 | 
  }; 
 | 
  /** 
 | 
   * @example 
 | 
   * this.formatValueText(someVal); // format single numeric value to text. 
 | 
   * this.formatValueText(someVal, true); // format single category value to text. 
 | 
   * this.formatValueText([min, max]); // format numeric min-max to text. 
 | 
   * this.formatValueText([this.dataBound[0], max]); // using data lower bound. 
 | 
   * this.formatValueText([min, this.dataBound[1]]); // using data upper bound. 
 | 
   * 
 | 
   * @param value Real value, or this.dataBound[0 or 1]. 
 | 
   * @param isCategory Only available when value is number. 
 | 
   * @param edgeSymbols Open-close symbol when value is interval. 
 | 
   * @protected 
 | 
   */ 
 | 
  VisualMapModel.prototype.formatValueText = function (value, isCategory, edgeSymbols) { 
 | 
    var option = this.option; 
 | 
    var precision = option.precision; 
 | 
    var dataBound = this.dataBound; 
 | 
    var formatter = option.formatter; 
 | 
    var isMinMax; 
 | 
    edgeSymbols = edgeSymbols || ['<', '>']; 
 | 
    if (zrUtil.isArray(value)) { 
 | 
      value = value.slice(); 
 | 
      isMinMax = true; 
 | 
    } 
 | 
    var textValue = isCategory ? value // Value is string when isCategory 
 | 
    : isMinMax ? [toFixed(value[0]), toFixed(value[1])] : toFixed(value); 
 | 
    if (zrUtil.isString(formatter)) { 
 | 
      return formatter.replace('{value}', isMinMax ? textValue[0] : textValue).replace('{value2}', isMinMax ? textValue[1] : textValue); 
 | 
    } else if (zrUtil.isFunction(formatter)) { 
 | 
      return isMinMax ? formatter(value[0], value[1]) : formatter(value); 
 | 
    } 
 | 
    if (isMinMax) { 
 | 
      if (value[0] === dataBound[0]) { 
 | 
        return edgeSymbols[0] + ' ' + textValue[1]; 
 | 
      } else if (value[1] === dataBound[1]) { 
 | 
        return edgeSymbols[1] + ' ' + textValue[0]; 
 | 
      } else { 
 | 
        return textValue[0] + ' - ' + textValue[1]; 
 | 
      } 
 | 
    } else { 
 | 
      // Format single value (includes category case). 
 | 
      return textValue; 
 | 
    } 
 | 
    function toFixed(val) { 
 | 
      return val === dataBound[0] ? 'min' : val === dataBound[1] ? 'max' : (+val).toFixed(Math.min(precision, 20)); 
 | 
    } 
 | 
  }; 
 | 
  /** 
 | 
   * @protected 
 | 
   */ 
 | 
  VisualMapModel.prototype.resetExtent = function () { 
 | 
    var thisOption = this.option; 
 | 
    // Can not calculate data extent by data here. 
 | 
    // Because series and data may be modified in processing stage. 
 | 
    // So we do not support the feature "auto min/max". 
 | 
    var extent = asc([thisOption.min, thisOption.max]); 
 | 
    this._dataExtent = extent; 
 | 
  }; 
 | 
  /** 
 | 
   * PENDING: 
 | 
   * delete this method if no outer usage. 
 | 
   * 
 | 
   * Return  Concrete dimension. If null/undefined is returned, no dimension is used. 
 | 
   */ 
 | 
  // getDataDimension(data: SeriesData) { 
 | 
  //     const optDim = this.option.dimension; 
 | 
  //     if (optDim != null) { 
 | 
  //         return data.getDimension(optDim); 
 | 
  //     } 
 | 
  //     const dimNames = data.dimensions; 
 | 
  //     for (let i = dimNames.length - 1; i >= 0; i--) { 
 | 
  //         const dimName = dimNames[i]; 
 | 
  //         const dimInfo = data.getDimensionInfo(dimName); 
 | 
  //         if (!dimInfo.isCalculationCoord) { 
 | 
  //             return dimName; 
 | 
  //         } 
 | 
  //     } 
 | 
  // } 
 | 
  VisualMapModel.prototype.getDataDimensionIndex = function (data) { 
 | 
    var optDim = this.option.dimension; 
 | 
    if (optDim != null) { 
 | 
      return data.getDimensionIndex(optDim); 
 | 
    } 
 | 
    var dimNames = data.dimensions; 
 | 
    for (var i = dimNames.length - 1; i >= 0; i--) { 
 | 
      var dimName = dimNames[i]; 
 | 
      var dimInfo = data.getDimensionInfo(dimName); 
 | 
      if (!dimInfo.isCalculationCoord) { 
 | 
        return dimInfo.storeDimIndex; 
 | 
      } 
 | 
    } 
 | 
  }; 
 | 
  VisualMapModel.prototype.getExtent = function () { 
 | 
    return this._dataExtent.slice(); 
 | 
  }; 
 | 
  VisualMapModel.prototype.completeVisualOption = function () { 
 | 
    var ecModel = this.ecModel; 
 | 
    var thisOption = this.option; 
 | 
    var base = { 
 | 
      inRange: thisOption.inRange, 
 | 
      outOfRange: thisOption.outOfRange 
 | 
    }; 
 | 
    var target = thisOption.target || (thisOption.target = {}); 
 | 
    var controller = thisOption.controller || (thisOption.controller = {}); 
 | 
    zrUtil.merge(target, base); // Do not override 
 | 
    zrUtil.merge(controller, base); // Do not override 
 | 
    var isCategory = this.isCategory(); 
 | 
    completeSingle.call(this, target); 
 | 
    completeSingle.call(this, controller); 
 | 
    completeInactive.call(this, target, 'inRange', 'outOfRange'); 
 | 
    // completeInactive.call(this, target, 'outOfRange', 'inRange'); 
 | 
    completeController.call(this, controller); 
 | 
    function completeSingle(base) { 
 | 
      // Compatible with ec2 dataRange.color. 
 | 
      // The mapping order of dataRange.color is: [high value, ..., low value] 
 | 
      // whereas inRange.color and outOfRange.color is [low value, ..., high value] 
 | 
      // Notice: ec2 has no inverse. 
 | 
      if (isArray(thisOption.color) 
 | 
      // If there has been inRange: {symbol: ...}, adding color is a mistake. 
 | 
      // So adding color only when no inRange defined. 
 | 
      && !base.inRange) { 
 | 
        base.inRange = { 
 | 
          color: thisOption.color.slice().reverse() 
 | 
        }; 
 | 
      } 
 | 
      // Compatible with previous logic, always give a default color, otherwise 
 | 
      // simple config with no inRange and outOfRange will not work. 
 | 
      // Originally we use visualMap.color as the default color, but setOption at 
 | 
      // the second time the default color will be erased. So we change to use 
 | 
      // constant DEFAULT_COLOR. 
 | 
      // If user do not want the default color, set inRange: {color: null}. 
 | 
      base.inRange = base.inRange || { 
 | 
        color: ecModel.get('gradientColor') 
 | 
      }; 
 | 
    } 
 | 
    function completeInactive(base, stateExist, stateAbsent) { 
 | 
      var optExist = base[stateExist]; 
 | 
      var optAbsent = base[stateAbsent]; 
 | 
      if (optExist && !optAbsent) { 
 | 
        optAbsent = base[stateAbsent] = {}; 
 | 
        each(optExist, function (visualData, visualType) { 
 | 
          if (!VisualMapping.isValidType(visualType)) { 
 | 
            return; 
 | 
          } 
 | 
          var defa = visualDefault.get(visualType, 'inactive', isCategory); 
 | 
          if (defa != null) { 
 | 
            optAbsent[visualType] = defa; 
 | 
            // Compatibable with ec2: 
 | 
            // Only inactive color to rgba(0,0,0,0) can not 
 | 
            // make label transparent, so use opacity also. 
 | 
            if (visualType === 'color' && !optAbsent.hasOwnProperty('opacity') && !optAbsent.hasOwnProperty('colorAlpha')) { 
 | 
              optAbsent.opacity = [0, 0]; 
 | 
            } 
 | 
          } 
 | 
        }); 
 | 
      } 
 | 
    } 
 | 
    function completeController(controller) { 
 | 
      var symbolExists = (controller.inRange || {}).symbol || (controller.outOfRange || {}).symbol; 
 | 
      var symbolSizeExists = (controller.inRange || {}).symbolSize || (controller.outOfRange || {}).symbolSize; 
 | 
      var inactiveColor = this.get('inactiveColor'); 
 | 
      var itemSymbol = this.getItemSymbol(); 
 | 
      var defaultSymbol = itemSymbol || 'roundRect'; 
 | 
      each(this.stateList, function (state) { 
 | 
        var itemSize = this.itemSize; 
 | 
        var visuals = controller[state]; 
 | 
        // Set inactive color for controller if no other color 
 | 
        // attr (like colorAlpha) specified. 
 | 
        if (!visuals) { 
 | 
          visuals = controller[state] = { 
 | 
            color: isCategory ? inactiveColor : [inactiveColor] 
 | 
          }; 
 | 
        } 
 | 
        // Consistent symbol and symbolSize if not specified. 
 | 
        if (visuals.symbol == null) { 
 | 
          visuals.symbol = symbolExists && zrUtil.clone(symbolExists) || (isCategory ? defaultSymbol : [defaultSymbol]); 
 | 
        } 
 | 
        if (visuals.symbolSize == null) { 
 | 
          visuals.symbolSize = symbolSizeExists && zrUtil.clone(symbolSizeExists) || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]); 
 | 
        } 
 | 
        // Filter none 
 | 
        visuals.symbol = mapVisual(visuals.symbol, function (symbol) { 
 | 
          return symbol === 'none' ? defaultSymbol : symbol; 
 | 
        }); 
 | 
        // Normalize symbolSize 
 | 
        var symbolSize = visuals.symbolSize; 
 | 
        if (symbolSize != null) { 
 | 
          var max_1 = -Infinity; 
 | 
          // symbolSize can be object when categories defined. 
 | 
          eachVisual(symbolSize, function (value) { 
 | 
            value > max_1 && (max_1 = value); 
 | 
          }); 
 | 
          visuals.symbolSize = mapVisual(symbolSize, function (value) { 
 | 
            return linearMap(value, [0, max_1], [0, itemSize[0]], true); 
 | 
          }); 
 | 
        } 
 | 
      }, this); 
 | 
    } 
 | 
  }; 
 | 
  VisualMapModel.prototype.resetItemSize = function () { 
 | 
    this.itemSize = [parseFloat(this.get('itemWidth')), parseFloat(this.get('itemHeight'))]; 
 | 
  }; 
 | 
  VisualMapModel.prototype.isCategory = function () { 
 | 
    return !!this.option.categories; 
 | 
  }; 
 | 
  /** 
 | 
   * @public 
 | 
   * @abstract 
 | 
   */ 
 | 
  VisualMapModel.prototype.setSelected = function (selected) {}; 
 | 
  VisualMapModel.prototype.getSelected = function () { 
 | 
    return null; 
 | 
  }; 
 | 
  /** 
 | 
   * @public 
 | 
   * @abstract 
 | 
   */ 
 | 
  VisualMapModel.prototype.getValueState = function (value) { 
 | 
    return null; 
 | 
  }; 
 | 
  /** 
 | 
   * FIXME 
 | 
   * Do not publish to thirt-part-dev temporarily 
 | 
   * util the interface is stable. (Should it return 
 | 
   * a function but not visual meta?) 
 | 
   * 
 | 
   * @pubilc 
 | 
   * @abstract 
 | 
   * @param getColorVisual 
 | 
   *        params: value, valueState 
 | 
   *        return: color 
 | 
   * @return {Object} visualMeta 
 | 
   *        should includes {stops, outerColors} 
 | 
   *        outerColor means [colorBeyondMinValue, colorBeyondMaxValue] 
 | 
   */ 
 | 
  VisualMapModel.prototype.getVisualMeta = function (getColorVisual) { 
 | 
    return null; 
 | 
  }; 
 | 
  VisualMapModel.type = 'visualMap'; 
 | 
  VisualMapModel.dependencies = ['series']; 
 | 
  VisualMapModel.defaultOption = { 
 | 
    show: true, 
 | 
    // zlevel: 0, 
 | 
    z: 4, 
 | 
    seriesIndex: 'all', 
 | 
    min: 0, 
 | 
    max: 200, 
 | 
    left: 0, 
 | 
    right: null, 
 | 
    top: null, 
 | 
    bottom: 0, 
 | 
    itemWidth: null, 
 | 
    itemHeight: null, 
 | 
    inverse: false, 
 | 
    orient: 'vertical', 
 | 
    backgroundColor: 'rgba(0,0,0,0)', 
 | 
    borderColor: '#ccc', 
 | 
    contentColor: '#5793f3', 
 | 
    inactiveColor: '#aaa', 
 | 
    borderWidth: 0, 
 | 
    padding: 5, 
 | 
    // 接受数组分别设定上右下左边距,同css 
 | 
    textGap: 10, 
 | 
    precision: 0, 
 | 
    textStyle: { 
 | 
      color: '#333' // 值域文字颜色 
 | 
    } 
 | 
  }; 
 | 
  return VisualMapModel; 
 | 
}(ComponentModel); 
 | 
export default VisualMapModel; 
 |