import { HashMap } from 'zrender/lib/core/util.js'; import AxisProxy from './AxisProxy.js'; import ComponentModel from '../../model/Component.js'; import { LayoutOrient, ComponentOption, LabelOption } from '../../util/types.js'; import Model from '../../model/Model.js'; import GlobalModel from '../../model/Global.js'; import { AxisBaseModel } from '../../coord/AxisBaseModel.js'; import { DataZoomAxisDimension } from './helper.js'; export interface DataZoomOption extends ComponentOption { mainType?: 'dataZoom'; /** * Default auto by axisIndex */ orient?: LayoutOrient; /** * Default the first horizontal category axis. */ xAxisIndex?: number | number[]; xAxisId?: string | string[]; /** * Default the first vertical category axis. */ yAxisIndex?: number | number[]; yAxisId?: string | string[]; radiusAxisIndex?: number | number[]; radiusAxisId?: string | string[]; angleAxisIndex?: number | number[]; angleAxisId?: string | string[]; singleAxisIndex?: number | number[]; singleAxisId?: string | string[]; /** * Possible values: 'filter' or 'empty' or 'weakFilter'. * 'filter': data items which are out of window will be removed. This option is * applicable when filtering outliers. For each data item, it will be * filtered if one of the relevant dimensions is out of the window. * 'weakFilter': data items which are out of window will be removed. This option * is applicable when filtering outliers. For each data item, it will be * filtered only if all of the relevant dimensions are out of the same * side of the window. * 'empty': data items which are out of window will be set to empty. * This option is applicable when user should not neglect * that there are some data items out of window. * 'none': Do not filter. * Taking line chart as an example, line will be broken in * the filtered points when filterModel is set to 'empty', but * be connected when set to 'filter'. */ filterMode?: 'filter' | 'weakFilter' | 'empty' | 'none'; /** * Dispatch action by the fixed rate, avoid frequency. * default 100. Do not throttle when use null/undefined. * If animation === true and animationDurationUpdate > 0, * default value is 100, otherwise 20. */ throttle?: number | null | undefined; /** * Start percent. 0 ~ 100 */ start?: number; /** * End percent. 0 ~ 100 */ end?: number; /** * Start value. If startValue specified, start is ignored */ startValue?: number | string | Date; /** * End value. If endValue specified, end is ignored. */ endValue?: number | string | Date; /** * Min span percent, 0 - 100 * The range of dataZoom can not be smaller than that. */ minSpan?: number; /** * Max span percent, 0 - 100 * The range of dataZoom can not be larger than that. */ maxSpan?: number; minValueSpan?: number; maxValueSpan?: number; rangeMode?: ['value' | 'percent', 'value' | 'percent']; realtime?: boolean; textStyle?: LabelOption; } declare type RangeOption = Pick; export declare type DataZoomExtendedAxisBaseModel = AxisBaseModel & { __dzAxisProxy: AxisProxy; }; declare class DataZoomAxisInfo { indexList: number[]; indexMap: boolean[]; add(axisCmptIdx: number): void; } export declare type DataZoomTargetAxisInfoMap = HashMap; declare class DataZoomModel extends ComponentModel { static type: string; type: string; static dependencies: string[]; static defaultOption: DataZoomOption; private _autoThrottle; private _orient; private _targetAxisInfoMap; private _noTarget; /** * It is `[rangeModeForMin, rangeModeForMax]`. * The optional values for `rangeMode`: * + `'value'` mode: the axis extent will always be determined by * `dataZoom.startValue` and `dataZoom.endValue`, despite * how data like and how `axis.min` and `axis.max` are. * + `'percent'` mode: `100` represents 100% of the `[dMin, dMax]`, * where `dMin` is `axis.min` if `axis.min` specified, otherwise `data.extent[0]`, * and `dMax` is `axis.max` if `axis.max` specified, otherwise `data.extent[1]`. * Axis extent will be determined by the result of the percent of `[dMin, dMax]`. * * For example, when users are using dynamic data (update data periodically via `setOption`), * if in `'value`' mode, the window will be kept in a fixed value range despite how * data are appended, while if in `'percent'` mode, whe window range will be changed alone with * the appended data (suppose `axis.min` and `axis.max` are not specified). */ private _rangePropMode; /** * @readonly */ settledOption: Opts; init(option: Opts, parentModel: Model, ecModel: GlobalModel): void; mergeOption(newOption: Opts): void; private _doInit; private _resetTarget; private _fillSpecifiedTargetAxis; private _fillAutoTargetAxisByOrient; private _makeAutoOrientByTargetAxis; private _setDefaultThrottle; private _updateRangeUse; noTarget(): boolean; getFirstTargetAxisModel(): AxisBaseModel; /** * @param {Function} callback param: axisModel, dimNames, axisIndex, dataZoomModel, ecModel */ eachTargetAxis(callback: (this: Ctx, axisDim: DataZoomAxisDimension, axisIndex: number) => void, context?: Ctx): void; /** * @return If not found, return null/undefined. */ getAxisProxy(axisDim: DataZoomAxisDimension, axisIndex: number): AxisProxy; /** * @return If not found, return null/undefined. */ getAxisModel(axisDim: DataZoomAxisDimension, axisIndex: number): AxisBaseModel; /** * If not specified, set to undefined. */ setRawRange(opt: RangeOption): void; setCalculatedRange(opt: RangeOption): void; getPercentRange(): number[]; /** * For example, chart.getModel().getComponent('dataZoom').getValueRange('y', 0); * * @return [startValue, endValue] value can only be '-' or finite number. */ getValueRange(axisDim: DataZoomAxisDimension, axisIndex: number): number[]; /** * @param axisModel If axisModel given, find axisProxy * corresponding to the axisModel */ findRepresentativeAxisProxy(axisModel?: AxisBaseModel): AxisProxy; getRangePropMode(): DataZoomModel['_rangePropMode']; getOrient(): LayoutOrient; } export default DataZoomModel;