minerva-design 1.4.0 → 1.5.0

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 (670) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +21 -21
  3. package/custom-elements.json +4047 -1703
  4. package/dist/angular/fesm2022/minerva-angular.mjs +1436 -5
  5. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  6. package/dist/angular/types/minerva-angular.d.ts +573 -4
  7. package/dist/charts/canvas.d.cts +2 -2
  8. package/dist/charts/canvas.d.ts +2 -2
  9. package/dist/charts/core.cjs +1 -1
  10. package/dist/charts/core.d.cts +6 -4
  11. package/dist/charts/core.d.ts +6 -4
  12. package/dist/charts/core.js +24 -16
  13. package/dist/charts/engine/axis.cjs +1 -1
  14. package/dist/charts/engine/axis.cjs.map +1 -1
  15. package/dist/charts/engine/axis.js +42 -19
  16. package/dist/charts/engine/axis.js.map +1 -1
  17. package/dist/charts/engine/canvas.cjs +1 -1
  18. package/dist/charts/engine/canvas.cjs.map +1 -1
  19. package/dist/charts/engine/canvas.js +154 -127
  20. package/dist/charts/engine/canvas.js.map +1 -1
  21. package/dist/charts/engine/chart.cjs +1 -1
  22. package/dist/charts/engine/chart.cjs.map +1 -1
  23. package/dist/charts/engine/chart.js +365 -251
  24. package/dist/charts/engine/chart.js.map +1 -1
  25. package/dist/charts/engine/color.cjs +1 -1
  26. package/dist/charts/engine/color.cjs.map +1 -1
  27. package/dist/charts/engine/color.d.cts +18 -0
  28. package/dist/charts/engine/color.d.ts +18 -0
  29. package/dist/charts/engine/color.js +48 -2
  30. package/dist/charts/engine/color.js.map +1 -1
  31. package/dist/charts/engine/controller.cjs +2 -2
  32. package/dist/charts/engine/controller.cjs.map +1 -1
  33. package/dist/charts/engine/controller.d.cts +32 -1
  34. package/dist/charts/engine/controller.d.ts +32 -1
  35. package/dist/charts/engine/controller.js +310 -263
  36. package/dist/charts/engine/controller.js.map +1 -1
  37. package/dist/charts/engine/data.cjs +1 -1
  38. package/dist/charts/engine/data.cjs.map +1 -1
  39. package/dist/charts/engine/data.d.cts +3 -1
  40. package/dist/charts/engine/data.d.ts +3 -1
  41. package/dist/charts/engine/data.js +6 -4
  42. package/dist/charts/engine/data.js.map +1 -1
  43. package/dist/charts/engine/defaults.cjs +2 -0
  44. package/dist/charts/engine/defaults.cjs.map +1 -0
  45. package/dist/charts/engine/defaults.d.cts +20 -0
  46. package/dist/charts/engine/defaults.d.ts +20 -0
  47. package/dist/charts/engine/defaults.js +35 -0
  48. package/dist/charts/engine/defaults.js.map +1 -0
  49. package/dist/charts/engine/format.cjs +1 -1
  50. package/dist/charts/engine/format.cjs.map +1 -1
  51. package/dist/charts/engine/format.d.cts +6 -0
  52. package/dist/charts/engine/format.d.ts +6 -0
  53. package/dist/charts/engine/format.js +15 -2
  54. package/dist/charts/engine/format.js.map +1 -1
  55. package/dist/charts/engine/graph/chart.cjs +2 -0
  56. package/dist/charts/engine/graph/chart.cjs.map +1 -0
  57. package/dist/charts/engine/graph/chart.d.cts +3 -0
  58. package/dist/charts/engine/graph/chart.d.ts +3 -0
  59. package/dist/charts/engine/graph/chart.js +1565 -0
  60. package/dist/charts/engine/graph/chart.js.map +1 -0
  61. package/dist/charts/engine/graph/circular.cjs +2 -0
  62. package/dist/charts/engine/graph/circular.cjs.map +1 -0
  63. package/dist/charts/engine/graph/circular.d.cts +16 -0
  64. package/dist/charts/engine/graph/circular.d.ts +16 -0
  65. package/dist/charts/engine/graph/circular.js +62 -0
  66. package/dist/charts/engine/graph/circular.js.map +1 -0
  67. package/dist/charts/engine/graph/dag.cjs +2 -0
  68. package/dist/charts/engine/graph/dag.cjs.map +1 -0
  69. package/dist/charts/engine/graph/dag.d.cts +34 -0
  70. package/dist/charts/engine/graph/dag.d.ts +34 -0
  71. package/dist/charts/engine/graph/dag.js +314 -0
  72. package/dist/charts/engine/graph/dag.js.map +1 -0
  73. package/dist/charts/engine/graph/dom.cjs +2 -0
  74. package/dist/charts/engine/graph/dom.cjs.map +1 -0
  75. package/dist/charts/engine/graph/dom.d.cts +23 -0
  76. package/dist/charts/engine/graph/dom.d.ts +23 -0
  77. package/dist/charts/engine/graph/dom.js +158 -0
  78. package/dist/charts/engine/graph/dom.js.map +1 -0
  79. package/dist/charts/engine/graph/force.cjs +2 -0
  80. package/dist/charts/engine/graph/force.cjs.map +1 -0
  81. package/dist/charts/engine/graph/force.d.cts +67 -0
  82. package/dist/charts/engine/graph/force.d.ts +67 -0
  83. package/dist/charts/engine/graph/force.js +325 -0
  84. package/dist/charts/engine/graph/force.js.map +1 -0
  85. package/dist/charts/engine/graph/geometry.cjs +2 -0
  86. package/dist/charts/engine/graph/geometry.cjs.map +1 -0
  87. package/dist/charts/engine/graph/geometry.d.cts +37 -0
  88. package/dist/charts/engine/graph/geometry.d.ts +37 -0
  89. package/dist/charts/engine/graph/geometry.js +144 -0
  90. package/dist/charts/engine/graph/geometry.js.map +1 -0
  91. package/dist/charts/engine/graph/index.cjs +1 -0
  92. package/dist/charts/engine/graph/index.d.cts +6 -0
  93. package/dist/charts/engine/graph/index.d.ts +6 -0
  94. package/dist/charts/engine/graph/index.js +6 -0
  95. package/dist/charts/engine/graph/labels.cjs +2 -0
  96. package/dist/charts/engine/graph/labels.cjs.map +1 -0
  97. package/dist/charts/engine/graph/labels.d.cts +12 -0
  98. package/dist/charts/engine/graph/labels.d.ts +12 -0
  99. package/dist/charts/engine/graph/labels.js +128 -0
  100. package/dist/charts/engine/graph/labels.js.map +1 -0
  101. package/dist/charts/engine/graph/model.cjs +2 -0
  102. package/dist/charts/engine/graph/model.cjs.map +1 -0
  103. package/dist/charts/engine/graph/model.d.cts +43 -0
  104. package/dist/charts/engine/graph/model.d.ts +43 -0
  105. package/dist/charts/engine/graph/model.js +88 -0
  106. package/dist/charts/engine/graph/model.js.map +1 -0
  107. package/dist/charts/engine/graph/sizing.cjs +2 -0
  108. package/dist/charts/engine/graph/sizing.cjs.map +1 -0
  109. package/dist/charts/engine/graph/sizing.d.cts +33 -0
  110. package/dist/charts/engine/graph/sizing.d.ts +33 -0
  111. package/dist/charts/engine/graph/sizing.js +60 -0
  112. package/dist/charts/engine/graph/sizing.js.map +1 -0
  113. package/dist/charts/engine/graph/tree.cjs +2 -0
  114. package/dist/charts/engine/graph/tree.cjs.map +1 -0
  115. package/dist/charts/engine/graph/tree.d.cts +30 -0
  116. package/dist/charts/engine/graph/tree.d.ts +30 -0
  117. package/dist/charts/engine/graph/tree.js +218 -0
  118. package/dist/charts/engine/graph/tree.js.map +1 -0
  119. package/dist/charts/engine/graph/types.d.cts +626 -0
  120. package/dist/charts/engine/graph/types.d.ts +626 -0
  121. package/dist/charts/engine/graph/worker.cjs +46 -0
  122. package/dist/charts/engine/graph/worker.cjs.map +1 -0
  123. package/dist/charts/engine/graph/worker.d.cts +36 -0
  124. package/dist/charts/engine/graph/worker.d.ts +36 -0
  125. package/dist/charts/engine/graph/worker.js +129 -0
  126. package/dist/charts/engine/graph/worker.js.map +1 -0
  127. package/dist/charts/engine/items.cjs +1 -1
  128. package/dist/charts/engine/items.cjs.map +1 -1
  129. package/dist/charts/engine/items.d.cts +15 -2
  130. package/dist/charts/engine/items.d.ts +15 -2
  131. package/dist/charts/engine/items.js +131 -112
  132. package/dist/charts/engine/items.js.map +1 -1
  133. package/dist/charts/engine/labels.cjs +1 -1
  134. package/dist/charts/engine/labels.cjs.map +1 -1
  135. package/dist/charts/engine/labels.js +28 -4
  136. package/dist/charts/engine/labels.js.map +1 -1
  137. package/dist/charts/engine/layout.cjs +1 -1
  138. package/dist/charts/engine/layout.cjs.map +1 -1
  139. package/dist/charts/engine/layout.d.cts +9 -0
  140. package/dist/charts/engine/layout.d.ts +9 -0
  141. package/dist/charts/engine/layout.js +11 -2
  142. package/dist/charts/engine/layout.js.map +1 -1
  143. package/dist/charts/engine/model.cjs +1 -1
  144. package/dist/charts/engine/model.cjs.map +1 -1
  145. package/dist/charts/engine/model.d.cts +40 -3
  146. package/dist/charts/engine/model.d.ts +40 -3
  147. package/dist/charts/engine/model.js +246 -165
  148. package/dist/charts/engine/model.js.map +1 -1
  149. package/dist/charts/engine/orderbook/format.cjs +1 -1
  150. package/dist/charts/engine/orderbook/format.cjs.map +1 -1
  151. package/dist/charts/engine/orderbook/format.d.cts +3 -2
  152. package/dist/charts/engine/orderbook/format.d.ts +3 -2
  153. package/dist/charts/engine/orderbook/format.js +5 -5
  154. package/dist/charts/engine/orderbook/format.js.map +1 -1
  155. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  156. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  157. package/dist/charts/engine/orderbook/heatmap.js +527 -408
  158. package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
  159. package/dist/charts/engine/orderbook/layout.cjs +2 -0
  160. package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
  161. package/dist/charts/engine/orderbook/layout.d.cts +37 -0
  162. package/dist/charts/engine/orderbook/layout.d.ts +37 -0
  163. package/dist/charts/engine/orderbook/layout.js +70 -0
  164. package/dist/charts/engine/orderbook/layout.js.map +1 -0
  165. package/dist/charts/engine/orderbook/tape.cjs +1 -1
  166. package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
  167. package/dist/charts/engine/orderbook/tape.js +1 -1
  168. package/dist/charts/engine/orderbook/tape.js.map +1 -1
  169. package/dist/charts/engine/orderbook/types.d.cts +18 -2
  170. package/dist/charts/engine/orderbook/types.d.ts +18 -2
  171. package/dist/charts/engine/overlay.cjs +1 -1
  172. package/dist/charts/engine/overlay.cjs.map +1 -1
  173. package/dist/charts/engine/overlay.d.cts +10 -0
  174. package/dist/charts/engine/overlay.d.ts +10 -0
  175. package/dist/charts/engine/overlay.js +6 -0
  176. package/dist/charts/engine/overlay.js.map +1 -1
  177. package/dist/charts/engine/presets.cjs +2 -2
  178. package/dist/charts/engine/presets.cjs.map +1 -1
  179. package/dist/charts/engine/presets.d.cts +25 -3
  180. package/dist/charts/engine/presets.d.ts +25 -3
  181. package/dist/charts/engine/presets.js +115 -101
  182. package/dist/charts/engine/presets.js.map +1 -1
  183. package/dist/charts/engine/renderers/detect.cjs +1 -1
  184. package/dist/charts/engine/renderers/detect.cjs.map +1 -1
  185. package/dist/charts/engine/renderers/detect.d.cts +2 -1
  186. package/dist/charts/engine/renderers/detect.d.ts +2 -1
  187. package/dist/charts/engine/renderers/detect.js +23 -21
  188. package/dist/charts/engine/renderers/detect.js.map +1 -1
  189. package/dist/charts/engine/scene.cjs +1 -1
  190. package/dist/charts/engine/scene.cjs.map +1 -1
  191. package/dist/charts/engine/scene.d.cts +57 -4
  192. package/dist/charts/engine/scene.d.ts +57 -4
  193. package/dist/charts/engine/scene.js +335 -182
  194. package/dist/charts/engine/scene.js.map +1 -1
  195. package/dist/charts/engine/shapes/bullet.cjs +1 -1
  196. package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
  197. package/dist/charts/engine/shapes/bullet.js +110 -110
  198. package/dist/charts/engine/shapes/bullet.js.map +1 -1
  199. package/dist/charts/engine/shapes/chart.cjs +1 -1
  200. package/dist/charts/engine/shapes/chart.cjs.map +1 -1
  201. package/dist/charts/engine/shapes/chart.js +4 -1
  202. package/dist/charts/engine/shapes/chart.js.map +1 -1
  203. package/dist/charts/engine/shapes/chord.cjs +2 -0
  204. package/dist/charts/engine/shapes/chord.cjs.map +1 -0
  205. package/dist/charts/engine/shapes/chord.d.cts +18 -0
  206. package/dist/charts/engine/shapes/chord.d.ts +18 -0
  207. package/dist/charts/engine/shapes/chord.js +414 -0
  208. package/dist/charts/engine/shapes/chord.js.map +1 -0
  209. package/dist/charts/engine/shapes/draw.cjs +1 -1
  210. package/dist/charts/engine/shapes/draw.cjs.map +1 -1
  211. package/dist/charts/engine/shapes/draw.d.cts +5 -1
  212. package/dist/charts/engine/shapes/draw.d.ts +5 -1
  213. package/dist/charts/engine/shapes/draw.js +47 -17
  214. package/dist/charts/engine/shapes/draw.js.map +1 -1
  215. package/dist/charts/engine/shapes/hit.cjs +1 -1
  216. package/dist/charts/engine/shapes/hit.cjs.map +1 -1
  217. package/dist/charts/engine/shapes/hit.d.cts +3 -1
  218. package/dist/charts/engine/shapes/hit.d.ts +3 -1
  219. package/dist/charts/engine/shapes/hit.js +75 -46
  220. package/dist/charts/engine/shapes/hit.js.map +1 -1
  221. package/dist/charts/engine/shapes/index.d.cts +3 -2
  222. package/dist/charts/engine/shapes/index.d.ts +3 -2
  223. package/dist/charts/engine/shapes/labels.cjs +1 -1
  224. package/dist/charts/engine/shapes/labels.cjs.map +1 -1
  225. package/dist/charts/engine/shapes/labels.js +12 -4
  226. package/dist/charts/engine/shapes/labels.js.map +1 -1
  227. package/dist/charts/engine/shapes/layout.cjs +2 -2
  228. package/dist/charts/engine/shapes/layout.cjs.map +1 -1
  229. package/dist/charts/engine/shapes/layout.d.cts +3 -1
  230. package/dist/charts/engine/shapes/layout.d.ts +3 -1
  231. package/dist/charts/engine/shapes/layout.js +106 -78
  232. package/dist/charts/engine/shapes/layout.js.map +1 -1
  233. package/dist/charts/engine/shapes/scene.cjs +1 -1
  234. package/dist/charts/engine/shapes/scene.cjs.map +1 -1
  235. package/dist/charts/engine/shapes/scene.d.cts +33 -3
  236. package/dist/charts/engine/shapes/scene.d.ts +33 -3
  237. package/dist/charts/engine/shapes/scene.js +62 -19
  238. package/dist/charts/engine/shapes/scene.js.map +1 -1
  239. package/dist/charts/engine/shapes/types.d.cts +119 -8
  240. package/dist/charts/engine/shapes/types.d.ts +119 -8
  241. package/dist/charts/engine/signature.cjs +1 -1
  242. package/dist/charts/engine/signature.cjs.map +1 -1
  243. package/dist/charts/engine/signature.js +1 -1
  244. package/dist/charts/engine/signature.js.map +1 -1
  245. package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
  246. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
  247. package/dist/charts/engine/three-d/canvas2d.d.cts +5 -2
  248. package/dist/charts/engine/three-d/canvas2d.d.ts +5 -2
  249. package/dist/charts/engine/three-d/canvas2d.js +89 -65
  250. package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
  251. package/dist/charts/engine/three-d/detect.cjs +1 -1
  252. package/dist/charts/engine/three-d/detect.cjs.map +1 -1
  253. package/dist/charts/engine/three-d/detect.d.cts +3 -2
  254. package/dist/charts/engine/three-d/detect.d.ts +3 -2
  255. package/dist/charts/engine/three-d/detect.js +22 -20
  256. package/dist/charts/engine/three-d/detect.js.map +1 -1
  257. package/dist/charts/engine/three-d/geometry.cjs +1 -1
  258. package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
  259. package/dist/charts/engine/three-d/geometry.d.cts +6 -0
  260. package/dist/charts/engine/three-d/geometry.d.ts +6 -0
  261. package/dist/charts/engine/three-d/geometry.js +106 -90
  262. package/dist/charts/engine/three-d/geometry.js.map +1 -1
  263. package/dist/charts/engine/three-d/model.cjs +1 -1
  264. package/dist/charts/engine/three-d/model.cjs.map +1 -1
  265. package/dist/charts/engine/three-d/model.d.cts +2 -0
  266. package/dist/charts/engine/three-d/model.d.ts +2 -0
  267. package/dist/charts/engine/three-d/model.js +2 -0
  268. package/dist/charts/engine/three-d/model.js.map +1 -1
  269. package/dist/charts/engine/three-d/overlay.cjs +1 -1
  270. package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
  271. package/dist/charts/engine/three-d/overlay.js +43 -36
  272. package/dist/charts/engine/three-d/overlay.js.map +1 -1
  273. package/dist/charts/engine/three-d/render-types.cjs +1 -1
  274. package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
  275. package/dist/charts/engine/three-d/render-types.d.cts +24 -3
  276. package/dist/charts/engine/three-d/render-types.d.ts +24 -3
  277. package/dist/charts/engine/three-d/render-types.js +6 -7
  278. package/dist/charts/engine/three-d/render-types.js.map +1 -1
  279. package/dist/charts/engine/three-d/shaders.cjs +63 -28
  280. package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
  281. package/dist/charts/engine/three-d/shaders.d.cts +2 -3
  282. package/dist/charts/engine/three-d/shaders.d.ts +2 -3
  283. package/dist/charts/engine/three-d/shaders.js +41 -22
  284. package/dist/charts/engine/three-d/shaders.js.map +1 -1
  285. package/dist/charts/engine/three-d/sort.cjs +1 -1
  286. package/dist/charts/engine/three-d/sort.cjs.map +1 -1
  287. package/dist/charts/engine/three-d/sort.d.cts +15 -4
  288. package/dist/charts/engine/three-d/sort.d.ts +15 -4
  289. package/dist/charts/engine/three-d/sort.js +117 -43
  290. package/dist/charts/engine/three-d/sort.js.map +1 -1
  291. package/dist/charts/engine/three-d/types.d.cts +27 -0
  292. package/dist/charts/engine/three-d/types.d.ts +27 -0
  293. package/dist/charts/engine/three-d/webgl.cjs +1 -1
  294. package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
  295. package/dist/charts/engine/three-d/webgl.js +15 -13
  296. package/dist/charts/engine/three-d/webgl.js.map +1 -1
  297. package/dist/charts/engine/three-d/webgpu.cjs +1 -1
  298. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
  299. package/dist/charts/engine/three-d/webgpu.js +50 -39
  300. package/dist/charts/engine/three-d/webgpu.js.map +1 -1
  301. package/dist/charts/engine/trading/chart.cjs +1 -1
  302. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  303. package/dist/charts/engine/trading/chart.d.cts +10 -0
  304. package/dist/charts/engine/trading/chart.d.ts +10 -0
  305. package/dist/charts/engine/trading/chart.js +1475 -776
  306. package/dist/charts/engine/trading/chart.js.map +1 -1
  307. package/dist/charts/engine/trading/drawings.cjs +2 -1
  308. package/dist/charts/engine/trading/drawings.cjs.map +1 -1
  309. package/dist/charts/engine/trading/drawings.d.cts +47 -9
  310. package/dist/charts/engine/trading/drawings.d.ts +47 -9
  311. package/dist/charts/engine/trading/drawings.js +338 -75
  312. package/dist/charts/engine/trading/drawings.js.map +1 -1
  313. package/dist/charts/engine/trading/format.cjs +1 -1
  314. package/dist/charts/engine/trading/format.cjs.map +1 -1
  315. package/dist/charts/engine/trading/format.d.cts +13 -0
  316. package/dist/charts/engine/trading/format.d.ts +13 -0
  317. package/dist/charts/engine/trading/format.js +51 -19
  318. package/dist/charts/engine/trading/format.js.map +1 -1
  319. package/dist/charts/engine/trading/index.cjs +1 -1
  320. package/dist/charts/engine/trading/index.d.cts +2 -1
  321. package/dist/charts/engine/trading/index.d.ts +2 -1
  322. package/dist/charts/engine/trading/index.js +4 -3
  323. package/dist/charts/engine/trading/indicators.cjs +1 -1
  324. package/dist/charts/engine/trading/indicators.cjs.map +1 -1
  325. package/dist/charts/engine/trading/indicators.d.cts +180 -10
  326. package/dist/charts/engine/trading/indicators.d.ts +180 -10
  327. package/dist/charts/engine/trading/indicators.js +449 -173
  328. package/dist/charts/engine/trading/indicators.js.map +1 -1
  329. package/dist/charts/engine/trading/labels.cjs +1 -1
  330. package/dist/charts/engine/trading/labels.cjs.map +1 -1
  331. package/dist/charts/engine/trading/labels.js +84 -4
  332. package/dist/charts/engine/trading/labels.js.map +1 -1
  333. package/dist/charts/engine/trading/store.cjs +1 -1
  334. package/dist/charts/engine/trading/store.cjs.map +1 -1
  335. package/dist/charts/engine/trading/store.d.cts +21 -0
  336. package/dist/charts/engine/trading/store.d.ts +21 -0
  337. package/dist/charts/engine/trading/store.js +22 -1
  338. package/dist/charts/engine/trading/store.js.map +1 -1
  339. package/dist/charts/engine/trading/studies.cjs +1 -1
  340. package/dist/charts/engine/trading/studies.cjs.map +1 -1
  341. package/dist/charts/engine/trading/studies.d.cts +41 -8
  342. package/dist/charts/engine/trading/studies.d.ts +41 -8
  343. package/dist/charts/engine/trading/studies.js +349 -93
  344. package/dist/charts/engine/trading/studies.js.map +1 -1
  345. package/dist/charts/engine/trading/sync.cjs +2 -0
  346. package/dist/charts/engine/trading/sync.cjs.map +1 -0
  347. package/dist/charts/engine/trading/sync.d.cts +8 -0
  348. package/dist/charts/engine/trading/sync.d.ts +8 -0
  349. package/dist/charts/engine/trading/sync.js +25 -0
  350. package/dist/charts/engine/trading/sync.js.map +1 -0
  351. package/dist/charts/engine/trading/types.d.cts +484 -9
  352. package/dist/charts/engine/trading/types.d.ts +484 -9
  353. package/dist/charts/engine/types.d.cts +82 -8
  354. package/dist/charts/engine/types.d.ts +82 -8
  355. package/dist/charts/index.cjs +1 -1
  356. package/dist/charts/index.d.cts +3 -2
  357. package/dist/charts/index.d.ts +3 -2
  358. package/dist/charts/index.js +30 -22
  359. package/dist/charts/react/charts.cjs +1 -1
  360. package/dist/charts/react/charts.cjs.map +1 -1
  361. package/dist/charts/react/charts.js +46 -34
  362. package/dist/charts/react/charts.js.map +1 -1
  363. package/dist/charts/react/graph.cjs +2 -0
  364. package/dist/charts/react/graph.cjs.map +1 -0
  365. package/dist/charts/react/graph.d.cts +213 -0
  366. package/dist/charts/react/graph.d.ts +213 -0
  367. package/dist/charts/react/graph.js +159 -0
  368. package/dist/charts/react/graph.js.map +1 -0
  369. package/dist/charts/react/shapes.cjs +1 -1
  370. package/dist/charts/react/shapes.cjs.map +1 -1
  371. package/dist/charts/react/shapes.d.cts +87 -4
  372. package/dist/charts/react/shapes.d.ts +87 -4
  373. package/dist/charts/react/shapes.js +55 -12
  374. package/dist/charts/react/shapes.js.map +1 -1
  375. package/dist/charts/react/trading.cjs +1 -1
  376. package/dist/charts/react/trading.cjs.map +1 -1
  377. package/dist/charts/react/trading.d.cts +53 -1
  378. package/dist/charts/react/trading.d.ts +53 -1
  379. package/dist/charts/react/trading.js +68 -37
  380. package/dist/charts/react/trading.js.map +1 -1
  381. package/dist/charts/react/types.d.cts +11 -0
  382. package/dist/charts/react/types.d.ts +11 -0
  383. package/dist/core/contracts.cjs +1 -1
  384. package/dist/core/contracts.cjs.map +1 -1
  385. package/dist/core/contracts.js +1 -1
  386. package/dist/core/contracts.js.map +1 -1
  387. package/dist/native/charts/src/canvas.cjs +1 -1
  388. package/dist/native/charts/src/canvas.js +3 -3
  389. package/dist/native/charts/src/engine/axis.cjs +1 -1
  390. package/dist/native/charts/src/engine/axis.cjs.map +1 -1
  391. package/dist/native/charts/src/engine/axis.js +42 -19
  392. package/dist/native/charts/src/engine/axis.js.map +1 -1
  393. package/dist/native/charts/src/engine/color.cjs +1 -1
  394. package/dist/native/charts/src/engine/color.cjs.map +1 -1
  395. package/dist/native/charts/src/engine/color.js +47 -5
  396. package/dist/native/charts/src/engine/color.js.map +1 -1
  397. package/dist/native/charts/src/engine/controller.cjs +2 -2
  398. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  399. package/dist/native/charts/src/engine/controller.js +300 -253
  400. package/dist/native/charts/src/engine/controller.js.map +1 -1
  401. package/dist/native/charts/src/engine/data.cjs +1 -1
  402. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  403. package/dist/native/charts/src/engine/data.js +6 -4
  404. package/dist/native/charts/src/engine/data.js.map +1 -1
  405. package/dist/native/charts/src/engine/format.cjs +1 -1
  406. package/dist/native/charts/src/engine/format.cjs.map +1 -1
  407. package/dist/native/charts/src/engine/format.js +15 -2
  408. package/dist/native/charts/src/engine/format.js.map +1 -1
  409. package/dist/native/charts/src/engine/labels.cjs +1 -1
  410. package/dist/native/charts/src/engine/labels.cjs.map +1 -1
  411. package/dist/native/charts/src/engine/labels.js +28 -4
  412. package/dist/native/charts/src/engine/labels.js.map +1 -1
  413. package/dist/native/charts/src/engine/layout.cjs +1 -1
  414. package/dist/native/charts/src/engine/layout.cjs.map +1 -1
  415. package/dist/native/charts/src/engine/layout.js +11 -2
  416. package/dist/native/charts/src/engine/layout.js.map +1 -1
  417. package/dist/native/charts/src/engine/model.cjs +1 -1
  418. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  419. package/dist/native/charts/src/engine/model.js +252 -171
  420. package/dist/native/charts/src/engine/model.js.map +1 -1
  421. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  422. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  423. package/dist/native/charts/src/engine/presets.cjs +2 -2
  424. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  425. package/dist/native/charts/src/engine/presets.js +104 -90
  426. package/dist/native/charts/src/engine/presets.js.map +1 -1
  427. package/dist/native/charts/src/engine/scene.cjs +1 -1
  428. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  429. package/dist/native/charts/src/engine/scene.js +341 -188
  430. package/dist/native/charts/src/engine/scene.js.map +1 -1
  431. package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
  432. package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
  433. package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
  434. package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
  435. package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
  436. package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
  437. package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
  438. package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
  439. package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
  440. package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
  441. package/dist/native/charts/src/engine/shapes/chord.js +414 -0
  442. package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
  443. package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
  444. package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
  445. package/dist/native/charts/src/engine/shapes/draw.js +47 -17
  446. package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
  447. package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
  448. package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
  449. package/dist/native/charts/src/engine/shapes/hit.js +73 -44
  450. package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
  451. package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
  452. package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
  453. package/dist/native/charts/src/engine/shapes/labels.js +12 -4
  454. package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
  455. package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
  456. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
  457. package/dist/native/charts/src/engine/shapes/layout.js +117 -90
  458. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
  459. package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
  460. package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
  461. package/dist/native/charts/src/engine/shapes/scene.js +62 -19
  462. package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
  463. package/dist/native/components/Chart/scene.cjs +1 -1
  464. package/dist/native/components/Chart/scene.cjs.map +1 -1
  465. package/dist/native/components/Chart/scene.js +140 -71
  466. package/dist/native/components/Chart/scene.js.map +1 -1
  467. package/dist/native/components/Charts/charts.cjs +1 -1
  468. package/dist/native/components/Charts/charts.cjs.map +1 -1
  469. package/dist/native/components/Charts/charts.js +54 -42
  470. package/dist/native/components/Charts/charts.js.map +1 -1
  471. package/dist/native/components/Charts/types.d.cts +11 -0
  472. package/dist/native/components/Charts/types.d.ts +11 -0
  473. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
  474. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
  475. package/dist/native/components/ShapeChart/ShapeChartBase.js +1 -0
  476. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
  477. package/dist/native/components/ShapeChart/charts.cjs +1 -1
  478. package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
  479. package/dist/native/components/ShapeChart/charts.d.cts +6 -1
  480. package/dist/native/components/ShapeChart/charts.d.ts +6 -1
  481. package/dist/native/components/ShapeChart/charts.js +138 -96
  482. package/dist/native/components/ShapeChart/charts.js.map +1 -1
  483. package/dist/native/components/ShapeChart/draw.cjs +1 -1
  484. package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
  485. package/dist/native/components/ShapeChart/draw.d.cts +1 -1
  486. package/dist/native/components/ShapeChart/draw.d.ts +1 -1
  487. package/dist/native/components/ShapeChart/draw.js +26 -17
  488. package/dist/native/components/ShapeChart/draw.js.map +1 -1
  489. package/dist/native/components/ShapeChart/geometry.cjs +1 -1
  490. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
  491. package/dist/native/components/ShapeChart/geometry.js +138 -59
  492. package/dist/native/components/ShapeChart/geometry.js.map +1 -1
  493. package/dist/native/components/ShapeChart/index.cjs +1 -1
  494. package/dist/native/components/ShapeChart/index.d.cts +1 -1
  495. package/dist/native/components/ShapeChart/index.d.ts +1 -1
  496. package/dist/native/components/ShapeChart/index.js +2 -2
  497. package/dist/native/components/ShapeChart/recorder.cjs +1 -1
  498. package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
  499. package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
  500. package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
  501. package/dist/native/components/ShapeChart/recorder.js +19 -10
  502. package/dist/native/components/ShapeChart/recorder.js.map +1 -1
  503. package/dist/native/components/ShapeChart/types.d.cts +92 -7
  504. package/dist/native/components/ShapeChart/types.d.ts +92 -7
  505. package/dist/native/index.cjs +1 -1
  506. package/dist/native/index.js +2 -2
  507. package/dist/native/source/components/Chart/scene.tsx +158 -14
  508. package/dist/native/source/components/Charts/charts.tsx +30 -2
  509. package/dist/native/source/components/Charts/types.ts +11 -0
  510. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +2 -0
  511. package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
  512. package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
  513. package/dist/native/source/components/ShapeChart/geometry.ts +189 -8
  514. package/dist/native/source/components/ShapeChart/index.ts +1 -0
  515. package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
  516. package/dist/native/source/components/ShapeChart/types.ts +96 -5
  517. package/dist/native/source/manifest.ts +1 -0
  518. package/dist/taro/charts.d.ts +25 -5
  519. package/dist/taro/index.js +3900 -2836
  520. package/dist/taro/shape-charts.d.ts +96 -4
  521. package/dist/uni/AreaChart.vue.d.ts +5 -1
  522. package/dist/uni/Badge.vue.d.ts +1 -1
  523. package/dist/uni/BarChart.vue.d.ts +5 -1
  524. package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
  525. package/dist/uni/BubbleChart.vue.d.ts +4 -0
  526. package/dist/uni/BulletChart.vue.d.ts +4 -0
  527. package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
  528. package/dist/uni/CandlestickChart.vue.d.ts +4 -0
  529. package/dist/uni/Chart.vue.d.ts +4 -0
  530. package/dist/uni/ChordChart.vue +93 -0
  531. package/dist/uni/ChordChart.vue.d.ts +136 -0
  532. package/dist/uni/DonutChart.vue.d.ts +4 -0
  533. package/dist/uni/FunnelChart.vue.d.ts +4 -0
  534. package/dist/uni/GanttChart.vue.d.ts +4 -0
  535. package/dist/uni/GaugeChart.vue.d.ts +4 -0
  536. package/dist/uni/HeatmapChart.vue.d.ts +8 -2
  537. package/dist/uni/HistogramChart.vue.d.ts +4 -0
  538. package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
  539. package/dist/uni/LineChart.vue.d.ts +4 -0
  540. package/dist/uni/MixedChart.vue.d.ts +4 -0
  541. package/dist/uni/PieChart.vue.d.ts +4 -0
  542. package/dist/uni/QuadrantChart.vue.d.ts +4 -0
  543. package/dist/uni/RadarChart.vue.d.ts +4 -0
  544. package/dist/uni/RadialBarChart.vue.d.ts +4 -0
  545. package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
  546. package/dist/uni/SankeyChart.vue.d.ts +4 -0
  547. package/dist/uni/ScatterChart.vue.d.ts +4 -0
  548. package/dist/uni/Sparkline.vue.d.ts +4 -0
  549. package/dist/uni/SunburstChart.vue.d.ts +4 -0
  550. package/dist/uni/ToastProvider.vue.d.ts +1 -1
  551. package/dist/uni/TreemapChart.vue.d.ts +4 -0
  552. package/dist/uni/WaterfallChart.vue.d.ts +9 -0
  553. package/dist/uni/chart-canvas.d.ts +3 -0
  554. package/dist/uni/chart-canvas.js +4 -0
  555. package/dist/uni/chart-types.d.ts +28 -4
  556. package/dist/uni/chart-types.js +26 -2
  557. package/dist/uni/charts-canvas.js +1 -1
  558. package/dist/uni/index.d.ts +2 -1
  559. package/dist/uni/index.js +1 -0
  560. package/dist/uni/manifest.d.ts +7 -0
  561. package/dist/uni/manifest.js +10 -0
  562. package/dist/uni/named-chart-options.d.ts +9 -2
  563. package/dist/uni/named-chart-options.js +18 -1
  564. package/dist/uni/shape-chart-canvas.d.ts +3 -1
  565. package/dist/uni/shape-chart-canvas.js +15 -24
  566. package/dist/uni/shape-chart-types.d.ts +52 -2
  567. package/dist/uni/shape-chart-types.js +44 -0
  568. package/dist/vue/charts-global.d.ts +48 -0
  569. package/dist/vue/charts.d.ts +18 -0
  570. package/dist/vue/charts.js +56 -0
  571. package/dist/vue/charts.js.map +1 -0
  572. package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
  573. package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
  574. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
  575. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  576. package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
  577. package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
  578. package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
  579. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
  580. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  581. package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +179 -0
  582. package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
  583. package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
  584. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
  585. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
  586. package/dist/vue/components/Chart/GanttChart.vue.d.ts +4 -0
  587. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
  588. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +4 -1
  589. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  590. package/dist/vue/components/Chart/GraphChart.vue.d.ts +184 -0
  591. package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
  592. package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
  593. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
  594. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  595. package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
  596. package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
  597. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
  598. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  599. package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
  600. package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
  601. package/dist/vue/components/Chart/TradingChart.vue.d.ts +49 -1
  602. package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
  603. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
  604. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  605. package/dist/vue/components/Chart/TreeChart.vue.d.ts +172 -0
  606. package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
  607. package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
  608. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
  609. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  610. package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
  611. package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
  612. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
  613. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  614. package/dist/vue/components/Chart/graph.d.ts +153 -0
  615. package/dist/vue/components/Chart/graph.js +135 -0
  616. package/dist/vue/components/Chart/graph.js.map +1 -0
  617. package/dist/vue/components/Chart/index.d.ts +5 -1
  618. package/dist/vue/components/Chart/index.js +5 -1
  619. package/dist/vue/components/Chart/orderbook.d.ts +5 -1
  620. package/dist/vue/components/Chart/orderbook.js +2 -0
  621. package/dist/vue/components/Chart/orderbook.js.map +1 -1
  622. package/dist/vue/components/Chart/trading.d.ts +24 -2
  623. package/dist/vue/components/Chart/trading.js +8 -0
  624. package/dist/vue/components/Chart/trading.js.map +1 -1
  625. package/dist/vue/components/Chart/types.d.ts +74 -2
  626. package/dist/vue/global.d.ts +2 -38
  627. package/dist/vue/groups/charts.js +10 -2
  628. package/dist/vue/groups/charts.js.map +1 -1
  629. package/dist/vue/index.js +6 -2
  630. package/dist/vue/internal/register.d.ts +7 -0
  631. package/dist/vue/internal/register.js +14 -0
  632. package/dist/vue/internal/register.js.map +1 -0
  633. package/dist/vue/plugin.d.ts +9 -4
  634. package/dist/vue/plugin.js +6 -11
  635. package/dist/vue/plugin.js.map +1 -1
  636. package/dist/weapp/charts/canvas.js +1687 -147
  637. package/dist/weapp/charts/core.js +1 -0
  638. package/dist/weapp/chord-chart/index.js +1 -0
  639. package/dist/weapp/chord-chart/index.json +1 -0
  640. package/dist/weapp/chord-chart/index.wxml +1 -0
  641. package/dist/weapp/chord-chart/index.wxss +1 -0
  642. package/dist/weapp/controls.js +92 -32
  643. package/dist/weapp/types.d.ts +87 -4
  644. package/dist/web-components/components/chart/charts.d.ts +4 -2
  645. package/dist/web-components/components/chart/charts.js +8 -1
  646. package/dist/web-components/components/chart/charts.js.map +1 -1
  647. package/dist/web-components/components/chart/extended.d.ts +17 -7
  648. package/dist/web-components/components/chart/extended.js +23 -9
  649. package/dist/web-components/components/chart/extended.js.map +1 -1
  650. package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
  651. package/dist/web-components/components/chart/shapes-extended.js +27 -1
  652. package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
  653. package/dist/web-components/components/graph/graph.d.ts +154 -0
  654. package/dist/web-components/components/graph/graph.js +149 -0
  655. package/dist/web-components/components/graph/graph.js.map +1 -0
  656. package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
  657. package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
  658. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
  659. package/dist/web-components/elements/chart.d.ts +1 -1
  660. package/dist/web-components/elements/chart.js +6 -5
  661. package/dist/web-components/elements/chart.js.map +1 -1
  662. package/dist/web-components/elements/graph.d.ts +2 -0
  663. package/dist/web-components/elements/graph.js +12 -0
  664. package/dist/web-components/elements/graph.js.map +1 -0
  665. package/dist/web-components/html-custom-data.json +273 -4
  666. package/dist/web-components/types/react.d.ts +63 -4
  667. package/dist/web-components/types/solid.d.ts +55 -8
  668. package/dist/web-components/types/svelte.d.ts +55 -8
  669. package/dist/web-components/types/vue.d.ts +55 -4
  670. package/package.json +16 -1
