@qfo/qfchart 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/index.d.ts +319 -12
  2. package/dist/qfchart.min.browser.js +32 -16
  3. package/dist/qfchart.min.es.js +32 -16
  4. package/package.json +1 -1
  5. package/src/QFChart.ts +98 -262
  6. package/src/components/AbstractPlugin.ts +234 -104
  7. package/src/components/DrawingEditor.ts +297 -248
  8. package/src/components/DrawingRendererRegistry.ts +13 -0
  9. package/src/components/GraphicBuilder.ts +2 -2
  10. package/src/components/LayoutManager.ts +41 -35
  11. package/src/components/SeriesBuilder.ts +10 -10
  12. package/src/components/TooltipFormatter.ts +1 -1
  13. package/src/index.ts +17 -6
  14. package/src/plugins/ABCDPatternTool/ABCDPatternDrawingRenderer.ts +112 -0
  15. package/src/plugins/ABCDPatternTool/ABCDPatternTool.ts +136 -0
  16. package/src/plugins/ABCDPatternTool/index.ts +2 -0
  17. package/src/plugins/CypherPatternTool/CypherPatternDrawingRenderer.ts +80 -0
  18. package/src/plugins/CypherPatternTool/CypherPatternTool.ts +84 -0
  19. package/src/plugins/CypherPatternTool/index.ts +2 -0
  20. package/src/plugins/FibSpeedResistanceFanTool/FibSpeedResistanceFanDrawingRenderer.ts +163 -0
  21. package/src/plugins/FibSpeedResistanceFanTool/FibSpeedResistanceFanTool.ts +210 -0
  22. package/src/plugins/FibSpeedResistanceFanTool/index.ts +2 -0
  23. package/src/plugins/FibTrendExtensionTool/FibTrendExtensionDrawingRenderer.ts +141 -0
  24. package/src/plugins/FibTrendExtensionTool/FibTrendExtensionTool.ts +188 -0
  25. package/src/plugins/FibTrendExtensionTool/index.ts +2 -0
  26. package/src/plugins/FibonacciChannelTool/FibonacciChannelDrawingRenderer.ts +128 -0
  27. package/src/plugins/FibonacciChannelTool/FibonacciChannelTool.ts +231 -0
  28. package/src/plugins/FibonacciChannelTool/index.ts +2 -0
  29. package/src/plugins/FibonacciTool/FibonacciDrawingRenderer.ts +107 -0
  30. package/src/plugins/{FibonacciTool.ts → FibonacciTool/FibonacciTool.ts} +195 -192
  31. package/src/plugins/FibonacciTool/index.ts +2 -0
  32. package/src/plugins/HeadAndShouldersTool/HeadAndShouldersDrawingRenderer.ts +95 -0
  33. package/src/plugins/HeadAndShouldersTool/HeadAndShouldersTool.ts +97 -0
  34. package/src/plugins/HeadAndShouldersTool/index.ts +2 -0
  35. package/src/plugins/LineTool/LineDrawingRenderer.ts +49 -0
  36. package/src/plugins/{LineTool.ts → LineTool/LineTool.ts} +161 -190
  37. package/src/plugins/LineTool/index.ts +2 -0
  38. package/src/plugins/{MeasureTool.ts → MeasureTool/MeasureTool.ts} +324 -344
  39. package/src/plugins/MeasureTool/index.ts +1 -0
  40. package/src/plugins/ThreeDrivesPatternTool/ThreeDrivesPatternDrawingRenderer.ts +106 -0
  41. package/src/plugins/ThreeDrivesPatternTool/ThreeDrivesPatternTool.ts +98 -0
  42. package/src/plugins/ThreeDrivesPatternTool/index.ts +2 -0
  43. package/src/plugins/ToolGroup.ts +211 -0
  44. package/src/plugins/TrianglePatternTool/TrianglePatternDrawingRenderer.ts +107 -0
  45. package/src/plugins/TrianglePatternTool/TrianglePatternTool.ts +98 -0
  46. package/src/plugins/TrianglePatternTool/index.ts +2 -0
  47. package/src/plugins/XABCDPatternTool/XABCDPatternDrawingRenderer.ts +178 -0
  48. package/src/plugins/XABCDPatternTool/XABCDPatternTool.ts +213 -0
  49. package/src/plugins/XABCDPatternTool/index.ts +2 -0
  50. package/src/types.ts +37 -11
