| 
/* 
 | 
* 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 * as zrUtil from 'zrender/lib/core/util.js'; 
 | 
import * as graphic from '../../util/graphic.js'; 
 | 
import * as textContain from 'zrender/lib/contain/text.js'; 
 | 
import * as formatUtil from '../../util/format.js'; 
 | 
import * as matrix from 'zrender/lib/core/matrix.js'; 
 | 
import * as axisHelper from '../../coord/axisHelper.js'; 
 | 
import AxisBuilder from '../axis/AxisBuilder.js'; 
 | 
import { createTextStyle } from '../../label/labelStyle.js'; 
 | 
export function buildElStyle(axisPointerModel) { 
 | 
  var axisPointerType = axisPointerModel.get('type'); 
 | 
  var styleModel = axisPointerModel.getModel(axisPointerType + 'Style'); 
 | 
  var style; 
 | 
  if (axisPointerType === 'line') { 
 | 
    style = styleModel.getLineStyle(); 
 | 
    style.fill = null; 
 | 
  } else if (axisPointerType === 'shadow') { 
 | 
    style = styleModel.getAreaStyle(); 
 | 
    style.stroke = null; 
 | 
  } 
 | 
  return style; 
 | 
} 
 | 
/** 
 | 
 * @param {Function} labelPos {align, verticalAlign, position} 
 | 
 */ 
 | 
export function buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos) { 
 | 
  var value = axisPointerModel.get('value'); 
 | 
  var text = getValueLabel(value, axisModel.axis, axisModel.ecModel, axisPointerModel.get('seriesDataIndices'), { 
 | 
    precision: axisPointerModel.get(['label', 'precision']), 
 | 
    formatter: axisPointerModel.get(['label', 'formatter']) 
 | 
  }); 
 | 
  var labelModel = axisPointerModel.getModel('label'); 
 | 
  var paddings = formatUtil.normalizeCssArray(labelModel.get('padding') || 0); 
 | 
  var font = labelModel.getFont(); 
 | 
  var textRect = textContain.getBoundingRect(text, font); 
 | 
  var position = labelPos.position; 
 | 
  var width = textRect.width + paddings[1] + paddings[3]; 
 | 
  var height = textRect.height + paddings[0] + paddings[2]; 
 | 
  // Adjust by align. 
 | 
  var align = labelPos.align; 
 | 
  align === 'right' && (position[0] -= width); 
 | 
  align === 'center' && (position[0] -= width / 2); 
 | 
  var verticalAlign = labelPos.verticalAlign; 
 | 
  verticalAlign === 'bottom' && (position[1] -= height); 
 | 
  verticalAlign === 'middle' && (position[1] -= height / 2); 
 | 
  // Not overflow ec container 
 | 
  confineInContainer(position, width, height, api); 
 | 
  var bgColor = labelModel.get('backgroundColor'); 
 | 
  if (!bgColor || bgColor === 'auto') { 
 | 
    bgColor = axisModel.get(['axisLine', 'lineStyle', 'color']); 
 | 
  } 
 | 
  elOption.label = { 
 | 
    // shape: {x: 0, y: 0, width: width, height: height, r: labelModel.get('borderRadius')}, 
 | 
    x: position[0], 
 | 
    y: position[1], 
 | 
    style: createTextStyle(labelModel, { 
 | 
      text: text, 
 | 
      font: font, 
 | 
      fill: labelModel.getTextColor(), 
 | 
      padding: paddings, 
 | 
      backgroundColor: bgColor 
 | 
    }), 
 | 
    // Label should be over axisPointer. 
 | 
    z2: 10 
 | 
  }; 
 | 
} 
 | 
// Do not overflow ec container 
 | 
function confineInContainer(position, width, height, api) { 
 | 
  var viewWidth = api.getWidth(); 
 | 
  var viewHeight = api.getHeight(); 
 | 
  position[0] = Math.min(position[0] + width, viewWidth) - width; 
 | 
  position[1] = Math.min(position[1] + height, viewHeight) - height; 
 | 
  position[0] = Math.max(position[0], 0); 
 | 
  position[1] = Math.max(position[1], 0); 
 | 
} 
 | 
