@363045841yyt/klinechart-core 0.8.10-alpha.2 → 0.8.10

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 (89) hide show
  1. package/dist/controllers/index.d.ts +1 -1
  2. package/dist/controllers/index.d.ts.map +1 -1
  3. package/dist/controllers/index.js.map +1 -1
  4. package/dist/data-fetchers/dataBuffer.d.ts +0 -1
  5. package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
  6. package/dist/data-fetchers/dataBuffer.effects.d.ts +21 -0
  7. package/dist/data-fetchers/dataBuffer.effects.d.ts.map +1 -0
  8. package/dist/data-fetchers/dataBuffer.effects.js +55 -0
  9. package/dist/data-fetchers/dataBuffer.effects.js.map +1 -0
  10. package/dist/data-fetchers/dataBuffer.js +58 -93
  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/timeShareBuffer.d.ts +2 -1
  17. package/dist/data-fetchers/timeShareBuffer.d.ts.map +1 -1
  18. package/dist/data-fetchers/timeShareBuffer.js +36 -14
  19. package/dist/data-fetchers/timeShareBuffer.js.map +1 -1
  20. package/dist/engine/data/chartDataManager.d.ts.map +1 -1
  21. package/dist/engine/data/chartDataManager.js +2 -1
  22. package/dist/engine/data/chartDataManager.js.map +1 -1
  23. package/dist/engine/drawing/AnchorCollector.d.ts +26 -0
  24. package/dist/engine/drawing/AnchorCollector.d.ts.map +1 -0
  25. package/dist/engine/drawing/AnchorCollector.js +47 -0
  26. package/dist/engine/drawing/AnchorCollector.js.map +1 -0
  27. package/dist/engine/drawing/DragHandler.d.ts +38 -0
  28. package/dist/engine/drawing/DragHandler.d.ts.map +1 -0
  29. package/dist/engine/drawing/DragHandler.js +92 -0
  30. package/dist/engine/drawing/DragHandler.js.map +1 -0
  31. package/dist/engine/drawing/DrawingState.d.ts +51 -0
  32. package/dist/engine/drawing/DrawingState.d.ts.map +1 -0
  33. package/dist/engine/drawing/DrawingState.js +115 -0
  34. package/dist/engine/drawing/DrawingState.js.map +1 -0
  35. package/dist/engine/drawing/HitTester.d.ts +59 -0
  36. package/dist/engine/drawing/HitTester.d.ts.map +1 -0
  37. package/dist/engine/drawing/HitTester.js +219 -0
  38. package/dist/engine/drawing/HitTester.js.map +1 -0
  39. package/dist/engine/drawing/PreviewRenderer.d.ts +26 -0
  40. package/dist/engine/drawing/PreviewRenderer.d.ts.map +1 -0
  41. package/dist/engine/drawing/PreviewRenderer.js +131 -0
  42. package/dist/engine/drawing/PreviewRenderer.js.map +1 -0
  43. package/dist/engine/drawing/coordinateUtils.d.ts +57 -0
  44. package/dist/engine/drawing/coordinateUtils.d.ts.map +1 -0
  45. package/dist/engine/drawing/coordinateUtils.js +103 -0
  46. package/dist/engine/drawing/coordinateUtils.js.map +1 -0
  47. package/dist/engine/drawing/index.d.ts.map +1 -1
  48. package/dist/engine/drawing/index.js +11 -3
  49. package/dist/engine/drawing/index.js.map +1 -1
  50. package/dist/engine/drawing/interaction.d.ts +44 -40
  51. package/dist/engine/drawing/interaction.d.ts.map +1 -1
  52. package/dist/engine/drawing/interaction.js +132 -571
  53. package/dist/engine/drawing/interaction.js.map +1 -1
  54. package/dist/engine/drawing/toolConfig.d.ts +24 -0
  55. package/dist/engine/drawing/toolConfig.d.ts.map +1 -0
  56. package/dist/engine/drawing/toolConfig.js +76 -0
  57. package/dist/engine/drawing/toolConfig.js.map +1 -0
  58. package/dist/plugin/types.d.ts +1 -0
  59. package/dist/plugin/types.d.ts.map +1 -1
  60. package/dist/plugin/types.js.map +1 -1
  61. package/dist/version.d.ts +1 -1
  62. package/dist/version.d.ts.map +1 -1
  63. package/dist/version.js +1 -1
  64. package/dist/version.js.map +1 -1
  65. package/package.json +4 -1
  66. package/src/controllers/index.ts +1 -0
  67. package/src/data-fetchers/__tests__/dataBuffer.test.ts +1 -3
  68. package/src/data-fetchers/dataBuffer.effects.ts +118 -0
  69. package/src/data-fetchers/dataBuffer.ts +45 -86
  70. package/src/data-fetchers/index.ts +7 -0
  71. package/src/data-fetchers/timeShareBuffer.ts +58 -19
  72. package/src/engine/__tests__/paneRenderer.resize.test.ts +3 -0
  73. package/src/engine/__tests__/subPaneManager.test.ts +13 -3
  74. package/src/engine/data/chartDataManager.ts +2 -1
  75. package/src/engine/drawing/AnchorCollector.ts +57 -0
  76. package/src/engine/drawing/DragHandler.ts +121 -0
  77. package/src/engine/drawing/DrawingState.ts +132 -0
  78. package/src/engine/drawing/HitTester.ts +288 -0
  79. package/src/engine/drawing/PreviewRenderer.ts +157 -0
  80. package/src/engine/drawing/coordinateUtils.ts +139 -0
  81. package/src/engine/drawing/index.ts +10 -3
  82. package/src/engine/drawing/interaction.ts +177 -687
  83. package/src/engine/drawing/toolConfig.ts +103 -0
  84. package/src/engine/indicators/__tests__/chartIndicatorManager.test.ts +1 -0
  85. package/src/engine/indicators/__tests__/stateComposer.test.ts +5 -4
  86. package/src/engine/renderers/Indicator/__tests__/createSubIndicatorRenderer.test.ts +1 -0
  87. package/src/plugin/types.ts +1 -0
  88. package/src/tokens/__tests__/tokens.test.ts +2 -1
  89. package/src/version.ts +1 -1
