@363045841yyt/klinechart-core 0.8.1-alpha.3 → 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 (130) hide show
  1. package/dist/controllers/createChartController.d.ts.map +1 -1
  2. package/dist/controllers/createChartController.js +30 -4
  3. package/dist/controllers/createChartController.js.map +1 -1
  4. package/dist/controllers/types.d.ts +9 -2
  5. package/dist/controllers/types.d.ts.map +1 -1
  6. package/dist/data-fetchers/baostock.js +3 -3
  7. package/dist/data-fetchers/baostock.js.map +1 -1
  8. package/dist/data-fetchers/dataBuffer.d.ts +6 -1
  9. package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
  10. package/dist/data-fetchers/dataBuffer.js +88 -47
  11. package/dist/data-fetchers/dataBuffer.js.map +1 -1
  12. package/dist/data-fetchers/index.d.ts +1 -0
  13. package/dist/data-fetchers/index.d.ts.map +1 -1
  14. package/dist/data-fetchers/index.js +1 -0
  15. package/dist/data-fetchers/index.js.map +1 -1
  16. package/dist/data-fetchers/router.d.ts.map +1 -1
  17. package/dist/data-fetchers/router.js +3 -0
  18. package/dist/data-fetchers/router.js.map +1 -1
  19. package/dist/data-fetchers/tradingview.d.ts +3 -0
  20. package/dist/data-fetchers/tradingview.d.ts.map +1 -0
  21. package/dist/data-fetchers/tradingview.js +45 -0
  22. package/dist/data-fetchers/tradingview.js.map +1 -0
  23. package/dist/engine/chart.d.ts +34 -351
  24. package/dist/engine/chart.d.ts.map +1 -1
  25. package/dist/engine/chart.js +246 -1716
  26. package/dist/engine/chart.js.map +1 -1
  27. package/dist/engine/chartContext.d.ts +24 -0
  28. package/dist/engine/chartContext.d.ts.map +1 -0
  29. package/dist/engine/chartContext.js +19 -0
  30. package/dist/engine/chartContext.js.map +1 -0
  31. package/dist/engine/chartTypes.d.ts +77 -0
  32. package/dist/engine/chartTypes.d.ts.map +1 -0
  33. package/dist/engine/chartTypes.js +2 -0
  34. package/dist/engine/chartTypes.js.map +1 -0
  35. package/dist/engine/controller/interaction.d.ts +1 -0
  36. package/dist/engine/controller/interaction.d.ts.map +1 -1
  37. package/dist/engine/controller/interaction.js +9 -2
  38. package/dist/engine/controller/interaction.js.map +1 -1
  39. package/dist/engine/data/chartDataManager.d.ts +102 -0
  40. package/dist/engine/data/chartDataManager.d.ts.map +1 -0
  41. package/dist/engine/data/chartDataManager.js +590 -0
  42. package/dist/engine/data/chartDataManager.js.map +1 -0
  43. package/dist/engine/indicators/chartIndicatorManager.d.ts +102 -0
  44. package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -0
  45. package/dist/engine/indicators/chartIndicatorManager.js +437 -0
  46. package/dist/engine/indicators/chartIndicatorManager.js.map +1 -0
  47. package/dist/engine/layout/chartPaneLayout.d.ts +53 -0
  48. package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -0
  49. package/dist/engine/layout/chartPaneLayout.js +388 -0
  50. package/dist/engine/layout/chartPaneLayout.js.map +1 -0
  51. package/dist/engine/render/chartRenderer.d.ts +86 -0
  52. package/dist/engine/render/chartRenderer.d.ts.map +1 -0
  53. package/dist/engine/render/chartRenderer.js +438 -0
  54. package/dist/engine/render/chartRenderer.js.map +1 -0
  55. package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
  56. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +73 -7
  57. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  58. package/dist/engine/renderers/comparisonLine.d.ts.map +1 -1
  59. package/dist/engine/renderers/comparisonLine.js +25 -11
  60. package/dist/engine/renderers/comparisonLine.js.map +1 -1
  61. package/dist/engine/subPaneManager.d.ts +27 -6
  62. package/dist/engine/subPaneManager.d.ts.map +1 -1
  63. package/dist/engine/subPaneManager.js +54 -56
  64. package/dist/engine/subPaneManager.js.map +1 -1
  65. package/dist/engine/utils/chartZoomController.d.ts +33 -0
  66. package/dist/engine/utils/chartZoomController.d.ts.map +1 -0
  67. package/dist/engine/utils/chartZoomController.js +66 -0
  68. package/dist/engine/utils/chartZoomController.js.map +1 -0
  69. package/dist/engine/viewport/chartViewportManager.d.ts +72 -0
  70. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -0
  71. package/dist/engine/viewport/chartViewportManager.js +249 -0
  72. package/dist/engine/viewport/chartViewportManager.js.map +1 -0
  73. package/dist/engine/viewport/viewport.js +1 -1
  74. package/dist/engine/viewport/viewport.js.map +1 -1
  75. package/dist/plugin/types.d.ts +1 -0
  76. package/dist/plugin/types.d.ts.map +1 -1
  77. package/dist/plugin/types.js.map +1 -1
  78. package/dist/tokens/theme-china.d.ts.map +1 -1
  79. package/dist/tokens/theme-china.js +0 -4
  80. package/dist/tokens/theme-china.js.map +1 -1
  81. package/dist/tokens/theme-dark.d.ts.map +1 -1
  82. package/dist/tokens/theme-dark.js +0 -4
  83. package/dist/tokens/theme-dark.js.map +1 -1
  84. package/dist/tokens/theme-light.d.ts.map +1 -1
  85. package/dist/tokens/theme-light.js +1 -5
  86. package/dist/tokens/theme-light.js.map +1 -1
  87. package/dist/tokens/types.d.ts +0 -4
  88. package/dist/tokens/types.d.ts.map +1 -1
  89. package/dist/types/price.d.ts +2 -0
  90. package/dist/types/price.d.ts.map +1 -1
  91. package/dist/types/price.js.map +1 -1
  92. package/dist/version.d.ts +1 -1
  93. package/dist/version.d.ts.map +1 -1
  94. package/dist/version.js +1 -1
  95. package/dist/version.js.map +1 -1
  96. package/package.json +1 -1
  97. package/src/controllers/createChartController.ts +49 -13
  98. package/src/controllers/types.ts +9 -2
  99. package/src/data-fetchers/__tests__/dataBuffer.test.ts +77 -0
  100. package/src/data-fetchers/baostock.ts +3 -3
  101. package/src/data-fetchers/dataBuffer.ts +70 -22
  102. package/src/data-fetchers/index.ts +1 -0
  103. package/src/data-fetchers/router.ts +3 -0
  104. package/src/data-fetchers/tradingview.ts +48 -0
  105. package/src/engine/__tests__/subPaneManager.test.ts +154 -0
  106. package/src/engine/chart.ts +260 -2103
  107. package/src/engine/chartContext.ts +34 -0
  108. package/src/engine/chartTypes.ts +88 -0
  109. package/src/engine/controller/__tests__/interaction.dpr.test.ts +1 -0
  110. package/src/engine/controller/interaction.ts +10 -2
  111. package/src/engine/data/chartDataManager.ts +691 -0
  112. package/src/engine/indicators/__tests__/chartIndicatorManager.test.ts +103 -0
  113. package/src/engine/indicators/chartIndicatorManager.ts +566 -0
  114. package/src/engine/layout/chartPaneLayout.ts +474 -0
  115. package/src/engine/render/chartRenderer.ts +579 -0
  116. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +99 -13
  117. package/src/engine/renderers/comparisonLine.ts +25 -11
  118. package/src/engine/subPaneManager.ts +75 -59
  119. package/src/engine/utils/chartZoomController.ts +104 -0
  120. package/src/engine/viewport/chartViewportManager.ts +310 -0
  121. package/src/engine/viewport/viewport.ts +1 -1
  122. package/src/plugin/types.ts +1 -0
  123. package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +1 -9
  124. package/src/tokens/theme-china.ts +0 -4
  125. package/src/tokens/theme-dark.ts +0 -4
  126. package/src/tokens/theme-light.ts +2 -6
  127. package/src/tokens/types.ts +0 -4
  128. package/src/types/price.ts +2 -0
  129. package/src/version.ts +1 -1
  130. package/src/engine/chart.d.ts +0 -619
