|  | /* | 
|  | * 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 createSeriesDataSimply from '../helper/createSeriesDataSimply'; | 
|  | import SeriesModel from '../../model/Series'; | 
|  | import { | 
|  | SeriesOption, | 
|  | CircleLayoutOptionMixin, | 
|  | LineStyleOption, | 
|  | ColorString, | 
|  | LabelOption, | 
|  | ItemStyleOption, | 
|  | OptionDataValueNumeric, | 
|  | StatesOptionMixin, | 
|  | SeriesEncodeOptionMixin, | 
|  | DefaultStatesMixinEmphasis, | 
|  | CallbackDataParams | 
|  | } from '../../util/types'; | 
|  | import GlobalModel from '../../model/Global'; | 
|  | import SeriesData from '../../data/SeriesData'; | 
|  |  | 
|  | // [percent, color] | 
|  | type GaugeColorStop = [number, ColorString]; | 
|  |  | 
|  | interface LabelFormatter { | 
|  | (value: number): string | 
|  | } | 
|  |  | 
|  | interface PointerOption { | 
|  | icon?: string | 
|  | show?: boolean | 
|  | /** | 
|  | * If pointer shows above title and detail | 
|  | */ | 
|  | showAbove?: boolean, | 
|  | keepAspect?: boolean | 
|  | itemStyle?: ItemStyleOption | 
|  | /** | 
|  | * Can be percent | 
|  | */ | 
|  | offsetCenter?: (number | string)[] | 
|  | length?: number | string | 
|  | width?: number | 
|  | } | 
|  |  | 
|  | interface AnchorOption { | 
|  | show?: boolean | 
|  | showAbove?: boolean | 
|  | size?: number | 
|  | icon?: string | 
|  | offsetCenter?: (number | string)[] | 
|  | keepAspect?: boolean | 
|  | itemStyle?: ItemStyleOption | 
|  | } | 
|  |  | 
|  | interface ProgressOption { | 
|  | show?: boolean | 
|  | overlap?: boolean | 
|  | width?: number | 
|  | roundCap?: boolean | 
|  | clip?: boolean | 
|  | itemStyle?: ItemStyleOption | 
|  | } | 
|  |  | 
|  | interface TitleOption extends LabelOption { | 
|  | /** | 
|  | * [x, y] offset | 
|  | */ | 
|  | offsetCenter?: (number | string)[] | 
|  | formatter?: LabelFormatter | string | 
|  |  | 
|  | /** | 
|  | * If do value animtion. | 
|  | */ | 
|  | valueAnimation?: boolean | 
|  | } | 
|  |  | 
|  | interface DetailOption extends LabelOption { | 
|  | /** | 
|  | * [x, y] offset | 
|  | */ | 
|  | offsetCenter?: (number | string)[] | 
|  | formatter?: LabelFormatter | string | 
|  |  | 
|  | /** | 
|  | * If do value animtion. | 
|  | */ | 
|  | valueAnimation?: boolean | 
|  | } | 
|  |  | 
|  | interface GaugeStatesMixin { | 
|  | emphasis?: DefaultStatesMixinEmphasis | 
|  | } | 
|  | export interface GaugeStateOption<TCbParams = never> { | 
|  | itemStyle?: ItemStyleOption<TCbParams> | 
|  | } | 
|  |  | 
|  | export interface GaugeDataItemOption extends GaugeStateOption, | 
|  | StatesOptionMixin<GaugeStateOption<CallbackDataParams>, GaugeStatesMixin> { | 
|  | name?: string | 
|  | value?: OptionDataValueNumeric | 
|  | pointer?: PointerOption | 
|  | progress?: ProgressOption | 
|  | title?: TitleOption | 
|  | detail?: DetailOption | 
|  | } | 
|  | export interface GaugeSeriesOption extends SeriesOption<GaugeStateOption, GaugeStatesMixin>, | 
|  | GaugeStateOption<CallbackDataParams>, | 
|  | CircleLayoutOptionMixin, SeriesEncodeOptionMixin { | 
|  | type?: 'gauge' | 
|  |  | 
|  | // override radius | 
|  | radius?: number | string | 
|  |  | 
|  | startAngle?: number | 
|  | endAngle?: number | 
|  | clockwise?: boolean | 
|  |  | 
|  | min?: number | 
|  | max?: number | 
|  |  | 
|  | splitNumber?: number | 
|  |  | 
|  | itemStyle?: ItemStyleOption | 
|  |  | 
|  | axisLine?: { | 
|  | show?: boolean | 
|  | roundCap?: boolean | 
|  | lineStyle?: Omit<LineStyleOption, 'color'> & { | 
|  | color?: GaugeColorStop[] | 
|  | } | 
|  | }, | 
|  |  | 
|  | progress?: ProgressOption | 
|  |  | 
|  | splitLine?: { | 
|  | show?: boolean | 
|  | /** | 
|  | * Can be percent | 
|  | */ | 
|  | length?: number | 
|  | distance?: number | 
|  | lineStyle?: LineStyleOption | 
|  | } | 
|  |  | 
|  | axisTick?: { | 
|  | show?: boolean | 
|  | splitNumber?: number | 
|  | /** | 
|  | * Can be percent | 
|  | */ | 
|  | length?: number | string | 
|  | distance?: number | 
|  | lineStyle?: LineStyleOption | 
|  | } | 
|  |  | 
|  | axisLabel?: Omit<LabelOption, 'rotate'> & { | 
|  | formatter?: LabelFormatter | string | 
|  | rotate?: 'tangential' | 'radial' | number | 
|  | } | 
|  |  | 
|  | pointer?: PointerOption | 
|  | anchor?: AnchorOption | 
|  |  | 
|  | title?: TitleOption | 
|  | detail?: DetailOption | 
|  |  | 
|  | data?: (OptionDataValueNumeric | GaugeDataItemOption)[] | 
|  | } | 
|  |  | 
|  | class GaugeSeriesModel extends SeriesModel<GaugeSeriesOption> { | 
|  |  | 
|  | static type = 'series.gauge' as const; | 
|  | type = GaugeSeriesModel.type; | 
|  |  | 
|  | visualStyleAccessPath = 'itemStyle'; | 
|  |  | 
|  | getInitialData(option: GaugeSeriesOption, ecModel: GlobalModel): SeriesData { | 
|  | return createSeriesDataSimply(this, ['value']); | 
|  | } | 
|  |  | 
|  | static defaultOption: GaugeSeriesOption = { | 
|  | // zlevel: 0, | 
|  | z: 2, | 
|  | colorBy: 'data', | 
|  | // 默认全局居中 | 
|  | center: ['50%', '50%'], | 
|  | legendHoverLink: true, | 
|  | radius: '75%', | 
|  | startAngle: 225, | 
|  | endAngle: -45, | 
|  | clockwise: true, | 
|  | // 最小值 | 
|  | min: 0, | 
|  | // 最大值 | 
|  | max: 100, | 
|  | // 分割段数,默认为10 | 
|  | splitNumber: 10, | 
|  | // 坐标轴线 | 
|  | axisLine: { | 
|  | // 默认显示,属性show控制显示与否 | 
|  | show: true, | 
|  | roundCap: false, | 
|  | lineStyle: {       // 属性lineStyle控制线条样式 | 
|  | color: [[1, '#E6EBF8']], | 
|  | width: 10 | 
|  | } | 
|  | }, | 
|  | // 坐标轴线 | 
|  | progress: { | 
|  | // 默认显示,属性show控制显示与否 | 
|  | show: false, | 
|  | overlap: true, | 
|  | width: 10, | 
|  | roundCap: false, | 
|  | clip: true | 
|  | }, | 
|  | // 分隔线 | 
|  | splitLine: { | 
|  | // 默认显示,属性show控制显示与否 | 
|  | show: true, | 
|  | // 属性length控制线长 | 
|  | length: 10, | 
|  | distance: 10, | 
|  | // 属性lineStyle(详见lineStyle)控制线条样式 | 
|  | lineStyle: { | 
|  | color: '#63677A', | 
|  | width: 3, | 
|  | type: 'solid' | 
|  | } | 
|  | }, | 
|  | // 坐标轴小标记 | 
|  | axisTick: { | 
|  | // 属性show控制显示与否,默认不显示 | 
|  | show: true, | 
|  | // 每份split细分多少段 | 
|  | splitNumber: 5, | 
|  | // 属性length控制线长 | 
|  | length: 6, | 
|  | distance: 10, | 
|  | // 属性lineStyle控制线条样式 | 
|  | lineStyle: { | 
|  | color: '#63677A', | 
|  | width: 1, | 
|  | type: 'solid' | 
|  | } | 
|  | }, | 
|  | axisLabel: { | 
|  | show: true, | 
|  | distance: 15, | 
|  | // formatter: null, | 
|  | color: '#464646', | 
|  | fontSize: 12, | 
|  | rotate: 0 | 
|  | }, | 
|  | pointer: { | 
|  | icon: null, | 
|  | offsetCenter: [0, 0], | 
|  | show: true, | 
|  | showAbove: true, | 
|  | length: '60%', | 
|  | width: 6, | 
|  | keepAspect: false | 
|  | }, | 
|  | anchor: { | 
|  | show: false, | 
|  | showAbove: false, | 
|  | size: 6, | 
|  | icon: 'circle', | 
|  | offsetCenter: [0, 0], | 
|  | keepAspect: false, | 
|  | itemStyle: { | 
|  | color: '#fff', | 
|  | borderWidth: 0, | 
|  | borderColor: '#5470c6' | 
|  | } | 
|  | }, | 
|  |  | 
|  | title: { | 
|  | show: true, | 
|  | // x, y,单位px | 
|  | offsetCenter: [0, '20%'], | 
|  | // 其余属性默认使用全局文本样式,详见TEXTSTYLE | 
|  | color: '#464646', | 
|  | fontSize: 16, | 
|  | valueAnimation: false | 
|  | }, | 
|  | detail: { | 
|  | show: true, | 
|  | backgroundColor: 'rgba(0,0,0,0)', | 
|  | borderWidth: 0, | 
|  | borderColor: '#ccc', | 
|  | width: 100, | 
|  | height: null, // self-adaption | 
|  | padding: [5, 10], | 
|  | // x, y,单位px | 
|  | offsetCenter: [0, '40%'], | 
|  | // formatter: null, | 
|  | // 其余属性默认使用全局文本样式,详见TEXTSTYLE | 
|  | color: '#464646', | 
|  | fontSize: 30, | 
|  | fontWeight: 'bold', | 
|  | lineHeight: 30, | 
|  | valueAnimation: false | 
|  | } | 
|  | }; | 
|  | } | 
|  |  | 
|  |  | 
|  | export default GaugeSeriesModel; |