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":"indicators.cjs","names":["finite","nanArray","n","periodOf","period","smaInto","p","sum","valid","j","from","v","src","i","old","windowMean","k","smoothInto","prev","out","alpha","emaInto","rmaInto","wmaInto","denominator","direct","num","stdevInto","mean","sq","d","rsiInto","change","close","gain","loss","g","l","ok","c","trueRangeInto","range","high","low","pc","kdjInto","m1","kPeriod","m2","dPeriod","hh","ll","q","rsv","pk","pd","DAY","sessionKey","reset","t","time","utcOffset","day","date","vwapInto","tp","volume","same","basePv","pv","baseV","vol","heikinAshiInto","open","prevOpen","prevClose","o","sma","values","ema","wma","bollinger","middle","upper","lower","dev","multiplier","macd","f","s","fast","slow","line","sig","signal","histogram","rsi","kdj","atr","tr","vwap","options","heikinAshi","bars","UNIT_MS","parseTimeframe","timeframe","match","count","unit","bucketStart","shift","tf","months","start","monday","isColumns","resampleBars","columns","get","current","bar","m","result"],"sources":["../../../../../charts/src/engine/trading/indicators.ts"],"sourcesContent":["// Technical indicators on columns of numbers (Float64Array out, NaN while\n// an indicator warms up). Every kernel computes the outputs from index\n// `from` on, assuming the outputs before it are up to date: the chart\n// recomputes only the last bar on each tick, even with a million bars.\n\nimport type {\n TradingBar,\n TradingBarColumns,\n TradingBarsInput,\n TradingTimeframe,\n} from \"./types\";\n\ntype Values = ArrayLike<number>;\n\nconst finite = Number.isFinite;\n\n/** Output array of `n` values, NaN-filled */\nconst nanArray = (n: number) => new Float64Array(n).fill(NaN);\n\nconst periodOf = (period: number) => Math.max(1, Math.floor(period) || 1);\n\n// ---------------------------------------------------------------- kernels\n\n/** Simple moving average of `src[0..n)` into `out`, from index `from` */\nexport const smaInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n let sum = 0;\n let valid = 0;\n // the window ending just before `from` (the loop below drops its oldest value)\n for (let j = Math.max(0, from - p); j < from; j++) {\n const v = src[j];\n if (finite(v)) {\n sum += v;\n valid++;\n }\n }\n for (let i = from; i < n; i++) {\n const v = src[i];\n if (finite(v)) {\n sum += v;\n valid++;\n }\n if (i >= p) {\n const old = src[i - p];\n if (finite(old)) {\n sum -= old;\n valid--;\n }\n }\n out[i] = valid === p ? sum / p : NaN;\n }\n};\n\n/** Mean of `src[i-p+1..i]`, NaN unless the window is complete */\nconst windowMean = (src: Values, i: number, p: number) => {\n if (i < p - 1) return NaN;\n let sum = 0;\n for (let k = i - p + 1; k <= i; k++) {\n const v = src[k];\n if (!finite(v)) return NaN;\n sum += v;\n }\n return sum / p;\n};\n\n/**\n * Exponential smoothing with factor `alpha`, seeded with the simple\n * average of the first complete window (the TradingView convention)\n */\nconst smoothInto = (\n src: Values,\n n: number,\n p: number,\n alpha: number,\n out: Float64Array,\n from: number,\n) => {\n for (let i = from; i < n; i++) {\n const v = src[i];\n const prev = i > 0 ? out[i - 1] : NaN;\n if (!finite(v)) out[i] = NaN;\n else if (finite(prev)) out[i] = prev + alpha * (v - prev);\n else out[i] = windowMean(src, i, p);\n }\n};\n\n/** Exponential moving average (alpha = 2 / (period + 1)) */\nexport const emaInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n smoothInto(src, n, p, 2 / (p + 1), out, from);\n};\n\n/** Wilder's moving average (alpha = 1 / period), used by RSI and ATR */\nexport const rmaInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n smoothInto(src, n, p, 1 / p, out, from);\n};\n\n/** Linearly weighted moving average (the newest bar weighs `period`) */\nexport const wmaInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n const denominator = (p * (p + 1)) / 2;\n const direct = (i: number) => {\n if (i < p - 1) return NaN;\n let num = 0;\n for (let k = 0; k < p; k++) {\n const v = src[i - k];\n if (!finite(v)) return NaN;\n num += (p - k) * v;\n }\n return num;\n };\n // numerator of the previous index and the sum of its window\n let num = from > 0 ? direct(from - 1) : NaN;\n let sum = from > 0 ? windowMean(src, from - 1, p) * p : NaN;\n for (let i = from; i < n; i++) {\n const v = src[i];\n if (finite(num) && finite(sum) && finite(v)) {\n num = num - sum + p * v;\n sum = sum + v - (i >= p ? src[i - p] : 0);\n } else {\n num = direct(i);\n sum = windowMean(src, i, p) * p;\n }\n out[i] = finite(num) ? num / denominator : NaN;\n }\n};\n\n/** Population standard deviation over the window (two passes: exact) */\nexport const stdevInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n for (let i = from; i < n; i++) {\n const mean = windowMean(src, i, p);\n if (!finite(mean)) {\n out[i] = NaN;\n continue;\n }\n let sq = 0;\n for (let k = i - p + 1; k <= i; k++) {\n const d = src[k] - mean;\n sq += d * d;\n }\n out[i] = Math.sqrt(sq / p);\n }\n};\n\n/** Highest value of the window ending at each index */\nconst extremeInto = (\n src: Values,\n n: number,\n p: number,\n out: Float64Array,\n from: number,\n highest: boolean,\n) => {\n for (let i = from; i < n; i++) {\n if (i < p - 1) {\n out[i] = NaN;\n continue;\n }\n let m = highest ? -Infinity : Infinity;\n for (let k = i - p + 1; k <= i; k++) {\n const v = src[k];\n if (!finite(v)) {\n m = NaN;\n break;\n }\n if (highest ? v > m : v < m) m = v;\n }\n out[i] = m;\n }\n};\n\n/** RSI with Wilder smoothing; `gain` / `loss` hold the running averages */\nexport const rsiInto = (\n close: Values,\n n: number,\n period: number,\n out: Float64Array,\n gain: Float64Array,\n loss: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n for (let i = from; i < n; i++) {\n gain[i] = loss[i] = NaN;\n out[i] = NaN;\n if (i === 0) continue;\n const change = close[i] - close[i - 1];\n if (!finite(change)) continue;\n if (finite(gain[i - 1]) && finite(loss[i - 1])) {\n gain[i] = (gain[i - 1] * (p - 1) + Math.max(change, 0)) / p;\n loss[i] = (loss[i - 1] * (p - 1) + Math.max(-change, 0)) / p;\n } else if (i >= p) {\n let g = 0;\n let l = 0;\n let ok = true;\n for (let k = i - p + 1; k <= i; k++) {\n const c = close[k] - close[k - 1];\n if (!finite(c)) {\n ok = false;\n break;\n }\n if (c > 0) g += c;\n else l -= c;\n }\n if (!ok) continue;\n gain[i] = g / p;\n loss[i] = l / p;\n } else {\n continue;\n }\n out[i] =\n loss[i] === 0\n ? gain[i] === 0\n ? 50\n : 100\n : 100 - 100 / (1 + gain[i] / loss[i]);\n }\n};\n\n/** True range of each bar */\nexport const trueRangeInto = (\n high: Values,\n low: Values,\n close: Values,\n n: number,\n out: Float64Array,\n from = 0,\n): void => {\n for (let i = from; i < n; i++) {\n const range = high[i] - low[i];\n if (i === 0 || !finite(close[i - 1])) {\n out[i] = range;\n continue;\n }\n const pc = close[i - 1];\n out[i] = Math.max(range, Math.abs(high[i] - pc), Math.abs(low[i] - pc));\n }\n};\n\n/** KDJ: K and D smoothed from the raw stochastic value (seeded at 50), J = 3K − 2D */\nexport const kdjInto = (\n high: Values,\n low: Values,\n close: Values,\n n: number,\n period: number,\n kPeriod: number,\n dPeriod: number,\n k: Float64Array,\n d: Float64Array,\n j: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n const m1 = periodOf(kPeriod);\n const m2 = periodOf(dPeriod);\n for (let i = from; i < n; i++) {\n k[i] = d[i] = j[i] = NaN;\n if (i < p - 1) continue;\n let hh = -Infinity;\n let ll = Infinity;\n for (let q = i - p + 1; q <= i; q++) {\n if (high[q] > hh) hh = high[q];\n if (low[q] < ll) ll = low[q];\n }\n const c = close[i];\n if (!finite(hh) || !finite(ll) || !finite(c)) continue;\n const rsv = hh === ll ? 50 : ((c - ll) / (hh - ll)) * 100;\n const pk = i > 0 && finite(k[i - 1]) ? k[i - 1] : 50;\n const pd = i > 0 && finite(d[i - 1]) ? d[i - 1] : 50;\n k[i] = ((m1 - 1) * pk + rsv) / m1;\n d[i] = ((m2 - 1) * pd + k[i]) / m2;\n j[i] = 3 * k[i] - 2 * d[i];\n }\n};\n\nconst DAY = 86_400_000;\n\n/** Session key of a time: bars with the same key are in the same VWAP period */\nexport const sessionKey = (\n time: number,\n reset: \"day\" | \"week\" | \"month\" | \"none\",\n utcOffset = 0,\n): number => {\n if (reset === \"none\") return 0;\n const t = time + utcOffset * 60_000;\n const day = Math.floor(t / DAY);\n if (reset === \"day\") return day;\n // 1970-01-01 is a Thursday: weeks start on Monday\n if (reset === \"week\") return Math.floor((day + 3) / 7);\n const date = new Date(t);\n return date.getUTCFullYear() * 12 + date.getUTCMonth();\n};\n\n/** VWAP; `pv` / `vol` hold the cumulative sums of the period */\nexport const vwapInto = (\n high: Values,\n low: Values,\n close: Values,\n volume: Values,\n time: Values | null,\n n: number,\n reset: \"day\" | \"week\" | \"month\" | \"none\",\n utcOffset: number,\n out: Float64Array,\n pv: Float64Array,\n vol: Float64Array,\n from = 0,\n): void => {\n for (let i = from; i < n; i++) {\n const tp = (high[i] + low[i] + close[i]) / 3;\n const v = finite(volume[i]) ? volume[i] : 0;\n const same =\n i > 0 &&\n (!time ||\n sessionKey(time[i], reset, utcOffset) ===\n sessionKey(time[i - 1], reset, utcOffset));\n const basePv = same && finite(pv[i - 1]) ? pv[i - 1] : 0;\n const baseV = same && finite(vol[i - 1]) ? vol[i - 1] : 0;\n pv[i] = basePv + (finite(tp) ? tp * v : 0);\n vol[i] = baseV + v;\n out[i] = vol[i] > 0 ? pv[i] / vol[i] : finite(tp) ? tp : NaN;\n }\n};\n\n/** Heikin-Ashi bars from regular bars */\nexport const heikinAshiInto = (\n open: Values,\n high: Values,\n low: Values,\n close: Values,\n n: number,\n out: {\n open: Float64Array;\n high: Float64Array;\n low: Float64Array;\n close: Float64Array;\n },\n from = 0,\n): void => {\n for (let i = from; i < n; i++) {\n const c = (open[i] + high[i] + low[i] + close[i]) / 4;\n const prevOpen = i > 0 ? out.open[i - 1] : NaN;\n const prevClose = i > 0 ? out.close[i - 1] : NaN;\n const o =\n finite(prevOpen) && finite(prevClose)\n ? (prevOpen + prevClose) / 2\n : (open[i] + close[i]) / 2;\n out.open[i] = o;\n out.close[i] = c;\n out.high[i] = Math.max(high[i], o, c);\n out.low[i] = Math.min(low[i], o, c);\n }\n};\n\n// ------------------------------------------------------- public functions\n\n/**\n * Simple moving average: the mean of the last `period` values (NaN until\n * `period` values are available)\n */\nexport const sma = (values: Values, period: number): Float64Array => {\n const out = nanArray(values.length);\n smaInto(values, values.length, period, out);\n return out;\n};\n\n/** Exponential moving average, seeded with the simple average of the first `period` values */\nexport const ema = (values: Values, period: number): Float64Array => {\n const out = nanArray(values.length);\n emaInto(values, values.length, period, out);\n return out;\n};\n\n/** Linearly weighted moving average: the newest value weighs `period`, the oldest 1 */\nexport const wma = (values: Values, period: number): Float64Array => {\n const out = nanArray(values.length);\n wmaInto(values, values.length, period, out);\n return out;\n};\n\n/** Bollinger bands: simple average ± `multiplier` population standard deviations */\nexport const bollinger = (\n values: Values,\n period = 20,\n multiplier = 2,\n): { middle: Float64Array; upper: Float64Array; lower: Float64Array } => {\n const n = values.length;\n const middle = nanArray(n);\n const upper = nanArray(n);\n const lower = nanArray(n);\n const dev = nanArray(n);\n smaInto(values, n, period, middle);\n stdevInto(values, n, period, dev);\n for (let i = 0; i < n; i++) {\n upper[i] = middle[i] + multiplier * dev[i];\n lower[i] = middle[i] - multiplier * dev[i];\n }\n return { middle, upper, lower };\n};\n\n/** MACD line (fast EMA − slow EMA), its signal EMA and their difference */\nexport const macd = (\n values: Values,\n fast = 12,\n slow = 26,\n signal = 9,\n): { macd: Float64Array; signal: Float64Array; histogram: Float64Array } => {\n const n = values.length;\n const f = nanArray(n);\n const s = nanArray(n);\n emaInto(values, n, fast, f);\n emaInto(values, n, slow, s);\n const line = nanArray(n);\n for (let i = 0; i < n; i++) line[i] = f[i] - s[i];\n const sig = nanArray(n);\n emaInto(line, n, signal, sig);\n const histogram = nanArray(n);\n for (let i = 0; i < n; i++) histogram[i] = line[i] - sig[i];\n return { macd: line, signal: sig, histogram };\n};\n\n/** Relative strength index (0-100) with Wilder smoothing */\nexport const rsi = (values: Values, period = 14): Float64Array => {\n const n = values.length;\n const out = nanArray(n);\n rsiInto(values, n, period, out, nanArray(n), nanArray(n));\n return out;\n};\n\n/** KDJ stochastic: K and D smoothed (seeded at 50), J = 3K − 2D */\nexport const kdj = (\n high: Values,\n low: Values,\n close: Values,\n period = 9,\n kPeriod = 3,\n dPeriod = 3,\n): { k: Float64Array; d: Float64Array; j: Float64Array } => {\n const n = close.length;\n const k = nanArray(n);\n const d = nanArray(n);\n const j = nanArray(n);\n kdjInto(high, low, close, n, period, kPeriod, dPeriod, k, d, j);\n return { k, d, j };\n};\n\n/** Average true range with Wilder smoothing */\nexport const atr = (\n high: Values,\n low: Values,\n close: Values,\n period = 14,\n): Float64Array => {\n const n = close.length;\n const tr = nanArray(n);\n trueRangeInto(high, low, close, n, tr);\n const out = nanArray(n);\n rmaInto(tr, n, period, out);\n return out;\n};\n\n/**\n * Volume-weighted average of the typical price (high + low + close) / 3,\n * restarting each `reset` period (UTC, or shifted by `utcOffset` minutes);\n * without `time`, a single cumulative average\n */\nexport const vwap = (\n high: Values,\n low: Values,\n close: Values,\n volume: Values,\n options: {\n time?: Values;\n reset?: \"day\" | \"week\" | \"month\" | \"none\";\n utcOffset?: number;\n } = {},\n): Float64Array => {\n const n = close.length;\n const out = nanArray(n);\n vwapInto(\n high,\n low,\n close,\n volume,\n options.time ?? null,\n n,\n options.reset ?? \"day\",\n options.utcOffset ?? 0,\n out,\n nanArray(n),\n nanArray(n),\n );\n return out;\n};\n\n/** Heikin-Ashi bars: averaged bars that smooth out the noise of trends */\nexport const heikinAshi = (bars: {\n open: Values;\n high: Values;\n low: Values;\n close: Values;\n}): {\n open: Float64Array;\n high: Float64Array;\n low: Float64Array;\n close: Float64Array;\n} => {\n const n = bars.close.length;\n const out = {\n open: nanArray(n),\n high: nanArray(n),\n low: nanArray(n),\n close: nanArray(n),\n };\n heikinAshiInto(bars.open, bars.high, bars.low, bars.close, n, out);\n return out;\n};\n\n// -------------------------------------------------------------- timeframes\n\n/** A parsed timeframe: a count of a unit, with its approximate duration */\nexport interface ParsedTimeframe {\n unit: \"ms\" | \"month\";\n count: number;\n /** Approximate duration in ms (30 days per month) */\n ms: number;\n}\n\nconst UNIT_MS: Record<string, number> = {\n s: 1000,\n m: 60_000,\n h: 3_600_000,\n H: 3_600_000,\n d: DAY,\n D: DAY,\n w: 7 * DAY,\n W: 7 * DAY,\n};\n\n/** `\"15m\"` -> 15 minutes, `\"1M\"` -> 1 month; `null` when invalid */\nexport const parseTimeframe = (\n timeframe: TradingTimeframe,\n): ParsedTimeframe | null => {\n if (typeof timeframe === \"number\") {\n return timeframe > 0\n ? { unit: \"ms\", count: timeframe, ms: timeframe }\n : null;\n }\n const match = /^(\\d+(?:\\.\\d+)?)([smhHdDwWM])$/.exec(timeframe.trim());\n if (!match) return null;\n const count = Number(match[1]);\n if (!(count > 0)) return null;\n const unit = match[2];\n if (unit === \"M\") return { unit: \"month\", count, ms: count * 30 * DAY };\n return {\n unit: \"ms\",\n count: count * UNIT_MS[unit],\n ms: count * UNIT_MS[unit],\n };\n};\n\n/** Start of the bucket of `time` (weeks start on Monday, months on the 1st) */\nexport const bucketStart = (\n time: number,\n tf: ParsedTimeframe,\n utcOffset = 0,\n): number => {\n const shift = utcOffset * 60_000;\n const t = time + shift;\n if (tf.unit === \"month\") {\n const date = new Date(t);\n const months = date.getUTCFullYear() * 12 + date.getUTCMonth();\n const start = months - (months % tf.count);\n return Date.UTC(Math.floor(start / 12), start % 12, 1) - shift;\n }\n if (tf.count % (7 * DAY) === 0) {\n // Monday-aligned weeks (the epoch is a Thursday)\n const monday = 4 * DAY;\n return Math.floor((t - monday) / tf.count) * tf.count + monday - shift;\n }\n return Math.floor(t / tf.count) * tf.count - shift;\n};\n\nconst isColumns = (bars: TradingBarsInput): bars is TradingBarColumns =>\n !Array.isArray(bars);\n\n/**\n * Aggregates bars into a longer timeframe (`\"5m\"` bars into `\"1H\"`, ...):\n * first open, highest high, lowest low, last close, summed volume. Buckets\n * are aligned on UTC (or shifted by `utcOffset` minutes); weeks start on\n * Monday. Columns in, columns out (Float64Array).\n */\nexport function resampleBars(\n bars: readonly TradingBar[],\n timeframe: TradingTimeframe,\n utcOffset?: number,\n): TradingBar[];\nexport function resampleBars(\n bars: TradingBarColumns,\n timeframe: TradingTimeframe,\n utcOffset?: number,\n): TradingBarColumns;\nexport function resampleBars(\n bars: TradingBarsInput,\n timeframe: TradingTimeframe,\n utcOffset = 0,\n): TradingBar[] | TradingBarColumns {\n const tf = parseTimeframe(timeframe);\n if (!tf) throw new Error(`Invalid timeframe: ${String(timeframe)}`);\n const columns = isColumns(bars);\n const n = columns ? bars.close.length : bars.length;\n const get = (i: number): TradingBar => {\n if (!columns) return (bars as readonly TradingBar[])[i];\n const c = bars as TradingBarColumns;\n return {\n time: c.time[i],\n open: c.open[i],\n high: c.high[i],\n low: c.low[i],\n close: c.close[i],\n volume: c.volume ? c.volume[i] : undefined,\n };\n };\n const out: TradingBar[] = [];\n let current: TradingBar | null = null;\n for (let i = 0; i < n; i++) {\n const bar = get(i);\n const start = bucketStart(bar.time, tf, utcOffset);\n if (!current || start !== current.time) {\n if (current) out.push(current);\n current = {\n time: start,\n open: bar.open,\n high: bar.high,\n low: bar.low,\n close: bar.close,\n volume: bar.volume ?? 0,\n };\n } else {\n if (bar.high > current.high) current.high = bar.high;\n if (bar.low < current.low) current.low = bar.low;\n current.close = bar.close;\n current.volume = (current.volume ?? 0) + (bar.volume ?? 0);\n }\n }\n if (current) out.push(current);\n if (!columns) return out;\n const m = out.length;\n const result = {\n time: new Float64Array(m),\n open: new Float64Array(m),\n high: new Float64Array(m),\n low: new Float64Array(m),\n close: new Float64Array(m),\n volume: new Float64Array(m),\n };\n out.forEach((bar, i) => {\n result.time[i] = bar.time;\n result.open[i] = bar.open;\n result.high[i] = bar.high;\n result.low[i] = bar.low;\n result.close[i] = bar.close;\n result.volume[i] = bar.volume ?? 0;\n });\n return result;\n}\n\n/** Highest / lowest of a window: exported for the KDJ-like studies of the chart */\nexport const highestInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => extremeInto(src, n, periodOf(period), out, from, true);\n\nexport const lowestInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => extremeInto(src, n, periodOf(period), out, from, false);\n"],"mappings":"AAcA,IAAMA,EAAS,OAAO,SAGhBC,EAAY,GAAc,IAAI,aAAaC,CAAC,CAAC,CAAC,KAAK,GAAG,EAEtDC,EAAY,GAAmB,KAAK,IAAI,EAAG,KAAK,MAAMC,CAAM,GAAK,CAAC,EAK3DC,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMC,EAAIH,EAASC,CAAM,EACrBG,EAAM,EACNC,EAAQ,EAEZ,IAAK,IAAIC,EAAI,KAAK,IAAI,EAAGC,EAAOJ,CAAC,EAAGG,EAAIC,EAAM,IAAK,CACjD,IAAMC,EAAIC,EAAIH,GACVT,EAAOW,CAAC,IACV,GAAOA,EACP,IAEJ,CACA,IAAK,IAAIE,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAMS,EAAIC,EAAIC,GAKd,GAJIb,EAAOW,CAAC,IACV,GAAOA,EACP,KAEEE,GAAKP,EAAG,CACV,IAAMQ,EAAMF,EAAIC,EAAIP,GAChBN,EAAOc,CAAG,IACZ,GAAOA,EACP,IAEJ,CACA,EAAID,GAAKL,IAAUF,EAAIC,EAAMD,EAAI,GACnC,CACF,EAGMS,GAAc,EAAa,EAAW,IAAc,CACxD,GAAIF,EAAIP,EAAI,EAAG,MAAO,KACtB,IAAIC,EAAM,EACV,IAAK,IAAIS,EAAIH,EAAIP,EAAI,EAAGU,GAAKH,EAAG,IAAK,CACnC,IAAMF,EAAIC,EAAII,GACd,GAAI,CAAChB,EAAOW,CAAC,EAAG,MAAO,KACvB,GAAOA,CACT,CACA,OAAOJ,EAAMD,CACf,EAMMW,GACJ,EACA,EACA,EACA,EACA,EACA,IACG,CACH,IAAK,IAAIJ,EAAIH,EAAMG,EAAI,EAAG,IAAK,CAC7B,IAAMF,EAAIC,EAAIC,GACRK,EAAOL,EAAI,EAAIM,EAAIN,EAAI,GAAK,IAC7Bb,EAAOW,CAAC,EACJX,EAAOkB,CAAI,EAAG,EAAIL,GAAKK,EAAOE,GAAST,EAAIO,GAC/C,EAAIL,GAAKE,EAAWH,EAAKC,EAAGP,CAAC,EAFlB,EAAIO,GAAK,GAG3B,CACF,EAGaQ,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMf,EAAIH,EAASC,CAAM,EACzBa,EAAWL,EAAKV,EAAGI,EAAG,GAAKA,EAAI,GAAIa,EAAKT,CAAI,CAC9C,EAGaY,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMhB,EAAIH,EAASC,CAAM,EACzBa,EAAWL,EAAKV,EAAGI,EAAG,EAAIA,EAAGa,EAAKT,CAAI,CACxC,EAGaa,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMjB,EAAIH,EAASC,CAAM,EACnBoB,EAAelB,GAAKA,EAAI,GAAM,EAC9BmB,EAAU,GAAc,CAC5B,GAAIZ,EAAIP,EAAI,EAAG,MAAO,KACtB,IAAIoB,EAAM,EACV,IAAK,IAAIV,EAAI,EAAGA,EAAIV,EAAG,IAAK,CAC1B,IAAMK,EAAIC,EAAIC,EAAIG,GAClB,GAAI,CAAChB,EAAOW,CAAC,EAAG,MAAO,KACvB,IAAQL,EAAIU,GAAKL,CACnB,CACA,OAAOe,CACT,EAEIA,EAAMhB,EAAO,EAAIe,EAAOf,EAAO,CAAC,EAAI,IACpCH,EAAMG,EAAO,EAAIK,EAAWH,EAAKF,EAAO,EAAGJ,CAAC,EAAIA,EAAI,IACxD,IAAK,IAAIO,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAMS,EAAIC,EAAIC,GACVb,EAAO0B,CAAG,GAAK1B,EAAOO,CAAG,GAAKP,EAAOW,CAAC,GACxC,EAAMe,EAAMnB,EAAMD,EAAIK,EACtB,EAAMJ,EAAMI,GAAKE,GAAKP,EAAIM,EAAIC,EAAIP,GAAK,KAEvC,EAAMmB,EAAOZ,CAAC,EACd,EAAME,EAAWH,EAAKC,EAAGP,CAAC,EAAIA,GAEhC,EAAIO,GAAKb,EAAO0B,CAAG,EAAIA,EAAMF,EAAc,GAC7C,CACF,EAGaG,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMrB,EAAIH,EAASC,CAAM,EACzB,IAAK,IAAIS,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAM0B,EAAOb,EAAWH,EAAKC,EAAGP,CAAC,EACjC,GAAI,CAACN,EAAO4B,CAAI,EAAG,CACjB,EAAIf,GAAK,IACT,QACF,CACA,IAAIgB,EAAK,EACT,IAAK,IAAIb,EAAIH,EAAIP,EAAI,EAAGU,GAAKH,EAAG,IAAK,CACnC,IAAMiB,EAAIlB,EAAII,GAAKY,EACnB,GAAME,EAAIA,CACZ,CACA,EAAIjB,GAAK,KAAK,KAAKgB,EAAKvB,CAAC,CAC3B,CACF,EA8BayB,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMzB,EAAIH,EAASC,CAAM,EACzB,IAAK,IAAIS,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAG7B,GAFA,EAAKW,GAAK,EAAKA,GAAK,IACpB,EAAIA,GAAK,IACLA,IAAM,EAAG,SACb,IAAMmB,EAASC,EAAMpB,GAAKoB,EAAMpB,EAAI,GACpC,GAAKb,EAAOgC,CAAM,EAClB,IAAIhC,EAAOkC,EAAKrB,EAAI,EAAE,GAAKb,EAAOmC,EAAKtB,EAAI,EAAE,EAC3C,EAAKA,IAAMqB,EAAKrB,EAAI,IAAMP,EAAI,GAAK,KAAK,IAAI0B,EAAQ,CAAC,GAAK1B,EAC1D,EAAKO,IAAMsB,EAAKtB,EAAI,IAAMP,EAAI,GAAK,KAAK,IAAI,CAAC0B,EAAQ,CAAC,GAAK1B,OACtD,GAAIO,GAAKP,EAAG,CACjB,IAAI8B,EAAI,EACJC,EAAI,EACJC,EAAK,GACT,IAAK,IAAItB,EAAIH,EAAIP,EAAI,EAAGU,GAAKH,EAAG,IAAK,CACnC,IAAM0B,EAAIN,EAAMjB,GAAKiB,EAAMjB,EAAI,GAC/B,GAAI,CAAChB,EAAOuC,CAAC,EAAG,CACd,EAAK,GACL,KACF,CACIA,EAAI,EAAG,GAAKA,EACX,GAAKA,CACZ,CACA,GAAI,CAACD,EAAI,SACT,EAAKzB,GAAKuB,EAAI9B,EACd,EAAKO,GAAKwB,EAAI/B,CAChB,MACE,SAEF,EAAIO,GACFsB,EAAKtB,KAAO,EACRqB,EAAKrB,KAAO,EACV,GACA,IACF,IAAM,KAAO,EAAIqB,EAAKrB,GAAKsB,EAAKtB,GAPpC,CAQJ,CACF,EAGa2B,GACX,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAK,IAAI3B,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAMuC,EAAQC,EAAK7B,GAAK8B,EAAI9B,GAC5B,GAAIA,IAAM,GAAK,CAACb,EAAOiC,EAAMpB,EAAI,EAAE,EAAG,CACpC,EAAIA,GAAK4B,EACT,QACF,CACA,IAAMG,EAAKX,EAAMpB,EAAI,GACrB,EAAIA,GAAK,KAAK,IAAI4B,EAAO,KAAK,IAAIC,EAAK7B,GAAK+B,CAAE,EAAG,KAAK,IAAID,EAAI9B,GAAK+B,CAAE,CAAC,CACxE,CACF,EAGaC,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAM,EAAI1C,EAASC,CAAM,EACnB0C,EAAK3C,EAAS4C,CAAO,EACrBC,EAAK7C,EAAS8C,CAAO,EAC3B,IAAK,IAAIpC,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAE7B,GADA,EAAEW,GAAK,EAAEA,GAAK,EAAEA,GAAK,IACjBA,EAAI,EAAI,EAAG,SACf,IAAIqC,EAAK,KACLC,EAAK,IACT,IAAK,IAAIC,EAAIvC,EAAI,EAAI,EAAGuC,GAAKvC,EAAG,IAC1B6B,EAAKU,GAAKF,IAAI,EAAKR,EAAKU,IACxBT,EAAIS,GAAKD,IAAI,EAAKR,EAAIS,IAE5B,IAAMb,EAAIN,EAAMpB,GAChB,GAAI,CAACb,EAAOkD,CAAE,GAAK,CAAClD,EAAOmD,CAAE,GAAK,CAACnD,EAAOuC,CAAC,EAAG,SAC9C,IAAMc,EAAMH,IAAOC,EAAK,IAAOZ,EAAIY,IAAOD,EAAKC,GAAO,IAChDG,EAAKzC,EAAI,GAAKb,EAAOgB,EAAEH,EAAI,EAAE,EAAIG,EAAEH,EAAI,GAAK,GAC5C0C,EAAK1C,EAAI,GAAKb,EAAO8B,EAAEjB,EAAI,EAAE,EAAIiB,EAAEjB,EAAI,GAAK,GAClD,EAAEA,KAAOiC,EAAK,GAAKQ,EAAKD,GAAOP,EAC/B,EAAEjC,KAAOmC,EAAK,GAAKO,EAAKvC,EAAEH,IAAMmC,EAChC,EAAEnC,GAAK,EAAIG,EAAEH,GAAK,EAAIiB,EAAEjB,EAC1B,CACF,EAEM2C,EAAM,MAGCC,GACX,EACA,EACA,EAAY,IACD,CACX,GAAIC,IAAU,OAAQ,MAAO,GAC7B,IAAMC,EAAIC,EAAOC,EAAY,IACvBC,EAAM,KAAK,MAAMH,EAAIH,CAAG,EAC9B,GAAIE,IAAU,MAAO,OAAOI,EAE5B,GAAIJ,IAAU,OAAQ,OAAO,KAAK,OAAOI,EAAM,GAAK,CAAC,EACrD,IAAMC,EAAO,IAAI,KAAKJ,CAAC,EACvB,OAAOI,EAAK,eAAe,EAAI,GAAKA,EAAK,YAAY,CACvD,EAGaC,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAK,IAAInD,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAM+D,GAAMvB,EAAK7B,GAAK8B,EAAI9B,GAAKoB,EAAMpB,IAAM,EACrCF,EAAIX,EAAOkE,EAAOrD,EAAE,EAAIqD,EAAOrD,GAAK,EACpCsD,EACJtD,EAAI,IACH,CAAC+C,GACAH,EAAWG,EAAK/C,GAAI6C,EAAOG,CAAS,IAClCJ,EAAWG,EAAK/C,EAAI,GAAI6C,EAAOG,CAAS,GACxCO,EAASD,GAAQnE,EAAOqE,EAAGxD,EAAI,EAAE,EAAIwD,EAAGxD,EAAI,GAAK,EACjDyD,EAAQH,GAAQnE,EAAOuE,EAAI1D,EAAI,EAAE,EAAI0D,EAAI1D,EAAI,GAAK,EACxD,EAAGA,GAAKuD,GAAUpE,EAAOiE,CAAE,EAAIA,EAAKtD,EAAI,GACxC,EAAIE,GAAKyD,EAAQ3D,EACjB,EAAIE,GAAK0D,EAAI1D,GAAK,EAAIwD,EAAGxD,GAAK0D,EAAI1D,GAAKb,EAAOiE,CAAE,EAAIA,EAAK,GAC3D,CACF,EAGaO,GACX,EACA,EACA,EACA,EACA,EACA,EAMA,EAAO,IACE,CACT,IAAK,IAAI3D,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAMqC,GAAKkC,EAAK5D,GAAK6B,EAAK7B,GAAK8B,EAAI9B,GAAKoB,EAAMpB,IAAM,EAC9C6D,EAAW7D,EAAI,EAAIM,EAAI,KAAKN,EAAI,GAAK,IACrC8D,EAAY9D,EAAI,EAAIM,EAAI,MAAMN,EAAI,GAAK,IACvC+D,EACJ5E,EAAO0E,CAAQ,GAAK1E,EAAO2E,CAAS,GAC/BD,EAAWC,GAAa,GACxBF,EAAK5D,GAAKoB,EAAMpB,IAAM,EAC7B,EAAI,KAAKA,GAAK+D,EACd,EAAI,MAAM/D,GAAK0B,EACf,EAAI,KAAK1B,GAAK,KAAK,IAAI6B,EAAK7B,GAAI+D,EAAGrC,CAAC,EACpC,EAAI,IAAI1B,GAAK,KAAK,IAAI8B,EAAI9B,GAAI+D,EAAGrC,CAAC,CACpC,CACF,EAQasC,GAAO,EAAgB,IAAiC,CACnE,IAAM1D,EAAMlB,EAAS6E,EAAO,MAAM,EAElC,OADAzE,EAAQyE,EAAQA,EAAO,OAAQ1E,EAAQe,CAAG,EACnCA,CACT,EAGa4D,GAAO,EAAgB,IAAiC,CACnE,IAAM5D,EAAMlB,EAAS6E,EAAO,MAAM,EAElC,OADAzD,EAAQyD,EAAQA,EAAO,OAAQ1E,EAAQe,CAAG,EACnCA,CACT,EAGa6D,GAAO,EAAgB,IAAiC,CACnE,IAAM7D,EAAMlB,EAAS6E,EAAO,MAAM,EAElC,OADAvD,EAAQuD,EAAQA,EAAO,OAAQ1E,EAAQe,CAAG,EACnCA,CACT,EAGa8D,GACX,EACA,EAAS,GACT,EAAa,IAC0D,CACvE,IAAM/E,EAAI4E,EAAO,OACXI,EAASjF,EAASC,CAAC,EACnBiF,EAAQlF,EAASC,CAAC,EAClBkF,EAAQnF,EAASC,CAAC,EAClBmF,EAAMpF,EAASC,CAAC,EACtBG,EAAQyE,EAAQ5E,EAAGE,EAAQ8E,CAAM,EACjCvD,EAAUmD,EAAQ5E,EAAGE,EAAQiF,CAAG,EAChC,IAAK,IAAIxE,EAAI,EAAGA,EAAIX,EAAG,IACrB,EAAMW,GAAKqE,EAAOrE,GAAKyE,EAAaD,EAAIxE,GACxC,EAAMA,GAAKqE,EAAOrE,GAAKyE,EAAaD,EAAIxE,GAE1C,MAAO,CAAE,SAAQ,QAAO,OAAM,CAChC,EAGa0E,GACX,EACA,EAAO,GACP,EAAO,GACP,EAAS,IACiE,CAC1E,IAAMrF,EAAI4E,EAAO,OACXU,EAAIvF,EAASC,CAAC,EACduF,EAAIxF,EAASC,CAAC,EACpBmB,EAAQyD,EAAQ5E,EAAGwF,EAAMF,CAAC,EAC1BnE,EAAQyD,EAAQ5E,EAAGyF,EAAMF,CAAC,EAC1B,IAAMG,EAAO3F,EAASC,CAAC,EACvB,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAG,IAAK,EAAKW,GAAK2E,EAAE3E,GAAK4E,EAAE5E,GAC/C,IAAMgF,EAAM5F,EAASC,CAAC,EACtBmB,EAAQuE,EAAM1F,EAAG4F,EAAQD,CAAG,EAC5B,IAAME,EAAY9F,EAASC,CAAC,EAC5B,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAG,IAAK,EAAUW,GAAK+E,EAAK/E,GAAKgF,EAAIhF,GACzD,MAAO,CAAE,KAAM+E,EAAM,OAAQC,EAAK,WAAU,CAC9C,EAGaG,GAAO,EAAgB,EAAS,KAAqB,CAChE,IAAM9F,EAAI4E,EAAO,OACX3D,EAAMlB,EAASC,CAAC,EAEtB,OADA6B,EAAQ+C,EAAQ5E,EAAGE,EAAQe,EAAKlB,EAASC,CAAC,EAAGD,EAASC,CAAC,CAAC,EACjDiB,CACT,EAGa8E,GACX,EACA,EACA,EACA,EAAS,EACT,EAAU,EACV,EAAU,IACgD,CAC1D,IAAM/F,EAAI+B,EAAM,OACVjB,EAAIf,EAASC,CAAC,EACd4B,EAAI7B,EAASC,CAAC,EACdO,EAAIR,EAASC,CAAC,EAEpB,OADA2C,EAAQH,EAAMC,EAAKV,EAAO/B,EAAGE,EAAQ2C,EAASE,EAASjC,EAAGc,EAAGrB,CAAC,EACvD,CAAE,IAAG,IAAG,GAAE,CACnB,EAGayF,GACX,EACA,EACA,EACA,EAAS,KACQ,CACjB,IAAMhG,EAAI+B,EAAM,OACVkE,EAAKlG,EAASC,CAAC,EACrBsC,EAAcE,EAAMC,EAAKV,EAAO/B,EAAGiG,CAAE,EACrC,IAAMhF,EAAMlB,EAASC,CAAC,EAEtB,OADAoB,EAAQ6E,EAAIjG,EAAGE,EAAQe,CAAG,EACnBA,CACT,EAOaiF,GACX,EACA,EACA,EACA,EACA,EAII,CAAC,IACY,CACjB,IAAMlG,EAAI+B,EAAM,OACVd,EAAMlB,EAASC,CAAC,EActB,OAbA8D,EACEtB,EACAC,EACAV,EACAiC,EACAmC,EAAQ,MAAQ,KAChBnG,EACAmG,EAAQ,OAAS,MACjBA,EAAQ,WAAa,EACrBlF,EACAlB,EAASC,CAAC,EACVD,EAASC,CAAC,CACZ,EACOiB,CACT,EAGamF,EAAc,GAUtB,CACH,IAAM,EAAIC,EAAK,MAAM,OACfpF,EAAM,CACV,KAAMlB,EAAS,CAAC,EAChB,KAAMA,EAAS,CAAC,EAChB,IAAKA,EAAS,CAAC,EACf,MAAOA,EAAS,CAAC,CACnB,EAEA,OADAuE,EAAe+B,EAAK,KAAMA,EAAK,KAAMA,EAAK,IAAKA,EAAK,MAAO,EAAGpF,CAAG,EAC1DA,CACT,EAYMqF,EAAkC,CACtC,EAAG,IACH,EAAG,IACH,EAAG,KACH,EAAG,KACH,EAAGhD,EACH,EAAGA,EACH,EAAG,EAAIA,EACP,EAAG,EAAIA,CACT,EAGaiD,EACX,GAC2B,CAC3B,GAAI,OAAOC,GAAc,SACvB,OAAOA,EAAY,EACf,CAAE,KAAM,KAAM,MAAOA,EAAW,GAAIA,CAAU,EAC9C,KAEN,IAAMC,EAAQ,iCAAiC,KAAKD,EAAU,KAAK,CAAC,EACpE,GAAI,CAACC,EAAO,OAAO,KACnB,IAAMC,EAAQ,OAAOD,EAAM,EAAE,EAC7B,GAAI,EAAEC,EAAQ,GAAI,OAAO,KACzB,IAAMC,EAAOF,EAAM,GAEnB,OADIE,IAAS,IAAY,CAAE,KAAM,QAAS,QAAO,GAAID,EAAQ,GAAKpD,CAAI,EAC/D,CACL,KAAM,KACN,MAAOoD,EAAQJ,EAAQK,GACvB,GAAID,EAAQJ,EAAQK,EACtB,CACF,EAGaC,GACX,EACA,EACA,EAAY,IACD,CACX,IAAMC,EAAQlD,EAAY,IACpBF,EAAIC,EAAOmD,EACjB,GAAIC,EAAG,OAAS,QAAS,CACvB,IAAMjD,EAAO,IAAI,KAAKJ,CAAC,EACjBsD,EAASlD,EAAK,eAAe,EAAI,GAAKA,EAAK,YAAY,EACvDmD,EAAQD,EAAUA,EAASD,EAAG,MACpC,OAAO,KAAK,IAAI,KAAK,MAAME,EAAQ,EAAE,EAAGA,EAAQ,GAAI,CAAC,EAAIH,CAC3D,CACA,GAAIC,EAAG,OAAS,EAAIxD,IAAS,EAAG,CAE9B,IAAM2D,EAAS,EAAI3D,EACnB,OAAO,KAAK,OAAOG,EAAIwD,GAAUH,EAAG,KAAK,EAAIA,EAAG,MAAQG,EAASJ,CACnE,CACA,OAAO,KAAK,MAAMpD,EAAIqD,EAAG,KAAK,EAAIA,EAAG,MAAQD,CAC/C,EAEMK,EAAa,GACjB,CAAC,MAAM,QAAQb,CAAI,EAkBrB,SAAgBc,EACd,EACA,EACA,EAAY,EACsB,CAClC,IAAML,EAAKP,EAAeC,CAAS,EACnC,GAAI,CAACM,EAAI,MAAU,MAAM,sBAAsB,OAAON,CAAS,GAAG,EAClE,IAAMY,EAAUF,EAAUb,CAAI,EACxBrG,EAAIoH,EAAUf,EAAK,MAAM,OAASA,EAAK,OACvCgB,EAAO,GAA0B,CACrC,GAAI,CAACD,EAAS,OAAQf,EAA+B1F,GACrD,IAAM0B,EAAIgE,EACV,MAAO,CACL,KAAMhE,EAAE,KAAK1B,GACb,KAAM0B,EAAE,KAAK1B,GACb,KAAM0B,EAAE,KAAK1B,GACb,IAAK0B,EAAE,IAAI1B,GACX,MAAO0B,EAAE,MAAM1B,GACf,OAAQ0B,EAAE,OAASA,EAAE,OAAO1B,GAAK,IAAA,EACnC,CACF,EACMM,EAAoB,CAAC,EACvBqG,EAA6B,KACjC,IAAK,IAAI3G,EAAI,EAAGA,EAAIX,EAAG,IAAK,CAC1B,IAAMuH,EAAMF,EAAI1G,CAAC,EACXqG,EAAQJ,EAAYW,EAAI,KAAMT,EAAInD,CAAS,EAC7C,CAAC2D,GAAWN,IAAUM,EAAQ,MAC5BA,GAASrG,EAAI,KAAKqG,CAAO,EAC7B,EAAU,CACR,KAAMN,EACN,KAAMO,EAAI,KACV,KAAMA,EAAI,KACV,IAAKA,EAAI,IACT,MAAOA,EAAI,MACX,OAAQA,EAAI,QAAU,CACxB,IAEIA,EAAI,KAAOD,EAAQ,OAAM,EAAQ,KAAOC,EAAI,MAC5CA,EAAI,IAAMD,EAAQ,MAAK,EAAQ,IAAMC,EAAI,KAC7C,EAAQ,MAAQA,EAAI,MACpB,EAAQ,QAAUD,EAAQ,QAAU,IAAMC,EAAI,QAAU,GAE5D,CAEA,GADID,GAASrG,EAAI,KAAKqG,CAAO,EACzB,CAACF,EAAS,OAAOnG,EACrB,IAAMuG,EAAIvG,EAAI,OACRwG,EAAS,CACb,KAAM,IAAI,aAAaD,CAAC,EACxB,KAAM,IAAI,aAAaA,CAAC,EACxB,KAAM,IAAI,aAAaA,CAAC,EACxB,IAAK,IAAI,aAAaA,CAAC,EACvB,MAAO,IAAI,aAAaA,CAAC,EACzB,OAAQ,IAAI,aAAaA,CAAC,CAC5B,EASA,OARAvG,EAAI,SAAS,EAAK,IAAM,CACtB,EAAO,KAAKN,GAAK4G,EAAI,KACrB,EAAO,KAAK5G,GAAK4G,EAAI,KACrB,EAAO,KAAK5G,GAAK4G,EAAI,KACrB,EAAO,IAAI5G,GAAK4G,EAAI,IACpB,EAAO,MAAM5G,GAAK4G,EAAI,MACtB,EAAO,OAAO5G,GAAK4G,EAAI,QAAU,CACnC,CAAC,EACME,CACT"}
1
+ {"version":3,"file":"indicators.cjs","names":["offsetOf","zoneOffset","require_format","finite","nanArray","n","periodOf","period","smaInto","p","sum","valid","j","from","v","src","i","old","windowMean","k","smoothInto","prev","out","alpha","emaInto","rmaInto","wmaInto","denominator","direct","num","stdevInto","mean","sq","d","extremeInto","queue","head","tail","lastNaN","better","highest","a","b","push","rsiInto","change","close","gain","loss","g","l","ok","c","trueRangeInto","range","high","low","pc","kdjInto","m1","kPeriod","m2","dPeriod","hh","ll","q","rsv","pk","pd","DAY","sessionKey","reset","t","time","utcOffset","day","date","vwapInto","tp","volume","same","basePv","pv","baseV","vol","heikinAshiInto","open","prevOpen","prevClose","o","obvInto","typicalInto","cciInto","typical","m","deviation","williamsRInto","lowest","mfiInto","positive","negative","flow","stochRsiInto","stochPeriod","rsiPeriod","work","dmiInto","up","down","tr","plus","minus","adxPeriod","adx","psarInto","trend","start","prevEp","ep","prevAf","af","sar","before","increment","maximum","supertrendInto","mid","multiplier","pu","upper","pl","lower","direction","midpointInto","ichimokuInto","conversionPeriod","conversion","basePeriod","base","spanBPeriod","spanB","donchianInto","keltnerInto","middle","atrPeriod","sma","values","ema","wma","bollinger","dev","macd","f","s","fast","slow","line","sig","signal","histogram","rsi","kdj","atr","vwap","zone","options","heikinAshi","bars","obv","cci","williamsR","mfi","stochRsi","dmi","psar","supertrend","value","ichimoku","keltner","donchian","volumeProfile","count","to","rows","lo","hi","empty","step","total","h","target","r0","r1","span","r","bottom","overlap","poc","wanted","inside","below","UNIT_MS","parseTimeframe","timeframe","match","unit","bucketKey","tf","months","bucketStart","key","shifted","guess","isColumns","resampleBars","offset","timeZone","columns","get","current","currentKey","bar","result"],"sources":["../../../../../charts/src/engine/trading/indicators.ts"],"sourcesContent":["// Technical indicators on columns of numbers (Float64Array out, NaN while\n// an indicator warms up). Every kernel computes the outputs from index\n// `from` on, assuming the outputs before it are up to date: the chart\n// recomputes only the last bar on each tick, even with a million bars.\n\nimport { offsetOf, zoneOffset, type UtcOffset } from \"./format\";\nimport type {\n TradingBar,\n TradingBarColumns,\n TradingBarsInput,\n TradingTimeframe,\n TradingVolumeProfile,\n} from \"./types\";\n\ntype Values = ArrayLike<number>;\n\nconst finite = Number.isFinite;\n\n/** Output array of `n` values, NaN-filled */\nconst nanArray = (n: number) => new Float64Array(n).fill(NaN);\n\nconst periodOf = (period: number) => Math.max(1, Math.floor(period) || 1);\n\n// ---------------------------------------------------------------- kernels\n\n/** Simple moving average of `src[0..n)` into `out`, from index `from` */\nexport const smaInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n let sum = 0;\n let valid = 0;\n // the window ending just before `from` (the loop below drops its oldest value)\n for (let j = Math.max(0, from - p); j < from; j++) {\n const v = src[j];\n if (finite(v)) {\n sum += v;\n valid++;\n }\n }\n for (let i = from; i < n; i++) {\n const v = src[i];\n if (finite(v)) {\n sum += v;\n valid++;\n }\n if (i >= p) {\n const old = src[i - p];\n if (finite(old)) {\n sum -= old;\n valid--;\n }\n }\n out[i] = valid === p ? sum / p : NaN;\n }\n};\n\n/** Mean of `src[i-p+1..i]`, NaN unless the window is complete */\nconst windowMean = (src: Values, i: number, p: number) => {\n if (i < p - 1) return NaN;\n let sum = 0;\n for (let k = i - p + 1; k <= i; k++) {\n const v = src[k];\n if (!finite(v)) return NaN;\n sum += v;\n }\n return sum / p;\n};\n\n/**\n * Exponential smoothing with factor `alpha`, seeded with the simple\n * average of the first complete window (the TradingView convention)\n */\nconst smoothInto = (\n src: Values,\n n: number,\n p: number,\n alpha: number,\n out: Float64Array,\n from: number,\n) => {\n for (let i = from; i < n; i++) {\n const v = src[i];\n const prev = i > 0 ? out[i - 1] : NaN;\n if (!finite(v)) out[i] = NaN;\n else if (finite(prev)) out[i] = prev + alpha * (v - prev);\n else out[i] = windowMean(src, i, p);\n }\n};\n\n/** Exponential moving average (alpha = 2 / (period + 1)) */\nexport const emaInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n smoothInto(src, n, p, 2 / (p + 1), out, from);\n};\n\n/** Wilder's moving average (alpha = 1 / period), used by RSI and ATR */\nexport const rmaInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n smoothInto(src, n, p, 1 / p, out, from);\n};\n\n/** Linearly weighted moving average (the newest bar weighs `period`) */\nexport const wmaInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n const denominator = (p * (p + 1)) / 2;\n const direct = (i: number) => {\n if (i < p - 1) return NaN;\n let num = 0;\n for (let k = 0; k < p; k++) {\n const v = src[i - k];\n if (!finite(v)) return NaN;\n num += (p - k) * v;\n }\n return num;\n };\n // numerator of the previous index and the sum of its window\n let num = from > 0 ? direct(from - 1) : NaN;\n let sum = from > 0 ? windowMean(src, from - 1, p) * p : NaN;\n for (let i = from; i < n; i++) {\n const v = src[i];\n if (finite(num) && finite(sum) && finite(v)) {\n num = num - sum + p * v;\n sum = sum + v - (i >= p ? src[i - p] : 0);\n } else {\n num = direct(i);\n sum = windowMean(src, i, p) * p;\n }\n out[i] = finite(num) ? num / denominator : NaN;\n }\n};\n\n/** Population standard deviation over the window (two passes: exact) */\nexport const stdevInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n for (let i = from; i < n; i++) {\n const mean = windowMean(src, i, p);\n if (!finite(mean)) {\n out[i] = NaN;\n continue;\n }\n let sq = 0;\n for (let k = i - p + 1; k <= i; k++) {\n const d = src[k] - mean;\n sq += d * d;\n }\n out[i] = Math.sqrt(sq / p);\n }\n};\n\n/**\n * Highest (or lowest) value of the window ending at each index, NaN while\n * the window is incomplete or holds a NaN. A monotonic queue of indices\n * makes it O(1) per bar whatever the period (Ichimoku uses 52 bars).\n */\nconst extremeInto = (\n src: Values,\n n: number,\n p: number,\n out: Float64Array,\n from: number,\n highest: boolean,\n) => {\n const queue = new Int32Array(p + 1);\n let head = 0;\n let tail = 0;\n let lastNaN = -1;\n const better = (a: number, b: number) => (highest ? a >= b : a <= b);\n const push = (i: number) => {\n const v = src[i];\n if (!finite(v)) {\n lastNaN = i;\n head = tail = 0;\n return;\n }\n while (tail > head && better(v, src[queue[(tail - 1) % (p + 1)]])) tail--;\n queue[tail % (p + 1)] = i;\n tail++;\n while (queue[head % (p + 1)] <= i - p) head++;\n };\n // the window ending just before `from`\n for (let i = Math.max(0, from - p + 1); i < from; i++) push(i);\n for (let i = from; i < n; i++) {\n push(i);\n out[i] =\n i < p - 1 || lastNaN > i - p || tail === head\n ? NaN\n : src[queue[head % (p + 1)]];\n }\n};\n\n/** RSI with Wilder smoothing; `gain` / `loss` hold the running averages */\nexport const rsiInto = (\n close: Values,\n n: number,\n period: number,\n out: Float64Array,\n gain: Float64Array,\n loss: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n for (let i = from; i < n; i++) {\n gain[i] = loss[i] = NaN;\n out[i] = NaN;\n if (i === 0) continue;\n const change = close[i] - close[i - 1];\n if (!finite(change)) continue;\n if (finite(gain[i - 1]) && finite(loss[i - 1])) {\n gain[i] = (gain[i - 1] * (p - 1) + Math.max(change, 0)) / p;\n loss[i] = (loss[i - 1] * (p - 1) + Math.max(-change, 0)) / p;\n } else if (i >= p) {\n let g = 0;\n let l = 0;\n let ok = true;\n for (let k = i - p + 1; k <= i; k++) {\n const c = close[k] - close[k - 1];\n if (!finite(c)) {\n ok = false;\n break;\n }\n if (c > 0) g += c;\n else l -= c;\n }\n if (!ok) continue;\n gain[i] = g / p;\n loss[i] = l / p;\n } else {\n continue;\n }\n out[i] =\n loss[i] === 0\n ? gain[i] === 0\n ? 50\n : 100\n : 100 - 100 / (1 + gain[i] / loss[i]);\n }\n};\n\n/** True range of each bar */\nexport const trueRangeInto = (\n high: Values,\n low: Values,\n close: Values,\n n: number,\n out: Float64Array,\n from = 0,\n): void => {\n for (let i = from; i < n; i++) {\n const range = high[i] - low[i];\n if (i === 0 || !finite(close[i - 1])) {\n out[i] = range;\n continue;\n }\n const pc = close[i - 1];\n out[i] = Math.max(range, Math.abs(high[i] - pc), Math.abs(low[i] - pc));\n }\n};\n\n/** KDJ: K and D smoothed from the raw stochastic value (seeded at 50), J = 3K − 2D */\nexport const kdjInto = (\n high: Values,\n low: Values,\n close: Values,\n n: number,\n period: number,\n kPeriod: number,\n dPeriod: number,\n k: Float64Array,\n d: Float64Array,\n j: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n const m1 = periodOf(kPeriod);\n const m2 = periodOf(dPeriod);\n for (let i = from; i < n; i++) {\n k[i] = d[i] = j[i] = NaN;\n if (i < p - 1) continue;\n let hh = -Infinity;\n let ll = Infinity;\n for (let q = i - p + 1; q <= i; q++) {\n if (high[q] > hh) hh = high[q];\n if (low[q] < ll) ll = low[q];\n }\n const c = close[i];\n if (!finite(hh) || !finite(ll) || !finite(c)) continue;\n const rsv = hh === ll ? 50 : ((c - ll) / (hh - ll)) * 100;\n const pk = i > 0 && finite(k[i - 1]) ? k[i - 1] : 50;\n const pd = i > 0 && finite(d[i - 1]) ? d[i - 1] : 50;\n k[i] = ((m1 - 1) * pk + rsv) / m1;\n d[i] = ((m2 - 1) * pd + k[i]) / m2;\n j[i] = 3 * k[i] - 2 * d[i];\n }\n};\n\nconst DAY = 86_400_000;\n\n/** Session key of a time: bars with the same key are in the same VWAP period */\nexport const sessionKey = (\n time: number,\n reset: \"day\" | \"week\" | \"month\" | \"none\",\n utcOffset: UtcOffset = 0,\n): number => {\n if (reset === \"none\") return 0;\n const t = time + offsetOf(utcOffset, time) * 60_000;\n const day = Math.floor(t / DAY);\n if (reset === \"day\") return day;\n // 1970-01-01 is a Thursday: weeks start on Monday\n if (reset === \"week\") return Math.floor((day + 3) / 7);\n const date = new Date(t);\n return date.getUTCFullYear() * 12 + date.getUTCMonth();\n};\n\n/** VWAP; `pv` / `vol` hold the cumulative sums of the period */\nexport const vwapInto = (\n high: Values,\n low: Values,\n close: Values,\n volume: Values,\n time: Values | null,\n n: number,\n reset: \"day\" | \"week\" | \"month\" | \"none\",\n utcOffset: UtcOffset,\n out: Float64Array,\n pv: Float64Array,\n vol: Float64Array,\n from = 0,\n): void => {\n for (let i = from; i < n; i++) {\n const tp = (high[i] + low[i] + close[i]) / 3;\n const v = finite(volume[i]) ? volume[i] : 0;\n const same =\n i > 0 &&\n (!time ||\n sessionKey(time[i], reset, utcOffset) ===\n sessionKey(time[i - 1], reset, utcOffset));\n const basePv = same && finite(pv[i - 1]) ? pv[i - 1] : 0;\n const baseV = same && finite(vol[i - 1]) ? vol[i - 1] : 0;\n pv[i] = basePv + (finite(tp) ? tp * v : 0);\n vol[i] = baseV + v;\n out[i] = vol[i] > 0 ? pv[i] / vol[i] : finite(tp) ? tp : NaN;\n }\n};\n\n/** Heikin-Ashi bars from regular bars */\nexport const heikinAshiInto = (\n open: Values,\n high: Values,\n low: Values,\n close: Values,\n n: number,\n out: {\n open: Float64Array;\n high: Float64Array;\n low: Float64Array;\n close: Float64Array;\n },\n from = 0,\n): void => {\n for (let i = from; i < n; i++) {\n const c = (open[i] + high[i] + low[i] + close[i]) / 4;\n const prevOpen = i > 0 ? out.open[i - 1] : NaN;\n const prevClose = i > 0 ? out.close[i - 1] : NaN;\n const o =\n finite(prevOpen) && finite(prevClose)\n ? (prevOpen + prevClose) / 2\n : (open[i] + close[i]) / 2;\n out.open[i] = o;\n out.close[i] = c;\n out.high[i] = Math.max(high[i], o, c);\n out.low[i] = Math.min(low[i], o, c);\n }\n};\n\n/** On-balance volume: the volume added on up closes, subtracted on down closes */\nexport const obvInto = (\n close: Values,\n volume: Values,\n n: number,\n out: Float64Array,\n from = 0,\n): void => {\n for (let i = from; i < n; i++) {\n if (i === 0) {\n out[i] = 0;\n continue;\n }\n const v = finite(volume[i]) ? volume[i] : 0;\n const prev = finite(out[i - 1]) ? out[i - 1] : 0;\n const change = close[i] - close[i - 1];\n out[i] = prev + (change > 0 ? v : change < 0 ? -v : 0);\n }\n};\n\n/** Typical price (high + low + close) / 3 */\nconst typicalInto = (\n high: Values,\n low: Values,\n close: Values,\n n: number,\n out: Float64Array,\n from: number,\n) => {\n for (let i = from; i < n; i++) out[i] = (high[i] + low[i] + close[i]) / 3;\n};\n\n/** Commodity channel index: distance of the typical price from its average, in mean deviations / 0.015 */\nexport const cciInto = (\n high: Values,\n low: Values,\n close: Values,\n n: number,\n period: number,\n out: Float64Array,\n typical: Float64Array,\n mean: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n typicalInto(high, low, close, n, typical, from);\n smaInto(typical, n, p, mean, from);\n for (let i = from; i < n; i++) {\n const m = mean[i];\n if (!finite(m)) {\n out[i] = NaN;\n continue;\n }\n let deviation = 0;\n for (let k = i - p + 1; k <= i; k++) deviation += Math.abs(typical[k] - m);\n deviation /= p;\n out[i] = deviation === 0 ? 0 : (typical[i] - m) / (0.015 * deviation);\n }\n};\n\n/** Williams %R (−100 to 0): the close within the range of the window, from its high */\nexport const williamsRInto = (\n high: Values,\n low: Values,\n close: Values,\n n: number,\n period: number,\n out: Float64Array,\n highest: Float64Array,\n lowest: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n extremeInto(high, n, p, highest, from, true);\n extremeInto(low, n, p, lowest, from, false);\n for (let i = from; i < n; i++) {\n const hh = highest[i];\n const ll = lowest[i];\n out[i] =\n !finite(hh) || !finite(ll)\n ? NaN\n : hh === ll\n ? -50\n : ((hh - close[i]) / (hh - ll)) * -100;\n }\n};\n\n/** Money flow index (0-100): an RSI of the typical price weighted by the volume */\nexport const mfiInto = (\n high: Values,\n low: Values,\n close: Values,\n volume: Values,\n n: number,\n period: number,\n out: Float64Array,\n typical: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n typicalInto(high, low, close, n, typical, Math.max(0, from - p - 1));\n for (let i = from; i < n; i++) {\n if (i < p) {\n out[i] = NaN;\n continue;\n }\n let positive = 0;\n let negative = 0;\n let ok = true;\n for (let k = i - p + 1; k <= i; k++) {\n const flow = typical[k] * (finite(volume[k]) ? volume[k] : 0);\n if (!finite(flow) || !finite(typical[k - 1])) {\n ok = false;\n break;\n }\n if (typical[k] > typical[k - 1]) positive += flow;\n else if (typical[k] < typical[k - 1]) negative += flow;\n }\n out[i] = !ok\n ? NaN\n : negative === 0\n ? positive === 0\n ? 50\n : 100\n : 100 - 100 / (1 + positive / negative);\n }\n};\n\n/** Working columns of the stochastic RSI */\nexport interface StochRsiWork {\n rsi: Float64Array;\n gain: Float64Array;\n loss: Float64Array;\n highest: Float64Array;\n lowest: Float64Array;\n raw: Float64Array;\n}\n\n/** Stochastic RSI: the stochastic of the RSI, smoothed into K and D */\nexport const stochRsiInto = (\n close: Values,\n n: number,\n rsiPeriod: number,\n stochPeriod: number,\n kPeriod: number,\n dPeriod: number,\n k: Float64Array,\n d: Float64Array,\n work: StochRsiWork,\n from = 0,\n): void => {\n const p = periodOf(stochPeriod);\n rsiInto(close, n, rsiPeriod, work.rsi, work.gain, work.loss, from);\n extremeInto(work.rsi, n, p, work.highest, from, true);\n extremeInto(work.rsi, n, p, work.lowest, from, false);\n for (let i = from; i < n; i++) {\n const hh = work.highest[i];\n const ll = work.lowest[i];\n work.raw[i] =\n !finite(hh) || !finite(ll)\n ? NaN\n : hh === ll\n ? 50\n : ((work.rsi[i] - ll) / (hh - ll)) * 100;\n }\n smaInto(work.raw, n, kPeriod, k, from);\n smaInto(k, n, dPeriod, d, from);\n};\n\n/** Working columns of the DMI */\nexport interface DmiWork {\n tr: Float64Array;\n plusDm: Float64Array;\n minusDm: Float64Array;\n smoothTr: Float64Array;\n smoothPlus: Float64Array;\n smoothMinus: Float64Array;\n dx: Float64Array;\n}\n\n/** Directional movement index (Wilder): +DI, −DI and the ADX */\nexport const dmiInto = (\n high: Values,\n low: Values,\n close: Values,\n n: number,\n period: number,\n adxPeriod: number,\n plus: Float64Array,\n minus: Float64Array,\n adx: Float64Array,\n work: DmiWork,\n from = 0,\n): void => {\n for (let i = from; i < n; i++) {\n if (i === 0) {\n work.tr[i] = work.plusDm[i] = work.minusDm[i] = NaN;\n continue;\n }\n const up = high[i] - high[i - 1];\n const down = low[i - 1] - low[i];\n work.plusDm[i] = up > down && up > 0 ? up : 0;\n work.minusDm[i] = down > up && down > 0 ? down : 0;\n const pc = close[i - 1];\n work.tr[i] = Math.max(\n high[i] - low[i],\n Math.abs(high[i] - pc),\n Math.abs(low[i] - pc),\n );\n }\n rmaInto(work.tr, n, period, work.smoothTr, from);\n rmaInto(work.plusDm, n, period, work.smoothPlus, from);\n rmaInto(work.minusDm, n, period, work.smoothMinus, from);\n for (let i = from; i < n; i++) {\n const tr = work.smoothTr[i];\n plus[i] = tr ? (100 * work.smoothPlus[i]) / tr : NaN;\n minus[i] = tr ? (100 * work.smoothMinus[i]) / tr : NaN;\n const sum = plus[i] + minus[i];\n work.dx[i] = !finite(sum)\n ? NaN\n : sum === 0\n ? 0\n : (100 * Math.abs(plus[i] - minus[i])) / sum;\n }\n rmaInto(work.dx, n, adxPeriod, adx, from);\n};\n\n/** Working columns of the parabolic SAR */\nexport interface PsarWork {\n /** Extreme point of the trend */\n ep: Float64Array;\n /** Acceleration factor */\n af: Float64Array;\n /** 1 rising, −1 falling */\n trend: Float64Array;\n}\n\n/** Parabolic stop and reverse (Wilder) */\nexport const psarInto = (\n high: Values,\n low: Values,\n n: number,\n start: number,\n increment: number,\n maximum: number,\n out: Float64Array,\n work: PsarWork,\n from = 0,\n): void => {\n const { ep, af, trend } = work;\n for (let i = from; i < n; i++) {\n if (i === 0) {\n out[i] = ep[i] = af[i] = trend[i] = NaN;\n continue;\n }\n if (!finite(trend[i - 1])) {\n // the first two bars set the direction\n const up = high[i] + low[i] >= high[i - 1] + low[i - 1];\n out[i] = up\n ? Math.min(low[i - 1], low[i])\n : Math.max(high[i - 1], high[i]);\n ep[i] = up\n ? Math.max(high[i - 1], high[i])\n : Math.min(low[i - 1], low[i]);\n af[i] = start;\n trend[i] = finite(out[i]) ? (up ? 1 : -1) : NaN;\n continue;\n }\n const prevEp = ep[i - 1];\n const prevAf = af[i - 1];\n let sar = out[i - 1] + prevAf * (prevEp - out[i - 1]);\n const before = i >= 2 ? i - 2 : i - 1;\n if (trend[i - 1] === 1) {\n sar = Math.min(sar, low[i - 1], low[before]);\n if (low[i] < sar) {\n trend[i] = -1;\n sar = Math.max(prevEp, high[i]);\n ep[i] = low[i];\n af[i] = start;\n } else {\n trend[i] = 1;\n ep[i] = Math.max(prevEp, high[i]);\n af[i] =\n high[i] > prevEp ? Math.min(prevAf + increment, maximum) : prevAf;\n }\n } else {\n sar = Math.max(sar, high[i - 1], high[before]);\n if (high[i] > sar) {\n trend[i] = 1;\n sar = Math.min(prevEp, low[i]);\n ep[i] = high[i];\n af[i] = start;\n } else {\n trend[i] = -1;\n ep[i] = Math.min(prevEp, low[i]);\n af[i] =\n low[i] < prevEp ? Math.min(prevAf + increment, maximum) : prevAf;\n }\n }\n out[i] = sar;\n }\n};\n\n/** Working columns of the SuperTrend */\nexport interface SupertrendWork {\n tr: Float64Array;\n atr: Float64Array;\n upper: Float64Array;\n lower: Float64Array;\n}\n\n/**\n * SuperTrend: a trailing band `multiplier` ATRs from the median price,\n * below the bars in an uptrend (`direction` 1), above them in a downtrend (−1)\n */\nexport const supertrendInto = (\n high: Values,\n low: Values,\n close: Values,\n n: number,\n period: number,\n multiplier: number,\n out: Float64Array,\n direction: Float64Array,\n work: SupertrendWork,\n from = 0,\n): void => {\n const { tr, atr: range, upper, lower } = work;\n trueRangeInto(high, low, close, n, tr, from);\n rmaInto(tr, n, period, range, from);\n for (let i = from; i < n; i++) {\n const a = range[i];\n if (!finite(a)) {\n out[i] = direction[i] = upper[i] = lower[i] = NaN;\n continue;\n }\n const mid = (high[i] + low[i]) / 2;\n let up = mid + multiplier * a;\n let down = mid - multiplier * a;\n const pu = i > 0 ? upper[i - 1] : NaN;\n const pl = i > 0 ? lower[i - 1] : NaN;\n const pc = i > 0 ? close[i - 1] : NaN;\n // the bands only tighten while the trend holds\n if (finite(pl) && !(down > pl || pc < pl)) down = pl;\n if (finite(pu) && !(up < pu || pc > pu)) up = pu;\n upper[i] = up;\n lower[i] = down;\n const pd = i > 0 ? direction[i - 1] : NaN;\n const d = !finite(pd)\n ? -1\n : pd === -1\n ? close[i] > up\n ? 1\n : -1\n : close[i] < down\n ? -1\n : 1;\n direction[i] = d;\n out[i] = d === 1 ? down : up;\n }\n};\n\n/** Midpoint of the highest high and the lowest low of a window */\nconst midpointInto = (\n high: Values,\n low: Values,\n n: number,\n period: number,\n out: Float64Array,\n highest: Float64Array,\n lowest: Float64Array,\n from: number,\n) => {\n const p = periodOf(period);\n extremeInto(high, n, p, highest, from, true);\n extremeInto(low, n, p, lowest, from, false);\n for (let i = from; i < n; i++) out[i] = (highest[i] + lowest[i]) / 2;\n};\n\n/** Working columns of Ichimoku */\nexport interface IchimokuWork {\n highest: Float64Array;\n lowest: Float64Array;\n}\n\n/**\n * Ichimoku lines at each bar (unshifted): conversion (Tenkan), base\n * (Kijun), leading span A and B (drawn `displacement − 1` bars ahead)\n */\nexport const ichimokuInto = (\n high: Values,\n low: Values,\n n: number,\n conversionPeriod: number,\n basePeriod: number,\n spanBPeriod: number,\n conversion: Float64Array,\n base: Float64Array,\n spanA: Float64Array,\n spanB: Float64Array,\n work: IchimokuWork,\n from = 0,\n): void => {\n const { highest, lowest } = work;\n midpointInto(\n high,\n low,\n n,\n conversionPeriod,\n conversion,\n highest,\n lowest,\n from,\n );\n midpointInto(high, low, n, basePeriod, base, highest, lowest, from);\n midpointInto(high, low, n, spanBPeriod, spanB, highest, lowest, from);\n for (let i = from; i < n; i++) spanA[i] = (conversion[i] + base[i]) / 2;\n};\n\n/** Donchian channel: highest high, lowest low and their midpoint */\nexport const donchianInto = (\n high: Values,\n low: Values,\n n: number,\n period: number,\n upper: Float64Array,\n lower: Float64Array,\n middle: Float64Array,\n from = 0,\n): void => {\n const p = periodOf(period);\n extremeInto(high, n, p, upper, from, true);\n extremeInto(low, n, p, lower, from, false);\n for (let i = from; i < n; i++) middle[i] = (upper[i] + lower[i]) / 2;\n};\n\n/** Keltner channel: an EMA of the close ± `multiplier` ATRs */\nexport const keltnerInto = (\n high: Values,\n low: Values,\n close: Values,\n n: number,\n period: number,\n multiplier: number,\n atrPeriod: number,\n middle: Float64Array,\n upper: Float64Array,\n lower: Float64Array,\n work: { tr: Float64Array; atr: Float64Array },\n from = 0,\n): void => {\n emaInto(close, n, period, middle, from);\n trueRangeInto(high, low, close, n, work.tr, from);\n rmaInto(work.tr, n, atrPeriod, work.atr, from);\n for (let i = from; i < n; i++) {\n upper[i] = middle[i] + multiplier * work.atr[i];\n lower[i] = middle[i] - multiplier * work.atr[i];\n }\n};\n\n// ------------------------------------------------------- public functions\n\n/**\n * Simple moving average: the mean of the last `period` values (NaN until\n * `period` values are available)\n */\nexport const sma = (values: Values, period: number): Float64Array => {\n const out = nanArray(values.length);\n smaInto(values, values.length, period, out);\n return out;\n};\n\n/** Exponential moving average, seeded with the simple average of the first `period` values */\nexport const ema = (values: Values, period: number): Float64Array => {\n const out = nanArray(values.length);\n emaInto(values, values.length, period, out);\n return out;\n};\n\n/** Linearly weighted moving average: the newest value weighs `period`, the oldest 1 */\nexport const wma = (values: Values, period: number): Float64Array => {\n const out = nanArray(values.length);\n wmaInto(values, values.length, period, out);\n return out;\n};\n\n/** Bollinger bands: simple average ± `multiplier` population standard deviations */\nexport const bollinger = (\n values: Values,\n period = 20,\n multiplier = 2,\n): { middle: Float64Array; upper: Float64Array; lower: Float64Array } => {\n const n = values.length;\n const middle = nanArray(n);\n const upper = nanArray(n);\n const lower = nanArray(n);\n const dev = nanArray(n);\n smaInto(values, n, period, middle);\n stdevInto(values, n, period, dev);\n for (let i = 0; i < n; i++) {\n upper[i] = middle[i] + multiplier * dev[i];\n lower[i] = middle[i] - multiplier * dev[i];\n }\n return { middle, upper, lower };\n};\n\n/** MACD line (fast EMA − slow EMA), its signal EMA and their difference */\nexport const macd = (\n values: Values,\n fast = 12,\n slow = 26,\n signal = 9,\n): { macd: Float64Array; signal: Float64Array; histogram: Float64Array } => {\n const n = values.length;\n const f = nanArray(n);\n const s = nanArray(n);\n emaInto(values, n, fast, f);\n emaInto(values, n, slow, s);\n const line = nanArray(n);\n for (let i = 0; i < n; i++) line[i] = f[i] - s[i];\n const sig = nanArray(n);\n emaInto(line, n, signal, sig);\n const histogram = nanArray(n);\n for (let i = 0; i < n; i++) histogram[i] = line[i] - sig[i];\n return { macd: line, signal: sig, histogram };\n};\n\n/** Relative strength index (0-100) with Wilder smoothing */\nexport const rsi = (values: Values, period = 14): Float64Array => {\n const n = values.length;\n const out = nanArray(n);\n rsiInto(values, n, period, out, nanArray(n), nanArray(n));\n return out;\n};\n\n/** KDJ stochastic: K and D smoothed (seeded at 50), J = 3K − 2D */\nexport const kdj = (\n high: Values,\n low: Values,\n close: Values,\n period = 9,\n kPeriod = 3,\n dPeriod = 3,\n): { k: Float64Array; d: Float64Array; j: Float64Array } => {\n const n = close.length;\n const k = nanArray(n);\n const d = nanArray(n);\n const j = nanArray(n);\n kdjInto(high, low, close, n, period, kPeriod, dPeriod, k, d, j);\n return { k, d, j };\n};\n\n/** Average true range with Wilder smoothing */\nexport const atr = (\n high: Values,\n low: Values,\n close: Values,\n period = 14,\n): Float64Array => {\n const n = close.length;\n const tr = nanArray(n);\n trueRangeInto(high, low, close, n, tr);\n const out = nanArray(n);\n rmaInto(tr, n, period, out);\n return out;\n};\n\n/**\n * Volume-weighted average of the typical price (high + low + close) / 3,\n * restarting each `reset` period (UTC, or shifted by `utcOffset` minutes,\n * or in the IANA `timeZone`); without `time`, a single cumulative average\n */\nexport const vwap = (\n high: Values,\n low: Values,\n close: Values,\n volume: Values,\n options: {\n time?: Values;\n reset?: \"day\" | \"week\" | \"month\" | \"none\";\n utcOffset?: number;\n timeZone?: string;\n } = {},\n): Float64Array => {\n const n = close.length;\n const out = nanArray(n);\n const zone = options.timeZone;\n vwapInto(\n high,\n low,\n close,\n volume,\n options.time ?? null,\n n,\n options.reset ?? \"day\",\n options.utcOffset ?? (zone ? (time: number) => zoneOffset(time, zone) : 0),\n out,\n nanArray(n),\n nanArray(n),\n );\n return out;\n};\n\n/** Heikin-Ashi bars: averaged bars that smooth out the noise of trends */\nexport const heikinAshi = (bars: {\n open: Values;\n high: Values;\n low: Values;\n close: Values;\n}): {\n open: Float64Array;\n high: Float64Array;\n low: Float64Array;\n close: Float64Array;\n} => {\n const n = bars.close.length;\n const out = {\n open: nanArray(n),\n high: nanArray(n),\n low: nanArray(n),\n close: nanArray(n),\n };\n heikinAshiInto(bars.open, bars.high, bars.low, bars.close, n, out);\n return out;\n};\n\n/** On-balance volume: the running sum of the volume, signed by the close change */\nexport const obv = (close: Values, volume: Values): Float64Array => {\n const out = nanArray(close.length);\n obvInto(close, volume, close.length, out);\n return out;\n};\n\n/** Commodity channel index (typically between −100 and +100 in a range) */\nexport const cci = (\n high: Values,\n low: Values,\n close: Values,\n period = 20,\n): Float64Array => {\n const n = close.length;\n const out = nanArray(n);\n cciInto(high, low, close, n, period, out, nanArray(n), nanArray(n));\n return out;\n};\n\n/** Williams %R, from −100 (close at the lowest low) to 0 (at the highest high) */\nexport const williamsR = (\n high: Values,\n low: Values,\n close: Values,\n period = 14,\n): Float64Array => {\n const n = close.length;\n const out = nanArray(n);\n williamsRInto(high, low, close, n, period, out, nanArray(n), nanArray(n));\n return out;\n};\n\n/** Money flow index (0-100): a volume-weighted RSI of the typical price */\nexport const mfi = (\n high: Values,\n low: Values,\n close: Values,\n volume: Values,\n period = 14,\n): Float64Array => {\n const n = close.length;\n const out = nanArray(n);\n mfiInto(high, low, close, volume, n, period, out, nanArray(n));\n return out;\n};\n\n/** Stochastic RSI (0-100): the stochastic of the RSI, smoothed into K and D */\nexport const stochRsi = (\n close: Values,\n options: {\n rsiPeriod?: number;\n stochPeriod?: number;\n kPeriod?: number;\n dPeriod?: number;\n } = {},\n): { k: Float64Array; d: Float64Array } => {\n const n = close.length;\n const k = nanArray(n);\n const d = nanArray(n);\n stochRsiInto(\n close,\n n,\n options.rsiPeriod ?? 14,\n options.stochPeriod ?? 14,\n options.kPeriod ?? 3,\n options.dPeriod ?? 3,\n k,\n d,\n {\n rsi: nanArray(n),\n gain: nanArray(n),\n loss: nanArray(n),\n highest: nanArray(n),\n lowest: nanArray(n),\n raw: nanArray(n),\n },\n );\n return { k, d };\n};\n\n/** Directional movement (Wilder): +DI, −DI and the average directional index */\nexport const dmi = (\n high: Values,\n low: Values,\n close: Values,\n period = 14,\n adxPeriod = 14,\n): { plus: Float64Array; minus: Float64Array; adx: Float64Array } => {\n const n = close.length;\n const plus = nanArray(n);\n const minus = nanArray(n);\n const adx = nanArray(n);\n dmiInto(high, low, close, n, period, adxPeriod, plus, minus, adx, {\n tr: nanArray(n),\n plusDm: nanArray(n),\n minusDm: nanArray(n),\n smoothTr: nanArray(n),\n smoothPlus: nanArray(n),\n smoothMinus: nanArray(n),\n dx: nanArray(n),\n });\n return { plus, minus, adx };\n};\n\n/**\n * Parabolic SAR (Wilder): a trailing stop below the bars in an uptrend,\n * above them in a downtrend, accelerating with each new extreme\n */\nexport const psar = (\n high: Values,\n low: Values,\n options: { start?: number; increment?: number; maximum?: number } = {},\n): Float64Array => {\n const n = high.length;\n const out = nanArray(n);\n const start = options.start ?? 0.02;\n psarInto(\n high,\n low,\n n,\n start,\n options.increment ?? start,\n options.maximum ?? 0.2,\n out,\n { ep: nanArray(n), af: nanArray(n), trend: nanArray(n) },\n );\n return out;\n};\n\n/**\n * SuperTrend: the trailing band (`value`) and the trend (`direction`: 1 up,\n * −1 down)\n */\nexport const supertrend = (\n high: Values,\n low: Values,\n close: Values,\n period = 10,\n multiplier = 3,\n): { value: Float64Array; direction: Float64Array } => {\n const n = close.length;\n const value = nanArray(n);\n const direction = nanArray(n);\n supertrendInto(high, low, close, n, period, multiplier, value, direction, {\n tr: nanArray(n),\n atr: nanArray(n),\n upper: nanArray(n),\n lower: nanArray(n),\n });\n return { value, direction };\n};\n\n/**\n * Ichimoku Kinkō Hyō, aligned on the bars that compute them: the leading\n * spans are plotted `displacement − 1` bars ahead and the lagging span is\n * the close plotted `displacement − 1` bars back\n */\nexport const ichimoku = (\n high: Values,\n low: Values,\n options: {\n conversionPeriod?: number;\n basePeriod?: number;\n spanBPeriod?: number;\n } = {},\n): {\n conversion: Float64Array;\n base: Float64Array;\n spanA: Float64Array;\n spanB: Float64Array;\n} => {\n const n = high.length;\n const out = {\n conversion: nanArray(n),\n base: nanArray(n),\n spanA: nanArray(n),\n spanB: nanArray(n),\n };\n ichimokuInto(\n high,\n low,\n n,\n options.conversionPeriod ?? 9,\n options.basePeriod ?? 26,\n options.spanBPeriod ?? 52,\n out.conversion,\n out.base,\n out.spanA,\n out.spanB,\n { highest: nanArray(n), lowest: nanArray(n) },\n );\n return out;\n};\n\n/** Keltner channel: EMA of the close ± `multiplier` average true ranges */\nexport const keltner = (\n high: Values,\n low: Values,\n close: Values,\n options: { period?: number; multiplier?: number; atrPeriod?: number } = {},\n): { middle: Float64Array; upper: Float64Array; lower: Float64Array } => {\n const n = close.length;\n const out = { middle: nanArray(n), upper: nanArray(n), lower: nanArray(n) };\n keltnerInto(\n high,\n low,\n close,\n n,\n options.period ?? 20,\n options.multiplier ?? 2,\n options.atrPeriod ?? 10,\n out.middle,\n out.upper,\n out.lower,\n { tr: nanArray(n), atr: nanArray(n) },\n );\n return out;\n};\n\n/** Donchian channel: highest high, lowest low and their midpoint over `period` bars */\nexport const donchian = (\n high: Values,\n low: Values,\n period = 20,\n): { upper: Float64Array; lower: Float64Array; middle: Float64Array } => {\n const n = high.length;\n const out = { upper: nanArray(n), lower: nanArray(n), middle: nanArray(n) };\n donchianInto(high, low, n, period, out.upper, out.lower, out.middle);\n return out;\n};\n\n/**\n * Volume profile: the volume of bars `from..to` (inclusive) spread over\n * `rows` price rows (each bar evenly over its low-high range), split by\n * rising / falling bars, with the point of control and the value area\n * (the rows around it holding `valueArea` of the volume, 70% by default)\n */\nexport const volumeProfile = (\n bars: {\n open: Values;\n high: Values;\n low: Values;\n close: Values;\n volume: Values;\n },\n options: {\n from?: number;\n to?: number;\n rows?: number;\n valueArea?: number;\n } = {},\n): TradingVolumeProfile => {\n const count = bars.close.length;\n const from = Math.max(0, Math.floor(options.from ?? 0));\n const to = Math.min(count - 1, Math.floor(options.to ?? count - 1));\n const rows = Math.max(1, Math.floor(options.rows ?? 24));\n let lo = Infinity;\n let hi = -Infinity;\n for (let i = from; i <= to; i++) {\n if (bars.low[i] < lo) lo = bars.low[i];\n if (bars.high[i] > hi) hi = bars.high[i];\n }\n const up = new Float64Array(rows);\n const down = new Float64Array(rows);\n const empty = {\n low: lo,\n high: hi,\n step: 0,\n up,\n down,\n total: 0,\n poc: -1,\n valueAreaFrom: -1,\n valueAreaTo: -1,\n };\n if (!finite(lo) || !finite(hi)) return empty;\n if (hi === lo) {\n hi += Math.abs(lo) * 1e-6 || 1e-6;\n lo -= Math.abs(lo) * 1e-6 || 1e-6;\n }\n const step = (hi - lo) / rows;\n let total = 0;\n for (let i = from; i <= to; i++) {\n const v = bars.volume[i];\n const l = bars.low[i];\n const h = bars.high[i];\n if (!(v > 0) || !finite(l) || !finite(h)) continue;\n const target = bars.close[i] >= bars.open[i] ? up : down;\n total += v;\n const r0 = Math.min(rows - 1, Math.max(0, Math.floor((l - lo) / step)));\n const r1 = Math.min(rows - 1, Math.max(0, Math.floor((h - lo) / step)));\n if (r0 === r1 || h <= l) {\n target[r0] += v;\n continue;\n }\n const span = h - l;\n for (let r = r0; r <= r1; r++) {\n const bottom = lo + r * step;\n const overlap = Math.min(h, bottom + step) - Math.max(l, bottom);\n if (overlap > 0) target[r] += (v * overlap) / span;\n }\n }\n if (!(total > 0)) return { ...empty, low: lo, high: hi, step };\n let poc = 0;\n for (let r = 1; r < rows; r++)\n if (up[r] + down[r] > up[poc] + down[poc]) poc = r;\n // grow the value area from the point of control toward the larger side\n const wanted = total * Math.min(1, Math.max(0, options.valueArea ?? 0.7));\n let a = poc;\n let b = poc;\n let inside = up[poc] + down[poc];\n while (inside < wanted && (a > 0 || b < rows - 1)) {\n const below = a > 0 ? up[a - 1] + down[a - 1] : -1;\n const above = b < rows - 1 ? up[b + 1] + down[b + 1] : -1;\n if (above >= below) {\n b++;\n inside += up[b] + down[b];\n } else {\n a--;\n inside += up[a] + down[a];\n }\n }\n return {\n low: lo,\n high: hi,\n step,\n up,\n down,\n total,\n poc,\n valueAreaFrom: a,\n valueAreaTo: b,\n };\n};\n\n// -------------------------------------------------------------- timeframes\n\n/** A parsed timeframe: a count of a unit, with its approximate duration */\nexport interface ParsedTimeframe {\n unit: \"ms\" | \"month\";\n count: number;\n /** Approximate duration in ms (30 days per month) */\n ms: number;\n}\n\nconst UNIT_MS: Record<string, number> = {\n s: 1000,\n m: 60_000,\n h: 3_600_000,\n H: 3_600_000,\n d: DAY,\n D: DAY,\n w: 7 * DAY,\n W: 7 * DAY,\n};\n\n/** `\"15m\"` -> 15 minutes, `\"1M\"` -> 1 month; `null` when invalid */\nexport const parseTimeframe = (\n timeframe: TradingTimeframe,\n): ParsedTimeframe | null => {\n if (typeof timeframe === \"number\") {\n return timeframe > 0\n ? { unit: \"ms\", count: timeframe, ms: timeframe }\n : null;\n }\n const match = /^(\\d+(?:\\.\\d+)?)([smhHdDwWM])$/.exec(timeframe.trim());\n if (!match) return null;\n const count = Number(match[1]);\n if (!(count > 0)) return null;\n const unit = match[2];\n if (unit === \"M\") return { unit: \"month\", count, ms: count * 30 * DAY };\n return {\n unit: \"ms\",\n count: count * UNIT_MS[unit],\n ms: count * UNIT_MS[unit],\n };\n};\n\n/**\n * Key of the bucket of `time` in the shifted (displayed) time: weeks start\n * on Monday, months on the 1st. Comparing keys rather than UTC starts keeps\n * a day whole when its offset changes (daylight saving).\n */\nexport const bucketKey = (\n time: number,\n tf: ParsedTimeframe,\n utcOffset: UtcOffset = 0,\n): number => {\n const t = time + offsetOf(utcOffset, time) * 60_000;\n if (tf.unit === \"month\") {\n const date = new Date(t);\n const months = date.getUTCFullYear() * 12 + date.getUTCMonth();\n return months - (months % tf.count);\n }\n if (tf.count % (7 * DAY) === 0) {\n // Monday-aligned weeks (the epoch is a Thursday)\n return Math.floor((t - 4 * DAY) / tf.count);\n }\n return Math.floor(t / tf.count);\n};\n\n/** Start of the bucket of `time` (weeks start on Monday, months on the 1st) */\nexport const bucketStart = (\n time: number,\n tf: ParsedTimeframe,\n utcOffset: UtcOffset = 0,\n): number => {\n const key = bucketKey(time, tf, utcOffset);\n const shifted =\n tf.unit === \"month\"\n ? Date.UTC(Math.floor(key / 12), key % 12, 1)\n : tf.count % (7 * DAY) === 0\n ? key * tf.count + 4 * DAY\n : key * tf.count;\n // the offset at the start itself (it may differ from the one at `time`)\n const guess = shifted - offsetOf(utcOffset, time) * 60_000;\n return shifted - offsetOf(utcOffset, guess) * 60_000;\n};\n\nconst isColumns = (bars: TradingBarsInput): bars is TradingBarColumns =>\n !Array.isArray(bars);\n\n/**\n * Aggregates bars into a longer timeframe (`\"5m\"` bars into `\"1H\"`, ...):\n * first open, highest high, lowest low, last close, summed volume. Buckets\n * are aligned on UTC, or shifted by `timeZone` (minutes from UTC, or an\n * IANA time zone such as `\"America/New_York\"`); weeks start on Monday.\n * Columns in, columns out (Float64Array).\n */\nexport function resampleBars(\n bars: readonly TradingBar[],\n timeframe: TradingTimeframe,\n timeZone?: number | string,\n): TradingBar[];\nexport function resampleBars(\n bars: TradingBarColumns,\n timeframe: TradingTimeframe,\n timeZone?: number | string,\n): TradingBarColumns;\nexport function resampleBars(\n bars: TradingBarsInput,\n timeframe: TradingTimeframe,\n timeZone: number | string = 0,\n): TradingBar[] | TradingBarColumns {\n const tf = parseTimeframe(timeframe);\n if (!tf) throw new Error(`Invalid timeframe: ${String(timeframe)}`);\n const offset: UtcOffset =\n typeof timeZone === \"string\"\n ? (time: number) => zoneOffset(time, timeZone)\n : timeZone;\n const columns = isColumns(bars);\n const n = columns ? bars.close.length : bars.length;\n const get = (i: number): TradingBar => {\n if (!columns) return (bars as readonly TradingBar[])[i];\n const c = bars as TradingBarColumns;\n return {\n time: c.time[i],\n open: c.open[i],\n high: c.high[i],\n low: c.low[i],\n close: c.close[i],\n volume: c.volume ? c.volume[i] : undefined,\n };\n };\n const out: TradingBar[] = [];\n let current: TradingBar | null = null;\n let currentKey = NaN;\n for (let i = 0; i < n; i++) {\n const bar = get(i);\n const key = bucketKey(bar.time, tf, offset);\n if (!current || key !== currentKey) {\n if (current) out.push(current);\n currentKey = key;\n current = {\n time: bucketStart(bar.time, tf, offset),\n open: bar.open,\n high: bar.high,\n low: bar.low,\n close: bar.close,\n volume: bar.volume ?? 0,\n };\n } else {\n if (bar.high > current.high) current.high = bar.high;\n if (bar.low < current.low) current.low = bar.low;\n current.close = bar.close;\n current.volume = (current.volume ?? 0) + (bar.volume ?? 0);\n }\n }\n if (current) out.push(current);\n if (!columns) return out;\n const m = out.length;\n const result = {\n time: new Float64Array(m),\n open: new Float64Array(m),\n high: new Float64Array(m),\n low: new Float64Array(m),\n close: new Float64Array(m),\n volume: new Float64Array(m),\n };\n out.forEach((bar, i) => {\n result.time[i] = bar.time;\n result.open[i] = bar.open;\n result.high[i] = bar.high;\n result.low[i] = bar.low;\n result.close[i] = bar.close;\n result.volume[i] = bar.volume ?? 0;\n });\n return result;\n}\n\n/** Highest / lowest of a window: exported for the KDJ-like studies of the chart */\nexport const highestInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => extremeInto(src, n, periodOf(period), out, from, true);\n\nexport const lowestInto = (\n src: Values,\n n: number,\n period: number,\n out: Float64Array,\n from = 0,\n): void => extremeInto(src, n, periodOf(period), out, from, false);\n"],"mappings":"gCAgBA,IAAMG,EAAS,OAAO,SAGhBC,EAAY,GAAc,IAAI,aAAaC,CAAC,CAAC,CAAC,KAAK,GAAG,EAEtDC,EAAY,GAAmB,KAAK,IAAI,EAAG,KAAK,MAAMC,CAAM,GAAK,CAAC,EAK3DC,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMC,EAAIH,EAASC,CAAM,EACrBG,EAAM,EACNC,EAAQ,EAEZ,IAAK,IAAIC,EAAI,KAAK,IAAI,EAAGC,EAAOJ,CAAC,EAAGG,EAAIC,EAAM,IAAK,CACjD,IAAMC,EAAIC,EAAIH,GACVT,EAAOW,CAAC,IACV,GAAOA,EACP,IAEJ,CACA,IAAK,IAAIE,EAAIH,EAAMG,EAAI,EAAG,IAAK,CAC7B,IAAMF,EAAIC,EAAIC,GAKd,GAJIb,EAAOW,CAAC,IACV,GAAOA,EACP,KAEEE,GAAKP,EAAG,CACV,IAAMQ,EAAMF,EAAIC,EAAIP,GAChBN,EAAOc,CAAG,IACZ,GAAOA,EACP,IAEJ,CACA,EAAID,GAAKL,IAAUF,EAAIC,EAAMD,EAAI,GACnC,CACF,EAGMS,GAAc,EAAa,EAAW,IAAc,CACxD,GAAIF,EAAIP,EAAI,EAAG,MAAO,KACtB,IAAIC,EAAM,EACV,IAAK,IAAIS,EAAIH,EAAIP,EAAI,EAAGU,GAAKH,EAAG,IAAK,CACnC,IAAMF,EAAIC,EAAII,GACd,GAAI,CAAChB,EAAOW,CAAC,EAAG,MAAO,KACvB,GAAOA,CACT,CACA,OAAOJ,EAAMD,CACf,EAMMW,GACJ,EACA,EACA,EACA,EACA,EACA,IACG,CACH,IAAK,IAAIJ,EAAIH,EAAMG,EAAI,EAAG,IAAK,CAC7B,IAAMF,EAAIC,EAAIC,GACRK,EAAOL,EAAI,EAAIM,EAAIN,EAAI,GAAK,IAC7Bb,EAAOW,CAAC,EACJX,EAAOkB,CAAI,EAAG,EAAIL,GAAKK,EAAOE,GAAST,EAAIO,GAC/C,EAAIL,GAAKE,EAAWH,EAAKC,EAAGP,CAAC,EAFlB,EAAIO,GAAK,GAG3B,CACF,EAGaQ,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMf,EAAIH,EAASC,CAAM,EACzBa,EAAWL,EAAKV,EAAGI,EAAG,GAAKA,EAAI,GAAIa,EAAKT,CAAI,CAC9C,EAGaY,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMhB,EAAIH,EAASC,CAAM,EACzBa,EAAWL,EAAKV,EAAGI,EAAG,EAAIA,EAAGa,EAAKT,CAAI,CACxC,EAGaa,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMjB,EAAIH,EAASC,CAAM,EACnBoB,EAAelB,GAAKA,EAAI,GAAM,EAC9BmB,EAAU,GAAc,CAC5B,GAAIZ,EAAIP,EAAI,EAAG,MAAO,KACtB,IAAIoB,EAAM,EACV,IAAK,IAAIV,EAAI,EAAGA,EAAIV,EAAG,IAAK,CAC1B,IAAMK,EAAIC,EAAIC,EAAIG,GAClB,GAAI,CAAChB,EAAOW,CAAC,EAAG,MAAO,KACvB,IAAQL,EAAIU,GAAKL,CACnB,CACA,OAAOe,CACT,EAEIA,EAAMhB,EAAO,EAAIe,EAAOf,EAAO,CAAC,EAAI,IACpCH,EAAMG,EAAO,EAAIK,EAAWH,EAAKF,EAAO,EAAGJ,CAAC,EAAIA,EAAI,IACxD,IAAK,IAAIO,EAAIH,EAAMG,EAAI,EAAG,IAAK,CAC7B,IAAMF,EAAIC,EAAIC,GACVb,EAAO0B,CAAG,GAAK1B,EAAOO,CAAG,GAAKP,EAAOW,CAAC,GACxC,EAAMe,EAAMnB,EAAMD,EAAIK,EACtB,EAAMJ,EAAMI,GAAKE,GAAKP,EAAIM,EAAIC,EAAIP,GAAK,KAEvC,EAAMmB,EAAOZ,CAAC,EACd,EAAME,EAAWH,EAAKC,EAAGP,CAAC,EAAIA,GAEhC,EAAIO,GAAKb,EAAO0B,CAAG,EAAIA,EAAMF,EAAc,GAC7C,CACF,EAGaG,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMrB,EAAIH,EAASC,CAAM,EACzB,IAAK,IAAIS,EAAIH,EAAMG,EAAI,EAAG,IAAK,CAC7B,IAAMe,EAAOb,EAAWH,EAAKC,EAAGP,CAAC,EACjC,GAAI,CAACN,EAAO4B,CAAI,EAAG,CACjB,EAAIf,GAAK,IACT,QACF,CACA,IAAIgB,EAAK,EACT,IAAK,IAAIb,EAAIH,EAAIP,EAAI,EAAGU,GAAKH,EAAG,IAAK,CACnC,IAAMiB,EAAIlB,EAAII,GAAKY,EACnB,GAAME,EAAIA,CACZ,CACA,EAAIjB,GAAK,KAAK,KAAKgB,EAAKvB,CAAC,CAC3B,CACF,EAOMyB,GACJ,EACA,EACA,EACA,EACA,EACA,IACG,CACH,IAAMC,EAAQ,IAAI,WAAW1B,EAAI,CAAC,EAC9B2B,EAAO,EACPC,EAAO,EACPC,EAAU,GACRC,GAAU,EAAW,IAAeC,EAAUC,GAAKC,EAAID,GAAKC,EAC5DC,EAAQ,GAAc,CAC1B,IAAM7B,EAAIC,EAAIC,GACd,GAAI,CAACb,EAAOW,CAAC,EAAG,CACd,EAAUE,EACV,EAAO,EAAO,EACd,MACF,CACA,KAAOqB,EAAOD,GAAQG,EAAOzB,EAAGC,EAAIoB,GAAOE,EAAO,IAAM5B,EAAI,IAAI,GAAG,IAGnE,IAFA,EAAM4B,GAAQ5B,EAAI,IAAMO,EACxB,IACOmB,EAAMC,GAAQ3B,EAAI,KAAOO,EAAIP,GAAG,GACzC,EAEA,IAAK,IAAIO,EAAI,KAAK,IAAI,EAAGH,EAAOJ,EAAI,CAAC,EAAGO,EAAIH,EAAM,IAAK8B,EAAK3B,CAAC,EAC7D,IAAK,IAAIA,EAAIH,EAAMG,EAAI,EAAG,IACxB2B,EAAK3B,CAAC,EACN,EAAIA,GACFA,EAAIP,EAAI,GAAK6B,EAAUtB,EAAIP,GAAK4B,IAASD,EACrC,IACArB,EAAIoB,EAAMC,GAAQ3B,EAAI,IAEhC,EAGamC,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMnC,EAAIH,EAASC,CAAM,EACzB,IAAK,IAAIS,EAAIH,EAAMG,EAAI,EAAG,IAAK,CAG7B,GAFA,EAAKA,GAAK,EAAKA,GAAK,IACpB,EAAIA,GAAK,IACLA,IAAM,EAAG,SACb,IAAM6B,EAASC,EAAM9B,GAAK8B,EAAM9B,EAAI,GACpC,GAAKb,EAAO0C,CAAM,EAClB,IAAI1C,EAAO4C,EAAK/B,EAAI,EAAE,GAAKb,EAAO6C,EAAKhC,EAAI,EAAE,EAC3C,EAAKA,IAAM+B,EAAK/B,EAAI,IAAMP,EAAI,GAAK,KAAK,IAAIoC,EAAQ,CAAC,GAAKpC,EAC1D,EAAKO,IAAMgC,EAAKhC,EAAI,IAAMP,EAAI,GAAK,KAAK,IAAI,CAACoC,EAAQ,CAAC,GAAKpC,OACtD,GAAIO,GAAKP,EAAG,CACjB,IAAIwC,EAAI,EACJC,EAAI,EACJC,EAAK,GACT,IAAK,IAAIhC,EAAIH,EAAIP,EAAI,EAAGU,GAAKH,EAAG,IAAK,CACnC,IAAMoC,EAAIN,EAAM3B,GAAK2B,EAAM3B,EAAI,GAC/B,GAAI,CAAChB,EAAOiD,CAAC,EAAG,CACd,EAAK,GACL,KACF,CACIA,EAAI,EAAG,GAAKA,EACX,GAAKA,CACZ,CACA,GAAI,CAACD,EAAI,SACT,EAAKnC,GAAKiC,EAAIxC,EACd,EAAKO,GAAKkC,EAAIzC,CAChB,MACE,SAEF,EAAIO,GACFgC,EAAKhC,KAAO,EACR+B,EAAK/B,KAAO,EACV,GACA,IACF,IAAM,KAAO,EAAI+B,EAAK/B,GAAKgC,EAAKhC,GAPpC,CAQJ,CACF,EAGaqC,GACX,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAK,IAAIrC,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAMiD,EAAQC,EAAKvC,GAAKwC,EAAIxC,GAC5B,GAAIA,IAAM,GAAK,CAACb,EAAO2C,EAAM9B,EAAI,EAAE,EAAG,CACpC,EAAIA,GAAKsC,EACT,QACF,CACA,IAAMG,EAAKX,EAAM9B,EAAI,GACrB,EAAIA,GAAK,KAAK,IAAIsC,EAAO,KAAK,IAAIC,EAAKvC,GAAKyC,CAAE,EAAG,KAAK,IAAID,EAAIxC,GAAKyC,CAAE,CAAC,CACxE,CACF,EAGaC,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAM,EAAIpD,EAASC,CAAM,EACnBoD,EAAKrD,EAASsD,CAAO,EACrBC,EAAKvD,EAASwD,CAAO,EAC3B,IAAK,IAAI9C,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAE7B,GADA,EAAEW,GAAK,EAAEA,GAAK,EAAEA,GAAK,IACjBA,EAAI,EAAI,EAAG,SACf,IAAI+C,EAAK,KACLC,EAAK,IACT,IAAK,IAAIC,EAAIjD,EAAI,EAAI,EAAGiD,GAAKjD,EAAG,IAC1BuC,EAAKU,GAAKF,IAAI,EAAKR,EAAKU,IACxBT,EAAIS,GAAKD,IAAI,EAAKR,EAAIS,IAE5B,IAAMb,EAAIN,EAAM9B,GAChB,GAAI,CAACb,EAAO4D,CAAE,GAAK,CAAC5D,EAAO6D,CAAE,GAAK,CAAC7D,EAAOiD,CAAC,EAAG,SAC9C,IAAMc,EAAMH,IAAOC,EAAK,IAAOZ,EAAIY,IAAOD,EAAKC,GAAO,IAChDG,EAAKnD,EAAI,GAAKb,EAAOgB,EAAEH,EAAI,EAAE,EAAIG,EAAEH,EAAI,GAAK,GAC5CoD,EAAKpD,EAAI,GAAKb,EAAO8B,EAAEjB,EAAI,EAAE,EAAIiB,EAAEjB,EAAI,GAAK,GAClD,EAAEA,KAAO2C,EAAK,GAAKQ,EAAKD,GAAOP,EAC/B,EAAE3C,KAAO6C,EAAK,GAAKO,EAAKjD,EAAEH,IAAM6C,EAChC,EAAE7C,GAAK,EAAIG,EAAEH,GAAK,EAAIiB,EAAEjB,EAC1B,CACF,EAEMqD,EAAM,MAGCC,GACX,EACA,EACA,EAAuB,IACZ,CACX,GAAIC,IAAU,OAAQ,MAAO,GAC7B,IAAMC,EAAIC,EAAOzE,EAAAA,SAAS0E,EAAWD,CAAI,EAAI,IACvCE,EAAM,KAAK,MAAMH,EAAIH,CAAG,EAC9B,GAAIE,IAAU,MAAO,OAAOI,EAE5B,GAAIJ,IAAU,OAAQ,OAAO,KAAK,OAAOI,EAAM,GAAK,CAAC,EACrD,IAAMC,EAAO,IAAI,KAAKJ,CAAC,EACvB,OAAOI,EAAK,eAAe,EAAI,GAAKA,EAAK,YAAY,CACvD,EAGaC,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAK,IAAI7D,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAMyE,GAAMvB,EAAKvC,GAAKwC,EAAIxC,GAAK8B,EAAM9B,IAAM,EACrCF,EAAIX,EAAO4E,EAAO/D,EAAE,EAAI+D,EAAO/D,GAAK,EACpCgE,EACJhE,EAAI,IACH,CAACyD,GACAH,EAAWG,EAAKzD,GAAIuD,EAAOG,CAAS,IAClCJ,EAAWG,EAAKzD,EAAI,GAAIuD,EAAOG,CAAS,GACxCO,EAASD,GAAQ7E,EAAO+E,EAAGlE,EAAI,EAAE,EAAIkE,EAAGlE,EAAI,GAAK,EACjDmE,EAAQH,GAAQ7E,EAAOiF,EAAIpE,EAAI,EAAE,EAAIoE,EAAIpE,EAAI,GAAK,EACxD,EAAGA,GAAKiE,GAAU9E,EAAO2E,CAAE,EAAIA,EAAKhE,EAAI,GACxC,EAAIE,GAAKmE,EAAQrE,EACjB,EAAIE,GAAKoE,EAAIpE,GAAK,EAAIkE,EAAGlE,GAAKoE,EAAIpE,GAAKb,EAAO2E,CAAE,EAAIA,EAAK,GAC3D,CACF,EAGaO,GACX,EACA,EACA,EACA,EACA,EACA,EAMA,EAAO,IACE,CACT,IAAK,IAAIrE,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAM+C,GAAKkC,EAAKtE,GAAKuC,EAAKvC,GAAKwC,EAAIxC,GAAK8B,EAAM9B,IAAM,EAC9CuE,EAAWvE,EAAI,EAAIM,EAAI,KAAKN,EAAI,GAAK,IACrCwE,EAAYxE,EAAI,EAAIM,EAAI,MAAMN,EAAI,GAAK,IACvCyE,EACJtF,EAAOoF,CAAQ,GAAKpF,EAAOqF,CAAS,GAC/BD,EAAWC,GAAa,GACxBF,EAAKtE,GAAK8B,EAAM9B,IAAM,EAC7B,EAAI,KAAKA,GAAKyE,EACd,EAAI,MAAMzE,GAAKoC,EACf,EAAI,KAAKpC,GAAK,KAAK,IAAIuC,EAAKvC,GAAIyE,EAAGrC,CAAC,EACpC,EAAI,IAAIpC,GAAK,KAAK,IAAIwC,EAAIxC,GAAIyE,EAAGrC,CAAC,CACpC,CACF,EAGasC,GACX,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAK,IAAI1E,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,GAAIW,IAAM,EAAG,CACX,EAAIA,GAAK,EACT,QACF,CACA,IAAMF,EAAIX,EAAO4E,EAAO/D,EAAE,EAAI+D,EAAO/D,GAAK,EACpCK,EAAOlB,EAAOmB,EAAIN,EAAI,EAAE,EAAIM,EAAIN,EAAI,GAAK,EACzC6B,EAASC,EAAM9B,GAAK8B,EAAM9B,EAAI,GACpC,EAAIA,GAAKK,GAAQwB,EAAS,EAAI/B,EAAI+B,EAAS,EAAI,CAAC/B,EAAI,EACtD,CACF,EAGM6E,GACJ,EACA,EACA,EACA,EACA,EACA,IACG,CACH,IAAK,IAAI3E,EAAIH,EAAMG,EAAIX,EAAG,IAAK,EAAIW,IAAMuC,EAAKvC,GAAKwC,EAAIxC,GAAK8B,EAAM9B,IAAM,CAC1E,EAGa4E,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMnF,EAAIH,EAASC,CAAM,EACzBoF,EAAYpC,EAAMC,EAAKV,EAAOzC,EAAGwF,EAAShF,CAAI,EAC9CL,EAAQqF,EAASxF,EAAGI,EAAGsB,EAAMlB,CAAI,EACjC,IAAK,IAAIG,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAMyF,EAAI/D,EAAKf,GACf,GAAI,CAACb,EAAO2F,CAAC,EAAG,CACd,EAAI9E,GAAK,IACT,QACF,CACA,IAAI+E,EAAY,EAChB,IAAK,IAAI5E,EAAIH,EAAIP,EAAI,EAAGU,GAAKH,EAAG,IAAK,GAAa,KAAK,IAAI6E,EAAQ1E,GAAK2E,CAAC,EACzE,GAAarF,EACb,EAAIO,GAAK+E,IAAc,EAAI,GAAKF,EAAQ7E,GAAK8E,IAAM,KAAQC,EAC7D,CACF,EAGaC,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMvF,EAAIH,EAASC,CAAM,EACzB2B,EAAYqB,EAAMlD,EAAGI,EAAG+B,EAAS3B,EAAM,EAAI,EAC3CqB,EAAYsB,EAAKnD,EAAGI,EAAGwF,EAAQpF,EAAM,EAAK,EAC1C,IAAK,IAAIG,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAM0D,EAAKvB,EAAQxB,GACbgD,EAAKiC,EAAOjF,GAClB,EAAIA,GACF,CAACb,EAAO4D,CAAE,GAAK,CAAC5D,EAAO6D,CAAE,EACrB,IACAD,IAAOC,EACL,KACED,EAAKjB,EAAM9B,KAAO+C,EAAKC,GAAO,IAC1C,CACF,EAGakC,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMzF,EAAIH,EAASC,CAAM,EACzBoF,EAAYpC,EAAMC,EAAKV,EAAOzC,EAAGwF,EAAS,KAAK,IAAI,EAAGhF,EAAOJ,EAAI,CAAC,CAAC,EACnE,IAAK,IAAIO,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,GAAIW,EAAIP,EAAG,CACT,EAAIO,GAAK,IACT,QACF,CACA,IAAImF,EAAW,EACXC,EAAW,EACXjD,EAAK,GACT,IAAK,IAAIhC,EAAIH,EAAIP,EAAI,EAAGU,GAAKH,EAAG,IAAK,CACnC,IAAMqF,EAAOR,EAAQ1E,IAAMhB,EAAO4E,EAAO5D,EAAE,EAAI4D,EAAO5D,GAAK,GAC3D,GAAI,CAAChB,EAAOkG,CAAI,GAAK,CAAClG,EAAO0F,EAAQ1E,EAAI,EAAE,EAAG,CAC5C,EAAK,GACL,KACF,CACI0E,EAAQ1E,GAAK0E,EAAQ1E,EAAI,GAAI,GAAYkF,EACpCR,EAAQ1E,GAAK0E,EAAQ1E,EAAI,KAAI,GAAYkF,EACpD,CACA,EAAIrF,GAAMmC,EAENiD,IAAa,EACXD,IAAa,EACX,GACA,IACF,IAAM,KAAO,EAAIA,EAAWC,GAL9B,GAMN,CACF,EAaaE,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAM7F,EAAIH,EAASiG,CAAW,EAC9B3D,EAAQE,EAAO,EAAG0D,EAAWC,EAAK,IAAKA,EAAK,KAAMA,EAAK,KAAM5F,CAAI,EACjEqB,EAAYuE,EAAK,IAAK,EAAGhG,EAAGgG,EAAK,QAAS5F,EAAM,EAAI,EACpDqB,EAAYuE,EAAK,IAAK,EAAGhG,EAAGgG,EAAK,OAAQ5F,EAAM,EAAK,EACpD,IAAK,IAAIG,EAAIH,EAAMG,EAAI,EAAG,IAAK,CAC7B,IAAM+C,EAAK0C,EAAK,QAAQzF,GAClBgD,EAAKyC,EAAK,OAAOzF,GACvB,EAAK,IAAIA,GACP,CAACb,EAAO4D,CAAE,GAAK,CAAC5D,EAAO6D,CAAE,EACrB,IACAD,IAAOC,EACL,IACEyC,EAAK,IAAIzF,GAAKgD,IAAOD,EAAKC,GAAO,GAC7C,CACAxD,EAAQiG,EAAK,IAAK,EAAG7C,EAASzC,EAAGN,CAAI,EACrCL,EAAQW,EAAG,EAAG2C,EAAS7B,EAAGpB,CAAI,CAChC,EAca6F,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAK,IAAI1F,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,GAAIW,IAAM,EAAG,CACX,EAAK,GAAGA,GAAK,EAAK,OAAOA,GAAK,EAAK,QAAQA,GAAK,IAChD,QACF,CACA,IAAM2F,EAAKpD,EAAKvC,GAAKuC,EAAKvC,EAAI,GACxB4F,EAAOpD,EAAIxC,EAAI,GAAKwC,EAAIxC,GAC9B,EAAK,OAAOA,GAAK2F,EAAKC,GAAQD,EAAK,EAAIA,EAAK,EAC5C,EAAK,QAAQ3F,GAAK4F,EAAOD,GAAMC,EAAO,EAAIA,EAAO,EACjD,IAAMnD,EAAKX,EAAM9B,EAAI,GACrB,EAAK,GAAGA,GAAK,KAAK,IAChBuC,EAAKvC,GAAKwC,EAAIxC,GACd,KAAK,IAAIuC,EAAKvC,GAAKyC,CAAE,EACrB,KAAK,IAAID,EAAIxC,GAAKyC,CAAE,CACtB,CACF,CACAhC,EAAQgF,EAAK,GAAIpG,EAAGE,EAAQkG,EAAK,SAAU5F,CAAI,EAC/CY,EAAQgF,EAAK,OAAQpG,EAAGE,EAAQkG,EAAK,WAAY5F,CAAI,EACrDY,EAAQgF,EAAK,QAASpG,EAAGE,EAAQkG,EAAK,YAAa5F,CAAI,EACvD,IAAK,IAAIG,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAMwG,EAAKJ,EAAK,SAASzF,GACzB,EAAKA,GAAK6F,EAAM,IAAMJ,EAAK,WAAWzF,GAAM6F,EAAK,IACjD,EAAM7F,GAAK6F,EAAM,IAAMJ,EAAK,YAAYzF,GAAM6F,EAAK,IACnD,IAAMnG,EAAMoG,EAAK9F,GAAK+F,EAAM/F,GAC5B,EAAK,GAAGA,GAAMb,EAAOO,CAAG,EAEpBA,IAAQ,EACN,EACC,IAAM,KAAK,IAAIoG,EAAK9F,GAAK+F,EAAM/F,EAAE,EAAKN,EAHzC,GAIN,CACAe,EAAQgF,EAAK,GAAIpG,EAAG2G,EAAWC,EAAKpG,CAAI,CAC1C,EAaaqG,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,GAAM,CAAE,KAAI,KAAI,SAAUT,EAC1B,IAAK,IAAIzF,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,GAAIW,IAAM,EAAG,CACX,EAAIA,GAAK,EAAGA,GAAK,EAAGA,GAAK,EAAMA,GAAK,IACpC,QACF,CACA,GAAI,CAACb,EAAOgH,EAAMnG,EAAI,EAAE,EAAG,CAEzB,IAAM2F,EAAKpD,EAAKvC,GAAKwC,EAAIxC,IAAMuC,EAAKvC,EAAI,GAAKwC,EAAIxC,EAAI,GACrD,EAAIA,GAAK2F,EACL,KAAK,IAAInD,EAAIxC,EAAI,GAAIwC,EAAIxC,EAAE,EAC3B,KAAK,IAAIuC,EAAKvC,EAAI,GAAIuC,EAAKvC,EAAE,EACjC,EAAGA,GAAK2F,EACJ,KAAK,IAAIpD,EAAKvC,EAAI,GAAIuC,EAAKvC,EAAE,EAC7B,KAAK,IAAIwC,EAAIxC,EAAI,GAAIwC,EAAIxC,EAAE,EAC/B,EAAGA,GAAKoG,EACR,EAAMpG,GAAKb,EAAOmB,EAAIN,EAAE,EAAK2F,EAAK,EAAI,GAAM,IAC5C,QACF,CACA,IAAMU,EAASC,EAAGtG,EAAI,GAChBuG,EAASC,EAAGxG,EAAI,GAClByG,EAAMnG,EAAIN,EAAI,GAAKuG,GAAUF,EAAS/F,EAAIN,EAAI,IAC5C0G,EAAS1G,GAAK,EAAIA,EAAI,EAAIA,EAAI,EAChCmG,EAAMnG,EAAI,KAAO,GACnB,EAAM,KAAK,IAAIyG,EAAKjE,EAAIxC,EAAI,GAAIwC,EAAIkE,EAAO,EACvClE,EAAIxC,GAAKyG,GACX,EAAMzG,GAAK,GACX,EAAM,KAAK,IAAIqG,EAAQ9D,EAAKvC,EAAE,EAC9B,EAAGA,GAAKwC,EAAIxC,GACZ,EAAGA,GAAKoG,IAER,EAAMpG,GAAK,EACX,EAAGA,GAAK,KAAK,IAAIqG,EAAQ9D,EAAKvC,EAAE,EAChC,EAAGA,GACDuC,EAAKvC,GAAKqG,EAAS,KAAK,IAAIE,EAASI,EAAWC,CAAO,EAAIL,KAG/D,EAAM,KAAK,IAAIE,EAAKlE,EAAKvC,EAAI,GAAIuC,EAAKmE,EAAO,EACzCnE,EAAKvC,GAAKyG,GACZ,EAAMzG,GAAK,EACX,EAAM,KAAK,IAAIqG,EAAQ7D,EAAIxC,EAAE,EAC7B,EAAGA,GAAKuC,EAAKvC,GACb,EAAGA,GAAKoG,IAER,EAAMpG,GAAK,GACX,EAAGA,GAAK,KAAK,IAAIqG,EAAQ7D,EAAIxC,EAAE,EAC/B,EAAGA,GACDwC,EAAIxC,GAAKqG,EAAS,KAAK,IAAIE,EAASI,EAAWC,CAAO,EAAIL,IAGhE,EAAIvG,GAAKyG,CACX,CACF,EAcaI,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,GAAM,CAAE,KAAI,IAAKvE,EAAO,QAAO,SAAUmD,EACzCpD,EAAcE,EAAMC,EAAKV,EAAOzC,EAAGwG,EAAIhG,CAAI,EAC3CY,EAAQoF,EAAIxG,EAAGE,EAAQ+C,EAAOzC,CAAI,EAClC,IAAK,IAAIG,EAAIH,EAAMG,EAAIX,EAAG,IAAK,CAC7B,IAAMoC,EAAIa,EAAMtC,GAChB,GAAI,CAACb,EAAOsC,CAAC,EAAG,CACd,EAAIzB,GAAK,EAAUA,GAAK,EAAMA,GAAK,EAAMA,GAAK,IAC9C,QACF,CACA,IAAM8G,GAAOvE,EAAKvC,GAAKwC,EAAIxC,IAAM,EAC7B2F,EAAKmB,EAAMC,EAAatF,EACxBmE,EAAOkB,EAAMC,EAAatF,EACxBuF,EAAKhH,EAAI,EAAIiH,EAAMjH,EAAI,GAAK,IAC5BkH,EAAKlH,EAAI,EAAImH,EAAMnH,EAAI,GAAK,IAC5ByC,EAAKzC,EAAI,EAAI8B,EAAM9B,EAAI,GAAK,IAE9Bb,EAAO+H,CAAE,GAAK,EAAEtB,EAAOsB,GAAMzE,EAAKyE,KAAK,EAAOA,GAC9C/H,EAAO6H,CAAE,GAAK,EAAErB,EAAKqB,GAAMvE,EAAKuE,KAAK,EAAKA,GAC9C,EAAMhH,GAAK2F,EACX,EAAM3F,GAAK4F,EACX,IAAMxC,EAAKpD,EAAI,EAAIoH,EAAUpH,EAAI,GAAK,IAChCiB,EAAK9B,EAAOiE,CAAE,EAEhBA,IAAO,GACLtB,EAAM9B,GAAK2F,EACT,EACA,GACF7D,EAAM9B,GAAK4F,EACT,GACA,EAPJ,GAQJ,EAAU5F,GAAKiB,EACf,EAAIjB,GAAKiB,IAAM,EAAI2E,EAAOD,CAC5B,CACF,EAGM0B,GACJ,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IACG,CACH,IAAM5H,EAAIH,EAASC,CAAM,EACzB2B,EAAYqB,EAAM,EAAG9C,EAAG+B,EAAS3B,EAAM,EAAI,EAC3CqB,EAAYsB,EAAK,EAAG/C,EAAGwF,EAAQpF,EAAM,EAAK,EAC1C,IAAK,IAAIG,EAAIH,EAAMG,EAAI,EAAG,IAAK,EAAIA,IAAMwB,EAAQxB,GAAKiF,EAAOjF,IAAM,CACrE,EAYasH,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,GAAM,CAAE,UAAS,UAAW7B,EAC5B4B,EACE9E,EACAC,EACA,EACA+E,EACAC,EACAhG,EACAyD,EACApF,CACF,EACAwH,EAAa9E,EAAMC,EAAK,EAAGiF,EAAYC,EAAMlG,EAASyD,EAAQpF,CAAI,EAClEwH,EAAa9E,EAAMC,EAAK,EAAGmF,EAAaC,EAAOpG,EAASyD,EAAQpF,CAAI,EACpE,IAAK,IAAIG,EAAIH,EAAMG,EAAI,EAAG,IAAK,EAAMA,IAAMwH,EAAWxH,GAAK0H,EAAK1H,IAAM,CACxE,EAGa6H,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACT,IAAMpI,EAAIH,EAASC,CAAM,EACzB2B,EAAYqB,EAAM,EAAG9C,EAAGwH,EAAOpH,EAAM,EAAI,EACzCqB,EAAYsB,EAAK,EAAG/C,EAAG0H,EAAOtH,EAAM,EAAK,EACzC,IAAK,IAAIG,EAAIH,EAAMG,EAAI,EAAG,IAAK,EAAOA,IAAMiH,EAAMjH,GAAKmH,EAAMnH,IAAM,CACrE,EAGa8H,GACX,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAO,IACE,CACTtH,EAAQsB,EAAOzC,EAAGE,EAAQwI,EAAQlI,CAAI,EACtCwC,EAAcE,EAAMC,EAAKV,EAAOzC,EAAGoG,EAAK,GAAI5F,CAAI,EAChDY,EAAQgF,EAAK,GAAIpG,EAAG2I,EAAWvC,EAAK,IAAK5F,CAAI,EAC7C,IAAK,IAAIG,EAAIH,EAAMG,EAAIX,EAAG,IACxB,EAAMW,GAAK+H,EAAO/H,GAAK+G,EAAatB,EAAK,IAAIzF,GAC7C,EAAMA,GAAK+H,EAAO/H,GAAK+G,EAAatB,EAAK,IAAIzF,EAEjD,EAQaiI,GAAO,EAAgB,IAAiC,CACnE,IAAM3H,EAAMlB,EAAS8I,EAAO,MAAM,EAElC,OADA1I,EAAQ0I,EAAQA,EAAO,OAAQ3I,EAAQe,CAAG,EACnCA,CACT,EAGa6H,IAAO,EAAgB,IAAiC,CACnE,IAAM7H,EAAMlB,EAAS8I,EAAO,MAAM,EAElC,OADA1H,EAAQ0H,EAAQA,EAAO,OAAQ3I,EAAQe,CAAG,EACnCA,CACT,EAGa8H,IAAO,EAAgB,IAAiC,CACnE,IAAM9H,EAAMlB,EAAS8I,EAAO,MAAM,EAElC,OADAxH,EAAQwH,EAAQA,EAAO,OAAQ3I,EAAQe,CAAG,EACnCA,CACT,EAGa+H,IACX,EACA,EAAS,GACT,EAAa,IAC0D,CACvE,IAAMhJ,EAAI6I,EAAO,OACXH,EAAS3I,EAASC,CAAC,EACnB4H,EAAQ7H,EAASC,CAAC,EAClB8H,EAAQ/H,EAASC,CAAC,EAClBiJ,EAAMlJ,EAASC,CAAC,EACtBG,EAAQ0I,EAAQ7I,EAAGE,EAAQwI,CAAM,EACjCjH,EAAUoH,EAAQ7I,EAAGE,EAAQ+I,CAAG,EAChC,IAAK,IAAItI,EAAI,EAAGA,EAAIX,EAAG,IACrB,EAAMW,GAAK+H,EAAO/H,GAAK+G,EAAauB,EAAItI,GACxC,EAAMA,GAAK+H,EAAO/H,GAAK+G,EAAauB,EAAItI,GAE1C,MAAO,CAAE,SAAQ,QAAO,OAAM,CAChC,EAGauI,IACX,EACA,EAAO,GACP,EAAO,GACP,EAAS,IACiE,CAC1E,IAAMlJ,EAAI6I,EAAO,OACXM,EAAIpJ,EAASC,CAAC,EACdoJ,EAAIrJ,EAASC,CAAC,EACpBmB,EAAQ0H,EAAQ7I,EAAGqJ,EAAMF,CAAC,EAC1BhI,EAAQ0H,EAAQ7I,EAAGsJ,EAAMF,CAAC,EAC1B,IAAMG,EAAOxJ,EAASC,CAAC,EACvB,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAG,IAAK,EAAKW,GAAKwI,EAAExI,GAAKyI,EAAEzI,GAC/C,IAAM6I,EAAMzJ,EAASC,CAAC,EACtBmB,EAAQoI,EAAMvJ,EAAGyJ,EAAQD,CAAG,EAC5B,IAAME,EAAY3J,EAASC,CAAC,EAC5B,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAG,IAAK,EAAUW,GAAK4I,EAAK5I,GAAK6I,EAAI7I,GACzD,MAAO,CAAE,KAAM4I,EAAM,OAAQC,EAAK,WAAU,CAC9C,EAGaG,GAAO,EAAgB,EAAS,KAAqB,CAChE,IAAM3J,EAAI6I,EAAO,OACX5H,EAAMlB,EAASC,CAAC,EAEtB,OADAuC,EAAQsG,EAAQ7I,EAAGE,EAAQe,EAAKlB,EAASC,CAAC,EAAGD,EAASC,CAAC,CAAC,EACjDiB,CACT,EAGa2I,GACX,EACA,EACA,EACA,EAAS,EACT,EAAU,EACV,EAAU,IACgD,CAC1D,IAAM5J,EAAIyC,EAAM,OACV3B,EAAIf,EAASC,CAAC,EACd4B,EAAI7B,EAASC,CAAC,EACdO,EAAIR,EAASC,CAAC,EAEpB,OADAqD,EAAQH,EAAMC,EAAKV,EAAOzC,EAAGE,EAAQqD,EAASE,EAAS3C,EAAGc,EAAGrB,CAAC,EACvD,CAAE,IAAG,IAAG,GAAE,CACnB,EAGasJ,GACX,EACA,EACA,EACA,EAAS,KACQ,CACjB,IAAM7J,EAAIyC,EAAM,OACV+D,EAAKzG,EAASC,CAAC,EACrBgD,EAAcE,EAAMC,EAAKV,EAAOzC,EAAGwG,CAAE,EACrC,IAAMvF,EAAMlB,EAASC,CAAC,EAEtB,OADAoB,EAAQoF,EAAIxG,EAAGE,EAAQe,CAAG,EACnBA,CACT,EAOa6I,GACX,EACA,EACA,EACA,EACA,EAKI,CAAC,IACY,CACjB,IAAM9J,EAAIyC,EAAM,OACVxB,EAAMlB,EAASC,CAAC,EAChB+J,EAAOC,EAAQ,SAcrB,OAbAxF,EACEtB,EACAC,EACAV,EACAiC,EACAsF,EAAQ,MAAQ,KAChBhK,EACAgK,EAAQ,OAAS,MACjBA,EAAQ,YAAcD,EAAQ,GAAiBnK,EAAAA,WAAWwE,EAAM2F,CAAI,EAAI,GACxE9I,EACAlB,EAASC,CAAC,EACVD,EAASC,CAAC,CACZ,EACOiB,CACT,EAGagJ,EAAc,GAUtB,CACH,IAAMjK,EAAIkK,EAAK,MAAM,OACfjJ,EAAM,CACV,KAAMlB,EAASC,CAAC,EAChB,KAAMD,EAASC,CAAC,EAChB,IAAKD,EAASC,CAAC,EACf,MAAOD,EAASC,CAAC,CACnB,EAEA,OADAgF,EAAekF,EAAK,KAAMA,EAAK,KAAMA,EAAK,IAAKA,EAAK,MAAOlK,EAAGiB,CAAG,EAC1DA,CACT,EAGakJ,GAAO,EAAe,IAAiC,CAClE,IAAMlJ,EAAMlB,EAAS0C,EAAM,MAAM,EAEjC,OADA4C,EAAQ5C,EAAOiC,EAAQjC,EAAM,OAAQxB,CAAG,EACjCA,CACT,EAGamJ,GACX,EACA,EACA,EACA,EAAS,KACQ,CACjB,IAAMpK,EAAIyC,EAAM,OACVxB,EAAMlB,EAASC,CAAC,EAEtB,OADAuF,EAAQrC,EAAMC,EAAKV,EAAOzC,EAAGE,EAAQe,EAAKlB,EAASC,CAAC,EAAGD,EAASC,CAAC,CAAC,EAC3DiB,CACT,EAGaoJ,GACX,EACA,EACA,EACA,EAAS,KACQ,CACjB,IAAMrK,EAAIyC,EAAM,OACVxB,EAAMlB,EAASC,CAAC,EAEtB,OADA2F,EAAczC,EAAMC,EAAKV,EAAOzC,EAAGE,EAAQe,EAAKlB,EAASC,CAAC,EAAGD,EAASC,CAAC,CAAC,EACjEiB,CACT,EAGaqJ,GACX,EACA,EACA,EACA,EACA,EAAS,KACQ,CACjB,IAAMtK,EAAIyC,EAAM,OACVxB,EAAMlB,EAASC,CAAC,EAEtB,OADA6F,EAAQ3C,EAAMC,EAAKV,EAAOiC,EAAQ1E,EAAGE,EAAQe,EAAKlB,EAASC,CAAC,CAAC,EACtDiB,CACT,EAGasJ,GACX,EACA,EAKI,CAAC,IACoC,CACzC,IAAMvK,EAAIyC,EAAM,OACV3B,EAAIf,EAASC,CAAC,EACd4B,EAAI7B,EAASC,CAAC,EAmBpB,OAlBAiG,EACExD,EACAzC,EACAgK,EAAQ,WAAa,GACrBA,EAAQ,aAAe,GACvBA,EAAQ,SAAW,EACnBA,EAAQ,SAAW,EACnBlJ,EACAc,EACA,CACE,IAAK7B,EAASC,CAAC,EACf,KAAMD,EAASC,CAAC,EAChB,KAAMD,EAASC,CAAC,EAChB,QAASD,EAASC,CAAC,EACnB,OAAQD,EAASC,CAAC,EAClB,IAAKD,EAASC,CAAC,CACjB,CACF,EACO,CAAE,IAAG,GAAE,CAChB,EAGawK,GACX,EACA,EACA,EACA,EAAS,GACT,EAAY,KACuD,CACnE,IAAMxK,EAAIyC,EAAM,OACVgE,EAAO1G,EAASC,CAAC,EACjB0G,EAAQ3G,EAASC,CAAC,EAClB4G,EAAM7G,EAASC,CAAC,EAUtB,OATAqG,EAAQnD,EAAMC,EAAKV,EAAOzC,EAAGE,EAAQyG,EAAWF,EAAMC,EAAOE,EAAK,CAChE,GAAI7G,EAASC,CAAC,EACd,OAAQD,EAASC,CAAC,EAClB,QAASD,EAASC,CAAC,EACnB,SAAUD,EAASC,CAAC,EACpB,WAAYD,EAASC,CAAC,EACtB,YAAaD,EAASC,CAAC,EACvB,GAAID,EAASC,CAAC,CAChB,CAAC,EACM,CAAE,OAAM,QAAO,KAAI,CAC5B,EAMayK,GACX,EACA,EACA,EAAoE,CAAC,IACpD,CACjB,IAAMzK,EAAIkD,EAAK,OACTjC,EAAMlB,EAASC,CAAC,EAChB+G,EAAQiD,EAAQ,OAAS,IAW/B,OAVAnD,EACE3D,EACAC,EACAnD,EACA+G,EACAiD,EAAQ,WAAajD,EACrBiD,EAAQ,SAAW,GACnB/I,EACA,CAAE,GAAIlB,EAASC,CAAC,EAAG,GAAID,EAASC,CAAC,EAAG,MAAOD,EAASC,CAAC,CAAE,CACzD,EACOiB,CACT,EAMayJ,GACX,EACA,EACA,EACA,EAAS,GACT,EAAa,IACwC,CACrD,IAAM1K,EAAIyC,EAAM,OACVkI,EAAQ5K,EAASC,CAAC,EAClB+H,EAAYhI,EAASC,CAAC,EAO5B,OANAwH,EAAetE,EAAMC,EAAKV,EAAOzC,EAAGE,EAAQwH,EAAYiD,EAAO5C,EAAW,CACxE,GAAIhI,EAASC,CAAC,EACd,IAAKD,EAASC,CAAC,EACf,MAAOD,EAASC,CAAC,EACjB,MAAOD,EAASC,CAAC,CACnB,CAAC,EACM,CAAE,QAAO,WAAU,CAC5B,EAOa4K,GACX,EACA,EACA,EAII,CAAC,IAMF,CACH,IAAM5K,EAAIkD,EAAK,OACTjC,EAAM,CACV,WAAYlB,EAASC,CAAC,EACtB,KAAMD,EAASC,CAAC,EAChB,MAAOD,EAASC,CAAC,EACjB,MAAOD,EAASC,CAAC,CACnB,EAcA,OAbAiI,EACE/E,EACAC,EACAnD,EACAgK,EAAQ,kBAAoB,EAC5BA,EAAQ,YAAc,GACtBA,EAAQ,aAAe,GACvB/I,EAAI,WACJA,EAAI,KACJA,EAAI,MACJA,EAAI,MACJ,CAAE,QAASlB,EAASC,CAAC,EAAG,OAAQD,EAASC,CAAC,CAAE,CAC9C,EACOiB,CACT,EAGa4J,GACX,EACA,EACA,EACA,EAAwE,CAAC,IACF,CACvE,IAAM7K,EAAIyC,EAAM,OACVxB,EAAM,CAAE,OAAQlB,EAASC,CAAC,EAAG,MAAOD,EAASC,CAAC,EAAG,MAAOD,EAASC,CAAC,CAAE,EAc1E,OAbAyI,EACEvF,EACAC,EACAV,EACAzC,EACAgK,EAAQ,QAAU,GAClBA,EAAQ,YAAc,EACtBA,EAAQ,WAAa,GACrB/I,EAAI,OACJA,EAAI,MACJA,EAAI,MACJ,CAAE,GAAIlB,EAASC,CAAC,EAAG,IAAKD,EAASC,CAAC,CAAE,CACtC,EACOiB,CACT,EAGa6J,GACX,EACA,EACA,EAAS,KAC8D,CACvE,IAAM9K,EAAIkD,EAAK,OACTjC,EAAM,CAAE,MAAOlB,EAASC,CAAC,EAAG,MAAOD,EAASC,CAAC,EAAG,OAAQD,EAASC,CAAC,CAAE,EAE1E,OADAwI,EAAatF,EAAMC,EAAKnD,EAAGE,EAAQe,EAAI,MAAOA,EAAI,MAAOA,EAAI,MAAM,EAC5DA,CACT,EAQa8J,GACX,EAOA,EAKI,CAAC,IACoB,CACzB,IAAMC,EAAQd,EAAK,MAAM,OACnB1J,EAAO,KAAK,IAAI,EAAG,KAAK,MAAMwJ,EAAQ,MAAQ,CAAC,CAAC,EAChDiB,EAAK,KAAK,IAAID,EAAQ,EAAG,KAAK,MAAMhB,EAAQ,IAAMgB,EAAQ,CAAC,CAAC,EAC5DE,EAAO,KAAK,IAAI,EAAG,KAAK,MAAMlB,EAAQ,MAAQ,EAAE,CAAC,EACnDmB,EAAK,IACLC,EAAK,KACT,IAAK,IAAIzK,EAAIH,EAAMG,GAAKsK,EAAI,IACtBf,EAAK,IAAIvJ,GAAKwK,IAAI,EAAKjB,EAAK,IAAIvJ,IAChCuJ,EAAK,KAAKvJ,GAAKyK,IAAI,EAAKlB,EAAK,KAAKvJ,IAExC,IAAM2F,EAAK,IAAI,aAAa4E,CAAI,EAC1B3E,EAAO,IAAI,aAAa2E,CAAI,EAC5BG,EAAQ,CACZ,IAAKF,EACL,KAAMC,EACN,KAAM,EACN,KACA,OACA,MAAO,EACP,IAAK,GACL,cAAe,GACf,YAAa,EACf,EACA,GAAI,CAACtL,EAAOqL,CAAE,GAAK,CAACrL,EAAOsL,CAAE,EAAG,OAAOC,EACnCD,IAAOD,IACT,GAAM,KAAK,IAAIA,CAAE,EAAI,MAAQ,KAC7B,GAAM,KAAK,IAAIA,CAAE,EAAI,MAAQ,MAE/B,IAAMG,GAAQF,EAAKD,GAAMD,EACrBK,EAAQ,EACZ,IAAK,IAAI5K,EAAIH,EAAMG,GAAKsK,EAAI,IAAK,CAC/B,IAAMxK,EAAIyJ,EAAK,OAAOvJ,GAChBkC,EAAIqH,EAAK,IAAIvJ,GACb6K,EAAItB,EAAK,KAAKvJ,GACpB,GAAI,EAAEF,EAAI,IAAM,CAACX,EAAO+C,CAAC,GAAK,CAAC/C,EAAO0L,CAAC,EAAG,SAC1C,IAAMC,EAASvB,EAAK,MAAMvJ,IAAMuJ,EAAK,KAAKvJ,GAAK2F,EAAKC,EACpD,GAAS9F,EACT,IAAMiL,EAAK,KAAK,IAAIR,EAAO,EAAG,KAAK,IAAI,EAAG,KAAK,OAAOrI,EAAIsI,GAAMG,CAAI,CAAC,CAAC,EAChEK,EAAK,KAAK,IAAIT,EAAO,EAAG,KAAK,IAAI,EAAG,KAAK,OAAOM,EAAIL,GAAMG,CAAI,CAAC,CAAC,EACtE,GAAII,IAAOC,GAAMH,GAAK3I,EAAG,CACvB,EAAO6I,IAAOjL,EACd,QACF,CACA,IAAMmL,EAAOJ,EAAI3I,EACjB,IAAK,IAAIgJ,EAAIH,EAAIG,GAAKF,EAAI,IAAK,CAC7B,IAAMG,EAASX,EAAKU,EAAIP,EAClBS,EAAU,KAAK,IAAIP,EAAGM,EAASR,CAAI,EAAI,KAAK,IAAIzI,EAAGiJ,CAAM,EAC3DC,EAAU,IAAG,EAAOF,IAAOpL,EAAIsL,EAAWH,EAChD,CACF,CACA,GAAI,EAAEL,EAAQ,GAAI,MAAO,CAAE,GAAGF,EAAO,IAAKF,EAAI,KAAMC,EAAI,MAAK,EAC7D,IAAIY,EAAM,EACV,IAAK,IAAIH,EAAI,EAAGA,EAAIX,EAAM,IACpB5E,EAAGuF,GAAKtF,EAAKsF,GAAKvF,EAAG0F,GAAOzF,EAAKyF,KAAM,EAAMH,GAEnD,IAAMI,EAASV,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGvB,EAAQ,WAAa,EAAG,CAAC,EACpE5H,EAAI4J,EACJ3J,EAAI2J,EACJE,EAAS5F,EAAG0F,GAAOzF,EAAKyF,GAC5B,KAAOE,EAASD,IAAW7J,EAAI,GAAKC,EAAI6I,EAAO,IAAI,CACjD,IAAMiB,EAAQ/J,EAAI,EAAIkE,EAAGlE,EAAI,GAAKmE,EAAKnE,EAAI,GAAK,IAClCC,EAAI6I,EAAO,EAAI5E,EAAGjE,EAAI,GAAKkE,EAAKlE,EAAI,GAAK,KAC1C8J,GACX,IACA,GAAU7F,EAAGjE,GAAKkE,EAAKlE,KAEvB,IACA,GAAUiE,EAAGlE,GAAKmE,EAAKnE,GAE3B,CACA,MAAO,CACL,IAAK+I,EACL,KAAMC,EACN,OACA,KACA,OACA,QACA,MACA,cAAehJ,EACf,YAAaC,CACf,CACF,EAYM+J,EAAkC,CACtC,EAAG,IACH,EAAG,IACH,EAAG,KACH,EAAG,KACH,EAAGpI,EACH,EAAGA,EACH,EAAG,EAAIA,EACP,EAAG,EAAIA,CACT,EAGaqI,EACX,GAC2B,CAC3B,GAAI,OAAOC,GAAc,SACvB,OAAOA,EAAY,EACf,CAAE,KAAM,KAAM,MAAOA,EAAW,GAAIA,CAAU,EAC9C,KAEN,IAAMC,EAAQ,iCAAiC,KAAKD,EAAU,KAAK,CAAC,EACpE,GAAI,CAACC,EAAO,OAAO,KACnB,IAAMvB,EAAQ,OAAOuB,EAAM,EAAE,EAC7B,GAAI,EAAEvB,EAAQ,GAAI,OAAO,KACzB,IAAMwB,EAAOD,EAAM,GAEnB,OADIC,IAAS,IAAY,CAAE,KAAM,QAAS,QAAO,GAAIxB,EAAQ,GAAKhH,CAAI,EAC/D,CACL,KAAM,KACN,MAAOgH,EAAQoB,EAAQI,GACvB,GAAIxB,EAAQoB,EAAQI,EACtB,CACF,EAOaC,GACX,EACA,EACA,EAAuB,IACZ,CACX,IAAMtI,EAAIC,EAAOzE,EAAAA,SAAS0E,EAAWD,CAAI,EAAI,IAC7C,GAAIsI,EAAG,OAAS,QAAS,CACvB,IAAMnI,EAAO,IAAI,KAAKJ,CAAC,EACjBwI,EAASpI,EAAK,eAAe,EAAI,GAAKA,EAAK,YAAY,EAC7D,OAAOoI,EAAUA,EAASD,EAAG,KAC/B,CAKA,OAJIA,EAAG,OAAS,EAAI1I,IAAS,EAEpB,KAAK,OAAOG,EAAI,EAAIH,GAAO0I,EAAG,KAAK,EAErC,KAAK,MAAMvI,EAAIuI,EAAG,KAAK,CAChC,EAGaE,GACX,EACA,EACA,EAAuB,IACZ,CACX,IAAMC,EAAMJ,EAAUrI,EAAMsI,EAAIrI,CAAS,EACnCyI,EACJJ,EAAG,OAAS,QACR,KAAK,IAAI,KAAK,MAAMG,EAAM,EAAE,EAAGA,EAAM,GAAI,CAAC,EAC1CH,EAAG,OAAS,EAAI1I,IAAS,EACvB6I,EAAMH,EAAG,MAAQ,EAAI1I,EACrB6I,EAAMH,EAAG,MAEXK,EAAQD,EAAUnN,EAAAA,SAAS0E,EAAWD,CAAI,EAAI,IACpD,OAAO0I,EAAUnN,EAAAA,SAAS0E,EAAW0I,CAAK,EAAI,GAChD,EAEMC,GAAa,GACjB,CAAC,MAAM,QAAQ9C,CAAI,EAmBrB,SAAgB+C,GACd,EACA,EACA,EAA4B,EACM,CAClC,IAAMP,EAAKL,EAAeC,CAAS,EACnC,GAAI,CAACI,EAAI,MAAU,MAAM,sBAAsB,OAAOJ,CAAS,GAAG,EAClE,IAAMY,EACJ,OAAOC,GAAa,SACf,GAAiBvN,EAAAA,WAAWwE,EAAM+I,CAAQ,EAC3CA,EACAC,EAAUJ,GAAU9C,CAAI,EACxBlK,EAAIoN,EAAUlD,EAAK,MAAM,OAASA,EAAK,OACvCmD,EAAO,GAA0B,CACrC,GAAI,CAACD,EAAS,OAAQlD,EAA+BvJ,GACrD,IAAMoC,EAAImH,EACV,MAAO,CACL,KAAMnH,EAAE,KAAKpC,GACb,KAAMoC,EAAE,KAAKpC,GACb,KAAMoC,EAAE,KAAKpC,GACb,IAAKoC,EAAE,IAAIpC,GACX,MAAOoC,EAAE,MAAMpC,GACf,OAAQoC,EAAE,OAASA,EAAE,OAAOpC,GAAK,IAAA,EACnC,CACF,EACMM,EAAoB,CAAC,EACvBqM,EAA6B,KAC7BC,EAAa,IACjB,IAAK,IAAI5M,EAAI,EAAGA,EAAIX,EAAG,IAAK,CAC1B,IAAMwN,EAAMH,EAAI1M,CAAC,EACXkM,EAAMJ,EAAUe,EAAI,KAAMd,EAAIQ,CAAM,EACtC,CAACI,GAAWT,IAAQU,GAClBD,GAASrM,EAAI,KAAKqM,CAAO,EAC7B,EAAaT,EACb,EAAU,CACR,KAAMD,EAAYY,EAAI,KAAMd,EAAIQ,CAAM,EACtC,KAAMM,EAAI,KACV,KAAMA,EAAI,KACV,IAAKA,EAAI,IACT,MAAOA,EAAI,MACX,OAAQA,EAAI,QAAU,CACxB,IAEIA,EAAI,KAAOF,EAAQ,OAAM,EAAQ,KAAOE,EAAI,MAC5CA,EAAI,IAAMF,EAAQ,MAAK,EAAQ,IAAME,EAAI,KAC7C,EAAQ,MAAQA,EAAI,MACpB,EAAQ,QAAUF,EAAQ,QAAU,IAAME,EAAI,QAAU,GAE5D,CAEA,GADIF,GAASrM,EAAI,KAAKqM,CAAO,EACzB,CAACF,EAAS,OAAOnM,EACrB,IAAMwE,EAAIxE,EAAI,OACRwM,EAAS,CACb,KAAM,IAAI,aAAahI,CAAC,EACxB,KAAM,IAAI,aAAaA,CAAC,EACxB,KAAM,IAAI,aAAaA,CAAC,EACxB,IAAK,IAAI,aAAaA,CAAC,EACvB,MAAO,IAAI,aAAaA,CAAC,EACzB,OAAQ,IAAI,aAAaA,CAAC,CAC5B,EASA,OARAxE,EAAI,SAAS,EAAK,IAAM,CACtB,EAAO,KAAKN,GAAK6M,EAAI,KACrB,EAAO,KAAK7M,GAAK6M,EAAI,KACrB,EAAO,KAAK7M,GAAK6M,EAAI,KACrB,EAAO,IAAI7M,GAAK6M,EAAI,IACpB,EAAO,MAAM7M,GAAK6M,EAAI,MACtB,EAAO,OAAO7M,GAAK6M,EAAI,QAAU,CACnC,CAAC,EACMC,CACT"}
@@ -1,4 +1,5 @@
1
- import { TradingBar, TradingBarColumns, TradingTimeframe } from './types.cjs';
1
+ import { UtcOffset } from './format.cjs';
2
+ import { TradingBar, TradingBarColumns, TradingTimeframe, TradingVolumeProfile } from './types.cjs';
2
3
  type Values = ArrayLike<number>;