@@ -0,0 +1,34 @@
1
+ import type { Viewport, PaneSpec } from './chartTypes'
2
+
3
+ export type ChartEventMap = {
4
+ 'data:changed': { prevLength: number; newLength: number }
5
+ 'viewport:changed': { vp: Viewport }
6
+ 'layout:changed': { specs: PaneSpec[] }
7
+ 'zoom:changed': { level: number }
8
+ 'indicators:changed': {}
9
+ }
10
+
11
+ export class ChartEventBus {
12
+ private listeners = new Map<string, Set<Function>>()
13
+
14
+ on<K extends keyof ChartEventMap>(
15
+ event: K,
16
+ handler: (payload: ChartEventMap[K]) => void,
17
+ ): () => void {
18
+ if (!this.listeners.has(event)) {
19
+ this.listeners.set(event, new Set())
20
+ }
21
+ this.listeners.get(event)!.add(handler)
22
+ return () => {
23
+ this.listeners.get(event)?.delete(handler)
24
+ }
25
+ }
26
+
27
+ emit<K extends keyof ChartEventMap>(event: K, payload: ChartEventMap[K]): void {
28
+ this.listeners.get(event)?.forEach((fn) => fn(payload))
29
+ }
30
+
31
+ clear(): void {
32
+ this.listeners.clear()
33
+ }
34
+ }
@@ -0,0 +1,88 @@
1
+ import type { PaneRole, PaneCapabilities } from '../plugin'
2
+
3
+ export type ChartDom = {
4
+ container: HTMLDivElement
5
+ scrollContent?: HTMLDivElement
6
+ canvasLayer: HTMLDivElement
7
+ rightAxisLayer: HTMLDivElement
8
+ xAxisCanvas: HTMLCanvasElement
9
+ }
10
+
11
+ export type PaneSpec = {
12
+ id: string
13
+ ratio: number
14
+ visible?: boolean
15
+ minHeightPx?: number
16
+ role?: PaneRole
17
+ capabilities?: Partial<PaneCapabilities>
18
+ }
19
+
20
+ export type PaneRendererDom = {
21
+ mainCanvas: HTMLCanvasElement
22
+ overlayCanvas: HTMLCanvasElement
23
+ yAxisCanvas: HTMLCanvasElement
24
+ }
25
+
26
+ export type ChartOptions = {
27
+ kWidth?: number
28
+ kGap?: number
29
+ yPaddingPx: number
30
+ rightAxisWidth: number
31
+ bottomAxisHeight: number
32
+ minKWidth: number
33
+ maxKWidth: number
34
+ panes: PaneSpec[]
35
+ paneGap?: number
36
+ priceLabelWidth?: number
37
+ defaultPaneMinHeightPx?: number
38
+ zoomLevels?: number
39
+ initialZoomLevel?: number
40
+ }
41
+
42
+ export type KLinePositions = number[]
43
+
44
+ export type Viewport = {
45
+ viewWidth: number
46
+ viewHeight: number
47
+ plotWidth: number
48
+ plotHeight: number
49
+ scrollLeft: number
50
+ dpr: number
51
+ }
52
+
53
+ export type ViewportState = {
54
+ zoomLevel: number
55
+ plotWidth: number
56
+ plotHeight: number
57
+ dpr: number
58
+ visibleFrom: number
59
+ visibleTo: number
60
+ kWidth: number
61
+ kGap: number
62
+ }
63
+
64
+ export type IndicatorRole = 'main' | 'sub'
65
+
66
+ export interface IndicatorInstance {
67
+ id: string
68
+ definitionId: string
69
+ label: string
70
+ name: string
71
+ role: IndicatorRole
72
+ paneId?: string
73
+ params: Record<string, unknown>
74
+ }
75
+
76
+ export interface SubPaneInfo {
77
+ paneId: string
78
+ indicatorId: string
79
+ params: Record<string, unknown>
80
+ ratio: number
81
+ }
82
+
83
+ export type DrawingToolType = 'trendline' | 'horizontal' | 'fib' | 'rectangle' | 'arrow'
84
+
85
+ export interface DrawingObject {
86
+ id: string
87
+ type: DrawingToolType
88
+ }
@@ -91,6 +91,7 @@ function createChartStub(args: {
91
91
  }),