@@ -1 +1 @@
1
- {"version":3,"file":"studies.js","names":["LINE_COLORS","VIOLET","INFO","WARNING","indicatorKey","indicator","sourceInto","store","i","from","source","open","high","low","close","columnPool","columns","current","name","capacity","next","output","createStudy","column","paneHeight","config","base","bind","names","period","label","kernel","smaInto","emaInto","wmaInto","study","colorIndex","src","k","mid","up","dev","m","u","l","o","stdevInto","reset","vwapInto","utcOffset","maPeriod","outputs","v","fast","slow","signal","lineColor","signalColor","n","f","s","hist","dif","dea","rsiInto","kp","dp","kc","dc","jc","d","j","tr","trueRangeInto","rmaInto","buildStudies","used","reused","averages","indicators","id","old","previous","sameConfig","a","b","keys","key","va","vb"],"sources":["../../../../../charts/src/engine/trading/studies.ts"],"sourcesContent":["// Indicators of a chart: built from the declarative options, computed into\n// columns as large as the bar store, and recomputed from the first changed\n// bar only (a tick recomputes one value per output).\n\nimport {\n emaInto,\n kdjInto,\n rmaInto,\n rsiInto,\n smaInto,\n stdevInto,\n trueRangeInto,\n vwapInto,\n wmaInto,\n} from \"./indicators\";\nimport type { BarStore } from \"./store\";\nimport type { TradingIndicator, TradingPriceSource } from \"./types\";\n\n/** How an output is drawn */\nexport type StudyOutputKind = \"line\" | \"histogram\" | \"volume\";\n\nexport interface StudyOutput {\n /** Legend label (`\"MA7\"`, `\"DIF\"`) */\n label: string;\n values: Float64Array;\n /** CSS color (may be a `var()`) */\n color: string;\n kind: StudyOutputKind;\n width: number;\n}\n\nexport interface Study {\n id: string;\n type: TradingIndicator[\"type\"];\n config: TradingIndicator;\n /** Drawn over the price (else in its own pane) */\n overlay: boolean;\n /** Legend title (`\"MACD 12 26 9\"`) */\n title: string;\n outputs: StudyOutput[];\n /** Fixed value range of the pane (RSI) */\n range?: readonly [number, number];\n /** Horizontal reference lines (RSI 30 / 70, KDJ 20 / 80, MACD 0) */\n bands?: readonly number[];\n /** Output indices filled between (Bollinger bands) */\n fill?: readonly [number, number];\n /** Default height of its pane */\n height: number;\n /** Values formatted as volumes (compact) rather than prices */\n compact: boolean;\n /** Recomputes the outputs from bar `from` on */\n compute(store: BarStore, from: number): void;\n}\n\n/** Default line colors: vivid hues readable on light and dark backgrounds */\nexport const LINE_COLORS = [\n \"#f59e0b\",\n \"#a855f7\",\n \"#0ea5e9\",\n \"#ec4899\",\n \"#14b8a6\",\n \"#6366f1\",\n \"#84cc16\",\n];\n\nconst VIOLET = \"#a855f7\";\nconst INFO = \"#0ea5e9\";\nconst WARNING = \"#f59e0b\";\n\n/** Default id of an indicator: its type and parameters */\nexport const indicatorKey = (indicator: TradingIndicator): string => {\n switch (indicator.type) {\n case \"ma\":\n case \"ema\":\n case \"wma\":\n return `${indicator.type}:${indicator.period}${\n indicator.source && indicator.source !== \"close\"\n ? `:${indicator.source}`\n : \"\"\n }`;\n case \"boll\":\n return `boll:${indicator.period ?? 20}:${indicator.multiplier ?? 2}`;\n case \"vwap\":\n return `vwap:${indicator.reset ?? \"day\"}`;\n case \"volume\":\n return \"volume\";\n case \"macd\":\n return `macd:${indicator.fast ?? 12}:${indicator.slow ?? 26}:${indicator.signal ?? 9}`;\n case \"rsi\":\n return `rsi:${indicator.period ?? 14}`;\n case \"kdj\":\n return `kdj:${indicator.period ?? 9}:${indicator.kPeriod ?? 3}:${indicator.dPeriod ?? 3}`;\n default:\n return `atr:${indicator.period ?? 14}`;\n }\n};\n\n/** Writes the price `source` of bars `from..n` into `out` */\nconst sourceInto = (\n store: BarStore,\n source: TradingPriceSource,\n out: Float64Array,\n from: number,\n) => {\n const { open, high, low, close } = store;\n for (let i = from; i < store.length; i++) {\n switch (source) {\n case \"open\":\n out[i] = open[i];\n break;\n case \"high\":\n out[i] = high[i];\n break;\n case \"low\":\n out[i] = low[i];\n break;\n case \"hl2\":\n out[i] = (high[i] + low[i]) / 2;\n break;\n case \"hlc3\":\n out[i] = (high[i] + low[i] + close[i]) / 3;\n break;\n case \"ohlc4\":\n out[i] = (open[i] + high[i] + low[i] + close[i]) / 4;\n break;\n default:\n out[i] = close[i];\n }\n }\n};\n\n/**\n * Column set that grows with the store: `get(name)` returns a column of at\n * least `capacity` values, keeping the computed ones\n */\nconst columnPool = () => {\n const columns = new Map<string, Float64Array>();\n return (name: string, capacity: number): Float64Array => {\n const current = columns.get(name);\n if (current && current.length >= capacity) return current;\n const next = new Float64Array(capacity).fill(NaN);\n if (current) next.set(current);\n columns.set(name, next);\n return next;\n };\n};\n\nconst output = (\n label: string,\n color: string,\n kind: StudyOutputKind = \"line\",\n width = 1.5,\n): StudyOutput => ({\n label,\n values: new Float64Array(0),\n color,\n kind,\n width,\n});\n\n/**\n * Builds the runtime of an indicator. `colorIndex` picks the default color\n * of moving averages (one per average).\n */\nexport const createStudy = (\n config: TradingIndicator,\n id: string,\n colorIndex: number,\n utcOffset: number,\n): Study => {\n const column = columnPool();\n const paneHeight = \"height\" in config && config.height ? config.height : 110;\n const base = {\n id,\n type: config.type,\n config,\n height: paneHeight,\n compact: false,\n };\n /** Attaches the output columns (grown with the store) before computing */\n const bind = (study: Study, store: BarStore, names: string[]) => {\n study.outputs.forEach((o, i) => {\n o.values = column(names[i] ?? `out${i}`, store.capacity);\n });\n };\n\n switch (config.type) {\n case \"ma\":\n case \"ema\":\n case \"wma\": {\n const period = Math.max(1, Math.floor(config.period) || 1);\n const source = config.source ?? \"close\";\n const label = `${config.type.toUpperCase()}${period}`;\n const kernel =\n config.type === \"ma\"\n ? smaInto\n : config.type === \"ema\"\n ? emaInto\n : wmaInto;\n const study: Study = {\n ...base,\n overlay: true,\n title: label,\n outputs: [\n output(\n label,\n config.color ?? LINE_COLORS[colorIndex % LINE_COLORS.length],\n \"line\",\n config.lineWidth ?? 1.5,\n ),\n ],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n let src: Float64Array = store.close;\n if (source !== \"close\") {\n src = column(\"src\", store.capacity);\n sourceInto(store, source, src, from);\n }\n kernel(src, store.length, period, study.outputs[0].values, from);\n },\n };\n return study;\n }\n case \"boll\": {\n const period = config.period ?? 20;\n const k = config.multiplier ?? 2;\n const [mid, up, low] = config.colors ?? [WARNING, INFO, INFO];\n const study: Study = {\n ...base,\n overlay: true,\n title: `BOLL ${period} ${k}`,\n outputs: [\n output(\"MID\", mid ?? WARNING, \"line\", 1.25),\n output(\"UB\", up ?? INFO, \"line\", 1.25),\n output(\"LB\", low ?? up ?? INFO, \"line\", 1.25),\n ],\n ...(config.fill === false ? {} : { fill: [1, 2] as const }),\n compute(store, from) {\n bind(study, store, [\"mid\", \"up\", \"low\"]);\n const dev = column(\"dev\", store.capacity);\n const [m, u, l] = study.outputs.map((o) => o.values);\n smaInto(store.close, store.length, period, m, from);\n stdevInto(store.close, store.length, period, dev, from);\n for (let i = from; i < store.length; i++) {\n u[i] = m[i] + k * dev[i];\n l[i] = m[i] - k * dev[i];\n }\n },\n };\n return study;\n }\n case \"vwap\": {\n const reset = config.reset ?? \"day\";\n const study: Study = {\n ...base,\n overlay: true,\n title: \"VWAP\",\n outputs: [output(\"VWAP\", config.color ?? \"#ec4899\", \"line\", 1.5)],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n vwapInto(\n store.high,\n store.low,\n store.close,\n store.volume,\n store.time,\n store.length,\n reset,\n utcOffset,\n study.outputs[0].values,\n column(\"pv\", store.capacity),\n column(\"vol\", store.capacity),\n from,\n );\n },\n };\n return study;\n }\n case \"volume\": {\n const maPeriod = config.maPeriod;\n const outputs = [output(\"VOL\", \"\", \"volume\")];\n if (maPeriod) outputs.push(output(`MA${maPeriod}`, INFO, \"line\", 1.25));\n const study: Study = {\n ...base,\n overlay: !!config.overlay,\n compact: true,\n title: \"VOL\",\n outputs,\n compute(store, from) {\n bind(study, store, [\"vol\", \"ma\"]);\n const v = study.outputs[0].values;\n v.set(store.volume.subarray(from, store.length), from);\n if (maPeriod)\n smaInto(v, store.length, maPeriod, study.outputs[1].values, from);\n },\n };\n return study;\n }\n case \"macd\": {\n const fast = config.fast ?? 12;\n const slow = config.slow ?? 26;\n const signal = config.signal ?? 9;\n const [lineColor, signalColor] = config.colors ?? [INFO, WARNING];\n const study: Study = {\n ...base,\n overlay: false,\n title: `MACD ${fast} ${slow} ${signal}`,\n bands: [0],\n outputs: [\n output(\"MACD\", \"\", \"histogram\"),\n output(\"DIF\", lineColor ?? INFO, \"line\", 1.25),\n output(\"DEA\", signalColor ?? WARNING, \"line\", 1.25),\n ],\n compute(store, from) {\n bind(study, store, [\"hist\", \"dif\", \"dea\"]);\n const n = store.length;\n const f = column(\"fast\", store.capacity);\n const s = column(\"slow\", store.capacity);\n const [hist, dif, dea] = study.outputs.map((o) => o.values);\n emaInto(store.close, n, fast, f, from);\n emaInto(store.close, n, slow, s, from);\n for (let i = from; i < n; i++) dif[i] = f[i] - s[i];\n emaInto(dif, n, signal, dea, from);\n for (let i = from; i < n; i++) hist[i] = dif[i] - dea[i];\n },\n };\n return study;\n }\n case \"rsi\": {\n const period = config.period ?? 14;\n const study: Study = {\n ...base,\n overlay: false,\n title: `RSI ${period}`,\n range: [0, 100],\n bands: [config.oversold ?? 30, config.overbought ?? 70],\n outputs: [output(`RSI${period}`, config.color ?? VIOLET, \"line\", 1.5)],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n rsiInto(\n store.close,\n store.length,\n period,\n study.outputs[0].values,\n column(\"gain\", store.capacity),\n column(\"loss\", store.capacity),\n from,\n );\n },\n };\n return study;\n }\n case \"kdj\": {\n const period = config.period ?? 9;\n const kp = config.kPeriod ?? 3;\n const dp = config.dPeriod ?? 3;\n const [kc, dc, jc] = config.colors ?? [WARNING, INFO, VIOLET];\n const study: Study = {\n ...base,\n overlay: false,\n title: `KDJ ${period} ${kp} ${dp}`,\n bands: [20, 80],\n outputs: [\n output(\"K\", kc ?? WARNING, \"line\", 1.25),\n output(\"D\", dc ?? INFO, \"line\", 1.25),\n output(\"J\", jc ?? VIOLET, \"line\", 1.25),\n ],\n compute(store, from) {\n bind(study, store, [\"k\", \"d\", \"j\"]);\n const [k, d, j] = study.outputs.map((o) => o.values);\n kdjInto(\n store.high,\n store.low,\n store.close,\n store.length,\n period,\n kp,\n dp,\n k,\n d,\n j,\n from,\n );\n },\n };\n return study;\n }\n default: {\n const period = config.period ?? 14;\n const study: Study = {\n ...base,\n overlay: false,\n title: `ATR ${period}`,\n outputs: [output(`ATR${period}`, config.color ?? INFO, \"line\", 1.5)],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n const tr = column(\"tr\", store.capacity);\n trueRangeInto(\n store.high,\n store.low,\n store.close,\n store.length,\n tr,\n from,\n );\n rmaInto(tr, store.length, period, study.outputs[0].values, from);\n },\n };\n return study;\n }\n }\n};\n\n/**\n * Builds the studies of `indicators`, reusing the previous runtime of an\n * indicator whose config is unchanged (same id and same parameters)\n */\nexport const buildStudies = (\n indicators: readonly TradingIndicator[],\n previous: readonly Study[],\n utcOffset: number,\n): { studies: Study[]; reused: Set<Study> } => {\n const used = new Set<string>();\n const reused = new Set<Study>();\n let averages = 0;\n const studies = indicators.map((config) => {\n let id = config.id ?? indicatorKey(config);\n for (let k = 2; used.has(id); k++)\n id = `${config.id ?? indicatorKey(config)}#${k}`;\n used.add(id);\n const colorIndex =\n config.type === \"ma\" || config.type === \"ema\" || config.type === \"wma\"\n ? averages++\n : 0;\n const old = previous.find((s) => s.id === id);\n if (old && sameConfig(old.config, config)) {\n // same parameters: keep the computed values (visibility may differ)\n old.config = config;\n reused.add(old);\n return old;\n }\n return createStudy(config, id, colorIndex, utcOffset);\n });\n return { studies, reused };\n};\n\nconst sameConfig = (a: TradingIndicator, b: TradingIndicator) => {\n if (a === b) return true;\n const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n keys.delete(\"visible\");\n for (const key of keys) {\n const va = (a as unknown as Record<string, unknown>)[key];\n const vb = (b as unknown as Record<string, unknown>)[key];\n if (va === vb) continue;\n if (Array.isArray(va) && Array.isArray(vb) && va.join() === vb.join())\n continue;\n return false;\n }\n return true;\n};\n"],"mappings":";;AAuDA,IAAaA,IAAc;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAEMC,IAAS,WACTC,IAAO,WACPC,IAAU,WAGHC,KAAgB,MAAwC;CACnE,QAAQC,EAAU,MAAlB;EACE,KAAK;EACL,KAAK;EACL,KAAK,OACH,OAAO,GAAGA,EAAU,KAAK,GAAGA,EAAU,SACpCA,EAAU,UAAUA,EAAU,WAAW,UACrC,IAAIA,EAAU,WACd;EAER,KAAK,QACH,OAAO,QAAQA,EAAU,UAAU,GAAG,GAAGA,EAAU,cAAc;EACnE,KAAK,QACH,OAAO,QAAQA,EAAU,SAAS;EACpC,KAAK,UACH,OAAO;EACT,KAAK,QACH,OAAO,QAAQA,EAAU,QAAQ,GAAG,GAAGA,EAAU,QAAQ,GAAG,GAAGA,EAAU,UAAU;EACrF,KAAK,OACH,OAAO,OAAOA,EAAU,UAAU;EACpC,KAAK,OACH,OAAO,OAAOA,EAAU,UAAU,EAAE,GAAGA,EAAU,WAAW,EAAE,GAAGA,EAAU,WAAW;EACxF,SACE,OAAO,OAAOA,EAAU,UAAU;CACtC;AACF,GAGMC,KACJ,GACA,GACA,GACA,MACG;CACH,IAAM,EAAE,SAAM,SAAM,QAAK,aAAUC;CACnC,KAAK,IAAIC,IAAIC,GAAMD,IAAID,EAAM,QAAQ,KACnC,QAAQG,GAAR;EACE,KAAK;GACH,EAAIF,KAAKG,EAAKH;GACd;EACF,KAAK;GACH,EAAIA,KAAKI,EAAKJ;GACd;EACF,KAAK;GACH,EAAIA,KAAKK,EAAIL;GACb;EACF,KAAK;GACH,EAAIA,MAAMI,EAAKJ,KAAKK,EAAIL,MAAM;GAC9B;EACF,KAAK;GACH,EAAIA,MAAMI,EAAKJ,KAAKK,EAAIL,KAAKM,EAAMN,MAAM;GACzC;EACF,KAAK;GACH,EAAIA,MAAMG,EAAKH,KAAKI,EAAKJ,KAAKK,EAAIL,KAAKM,EAAMN,MAAM;GACnD;EACF,SACE,EAAIA,KAAKM,EAAMN;CACnB;AAEJ,GAMMO,UAAmB;CACvB,IAAMC,oBAAU,IAAI,IAA0B;CAC9C,QAAQ,GAAc,MAAmC;EACvD,IAAMC,IAAUD,EAAQ,IAAIE,CAAI;EAChC,IAAID,KAAWA,EAAQ,UAAUE,GAAU,OAAOF;EAClD,IAAMG,IAAO,IAAI,aAAaD,CAAQ,CAAC,CAAC,KAAK,GAAG;EAGhD,OAFIF,KAASG,EAAK,IAAIH,CAAO,GAC7BD,EAAQ,IAAIE,GAAME,CAAI,GACfA;CACT;AACF,GAEMC,KACJ,GACA,GACA,IAAwB,QACxB,IAAQ,SACS;CACjB;CACA,wBAAQ,IAAI,aAAc;CAC1B;CACA;CACA;AACF,IAMaC,KACX,GACA,GACA,GACA,MACU;CACV,IAAMC,IAASR,EAAW,GACpBS,IAAa,YAAYC,KAAUA,EAAO,SAASA,EAAO,SAAS,KACnEC,IAAO;EACX;EACA,MAAMD,EAAO;EACb;EACA,QAAQD;EACR,SAAS;CACX,GAEMG,KAAQ,GAAc,GAAiB,MAAoB;EAC/D,EAAM,QAAQ,SAAS,GAAG,MAAM;GAC9B,EAAE,SAASJ,EAAOK,EAAMpB,MAAM,MAAMA,KAAKD,EAAM,QAAQ;EACzD,CAAC;CACH;CAEA,QAAQkB,EAAO,MAAf;EACE,KAAK;EACL,KAAK;EACL,KAAK,OAAO;GACV,IAAMI,IAAS,KAAK,IAAI,GAAG,KAAK,MAAMJ,EAAO,MAAM,KAAK,CAAC,GACnDf,IAASe,EAAO,UAAU,SAC1BK,IAAQ,GAAGL,EAAO,KAAK,YAAY,IAAII,KACvCE,IACJN,EAAO,SAAS,OACZO,IACAP,EAAO,SAAS,QACdQ,IACAC,GACFC,IAAe;IACnB,GAAGT;IACH,SAAS;IACT,OAAOI;IACP,SAAS,CACPT,EACES,GACAL,EAAO,SAASzB,EAAYoC,IAAapC,EAAY,SACrD,QACAyB,EAAO,aAAa,GACtB,CACF;IACA,QAAQ,GAAO,GAAM;KACnB,EAAKU,GAAO5B,GAAO,CAAC,OAAO,CAAC;KAC5B,IAAI8B,IAAoB9B,EAAM;KAK9B,AAJIG,MAAW,YACb,IAAMa,EAAO,OAAOhB,EAAM,QAAQ,GAClCD,EAAWC,GAAOG,GAAQ2B,GAAK5B,CAAI,IAErCsB,EAAOM,GAAK9B,EAAM,QAAQsB,GAAQM,EAAM,QAAQ,EAAE,CAAC,QAAQ1B,CAAI;IACjE;GACF;GACA,OAAO0B;EACT;EACA,KAAK,QAAQ;GACX,IAAMN,IAASJ,EAAO,UAAU,IAC1Ba,IAAIb,EAAO,cAAc,GACzB,CAACc,GAAKC,GAAI3B,KAAOY,EAAO,UAAU;IAACtB;IAASD;IAAMA;GAAI,GACtDiC,IAAe;IACnB,GAAGT;IACH,SAAS;IACT,OAAO,QAAQG,EAAO,GAAGS;IACzB,SAAS;KACPjB,EAAO,OAAOkB,KAAOpC,GAAS,QAAQ,IAAI;KAC1CkB,EAAO,MAAMmB,KAAMtC,GAAM,QAAQ,IAAI;KACrCmB,EAAO,MAAMR,KAAO2B,KAAMtC,GAAM,QAAQ,IAAI;IAC9C;IACA,GAAIuB,EAAO,SAAS,KAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAW;IACzD,QAAQ,GAAO,GAAM;KACnB,EAAKU,GAAO5B,GAAO;MAAC;MAAO;MAAM;KAAK,CAAC;KACvC,IAAMkC,IAAMlB,EAAO,OAAOhB,EAAM,QAAQ,GAClC,CAACmC,GAAGC,GAAGC,KAAKT,EAAM,QAAQ,KAAK,MAAMU,EAAE,MAAM;KAEnD,AADAb,EAAQzB,EAAM,OAAOA,EAAM,QAAQsB,GAAQa,GAAGjC,CAAI,GAClDqC,EAAUvC,EAAM,OAAOA,EAAM,QAAQsB,GAAQY,GAAKhC,CAAI;KACtD,KAAK,IAAID,IAAIC,GAAMD,IAAID,EAAM,QAAQ,KAEnC,AADA,EAAEC,KAAKkC,EAAElC,KAAK8B,IAAIG,EAAIjC,IACtB,EAAEA,KAAKkC,EAAElC,KAAK8B,IAAIG,EAAIjC;IAE1B;GACF;GACA,OAAO2B;EACT;EACA,KAAK,QAAQ;GACX,IAAMY,IAAQtB,EAAO,SAAS,OACxBU,IAAe;IACnB,GAAGT;IACH,SAAS;IACT,OAAO;IACP,SAAS,CAACL,EAAO,QAAQI,EAAO,SAAS,WAAW,QAAQ,GAAG,CAAC;IAChE,QAAQ,GAAO,GAAM;KAEnB,AADAE,EAAKQ,GAAO5B,GAAO,CAAC,OAAO,CAAC,GAC5ByC,EACEzC,EAAM,MACNA,EAAM,KACNA,EAAM,OACNA,EAAM,QACNA,EAAM,MACNA,EAAM,QACNwC,GACAE,GACAd,EAAM,QAAQ,EAAE,CAAC,QACjBZ,EAAO,MAAMhB,EAAM,QAAQ,GAC3BgB,EAAO,OAAOhB,EAAM,QAAQ,GAC5BE,CACF;IACF;GACF;GACA,OAAO0B;EACT;EACA,KAAK,UAAU;GACb,IAAMe,IAAWzB,EAAO,UAClB0B,IAAU,CAAC9B,EAAO,OAAO,IAAI,QAAQ,CAAC;GAC5C,AAAI6B,KAAUC,EAAQ,KAAK9B,EAAO,KAAK6B,KAAYhD,GAAM,QAAQ,IAAI,CAAC;GACtE,IAAMiC,IAAe;IACnB,GAAGT;IACH,SAAS,CAAC,CAACD,EAAO;IAClB,SAAS;IACT,OAAO;IACP;IACA,QAAQ,GAAO,GAAM;KACnB,EAAKU,GAAO5B,GAAO,CAAC,OAAO,IAAI,CAAC;KAChC,IAAM6C,IAAIjB,EAAM,QAAQ,EAAE,CAAC;KAE3B,AADAiB,EAAE,IAAI7C,EAAM,OAAO,SAASE,GAAMF,EAAM,MAAM,GAAGE,CAAI,GACjDyC,KACFlB,EAAQoB,GAAG7C,EAAM,QAAQ2C,GAAUf,EAAM,QAAQ,EAAE,CAAC,QAAQ1B,CAAI;IACpE;GACF;GACA,OAAO0B;EACT;EACA,KAAK,QAAQ;GACX,IAAMkB,IAAO5B,EAAO,QAAQ,IACtB6B,IAAO7B,EAAO,QAAQ,IACtB8B,IAAS9B,EAAO,UAAU,GAC1B,CAAC+B,GAAWC,KAAehC,EAAO,UAAU,CAACvB,GAAMC,CAAO,GAC1DgC,IAAe;IACnB,GAAGT;IACH,SAAS;IACT,OAAO,QAAQ2B,EAAK,GAAGC,EAAK,GAAGC;IAC/B,OAAO,CAAC,CAAC;IACT,SAAS;KACPlC,EAAO,QAAQ,IAAI,WAAW;KAC9BA,EAAO,OAAOmC,KAAatD,GAAM,QAAQ,IAAI;KAC7CmB,EAAO,OAAOoC,KAAetD,GAAS,QAAQ,IAAI;IACpD;IACA,QAAQ,GAAO,GAAM;KACnB,EAAKgC,GAAO5B,GAAO;MAAC;MAAQ;MAAO;KAAK,CAAC;KACzC,IAAMmD,IAAInD,EAAM,QACVoD,IAAIpC,EAAO,QAAQhB,EAAM,QAAQ,GACjCqD,IAAIrC,EAAO,QAAQhB,EAAM,QAAQ,GACjC,CAACsD,GAAMC,GAAKC,KAAO5B,EAAM,QAAQ,KAAK,MAAMU,EAAE,MAAM;KAE1D,AADAZ,EAAQ1B,EAAM,OAAOmD,GAAGL,GAAMM,GAAGlD,CAAI,GACrCwB,EAAQ1B,EAAM,OAAOmD,GAAGJ,GAAMM,GAAGnD,CAAI;KACrC,KAAK,IAAID,IAAIC,GAAMD,IAAIkD,GAAG,KAAK,EAAIlD,KAAKmD,EAAEnD,KAAKoD,EAAEpD;KACjD,EAAQsD,GAAKJ,GAAGH,GAAQQ,GAAKtD,CAAI;KACjC,KAAK,IAAID,IAAIC,GAAMD,IAAIkD,GAAG,KAAK,EAAKlD,KAAKsD,EAAItD,KAAKuD,EAAIvD;IACxD;GACF;GACA,OAAO2B;EACT;EACA,KAAK,OAAO;GACV,IAAMN,IAASJ,EAAO,UAAU,IAC1BU,IAAe;IACnB,GAAGT;IACH,SAAS;IACT,OAAO,OAAOG;IACd,OAAO,CAAC,GAAG,GAAG;IACd,OAAO,CAACJ,EAAO,YAAY,IAAIA,EAAO,cAAc,EAAE;IACtD,SAAS,CAACJ,EAAO,MAAMQ,KAAUJ,EAAO,SAASxB,GAAQ,QAAQ,GAAG,CAAC;IACrE,QAAQ,GAAO,GAAM;KAEnB,AADA0B,EAAKQ,GAAO5B,GAAO,CAAC,OAAO,CAAC,GAC5ByD,EACEzD,EAAM,OACNA,EAAM,QACNsB,GACAM,EAAM,QAAQ,EAAE,CAAC,QACjBZ,EAAO,QAAQhB,EAAM,QAAQ,GAC7BgB,EAAO,QAAQhB,EAAM,QAAQ,GAC7BE,CACF;IACF;GACF;GACA,OAAO0B;EACT;EACA,KAAK,OAAO;GACV,IAAMN,IAASJ,EAAO,UAAU,GAC1BwC,IAAKxC,EAAO,WAAW,GACvByC,IAAKzC,EAAO,WAAW,GACvB,CAAC0C,GAAIC,GAAIC,KAAM5C,EAAO,UAAU;IAACtB;IAASD;IAAMD;GAAM,GACtDkC,IAAe;IACnB,GAAGT;IACH,SAAS;IACT,OAAO,OAAOG,EAAO,GAAGoC,EAAG,GAAGC;IAC9B,OAAO,CAAC,IAAI,EAAE;IACd,SAAS;KACP7C,EAAO,KAAK8C,KAAMhE,GAAS,QAAQ,IAAI;KACvCkB,EAAO,KAAK+C,KAAMlE,GAAM,QAAQ,IAAI;KACpCmB,EAAO,KAAKgD,KAAMpE,GAAQ,QAAQ,IAAI;IACxC;IACA,QAAQ,GAAO,GAAM;KACnB,EAAKkC,GAAO5B,GAAO;MAAC;MAAK;MAAK;KAAG,CAAC;KAClC,IAAM,CAAC+B,GAAGgC,GAAGC,KAAKpC,EAAM,QAAQ,KAAK,MAAMU,EAAE,MAAM;KACnD,EACEtC,EAAM,MACNA,EAAM,KACNA,EAAM,OACNA,EAAM,QACNsB,GACAoC,GACAC,GACA5B,GACAgC,GACAC,GACA9D,CACF;IACF;GACF;GACA,OAAO0B;EACT;EACA,SAAS;GACP,IAAMN,IAASJ,EAAO,UAAU,IAC1BU,IAAe;IACnB,GAAGT;IACH,SAAS;IACT,OAAO,OAAOG;IACd,SAAS,CAACR,EAAO,MAAMQ,KAAUJ,EAAO,SAASvB,GAAM,QAAQ,GAAG,CAAC;IACnE,QAAQ,GAAO,GAAM;KACnB,EAAKiC,GAAO5B,GAAO,CAAC,OAAO,CAAC;KAC5B,IAAMiE,IAAKjD,EAAO,MAAMhB,EAAM,QAAQ;KAStC,AARAkE,EACElE,EAAM,MACNA,EAAM,KACNA,EAAM,OACNA,EAAM,QACNiE,GACA/D,CACF,GACAiE,EAAQF,GAAIjE,EAAM,QAAQsB,GAAQM,EAAM,QAAQ,EAAE,CAAC,QAAQ1B,CAAI;IACjE;GACF;GACA,OAAO0B;EACT;CACF;AACF,GAMawC,KACX,GACA,GACA,MAC6C;CAC7C,IAAMC,oBAAO,IAAI,IAAY,GACvBC,oBAAS,IAAI,IAAW,GAC1BC,IAAW;CAmBf,OAAO;EAAE,SAlBOC,EAAW,KAAK,MAAW;GACzC,IAAIC,IAAKvD,EAAO,MAAMrB,EAAaqB,CAAM;GACzC,KAAK,IAAIa,IAAI,GAAGsC,EAAK,IAAII,CAAE,GAAG,KAC5B,IAAK,GAAGvD,EAAO,MAAMrB,EAAaqB,CAAM,EAAE,GAAGa;GAC/C,EAAK,IAAI0C,CAAE;GACX,IAAM5C,IACJX,EAAO,SAAS,QAAQA,EAAO,SAAS,SAASA,EAAO,SAAS,QAC7D,MACA,GACAwD,IAAMC,EAAS,MAAM,MAAMtB,EAAE,OAAOoB,CAAE;GAO5C,OANIC,KAAOE,EAAWF,EAAI,QAAQxD,CAAM,KAEtC,EAAI,SAASA,GACboD,EAAO,IAAII,CAAG,GACPA,KAEF3D,EAAYG,GAAQuD,GAAI5C,GAAYa,CAAS;EACtD,CACS;EAAS;CAAO;AAC3B,GAEMkC,KAAc,GAAqB,MAAwB;CAC/D,IAAIC,MAAMC,GAAG,OAAO;CACpB,IAAMC,oBAAO,IAAI,IAAI,CAAC,GAAG,OAAO,KAAKF,CAAC,GAAG,GAAG,OAAO,KAAKC,CAAC,CAAC,CAAC;CAC3D,EAAK,OAAO,SAAS;CACrB,KAAK,IAAME,KAAOD,GAAM;EACtB,IAAME,IAAMJ,EAAyCG,IAC/CE,IAAMJ,EAAyCE;EACrD,IAAIC,MAAOC,KACP,QAAM,QAAQD,CAAE,KAAK,MAAM,QAAQC,CAAE,KAAKD,EAAG,KAAK,MAAMC,EAAG,KAAK,IAEpE,OAAO;CACT;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"studies.js","names":["LINE_COLORS","VIOLET","INFO","WARNING","TEAL","INDIGO","PINK","BLUE","indicatorKey","indicator","sourceInto","store","i","from","source","open","high","low","close","columnPool","columns","current","name","capacity","next","output","createStudy","column","paneHeight","config","base","bind","names","period","label","kernel","smaInto","emaInto","wmaInto","study","colorIndex","src","k","mid","up","dev","m","u","l","o","stdevInto","reset","vwapInto","utcOffset","maPeriod","outputs","v","fast","slow","signal","lineColor","signalColor","n","f","s","hist","dif","dea","rsiInto","kp","dp","kc","dc","jc","d","j","start","increment","maximum","psarInto","cp","bp","sp","shift","cc","bc","lc","ac","sc","conv","kijun","lag","a","b","ichimokuInto","value","direction","down","keltner","atrPeriod","band","keltnerInto","donchianInto","obvInto","cciInto","rp","adxPeriod","pc","mc","plus","minus","adx","williamsRInto","mfiInto","tr","trueRangeInto","rmaInto","buildStudies","used","reused","averages","indicators","id","old","previous","sameConfig","keys","key","va","vb"],"sources":["../../../../../charts/src/engine/trading/studies.ts"],"sourcesContent":["// Indicators of a chart: built from the declarative options, computed into\n// columns as large as the bar store, and recomputed from the first changed\n// bar only (a tick recomputes one value per output).\n\nimport {\n cciInto,\n dmiInto,\n donchianInto,\n emaInto,\n ichimokuInto,\n kdjInto,\n keltnerInto,\n mfiInto,\n obvInto,\n psarInto,\n rmaInto,\n rsiInto,\n smaInto,\n stdevInto,\n stochRsiInto,\n supertrendInto,\n trueRangeInto,\n vwapInto,\n williamsRInto,\n wmaInto,\n} from \"./indicators\";\nimport type { UtcOffset } from \"./format\";\nimport type { BarStore } from \"./store\";\nimport type { TradingIndicator, TradingPriceSource } from \"./types\";\n\n/**\n * How an output is drawn: a line, a histogram around zero (colored by\n * sign and slope), the volume bars, or dots (colored by their side of the\n * close, like the parabolic SAR)\n */\nexport type StudyOutputKind = \"line\" | \"histogram\" | \"volume\" | \"dots\";\n\nexport interface StudyOutput {\n /** Legend label (`\"MA7\"`, `\"DIF\"`) */\n label: string;\n values: Float64Array;\n /**\n * CSS color (may be a `var()`); `\"up\"` / `\"down\"` stand for the colors\n * of rising / falling bars\n */\n color: string;\n kind: StudyOutputKind;\n width: number;\n /** Drawn this many bars later (Ichimoku spans ahead, lagging span back) */\n shift: number;\n /** Opacity of the line (1: opaque) */\n alpha: number;\n}\n\n/** Area filled between two outputs */\nexport interface StudyFill {\n /** Output indices */\n a: number;\n b: number;\n /** Color while `a` is above `b` */\n color: string;\n /** Color while `a` is below `b` (the same color by default) */\n colorBelow?: string;\n opacity: number;\n}\n\nexport interface Study {\n id: string;\n type: TradingIndicator[\"type\"];\n config: TradingIndicator;\n /** Drawn over the price (else in its own pane) */\n overlay: boolean;\n /** Legend title (`\"MACD 12 26 9\"`); the parameters when `titleKey` is set */\n title: string;\n /** Localized name before the parameters in the legend */\n titleKey?: \"ichimoku\" | \"supertrend\";\n outputs: StudyOutput[];\n /** Fixed value range of the pane (RSI) */\n range?: readonly [number, number];\n /** Horizontal reference lines (RSI 30 / 70, KDJ 20 / 80, MACD 0) */\n bands?: readonly number[];\n /** Shades the space between the first two bands (RSI, MFI, CCI...) */\n bandFill?: boolean;\n /** Areas filled between outputs (channels, Ichimoku cloud) */\n fills: StudyFill[];\n /** Legend values without their labels (channels: the colors say it) */\n plainLegend?: boolean;\n /** A single legend value: the first finite output (SuperTrend) */\n mergeLegend?: boolean;\n /** The pane keeps 0 in view (MACD, OBV) */\n zero?: boolean;\n /** Default height of its pane */\n height: number;\n /** Values formatted as volumes (compact) rather than prices */\n compact: boolean;\n /** Recomputes the outputs from bar `from` on */\n compute(store: BarStore, from: number): void;\n}\n\n/** Default line colors: vivid hues readable on light and dark backgrounds */\nexport const LINE_COLORS = [\n \"#f59e0b\",\n \"#a855f7\",\n \"#0ea5e9\",\n \"#ec4899\",\n \"#14b8a6\",\n \"#6366f1\",\n \"#84cc16\",\n];\n\nconst VIOLET = \"#a855f7\";\nconst INFO = \"#0ea5e9\";\nconst WARNING = \"#f59e0b\";\nconst TEAL = \"#14b8a6\";\nconst INDIGO = \"#6366f1\";\nconst PINK = \"#ec4899\";\nconst BLUE = \"#2962ff\";\n\n/** Default id of an indicator: its type and parameters */\nexport const indicatorKey = (indicator: TradingIndicator): string => {\n switch (indicator.type) {\n case \"ma\":\n case \"ema\":\n case \"wma\":\n return `${indicator.type}:${indicator.period}${\n indicator.source && indicator.source !== \"close\"\n ? `:${indicator.source}`\n : \"\"\n }`;\n case \"boll\":\n return `boll:${indicator.period ?? 20}:${indicator.multiplier ?? 2}`;\n case \"vwap\":\n return `vwap:${indicator.reset ?? \"day\"}`;\n case \"volume\":\n return \"volume\";\n case \"macd\":\n return `macd:${indicator.fast ?? 12}:${indicator.slow ?? 26}:${indicator.signal ?? 9}`;\n case \"rsi\":\n return `rsi:${indicator.period ?? 14}`;\n case \"kdj\":\n return `kdj:${indicator.period ?? 9}:${indicator.kPeriod ?? 3}:${indicator.dPeriod ?? 3}`;\n case \"psar\":\n return `psar:${indicator.start ?? 0.02}:${indicator.increment ?? indicator.start ?? 0.02}:${indicator.maximum ?? 0.2}`;\n case \"ichimoku\":\n return `ichimoku:${indicator.conversionPeriod ?? 9}:${indicator.basePeriod ?? 26}:${indicator.spanBPeriod ?? 52}:${indicator.displacement ?? 26}`;\n case \"supertrend\":\n return `supertrend:${indicator.period ?? 10}:${indicator.multiplier ?? 3}`;\n case \"keltner\":\n return `keltner:${indicator.period ?? 20}:${indicator.multiplier ?? 2}:${indicator.atrPeriod ?? 10}`;\n case \"donchian\":\n return `donchian:${indicator.period ?? 20}`;\n case \"obv\":\n return \"obv\";\n case \"cci\":\n return `cci:${indicator.period ?? 20}`;\n case \"stochRsi\":\n return `stochRsi:${indicator.rsiPeriod ?? 14}:${indicator.stochPeriod ?? 14}:${indicator.kPeriod ?? 3}:${indicator.dPeriod ?? 3}`;\n case \"dmi\":\n return `dmi:${indicator.period ?? 14}:${indicator.adxPeriod ?? 14}`;\n case \"williamsR\":\n return `williamsR:${indicator.period ?? 14}`;\n case \"mfi\":\n return `mfi:${indicator.period ?? 14}`;\n default:\n return `atr:${indicator.period ?? 14}`;\n }\n};\n\n/** Writes the price `source` of bars `from..n` into `out` */\nconst sourceInto = (\n store: BarStore,\n source: TradingPriceSource,\n out: Float64Array,\n from: number,\n) => {\n const { open, high, low, close } = store;\n for (let i = from; i < store.length; i++) {\n switch (source) {\n case \"open\":\n out[i] = open[i];\n break;\n case \"high\":\n out[i] = high[i];\n break;\n case \"low\":\n out[i] = low[i];\n break;\n case \"hl2\":\n out[i] = (high[i] + low[i]) / 2;\n break;\n case \"hlc3\":\n out[i] = (high[i] + low[i] + close[i]) / 3;\n break;\n case \"ohlc4\":\n out[i] = (open[i] + high[i] + low[i] + close[i]) / 4;\n break;\n default:\n out[i] = close[i];\n }\n }\n};\n\n/**\n * Column set that grows with the store: `get(name)` returns a column of at\n * least `capacity` values, keeping the computed ones\n */\nconst columnPool = () => {\n const columns = new Map<string, Float64Array>();\n return (name: string, capacity: number): Float64Array => {\n const current = columns.get(name);\n if (current && current.length >= capacity) return current;\n const next = new Float64Array(capacity).fill(NaN);\n if (current) next.set(current);\n columns.set(name, next);\n return next;\n };\n};\n\nconst output = (\n label: string,\n color: string,\n kind: StudyOutputKind = \"line\",\n width = 1.5,\n shift = 0,\n alpha = 1,\n): StudyOutput => ({\n label,\n values: new Float64Array(0),\n color,\n kind,\n width,\n shift,\n alpha,\n});\n\n/**\n * Builds the runtime of an indicator. `colorIndex` picks the default color\n * of moving averages (one per average).\n */\nexport const createStudy = (\n config: TradingIndicator,\n id: string,\n colorIndex: number,\n utcOffset: UtcOffset,\n): Study => {\n const column = columnPool();\n const paneHeight = \"height\" in config && config.height ? config.height : 110;\n const base = {\n id,\n type: config.type,\n config,\n height: paneHeight,\n compact: false,\n fills: [] as StudyFill[],\n };\n /** Attaches the output columns (grown with the store) before computing */\n const bind = (study: Study, store: BarStore, names: string[]) => {\n study.outputs.forEach((o, i) => {\n o.values = column(names[i] ?? `out${i}`, store.capacity);\n });\n };\n\n switch (config.type) {\n case \"ma\":\n case \"ema\":\n case \"wma\": {\n const period = Math.max(1, Math.floor(config.period) || 1);\n const source = config.source ?? \"close\";\n const label = `${config.type.toUpperCase()}${period}`;\n const kernel =\n config.type === \"ma\"\n ? smaInto\n : config.type === \"ema\"\n ? emaInto\n : wmaInto;\n const study: Study = {\n ...base,\n overlay: true,\n title: label,\n outputs: [\n output(\n label,\n config.color ?? LINE_COLORS[colorIndex % LINE_COLORS.length],\n \"line\",\n config.lineWidth ?? 1.5,\n ),\n ],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n let src: Float64Array = store.close;\n if (source !== \"close\") {\n src = column(\"src\", store.capacity);\n sourceInto(store, source, src, from);\n }\n kernel(src, store.length, period, study.outputs[0].values, from);\n },\n };\n return study;\n }\n case \"boll\": {\n const period = config.period ?? 20;\n const k = config.multiplier ?? 2;\n const [mid, up, low] = config.colors ?? [WARNING, INFO, INFO];\n const study: Study = {\n ...base,\n overlay: true,\n title: `BOLL ${period} ${k}`,\n plainLegend: true,\n outputs: [\n output(\"MID\", mid ?? WARNING, \"line\", 1.25),\n output(\"UB\", up ?? INFO, \"line\", 1.25),\n output(\"LB\", low ?? up ?? INFO, \"line\", 1.25),\n ],\n fills:\n config.fill === false\n ? []\n : [{ a: 1, b: 2, color: up ?? INFO, opacity: 0.07 }],\n compute(store, from) {\n bind(study, store, [\"mid\", \"up\", \"low\"]);\n const dev = column(\"dev\", store.capacity);\n const [m, u, l] = study.outputs.map((o) => o.values);\n smaInto(store.close, store.length, period, m, from);\n stdevInto(store.close, store.length, period, dev, from);\n for (let i = from; i < store.length; i++) {\n u[i] = m[i] + k * dev[i];\n l[i] = m[i] - k * dev[i];\n }\n },\n };\n return study;\n }\n case \"vwap\": {\n const reset = config.reset ?? \"day\";\n const study: Study = {\n ...base,\n overlay: true,\n title: \"VWAP\",\n outputs: [output(\"VWAP\", config.color ?? \"#ec4899\", \"line\", 1.5)],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n vwapInto(\n store.high,\n store.low,\n store.close,\n store.volume,\n store.time,\n store.length,\n reset,\n utcOffset,\n study.outputs[0].values,\n column(\"pv\", store.capacity),\n column(\"vol\", store.capacity),\n from,\n );\n },\n };\n return study;\n }\n case \"volume\": {\n const maPeriod = config.maPeriod;\n const outputs = [output(\"VOL\", \"\", \"volume\")];\n if (maPeriod) outputs.push(output(`MA${maPeriod}`, INFO, \"line\", 1.25));\n const study: Study = {\n ...base,\n overlay: !!config.overlay,\n compact: true,\n title: \"VOL\",\n outputs,\n compute(store, from) {\n bind(study, store, [\"vol\", \"ma\"]);\n const v = study.outputs[0].values;\n v.set(store.volume.subarray(from, store.length), from);\n if (maPeriod)\n smaInto(v, store.length, maPeriod, study.outputs[1].values, from);\n },\n };\n return study;\n }\n case \"macd\": {\n const fast = config.fast ?? 12;\n const slow = config.slow ?? 26;\n const signal = config.signal ?? 9;\n const [lineColor, signalColor] = config.colors ?? [INFO, WARNING];\n const study: Study = {\n ...base,\n overlay: false,\n title: `MACD ${fast} ${slow} ${signal}`,\n bands: [0],\n zero: true,\n outputs: [\n output(\"MACD\", \"\", \"histogram\"),\n output(\"DIF\", lineColor ?? INFO, \"line\", 1.25),\n output(\"DEA\", signalColor ?? WARNING, \"line\", 1.25),\n ],\n compute(store, from) {\n bind(study, store, [\"hist\", \"dif\", \"dea\"]);\n const n = store.length;\n const f = column(\"fast\", store.capacity);\n const s = column(\"slow\", store.capacity);\n const [hist, dif, dea] = study.outputs.map((o) => o.values);\n emaInto(store.close, n, fast, f, from);\n emaInto(store.close, n, slow, s, from);\n for (let i = from; i < n; i++) dif[i] = f[i] - s[i];\n emaInto(dif, n, signal, dea, from);\n for (let i = from; i < n; i++) hist[i] = dif[i] - dea[i];\n },\n };\n return study;\n }\n case \"rsi\": {\n const period = config.period ?? 14;\n const study: Study = {\n ...base,\n overlay: false,\n title: `RSI ${period}`,\n range: [0, 100],\n bands: [config.oversold ?? 30, config.overbought ?? 70],\n bandFill: true,\n outputs: [output(`RSI${period}`, config.color ?? VIOLET, \"line\", 1.5)],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n rsiInto(\n store.close,\n store.length,\n period,\n study.outputs[0].values,\n column(\"gain\", store.capacity),\n column(\"loss\", store.capacity),\n from,\n );\n },\n };\n return study;\n }\n case \"kdj\": {\n const period = config.period ?? 9;\n const kp = config.kPeriod ?? 3;\n const dp = config.dPeriod ?? 3;\n const [kc, dc, jc] = config.colors ?? [WARNING, INFO, VIOLET];\n const study: Study = {\n ...base,\n overlay: false,\n title: `KDJ ${period} ${kp} ${dp}`,\n bands: [20, 80],\n outputs: [\n output(\"K\", kc ?? WARNING, \"line\", 1.25),\n output(\"D\", dc ?? INFO, \"line\", 1.25),\n output(\"J\", jc ?? VIOLET, \"line\", 1.25),\n ],\n compute(store, from) {\n bind(study, store, [\"k\", \"d\", \"j\"]);\n const [k, d, j] = study.outputs.map((o) => o.values);\n kdjInto(\n store.high,\n store.low,\n store.close,\n store.length,\n period,\n kp,\n dp,\n k,\n d,\n j,\n from,\n );\n },\n };\n return study;\n }\n case \"psar\": {\n const start = config.start ?? 0.02;\n const increment = config.increment ?? start;\n const maximum = config.maximum ?? 0.2;\n const study: Study = {\n ...base,\n overlay: true,\n title: `SAR ${start} ${increment} ${maximum}`,\n outputs: [output(\"SAR\", config.color ?? \"\", \"dots\", 1.5)],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n psarInto(\n store.high,\n store.low,\n store.length,\n start,\n increment,\n maximum,\n study.outputs[0].values,\n {\n ep: column(\"ep\", store.capacity),\n af: column(\"af\", store.capacity),\n trend: column(\"trend\", store.capacity),\n },\n from,\n );\n },\n };\n return study;\n }\n case \"ichimoku\": {\n const cp = config.conversionPeriod ?? 9;\n const bp = config.basePeriod ?? 26;\n const sp = config.spanBPeriod ?? 52;\n const shift = Math.max(1, Math.floor(config.displacement ?? 26)) - 1;\n const [cc, bc, lc, ac, sc] = config.colors ?? [];\n const study: Study = {\n ...base,\n overlay: true,\n title: `${cp} ${bp} ${sp} ${shift + 1}`,\n titleKey: \"ichimoku\",\n plainLegend: true,\n outputs: [\n output(\"CONV\", cc ?? BLUE, \"line\", 1.25),\n output(\"BASE\", bc ?? \"#e65100\", \"line\", 1.25),\n output(\"LAG\", lc ?? \"#43a047\", \"line\", 1.25, -shift),\n output(\"A\", ac ?? \"up\", \"line\", 1, shift, 0.55),\n output(\"B\", sc ?? \"down\", \"line\", 1, shift, 0.55),\n ],\n fills:\n config.cloud === false\n ? []\n : [\n {\n a: 3,\n b: 4,\n color: ac ?? \"up\",\n colorBelow: sc ?? \"down\",\n opacity: 0.12,\n },\n ],\n compute(store, from) {\n bind(study, store, [\"conv\", \"base\", \"lag\", \"a\", \"b\"]);\n const [conv, kijun, lag, a, b] = study.outputs.map((o) => o.values);\n ichimokuInto(\n store.high,\n store.low,\n store.length,\n cp,\n bp,\n sp,\n conv,\n kijun,\n a,\n b,\n {\n highest: column(\"highest\", store.capacity),\n lowest: column(\"lowest\", store.capacity),\n },\n from,\n );\n lag.set(store.close.subarray(from, store.length), from);\n },\n };\n return study;\n }\n case \"supertrend\": {\n const period = config.period ?? 10;\n const k = config.multiplier ?? 3;\n const study: Study = {\n ...base,\n overlay: true,\n title: `${period} ${k}`,\n titleKey: \"supertrend\",\n mergeLegend: true,\n outputs: [\n output(\"UP\", config.upColor ?? \"up\", \"line\", 2),\n output(\"DOWN\", config.downColor ?? \"down\", \"line\", 2),\n ],\n compute(store, from) {\n bind(study, store, [\"up\", \"down\"]);\n const value = column(\"value\", store.capacity);\n const direction = column(\"direction\", store.capacity);\n supertrendInto(\n store.high,\n store.low,\n store.close,\n store.length,\n period,\n k,\n value,\n direction,\n {\n tr: column(\"tr\", store.capacity),\n atr: column(\"atr\", store.capacity),\n upper: column(\"upper\", store.capacity),\n lower: column(\"lower\", store.capacity),\n },\n from,\n );\n const [up, down] = study.outputs.map((o) => o.values);\n for (let i = from; i < store.length; i++) {\n up[i] = direction[i] === 1 ? value[i] : NaN;\n down[i] = direction[i] === -1 ? value[i] : NaN;\n }\n },\n };\n return study;\n }\n case \"keltner\":\n case \"donchian\": {\n const keltner = config.type === \"keltner\";\n const period = config.period ?? 20;\n const k = keltner ? (config.multiplier ?? 2) : 0;\n const atrPeriod = keltner ? (config.atrPeriod ?? 10) : 0;\n const band = keltner ? TEAL : INDIGO;\n const [mid, up, low] = config.colors ?? [WARNING, band, band];\n const study: Study = {\n ...base,\n overlay: true,\n title: keltner ? `KC ${period} ${k} ${atrPeriod}` : `DC ${period}`,\n plainLegend: true,\n outputs: [\n output(\"MID\", mid ?? WARNING, \"line\", 1.25),\n output(\"UB\", up ?? band, \"line\", 1.25),\n output(\"LB\", low ?? up ?? band, \"line\", 1.25),\n ],\n fills:\n config.fill === false\n ? []\n : [{ a: 1, b: 2, color: up ?? band, opacity: 0.07 }],\n compute(store, from) {\n bind(study, store, [\"mid\", \"up\", \"low\"]);\n const [m, u, l] = study.outputs.map((o) => o.values);\n if (keltner) {\n keltnerInto(\n store.high,\n store.low,\n store.close,\n store.length,\n period,\n k,\n atrPeriod,\n m,\n u,\n l,\n {\n tr: column(\"tr\", store.capacity),\n atr: column(\"atr\", store.capacity),\n },\n from,\n );\n } else {\n donchianInto(\n store.high,\n store.low,\n store.length,\n period,\n u,\n l,\n m,\n from,\n );\n }\n },\n };\n return study;\n }\n case \"obv\": {\n const maPeriod = config.maPeriod;\n const outputs = [output(\"OBV\", config.color ?? INFO, \"line\", 1.5)];\n if (maPeriod)\n outputs.push(output(`MA${maPeriod}`, WARNING, \"line\", 1.25));\n const study: Study = {\n ...base,\n overlay: false,\n compact: true,\n title: \"OBV\",\n outputs,\n compute(store, from) {\n bind(study, store, [\"obv\", \"ma\"]);\n const v = study.outputs[0].values;\n obvInto(store.close, store.volume, store.length, v, from);\n if (maPeriod)\n smaInto(v, store.length, maPeriod, study.outputs[1].values, from);\n },\n };\n return study;\n }\n case \"cci\": {\n const period = config.period ?? 20;\n const study: Study = {\n ...base,\n overlay: false,\n title: `CCI ${period}`,\n bands: [-100, 100],\n bandFill: true,\n outputs: [output(`CCI${period}`, config.color ?? TEAL, \"line\", 1.5)],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n cciInto(\n store.high,\n store.low,\n store.close,\n store.length,\n period,\n study.outputs[0].values,\n column(\"typical\", store.capacity),\n column(\"mean\", store.capacity),\n from,\n );\n },\n };\n return study;\n }\n case \"stochRsi\": {\n const rp = config.rsiPeriod ?? 14;\n const sp = config.stochPeriod ?? 14;\n const kp = config.kPeriod ?? 3;\n const dp = config.dPeriod ?? 3;\n const [kc, dc] = config.colors ?? [INFO, WARNING];\n const study: Study = {\n ...base,\n overlay: false,\n title: `Stoch RSI ${rp} ${sp} ${kp} ${dp}`,\n range: [0, 100],\n bands: [20, 80],\n bandFill: true,\n outputs: [\n output(\"K\", kc ?? INFO, \"line\", 1.25),\n output(\"D\", dc ?? WARNING, \"line\", 1.25),\n ],\n compute(store, from) {\n bind(study, store, [\"k\", \"d\"]);\n const [k, d] = study.outputs.map((o) => o.values);\n stochRsiInto(\n store.close,\n store.length,\n rp,\n sp,\n kp,\n dp,\n k,\n d,\n {\n rsi: column(\"rsi\", store.capacity),\n gain: column(\"gain\", store.capacity),\n loss: column(\"loss\", store.capacity),\n highest: column(\"highest\", store.capacity),\n lowest: column(\"lowest\", store.capacity),\n raw: column(\"raw\", store.capacity),\n },\n from,\n );\n },\n };\n return study;\n }\n case \"dmi\": {\n const period = config.period ?? 14;\n const adxPeriod = config.adxPeriod ?? 14;\n const [pc, mc, ac] = config.colors ?? [\"up\", \"down\", WARNING];\n const study: Study = {\n ...base,\n overlay: false,\n title: `DMI ${period} ${adxPeriod}`,\n bands: [25],\n outputs: [\n output(\"+DI\", pc ?? \"up\", \"line\", 1.25),\n output(\"−DI\", mc ?? \"down\", \"line\", 1.25),\n output(\"ADX\", ac ?? WARNING, \"line\", 1.75),\n ],\n compute(store, from) {\n bind(study, store, [\"plus\", \"minus\", \"adx\"]);\n const [plus, minus, adx] = study.outputs.map((o) => o.values);\n dmiInto(\n store.high,\n store.low,\n store.close,\n store.length,\n period,\n adxPeriod,\n plus,\n minus,\n adx,\n {\n tr: column(\"tr\", store.capacity),\n plusDm: column(\"plusDm\", store.capacity),\n minusDm: column(\"minusDm\", store.capacity),\n smoothTr: column(\"smoothTr\", store.capacity),\n smoothPlus: column(\"smoothPlus\", store.capacity),\n smoothMinus: column(\"smoothMinus\", store.capacity),\n dx: column(\"dx\", store.capacity),\n },\n from,\n );\n },\n };\n return study;\n }\n case \"williamsR\": {\n const period = config.period ?? 14;\n const study: Study = {\n ...base,\n overlay: false,\n title: `%R ${period}`,\n range: [-100, 0],\n bands: [-80, -20],\n bandFill: true,\n outputs: [output(`%R${period}`, config.color ?? VIOLET, \"line\", 1.5)],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n williamsRInto(\n store.high,\n store.low,\n store.close,\n store.length,\n period,\n study.outputs[0].values,\n column(\"highest\", store.capacity),\n column(\"lowest\", store.capacity),\n from,\n );\n },\n };\n return study;\n }\n case \"mfi\": {\n const period = config.period ?? 14;\n const study: Study = {\n ...base,\n overlay: false,\n title: `MFI ${period}`,\n range: [0, 100],\n bands: [20, 80],\n bandFill: true,\n outputs: [output(`MFI${period}`, config.color ?? PINK, \"line\", 1.5)],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n mfiInto(\n store.high,\n store.low,\n store.close,\n store.volume,\n store.length,\n period,\n study.outputs[0].values,\n column(\"typical\", store.capacity),\n from,\n );\n },\n };\n return study;\n }\n default: {\n const period = config.period ?? 14;\n const study: Study = {\n ...base,\n overlay: false,\n title: `ATR ${period}`,\n outputs: [output(`ATR${period}`, config.color ?? INFO, \"line\", 1.5)],\n compute(store, from) {\n bind(study, store, [\"value\"]);\n const tr = column(\"tr\", store.capacity);\n trueRangeInto(\n store.high,\n store.low,\n store.close,\n store.length,\n tr,\n from,\n );\n rmaInto(tr, store.length, period, study.outputs[0].values, from);\n },\n };\n return study;\n }\n }\n};\n\n/**\n * Builds the studies of `indicators`, reusing the previous runtime of an\n * indicator whose config is unchanged (same id and same parameters)\n */\nexport const buildStudies = (\n indicators: readonly TradingIndicator[],\n previous: readonly Study[],\n utcOffset: UtcOffset,\n): { studies: Study[]; reused: Set<Study> } => {\n const used = new Set<string>();\n const reused = new Set<Study>();\n let averages = 0;\n const studies = indicators.map((config) => {\n let id = config.id ?? indicatorKey(config);\n for (let k = 2; used.has(id); k++)\n id = `${config.id ?? indicatorKey(config)}#${k}`;\n used.add(id);\n const colorIndex =\n config.type === \"ma\" || config.type === \"ema\" || config.type === \"wma\"\n ? averages++\n : 0;\n const old = previous.find((s) => s.id === id);\n if (old && sameConfig(old.config, config)) {\n // same parameters: keep the computed values (visibility may differ)\n old.config = config;\n reused.add(old);\n return old;\n }\n return createStudy(config, id, colorIndex, utcOffset);\n });\n return { studies, reused };\n};\n\nconst sameConfig = (a: TradingIndicator, b: TradingIndicator) => {\n if (a === b) return true;\n const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n keys.delete(\"visible\");\n for (const key of keys) {\n const va = (a as unknown as Record<string, unknown>)[key];\n const vb = (b as unknown as Record<string, unknown>)[key];\n if (va === vb) continue;\n if (Array.isArray(va) && Array.isArray(vb) && va.join() === vb.join())\n continue;\n return false;\n }\n return true;\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./chart.cjs");var t=(t,n={})=>{let r=[];for(let i of t){let a=t.filter(e=>e!==i);n.crosshair!==!1&&r.push(i.on(`crosshairMove`,e=>{for(let t of a)t.setCrosshair(e?e.time:null)})),n.timeRange!==!1&&r.push(i.on(`visibleRangeChange`,()=>{let t=i.getVisibleTimeRange();for(let n of a){let r=e.syncHooks.get(n);r?r.setTimeRange(t):n.setVisibleTimeRange(t)}}))}return()=>{r.forEach(e=>e());for(let e of t)e.setCrosshair(null)}};exports.syncCharts=t;
2
+ //# sourceMappingURL=sync.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.cjs","names":["syncHooks","require_chart","syncCharts","offs","chart","charts","others","other","options","event","range","hooks","off"],"sources":["../../../../../charts/src/engine/trading/sync.ts"],"sourcesContent":["// Synchronized charts: a layout of several charts sharing the crosshair\n// time and the visible time range (multi-chart terminals).\n\nimport { syncHooks } from \"./chart\";\nimport type { TradingChartInstance, TradingSyncOptions } from \"./types\";\n\n/**\n * Keeps charts in step: the crosshair of the hovered chart shows on the\n * others at the same time, and scrolling or zooming one shows the same time\n * range on every chart (charts of different timeframes included). Returns\n * a function that stops the synchronization.\n */\nexport const syncCharts = (\n charts: readonly TradingChartInstance[],\n options: TradingSyncOptions = {},\n): (() => void) => {\n const offs: (() => void)[] = [];\n for (const chart of charts) {\n const others = charts.filter((other) => other !== chart);\n if (options.crosshair !== false) {\n offs.push(\n chart.on(\"crosshairMove\", (event) => {\n for (const other of others)\n other.setCrosshair(event ? event.time : null);\n }),\n );\n }\n if (options.timeRange !== false) {\n offs.push(\n chart.on(\"visibleRangeChange\", () => {\n const range = chart.getVisibleTimeRange();\n for (const other of others) {\n // the followers don't report the change back (no echo)\n const hooks = syncHooks.get(other);\n if (hooks) hooks.setTimeRange(range);\n else other.setVisibleTimeRange(range);\n }\n }),\n );\n }\n }\n return () => {\n offs.forEach((off) => off());\n for (const chart of charts) chart.setCrosshair(null);\n };\n};\n"],"mappings":"+BAYA,IAAaE,GACX,EACA,EAA8B,CAAC,IACd,CACjB,IAAMC,EAAuB,CAAC,EAC9B,IAAK,IAAMC,KAASC,EAAQ,CAC1B,IAAMC,EAASD,EAAO,OAAQ,GAAUE,IAAUH,CAAK,EACnDI,EAAQ,YAAc,IACxBL,EAAK,KACHC,EAAM,GAAG,gBAAkB,GAAU,CACnC,IAAK,IAAMG,KAASD,EAClBC,EAAM,aAAaE,EAAQA,EAAM,KAAO,IAAI,CAChD,CAAC,CACH,EAEED,EAAQ,YAAc,IACxBL,EAAK,KACHC,EAAM,GAAG,yBAA4B,CACnC,IAAMM,EAAQN,EAAM,oBAAoB,EACxC,IAAK,IAAMG,KAASD,EAAQ,CAE1B,IAAMK,EAAQX,EAAAA,UAAU,IAAIO,CAAK,EAC7BI,EAAOA,EAAM,aAAaD,CAAK,EAC9BH,EAAM,oBAAoBG,CAAK,CACtC,CACF,CAAC,CACH,CAEJ,CACA,UAAa,CACXP,EAAK,QAAS,GAAQS,EAAI,CAAC,EAC3B,IAAK,IAAMR,KAASC,EAAQD,EAAM,aAAa,IAAI,CACrD,CACF"}
@@ -0,0 +1,8 @@
1
+ import { TradingChartInstance, TradingSyncOptions } from './types.cjs';
2
+ /**
3
+ * Keeps charts in step: the crosshair of the hovered chart shows on the
4
+ * others at the same time, and scrolling or zooming one shows the same time
5
+ * range on every chart (charts of different timeframes included). Returns
6
+ * a function that stops the synchronization.
7
+ */
8
+ export declare const syncCharts: (charts: readonly TradingChartInstance[], options?: TradingSyncOptions) => (() => void);
@@ -0,0 +1,8 @@
1
+ import { TradingChartInstance, TradingSyncOptions } from './types.js';
2
+ /**
3
+ * Keeps charts in step: the crosshair of the hovered chart shows on the
4
+ * others at the same time, and scrolling or zooming one shows the same time
5
+ * range on every chart (charts of different timeframes included). Returns
6
+ * a function that stops the synchronization.
7
+ */
8
+ export declare const syncCharts: (charts: readonly TradingChartInstance[], options?: TradingSyncOptions) => (() => void);
@@ -0,0 +1,25 @@
1
+ import { syncHooks as e } from "./chart.js";
2
+ //#region src/engine/trading/sync.ts
3
+ var t = (t, n = {}) => {
4
+ let r = [];
5
+ for (let i of t) {
6
+ let a = t.filter((e) => e !== i);
7
+ n.crosshair !== !1 && r.push(i.on("crosshairMove", (e) => {
8
+ for (let t of a) t.setCrosshair(e ? e.time : null);
9
+ })), n.timeRange !== !1 && r.push(i.on("visibleRangeChange", () => {
10
+ let t = i.getVisibleTimeRange();
11
+ for (let n of a) {
12
+ let r = e.get(n);
13
+ r ? r.setTimeRange(t) : n.setVisibleTimeRange(t);
14
+ }
15
+ }));
16
+ }
17
+ return () => {
18
+ r.forEach((e) => e());
19
+ for (let e of t) e.setCrosshair(null);
20
+ };
21
+ };
22
+ //#endregion
23
+ export { t as syncCharts };
24
+
25
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","names":["syncCharts","offs","chart","charts","others","other","options","event","range","hooks","syncHooks","off"],"sources":["../../../../../charts/src/engine/trading/sync.ts"],"sourcesContent":["// Synchronized charts: a layout of several charts sharing the crosshair\n// time and the visible time range (multi-chart terminals).\n\nimport { syncHooks } from \"./chart\";\nimport type { TradingChartInstance, TradingSyncOptions } from \"./types\";\n\n/**\n * Keeps charts in step: the crosshair of the hovered chart shows on the\n * others at the same time, and scrolling or zooming one shows the same time\n * range on every chart (charts of different timeframes included). Returns\n * a function that stops the synchronization.\n */\nexport const syncCharts = (\n charts: readonly TradingChartInstance[],\n options: TradingSyncOptions = {},\n): (() => void) => {\n const offs: (() => void)[] = [];\n for (const chart of charts) {\n const others = charts.filter((other) => other !== chart);\n if (options.crosshair !== false) {\n offs.push(\n chart.on(\"crosshairMove\", (event) => {\n for (const other of others)\n other.setCrosshair(event ? event.time : null);\n }),\n );\n }\n if (options.timeRange !== false) {\n offs.push(\n chart.on(\"visibleRangeChange\", () => {\n const range = chart.getVisibleTimeRange();\n for (const other of others) {\n // the followers don't report the change back (no echo)\n const hooks = syncHooks.get(other);\n if (hooks) hooks.setTimeRange(range);\n else other.setVisibleTimeRange(range);\n }\n }),\n );\n }\n }\n return () => {\n offs.forEach((off) => off());\n for (const chart of charts) chart.setCrosshair(null);\n };\n};\n"],"mappings":";;AAYA,IAAaA,KACX,GACA,IAA8B,CAAC,MACd;CACjB,IAAMC,IAAuB,CAAC;CAC9B,KAAK,IAAMC,KAASC,GAAQ;EAC1B,IAAMC,IAASD,EAAO,QAAQ,MAAUE,MAAUH,CAAK;EASvD,AARII,EAAQ,cAAc,MACxBL,EAAK,KACHC,EAAM,GAAG,kBAAkB,MAAU;GACnC,KAAK,IAAMG,KAASD,GAClB,EAAM,aAAaG,IAAQA,EAAM,OAAO,IAAI;EAChD,CAAC,CACH,GAEED,EAAQ,cAAc,MACxBL,EAAK,KACHC,EAAM,GAAG,4BAA4B;GACnC,IAAMM,IAAQN,EAAM,oBAAoB;GACxC,KAAK,IAAMG,KAASD,GAAQ;IAE1B,IAAMK,IAAQC,EAAU,IAAIL,CAAK;IACjC,AAAII,IAAOA,EAAM,aAAaD,CAAK,IAC9BH,EAAM,oBAAoBG,CAAK;GACtC;EACF,CAAC,CACH;CAEJ;CACA,aAAa;EACX,EAAK,SAAS,MAAQG,EAAI,CAAC;EAC3B,KAAK,IAAMT,KAASC,GAAQ,EAAM,aAAa,IAAI;CACrD;AACF"}