package/dist/index.d.ts CHANGED
@@ -95,6 +95,7 @@ interface QFChartOptions {
95
95
  };
96
96
  dataZoom?: {
97
97
  visible?: boolean;
98
+ pannable?: boolean;
98
99
  position?: 'top' | 'bottom';
99
100
  height?: number;
100
101
  start?: number;
@@ -147,8 +148,10 @@ interface ChartContext {
147
148
  updateDrawing(drawing: DrawingElement): void;
148
149
  lockChart(): void;
149
150
  unlockChart(): void;
151
+ registerDrawingRenderer(renderer: DrawingRenderer): void;
152
+ snapToCandle(point: Coordinate): Coordinate;
150
153
  }
151
- type DrawingType = 'line' | 'fibonacci';
154
+ type DrawingType = string;
152
155
  interface DrawingElement {
153
156
  id: string;
154
157
  type: DrawingType;
@@ -159,6 +162,21 @@ interface DrawingElement {
159
162
  lineWidth?: number;
160
163
  };
161
164
  }
165
+ interface DrawingRenderContext {
166
+ drawing: DrawingElement;
167
+ /** Pixel coords for each point, in the same order as drawing.points */
168
+ pixelPoints: [number, number][];
169
+ /** Whether this drawing is currently selected */
170
+ isSelected: boolean;
171
+ /** The ECharts custom series api object */
172
+ api: any;
173
+ }
174
+ interface DrawingRenderer {
175
+ /** The drawing type this renderer handles */
176
+ type: string;
177
+ /** Return an ECharts custom series renderItem group element */
178
+ render(ctx: DrawingRenderContext): any;
179
+ }
162
180
  interface PluginConfig {
163
181
  id: string;
164
182
  name?: string;
@@ -253,6 +271,7 @@ declare class QFChart implements ChartContext {
253
271
  private countdownInterval;
254
272
  private selectedDrawingId;
255
273
  private drawings;
274
+ private drawingRenderers;
256
275
  coordinateConversion: {
257
276
  pixelToData: (point: {
258
277
  x: number;
@@ -308,6 +327,14 @@ declare class QFChart implements ChartContext {
308
327
  getOptions(): QFChartOptions;
309
328
  disableTools(): void;
310
329
  registerPlugin(plugin: Plugin): void;
330
+ registerDrawingRenderer(renderer: DrawingRenderer): void;
331
+ snapToCandle(point: {
332
+ x: number;
333
+ y: number;
334
+ }): {
335
+ x: number;
336
+ y: number;
337
+ };
311
338
  addDrawing(drawing: DrawingElement): void;
312
339
  removeDrawing(id: string): void;
313
340
  getDrawing(id: string): DrawingElement | undefined;
@@ -422,6 +449,13 @@ declare abstract class AbstractPlugin implements Plugin {
422
449
  icon?: string;
423
450
  protected context: ChartContext;
424
451
  private eventListeners;
452
+ private _snapIndicator;
453
+ private _snapMoveHandler;
454
+ private _snapKeyDownHandler;
455
+ private _snapKeyUpHandler;
456
+ private _snapBlurHandler;
457
+ private _snapActive;
458
+ private _lastMouseEvent;
425
459
  constructor(config: PluginConfig);
426
460
  init(context: ChartContext): void;
427
461
  /**
@@ -464,6 +498,16 @@ declare abstract class AbstractPlugin implements Plugin {
464
498
  * Access to market data.
465
499
  */
466
500
  protected get marketData(): OHLCV[];
501
+ /**
502
+ * Get the event point coordinates, snapping to nearest candle OHLC if Ctrl is held.
503
+ * Use this instead of [params.offsetX, params.offsetY] in click/mousemove handlers.
504
+ */
505
+ protected getPoint(params: any): [number, number];
506
+ private _bindSnapIndicator;
507
+ private _unbindSnapIndicator;
508
+ private _removeSnapGraphic;
509
+ private _showSnapAt;
510
+ private _hideSnap;
467
511
  }
468
512
 
469
513
  declare class MeasureTool extends AbstractPlugin {
@@ -479,7 +523,7 @@ declare class MeasureTool extends AbstractPlugin {
479
523
  private lineH;
480
524
  private arrowStart;
481
525
  private arrowEnd;
482
- constructor(options: {
526
+ constructor(options?: {
483
527
  name?: string;
484
528
  icon?: string;
485
529
  });
@@ -508,7 +552,7 @@ declare class LineTool extends AbstractPlugin {
508
552
  private line;
509
553
  private startCircle;
510
554
  private endCircle;
511
- constructor(options: {
555
+ constructor(options?: {
512
556
  name?: string;
513
557
  icon?: string;
514
558
  });
@@ -516,20 +560,18 @@ declare class LineTool extends AbstractPlugin {
516
560
  protected onActivate(): void;
517
561
  protected onDeactivate(): void;
518
562
  protected onDestroy(): void;
519
- private onMouseDown;
520
- private onChartInteraction;
521
563
  private onClick;
522
- private saveDataCoordinates;
523
- private updateGraphicFromData;
524
- private enableClearListeners;
525
- private clearHandlers;
526
- private disableClearListeners;
527
564
  private onMouseMove;
528
565
  private initGraphic;
529
566
  private removeGraphic;
530
567
  private updateGraphic;
531
568
  }
532
569
 
570
+ declare class LineDrawingRenderer implements DrawingRenderer {
571
+ type: string;
572
+ render(ctx: DrawingRenderContext): any;
573
+ }
574
+
533
575
  declare class FibonacciTool extends AbstractPlugin {
534
576
  private startPoint;
535
577
  private endPoint;
@@ -541,6 +583,7 @@ declare class FibonacciTool extends AbstractPlugin {
541
583
  name?: string;
542
584
  icon?: string;
543
585
  });
586
+ protected onInit(): void;
544
587
  onActivate(): void;
545
588
  onDeactivate(): void;
546
589
  private bindEvents;
@@ -553,5 +596,269 @@ declare class FibonacciTool extends AbstractPlugin {
553
596
  private saveDrawing;
554
597
  }
555
598
 
556
- export { AbstractPlugin, FibonacciTool, LineTool, MeasureTool, QFChart };
557
- export type { ChartContext, Coordinate, DataCoordinate, DrawingElement, DrawingType, Indicator$1 as Indicator, IndicatorOptions, IndicatorPlot, IndicatorPoint, IndicatorStyle, OHLCV, Plugin, PluginConfig, QFChartOptions };
599
+ declare class FibonacciDrawingRenderer implements DrawingRenderer {
600
+ type: string;
601
+ render(ctx: DrawingRenderContext): any;
602
+ }
603
+
604
+ declare class FibonacciChannelTool extends AbstractPlugin {
605
+ private startPoint;
606
+ private endPoint;
607
+ private widthPoint;
608
+ private state;
609
+ private graphicGroup;
610
+ private readonly levels;
611
+ private readonly colors;
612
+ constructor(options?: {
613
+ name?: string;
614
+ icon?: string;
615
+ });
616
+ protected onInit(): void;
617
+ onActivate(): void;
618
+ onDeactivate(): void;
619
+ private bindEvents;
620
+ private unbindEvents;
621
+ private onClick;
622
+ private onMouseMove;
623
+ private initGraphic;
624
+ private removeGraphic;
625
+ private updateGraphic;
626
+ private saveDrawing;
627
+ }
628
+
629
+ declare class FibonacciChannelDrawingRenderer implements DrawingRenderer {
630
+ type: string;
631
+ render(ctx: DrawingRenderContext): any;
632
+ }
633
+
634
+ declare class FibSpeedResistanceFanTool extends AbstractPlugin {
635
+ private startPoint;
636
+ private endPoint;
637
+ private state;
638
+ private graphicGroup;
639
+ constructor(options?: {
640
+ name?: string;
641
+ icon?: string;
642
+ });
643
+ protected onInit(): void;
644
+ protected onActivate(): void;
645
+ protected onDeactivate(): void;
646
+ private bindEvents;
647
+ private unbindEvents;
648
+ private onClick;
649
+ private onMouseMove;
650
+ private initGraphic;
651
+ private removeGraphic;
652
+ private updateGraphic;
653
+ private saveDrawing;
654
+ }
655
+
656
+ declare class FibSpeedResistanceFanDrawingRenderer implements DrawingRenderer {
657
+ type: string;
658
+ render(ctx: DrawingRenderContext): any;
659
+ }
660
+
661
+ declare class FibTrendExtensionTool extends AbstractPlugin {
662
+ private points;
663
+ private state;
664
+ private graphicGroup;
665
+ constructor(options?: {
666
+ name?: string;
667
+ icon?: string;
668
+ });
669
+ protected onInit(): void;
670
+ protected onActivate(): void;
671
+ protected onDeactivate(): void;
672
+ private bindEvents;
673
+ private unbindEvents;
674
+ private onClick;
675
+ private onMouseMove;
676
+ private initGraphic;
677
+ private removeGraphic;
678
+ private updateGraphic;
679
+ private saveDrawing;
680
+ }
681
+
682
+ declare class FibTrendExtensionDrawingRenderer implements DrawingRenderer {
683
+ type: string;
684
+ render(ctx: DrawingRenderContext): any;
685
+ }
686
+
687
+ declare class XABCDPatternTool extends AbstractPlugin {
688
+ private points;
689
+ private state;
690
+ private graphicGroup;
691
+ constructor(options?: {
692
+ name?: string;
693
+ icon?: string;
694
+ });
695
+ protected onInit(): void;
696
+ protected onActivate(): void;
697
+ protected onDeactivate(): void;
698
+ private bindEvents;
699
+ private unbindEvents;
700
+ private onClick;
701
+ private onMouseMove;
702
+ private initGraphic;
703
+ private removeGraphic;
704
+ private updateGraphic;
705
+ private saveDrawing;
706
+ }
707
+
708
+ declare class XABCDPatternDrawingRenderer implements DrawingRenderer {
709
+ type: string;
710
+ render(ctx: DrawingRenderContext): any;
711
+ }
712
+
713
+ declare class ABCDPatternTool extends AbstractPlugin {
714
+ private points;
715
+ private state;
716
+ private graphicGroup;
717
+ constructor(options?: {
718
+ name?: string;
719
+ icon?: string;
720
+ });
721
+ protected onInit(): void;
722
+ protected onActivate(): void;
723
+ protected onDeactivate(): void;
724
+ private onClick;
725
+ private onMouseMove;
726
+ private initGraphic;
727
+ private removeGraphic;
728
+ private updateGraphic;
729
+ private saveDrawing;
730
+ }
731
+
732
+ declare class ABCDPatternDrawingRenderer implements DrawingRenderer {
733
+ type: string;
734
+ render(ctx: DrawingRenderContext): any;
735
+ }
736
+
737
+ declare class CypherPatternTool extends AbstractPlugin {
738
+ private points;
739
+ private state;
740
+ private graphicGroup;
741
+ constructor(options?: {
742
+ name?: string;
743
+ icon?: string;
744
+ });
745
+ protected onInit(): void;
746
+ protected onActivate(): void;
747
+ protected onDeactivate(): void;
748
+ private onClick;
749
+ private onMouseMove;
750
+ private initGraphic;
751
+ private removeGraphic;
752
+ private updateGraphic;
753
+ private saveDrawing;
754
+ }
755
+
756
+ declare class CypherPatternDrawingRenderer implements DrawingRenderer {
757
+ type: string;
758
+ render(ctx: DrawingRenderContext): any;
759
+ }
760
+
761
+ declare class HeadAndShouldersTool extends AbstractPlugin {
762
+ private points;
763
+ private state;
764
+ private graphicGroup;
765
+ constructor(options?: {
766
+ name?: string;
767
+ icon?: string;
768
+ });
769
+ protected onInit(): void;
770
+ protected onActivate(): void;
771
+ protected onDeactivate(): void;
772
+ private onClick;
773
+ private onMouseMove;
774
+ private initGraphic;
775
+ private removeGraphic;
776
+ private updateGraphic;
777
+ private saveDrawing;
778
+ }
779
+
780
+ declare class HeadAndShouldersDrawingRenderer implements DrawingRenderer {
781
+ type: string;
782
+ render(ctx: DrawingRenderContext): any;
783
+ }
784
+
785
+ declare class TrianglePatternTool extends AbstractPlugin {
786
+ private points;
787
+ private state;
788
+ private graphicGroup;
789
+ constructor(options?: {
790
+ name?: string;
791
+ icon?: string;
792
+ });
793
+ protected onInit(): void;
794
+ protected onActivate(): void;
795
+ protected onDeactivate(): void;
796
+ private onClick;
797
+ private onMouseMove;
798
+ private initGraphic;
799
+ private removeGraphic;
800
+ private updateGraphic;
801
+ private saveDrawing;
802
+ }
803
+
804
+ declare class TrianglePatternDrawingRenderer implements DrawingRenderer {
805
+ type: string;
806
+ render(ctx: DrawingRenderContext): any;
807
+ }
808
+
809
+ declare class ThreeDrivesPatternTool extends AbstractPlugin {
810
+ private points;
811
+ private state;
812
+ private graphicGroup;
813
+ constructor(options?: {
814
+ name?: string;
815
+ icon?: string;
816
+ });
817
+ protected onInit(): void;
818
+ protected onActivate(): void;
819
+ protected onDeactivate(): void;
820
+ private onClick;
821
+ private onMouseMove;
822
+ private initGraphic;
823
+ private removeGraphic;
824
+ private updateGraphic;
825
+ private saveDrawing;
826
+ }
827
+
828
+ declare class ThreeDrivesPatternDrawingRenderer implements DrawingRenderer {
829
+ type: string;
830
+ render(ctx: DrawingRenderContext): any;
831
+ }
832
+
833
+ interface ToolGroupConfig extends Omit<PluginConfig, 'id'> {
834
+ id?: string;
835
+ name: string;
836
+ icon?: string;
837
+ }
838
+ declare class ToolGroup extends AbstractPlugin {
839
+ private plugins;
840
+ private activeSubPlugin;
841
+ private menuElement;
842
+ private buttonElement;
843
+ private originalIcon;
844
+ private arrowSvg;
845
+ constructor(config: ToolGroupConfig);
846
+ add(plugin: Plugin): void;
847
+ protected onInit(): void;
848
+ protected onActivate(): void;
849
+ protected onDeactivate(): void;
850
+ protected onDestroy(): void;
851
+ private showMenu;
852
+ private hideMenu;
853
+ private handleOutsideClick;
854
+ private activateSubPlugin;
855
+ }
856
+
857
+ declare class DrawingRendererRegistry {
858
+ private renderers;
859
+ register(renderer: DrawingRenderer): void;
860
+ get(type: string): DrawingRenderer | undefined;
861
+ }
862
+
863
+ export { ABCDPatternDrawingRenderer, ABCDPatternTool, AbstractPlugin, CypherPatternDrawingRenderer, CypherPatternTool, DrawingRendererRegistry, FibSpeedResistanceFanDrawingRenderer, FibSpeedResistanceFanTool, FibTrendExtensionDrawingRenderer, FibTrendExtensionTool, FibonacciChannelDrawingRenderer, FibonacciChannelTool, FibonacciDrawingRenderer, FibonacciTool, HeadAndShouldersDrawingRenderer, HeadAndShouldersTool, LineDrawingRenderer, LineTool, MeasureTool, QFChart, ThreeDrivesPatternDrawingRenderer, ThreeDrivesPatternTool, ToolGroup, TrianglePatternDrawingRenderer, TrianglePatternTool, XABCDPatternDrawingRenderer, XABCDPatternTool };
864
+ export type { ChartContext, Coordinate, DataCoordinate, DrawingElement, DrawingRenderContext, DrawingRenderer, DrawingType, Indicator$1 as Indicator, IndicatorOptions, IndicatorPlot, IndicatorPoint, IndicatorStyle, OHLCV, Plugin, PluginConfig, QFChartOptions, ToolGroupConfig };