@363045841yyt/klinechart-core 0.7.9 → 0.7.11

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 (234) hide show
  1. package/dist/engine/chart.d.ts.map +1 -1
  2. package/dist/engine/chart.js +39 -229
  3. package/dist/engine/chart.js.map +1 -1
  4. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts +10 -3
  5. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts.map +1 -1
  6. package/dist/engine/indicators/indicatorDefinitionRegistry.js +29 -2
  7. package/dist/engine/indicators/indicatorDefinitionRegistry.js.map +1 -1
  8. package/dist/engine/indicators/indicatorMetadata.d.ts +79 -2
  9. package/dist/engine/indicators/indicatorMetadata.d.ts.map +1 -1
  10. package/dist/engine/indicators/indicatorMetadata.js.map +1 -1
  11. package/dist/engine/indicators/indicatorRegistry.d.ts +5 -0
  12. package/dist/engine/indicators/indicatorRegistry.d.ts.map +1 -1
  13. package/dist/engine/indicators/indicatorRegistry.js +49 -5
  14. package/dist/engine/indicators/indicatorRegistry.js.map +1 -1
  15. package/dist/engine/indicators/registerBuiltins.d.ts +42 -0
  16. package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -0
  17. package/dist/engine/indicators/registerBuiltins.js +46 -0
  18. package/dist/engine/indicators/registerBuiltins.js.map +1 -0
  19. package/dist/engine/indicators/scheduler.d.ts +2 -2
  20. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  21. package/dist/engine/indicators/scheduler.js +41 -11
  22. package/dist/engine/indicators/scheduler.js.map +1 -1
  23. package/dist/engine/indicators/stateComposer.d.ts +6 -4
  24. package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
  25. package/dist/engine/indicators/stateComposer.js +80 -984
  26. package/dist/engine/indicators/stateComposer.js.map +1 -1
  27. package/dist/engine/indicators/visibleStateComposers.d.ts +145 -0
  28. package/dist/engine/indicators/visibleStateComposers.d.ts.map +1 -0
  29. package/dist/engine/indicators/visibleStateComposers.js +469 -0
  30. package/dist/engine/indicators/visibleStateComposers.js.map +1 -0
  31. package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
  32. package/dist/engine/renderers/Indicator/atr.js +8 -0
  33. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  34. package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
  35. package/dist/engine/renderers/Indicator/boll.js +47 -0
  36. package/dist/engine/renderers/Indicator/boll.js.map +1 -1
  37. package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
  38. package/dist/engine/renderers/Indicator/cci.js +8 -1
  39. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  40. package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
  41. package/dist/engine/renderers/Indicator/chaikinVol.js +7 -1
  42. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  43. package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
  44. package/dist/engine/renderers/Indicator/cmf.js +7 -1
  45. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  46. package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
  47. package/dist/engine/renderers/Indicator/dema.js +8 -1
  48. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  49. package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
  50. package/dist/engine/renderers/Indicator/donchian.js +8 -1
  51. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  52. package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
  53. package/dist/engine/renderers/Indicator/ene.js +45 -0
  54. package/dist/engine/renderers/Indicator/ene.js.map +1 -1
  55. package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
  56. package/dist/engine/renderers/Indicator/expma.js +45 -0
  57. package/dist/engine/renderers/Indicator/expma.js.map +1 -1
  58. package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
  59. package/dist/engine/renderers/Indicator/fastk.js +8 -1
  60. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  61. package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
  62. package/dist/engine/renderers/Indicator/fib.js +8 -1
  63. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  64. package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
  65. package/dist/engine/renderers/Indicator/hma.js +8 -1
  66. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  67. package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
  68. package/dist/engine/renderers/Indicator/hv.js +7 -0
  69. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  70. package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
  71. package/dist/engine/renderers/Indicator/ichimoku.js +8 -1
  72. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  73. package/dist/engine/renderers/Indicator/index.d.ts +7 -2
  74. package/dist/engine/renderers/Indicator/index.d.ts.map +1 -1
  75. package/dist/engine/renderers/Indicator/index.js +2 -114
  76. package/dist/engine/renderers/Indicator/index.js.map +1 -1
  77. package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
  78. package/dist/engine/renderers/Indicator/kama.js +8 -1
  79. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  80. package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
  81. package/dist/engine/renderers/Indicator/keltner.js +8 -1
  82. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  83. package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
  84. package/dist/engine/renderers/Indicator/kst.js +8 -0
  85. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  86. package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
  87. package/dist/engine/renderers/Indicator/ma.js +63 -0
  88. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  89. package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
  90. package/dist/engine/renderers/Indicator/macd.js +8 -1
  91. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  92. package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
  93. package/dist/engine/renderers/Indicator/mfi.js +7 -1
  94. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  95. package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
  96. package/dist/engine/renderers/Indicator/mom.js +8 -0
  97. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  98. package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
  99. package/dist/engine/renderers/Indicator/obv.js +7 -1
  100. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  101. package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
  102. package/dist/engine/renderers/Indicator/parkinson.js +7 -0
  103. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  104. package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
  105. package/dist/engine/renderers/Indicator/pivot.js +8 -1
  106. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  107. package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
  108. package/dist/engine/renderers/Indicator/pvt.js +7 -1
  109. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  110. package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
  111. package/dist/engine/renderers/Indicator/roc.js +7 -1
  112. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  113. package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
  114. package/dist/engine/renderers/Indicator/rsi.js +8 -1
  115. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  116. package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
  117. package/dist/engine/renderers/Indicator/sar.js +8 -1
  118. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  119. package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
  120. package/dist/engine/renderers/Indicator/stoch.js +8 -1
  121. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  122. package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
  123. package/dist/engine/renderers/Indicator/structure.js +8 -1
  124. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  125. package/dist/engine/renderers/Indicator/subPaneConfig.d.ts +1 -1
  126. package/dist/engine/renderers/Indicator/subPaneConfig.d.ts.map +1 -1
  127. package/dist/engine/renderers/Indicator/subPaneConfig.js.map +1 -1
  128. package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
  129. package/dist/engine/renderers/Indicator/supertrend.js +8 -1
  130. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  131. package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
  132. package/dist/engine/renderers/Indicator/tema.js +8 -1
  133. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  134. package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
  135. package/dist/engine/renderers/Indicator/trix.js +7 -0
  136. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  137. package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
  138. package/dist/engine/renderers/Indicator/vma.js +7 -0
  139. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  140. package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
  141. package/dist/engine/renderers/Indicator/volumeProfile.js +7 -1
  142. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  143. package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
  144. package/dist/engine/renderers/Indicator/vwap.js +7 -1
  145. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  146. package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
  147. package/dist/engine/renderers/Indicator/wma.js +8 -1
  148. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  149. package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
  150. package/dist/engine/renderers/Indicator/wmsr.js +8 -1
  151. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  152. package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
  153. package/dist/engine/renderers/Indicator/zones.js +8 -1
  154. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  155. package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
  156. package/dist/engine/renderers/extremaMarkers.js +0 -22
  157. package/dist/engine/renderers/extremaMarkers.js.map +1 -1
  158. package/dist/engine/renderers/subVolume.d.ts.map +1 -1
  159. package/dist/engine/renderers/subVolume.js +3 -0
  160. package/dist/engine/renderers/subVolume.js.map +1 -1
  161. package/dist/engine/subPaneManager.d.ts +1 -0
  162. package/dist/engine/subPaneManager.d.ts.map +1 -1
  163. package/dist/engine/subPaneManager.js +30 -237
  164. package/dist/engine/subPaneManager.js.map +1 -1
  165. package/dist/semantic/controller.d.ts +9 -4
  166. package/dist/semantic/controller.d.ts.map +1 -1
  167. package/dist/semantic/controller.js +57 -53
  168. package/dist/semantic/controller.js.map +1 -1
  169. package/dist/version.d.ts +1 -1
  170. package/dist/version.d.ts.map +1 -1
  171. package/dist/version.js +1 -1
  172. package/dist/version.js.map +1 -1
  173. package/package.json +1 -1
  174. package/src/engine/chart.ts +49 -229
  175. package/src/engine/indicators/__tests__/indicatorDefinitionRegistry.test.ts +59 -0
  176. package/src/engine/indicators/__tests__/indicatorRegistry.test.ts +62 -0
  177. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +380 -0
  178. package/src/engine/indicators/__tests__/scheduler.test.ts +62 -32
  179. package/src/engine/indicators/__tests__/stateComposer.test.ts +444 -0
  180. package/src/engine/indicators/indicatorDefinitionRegistry.ts +49 -4
  181. package/src/engine/indicators/indicatorMetadata.ts +107 -2
  182. package/src/engine/indicators/indicatorRegistry.ts +54 -5
  183. package/src/engine/indicators/registerBuiltins.ts +47 -0
  184. package/src/engine/indicators/scheduler.ts +61 -13
  185. package/src/engine/indicators/stateComposer.ts +110 -1040
  186. package/src/engine/indicators/visibleStateComposers.ts +734 -0
  187. package/src/engine/renderers/Indicator/__tests__/createSubIndicatorRenderer.test.ts +61 -0
  188. package/src/engine/renderers/Indicator/atr.ts +9 -1
  189. package/src/engine/renderers/Indicator/boll.ts +53 -1
  190. package/src/engine/renderers/Indicator/cci.ts +9 -2
  191. package/src/engine/renderers/Indicator/chaikinVol.ts +8 -2
  192. package/src/engine/renderers/Indicator/cmf.ts +8 -2
  193. package/src/engine/renderers/Indicator/dema.ts +9 -2
  194. package/src/engine/renderers/Indicator/donchian.ts +9 -2
  195. package/src/engine/renderers/Indicator/ene.ts +51 -1
  196. package/src/engine/renderers/Indicator/expma.ts +51 -1
  197. package/src/engine/renderers/Indicator/fastk.ts +9 -2
  198. package/src/engine/renderers/Indicator/fib.ts +9 -2
  199. package/src/engine/renderers/Indicator/hma.ts +9 -2
  200. package/src/engine/renderers/Indicator/hv.ts +8 -1
  201. package/src/engine/renderers/Indicator/ichimoku.ts +9 -2
  202. package/src/engine/renderers/Indicator/index.ts +9 -121
  203. package/src/engine/renderers/Indicator/kama.ts +9 -2
  204. package/src/engine/renderers/Indicator/keltner.ts +9 -2
  205. package/src/engine/renderers/Indicator/kst.ts +9 -1
  206. package/src/engine/renderers/Indicator/ma.ts +69 -0
  207. package/src/engine/renderers/Indicator/macd.ts +9 -2
  208. package/src/engine/renderers/Indicator/mfi.ts +8 -2
  209. package/src/engine/renderers/Indicator/mom.ts +9 -1
  210. package/src/engine/renderers/Indicator/obv.ts +8 -2
  211. package/src/engine/renderers/Indicator/parkinson.ts +8 -1
  212. package/src/engine/renderers/Indicator/pivot.ts +9 -2
  213. package/src/engine/renderers/Indicator/pvt.ts +8 -2
  214. package/src/engine/renderers/Indicator/roc.ts +8 -2
  215. package/src/engine/renderers/Indicator/rsi.ts +9 -2
  216. package/src/engine/renderers/Indicator/sar.ts +9 -2
  217. package/src/engine/renderers/Indicator/stoch.ts +9 -2
  218. package/src/engine/renderers/Indicator/structure.ts +9 -2
  219. package/src/engine/renderers/Indicator/subPaneConfig.ts +1 -1
  220. package/src/engine/renderers/Indicator/supertrend.ts +9 -2
  221. package/src/engine/renderers/Indicator/tema.ts +9 -2
  222. package/src/engine/renderers/Indicator/trix.ts +8 -1
  223. package/src/engine/renderers/Indicator/vma.ts +8 -1
  224. package/src/engine/renderers/Indicator/volumeProfile.ts +8 -2
  225. package/src/engine/renderers/Indicator/vwap.ts +8 -2
  226. package/src/engine/renderers/Indicator/wma.ts +9 -2
  227. package/src/engine/renderers/Indicator/wmsr.ts +9 -2
  228. package/src/engine/renderers/Indicator/zones.ts +9 -2
  229. package/src/engine/renderers/extremaMarkers.ts +0 -24
  230. package/src/engine/renderers/subVolume.ts +3 -0
  231. package/src/engine/subPaneManager.ts +34 -274
  232. package/src/semantic/__tests__/controller.test.ts +84 -0
  233. package/src/semantic/controller.ts +69 -65
  234. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/semantic/controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/semantic/controller.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.7.9";
