123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- import Model from '../../model/Model.js';
- import ComponentModel from '../../model/Component.js';
- import { ComponentOption, BoxLayoutOptionMixin, BorderOptionMixin, ColorString, LabelOption, LayoutOrient, CommonTooltipOption, ItemStyleOption, LineStyleOption } from '../../util/types.js';
- import { Dictionary } from 'zrender/lib/core/types.js';
- import GlobalModel from '../../model/Global.js';
- import { ItemStyleProps } from '../../model/mixin/itemStyle.js';
- import { LineStyleProps } from './../../model/mixin/lineStyle.js';
- import { PathStyleProps } from 'zrender/lib/graphic/Path.js';
- declare type SelectorType = 'all' | 'inverse';
- export interface LegendSelectorButtonOption {
- type?: SelectorType;
- title?: string;
- }
- /**
- * T: the type to be extended
- * ET: extended type for keys of T
- * ST: special type for T to be extended
- */
- declare type ExtendPropertyType<T, ET, ST extends {
- [key in keyof T]: any;
- }> = {
- [key in keyof T]: key extends keyof ST ? T[key] | ET | ST[key] : T[key] | ET;
- };
- export interface LegendItemStyleOption extends ExtendPropertyType<ItemStyleOption, 'inherit', {
- borderWidth: 'auto';
- }> {
- }
- export interface LegendLineStyleOption extends ExtendPropertyType<LineStyleOption, 'inherit', {
- width: 'auto';
- }> {
- inactiveColor?: ColorString;
- inactiveWidth?: number;
- }
- export interface LegendStyleOption {
- /**
- * Icon of the legend items.
- * @default 'roundRect'
- */
- icon?: string;
- /**
- * Color when legend item is not selected
- */
- inactiveColor?: ColorString;
- /**
- * Border color when legend item is not selected
- */
- inactiveBorderColor?: ColorString;
- /**
- * Border color when legend item is not selected
- */
- inactiveBorderWidth?: number | 'auto';
- /**
- * Legend label formatter
- */
- formatter?: string | ((name: string) => string);
- itemStyle?: LegendItemStyleOption;
- lineStyle?: LegendLineStyleOption;
- textStyle?: LabelOption;
- symbolRotate?: number | 'inherit';
- /**
- * @deprecated
- */
- symbolKeepAspect?: boolean;
- }
- interface DataItem extends LegendStyleOption {
- name?: string;
- icon?: string;
- textStyle?: LabelOption;
- tooltip?: unknown;
- }
- export interface LegendTooltipFormatterParams {
- componentType: 'legend';
- legendIndex: number;
- name: string;
- $vars: ['name'];
- }
- export interface LegendIconParams {
- itemWidth: number;
- itemHeight: number;
- /**
- * symbolType is from legend.icon, legend.data.icon, or series visual
- */
- icon: string;
- iconRotate: number | 'inherit';
- symbolKeepAspect: boolean;
- itemStyle: PathStyleProps;
- lineStyle: LineStyleProps;
- }
- export interface LegendSymbolStyleOption {
- itemStyle?: ItemStyleProps;
- lineStyle?: LineStyleProps;
- }
- export interface LegendOption extends ComponentOption, LegendStyleOption, BoxLayoutOptionMixin, BorderOptionMixin {
- mainType?: 'legend';
- show?: boolean;
- orient?: LayoutOrient;
- align?: 'auto' | 'left' | 'right';
- backgroundColor?: ColorString;
- /**
- * Border radius of background rect
- * @default 0
- */
- borderRadius?: number | number[];
- /**
- * Padding between legend item and border.
- * Support to be a single number or an array.
- * @default 5
- */
- padding?: number | number[];
- /**
- * Gap between each legend item.
- * @default 10
- */
- itemGap?: number;
- /**
- * Width of legend symbol
- */
- itemWidth?: number;
- /**
- * Height of legend symbol
- */
- itemHeight?: number;
- selectedMode?: boolean | 'single' | 'multiple';
- /**
- * selected map of each item. Default to be selected if item is not in the map
- */
- selected?: Dictionary<boolean>;
- /**
- * Buttons for all select or inverse select.
- * @example
- * selector: [{type: 'all or inverse', title: xxx}]
- * selector: true
- * selector: ['all', 'inverse']
- */
- selector?: (LegendSelectorButtonOption | SelectorType)[] | boolean;
- selectorLabel?: LabelOption;
- emphasis?: {
- selectorLabel?: LabelOption;
- };
- /**
- * Position of selector buttons.
- */
- selectorPosition?: 'auto' | 'start' | 'end';
- /**
- * Gap between each selector button
- */
- selectorItemGap?: number;
- /**
- * Gap between selector buttons group and legend main items.
- */
- selectorButtonGap?: number;
- data?: (string | DataItem)[];
- /**
- * Tooltip option
- */
- tooltip?: CommonTooltipOption<LegendTooltipFormatterParams>;
- }
- declare class LegendModel<Ops extends LegendOption = LegendOption> extends ComponentModel<Ops> {
- static type: string;
- type: string;
- static readonly dependencies: string[];
- readonly layoutMode: {
- readonly type: "box";
- readonly ignoreSize: true;
- };
- private _data;
- private _availableNames;
- init(option: Ops, parentModel: Model, ecModel: GlobalModel): void;
- mergeOption(option: Ops, ecModel: GlobalModel): void;
- _updateSelector(option: Ops): void;
- optionUpdated(): void;
- _updateData(ecModel: GlobalModel): void;
- getData(): Model<DataItem>[];
- select(name: string): void;
- unSelect(name: string): void;
- toggleSelected(name: string): void;
- allSelect(): void;
- inverseSelect(): void;
- isSelected(name: string): boolean;
- getOrient(): {
- index: 0;
- name: 'horizontal';
- };
- getOrient(): {
- index: 1;
- name: 'vertical';
- };
- static defaultOption: LegendOption;
- }
- export default LegendModel;
|