|  | /* | 
|  | * 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 SeriesModel from '../../model/Series'; | 
|  | import {WhiskerBoxCommonMixin} from '../helper/whiskerBoxCommon'; | 
|  | import { | 
|  | SeriesOption, | 
|  | SeriesOnCartesianOptionMixin, | 
|  | LayoutOrient, | 
|  | ItemStyleOption, | 
|  | ZRColor, | 
|  | ColorString, | 
|  | SeriesLabelOption, | 
|  | SeriesLargeOptionMixin, | 
|  | StatesOptionMixin, | 
|  | SeriesEncodeOptionMixin, | 
|  | DefaultEmphasisFocus, | 
|  | OptionDataValue | 
|  | } from '../../util/types'; | 
|  | import SeriesData from '../../data/SeriesData'; | 
|  | import Cartesian2D from '../../coord/cartesian/Cartesian2D'; | 
|  | import { BrushCommonSelectorsForSeries } from '../../component/brush/selector'; | 
|  | import { mixin } from 'zrender/src/core/util'; | 
|  |  | 
|  | type CandlestickDataValue = OptionDataValue[]; | 
|  |  | 
|  | interface CandlestickItemStyleOption extends ItemStyleOption { | 
|  | color0?: ZRColor | 
|  | borderColor0?: ColorString | 
|  | borderColorDoji?: ZRColor | 
|  | } | 
|  | export interface CandlestickStateOption { | 
|  | itemStyle?: CandlestickItemStyleOption | 
|  | label?: SeriesLabelOption | 
|  | } | 
|  | export interface CandlestickDataItemOption | 
|  | extends CandlestickStateOption, StatesOptionMixin<CandlestickStateOption, ExtraStateOption> { | 
|  | value: CandlestickDataValue | 
|  | } | 
|  |  | 
|  | interface ExtraStateOption { | 
|  | emphasis?: { | 
|  | focus?: DefaultEmphasisFocus | 
|  | scale?: boolean | 
|  | } | 
|  | } | 
|  |  | 
|  | export interface CandlestickSeriesOption | 
|  | extends SeriesOption<CandlestickStateOption, ExtraStateOption>, CandlestickStateOption, | 
|  | SeriesOnCartesianOptionMixin, | 
|  | SeriesLargeOptionMixin, | 
|  | SeriesEncodeOptionMixin { | 
|  |  | 
|  | type?: 'candlestick' | 
|  |  | 
|  | coordinateSystem?: 'cartesian2d' | 
|  |  | 
|  | layout?: LayoutOrient | 
|  | clip?: boolean | 
|  |  | 
|  | barMaxWidth?: number | string | 
|  | barMinWidth?: number | string | 
|  | barWidth?: number | string | 
|  |  | 
|  | data?: (CandlestickDataValue | CandlestickDataItemOption)[] | 
|  | } | 
|  |  | 
|  | class CandlestickSeriesModel extends SeriesModel<CandlestickSeriesOption> { | 
|  |  | 
|  | static readonly type = 'series.candlestick'; | 
|  | readonly type = CandlestickSeriesModel.type; | 
|  |  | 
|  | static readonly dependencies = ['xAxis', 'yAxis', 'grid']; | 
|  |  | 
|  | coordinateSystem: Cartesian2D; | 
|  |  | 
|  | dimensions: string[]; | 
|  |  | 
|  | defaultValueDimensions = [ | 
|  | {name: 'open', defaultTooltip: true}, | 
|  | {name: 'close', defaultTooltip: true}, | 
|  | {name: 'lowest', defaultTooltip: true}, | 
|  | {name: 'highest', defaultTooltip: true} | 
|  | ]; | 
|  |  | 
|  | static defaultOption: CandlestickSeriesOption = { | 
|  | // zlevel: 0, | 
|  | z: 2, | 
|  | coordinateSystem: 'cartesian2d', | 
|  | legendHoverLink: true, | 
|  |  | 
|  | // xAxisIndex: 0, | 
|  | // yAxisIndex: 0, | 
|  |  | 
|  | layout: null, // 'horizontal' or 'vertical' | 
|  |  | 
|  | clip: true, | 
|  |  | 
|  | itemStyle: { | 
|  | color: '#eb5454', // positive | 
|  | color0: '#47b262', // negative | 
|  | borderColor: '#eb5454', | 
|  | borderColor0: '#47b262', | 
|  | borderColorDoji: null, // when close === open | 
|  | // borderColor: '#d24040', | 
|  | // borderColor0: '#398f4f', | 
|  | borderWidth: 1 | 
|  | }, | 
|  |  | 
|  | emphasis: { | 
|  | scale: true, | 
|  | itemStyle: { | 
|  | borderWidth: 2 | 
|  | } | 
|  | }, | 
|  |  | 
|  | barMaxWidth: null, | 
|  | barMinWidth: null, | 
|  | barWidth: null, | 
|  |  | 
|  | large: true, | 
|  | largeThreshold: 600, | 
|  |  | 
|  | progressive: 3e3, | 
|  | progressiveThreshold: 1e4, | 
|  | progressiveChunkMode: 'mod', | 
|  |  | 
|  | animationEasing: 'linear', | 
|  | animationDuration: 300 | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * Get dimension for shadow in dataZoom | 
|  | * @return dimension name | 
|  | */ | 
|  | getShadowDim() { | 
|  | return 'open'; | 
|  | } | 
|  |  | 
|  | brushSelector(dataIndex: number, data: SeriesData, selectors: BrushCommonSelectorsForSeries): boolean { | 
|  | const itemLayout = data.getItemLayout(dataIndex); | 
|  | return itemLayout && selectors.rect(itemLayout.brushRect); | 
|  | } | 
|  | } | 
|  |  | 
|  | mixin(CandlestickSeriesModel, WhiskerBoxCommonMixin, true); | 
|  |  | 
|  | export default CandlestickSeriesModel; |