@363045841yyt/klinechart-core 0.7.3 → 0.7.5-alpha.2

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 (231) hide show
  1. package/README.md +201 -201
  2. package/README.zh-CN.md +201 -201
  3. package/dist/engine/renderers/webgl/candleSurface.js +47 -47
  4. package/dist/version.d.ts +1 -1
  5. package/dist/version.d.ts.map +1 -1
  6. package/dist/version.js +1 -2
  7. package/dist/version.js.map +1 -1
  8. package/package.json +129 -122
  9. package/src/__tests__/signal.test.ts +124 -124
  10. package/src/config/chartSettings.ts +66 -66
  11. package/src/controllers/__tests__/drawing.test.ts +214 -214
  12. package/src/controllers/__tests__/indicatorSelector.test.ts +481 -481
  13. package/src/controllers/__tests__/toolbar.test.ts +225 -225
  14. package/src/controllers/createChartController.ts +665 -665
  15. package/src/controllers/createDrawingController.ts +96 -96
  16. package/src/controllers/createIndicatorSelectorController.ts +307 -307
  17. package/src/controllers/createToolbarController.ts +146 -146
  18. package/src/controllers/index.ts +19 -19
  19. package/src/controllers/types.ts +284 -284
  20. package/src/engine/__tests__/chart.dpr.test.ts +401 -401
  21. package/src/engine/__tests__/paneRenderer.resize.test.ts +92 -92
  22. package/src/engine/chart-store.ts +121 -121
  23. package/src/engine/chart.d.ts +617 -617
  24. package/src/engine/chart.ts +2815 -2815
  25. package/src/engine/controller/__tests__/interaction.dpr.test.ts +259 -259
  26. package/src/engine/controller/interaction.ts +722 -722
  27. package/src/engine/controller/markerInteraction.ts +130 -130
  28. package/src/engine/controller/pinchTracker.ts +82 -82
  29. package/src/engine/controller/tooltipPosition.ts +48 -48
  30. package/src/engine/draw/__tests__/pixelAlign.spec.ts +176 -176
  31. package/src/engine/draw/pixelAlign.ts +259 -259
  32. package/src/engine/drawing/index.ts +655 -655
  33. package/src/engine/drawing/interaction.ts +842 -842
  34. package/src/engine/drawing/plugin.ts +343 -343
  35. package/src/engine/indicators/__tests__/__fixtures__/golden/atr.json +38 -38
  36. package/src/engine/indicators/__tests__/__fixtures__/golden/dema.json +14 -14
  37. package/src/engine/indicators/__tests__/__fixtures__/golden/hma.json +14 -14
  38. package/src/engine/indicators/__tests__/__fixtures__/golden/index.ts +55 -55
  39. package/src/engine/indicators/__tests__/__fixtures__/golden/kama.json +14 -14
  40. package/src/engine/indicators/__tests__/__fixtures__/golden/tema.json +14 -14
  41. package/src/engine/indicators/__tests__/__fixtures__/golden/wma.json +40 -40
  42. package/src/engine/indicators/__tests__/__fixtures__/synthetic.ts +65 -65
  43. package/src/engine/indicators/__tests__/_propertyAssertions.ts +76 -76
  44. package/src/engine/indicators/__tests__/atr.test.ts +153 -153
  45. package/src/engine/indicators/__tests__/calculators.test.ts +614 -614
  46. package/src/engine/indicators/__tests__/cmf-mfi.test.ts +100 -100
  47. package/src/engine/indicators/__tests__/dema.test.ts +73 -73
  48. package/src/engine/indicators/__tests__/donchian.test.ts +70 -70
  49. package/src/engine/indicators/__tests__/hma.test.ts +73 -73
  50. package/src/engine/indicators/__tests__/ichimoku.test.ts +105 -105
  51. package/src/engine/indicators/__tests__/kama.test.ts +80 -80
  52. package/src/engine/indicators/__tests__/keltner.test.ts +65 -65
  53. package/src/engine/indicators/__tests__/pivot-fib.test.ts +110 -110
  54. package/src/engine/indicators/__tests__/roc.test.ts +68 -68
  55. package/src/engine/indicators/__tests__/sar.test.ts +86 -86
  56. package/src/engine/indicators/__tests__/scheduler.test.ts +831 -831
  57. package/src/engine/indicators/__tests__/soa.test.ts +533 -533
  58. package/src/engine/indicators/__tests__/structure.test.ts +110 -110
  59. package/src/engine/indicators/__tests__/supertrend.test.ts +65 -65
  60. package/src/engine/indicators/__tests__/tema.test.ts +68 -68
  61. package/src/engine/indicators/__tests__/trix.test.ts +70 -70
  62. package/src/engine/indicators/__tests__/volatility.test.ts +117 -117
  63. package/src/engine/indicators/__tests__/volume.test.ts +115 -115
  64. package/src/engine/indicators/__tests__/volumeProfile.test.ts +74 -74
  65. package/src/engine/indicators/__tests__/vwap.test.ts +69 -69
  66. package/src/engine/indicators/__tests__/wma.test.ts +112 -112
  67. package/src/engine/indicators/__tests__/zones.test.ts +95 -95
  68. package/src/engine/indicators/atrState.ts +27 -27
  69. package/src/engine/indicators/bollState.ts +51 -51
  70. package/src/engine/indicators/calculators.ts +2593 -2593
  71. package/src/engine/indicators/cciState.ts +25 -25
  72. package/src/engine/indicators/chaikinVolState.ts +32 -32
  73. package/src/engine/indicators/cmfState.ts +27 -27
  74. package/src/engine/indicators/demaState.ts +27 -27
  75. package/src/engine/indicators/donchianState.ts +43 -43
  76. package/src/engine/indicators/eneState.ts +43 -43
  77. package/src/engine/indicators/expmaState.ts +43 -43
  78. package/src/engine/indicators/fastkState.ts +25 -25
  79. package/src/engine/indicators/fibState.ts +41 -41
  80. package/src/engine/indicators/hmaState.ts +27 -27
  81. package/src/engine/indicators/hvState.ts +28 -28
  82. package/src/engine/indicators/ichimokuState.ts +70 -70
  83. package/src/engine/indicators/indicator.worker.ts +169 -169
  84. package/src/engine/indicators/indicatorDefinitionRegistry.ts +62 -62
  85. package/src/engine/indicators/indicatorMetadata.ts +110 -110
  86. package/src/engine/indicators/indicatorRegistry.ts +106 -106
  87. package/src/engine/indicators/indicatorRuntime.ts +1548 -1548
  88. package/src/engine/indicators/kamaState.ts +34 -34
  89. package/src/engine/indicators/keltnerState.ts +49 -49
  90. package/src/engine/indicators/kstState.ts +42 -42
  91. package/src/engine/indicators/maState.ts +36 -36
  92. package/src/engine/indicators/macdState.ts +76 -76
  93. package/src/engine/indicators/mfiState.ts +27 -27
  94. package/src/engine/indicators/momState.ts +25 -25
  95. package/src/engine/indicators/obvState.ts +25 -25
  96. package/src/engine/indicators/parkinsonState.ts +28 -28
  97. package/src/engine/indicators/pivotState.ts +51 -51
  98. package/src/engine/indicators/pvtState.ts +25 -25
  99. package/src/engine/indicators/rocState.ts +27 -27
  100. package/src/engine/indicators/rsiState.ts +65 -65
  101. package/src/engine/indicators/sarState.ts +41 -41
  102. package/src/engine/indicators/scheduler.ts +1205 -1205
  103. package/src/engine/indicators/soa.ts +352 -352
  104. package/src/engine/indicators/stateComposer.ts +1262 -1262
  105. package/src/engine/indicators/stochState.ts +26 -26
  106. package/src/engine/indicators/structureState.ts +69 -69
  107. package/src/engine/indicators/supertrendState.ts +37 -37
  108. package/src/engine/indicators/temaState.ts +27 -27
  109. package/src/engine/indicators/trixState.ts +35 -35
  110. package/src/engine/indicators/vmaState.ts +27 -27
  111. package/src/engine/indicators/volumeProfileState.ts +63 -63
  112. package/src/engine/indicators/vwapState.ts +29 -29
  113. package/src/engine/indicators/wmaState.ts +27 -27
  114. package/src/engine/indicators/wmsrState.ts +25 -25
  115. package/src/engine/indicators/workerProtocol.ts +613 -613
  116. package/src/engine/indicators/zonesState.ts +47 -47
  117. package/src/engine/layout/pane.ts +161 -161
  118. package/src/engine/marker/registry.ts +265 -265
  119. package/src/engine/paneRenderer.ts +169 -169
  120. package/src/engine/renderers/Indicator/atr.ts +237 -237
  121. package/src/engine/renderers/Indicator/boll.ts +317 -317
  122. package/src/engine/renderers/Indicator/cci.ts +275 -275
  123. package/src/engine/renderers/Indicator/chaikinVol.ts +138 -138
  124. package/src/engine/renderers/Indicator/cmf.ts +137 -137
  125. package/src/engine/renderers/Indicator/dema.ts +136 -136
  126. package/src/engine/renderers/Indicator/donchian.ts +137 -137
  127. package/src/engine/renderers/Indicator/ene.ts +271 -271
  128. package/src/engine/renderers/Indicator/expma.ts +197 -197
  129. package/src/engine/renderers/Indicator/fastk.ts +316 -316
  130. package/src/engine/renderers/Indicator/fib.ts +141 -141
  131. package/src/engine/renderers/Indicator/hma.ts +136 -136
  132. package/src/engine/renderers/Indicator/hv.ts +124 -124
  133. package/src/engine/renderers/Indicator/ichimoku.ts +181 -181
  134. package/src/engine/renderers/Indicator/index.ts +241 -241
  135. package/src/engine/renderers/Indicator/indicatorData.ts +650 -650
  136. package/src/engine/renderers/Indicator/kama.ts +136 -136
  137. package/src/engine/renderers/Indicator/keltner.ts +137 -137
  138. package/src/engine/renderers/Indicator/kst.ts +302 -302
  139. package/src/engine/renderers/Indicator/ma.ts +200 -200
  140. package/src/engine/renderers/Indicator/macd.ts +477 -477
  141. package/src/engine/renderers/Indicator/macdLegend.ts +141 -141
  142. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +272 -272
  143. package/src/engine/renderers/Indicator/mfi.ts +142 -142
  144. package/src/engine/renderers/Indicator/mom.ts +311 -311
  145. package/src/engine/renderers/Indicator/obv.ts +123 -123
  146. package/src/engine/renderers/Indicator/parkinson.ts +124 -124
  147. package/src/engine/renderers/Indicator/pivot.ts +131 -131
  148. package/src/engine/renderers/Indicator/pvt.ts +123 -123
  149. package/src/engine/renderers/Indicator/roc.ts +143 -143
  150. package/src/engine/renderers/Indicator/rsi.ts +390 -390
  151. package/src/engine/renderers/Indicator/sar.ts +113 -113
  152. package/src/engine/renderers/Indicator/scale/atr_scale.ts +19 -19
  153. package/src/engine/renderers/Indicator/scale/cci_scale.ts +19 -19
  154. package/src/engine/renderers/Indicator/scale/fastk_scale.ts +19 -19
  155. package/src/engine/renderers/Indicator/scale/indicator_scale.ts +204 -204
  156. package/src/engine/renderers/Indicator/scale/kst_scale.ts +19 -19
  157. package/src/engine/renderers/Indicator/scale/macd_scale.ts +22 -22
  158. package/src/engine/renderers/Indicator/scale/mom_scale.ts +19 -19
  159. package/src/engine/renderers/Indicator/scale/rsi_scale.ts +19 -19
  160. package/src/engine/renderers/Indicator/scale/stoch_scale.ts +19 -19
  161. package/src/engine/renderers/Indicator/scale/volume_scale.ts +26 -26
  162. package/src/engine/renderers/Indicator/scale/wmsr_scale.ts +19 -19
  163. package/src/engine/renderers/Indicator/stoch.ts +359 -359
  164. package/src/engine/renderers/Indicator/structure.ts +126 -126
  165. package/src/engine/renderers/Indicator/subPaneConfig.ts +265 -265
  166. package/src/engine/renderers/Indicator/supertrend.ts +115 -115
  167. package/src/engine/renderers/Indicator/tema.ts +136 -136
  168. package/src/engine/renderers/Indicator/trix.ts +158 -158
  169. package/src/engine/renderers/Indicator/vma.ts +124 -124
  170. package/src/engine/renderers/Indicator/volumeProfile.ts +125 -125
  171. package/src/engine/renderers/Indicator/vwap.ts +123 -123
  172. package/src/engine/renderers/Indicator/wma.ts +136 -136
  173. package/src/engine/renderers/Indicator/wmsr.ts +328 -328
  174. package/src/engine/renderers/Indicator/zones.ts +104 -104
  175. package/src/engine/renderers/__tests__/boll.renderer.test.ts +314 -314
  176. package/src/engine/renderers/__tests__/ene.renderer.test.ts +305 -305
  177. package/src/engine/renderers/__tests__/expma.renderer.test.ts +279 -279
  178. package/src/engine/renderers/__tests__/ma.renderer.test.ts +426 -426
  179. package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +502 -502
  180. package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +173 -173
  181. package/src/engine/renderers/candle.ts +459 -459
  182. package/src/engine/renderers/crosshair.ts +69 -69
  183. package/src/engine/renderers/customMarkers.ts +162 -162
  184. package/src/engine/renderers/extremaMarkers.ts +246 -246
  185. package/src/engine/renderers/gridLines.ts +90 -90
  186. package/src/engine/renderers/lastPrice.ts +97 -97
  187. package/src/engine/renderers/paneTitle.ts +136 -136
  188. package/src/engine/renderers/subVolume.ts +236 -236
  189. package/src/engine/renderers/timeAxis.ts +121 -121
  190. package/src/engine/renderers/webgl/candleSurface.ts +955 -955
  191. package/src/engine/renderers/webgl/sharedWebGLSurface.ts +146 -146
  192. package/src/engine/renderers/yAxis.ts +105 -105
  193. package/src/engine/scale/__tests__/logFormula.spec.ts +148 -148
  194. package/src/engine/scale/logFormula.ts +130 -130
  195. package/src/engine/scale/price.ts +39 -39
  196. package/src/engine/scale/priceScale.ts +264 -264
  197. package/src/engine/subPaneManager.ts +427 -427
  198. package/src/engine/theme/colors.ts +642 -642
  199. package/src/engine/theme/fonts.ts +20 -20
  200. package/src/engine/utils/klineConfig.ts +49 -49
  201. package/src/engine/utils/tickCount.ts +11 -11
  202. package/src/engine/utils/tickPosition.ts +214 -214
  203. package/src/engine/utils/zoom.ts +83 -83
  204. package/src/engine/viewport/viewport.ts +67 -67
  205. package/src/index.ts +3 -3
  206. package/src/plugin/ConfigManager.ts +93 -93
  207. package/src/plugin/EventBus.ts +77 -77
  208. package/src/plugin/HookSystem.ts +106 -106
  209. package/src/plugin/PluginHost.ts +243 -243
  210. package/src/plugin/PluginRegistry.ts +92 -92
  211. package/src/plugin/StateStore.ts +73 -73
  212. package/src/plugin/index.ts +19 -19
  213. package/src/plugin/rendererPluginManager.ts +368 -368
  214. package/src/plugin/stateKeys.ts +8 -8
  215. package/src/plugin/types.ts +526 -526
  216. package/src/reactivity/index.ts +2 -2
  217. package/src/reactivity/signal.ts +119 -119
  218. package/src/semantic/controller.ts +251 -251
  219. package/src/semantic/drawShape.ts +260 -260
  220. package/src/semantic/index.ts +28 -28
  221. package/src/semantic/schema.json +256 -256
  222. package/src/semantic/types.ts +251 -251
  223. package/src/semantic/validator.ts +349 -349
  224. package/src/types/kLine.ts +13 -13
  225. package/src/types/price.ts +56 -56
  226. package/src/types/volumePrice.ts +33 -33
  227. package/src/utils/dateFormat.ts +208 -208
  228. package/src/utils/kLineDraw/axis.ts +562 -562
  229. package/src/utils/priceToY.ts +34 -34
  230. package/src/utils/volumePrice.ts +202 -202
  231. package/src/version.ts +1 -1
