ea8630b0e20c7a754e76232709072160a01e27d45d7fd66ca3d40f9d6a1a7abd6fa6ce7a08f2d38f5a96758d54dd7527713e4ac4fa06b53319fb94efc958ff 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. import Model from '../../model/Model.js';
  2. import ComponentModel from '../../model/Component.js';
  3. import { ComponentOption, BoxLayoutOptionMixin, BorderOptionMixin, ColorString, LabelOption, LayoutOrient, CommonTooltipOption, ItemStyleOption, LineStyleOption } from '../../util/types.js';
  4. import { Dictionary } from 'zrender/lib/core/types.js';
  5. import GlobalModel from '../../model/Global.js';
  6. import { ItemStyleProps } from '../../model/mixin/itemStyle.js';
  7. import { LineStyleProps } from './../../model/mixin/lineStyle.js';
  8. import { PathStyleProps } from 'zrender/lib/graphic/Path.js';
  9. declare type SelectorType = 'all' | 'inverse';
  10. export interface LegendSelectorButtonOption {
  11. type?: SelectorType;
  12. title?: string;
  13. }
  14. /**
  15. * T: the type to be extended
  16. * ET: extended type for keys of T
  17. * ST: special type for T to be extended
  18. */
  19. declare type ExtendPropertyType<T, ET, ST extends {
  20. [key in keyof T]: any;
  21. }> = {
  22. [key in keyof T]: key extends keyof ST ? T[key] | ET | ST[key] : T[key] | ET;
  23. };
  24. export interface LegendItemStyleOption extends ExtendPropertyType<ItemStyleOption, 'inherit', {
  25. borderWidth: 'auto';
  26. }> {
  27. }
  28. export interface LegendLineStyleOption extends ExtendPropertyType<LineStyleOption, 'inherit', {
  29. width: 'auto';
  30. }> {
  31. inactiveColor?: ColorString;
  32. inactiveWidth?: number;
  33. }
  34. export interface LegendStyleOption {
  35. /**
  36. * Icon of the legend items.
  37. * @default 'roundRect'
  38. */
  39. icon?: string;
  40. /**
  41. * Color when legend item is not selected
  42. */
  43. inactiveColor?: ColorString;
  44. /**
  45. * Border color when legend item is not selected
  46. */
  47. inactiveBorderColor?: ColorString;
  48. /**
  49. * Border color when legend item is not selected
  50. */
  51. inactiveBorderWidth?: number | 'auto';
  52. /**
  53. * Legend label formatter
  54. */
  55. formatter?: string | ((name: string) => string);
  56. itemStyle?: LegendItemStyleOption;
  57. lineStyle?: LegendLineStyleOption;
  58. textStyle?: LabelOption;
  59. symbolRotate?: number | 'inherit';
  60. /**
  61. * @deprecated
  62. */
  63. symbolKeepAspect?: boolean;
  64. }
  65. interface DataItem extends LegendStyleOption {
  66. name?: string;
  67. icon?: string;
  68. textStyle?: LabelOption;
  69. tooltip?: unknown;
  70. }
  71. export interface LegendTooltipFormatterParams {
  72. componentType: 'legend';
  73. legendIndex: number;
  74. name: string;
  75. $vars: ['name'];
  76. }
  77. export interface LegendIconParams {
  78. itemWidth: number;
  79. itemHeight: number;
  80. /**
  81. * symbolType is from legend.icon, legend.data.icon, or series visual
  82. */
  83. icon: string;
  84. iconRotate: number | 'inherit';
  85. symbolKeepAspect: boolean;
  86. itemStyle: PathStyleProps;
  87. lineStyle: LineStyleProps;
  88. }
  89. export interface LegendSymbolStyleOption {
  90. itemStyle?: ItemStyleProps;
  91. lineStyle?: LineStyleProps;
  92. }
  93. export interface LegendOption extends ComponentOption, LegendStyleOption, BoxLayoutOptionMixin, BorderOptionMixin {
  94. mainType?: 'legend';
  95. show?: boolean;
  96. orient?: LayoutOrient;
  97. align?: 'auto' | 'left' | 'right';
  98. backgroundColor?: ColorString;
  99. /**
  100. * Border radius of background rect
  101. * @default 0
  102. */
  103. borderRadius?: number | number[];
  104. /**
  105. * Padding between legend item and border.
  106. * Support to be a single number or an array.
  107. * @default 5
  108. */
  109. padding?: number | number[];
  110. /**
  111. * Gap between each legend item.
  112. * @default 10
  113. */
  114. itemGap?: number;
  115. /**
  116. * Width of legend symbol
  117. */
  118. itemWidth?: number;
  119. /**
  120. * Height of legend symbol
  121. */
  122. itemHeight?: number;
  123. selectedMode?: boolean | 'single' | 'multiple';
  124. /**
  125. * selected map of each item. Default to be selected if item is not in the map
  126. */
  127. selected?: Dictionary<boolean>;
  128. /**
  129. * Buttons for all select or inverse select.
  130. * @example
  131. * selector: [{type: 'all or inverse', title: xxx}]
  132. * selector: true
  133. * selector: ['all', 'inverse']
  134. */
  135. selector?: (LegendSelectorButtonOption | SelectorType)[] | boolean;
  136. selectorLabel?: LabelOption;
  137. emphasis?: {
  138. selectorLabel?: LabelOption;
  139. };
  140. /**
  141. * Position of selector buttons.
  142. */
  143. selectorPosition?: 'auto' | 'start' | 'end';
  144. /**
  145. * Gap between each selector button
  146. */
  147. selectorItemGap?: number;
  148. /**
  149. * Gap between selector buttons group and legend main items.
  150. */
  151. selectorButtonGap?: number;
  152. data?: (string | DataItem)[];
  153. /**
  154. * Tooltip option
  155. */
  156. tooltip?: CommonTooltipOption<LegendTooltipFormatterParams>;
  157. }
  158. declare class LegendModel<Ops extends LegendOption = LegendOption> extends ComponentModel<Ops> {
  159. static type: string;
  160. type: string;
  161. static readonly dependencies: string[];
  162. readonly layoutMode: {
  163. readonly type: "box";
  164. readonly ignoreSize: true;
  165. };
  166. private _data;
  167. private _availableNames;
  168. init(option: Ops, parentModel: Model, ecModel: GlobalModel): void;
  169. mergeOption(option: Ops, ecModel: GlobalModel): void;
  170. _updateSelector(option: Ops): void;
  171. optionUpdated(): void;
  172. _updateData(ecModel: GlobalModel): void;
  173. getData(): Model<DataItem>[];
  174. select(name: string): void;
  175. unSelect(name: string): void;
  176. toggleSelected(name: string): void;
  177. allSelect(): void;
  178. inverseSelect(): void;
  179. isSelected(name: string): boolean;
  180. getOrient(): {
  181. index: 0;
  182. name: 'horizontal';
  183. };
  184. getOrient(): {
  185. index: 1;
  186. name: 'vertical';
  187. };
  188. static defaultOption: LegendOption;
  189. }
  190. export default LegendModel;