@363045841yyt/klinechart-core 0.7.12 → 0.8.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/dist/config/chartSettings.d.ts +0 -6
  2. package/dist/config/chartSettings.d.ts.map +1 -1
  3. package/dist/config/chartSettings.js +0 -1
  4. package/dist/config/chartSettings.js.map +1 -1
  5. package/dist/controllers/createChartController.d.ts.map +1 -1
  6. package/dist/controllers/createChartController.js +22 -0
  7. package/dist/controllers/createChartController.js.map +1 -1
  8. package/dist/controllers/createIndicatorSelectorController.d.ts.map +1 -1
  9. package/dist/controllers/createIndicatorSelectorController.js +4 -6
  10. package/dist/controllers/createIndicatorSelectorController.js.map +1 -1
  11. package/dist/controllers/index.d.ts +4 -4
  12. package/dist/controllers/index.d.ts.map +1 -1
  13. package/dist/controllers/index.js +3 -2
  14. package/dist/controllers/index.js.map +1 -1
  15. package/dist/controllers/types.d.ts +21 -0
  16. package/dist/controllers/types.d.ts.map +1 -1
  17. package/dist/data-fetchers/baostock.d.ts +3 -0
  18. package/dist/data-fetchers/baostock.d.ts.map +1 -0
  19. package/dist/data-fetchers/baostock.js +34 -0
  20. package/dist/data-fetchers/baostock.js.map +1 -0
  21. package/dist/data-fetchers/hundred-mock.d.ts +3 -0
  22. package/dist/data-fetchers/hundred-mock.d.ts.map +1 -0
  23. package/dist/data-fetchers/hundred-mock.js +30 -0
  24. package/dist/data-fetchers/hundred-mock.js.map +1 -0
  25. package/dist/data-fetchers/index.d.ts +5 -0
  26. package/dist/data-fetchers/index.d.ts.map +1 -0
  27. package/dist/data-fetchers/index.js +5 -0
  28. package/dist/data-fetchers/index.js.map +1 -0
  29. package/dist/data-fetchers/router.d.ts +3 -0
  30. package/dist/data-fetchers/router.d.ts.map +1 -0
  31. package/dist/data-fetchers/router.js +16 -0
  32. package/dist/data-fetchers/router.js.map +1 -0
  33. package/dist/data-fetchers/thousand-mock.d.ts +3 -0
  34. package/dist/data-fetchers/thousand-mock.d.ts.map +1 -0
  35. package/dist/data-fetchers/thousand-mock.js +29 -0
  36. package/dist/data-fetchers/thousand-mock.js.map +1 -0
  37. package/dist/engine/chart.d.ts +20 -2
  38. package/dist/engine/chart.d.ts.map +1 -1
  39. package/dist/engine/chart.js +81 -24
  40. package/dist/engine/chart.js.map +1 -1
  41. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts +3 -2
  42. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts.map +1 -1
  43. package/dist/engine/indicators/indicatorDefinitionRegistry.js +26 -1
  44. package/dist/engine/indicators/indicatorDefinitionRegistry.js.map +1 -1
  45. package/dist/engine/indicators/indicatorMetadata.d.ts +29 -2
  46. package/dist/engine/indicators/indicatorMetadata.d.ts.map +1 -1
  47. package/dist/engine/indicators/indicatorMetadata.js.map +1 -1
  48. package/dist/engine/indicators/indicatorRuntime.d.ts.map +1 -1
  49. package/dist/engine/indicators/indicatorRuntime.js +5 -4
  50. package/dist/engine/indicators/indicatorRuntime.js.map +1 -1
  51. package/dist/engine/indicators/scheduler.d.ts +16 -1
  52. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  53. package/dist/engine/indicators/scheduler.js +26 -7
  54. package/dist/engine/indicators/scheduler.js.map +1 -1
  55. package/dist/engine/renderers/Indicator/atr.d.ts +2 -1
  56. package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
  57. package/dist/engine/renderers/Indicator/atr.js +5 -9
  58. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  59. package/dist/engine/renderers/Indicator/boll.d.ts +4 -1
  60. package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
  61. package/dist/engine/renderers/Indicator/boll.js +22 -10
  62. package/dist/engine/renderers/Indicator/boll.js.map +1 -1
  63. package/dist/engine/renderers/Indicator/cci.d.ts +2 -1
  64. package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
  65. package/dist/engine/renderers/Indicator/cci.js +6 -10
  66. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  67. package/dist/engine/renderers/Indicator/chaikinVol.d.ts +4 -1
  68. package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
  69. package/dist/engine/renderers/Indicator/chaikinVol.js +16 -8
  70. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  71. package/dist/engine/renderers/Indicator/cmf.d.ts +4 -1
  72. package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
  73. package/dist/engine/renderers/Indicator/cmf.js +15 -8
  74. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  75. package/dist/engine/renderers/Indicator/dema.d.ts +2 -0
  76. package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
  77. package/dist/engine/renderers/Indicator/dema.js +18 -8
  78. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  79. package/dist/engine/renderers/Indicator/donchian.d.ts +4 -1
  80. package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
  81. package/dist/engine/renderers/Indicator/donchian.js +19 -8
  82. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  83. package/dist/engine/renderers/Indicator/ene.d.ts +12 -1
  84. package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
  85. package/dist/engine/renderers/Indicator/ene.js +22 -10
  86. package/dist/engine/renderers/Indicator/ene.js.map +1 -1
  87. package/dist/engine/renderers/Indicator/expma.d.ts +4 -1
  88. package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
  89. package/dist/engine/renderers/Indicator/expma.js +21 -10
  90. package/dist/engine/renderers/Indicator/expma.js.map +1 -1
  91. package/dist/engine/renderers/Indicator/fastk.d.ts +2 -1
  92. package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
  93. package/dist/engine/renderers/Indicator/fastk.js +6 -10
  94. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  95. package/dist/engine/renderers/Indicator/fib.d.ts +2 -0
  96. package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
  97. package/dist/engine/renderers/Indicator/fib.js +25 -8
  98. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  99. package/dist/engine/renderers/Indicator/hma.d.ts +2 -0
  100. package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
  101. package/dist/engine/renderers/Indicator/hma.js +18 -8
  102. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  103. package/dist/engine/renderers/Indicator/hv.d.ts +4 -1
  104. package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
  105. package/dist/engine/renderers/Indicator/hv.js +17 -8
  106. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  107. package/dist/engine/renderers/Indicator/ichimoku.d.ts +4 -1
  108. package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
  109. package/dist/engine/renderers/Indicator/ichimoku.js +26 -8
  110. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  111. package/dist/engine/renderers/Indicator/index.d.ts +27 -28
  112. package/dist/engine/renderers/Indicator/index.d.ts.map +1 -1
  113. package/dist/engine/renderers/Indicator/index.js +27 -28
  114. package/dist/engine/renderers/Indicator/index.js.map +1 -1
  115. package/dist/engine/renderers/Indicator/{indicatorData.d.ts → indicatorCatalog.d.ts} +1 -1
  116. package/dist/engine/renderers/Indicator/indicatorCatalog.d.ts.map +1 -0
  117. package/dist/engine/renderers/Indicator/{indicatorData.js → indicatorCatalog.js} +94 -406
  118. package/dist/engine/renderers/Indicator/indicatorCatalog.js.map +1 -0
  119. package/dist/engine/renderers/Indicator/kama.d.ts +2 -0
  120. package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
  121. package/dist/engine/renderers/Indicator/kama.js +18 -8
  122. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  123. package/dist/engine/renderers/Indicator/keltner.d.ts +4 -1
  124. package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
  125. package/dist/engine/renderers/Indicator/keltner.js +19 -8
  126. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  127. package/dist/engine/renderers/Indicator/kst.d.ts +2 -1
  128. package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
  129. package/dist/engine/renderers/Indicator/kst.js +11 -10
  130. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  131. package/dist/engine/renderers/Indicator/ma.d.ts +4 -1
  132. package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
  133. package/dist/engine/renderers/Indicator/ma.js +32 -9
  134. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  135. package/dist/engine/renderers/Indicator/macd.d.ts +1 -1
  136. package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
  137. package/dist/engine/renderers/Indicator/macd.js +9 -10
  138. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  139. package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
  140. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +38 -136
  141. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  142. package/dist/engine/renderers/Indicator/mfi.d.ts +4 -1
  143. package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
  144. package/dist/engine/renderers/Indicator/mfi.js +15 -8
  145. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  146. package/dist/engine/renderers/Indicator/mom.d.ts +2 -1
  147. package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
  148. package/dist/engine/renderers/Indicator/mom.js +6 -10
  149. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  150. package/dist/engine/renderers/Indicator/obv.d.ts +4 -1
  151. package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
  152. package/dist/engine/renderers/Indicator/obv.js +14 -8
  153. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  154. package/dist/engine/renderers/Indicator/parkinson.d.ts +4 -1
  155. package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
  156. package/dist/engine/renderers/Indicator/parkinson.js +17 -8
  157. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  158. package/dist/engine/renderers/Indicator/pivot.d.ts +2 -0
  159. package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
  160. package/dist/engine/renderers/Indicator/pivot.js +42 -8
  161. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  162. package/dist/engine/renderers/Indicator/pvt.d.ts +4 -1
  163. package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
  164. package/dist/engine/renderers/Indicator/pvt.js +14 -8
  165. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  166. package/dist/engine/renderers/Indicator/roc.d.ts +4 -1
  167. package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
  168. package/dist/engine/renderers/Indicator/roc.js +15 -8
  169. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  170. package/dist/engine/renderers/Indicator/rsi.d.ts +2 -1
  171. package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
  172. package/dist/engine/renderers/Indicator/rsi.js +9 -10
  173. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  174. package/dist/engine/renderers/Indicator/sar.d.ts +4 -1
  175. package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
  176. package/dist/engine/renderers/Indicator/sar.js +17 -8
  177. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  178. package/dist/engine/renderers/Indicator/stoch.d.ts +2 -1
  179. package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
  180. package/dist/engine/renderers/Indicator/stoch.js +8 -10
  181. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  182. package/dist/engine/renderers/Indicator/structure.d.ts +4 -1
  183. package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
  184. package/dist/engine/renderers/Indicator/structure.js +21 -9
  185. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  186. package/dist/engine/renderers/Indicator/supertrend.d.ts +4 -1
  187. package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
  188. package/dist/engine/renderers/Indicator/supertrend.js +18 -9
  189. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  190. package/dist/engine/renderers/Indicator/tema.d.ts +2 -0
  191. package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
  192. package/dist/engine/renderers/Indicator/tema.js +18 -8
  193. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  194. package/dist/engine/renderers/Indicator/trix.d.ts +4 -1
  195. package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
  196. package/dist/engine/renderers/Indicator/trix.js +29 -8
  197. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  198. package/dist/engine/renderers/Indicator/vma.d.ts +4 -1
  199. package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
  200. package/dist/engine/renderers/Indicator/vma.js +15 -8
  201. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  202. package/dist/engine/renderers/Indicator/volumeProfile.d.ts +4 -1
  203. package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
  204. package/dist/engine/renderers/Indicator/volumeProfile.js +27 -8
  205. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  206. package/dist/engine/renderers/Indicator/vwap.d.ts +4 -1
  207. package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
  208. package/dist/engine/renderers/Indicator/vwap.js +14 -8
  209. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  210. package/dist/engine/renderers/Indicator/wma.d.ts +2 -0
  211. package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
  212. package/dist/engine/renderers/Indicator/wma.js +18 -8
  213. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  214. package/dist/engine/renderers/Indicator/wmsr.d.ts +2 -1
  215. package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
  216. package/dist/engine/renderers/Indicator/wmsr.js +6 -10
  217. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  218. package/dist/engine/renderers/Indicator/zones.d.ts +2 -0
  219. package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
  220. package/dist/engine/renderers/Indicator/zones.js +23 -8
  221. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  222. package/dist/engine/renderers/paneTitle.d.ts +4 -10
  223. package/dist/engine/renderers/paneTitle.d.ts.map +1 -1
  224. package/dist/engine/renderers/paneTitle.js +30 -7
  225. package/dist/engine/renderers/paneTitle.js.map +1 -1
  226. package/dist/engine/renderers/subVolume.js +0 -3
  227. package/dist/engine/renderers/subVolume.js.map +1 -1
  228. package/dist/engine/subPaneManager.d.ts.map +1 -1
  229. package/dist/engine/subPaneManager.js +2 -1
  230. package/dist/engine/subPaneManager.js.map +1 -1
  231. package/dist/semantic/controller.d.ts +3 -14
  232. package/dist/semantic/controller.d.ts.map +1 -1
  233. package/dist/semantic/controller.js +9 -43
  234. package/dist/semantic/controller.js.map +1 -1
  235. package/dist/semantic/index.d.ts +3 -2
  236. package/dist/semantic/index.d.ts.map +1 -1
  237. package/dist/semantic/index.js +1 -1
  238. package/dist/semantic/index.js.map +1 -1
  239. package/dist/version.d.ts +1 -1
  240. package/dist/version.d.ts.map +1 -1
  241. package/dist/version.js +1 -1
  242. package/dist/version.js.map +1 -1
  243. package/package.json +7 -7
  244. package/src/config/chartSettings.ts +0 -1
  245. package/src/controllers/__tests__/indicatorSelector.test.ts +5 -4
  246. package/src/controllers/createChartController.ts +28 -1
  247. package/src/controllers/createIndicatorSelectorController.ts +4 -6
  248. package/src/controllers/index.ts +7 -6
  249. package/src/controllers/types.ts +30 -0
  250. package/src/data-fetchers/baostock.ts +34 -0
  251. package/src/data-fetchers/hundred-mock.ts +31 -0
  252. package/src/data-fetchers/index.ts +4 -0
  253. package/src/data-fetchers/router.ts +17 -0
  254. package/src/data-fetchers/thousand-mock.ts +30 -0
  255. package/src/engine/chart.ts +91 -23
  256. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +4 -5
  257. package/src/engine/indicators/indicatorDefinitionRegistry.ts +35 -2
  258. package/src/engine/indicators/indicatorMetadata.ts +39 -2
  259. package/src/engine/indicators/indicatorRuntime.ts +5 -4
  260. package/src/engine/indicators/scheduler.ts +32 -8
  261. package/src/engine/renderers/Indicator/atr.ts +8 -11
  262. package/src/engine/renderers/Indicator/boll.ts +31 -10
  263. package/src/engine/renderers/Indicator/cci.ts +9 -14
  264. package/src/engine/renderers/Indicator/chaikinVol.ts +24 -8
  265. package/src/engine/renderers/Indicator/cmf.ts +23 -8
  266. package/src/engine/renderers/Indicator/dema.ts +27 -9
  267. package/src/engine/renderers/Indicator/donchian.ts +27 -9
  268. package/src/engine/renderers/Indicator/ene.ts +31 -10
  269. package/src/engine/renderers/Indicator/expma.ts +30 -10
  270. package/src/engine/renderers/Indicator/fastk.ts +9 -14
  271. package/src/engine/renderers/Indicator/fib.ts +28 -9
  272. package/src/engine/renderers/Indicator/hma.ts +27 -9
  273. package/src/engine/renderers/Indicator/hv.ts +26 -8
  274. package/src/engine/renderers/Indicator/ichimoku.ts +30 -9
  275. package/src/engine/renderers/Indicator/index.ts +27 -28
  276. package/src/engine/renderers/Indicator/indicatorCatalog.ts +346 -0
  277. package/src/engine/renderers/Indicator/kama.ts +27 -9
  278. package/src/engine/renderers/Indicator/keltner.ts +27 -9
  279. package/src/engine/renderers/Indicator/kst.ts +14 -18
  280. package/src/engine/renderers/Indicator/ma.ts +43 -9
  281. package/src/engine/renderers/Indicator/macd.ts +27 -32
  282. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +43 -162
  283. package/src/engine/renderers/Indicator/mfi.ts +23 -8
  284. package/src/engine/renderers/Indicator/mom.ts +9 -14
  285. package/src/engine/renderers/Indicator/obv.ts +22 -8
  286. package/src/engine/renderers/Indicator/parkinson.ts +26 -8
  287. package/src/engine/renderers/Indicator/pivot.ts +46 -9
  288. package/src/engine/renderers/Indicator/pvt.ts +22 -8
  289. package/src/engine/renderers/Indicator/roc.ts +24 -8
  290. package/src/engine/renderers/Indicator/rsi.ts +12 -16
  291. package/src/engine/renderers/Indicator/sar.ts +25 -9
  292. package/src/engine/renderers/Indicator/stoch.ts +11 -15
  293. package/src/engine/renderers/Indicator/structure.ts +31 -9
  294. package/src/engine/renderers/Indicator/supertrend.ts +26 -10
  295. package/src/engine/renderers/Indicator/tema.ts +27 -9
  296. package/src/engine/renderers/Indicator/trix.ts +38 -8
  297. package/src/engine/renderers/Indicator/vma.ts +23 -8
  298. package/src/engine/renderers/Indicator/volumeProfile.ts +39 -8
  299. package/src/engine/renderers/Indicator/vwap.ts +22 -8
  300. package/src/engine/renderers/Indicator/wma.ts +27 -9
  301. package/src/engine/renderers/Indicator/wmsr.ts +9 -14
  302. package/src/engine/renderers/Indicator/zones.ts +28 -9
  303. package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +142 -79
  304. package/src/engine/renderers/paneTitle.ts +45 -19
  305. package/src/engine/renderers/subVolume.ts +0 -2
  306. package/src/engine/subPaneManager.ts +2 -1
  307. package/src/semantic/__tests__/controller.test.ts +19 -7
  308. package/src/semantic/controller.ts +9 -57
  309. package/src/semantic/index.ts +3 -2
  310. package/src/version.ts +1 -1
  311. package/dist/engine/renderers/Indicator/indicatorData.d.ts.map +0 -1
  312. package/dist/engine/renderers/Indicator/indicatorData.js.map +0 -1
  313. package/dist/engine/renderers/Indicator/macdLegend.d.ts +0 -13
  314. package/dist/engine/renderers/Indicator/macdLegend.d.ts.map +0 -1
  315. package/dist/engine/renderers/Indicator/macdLegend.js +0 -116
  316. package/dist/engine/renderers/Indicator/macdLegend.js.map +0 -1
  317. package/dist/engine/renderers/Indicator/subPaneConfig.d.ts +0 -16
  318. package/dist/engine/renderers/Indicator/subPaneConfig.d.ts.map +0 -1
  319. package/dist/engine/renderers/Indicator/subPaneConfig.js +0 -194
  320. package/dist/engine/renderers/Indicator/subPaneConfig.js.map +0 -1
  321. package/src/engine/renderers/Indicator/indicatorData.ts +0 -650
  322. package/src/engine/renderers/Indicator/macdLegend.ts +0 -141
  323. package/src/engine/renderers/Indicator/subPaneConfig.ts +0 -265
