@363045841yyt/klinechart-core 0.7.8 → 0.7.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 (251) 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/engine/chart.d.ts.map +1 -1
  5. package/dist/engine/chart.js +41 -229
  6. package/dist/engine/chart.js.map +1 -1
  7. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts +10 -3
  8. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts.map +1 -1
  9. package/dist/engine/indicators/indicatorDefinitionRegistry.js +29 -2
  10. package/dist/engine/indicators/indicatorDefinitionRegistry.js.map +1 -1
  11. package/dist/engine/indicators/indicatorMetadata.d.ts +79 -2
  12. package/dist/engine/indicators/indicatorMetadata.d.ts.map +1 -1
  13. package/dist/engine/indicators/indicatorMetadata.js.map +1 -1
  14. package/dist/engine/indicators/indicatorRegistry.d.ts +5 -0
  15. package/dist/engine/indicators/indicatorRegistry.d.ts.map +1 -1
  16. package/dist/engine/indicators/indicatorRegistry.js +49 -5
  17. package/dist/engine/indicators/indicatorRegistry.js.map +1 -1
  18. package/dist/engine/indicators/registerBuiltins.d.ts +42 -0
  19. package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -0
  20. package/dist/engine/indicators/registerBuiltins.js +46 -0
  21. package/dist/engine/indicators/registerBuiltins.js.map +1 -0
  22. package/dist/engine/indicators/scheduler.d.ts +2 -2
  23. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  24. package/dist/engine/indicators/scheduler.js +41 -11
  25. package/dist/engine/indicators/scheduler.js.map +1 -1
  26. package/dist/engine/indicators/stateComposer.d.ts +6 -4
  27. package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
  28. package/dist/engine/indicators/stateComposer.js +80 -984
  29. package/dist/engine/indicators/stateComposer.js.map +1 -1
  30. package/dist/engine/indicators/visibleStateComposers.d.ts +145 -0
  31. package/dist/engine/indicators/visibleStateComposers.d.ts.map +1 -0
  32. package/dist/engine/indicators/visibleStateComposers.js +469 -0
  33. package/dist/engine/indicators/visibleStateComposers.js.map +1 -0
  34. package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
  35. package/dist/engine/renderers/Indicator/atr.js +8 -0
  36. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  37. package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
  38. package/dist/engine/renderers/Indicator/boll.js +47 -0
  39. package/dist/engine/renderers/Indicator/boll.js.map +1 -1
  40. package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
  41. package/dist/engine/renderers/Indicator/cci.js +8 -1
  42. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  43. package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
  44. package/dist/engine/renderers/Indicator/chaikinVol.js +7 -1
  45. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  46. package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
  47. package/dist/engine/renderers/Indicator/cmf.js +7 -1
  48. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  49. package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
  50. package/dist/engine/renderers/Indicator/dema.js +8 -1
  51. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  52. package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
  53. package/dist/engine/renderers/Indicator/donchian.js +8 -1
  54. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  55. package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
  56. package/dist/engine/renderers/Indicator/ene.js +45 -0
  57. package/dist/engine/renderers/Indicator/ene.js.map +1 -1
  58. package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
  59. package/dist/engine/renderers/Indicator/expma.js +45 -0
  60. package/dist/engine/renderers/Indicator/expma.js.map +1 -1
  61. package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
  62. package/dist/engine/renderers/Indicator/fastk.js +8 -1
  63. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  64. package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
  65. package/dist/engine/renderers/Indicator/fib.js +8 -1
  66. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  67. package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
  68. package/dist/engine/renderers/Indicator/hma.js +8 -1
  69. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  70. package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
  71. package/dist/engine/renderers/Indicator/hv.js +7 -0
  72. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  73. package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
  74. package/dist/engine/renderers/Indicator/ichimoku.js +8 -1
  75. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  76. package/dist/engine/renderers/Indicator/index.d.ts +7 -2
  77. package/dist/engine/renderers/Indicator/index.d.ts.map +1 -1
  78. package/dist/engine/renderers/Indicator/index.js +2 -114
  79. package/dist/engine/renderers/Indicator/index.js.map +1 -1
  80. package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
  81. package/dist/engine/renderers/Indicator/kama.js +8 -1
  82. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  83. package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
  84. package/dist/engine/renderers/Indicator/keltner.js +8 -1
  85. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  86. package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
  87. package/dist/engine/renderers/Indicator/kst.js +8 -0
  88. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  89. package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
  90. package/dist/engine/renderers/Indicator/ma.js +63 -0
  91. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  92. package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
  93. package/dist/engine/renderers/Indicator/macd.js +8 -1
  94. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  95. package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
  96. package/dist/engine/renderers/Indicator/mfi.js +7 -1
  97. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  98. package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
  99. package/dist/engine/renderers/Indicator/mom.js +8 -0
  100. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  101. package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
  102. package/dist/engine/renderers/Indicator/obv.js +7 -1
  103. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  104. package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
  105. package/dist/engine/renderers/Indicator/parkinson.js +7 -0
  106. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  107. package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
  108. package/dist/engine/renderers/Indicator/pivot.js +8 -1
  109. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  110. package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
  111. package/dist/engine/renderers/Indicator/pvt.js +7 -1
  112. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  113. package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
  114. package/dist/engine/renderers/Indicator/roc.js +7 -1
  115. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  116. package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
  117. package/dist/engine/renderers/Indicator/rsi.js +8 -1
  118. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  119. package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
  120. package/dist/engine/renderers/Indicator/sar.js +8 -1
  121. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  122. package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
  123. package/dist/engine/renderers/Indicator/stoch.js +8 -1
  124. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  125. package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
  126. package/dist/engine/renderers/Indicator/structure.js +8 -1
  127. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  128. package/dist/engine/renderers/Indicator/subPaneConfig.d.ts +1 -1
  129. package/dist/engine/renderers/Indicator/subPaneConfig.d.ts.map +1 -1
  130. package/dist/engine/renderers/Indicator/subPaneConfig.js.map +1 -1
  131. package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
  132. package/dist/engine/renderers/Indicator/supertrend.js +8 -1
  133. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  134. package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
  135. package/dist/engine/renderers/Indicator/tema.js +8 -1
  136. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  137. package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
  138. package/dist/engine/renderers/Indicator/trix.js +7 -0
  139. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  140. package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
  141. package/dist/engine/renderers/Indicator/vma.js +7 -0
  142. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  143. package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
  144. package/dist/engine/renderers/Indicator/volumeProfile.js +7 -1
  145. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  146. package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
  147. package/dist/engine/renderers/Indicator/vwap.js +7 -1
  148. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  149. package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
  150. package/dist/engine/renderers/Indicator/wma.js +8 -1
  151. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  152. package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
  153. package/dist/engine/renderers/Indicator/wmsr.js +8 -1
  154. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  155. package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
  156. package/dist/engine/renderers/Indicator/zones.js +8 -1
  157. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  158. package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
  159. package/dist/engine/renderers/extremaMarkers.js +0 -22
  160. package/dist/engine/renderers/extremaMarkers.js.map +1 -1
  161. package/dist/engine/renderers/subVolume.d.ts.map +1 -1
  162. package/dist/engine/renderers/subVolume.js +3 -0
  163. package/dist/engine/renderers/subVolume.js.map +1 -1
  164. package/dist/engine/subPaneManager.d.ts +1 -0
  165. package/dist/engine/subPaneManager.d.ts.map +1 -1
  166. package/dist/engine/subPaneManager.js +30 -237
  167. package/dist/engine/subPaneManager.js.map +1 -1
  168. package/dist/semantic/controller.d.ts +9 -4
  169. package/dist/semantic/controller.d.ts.map +1 -1
  170. package/dist/semantic/controller.js +57 -53
  171. package/dist/semantic/controller.js.map +1 -1
  172. package/dist/tokens/theme-dark.js +1 -1
  173. package/dist/version.d.ts +1 -1
  174. package/dist/version.d.ts.map +1 -1
  175. package/dist/version.js +1 -1
  176. package/dist/version.js.map +1 -1
  177. package/package.json +1 -1
  178. package/src/controllers/index.ts +7 -0
  179. package/src/engine/__tests__/chart.dpr.test.ts +2 -1
  180. package/src/engine/__tests__/paneRenderer.resize.test.ts +1 -0
  181. package/src/engine/chart.ts +51 -229
  182. package/src/engine/controller/__tests__/interaction.dpr.test.ts +1 -0
  183. package/src/engine/indicators/__tests__/indicatorDefinitionRegistry.test.ts +59 -0
  184. package/src/engine/indicators/__tests__/indicatorRegistry.test.ts +62 -0
  185. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +380 -0
  186. package/src/engine/indicators/__tests__/scheduler.test.ts +92 -8
  187. package/src/engine/indicators/__tests__/stateComposer.test.ts +444 -0
  188. package/src/engine/indicators/indicatorDefinitionRegistry.ts +49 -4
  189. package/src/engine/indicators/indicatorMetadata.ts +107 -2
  190. package/src/engine/indicators/indicatorRegistry.ts +54 -5
  191. package/src/engine/indicators/registerBuiltins.ts +47 -0
  192. package/src/engine/indicators/scheduler.ts +61 -13
  193. package/src/engine/indicators/stateComposer.ts +110 -1040
  194. package/src/engine/indicators/visibleStateComposers.ts +734 -0
  195. package/src/engine/renderers/Indicator/__tests__/createSubIndicatorRenderer.test.ts +61 -0
  196. package/src/engine/renderers/Indicator/atr.ts +9 -1
  197. package/src/engine/renderers/Indicator/boll.ts +53 -1
  198. package/src/engine/renderers/Indicator/cci.ts +9 -2
  199. package/src/engine/renderers/Indicator/chaikinVol.ts +8 -2
  200. package/src/engine/renderers/Indicator/cmf.ts +8 -2
  201. package/src/engine/renderers/Indicator/dema.ts +9 -2
  202. package/src/engine/renderers/Indicator/donchian.ts +9 -2
  203. package/src/engine/renderers/Indicator/ene.ts +51 -1
  204. package/src/engine/renderers/Indicator/expma.ts +51 -1
  205. package/src/engine/renderers/Indicator/fastk.ts +9 -2
  206. package/src/engine/renderers/Indicator/fib.ts +9 -2
  207. package/src/engine/renderers/Indicator/hma.ts +9 -2
  208. package/src/engine/renderers/Indicator/hv.ts +8 -1
  209. package/src/engine/renderers/Indicator/ichimoku.ts +9 -2
  210. package/src/engine/renderers/Indicator/index.ts +9 -121
  211. package/src/engine/renderers/Indicator/kama.ts +9 -2
  212. package/src/engine/renderers/Indicator/keltner.ts +9 -2
  213. package/src/engine/renderers/Indicator/kst.ts +9 -1
  214. package/src/engine/renderers/Indicator/ma.ts +69 -0
  215. package/src/engine/renderers/Indicator/macd.ts +9 -2
  216. package/src/engine/renderers/Indicator/mfi.ts +8 -2
  217. package/src/engine/renderers/Indicator/mom.ts +9 -1
  218. package/src/engine/renderers/Indicator/obv.ts +8 -2
  219. package/src/engine/renderers/Indicator/parkinson.ts +8 -1
  220. package/src/engine/renderers/Indicator/pivot.ts +9 -2
  221. package/src/engine/renderers/Indicator/pvt.ts +8 -2
  222. package/src/engine/renderers/Indicator/roc.ts +8 -2
  223. package/src/engine/renderers/Indicator/rsi.ts +9 -2
  224. package/src/engine/renderers/Indicator/sar.ts +9 -2
  225. package/src/engine/renderers/Indicator/stoch.ts +9 -2
  226. package/src/engine/renderers/Indicator/structure.ts +9 -2
  227. package/src/engine/renderers/Indicator/subPaneConfig.ts +1 -1
  228. package/src/engine/renderers/Indicator/supertrend.ts +9 -2
  229. package/src/engine/renderers/Indicator/tema.ts +9 -2
  230. package/src/engine/renderers/Indicator/trix.ts +8 -1
  231. package/src/engine/renderers/Indicator/vma.ts +8 -1
  232. package/src/engine/renderers/Indicator/volumeProfile.ts +8 -2
  233. package/src/engine/renderers/Indicator/vwap.ts +8 -2
  234. package/src/engine/renderers/Indicator/wma.ts +9 -2
  235. package/src/engine/renderers/Indicator/wmsr.ts +9 -2
  236. package/src/engine/renderers/Indicator/zones.ts +9 -2
  237. package/src/engine/renderers/__tests__/boll.renderer.test.ts +9 -1
  238. package/src/engine/renderers/__tests__/ene.renderer.test.ts +2 -1
  239. package/src/engine/renderers/__tests__/expma.renderer.test.ts +0 -1
  240. package/src/engine/renderers/__tests__/ma.renderer.test.ts +0 -1
  241. package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +0 -1
  242. package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +3 -0
  243. package/src/engine/renderers/extremaMarkers.ts +0 -24
  244. package/src/engine/renderers/subVolume.ts +3 -0
  245. package/src/engine/subPaneManager.ts +34 -274
  246. package/src/semantic/__tests__/controller.test.ts +84 -0
  247. package/src/semantic/controller.ts +69 -65
  248. package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +4 -2
  249. package/src/tokens/__tests__/tokens.test.ts +1 -0
  250. package/src/tokens/theme-dark.ts +1 -1
  251. 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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"}