92
92
  getCurrentDpr: () => args.dpr,
93
93
  getCachedScrollLeft: () => 0,
94
+ getLogicalScrollLeft: () => 0,
94
95
  getMarkerManager: () => markerManager,
95
96
  getPaneRenderers: () => paneRenderers,
96
97
  getData: () => data,
@@ -144,6 +144,10 @@ export class InteractionController {
144
144
  }
145
145
  }
146
146
 
147
+ isPointerDown(): boolean {
148
+ return this.isDragging || this.pinchTracker.getPointerCount() > 0
149
+ }
150
+
147
151
  setOnInteractionChange(callback: (snapshot: InteractionSnapshot) => void) {
148
152
  this.onInteractionChangeCallback = callback
149
153
  }
@@ -188,7 +192,7 @@ export class InteractionController {
188
192
  if (!location) return
189
193
 
190
194
  const { mouseX, mouseY } = location
191
- const scrollLeft = this.chart.getCachedScrollLeft()
195
+ const scrollLeft = this.chart.getLogicalScrollLeft()
192
196
 
193
197
  const markerManager = this.chart.getMarkerManager()
194
198
  const worldX = scrollLeft + mouseX
@@ -245,11 +249,15 @@ export class InteractionController {
245
249
  this.pinchTracker.handlePointerUp(e)
246
250
 
247
251
  if (e.isPrimary === false) return
252
+ const wasPanning = this.dragMode === 'pan'
248
253
  this.isDragging = false
249
254
  this.dragMode = 'none'
250
255
  this.activePaneIdOnDrag = null
251
256
  this.activeSeparatorUpperPaneId = null
252
257
  this.notifyInteractionChange()
258
+ if (wasPanning) {
259
+ this.chart.checkVisibleRangeGap()
260
+ }
253
261
  }
254
262
 
255
263
  /**
@@ -561,7 +569,7 @@ export class InteractionController {
561
569
 
562
570
  this.hoveredRightAxisPaneId = null
563
571
 
564
- const scrollLeft = this.chart.getCachedScrollLeft()
572
+ const scrollLeft = this.chart.getLogicalScrollLeft()
565
573
  const dpr = this.chart.getCurrentDpr()
566
574
 
567
575
  const separatorUpperPaneId = this.hitTestPaneSeparator(mouseY)