export function getValueLabel(value, axis, ecModel, seriesDataIndices, opt) { 
 | 
  value = axis.scale.parse(value); 
 | 
  var text = axis.scale.getLabel({ 
 | 
    value: value 
 | 
  }, { 
 | 
    // If `precision` is set, width can be fixed (like '12.00500'), which 
 | 
    // helps to debounce when when moving label. 
 | 
    precision: opt.precision 
 | 
  }); 
 | 
  var formatter = opt.formatter; 
 | 
  if (formatter) { 
 | 
    var params_1 = { 
 | 
      value: axisHelper.getAxisRawValue(axis, { 
 | 
        value: value 
 | 
      }), 
 | 
      axisDimension: axis.dim, 
 | 
      axisIndex: axis.index, 
 | 
      seriesData: [] 
 | 
    }; 
 | 
    zrUtil.each(seriesDataIndices, function (idxItem) { 
 | 
      var series = ecModel.getSeriesByIndex(idxItem.seriesIndex); 
 | 
      var dataIndex = idxItem.dataIndexInside; 
 | 
      var dataParams = series && series.getDataParams(dataIndex); 
 | 
      dataParams && params_1.seriesData.push(dataParams); 
 | 
    }); 
 | 
    if (zrUtil.isString(formatter)) { 
 | 
      text = formatter.replace('{value}', text); 
 | 
    } else if (zrUtil.isFunction(formatter)) { 
 | 
      text = formatter(params_1); 
 | 
    } 
 | 
  } 
 | 
  return text; 
 | 
} 
 | 
export function getTransformedPosition(axis, value, layoutInfo) { 
 | 
  var transform = matrix.create(); 
 | 
  matrix.rotate(transform, transform, layoutInfo.rotation); 
 | 
  matrix.translate(transform, transform, layoutInfo.position); 
 | 
  return graphic.applyTransform([axis.dataToCoord(value), (layoutInfo.labelOffset || 0) + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0)], transform); 
 | 
} 
 | 
export function buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api) { 
 | 
  // @ts-ignore 
 | 
  var textLayout = AxisBuilder.innerTextLayout(layoutInfo.rotation, 0, layoutInfo.labelDirection); 
 | 
  layoutInfo.labelMargin = axisPointerModel.get(['label', 'margin']); 
 | 
  buildLabelElOption(elOption, axisModel, axisPointerModel, api, { 
 | 
    position: getTransformedPosition(axisModel.axis, value, layoutInfo), 
 | 
    align: textLayout.textAlign, 
 | 
    verticalAlign: textLayout.textVerticalAlign 
 | 
  }); 
 | 
} 
 | 
export function makeLineShape(p1, p2, xDimIndex) { 
 | 
  xDimIndex = xDimIndex || 0; 
 | 
  return { 
 | 
    x1: p1[xDimIndex], 
 | 
    y1: p1[1 - xDimIndex], 
 | 
    x2: p2[xDimIndex], 
 | 
    y2: p2[1 - xDimIndex] 
 | 
  }; 
 | 
} 
 | 
export function makeRectShape(xy, wh, xDimIndex) { 
 | 
  xDimIndex = xDimIndex || 0; 
 | 
  return { 
 | 
    x: xy[xDimIndex], 
 | 
    y: xy[1 - xDimIndex], 
 | 
    width: wh[xDimIndex], 
 | 
    height: wh[1 - xDimIndex] 
 | 
  }; 
 | 
} 
 | 
export function makeSectorShape(cx, cy, r0, r, startAngle, endAngle) { 
 | 
  return { 
 | 
    cx: cx, 
 | 
    cy: cy, 
 | 
    r0: r0, 
 | 
    r: r, 
 | 
    startAngle: startAngle, 
 | 
    endAngle: endAngle, 
 | 
    clockwise: true 
 | 
  }; 
 | 
} 
 |