@@ -0,0 +1,103 @@
1
+ import type { DrawingKind } from '../../plugin'
2
+
3
+ // ---- Tool ID type ----
4
+
5
+ /**
6
+ * 所有支持的绘图工具 ID。
7
+ * UI 层通过 setTool(toolId) 切换工具,cursor 表示选择/交互模式。
8
+ */
9
+ export type DrawingToolId =
10
+ | 'cursor'
11
+ | 'trend-line'
12
+ | 'ray'
13
+ | 'h-line'
14
+ | 'h-ray'
15
+ | 'v-line'
16
+ | 'crosshair-line'
17
+ | 'info-line'
18
+ | 'parallel-channel'
19
+ | 'regression-channel'
20
+ | 'flat-line'
21
+ | 'disjoint-channel'
22
+
23
+ // ---- Tool grouping ----
24
+ // 按所需锚点数量分组:1 个锚点(水平/垂直线)、2 个锚点(趋势线)、3 个锚点(通道线)。
25
+ // 新增工具类型时,加到对应数组即可,无需改其他模块。
26
+
27
+ /** 单锚点工具:点击一次即创建完成 */
28
+ export const SINGLE_ANCHOR_TOOLS: readonly DrawingToolId[] = [
29
+ 'h-line',
30
+ 'h-ray',
31
+ 'v-line',
32
+ 'crosshair-line',
33
+ ]
34
+
35
+ /** 双锚点工具:需要两次点击才能完成 */
36
+ export const DOUBLE_ANCHOR_TOOLS: readonly DrawingToolId[] = [
37
+ 'trend-line',
38
+ 'ray',
39
+ 'info-line',
40
+ 'regression-channel',
41
+ ]
42
+
43
+ /** 三锚点工具:需要三次点击才能完成 */
44
+ export const TRIPLE_ANCHOR_TOOLS: readonly DrawingToolId[] = [
45
+ 'parallel-channel',
46
+ 'flat-line',
47
+ 'disjoint-channel',
48
+ ]
49
+
50
+ /** 返回工具所需的锚点数量(cursor 返回 null) */
51
+ export function getAnchorCountForTool(toolId: DrawingToolId): 1 | 2 | 3 | null {
52
+ if (SINGLE_ANCHOR_TOOLS.includes(toolId as any)) return 1
53
+ if (DOUBLE_ANCHOR_TOOLS.includes(toolId as any)) return 2
54
+ if (TRIPLE_ANCHOR_TOOLS.includes(toolId as any)) return 3
55
+ return null
56
+ }
57
+
58
+ // ---- Kind mapping ----
59
+ // toolId(UI 概念) → DrawingKind(引擎定义概念)。
60
+ // 大部分 toolId 与 kind 同名,h-line → horizontal-line 等少数需要映射。
61
+
62
+ /** 将 toolId 映射为引擎识别的 DrawingKind */
63
+ export function getDrawingKind(toolId: DrawingToolId): DrawingKind {
64
+ switch (toolId) {
65
+ case 'cursor':
66
+ throw new Error('cursor is not a drawing kind')
67
+ case 'h-line':
68
+ return 'horizontal-line'
69
+ case 'h-ray':
70
+ return 'horizontal-ray'
71
+ case 'v-line':
72
+ return 'vertical-line'
73
+ case 'crosshair-line':
74
+ return 'cross-line'
75
+ default:
76
+ return toolId
77
+ }
78
+ }
79
+
80
+ // ---- Extend mode ----
81
+
82
+ /**
83
+ * 返回图元的线段延伸模式。
84
+ * ray → 向右延伸,extended-line → 两端延伸,其他 → 不延伸。
85
+ */
86
+ export function getExtendMode(kind: DrawingKind): 'none' | 'left' | 'right' | 'both' {
87
+ switch (kind) {
88
+ case 'ray':
89
+ return 'right'
90
+ case 'extended-line':
91
+ return 'both'
92
+ default:
93
+ return 'none'
94
+ }
95
+ }
96
+
97
+ /** 所有带填充区域的通道类图元 kind 列表 */
98
+ export const CHANNEL_KINDS: readonly DrawingKind[] = [
99
+ 'parallel-channel',
100
+ 'regression-channel',
101
+ 'flat-line',
102
+ 'disjoint-channel',
103
+ ]
@@ -18,6 +18,7 @@ function createMockDeps() {
18
18
  rendererMap,
19
19
  getOption: () => ({
20
20
  rightAxisWidth: 60,
21
+ leftAxisWidth: 60,
21
22
  priceLabelWidth: 60,
22
23
  yPaddingPx: 4,
23
24
  paneGap: 1,
@@ -47,9 +47,9 @@ function createBundle(): IndicatorSeriesBundle {
47
47
  mfi: { series: [], params: {} as never },
48
48
  pivot: { series: [], params: {} as never },
49
49
  fib: { series: [], params: {} as never },
50
- structure: { series: { swings: [], breakouts: [] }, params: {} as never },
50
+ structure: { series: { swings: [], events: [], trend: 'range' }, params: {} as never },
51
51
  zones: { series: [], params: {} as never },
52
- volumeProfile: { series: { bins: [], vah: 0, val: 0, poc: 0 }, params: {} as never },
52
+ volumeProfile: { series: { bins: [], vah: 0, val: 0, poc: 0, totalVolume: 0 }, params: {} as never },
53
53
  _changed: [],
54
54
  }
55
55
  }
@@ -330,7 +330,7 @@ describe('stateComposer', () => {
330
330
 
331
331
  it('uses fixed unit range for structure overlay via metadata composer', () => {
332
332
  const bundle = createBundle()
333
- bundle.structure.series = { swings: [], breakouts: [] }
333
+ bundle.structure.series = { swings: [], events: [], trend: 'range' }
334
334
  bundle.structure.params = { showStructure: true } as never
335
335
  const timestamp = 1000
336
336
  const visibleRange = { start: 0, end: 1 }
@@ -346,10 +346,11 @@ describe('stateComposer', () => {
346
346
  it('derives volumeProfile range from bins and val/vah via metadata composer', () => {
347
347
  const bundle = createBundle()
348
348
  bundle.volumeProfile.series = {
349
- bins: [{ priceLow: 95, priceHigh: 105, volume: 10, poc: false }],
349
+ bins: [{ priceLow: 95, priceHigh: 105, volume: 10 }],
350
350
  vah: 103,
351
351
  val: 97,
352
352
  poc: 100,
353
+ totalVolume: 0,
353
354
  }
354
355
  bundle.volumeProfile.params = { showVolumeProfile: true } as never
355
356
  const timestamp = 1000
@@ -15,6 +15,7 @@ function createRenderer(name: string): RendererPluginWithHost {
15
15
  version: '1.0.0',
16
16
  description: 'test renderer',
17
17
  paneId: 'test',
18
+ priority: 0,
18
19
  draw: vi.fn(),
19
20
  }
20
21
  }
@@ -419,6 +419,7 @@ export type TextPrimitive = {
419
419
  text: string
420
420
  align?: 'left' | 'center' | 'right'
421
421
  baseline?: 'top' | 'middle' | 'bottom'
422
+ rotation?: number
422
423
  style?: DrawingStyle
423
424
  }
424
425
 
@@ -24,6 +24,7 @@ import {
24
24
  mergeTheme,
25
25
  type Theme,
26
26
  type ColorTokens,
27
+ type IndicatorPalette,
27
28
  } from '..'
28
29
 
29
30
  // ---------------------------------------------------------------------------
@@ -197,7 +198,7 @@ describe('mergeTheme', () => {
197
198
 
198
199
  it('palette merges per-key, not whole-replace', () => {
199
200
  const merged = mergeTheme(lightTheme, {
200
- colors: { palette: { i1: '#000000' } },
201
+ colors: { palette: { i1: '#000000' } as IndicatorPalette },
201
202
  })
202
203
  expect(merged.colors.palette.i1).toBe('#000000')
203
204
  expect(merged.colors.palette.i2).toBe(lightTheme.colors.palette.i2)
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = "0.8.10-alpha.2"
1
+ export const VERSION = "0.8.10"