3
4
  /** Simple moving average of `src[0..n)` into `out`, from index `from` */
4
5
  export declare const smaInto: (src: Values, n: number, period: number, out: Float64Array, from?: number) => void;
@@ -17,9 +18,9 @@ export declare const trueRangeInto: (high: Values, low: Values, close: Values, n
17
18
  /** KDJ: K and D smoothed from the raw stochastic value (seeded at 50), J = 3K − 2D */
18
19
  export declare const kdjInto: (high: Values, low: Values, close: Values, n: number, period: number, kPeriod: number, dPeriod: number, k: Float64Array, d: Float64Array, j: Float64Array, from?: number) => void;
19
20
  /** Session key of a time: bars with the same key are in the same VWAP period */
20
- export declare const sessionKey: (time: number, reset: "day" | "week" | "month" | "none", utcOffset?: number) => number;
21
+ export declare const sessionKey: (time: number, reset: "day" | "week" | "month" | "none", utcOffset?: UtcOffset) => number;
21
22
  /** VWAP; `pv` / `vol` hold the cumulative sums of the period */
22
- export declare const vwapInto: (high: Values, low: Values, close: Values, volume: Values, time: Values | null, n: number, reset: "day" | "week" | "month" | "none", utcOffset: number, out: Float64Array, pv: Float64Array, vol: Float64Array, from?: number) => void;
23
+ export declare const vwapInto: (high: Values, low: Values, close: Values, volume: Values, time: Values | null, n: number, reset: "day" | "week" | "month" | "none", utcOffset: UtcOffset, out: Float64Array, pv: Float64Array, vol: Float64Array, from?: number) => void;
23
24
  /** Heikin-Ashi bars from regular bars */
24
25
  export declare const heikinAshiInto: (open: Values, high: Values, low: Values, close: Values, n: number, out: {
25
26
  open: Float64Array;
@@ -27,6 +28,77 @@ export declare const heikinAshiInto: (open: Values, high: Values, low: Values, c
27
28
  low: Float64Array;
28
29
  close: Float64Array;
29
30
  }, from?: number) => void;
31
+ /** On-balance volume: the volume added on up closes, subtracted on down closes */
32
+ export declare const obvInto: (close: Values, volume: Values, n: number, out: Float64Array, from?: number) => void;
33
+ /** Commodity channel index: distance of the typical price from its average, in mean deviations / 0.015 */
34
+ export declare const cciInto: (high: Values, low: Values, close: Values, n: number, period: number, out: Float64Array, typical: Float64Array, mean: Float64Array, from?: number) => void;
35
+ /** Williams %R (−100 to 0): the close within the range of the window, from its high */
36
+ export declare const williamsRInto: (high: Values, low: Values, close: Values, n: number, period: number, out: Float64Array, highest: Float64Array, lowest: Float64Array, from?: number) => void;
37
+ /** Money flow index (0-100): an RSI of the typical price weighted by the volume */
38
+ export declare const mfiInto: (high: Values, low: Values, close: Values, volume: Values, n: number, period: number, out: Float64Array, typical: Float64Array, from?: number) => void;
39
+ /** Working columns of the stochastic RSI */
40
+ export interface StochRsiWork {
41
+ rsi: Float64Array;
42
+ gain: Float64Array;
43
+ loss: Float64Array;
44
+ highest: Float64Array;
45
+ lowest: Float64Array;
46
+ raw: Float64Array;
47
+ }
48
+ /** Stochastic RSI: the stochastic of the RSI, smoothed into K and D */
49
+ export declare const stochRsiInto: (close: Values, n: number, rsiPeriod: number, stochPeriod: number, kPeriod: number, dPeriod: number, k: Float64Array, d: Float64Array, work: StochRsiWork, from?: number) => void;
50
+ /** Working columns of the DMI */
51
+ export interface DmiWork {
52
+ tr: Float64Array;
53
+ plusDm: Float64Array;
54
+ minusDm: Float64Array;
55
+ smoothTr: Float64Array;
56
+ smoothPlus: Float64Array;
57
+ smoothMinus: Float64Array;
58
+ dx: Float64Array;
59
+ }
60
+ /** Directional movement index (Wilder): +DI, −DI and the ADX */
61
+ export declare const dmiInto: (high: Values, low: Values, close: Values, n: number, period: number, adxPeriod: number, plus: Float64Array, minus: Float64Array, adx: Float64Array, work: DmiWork, from?: number) => void;
62
+ /** Working columns of the parabolic SAR */
63
+ export interface PsarWork {
64
+ /** Extreme point of the trend */
65
+ ep: Float64Array;
66
+ /** Acceleration factor */
67
+ af: Float64Array;
68
+ /** 1 rising, −1 falling */
69
+ trend: Float64Array;
70
+ }
71
+ /** Parabolic stop and reverse (Wilder) */
72
+ export declare const psarInto: (high: Values, low: Values, n: number, start: number, increment: number, maximum: number, out: Float64Array, work: PsarWork, from?: number) => void;
73
+ /** Working columns of the SuperTrend */
74
+ export interface SupertrendWork {
75
+ tr: Float64Array;
76
+ atr: Float64Array;
77
+ upper: Float64Array;
78
+ lower: Float64Array;
79
+ }
80
+ /**
81
+ * SuperTrend: a trailing band `multiplier` ATRs from the median price,
82
+ * below the bars in an uptrend (`direction` 1), above them in a downtrend (−1)
83
+ */
84
+ export declare const supertrendInto: (high: Values, low: Values, close: Values, n: number, period: number, multiplier: number, out: Float64Array, direction: Float64Array, work: SupertrendWork, from?: number) => void;
85
+ /** Working columns of Ichimoku */
86
+ export interface IchimokuWork {
87
+ highest: Float64Array;
88
+ lowest: Float64Array;
89
+ }
90
+ /**
91
+ * Ichimoku lines at each bar (unshifted): conversion (Tenkan), base
92
+ * (Kijun), leading span A and B (drawn `displacement − 1` bars ahead)
93
+ */
94
+ export declare const ichimokuInto: (high: Values, low: Values, n: number, conversionPeriod: number, basePeriod: number, spanBPeriod: number, conversion: Float64Array, base: Float64Array, spanA: Float64Array, spanB: Float64Array, work: IchimokuWork, from?: number) => void;
95
+ /** Donchian channel: highest high, lowest low and their midpoint */
96
+ export declare const donchianInto: (high: Values, low: Values, n: number, period: number, upper: Float64Array, lower: Float64Array, middle: Float64Array, from?: number) => void;
97
+ /** Keltner channel: an EMA of the close ± `multiplier` ATRs */
98
+ export declare const keltnerInto: (high: Values, low: Values, close: Values, n: number, period: number, multiplier: number, atrPeriod: number, middle: Float64Array, upper: Float64Array, lower: Float64Array, work: {
99
+ tr: Float64Array;
100
+ atr: Float64Array;
101
+ }, from?: number) => void;
30
102
  /**
31
103
  * Simple moving average: the mean of the last `period` values (NaN until
32
104
  * `period` values are available)
@@ -60,13 +132,14 @@ export declare const kdj: (high: Values, low: Values, close: Values, period?: nu
60
132
  export declare const atr: (high: Values, low: Values, close: Values, period?: number) => Float64Array;
61
133
  /**
62
134
  * Volume-weighted average of the typical price (high + low + close) / 3,
63
- * restarting each `reset` period (UTC, or shifted by `utcOffset` minutes);
64
- * without `time`, a single cumulative average
135
+ * restarting each `reset` period (UTC, or shifted by `utcOffset` minutes,
136
+ * or in the IANA `timeZone`); without `time`, a single cumulative average
65
137
  */
66
138
  export declare const vwap: (high: Values, low: Values, close: Values, volume: Values, options?: {
67
139
  time?: Values;
68
140
  reset?: "day" | "week" | "month" | "none";
69
141
  utcOffset?: number;
142
+ timeZone?: string;
70
143
  }) => Float64Array;
71
144
  /** Heikin-Ashi bars: averaged bars that smooth out the noise of trends */
72
145
  export declare const heikinAshi: (bars: {
@@ -80,6 +153,96 @@ export declare const heikinAshi: (bars: {
80
153
  low: Float64Array;
81
154
  close: Float64Array;
82
155
  };
156
+ /** On-balance volume: the running sum of the volume, signed by the close change */
157
+ export declare const obv: (close: Values, volume: Values) => Float64Array;
158
+ /** Commodity channel index (typically between −100 and +100 in a range) */
159
+ export declare const cci: (high: Values, low: Values, close: Values, period?: number) => Float64Array;
160
+ /** Williams %R, from −100 (close at the lowest low) to 0 (at the highest high) */
161
+ export declare const williamsR: (high: Values, low: Values, close: Values, period?: number) => Float64Array;
162
+ /** Money flow index (0-100): a volume-weighted RSI of the typical price */
163
+ export declare const mfi: (high: Values, low: Values, close: Values, volume: Values, period?: number) => Float64Array;
164
+ /** Stochastic RSI (0-100): the stochastic of the RSI, smoothed into K and D */
165
+ export declare const stochRsi: (close: Values, options?: {
166
+ rsiPeriod?: number;
167
+ stochPeriod?: number;
168
+ kPeriod?: number;
169
+ dPeriod?: number;
170
+ }) => {
171
+ k: Float64Array;
172
+ d: Float64Array;
173
+ };
174
+ /** Directional movement (Wilder): +DI, −DI and the average directional index */
175
+ export declare const dmi: (high: Values, low: Values, close: Values, period?: number, adxPeriod?: number) => {
176
+ plus: Float64Array;
177
+ minus: Float64Array;
178
+ adx: Float64Array;
179
+ };
180
+ /**
181
+ * Parabolic SAR (Wilder): a trailing stop below the bars in an uptrend,
182
+ * above them in a downtrend, accelerating with each new extreme
183
+ */
184
+ export declare const psar: (high: Values, low: Values, options?: {
185
+ start?: number;
186
+ increment?: number;
187
+ maximum?: number;
188
+ }) => Float64Array;
189
+ /**
190
+ * SuperTrend: the trailing band (`value`) and the trend (`direction`: 1 up,
191
+ * −1 down)
192
+ */
193
+ export declare const supertrend: (high: Values, low: Values, close: Values, period?: number, multiplier?: number) => {
194
+ value: Float64Array;
195
+ direction: Float64Array;
196
+ };
197
+ /**
198
+ * Ichimoku Kinkō Hyō, aligned on the bars that compute them: the leading
199
+ * spans are plotted `displacement − 1` bars ahead and the lagging span is
200
+ * the close plotted `displacement − 1` bars back
201
+ */
202
+ export declare const ichimoku: (high: Values, low: Values, options?: {
203
+ conversionPeriod?: number;
204
+ basePeriod?: number;
205
+ spanBPeriod?: number;
206
+ }) => {
207
+ conversion: Float64Array;
208
+ base: Float64Array;
209
+ spanA: Float64Array;
210
+ spanB: Float64Array;
211
+ };
212
+ /** Keltner channel: EMA of the close ± `multiplier` average true ranges */
213
+ export declare const keltner: (high: Values, low: Values, close: Values, options?: {
214
+ period?: number;
215
+ multiplier?: number;
216
+ atrPeriod?: number;
217
+ }) => {
218
+ middle: Float64Array;
219
+ upper: Float64Array;
220
+ lower: Float64Array;
221
+ };
222
+ /** Donchian channel: highest high, lowest low and their midpoint over `period` bars */
223
+ export declare const donchian: (high: Values, low: Values, period?: number) => {
224
+ upper: Float64Array;
225
+ lower: Float64Array;
226
+ middle: Float64Array;
227
+ };
228
+ /**
229
+ * Volume profile: the volume of bars `from..to` (inclusive) spread over
230
+ * `rows` price rows (each bar evenly over its low-high range), split by
231
+ * rising / falling bars, with the point of control and the value area
232
+ * (the rows around it holding `valueArea` of the volume, 70% by default)
233
+ */
234
+ export declare const volumeProfile: (bars: {
235
+ open: Values;
236
+ high: Values;
237
+ low: Values;
238
+ close: Values;
239
+ volume: Values;
240
+ }, options?: {
241
+ from?: number;
242
+ to?: number;
243
+ rows?: number;
244
+ valueArea?: number;
245
+ }) => TradingVolumeProfile;
83
246
  /** A parsed timeframe: a count of a unit, with its approximate duration */
84
247
  export interface ParsedTimeframe {
85
248
  unit: "ms" | "month";
@@ -89,16 +252,23 @@ export interface ParsedTimeframe {
89
252
  }
90
253
  /** `"15m"` -> 15 minutes, `"1M"` -> 1 month; `null` when invalid */
91
254
  export declare const parseTimeframe: (timeframe: TradingTimeframe) => ParsedTimeframe | null;
255
+ /**
256
+ * Key of the bucket of `time` in the shifted (displayed) time: weeks start
257
+ * on Monday, months on the 1st. Comparing keys rather than UTC starts keeps
258
+ * a day whole when its offset changes (daylight saving).
259
+ */
260
+ export declare const bucketKey: (time: number, tf: ParsedTimeframe, utcOffset?: UtcOffset) => number;
92
261
  /** Start of the bucket of `time` (weeks start on Monday, months on the 1st) */
93
- export declare const bucketStart: (time: number, tf: ParsedTimeframe, utcOffset?: number) => number;
262
+ export declare const bucketStart: (time: number, tf: ParsedTimeframe, utcOffset?: UtcOffset) => number;
94
263
  /**
95
264
  * Aggregates bars into a longer timeframe (`"5m"` bars into `"1H"`, ...):
96
265
  * first open, highest high, lowest low, last close, summed volume. Buckets
97
- * are aligned on UTC (or shifted by `utcOffset` minutes); weeks start on
98
- * Monday. Columns in, columns out (Float64Array).
266
+ * are aligned on UTC, or shifted by `timeZone` (minutes from UTC, or an
267
+ * IANA time zone such as `"America/New_York"`); weeks start on Monday.
268
+ * Columns in, columns out (Float64Array).
99
269
  */
100
- export declare function resampleBars(bars: readonly TradingBar[], timeframe: TradingTimeframe, utcOffset?: number): TradingBar[];
101
- export declare function resampleBars(bars: TradingBarColumns, timeframe: TradingTimeframe, utcOffset?: number): TradingBarColumns;
270
+ export declare function resampleBars(bars: readonly TradingBar[], timeframe: TradingTimeframe, timeZone?: number | string): TradingBar[];
271
+ export declare function resampleBars(bars: TradingBarColumns, timeframe: TradingTimeframe, timeZone?: number | string): TradingBarColumns;
102
272
  /** Highest / lowest of a window: exported for the KDJ-like studies of the chart */
103
273
  export declare const highestInto: (src: Values, n: number, period: number, out: Float64Array, from?: number) => void;
104
274
  export declare const lowestInto: (src: Values, n: number, period: number, out: Float64Array, from?: number) => void;