package/README.zh-CN.md CHANGED
@@ -1,201 +1,201 @@
1
- # @363045841yyt/klinechart-core
2
-
3
- 无头、响应式 K 线(蜡烛图)图表引擎,零框架依赖�?
4
-
5
- ## 概览
6
-
7
- `@363045841yyt/klinechart-core` �?`@363045841yyt/klinechart` 生态的底层图表引擎。它处理数据管理、渲染协调、视口计算和插件编排 —�?完全不依赖任�?UI 框架�?
8
-
9
- ## 安装
10
-
11
- ```bash
12
- npm install @363045841yyt/klinechart-core
13
- # �?
14
- pnpm add @363045841yyt/klinechart-core
15
- # �?
16
- yarn add @363045841yyt/klinechart-core
17
- ```
18
-
19
- ## 快速开�?
20
-
21
- ```typescript
22
- import { createChartController } from '@363045841yyt/klinechart-core/controllers'
23
- import type { KLineData } from '@363045841yyt/klinechart-core'
24
-
25
- const controller = createChartController({
26
- container: document.getElementById('chart'),
27
- data: [],
28
- initialZoomLevel: 3,
29
- theme: 'light'
30
- })
31
-
32
- // 加载数据
33
- const data: KLineData[] = [
34
- { timestamp: 1704067200000, open: 100, high: 105, low: 98, close: 103, volume: 10000 },
35
- // ...
36
- ]
37
- controller.setData(data)
38
-
39
- // 清理
40
- controller.dispose()
41
- ```
42
-
43
- ## 导出�?
44
-
45
- ### 控制�?
46
- - `createChartController` �?图表实例工厂
47
- - `ChartController` �?主控制器接口
48
-
49
- ### 响应�?
50
- - `Signal<T>` �?响应式状态原�?
51
- - `effect`, `peek` �?响应式工�?
52
-
53
- ### 引擎
54
- - `Chart` �?底层图表实例(通过 `@363045841yyt/klinechart-core/engine/chart`�?
55
- - `ChartStore` �?数据管理
56
- - 渲染器(通过子路径导入)
57
-
58
- ### 插件系统
59
- - `PluginHost` �?插件注册和生命周�?
60
- - `EventBus` �?跨组件通信
61
- - `StateStore` �?全局状态管�?
62
-
63
- ### 类型
64
- - `KLineData` �?K 线数据点
65
- - `ChartViewport` �?视口状�?
66
- - `InteractionSnapshot` �?交互状�?
67
-
68
- ### 子路径导�?
69
-
70
- 本包支持细粒度的子路径导入,便于 tree-shaking�?
71
-
72
- ```typescript
73
- // 核心引擎
74
- import { Chart } from '@363045841yyt/klinechart-core/engine/chart'
75
- import { ChartStore } from '@363045841yyt/klinechart-core/engine/chart-store'
76
-
77
- // 工具
78
- import { zoom } from '@363045841yyt/klinechart-core/engine/utils/zoom'
79
-
80
- // 配置
81
- import { DEFAULT_SETTINGS } from '@363045841yyt/klinechart-core/config'
82
-
83
- // 插件
84
- import { EventBus } from '@363045841yyt/klinechart-core/plugin'
85
-
86
- // 版本
87
- import { VERSION } from '@363045841yyt/klinechart-core/version'
88
- ```
89
-
90
- ## 架构
91
-
92
- ```
93
- ┌─────────────────────────────────────�?
94
- �? 控制器层 �? �?高级 API
95
- ├─────────────────────────────────────�?
96
- �? 插件系统�? �? �?EventBus, StateStore
97
- ├─────────────────────────────────────�?
98
- �? 引擎�? �? �?Chart, ChartStore
99
- ├─────────────────────────────────────�?
100
- �? 渲染器层 �? �?Canvas/WebGL 渲染�?
101
- ├─────────────────────────────────────�?
102
- �? 响应式层 �? �?Signal 状态管�?
103
- └─────────────────────────────────────�?
104
- ```
105
-
106
- ## ChartController API
107
-
108
- ### 创建控制�?
109
-
110
- ```typescript
111
- import { createChartController } from '@363045841yyt/klinechart-core/controllers'
112
-
113
- const controller = createChartController({
114
- container: HTMLElement,
115
- data: KLineData[],
116
- initialZoomLevel?: number,
117
- zoomLevels?: number,
118
- theme?: 'light' | 'dark',
119
- yPaddingPx?: number,
120
- minKWidth?: number,
121
- maxKWidth?: number
122
- })
123
- ```
124
-
125
- ### 方法
126
-
127
- - `setData(data: KLineData[]): void` �?更新图表数据
128
- - `setTheme(theme: 'light' | 'dark'): void` �?切换主题
129
- - `zoomToLevel(level: number, anchorX?: number): void` �?缩放到指定级�?
130
- - `zoomIn(anchorX?: number): void` �?放大
131
- - `zoomOut(anchorX?: number): void` �?缩小
132
- - `addIndicator(definitionId: string, role: 'main' | 'sub', params?): string` �?添加指标
133
- - `removeIndicator(instanceId: string): boolean` �?移除指标
134
- - `dispose(): void` �?清理销�?
135
-
136
- ### 响应式状�?
137
-
138
- 通过 Signal 访问响应式状态:
139
-
140
- ```typescript
141
- // 当前视口
142
- controller.viewport.subscribe((vp) => {
143
- console.log('缩放级别:', vp.zoomLevel)
144
- })
145
-
146
- // 活跃指标
147
- controller.indicators.subscribe((inds) => {
148
- console.log('活跃指标:', inds)
149
- })
150
-
151
- // 交互状�?
152
- controller.interactionState.subscribe((state) => {
153
- console.log('悬停:', state.hover)
154
- })
155
- ```
156
-
157
- ## 语义化配�?
158
-
159
- 对于 AI/LLM 驱动的图表配置,使用语义控制器:
160
-
161
- ```typescript
162
- import { SemanticChartController } from '@363045841yyt/klinechart-core/semantic'
163
-
164
- const semantic = new SemanticChartController(chartInstance)
165
-
166
- // 应用自然语言配置
167
- semantic.applyConfig({
168
- "stockSymbol": "AAPL",
169
- "dateRange": { "start": "2024-01-01", "end": "2024-06-01" },
170
- "indicators": ["MA20", "MACD", "RSI"],
171
- "chart": {
172
- "chartType": "candlestick",
173
- "theme": "dark",
174
- "gridLines": { "horizontal": true, "vertical": false }
175
- },
176
- "display": {
177
- "paneRatios": { "main": 0.6, "sub1": 0.4 }
178
- }
179
- })
180
- ```
181
-
182
- ## 浏览器支�?
183
-
184
- - Chrome/Edge 90+
185
- - Firefox 88+
186
- - Safari 14+
187
-
188
- 需要支持:
189
- - ResizeObserver
190
- - Canvas 2D Context
191
- - ES2022(或转译�?
192
-
193
- ## 许可�?
194
-
195
- MIT © 363045841
196
-
197
- ## 相关�?
198
-
199
- - `@363045841yyt/klinechart` �?Vue 3 绑定
200
- - `@363045841yyt/klinechart-react` �?React 绑定(即将推出)
201
- - `@363045841yyt/klinechart-angular` �?Angular 绑定(即将推出)
1
+ # @363045841yyt/klinechart-core
2
+
3
+ 无头、响应式 K 线(蜡烛图)图表引擎,零框架依赖。
4
+
5
+ ## 概述
6
+
7
+ `@363045841yyt/klinechart-core` 是为 `@363045841yyt/klinechart` monorepo 提供驱动力的基础图表引擎。它负责数据管理、渲染协调、视口计算和插件编排——完全不依赖任何 UI 框架。
8
+
9
+ ## 安装
10
+
11
+ ```bash
12
+ npm install @363045841yyt/klinechart-core
13
+ #
14
+ pnpm add @363045841yyt/klinechart-core
15
+ #
16
+ yarn add @363045841yyt/klinechart-core
17
+ ```
18
+
19
+ ## 快速开始
20
+
21
+ ```typescript
22
+ import { createChartController } from '@363045841yyt/klinechart-core/controllers'
23
+ import type { KLineData } from '@363045841yyt/klinechart-core'
24
+
25
+ const controller = createChartController({
26
+ container: document.getElementById('chart'),
27
+ data: [],
28
+ initialZoomLevel: 3,
29
+ theme: 'light'
30
+ })
31
+
32
+ // 加载数据
33
+ const data: KLineData[] = [
34
+ { timestamp: 1704067200000, open: 100, high: 105, low: 98, close: 103, volume: 10000 },
35
+ // ...
36
+ ]
37
+ controller.setData(data)
38
+
39
+ // 使用完毕后清理
40
+ controller.dispose()
41
+ ```
42
+
43
+ ## 导出内容
44
+
45
+ ### 控制器
46
+ - `createChartController` —— 创建图表实例的工厂函数
47
+ - `ChartController` —— 主控制器接口
48
+
49
+ ### 响应式系统
50
+ - `Signal<T>` —— 用于状态管理的响应式原语
51
+ - `effect`、`peek` —— 响应式工具函数
52
+
53
+ ### 引擎
54
+ - `Chart` —— 底层图表实例(通过 `@363045841yyt/klinechart-core/engine/chart` 导入)
55
+ - `ChartStore` —— 数据管理
56
+ - 渲染器(通过子路径导入)
57
+
58
+ ### 插件系统
59
+ - `PluginHost` —— 插件注册与生命周期管理
60
+ - `EventBus` —— 跨组件通信
61
+ - `StateStore` —— 全局状态管理
62
+
63
+ ### 类型
64
+ - `KLineData` —— K 线数据点
65
+ - `ChartViewport` —— 视口状态
66
+ - `InteractionSnapshot` —— 交互状态
67
+
68
+ ### 子路径导出
69
+
70
+ 该包提供细粒度的子路径导入,支持 Tree-shaking
71
+
72
+ ```typescript
73
+ // 核心引擎
74
+ import { Chart } from '@363045841yyt/klinechart-core/engine/chart'
75
+ import { ChartStore } from '@363045841yyt/klinechart-core/engine/chart-store'
76
+
77
+ // 工具函数
78
+ import { zoom } from '@363045841yyt/klinechart-core/engine/utils/zoom'
79
+
80
+ // 配置
81
+ import { DEFAULT_SETTINGS } from '@363045841yyt/klinechart-core/config'
82
+
83
+ // 插件
84
+ import { EventBus } from '@363045841yyt/klinechart-core/plugin'
85
+
86
+ // 版本
87
+ import { VERSION } from '@363045841yyt/klinechart-core/version'
88
+ ```
89
+
90
+ ## 架构
91
+
92
+ ```
93
+ ┌─────────────────────────────────────┐
94
+ 控制器 (Controllers) │ ← 高层 API
95
+ ├─────────────────────────────────────┤
96
+ 插件系统 (Plugin System) │ ← EventBusStateStore
97
+ ├─────────────────────────────────────┤
98
+ │ 引擎 (Engine) │ ← ChartChartStore
99
+ ├─────────────────────────────────────┤
100
+ 渲染器 (Renderers) │ ← Canvas/WebGL 渲染器
101
+ ├─────────────────────────────────────┤
102
+ │ 响应式系统 (Reactivity) │ ← 基于 Signal 的状态管理
103
+ └─────────────────────────────────────┘
104
+ ```
105
+
106
+ ## ChartController API
107
+
108
+ ### 创建控制器
109
+
110
+ ```typescript
111
+ import { createChartController } from '@363045841yyt/klinechart-core/controllers'
112
+
113
+ const controller = createChartController({
114
+ container: HTMLElement,
115
+ data: KLineData[],
116
+ initialZoomLevel?: number,
117
+ zoomLevels?: number,
118
+ theme?: 'light' | 'dark',
119
+ yPaddingPx?: number,
120
+ minKWidth?: number,
121
+ maxKWidth?: number
122
+ })
123
+ ```
124
+
125
+ ### 方法
126
+
127
+ - `setData(data: KLineData[]): void` —— 更新图表数据
128
+ - `setTheme(theme: 'light' | 'dark'): void` —— 切换主题
129
+ - `zoomToLevel(level: number, anchorX?: number): void` —— 缩放到指定级别
130
+ - `zoomIn(anchorX?: number): void` —— 放大
131
+ - `zoomOut(anchorX?: number): void` —— 缩小
132
+ - `addIndicator(definitionId: string, role: 'main' | 'sub', params?): string` —— 添加指标
133
+ - `removeIndicator(instanceId: string): boolean` —— 移除指标
134
+ - `dispose(): void` —— 清理并销毁
135
+
136
+ ### 响应式状态
137
+
138
+ 通过 Signal 访问响应式状态:
139
+
140
+ ```typescript
141
+ // 当前视口
142
+ controller.viewport.subscribe((vp) => {
143
+ console.log('缩放级别:', vp.zoomLevel)
144
+ })
145
+
146
+ // 活跃指标
147
+ controller.indicators.subscribe((inds) => {
148
+ console.log('活跃指标:', inds)
149
+ })
150
+
151
+ // 交互状态
152
+ controller.interactionState.subscribe((state) => {
153
+ console.log('悬停:', state.hover)
154
+ })
155
+ ```
156
+
157
+ ## 语义化配置
158
+
159
+ 对于 AI/LLM 驱动的图表配置,可使用语义化控制器:
160
+
161
+ ```typescript
162
+ import { SemanticChartController } from '@363045841yyt/klinechart-core/semantic'
163
+
164
+ const semantic = new SemanticChartController(chartInstance)
165
+
166
+ // 应用自然语言配置
167
+ semantic.applyConfig({
168
+ "stockSymbol": "AAPL",
169
+ "dateRange": { "start": "2024-01-01", "end": "2024-06-01" },
170
+ "indicators": ["MA20", "MACD", "RSI"],
171
+ "chart": {
172
+ "chartType": "candlestick",
173
+ "theme": "dark",
174
+ "gridLines": { "horizontal": true, "vertical": false }
175
+ },
176
+ "display": {
177
+ "paneRatios": { "main": 0.6, "sub1": 0.4 }
178
+ }
179
+ })
180
+ ```
181
+
182
+ ## 浏览器支持
183
+
184
+ - Chrome/Edge 90+
185
+ - Firefox 88+
186
+ - Safari 14+
187
+
188
+ 需要支持以下特性:
189
+ - ResizeObserver
190
+ - Canvas 2D Context
191
+ - ES2022(或转译)
192
+
193
+ ## 许可证
194
+
195
+ MIT © 363045841
196
+
197
+ ## 相关包
198
+
199
+ - `@363045841yyt/klinechart` —— Vue 3 绑定
200
+ - `@363045841yyt/klinechart-react` —— React 绑定(即将推出)
201
+ - `@363045841yyt/klinechart-angular` —— Angular 绑定(即将推出)
@@ -1,52 +1,52 @@
1
- const RECT_VERTEX_SHADER_SOURCE = `#version 300 es
2
- precision mediump float;
3
-
4
- in vec2 a_unit;
5
- in vec4 a_rect;
6
-
7
- uniform vec2 u_resolution;
8
- uniform float u_scrollX;
9
-
10
- void main() {
11
- vec2 position = vec2(
12
- a_rect.x - u_scrollX + a_unit.x * a_rect.z,
13
- a_rect.y + a_unit.y * a_rect.w
14
- );
15
-
16
- vec2 zeroToOne = position / u_resolution;
17
- vec2 clip = vec2(
18
- zeroToOne.x * 2.0 - 1.0,
19
- 1.0 - zeroToOne.y * 2.0
20
- );
21
-
22
- gl_Position = vec4(clip, 0.0, 1.0);
1
+ const RECT_VERTEX_SHADER_SOURCE = `#version 300 es
2
+ precision mediump float;
3
+
4
+ in vec2 a_unit;
5
+ in vec4 a_rect;
6
+
7
+ uniform vec2 u_resolution;
8
+ uniform float u_scrollX;
9
+
10
+ void main() {
11
+ vec2 position = vec2(
12
+ a_rect.x - u_scrollX + a_unit.x * a_rect.z,
13
+ a_rect.y + a_unit.y * a_rect.w
14
+ );
15
+
16
+ vec2 zeroToOne = position / u_resolution;
17
+ vec2 clip = vec2(
18
+ zeroToOne.x * 2.0 - 1.0,
19
+ 1.0 - zeroToOne.y * 2.0
20
+ );
21
+
22
+ gl_Position = vec4(clip, 0.0, 1.0);
23
23
  }`;
24
- const LINE_VERTEX_SHADER_SOURCE = `#version 300 es
25
- precision mediump float;
26
-
27
- in vec2 a_position;
28
-
29
- uniform vec2 u_resolution;
30
- uniform float u_scrollX;
31
-
32
- void main() {
33
- vec2 position = vec2(a_position.x - u_scrollX, a_position.y);
34
- vec2 zeroToOne = position / u_resolution;
35
- vec2 clip = vec2(
36
- zeroToOne.x * 2.0 - 1.0,
37
- 1.0 - zeroToOne.y * 2.0
38
- );
39
-
40
- gl_Position = vec4(clip, 0.0, 1.0);
24
+ const LINE_VERTEX_SHADER_SOURCE = `#version 300 es
25
+ precision mediump float;
26
+
27
+ in vec2 a_position;
28
+
29
+ uniform vec2 u_resolution;
30
+ uniform float u_scrollX;
31
+
32
+ void main() {
33
+ vec2 position = vec2(a_position.x - u_scrollX, a_position.y);
34
+ vec2 zeroToOne = position / u_resolution;
35
+ vec2 clip = vec2(
36
+ zeroToOne.x * 2.0 - 1.0,
37
+ 1.0 - zeroToOne.y * 2.0
38
+ );
39
+
40
+ gl_Position = vec4(clip, 0.0, 1.0);
41
41
  }`;
42
- const FRAGMENT_SHADER_SOURCE = `#version 300 es
43
- precision mediump float;
44
-
45
- uniform vec4 u_color;
46
- out vec4 outColor;
47
-
48
- void main() {
49
- outColor = u_color;
42
+ const FRAGMENT_SHADER_SOURCE = `#version 300 es
43
+ precision mediump float;
44
+
45
+ uniform vec4 u_color;
46
+ out vec4 outColor;
47
+
48
+ void main() {
49
+ outColor = u_color;
50
50
  }`;
51
51
  const UNIT_QUAD = new Float32Array([
52
52
  0, 0,
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION: string;
1
+ export declare const VERSION = "0.7.5-alpha.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,QAAc,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,kBAAkB,CAAA"}
package/dist/version.js CHANGED
@@ -1,3 +1,2 @@
1
- import pkg from '../package.json';
2
- export const VERSION = pkg.version;
1
+ export const VERSION = "0.7.5-alpha.0";
3
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,iBAAiB,CAAA;AACjC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAA"}