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
@@ -4,26 +4,39 @@ import { localeLabels as s, resolveLocale as c } from "../locale.js";
4
4
  import { stepDecimals as l } from "../scale.js";
5
5
  import { createRenderer as u } from "../renderers/detect.js";
6
6
  import { readTheme as d, themeColorsChanged as f, watchTheme as p } from "../theme.js";
7
- import { anchorCount as m, hitDrawing as h, paintDrawing as g, setDash as _ } from "./drawings.js";
8
- import { DAY as v, HOUR as y, MINUTE as b, boundaryWeight as ee, detectPrecision as x, formatCountdown as te, formatCrosshairTime as ne, formatFixed as re, formatPercent as ie, formatVolume as ae, inferTimeframe as oe, pickTicks as se, priceFormatter as ce, shiftTime as le, tickText as ue } from "./format.js";
9
- import { AreaBuffer as de, BarBuffer as fe, LineBuffer as pe, candleMetrics as me, clampRange as he, pixelRange as ge } from "./geometry.js";
10
- import { heikinAshiInto as _e, parseTimeframe as ve } from "./indicators.js";
11
- import { TRADING_LABELS as ye, fill as be } from "./labels.js";
12
- import { createScale as xe, fitScale as Se, fromScaled as Ce, panScale as we, scaleTicks as Te, scaledAt as Ee, toScaled as De, valueAt as Oe, yOf as S, yOfScaled as ke, zoomScale as Ae } from "./scale.js";
13
- import { appendBars as je, barAt as Me, createPyramid as Ne, createStore as Pe, indexOfTime as Fe, inputLength as Ie, lowerBoundTime as Le, prependBars as Re, pyramidLevel as ze, readBar as Be, setBars as Ve, updateBar as He } from "./store.js";
14
- import { LINE_COLORS as Ue, buildStudies as We } from "./studies.js";
7
+ import { anchorCount as m, handlePoints as h, hitDrawing as g, isFillable as _, isPosition as v, moveHandle as y, paintDrawing as b, setDash as ee } from "./drawings.js";
8
+ import { DAY as x, HOUR as te, MINUTE as ne, boundaryWeight as re, detectPrecision as ie, formatCountdown as ae, formatCrosshairTime as oe, formatFixed as se, formatPercent as ce, formatVolume as le, inferTimeframe as ue, isTimeZone as de, pickTicks as fe, priceFormatter as pe, tickText as me, zoneOffset as he } from "./format.js";
9
+ import { AreaBuffer as ge, BarBuffer as _e, LineBuffer as ve, candleMetrics as ye, clampRange as be, pixelRange as xe } from "./geometry.js";
10
+ import { heikinAshiInto as Se, parseTimeframe as Ce, volumeProfile as we } from "./indicators.js";
11
+ import { TRADING_LABELS as Te, fill as Ee } from "./labels.js";
12
+ import { createScale as De, fitScale as Oe, fromScaled as ke, panScale as Ae, scaleTicks as je, scaledAt as Me, toScaled as Ne, valueAt as Pe, yOf as S, yOfScaled as Fe, zoomScale as Ie } from "./scale.js";
13
+ import { appendBars as Le, barAt as Re, createPyramid as ze, createRangePyramid as Be, createStore as Ve, indexOfTime as He, inputLength as Ue, invalidateRangePyramid as We, lowerBoundTime as Ge, prependBars as Ke, pyramidLevel as qe, rangeLevel as Je, readBar as Ye, setBars as Xe, updateBar as Ze } from "./store.js";
14
+ import { LINE_COLORS as Qe, buildStudies as $e } from "./studies.js";
15
15
  //#region src/engine/trading/chart.ts
