blob: 94c2776c42842c2a277dac6573adba05c1e566ff [file] [log] [blame]
/*
* 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 ComponentModel from '../../model/Component';
import {
ComponentOption,
LabelOption,
LineStyleOption,
CommonTooltipOption,
TooltipRenderMode,
CallbackDataParams,
TooltipOrderMode
} from '../../util/types';
import {AxisPointerOption} from '../axisPointer/AxisPointerModel';
type TopLevelFormatterParams = CallbackDataParams | CallbackDataParams[];
export interface TooltipOption extends CommonTooltipOption<TopLevelFormatterParams>, ComponentOption {
mainType?: 'tooltip'
axisPointer?: AxisPointerOption & {
axis?: 'auto' | 'x' | 'y' | 'angle' | 'radius'
crossStyle?: LineStyleOption & {
// TODO
textStyle?: LabelOption
}
}
/**
* If show popup content
*/
showContent?: boolean
/**
* Trigger only works on coordinate system.
*/
trigger?: 'item' | 'axis' | 'none'
displayMode?: 'single' | 'multipleByCoordSys';
/**
* 'auto': use html by default, and use non-html if `document` is not defined
* 'html': use html for tooltip
* 'richText': use canvas, svg, and etc. for tooltip
*/
renderMode?: 'auto' | TooltipRenderMode // TODO richText renamed canvas?
/**
* If append popup dom to document.body
* Only available when renderMode is html
*/
appendToBody?: boolean
/**
* specified class name of tooltip dom
* Only available when renderMode is html
*/
className?: string
order?: TooltipOrderMode
}
class TooltipModel extends ComponentModel<TooltipOption> {
static type = 'tooltip' as const;
type = TooltipModel.type;
static dependencies = ['axisPointer'];
static defaultOption: TooltipOption = {
zlevel: 0,
z: 60,
show: true,
// tooltip main content
showContent: true,
// 'trigger' only works on coordinate system.
// 'item' | 'axis' | 'none'
trigger: 'item',
// 'click' | 'mousemove' | 'none'
triggerOn: 'mousemove|click',
alwaysShowContent: false,
displayMode: 'single', // 'single' | 'multipleByCoordSys'
renderMode: 'auto', // 'auto' | 'html' | 'richText'
// whether restraint content inside viewRect.
// If renderMode: 'richText', default true.
// If renderMode: 'html', defaut false (for backward compat).
confine: null,
showDelay: 0,
hideDelay: 100,
// Animation transition time, unit is second
transitionDuration: 0.4,
enterable: false,
backgroundColor: '#fff',
// box shadow
shadowBlur: 10,
shadowColor: 'rgba(0, 0, 0, .2)',
shadowOffsetX: 1,
shadowOffsetY: 2,
// tooltip border radius, unit is px, default is 4
borderRadius: 4,
// tooltip border width, unit is px, default is 0 (no border)
borderWidth: 1,
// Tooltip inside padding, default is 5 for all direction
// Array is allowed to set up, right, bottom, left, same with css
// The default value: See `tooltip/tooltipMarkup.ts#getPaddingFromTooltipModel`.
padding: null,
// Extra css text
extraCssText: '',
// axis indicator, trigger by axis
axisPointer: {
// default is line
// legal values: 'line' | 'shadow' | 'cross'
type: 'line',
// Valid when type is line, appoint tooltip line locate on which line. Optional
// legal values: 'x' | 'y' | 'angle' | 'radius' | 'auto'
// default is 'auto', chose the axis which type is category.
// for multiply y axis, cartesian coord chose x axis, polar chose angle axis
axis: 'auto',
animation: 'auto',
animationDurationUpdate: 200,
animationEasingUpdate: 'exponentialOut',
crossStyle: {
color: '#999',
width: 1,
type: 'dashed',
// TODO formatter
textStyle: {}
}
// lineStyle and shadowStyle should not be specified here,
// otherwise it will always override those styles on option.axisPointer.
},
textStyle: {
color: '#666',
fontSize: 14
}
};
}
export default TooltipModel;