UNPKG

echarts

Version:

Apache ECharts is a powerful, interactive charting and data visualization library for browser

120 lines (119 loc) 4.38 kB
import * as clazzUtil from '../util/clazz.js'; import { Dictionary } from 'zrender/lib/core/types.js'; import SeriesData from '../data/SeriesData.js'; import { DimensionName, ScaleDataValue, DimensionLoose, ScaleTick, AxisBreakOption, NullUndefined, ParsedAxisBreakList } from '../util/types.js'; import { ScaleCalculator } from './helper.js'; import { ScaleRawExtentInfo } from '../coord/scaleRawExtentInfo.js'; import { ScaleBreakContext, AxisBreakParsingResult, ParamPruneByBreak } from './break.js'; export declare type ScaleGetTicksOpt = { expandToNicedExtent?: boolean; pruneByBreak?: ParamPruneByBreak; breakTicks?: 'only_break' | 'none' | NullUndefined; }; export declare type ScaleSettingDefault = Dictionary<unknown>; declare abstract class Scale<SETTING extends ScaleSettingDefault = ScaleSettingDefault> { type: string; private _setting; protected _extent: [number, number]; protected _brkCtx: ScaleBreakContext | NullUndefined; protected _calculator: ScaleCalculator; private _isBlank; readonly rawExtentInfo: ScaleRawExtentInfo; constructor(setting?: SETTING); getSetting<KEY extends keyof SETTING>(name: KEY): SETTING[KEY]; /** * Parse input val to valid inner number. * Notice: This would be a trap here, If the implementation * of this method depends on extent, and this method is used * before extent set (like in dataZoom), it would be wrong. * Nevertheless, parse does not depend on extent generally. */ abstract parse(val: ScaleDataValue): number; /** * Whether contain the given value. */ abstract contain(val: number): boolean; /** * Normalize value to linear [0, 1], return 0.5 if extent span is 0. */ abstract normalize(val: number): number; /** * Scale normalized value to extent. */ abstract scale(val: number): number; /** * [CAVEAT]: It should not be overridden! */ _innerUnionExtent(other: [number, number]): void; /** * Set extent from data */ unionExtentFromData(data: SeriesData, dim: DimensionName | DimensionLoose): void; /** * Get a new slice of extent. * Extent is always in increase order. */ getExtent(): [number, number]; setExtent(start: number, end: number): void; /** * [CAVEAT]: It should not be overridden! */ protected _innerSetExtent(start: number, end: number): void; /** * Prerequisite: Scale#parse is ready. */ setBreaksFromOption(breakOptionList: AxisBreakOption[]): void; /** * [CAVEAT]: It should not be overridden! */ _innerSetBreak(parsed: AxisBreakParsingResult): void; /** * [CAVEAT]: It should not be overridden! */ _innerGetBreaks(): ParsedAxisBreakList; /** * Do not expose the internal `_breaks` unless necessary. */ hasBreaks(): boolean; protected _getExtentSpanWithBreaks(): number; /** * If value is in extent range */ isInExtentRange(value: number): boolean; /** * When axis extent depends on data and no data exists, * axis ticks should not be drawn, which is named 'blank'. */ isBlank(): boolean; /** * When axis extent depends on data and no data exists, * axis ticks should not be drawn, which is named 'blank'. */ setBlank(isBlank: boolean): void; /** * Update interval and extent of intervals for nice ticks * * @param splitNumber Approximated tick numbers. Optional. * The implementation of `niceTicks` should decide tick numbers * whether `splitNumber` is given. * @param minInterval Optional. * @param maxInterval Optional. */ abstract calcNiceTicks(splitNumber?: number, minInterval?: number, maxInterval?: number): void; abstract calcNiceExtent(opt?: { splitNumber?: number; fixMin?: boolean; fixMax?: boolean; minInterval?: number; maxInterval?: number; }): void; /** * @return label of the tick. */ abstract getLabel(tick: ScaleTick): string; abstract getTicks(opt?: ScaleGetTicksOpt): ScaleTick[]; abstract getMinorTicks(splitNumber: number): number[][]; static registerClass: clazzUtil.ClassManager['registerClass']; static getClass: clazzUtil.ClassManager['getClass']; } export default Scale;