2ca8c9e78c33e9327747cd1f32adb1ecddb4e55378cbd23cb8c0cc6eaeccb993802a0fad9b6479cd1065ae28b0692e33b67d00dad3697ce5708b9837b9f5fd 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import * as graphic from '../../util/graphic.js';
  2. import { AxisPointer } from './AxisPointer.js';
  3. import { AxisBaseModel } from '../../coord/AxisBaseModel.js';
  4. import ExtensionAPI from '../../core/ExtensionAPI.js';
  5. import Element from 'zrender/lib/Element.js';
  6. import { VerticalAlign, HorizontalAlign, CommonAxisPointerOption } from '../../util/types.js';
  7. import { PathProps } from 'zrender/lib/graphic/Path.js';
  8. import Model from '../../model/Model.js';
  9. import { TextProps } from 'zrender/lib/graphic/Text.js';
  10. interface Transform {
  11. x: number;
  12. y: number;
  13. rotation: number;
  14. }
  15. declare type AxisValue = CommonAxisPointerOption['value'];
  16. declare type AxisPointerModel = Model<CommonAxisPointerOption>;
  17. interface BaseAxisPointer {
  18. /**
  19. * Should be implemenented by sub-class if support `handle`.
  20. */
  21. getHandleTransform(value: AxisValue, axisModel: AxisBaseModel, axisPointerModel: AxisPointerModel): Transform;
  22. /**
  23. * * Should be implemenented by sub-class if support `handle`.
  24. */
  25. updateHandleTransform(transform: Transform, delta: number[], axisModel: AxisBaseModel, axisPointerModel: AxisPointerModel): Transform & {
  26. cursorPoint: number[];
  27. tooltipOption?: {
  28. verticalAlign?: VerticalAlign;
  29. align?: HorizontalAlign;
  30. };
  31. };
  32. }
  33. export interface AxisPointerElementOptions {
  34. graphicKey: string;
  35. pointer: PathProps & {
  36. type: 'Line' | 'Rect' | 'Circle' | 'Sector';
  37. };
  38. label: TextProps;
  39. }
  40. /**
  41. * Base axis pointer class in 2D.
  42. */
  43. declare class BaseAxisPointer implements AxisPointer {
  44. private _group;
  45. private _lastGraphicKey;
  46. private _handle;
  47. private _dragging;
  48. private _lastValue;
  49. private _lastStatus;
  50. private _payloadInfo;
  51. /**
  52. * If have transition animation
  53. */
  54. private _moveAnimation;
  55. private _axisModel;
  56. private _axisPointerModel;
  57. private _api;
  58. /**
  59. * In px, arbitrary value. Do not set too small,
  60. * no animation is ok for most cases.
  61. */
  62. protected animationThreshold: number;
  63. /**
  64. * @implement
  65. */
  66. render(axisModel: AxisBaseModel, axisPointerModel: AxisPointerModel, api: ExtensionAPI, forceRender?: boolean): void;
  67. /**
  68. * @implement
  69. */
  70. remove(api: ExtensionAPI): void;
  71. /**
  72. * @implement
  73. */
  74. dispose(api: ExtensionAPI): void;
  75. /**
  76. * @protected
  77. */
  78. determineAnimation(axisModel: AxisBaseModel, axisPointerModel: AxisPointerModel): boolean;
  79. /**
  80. * add {pointer, label, graphicKey} to elOption
  81. * @protected
  82. */
  83. makeElOption(elOption: AxisPointerElementOptions, value: AxisValue, axisModel: AxisBaseModel, axisPointerModel: AxisPointerModel, api: ExtensionAPI): void;
  84. /**
  85. * @protected
  86. */
  87. createPointerEl(group: graphic.Group, elOption: AxisPointerElementOptions, axisModel: AxisBaseModel, axisPointerModel: AxisPointerModel): void;
  88. /**
  89. * @protected
  90. */
  91. createLabelEl(group: graphic.Group, elOption: AxisPointerElementOptions, axisModel: AxisBaseModel, axisPointerModel: AxisPointerModel): void;
  92. /**
  93. * @protected
  94. */
  95. updatePointerEl(group: graphic.Group, elOption: AxisPointerElementOptions, updateProps: (el: Element, props: PathProps) => void): void;
  96. /**
  97. * @protected
  98. */
  99. updateLabelEl(group: graphic.Group, elOption: AxisPointerElementOptions, updateProps: (el: Element, props: PathProps) => void, axisPointerModel: AxisPointerModel): void;
  100. /**
  101. * @private
  102. */
  103. _renderHandle(value: AxisValue): void;
  104. private _moveHandleToValue;
  105. private _onHandleDragMove;
  106. /**
  107. * Throttled method.
  108. */
  109. _doDispatchAxisPointer(): void;
  110. private _onHandleDragEnd;
  111. /**
  112. * @private
  113. */
  114. clear(api: ExtensionAPI): void;
  115. /**
  116. * @protected
  117. */
  118. doClear(): void;
  119. buildLabel(xy: number[], wh: number[], xDimIndex: 0 | 1): {
  120. x: number;
  121. y: number;
  122. width: number;
  123. height: number;
  124. };
  125. }
  126. export default BaseAxisPointer;