@@ -2,8 +2,33 @@ import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../pl
2
2
  import { RENDERER_PRIORITY } from '../../plugin'
3
3
  import { resolveThemeColors } from '../../tokens'
4
4
  import { getFont, setCanvasFont } from '../theme/fonts'
5
- import { SUB_PANE_INDICATOR_CONFIGS } from './Indicator/subPaneConfig'
6
5
  import type { SubIndicatorType } from './Indicator'
6
+ import type { KLineData } from '../../types/price'
7
+ import type { TitleInfo } from '../indicators/indicatorMetadata'
8
+ import type { IndicatorScheduler } from '../indicators/scheduler'
9
+
10
+ /**
11
+ * @deprecated 请从 indicatorMetadata 导入 TitleInfo
12
+ */
13
+ export type { TitleInfo, TitleValueItem } from '../indicators/indicatorMetadata'
14
+
15
+ function getVolumeTitleInfo(
16
+ data: KLineData[],
17
+ index: number | null,
18
+ _params: Record<string, number | boolean | string>,
19
+ _host: PluginHost,
20
+ _paneId: string,
21
+ ): TitleInfo | null {
22
+ if (index === null) return null
23
+ const kline = data[index]
24
+ if (!kline || kline.volume === undefined) return null
25
+ const color = kline.open < kline.close ? '#ef4444' : '#22c55e'
26
+ return {
27
+ name: 'VOL',
28
+ params: [],
29
+ values: [{ label: 'VOL', value: kline.volume, color }],
30
+ }
31
+ }
7
32
 
