@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.
- package/dist/controllers/createChartController.d.ts.map +1 -1
- package/dist/controllers/createChartController.js +30 -4
- package/dist/controllers/createChartController.js.map +1 -1
- package/dist/controllers/types.d.ts +9 -2
- package/dist/controllers/types.d.ts.map +1 -1
- package/dist/data-fetchers/baostock.js +3 -3
- package/dist/data-fetchers/baostock.js.map +1 -1
- package/dist/data-fetchers/dataBuffer.d.ts +6 -1
- package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
- package/dist/data-fetchers/dataBuffer.js +88 -47
- package/dist/data-fetchers/dataBuffer.js.map +1 -1
- package/dist/data-fetchers/index.d.ts +1 -0
- package/dist/data-fetchers/index.d.ts.map +1 -1
- package/dist/data-fetchers/index.js +1 -0
- package/dist/data-fetchers/index.js.map +1 -1
- package/dist/data-fetchers/router.d.ts.map +1 -1
- package/dist/data-fetchers/router.js +3 -0
- package/dist/data-fetchers/router.js.map +1 -1
- package/dist/data-fetchers/tradingview.d.ts +3 -0
- package/dist/data-fetchers/tradingview.d.ts.map +1 -0
- package/dist/data-fetchers/tradingview.js +45 -0
- package/dist/data-fetchers/tradingview.js.map +1 -0
- package/dist/engine/chart.d.ts +34 -351
- package/dist/engine/chart.d.ts.map +1 -1
- package/dist/engine/chart.js +246 -1716
- package/dist/engine/chart.js.map +1 -1
- package/dist/engine/chartContext.d.ts +24 -0
- package/dist/engine/chartContext.d.ts.map +1 -0
- package/dist/engine/chartContext.js +19 -0
- package/dist/engine/chartContext.js.map +1 -0
- package/dist/engine/chartTypes.d.ts +77 -0
- package/dist/engine/chartTypes.d.ts.map +1 -0
- package/dist/engine/chartTypes.js +2 -0
- package/dist/engine/chartTypes.js.map +1 -0
- package/dist/engine/controller/interaction.d.ts +1 -0
- package/dist/engine/controller/interaction.d.ts.map +1 -1
- package/dist/engine/controller/interaction.js +9 -2
- package/dist/engine/controller/interaction.js.map +1 -1
- package/dist/engine/data/chartDataManager.d.ts +102 -0
- package/dist/engine/data/chartDataManager.d.ts.map +1 -0
- package/dist/engine/data/chartDataManager.js +590 -0
- package/dist/engine/data/chartDataManager.js.map +1 -0
- package/dist/engine/indicators/chartIndicatorManager.d.ts +102 -0
- package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -0
- package/dist/engine/indicators/chartIndicatorManager.js +437 -0
- package/dist/engine/indicators/chartIndicatorManager.js.map +1 -0
- package/dist/engine/layout/chartPaneLayout.d.ts +53 -0
- package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -0
- package/dist/engine/layout/chartPaneLayout.js +388 -0
- package/dist/engine/layout/chartPaneLayout.js.map +1 -0
- package/dist/engine/render/chartRenderer.d.ts +86 -0
- package/dist/engine/render/chartRenderer.d.ts.map +1 -0
- package/dist/engine/render/chartRenderer.js +438 -0
- package/dist/engine/render/chartRenderer.js.map +1 -0
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +73 -7
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
- package/dist/engine/renderers/comparisonLine.d.ts.map +1 -1
- package/dist/engine/renderers/comparisonLine.js +25 -11
- package/dist/engine/renderers/comparisonLine.js.map +1 -1
- package/dist/engine/subPaneManager.d.ts +27 -6
- package/dist/engine/subPaneManager.d.ts.map +1 -1
- package/dist/engine/subPaneManager.js +54 -56
- package/dist/engine/subPaneManager.js.map +1 -1
- package/dist/engine/utils/chartZoomController.d.ts +33 -0
- package/dist/engine/utils/chartZoomController.d.ts.map +1 -0
- package/dist/engine/utils/chartZoomController.js +66 -0
- package/dist/engine/utils/chartZoomController.js.map +1 -0
- package/dist/engine/viewport/chartViewportManager.d.ts +72 -0
- package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -0
- package/dist/engine/viewport/chartViewportManager.js +249 -0
- package/dist/engine/viewport/chartViewportManager.js.map +1 -0
- package/dist/engine/viewport/viewport.js +1 -1
- package/dist/engine/viewport/viewport.js.map +1 -1
- package/dist/plugin/types.d.ts +1 -0
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/types.js.map +1 -1
- package/dist/tokens/theme-china.d.ts.map +1 -1
- package/dist/tokens/theme-china.js +0 -4
- package/dist/tokens/theme-china.js.map +1 -1
- package/dist/tokens/theme-dark.d.ts.map +1 -1
- package/dist/tokens/theme-dark.js +0 -4
- package/dist/tokens/theme-dark.js.map +1 -1
- package/dist/tokens/theme-light.d.ts.map +1 -1
- package/dist/tokens/theme-light.js +1 -5
- package/dist/tokens/theme-light.js.map +1 -1
- package/dist/tokens/types.d.ts +0 -4
- package/dist/tokens/types.d.ts.map +1 -1
- package/dist/types/price.d.ts +2 -0
- package/dist/types/price.d.ts.map +1 -1
- package/dist/types/price.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/controllers/createChartController.ts +49 -13
- package/src/controllers/types.ts +9 -2
- package/src/data-fetchers/__tests__/dataBuffer.test.ts +77 -0
- package/src/data-fetchers/baostock.ts +3 -3
- package/src/data-fetchers/dataBuffer.ts +70 -22
- package/src/data-fetchers/index.ts +1 -0
- package/src/data-fetchers/router.ts +3 -0
- package/src/data-fetchers/tradingview.ts +48 -0
- package/src/engine/__tests__/subPaneManager.test.ts +154 -0
- package/src/engine/chart.ts +260 -2103
- package/src/engine/chartContext.ts +34 -0
- package/src/engine/chartTypes.ts +88 -0
- package/src/engine/controller/__tests__/interaction.dpr.test.ts +1 -0
- package/src/engine/controller/interaction.ts +10 -2
- package/src/engine/data/chartDataManager.ts +691 -0
- package/src/engine/indicators/__tests__/chartIndicatorManager.test.ts +103 -0
- package/src/engine/indicators/chartIndicatorManager.ts +566 -0
- package/src/engine/layout/chartPaneLayout.ts +474 -0
- package/src/engine/render/chartRenderer.ts +579 -0
- package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +99 -13
- package/src/engine/renderers/comparisonLine.ts +25 -11
- package/src/engine/subPaneManager.ts +75 -59
- package/src/engine/utils/chartZoomController.ts +104 -0
- package/src/engine/viewport/chartViewportManager.ts +310 -0
- package/src/engine/viewport/viewport.ts +1 -1
- package/src/plugin/types.ts +1 -0
- package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +1 -9
- package/src/tokens/theme-china.ts +0 -4
- package/src/tokens/theme-dark.ts +0 -4
- package/src/tokens/theme-light.ts +2 -6
- package/src/tokens/types.ts +0 -4
- package/src/types/price.ts +2 -0
- package/src/version.ts +1 -1
- 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
|
+
}
|
|
@@ -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.
|
|
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.
|
|
572
|
+
const scrollLeft = this.chart.getLogicalScrollLeft()
|
|
565
573
|
const dpr = this.chart.getCurrentDpr()
|
|
566
574
|
|
|
567
575
|
const separatorUpperPaneId = this.hitTestPaneSeparator(mouseY)
|