@@ -36,7 +36,7 @@ export const darkTheme = {
36
36
  axisTick: '#2A2F36',
37
37
  gridMajor: '#1B1F26',
38
38
  gridMinor: '#161A20',
39
- crosshairLine: '#5F6368',
39
+ crosshairLine: '#686C72',
40
40
  crosshairLabelBg: '#E8EAED',
41
41
  crosshairLabelText: '#0E1116',
42
42
  selectionFill: '#4A9EFF33',
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.7.8";
1
+ export declare const VERSION = "0.7.10";
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.8";
1
+ export const VERSION = "0.7.10";
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.8",
3
+ "version": "0.7.10",
4
4
  "description": "Headless K-line chart engine + reactive controllers. Zero framework dependencies.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -6,11 +6,18 @@ export type {
6
6
  IndicatorParamDef,
7
7
  IndicatorDefinition,
8
8
  IndicatorInstance,
9
+ ActiveIndicator,
9
10
  SubPaneInfo,
10
11
  DrawingToolType,
11
12
  DrawingObject,
12
13
  InteractionSnapshot,
13
14
  DrawingControllerCallbacks,
15
+ IndicatorSelectorController,
16
+ ToolbarController,
17
+ ToolDefinition,
18
+ ToolId,
19
+ DrawingState,
20
+ DrawingController,
14
21
  ChartMountOptions,
15
22
  ChartViewport,
16
23
  ChartController,
@@ -1,3 +1,4 @@
1
+ // @vitest-environment jsdom
1
2
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
2
3
  import { Chart, type ChartDom, type ChartOptions } from '@/core/chart'
3
4
 
@@ -241,7 +242,7 @@ describe('Chart DPR pipeline', () => {
241
242
  const chart = new Chart(createDom(1000, 600), defaultOptions)
242
243
  const onViewportChange = vi.fn()
243
244
 
244
- chart.setOnViewportChange(onViewportChange)
245
+ chart.viewport.subscribe(onViewportChange)
245
246
  chart.draw()
246
247
  chart.draw()
247
248
 
@@ -1,3 +1,4 @@
1
+ // @vitest-environment jsdom
1
2
  import { describe, expect, it } from 'vitest'
2
3
  import { Pane } from '@/core/layout/pane'
3
4
  import { PaneRenderer } from '@/core/paneRenderer'
@@ -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'
@@ -55,10 +37,11 @@ import { createGridLinesRendererPlugin } from './renderers/gridLines'
55
37
  import { createCandleRenderer } from './renderers/candle'
56
38
  import { createLastPriceLineRendererPlugin, createLastPriceLabelRegistrarPlugin } from './renderers/lastPrice'
57
39
  import { createCustomMarkersRenderer } from './renderers/customMarkers'
40
+ import { createExtremaMarkersRendererPlugin } from './renderers/extremaMarkers'
58
41
  import { createYAxisRendererPlugin } from './renderers/yAxis'
59
42
  import { createCrosshairRendererPlugin } from './renderers/crosshair'
60
43
  import { createTimeAxisRendererPlugin } from './renderers/timeAxis'
61
- import type { BOLLSchedulerConfig, EXPMASchedulerConfig, ENESchedulerConfig, WMASchedulerConfig, DEMASchedulerConfig, TEMASchedulerConfig, HMASchedulerConfig, KAMASchedulerConfig, SARSchedulerConfig, SuperTrendSchedulerConfig, KeltnerSchedulerConfig, DonchianSchedulerConfig, IchimokuSchedulerConfig, PivotSchedulerConfig, FibSchedulerConfig, StructureSchedulerConfig, ZonesSchedulerConfig } from './indicators/scheduler'
44
+
62
45
 
63
46
  // 重新导出以保持向后兼容
64
47
  export { getPhysicalKLineConfig, calcKWidthPx }
@@ -308,9 +291,13 @@ export class Chart {
308
291
  // 启用对应的渲染器
309
292
  this.enableMainIndicatorRenderer(id)
310
293
 
311
- // 更新调度器配置
294
+ // 更新调度器配置(触发异步重算)
312
295
  this.updateIndicatorSchedulerConfig(id)
313
296
 
297
+ // 同步重算主图状态:latestResult 已有该指标的 series,只是没注册到 registry
298
+ // 补调 updateVisibleRange 使其走 updateVisibleStatesOnly,立即从 latestResult 合成极值
299
+ this.indicatorScheduler.updateVisibleRange(this.lastVisibleRange)
300
+
314
301
  this.scheduleDraw()
315
302
  return true
316
303
  }
@@ -420,121 +407,16 @@ export class Chart {
420
407
  * 启用主图指标渲染器(内部方法)
421
408
  */
422
409
  private enableMainIndicatorRenderer(indicatorId: string): void {
423
- const rendererMap: Record<string, () => void> = {
424
- 'MA': () => {
425
- if (!this.getRenderer('ma')) {
426
- this.useRenderer(createMARendererPlugin())
427
- }
428
- this.setRendererEnabled('ma', true)
429
- },
430
- 'BOLL': () => {
431
- if (!this.getRenderer('boll')) {
432
- this.useRenderer(createBOLLRendererPlugin())
433
- }
434
- this.setRendererEnabled('boll', true)
435
- },
436
- 'EXPMA': () => {
437
- if (!this.getRenderer('expma')) {
438
- this.useRenderer(createEXPMARendererPlugin())
439
- }
440
- this.setRendererEnabled('expma', true)
441
- },
442
- 'ENE': () => {
443
- if (!this.getRenderer('ene')) {
444
- this.useRenderer(createENERendererPlugin())
445
- }
446
- this.setRendererEnabled('ene', true)
447
- },
448
- 'WMA': () => {
449
- if (!this.getRenderer('wma_main')) {
450
- this.useRenderer(createWMARendererPlugin({ paneId: 'main' }))
451
- }
452
- this.setRendererEnabled('wma_main', true)
453
- },
454
- 'DEMA': () => {
455
- if (!this.getRenderer('dema_main')) {
456
- this.useRenderer(createDEMARendererPlugin({ paneId: 'main' }))
457
- }
458
- this.setRendererEnabled('dema_main', true)
459
- },
460
- 'TEMA': () => {
461
- if (!this.getRenderer('tema_main')) {
462
- this.useRenderer(createTEMARendererPlugin({ paneId: 'main' }))
463
- }
464
- this.setRendererEnabled('tema_main', true)
465
- },
466
- 'HMA': () => {
467
- if (!this.getRenderer('hma_main')) {
468
- this.useRenderer(createHMARendererPlugin({ paneId: 'main' }))
469
- }
470
- this.setRendererEnabled('hma_main', true)
471
- },
472
- 'KAMA': () => {
473
- if (!this.getRenderer('kama_main')) {
474
- this.useRenderer(createKAMARendererPlugin({ paneId: 'main' }))
475
- }
476
- this.setRendererEnabled('kama_main', true)
477
- },
478
- 'SAR': () => {
479
- if (!this.getRenderer('sar_main')) {
480
- this.useRenderer(createSARRendererPlugin({ paneId: 'main' }))
481
- }
482
- this.setRendererEnabled('sar_main', true)
483
- },
484
- 'SUPERTREND': () => {
485
- if (!this.getRenderer('supertrend_main')) {
486
- this.useRenderer(createSuperTrendRendererPlugin({ paneId: 'main' }))
487
- }
488
- this.setRendererEnabled('supertrend_main', true)
489
- },
490
- 'KELTNER': () => {
491
- if (!this.getRenderer('keltner_main')) {
492
- this.useRenderer(createKeltnerRendererPlugin({ paneId: 'main' }))
493
- }
494
- this.setRendererEnabled('keltner_main', true)
495
- },
496
- 'DONCHIAN': () => {
497
- if (!this.getRenderer('donchian_main')) {
498
- this.useRenderer(createDonchianRendererPlugin({ paneId: 'main' }))
499
- }
500
- this.setRendererEnabled('donchian_main', true)
501
- },
502
- 'ICHIMOKU': () => {
503
- if (!this.getRenderer('ichimoku_main')) {
504
- this.useRenderer(createIchimokuRendererPlugin({ paneId: 'main' }))
505
- }
506
- this.setRendererEnabled('ichimoku_main', true)
507
- },
508
- 'PIVOT': () => {
509
- if (!this.getRenderer('pivot_main')) {
510
- this.useRenderer(createPivotRendererPlugin({ paneId: 'main' }))
511
- }
512
- this.setRendererEnabled('pivot_main', true)
513
- },
514
- 'FIB': () => {
515
- if (!this.getRenderer('fib_main')) {
516
- this.useRenderer(createFibRendererPlugin({ paneId: 'main' }))
517
- }
518
- this.setRendererEnabled('fib_main', true)
519
- },
520
- 'STRUCTURE': () => {
521
- if (!this.getRenderer('structure_main')) {
522
- this.useRenderer(createStructureRendererPlugin({ paneId: 'main' }))
523
- }
524
- this.setRendererEnabled('structure_main', true)
525
- },
526
- 'ZONES': () => {
527
- if (!this.getRenderer('zones_main')) {
528
- this.useRenderer(createZonesRendererPlugin({ paneId: 'main' }))
529
- }
530
- this.setRendererEnabled('zones_main', true)
531
- },
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 }))
532
416
  }
533
417
 
534
- const fn = rendererMap[indicatorId]
535
- if (fn) fn()
418
+ this.setRendererEnabled(mainPane.rendererName, true)
536
419
 
537
- // 确保图例渲染器已注册
538
420
  if (!this.getRenderer('mainIndicatorLegend')) {
539
421
  this.useRenderer(createMainIndicatorLegendRendererPlugin({ yPaddingPx: this.opt.yPaddingPx }))
540
422
  }
@@ -544,28 +426,7 @@ export class Chart {
544
426
  * 禁用主图指标渲染器(内部方法)
545
427
  */
546
428
  private disableMainIndicatorRenderer(indicatorId: string): void {
547
- const rendererMap: Record<string, string> = {
548
- 'MA': 'ma',
549
- 'BOLL': 'boll',
550
- 'EXPMA': 'expma',
551
- 'ENE': 'ene',
552
- 'WMA': 'wma_main',
553
- 'DEMA': 'dema_main',
554
- 'TEMA': 'tema_main',
555
- 'HMA': 'hma_main',
556
- 'KAMA': 'kama_main',
557
- 'SAR': 'sar_main',
558
- 'SUPERTREND': 'supertrend_main',
559
- 'KELTNER': 'keltner_main',
560
- 'DONCHIAN': 'donchian_main',
561
- 'ICHIMOKU': 'ichimoku_main',
562
- 'PIVOT': 'pivot_main',
563
- 'FIB': 'fib_main',
564
- 'STRUCTURE': 'structure_main',
565
- 'ZONES': 'zones_main',
566
- }
567
-
568
- const rendererName = rendererMap[indicatorId]
429
+ const rendererName = this.indicatorScheduler.getIndicatorMetadata(indicatorId)?.mainPane?.rendererName
569
430
  if (rendererName) {
570
431
  this.setRendererEnabled(rendererName, false)
571
432
  }
@@ -579,75 +440,13 @@ export class Chart {
579
440
  const isActive = entry !== undefined
580
441
  const params = entry?.params ?? {}
581
442
 
582
- switch (indicatorId) {
583
- case 'MA':
584
- this.indicatorScheduler.updateMAConfig({
585
- ma5: isActive,
586
- ma10: isActive,
587
- ma20: isActive,
588
- ma30: isActive,
589
- ma60: isActive,
590
- })
591
- break
592
- case 'BOLL':
593
- if (isActive) {
594
- this.indicatorScheduler.updateBOLLConfig(params as unknown as BOLLSchedulerConfig)
595
- } else {
596
- this.indicatorScheduler.updateBOLLConfig({ ...params, showUpper: false, showMiddle: false, showLower: false, showBand: false } as unknown as BOLLSchedulerConfig)
597
- }
598
- break
599
- case 'EXPMA':
600
- if (isActive) {
601
- this.indicatorScheduler.updateEXPMAConfig(params as unknown as EXPMASchedulerConfig)
602
- }
603
- break
604
- case 'ENE':
605
- if (isActive) {
606
- this.indicatorScheduler.updateENEConfig(params as unknown as ENESchedulerConfig)
607
- }
608
- break
609
- case 'WMA':
610
- this.indicatorScheduler.updateWMAConfig({ ...params, showWMA: isActive } as unknown as WMASchedulerConfig, 'main')
611
- break
612
- case 'DEMA':
613
- this.indicatorScheduler.updateDEMAConfig({ ...params, showDEMA: isActive } as unknown as DEMASchedulerConfig, 'main')
614
- break
615
- case 'TEMA':
616
- this.indicatorScheduler.updateTEMAConfig({ ...params, showTEMA: isActive } as unknown as TEMASchedulerConfig, 'main')
617
- break
618
- case 'HMA':
619
- this.indicatorScheduler.updateHMAConfig({ ...params, showHMA: isActive } as unknown as HMASchedulerConfig, 'main')
620
- break
621
- case 'KAMA':
622
- this.indicatorScheduler.updateKAMAConfig({ ...params, showKAMA: isActive } as unknown as KAMASchedulerConfig, 'main')
623
- break
624
- case 'SAR':
625
- this.indicatorScheduler.updateSARConfig({ ...params, showSAR: isActive } as unknown as SARSchedulerConfig, 'main')
626
- break
627
- case 'SUPERTREND':
628
- this.indicatorScheduler.updateSuperTrendConfig({ ...params, showSuperTrend: isActive } as unknown as SuperTrendSchedulerConfig, 'main')
629
- break
630
- case 'KELTNER':
631
- this.indicatorScheduler.updateKeltnerConfig({ ...params, showUpper: isActive, showMiddle: isActive, showLower: isActive } as unknown as KeltnerSchedulerConfig, 'main')
632
- break
633
- case 'DONCHIAN':
634
- this.indicatorScheduler.updateDonchianConfig({ ...params, showUpper: isActive, showMiddle: isActive, showLower: isActive } as unknown as DonchianSchedulerConfig, 'main')
635
- break
636
- case 'ICHIMOKU':
637
- this.indicatorScheduler.updateIchimokuConfig({ ...params, showTenkan: isActive, showKijun: isActive, showSpanA: isActive, showSpanB: isActive, showChikou: isActive, showCloud: isActive } as unknown as IchimokuSchedulerConfig, 'main')
638
- break
639
- case 'PIVOT':
640
- this.indicatorScheduler.updatePivotConfig({ ...params, showPP: isActive, showR1: isActive, showR2: isActive, showR3: isActive, showS1: isActive, showS2: isActive, showS3: isActive } as unknown as PivotSchedulerConfig, 'main')
641
- break
642
- case 'FIB':
643
- this.indicatorScheduler.updateFibConfig({ ...params, showLevels: isActive } as unknown as FibSchedulerConfig, 'main')
644
- break
645
- case 'STRUCTURE':
646
- this.indicatorScheduler.updateStructureConfig({ ...params, showSwingLabels: isActive, showBOS: isActive, showCHOCH: isActive } as unknown as StructureSchedulerConfig, 'main')
647
- break
648
- case 'ZONES':
649
- this.indicatorScheduler.updateZonesConfig({ ...params, showFVG: isActive, showOB: isActive, showFilledZones: isActive } as unknown as ZonesSchedulerConfig, 'main')
650
- 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')
651
450
  }
652
451
  }
653
452
 
@@ -708,7 +507,7 @@ export class Chart {
708
507
  // 初始化指标调度器
709
508
  this.indicatorScheduler = new IndicatorScheduler()
710
509
  this.indicatorScheduler.setPluginHost(this.pluginHost)
711
- for (const definition of getRegisteredIndicatorDefinitions()) {
510
+ for (const definition of getBuiltinIndicatorDefinitions()) {
712
511
  this.indicatorScheduler.registerIndicator(definition)
713
512
  }
714
513
  this.indicatorScheduler.setInvalidateCallback(() => this.scheduleDraw())
@@ -750,6 +549,7 @@ export class Chart {
750
549
  this.useRenderer(createLastPriceLineRendererPlugin())
751
550
  this.useRenderer(createLastPriceLabelRegistrarPlugin())
752
551
  this.useRenderer(createCustomMarkersRenderer())
552
+ this.useRenderer(createExtremaMarkersRendererPlugin())
753
553
  this.useRenderer(createMainIndicatorLegendRendererPlugin({
754
554
  yPaddingPx: this.opt.yPaddingPx,
755
555
  }))
@@ -1364,14 +1164,18 @@ export class Chart {
1364
1164
  this.upsertPane({ id: paneId, ratio: 1, visible: true, role: 'indicator' })
1365
1165
  }
1366
1166
 
1367
- 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
1368
1173
  const existing = this.getRenderer(rendererName)
1369
1174
  if (existing) {
1370
1175
  if (params) this.updateRendererConfig(rendererName, params)
1371
1176
  return
1372
1177
  }
1373
1178
 
1374
- const renderer = createSubIndicatorRenderer({ indicatorId, paneId })
1375
1179
  this.useRenderer(renderer, params)
1376
1180
  }
1377
1181
 
@@ -1665,7 +1469,7 @@ export class Chart {
1665
1469
 
1666
1470
  private getDefaultSubPaneParams(indicatorId: SubIndicatorType): Record<string, unknown> {
1667
1471
  // 默认参数定义在 SubPaneManager 中,这里导入使用
1668
- const defaults: Record<SubIndicatorType, Record<string, unknown>> = {
1472
+ const defaults: Record<string, Record<string, unknown>> = {
1669
1473
  VOLUME: {},
1670
1474
  MACD: { fastPeriod: 12, slowPeriod: 26, signalPeriod: 9 },
1671
1475
  RSI: { period1: 6, period2: 12, period3: 24 },
@@ -1703,7 +1507,7 @@ export class Chart {
1703
1507
  ZONES: { showFVG: true, showOB: true, showFilledZones: true, obLookback: 5 },
1704
1508
  VOLUME_PROFILE: { bins: 24, lookback: 0, valueAreaPercent: 0.7, showVolumeProfile: true },
1705
1509
  }
1706
- return { ...defaults[indicatorId] }
1510
+ return { ...(defaults[indicatorId] ?? {}) }
1707
1511
  }
1708
1512
 
1709
1513
  /** 副图渲染器名称前缀(保留向后兼容) */
@@ -1775,6 +1579,24 @@ export class Chart {
1775
1579
  // 重置交互状态
1776
1580
  this.interaction.reset()
1777
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
+
1778
1600
  // 触发指标计算(在 scheduleDraw 之前,确保渲染器读到最新状态)
1779
1601
  this.indicatorScheduler.update(this._internalData, this.lastVisibleRange)
1780
1602
 
@@ -1,3 +1,4 @@
1
+ // @vitest-environment jsdom
1
2
  import { describe, expect, it, vi } from 'vitest'
2
3
  import { InteractionController } from '@/core/controller/interaction'
3
4
  import type { KLineData } from '@/types/price'
@@ -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
+ })