8
33
  const textWidthCache = new Map<string, number>()
9
34
  const TEXT_WIDTH_CACHE_LIMIT = 256
@@ -23,18 +48,6 @@ function measureTextWidth(ctx: CanvasRenderingContext2D, text: string): number {
23
48
  return width
24
49
  }
25
50
 
26
- export interface TitleValueItem {
27
- label: string
28
- value: number
29
- color: string
30
- }
31
-
32
- export interface TitleInfo {
33
- name: string
34
- params?: number[]
35
- values?: TitleValueItem[]
36
- }
37
-
38
51
  export interface PaneTitleOptions {
39
52
  paneId: string
40
53
  title: string
@@ -68,7 +81,7 @@ export function createPaneTitleRendererPlugin(options: PaneTitleOptions): Render
68
81
 
69
82
  const fontSize = 12
70
83
  const x = 12
71
- const y = currentOptions.yOffset ?? fontSize
84
+ let y = currentOptions.yOffset ?? fontSize
72
85
  const gap = 8
73
86
 
74
87
  overlayCtx.save()
@@ -76,11 +89,22 @@ export function createPaneTitleRendererPlugin(options: PaneTitleOptions): Render
76
89
  overlayCtx.textAlign = 'left'
77
90
  overlayCtx.textBaseline = 'top'
78
91
 
79
- const config = SUB_PANE_INDICATOR_CONFIGS[currentOptions.indicatorId]
80
92
  const crosshairIndex = context.crosshairIndex ?? null
81
- const titleInfo = config && pluginHost
82
- ? config.getTitleInfo(context.data, crosshairIndex, currentOptions.params as Record<string, number | boolean | string>, pluginHost, currentOptions.paneId)
83
- : null
93
+ const castParams = currentOptions.params as Record<string, number | boolean | string>
94
+ const klineData = context.data as KLineData[]
95
+
96
+ // 优先从 indicator metadata registry 获取 getTitleInfo
97
+ let titleInfo: TitleInfo | null = null
98
+ const scheduler = pluginHost?.getService<IndicatorScheduler>('indicatorScheduler')
99
+ const meta = scheduler?.getIndicatorMetadata(currentOptions.indicatorId)
100
+ if (meta?.getTitleInfo && pluginHost) {
101
+ titleInfo = meta.getTitleInfo(klineData, crosshairIndex, castParams, pluginHost, currentOptions.paneId)
102
+ }
103
+
104
+ // fallback: VOLUME 不是注册指标,内联处理
105
+ if (!titleInfo && pluginHost) {
106
+ titleInfo = getVolumeTitleInfo(klineData, crosshairIndex, castParams, pluginHost, currentOptions.paneId)
107
+ }
84
108
 
85
109
  if (titleInfo) {
86
110
  let currentX = x
@@ -99,6 +123,7 @@ export function createPaneTitleRendererPlugin(options: PaneTitleOptions): Render
99
123
  }
100
124
 
101
125
  if (titleInfo.values && titleInfo.values.length > 0) {
126
+ // y += 1
102
127
  for (const item of titleInfo.values) {
103
128
  const valueText = `${item.label} ${item.value.toFixed(3)}`
104
129
  overlayCtx.fillStyle = item.color
@@ -108,7 +133,8 @@ export function createPaneTitleRendererPlugin(options: PaneTitleOptions): Render
108
133
  }
109
134
  } else {
110
135
  overlayCtx.fillStyle = colors.text.primary
111
- overlayCtx.fillText(currentOptions.title, x, y)
136
+ const fallbackTitle = meta?.displayName ?? currentOptions.title
137
+ overlayCtx.fillText(fallbackTitle, x, y)
112
138
 
113
139
  if (currentOptions.description) {
114
140
  const titleWidth = measureTextWidth(overlayCtx, currentOptions.title)
@@ -232,10 +232,8 @@ function judgeColor(dayData: KLineData, upColor: string, downColor: string, neut
232
232
  name: 'volume',
233
233
  displayName: 'VOL',
234
234
  category: 'volume',
235
- stateKey: (paneId: string) => createIndicatorStateKey('volume', paneId),
236
235
  defaultPaneId: 'sub',
237
236
  scaleRendererFactory: createVolumeScaleRendererPlugin,
238
- updateConfig: () => {},
239
237
  })
240
238
  class VolumeIndicatorDefinition {
241
239
  static rendererFactory = createVolumeRendererPlugin
@@ -4,6 +4,7 @@ import { createSignal, type Signal } from '../reactivity/signal'
4
4
  import { createSubIndicatorRenderer } from './renderers/Indicator'
5
5
  import { createPaneTitleRendererPlugin } from './renderers/paneTitle'
6
6
  import { createIndicatorScaleRendererPlugin } from './renderers/Indicator/scale/indicator_scale'
7
+ import { findIndicator } from './renderers/Indicator/indicatorCatalog'
7
8
 
8
9
  export interface SubPaneEntry {
9
10
  paneId: string
@@ -220,7 +221,7 @@ export class SubPaneManager {
220
221
 
221
222
  const renderer = createPaneTitleRendererPlugin({
222
223
  paneId,
223
- title: indicatorId,
224
+ title: findIndicator(indicatorId)?.label ?? indicatorId,
224
225
  indicatorId,
225
226
  params,
226
227
  })
@@ -1,5 +1,5 @@
1
1
  import { afterEach, describe, expect, it, vi } from 'vitest'
2
- import { SemanticChartController, __setDataFetcher, type SemanticChartAdapter } from '../controller'
2
+ import { SemanticChartController, type SemanticChartAdapter } from '../controller'
3
3
  import type { SemanticChartConfig } from '../types'
4
4
 
5
5
  function createConfig(indicators: SemanticChartConfig['indicators']): SemanticChartConfig {
@@ -20,6 +20,7 @@ function createConfig(indicators: SemanticChartConfig['indicators']): SemanticCh
20
20
 
21
21
  function createChartAdapter(): SemanticChartAdapter {
22
22
  return {
23
+ setSymbols: vi.fn(),
23
24
  updateData: vi.fn(),
24
25
  updateRendererConfig: vi.fn(),
25
26
  addIndicator: vi.fn((definitionId: string) => definitionId),
@@ -34,12 +35,7 @@ function createChartAdapter(): SemanticChartAdapter {
34
35
  }
35
36
 
36
37
  describe('SemanticChartController', () => {
37
- afterEach(() => {
38
- __setDataFetcher(null)
39
- })
40
-
41
38
  it('routes semantic sub indicators through registered definitions', async () => {
42
- __setDataFetcher(vi.fn(async () => []))
43
39
  const chart = createChartAdapter()
44
40
  const controller = new SemanticChartController(chart)
45
41
 
@@ -61,7 +57,6 @@ describe('SemanticChartController', () => {
61
57
  })
62
58
 
63
59
  it('routes semantic main indicators through chart main indicator API', async () => {
64
- __setDataFetcher(vi.fn(async () => []))
65
60
  const chart = createChartAdapter()
66
61
  const controller = new SemanticChartController(chart)
67
62
 
@@ -81,4 +76,21 @@ describe('SemanticChartController', () => {
81
76
  expect(chart.disableMainIndicator).not.toHaveBeenCalled()
82
77
  expect(chart.updateRendererConfig).not.toHaveBeenCalledWith('boll', expect.anything())
83
78
  })
79
+
80
+ it('calls setSymbols on the adapter when applying config', async () => {
81
+ const chart = createChartAdapter()
82
+ const controller = new SemanticChartController(chart)
83
+
84
+ await controller.applyConfig(createConfig({}))
85
+
86
+ expect(chart.setSymbols).toHaveBeenCalledWith([{
87
+ symbol: '600000',
88
+ exchange: 'SH',
89
+ period: 'daily',
90
+ adjust: 'qfq',
91
+ source: 'baostock',
92
+ startDate: '2025-01-01',
93
+ endDate: '2025-01-02',
94
+ }])
95
+ })
84
96
  })
@@ -13,22 +13,10 @@ import type {
13
13
  DataConfig,
14
14
  } from './types'
15
15
  import type { SubIndicatorType as CoreSubIndicatorType } from '../engine/renderers/Indicator'
16
- import type { KLineData } from '../controllers/types'
16
+ import type { KLineData, DataFetcher, SymbolSpec } from '../controllers/types'
17
17
 
18
18
  export type SemanticEventType = 'config:loading' | 'config:ready' | 'config:error'
19
-
20
- export type DataFetcher = (
21
- source: string,
22
- config: {
23
- symbol: string
24
- startDate: string
25
- endDate: string
26
- period: string
27
- adjust: string
28
- },
29
- ) => Promise<ReadonlyArray<KLineData>>
30
-
31
- let _dataFetcher: DataFetcher | null = null
19
+ export type { DataFetcher, SymbolSpec } from '../controllers/types'
32
20
 
33
21
  function normalizeIndicatorId(id: string): string {
34
22
  return id.trim().toLowerCase().replace(/[^a-z0-9]/g, '')
@@ -45,21 +33,8 @@ function getSemanticIndicatorDefinition(type: string): IndicatorMetadata | undef
45
33
  })
46
34
  }
47
35
 
48
- export function __setDataFetcher(fetcher: DataFetcher | null): void {
49
- _dataFetcher = fetcher
50
- }
51
-
52
- async function getDataFetcher(): Promise<DataFetcher> {
53
- if (_dataFetcher === null) {
54
- throw new Error(
55
- '[SemanticChartController] No data fetcher registered. ' +
56
- 'Call __setDataFetcher(...) before applying a config that requires data fetching.',
57
- )
58
- }
59
- return _dataFetcher
60
- }
61
-
62
36
  export interface SemanticChartAdapter {
37
+ setSymbols(specs: ReadonlyArray<SymbolSpec>): void
63
38
  updateData(data: ReadonlyArray<KLineData>): void
64
39
  updateRendererConfig(name: string, config: Record<string, unknown>): void
65
40
  addIndicator?(definitionId: string, role: 'main' | 'sub', params?: Record<string, unknown>): string | null
@@ -116,44 +91,21 @@ export class SemanticChartController {
116
91
  this.events.off(event, handler)
117
92
  }
118
93
 
119
- /**
120
- * 仅注册指标配置,不获取/更新数据。
121
- * 用于 performanceTest10kKlines 等场景:数据由外部提供,语义控制器只管指标。
122
- */
123
- applyIndicatorsOnly(config: SemanticChartConfig): ApplyResult {
124
- try {
125
- if (config.indicators) {
126
- this.applyIndicators(config.indicators.main, config.indicators.sub)
127
- }
128
- if (config.markers) {
129
- this.applyMarkers(config.markers.customMarkers, config.data.period)
130
- }
131
- this.events.emit('config:ready', undefined)
132
- return { success: true }
133
- } catch (error) {
134
- this.events.emit('config:error', error)
135
- return {
136
- success: false,
137
- errors: [error instanceof Error ? error.message : String(error)],
138
- }
139
- }
140
- }
141
-
142
94
  private async doApplyConfig(config: SemanticChartConfig): Promise<void> {
143
95
  // 先注册指标(同步),确保 scheduler 首次 applyResults 时指标已在 registry
144
96
  if (config.indicators) {
145
97
  this.applyIndicators(config.indicators.main, config.indicators.sub)
146
98
  }
147
99
 
148
- const fetcher = await getDataFetcher()
149
- const data = await fetcher(config.data.source, {
100
+ this.chart.setSymbols([{
150
101
  symbol: config.data.symbol,
151
- startDate: config.data.startDate,
152
- endDate: config.data.endDate,
102
+ exchange: config.data.exchange,
153
103
  period: config.data.period,
154
104
  adjust: config.data.adjust,
155
- })
156
- this.chart.updateData(data)
105
+ source: config.data.source,
106
+ startDate: config.data.startDate,
107
+ endDate: config.data.endDate,
108
+ }])
157
109
 
158
110
  if (config.markers) {
159
111
  this.applyMarkers(config.markers.customMarkers, config.data.period)
@@ -20,8 +20,9 @@ export type {
20
20
  SecurityResult,
21
21
  } from './types'
22
22
 
23
- export { SemanticChartController, type SemanticEventType, __setDataFetcher } from './controller'
24
- export type { DataFetcher, SemanticChartAdapter } from './controller'
23
+ export { SemanticChartController, type SemanticEventType } from './controller'
24
+ export type { SemanticChartAdapter } from './controller'
25
+ export type { DataFetcher, SymbolSpec } from '../controllers/types'
25
26
 
26
27
  export { SemanticConfigValidator, sanitizeParams, sanitizeColor, validateColor, validateSymbol } from './validator'
27
28
 
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = "0.7.12"
1
+ export const VERSION = "0.8.1-alpha.1"
@@ -1 +0,0 @@
1
- {"version":3,"file":"indicatorData.d.ts","sourceRoot":"","sources":["../../../../src/engine/renderers/Indicator/indicatorData.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;CACvB;AAED,eAAO,MAAM,aAAa,EAAE,SAAS,EAymBpC,CAAA;AAED,eAAO,MAAM,cAAc,aAAiD,CAAA;AAC5E,eAAO,MAAM,aAAa,aAAgD,CAAA;AAE1E,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAGpD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"indicatorData.js","sourceRoot":"","sources":["../../../../src/engine/renderers/Indicator/indicatorData.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import type { RendererPluginWithHost } from '../../../plugin';
2
- export interface MACDLegendOptions {
3
- /** Y 轴内边距(与主图保持一致) */
4
- yPaddingPx?: number;
5
- /** 目标 pane ID(默认 'sub') */
6
- paneId?: string;
7
- }
8
- /**
9
- * 创建 MACD 图例渲染器插件
10
- * 从 StateStore 读取 MACD 状态,不再在 draw 时计算
11
- */
12
- export declare function createMACDLegendRendererPlugin(options?: MACDLegendOptions): RendererPluginWithHost;
13
- //# sourceMappingURL=macdLegend.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"macdLegend.d.ts","sourceRoot":"","sources":["../../../../src/engine/renderers/Indicator/macdLegend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAA6B,MAAM,iBAAiB,CAAA;AAyBxF,MAAM,WAAW,iBAAiB;IAC9B,sBAAsB;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,GAAE,iBAAsB,GAAG,sBAAsB,CAwGtG"}
@@ -1,116 +0,0 @@
1
- import { RENDERER_PRIORITY } from '../../../plugin';
2
- import { resolveThemeColors } from '../../../tokens';
3
- import { getFont, setCanvasFont } from '../../theme/fonts';
4
- import { createMACDStateKey } from '../../indicators/macdState';
5
- const textWidthCache = new Map();
6
- const TEXT_WIDTH_CACHE_LIMIT = 256;
7
- function measureTextWidth(ctx, text) {
8
- const key = `${ctx.font}\n${text}`;
9
- const cached = textWidthCache.get(key);
10
- if (cached !== undefined) {
11
- return cached;
12
- }
13
- const width = ctx.measureText(text).width;
14
- if (textWidthCache.size >= TEXT_WIDTH_CACHE_LIMIT) {
15
- textWidthCache.clear();
16
- }
17
- textWidthCache.set(key, width);
18
- return width;
19
- }
20
- /**
21
- * 创建 MACD 图例渲染器插件
22
- * 从 StateStore 读取 MACD 状态,不再在 draw 时计算
23
- */
24
- export function createMACDLegendRendererPlugin(options = {}) {
25
- const yPaddingPx = options.yPaddingPx ?? 0;
26
- const paneId = options.paneId ?? 'sub';
27
- let fastPeriod = 12;
28
- let slowPeriod = 26;
29
- let signalPeriod = 9;
30
- let pluginHost = null;
31
- const stateKey = createMACDStateKey(paneId);
32
- return {
33
- name: `macdLegend_${paneId}`,
34
- version: '2.1.0',
35
- description: 'MACD 图例渲染器(StateStore 版)',
36
- debugName: 'MACD 图例',
37
- paneId,
38
- priority: RENDERER_PRIORITY.FOREGROUND,
39
- onInstall(host) {
40
- pluginHost = host;
41
- },
42
- draw(context) {
43
- const { ctx, range } = context;
44
- const colors = resolveThemeColors(context.theme, context.isAsiaMarket, context.colorPresetSettings);
45
- // 从 StateStore 读取 MACD 状态
46
- const state = pluginHost?.getSharedState(stateKey);
47
- if (!state || state.visibleMin > state.visibleMax)
48
- return;
49
- // 获取最新值
50
- let macdValue = null;
51
- // 优先使用 latestValues(scheduler 已计算好)
52
- if (state.latestValues) {
53
- macdValue = state.latestValues;
54
- }
55
- else {
56
- // 回退:从 series 读取最后一个可见点
57
- const lastIndex = Math.min(range.end - 1, state.series.length - 1);
58
- const point = state.series[lastIndex];
59
- if (point) {
60
- macdValue = {
61
- dif: point.dif,
62
- dea: point.dea,
63
- macd: point.macd,
64
- };
65
- }
66
- }
67
- if (!macdValue)
68
- return;
69
- // 从 state.params 读取当前参数
70
- const params = state.params;
71
- fastPeriod = params.fastPeriod;
72
- slowPeriod = params.slowPeriod;
73
- signalPeriod = params.signalPeriod;
74
- const fontSize = 11;
75
- const gap = 12;
76
- let x = 12;
77
- const y = yPaddingPx + fontSize;
78
- ctx.save();
79
- setCanvasFont(ctx, getFont(fontSize));
80
- ctx.textAlign = 'left';
81
- ctx.textBaseline = 'top';
82
- const paramText = `MACD(${fastPeriod},${slowPeriod},${signalPeriod})`;
83
- ctx.fillStyle = colors.text.tertiary;
84
- ctx.fillText(paramText, x, y);
85
- x += measureTextWidth(ctx, paramText) + gap;
86
- const difText = `DIF:${macdValue.dif.toFixed(2)}`;
87
- ctx.fillStyle = colors.macd.dif;
88
- ctx.fillText(difText, x, y);
89
- x += measureTextWidth(ctx, difText) + gap;
90
- const deaText = `DEA:${macdValue.dea.toFixed(2)}`;
91
- ctx.fillStyle = colors.macd.dea;
92
- ctx.fillText(deaText, x, y);
93
- x += measureTextWidth(ctx, deaText) + gap;
94
- const macdText = `MACD:${macdValue.macd.toFixed(2)}`;
95
- ctx.fillStyle = macdValue.macd >= 0 ? colors.macd.barUp : colors.macd.barDown;
96
- ctx.fillText(macdText, x, y);
97
- ctx.restore();
98
- },
99
- getConfig() {
100
- return {
101
- fastPeriod,
102
- slowPeriod,
103
- signalPeriod,
104
- };
105
- },
106
- setConfig(newConfig) {
107
- if (typeof newConfig.fastPeriod === 'number')
108
- fastPeriod = newConfig.fastPeriod;
109
- if (typeof newConfig.slowPeriod === 'number')
110
- slowPeriod = newConfig.slowPeriod;
111
- if (typeof newConfig.signalPeriod === 'number')
112
- signalPeriod = newConfig.signalPeriod;
113
- },
114
- };
115
- }
116
- //# sourceMappingURL=macdLegend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"macdLegend.js","sourceRoot":"","sources":["../../../../src/engine/renderers/Indicator/macdLegend.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * 副图指标配置表
3
- *
4
- * 定义各副图指标的默认参数和标题信息获取函数,
5
- * 由 KLineChart.vue 消费,集中管理避免散落在组件中。
6
- */
7
- import type { TitleInfo } from '../../renderers/paneTitle';
8
- import type { PluginHost } from '../../../plugin';
9
- import type { SubIndicatorType } from '../../renderers/Indicator';
10
- export interface SubPaneIndicatorConfig {
11
- defaultParams: Record<string, number | boolean | string>;
12
- getTitleInfo: (data: any[], index: number | null, params: Record<string, number | boolean | string>, pluginHost: PluginHost, paneId: string) => TitleInfo | null;
13
- }
14
- export declare const SUB_PANE_INDICATOR_CONFIGS: Record<string, SubPaneIndicatorConfig>;
15
- export declare const SUB_PANE_INDICATORS: SubIndicatorType[];
16
- //# sourceMappingURL=subPaneConfig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subPaneConfig.d.ts","sourceRoot":"","sources":["../../../../src/engine/renderers/Indicator/subPaneConfig.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAajE,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAA;IACxD,YAAY,EAAE,CACZ,IAAI,EAAE,GAAG,EAAE,EACX,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,EACjD,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,KACX,SAAS,GAAG,IAAI,CAAA;CACtB;AAED,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAqO7E,CAAA;AAED,eAAO,MAAM,mBAAmB,EAA8C,gBAAgB,EAAE,CAAA"}