1
+ export declare const VERSION = "0.7.11";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAA"}
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = "0.7.9";
1
+ export const VERSION = "0.7.11";
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@363045841yyt/klinechart-core",
3
- "version": "0.7.9",
3
+ "version": "0.7.11",
4
4
  "description": "Headless K-line chart engine + reactive controllers. Zero framework dependencies.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -11,7 +11,7 @@ import { MarkerManager, type CustomMarkerEntity } from './marker/registry'
11
11
  import { getPhysicalKLineConfig, calcKWidthPx } from './utils/klineConfig'
12
12
  import { computeZoom, computeZoomToLevel, type ZoomConfig } from './utils/zoom'
13
13
  import { IndicatorScheduler } from './indicators/scheduler'
14
- import { getRegisteredIndicatorDefinitions } from './indicators/indicatorDefinitionRegistry'
14
+ import { getBuiltinIndicatorDefinitions } from './indicators/registerBuiltins'
15
15
  import { SubPaneManager, type SubPaneEntry } from './subPaneManager'
16
16
 
17
17
  import {
@@ -30,24 +30,6 @@ import {
30
30
  type XAxisRange,
31
31
  } from '../plugin'
32
32
  import { createSubIndicatorRenderer, type SubIndicatorType } from './renderers/Indicator'
33
- import { createMARendererPlugin } from './renderers/Indicator/ma'
34
- import { createBOLLRendererPlugin } from './renderers/Indicator/boll'
35
- import { createEXPMARendererPlugin } from './renderers/Indicator/expma'
36
- import { createENERendererPlugin } from './renderers/Indicator/ene'
37
- import { createWMARendererPlugin } from './renderers/Indicator/wma'
38
- import { createDEMARendererPlugin } from './renderers/Indicator/dema'
39
- import { createTEMARendererPlugin } from './renderers/Indicator/tema'
40
- import { createHMARendererPlugin } from './renderers/Indicator/hma'
41
- import { createKAMARendererPlugin } from './renderers/Indicator/kama'
42
- import { createSARRendererPlugin } from './renderers/Indicator/sar'
43
- import { createSuperTrendRendererPlugin } from './renderers/Indicator/supertrend'
44
- import { createKeltnerRendererPlugin } from './renderers/Indicator/keltner'
45
- import { createDonchianRendererPlugin } from './renderers/Indicator/donchian'
46
- import { createIchimokuRendererPlugin } from './renderers/Indicator/ichimoku'
47
- import { createPivotRendererPlugin } from './renderers/Indicator/pivot'
48
- import { createFibRendererPlugin } from './renderers/Indicator/fib'
49
- import { createStructureRendererPlugin } from './renderers/Indicator/structure'
50
- import { createZonesRendererPlugin } from './renderers/Indicator/zones'
51
33
  import { createMainIndicatorLegendRendererPlugin } from './renderers/Indicator/mainIndicatorLegend'
52
34
  import { DrawingStore } from './drawing'
53
35
  import { createDrawingRendererPlugin, createDrawingLabelOverlayPlugin } from './drawing/plugin'
@@ -59,7 +41,7 @@ import { createExtremaMarkersRendererPlugin } from './renderers/extremaMarkers'
59
41
  import { createYAxisRendererPlugin } from './renderers/yAxis'
60
42
  import { createCrosshairRendererPlugin } from './renderers/crosshair'
61
43
  import { createTimeAxisRendererPlugin } from './renderers/timeAxis'
62
- import type { BOLLSchedulerConfig, EXPMASchedulerConfig, ENESchedulerConfig, WMASchedulerConfig, DEMASchedulerConfig, TEMASchedulerConfig, HMASchedulerConfig, KAMASchedulerConfig, SARSchedulerConfig, SuperTrendSchedulerConfig, KeltnerSchedulerConfig, DonchianSchedulerConfig, IchimokuSchedulerConfig, PivotSchedulerConfig, FibSchedulerConfig, StructureSchedulerConfig, ZonesSchedulerConfig } from './indicators/scheduler'
44
+
63
45
 
64
46
  // 重新导出以保持向后兼容
65
47
  export { getPhysicalKLineConfig, calcKWidthPx }
@@ -309,9 +291,13 @@ export class Chart {
309
291
  // 启用对应的渲染器
310
292
  this.enableMainIndicatorRenderer(id)
311
293
 
312
- // 更新调度器配置
294
+ // 更新调度器配置(触发异步重算)
313
295
  this.updateIndicatorSchedulerConfig(id)
314
296
 
297
+ // 同步重算主图状态:latestResult 已有该指标的 series,只是没注册到 registry
298
+ // 补调 updateVisibleRange 使其走 updateVisibleStatesOnly,立即从 latestResult 合成极值
299
+ this.indicatorScheduler.updateVisibleRange(this.lastVisibleRange)
300
+
315
301
  this.scheduleDraw()
316
302
  return true
317
303
  }
@@ -421,121 +407,16 @@ export class Chart {
421
407
  * 启用主图指标渲染器(内部方法)
422
408
  */
423
409
  private enableMainIndicatorRenderer(indicatorId: string): void {
424
- const rendererMap: Record<string, () => void> = {
425
- 'MA': () => {
426
- if (!this.getRenderer('ma')) {
427
- this.useRenderer(createMARendererPlugin())
428
- }
429
- this.setRendererEnabled('ma', true)
430
- },
431
- 'BOLL': () => {
432
- if (!this.getRenderer('boll')) {
433
- this.useRenderer(createBOLLRendererPlugin())
434
- }
435
- this.setRendererEnabled('boll', true)
436
- },
437
- 'EXPMA': () => {
438
- if (!this.getRenderer('expma')) {
439
- this.useRenderer(createEXPMARendererPlugin())
440
- }
441
- this.setRendererEnabled('expma', true)
442
- },
443
- 'ENE': () => {
444
- if (!this.getRenderer('ene')) {
445
- this.useRenderer(createENERendererPlugin())
446
- }
447
- this.setRendererEnabled('ene', true)
448
- },
449
- 'WMA': () => {
450
- if (!this.getRenderer('wma_main')) {
451
- this.useRenderer(createWMARendererPlugin({ paneId: 'main' }))
452
- }
453
- this.setRendererEnabled('wma_main', true)
454
- },
455
- 'DEMA': () => {
456
- if (!this.getRenderer('dema_main')) {
457
- this.useRenderer(createDEMARendererPlugin({ paneId: 'main' }))
458
- }
459
- this.setRendererEnabled('dema_main', true)
460
- },
461
- 'TEMA': () => {
462
- if (!this.getRenderer('tema_main')) {
463
- this.useRenderer(createTEMARendererPlugin({ paneId: 'main' }))
464
- }
465
- this.setRendererEnabled('tema_main', true)
466
- },
467
- 'HMA': () => {
468
- if (!this.getRenderer('hma_main')) {
469
- this.useRenderer(createHMARendererPlugin({ paneId: 'main' }))
470
- }
471
- this.setRendererEnabled('hma_main', true)
472
- },
473
- 'KAMA': () => {
474
- if (!this.getRenderer('kama_main')) {
475
- this.useRenderer(createKAMARendererPlugin({ paneId: 'main' }))
476
- }
477
- this.setRendererEnabled('kama_main', true)
478
- },
479
- 'SAR': () => {
480
- if (!this.getRenderer('sar_main')) {
481
- this.useRenderer(createSARRendererPlugin({ paneId: 'main' }))
482
- }
483
- this.setRendererEnabled('sar_main', true)
484
- },
485
- 'SUPERTREND': () => {
486
- if (!this.getRenderer('supertrend_main')) {
487
- this.useRenderer(createSuperTrendRendererPlugin({ paneId: 'main' }))
488
- }
489
- this.setRendererEnabled('supertrend_main', true)
490
- },
491
- 'KELTNER': () => {
492
- if (!this.getRenderer('keltner_main')) {
493
- this.useRenderer(createKeltnerRendererPlugin({ paneId: 'main' }))
494
- }
495
- this.setRendererEnabled('keltner_main', true)
496
- },
497
- 'DONCHIAN': () => {
498
- if (!this.getRenderer('donchian_main')) {
499
- this.useRenderer(createDonchianRendererPlugin({ paneId: 'main' }))
500
- }
501
- this.setRendererEnabled('donchian_main', true)
502
- },
503
- 'ICHIMOKU': () => {
504
- if (!this.getRenderer('ichimoku_main')) {
505
- this.useRenderer(createIchimokuRendererPlugin({ paneId: 'main' }))
506
- }
507
- this.setRendererEnabled('ichimoku_main', true)
508
- },
509
- 'PIVOT': () => {
510
- if (!this.getRenderer('pivot_main')) {
511
- this.useRenderer(createPivotRendererPlugin({ paneId: 'main' }))
512
- }
513
- this.setRendererEnabled('pivot_main', true)
514
- },
515
- 'FIB': () => {
516
- if (!this.getRenderer('fib_main')) {
517
- this.useRenderer(createFibRendererPlugin({ paneId: 'main' }))
518
- }
519
- this.setRendererEnabled('fib_main', true)
520
- },
521
- 'STRUCTURE': () => {
522
- if (!this.getRenderer('structure_main')) {
523
- this.useRenderer(createStructureRendererPlugin({ paneId: 'main' }))
524
- }
525
- this.setRendererEnabled('structure_main', true)
526
- },
527
- 'ZONES': () => {
528
- if (!this.getRenderer('zones_main')) {
529
- this.useRenderer(createZonesRendererPlugin({ paneId: 'main' }))
530
- }
531
- this.setRendererEnabled('zones_main', true)
532
- },
410
+ const definition = this.indicatorScheduler.getIndicatorMetadata(indicatorId)
411
+ const mainPane = definition?.mainPane
412
+ if (!definition || !mainPane) return
413
+
414
+ if (!this.getRenderer(mainPane.rendererName)) {
415
+ this.useRenderer(definition.rendererFactory({ paneId: 'main', indicatorId }))
533
416
  }
534
417
 
535
- const fn = rendererMap[indicatorId]
536
- if (fn) fn()
418
+ this.setRendererEnabled(mainPane.rendererName, true)
537
419
 
538
- // 确保图例渲染器已注册
539
420
  if (!this.getRenderer('mainIndicatorLegend')) {
540
421
  this.useRenderer(createMainIndicatorLegendRendererPlugin({ yPaddingPx: this.opt.yPaddingPx }))
541
422
  }
@@ -545,28 +426,7 @@ export class Chart {
545
426
  * 禁用主图指标渲染器(内部方法)
546
427
  */
547
428
  private disableMainIndicatorRenderer(indicatorId: string): void {
548
- const rendererMap: Record<string, string> = {
549
- 'MA': 'ma',
550
- 'BOLL': 'boll',
551
- 'EXPMA': 'expma',
552
- 'ENE': 'ene',
553
- 'WMA': 'wma_main',
554
- 'DEMA': 'dema_main',
555
- 'TEMA': 'tema_main',
556
- 'HMA': 'hma_main',
557
- 'KAMA': 'kama_main',
558
- 'SAR': 'sar_main',
559
- 'SUPERTREND': 'supertrend_main',
560
- 'KELTNER': 'keltner_main',
561
- 'DONCHIAN': 'donchian_main',
562
- 'ICHIMOKU': 'ichimoku_main',
563
- 'PIVOT': 'pivot_main',
564
- 'FIB': 'fib_main',
565
- 'STRUCTURE': 'structure_main',
566
- 'ZONES': 'zones_main',
567
- }
568
-
569
- const rendererName = rendererMap[indicatorId]
429
+ const rendererName = this.indicatorScheduler.getIndicatorMetadata(indicatorId)?.mainPane?.rendererName
570
430
  if (rendererName) {
571
431
  this.setRendererEnabled(rendererName, false)
572
432
  }
@@ -580,75 +440,13 @@ export class Chart {
580
440
  const isActive = entry !== undefined
581
441
  const params = entry?.params ?? {}
582
442
 
583
- switch (indicatorId) {
584
- case 'MA':
585
- this.indicatorScheduler.updateMAConfig({
586
- ma5: isActive,
587
- ma10: isActive,
588
- ma20: isActive,
589
- ma30: isActive,
590
- ma60: isActive,
591
- })
592
- break
593
- case 'BOLL':
594
- if (isActive) {
595
- this.indicatorScheduler.updateBOLLConfig(params as unknown as BOLLSchedulerConfig)
596
- } else {
597
- this.indicatorScheduler.updateBOLLConfig({ ...params, showUpper: false, showMiddle: false, showLower: false, showBand: false } as unknown as BOLLSchedulerConfig)
598
- }
599
- break
600
- case 'EXPMA':
601
- if (isActive) {
602
- this.indicatorScheduler.updateEXPMAConfig(params as unknown as EXPMASchedulerConfig)
603
- }
604
- break
605
- case 'ENE':
606
- if (isActive) {
607
- this.indicatorScheduler.updateENEConfig(params as unknown as ENESchedulerConfig)
608
- }
609
- break
610
- case 'WMA':
611
- this.indicatorScheduler.updateWMAConfig({ ...params, showWMA: isActive } as unknown as WMASchedulerConfig, 'main')
612
- break
613
- case 'DEMA':
614
- this.indicatorScheduler.updateDEMAConfig({ ...params, showDEMA: isActive } as unknown as DEMASchedulerConfig, 'main')
615
- break
616
- case 'TEMA':
617
- this.indicatorScheduler.updateTEMAConfig({ ...params, showTEMA: isActive } as unknown as TEMASchedulerConfig, 'main')
618
- break
619
- case 'HMA':
620
- this.indicatorScheduler.updateHMAConfig({ ...params, showHMA: isActive } as unknown as HMASchedulerConfig, 'main')
621
- break
622
- case 'KAMA':
623
- this.indicatorScheduler.updateKAMAConfig({ ...params, showKAMA: isActive } as unknown as KAMASchedulerConfig, 'main')
624
- break
625
- case 'SAR':
626
- this.indicatorScheduler.updateSARConfig({ ...params, showSAR: isActive } as unknown as SARSchedulerConfig, 'main')
627
- break
628
- case 'SUPERTREND':
629
- this.indicatorScheduler.updateSuperTrendConfig({ ...params, showSuperTrend: isActive } as unknown as SuperTrendSchedulerConfig, 'main')
630
- break
631
- case 'KELTNER':
632
- this.indicatorScheduler.updateKeltnerConfig({ ...params, showUpper: isActive, showMiddle: isActive, showLower: isActive } as unknown as KeltnerSchedulerConfig, 'main')
633
- break
634
- case 'DONCHIAN':
635
- this.indicatorScheduler.updateDonchianConfig({ ...params, showUpper: isActive, showMiddle: isActive, showLower: isActive } as unknown as DonchianSchedulerConfig, 'main')
636
- break
637
- case 'ICHIMOKU':
638
- this.indicatorScheduler.updateIchimokuConfig({ ...params, showTenkan: isActive, showKijun: isActive, showSpanA: isActive, showSpanB: isActive, showChikou: isActive, showCloud: isActive } as unknown as IchimokuSchedulerConfig, 'main')
639
- break
640
- case 'PIVOT':
641
- this.indicatorScheduler.updatePivotConfig({ ...params, showPP: isActive, showR1: isActive, showR2: isActive, showR3: isActive, showS1: isActive, showS2: isActive, showS3: isActive } as unknown as PivotSchedulerConfig, 'main')
642
- break
643
- case 'FIB':
644
- this.indicatorScheduler.updateFibConfig({ ...params, showLevels: isActive } as unknown as FibSchedulerConfig, 'main')
645
- break
646
- case 'STRUCTURE':
647
- this.indicatorScheduler.updateStructureConfig({ ...params, showSwingLabels: isActive, showBOS: isActive, showCHOCH: isActive } as unknown as StructureSchedulerConfig, 'main')
648
- break
649
- case 'ZONES':
650
- this.indicatorScheduler.updateZonesConfig({ ...params, showFVG: isActive, showOB: isActive, showFilledZones: isActive } as unknown as ZonesSchedulerConfig, 'main')
651
- break
443
+ const definition = this.indicatorScheduler.getIndicatorMetadata(indicatorId)
444
+ const toActiveConfig = definition?.mainPane?.toActiveConfig
445
+ if (!definition?.updateConfig || !toActiveConfig) return
446
+
447
+ const config = toActiveConfig(params, isActive)
448
+ if (config !== null) {
449
+ definition.updateConfig(this.indicatorScheduler, config, 'main')
652
450
  }
653
451
  }
654
452
 
@@ -709,7 +507,7 @@ export class Chart {
709
507
  // 初始化指标调度器
710
508
  this.indicatorScheduler = new IndicatorScheduler()
711
509
  this.indicatorScheduler.setPluginHost(this.pluginHost)
712
- for (const definition of getRegisteredIndicatorDefinitions()) {
510
+ for (const definition of getBuiltinIndicatorDefinitions()) {
713
511
  this.indicatorScheduler.registerIndicator(definition)
714
512
  }
715
513
  this.indicatorScheduler.setInvalidateCallback(() => this.scheduleDraw())
@@ -1366,14 +1164,18 @@ export class Chart {
1366
1164
  this.upsertPane({ id: paneId, ratio: 1, visible: true, role: 'indicator' })
1367
1165
  }
1368
1166
 
1369
- const rendererName = `${indicatorId.toLowerCase()}_${paneId}`
1167
+ const definition = this.indicatorScheduler.getIndicatorMetadata(indicatorId)
1168
+ if (!definition) {
1169
+ throw new Error(`[Chart] Unknown indicator: ${indicatorId}`)
1170
+ }
1171
+ const renderer = createSubIndicatorRenderer({ indicatorId, paneId, definition, params })
1172
+ const rendererName = renderer.name
1370
1173
  const existing = this.getRenderer(rendererName)
1371
1174
  if (existing) {
1372
1175
  if (params) this.updateRendererConfig(rendererName, params)
1373
1176
  return
1374
1177
  }
1375
1178
 
1376
- const renderer = createSubIndicatorRenderer({ indicatorId, paneId })
1377
1179
  this.useRenderer(renderer, params)
1378
1180
  }
1379
1181
 
@@ -1667,7 +1469,7 @@ export class Chart {
1667
1469
 
1668
1470
  private getDefaultSubPaneParams(indicatorId: SubIndicatorType): Record<string, unknown> {
1669
1471
  // 默认参数定义在 SubPaneManager 中,这里导入使用
1670
- const defaults: Record<SubIndicatorType, Record<string, unknown>> = {
1472
+ const defaults: Record<string, Record<string, unknown>> = {
1671
1473
  VOLUME: {},
1672
1474
  MACD: { fastPeriod: 12, slowPeriod: 26, signalPeriod: 9 },
1673
1475
  RSI: { period1: 6, period2: 12, period3: 24 },
@@ -1705,7 +1507,7 @@ export class Chart {
1705
1507
  ZONES: { showFVG: true, showOB: true, showFilledZones: true, obLookback: 5 },
1706
1508
  VOLUME_PROFILE: { bins: 24, lookback: 0, valueAreaPercent: 0.7, showVolumeProfile: true },
1707
1509
  }
1708
- return { ...defaults[indicatorId] }
1510
+ return { ...(defaults[indicatorId] ?? {}) }
1709
1511
  }
1710
1512
 
1711
1513
  /** 副图渲染器名称前缀(保留向后兼容) */
@@ -1777,6 +1579,24 @@ export class Chart {
1777
1579
  // 重置交互状态
1778
1580
  this.interaction.reset()
1779
1581
 
1582
+ // 如果 visibleRange 还是 {0,0},先从 viewport 算一个初步范围
1583
+ // 避免 scheduler 第一次计算时用 {0,0} 产出 Infinity 极值
1584
+ if (this.lastVisibleRange.start === 0 && this.lastVisibleRange.end === 0 && this._internalData.length > 0) {
1585
+ const plotWidth = this.observedSize.width > 0
1586
+ ? this.observedSize.width
1587
+ : Math.max(1, Math.round(this.dom.container?.clientWidth ?? 800))
1588
+ const dpr = this.getEffectiveDpr()
1589
+ const { start, end } = getVisibleRange(
1590
+ this.cachedScrollLeft,
1591
+ plotWidth,
1592
+ this.opt.kWidth,
1593
+ this.opt.kGap,
1594
+ this._internalData.length,
1595
+ dpr,
1596
+ )
1597
+ this.lastVisibleRange = { start, end }
1598
+ }
1599
+
1780
1600
  // 触发指标计算(在 scheduleDraw 之前,确保渲染器读到最新状态)
1781
1601
  this.indicatorScheduler.update(this._internalData, this.lastVisibleRange)
1782
1602
 
@@ -0,0 +1,59 @@
1
+ import { describe, expect, it, vi, beforeEach } from 'vitest'
2
+ import {
3
+ clearRegisteredIndicatorDefinitionsForTest,
4
+ getRegisteredIndicatorDefinition,
5
+ getRegisteredIndicatorDefinitions,
6
+ Indicator,
7
+ } from '../indicatorDefinitionRegistry'
8
+
9
+ describe('Indicator definition registry', () => {
10
+ beforeEach(() => {
11
+ clearRegisteredIndicatorDefinitionsForTest()
12
+ })
13
+
14
+ it('collects decorated definitions and resolves aliases case-insensitively', () => {
15
+ @Indicator({
16
+ name: 'customRsi',
17
+ aliases: ['CUSTOM_RSI'],
18
+ displayName: 'Custom RSI',
19
+ category: 'oscillator',
20
+ stateKey: (paneId: string) => `indicator:customRsi:${paneId}`,
21
+ defaultPaneId: 'sub_CUSTOM_RSI',
22
+ })
23
+ class CustomRsiDefinition {
24
+ static rendererFactory = vi.fn() as any
25
+ }
26
+
27
+ void CustomRsiDefinition
28
+
29
+ const definition = getRegisteredIndicatorDefinition('CUSTOM_RSI')
30
+
31
+ expect(definition?.name).toBe('customRsi')
32
+ expect(getRegisteredIndicatorDefinition('custom rsi')).toBe(definition)
33
+ expect(getRegisteredIndicatorDefinition('customrsi')).toBe(definition)
34
+ expect(getRegisteredIndicatorDefinitions()).toHaveLength(1)
35
+ })
36
+
37
+ it('clears registered definitions and aliases for tests', () => {
38
+ @Indicator({
39
+ name: 'customMacd',
40
+ aliases: ['CUSTOM_MACD'],
41
+ displayName: 'Custom MACD',
42
+ category: 'oscillator',
43
+ stateKey: (paneId: string) => `indicator:customMacd:${paneId}`,
44
+ defaultPaneId: 'sub_CUSTOM_MACD',
45
+ })
46
+ class CustomMacdDefinition {
47
+ static rendererFactory = vi.fn() as any
48
+ }
49
+
50
+ void CustomMacdDefinition
51
+
52
+ expect(getRegisteredIndicatorDefinition('CUSTOM_MACD')).toBeDefined()
53
+
54
+ clearRegisteredIndicatorDefinitionsForTest()
55
+
56
+ expect(getRegisteredIndicatorDefinition('CUSTOM_MACD')).toBeUndefined()
57
+ expect(getRegisteredIndicatorDefinitions()).toEqual([])
58
+ })
59
+ })
@@ -0,0 +1,62 @@
1
+ import { describe, expect, it, vi } from 'vitest'
2
+ import { IndicatorRegistry } from '../indicatorRegistry'
3
+ import type { IndicatorMetadata } from '../indicatorMetadata'
4
+
5
+ function createMeta(overrides: Partial<IndicatorMetadata> = {}): IndicatorMetadata {
6
+ return {
7
+ name: 'rsi',
8
+ aliases: ['relativeStrength'],
9
+ displayName: 'RSI',
10
+ category: 'oscillator',
11
+ stateKey: (paneId: string) => `indicator:rsi:${paneId}`,
12
+ defaultPaneId: 'sub_RSI',
13
+ rendererFactory: vi.fn() as any,
14
+ ...overrides,
15
+ }
16
+ }
17
+
18
+ describe('IndicatorRegistry', () => {
19
+ it('resolves indicators by name, displayName, aliases, and case-insensitive ids', () => {
20
+ const registry = new IndicatorRegistry()
21
+ const meta = createMeta()
22
+
23
+ registry.register(meta)
24
+
25
+ expect(registry.get('rsi')).toBe(meta)
26
+ expect(registry.get('RSI')).toBe(meta)
27
+ expect(registry.get('relativeStrength')).toBe(meta)
28
+ expect(registry.get('relativestrength')).toBe(meta)
29
+ expect(registry.has(' RSI ')).toBe(true)
30
+ })
31
+
32
+ it('throws for missing required metadata fields', () => {
33
+ const registry = new IndicatorRegistry()
34
+
35
+ expect(() => registry.register(createMeta({ name: '' }))).toThrow('Indicator name is required')
36
+ expect(() => registry.register(createMeta({ displayName: '' }))).toThrow("displayName is required")
37
+ expect(() => registry.register(createMeta({ rendererFactory: undefined as any }))).toThrow('rendererFactory is required')
38
+ })
39
+
40
+ it('replaces old aliases when unregistering', () => {
41
+ const registry = new IndicatorRegistry()
42
+ const meta = createMeta()
43
+
44
+ registry.register(meta)
45
+
46
+ expect(registry.unregister('RSI')).toBe(true)
47
+ expect(registry.get('rsi')).toBeUndefined()
48
+ expect(registry.get('RSI')).toBeUndefined()
49
+ expect(registry.get('relativeStrength')).toBeUndefined()
50
+ expect(registry.unregister('RSI')).toBe(false)
51
+ })
52
+
53
+ it('returns required metadata or throws a descriptive error', () => {
54
+ const registry = new IndicatorRegistry()
55
+ const meta = createMeta()
56
+
57
+ registry.register(meta)
58
+
59
+ expect(registry.getRequired('RSI')).toBe(meta)
60
+ expect(() => registry.getRequired('missing')).toThrow("Unknown indicator 'missing'")
61
+ })
62
+ })