16
- var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color, #089981)", Xe = "var(--danger-color, #f23645)", Ze = "var(--warning-color, #f59e0b)", Qe = "var(--primary-color, #2962ff)", $e = {
16
+ var et = 28, tt = 60, nt = 60, rt = 48, C = "price", it = "var(--success-color, #089981)", at = "var(--danger-color, #f23645)", ot = "var(--warning-color, #f59e0b)", st = "var(--primary-color, #2962ff)", ct = 100, lt = [
17
+ "#2962ff",
18
+ "#089981",
19
+ "#f23645",
20
+ "#f59e0b",
21
+ "#a855f7",
22
+ "#0ea5e9",
23
+ "#ec4899",
24
+ "#787b86"
25
+ ], ut = [
26
+ "solid",
27
+ "dashed",
28
+ "dotted"
29
+ ], dt = /* @__PURE__ */ new WeakMap(), ft = {
17
30
  order: "limit",
18
31
  position: "position",
19
32
  takeProfit: "takeProfit",
20
33
  stopLoss: "stopLoss",
21
34
  alert: "alert"
22
- }, w = (e, t, n) => e < t ? t : e > n ? n : e, et = (e) => {
35
+ }, w = (e, t, n) => e < t ? t : e > n ? n : e, pt = (e) => {
23
36
  let t = a(e);
24
37
  return t && n(t) > .5 ? "#0b0e11" : "#fff";
25
- }, T = Number.isFinite, tt = (n, a = {}) => {
26
- let tt = n.ownerDocument, nt = tt.defaultView, E = { ...a }, rt = !1, it = (e, n) => t(tt.createElement(e), n), D = it("div", {
38
+ }, T = Number.isFinite, E = (n, a = {}) => {
39
+ let E = n.ownerDocument, mt = E.defaultView, D = { ...a }, ht = !1, gt = (e, n) => t(E.createElement(e), n), O = gt("div", {
27
40
  position: "relative",
28
41
  width: "100%",
29
42
  height: "100%",
@@ -36,17 +49,17 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
36
49
  color: "var(--text-color, #1f2937)",
37
50
  cursor: "crosshair"
38
51
  });
39
- D.className = "minerva-trading-chart", D.tabIndex = 0, D.setAttribute("role", "figure"), D.setAttribute("aria-roledescription", "chart");
40
- let at = (e) => it(e, {
52
+ O.className = "minerva-trading-chart", O.tabIndex = 0, O.setAttribute("role", "figure"), O.setAttribute("aria-roledescription", "chart");
53
+ let _t = (e) => gt(e, {
41
54
  position: "absolute",
42
55
  left: "0",
43
56
  top: "0",
44
57
  pointerEvents: "none"
45
- }), ot = at("canvas"), st = at("canvas");
46
- ot.setAttribute("aria-hidden", "true"), st.setAttribute("aria-hidden", "true");
47
- let ct = at("div");
48
- ct.style.right = "0", ct.style.bottom = "0";
49
- let lt = it("button", {
58
+ }), vt = _t("canvas"), yt = _t("canvas");
59
+ vt.setAttribute("aria-hidden", "true"), yt.setAttribute("aria-hidden", "true");
60
+ let bt = _t("div");
61
+ bt.style.right = "0", bt.style.bottom = "0";
62
+ let xt = gt("button", {
50
63
  position: "absolute",
51
64
  display: "none",
52
65
  alignItems: "center",
@@ -61,8 +74,8 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
61
74
  boxShadow: "0 4px 14px -4px rgba(15, 23, 42, 0.25)",
62
75
  cursor: "pointer"
63
76
  });
64
- lt.type = "button", lt.innerHTML = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 3l5 5-5 5M9 3l5 5-5 5\"/></svg>";
65
- let ut = it("div", {
77
+ xt.type = "button", xt.innerHTML = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 3l5 5-5 5M9 3l5 5-5 5\"/></svg>";
78
+ let St = gt("div", {
66
79
  position: "absolute",
67
80
  width: "1px",
68
81
  height: "1px",
@@ -71,132 +84,198 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
71
84
  clipPath: "inset(50%)",
72
85
  whiteSpace: "nowrap"
73
86
  });
74
- ut.setAttribute("aria-live", "polite"), D.append(ot, st, ct, lt, ut), n.appendChild(D);
75
- let O = Pe(), dt = Ne(), ft = {
76
- time: O.time,
87
+ St.setAttribute("aria-live", "polite");
88
+ let k = gt("div", {
89
+ position: "absolute",
90
+ display: "none",
91
+ alignItems: "center",
92
+ gap: "1px",
93
+ padding: "3px",
94
+ borderRadius: "8px",
95
+ border: "1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 85%, transparent)",
96
+ background: "var(--surface-elevated-color, var(--surface-color, #fff))",
97
+ boxShadow: "0 8px 24px -8px rgba(15, 23, 42, 0.35)",
98
+ zIndex: "2",
99
+ cursor: "default"
100
+ });
101
+ k.className = "minerva-trading-toolbar", k.setAttribute("role", "toolbar");
102
+ let A = gt("textarea", {
103
+ position: "absolute",
104
+ display: "none",
105
+ minWidth: "120px",
106
+ minHeight: "28px",
107
+ padding: "5px 9px",
108
+ resize: "none",
109
+ border: "1px solid var(--primary-color, #2962ff)",
110
+ borderRadius: "5px",
111
+ outline: "none",
112
+ background: "var(--surface-elevated-color, var(--surface-color, #fff))",
113
+ color: "var(--text-color, #1f2937)",
114
+ font: "500 13px var(--font-family-sans, system-ui, sans-serif)",
115
+ boxShadow: "0 6px 18px -6px rgba(15, 23, 42, 0.3)",
116
+ zIndex: "3"
117
+ });
118
+ A.rows = 1;
119
+ let Ct = gt("style", {});
120
+ Ct.textContent = ".minerva-trading-toolbar button{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;padding:0 5px;border-radius:5px;cursor:pointer;color:var(--text-color,#1f2937)}.minerva-trading-toolbar button:hover{background:color-mix(in srgb,var(--text-color,#1f2937) 9%,transparent)}.minerva-trading-toolbar button:focus-visible{box-shadow:inset 0 0 0 2px var(--primary-color,#2962ff)}.minerva-trading-toolbar button[aria-pressed=\"true\"]{background:color-mix(in srgb,var(--primary-color,#2962ff) 16%,transparent);color:var(--primary-color,#2962ff)}.minerva-trading-toolbar .sep{width:1px;height:18px;margin:0 3px;background:var(--border-color,#e5e7eb)}", O.append(Ct, vt, yt, bt, xt, k, A, St), n.appendChild(O);
121
+ let j = Ve(), wt = ze(), Tt = {
122
+ time: j.time,
77
123
  open: /* @__PURE__ */ new Float64Array(),
78
124
  high: /* @__PURE__ */ new Float64Array(),
79
125
  low: /* @__PURE__ */ new Float64Array(),
80
126
  close: /* @__PURE__ */ new Float64Array(),
81
- volume: O.volume
82
- }, pt = 0, mt = Ne(), k = [], ht = /* @__PURE__ */ new Map(), gt = /* @__PURE__ */ new Map(), _t = [], vt = 0, yt = 0, bt = 2, xt = v, A = E.barSpacing ?? 8, j = NaN, M = 0, N = 0, St = Ke, Ct = 0, wt = 0, P = [], Tt = /* @__PURE__ */ new Map(), Et = /* @__PURE__ */ new Map(), Dt = null, Ot = 0, F = d(D), kt = 0, At = 0, I = null, jt = 0, Mt = 0, Nt = [], Pt = "", Ft = -1, It = 0, Lt, Rt = new Promise((e) => {
83
- Lt = e;
84
- }), L = null, R = null, z = null, zt = /* @__PURE__ */ new Map(), Bt = null, B = null, V = null, Vt = null, H = E.drawings ?? [], Ht = null, Ut = E.drawingMode ?? "cursor", U = null, Wt = null, W = null, Gt = 0, Kt = /* @__PURE__ */ new Map(), qt = null, Jt = null, Yt = "", Xt = NaN, Zt = null, Qt = /* @__PURE__ */ new Map(), G = (e, t) => {
85
- Qt.get(e)?.forEach((e) => e(t));
86
- }, K = c(E.locale), $t = s(ye, K, E.labels), en = () => {
87
- K = c(E.locale), $t = s(ye, K, E.labels);
88
- }, tn = () => $t, q = () => O.length, nn = () => E.chartStyle ?? "candles", rn = () => E.colorConvention === "redUp", an = () => E.upColor ?? (rn() ? Xe : Ye), on = () => E.downColor ?? (rn() ? Ye : Xe), sn = (e, t = F.primary) => F.resolve ? F.resolve(e, t) : t, J = (e, t = 1) => o(sn(e), t), cn = () => E.precision ?? bt, ln = ce(2, void 0), un = "", Y = (e) => {
89
- if (E.formatPrice) return E.formatPrice(e);
90
- let t = `${cn()}|${K}`;
91
- return t !== un && (ln = ce(cn(), K), un = t), ln(e);
92
- }, dn = () => (E.timeframe === void 0 ? null : ve(E.timeframe)) ?? {
127
+ volume: j.volume
128
+ }, Et = 0, Dt = ze(), M = [], Ot = /* @__PURE__ */ new Map(), kt = /* @__PURE__ */ new Map(), At = [], jt = /* @__PURE__ */ new WeakMap(), Mt = 0, Nt = 0, Pt = 2, Ft = x, N = D.barSpacing ?? 8, P = NaN, F = 0, I = 0, It = tt, Lt = 0, Rt = 0, L = [], zt = /* @__PURE__ */ new Map(), Bt = /* @__PURE__ */ new Map(), Vt = null, Ht = 0, R = d(O), Ut = 0, Wt = 0, z = null, Gt = 0, Kt = 0, qt = [], Jt = "", Yt = -1, Xt = 0, Zt, Qt = new Promise((e) => {
129
+ Zt = e;
130
+ }), B = null, V = null, H = null, $t = /* @__PURE__ */ new Map(), en = null, tn = null, nn = null, rn = null, U = D.drawings ?? [], an = null, on = U, sn = [], cn = [], ln = "false|false", un = D.drawingMode ?? "cursor", dn = null, fn = null, W = null, pn = 0, mn = C, hn = 0, gn = /* @__PURE__ */ new Map(), _n = null, vn = "", yn = !1, bn = /* @__PURE__ */ new Map(), xn = null, Sn = [], Cn = -1, wn = null, Tn = !1, En = null, Dn = "", On = NaN, kn = null, G = null, An = !1, jn = 4, Mn = null, Nn = /* @__PURE__ */ new Map(), K = (e, t) => {
131
+ Nn.get(e)?.forEach((e) => e(t));
132
+ }, q = c(D.locale), Pn = s(Te, q, D.labels), Fn = () => {
133
+ q = c(D.locale), Pn = s(Te, q, D.labels);
134
+ }, In = () => Pn, J = () => j.length, Ln = () => D.chartStyle ?? "candles", Rn = () => D.colorConvention === "redUp", zn = () => D.upColor ?? (Rn() ? at : it), Bn = () => D.downColor ?? (Rn() ? it : at), Vn = (e, t = R.primary) => R.resolve ? R.resolve(e, t) : t, Y = (e, t = 1) => o(Vn(e), t), Hn = () => D.precision ?? Pt, Un = pe(2, void 0), Wn = "", X = (e) => {
135
+ if (D.formatPrice) return D.formatPrice(e);
136
+ let t = `${Hn()}|${q}`;
137
+ return t !== Wn && (Un = pe(Hn(), q), Wn = t), Un(e);
138
+ }, Gn = () => (D.timeframe === void 0 ? null : Ce(D.timeframe)) ?? {
93
139
  unit: "ms",
94
- count: xt,
95
- ms: xt
96
- }, fn = () => dn().ms, X = (e, t = 400) => `${t} ${e}px ${F.fontFamily}`, pn = (e) => gt.get(e.id) ?? e.config.visible ?? !0, Z = (e) => M + (e - j) * A, mn = (e) => j - (M - e) / A, hn = (e) => {
97
- let t = q();
140
+ count: Ft,
141
+ ms: Ft
142
+ }, Kn = () => Gn().ms, Z = (e, t = 400) => `${t} ${e}px ${R.fontFamily}`, qn = (e) => kt.get(e.id) ?? e.config.visible ?? !0, Q = (e) => F + (e - P) * N, Jn = (e) => P - (F - e) / N, Yn = (e) => {
143
+ let t = J();
98
144
  if (!t) return 0;
99
145
  let n = Math.round(e);
100
- return n < 0 ? O.time[0] + n * fn() : n >= t ? O.time[t - 1] + (n - t + 1) * fn() : O.time[n];
101
- }, gn = (e) => {
102
- let t = q();
146
+ return n < 0 ? j.time[0] + n * Kn() : n >= t ? j.time[t - 1] + (n - t + 1) * Kn() : j.time[n];
147
+ }, Xn = (e) => {
148
+ let t = J();
103
149
  if (!t) return 0;
104
- let n = O.time[t - 1];
105
- return e > n ? t - 1 + (e - n) / fn() : e < O.time[0] ? (e - O.time[0]) / fn() : Fe(O.time, t, e);
106
- }, _n = () => nn() === "heikinAshi" ? ft : O, vn = (e) => {
107
- for (let t of k) ht.set(t, Math.min(ht.get(t) ?? 0, e));
108
- pt = Math.min(pt, e);
109
- for (let t of _t) t.valid = Math.min(t.valid, e);
150
+ let n = Math.floor(e);
151
+ if (n < 0 || n >= t - 1) {
152
+ let r = n < 0 ? 0 : t - 1;
153
+ return j.time[r] + (e - r) * Kn();
154
+ }
155
+ let r = e - n;
156
+ return j.time[n] + r * (j.time[n + 1] - j.time[n]);
157
+ }, Zn = (e) => {
158
+ let t = J();
159
+ if (!t) return 0;
160
+ if (e >= j.time[t - 1]) return t - 1 + (e - j.time[t - 1]) / Kn();
161
+ if (e <= j.time[0]) return (e - j.time[0]) / Kn();
162
+ let n = He(j.time, t, e), r = j.time[n + 1] - j.time[n];
163
+ return n + (r > 0 ? (e - j.time[n]) / r : 0);
164
+ }, Qn, $n = (e) => D.utcOffset ?? (Qn ? he(e, Qn) : -new Date(T(e) ? e : 0).getTimezoneOffset()), er = (e) => $n(e), tr = (e) => e + $n(e) * ne, nr = (e) => e === "up" ? zn() : e === "down" ? Bn() : e, rr = (e, t, n) => e.level ? Je(n, t, J(), e.level) : {
165
+ min: t,
166
+ max: t,
167
+ last: t
168
+ }, ir = (e) => {
169
+ let t = jt.get(e);
170
+ return t || jt.set(e, t = Be()), t;
171
+ }, ar = (e) => {
172
+ let t = J();
173
+ if (!t) return 0;
174
+ let n = j.time[t - 1];
175
+ return e > n ? t - 1 + (e - n) / Kn() : e < j.time[0] ? (e - j.time[0]) / Kn() : He(j.time, t, e);
176
+ }, or = () => Ln() === "heikinAshi" ? Tt : j, sr = (e) => {
177
+ for (let t of M) {
178
+ Ot.set(t, Math.min(Ot.get(t) ?? 0, e));
179
+ for (let n of t.outputs) {
180
+ let t = jt.get(n);
181
+ t && We(t, e);
182
+ }
183
+ }
184
+ Et = Math.min(Et, e);
185
+ for (let t of At) t.valid = Math.min(t.valid, e), We(t.lod, e);
186
+ Mn = null;
110
187
  let t = (t) => {
111
188
  for (let n of t.levels) n && (n.valid = Math.min(n.valid, Math.floor(e / n.size)));
112
189
  };
113
- t(dt), t(mt);
114
- }, yn = () => {
115
- let e = q();
116
- for (let t of k) {
117
- let n = ht.get(t) ?? 0;
118
- n < e && (t.compute(O, n), ht.set(t, e));
119
- }
120
- if (ft.time = O.time, ft.volume = O.volume, nn() === "heikinAshi" && pt < e) {
121
- if (ft.open.length < O.capacity) for (let e of [
190
+ t(wt), t(Dt);
191
+ }, cr = () => {
192
+ let e = J();
193
+ for (let t of M) {
194
+ let n = Ot.get(t) ?? 0;
195
+ n < e && (t.compute(j, n), Ot.set(t, e));
196
+ }
197
+ if (Tt.time = j.time, Tt.volume = j.volume, Ln() === "heikinAshi" && Et < e) {
198
+ if (Tt.open.length < j.capacity) for (let e of [
122
199
  "open",
123
200
  "high",
124
201
  "low",
125
202
  "close"
126
203
  ]) {
127
- let t = new Float64Array(O.capacity);
128
- t.set(ft[e].subarray(0, pt)), ft[e] = t;
204
+ let t = new Float64Array(j.capacity);
205
+ t.set(Tt[e].subarray(0, Et)), Tt[e] = t;
129
206
  }
130
- _e(O.open, O.high, O.low, O.close, e, ft, pt), pt = e;
207
+ Se(j.open, j.high, j.low, j.close, e, Tt, Et), Et = e;
131
208
  }
132
- for (let t of _t) if (!(t.valid >= e)) {
133
- if (t.values.length < O.capacity) {
134
- let e = new Float64Array(O.capacity).fill(NaN);
209
+ for (let t of At) if (!(t.valid >= e)) {
210
+ if (t.values.length < j.capacity) {
211
+ let e = new Float64Array(j.capacity).fill(NaN);
135
212
  e.set(t.values.subarray(0, t.valid)), t.values = e;
136
213
  }
137
214
  for (let n = t.valid; n < e; n++) {
138
- let e = Le(t.times, t.times.length, O.time[n] + .5) - 1;
215
+ let e = Ge(t.times, t.times.length, j.time[n] + .5) - 1;
139
216
  t.values[n] = e >= 0 ? t.data[e] : NaN;
140
217
  }
141
218
  t.valid = e;
142
219
  }
143
- }, bn = (e) => {
144
- vn(e);
145
- let t = q();
146
- e < t - 1 && vt++, yt++, t && (bt = Math.max(e === 0 ? 0 : bt, x(O.close, e, t), x(O.open, Math.max(e, t - 50), t)), (e === 0 || t < 80) && (xt = oe(O.time, t))), $();
147
- }, xn = () => {
148
- let { studies: e, reused: t } = We(E.indicators ?? [], k, E.utcOffset ?? -(/* @__PURE__ */ new Date()).getTimezoneOffset());
149
- for (let e of k) t.has(e) || ht.delete(e);
150
- for (let n of e) t.has(n) || ht.set(n, 0);
151
- k = e;
152
- for (let e of [...gt.keys()]) k.some((t) => t.id === e) || gt.delete(e);
153
- }, Sn = () => {
154
- _t = (E.compare ?? []).map((e, t) => {
220
+ }, lr = (e) => {
221
+ sr(e);
222
+ let t = J();
223
+ e < t - 1 && Mt++, Nt++, t && (Pt = Math.max(e === 0 ? 0 : Pt, ie(j.close, e, t), ie(j.open, Math.max(e, t - 50), t)), (e === 0 || t < 80) && (Ft = ue(j.time, t))), $();
224
+ }, ur = () => {
225
+ let { studies: e, reused: t } = $e(D.indicators ?? [], M, er);
226
+ for (let e of M) t.has(e) || Ot.delete(e);
227
+ for (let n of e) t.has(n) || Ot.set(n, 0);
228
+ M = e;
229
+ for (let e of [...kt.keys()]) M.some((t) => t.id === e) || kt.delete(e);
230
+ }, dr = () => {
231
+ At = (D.compare ?? []).map((e, t) => {
155
232
  let n = [...e.data].sort((e, t) => e.time - t.time);
156
233
  return {
157
234
  id: e.id ?? e.name,
158
235
  name: e.name,
159
- color: e.color ?? Ue[(t + 2) % Ue.length],
236
+ color: e.color ?? Qe[(t + 2) % Qe.length],
237
+ width: e.lineWidth ?? 1.5,
160
238
  times: Float64Array.from(n, (e) => e.time),
161
239
  data: Float64Array.from(n, (e) => e.value),
162
240
  values: /* @__PURE__ */ new Float64Array(),
163
- valid: 0
241
+ valid: 0,
242
+ lod: Be()
164
243
  };
165
244
  });
166
- }, Cn = () => {
167
- let e = q();
168
- if (!e || !T(j)) return !0;
169
- let t = Z(e - 1);
170
- return t >= 0 && t <= M + A * .5;
171
- }, wn = (e) => {
172
- Ve(O, e), dt = Ne(), mt = Ne(), pt = 0, Xt = NaN;
173
- for (let e of Tt.values()) e.auto = !0;
174
- j = q() - 1 + (E.rightOffset ?? 8), B = null, V = null, bn(0);
175
- }, Tn = (e) => {
176
- let t = q(), n = Ie(e);
245
+ }, fr = () => {
246
+ let e = J();
247
+ if (!e || !T(P)) return !0;
248
+ let t = Q(e - 1);
249
+ return t >= 0 && t <= F + N * .5;
250
+ }, pr = (e) => {
251
+ Xe(j, e), wt = ze(), Dt = ze(), Et = 0, On = NaN;
252
+ for (let e of zt.values()) e.auto = !0;
253
+ P = J() - 1 + (D.rightOffset ?? 8), tn = null, nn = null, lr(0);
254
+ }, mr = (e) => {
255
+ let t = J(), n = Ue(e);
177
256
  if (t >= 2 && n >= t) {
178
- let r = Me(e, 0).time, i = O.time[t - 1];
179
- if (r === O.time[0] && Me(e, t - 2).time === O.time[t - 2]) {
180
- let r = Cn(), i = t, a = t;
257
+ let r = Re(e, 0).time, i = j.time[t - 1];
258
+ if (r === j.time[0] && Re(e, t - 2).time === j.time[t - 2]) {
259
+ let r = fr(), i = t, a = t;
181
260
  for (let r = t - 1; r < n; r++) {
182
- let t = He(O, Me(e, r));
261
+ let t = Ze(j, Re(e, r));
183
262
  t >= 0 && (a = Math.min(a, t));
184
263
  }
185
- r && (j += q() - i), a < q() && bn(a);
264
+ r && (P += J() - i), a < J() && lr(a);
186
265
  return;
187
266
  }
188
- if (Me(e, n - 1).time === i && n > t) {
267
+ if (Re(e, n - 1).time === i && n > t) {
189
268
  let r = n - t;
190
- Ve(O, e), dt = Ne(), mt = Ne(), pt = 0, j += r, bn(0);
269
+ Xe(j, e), wt = ze(), Dt = ze(), Et = 0, P += r, lr(0);
191
270
  return;
192
271
  }
193
272
  }
194
- wn(e);
195
- }, En = () => {
196
- let e = k.filter((e) => !e.overlay), t = N, n = e.map((e) => Et.get(e.id) ?? e.height), r = n.reduce((e, t) => e + t, 0), i = Math.max(0, t * .62), a = r > i && r > 0 ? i / r : 1, o = n.map((e) => Math.max(Je * Math.min(1, a * 2), e * a)), s = Math.max(40, t - o.reduce((e, t) => e + t, 0)), c = [], l = (e, t) => {
197
- let n = Tt.get(e);
198
- return n || (n = xe(t), Tt.set(e, n)), n.mode !== t && (n.mode = t, n.auto = !0), n;
199
- }, u = l(C, E.scaleMode ?? "linear");
273
+ pr(e);
274
+ }, hr = () => {
275
+ let e = M.filter((e) => !e.overlay), t = I, n = e.map((e) => Bt.get(e.id) ?? e.height), r = n.reduce((e, t) => e + t, 0), i = Math.max(0, t * .62), a = r > i && r > 0 ? i / r : 1, o = n.map((e) => Math.max(rt * Math.min(1, a * 2), e * a)), s = Math.max(40, t - o.reduce((e, t) => e + t, 0)), c = [], l = (e, t) => {
276
+ let n = zt.get(e);
277
+ return n || (n = De(t), zt.set(e, n)), n.mode !== t && (n.mode = t, n.auto = !0), n;
278
+ }, u = l(C, D.scaleMode ?? "linear");
200
279
  u.top = 0, u.height = s, u.marginTop = .1, u.marginBottom = .08, c.push({
201
280
  id: C,
202
281
  study: null,
@@ -219,19 +298,19 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
219
298
  step: 0
220
299
  }), d += o[t];
221
300
  });
222
- for (let e of [...Tt.keys()]) c.some((t) => t.id === e) || Tt.delete(e);
223
- P = c;
224
- }, Dn = (e) => P.find((t) => e >= t.top && e < t.top + t.height) ?? null, Q = () => {
225
- let e = q(), t = Math.min(1, M * .8 / Math.max(1, e));
226
- A = w(A, Math.max(1e-4, t), qe);
227
- let n = M / A;
228
- T(j) || (j = e - 1 + (E.rightOffset ?? 8));
229
- let r = Math.max(0, e - 1) + Math.max(E.rightOffset ?? 8, n * .75), i = Math.min(n * .25, r);
230
- j = w(j, i, r);
231
- }, On = () => {
232
- let e = q();
301
+ for (let e of [...zt.keys()]) c.some((t) => t.id === e) || zt.delete(e);
302
+ L = c;
303
+ }, gr = (e) => L.find((t) => e >= t.top && e < t.top + t.height) ?? null, _r = () => {
304
+ let e = J(), t = Math.min(1, F * .8 / Math.max(1, e));
305
+ N = w(N, Math.max(1e-4, t), nt);
306
+ let n = F / N;
307
+ T(P) || (P = e - 1 + (D.rightOffset ?? 8));
308
+ let r = Math.max(0, e - 1) + Math.max(D.rightOffset ?? 8, n * .75), i = Math.min(n * .25, r);
309
+ P = w(P, i, r);
310
+ }, vr = () => {
311
+ let e = J();
233
312
  if (!e) return null;
234
- let t = j - M / A, n = A >= 2 ? 0 : Math.ceil(Math.log2(2 / A)), r = 2 ** n, i = _n(), a = n ? ze(nn() === "heikinAshi" ? mt : dt, i, e, n) : i, o = Math.floor((e - 1) / r), s = w(Math.floor(t) - 1, 0, e - 1), c = w(Math.ceil(j) + 1, 0, e - 1), l = w(Math.ceil(t - .5), 0, e - 1), u = w(Math.floor(j + .5), 0, e - 1);
313
+ let t = P - F / N, n = N >= 2 ? 0 : Math.ceil(Math.log2(2 / N)), r = 2 ** n, i = or(), a = n ? qe(Ln() === "heikinAshi" ? Dt : wt, i, e, n) : i, o = Math.floor((e - 1) / r), s = w(Math.floor(t) - 1, 0, e - 1), c = w(Math.ceil(P) + 1, 0, e - 1), l = w(Math.ceil(t - .5), 0, e - 1), u = w(Math.floor(P + .5), 0, e - 1);
235
314
  return {
236
315
  left: t,
237
316
  level: n,
@@ -243,90 +322,100 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
243
322
  s1: Math.floor(u / r),
244
323
  last: o
245
324
  };
246
- }, kn = (e, t) => t * e.size + (e.size - 1) / 2, An = (e, t, n) => t[Math.min(q() - 1, n * e.size + e.size - 1)], jn = (e, t) => Math.min(e.size, q() - t * e.size), Mn = () => w(Math.ceil(j - M / A - .5), 0, Math.max(0, q() - 1)), Nn = (e) => {
247
- let t = q();
248
- for (let n = Mn(); n < t; n++) {
325
+ }, yr = (e, t) => t * e.size + (e.size - 1) / 2, br = (e, t) => Math.min(e.size, J() - t * e.size), xr = () => w(Math.ceil(P - F / N - .5), 0, Math.max(0, J() - 1)), Sr = (e) => {
326
+ let t = J();
327
+ for (let n = xr(); n < t; n++) {
249
328
  let t = e.values[n];
250
329
  if (T(t) && t !== 0) return t;
251
330
  }
252
331
  return NaN;
253
- }, Pn = (e, t, n) => e.mode === "percent" ? (t / n - 1) * 100 : De(e, t), Fn = () => E.baselinePrice ?? _n().close[Mn()], In = (e) => {
254
- Ot = 0;
255
- for (let t of P) {
332
+ }, Cr = (e, t, n) => e.mode === "percent" ? (t / n - 1) * 100 : Ne(e, t), wr = () => D.baselinePrice ?? or().close[xr()], Tr = (e, t, n, r, i) => {
333
+ let a = rr(e, t, n), o = Math.round(r / e.size), s = w(e.s0 - o, 0, e.last), c = w(e.s1 - o, 0, e.last);
334
+ for (let e = s; e <= c; e++) a.min[e] < i[0] && (i[0] = a.min[e]), a.max[e] > i[1] && (i[1] = a.max[e]);
335
+ }, Er = (e) => {
336
+ Ht = 0;
337
+ for (let t of L) {
256
338
  let n = t.scale;
257
339
  if (!e) continue;
258
340
  if (t.id === C) {
259
- n.base = O.close[Mn()] || 1;
260
- let { cols: t } = e, r = nn(), i = r === "line" || r === "area" || r === "baseline", a = Infinity, o = -Infinity;
341
+ n.base = j.close[xr()] || 1;
342
+ let { cols: t } = e, r = Ln(), i = r === "line" || r === "area" || r === "baseline", a = [Infinity, -Infinity];
261
343
  for (let n = e.s0; n <= e.s1; n++) {
262
344
  let e = i ? t.close[n] : t.low[n], r = i ? t.close[n] : t.high[n];
263
- e < a && (a = e), r > o && (o = r);
345
+ e < a[0] && (a[0] = e), r > a[1] && (a[1] = r);
264
346
  }
265
- for (let n of k) if (n.overlay && pn(n)) {
347
+ for (let n of M) if (n.overlay && qn(n)) {
266
348
  if (n.type === "volume") {
267
349
  for (let n = e.s0; n <= e.s1; n++) {
268
- let r = t.volume[n] / jn(e, n);
269
- r > Ot && (Ot = r);
350
+ let r = t.volume[n] / br(e, n);
351
+ r > Ht && (Ht = r);
270
352
  }
271
353
  continue;
272
354
  }
273
- for (let t of n.outputs) for (let n = e.s0; n <= e.s1; n++) {
274
- let r = An(e, t.values, n);
275
- r < a && (a = r), r > o && (o = r);
276
- }
355
+ for (let t of n.outputs) Tr(e, t.values, ir(t), t.shift, a);
277
356
  }
357
+ let [o, s] = a;
278
358
  if (r === "baseline") {
279
- let e = Fn();
280
- e < a && (a = e), e > o && (o = e);
359
+ let e = wr();
360
+ e < o && (o = e), e > s && (s = e);
281
361
  }
282
362
  if (!n.auto) continue;
283
- let s = De(n, a), c = De(n, o);
284
- n.mode === "log" && !(a > 0) && (s = De(n, Math.max(o * .001, 1e-12)));
285
- for (let t of _t) {
286
- let r = Nn(t);
287
- for (let i = e.s0; i <= e.s1; i++) {
288
- let a = Pn(n, An(e, t.values, i), r);
289
- a < s && (s = a), a > c && (c = a);
363
+ let c = Ne(n, o), l = Ne(n, s);
364
+ n.mode === "log" && !(o > 0) && (c = Ne(n, Math.max(s * .001, 1e-12)));
365
+ for (let t of At) {
366
+ let r = Sr(t), i = [Infinity, -Infinity];
367
+ Tr(e, t.values, t.lod, 0, i);
368
+ for (let e of i) {
369
+ let t = Cr(n, e, r);
370
+ t < c && (c = t), t > l && (l = t);
290
371
  }
291
372
  }
292
- Se(n, s, c);
373
+ n.mode === "percent" && At.length && (c = Math.min(c, 0), l = Math.max(l, 0)), Oe(n, c, l);
293
374
  continue;
294
375
  }
295
376
  let r = t.study;
296
377
  if (!r || !n.auto) continue;
297
378
  if (r.range) {
298
- Se(n, r.range[0], r.range[1]);
379
+ Oe(n, r.range[0], r.range[1]);
299
380
  continue;
300
381
  }
301
- let i = Infinity, a = -Infinity;
302
- r.type === "volume" && (i = 0);
303
- for (let t of r.outputs) for (let n = e.s0; n <= e.s1; n++) {
304
- let r = t.kind === "volume" ? e.cols.volume[n] / jn(e, n) : An(e, t.values, n);
305
- r < i && (i = r), r > a && (a = r);
382
+ let i = [Infinity, -Infinity];
383
+ r.type === "volume" && (i[0] = 0);
384
+ for (let t of r.outputs) {
385
+ if (t.kind === "volume") {
386
+ for (let t = e.s0; t <= e.s1; t++) {
387
+ let n = e.cols.volume[t] / br(e, t);
388
+ n > i[1] && (i[1] = n);
389
+ }
390
+ continue;
391
+ }
392
+ Tr(e, t.values, ir(t), t.shift, i);
306
393
  }
307
- r.type === "macd" && T(i) && T(a) && (i = Math.min(i, 0), a = Math.max(a, 0)), Se(n, i, a);
394
+ let [a, o] = i;
395
+ if (r.bands && T(a) && T(o)) for (let e of r.bands) a = Math.min(a, e), o = Math.max(o, e);
396
+ r.zero && T(a) && T(o) && (a = Math.min(a, 0), o = Math.max(o, 0)), Oe(n, a, o);
308
397
  }
309
- }, Ln = (e, t) => {
310
- let n = q();
398
+ }, Dr = (e, t) => {
399
+ let n = J();
311
400
  if (!n || !e) return [];
312
- let r = fn(), i = r < v, a = E.utcOffset, o = Math.floor(Math.max(0, Math.ceil(j)) / e.size), s = (t) => t <= e.last ? e.cols.time[t] : O.time[n - 1] + (t * e.size - (n - 1)) * r, c = [], l = e.g0 > 0 ? le(s(e.g0 - 1), a) : NaN;
313
- for (let t = e.g0; t <= o; t++) {
314
- let n = le(s(t), a), r = Z(kn(e, t)), i = ee(l, n);
315
- r >= -20 && r <= M + 20 && i > 10 && c.push({
401
+ let r = Kn(), i = r < x, a = Math.floor(Math.max(0, Math.ceil(P)) / e.size), o = (t) => t <= e.last ? e.cols.time[t] : j.time[n - 1] + (t * e.size - (n - 1)) * r, s = [], c = e.g0 > 0 ? tr(o(e.g0 - 1)) : NaN;
402
+ for (let t = e.g0; t <= a; t++) {
403
+ let n = tr(o(t)), r = Q(yr(e, t)), i = re(c, n);
404
+ r >= -20 && r <= F + 20 && i > 10 && s.push({
316
405
  x: r,
317
406
  weight: i,
318
407
  time: n
319
- }), l = n;
408
+ }), c = n;
320
409
  }
321
- t.font = X(F.fontSize);
322
- let u = i ? "00:00" : "Sep 30", d = Math.max(t.measureText(u).width, t.measureText("2024").width) + 34;
323
- return se(c, d).filter((e) => e.x > 8 && e.x < M - 8).map((e) => ({
410
+ t.font = Z(R.fontSize);
411
+ let l = i ? "00:00" : "Sep 30", u = Math.max(t.measureText(l).width, t.measureText("2024").width) + 34;
412
+ return fe(s, u).filter((e) => e.x > 8 && e.x < F - 8).map((e) => ({
324
413
  x: e.x,
325
- text: ue(e.time, e.weight, K, i),
414
+ text: me(e.time, e.weight, q, i),
326
415
  bold: e.weight >= (i ? 50 : 60)
327
416
  }));
328
- }, Rn = (e, t) => e.id === C ? e.scale.mode === "percent" ? ie(t, K, Math.min(2, l(e.step))) : Y(Ce(e.scale, t)) : e.study?.compact ? ae(t, K) : re(t, Math.min(4, l(e.step)), K), zn = (e, t) => e.overlay && e.type !== "volume" ? Y(t) : e.compact ? ae(t, K) : re(t, e.range ? 2 : Math.max(2, Math.min(6, cn())), K), Bn = (e, t) => {
329
- let n = [], a = e.cols, o = sn(an()), s = sn(on()), c = i(o), l = i(s), u = F.background, d = me(A * e.size * t, t), f = (n) => Z(kn(e, n)) * t, p = nn(), m = Math.max(.5, d.body / 2), h = {
417
+ }, Or = (e, t) => e.id === C ? e.scale.mode === "percent" ? ce(t, q, Math.min(2, l(e.step))) : X(ke(e.scale, t)) : e.study?.compact ? le(t, q) : se(t, Math.min(4, l(e.step)), q), kr = (e, t) => e.overlay && e.type !== "volume" ? X(t) : e.compact ? le(t, q) : se(t, e.range ? 2 : Math.max(2, Math.min(6, Hn())), q), Ar = (e, t) => {
418
+ let n = [], a = e.cols, o = Vn(zn()), s = Vn(Bn()), c = i(o), l = i(s), u = R.background, d = ye(N * e.size * t, t), f = (n) => Q(yr(e, n)) * t, p = Ln(), m = Math.max(.5, d.body / 2), h = {
330
419
  up: i([
331
420
  o[0],
332
421
  o[1],
@@ -340,40 +429,54 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
340
429
  .5
341
430
  ])
342
431
  };
343
- for (let g of P) {
432
+ for (let g of L) {
344
433
  let _ = g.top * t, v = (g.top + g.height) * t, y = g.scale, b = (e) => S(y, e) * t, ee = (t, n, r, i = b) => (a, o, s) => {
345
- let c = new pe(_, v);
434
+ let c = new ve(_, v);
346
435
  for (let n = s ? Math.max(e.g0, a - 1) : a; n <= o; n++) c.push(f(n), i(t(n)));
347
436
  return c.count > 1 ? [c.item("", 0, n, r)] : [];
437
+ }, x = (n, r, i, a, o = 0, s = b) => (c, l, u) => {
438
+ let d = rr(e, n, r), p = o * N * t, m = Math.ceil(Math.abs(o) / e.size) + 1, h = u ? Math.max(0, c - 1) : c, g = l;
439
+ !u && o > 0 && (h = Math.max(0, h - m)), !u && o < 0 && (g = Math.min(e.last - 1, g + m));
440
+ let y = new ve(_, v), b = NaN;
441
+ for (let t = h; t <= g; t++) {
442
+ let n = f(t) + p, r = d.min[t], i = d.max[t];
443
+ if (!e.level || r === i || !T(r) || !T(i)) {
444
+ b = s(d.last[t]), y.push(n, b);
445
+ continue;
446
+ }
447
+ let a = s(r), o = s(i), c = T(b) && Math.abs(b - o) < Math.abs(b - a) ? o : a, l = c === o ? a : o;
448
+ y.push(n, c), y.push(n, l), b = l;
449
+ }
450
+ return y.count > 1 ? [y.item("", 0, i, a)] : [];
348
451
  };
349
452
  if (g.id === C) {
350
- if (k.find((e) => e.overlay && e.type === "volume" && pn(e)) && Ot > 0) {
453
+ if (M.find((e) => e.overlay && e.type === "volume" && qn(e)) && Ht > 0) {
351
454
  let t = (v - _) * .2;
352
455
  n.push((n, r) => {
353
- let i = new fe();
456
+ let i = new _e();
354
457
  for (let o = n; o <= r; o++) {
355
- let n = a.volume[o] / jn(e, o);
458
+ let n = a.volume[o] / br(e, o);
356
459
  if (!(n > 0)) continue;
357
- let r = v - n / Ot * t, [s, c] = ge(r, v);
460
+ let r = v - n / Ht * t, [s, c] = xe(r, v);
358
461
  i.push(d.snap(f(o)), s, c, a.close[o] >= a.open[o] ? h.up : h.down);
359
462
  }
360
463
  return [i.item("", 0, m)];
361
464
  });
362
465
  }
363
- for (let r of _t) {
364
- let i = Nn(r), a = sn(r.color);
365
- n.push(ee((t) => An(e, r.values, t), a, 1.5, (e) => ke(y, Pn(y, e, i)) * t));
466
+ for (let e of At) {
467
+ let r = Sr(e), i = Vn(e.color);
468
+ n.push(x(e.values, e.lod, i, e.width, 0, (e) => Fe(y, Cr(y, e, r)) * t));
366
469
  }
367
470
  if (p === "line" || p === "area" || p === "baseline") {
368
- let t = sn(Qe);
471
+ let t = Vn(st);
369
472
  if (p === "area" && n.push((n, r, i) => {
370
- let o = new de(_, v);
473
+ let o = new ge(_, v);
371
474
  for (let t = i ? Math.max(e.g0, n - 1) : n; t <= r; t++) o.push(f(t), b(a.close[t]), v);
372
475
  return o.count > 1 ? [o.item("", 0, t, .28)] : [];
373
476
  }), p === "baseline") {
374
- let t = b(Fn());
477
+ let t = b(wr());
375
478
  n.push((n, r, i) => {
376
- let c = new de(_, v), l = new de(_, v), u = new pe(_, v), d = new pe(_, v), p = NaN, m = NaN, h = (e, n) => {
479
+ let c = new ge(_, v), l = new ge(_, v), u = new ve(_, v), d = new ve(_, v), p = NaN, m = NaN, h = (e, n) => {
377
480
  c.push(e, Math.min(n, t), t), l.push(e, Math.max(n, t), t), n <= t ? u.push(e, n) : u.break(), n >= t ? d.push(e, n) : d.break();
378
481
  };
379
482
  for (let o = i ? Math.max(e.g0, n - 1) : n; o <= r; o++) {
@@ -391,13 +494,13 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
391
494
  } else {
392
495
  let e = p === "hollowCandles", t = p === "bars", r = d.wick, i = d.body;
393
496
  n.push((n, o) => {
394
- let s = new fe(), u = new fe(), p = new fe(), m = new fe(), h = Math.max(r, Math.round((i - r) / 2));
497
+ let s = new _e(), u = new _e(), p = new _e(), m = new _e(), h = Math.max(r, Math.round((i - r) / 2));
395
498
  for (let g = n; g <= o; g++) {
396
499
  let n = a.open[g], o = a.high[g], y = a.low[g], ee = a.close[g];
397
500
  if (!T(n) || !T(ee)) continue;
398
- let x = (e ? ee >= (g > 0 ? a.close[g - 1] : n) : ee >= n) ? c : l, te = d.snap(f(g)), [ne, re] = ge(b(o), b(y));
501
+ let x = (e ? ee >= (g > 0 ? a.close[g - 1] : n) : ee >= n) ? c : l, te = d.snap(f(g)), [ne, re] = xe(b(o), b(y));
399
502
  if (t) {
400
- let e = he(ne, re, _, v);
503
+ let e = be(ne, re, _, v);
401
504
  e && s.push(te, e[0], e[1], x);
402
505
  for (let [e, t] of [[n, -1], [ee, 1]]) {
403
506
  let n = Math.round(b(e) - r / 2);
@@ -405,26 +508,26 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
405
508
  }
406
509
  continue;
407
510
  }
408
- let [ie, ae] = ge(b(n), b(ee));
511
+ let [ie, ae] = xe(b(n), b(ee));
409
512
  if (i <= r) {
410
- let e = he(ne, re, _, v);
513
+ let e = be(ne, re, _, v);
411
514
  e && s.push(te, e[0], e[1], x);
412
515
  continue;
413
516
  }
414
517
  if (e && ee > n) {
415
518
  let e = [[ne, ie], [ae, re]];
416
519
  for (let [t, n] of e) {
417
- let e = n > t ? he(t, n, _, v) : null;
520
+ let e = n > t ? be(t, n, _, v) : null;
418
521
  e && s.push(te, e[0], e[1], x);
419
522
  }
420
- let t = he(ie, ae, _, v);
523
+ let t = be(ie, ae, _, v);
421
524
  t && (s.push(te - i / 2 + r / 2, t[0], t[1], x), s.push(te + i / 2 - r / 2, t[0], t[1], x));
422
525
  for (let e of [ie, ae - r]) e >= _ && e + r <= v && p.push(te, e, e + r, x);
423
526
  continue;
424
527
  }
425
- let oe = he(ne, re, _, v);
528
+ let oe = be(ne, re, _, v);
426
529
  oe && s.push(te, oe[0], oe[1], x);
427
- let se = he(ie, ae, _, v);
530
+ let se = be(ie, ae, _, v);
428
531
  se && u.push(te, se[0], se[1], x);
429
532
  }
430
533
  let g = [s.item("w", 0, r / 2)];
@@ -432,86 +535,108 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
432
535
  });
433
536
  }
434
537
  }
435
- let x = g.id === C ? k.filter((e) => e.overlay && e.type !== "volume") : g.study ? [g.study] : [];
436
- for (let t of x) if (pn(t)) for (let p of t.outputs) if (p.kind === "volume") {
538
+ let te = g.id === C ? M.filter((e) => e.overlay && e.type !== "volume") : g.study ? [g.study] : [];
539
+ for (let p of te) if (qn(p)) for (let g of p.outputs) if (g.kind === "volume") {
437
540
  let t = b(0);
438
541
  n.push((n, r) => {
439
- let i = new fe();
542
+ let i = new _e();
440
543
  for (let o = n; o <= r; o++) {
441
- let n = a.volume[o] / jn(e, o);
544
+ let n = a.volume[o] / br(e, o);
442
545
  if (!(n > 0)) continue;
443
- let r = he(...ge(b(n), t), _, v);
546
+ let r = be(...xe(b(n), t), _, v);
444
547
  r && i.push(d.snap(f(o)), r[0], r[1], a.close[o] >= a.open[o] ? h.up : h.down);
445
548
  }
446
549
  return [i.item("", 0, m)];
447
550
  });
448
- } else if (p.kind === "histogram") {
551
+ } else if (g.kind === "histogram") {
449
552
  let t = b(0), a = {
450
553
  up: c,
451
554
  down: l
452
- }, h = {
555
+ }, p = {
453
556
  up: i(r(u, o, .45)),
454
557
  down: i(r(u, s, .45))
455
- };
558
+ }, h = ir(g);
456
559
  n.push((n, r) => {
457
- let i = new fe();
458
- for (let o = n; o <= r; o++) {
459
- let n = An(e, p.values, o);
560
+ let i = rr(e, g.values, h), o = new _e();
561
+ for (let s = n; s <= r; s++) {
562
+ let n = i.last[s];
460
563
  if (!T(n)) continue;
461
- let r = o > 0 ? An(e, p.values, o - 1) : n, s = n >= 0 ? n >= r ? a.up : h.up : n <= r ? a.down : h.down, c = he(...ge(b(n), t), _, v);
462
- c && i.push(d.snap(f(o)), c[0], c[1], s);
564
+ let r = s > 0 ? i.last[s - 1] : n, c = n >= 0 ? n >= r ? a.up : p.up : n <= r ? a.down : p.down, l = Math.min(0, T(i.min[s]) ? i.min[s] : n), u = Math.max(0, T(i.max[s]) ? i.max[s] : n), m = be(...e.level ? xe(b(u), b(l)) : xe(b(n), t), _, v);
565
+ m && o.push(d.snap(f(s)), m[0], m[1], c);
463
566
  }
464
- return [i.item("", 0, m)];
567
+ return [o.item("", 0, m)];
568
+ });
569
+ } else if (g.kind === "dots") {
570
+ let r = g.color ? i(Vn(nr(g.color))) : 0, o = w(N * e.size * .22, 1.25, 2.6), s = o * t;
571
+ n.push((t, n) => {
572
+ let i = new _e();
573
+ for (let o = t; o <= n; o++) {
574
+ let t = e.level ? g.values[Math.min(J() - 1, o * e.size + e.size - 1)] : g.values[o];
575
+ if (!T(t)) continue;
576
+ let n = b(t);
577
+ if (n < _ || n > v) continue;
578
+ let u = r || (t <= a.close[o] ? c : l);
579
+ i.push(f(o), n - s, n + s, u);
580
+ }
581
+ return i.count ? [i.item("", 0, s, 0, o)] : [];
465
582
  });
466
- } else n.push(ee((t) => An(e, p.values, t), sn(p.color), p.width));
583
+ } else {
584
+ let e = Vn(nr(g.color));
585
+ n.push(x(g.values, ir(g), [
586
+ e[0],
587
+ e[1],
588
+ e[2],
589
+ e[3] * g.alpha
590
+ ], g.width, g.shift));
591
+ }
467
592
  }
468
593
  return n;
469
- }, Vn = (e, t, n, r) => {
470
- let i = Math.min(n.g1, n.last - 1), a = r ? n.last >= n.g0 && n.last <= n.g1 ? e(n.last, n.last, !0) : [] : i >= n.g0 ? e(n.g0, i, !1) : [], o = ++It;
594
+ }, jr = (e, t, n, r) => {
595
+ let i = Math.min(n.g1, n.last - 1), a = r ? n.last >= n.g0 && n.last <= n.g1 ? e(n.last, n.last, !0) : [] : i >= n.g0 ? e(n.g0, i, !1) : [], o = ++Xt;
471
596
  return a.map((e, n) => ({
472
597
  ...e,
473
598
  key: `L${t}:${n}:${e.kind}:${e.key}${r ? ":live" : ""}`,
474
599
  version: o
475
600
  }));
476
- }, Hn = (e, n) => {
477
- if (!I) return;
478
- let r = I.canvas;
601
+ }, Mr = (e, n) => {
602
+ if (!z) return;
603
+ let r = z.canvas;
479
604
  t(r, {
480
605
  left: "0px",
481
606
  top: "0px",
482
- width: `${M}px`,
483
- height: `${N}px`
607
+ width: `${F}px`,
608
+ height: `${I}px`
484
609
  });
485
- let i = Math.max(1, Math.round(M * n)), a = Math.max(1, Math.round(N * n));
486
- if ((r.width !== i || r.height !== a) && I.resize(i, a), e) {
610
+ let i = Math.max(1, Math.round(F * n)), a = Math.max(1, Math.round(I * n));
611
+ if ((r.width !== i || r.height !== a) && z.resize(i, a), e) {
487
612
  let t = [
488
613
  i,
489
614
  a,
490
615
  n,
491
- A,
492
- j,
616
+ N,
617
+ P,
493
618
  e.level,
494
- nn(),
495
- vt,
496
- kt,
497
- At,
498
- Ot,
499
- nn() === "baseline" ? Fn() : 0,
500
- ...P.map((e) => `${e.id}:${e.top}:${e.height}:${e.scale.min}:${e.scale.max}:${e.scale.base}:${e.scale.mode}`),
501
- ...k.map((e) => `${e.id}:${pn(e)}`)
619
+ Ln(),
620
+ Mt,
621
+ Ut,
622
+ Wt,
623
+ Ht,
624
+ Ln() === "baseline" ? wr() : 0,
625
+ ...L.map((e) => `${e.id}:${e.top}:${e.height}:${e.scale.min}:${e.scale.max}:${e.scale.base}:${e.scale.mode}`),
626
+ ...M.map((e) => `${e.id}:${qn(e)}`)
502
627
  ].join("|");
503
- t === Pt ? Ft !== yt && (Ft = yt, Nt.forEach((t, n) => {
504
- t.live = Vn(t.fn, n, e, !0);
505
- })) : (Pt = t, Ft = yt, Nt = Bn(e, n).map((e) => ({
628
+ t === Jt ? Yt !== Nt && (Yt = Nt, qt.forEach((t, n) => {
629
+ t.live = jr(t.fn, n, e, !0);
630
+ })) : (Jt = t, Yt = Nt, qt = Ar(e, n).map((e) => ({
506
631
  fn: e,
507
632
  main: [],
508
633
  live: []
509
- })), Nt.forEach((t, n) => {
510
- t.main = Vn(t.fn, n, e, !1), t.live = Vn(t.fn, n, e, !0);
634
+ })), qt.forEach((t, n) => {
635
+ t.main = jr(t.fn, n, e, !1), t.live = jr(t.fn, n, e, !0);
511
636
  }));
512
- } else Nt = [], Pt = "";
513
- let o = Nt.flatMap((e) => [...e.main, ...e.live]);
514
- I.render(o, {
637
+ } else qt = [], Jt = "";
638
+ let o = qt.flatMap((e) => [...e.main, ...e.live]);
639
+ z.render(o, {
515
640
  transform: {
516
641
  xScale: 2 / i,
517
642
  xOffset: -1,
@@ -522,90 +647,193 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
522
647
  height: a,
523
648
  dpr: n
524
649
  });
525
- }, Un = (e, t) => {
526
- let n = Math.max(1, Math.round(Ct * t)), r = Math.max(1, Math.round(wt * t));
527
- e.width !== n && (e.width = n), e.height !== r && (e.height = r), e.style.width = `${Ct}px`, e.style.height = `${wt}px`;
528
- }, Wn = (e, t, n, r, i, a) => {
650
+ }, Nr = (e, t) => {
651
+ let n = Math.max(1, Math.round(Lt * t)), r = Math.max(1, Math.round(Rt * t));
652
+ e.width !== n && (e.width = n), e.height !== r && (e.height = r), e.style.width = `${Lt}px`, e.style.height = `${Rt}px`;
653
+ }, Pr = (e, t, n, r, i, a) => {
529
654
  e.beginPath(), typeof e.roundRect == "function" ? e.roundRect(t, n, r, i, a) : e.rect(t, n, r, i);
530
- }, Gn = (e, t, n) => {
531
- let r = o(F.grid), i = E.grid !== !1;
655
+ }, Fr = (e, t, n, r, i) => {
656
+ let a = r.outputs[i.a], o = r.outputs[i.b];
657
+ if (!a || !o) return;
658
+ let s = rr(t, a.values, ir(a)), c = rr(t, o.values, ir(o)), l = a.shift, u = Math.ceil(Math.abs(l) / t.size) + 1, d = Math.max(0, t.g0 - (l > 0 ? u : 0)), f = Math.min(t.last, t.g1 + (l < 0 ? u : 0)), p = Y(nr(i.color), i.opacity), m = Y(nr(i.colorBelow ?? i.color), i.opacity);
659
+ e.save(), e.beginPath(), e.rect(0, n.top, F, n.height), e.clip();
660
+ let h = [], g = 0, _ = () => {
661
+ if (h.length > 1) {
662
+ e.fillStyle = g >= 0 ? p : m, e.beginPath(), h.forEach((t, n) => n ? e.lineTo(t.x, t.ya) : e.moveTo(t.x, t.ya));
663
+ for (let t = h.length - 1; t >= 0; t--) {
664
+ let n = h[t];
665
+ n && e.lineTo(n.x, n.yb);
666
+ }
667
+ e.closePath(), e.fill();
668
+ }
669
+ h = [];
670
+ };
671
+ for (let e = d; e <= f; e++) {
672
+ let r = s.last[e], i = c.last[e];
673
+ if (!T(r) || !T(i)) {
674
+ _(), g = 0;
675
+ continue;
676
+ }
677
+ let a = Q(yr(t, e) + l), o = S(n.scale, r), u = S(n.scale, i), d = r >= i ? 1 : -1, f = h[h.length - 1];
678
+ if (f && d !== g) {
679
+ let e = f.ya - f.yb, t = e / (e - (o - u)), n = f.x + (a - f.x) * t, r = f.ya + (o - f.ya) * t;
680
+ h.push({
681
+ x: n,
682
+ ya: r,
683
+ yb: r
684
+ }), _(), h.push({
685
+ x: n,
686
+ ya: r,
687
+ yb: r
688
+ });
689
+ }
690
+ g = d, h.push({
691
+ x: a,
692
+ ya: o,
693
+ yb: u
694
+ });
695
+ }
696
+ _(), e.restore();
697
+ }, Ir = (e, t) => {
698
+ if (!D.sessionBreaks || Kn() >= 864e5) return;
699
+ let n = [], r = NaN;
700
+ for (let e = Math.max(0, t.g0 - 1); e <= Math.min(t.g1, t.last); e++) {
701
+ let i = Math.floor(tr(t.cols.time[e]) / x);
702
+ if (T(r) && i !== r) {
703
+ let r = Math.round(Q(e * t.size - .5)) + .5;
704
+ if (r > 0 && r < F && n.push(r), n.length > F / 6) return;
705
+ }
706
+ r = i;
707
+ }
708
+ if (n.length) {
709
+ e.save(), e.strokeStyle = o(R.textMuted, .4), e.setLineDash([4, 4]), e.beginPath();
710
+ for (let t of n) e.moveTo(t, 0), e.lineTo(t, I);
711
+ e.stroke(), e.restore();
712
+ }
713
+ }, Lr = () => {
714
+ let e = D.volumeProfile;
715
+ return e ? e === !0 ? {} : e : null;
716
+ }, Rr = (e, t) => {
717
+ let n = Lr(), r = L[0];
718
+ if (!n || !r || !j.hasVolume) return;
719
+ let i = w(Math.floor(n.rows ?? 24), 2, 400), a = [
720
+ t.level,
721
+ t.s0,
722
+ t.s1,
723
+ i,
724
+ n.valueArea ?? .7,
725
+ Mt,
726
+ Nt
727
+ ].join("|");
728
+ if (!Mn || Mn.key !== a) {
729
+ let e = t.level ? qe(wt, j, J(), t.level) : j;
730
+ Mn = {
731
+ key: a,
732
+ result: we(e, {
733
+ from: t.s0,
734
+ to: t.s1,
735
+ rows: i,
736
+ valueArea: n.valueArea
737
+ })
738
+ };
739
+ }
740
+ let s = Mn.result;
741
+ if (s.poc < 0) return;
742
+ let c = 0;
743
+ for (let e = 0; e < i; e++) c = Math.max(c, (s.up[e] ?? 0) + (s.down[e] ?? 0));
744
+ if (!(c > 0)) return;
745
+ let l = F * w(n.width ?? .28, .05, .9), u = (n.side ?? "right") === "right", d = Vn(nr(n.upColor ?? "up")), f = Vn(nr(n.downColor ?? "down"));
746
+ e.save(), e.beginPath(), e.rect(0, r.top, F, r.height), e.clip();
747
+ for (let t = 0; t < i; t++) {
748
+ let n = s.up[t] ?? 0, i = s.down[t] ?? 0;
749
+ if (!(n + i > 0)) continue;
750
+ let a = S(r.scale, s.low + t * s.step), p = S(r.scale, s.low + (t + 1) * s.step), m = Math.min(a, p), h = Math.max(1, Math.abs(p - a) - +(Math.abs(p - a) > 4)), g = t >= s.valueAreaFrom && t <= s.valueAreaTo ? .42 : .17, _ = n / c * l, v = i / c * l, y = u ? F : 0, b = u ? -1 : 1;
751
+ e.fillStyle = o(d, g), e.fillRect(Math.min(y, y + b * _), m, _, h), e.fillStyle = o(f, g);
752
+ let ee = y + b * _;
753
+ e.fillRect(Math.min(ee, ee + b * v), m, v, h);
754
+ }
755
+ let p = Math.round(S(r.scale, s.low + (s.poc + .5) * s.step)) + .5;
756
+ e.strokeStyle = Y(n.pocColor ?? ot, .9), e.lineWidth = 1, e.beginPath(), e.moveTo(0, p), e.lineTo(F, p), e.stroke(), e.restore();
757
+ }, zr = (e, t, n) => {
758
+ let r = o(R.grid), i = D.grid !== !1;
532
759
  if (e.lineWidth = 1, i) {
533
760
  e.strokeStyle = r, e.beginPath();
534
761
  for (let t of n) {
535
762
  let n = Math.round(t.x) + .5;
536
- e.moveTo(n, 0), e.lineTo(n, N);
763
+ e.moveTo(n, 0), e.lineTo(n, I);
537
764
  }
538
- for (let t of P) for (let n of t.ticks) {
539
- let r = Math.round(ke(t.scale, n)) + .5;
540
- r < t.top + 2 || r > t.top + t.height - 2 || (e.moveTo(0, r), e.lineTo(M, r));
765
+ for (let t of L) for (let n of t.ticks) {
766
+ let r = Math.round(Fe(t.scale, n)) + .5;
767
+ r < t.top + 2 || r > t.top + t.height - 2 || (e.moveTo(0, r), e.lineTo(F, r));
541
768
  }
542
769
  e.stroke();
543
770
  }
544
- if (E.watermark) {
545
- let t = P[0];
546
- e.save(), e.font = X(Math.min(56, Math.max(22, M / 14)), 700), e.fillStyle = o(F.text, .07), e.textAlign = "center", e.textBaseline = "middle", e.fillText(E.watermark, M / 2, t.top + t.height / 2), e.restore();
771
+ if (D.watermark) {
772
+ let t = L[0];
773
+ e.save(), e.font = Z(Math.min(56, Math.max(22, F / 14)), 700), e.fillStyle = o(R.text, .07), e.textAlign = "center", e.textBaseline = "middle", e.fillText(D.watermark, F / 2, t.top + t.height / 2), e.restore();
547
774
  }
548
- for (let t of P) {
775
+ for (let t of L) {
549
776
  let n = t.study;
550
- if (n?.bands && pn(n)) {
551
- let r = sn(n.outputs[0]?.color ?? Qe), i = n.bands.map((e) => Math.round(S(t.scale, e)) + .5);
552
- n.type === "rsi" && i.length === 2 && (e.fillStyle = o(r, .07), e.fillRect(0, Math.min(i[0], i[1]), M, Math.abs(i[1] - i[0]))), e.save(), e.setLineDash([4, 4]), e.strokeStyle = o(F.textMuted, .45), e.beginPath();
553
- for (let n of i) n < t.top || n > t.top + t.height || (e.moveTo(0, n), e.lineTo(M, n));
777
+ if (n?.bands && qn(n)) {
778
+ let r = Vn(nr(n.outputs[0]?.color ?? st)), i = n.bands.map((e) => Math.round(S(t.scale, e)) + .5);
779
+ n.bandFill && i.length === 2 && (e.fillStyle = o(r, .07), e.fillRect(0, Math.min(i[0], i[1]), F, Math.abs(i[1] - i[0]))), e.save(), e.setLineDash([4, 4]), e.strokeStyle = o(R.textMuted, .45), e.beginPath();
780
+ for (let n of i) n < t.top || n > t.top + t.height || (e.moveTo(0, n), e.lineTo(F, n));
554
781
  e.stroke(), e.restore();
555
782
  }
556
783
  }
557
784
  if (t) {
558
- let n = P[0];
559
- for (let r of k) {
560
- if (r.type !== "boll" || !r.fill || !pn(r)) continue;
561
- let [i, a] = r.fill, o = r.outputs[i].values, s = r.outputs[a].values;
562
- e.save(), e.beginPath(), e.rect(0, n.top, M, n.height), e.clip(), e.fillStyle = J(r.outputs[i].color, .07), e.beginPath();
563
- let c = !1, l = [], u = () => {
564
- for (let t = l.length - 1; t >= 0; t--) e.lineTo(l[t][0], l[t][1]);
565
- c && e.closePath(), l.length = 0, c = !1;
566
- };
567
- for (let r = t.g0; r <= t.g1; r++) {
568
- let i = An(t, o, r), a = An(t, s, r);
569
- if (!T(i) || !T(a)) {
570
- u();
571
- continue;
572
- }
573
- let d = Z(kn(t, r)), f = S(n.scale, i);
574
- c ? e.lineTo(d, f) : e.moveTo(d, f), c = !0, l.push([d, S(n.scale, a)]);
575
- }
576
- u(), e.fill(), e.restore();
785
+ Ir(e, t);
786
+ for (let n of M) {
787
+ if (!n.fills.length || !qn(n)) continue;
788
+ let r = n.overlay ? L[0] : L.find((e) => e.study === n);
789
+ if (r) for (let i of n.fills) Fr(e, t, r, n, i);
790
+ }
791
+ let n = L[0];
792
+ if (n && n.scale.mode === "percent" && At.length) {
793
+ let t = Math.round(Fe(n.scale, 0)) + .5;
794
+ t > n.top && t < n.top + n.height && (e.save(), e.strokeStyle = o(R.textMuted, .6), e.setLineDash([2, 3]), e.beginPath(), e.moveTo(0, t), e.lineTo(F, t), e.stroke(), e.restore());
577
795
  }
796
+ Rr(e, t);
578
797
  }
579
- e.strokeStyle = o(F.axis), e.beginPath();
580
- for (let t of P.slice(1)) {
798
+ e.strokeStyle = o(R.axis), e.beginPath();
799
+ for (let t of L.slice(1)) {
581
800
  let n = Math.round(t.top) + .5;
582
- e.moveTo(0, n), e.lineTo(Ct, n);
583
- }
584
- e.moveTo(Math.round(M) + .5, 0), e.lineTo(Math.round(M) + .5, wt), e.moveTo(0, Math.round(N) + .5), e.lineTo(Ct, Math.round(N) + .5), e.stroke();
585
- }, Kn = (e, t, n, r, i, a) => {
586
- let o = a ? 32 : 18, s = w(Math.round(t - 9), 0, N - o);
587
- Wn(e, M + 1, s, St - 2, o, 3), e.fillStyle = r, e.fill(), e.fillStyle = i, e.textAlign = "left", e.textBaseline = "middle", e.font = X(F.fontSize, 500), e.fillText(n, M + 7, s + 9.5), a && (e.font = X(F.fontSize - 1), e.fillText(a, M + 7, s + 24));
588
- }, qn = (e) => P[0]?.scale.mode === "percent" ? ie(De(P[0].scale, e), K) : Y(e), Jn = (e) => {
589
- if (e.color) return J(e.color);
801
+ e.moveTo(0, n), e.lineTo(Lt, n);
802
+ }
803
+ e.moveTo(Math.round(F) + .5, 0), e.lineTo(Math.round(F) + .5, Rt), e.moveTo(0, Math.round(I) + .5), e.lineTo(Lt, Math.round(I) + .5), e.stroke();
804
+ }, Br = (e, t, n, r, i, a) => {
805
+ let o = a ? 32 : 18, s = w(Math.round(t - 9), 0, I - o);
806
+ Pr(e, F + 1, s, It - 2, o, 3), e.fillStyle = r, e.fill(), e.fillStyle = i, e.textAlign = "left", e.textBaseline = "middle", e.font = Z(R.fontSize, 500), e.fillText(n, F + 7, s + 9.5), a && (e.font = Z(R.fontSize - 1), e.fillText(a, F + 7, s + 24));
807
+ }, Vr = (e) => L[0]?.scale.mode === "percent" ? ce(Ne(L[0].scale, e), q) : X(e), Hr = (e) => {
808
+ if (e.color) return Y(e.color);
590
809
  let t = e.kind ?? "line";
591
- return J(t === "takeProfit" ? an() : t === "stopLoss" ? on() : t === "alert" ? Ze : t === "line" ? Qe : e.side === "sell" ? on() : an());
592
- }, Yn = (e) => Kt.get(e.id) ?? e.price, Xn = () => {
593
- if (!Dt || !P.length) return null;
594
- if (R !== null) {
595
- let e = R, t = e >= 0 && e < q() ? _n().close[e] : NaN;
810
+ return Y(t === "takeProfit" ? zn() : t === "stopLoss" ? Bn() : t === "alert" ? ot : t === "line" ? st : e.side === "sell" ? Bn() : zn());
811
+ }, Ur = (e) => bn.get(e.id) ?? e.price, Wr = () => {
812
+ if (!Vt || !L.length) return null;
813
+ if (V !== null) {
814
+ let e = V, t = e >= 0 && e < J() ? or().close[e] : NaN;
815
+ return {
816
+ index: e,
817
+ pane: L[0],
818
+ y: S(L[0].scale, t),
819
+ price: t
820
+ };
821
+ }
822
+ if (!B && En) {
823
+ let e = Math.round(ar(En.time)), t = En.price;
596
824
  return {
597
825
  index: e,
598
- pane: P[0],
599
- y: S(P[0].scale, t),
826
+ pane: L[0],
827
+ y: T(t) ? S(L[0].scale, t) : NaN,
600
828
  price: t
601
829
  };
602
830
  }
603
- if (!L || L.x > M || L.y > N) return null;
604
- let e = Dn(L.y);
831
+ if (!B || B.x > F || B.y > I) return null;
832
+ let e = gr(B.y);
605
833
  if (!e) return null;
606
- let t = Math.round(mn(L.x)), n = L.y, r = Oe(e.scale, n);
607
- if (e.id === C && E.crosshair !== "free" && t >= 0 && t < q() && Ut === "cursor") {
608
- let i = _n(), a = Infinity;
834
+ let t = Math.round(Jn(B.x)), n = B.y, r = Pe(e.scale, n);
835
+ if (e.id === C && D.crosshair !== "free" && t >= 0 && t < J() && un === "cursor") {
836
+ let i = or(), a = Infinity;
609
837
  for (let o of [
610
838
  i.open[t],
611
839
  i.high[t],
@@ -613,7 +841,7 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
613
841
  i.close[t]
614
842
  ]) {
615
843
  let t = S(e.scale, o);
616
- Math.abs(t - L.y) < a && (a = Math.abs(t - L.y), n = t, r = o);
844
+ Math.abs(t - B.y) < a && (a = Math.abs(t - B.y), n = t, r = o);
617
845
  }
618
846
  }
619
847
  return {
@@ -622,28 +850,79 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
622
850
  y: n,
623
851
  price: r
624
852
  };
625
- }, Zn = () => {
626
- let e = P[0];
627
- return e ? {
628
- x: Z,
629
- y: (t) => S(e.scale, t),
630
- index: gn,
631
- left: 0,
632
- right: M,
633
- top: e.top,
634
- bottom: e.top + e.height
635
- } : null;
636
- }, Qn = (e, t) => {
637
- let n = tn(), r = Math.abs(t), i = [], a = Math.floor(r / v), o = Math.floor(r % v / y), s = Math.floor(r % y / b);
638
- return a && i.push(be(n.days, { count: a })), o && i.push(be(n.hours, { count: o })), s && !a && i.push(be(n.minutes, { count: s })), `${be(tn().bars, { count: e })}, ${i.join(" ") || be(n.minutes, { count: 0 })}`;
639
- }, $n = (e, t, n) => {
640
- let r = P[0];
853
+ }, Gr = (e) => L.find((t) => t.id === (e ?? C)) ?? null, Kr = (e) => e ? {
854
+ x: Q,
855
+ y: (t) => S(e.scale, t),
856
+ index: ar,
857
+ left: 0,
858
+ right: F,
859
+ top: e.top,
860
+ bottom: e.top + e.height
861
+ } : null, qr = (e, t) => {
862
+ let n = In(), r = Math.abs(t), i = [], a = Math.floor(r / x), o = Math.floor(r % x / te), s = Math.floor(r % te / ne);
863
+ return a && i.push(Ee(n.days, { count: a })), o && i.push(Ee(n.hours, { count: o })), s && !a && i.push(Ee(n.minutes, { count: s })), `${Ee(In().bars, { count: e })}, ${i.join(" ") || Ee(n.minutes, { count: 0 })}`;
864
+ }, Jr = (e, t) => e.id === C ? X(t) : Or(e, t), Yr = (e) => {
865
+ let t = 10 ** -Hn();
866
+ return Number((Math.round(e / t) * t).toFixed(Hn()));
867
+ }, Xr = (e, t, n, r, i, a = "center") => {
868
+ e.font = Z(R.fontSize, 500);
869
+ let o = e.measureText(t).width + 16, s = w(a === "center" ? n - o / 2 : a === "right" ? n - o : n, 2, Math.max(2, F - o - 2));
870
+ return Pr(e, s, r, o, 22, 11), e.fillStyle = i, e.fill(), e.fillStyle = pt(i), e.textAlign = "center", e.textBaseline = "middle", e.fillText(t, s + o / 2, r + 11.5), o;
871
+ }, Zr = (e, t, n, r, i) => (Sn.push({
872
+ x: e,
873
+ y: t,
874
+ w: n,
875
+ h: r,
876
+ action: i
877
+ }), Cn === Sn.length - 1), Qr = (e, t) => {
878
+ let n = J(), r = n ? j.close[n - 1] : NaN, i = W ? [...U, W] : U;
879
+ if (!i.length) return;
880
+ let a = In(), o = {
881
+ target: a.target,
882
+ stop: a.stop,
883
+ riskReward: a.riskReward,
884
+ profit: a.profit,
885
+ long: a.long,
886
+ short: a.short
887
+ };
888
+ for (let n of L) {
889
+ let s = Kr(n);
890
+ if (!s) continue;
891
+ let c = i.filter((e) => (e.pane ?? C) === n.id);
892
+ if (c.length) {
893
+ e.save(), e.beginPath(), e.rect(0, n.top, F, n.height), e.clip();
894
+ for (let i of c) {
895
+ let c = b(e, i, s, {
896
+ ...t,
897
+ color: Y(i.color ?? st),
898
+ font: Z(R.fontSize, 500),
899
+ fontFamily: R.fontFamily,
900
+ formatPrice: (e) => Jr(n, e),
901
+ formatPercent: (e) => ce(e, q),
902
+ formatSpan: qr,
903
+ textOn: pt,
904
+ defaultText: a.text,
905
+ position: o,
906
+ last: n.id === C ? r : NaN,
907
+ fill: Ee
908
+ }, {
909
+ selected: i === W || i.id === dn,
910
+ hovered: i.id === fn
911
+ });
912
+ c && gn.set(i.id, c);
913
+ }
914
+ e.restore();
915
+ }
916
+ }
917
+ }, $r = (e, t, n) => {
918
+ let r = L[0];
641
919
  if (!r) return;
642
- let i = q(), a = o(F.text), s = o(F.textMuted), c = o(F.background), l = J(an()), u = J(on());
643
- if (e.save(), e.beginPath(), e.rect(0, r.top, M, r.height), e.clip(), t && E.highLowMarkers !== !1 && nn() !== "line" && nn() !== "area" && nn() !== "baseline") {
920
+ Sn = [];
921
+ let i = J(), a = o(R.text), s = o(R.textMuted), c = o(R.background), l = Y(zn()), u = Y(Bn()), d = In();
922
+ if (e.save(), e.beginPath(), e.rect(0, r.top, F, r.height), e.clip(), t && D.highLowMarkers !== !1 && Ln() !== "line" && Ln() !== "area" && Ln() !== "baseline") {
644
923
  let n = -Infinity, i = Infinity, a = -1, o = -1;
645
924
  for (let e = t.s0; e <= t.s1; e++) t.cols.high[e] > n && (n = t.cols.high[e], a = e), t.cols.low[e] < i && (i = t.cols.low[e], o = e);
646
- e.font = X(F.fontSize), e.fillStyle = s, e.strokeStyle = s, e.lineWidth = 1;
925
+ e.font = Z(R.fontSize), e.fillStyle = s, e.strokeStyle = s, e.lineWidth = 1;
647
926
  for (let [s, c, l] of [[
648
927
  a,
649
928
  n,
@@ -654,147 +933,185 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
654
933
  !0
655
934
  ]]) {
656
935
  if (s < 0 || !T(c)) continue;
657
- let n = Z(kn(t, s)), i = S(r.scale, c) + (l ? 9 : -9), a = n > M * .6, o = Y(c);
658
- e.textBaseline = "middle", e.textAlign = a ? "right" : "left", e.beginPath(), e.moveTo(n, i), e.lineTo(n + (a ? -14 : 14), i), e.stroke(), e.fillText(o, n + (a ? -17 : 17), i);
936
+ let n = Q(yr(t, s)), i = X(c), a = e.measureText(i).width, o = w(S(r.scale, c) + (l ? 9 : -9), r.top + 8, r.top + r.height - 8), u = Math.min(n, n + (n > F * .6 ? -17 - a : 17 + a));
937
+ for (let e of ti) u < e.right && o - 7 < e.bottom && o + 7 > e.top && e.bottom + 10 < r.top + r.height - 8 && (o = e.bottom + 10);
938
+ let d = F - 4 - (n + 17 + a), f = n - 17 - a - 4, p = (d < 0 || n > F * .6) && f >= Math.min(0, d), m = p ? -1 : 1;
939
+ e.textBaseline = "middle", e.textAlign = "left", e.beginPath(), e.moveTo(n, o), e.lineTo(n + m * 14, o), e.stroke();
940
+ let h = w(p ? n - 17 - a : n + 17, 2, F - a - 2);
941
+ e.fillText(i, h, o);
659
942
  }
660
943
  }
661
- if (t && E.markers?.length) {
944
+ if (t && D.markers?.length) {
662
945
  let n = /* @__PURE__ */ new Map();
663
- e.font = X(F.fontSize, 600), e.textAlign = "center";
664
- let a = E.markers.length > 400;
665
- for (let o of E.markers) {
666
- let s = gn(o.time);
946
+ e.font = Z(R.fontSize, 600), e.textAlign = "center";
947
+ let a = D.markers.length > 400;
948
+ for (let o of D.markers) {
949
+ let s = ar(o.time);
667
950
  if (s < 0 || s > i - 1) continue;
668
951
  let d = Math.floor(s / t.size);
669
952
  if (d < t.g0 || d > t.g1) continue;
670
- let f = Math.round(Z(kn(t, d))), p = o.side === "sell", m = o.color ? J(o.color) : p ? u : l, h = `${d}:${p}`, g = n.get(h) ?? 0;
953
+ let f = Math.round(Q(yr(t, d))), p = o.side === "sell", m = o.color ? Y(o.color) : p ? u : l, h = `${d}:${p}`, g = n.get(h) ?? 0;
671
954
  n.set(h, g + (o.text && !a ? 30 : 16));
672
955
  let _ = S(r.scale, p ? t.cols.high[d] : t.cols.low[d]), v = p ? -1 : 1, y = _ + v * (6 + g);
673
956
  e.fillStyle = m, e.beginPath(), e.moveTo(f, y), e.lineTo(f - 5.5, y + v * 7), e.lineTo(f - 2, y + v * 7), e.lineTo(f - 2, y + v * 12), e.lineTo(f + 2, y + v * 12), e.lineTo(f + 2, y + v * 7), e.lineTo(f + 5.5, y + v * 7), e.closePath(), e.fill(), o.text && !a && (e.textBaseline = p ? "bottom" : "top", e.fillText(o.text, f, y + v * 14)), o.price !== void 0 && T(o.price) && (e.beginPath(), e.arc(f, S(r.scale, o.price), 3, 0, Math.PI * 2), e.fill(), e.lineWidth = 1.5, e.strokeStyle = c, e.stroke());
674
957
  }
675
958
  }
676
- let d = Zn();
677
- if (d) {
678
- let t = (e) => ({
679
- color: J(e.color ?? Qe),
680
- text: a,
681
- background: c,
682
- up: l,
683
- down: u,
684
- font: X(F.fontSize, 500),
685
- formatPrice: Y,
686
- formatPercent: (e) => ie(e, K),
687
- formatSpan: Qn,
688
- textOn: et
689
- });
690
- for (let n of H) g(e, n, d, t(n), {
691
- selected: n.id === U,
692
- hovered: n.id === Wt
693
- });
694
- W && g(e, W, d, t(W), {
695
- selected: !0,
696
- hovered: !1
697
- });
698
- }
699
- let f = i ? O.close[i - 1] : NaN;
700
- for (let t of E.priceLines ?? []) {
701
- let n = Yn(t), i = Math.round(S(r.scale, n)) + .5;
959
+ e.restore(), Qr(e, {
960
+ text: a,
961
+ background: c,
962
+ up: l,
963
+ down: u
964
+ }), e.save(), e.beginPath(), e.rect(0, r.top, F, r.height), e.clip();
965
+ let f = i ? j.close[i - 1] : NaN;
966
+ for (let t of D.priceLines ?? []) {
967
+ let n = Ur(t), i = Math.round(S(r.scale, n)) + .5;
702
968
  if (!T(i) || i < r.top || i > r.top + r.height) continue;
703
- let a = Jn(t), o = t.kind ?? "line", s = t.lineStyle ?? (o === "position" || o === "line" ? "solid" : "dashed");
704
- e.save(), e.strokeStyle = a, e.lineWidth = qt === t.id || z?.kind === "order" && z.line.id === t.id ? 1.5 : 1, _(e, s, 1), e.beginPath(), e.moveTo(0, i), e.lineTo(M, i), e.stroke(), e.restore();
705
- let d = $e[o], p = t.title ?? (d ? tn()[d] : ""), m = [];
706
- if (p && m.push({
707
- text: p,
969
+ let a = Hr(t), o = t.kind ?? "line", s = t.lineStyle ?? (o === "position" || o === "line" ? "solid" : "dashed");
970
+ e.save(), e.strokeStyle = a, e.lineWidth = xn === t.id || H?.kind === "order" && H.line.id === t.id ? 1.5 : 1, ee(e, s, 1), e.beginPath(), e.moveTo(0, i), e.lineTo(F, i), e.stroke(), e.restore();
971
+ let p = ft[o], m = t.title ?? (p ? d[p] : ""), h = [];
972
+ if (m && h.push({
973
+ text: m,
708
974
  fill: a,
709
- color: et(a)
710
- }), t.quantity !== void 0 && t.quantity !== "" && m.push({
975
+ color: pt(a)
976
+ }), t.quantity !== void 0 && t.quantity !== "" && h.push({
711
977
  text: String(t.quantity),
712
978
  fill: c,
713
979
  color: a
714
980
  }), o === "position" && typeof t.quantity == "number" && T(f)) {
715
981
  let e = (f - n) * t.quantity * (t.side === "sell" ? -1 : 1), r = e >= 0 ? l : u;
716
- m.push({
717
- text: `${e >= 0 ? "+" : "−"}${Y(Math.abs(e))}`,
982
+ h.push({
983
+ text: `${e >= 0 ? "+" : "−"}${X(Math.abs(e))}`,
718
984
  fill: r,
719
- color: et(r)
985
+ color: pt(r)
720
986
  });
721
987
  }
722
- if (!m.length && !t.draggable) continue;
723
- e.font = X(F.fontSize, 600);
724
- let h = m.map((t) => e.measureText(t.text).width + 12), g = t.draggable ? 14 : 0, v = h.reduce((e, t) => e + t, 0) + g, y = Math.round(M - v - 56), b = Math.round(i - 9.5);
725
- if (Wn(e, y - .5, b - .5, v + 1, 19, 3), e.fillStyle = c, e.fill(), e.strokeStyle = a, e.lineWidth = 1, e.setLineDash([]), e.stroke(), g) {
988
+ if (t.cancellable && h.push({
989
+ text: "×",
990
+ fill: c,
991
+ color: a,
992
+ cancel: !0
993
+ }), !h.length && !t.draggable) continue;
994
+ e.font = Z(R.fontSize, 600);
995
+ let g = h.map((t) => t.cancel ? 20 : e.measureText(t.text).width + 12), _ = t.draggable ? 14 : 0, v = g.reduce((e, t) => e + t, 0) + _, y = Math.round(F - v - 56), b = Math.round(i - 9.5);
996
+ if (Pr(e, y - .5, b - .5, v + 1, 19, 3), e.fillStyle = c, e.fill(), e.strokeStyle = a, e.lineWidth = 1, e.setLineDash([]), e.stroke(), _) {
726
997
  e.fillStyle = a;
727
998
  for (let t = 0; t < 3; t++) e.fillRect(y + 4, b + 5 + t * 3.5, 6, 1.5);
728
- y += g;
999
+ y += _;
729
1000
  }
730
- e.textBaseline = "middle", e.textAlign = "center", m.forEach((t, n) => {
731
- t.fill !== c && (e.fillStyle = t.fill, e.fillRect(y, b, h[n], 18)), e.fillStyle = t.color, e.fillText(t.text, y + h[n] / 2, b + 9.5), y += h[n];
1001
+ e.textBaseline = "middle", e.textAlign = "center", h.forEach((n, r) => {
1002
+ let i = g[r] ?? 0, o = n.fill;
1003
+ n.cancel && (Zr(y, b, i, 18, () => K("orderCancel", {
1004
+ id: t.id,
1005
+ line: t
1006
+ })) && (o = a), e.fillStyle = a, e.fillRect(y, b + 3, 1, 12)), o !== c && (e.fillStyle = o, e.fillRect(y, b, i, 18)), e.fillStyle = n.cancel && o !== c ? pt(a) : n.color, n.cancel && (e.font = Z(R.fontSize + 3, 500)), e.fillText(n.text, y + i / 2, b + (n.cancel ? 9 : 9.5)), e.font = Z(R.fontSize, 600), y += i;
732
1007
  });
733
1008
  }
734
- let p = E.lastPriceLine !== !1 && i > 0, m = i > 0 && O.close[i - 1] >= O.open[i - 1] ? l : u;
1009
+ let p = D.lastPriceLine !== !1 && i > 0, m = i > 0 && j.close[i - 1] >= j.open[i - 1], h = Ln() === "line" || Ln() === "area" ? Y(st) : m ? l : u;
735
1010
  if (p) {
736
1011
  let t = Math.round(S(r.scale, f)) + .5;
737
- e.save(), e.strokeStyle = m, e.setLineDash([1, 2]), e.beginPath(), e.moveTo(0, t), e.lineTo(M, t), e.stroke(), e.restore();
1012
+ e.save(), e.strokeStyle = h, e.setLineDash([1, 2]), e.beginPath(), e.moveTo(0, t), e.lineTo(F, t), e.stroke(), e.restore();
738
1013
  }
739
1014
  e.restore();
740
- let h = [];
741
- for (let e of E.priceLines ?? []) h.push(S(r.scale, Yn(e)));
742
- for (let e of H) e.type === "horizontalLine" && e.points[0] && h.push(S(r.scale, e.points[0].price));
743
- p && h.push(S(r.scale, f) + (E.countdown ? 7 : 0)), e.font = X(F.fontSize), e.textAlign = "left", e.textBaseline = "middle", e.fillStyle = s;
744
- for (let t of P) for (let n of t.ticks) {
745
- let r = ke(t.scale, n);
1015
+ let g = [];
1016
+ for (let e of At) {
1017
+ let t = i - 1;
1018
+ for (; t >= 0 && !T(e.values[t]);) t--;
1019
+ if (t < 0) continue;
1020
+ let n = e.values[t], a = Cr(r.scale, n, Sr(e)), o = Fe(r.scale, a);
1021
+ !T(o) || o < r.top || o > r.top + r.height || g.push({
1022
+ y: o,
1023
+ text: r.scale.mode === "percent" ? ce(a, q) : X(n),
1024
+ color: Y(e.color)
1025
+ });
1026
+ }
1027
+ let _ = [];
1028
+ for (let e of D.priceLines ?? []) _.push({
1029
+ pane: C,
1030
+ y: S(r.scale, Ur(e))
1031
+ });
1032
+ for (let e of U) {
1033
+ let t = Gr(e.pane);
1034
+ t && e.type === "horizontalLine" && e.points[0] && _.push({
1035
+ pane: t.id,
1036
+ y: S(t.scale, e.points[0].price)
1037
+ });
1038
+ }
1039
+ for (let e of g) _.push({
1040
+ pane: C,
1041
+ y: e.y
1042
+ });
1043
+ p && _.push({
1044
+ pane: C,
1045
+ y: S(r.scale, f) + (D.countdown ? 7 : 0)
1046
+ }), e.font = Z(R.fontSize), e.textAlign = "left", e.textBaseline = "middle", e.fillStyle = s;
1047
+ for (let t of L) for (let n of t.ticks) {
1048
+ let r = Fe(t.scale, n);
746
1049
  if (r < t.top + 8 || r > t.top + t.height - 8) continue;
747
- let i = E.countdown ? 18 : 14;
748
- t.id === C && h.some((e) => Math.abs(e - r) < i) || e.fillText(Rn(t, n), M + 8, r);
1050
+ let i = D.countdown && t.id === C ? 18 : 14;
1051
+ _.some((e) => e.pane === t.id && Math.abs(e.y - r) < i) || e.fillText(Or(t, n), F + 8, r);
749
1052
  }
750
1053
  e.textAlign = "center";
751
- for (let t of n) e.font = X(F.fontSize, t.bold ? 600 : 400), e.fillStyle = t.bold ? a : s, e.fillText(t.text, t.x, N + Ge / 2);
752
- for (let t of E.priceLines ?? []) {
753
- let n = Yn(t), i = S(r.scale, n);
1054
+ for (let t of n) e.font = Z(R.fontSize, t.bold ? 600 : 400), e.fillStyle = t.bold ? a : s, e.fillText(t.text, t.x, I + et / 2);
1055
+ for (let t of D.priceLines ?? []) {
1056
+ let n = Ur(t), i = S(r.scale, n);
754
1057
  if (!T(i) || i < r.top || i > r.top + r.height) continue;
755
- let a = Jn(t);
756
- Kn(e, i, qn(n), a, et(a));
1058
+ let a = Hr(t);
1059
+ Br(e, i, Vr(n), a, pt(a));
757
1060
  }
758
- for (let t of H) {
759
- if (t.type !== "horizontalLine" || !t.points[0]) continue;
760
- let n = t.points[0].price, i = S(r.scale, n);
761
- if (i < r.top || i > r.top + r.height) continue;
762
- let a = J(t.color ?? Qe);
763
- Kn(e, i, qn(n), a, et(a));
1061
+ for (let t of U) {
1062
+ let n = Gr(t.pane);
1063
+ if (!n || t.type !== "horizontalLine" || !t.points[0]) continue;
1064
+ let r = t.points[0].price, i = S(n.scale, r);
1065
+ if (i < n.top || i > n.top + n.height) continue;
1066
+ let a = Y(t.color ?? st);
1067
+ Br(e, i, n.id === C ? Vr(r) : Jr(n, r), a, pt(a));
764
1068
  }
1069
+ for (let t of g) Br(e, t.y, t.text, t.color, pt(t.color));
765
1070
  if (p) {
766
1071
  let t;
767
- if (E.countdown) {
768
- let e = dn(), n = O.time[i - 1], r = n + e.ms;
1072
+ if (D.countdown) {
1073
+ let e = Gn(), n = j.time[i - 1], r = n + e.ms;
769
1074
  if (e.unit === "month") {
770
1075
  let t = new Date(n);
771
1076
  r = Date.UTC(t.getUTCFullYear(), t.getUTCMonth() + e.count, t.getUTCDate(), t.getUTCHours(), t.getUTCMinutes());
772
1077
  }
773
- t = te(r - Date.now(), tn());
1078
+ t = ae(r - Date.now(), d);
774
1079
  }
775
- Kn(e, S(r.scale, f), qn(f), m, et(m), t);
776
- }
777
- let v = Xn();
778
- if (v && t) {
779
- let t = Math.round(Z(v.index)) + .5;
780
- e.save(), e.strokeStyle = o(F.textMuted, .75), e.lineWidth = 1, e.setLineDash([4, 3]), e.beginPath(), t >= 0 && t <= M && (e.moveTo(t, 0), e.lineTo(t, N));
781
- let n = Math.round(v.y) + .5;
782
- T(n) && n >= v.pane.top && n <= v.pane.top + v.pane.height && (e.moveTo(0, n), e.lineTo(M, n)), e.stroke(), e.restore();
783
- let r = o(F.text);
784
- if (T(v.y) && v.y >= v.pane.top && v.y <= v.pane.top + v.pane.height) {
785
- let t = Ee(v.pane.scale, v.y), n = v.pane.id === C ? qn(Ce(v.pane.scale, t)) : Rn(v.pane, t);
786
- Kn(e, v.y, n, r, c);
1080
+ Br(e, S(r.scale, f), Vr(f), h, pt(h), t);
1081
+ }
1082
+ let v = r.top + r.height - 32;
1083
+ if (An) {
1084
+ let t = B && B.x <= F ? B.x : NaN;
1085
+ T(t) && (e.fillStyle = o(R.background, .62), e.fillRect(t, 0, F - t, I), e.strokeStyle = Y(st), e.lineWidth = 1.5, e.beginPath(), e.moveTo(Math.round(t) + .5, 0), e.lineTo(Math.round(t) + .5, I), e.stroke()), Xr(e, d.replayHint, F / 2, v, Y(st));
1086
+ } else G && i && Xr(e, Ee(d.replay, { time: oe(tr(j.time[i - 1]), Kn(), q) }), F / 2, v, Y(st));
1087
+ let y = Wr();
1088
+ if (y && t && !An) {
1089
+ let t = Math.round(Q(y.index)) + .5;
1090
+ e.save(), e.strokeStyle = o(R.textMuted, .75), e.lineWidth = 1, e.setLineDash([4, 3]), e.beginPath(), t >= 0 && t <= F && (e.moveTo(t, 0), e.lineTo(t, I));
1091
+ let n = Math.round(y.y) + .5;
1092
+ T(n) && n >= y.pane.top && n <= y.pane.top + y.pane.height && (e.moveTo(0, n), e.lineTo(F, n)), e.stroke(), e.restore();
1093
+ let a = o(R.text);
1094
+ if (T(y.y) && y.y >= y.pane.top && y.y <= y.pane.top + y.pane.height) {
1095
+ let t = Me(y.pane.scale, y.y), n = y.pane.id === C ? Vr(ke(y.pane.scale, t)) : Or(y.pane, t);
1096
+ Br(e, y.y, n, a, c);
1097
+ }
1098
+ if (t >= 0 && t <= F && i) {
1099
+ let n = oe(tr(Yn(y.index)), Kn(), q);
1100
+ e.font = Z(R.fontSize, 500);
1101
+ let r = e.measureText(n).width + 16, i = w(t - r / 2, 0, Lt - r);
1102
+ Pr(e, i, I + 3, r, 21, 3), e.fillStyle = a, e.fill(), e.fillStyle = c, e.textAlign = "center", e.textBaseline = "middle", e.fillText(n, i + r / 2, I + 14);
787
1103
  }
788
- if (t >= 0 && t <= M && i) {
789
- let n = ne(le(hn(v.index), E.utcOffset), fn(), K);
790
- e.font = X(F.fontSize, 500);
791
- let i = e.measureText(n).width + 16, a = w(t - i / 2, 0, Ct - i);
792
- Wn(e, a, N + 3, i, 21, 3), e.fillStyle = r, e.fill(), e.fillStyle = c, e.textAlign = "center", e.textBaseline = "middle", e.fillText(n, a + i / 2, N + 14);
1104
+ if (D.orderEntry && B && y.pane.id === C && T(y.y) && un === "cursor" && !H && i) {
1105
+ let t = F - 18 - 4, n = w(Math.round(y.y - 9), r.top + 1, r.top + r.height - 18 - 1), i = Yr(y.price), o = i < f ? "buy" : "sell", s = Zr(t, n, 18, 18, () => K("orderCreate", {
1106
+ price: i,
1107
+ side: o
1108
+ }));
1109
+ Pr(e, t, n, 18, 18, 4), e.fillStyle = s ? Y(st) : a, e.fill(), e.strokeStyle = s ? pt(Y(st)) : c, e.lineWidth = 1.5, e.beginPath(), e.moveTo(t + 5, n + 9), e.lineTo(t + 18 - 5, n + 9), e.moveTo(t + 9, n + 5), e.lineTo(t + 9, n + 18 - 5), e.stroke(), s && Xr(e, Ee(o === "buy" ? d.buyLimit : d.sellLimit, { price: X(i) }), t - 6, n - 2, o === "buy" ? l : u, "right");
793
1110
  }
794
1111
  }
795
- }, er = "", tr = /* @__PURE__ */ new Map(), nr = /* @__PURE__ */ new Map(), rr = (e) => {
796
- let t = nr.get(e);
797
- return t || (t = it("div", {
1112
+ }, ei = "", ti = [], ni = /* @__PURE__ */ new Map(), ri = /* @__PURE__ */ new Map(), ii = (e) => {
1113
+ let t = ri.get(e);
1114
+ return t || (t = gt("div", {
798
1115
  position: "absolute",
799
1116
  left: "8px",
800
1117
  display: "flex",
@@ -807,39 +1124,40 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
807
1124
  fontVariantNumeric: "tabular-nums",
808
1125
  whiteSpace: "nowrap",
809
1126
  pointerEvents: "none"
810
- }), ct.appendChild(t), nr.set(e, t)), t;
811
- }, ir = (e, t, n, r) => {
812
- let i = it("div", {
1127
+ }), bt.appendChild(t), ri.set(e, t)), t;
1128
+ }, ai = (e, t, n, r) => {
1129
+ let i = gt("div", {
813
1130
  display: "flex",
1131
+ flexWrap: "wrap",
814
1132
  alignItems: "center",
815
- gap: "6px",
1133
+ columnGap: "6px",
816
1134
  padding: "0 4px",
817
1135
  marginLeft: "-4px",
818
1136
  borderRadius: "4px",
819
1137
  background: "color-mix(in srgb, var(--surface-color, var(--background-color, #fff)) 86%, transparent)"
820
1138
  }), a = null;
821
- if (n) a = it("button", {
1139
+ if (n) a = gt("button", {
822
1140
  all: "unset",
823
1141
  cursor: "pointer",
824
1142
  pointerEvents: "auto",
825
1143
  color: "var(--text-color, #1f2937)",
826
1144
  fontWeight: "500",
827
1145
  borderRadius: "3px"
828
- }), a.type = "button", a.textContent = t, a.setAttribute("aria-label", be(tn().toggleIndicator, { name: t })), a.addEventListener("click", (e) => {
1146
+ }), a.type = "button", a.textContent = t, a.setAttribute("aria-label", Ee(In().toggleIndicator, { name: t })), a.addEventListener("click", (e) => {
829
1147
  e.stopPropagation();
830
- let t = !pn(n);
831
- gt.set(n.id, t), G("indicatorToggle", {
1148
+ let t = !qn(n);
1149
+ kt.set(n.id, t), K("indicatorToggle", {
832
1150
  id: n.id,
833
1151
  visible: t
834
- }), cr(), $();
1152
+ }), li(), $();
835
1153
  }), a.addEventListener("pointerdown", (e) => e.stopPropagation()), i.appendChild(a);
836
1154
  else if (t) {
837
- let e = it("span", { fontWeight: "600" });
1155
+ let e = gt("span", { fontWeight: "600" });
838
1156
  e.textContent = t, i.appendChild(e);
839
1157
  }
840
1158
  let o = [];
841
1159
  for (let e = 0; e < r; e++) {
842
- let e = it("span", {});
1160
+ let e = gt("span", {});
843
1161
  i.appendChild(e), o.push(e);
844
1162
  }
845
1163
  return e.appendChild(i), {
@@ -847,260 +1165,533 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
847
1165
  values: o,
848
1166
  button: a
849
1167
  };
850
- }, ar = () => {
851
- tr.clear();
852
- for (let e of nr.values()) e.remove();
853
- if (nr.clear(), E.legend === !1) return;
854
- let e = rr(C), t = [E.symbol, E.labels?.timeframe ?? (typeof E.timeframe == "string" ? E.timeframe : "")].filter(Boolean).join(" · ");
855
- tr.set("ohlc", ir(e, t, null, 1));
856
- for (let t of k) t.overlay && t.type === "volume" ? tr.set(t.id, ir(e, or(t), t, 1)) : t.overlay && tr.set(t.id, ir(e, or(t), t, t.outputs.length));
857
- for (let t of _t) tr.set(`compare:${t.id}`, ir(e, "", null, 1));
858
- for (let e of k) e.overlay || tr.set(e.id, ir(rr(e.id), or(e), e, e.outputs.length));
859
- }, or = (e) => e.type === "volume" ? tn().volume : e.title, sr = (e, t, n) => {
1168
+ }, oi = () => {
1169
+ ni.clear();
1170
+ for (let e of ri.values()) e.remove();
1171
+ if (ri.clear(), D.legend === !1) return;
1172
+ let e = ii(C), t = [D.symbol, D.labels?.timeframe ?? (typeof D.timeframe == "string" ? D.timeframe : "")].filter(Boolean).join(" · ");
1173
+ ni.set("ohlc", ai(e, t, null, 1));
1174
+ for (let t of M) {
1175
+ let n = t.mergeLegend ? 1 : t.outputs.length;
1176
+ t.overlay && t.type === "volume" ? ni.set(t.id, ai(e, si(t), t, 1)) : t.overlay && ni.set(t.id, ai(e, si(t), t, n));
1177
+ }
1178
+ for (let t of At) ni.set(`compare:${t.id}`, ai(e, "", null, 1));
1179
+ for (let e of M) e.overlay || ni.set(e.id, ai(ii(e.id), si(e), e, e.mergeLegend ? 1 : e.outputs.length));
1180
+ }, si = (e) => e.type === "volume" ? In().volume : e.titleKey ? `${In()[e.titleKey]} ${e.title}` : e.title, ci = (e, t, n) => {
860
1181
  if (!e) return;
861
1182
  e.textContent !== t && (e.textContent = t);
862
1183
  let r = n ?? "";
863
1184
  e.style.color !== r && (e.style.color = r);
864
- }, cr = () => {
1185
+ }, li = () => {
865
1186
  let e = [
866
- E.legend !== !1,
867
- E.symbol,
868
- E.timeframe,
869
- ...k.map((e) => `${e.id}:${or(e)}:${e.outputs.length}`),
870
- ..._t.map((e) => e.id),
871
- $t.toggleIndicator,
872
- E.labels?.timeframe
1187
+ D.legend !== !1,
1188
+ D.symbol,
1189
+ D.timeframe,
1190
+ ...M.map((e) => `${e.id}:${si(e)}:${e.outputs.length}`),
1191
+ ...At.map((e) => e.id),
1192
+ Pn.toggleIndicator,
1193
+ D.labels?.timeframe
873
1194
  ].join("|");
874
- if (e !== er && (er = e, ar()), E.legend === !1) return;
875
- for (let e of P) {
876
- let t = nr.get(e.id);
877
- t && (t.style.top = `${e.top + 6}px`);
878
- }
879
- let t = q(), n = Xn(), r = w(n && n.index >= 0 && n.index < t ? n.index : t - 1, 0, Math.max(0, t - 1)), i = tn(), a = tr.get("ohlc"), o = J(an()), s = J(on());
880
- if (a && t) {
881
- let e = _n(), t = e.open[r], n = e.close[r], c = r > 0 ? e.close[r - 1] : t, l = n - c, u = n >= t ? o : s, d = a.values[0], f = [
882
- [i.open, e.open[r]],
883
- [i.high, e.high[r]],
884
- [i.low, e.low[r]],
885
- [i.close, n]
886
- ].map(([e, t]) => `<span style="color:var(--text-secondary-color,#6b7280)">${lr(String(e))}</span><span style="color:${u}">${lr(Y(t))}</span>`).join(" "), p = c ? l / c * 100 : NaN, m = `${f} ${`${i.change ? `<span style="color:var(--text-secondary-color,#6b7280)">${lr(i.change)}</span>` : ""}<span style="color:${l >= 0 ? o : s}">${l >= 0 ? "+" : "−"}${lr(Y(Math.abs(l)))} (${lr(ie(p, K))})</span>`}${O.hasVolume ? ` <span style="color:var(--text-secondary-color,#6b7280)">${lr(i.volume)}</span>${lr(ae(O.volume[r], K))}` : ""}`;
1195
+ if (e !== ei && (ei = e, oi()), D.legend === !1) return;
1196
+ for (let e of L) {
1197
+ let t = ri.get(e.id);
1198
+ if (!t) continue;
1199
+ t.style.top = `${e.top + 6}px`;
1200
+ let n = `${Math.max(80, Math.floor(F - 14))}px`;
1201
+ t.style.maxWidth !== n && (t.style.maxWidth = n);
1202
+ }
1203
+ let t = ri.get(C);
1204
+ ti = t ? Array.from(t.children, (e) => ({
1205
+ right: t.offsetLeft + e.offsetLeft + e.offsetWidth,
1206
+ top: t.offsetTop + e.offsetTop,
1207
+ bottom: t.offsetTop + e.offsetTop + e.offsetHeight
1208
+ })) : [];
1209
+ let n = J(), r = Wr(), i = w(r && r.index >= 0 && r.index < n ? r.index : n - 1, 0, Math.max(0, n - 1)), a = In(), o = ni.get("ohlc"), s = Y(zn()), c = Y(Bn());
1210
+ if (o && n) {
1211
+ let e = or(), t = e.open[i], n = e.close[i], r = i > 0 ? e.close[i - 1] : t, l = n - r, u = n >= t ? s : c, d = o.values[0], f = [
1212
+ [a.open, e.open[i]],
1213
+ [a.high, e.high[i]],
1214
+ [a.low, e.low[i]],
1215
+ [a.close, n]
1216
+ ].map(([e, t]) => `<span style="color:var(--text-secondary-color,#6b7280)">${ui(String(e))}</span><span style="color:${u}">${ui(X(t))}</span>`).join(" "), p = r ? l / r * 100 : NaN, m = `${f} ${`${a.change ? `<span style="color:var(--text-secondary-color,#6b7280)">${ui(a.change)}</span>` : ""}<span style="color:${l >= 0 ? s : c}">${l >= 0 ? "+" : "−"}${ui(X(Math.abs(l)))} (${ui(ce(p, q))})</span>`}${j.hasVolume ? ` <span style="color:var(--text-secondary-color,#6b7280)">${ui(a.volume)}</span>${ui(le(j.volume[i], q))}` : ""}`;
887
1217
  d && d.dataset.html !== m && (d.innerHTML = m, d.dataset.html = m, d.style.display = "inline-flex", d.style.gap = "4px", d.style.flexWrap = "wrap");
888
1218
  }
889
- for (let e of k) {
890
- let n = tr.get(e.id);
891
- if (!n) continue;
892
- let i = pn(e);
893
- n.row.style.opacity = i ? "1" : "0.5", n.button && (n.button.setAttribute("aria-pressed", String(i)), n.button.style.textDecoration = i ? "none" : "line-through");
1219
+ for (let e of M) {
1220
+ let t = ni.get(e.id);
1221
+ if (!t) continue;
1222
+ let r = qn(e);
1223
+ t.row.style.opacity = r ? "1" : "0.5", t.button && (t.button.setAttribute("aria-pressed", String(r)), t.button.style.textDecoration = r ? "none" : "line-through");
894
1224
  let a = e.outputs.length;
895
- e.outputs.forEach((c, l) => {
896
- let u = n.values[e.type === "macd" ? (l + a - 1) % a : l];
897
- if (!i || !t) {
898
- sr(u, "");
1225
+ if (e.mergeLegend) {
1226
+ let a = e.outputs.find((e) => T(e.values[i]));
1227
+ ci(t.values[0], r && n && a ? kr(e, a.values[i]) : "", a ? Y(nr(a.color)) : void 0);
1228
+ continue;
1229
+ }
1230
+ e.outputs.forEach((o, l) => {
1231
+ let u = t.values[e.type === "macd" ? (l + a - 1) % a : l];
1232
+ if (!r || !n) {
1233
+ ci(u, "");
899
1234
  return;
900
1235
  }
901
- if (c.kind === "volume") {
902
- let e = O.close[r] >= O.open[r] ? o : s;
903
- sr(u, ae(O.volume[r], K), e);
1236
+ if (o.kind === "volume") {
1237
+ let e = j.close[i] >= j.open[i] ? s : c;
1238
+ ci(u, le(j.volume[i], q), e);
904
1239
  return;
905
1240
  }
906
- let d = c.values[r], f = c.color ? J(c.color) : void 0;
907
- c.kind === "histogram" && (f = d >= 0 ? o : s);
908
- let p = e.outputs.length > 1 && e.type !== "boll" ? `${c.label} ` : "";
909
- sr(u, `${p}${zn(e, d)}`, f);
1241
+ let d = i - o.shift, f = d >= 0 && d < n ? o.values[d] : NaN, p = o.color ? Y(nr(o.color)) : void 0;
1242
+ o.kind === "histogram" && (p = f >= 0 ? s : c), o.kind === "dots" && !o.color && (p = f <= j.close[i] ? s : c);
1243
+ let m = e.outputs.length > 1 && !e.plainLegend ? `${o.label} ` : "";
1244
+ ci(u, `${m}${kr(e, f)}`, p);
910
1245
  });
911
1246
  }
912
- for (let e of _t) {
913
- let t = tr.get(`compare:${e.id}`);
1247
+ for (let e of At) {
1248
+ let t = ni.get(`compare:${e.id}`);
914
1249
  if (!t) continue;
915
- let n = e.values[r], i = Nn(e), a = T(i) ? (n / i - 1) * 100 : NaN;
916
- sr(t.values[0], `${e.name} ${Y(n)} ${ie(a, K)}`, J(e.color));
1250
+ let n = e.values[i], r = Sr(e), a = T(r) ? (n / r - 1) * 100 : NaN;
1251
+ ci(t.values[0], `${e.name} ${X(n)} ${ce(a, q)}`, Y(e.color));
917
1252
  }
918
- }, lr = (e) => e.replace(/[&<>"]/g, (e) => e === "&" ? "&amp;" : e === "<" ? "&lt;" : e === ">" ? "&gt;" : "&quot;"), $ = () => {
919
- rt || Mt || (Mt = nt?.requestAnimationFrame ? nt.requestAnimationFrame(fr) : setTimeout(() => fr(Date.now()), 16));
920
- }, ur = (e) => {
1253
+ }, ui = (e) => e.replace(/[&<>"]/g, (e) => e === "&" ? "&amp;" : e === "<" ? "&lt;" : e === ">" ? "&gt;" : "&quot;"), $ = () => {
1254
+ ht || Kt || (Kt = mt?.requestAnimationFrame ? mt.requestAnimationFrame(pi) : setTimeout(() => pi(Date.now()), 16));
1255
+ }, di = (e) => {
921
1256
  let t = !1;
922
- if (V) {
923
- let n = Math.min(1, (e - V.start) / 320), r = 1 - (1 - n) ** 3;
924
- j = V.from + (V.to - V.from) * r, n >= 1 ? V = null : t = !0;
1257
+ if (nn) {
1258
+ let n = Math.min(1, (e - nn.start) / 320), r = 1 - (1 - n) ** 3;
1259
+ P = nn.from + (nn.to - nn.from) * r, n >= 1 ? nn = null : t = !0;
925
1260
  }
926
- if (B) {
927
- let n = Math.min(64, e - B.t);
928
- B.t = e;
929
- let r = j;
930
- j -= B.v * n / A, B.v *= Math.exp(-n / 320), Q(), Math.abs(B.v) < .02 || j === r ? B = null : t = !0;
1261
+ if (tn) {
1262
+ let n = Math.min(64, e - tn.t);
1263
+ tn.t = e;
1264
+ let r = P;
1265
+ P -= tn.v * n / N, tn.v *= Math.exp(-n / 320), _r(), Math.abs(tn.v) < .02 || P === r ? tn = null : t = !0;
931
1266
  }
932
1267
  return t;
933
- }, dr = (e) => {
934
- e.font = X(F.fontSize, 500);
1268
+ }, fi = (e) => {
1269
+ e.font = Z(R.fontSize, 500);
935
1270
  let t = 0;
936
- for (let n of P) for (let r of n.ticks) t = Math.max(t, e.measureText(Rn(n, r)).width);
937
- let n = q();
938
- n && (t = Math.max(t, e.measureText(qn(O.close[n - 1])).width), E.countdown && (t = Math.max(t, e.measureText("00:00:00").width)));
939
- let r = Math.max(Ke, Math.ceil(t + 18));
940
- (r > St || r < St - 12) && (St = r);
1271
+ for (let n of L) for (let r of n.ticks) t = Math.max(t, e.measureText(Or(n, r)).width);
1272
+ let n = J();
1273
+ n && (t = Math.max(t, e.measureText(Vr(j.close[n - 1])).width), D.countdown && (t = Math.max(t, e.measureText("00:00:00").width)));
1274
+ let r = Math.max(tt, Math.ceil(t + 18));
1275
+ (r > It || r < It - 12) && (It = r);
941
1276
  };
942
- function fr(e) {
943
- if (Mt = 0, rt || (Ct = D.clientWidth, wt = D.clientHeight, Ct <= 0 || wt <= 0)) return;
944
- let t = ur(typeof performance < "u" ? performance.now() : e ?? Date.now()), n = nt?.devicePixelRatio || 1;
945
- yn(), Un(ot, n), Un(st, n);
946
- let r = ot.getContext("2d"), i = st.getContext("2d");
947
- N = Math.max(1, wt - Ge);
1277
+ function pi(e) {
1278
+ if (Kt = 0, ht || (Lt = O.clientWidth, Rt = O.clientHeight, Lt <= 0 || Rt <= 0)) return;
1279
+ let t = di(typeof performance < "u" ? performance.now() : e ?? Date.now()), n = mt?.devicePixelRatio || 1;
1280
+ cr(), Nr(vt, n), Nr(yt, n);
1281
+ let r = vt.getContext("2d"), i = yt.getContext("2d");
1282
+ I = Math.max(1, Rt - et);
948
1283
  for (let e = 0; e < 2; e++) {
949
- M = Math.max(1, Ct - St), En(), Vt && _r(Vt), Q(), Dt = On(), In(Dt);
950
- for (let e of P) {
951
- let t = Te(e.scale, e.id === C ? 44 : 30), n = e.study?.range, r = e.study?.bands;
1284
+ F = Math.max(1, Lt - It), hr(), rn && vi(rn), _r(), Vt = vr(), Er(Vt);
1285
+ for (let e of L) {
1286
+ let t = je(e.scale, e.id === C ? 44 : 30), n = e.study?.range, r = e.study?.bands;
952
1287
  e.ticks = n && r ? [...r, (n[0] + n[1]) / 2].sort((e, t) => e - t) : t.scaled, e.step = t.step;
953
1288
  }
954
- let e = St;
955
- if (i && dr(i), St === e) break;
1289
+ let e = It;
1290
+ if (i && fi(i), It === e) break;
956
1291
  }
957
- let a = Dt;
958
- Vt = null;
959
- let o = i ? Ln(a, i) : [];
960
- Hn(a, n), r && (r.setTransform(n, 0, 0, n, 0, 0), r.clearRect(0, 0, Ct, wt), Gn(r, a, o)), i && (i.setTransform(n, 0, 0, n, 0, 0), i.clearRect(0, 0, Ct, wt), $n(i, a, o)), cr(), pr(), hr(), t && $();
1292
+ let a = Vt;
1293
+ rn = null;
1294
+ let o = i ? Dr(a, i) : [];
1295
+ Mr(a, n), r && (r.setTransform(n, 0, 0, n, 0, 0), r.clearRect(0, 0, Lt, Rt), zr(r, a, o)), i && (i.setTransform(n, 0, 0, n, 0, 0), i.clearRect(0, 0, Lt, Rt), $r(i, a, o)), li(), mi(), qi(), Bi(), gi(), B && !H && Li(B.x, B.y) !== Cn && (ra(B.x, B.y), $()), t && $();
961
1296
  }
962
- let pr = () => {
963
- let e = q(), t = P[0], n = e > 0 && t && Z(e - 1) > M + A * .5;
964
- if (lt.style.display = n ? "flex" : "none", n && t) {
965
- lt.style.left = `${M - 40}px`, lt.style.top = `${t.top + t.height - 40}px`;
966
- let e = tn().scrollToRealtime;
967
- lt.getAttribute("aria-label") !== e && (lt.setAttribute("aria-label", e), lt.title = e);
968
- }
969
- }, mr = () => {
970
- let e = j - M / A;
1297
+ let mi = () => {
1298
+ let e = J(), t = L[0], n = e > 0 && t && Q(e - 1) > F + N * .5;
1299
+ if (xt.style.display = n ? "flex" : "none", n && t) {
1300
+ xt.style.left = `${F - 40}px`, xt.style.top = `${t.top + t.height - 40}px`;
1301
+ let e = In().scrollToRealtime;
1302
+ xt.getAttribute("aria-label") !== e && (xt.setAttribute("aria-label", e), xt.title = e);
1303
+ }
1304
+ }, hi = () => {
1305
+ let e = P - F / N;
971
1306
  return {
972
1307
  from: e,
973
- to: j,
974
- fromTime: hn(e),
975
- toTime: hn(j)
1308
+ to: P,
1309
+ fromTime: Yn(e),
1310
+ toTime: Yn(P)
976
1311
  };
977
- }, hr = () => {
978
- let e = q();
1312
+ }, gi = () => {
1313
+ let e = J();
979
1314
  if (!e) return;
980
- let t = mr();
981
- (!Jt || Math.abs(Jt.from - t.from) > 1e-6 || Math.abs(Jt.to - t.to) > 1e-6) && (Jt = t, G("visibleRangeChange", t)), t.from < 10 && Xt !== O.time[0] && (Xt = O.time[0], G("historyRequest", {
982
- firstTime: O.time[0],
1315
+ let t = hi();
1316
+ (!wn || Math.abs(wn.from - t.from) > 1e-6 || Math.abs(wn.to - t.to) > 1e-6) && (wn = t, Tn || K("visibleRangeChange", t)), Tn = !1, t.from < 10 && On !== j.time[0] && (On = j.time[0], K("historyRequest", {
1317
+ firstTime: j.time[0],
983
1318
  count: e
984
1319
  }));
985
- let n = Xn(), r = n ? `${n.index}|${n.price}|${n.pane.id}` : "";
986
- if (r !== Yt) {
987
- if (Yt = r, !n) G("crosshairMove", null);
1320
+ let n = Wr(), r = n && (B || V !== null) ? n : null, i = r ? `${r.index}|${r.price}|${r.pane.id}` : "";
1321
+ if (i !== Dn) {
1322
+ if (Dn = i, !r) K("crosshairMove", null);
988
1323
  else {
989
1324
  let t = {
990
- index: n.index,
991
- time: hn(n.index),
992
- bar: n.index >= 0 && n.index < e ? Be(O, n.index) : null,
993
- price: n.price,
994
- pane: n.pane.id,
995
- x: Z(n.index),
996
- y: n.y
1325
+ index: r.index,
1326
+ time: Yn(r.index),
1327
+ bar: r.index >= 0 && r.index < e ? Ye(j, r.index) : null,
1328
+ price: r.price,
1329
+ pane: r.pane.id,
1330
+ x: Q(r.index),
1331
+ y: r.y
997
1332
  };
998
- G("crosshairMove", t);
1333
+ K("crosshairMove", t);
999
1334
  }
1000
1335
  }
1001
- }, gr = (e) => {
1002
- let t = D.getBoundingClientRect();
1336
+ }, _i = (e) => {
1337
+ let t = O.getBoundingClientRect();
1003
1338
  return {
1004
1339
  x: e.clientX - t.left,
1005
1340
  y: e.clientY - t.top
1006
1341
  };
1007
- }, _r = (e) => {
1008
- A = M / (e.to - e.from), j = e.to, Q();
1009
- }, vr = (e, t) => {
1010
- let n = q();
1011
- n && Cn() && (e = Math.min(M, Z(n - 1)));
1012
- let r = mn(e);
1013
- A *= t, Q(), j = r + (M - e) / A, Q(), B = null, V = null, $();
1014
- }, yr = (e, t) => {
1015
- let n = Math.round(mn(e));
1342
+ }, vi = (e) => {
1343
+ N = F / (e.to - e.from), P = e.to, _r();
1344
+ }, yi = (e, t) => {
1345
+ let n = J();
1346
+ n && fr() && (e = Math.min(F, Q(n - 1)));
1347
+ let r = Jn(e);
1348
+ N *= t, _r(), P = r + (F - e) / N, _r(), tn = null, nn = null, $();
1349
+ }, bi = (e, t, n) => {
1350
+ let r = Math.round(Jn(e));
1016
1351
  return {
1017
- time: hn(n),
1018
- price: Oe(P[0].scale, t)
1352
+ time: Yn(r),
1353
+ price: Pe(n.scale, t)
1019
1354
  };
1020
- }, br = (e, t) => {
1021
- e !== Ut && (Ut = e, W = null, t && G("drawingToolChange", e), $());
1022
- }, xr = (e) => {
1023
- e !== U && (U = e, G("drawingSelect", e), $());
1024
- }, Sr = (e) => {
1025
- H = e, Ht = e, G("drawingsChange", e), $();
1026
- }, Cr = () => {
1355
+ }, xi = (e, t) => {
1356
+ e !== un && (un = e, W = null, pn = 0, t && K("drawingToolChange", e), $());
1357
+ }, Si = (e) => {
1358
+ e !== dn && (dn = e, yn = !1, K("drawingSelect", e), $());
1359
+ }, Ci = () => ({
1360
+ canUndo: sn.length > 0,
1361
+ canRedo: cn.length > 0
1362
+ }), wi = () => {
1363
+ let e = Ci(), t = `${e.canUndo}|${e.canRedo}`;
1364
+ t !== ln && (ln = t, K("undoChange", e));
1365
+ }, Ti = (e, t = !0) => {
1366
+ e !== on && (sn.push(on), sn.length > ct && sn.shift(), cn.length = 0, on = e), U = e, t && (an = e, K("drawingsChange", e)), dn && !e.some((e) => e.id === dn) && Si(null), wi(), $();
1367
+ }, Ei = (e) => {
1368
+ on = e, U = e, an = e, W = null, dn && !e.some((e) => e.id === dn) && Si(null), K("drawingsChange", e), wi(), $();
1369
+ }, Di = () => {
1370
+ let e = sn.pop();
1371
+ e && (_n && Hi(!1), cn.push(on), Ei(e));
1372
+ }, Oi = () => {
1373
+ let e = cn.pop();
1374
+ e && (sn.push(on), Ei(e));
1375
+ }, ki = (e, t) => {
1376
+ U.some((t) => t.id === e) && Ti(U.map((n) => n.id === e ? {
1377
+ ...n,
1378
+ ...t,
1379
+ id: n.id,
1380
+ type: n.type
1381
+ } : n));
1382
+ }, Ai = (e) => {
1383
+ U.some((t) => t.id === e) && (dn === e && Si(null), Ti(U.filter((t) => t.id !== e)));
1384
+ }, ji = (e, t, n) => {
1385
+ let r = S(t.scale, e.price), i = Math.max(12, t.height * .07), a = Pe(t.scale, r + (n ? -2 : 2) * i), o = Pe(t.scale, r + (n ? 1 : -1) * i), s = Math.max(6, Math.round(F * .16 / N)), c = Yn(Math.round(ar(e.time)) + s);
1386
+ return [
1387
+ e,
1388
+ {
1389
+ time: c,
1390
+ price: Yr(a)
1391
+ },
1392
+ {
1393
+ time: c,
1394
+ price: Yr(o)
1395
+ }
1396
+ ];
1397
+ }, Mi = () => {
1027
1398
  if (!W) return;
1028
1399
  let e = W;
1029
- W = null, Sr([...H, e]), xr(e.id), E.keepDrawingMode || br("cursor", !0);
1030
- }, wr = (e, t) => {
1031
- let n = P[0];
1032
- if (!n || e > M) return null;
1033
- for (let e of E.priceLines ?? []) if (e.draggable && Math.abs(S(n.scale, Yn(e)) - t) <= 5) return e;
1400
+ W = null, pn = 0, Ti([...U, e]), Si(e.id), D.keepDrawingMode || xi("cursor", !0), e.type === "text" && Vi(e.id, !0);
1401
+ }, Ni = () => {
1402
+ if (!W) return;
1403
+ if (pn--, pn <= 0) {
1404
+ Mi();
1405
+ return;
1406
+ }
1407
+ let e = W.points[W.points.length - 1];
1408
+ e && (W = {
1409
+ ...W,
1410
+ points: [...W.points, e]
1411
+ });
1412
+ }, Pi = (e, t) => {
1413
+ let n = Gr(mn);
1414
+ !W || !n || pn <= 0 || (W = {
1415
+ ...W,
1416
+ points: [...W.points.slice(0, -1), bi(e, t, n)]
1417
+ });
1418
+ }, Fi = (e, t) => {
1419
+ let n = L[0];
1420
+ if (!n || e > F) return null;
1421
+ for (let e of D.priceLines ?? []) if (e.draggable && Math.abs(S(n.scale, Ur(e)) - t) <= 5) return e;
1034
1422
  return null;
1035
- }, Tr = (e, t) => {
1036
- let n = Zn();
1037
- if (!n || t < n.top || t > n.bottom || e > M) return null;
1038
- for (let r = H.length - 1; r >= 0; r--) {
1039
- let i = h(H[r], n, {
1423
+ }, Ii = (e, t) => {
1424
+ if (e > F) return null;
1425
+ let n = gr(t), r = Kr(n);
1426
+ if (!n || !r) return null;
1427
+ for (let i = U.length - 1; i >= 0; i--) {
1428
+ let a = U[i];
1429
+ if (!a || (a.pane ?? C) !== n.id) continue;
1430
+ let o = g(a, r, {
1040
1431
  x: e,
1041
1432
  y: t
1042
- });
1043
- if (i) return {
1044
- drawing: H[r],
1045
- hit: i
1433
+ }, 6, gn.get(a.id));
1434
+ if (o) return {
1435
+ drawing: a,
1436
+ hit: o,
1437
+ pane: n
1046
1438
  };
1047
1439
  }
1048
1440
  return null;
1049
- }, Er = (e) => {
1050
- for (let t = 1; t < P.length; t++) if (Math.abs(P[t].top - e) <= 4) return t;
1441
+ }, Li = (e, t) => Sn.findIndex((n) => e >= n.x && e <= n.x + n.w && t >= n.y && t <= n.y + n.h), Ri = (e) => {
1442
+ for (let t = 1; t < L.length; t++) if (Math.abs(L[t].top - e) <= 4) return t;
1051
1443
  return -1;
1052
- }, Dr = (e, t) => {
1444
+ }, zi = () => {
1445
+ A.style.height = "auto", A.style.height = `${Math.max(28, A.scrollHeight + 2)}px`;
1446
+ }, Bi = () => {
1447
+ if (!_n) return;
1448
+ let e = _n.id, t = U.find((t) => t.id === e), n = t ? Gr(t.pane) : null, r = t?.points[0];
1449
+ if (!t || !n || !r) return;
1450
+ let i = Q(ar(r.time)), a = S(n.scale, r.price);
1451
+ A.style.left = `${w(i, 2, Math.max(2, F - 160))}px`, A.style.top = `${w(a, 2, Math.max(2, I - 40))}px`;
1452
+ };
1453
+ function Vi(e, t) {
1454
+ let n = U.find((t) => t.id === e);
1455
+ n && !n.locked && (_n = {
1456
+ id: e,
1457
+ created: t
1458
+ }, A.value = t ? "" : n.text ?? "", A.placeholder = In().text, A.setAttribute("aria-label", In().editText), A.style.display = "block", Bi(), zi(), A.focus(), A.select(), $());
1459
+ }
1460
+ function Hi(e) {
1461
+ if (!_n) return;
1462
+ let { id: t, created: n } = _n;
1463
+ _n = null, A.style.display = "none";
1464
+ let r = A.value.replace(/\s+$/, ""), i = U.find((e) => e.id === t);
1465
+ if (i && n && (!e || !r)) {
1466
+ let e = sn.pop();
1467
+ Ei(e ?? U.filter((e) => e.id !== t));
1468
+ } else if (i && e && r !== (i.text ?? "")) {
1469
+ if (n) {
1470
+ let e = U.map((e) => e.id === t ? {
1471
+ ...e,
1472
+ text: r
1473
+ } : e);
1474
+ on = e, U = e, an = e, K("drawingsChange", e);
1475
+ } else ki(t, { text: r });
1476
+ }
1477
+ (E.activeElement === A || E.activeElement === E.body) && O.focus(), $();
1478
+ }
1479
+ A.addEventListener("keydown", (e) => {
1480
+ e.stopPropagation(), e.key === "Enter" && !e.shiftKey ? (e.preventDefault(), Hi(!0)) : e.key === "Escape" && (e.preventDefault(), Hi(!1));
1481
+ }), A.addEventListener("input", zi), A.addEventListener("blur", () => Hi(!0)), A.addEventListener("pointerdown", (e) => e.stopPropagation()), A.addEventListener("dblclick", (e) => e.stopPropagation());
1482
+ let Ui = (e, t = "", n = 1.5) => `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="${n}" stroke-linecap="round" stroke-linejoin="round"${t ? ` stroke-dasharray="${t}"` : ""} aria-hidden="true"><path d="${e}"/></svg>`, Wi = (e, t, n, r) => {
1483
+ let i = E.createElement("button");
1484
+ return i.type = "button", i.setAttribute("aria-label", e), i.title = e, r !== void 0 && i.setAttribute("aria-pressed", String(r)), i.innerHTML = t, i.addEventListener("click", (e) => {
1485
+ e.stopPropagation(), n();
1486
+ }), i;
1487
+ }, Gi = () => {
1488
+ let e = E.createElement("span");
1489
+ return e.className = "sep", e;
1490
+ }, Ki = (e) => {
1491
+ k.textContent = "";
1492
+ let t = In();
1493
+ k.setAttribute("aria-label", t.lineStyle);
1494
+ let n = e.id, r = [];
1495
+ if (!e.locked) {
1496
+ let i = Y(e.color ?? st), a = Wi(t.color, `<span style="display:block;width:14px;height:14px;border-radius:50%;background:${i};box-shadow:inset 0 0 0 1px rgba(127,127,127,.35)"></span>`, () => {
1497
+ yn = !yn, vn = "", qi();
1498
+ });
1499
+ a.setAttribute("aria-expanded", String(yn)), r.push(a);
1500
+ let o = e.lineWidth ?? 1.5, s = [
1501
+ 1,
1502
+ 2,
1503
+ 3,
1504
+ 4
1505
+ ];
1506
+ r.push(Wi(`${t.lineWidth}: ${o}px`, `${Ui("M2 8h12", "", Math.min(4, o))}<span style="font-size:11px;margin-left:3px">${o}</span>`, () => ki(n, { lineWidth: s.find((e) => e > o) ?? s[0] })));
1507
+ let c = e.lineStyle ?? "solid";
1508
+ r.push(Wi(t.lineStyle, Ui("M2 8h12", c === "dashed" ? "3.5 2.5" : c === "dotted" ? "0.1 3" : "", c === "dotted" ? 2.2 : 1.6), () => ki(n, { lineStyle: ut[(ut.indexOf(c) + 1) % ut.length] }))), _(e.type) && r.push(Wi(t.fill, "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"9\" rx=\"1.5\" fill=\"currentColor\" fill-opacity=\".3\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg>", () => ki(n, { fill: e.fill === !1 }), e.fill !== !1)), e.type === "text" && r.push(Wi(t.editText, Ui("M3 13h3l7-7-3-3-7 7zM9 4l3 3"), () => Vi(n, !1))), r.push(Gi());
1509
+ }
1510
+ if (r.push(Wi(t.lock, e.locked ? Ui("M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 4 0v2") : Ui("M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 3.8-.9"), () => ki(n, { locked: !e.locked }), !!e.locked)), !e.locked) {
1511
+ let e = Wi(t.remove, Ui("M3 4.5h10M6.5 4.5V3h3v1.5M4.5 4.5l.7 8.5h5.6l.7-8.5"), () => Ai(n));
1512
+ e.style.color = "var(--danger-color, #f23645)", r.push(e);
1513
+ }
1514
+ if (k.append(...r), yn && !e.locked) {
1515
+ let r = gt("div", {
1516
+ position: "absolute",
1517
+ left: "0",
1518
+ top: "calc(100% + 4px)",
1519
+ display: "flex",
1520
+ gap: "2px",
1521
+ padding: "4px",
1522
+ borderRadius: "8px",
1523
+ border: "1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 85%, transparent)",
1524
+ background: "var(--surface-elevated-color, var(--surface-color, #fff))",
1525
+ boxShadow: "0 8px 24px -8px rgba(15, 23, 42, 0.35)"
1526
+ });
1527
+ for (let i of lt) {
1528
+ let a = Wi(`${t.color} ${i}`, `<span style="display:block;width:16px;height:16px;border-radius:50%;background:${i}"></span>`, () => {
1529
+ yn = !1, ki(n, { color: i });
1530
+ }, (e.color ?? "").toLowerCase() === i);
1531
+ r.appendChild(a);
1532
+ }
1533
+ k.appendChild(r);
1534
+ }
1535
+ };
1536
+ function qi() {
1537
+ let e = dn ? U.find((e) => e.id === dn) : void 0, t = e ? Gr(e.pane) : null, n = Kr(t), r = H?.kind === "drawing" && H.moved;
1538
+ if (!e || !t || !n || D.drawingToolbar === !1 || _n || r || W) {
1539
+ k.style.display = "none", vn = "", yn = !1;
1540
+ return;
1541
+ }
1542
+ let i = [
1543
+ e.id,
1544
+ e.color,
1545
+ e.lineWidth,
1546
+ e.lineStyle,
1547
+ e.fill,
1548
+ e.locked,
1549
+ yn,
1550
+ q,
1551
+ Ut
1552
+ ].join("|");
1553
+ i !== vn && (vn = i, Ki(e)), k.style.display = "flex";
1554
+ let a = h(e, n, gn.get(e.id)), o = gn.get(e.id);
1555
+ e.type === "text" && o && a.push({
1556
+ x: o.x + o.w,
1557
+ y: o.y + o.h
1558
+ });
1559
+ let s = Infinity, c = -Infinity, l = Infinity, u = -Infinity;
1560
+ for (let e of a) s = Math.min(s, w(e.x, 0, F)), c = Math.max(c, w(e.x, 0, F)), l = Math.min(l, w(e.y, t.top, t.top + t.height)), u = Math.max(u, w(e.y, t.top, t.top + t.height));
1561
+ e.type === "horizontalLine" && (s = F * .35, c = F * .65);
1562
+ let d = k.offsetWidth || 200, f = k.offsetHeight || 34, p = w((s + c) / 2 - d / 2, 4, Math.max(4, F - d - 4)), m = l - f - 14;
1563
+ m < 4 && (m = u + 32), k.style.left = `${Math.round(p)}px`, k.style.top = `${Math.round(w(m, 4, Math.max(4, I - f - 4)))}px`;
1564
+ }
1565
+ k.addEventListener("pointerdown", (e) => e.stopPropagation()), k.addEventListener("dblclick", (e) => e.stopPropagation()), k.addEventListener("pointermove", (e) => e.stopPropagation()), k.addEventListener("pointerenter", () => {
1566
+ B = null, fn = null, O.style.cursor = "default", $();
1567
+ });
1568
+ let Ji = () => ({
1569
+ active: !!G,
1570
+ picking: An,
1571
+ playing: !!G?.playing,
1572
+ speed: G?.speed ?? jn,
1573
+ index: J(),
1574
+ total: G ? G.source.length : J(),
1575
+ time: J() ? j.time[J() - 1] : NaN
1576
+ }), Yi = () => K("replayChange", Ji()), Xi = (e, t) => ({
1577
+ time: e.time.subarray(0, t),
1578
+ open: e.open.subarray(0, t),
1579
+ high: e.high.subarray(0, t),
1580
+ low: e.low.subarray(0, t),
1581
+ close: e.close.subarray(0, t),
1582
+ volume: e.volume.subarray(0, t)
1583
+ }), Zi = (e, t) => {
1584
+ let n = e.hasVolume;
1585
+ Xe(j, Xi(e, t)), j.hasVolume = n, wt = ze(), Dt = ze(), Et = 0, On = NaN, lr(0);
1586
+ }, Qi = () => {
1587
+ G?.timer && clearInterval(G.timer), G && (G.timer = null, G.playing = !1);
1588
+ }, $i = (e) => {
1589
+ if (An = !1, !G) {
1590
+ if (!J()) return;
1591
+ let e = Ve();
1592
+ Xe(e, Xi(j, J())), e.hasVolume = j.hasVolume, G = {
1593
+ source: e,
1594
+ playing: !1,
1595
+ speed: jn,
1596
+ timer: null
1597
+ };
1598
+ }
1599
+ Qi();
1600
+ let t = w(Math.round(e) + 1, 1, G.source.length);
1601
+ Zi(G.source, t), P = t - 1 + (D.rightOffset ?? 8);
1602
+ for (let e of zt.values()) e.auto = !0;
1603
+ Yi();
1604
+ }, ea = (e) => {
1605
+ if (!G) return;
1606
+ let t = G.source, n = J(), r = fr(), i = -1;
1607
+ for (let n = 0; n < e && J() < t.length; n++) {
1608
+ let e = Ze(j, Ye(t, J()));
1609
+ i < 0 && (i = e);
1610
+ }
1611
+ j.hasVolume = t.hasVolume, i >= 0 && (r && (P += J() - n), lr(i)), J() >= t.length && Qi(), Yi();
1612
+ }, ta = (e) => {
1613
+ if (!G) return;
1614
+ if (e !== void 0 && e > 0 && (G.speed = jn = e), Qi(), J() >= G.source.length) {
1615
+ Yi();
1616
+ return;
1617
+ }
1618
+ let t = Math.max(16, 1e3 / G.speed), n = Math.max(1, Math.round(G.speed * t / 1e3));
1619
+ G.playing = !0, G.timer = setInterval(() => ea(n), t), Yi();
1620
+ }, na = (e) => {
1621
+ let t = An;
1622
+ if (An = !1, !G) {
1623
+ t && (Yi(), $());
1624
+ return;
1625
+ }
1626
+ Qi();
1627
+ let n = G.source;
1628
+ G = null, e && Zi(n, n.length), Yi();
1629
+ }, ra = (e, t) => {
1053
1630
  let n = "crosshair";
1054
- qt = null;
1055
- let r = null;
1056
- if (z?.kind === "pan" && z.moved) n = "grabbing";
1057
- else if (Er(t) > 0) n = "row-resize";
1058
- else if (e > M && t < N) n = "ns-resize";
1059
- else if (t > N) n = "ew-resize";
1060
- else if (Ut === "cursor") {
1061
- let i = wr(e, t);
1062
- if (i) n = "ns-resize", qt = i.id;
1631
+ xn = null;
1632
+ let r = null, i = H ? -1 : Li(e, t);
1633
+ if (i !== Cn && (Cn = i), H?.kind === "pan" && H.moved) n = "grabbing";
1634
+ else if (i >= 0) n = "pointer";
1635
+ else if (An && e <= F && t <= I) n = "pointer";
1636
+ else if (Ri(t) > 0) n = "row-resize";
1637
+ else if (e > F && t < I) n = "ns-resize";
1638
+ else if (t > I) n = "ew-resize";
1639
+ else if (un === "cursor") {
1640
+ let i = Fi(e, t);
1641
+ if (i) n = "ns-resize", xn = i.id;
1063
1642
  else {
1064
- let i = Tr(e, t);
1643
+ let i = Ii(e, t);
1065
1644
  i && (r = i.drawing.id, n = i.drawing.locked ? "pointer" : i.hit.part === "handle" ? "move" : "pointer");
1066
1645
  }
1067
1646
  }
1068
- r !== Wt && (Wt = r), D.style.cursor !== n && (D.style.cursor = n);
1069
- }, Or = (e) => {
1647
+ r !== fn && (fn = r), O.style.cursor !== n && (O.style.cursor = n);
1648
+ }, ia = (e) => {
1070
1649
  if (e.button !== 0 && e.pointerType === "mouse") return;
1071
- let { x: t, y: n } = gr(e);
1072
- if (L = {
1650
+ let { x: t, y: n } = _i(e);
1651
+ if (B = {
1073
1652
  x: t,
1074
1653
  y: n
1075
- }, R = null, B = null, V = null, e.pointerType === "touch" && (zt.set(e.pointerId, {
1654
+ }, V = null, tn = null, nn = null, _n && Hi(!0), yn && (yn = !1, $()), e.pointerType === "touch" && ($t.set(e.pointerId, {
1076
1655
  x: t,
1077
1656
  y: n
1078
- }), zt.size === 2)) {
1079
- let [e, t] = [...zt.values()];
1080
- Bt = {
1657
+ }), $t.size === 2)) {
1658
+ let [e, t] = [...$t.values()];
1659
+ en = {
1081
1660
  distance: Math.hypot(e.x - t.x, e.y - t.y),
1082
- spacing: A
1083
- }, z = null;
1661
+ spacing: N
1662
+ }, H = null;
1084
1663
  return;
1085
1664
  }
1086
1665
  try {
1087
- D.setPointerCapture(e.pointerId);
1666
+ O.setPointerCapture(e.pointerId);
1088
1667
  } catch {}
1089
- let r = Er(n);
1090
- if (r > 0) {
1091
- let e = P[r - 1], t = P[r];
1092
- z = {
1668
+ let r = Li(t, n), i = Sn[r];
1669
+ if (i) {
1670
+ H = {
1671
+ kind: "button",
1672
+ action: i.action
1673
+ };
1674
+ return;
1675
+ }
1676
+ if (An && t <= F && n <= I) {
1677
+ $i(Math.min(J() - 1, Math.round(Jn(t))));
1678
+ return;
1679
+ }
1680
+ let a = Ri(n);
1681
+ if (a > 0) {
1682
+ let e = L[a - 1], t = L[a];
1683
+ H = {
1093
1684
  kind: "separator",
1094
- index: r,
1685
+ index: a,
1095
1686
  y: n,
1096
1687
  above: e.height,
1097
1688
  below: t.height
1098
1689
  };
1099
1690
  return;
1100
1691
  }
1101
- if (t > M && n < N) {
1102
- let e = Dn(n);
1103
- e && (z = {
1692
+ if (t > F && n < I) {
1693
+ let e = gr(n);
1694
+ e && (H = {
1104
1695
  kind: "axisY",
1105
1696
  pane: e,
1106
1697
  y: n,
@@ -1109,56 +1700,58 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
1109
1700
  });
1110
1701
  return;
1111
1702
  }
1112
- if (n > N) {
1113
- z = {
1703
+ if (n > I) {
1704
+ H = {
1114
1705
  kind: "axisX",
1115
1706
  x: t,
1116
- spacing: A
1707
+ spacing: N
1117
1708
  };
1118
1709
  return;
1119
1710
  }
1120
- let i = Dn(n);
1121
- if (Ut !== "cursor" && i?.id === C && q()) {
1122
- let e = yr(t, n);
1711
+ let o = gr(n);
1712
+ if (un !== "cursor" && o && J()) {
1123
1713
  if (W) {
1124
- W = {
1125
- ...W,
1126
- points: [W.points[0], e]
1127
- }, Cr(), z = null;
1714
+ Pi(t, n), Ni(), H = null, $();
1128
1715
  return;
1129
1716
  }
1130
- let r = Ut;
1131
- if (W = {
1132
- id: `drawing-${Date.now().toString(36)}-${++Gt}`,
1133
- type: r,
1134
- points: m(r) === 1 ? [e] : [e, e]
1135
- }, m(r) === 1) {
1136
- Cr();
1717
+ let e = un, r = v(e), i = r ? L[0] : o, a = bi(t, w(n, i.top, i.top + i.height), i), s = m(e);
1718
+ if (mn = i.id, W = {
1719
+ id: `drawing-${Date.now().toString(36)}-${++hn}`,
1720
+ type: e,
1721
+ points: r ? ji({
1722
+ ...a,
1723
+ price: Yr(a.price)
1724
+ }, i, e === "longPosition") : s === 1 ? [a] : [a, a],
1725
+ ...i.id === C ? {} : { pane: i.id }
1726
+ }, s === 1) {
1727
+ Mi();
1137
1728
  return;
1138
1729
  }
1139
- z = {
1730
+ pn = s - 1, H = {
1140
1731
  kind: "create",
1732
+ pane: i,
1141
1733
  x: t,
1142
1734
  y: n,
1143
1735
  moved: !1
1144
1736
  }, $();
1145
1737
  return;
1146
1738
  }
1147
- if (Ut === "cursor") {
1148
- let e = wr(t, n);
1739
+ if (un === "cursor") {
1740
+ let e = Fi(t, n);
1149
1741
  if (e) {
1150
- z = {
1742
+ H = {
1151
1743
  kind: "order",
1152
1744
  line: e,
1153
1745
  startPrice: e.price
1154
1746
  };
1155
1747
  return;
1156
1748
  }
1157
- let r = Tr(t, n);
1749
+ let r = Ii(t, n);
1158
1750
  if (r) {
1159
- xr(r.drawing.id), r.drawing.locked || (z = {
1751
+ Si(r.drawing.id), r.drawing.locked || (H = {
1160
1752
  kind: "drawing",
1161
1753
  id: r.drawing.id,
1754
+ pane: r.pane,
1162
1755
  handle: r.hit.part === "handle" ? r.hit.index : -1,
1163
1756
  x: t,
1164
1757
  y: n,
@@ -1168,166 +1761,181 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
1168
1761
  return;
1169
1762
  }
1170
1763
  }
1171
- z = {
1764
+ H = {
1172
1765
  kind: "pan",
1173
1766
  x: t,
1174
1767
  y: n,
1175
- right: j,
1176
- pane: i,
1768
+ right: P,
1769
+ pane: o,
1177
1770
  moved: !1,
1178
1771
  lastX: t,
1179
1772
  lastY: n,
1180
1773
  lastT: e.timeStamp,
1181
1774
  velocity: 0
1182
1775
  };
1183
- }, kr = (e) => {
1184
- let { x: t, y: n } = gr(e);
1185
- if (L = {
1776
+ }, aa = (e) => {
1777
+ let { x: t, y: n } = _i(e);
1778
+ if (B = {
1186
1779
  x: t,
1187
1780
  y: n
1188
- }, e.pointerType === "touch" && zt.has(e.pointerId) && (zt.set(e.pointerId, {
1781
+ }, e.pointerType === "touch" && $t.has(e.pointerId) && ($t.set(e.pointerId, {
1189
1782
  x: t,
1190
1783
  y: n
1191
- }), Bt && zt.size === 2)) {
1192
- let [e, t] = [...zt.values()], n = Math.hypot(e.x - t.x, e.y - t.y), r = q(), i = r && Cn() ? Math.min(M, Z(r - 1)) : (e.x + t.x) / 2, a = mn(i);
1193
- A = Bt.spacing * n / Math.max(1, Bt.distance), Q(), j = a + (M - i) / A, Q(), $();
1784
+ }), en && $t.size === 2)) {
1785
+ let [e, t] = [...$t.values()], n = Math.hypot(e.x - t.x, e.y - t.y), r = J(), i = r && fr() ? Math.min(F, Q(r - 1)) : (e.x + t.x) / 2, a = Jn(i);
1786
+ N = en.spacing * n / Math.max(1, en.distance), _r(), P = a + (F - i) / N, _r(), $();
1194
1787
  return;
1195
1788
  }
1196
- let r = z;
1789
+ let r = H;
1197
1790
  if (!r) {
1198
- Dr(t, n), $();
1791
+ W && Pi(t, n), ra(t, n), $();
1199
1792
  return;
1200
1793
  }
1201
1794
  switch (r.kind) {
1202
1795
  case "pan": {
1203
1796
  let i = t - r.x;
1204
1797
  if (!r.moved && Math.hypot(i, n - r.y) < 3) break;
1205
- r.moved = !0, j = r.right - i / A, r.pane && !r.pane.scale.auto && we(r.pane.scale, n - r.lastY), r.lastY = n;
1798
+ r.moved = !0, P = r.right - i / N, r.pane && !r.pane.scale.auto && Ae(r.pane.scale, n - r.lastY), r.lastY = n;
1206
1799
  let a = Math.max(1, e.timeStamp - r.lastT);
1207
- r.velocity = .6 * ((t - r.lastX) / a) + .4 * r.velocity, r.lastX = t, r.lastT = e.timeStamp, Q(), D.style.cursor = "grabbing";
1800
+ r.velocity = .6 * ((t - r.lastX) / a) + .4 * r.velocity, r.lastX = t, r.lastT = e.timeStamp, _r(), O.style.cursor = "grabbing";
1208
1801
  break;
1209
1802
  }
1210
1803
  case "axisY": {
1211
1804
  let e = r.pane.scale;
1212
- e.min = r.min, e.max = r.max, Ae(e, Math.exp((n - r.y) * .006));
1805
+ e.min = r.min, e.max = r.max, Ie(e, Math.exp((n - r.y) * .006));
1213
1806
  break;
1214
1807
  }
1215
1808
  case "axisX": {
1216
- let e = j;
1217
- A = r.spacing * Math.exp((t - r.x) * .006), Q(), j = e, Q();
1809
+ let e = P;
1810
+ N = r.spacing * Math.exp((t - r.x) * .006), _r(), P = e, _r();
1218
1811
  break;
1219
1812
  }
1220
1813
  case "separator": {
1221
- let e = n - r.y, t = P[r.index - 1], i = P[r.index];
1814
+ let e = n - r.y, t = L[r.index - 1], i = L[r.index];
1222
1815
  if (!t || !i) break;
1223
- let a = r.above + r.below, o = w(r.below - e, Je, a - Je);
1224
- Et.set(i.id, o), t.id !== C && Et.set(t.id, a - o);
1816
+ let a = r.above + r.below, o = w(r.below - e, rt, a - rt);
1817
+ Bt.set(i.id, o), t.id !== C && Bt.set(t.id, a - o);
1225
1818
  break;
1226
1819
  }
1227
- case "order": {
1228
- let e = Oe(P[0].scale, n), t = 10 ** -cn();
1229
- Kt.set(r.line.id, Math.round(e / t) * t);
1820
+ case "order":
1821
+ bn.set(r.line.id, Yr(Pe(L[0].scale, n)));
1230
1822
  break;
1231
- }
1232
1823
  case "drawing": {
1233
1824
  if (!r.moved && Math.hypot(t - r.x, n - r.y) < 3) break;
1234
1825
  r.moved = !0;
1235
- let e = P[0].scale, i = Math.round(mn(t) - mn(r.x)), a = Ee(e, n) - Ee(e, r.y), o = r.original.points.map((o, s) => r.handle >= 0 && s !== r.handle ? o : r.handle >= 0 ? yr(t, n) : {
1236
- time: hn(Math.round(gn(o.time)) + i),
1237
- price: Ce(e, De(e, o.price) + a)
1238
- });
1239
- H = H.map((e) => e.id === r.id ? {
1826
+ let e = r.pane.scale, i;
1827
+ if (r.handle >= 0) i = y(r.original, r.handle, bi(t, n, r.pane));
1828
+ else {
1829
+ let a = Math.round(Jn(t) - Jn(r.x)), o = Me(e, n) - Me(e, r.y);
1830
+ i = r.original.points.map((t) => ({
1831
+ time: Yn(Math.round(ar(t.time)) + a),
1832
+ price: ke(e, Ne(e, t.price) + o)
1833
+ }));
1834
+ }
1835
+ U = U.map((e) => e.id === r.id ? {
1240
1836
  ...e,
1241
- points: o
1837
+ points: i
1242
1838
  } : e);
1243
1839
  break;
1244
1840
  }
1245
- case "create": W && (Math.hypot(t - r.x, n - r.y) >= 4 && (r.moved = !0), W = {
1246
- ...W,
1247
- points: [W.points[0], yr(t, n)]
1248
- });
1841
+ case "create":
1842
+ Math.hypot(t - r.x, n - r.y) >= 4 && (r.moved = !0), Pi(t, n);
1843
+ break;
1844
+ default: ra(t, n);
1249
1845
  }
1250
1846
  $();
1251
- }, Ar = (e) => {
1252
- zt.delete(e.pointerId), zt.size < 2 && (Bt = null);
1253
- let t = z;
1254
- z = null;
1255
- let { x: n, y: r } = gr(e);
1256
- if (e.pointerType === "touch" && (L = null), !t) {
1847
+ }, oa = (e) => {
1848
+ $t.delete(e.pointerId), $t.size < 2 && (en = null);
1849
+ let t = H;
1850
+ H = null;
1851
+ let { x: n, y: r } = _i(e);
1852
+ if (e.pointerType === "touch" && (B = null), !t) {
1257
1853
  $();
1258
1854
  return;
1259
1855
  }
1260
1856
  switch (t.kind) {
1261
1857
  case "pan":
1262
- if (t.moved) E.kineticScroll !== !1 && e.timeStamp - t.lastT < 60 && Math.abs(t.velocity) > .25 && (B = {
1858
+ if (t.moved) D.kineticScroll !== !1 && e.timeStamp - t.lastT < 60 && Math.abs(t.velocity) > .25 && (tn = {
1263
1859
  v: t.velocity,
1264
1860
  t: typeof performance < "u" ? performance.now() : Date.now()
1265
1861
  });
1266
1862
  else {
1267
- U && xr(null);
1268
- let e = Dn(r);
1269
- e && n <= M && G("click", {
1270
- index: Math.round(mn(n)),
1271
- time: hn(Math.round(mn(n))),
1272
- price: Oe(e.scale, r),
1863
+ dn && Si(null);
1864
+ let e = gr(r);
1865
+ e && n <= F && K("click", {
1866
+ index: Math.round(Jn(n)),
1867
+ time: Yn(Math.round(Jn(n))),
1868
+ price: Pe(e.scale, r),
1273
1869
  pane: e.id
1274
1870
  });
1275
1871
  }
1276
1872
  break;
1277
1873
  case "order": {
1278
- let e = Kt.get(t.line.id);
1279
- e !== void 0 && e !== t.startPrice ? G("orderMove", {
1874
+ let e = bn.get(t.line.id);
1875
+ e !== void 0 && e !== t.startPrice ? K("orderMove", {
1280
1876
  id: t.line.id,
1281
1877
  price: e,
1282
1878
  previousPrice: t.startPrice,
1283
1879
  line: t.line
1284
- }) : Kt.delete(t.line.id);
1880
+ }) : bn.delete(t.line.id);
1285
1881
  break;
1286
1882
  }
1287
1883
  case "drawing":
1288
- t.moved && Sr(H);
1884
+ t.moved && Ti(U);
1289
1885
  break;
1290
- case "create": t.moved && Cr();
1886
+ case "create":
1887
+ t.moved && Ni();
1888
+ break;
1889
+ case "button": Li(n, r) >= 0 && t.action();
1291
1890
  }
1292
- Dr(n, r), $();
1293
- }, jr = (e) => {
1294
- z || e.pointerType === "touch" || (L = null, Wt = null, qt = null, $());
1295
- }, Mr = (e) => {
1296
- let t = E.wheel ?? "zoom";
1891
+ ra(n, r), $();
1892
+ }, sa = (e) => {
1893
+ H || e.pointerType === "touch" || (B = null, fn = null, xn = null, $());
1894
+ }, ca = (e) => {
1895
+ let t = D.wheel ?? "zoom";
1297
1896
  if (t === "none") return;
1298
- let { x: n } = gr(e), r = e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? M : 1, i = e.deltaX * r, a = e.deltaY * r, o = e.ctrlKey || e.metaKey;
1897
+ let { x: n } = _i(e), r = e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? F : 1, i = e.deltaX * r, a = e.deltaY * r, o = e.ctrlKey || e.metaKey;
1299
1898
  if (t === "modifier" && !o && Math.abs(i) <= Math.abs(a)) return;
1300
- if (e.preventDefault(), R = null, Math.abs(i) > Math.abs(a) || e.shiftKey) {
1301
- j += (Math.abs(i) > Math.abs(a) ? i : a) / A, Q(), B = null, $();
1899
+ if (e.preventDefault(), V = null, Math.abs(i) > Math.abs(a) || e.shiftKey) {
1900
+ P += (Math.abs(i) > Math.abs(a) ? i : a) / N, _r(), tn = null, $();
1302
1901
  return;
1303
1902
  }
1304
1903
  let s = Math.exp(-a * (e.ctrlKey ? .01 : .0015));
1305
- vr(Math.min(n, M), s);
1306
- }, Nr = (e) => {
1307
- let { x: t, y: n } = gr(e);
1308
- if (t > M && n < N) {
1309
- let e = Dn(n);
1904
+ yi(Math.min(n, F), s);
1905
+ }, la = (e) => {
1906
+ let { x: t, y: n } = _i(e), r = un === "cursor" ? Ii(t, n) : null;
1907
+ if (r?.drawing.type === "text") {
1908
+ Vi(r.drawing.id, !1);
1909
+ return;
1910
+ }
1911
+ if (t > F && n < I) {
1912
+ let e = gr(n);
1310
1913
  e && (e.scale.auto = !0);
1311
- } else if (n > N) A = E.barSpacing ?? 8, Hr.scrollToRealtime(!0);
1312
- else for (let e of Tt.values()) e.auto = !0;
1914
+ } else if (n > I) N = D.barSpacing ?? 8, xa.scrollToRealtime(!0);
1915
+ else for (let e of zt.values()) e.auto = !0;
1313
1916
  $();
1314
- }, Pr = (e) => {
1315
- if (e < 0 || e >= q()) return;
1316
- let t = _n(), n = tn();
1317
- ut.textContent = be(n.announcement, {
1318
- time: ne(le(O.time[e], E.utcOffset), fn(), K),
1319
- open: Y(t.open[e]),
1320
- high: Y(t.high[e]),
1321
- low: Y(t.low[e]),
1322
- close: Y(t.close[e])
1917
+ }, ua = (e) => {
1918
+ if (e < 0 || e >= J()) return;
1919
+ let t = or(), n = In();
1920
+ St.textContent = Ee(n.announcement, {
1921
+ time: oe(tr(j.time[e]), Kn(), q),
1922
+ open: X(t.open[e]),
1923
+ high: X(t.high[e]),
1924
+ low: X(t.low[e]),
1925
+ close: X(t.close[e])
1323
1926
  });
1324
1927
  };
1325
- D.addEventListener("pointerdown", Or), D.addEventListener("pointermove", kr), D.addEventListener("pointerup", Ar), D.addEventListener("pointercancel", Ar), D.addEventListener("pointerleave", jr), D.addEventListener("wheel", Mr, { passive: !1 }), D.addEventListener("dblclick", Nr), D.addEventListener("keydown", (e) => {
1326
- let t = q(), n = Math.max(1, Math.floor(M / A / 2)), r = (e) => {
1327
- R = w(e, 0, Math.max(0, t - 1));
1328
- let n = Z(R);
1329
- n < A && (j += (A - n) / A + 1), n > M - A && (j -= (n - M + A) / A - 1), Q(), Pr(R);
1330
- }, i = R ?? Math.min(t - 1, Math.round(j));
1928
+ O.addEventListener("pointerdown", ia), O.addEventListener("pointermove", aa), O.addEventListener("pointerup", oa), O.addEventListener("pointercancel", oa), O.addEventListener("pointerleave", sa), O.addEventListener("wheel", ca, { passive: !1 }), O.addEventListener("dblclick", la), O.addEventListener("keydown", (e) => {
1929
+ if ((e.ctrlKey || e.metaKey) && !e.altKey) {
1930
+ let t = e.key.toLowerCase();
1931
+ (t === "z" || t === "y") && (t === "y" || e.shiftKey ? Oi() : Di(), e.preventDefault());
1932
+ return;
1933
+ }
1934
+ let t = J(), n = Math.max(1, Math.floor(F / N / 2)), r = (e) => {
1935
+ V = w(e, 0, Math.max(0, t - 1));
1936
+ let n = Q(V);
1937
+ n < N && (P += (N - n) / N + 1), n > F - N && (P -= (n - F + N) / N - 1), _r(), ua(V);
1938
+ }, i = V ?? Math.min(t - 1, Math.round(P));
1331
1939
  switch (e.key) {
1332
1940
  case "ArrowLeft":
1333
1941
  r(i - (e.shiftKey ? 10 : 1));
@@ -1345,163 +1953,254 @@ var Ge = 28, Ke = 60, qe = 60, Je = 48, C = "price", Ye = "var(--success-color,
1345
1953
  r(0);
1346
1954
  break;
1347
1955
  case "End":
1348
- r(t - 1), Hr.scrollToRealtime(!0);
1956
+ r(t - 1), xa.scrollToRealtime(!0);
1349
1957
  break;
1350
1958
  case "+":
1351
1959
  case "=":
1352
1960
  case "ArrowUp":
1353
- vr(R === null ? M : Z(R), 1.2);
1961
+ yi(V === null ? F : Q(V), 1.2);
1354
1962
  break;
1355
1963
  case "-":
1356
1964
  case "_":
1357
1965
  case "ArrowDown":
1358
- vr(R === null ? M : Z(R), 1 / 1.2);
1966
+ yi(V === null ? F : Q(V), 1 / 1.2);
1359
1967
  break;
1360
1968
  case "Escape":
1361
- W ? W = null : Ut === "cursor" ? U ? xr(null) : R = null : br("cursor", !0);
1969
+ yn ? yn = !1 : An ? na(!1) : W ? (W = null, pn = 0) : un === "cursor" ? dn ? Si(null) : V = null : xi("cursor", !0);
1362
1970
  break;
1363
1971
  case "Delete":
1364
1972
  case "Backspace": {
1365
- let e = H.find((e) => e.id === U);
1973
+ let e = U.find((e) => e.id === dn);
1366
1974
  if (!e || e.locked) return;
1367
- xr(null), Sr(H.filter((t) => t.id !== e.id));
1975
+ Ai(e.id);
1368
1976
  break;
1369
1977
  }
1370
1978
  default: return;
1371
1979
  }
1372
1980
  e.preventDefault(), $();
1373
- }), D.addEventListener("focus", () => {
1981
+ }), O.addEventListener("focus", () => {
1374
1982
  let e = !0;
1375
1983
  try {
1376
- e = D.matches(":focus-visible");
1984
+ e = O.matches(":focus-visible");
1377
1985
  } catch {}
1378
- e && (D.style.boxShadow = `inset 0 0 0 2px ${o(F.primary, .6)}`);
1379
- }), D.addEventListener("blur", () => {
1380
- D.style.boxShadow = "", R !== null && (R = null, $());
1381
- }), lt.addEventListener("pointerdown", (e) => e.stopPropagation()), lt.addEventListener("click", () => Hr.scrollToRealtime(!0));
1382
- let Fr = typeof ResizeObserver == "function" ? new ResizeObserver(() => $()) : null;
1383
- Fr?.observe(D);
1384
- let Ir = () => {
1385
- if (rt) return;
1386
- let e = d(D);
1387
- f(F, e) && kt++, F = e, er = "", $();
1388
- }, Lr = p(Ir), Rr = null;
1389
- typeof MutationObserver == "function" && D.ownerDocument && (Rr = new MutationObserver(() => {
1390
- if (E.locale) return;
1391
- let e = K;
1392
- en(), K !== e && (er = "", At++, Br(), $());
1393
- }), Rr.observe(D.ownerDocument.documentElement, {
1986
+ e && (O.style.boxShadow = `inset 0 0 0 2px ${o(R.primary, .6)}`);
1987
+ }), O.addEventListener("blur", () => {
1988
+ O.style.boxShadow = "", V !== null && (V = null, $());
1989
+ }), xt.addEventListener("pointerdown", (e) => e.stopPropagation()), xt.addEventListener("click", () => xa.scrollToRealtime(!0));
1990
+ let da = typeof ResizeObserver == "function" ? new ResizeObserver(() => $()) : null;
1991
+ da?.observe(O);
1992
+ let fa = () => {
1993
+ if (ht) return;
1994
+ let e = d(O);
1995
+ f(R, e) && Ut++, R = e, ei = "", $();
1996
+ }, pa = p(fa), ma = null;
1997
+ typeof MutationObserver == "function" && O.ownerDocument && (ma = new MutationObserver(() => {
1998
+ if (D.locale) return;
1999
+ let e = q;
2000
+ Fn(), q !== e && (ei = "", Wt++, ya(), $());
2001
+ }), ma.observe(O.ownerDocument.documentElement, {
1394
2002
  attributes: !0,
1395
2003
  attributeFilter: ["lang"]
1396
2004
  }));
1397
- let zr = async (t = /* @__PURE__ */ new Set()) => {
1398
- let n = ++jt, r = await u(E.renderer ?? "auto", () => e(tt), (e) => {
1399
- rt || I?.kind !== e || (I.destroy(), I.canvas.remove(), I = null, zr(/* @__PURE__ */ new Set([...t, e])));
2005
+ let ha = () => {
2006
+ if (ht) return null;
2007
+ Kt && (mt?.cancelAnimationFrame ? mt.cancelAnimationFrame(Kt) : clearTimeout(Kt), Kt = 0), pi();
2008
+ let e = mt?.devicePixelRatio || 1, t = E.createElement("canvas");
2009
+ t.width = Math.max(1, Math.round(Lt * e)), t.height = Math.max(1, Math.round(Rt * e));
2010
+ let n = t.getContext("2d");
2011
+ if (!n) return null;
2012
+ n.fillStyle = o(R.background), n.fillRect(0, 0, t.width, t.height);
2013
+ try {
2014
+ n.drawImage(vt, 0, 0), z && n.drawImage(z.canvas, 0, 0, Math.round(F * e), Math.round(I * e)), n.drawImage(yt, 0, 0);
2015
+ } catch {}
2016
+ n.setTransform(e, 0, 0, e, 0, 0);
2017
+ let r = O.getBoundingClientRect(), i = mt ?? null;
2018
+ return bt.querySelectorAll("span, button").forEach((e) => {
2019
+ let t = e.textContent ?? "";
2020
+ if (e.children.length || !t.trim() || !i) return;
2021
+ let a = e.getBoundingClientRect(), s = i.getComputedStyle(e);
2022
+ n.font = `${s.fontWeight} ${s.fontSize} ${s.fontFamily}`, n.fillStyle = s.color || o(R.text), n.textAlign = "left", n.textBaseline = "middle", n.fillText(t, a.left - r.left, a.top - r.top + a.height / 2);
2023
+ }), t;
2024
+ }, ga = !1, _a = () => {
2025
+ let e = E.fullscreenElement === O;
2026
+ e !== ga && (ga = e, O.style.background = e ? o(R.background) : "", K("fullscreenChange", e), $());
2027
+ };
2028
+ E.addEventListener("fullscreenchange", _a);
2029
+ let va = async (t = /* @__PURE__ */ new Set()) => {
2030
+ let n = ++Gt, r = await u(D.renderer ?? "auto", () => e(E), (e) => {
2031
+ ht || z?.kind !== e || (z.destroy(), z.canvas.remove(), z = null, va(/* @__PURE__ */ new Set([...t, e])));
1400
2032
  }, t);
1401
- if (rt || n !== jt) {
2033
+ if (ht || n !== Gt) {
1402
2034
  r?.destroy();
1403
2035
  return;
1404
2036
  }
1405
- I && (I.destroy(), I.canvas.remove()), I = r, Pt = "", r && (D.dataset.renderer = r.kind, D.insertBefore(r.canvas, st), G("renderer", r.kind)), Lt(r?.kind ?? null), $();
1406
- }, Br = () => {
1407
- let e = E.symbol ?? "";
1408
- D.setAttribute("aria-label", E.ariaLabel ?? be(tn().chart, { symbol: e }).trim());
1409
- let t = !!E.countdown && E.lastPriceLine !== !1;
1410
- t && !Zt && (Zt = setInterval($, 1e3)), !t && Zt && (clearInterval(Zt), Zt = null);
1411
- }, Vr = (e) => {
1412
- let t = E;
1413
- if (en(), (!e || t.indicators !== e.indicators || t.utcOffset !== e.utcOffset) && xn(), (!e || t.compare !== e.compare) && Sn(), t.bars && (!e || t.bars !== e.bars) ? e ? Tn(t.bars) : wn(t.bars) : !t.bars && e?.bars && wn([]), e && t.barSpacing !== e.barSpacing && t.barSpacing && (A = t.barSpacing), e && t.scaleMode !== e.scaleMode) {
1414
- let e = Tt.get(C);
2037
+ z && (z.destroy(), z.canvas.remove()), z = r, Jt = "", r && (O.dataset.renderer = r.kind, O.insertBefore(r.canvas, yt), K("renderer", r.kind)), Zt(r?.kind ?? null), $();
2038
+ }, ya = () => {
2039
+ let e = D.symbol ?? "";
2040
+ O.setAttribute("aria-label", D.ariaLabel ?? Ee(In().chart, { symbol: e }).trim());
2041
+ let t = !!D.countdown && D.lastPriceLine !== !1;
2042
+ t && !kn && (kn = setInterval($, 1e3)), !t && kn && (clearInterval(kn), kn = null);
2043
+ }, ba = (e) => {
2044
+ let t = D;
2045
+ Fn();
2046
+ let n = t.timeZone && de(t.timeZone) ? t.timeZone : void 0, r = !!e && (t.utcOffset !== e.utcOffset || n !== Qn);
2047
+ if (Qn = n, (!e || t.indicators !== e.indicators) && ur(), r) for (let e of M) Ot.set(e, 0);
2048
+ if ((!e || t.compare !== e.compare) && dr(), t.bars && (!e || t.bars !== e.bars) ? (G && na(!1), e ? mr(t.bars) : pr(t.bars)) : !t.bars && e?.bars && (G && na(!1), pr([])), e && t.barSpacing !== e.barSpacing && t.barSpacing && (N = t.barSpacing), e && t.scaleMode !== e.scaleMode) {
2049
+ let e = zt.get(C);
1415
2050
  e && (e.auto = !0);
1416
2051
  }
1417
- t.drawings && t.drawings !== Ht && (!e || t.drawings !== e.drawings) && (H = t.drawings, U && !H.some((e) => e.id === U) && xr(null)), e && (t.drawingMode ?? "cursor") !== (e.drawingMode ?? "cursor") && br(t.drawingMode ?? "cursor", !1), e && t.priceLines !== e.priceLines && Kt.clear(), e && t.chartStyle !== e.chartStyle && (pt = Math.min(pt, 0)), At++, Br(), $();
2052
+ t.drawings && t.drawings !== an && (!e || t.drawings !== e.drawings) && (e ? Ti(t.drawings, !1) : U = on = t.drawings), e && (t.drawingMode ?? "cursor") !== (e.drawingMode ?? "cursor") && xi(t.drawingMode ?? "cursor", !1), e && t.priceLines !== e.priceLines && bn.clear(), e && t.chartStyle !== e.chartStyle && (Et = Math.min(Et, 0)), Wt++, ya(), $();
1418
2053
  };
1419
- Vr(null), zr();
1420
- let Hr = {
2054
+ ba(null), va();
2055
+ let xa = {
1421
2056
  setOptions(e) {
1422
- if (rt) return;
1423
- let t = E;
1424
- E = { ...e }, Vr(t), (e.renderer ?? "auto") !== (t.renderer ?? "auto") && zr();
2057
+ if (ht) return;
2058
+ let t = D;
2059
+ D = { ...e }, ba(t), (e.renderer ?? "auto") !== (t.renderer ?? "auto") && va();
1425
2060
  },
1426
2061
  setBars(e) {
1427
- wn(e);
2062
+ G && na(!1), pr(e);
1428
2063
  },
1429
2064
  update(e) {
1430
- let t = q(), n = Cn(), r = He(O, e);
1431
- r < 0 || (q() > t && n && (j += q() - t), bn(r));
2065
+ if (G) {
2066
+ Ze(G.source, e);
2067
+ return;
2068
+ }
2069
+ let t = J(), n = fr(), r = Ze(j, e);
2070
+ r < 0 || (J() > t && n && (P += J() - t), lr(r));
1432
2071
  },
1433
2072
  appendBars(e) {
1434
- let t = q(), n = Cn(), r = je(O, e);
1435
- r < 0 || (n && (j += q() - t), bn(r));
2073
+ if (G) {
2074
+ Le(G.source, e);
2075
+ return;
2076
+ }
2077
+ let t = J(), n = fr(), r = Le(j, e);
2078
+ r < 0 || (n && (P += J() - t), lr(r));
1436
2079
  },
1437
2080
  prependBars(e) {
1438
- let t = Re(O, e);
1439
- t && (dt = Ne(), mt = Ne(), pt = 0, j += t, R !== null && (R += t), bn(0));
2081
+ G && Ke(G.source, e);
2082
+ let t = Ke(j, e);
2083
+ t && (wt = ze(), Dt = ze(), Et = 0, P += t, V !== null && (V += t), lr(0));
1440
2084
  },
1441
- getBarCount: () => q(),
1442
- getBar: (e) => e >= 0 && e < q() ? Be(O, Math.floor(e)) : null,
2085
+ getBarCount: () => J(),
2086
+ getBar: (e) => e >= 0 && e < J() ? Ye(j, Math.floor(e)) : null,
1443
2087
  scrollToRealtime(e = !0) {
1444
- let t = q() - 1 + (E.rightOffset ?? 8);
1445
- B = null, e && T(j) && Math.abs(t - j) * A < M * 6 ? V = {
1446
- from: j,
2088
+ let t = J() - 1 + (D.rightOffset ?? 8);
2089
+ tn = null, e && T(P) && Math.abs(t - P) * N < F * 6 ? nn = {
2090
+ from: P,
1447
2091
  to: t,
1448
2092
  start: typeof performance < "u" ? performance.now() : Date.now()
1449
- } : j = t, $();
2093
+ } : P = t, $();
1450
2094
  },
1451
2095
  fitContent() {
1452
- let e = q();
1453
- e && Hr.setVisibleRange({
2096
+ let e = J();
2097
+ e && xa.setVisibleRange({
1454
2098
  from: -.5,
1455
- to: e - 1 + (E.rightOffset ?? 8)
2099
+ to: e - 1 + (D.rightOffset ?? 8)
1456
2100
  });
1457
2101
  },
1458
- getVisibleRange: () => mr(),
2102
+ getVisibleRange: () => hi(),
1459
2103
  setVisibleRange({ from: e, to: t }) {
1460
- t > e && (B = null, V = null, Vt = {
2104
+ t > e && (tn = null, nn = null, rn = {
1461
2105
  from: e,
1462
2106
  to: t
1463
- }, _r(Vt), $());
2107
+ }, vi(rn), $());
2108
+ },
2109
+ getVisibleTimeRange() {
2110
+ let e = hi();
2111
+ return {
2112
+ from: Xn(e.from),
2113
+ to: Xn(e.to)
2114
+ };
2115
+ },
2116
+ setVisibleTimeRange({ from: e, to: t }) {
2117
+ J() && t > e && xa.setVisibleRange({
2118
+ from: Zn(e),
2119
+ to: Zn(t)
2120
+ });
2121
+ },
2122
+ setCrosshair(e, t) {
2123
+ En = e === null || !T(e) ? null : {
2124
+ time: e,
2125
+ price: t ?? NaN
2126
+ }, $();
1464
2127
  },
1465
2128
  setScaleMode(e) {
1466
- E = {
1467
- ...E,
2129
+ D = {
2130
+ ...D,
1468
2131
  scaleMode: e
1469
2132
  };
1470
- let t = Tt.get(C);
2133
+ let t = zt.get(C);
1471
2134
  t && (t.auto = !0), $();
1472
2135
  },
1473
2136
  resetPriceScales() {
1474
- for (let e of Tt.values()) e.auto = !0;
2137
+ for (let e of zt.values()) e.auto = !0;
1475
2138
  $();
1476
2139
  },
1477
- setDrawingTool: (e) => br(e, !0),
1478
- getDrawingTool: () => Ut,
1479
- getDrawings: () => H,
2140
+ setDrawingTool: (e) => xi(e, !0),
2141
+ getDrawingTool: () => un,
2142
+ getDrawings: () => U,
1480
2143
  setDrawings(e) {
1481
- H = e, U && !H.some((e) => e.id === U) && xr(null), $();
2144
+ Ti(e, !1);
2145
+ },
2146
+ removeDrawing: Ai,
2147
+ updateDrawing: ki,
2148
+ selectDrawing: (e) => Si(e),
2149
+ undo: Di,
2150
+ redo: Oi,
2151
+ getUndoState: Ci,
2152
+ startReplay(e) {
2153
+ if (!J() && !G) return;
2154
+ if (e === void 0) {
2155
+ G && na(!0), An = !0, Yi(), $();
2156
+ return;
2157
+ }
2158
+ let t = G ? G.source : j;
2159
+ $i(He(t.time, t.length, e));
2160
+ },
2161
+ replayStep: (e = 1) => ea(Math.max(1, Math.floor(e))),
2162
+ replayPlay: (e) => ta(e),
2163
+ replayPause() {
2164
+ G && (Qi(), Yi());
2165
+ },
2166
+ stopReplay: () => na(!0),
2167
+ getReplayState: Ji,
2168
+ toDataURL(e = "image/png", t) {
2169
+ return ha()?.toDataURL(e, t) ?? "";
2170
+ },
2171
+ toBlob(e = "image/png", t) {
2172
+ let n = ha();
2173
+ return new Promise((r) => {
2174
+ !n || typeof n.toBlob != "function" ? r(null) : n.toBlob(r, e, t);
2175
+ });
2176
+ },
2177
+ async requestFullscreen() {
2178
+ typeof O.requestFullscreen == "function" && await O.requestFullscreen();
1482
2179
  },
1483
- removeDrawing(e) {
1484
- H.some((t) => t.id === e) && (U === e && xr(null), Sr(H.filter((t) => t.id !== e)));
2180
+ async exitFullscreen() {
2181
+ E.fullscreenElement === O && typeof E.exitFullscreen == "function" && await E.exitFullscreen();
1485
2182
  },
1486
- selectDrawing: (e) => xr(e),
2183
+ isFullscreen: () => E.fullscreenElement === O,
1487
2184
  setIndicatorVisible(e, t) {
1488
- gt.set(e, t), $();
2185
+ kt.set(e, t), $();
1489
2186
  },
1490
- getRenderer: () => I?.kind ?? null,
1491
- ready: Rt,
1492
- refreshTheme: Ir,
2187
+ getRenderer: () => z?.kind ?? null,
2188
+ ready: Qt,
2189
+ refreshTheme: fa,
1493
2190
  resize: () => $(),
1494
2191
  on(e, t) {
1495
- let n = Qt.get(e);
1496
- return n || Qt.set(e, n = /* @__PURE__ */ new Set()), n.add(t), () => n.delete(t);
2192
+ let n = Nn.get(e);
2193
+ return n || Nn.set(e, n = /* @__PURE__ */ new Set()), n.add(t), () => n.delete(t);
1497
2194
  },
1498
2195
  destroy() {
1499
- rt || (rt = !0, Mt && (nt?.cancelAnimationFrame ? nt.cancelAnimationFrame(Mt) : clearTimeout(Mt)), Zt && clearInterval(Zt), Fr?.disconnect(), Lr(), Rr?.disconnect(), D.removeEventListener("wheel", Mr), I?.destroy(), I = null, Lt(null), Qt.clear(), D.remove());
2196
+ ht || (ht = !0, Kt && (mt?.cancelAnimationFrame ? mt.cancelAnimationFrame(Kt) : clearTimeout(Kt)), kn && clearInterval(kn), G?.timer && clearInterval(G.timer), E.removeEventListener("fullscreenchange", _a), da?.disconnect(), pa(), ma?.disconnect(), O.removeEventListener("wheel", ca), z?.destroy(), z = null, Zt(null), Nn.clear(), O.remove());
1500
2197
  }
1501
2198
  };
1502
- return Hr;
2199
+ return dt.set(xa, { setTimeRange(e) {
2200
+ Tn = !0, xa.setVisibleTimeRange(e);
2201
+ } }), xa;
1503
2202
  };
1504
2203
  //#endregion
1505
- export { tt as createTradingChart };
2204
+ export { E as createTradingChart, dt as syncHooks };
1506
2205
 
1507
2206
  //# sourceMappingURL=chart.js.map