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