f9234d848b136974d1d03a120ef25b2da54ee708cb9c81a5d3d590b07a95cfef6a3f66be070d84e16a6aa76e362b65c9460d43cb620dcb375289abc3f70c3f 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import Model from './Model.js';
  2. import * as componentUtil from '../util/component.js';
  3. import { ExtendableConstructor, ClassManager } from '../util/clazz.js';
  4. import { QueryReferringOpt } from '../util/model.js';
  5. import GlobalModel from './Global.js';
  6. import { ComponentOption, ComponentMainType, ComponentSubType, ComponentFullType, ComponentLayoutMode } from '../util/types.js';
  7. declare class ComponentModel<Opt extends ComponentOption = ComponentOption> extends Model<Opt> {
  8. /**
  9. * @readonly
  10. */
  11. type: ComponentFullType;
  12. /**
  13. * @readonly
  14. */
  15. id: string;
  16. /**
  17. * Because simplified concept is probably better, series.name (or component.name)
  18. * has been having too many resposibilities:
  19. * (1) Generating id (which requires name in option should not be modified).
  20. * (2) As an index to mapping series when merging option or calling API (a name
  21. * can refer to more then one components, which is convinient is some case).
  22. * (3) Display.
  23. * @readOnly But injected
  24. */
  25. name: string;
  26. /**
  27. * @readOnly
  28. */
  29. mainType: ComponentMainType;
  30. /**
  31. * @readOnly
  32. */
  33. subType: ComponentSubType;
  34. /**
  35. * @readOnly
  36. */
  37. componentIndex: number;
  38. /**
  39. * @readOnly
  40. */
  41. protected defaultOption: ComponentOption;
  42. /**
  43. * @readOnly
  44. */
  45. ecModel: GlobalModel;
  46. /**
  47. * @readOnly
  48. */
  49. static dependencies: string[];
  50. readonly uid: string;
  51. /**
  52. * Support merge layout params.
  53. * Only support 'box' now (left/right/top/bottom/width/height).
  54. */
  55. static layoutMode: ComponentLayoutMode | ComponentLayoutMode['type'];
  56. /**
  57. * Prevent from auto set z, zlevel, z2 by the framework.
  58. */
  59. preventAutoZ: boolean;
  60. __viewId: string;
  61. __requireNewView: boolean;
  62. static protoInitialize: void;
  63. constructor(option: Opt, parentModel: Model, ecModel: GlobalModel);
  64. init(option: Opt, parentModel: Model, ecModel: GlobalModel): void;
  65. mergeDefaultAndTheme(option: Opt, ecModel: GlobalModel): void;
  66. mergeOption(option: Opt, ecModel: GlobalModel): void;
  67. /**
  68. * Called immediately after `init` or `mergeOption` of this instance called.
  69. */
  70. optionUpdated(newCptOption: Opt, isInit: boolean): void;
  71. /**
  72. * [How to declare defaultOption]:
  73. *
  74. * (A) If using class declaration in typescript (since echarts 5):
  75. * ```ts
  76. * import {ComponentOption} from '../model/option.js';
  77. * export interface XxxOption extends ComponentOption {
  78. * aaa: number
  79. * }
  80. * export class XxxModel extends Component {
  81. * static type = 'xxx';
  82. * static defaultOption: XxxOption = {
  83. * aaa: 123
  84. * }
  85. * }
  86. * Component.registerClass(XxxModel);
  87. * ```
  88. * ```ts
  89. * import {inheritDefaultOption} from '../util/component.js';
  90. * import {XxxModel, XxxOption} from './XxxModel.js';
  91. * export interface XxxSubOption extends XxxOption {
  92. * bbb: number
  93. * }
  94. * class XxxSubModel extends XxxModel {
  95. * static defaultOption: XxxSubOption = inheritDefaultOption(XxxModel.defaultOption, {
  96. * bbb: 456
  97. * })
  98. * fn() {
  99. * let opt = this.getDefaultOption();
  100. * // opt is {aaa: 123, bbb: 456}
  101. * }
  102. * }
  103. * ```
  104. *
  105. * (B) If using class extend (previous approach in echarts 3 & 4):
  106. * ```js
  107. * let XxxComponent = Component.extend({
  108. * defaultOption: {
  109. * xx: 123
  110. * }
  111. * })
  112. * ```
  113. * ```js
  114. * let XxxSubComponent = XxxComponent.extend({
  115. * defaultOption: {
  116. * yy: 456
  117. * },
  118. * fn: function () {
  119. * let opt = this.getDefaultOption();
  120. * // opt is {xx: 123, yy: 456}
  121. * }
  122. * })
  123. * ```
  124. */
  125. getDefaultOption(): Opt;
  126. /**
  127. * Notice: always force to input param `useDefault` in case that forget to consider it.
  128. * The same behavior as `modelUtil.parseFinder`.
  129. *
  130. * @param useDefault In many cases like series refer axis and axis refer grid,
  131. * If axis index / axis id not specified, use the first target as default.
  132. * In other cases like dataZoom refer axis, if not specified, measn no refer.
  133. */
  134. getReferringComponents(mainType: ComponentMainType, opt: QueryReferringOpt): {
  135. models: ComponentModel[];
  136. specified: boolean;
  137. };
  138. getBoxLayoutParams(): {
  139. left: string | number;
  140. top: string | number;
  141. right: string | number;
  142. bottom: string | number;
  143. width: string | number;
  144. height: string | number;
  145. };
  146. /**
  147. * Get key for zlevel.
  148. * If developers don't configure zlevel. We will assign zlevel to series based on the key.
  149. * For example, lines with trail effect and progressive series will in an individual zlevel.
  150. */
  151. getZLevelKey(): string;
  152. setZLevel(zlevel: number): void;
  153. static registerClass: ClassManager['registerClass'];
  154. static hasClass: ClassManager['hasClass'];
  155. static registerSubTypeDefaulter: componentUtil.SubTypeDefaulterManager['registerSubTypeDefaulter'];
  156. }
  157. export declare type ComponentModelConstructor = typeof ComponentModel & ClassManager & componentUtil.SubTypeDefaulterManager & ExtendableConstructor & componentUtil.TopologicalTravelable<object>;
  158. export default ComponentModel;