minerva-design 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1337) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +21 -21
  3. package/custom-elements.json +18546 -7329
  4. package/dist/angular/fesm2022/minerva-angular.mjs +8303 -172
  5. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  6. package/dist/angular/types/minerva-angular.d.ts +2809 -0
  7. package/dist/charts/canvas.d.cts +8 -3
  8. package/dist/charts/canvas.d.ts +8 -3
  9. package/dist/charts/core.cjs +1 -1
  10. package/dist/charts/core.d.cts +10 -5
  11. package/dist/charts/core.d.ts +10 -5
  12. package/dist/charts/core.js +27 -8
  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 +43 -20
  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.d.cts +11 -1
  20. package/dist/charts/engine/canvas.d.ts +11 -1
  21. package/dist/charts/engine/canvas.js +193 -116
  22. package/dist/charts/engine/canvas.js.map +1 -1
  23. package/dist/charts/engine/chart.cjs +1 -1
  24. package/dist/charts/engine/chart.cjs.map +1 -1
  25. package/dist/charts/engine/chart.d.cts +1 -1
  26. package/dist/charts/engine/chart.d.ts +1 -1
  27. package/dist/charts/engine/chart.js +486 -350
  28. package/dist/charts/engine/chart.js.map +1 -1
  29. package/dist/charts/engine/color.cjs +1 -1
  30. package/dist/charts/engine/color.cjs.map +1 -1
  31. package/dist/charts/engine/color.d.cts +18 -0
  32. package/dist/charts/engine/color.d.ts +18 -0
  33. package/dist/charts/engine/color.js +47 -1
  34. package/dist/charts/engine/color.js.map +1 -1
  35. package/dist/charts/engine/controller.cjs +2 -2
  36. package/dist/charts/engine/controller.cjs.map +1 -1
  37. package/dist/charts/engine/controller.d.cts +44 -4
  38. package/dist/charts/engine/controller.d.ts +44 -4
  39. package/dist/charts/engine/controller.js +421 -314
  40. package/dist/charts/engine/controller.js.map +1 -1
  41. package/dist/charts/engine/data.cjs +1 -1
  42. package/dist/charts/engine/data.cjs.map +1 -1
  43. package/dist/charts/engine/data.d.cts +9 -1
  44. package/dist/charts/engine/data.d.ts +9 -1
  45. package/dist/charts/engine/data.js +65 -49
  46. package/dist/charts/engine/data.js.map +1 -1
  47. package/dist/charts/engine/defaults.cjs +2 -0
  48. package/dist/charts/engine/defaults.cjs.map +1 -0
  49. package/dist/charts/engine/defaults.d.cts +20 -0
  50. package/dist/charts/engine/defaults.d.ts +20 -0
  51. package/dist/charts/engine/defaults.js +35 -0
  52. package/dist/charts/engine/defaults.js.map +1 -0
  53. package/dist/charts/engine/format.cjs +1 -1
  54. package/dist/charts/engine/format.cjs.map +1 -1
  55. package/dist/charts/engine/format.d.cts +27 -6
  56. package/dist/charts/engine/format.d.ts +27 -6
  57. package/dist/charts/engine/format.js +59 -21
  58. package/dist/charts/engine/format.js.map +1 -1
  59. package/dist/charts/engine/graph/chart.cjs +2 -0
  60. package/dist/charts/engine/graph/chart.cjs.map +1 -0
  61. package/dist/charts/engine/graph/chart.d.cts +3 -0
  62. package/dist/charts/engine/graph/chart.d.ts +3 -0
  63. package/dist/charts/engine/graph/chart.js +1565 -0
  64. package/dist/charts/engine/graph/chart.js.map +1 -0
  65. package/dist/charts/engine/graph/circular.cjs +2 -0
  66. package/dist/charts/engine/graph/circular.cjs.map +1 -0
  67. package/dist/charts/engine/graph/circular.d.cts +16 -0
  68. package/dist/charts/engine/graph/circular.d.ts +16 -0
  69. package/dist/charts/engine/graph/circular.js +62 -0
  70. package/dist/charts/engine/graph/circular.js.map +1 -0
  71. package/dist/charts/engine/graph/dag.cjs +2 -0
  72. package/dist/charts/engine/graph/dag.cjs.map +1 -0
  73. package/dist/charts/engine/graph/dag.d.cts +34 -0
  74. package/dist/charts/engine/graph/dag.d.ts +34 -0
  75. package/dist/charts/engine/graph/dag.js +314 -0
  76. package/dist/charts/engine/graph/dag.js.map +1 -0
  77. package/dist/charts/engine/graph/dom.cjs +2 -0
  78. package/dist/charts/engine/graph/dom.cjs.map +1 -0
  79. package/dist/charts/engine/graph/dom.d.cts +23 -0
  80. package/dist/charts/engine/graph/dom.d.ts +23 -0
  81. package/dist/charts/engine/graph/dom.js +158 -0
  82. package/dist/charts/engine/graph/dom.js.map +1 -0
  83. package/dist/charts/engine/graph/force.cjs +2 -0
  84. package/dist/charts/engine/graph/force.cjs.map +1 -0
  85. package/dist/charts/engine/graph/force.d.cts +67 -0
  86. package/dist/charts/engine/graph/force.d.ts +67 -0
  87. package/dist/charts/engine/graph/force.js +325 -0
  88. package/dist/charts/engine/graph/force.js.map +1 -0
  89. package/dist/charts/engine/graph/geometry.cjs +2 -0
  90. package/dist/charts/engine/graph/geometry.cjs.map +1 -0
  91. package/dist/charts/engine/graph/geometry.d.cts +37 -0
  92. package/dist/charts/engine/graph/geometry.d.ts +37 -0
  93. package/dist/charts/engine/graph/geometry.js +144 -0
  94. package/dist/charts/engine/graph/geometry.js.map +1 -0
  95. package/dist/charts/engine/graph/index.cjs +1 -0
  96. package/dist/charts/engine/graph/index.d.cts +6 -0
  97. package/dist/charts/engine/graph/index.d.ts +6 -0
  98. package/dist/charts/engine/graph/index.js +6 -0
  99. package/dist/charts/engine/graph/labels.cjs +2 -0
  100. package/dist/charts/engine/graph/labels.cjs.map +1 -0
  101. package/dist/charts/engine/graph/labels.d.cts +12 -0
  102. package/dist/charts/engine/graph/labels.d.ts +12 -0
  103. package/dist/charts/engine/graph/labels.js +128 -0
  104. package/dist/charts/engine/graph/labels.js.map +1 -0
  105. package/dist/charts/engine/graph/model.cjs +2 -0
  106. package/dist/charts/engine/graph/model.cjs.map +1 -0
  107. package/dist/charts/engine/graph/model.d.cts +43 -0
  108. package/dist/charts/engine/graph/model.d.ts +43 -0
  109. package/dist/charts/engine/graph/model.js +88 -0
  110. package/dist/charts/engine/graph/model.js.map +1 -0
  111. package/dist/charts/engine/graph/sizing.cjs +2 -0
  112. package/dist/charts/engine/graph/sizing.cjs.map +1 -0
  113. package/dist/charts/engine/graph/sizing.d.cts +33 -0
  114. package/dist/charts/engine/graph/sizing.d.ts +33 -0
  115. package/dist/charts/engine/graph/sizing.js +60 -0
  116. package/dist/charts/engine/graph/sizing.js.map +1 -0
  117. package/dist/charts/engine/graph/tree.cjs +2 -0
  118. package/dist/charts/engine/graph/tree.cjs.map +1 -0
  119. package/dist/charts/engine/graph/tree.d.cts +30 -0
  120. package/dist/charts/engine/graph/tree.d.ts +30 -0
  121. package/dist/charts/engine/graph/tree.js +218 -0
  122. package/dist/charts/engine/graph/tree.js.map +1 -0
  123. package/dist/charts/engine/graph/types.d.cts +626 -0
  124. package/dist/charts/engine/graph/types.d.ts +626 -0
  125. package/dist/charts/engine/graph/worker.cjs +46 -0
  126. package/dist/charts/engine/graph/worker.cjs.map +1 -0
  127. package/dist/charts/engine/graph/worker.d.cts +36 -0
  128. package/dist/charts/engine/graph/worker.d.ts +36 -0
  129. package/dist/charts/engine/graph/worker.js +129 -0
  130. package/dist/charts/engine/graph/worker.js.map +1 -0
  131. package/dist/charts/engine/items.cjs +1 -1
  132. package/dist/charts/engine/items.cjs.map +1 -1
  133. package/dist/charts/engine/items.d.cts +15 -2
  134. package/dist/charts/engine/items.d.ts +15 -2
  135. package/dist/charts/engine/items.js +257 -81
  136. package/dist/charts/engine/items.js.map +1 -1
  137. package/dist/charts/engine/labels.cjs +2 -0
  138. package/dist/charts/engine/labels.cjs.map +1 -0
  139. package/dist/charts/engine/labels.d.cts +13 -0
  140. package/dist/charts/engine/labels.d.ts +13 -0
  141. package/dist/charts/engine/labels.js +98 -0
  142. package/dist/charts/engine/labels.js.map +1 -0
  143. package/dist/charts/engine/layout.cjs +1 -1
  144. package/dist/charts/engine/layout.cjs.map +1 -1
  145. package/dist/charts/engine/layout.d.cts +43 -2
  146. package/dist/charts/engine/layout.d.ts +43 -2
  147. package/dist/charts/engine/layout.js +62 -12
  148. package/dist/charts/engine/layout.js.map +1 -1
  149. package/dist/charts/engine/locale.cjs +2 -0
  150. package/dist/charts/engine/locale.cjs.map +1 -0
  151. package/dist/charts/engine/locale.d.cts +33 -0
  152. package/dist/charts/engine/locale.d.ts +33 -0
  153. package/dist/charts/engine/locale.js +68 -0
  154. package/dist/charts/engine/locale.js.map +1 -0
  155. package/dist/charts/engine/model.cjs +1 -1
  156. package/dist/charts/engine/model.cjs.map +1 -1
  157. package/dist/charts/engine/model.d.cts +77 -2
  158. package/dist/charts/engine/model.d.ts +77 -2
  159. package/dist/charts/engine/model.js +304 -116
  160. package/dist/charts/engine/model.js.map +1 -1
  161. package/dist/charts/engine/orderbook/book.cjs +2 -0
  162. package/dist/charts/engine/orderbook/book.cjs.map +1 -0
  163. package/dist/charts/engine/orderbook/book.d.cts +28 -0
  164. package/dist/charts/engine/orderbook/book.d.ts +28 -0
  165. package/dist/charts/engine/orderbook/book.js +134 -0
  166. package/dist/charts/engine/orderbook/book.js.map +1 -0
  167. package/dist/charts/engine/orderbook/depth.cjs +2 -0
  168. package/dist/charts/engine/orderbook/depth.cjs.map +1 -0
  169. package/dist/charts/engine/orderbook/depth.d.cts +7 -0
  170. package/dist/charts/engine/orderbook/depth.d.ts +7 -0
  171. package/dist/charts/engine/orderbook/depth.js +413 -0
  172. package/dist/charts/engine/orderbook/depth.js.map +1 -0
  173. package/dist/charts/engine/orderbook/format.cjs +2 -0
  174. package/dist/charts/engine/orderbook/format.cjs.map +1 -0
  175. package/dist/charts/engine/orderbook/format.d.cts +49 -0
  176. package/dist/charts/engine/orderbook/format.d.ts +49 -0
  177. package/dist/charts/engine/orderbook/format.js +65 -0
  178. package/dist/charts/engine/orderbook/format.js.map +1 -0
  179. package/dist/charts/engine/orderbook/heatmap.cjs +2 -0
  180. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -0
  181. package/dist/charts/engine/orderbook/heatmap.d.cts +9 -0
  182. package/dist/charts/engine/orderbook/heatmap.d.ts +9 -0
  183. package/dist/charts/engine/orderbook/heatmap.js +822 -0
  184. package/dist/charts/engine/orderbook/heatmap.js.map +1 -0
  185. package/dist/charts/engine/orderbook/host.cjs +2 -0
  186. package/dist/charts/engine/orderbook/host.cjs.map +1 -0
  187. package/dist/charts/engine/orderbook/host.d.cts +50 -0
  188. package/dist/charts/engine/orderbook/host.d.ts +50 -0
  189. package/dist/charts/engine/orderbook/host.js +161 -0
  190. package/dist/charts/engine/orderbook/host.js.map +1 -0
  191. package/dist/charts/engine/orderbook/index.cjs +1 -0
  192. package/dist/charts/engine/orderbook/index.d.cts +6 -0
  193. package/dist/charts/engine/orderbook/index.d.ts +6 -0
  194. package/dist/charts/engine/orderbook/index.js +6 -0
  195. package/dist/charts/engine/orderbook/ladder.cjs +2 -0
  196. package/dist/charts/engine/orderbook/ladder.cjs.map +1 -0
  197. package/dist/charts/engine/orderbook/ladder.d.cts +6 -0
  198. package/dist/charts/engine/orderbook/ladder.d.ts +6 -0
  199. package/dist/charts/engine/orderbook/ladder.js +341 -0
  200. package/dist/charts/engine/orderbook/ladder.js.map +1 -0
  201. package/dist/charts/engine/orderbook/layout.cjs +2 -0
  202. package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
  203. package/dist/charts/engine/orderbook/layout.d.cts +37 -0
  204. package/dist/charts/engine/orderbook/layout.d.ts +37 -0
  205. package/dist/charts/engine/orderbook/layout.js +70 -0
  206. package/dist/charts/engine/orderbook/layout.js.map +1 -0
  207. package/dist/charts/engine/orderbook/tape.cjs +2 -0
  208. package/dist/charts/engine/orderbook/tape.cjs.map +1 -0
  209. package/dist/charts/engine/orderbook/tape.d.cts +6 -0
  210. package/dist/charts/engine/orderbook/tape.d.ts +6 -0
  211. package/dist/charts/engine/orderbook/tape.js +450 -0
  212. package/dist/charts/engine/orderbook/tape.js.map +1 -0
  213. package/dist/charts/engine/orderbook/types.d.cts +751 -0
  214. package/dist/charts/engine/orderbook/types.d.ts +751 -0
  215. package/dist/charts/engine/overlay.cjs +1 -1
  216. package/dist/charts/engine/overlay.cjs.map +1 -1
  217. package/dist/charts/engine/overlay.d.cts +28 -2
  218. package/dist/charts/engine/overlay.d.ts +28 -2
  219. package/dist/charts/engine/overlay.js +138 -96
  220. package/dist/charts/engine/overlay.js.map +1 -1
  221. package/dist/charts/engine/presets.cjs +2 -2
  222. package/dist/charts/engine/presets.cjs.map +1 -1
  223. package/dist/charts/engine/presets.d.cts +273 -3
  224. package/dist/charts/engine/presets.d.ts +273 -3
  225. package/dist/charts/engine/presets.js +390 -38
  226. package/dist/charts/engine/presets.js.map +1 -1
  227. package/dist/charts/engine/renderers/detect.cjs +1 -1
  228. package/dist/charts/engine/renderers/detect.cjs.map +1 -1
  229. package/dist/charts/engine/renderers/detect.d.cts +2 -1
  230. package/dist/charts/engine/renderers/detect.d.ts +2 -1
  231. package/dist/charts/engine/renderers/detect.js +24 -19
  232. package/dist/charts/engine/renderers/detect.js.map +1 -1
  233. package/dist/charts/engine/renderers/gl.cjs +2 -0
  234. package/dist/charts/engine/renderers/gl.cjs.map +1 -0
  235. package/dist/charts/engine/renderers/gl.d.cts +21 -0
  236. package/dist/charts/engine/renderers/gl.d.ts +21 -0
  237. package/dist/charts/engine/renderers/gl.js +56 -0
  238. package/dist/charts/engine/renderers/gl.js.map +1 -0
  239. package/dist/charts/engine/renderers/shaders.cjs +143 -1
  240. package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
  241. package/dist/charts/engine/renderers/shaders.d.cts +16 -0
  242. package/dist/charts/engine/renderers/shaders.d.ts +16 -0
  243. package/dist/charts/engine/renderers/shaders.js +139 -1
  244. package/dist/charts/engine/renderers/shaders.js.map +1 -1
  245. package/dist/charts/engine/renderers/webgl.cjs +2 -0
  246. package/dist/charts/engine/renderers/webgl.cjs.map +1 -0
  247. package/dist/charts/engine/renderers/webgl.d.cts +4 -0
  248. package/dist/charts/engine/renderers/webgl.d.ts +4 -0
  249. package/dist/charts/engine/renderers/webgl.js +133 -0
  250. package/dist/charts/engine/renderers/webgl.js.map +1 -0
  251. package/dist/charts/engine/renderers/webgl2.cjs +1 -1
  252. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
  253. package/dist/charts/engine/renderers/webgl2.d.cts +0 -1
  254. package/dist/charts/engine/renderers/webgl2.d.ts +0 -1
  255. package/dist/charts/engine/renderers/webgl2.js +59 -108
  256. package/dist/charts/engine/renderers/webgl2.js.map +1 -1
  257. package/dist/charts/engine/scale.cjs +1 -1
  258. package/dist/charts/engine/scale.cjs.map +1 -1
  259. package/dist/charts/engine/scale.js +1 -1
  260. package/dist/charts/engine/scale.js.map +1 -1
  261. package/dist/charts/engine/scene.cjs +1 -1
  262. package/dist/charts/engine/scene.cjs.map +1 -1
  263. package/dist/charts/engine/scene.d.cts +71 -8
  264. package/dist/charts/engine/scene.d.ts +71 -8
  265. package/dist/charts/engine/scene.js +465 -183
  266. package/dist/charts/engine/scene.js.map +1 -1
  267. package/dist/charts/engine/shapes/bullet.cjs +2 -0
  268. package/dist/charts/engine/shapes/bullet.cjs.map +1 -0
  269. package/dist/charts/engine/shapes/bullet.d.cts +6 -0
  270. package/dist/charts/engine/shapes/bullet.d.ts +6 -0
  271. package/dist/charts/engine/shapes/bullet.js +255 -0
  272. package/dist/charts/engine/shapes/bullet.js.map +1 -0
  273. package/dist/charts/engine/shapes/calendar.cjs +2 -0
  274. package/dist/charts/engine/shapes/calendar.cjs.map +1 -0
  275. package/dist/charts/engine/shapes/calendar.d.cts +38 -0
  276. package/dist/charts/engine/shapes/calendar.d.ts +38 -0
  277. package/dist/charts/engine/shapes/calendar.js +369 -0
  278. package/dist/charts/engine/shapes/calendar.js.map +1 -0
  279. package/dist/charts/engine/shapes/canvas.cjs +1 -1
  280. package/dist/charts/engine/shapes/canvas.cjs.map +1 -1
  281. package/dist/charts/engine/shapes/canvas.d.cts +7 -0
  282. package/dist/charts/engine/shapes/canvas.d.ts +7 -0
  283. package/dist/charts/engine/shapes/canvas.js +22 -13
  284. package/dist/charts/engine/shapes/canvas.js.map +1 -1
  285. package/dist/charts/engine/shapes/chart.cjs +1 -1
  286. package/dist/charts/engine/shapes/chart.cjs.map +1 -1
  287. package/dist/charts/engine/shapes/chart.d.cts +3 -2
  288. package/dist/charts/engine/shapes/chart.d.ts +3 -2
  289. package/dist/charts/engine/shapes/chart.js +49 -27
  290. package/dist/charts/engine/shapes/chart.js.map +1 -1
  291. package/dist/charts/engine/shapes/chord.cjs +2 -0
  292. package/dist/charts/engine/shapes/chord.cjs.map +1 -0
  293. package/dist/charts/engine/shapes/chord.d.cts +18 -0
  294. package/dist/charts/engine/shapes/chord.d.ts +18 -0
  295. package/dist/charts/engine/shapes/chord.js +414 -0
  296. package/dist/charts/engine/shapes/chord.js.map +1 -0
  297. package/dist/charts/engine/shapes/draw.cjs +1 -1
  298. package/dist/charts/engine/shapes/draw.cjs.map +1 -1
  299. package/dist/charts/engine/shapes/draw.d.cts +7 -1
  300. package/dist/charts/engine/shapes/draw.d.ts +7 -1
  301. package/dist/charts/engine/shapes/draw.js +62 -19
  302. package/dist/charts/engine/shapes/draw.js.map +1 -1
  303. package/dist/charts/engine/shapes/funnel.cjs +1 -1
  304. package/dist/charts/engine/shapes/funnel.cjs.map +1 -1
  305. package/dist/charts/engine/shapes/funnel.js +3 -3
  306. package/dist/charts/engine/shapes/funnel.js.map +1 -1
  307. package/dist/charts/engine/shapes/gauge.cjs +1 -1
  308. package/dist/charts/engine/shapes/gauge.cjs.map +1 -1
  309. package/dist/charts/engine/shapes/gauge.js +132 -95
  310. package/dist/charts/engine/shapes/gauge.js.map +1 -1
  311. package/dist/charts/engine/shapes/hit.cjs +1 -1
  312. package/dist/charts/engine/shapes/hit.cjs.map +1 -1
  313. package/dist/charts/engine/shapes/hit.d.cts +5 -1
  314. package/dist/charts/engine/shapes/hit.d.ts +5 -1
  315. package/dist/charts/engine/shapes/hit.js +89 -39
  316. package/dist/charts/engine/shapes/hit.js.map +1 -1
  317. package/dist/charts/engine/shapes/index.d.cts +6 -2
  318. package/dist/charts/engine/shapes/index.d.ts +6 -2
  319. package/dist/charts/engine/shapes/labels.cjs +2 -0
  320. package/dist/charts/engine/shapes/labels.cjs.map +1 -0
  321. package/dist/charts/engine/shapes/labels.d.cts +14 -0
  322. package/dist/charts/engine/shapes/labels.d.ts +14 -0
  323. package/dist/charts/engine/shapes/labels.js +154 -0
  324. package/dist/charts/engine/shapes/labels.js.map +1 -0
  325. package/dist/charts/engine/shapes/layout.cjs +2 -2
  326. package/dist/charts/engine/shapes/layout.cjs.map +1 -1
  327. package/dist/charts/engine/shapes/layout.d.cts +10 -3
  328. package/dist/charts/engine/shapes/layout.d.ts +10 -3
  329. package/dist/charts/engine/shapes/layout.js +239 -124
  330. package/dist/charts/engine/shapes/layout.js.map +1 -1
  331. package/dist/charts/engine/shapes/pie.cjs +1 -1
  332. package/dist/charts/engine/shapes/pie.cjs.map +1 -1
  333. package/dist/charts/engine/shapes/pie.js +2 -2
  334. package/dist/charts/engine/shapes/pie.js.map +1 -1
  335. package/dist/charts/engine/shapes/radar.cjs +1 -1
  336. package/dist/charts/engine/shapes/radar.cjs.map +1 -1
  337. package/dist/charts/engine/shapes/radar.d.cts +2 -2
  338. package/dist/charts/engine/shapes/radar.d.ts +2 -2
  339. package/dist/charts/engine/shapes/radar.js +50 -49
  340. package/dist/charts/engine/shapes/radar.js.map +1 -1
  341. package/dist/charts/engine/shapes/radialBar.cjs +2 -0
  342. package/dist/charts/engine/shapes/radialBar.cjs.map +1 -0
  343. package/dist/charts/engine/shapes/radialBar.d.cts +8 -0
  344. package/dist/charts/engine/shapes/radialBar.d.ts +8 -0
  345. package/dist/charts/engine/shapes/radialBar.js +155 -0
  346. package/dist/charts/engine/shapes/radialBar.js.map +1 -0
  347. package/dist/charts/engine/shapes/runtime.cjs +1 -1
  348. package/dist/charts/engine/shapes/runtime.cjs.map +1 -1
  349. package/dist/charts/engine/shapes/runtime.d.cts +9 -2
  350. package/dist/charts/engine/shapes/runtime.d.ts +9 -2
  351. package/dist/charts/engine/shapes/runtime.js +61 -51
  352. package/dist/charts/engine/shapes/runtime.js.map +1 -1
  353. package/dist/charts/engine/shapes/sankey.cjs +2 -0
  354. package/dist/charts/engine/shapes/sankey.cjs.map +1 -0
  355. package/dist/charts/engine/shapes/sankey.d.cts +29 -0
  356. package/dist/charts/engine/shapes/sankey.d.ts +29 -0
  357. package/dist/charts/engine/shapes/sankey.js +372 -0
  358. package/dist/charts/engine/shapes/sankey.js.map +1 -0
  359. package/dist/charts/engine/shapes/scene.cjs +1 -1
  360. package/dist/charts/engine/shapes/scene.cjs.map +1 -1
  361. package/dist/charts/engine/shapes/scene.d.cts +92 -8
  362. package/dist/charts/engine/shapes/scene.d.ts +92 -8
  363. package/dist/charts/engine/shapes/scene.js +76 -31
  364. package/dist/charts/engine/shapes/scene.js.map +1 -1
  365. package/dist/charts/engine/shapes/sunburst.cjs +2 -0
  366. package/dist/charts/engine/shapes/sunburst.cjs.map +1 -0
  367. package/dist/charts/engine/shapes/sunburst.d.cts +6 -0
  368. package/dist/charts/engine/shapes/sunburst.d.ts +6 -0
  369. package/dist/charts/engine/shapes/sunburst.js +261 -0
  370. package/dist/charts/engine/shapes/sunburst.js.map +1 -0
  371. package/dist/charts/engine/shapes/treemap.cjs +1 -1
  372. package/dist/charts/engine/shapes/treemap.cjs.map +1 -1
  373. package/dist/charts/engine/shapes/treemap.js +2 -2
  374. package/dist/charts/engine/shapes/treemap.js.map +1 -1
  375. package/dist/charts/engine/shapes/types.d.cts +550 -12
  376. package/dist/charts/engine/shapes/types.d.ts +550 -12
  377. package/dist/charts/engine/signature.cjs +1 -1
  378. package/dist/charts/engine/signature.cjs.map +1 -1
  379. package/dist/charts/engine/signature.js +1 -1
  380. package/dist/charts/engine/signature.js.map +1 -1
  381. package/dist/charts/engine/three-d/canvas2d.cjs +2 -0
  382. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -0
  383. package/dist/charts/engine/three-d/canvas2d.d.cts +7 -0
  384. package/dist/charts/engine/three-d/canvas2d.d.ts +7 -0
  385. package/dist/charts/engine/three-d/canvas2d.js +128 -0
  386. package/dist/charts/engine/three-d/canvas2d.js.map +1 -0
  387. package/dist/charts/engine/three-d/chart.cjs +2 -0
  388. package/dist/charts/engine/three-d/chart.cjs.map +1 -0
  389. package/dist/charts/engine/three-d/chart.d.cts +15 -0
  390. package/dist/charts/engine/three-d/chart.d.ts +15 -0
  391. package/dist/charts/engine/three-d/chart.js +621 -0
  392. package/dist/charts/engine/three-d/chart.js.map +1 -0
  393. package/dist/charts/engine/three-d/colormap.cjs +2 -0
  394. package/dist/charts/engine/three-d/colormap.cjs.map +1 -0
  395. package/dist/charts/engine/three-d/colormap.d.cts +16 -0
  396. package/dist/charts/engine/three-d/colormap.d.ts +16 -0
  397. package/dist/charts/engine/three-d/colormap.js +166 -0
  398. package/dist/charts/engine/three-d/colormap.js.map +1 -0
  399. package/dist/charts/engine/three-d/contours.cjs +2 -0
  400. package/dist/charts/engine/three-d/contours.cjs.map +1 -0
  401. package/dist/charts/engine/three-d/contours.d.cts +7 -0
  402. package/dist/charts/engine/three-d/contours.d.ts +7 -0
  403. package/dist/charts/engine/three-d/contours.js +47 -0
  404. package/dist/charts/engine/three-d/contours.js.map +1 -0
  405. package/dist/charts/engine/three-d/detect.cjs +2 -0
  406. package/dist/charts/engine/three-d/detect.cjs.map +1 -0
  407. package/dist/charts/engine/three-d/detect.d.cts +12 -0
  408. package/dist/charts/engine/three-d/detect.d.ts +12 -0
  409. package/dist/charts/engine/three-d/detect.js +37 -0
  410. package/dist/charts/engine/three-d/detect.js.map +1 -0
  411. package/dist/charts/engine/three-d/dom.cjs +2 -0
  412. package/dist/charts/engine/three-d/dom.cjs.map +1 -0
  413. package/dist/charts/engine/three-d/dom.d.cts +21 -0
  414. package/dist/charts/engine/three-d/dom.d.ts +21 -0
  415. package/dist/charts/engine/three-d/dom.js +98 -0
  416. package/dist/charts/engine/three-d/dom.js.map +1 -0
  417. package/dist/charts/engine/three-d/geometry.cjs +2 -0
  418. package/dist/charts/engine/three-d/geometry.cjs.map +1 -0
  419. package/dist/charts/engine/three-d/geometry.d.cts +82 -0
  420. package/dist/charts/engine/three-d/geometry.d.ts +82 -0
  421. package/dist/charts/engine/three-d/geometry.js +545 -0
  422. package/dist/charts/engine/three-d/geometry.js.map +1 -0
  423. package/dist/charts/engine/three-d/hover.cjs +2 -0
  424. package/dist/charts/engine/three-d/hover.cjs.map +1 -0
  425. package/dist/charts/engine/three-d/hover.d.cts +25 -0
  426. package/dist/charts/engine/three-d/hover.d.ts +25 -0
  427. package/dist/charts/engine/three-d/hover.js +131 -0
  428. package/dist/charts/engine/three-d/hover.js.map +1 -0
  429. package/dist/charts/engine/three-d/index.cjs +1 -0
  430. package/dist/charts/engine/three-d/index.d.cts +2 -0
  431. package/dist/charts/engine/three-d/index.d.ts +2 -0
  432. package/dist/charts/engine/three-d/index.js +2 -0
  433. package/dist/charts/engine/three-d/labels.cjs +2 -0
  434. package/dist/charts/engine/three-d/labels.cjs.map +1 -0
  435. package/dist/charts/engine/three-d/labels.d.cts +23 -0
  436. package/dist/charts/engine/three-d/labels.d.ts +23 -0
  437. package/dist/charts/engine/three-d/labels.js +136 -0
  438. package/dist/charts/engine/three-d/labels.js.map +1 -0
  439. package/dist/charts/engine/three-d/math.cjs +2 -0
  440. package/dist/charts/engine/three-d/math.cjs.map +1 -0
  441. package/dist/charts/engine/three-d/math.d.cts +84 -0
  442. package/dist/charts/engine/three-d/math.d.ts +84 -0
  443. package/dist/charts/engine/three-d/math.js +150 -0
  444. package/dist/charts/engine/three-d/math.js.map +1 -0
  445. package/dist/charts/engine/three-d/model.cjs +2 -0
  446. package/dist/charts/engine/three-d/model.cjs.map +1 -0
  447. package/dist/charts/engine/three-d/model.d.cts +132 -0
  448. package/dist/charts/engine/three-d/model.d.ts +132 -0
  449. package/dist/charts/engine/three-d/model.js +279 -0
  450. package/dist/charts/engine/three-d/model.js.map +1 -0
  451. package/dist/charts/engine/three-d/overlay.cjs +2 -0
  452. package/dist/charts/engine/three-d/overlay.cjs.map +1 -0
  453. package/dist/charts/engine/three-d/overlay.d.cts +72 -0
  454. package/dist/charts/engine/three-d/overlay.d.ts +72 -0
  455. package/dist/charts/engine/three-d/overlay.js +204 -0
  456. package/dist/charts/engine/three-d/overlay.js.map +1 -0
  457. package/dist/charts/engine/three-d/pick.cjs +2 -0
  458. package/dist/charts/engine/three-d/pick.cjs.map +1 -0
  459. package/dist/charts/engine/three-d/pick.d.cts +52 -0
  460. package/dist/charts/engine/three-d/pick.d.ts +52 -0
  461. package/dist/charts/engine/three-d/pick.js +220 -0
  462. package/dist/charts/engine/three-d/pick.js.map +1 -0
  463. package/dist/charts/engine/three-d/render-types.cjs +2 -0
  464. package/dist/charts/engine/three-d/render-types.cjs.map +1 -0
  465. package/dist/charts/engine/three-d/render-types.d.cts +103 -0
  466. package/dist/charts/engine/three-d/render-types.d.ts +103 -0
  467. package/dist/charts/engine/three-d/render-types.js +12 -0
  468. package/dist/charts/engine/three-d/render-types.js.map +1 -0
  469. package/dist/charts/engine/three-d/shaders.cjs +311 -0
  470. package/dist/charts/engine/three-d/shaders.cjs.map +1 -0
  471. package/dist/charts/engine/three-d/shaders.d.cts +25 -0
  472. package/dist/charts/engine/three-d/shaders.d.ts +25 -0
  473. package/dist/charts/engine/three-d/shaders.js +210 -0
  474. package/dist/charts/engine/three-d/shaders.js.map +1 -0
  475. package/dist/charts/engine/three-d/sort.cjs +2 -0
  476. package/dist/charts/engine/three-d/sort.cjs.map +1 -0
  477. package/dist/charts/engine/three-d/sort.d.cts +29 -0
  478. package/dist/charts/engine/three-d/sort.d.ts +29 -0
  479. package/dist/charts/engine/three-d/sort.js +145 -0
  480. package/dist/charts/engine/three-d/sort.js.map +1 -0
  481. package/dist/charts/engine/three-d/types.d.cts +615 -0
  482. package/dist/charts/engine/three-d/types.d.ts +615 -0
  483. package/dist/charts/engine/three-d/webgl.cjs +2 -0
  484. package/dist/charts/engine/three-d/webgl.cjs.map +1 -0
  485. package/dist/charts/engine/three-d/webgl.d.cts +10 -0
  486. package/dist/charts/engine/three-d/webgl.d.ts +10 -0
  487. package/dist/charts/engine/three-d/webgl.js +132 -0
  488. package/dist/charts/engine/three-d/webgl.js.map +1 -0
  489. package/dist/charts/engine/three-d/webgpu.cjs +2 -0
  490. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -0
  491. package/dist/charts/engine/three-d/webgpu.d.cts +5 -0
  492. package/dist/charts/engine/three-d/webgpu.d.ts +5 -0
  493. package/dist/charts/engine/three-d/webgpu.js +260 -0
  494. package/dist/charts/engine/three-d/webgpu.js.map +1 -0
  495. package/dist/charts/engine/time.cjs +1 -1
  496. package/dist/charts/engine/time.cjs.map +1 -1
  497. package/dist/charts/engine/time.d.cts +13 -4
  498. package/dist/charts/engine/time.d.ts +13 -4
  499. package/dist/charts/engine/time.js +156 -91
  500. package/dist/charts/engine/time.js.map +1 -1
  501. package/dist/charts/engine/trading/chart.cjs +2 -0
  502. package/dist/charts/engine/trading/chart.cjs.map +1 -0
  503. package/dist/charts/engine/trading/chart.d.cts +13 -0
  504. package/dist/charts/engine/trading/chart.d.ts +13 -0
  505. package/dist/charts/engine/trading/chart.js +2206 -0
  506. package/dist/charts/engine/trading/chart.js.map +1 -0
  507. package/dist/charts/engine/trading/drawings.cjs +3 -0
  508. package/dist/charts/engine/trading/drawings.cjs.map +1 -0
  509. package/dist/charts/engine/trading/drawings.d.cts +95 -0
  510. package/dist/charts/engine/trading/drawings.d.ts +95 -0
  511. package/dist/charts/engine/trading/drawings.js +423 -0
  512. package/dist/charts/engine/trading/drawings.js.map +1 -0
  513. package/dist/charts/engine/trading/format.cjs +2 -0
  514. package/dist/charts/engine/trading/format.cjs.map +1 -0
  515. package/dist/charts/engine/trading/format.d.cts +73 -0
  516. package/dist/charts/engine/trading/format.d.ts +73 -0
  517. package/dist/charts/engine/trading/format.js +163 -0
  518. package/dist/charts/engine/trading/format.js.map +1 -0
  519. package/dist/charts/engine/trading/geometry.cjs +2 -0
  520. package/dist/charts/engine/trading/geometry.cjs.map +1 -0
  521. package/dist/charts/engine/trading/geometry.d.cts +55 -0
  522. package/dist/charts/engine/trading/geometry.d.ts +55 -0
  523. package/dist/charts/engine/trading/geometry.js +131 -0
  524. package/dist/charts/engine/trading/geometry.js.map +1 -0
  525. package/dist/charts/engine/trading/index.cjs +1 -0
  526. package/dist/charts/engine/trading/index.d.cts +4 -0
  527. package/dist/charts/engine/trading/index.d.ts +4 -0
  528. package/dist/charts/engine/trading/index.js +4 -0
  529. package/dist/charts/engine/trading/indicators.cjs +2 -0
  530. package/dist/charts/engine/trading/indicators.cjs.map +1 -0
  531. package/dist/charts/engine/trading/indicators.d.cts +275 -0
  532. package/dist/charts/engine/trading/indicators.d.ts +275 -0
  533. package/dist/charts/engine/trading/indicators.js +544 -0
  534. package/dist/charts/engine/trading/indicators.js.map +1 -0
  535. package/dist/charts/engine/trading/labels.cjs +2 -0
  536. package/dist/charts/engine/trading/labels.cjs.map +1 -0
  537. package/dist/charts/engine/trading/labels.d.cts +7 -0
  538. package/dist/charts/engine/trading/labels.d.ts +7 -0
  539. package/dist/charts/engine/trading/labels.js +171 -0
  540. package/dist/charts/engine/trading/labels.js.map +1 -0
  541. package/dist/charts/engine/trading/scale.cjs +2 -0
  542. package/dist/charts/engine/trading/scale.cjs.map +1 -0
  543. package/dist/charts/engine/trading/scale.d.cts +46 -0
  544. package/dist/charts/engine/trading/scale.d.ts +46 -0
  545. package/dist/charts/engine/trading/scale.js +100 -0
  546. package/dist/charts/engine/trading/scale.js.map +1 -0
  547. package/dist/charts/engine/trading/store.cjs +2 -0
  548. package/dist/charts/engine/trading/store.cjs.map +1 -0
  549. package/dist/charts/engine/trading/store.d.cts +83 -0
  550. package/dist/charts/engine/trading/store.d.ts +83 -0
  551. package/dist/charts/engine/trading/store.js +150 -0
  552. package/dist/charts/engine/trading/store.js.map +1 -0
  553. package/dist/charts/engine/trading/studies.cjs +2 -0
  554. package/dist/charts/engine/trading/studies.cjs.map +1 -0
  555. package/dist/charts/engine/trading/studies.d.cts +85 -0
  556. package/dist/charts/engine/trading/studies.d.ts +85 -0
  557. package/dist/charts/engine/trading/studies.js +510 -0
  558. package/dist/charts/engine/trading/studies.js.map +1 -0
  559. package/dist/charts/engine/trading/sync.cjs +2 -0
  560. package/dist/charts/engine/trading/sync.cjs.map +1 -0
  561. package/dist/charts/engine/trading/sync.d.cts +8 -0
  562. package/dist/charts/engine/trading/sync.d.ts +8 -0
  563. package/dist/charts/engine/trading/sync.js +25 -0
  564. package/dist/charts/engine/trading/sync.js.map +1 -0
  565. package/dist/charts/engine/trading/types.d.cts +1131 -0
  566. package/dist/charts/engine/trading/types.d.ts +1131 -0
  567. package/dist/charts/engine/types.d.cts +247 -22
  568. package/dist/charts/engine/types.d.ts +247 -22
  569. package/dist/charts/index.cjs +1 -1
  570. package/dist/charts/index.d.cts +8 -4
  571. package/dist/charts/index.d.ts +8 -4
  572. package/dist/charts/index.js +30 -11
  573. package/dist/charts/react/Chart.cjs +1 -1
  574. package/dist/charts/react/Chart.cjs.map +1 -1
  575. package/dist/charts/react/Chart.d.cts +4 -4
  576. package/dist/charts/react/Chart.d.ts +4 -4
  577. package/dist/charts/react/Chart.js +5 -1
  578. package/dist/charts/react/Chart.js.map +1 -1
  579. package/dist/charts/react/charts.cjs +1 -1
  580. package/dist/charts/react/charts.cjs.map +1 -1
  581. package/dist/charts/react/charts.d.cts +39 -1
  582. package/dist/charts/react/charts.d.ts +39 -1
  583. package/dist/charts/react/charts.js +312 -128
  584. package/dist/charts/react/charts.js.map +1 -1
  585. package/dist/charts/react/graph.cjs +2 -0
  586. package/dist/charts/react/graph.cjs.map +1 -0
  587. package/dist/charts/react/graph.d.cts +213 -0
  588. package/dist/charts/react/graph.d.ts +213 -0
  589. package/dist/charts/react/graph.js +159 -0
  590. package/dist/charts/react/graph.js.map +1 -0
  591. package/dist/charts/react/orderbook.cjs +2 -0
  592. package/dist/charts/react/orderbook.cjs.map +1 -0
  593. package/dist/charts/react/orderbook.d.cts +142 -0
  594. package/dist/charts/react/orderbook.d.ts +142 -0
  595. package/dist/charts/react/orderbook.js +182 -0
  596. package/dist/charts/react/orderbook.js.map +1 -0
  597. package/dist/charts/react/shapes.cjs +1 -1
  598. package/dist/charts/react/shapes.cjs.map +1 -1
  599. package/dist/charts/react/shapes.d.cts +374 -9
  600. package/dist/charts/react/shapes.d.ts +374 -9
  601. package/dist/charts/react/shapes.js +323 -93
  602. package/dist/charts/react/shapes.js.map +1 -1
  603. package/dist/charts/react/three-d.cjs +2 -0
  604. package/dist/charts/react/three-d.cjs.map +1 -0
  605. package/dist/charts/react/three-d.d.cts +151 -0
  606. package/dist/charts/react/three-d.d.ts +151 -0
  607. package/dist/charts/react/three-d.js +154 -0
  608. package/dist/charts/react/three-d.js.map +1 -0
  609. package/dist/charts/react/trading.cjs +2 -0
  610. package/dist/charts/react/trading.cjs.map +1 -0
  611. package/dist/charts/react/trading.d.cts +145 -0
  612. package/dist/charts/react/trading.d.ts +145 -0
  613. package/dist/charts/react/trading.js +126 -0
  614. package/dist/charts/react/trading.js.map +1 -0
  615. package/dist/charts/react/types.d.cts +143 -8
  616. package/dist/charts/react/types.d.ts +143 -8
  617. package/dist/core/contracts.cjs +1 -1
  618. package/dist/core/contracts.cjs.map +1 -1
  619. package/dist/core/contracts.js +1 -1
  620. package/dist/core/contracts.js.map +1 -1
  621. package/dist/native/charts/src/canvas.cjs +1 -1
  622. package/dist/native/charts/src/canvas.js +9 -3
  623. package/dist/native/charts/src/engine/axis.cjs +1 -1
  624. package/dist/native/charts/src/engine/axis.cjs.map +1 -1
  625. package/dist/native/charts/src/engine/axis.js +43 -20
  626. package/dist/native/charts/src/engine/axis.js.map +1 -1
  627. package/dist/native/charts/src/engine/color.cjs +1 -1
  628. package/dist/native/charts/src/engine/color.cjs.map +1 -1
  629. package/dist/native/charts/src/engine/color.js +47 -5
  630. package/dist/native/charts/src/engine/color.js.map +1 -1
  631. package/dist/native/charts/src/engine/controller.cjs +2 -2
  632. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  633. package/dist/native/charts/src/engine/controller.js +415 -308
  634. package/dist/native/charts/src/engine/controller.js.map +1 -1
  635. package/dist/native/charts/src/engine/data.cjs +1 -1
  636. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  637. package/dist/native/charts/src/engine/data.js +65 -49
  638. package/dist/native/charts/src/engine/data.js.map +1 -1
  639. package/dist/native/charts/src/engine/format.cjs +1 -1
  640. package/dist/native/charts/src/engine/format.cjs.map +1 -1
  641. package/dist/native/charts/src/engine/format.js +59 -21
  642. package/dist/native/charts/src/engine/format.js.map +1 -1
  643. package/dist/native/charts/src/engine/labels.cjs +2 -0
  644. package/dist/native/charts/src/engine/labels.cjs.map +1 -0
  645. package/dist/native/charts/src/engine/labels.js +98 -0
  646. package/dist/native/charts/src/engine/labels.js.map +1 -0
  647. package/dist/native/charts/src/engine/layout.cjs +1 -1
  648. package/dist/native/charts/src/engine/layout.cjs.map +1 -1
  649. package/dist/native/charts/src/engine/layout.js +62 -12
  650. package/dist/native/charts/src/engine/layout.js.map +1 -1
  651. package/dist/native/charts/src/engine/locale.cjs +2 -0
  652. package/dist/native/charts/src/engine/locale.cjs.map +1 -0
  653. package/dist/native/charts/src/engine/locale.js +60 -0
  654. package/dist/native/charts/src/engine/locale.js.map +1 -0
  655. package/dist/native/charts/src/engine/model.cjs +1 -1
  656. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  657. package/dist/native/charts/src/engine/model.js +307 -119
  658. package/dist/native/charts/src/engine/model.js.map +1 -1
  659. package/dist/native/charts/src/engine/overlay.cjs +1 -1
  660. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  661. package/dist/native/charts/src/engine/overlay.js +46 -23
  662. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  663. package/dist/native/charts/src/engine/presets.cjs +2 -2
  664. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  665. package/dist/native/charts/src/engine/presets.js +470 -41
  666. package/dist/native/charts/src/engine/presets.js.map +1 -1
  667. package/dist/native/charts/src/engine/scale.cjs +1 -1
  668. package/dist/native/charts/src/engine/scale.cjs.map +1 -1
  669. package/dist/native/charts/src/engine/scale.js +1 -1
  670. package/dist/native/charts/src/engine/scale.js.map +1 -1
  671. package/dist/native/charts/src/engine/scene.cjs +1 -1
  672. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  673. package/dist/native/charts/src/engine/scene.js +489 -207
  674. package/dist/native/charts/src/engine/scene.js.map +1 -1
  675. package/dist/native/charts/src/engine/shapes/bullet.cjs +2 -0
  676. package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -0
  677. package/dist/native/charts/src/engine/shapes/bullet.js +255 -0
  678. package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -0
  679. package/dist/native/charts/src/engine/shapes/calendar.cjs +2 -0
  680. package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -0
  681. package/dist/native/charts/src/engine/shapes/calendar.js +369 -0
  682. package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -0
  683. package/dist/native/charts/src/engine/shapes/canvas.cjs +2 -0
  684. package/dist/native/charts/src/engine/shapes/canvas.cjs.map +1 -0
  685. package/dist/native/charts/src/engine/shapes/canvas.js +168 -0
  686. package/dist/native/charts/src/engine/shapes/canvas.js.map +1 -0
  687. package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
  688. package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
  689. package/dist/native/charts/src/engine/shapes/chord.js +414 -0
  690. package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
  691. package/dist/native/charts/src/engine/shapes/draw.cjs +2 -0
  692. package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -0
  693. package/dist/native/charts/src/engine/shapes/draw.js +195 -0
  694. package/dist/native/charts/src/engine/shapes/draw.js.map +1 -0
  695. package/dist/native/charts/src/engine/shapes/funnel.cjs +2 -0
  696. package/dist/native/charts/src/engine/shapes/funnel.cjs.map +1 -0
  697. package/dist/native/charts/src/engine/shapes/funnel.js +149 -0
  698. package/dist/native/charts/src/engine/shapes/funnel.js.map +1 -0
  699. package/dist/native/charts/src/engine/shapes/gauge.cjs +2 -0
  700. package/dist/native/charts/src/engine/shapes/gauge.cjs.map +1 -0
  701. package/dist/native/charts/src/engine/shapes/gauge.js +210 -0
  702. package/dist/native/charts/src/engine/shapes/gauge.js.map +1 -0
  703. package/dist/native/charts/src/engine/shapes/hit.cjs +2 -0
  704. package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -0
  705. package/dist/native/charts/src/engine/shapes/hit.js +135 -0
  706. package/dist/native/charts/src/engine/shapes/hit.js.map +1 -0
  707. package/dist/native/charts/src/engine/shapes/labels.cjs +2 -0
  708. package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -0
  709. package/dist/native/charts/src/engine/shapes/labels.js +154 -0
  710. package/dist/native/charts/src/engine/shapes/labels.js.map +1 -0
  711. package/dist/native/charts/src/engine/shapes/layout.cjs +3 -0
  712. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -0
  713. package/dist/native/charts/src/engine/shapes/layout.js +358 -0
  714. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -0
  715. package/dist/native/charts/src/engine/shapes/pie.cjs +2 -0
  716. package/dist/native/charts/src/engine/shapes/pie.cjs.map +1 -0
  717. package/dist/native/charts/src/engine/shapes/pie.js +302 -0
  718. package/dist/native/charts/src/engine/shapes/pie.js.map +1 -0
  719. package/dist/native/charts/src/engine/shapes/radar.cjs +2 -0
  720. package/dist/native/charts/src/engine/shapes/radar.cjs.map +1 -0
  721. package/dist/native/charts/src/engine/shapes/radar.js +198 -0
  722. package/dist/native/charts/src/engine/shapes/radar.js.map +1 -0
  723. package/dist/native/charts/src/engine/shapes/radialBar.cjs +2 -0
  724. package/dist/native/charts/src/engine/shapes/radialBar.cjs.map +1 -0
  725. package/dist/native/charts/src/engine/shapes/radialBar.js +155 -0
  726. package/dist/native/charts/src/engine/shapes/radialBar.js.map +1 -0
  727. package/dist/native/charts/src/engine/shapes/runtime.cjs +2 -0
  728. package/dist/native/charts/src/engine/shapes/runtime.cjs.map +1 -0
  729. package/dist/native/charts/src/engine/shapes/runtime.js +107 -0
  730. package/dist/native/charts/src/engine/shapes/runtime.js.map +1 -0
  731. package/dist/native/charts/src/engine/shapes/sankey.cjs +2 -0
  732. package/dist/native/charts/src/engine/shapes/sankey.cjs.map +1 -0
  733. package/dist/native/charts/src/engine/shapes/sankey.js +372 -0
  734. package/dist/native/charts/src/engine/shapes/sankey.js.map +1 -0
  735. package/dist/native/charts/src/engine/shapes/scene.cjs +2 -0
  736. package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -0
  737. package/dist/native/charts/src/engine/shapes/scene.js +168 -0
  738. package/dist/native/charts/src/engine/shapes/scene.js.map +1 -0
  739. package/dist/native/charts/src/engine/shapes/sunburst.cjs +2 -0
  740. package/dist/native/charts/src/engine/shapes/sunburst.cjs.map +1 -0
  741. package/dist/native/charts/src/engine/shapes/sunburst.js +261 -0
  742. package/dist/native/charts/src/engine/shapes/sunburst.js.map +1 -0
  743. package/dist/native/charts/src/engine/shapes/treemap.cjs +2 -0
  744. package/dist/native/charts/src/engine/shapes/treemap.cjs.map +1 -0
  745. package/dist/native/charts/src/engine/shapes/treemap.js +213 -0
  746. package/dist/native/charts/src/engine/shapes/treemap.js.map +1 -0
  747. package/dist/native/charts/src/engine/time.cjs +1 -1
  748. package/dist/native/charts/src/engine/time.cjs.map +1 -1
  749. package/dist/native/charts/src/engine/time.js +156 -91
  750. package/dist/native/charts/src/engine/time.js.map +1 -1
  751. package/dist/native/components/Chart/ChartBase.cjs +1 -1
  752. package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
  753. package/dist/native/components/Chart/ChartBase.d.cts +1 -1
  754. package/dist/native/components/Chart/ChartBase.d.ts +1 -1
  755. package/dist/native/components/Chart/ChartBase.js +110 -107
  756. package/dist/native/components/Chart/ChartBase.js.map +1 -1
  757. package/dist/native/components/Chart/charts.cjs +1 -1
  758. package/dist/native/components/Chart/charts.cjs.map +1 -1
  759. package/dist/native/components/Chart/charts.d.cts +6 -1
  760. package/dist/native/components/Chart/charts.d.ts +6 -1
  761. package/dist/native/components/Chart/charts.js +53 -29
  762. package/dist/native/components/Chart/charts.js.map +1 -1
  763. package/dist/native/components/Chart/index.cjs +1 -1
  764. package/dist/native/components/Chart/index.d.cts +1 -1
  765. package/dist/native/components/Chart/index.d.ts +1 -1
  766. package/dist/native/components/Chart/index.js +2 -2
  767. package/dist/native/components/Chart/scene.cjs +1 -1
  768. package/dist/native/components/Chart/scene.cjs.map +1 -1
  769. package/dist/native/components/Chart/scene.js +315 -229
  770. package/dist/native/components/Chart/scene.js.map +1 -1
  771. package/dist/native/components/Chart/types.d.cts +26 -3
  772. package/dist/native/components/Chart/types.d.ts +26 -3
  773. package/dist/native/components/Charts/charts.cjs +2 -0
  774. package/dist/native/components/Charts/charts.cjs.map +1 -0
  775. package/dist/native/components/Charts/charts.d.cts +41 -0
  776. package/dist/native/components/Charts/charts.d.ts +41 -0
  777. package/dist/native/components/Charts/charts.js +350 -0
  778. package/dist/native/components/Charts/charts.js.map +1 -0
  779. package/dist/native/components/Charts/index.cjs +1 -0
  780. package/dist/native/components/Charts/index.d.cts +2 -0
  781. package/dist/native/components/Charts/index.d.ts +2 -0
  782. package/dist/native/components/Charts/index.js +2 -0
  783. package/dist/native/components/Charts/types.d.cts +155 -0
  784. package/dist/native/components/Charts/types.d.ts +155 -0
  785. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +2 -0
  786. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -0
  787. package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +24 -0
  788. package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +24 -0
  789. package/dist/native/components/ShapeChart/ShapeChartBase.js +272 -0
  790. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -0
  791. package/dist/native/components/ShapeChart/charts.cjs +2 -0
  792. package/dist/native/components/ShapeChart/charts.cjs.map +1 -0
  793. package/dist/native/components/ShapeChart/charts.d.cts +43 -0
  794. package/dist/native/components/ShapeChart/charts.d.ts +43 -0
  795. package/dist/native/components/ShapeChart/charts.js +429 -0
  796. package/dist/native/components/ShapeChart/charts.js.map +1 -0
  797. package/dist/native/components/ShapeChart/draw.cjs +2 -0
  798. package/dist/native/components/ShapeChart/draw.cjs.map +1 -0
  799. package/dist/native/components/ShapeChart/draw.d.cts +4 -0
  800. package/dist/native/components/ShapeChart/draw.d.ts +4 -0
  801. package/dist/native/components/ShapeChart/draw.js +113 -0
  802. package/dist/native/components/ShapeChart/draw.js.map +1 -0
  803. package/dist/native/components/ShapeChart/geometry.cjs +2 -0
  804. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -0
  805. package/dist/native/components/ShapeChart/geometry.d.cts +71 -0
  806. package/dist/native/components/ShapeChart/geometry.d.ts +71 -0
  807. package/dist/native/components/ShapeChart/geometry.js +681 -0
  808. package/dist/native/components/ShapeChart/geometry.js.map +1 -0
  809. package/dist/native/components/ShapeChart/index.cjs +1 -0
  810. package/dist/native/components/ShapeChart/index.d.cts +2 -0
  811. package/dist/native/components/ShapeChart/index.d.ts +2 -0
  812. package/dist/native/components/ShapeChart/index.js +2 -0
  813. package/dist/native/components/ShapeChart/recorder.cjs +2 -0
  814. package/dist/native/components/ShapeChart/recorder.cjs.map +1 -0
  815. package/dist/native/components/ShapeChart/recorder.d.cts +115 -0
  816. package/dist/native/components/ShapeChart/recorder.d.ts +115 -0
  817. package/dist/native/components/ShapeChart/recorder.js +583 -0
  818. package/dist/native/components/ShapeChart/recorder.js.map +1 -0
  819. package/dist/native/components/ShapeChart/types.d.cts +594 -0
  820. package/dist/native/components/ShapeChart/types.d.ts +594 -0
  821. package/dist/native/index.cjs +1 -1
  822. package/dist/native/index.d.cts +2 -0
  823. package/dist/native/index.d.ts +2 -0
  824. package/dist/native/index.js +14 -10
  825. package/dist/native/manifest.d.cts +6 -4
  826. package/dist/native/manifest.d.ts +6 -4
  827. package/dist/native/source/components/Chart/ChartBase.tsx +8 -1
  828. package/dist/native/source/components/Chart/charts.tsx +42 -6
  829. package/dist/native/source/components/Chart/index.ts +1 -0
  830. package/dist/native/source/components/Chart/scene.tsx +312 -98
  831. package/dist/native/source/components/Chart/types.ts +31 -1
  832. package/dist/native/source/components/Charts/charts.tsx +521 -0
  833. package/dist/native/source/components/Charts/index.ts +14 -0
  834. package/dist/native/source/components/Charts/types.ts +218 -0
  835. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +486 -0
  836. package/dist/native/source/components/ShapeChart/charts.tsx +661 -0
  837. package/dist/native/source/components/ShapeChart/draw.tsx +201 -0
  838. package/dist/native/source/components/ShapeChart/geometry.ts +1366 -0
  839. package/dist/native/source/components/ShapeChart/index.ts +16 -0
  840. package/dist/native/source/components/ShapeChart/recorder.ts +845 -0
  841. package/dist/native/source/components/ShapeChart/types.ts +655 -0
  842. package/dist/native/source/index.ts +2 -0
  843. package/dist/native/source/manifest.ts +31 -4
  844. package/dist/taro/charts.d.ts +229 -4
  845. package/dist/taro/index.d.ts +1 -0
  846. package/dist/taro/index.js +8818 -2093
  847. package/dist/taro/manifest.d.ts +1 -0
  848. package/dist/taro/shape-charts.d.ts +629 -0
  849. package/dist/uni/AreaChart.vue +68 -0
  850. package/dist/uni/AreaChart.vue.d.ts +124 -0
  851. package/dist/uni/Badge.vue.d.ts +1 -1
  852. package/dist/uni/BarChart.vue.d.ts +5 -1
  853. package/dist/uni/BoxPlotChart.vue +66 -0
  854. package/dist/uni/BoxPlotChart.vue.d.ts +110 -0
  855. package/dist/uni/BubbleChart.vue +68 -0
  856. package/dist/uni/BubbleChart.vue.d.ts +110 -0
  857. package/dist/uni/BulletChart.vue +86 -0
  858. package/dist/uni/BulletChart.vue.d.ts +114 -0
  859. package/dist/uni/CalendarHeatmap.vue +92 -0
  860. package/dist/uni/CalendarHeatmap.vue.d.ts +131 -0
  861. package/dist/uni/CandlestickChart.vue +66 -0
  862. package/dist/uni/CandlestickChart.vue.d.ts +104 -0
  863. package/dist/uni/Chart.vue.d.ts +4 -0
  864. package/dist/uni/ChordChart.vue +93 -0
  865. package/dist/uni/ChordChart.vue.d.ts +136 -0
  866. package/dist/uni/DonutChart.vue +72 -0
  867. package/dist/uni/DonutChart.vue.d.ts +118 -0
  868. package/dist/uni/FunnelChart.vue +67 -0
  869. package/dist/uni/FunnelChart.vue.d.ts +108 -0
  870. package/dist/uni/GanttChart.vue +67 -0
  871. package/dist/uni/GanttChart.vue.d.ts +127 -0
  872. package/dist/uni/GaugeChart.vue +77 -0
  873. package/dist/uni/GaugeChart.vue.d.ts +127 -0
  874. package/dist/uni/HeatmapChart.vue +66 -0
  875. package/dist/uni/HeatmapChart.vue.d.ts +120 -0
  876. package/dist/uni/HistogramChart.vue +66 -0
  877. package/dist/uni/HistogramChart.vue.d.ts +125 -0
  878. package/dist/uni/HorizontalBarChart.vue +68 -0
  879. package/dist/uni/HorizontalBarChart.vue.d.ts +129 -0
  880. package/dist/uni/Input.vue.d.ts +1 -1
  881. package/dist/uni/LineChart.vue.d.ts +4 -0
  882. package/dist/uni/MixedChart.vue +68 -0
  883. package/dist/uni/MixedChart.vue.d.ts +110 -0
  884. package/dist/uni/NumberInput.vue.d.ts +1 -1
  885. package/dist/uni/PieChart.vue +72 -0
  886. package/dist/uni/PieChart.vue.d.ts +118 -0
  887. package/dist/uni/QuadrantChart.vue.d.ts +4 -0
  888. package/dist/uni/RadarChart.vue +67 -0
  889. package/dist/uni/RadarChart.vue.d.ts +114 -0
  890. package/dist/uni/RadialBarChart.vue +90 -0
  891. package/dist/uni/RadialBarChart.vue.d.ts +136 -0
  892. package/dist/uni/RangeAreaChart.vue +68 -0
  893. package/dist/uni/RangeAreaChart.vue.d.ts +106 -0
  894. package/dist/uni/ResponsiveGrid.vue.d.ts +1 -1
  895. package/dist/uni/SankeyChart.vue +88 -0
  896. package/dist/uni/SankeyChart.vue.d.ts +125 -0
  897. package/dist/uni/ScatterChart.vue.d.ts +4 -0
  898. package/dist/uni/ShapeChart.vue +73 -0
  899. package/dist/uni/ShapeChart.vue.d.ts +54 -0
  900. package/dist/uni/Sparkline.vue +58 -0
  901. package/dist/uni/Sparkline.vue.d.ts +81 -0
  902. package/dist/uni/SunburstChart.vue +90 -0
  903. package/dist/uni/SunburstChart.vue.d.ts +118 -0
  904. package/dist/uni/Textarea.vue.d.ts +1 -1
  905. package/dist/uni/TimePicker.vue.d.ts +1 -1
  906. package/dist/uni/ToastProvider.vue.d.ts +1 -1
  907. package/dist/uni/TreemapChart.vue +65 -0
  908. package/dist/uni/TreemapChart.vue.d.ts +104 -0
  909. package/dist/uni/WaterfallChart.vue +66 -0
  910. package/dist/uni/WaterfallChart.vue.d.ts +134 -0
  911. package/dist/uni/chart-canvas.d.ts +3 -0
  912. package/dist/uni/chart-canvas.js +4 -0
  913. package/dist/uni/chart-types.d.ts +240 -2
  914. package/dist/uni/chart-types.js +198 -0
  915. package/dist/uni/charts-canvas.js +8 -3
  916. package/dist/uni/index.d.ts +27 -1
  917. package/dist/uni/index.js +27 -1
  918. package/dist/uni/manifest.d.ts +279 -0
  919. package/dist/uni/manifest.js +397 -0
  920. package/dist/uni/named-chart-options.d.ts +95 -0
  921. package/dist/uni/named-chart-options.js +173 -0
  922. package/dist/uni/shape-chart-canvas.d.ts +53 -0
  923. package/dist/uni/shape-chart-canvas.js +333 -0
  924. package/dist/uni/shape-chart-types.d.ts +431 -0
  925. package/dist/uni/shape-chart-types.js +305 -0
  926. package/dist/vue/charts-global.d.ts +48 -0
  927. package/dist/vue/charts.d.ts +18 -0
  928. package/dist/vue/charts.js +56 -0
  929. package/dist/vue/charts.js.map +1 -0
  930. package/dist/vue/components/Chart/AreaChart.vue.d.ts +124 -0
  931. package/dist/vue/components/Chart/AreaChart.vue.js +7 -0
  932. package/dist/vue/components/Chart/AreaChart.vue.js.map +1 -0
  933. package/dist/vue/components/Chart/AreaChart.vue_vue_type_script_setup_true_lang.js +49 -0
  934. package/dist/vue/components/Chart/AreaChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  935. package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +132 -0
  936. package/dist/vue/components/Chart/Bar3DChart.vue.js +7 -0
  937. package/dist/vue/components/Chart/Bar3DChart.vue.js.map +1 -0
  938. package/dist/vue/components/Chart/Bar3DChart.vue_vue_type_script_setup_true_lang.js +55 -0
  939. package/dist/vue/components/Chart/Bar3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  940. package/dist/vue/components/Chart/BarChart.vue.d.ts +123 -0
  941. package/dist/vue/components/Chart/BarChart.vue.js +7 -0
  942. package/dist/vue/components/Chart/BarChart.vue.js.map +1 -0
  943. package/dist/vue/components/Chart/BarChart.vue_vue_type_script_setup_true_lang.js +53 -0
  944. package/dist/vue/components/Chart/BarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  945. package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +120 -0
  946. package/dist/vue/components/Chart/BoxPlotChart.vue.js +7 -0
  947. package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -0
  948. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +63 -0
  949. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  950. package/dist/vue/components/Chart/BubbleChart.vue.d.ts +106 -0
  951. package/dist/vue/components/Chart/BubbleChart.vue.js +7 -0
  952. package/dist/vue/components/Chart/BubbleChart.vue.js.map +1 -0
  953. package/dist/vue/components/Chart/BubbleChart.vue_vue_type_script_setup_true_lang.js +52 -0
  954. package/dist/vue/components/Chart/BubbleChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  955. package/dist/vue/components/Chart/BulletChart.vue.d.ts +117 -0
  956. package/dist/vue/components/Chart/BulletChart.vue.js +7 -0
  957. package/dist/vue/components/Chart/BulletChart.vue.js.map +1 -0
  958. package/dist/vue/components/Chart/BulletChart.vue_vue_type_script_setup_true_lang.js +64 -0
  959. package/dist/vue/components/Chart/BulletChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  960. package/dist/vue/components/Chart/CalendarHeatmap.vue.d.ts +144 -0
  961. package/dist/vue/components/Chart/CalendarHeatmap.vue.js +7 -0
  962. package/dist/vue/components/Chart/CalendarHeatmap.vue.js.map +1 -0
  963. package/dist/vue/components/Chart/CalendarHeatmap.vue_vue_type_script_setup_true_lang.js +77 -0
  964. package/dist/vue/components/Chart/CalendarHeatmap.vue_vue_type_script_setup_true_lang.js.map +1 -0
  965. package/dist/vue/components/Chart/CandlestickChart.vue.d.ts +94 -0
  966. package/dist/vue/components/Chart/CandlestickChart.vue.js +7 -0
  967. package/dist/vue/components/Chart/CandlestickChart.vue.js.map +1 -0
  968. package/dist/vue/components/Chart/CandlestickChart.vue_vue_type_script_setup_true_lang.js +44 -0
  969. package/dist/vue/components/Chart/CandlestickChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  970. package/dist/vue/components/Chart/Chart.vue.d.ts +103 -0
  971. package/dist/vue/components/Chart/Chart.vue.js +7 -0
  972. package/dist/vue/components/Chart/Chart.vue.js.map +1 -0
  973. package/dist/vue/components/Chart/Chart.vue_vue_type_script_setup_true_lang.js +47 -0
  974. package/dist/vue/components/Chart/Chart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  975. package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
  976. package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
  977. package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
  978. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
  979. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  980. package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +179 -0
  981. package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
  982. package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
  983. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
  984. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
  985. package/dist/vue/components/Chart/DepthChart.vue.d.ts +139 -0
  986. package/dist/vue/components/Chart/DepthChart.vue.js +7 -0
  987. package/dist/vue/components/Chart/DepthChart.vue.js.map +1 -0
  988. package/dist/vue/components/Chart/DepthChart.vue_vue_type_script_setup_true_lang.js +42 -0
  989. package/dist/vue/components/Chart/DepthChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  990. package/dist/vue/components/Chart/DonutChart.vue.d.ts +104 -0
  991. package/dist/vue/components/Chart/DonutChart.vue.js +7 -0
  992. package/dist/vue/components/Chart/DonutChart.vue.js.map +1 -0
  993. package/dist/vue/components/Chart/DonutChart.vue_vue_type_script_setup_true_lang.js +53 -0
  994. package/dist/vue/components/Chart/DonutChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  995. package/dist/vue/components/Chart/FunnelChart.vue.d.ts +105 -0
  996. package/dist/vue/components/Chart/FunnelChart.vue.js +7 -0
  997. package/dist/vue/components/Chart/FunnelChart.vue.js.map +1 -0
  998. package/dist/vue/components/Chart/FunnelChart.vue_vue_type_script_setup_true_lang.js +58 -0
  999. package/dist/vue/components/Chart/FunnelChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1000. package/dist/vue/components/Chart/GanttChart.vue.d.ts +136 -0
  1001. package/dist/vue/components/Chart/GanttChart.vue.js +7 -0
  1002. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -0
  1003. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +101 -0
  1004. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1005. package/dist/vue/components/Chart/GaugeChart.vue.d.ts +132 -0
  1006. package/dist/vue/components/Chart/GaugeChart.vue.js +7 -0
  1007. package/dist/vue/components/Chart/GaugeChart.vue.js.map +1 -0
  1008. package/dist/vue/components/Chart/GaugeChart.vue_vue_type_script_setup_true_lang.js +71 -0
  1009. package/dist/vue/components/Chart/GaugeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1010. package/dist/vue/components/Chart/GraphChart.vue.d.ts +184 -0
  1011. package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
  1012. package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
  1013. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
  1014. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1015. package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +129 -0
  1016. package/dist/vue/components/Chart/HeatmapChart.vue.js +7 -0
  1017. package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -0
  1018. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +67 -0
  1019. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1020. package/dist/vue/components/Chart/HistogramChart.vue.d.ts +132 -0
  1021. package/dist/vue/components/Chart/HistogramChart.vue.js +7 -0
  1022. package/dist/vue/components/Chart/HistogramChart.vue.js.map +1 -0
  1023. package/dist/vue/components/Chart/HistogramChart.vue_vue_type_script_setup_true_lang.js +66 -0
  1024. package/dist/vue/components/Chart/HistogramChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1025. package/dist/vue/components/Chart/HorizontalBarChart.vue.d.ts +121 -0
  1026. package/dist/vue/components/Chart/HorizontalBarChart.vue.js +7 -0
  1027. package/dist/vue/components/Chart/HorizontalBarChart.vue.js.map +1 -0
  1028. package/dist/vue/components/Chart/HorizontalBarChart.vue_vue_type_script_setup_true_lang.js +55 -0
  1029. package/dist/vue/components/Chart/HorizontalBarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1030. package/dist/vue/components/Chart/Line3DChart.vue.d.ts +121 -0
  1031. package/dist/vue/components/Chart/Line3DChart.vue.js +7 -0
  1032. package/dist/vue/components/Chart/Line3DChart.vue.js.map +1 -0
  1033. package/dist/vue/components/Chart/Line3DChart.vue_vue_type_script_setup_true_lang.js +47 -0
  1034. package/dist/vue/components/Chart/Line3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1035. package/dist/vue/components/Chart/LineChart.vue.d.ts +125 -0
  1036. package/dist/vue/components/Chart/LineChart.vue.js +7 -0
  1037. package/dist/vue/components/Chart/LineChart.vue.js.map +1 -0
  1038. package/dist/vue/components/Chart/LineChart.vue_vue_type_script_setup_true_lang.js +50 -0
  1039. package/dist/vue/components/Chart/LineChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1040. package/dist/vue/components/Chart/MixedChart.vue.d.ts +103 -0
  1041. package/dist/vue/components/Chart/MixedChart.vue.js +7 -0
  1042. package/dist/vue/components/Chart/MixedChart.vue.js.map +1 -0
  1043. package/dist/vue/components/Chart/MixedChart.vue_vue_type_script_setup_true_lang.js +47 -0
  1044. package/dist/vue/components/Chart/MixedChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1045. package/dist/vue/components/Chart/OrderBook.vue.d.ts +125 -0
  1046. package/dist/vue/components/Chart/OrderBook.vue.js +7 -0
  1047. package/dist/vue/components/Chart/OrderBook.vue.js.map +1 -0
  1048. package/dist/vue/components/Chart/OrderBook.vue_vue_type_script_setup_true_lang.js +38 -0
  1049. package/dist/vue/components/Chart/OrderBook.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1050. package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +130 -0
  1051. package/dist/vue/components/Chart/OrderBookHeatmap.vue.js +7 -0
  1052. package/dist/vue/components/Chart/OrderBookHeatmap.vue.js.map +1 -0
  1053. package/dist/vue/components/Chart/OrderBookHeatmap.vue_vue_type_script_setup_true_lang.js +46 -0
  1054. package/dist/vue/components/Chart/OrderBookHeatmap.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1055. package/dist/vue/components/Chart/PieChart.vue.d.ts +104 -0
  1056. package/dist/vue/components/Chart/PieChart.vue.js +7 -0
  1057. package/dist/vue/components/Chart/PieChart.vue.js.map +1 -0
  1058. package/dist/vue/components/Chart/PieChart.vue_vue_type_script_setup_true_lang.js +53 -0
  1059. package/dist/vue/components/Chart/PieChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1060. package/dist/vue/components/Chart/QuadrantChart.vue.d.ts +186 -0
  1061. package/dist/vue/components/Chart/QuadrantChart.vue.js +7 -0
  1062. package/dist/vue/components/Chart/QuadrantChart.vue.js.map +1 -0
  1063. package/dist/vue/components/Chart/QuadrantChart.vue_vue_type_script_setup_true_lang.js +107 -0
  1064. package/dist/vue/components/Chart/QuadrantChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1065. package/dist/vue/components/Chart/RadarChart.vue.d.ts +111 -0
  1066. package/dist/vue/components/Chart/RadarChart.vue.js +7 -0
  1067. package/dist/vue/components/Chart/RadarChart.vue.js.map +1 -0
  1068. package/dist/vue/components/Chart/RadarChart.vue_vue_type_script_setup_true_lang.js +61 -0
  1069. package/dist/vue/components/Chart/RadarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1070. package/dist/vue/components/Chart/RadialBarChart.vue.d.ts +147 -0
  1071. package/dist/vue/components/Chart/RadialBarChart.vue.js +7 -0
  1072. package/dist/vue/components/Chart/RadialBarChart.vue.js.map +1 -0
  1073. package/dist/vue/components/Chart/RadialBarChart.vue_vue_type_script_setup_true_lang.js +78 -0
  1074. package/dist/vue/components/Chart/RadialBarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1075. package/dist/vue/components/Chart/RangeAreaChart.vue.d.ts +106 -0
  1076. package/dist/vue/components/Chart/RangeAreaChart.vue.js +7 -0
  1077. package/dist/vue/components/Chart/RangeAreaChart.vue.js.map +1 -0
  1078. package/dist/vue/components/Chart/RangeAreaChart.vue_vue_type_script_setup_true_lang.js +51 -0
  1079. package/dist/vue/components/Chart/RangeAreaChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1080. package/dist/vue/components/Chart/SankeyChart.vue.d.ts +132 -0
  1081. package/dist/vue/components/Chart/SankeyChart.vue.js +7 -0
  1082. package/dist/vue/components/Chart/SankeyChart.vue.js.map +1 -0
  1083. package/dist/vue/components/Chart/SankeyChart.vue_vue_type_script_setup_true_lang.js +71 -0
  1084. package/dist/vue/components/Chart/SankeyChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1085. package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +121 -0
  1086. package/dist/vue/components/Chart/Scatter3DChart.vue.js +7 -0
  1087. package/dist/vue/components/Chart/Scatter3DChart.vue.js.map +1 -0
  1088. package/dist/vue/components/Chart/Scatter3DChart.vue_vue_type_script_setup_true_lang.js +47 -0
  1089. package/dist/vue/components/Chart/Scatter3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1090. package/dist/vue/components/Chart/ScatterChart.vue.d.ts +94 -0
  1091. package/dist/vue/components/Chart/ScatterChart.vue.js +7 -0
  1092. package/dist/vue/components/Chart/ScatterChart.vue.js.map +1 -0
  1093. package/dist/vue/components/Chart/ScatterChart.vue_vue_type_script_setup_true_lang.js +44 -0
  1094. package/dist/vue/components/Chart/ScatterChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1095. package/dist/vue/components/Chart/ShapeChart.vue.d.ts +39 -0
  1096. package/dist/vue/components/Chart/ShapeChart.vue.js +7 -0
  1097. package/dist/vue/components/Chart/ShapeChart.vue.js.map +1 -0
  1098. package/dist/vue/components/Chart/ShapeChart.vue_vue_type_script_setup_true_lang.js +43 -0
  1099. package/dist/vue/components/Chart/ShapeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1100. package/dist/vue/components/Chart/Sparkline.vue.d.ts +90 -0
  1101. package/dist/vue/components/Chart/Sparkline.vue.js +7 -0
  1102. package/dist/vue/components/Chart/Sparkline.vue.js.map +1 -0
  1103. package/dist/vue/components/Chart/Sparkline.vue_vue_type_script_setup_true_lang.js +66 -0
  1104. package/dist/vue/components/Chart/Sparkline.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1105. package/dist/vue/components/Chart/SunburstChart.vue.d.ts +123 -0
  1106. package/dist/vue/components/Chart/SunburstChart.vue.js +7 -0
  1107. package/dist/vue/components/Chart/SunburstChart.vue.js.map +1 -0
  1108. package/dist/vue/components/Chart/SunburstChart.vue_vue_type_script_setup_true_lang.js +68 -0
  1109. package/dist/vue/components/Chart/SunburstChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1110. package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +143 -0
  1111. package/dist/vue/components/Chart/Surface3DChart.vue.js +7 -0
  1112. package/dist/vue/components/Chart/Surface3DChart.vue.js.map +1 -0
  1113. package/dist/vue/components/Chart/Surface3DChart.vue_vue_type_script_setup_true_lang.js +60 -0
  1114. package/dist/vue/components/Chart/Surface3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1115. package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +116 -0
  1116. package/dist/vue/components/Chart/TimeAndSales.vue.js +7 -0
  1117. package/dist/vue/components/Chart/TimeAndSales.vue.js.map +1 -0
  1118. package/dist/vue/components/Chart/TimeAndSales.vue_vue_type_script_setup_true_lang.js +46 -0
  1119. package/dist/vue/components/Chart/TimeAndSales.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1120. package/dist/vue/components/Chart/TradingChart.vue.d.ts +208 -0
  1121. package/dist/vue/components/Chart/TradingChart.vue.js +7 -0
  1122. package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -0
  1123. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +101 -0
  1124. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1125. package/dist/vue/components/Chart/TreeChart.vue.d.ts +172 -0
  1126. package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
  1127. package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
  1128. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
  1129. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1130. package/dist/vue/components/Chart/TreemapChart.vue.d.ts +97 -0
  1131. package/dist/vue/components/Chart/TreemapChart.vue.js +7 -0
  1132. package/dist/vue/components/Chart/TreemapChart.vue.js.map +1 -0
  1133. package/dist/vue/components/Chart/TreemapChart.vue_vue_type_script_setup_true_lang.js +54 -0
  1134. package/dist/vue/components/Chart/TreemapChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1135. package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +143 -0
  1136. package/dist/vue/components/Chart/WaterfallChart.vue.js +7 -0
  1137. package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -0
  1138. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +74 -0
  1139. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  1140. package/dist/vue/components/Chart/cartesian.d.ts +47 -0
  1141. package/dist/vue/components/Chart/cartesian.js +56 -0
  1142. package/dist/vue/components/Chart/cartesian.js.map +1 -0
  1143. package/dist/vue/components/Chart/engine.d.ts +35 -0
  1144. package/dist/vue/components/Chart/engine.js +35 -0
  1145. package/dist/vue/components/Chart/engine.js.map +1 -0
  1146. package/dist/vue/components/Chart/graph.d.ts +153 -0
  1147. package/dist/vue/components/Chart/graph.js +135 -0
  1148. package/dist/vue/components/Chart/graph.js.map +1 -0
  1149. package/dist/vue/components/Chart/index.d.ts +45 -0
  1150. package/dist/vue/components/Chart/index.js +44 -0
  1151. package/dist/vue/components/Chart/orderbook.d.ts +363 -0
  1152. package/dist/vue/components/Chart/orderbook.js +128 -0
  1153. package/dist/vue/components/Chart/orderbook.js.map +1 -0
  1154. package/dist/vue/components/Chart/props.d.ts +188 -0
  1155. package/dist/vue/components/Chart/props.js +92 -0
  1156. package/dist/vue/components/Chart/props.js.map +1 -0
  1157. package/dist/vue/components/Chart/shape.d.ts +41 -0
  1158. package/dist/vue/components/Chart/shape.js +42 -0
  1159. package/dist/vue/components/Chart/shape.js.map +1 -0
  1160. package/dist/vue/components/Chart/three-d.d.ts +106 -0
  1161. package/dist/vue/components/Chart/three-d.js +88 -0
  1162. package/dist/vue/components/Chart/three-d.js.map +1 -0
  1163. package/dist/vue/components/Chart/trading.d.ts +127 -0
  1164. package/dist/vue/components/Chart/trading.js +63 -0
  1165. package/dist/vue/components/Chart/trading.js.map +1 -0
  1166. package/dist/vue/components/Chart/types.d.ts +209 -0
  1167. package/dist/vue/global.d.ts +2 -0
  1168. package/dist/vue/groups/charts.d.ts +1 -0
  1169. package/dist/vue/groups/charts.js +95 -0
  1170. package/dist/vue/groups/charts.js.map +1 -0
  1171. package/dist/vue/index.d.ts +1 -0
  1172. package/dist/vue/index.js +67 -23
  1173. package/dist/vue/internal/register.d.ts +7 -0
  1174. package/dist/vue/internal/register.js +14 -0
  1175. package/dist/vue/internal/register.js.map +1 -0
  1176. package/dist/vue/plugin.d.ts +9 -4
  1177. package/dist/vue/plugin.js +7 -10
  1178. package/dist/vue/plugin.js.map +1 -1
  1179. package/dist/weapp/area-chart/index.js +1 -0
  1180. package/dist/weapp/area-chart/index.json +1 -0
  1181. package/dist/weapp/area-chart/index.wxml +1 -0
  1182. package/dist/weapp/area-chart/index.wxss +1 -0
  1183. package/dist/weapp/box-plot-chart/index.js +1 -0
  1184. package/dist/weapp/box-plot-chart/index.json +1 -0
  1185. package/dist/weapp/box-plot-chart/index.wxml +1 -0
  1186. package/dist/weapp/box-plot-chart/index.wxss +1 -0
  1187. package/dist/weapp/bubble-chart/index.js +1 -0
  1188. package/dist/weapp/bubble-chart/index.json +1 -0
  1189. package/dist/weapp/bubble-chart/index.wxml +1 -0
  1190. package/dist/weapp/bubble-chart/index.wxss +1 -0
  1191. package/dist/weapp/bullet-chart/index.js +1 -0
  1192. package/dist/weapp/bullet-chart/index.json +1 -0
  1193. package/dist/weapp/bullet-chart/index.wxml +1 -0
  1194. package/dist/weapp/bullet-chart/index.wxss +1 -0
  1195. package/dist/weapp/calendar-heatmap/index.js +1 -0
  1196. package/dist/weapp/calendar-heatmap/index.json +1 -0
  1197. package/dist/weapp/calendar-heatmap/index.wxml +1 -0
  1198. package/dist/weapp/calendar-heatmap/index.wxss +1 -0
  1199. package/dist/weapp/candlestick-chart/index.js +1 -0
  1200. package/dist/weapp/candlestick-chart/index.json +1 -0
  1201. package/dist/weapp/candlestick-chart/index.wxml +1 -0
  1202. package/dist/weapp/candlestick-chart/index.wxss +1 -0
  1203. package/dist/weapp/charts/canvas.js +12976 -0
  1204. package/dist/weapp/charts/core.d.ts +2 -0
  1205. package/dist/weapp/charts/core.js +42 -0
  1206. package/dist/weapp/chord-chart/index.js +1 -0
  1207. package/dist/weapp/chord-chart/index.json +1 -0
  1208. package/dist/weapp/chord-chart/index.wxml +1 -0
  1209. package/dist/weapp/chord-chart/index.wxss +1 -0
  1210. package/dist/weapp/controls.js +1495 -4480
  1211. package/dist/weapp/donut-chart/index.js +1 -0
  1212. package/dist/weapp/donut-chart/index.json +1 -0
  1213. package/dist/weapp/donut-chart/index.wxml +1 -0
  1214. package/dist/weapp/donut-chart/index.wxss +1 -0
  1215. package/dist/weapp/funnel-chart/index.js +1 -0
  1216. package/dist/weapp/funnel-chart/index.json +1 -0
  1217. package/dist/weapp/funnel-chart/index.wxml +1 -0
  1218. package/dist/weapp/funnel-chart/index.wxss +1 -0
  1219. package/dist/weapp/gantt-chart/index.js +1 -0
  1220. package/dist/weapp/gantt-chart/index.json +1 -0
  1221. package/dist/weapp/gantt-chart/index.wxml +1 -0
  1222. package/dist/weapp/gantt-chart/index.wxss +1 -0
  1223. package/dist/weapp/gauge-chart/index.js +1 -0
  1224. package/dist/weapp/gauge-chart/index.json +1 -0
  1225. package/dist/weapp/gauge-chart/index.wxml +1 -0
  1226. package/dist/weapp/gauge-chart/index.wxss +1 -0
  1227. package/dist/weapp/heatmap-chart/index.js +1 -0
  1228. package/dist/weapp/heatmap-chart/index.json +1 -0
  1229. package/dist/weapp/heatmap-chart/index.wxml +1 -0
  1230. package/dist/weapp/heatmap-chart/index.wxss +1 -0
  1231. package/dist/weapp/histogram-chart/index.js +1 -0
  1232. package/dist/weapp/histogram-chart/index.json +1 -0
  1233. package/dist/weapp/histogram-chart/index.wxml +1 -0
  1234. package/dist/weapp/histogram-chart/index.wxss +1 -0
  1235. package/dist/weapp/horizontal-bar-chart/index.js +1 -0
  1236. package/dist/weapp/horizontal-bar-chart/index.json +1 -0
  1237. package/dist/weapp/horizontal-bar-chart/index.wxml +1 -0
  1238. package/dist/weapp/horizontal-bar-chart/index.wxss +1 -0
  1239. package/dist/weapp/mixed-chart/index.js +1 -0
  1240. package/dist/weapp/mixed-chart/index.json +1 -0
  1241. package/dist/weapp/mixed-chart/index.wxml +1 -0
  1242. package/dist/weapp/mixed-chart/index.wxss +1 -0
  1243. package/dist/weapp/pie-chart/index.js +1 -0
  1244. package/dist/weapp/pie-chart/index.json +1 -0
  1245. package/dist/weapp/pie-chart/index.wxml +1 -0
  1246. package/dist/weapp/pie-chart/index.wxss +1 -0
  1247. package/dist/weapp/radar-chart/index.js +1 -0
  1248. package/dist/weapp/radar-chart/index.json +1 -0
  1249. package/dist/weapp/radar-chart/index.wxml +1 -0
  1250. package/dist/weapp/radar-chart/index.wxss +1 -0
  1251. package/dist/weapp/radial-bar-chart/index.js +1 -0
  1252. package/dist/weapp/radial-bar-chart/index.json +1 -0
  1253. package/dist/weapp/radial-bar-chart/index.wxml +1 -0
  1254. package/dist/weapp/radial-bar-chart/index.wxss +1 -0
  1255. package/dist/weapp/range-area-chart/index.js +1 -0
  1256. package/dist/weapp/range-area-chart/index.json +1 -0
  1257. package/dist/weapp/range-area-chart/index.wxml +1 -0
  1258. package/dist/weapp/range-area-chart/index.wxss +1 -0
  1259. package/dist/weapp/sankey-chart/index.js +1 -0
  1260. package/dist/weapp/sankey-chart/index.json +1 -0
  1261. package/dist/weapp/sankey-chart/index.wxml +1 -0
  1262. package/dist/weapp/sankey-chart/index.wxss +1 -0
  1263. package/dist/weapp/shape-chart/index.js +1 -0
  1264. package/dist/weapp/shape-chart/index.json +1 -0
  1265. package/dist/weapp/shape-chart/index.wxml +1 -0
  1266. package/dist/weapp/shape-chart/index.wxss +1 -0
  1267. package/dist/weapp/sparkline/index.js +1 -0
  1268. package/dist/weapp/sparkline/index.json +1 -0
  1269. package/dist/weapp/sparkline/index.wxml +1 -0
  1270. package/dist/weapp/sparkline/index.wxss +1 -0
  1271. package/dist/weapp/sunburst-chart/index.js +1 -0
  1272. package/dist/weapp/sunburst-chart/index.json +1 -0
  1273. package/dist/weapp/sunburst-chart/index.wxml +1 -0
  1274. package/dist/weapp/sunburst-chart/index.wxss +1 -0
  1275. package/dist/weapp/treemap-chart/index.js +1 -0
  1276. package/dist/weapp/treemap-chart/index.json +1 -0
  1277. package/dist/weapp/treemap-chart/index.wxml +1 -0
  1278. package/dist/weapp/treemap-chart/index.wxss +1 -0
  1279. package/dist/weapp/types.d.ts +549 -0
  1280. package/dist/weapp/waterfall-chart/index.js +1 -0
  1281. package/dist/weapp/waterfall-chart/index.json +1 -0
  1282. package/dist/weapp/waterfall-chart/index.wxml +1 -0
  1283. package/dist/weapp/waterfall-chart/index.wxss +1 -0
  1284. package/dist/web-components/components/chart/chart.d.ts +58 -0
  1285. package/dist/web-components/components/chart/chart.js +55 -0
  1286. package/dist/web-components/components/chart/chart.js.map +1 -0
  1287. package/dist/web-components/components/chart/charts.d.ts +254 -0
  1288. package/dist/web-components/components/chart/charts.js +208 -0
  1289. package/dist/web-components/components/chart/charts.js.map +1 -0
  1290. package/dist/web-components/components/chart/engine-element.d.ts +53 -0
  1291. package/dist/web-components/components/chart/engine-element.js +77 -0
  1292. package/dist/web-components/components/chart/engine-element.js.map +1 -0
  1293. package/dist/web-components/components/chart/extended.d.ts +234 -0
  1294. package/dist/web-components/components/chart/extended.js +197 -0
  1295. package/dist/web-components/components/chart/extended.js.map +1 -0
  1296. package/dist/web-components/components/chart/series.d.ts +7 -0
  1297. package/dist/web-components/components/chart/series.js +14 -0
  1298. package/dist/web-components/components/chart/series.js.map +1 -0
  1299. package/dist/web-components/components/chart/shape-chart.d.ts +199 -0
  1300. package/dist/web-components/components/chart/shape-chart.js +161 -0
  1301. package/dist/web-components/components/chart/shape-chart.js.map +1 -0
  1302. package/dist/web-components/components/chart/shapes-extended.d.ts +198 -0
  1303. package/dist/web-components/components/chart/shapes-extended.js +182 -0
  1304. package/dist/web-components/components/chart/shapes-extended.js.map +1 -0
  1305. package/dist/web-components/components/chart-3d/chart-3d.d.ts +111 -0
  1306. package/dist/web-components/components/chart-3d/chart-3d.js +97 -0
  1307. package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -0
  1308. package/dist/web-components/components/graph/graph.d.ts +154 -0
  1309. package/dist/web-components/components/graph/graph.js +149 -0
  1310. package/dist/web-components/components/graph/graph.js.map +1 -0
  1311. package/dist/web-components/components/order-book/order-book.d.ts +165 -0
  1312. package/dist/web-components/components/order-book/order-book.js +174 -0
  1313. package/dist/web-components/components/order-book/order-book.js.map +1 -0
  1314. package/dist/web-components/components/trading-chart/trading-chart.d.ts +143 -0
  1315. package/dist/web-components/components/trading-chart/trading-chart.js +158 -0
  1316. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -0
  1317. package/dist/web-components/elements/chart-3d.d.ts +2 -0
  1318. package/dist/web-components/elements/chart-3d.js +13 -0
  1319. package/dist/web-components/elements/chart-3d.js.map +1 -0
  1320. package/dist/web-components/elements/chart.d.ts +7 -0
  1321. package/dist/web-components/elements/chart.js +44 -0
  1322. package/dist/web-components/elements/chart.js.map +1 -0
  1323. package/dist/web-components/elements/graph.d.ts +2 -0
  1324. package/dist/web-components/elements/graph.js +12 -0
  1325. package/dist/web-components/elements/graph.js.map +1 -0
  1326. package/dist/web-components/elements/order-book.d.ts +2 -0
  1327. package/dist/web-components/elements/order-book.js +13 -0
  1328. package/dist/web-components/elements/order-book.js.map +1 -0
  1329. package/dist/web-components/elements/trading-chart.d.ts +2 -0
  1330. package/dist/web-components/elements/trading-chart.js +8 -0
  1331. package/dist/web-components/elements/trading-chart.js.map +1 -0
  1332. package/dist/web-components/html-custom-data.json +1470 -38
  1333. package/dist/web-components/types/react.d.ts +494 -0
  1334. package/dist/web-components/types/solid.d.ts +368 -0
  1335. package/dist/web-components/types/svelte.d.ts +368 -0
  1336. package/dist/web-components/types/vue.d.ts +410 -0
  1337. package/package.json +128 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.cjs","names":["parseColor","luminance","styleElement","createStore","createPyramid","DAY","readTheme","resolveLocale","localeLabels","TRADING_LABELS","toCss","priceFormatter","parseTimeframe","indexOfTime","zoneOffset","MINUTE","rangeLevel","createRangePyramid","lowerBoundTime","detectPrecision","inferTimeframe","buildStudies","LINE_COLORS","inputLength","barAt","storeUpdate","createScale","pyramidLevel","toScaled","boundaryWeight","pickTicks","tickText","formatPercent","stepDecimals","fromScaled","formatVolume","formatFixed","packColor","candleMetrics","yOf","LineBuffer","BarBuffer","pixelRange","yOfScaled","AreaBuffer","clampRange","mix","volumeProfile","valueAt","HOUR","fill","paintDrawing","formatCountdown","formatCrosshairTime","scaledAt","scaleTicks","readBar","hitDrawing","isFillable","handlePoints","isPosition","anchorCount","moveHandle","themeColorsChanged","watchTheme","createRenderer","createDataCanvas","isTimeZone","storeAppend","storePrepend","require_dom","require_color","require_locale","require_scale","require_detect","require_theme","require_drawings","require_format","require_geometry","require_indicators","require_labels","require_scale$1","require_store","require_studies","TIME_AXIS","MIN_AXIS","MAX_SPACING","MIN_PANE","PRICE","UP","DOWN","WARNING","PRIMARY","HISTORY_LIMIT","PALETTE","LINE_STYLES","syncHooks","PRICE_LINE_TITLES","clamp","v","lo","hi","textOn","color","fill","finite","createTradingChart","doc","container","win","options","initial","destroyed","make","tag","style","root","layer","background","foreground","legends","jump","live","toolbar","editor","sheet","store","pyramid","ha","haValid","haPyramid","studies","studyValid","visibility","compares","outputLods","dataVersion","tailVersion","detectedPrecision","inferredTimeframe","spacing","right","plotW","plotH","axisW","width","height","panes","scales","paneHeights","vis","volumeOverlayMax","theme","themeVersion","optionsVersion","renderer","rendererToken","frameId","layers","geomKey","builtTail","itemVersion","resolveReady","ready","resolve","pointer","keyboardIndex","gesture","touches","pinch","kinetic","scrollAnim","pendingRange","drawings","emittedDrawings","committed","undoStack","redoStack","undoKey","tool","selected","hovered","draft","draftClicks","draftPane","drawingCounter","textBoxes","editing","toolbarKey","paletteOpen","lineOverrides","hoveredLine","canvasButtons","hoveredButton","lastRange","silentRange","externalCross","lastCrosshair","historyFirst","countdownTimer","replay","replayPicking","replaySpeed","profile","listeners","emit","type","fn","event","locale","texts","resolveTexts","labels","n","redUp","upCss","downCss","css","fallback","value","alpha","precision","priceFormat","priceFormatKey","formatPrice","key","timeframe","tfMs","font","weight","size","isVisible","study","xOf","index","indexAt","x","timeAt","count","i","timeAtFrac","edge","t","indexAtTimeFrac","time","span","zone","offsetMinutes","studyOffset","shift","colorOf","groupRanges","lod","values","lodOf","out","indexOfTimeExt","last","display","markDirty","from","c","level","l","p","syncDerived","valid","next","j","afterDataChange","invalidate","rebuildStudies","reused","id","s","rebuildCompares","data","series","a","b","d","followsRealtime","replaceBars","bars","scale","applyBarsOption","length","first","follow","before","at","added","layoutPanes","paneStudies","available","wanted","total","max","k","heights","h","priceHeight","scaleOf","mode","price","top","paneAt","y","clampView","minSpacing","computeVisible","left","src","cols","i0","i1","r0","r1","groupCenter","g","groupBars","firstVisibleIndex","compareBase","compareScaled","base","baselinePrice","outputExtent","r","offset","shiftBars","range","autoscale","pane","closeOnly","vol","extent","scaled","band","timeTicks","tf","intraday","gEnd","groupTime","candidates","prev","sample","gap","ctx","paneTickText","studyValueText","createLayers","result","up","down","upP","downP","bg","metrics","dpr","X","histogramHalf","volumeColors","bottom","Y","lineLayer","buffer","isLive","ga","gb","toY","lineWidth","rangeLayer","dx","extra","to","prevY","yLo","yHi","second","st","lineColor","area","yb","upArea","downArea","upLine","downLine","px","py","point","hollow","ohlc","wick","body","wicks","bodies","caps","ticks","tick","o","cx","wt","wb","side","bt","bb","segments","edges","box","items","y0","strong","faded","fixed","radius","half","runLayer","lastMain","version","item","renderData","canvas","bw","bh","sizeCanvas","w","roundRect","paintFill","outA","f","outB","ra","rb","above","below","run","sign","flush","ya","d0","cy","paintSessionBreaks","xs","prevDay","day","profileOptions","option","paintVolumeProfile","rows","largest","fromRight","upColor","downColor","y1","upLength","downLength","dir","start","paintBackground","grid","showGrid","ys","axisLabel","textColor","text","priceAxisText","line","kind","linePrice","crosshairState","bar","best","yy","paneOf","drawingMapper","formatSpan","abs","ms","parts","days","hours","minutes","paneValueText","roundPrice","step","pill","align","fillColor","canvasButton","paintDrawings","all","position","mapper","own","drawing","colors","paintForeground","muted","bgCss","upC","downC","hiG","loG","label","labelLeft","row","priceLegend","roomRight","roomLeft","leftSide","tx","stack","many","marker","sell","anchor","tip","lastClose","lineStyle","titleKey","title","pnl","pnlFill","widths","part","grip","partFill","lastLine","lastUp","lastColor","compareLabels","covered","end","date","badgeY","cross","labelBg","textValue","bx","by","orderPrice","hover","legendKey","legendRows","legendBoxes","legendBox","legendRow","button","updateLegends","outputs","buildLegends","priceBox","head","slots","titleOf","setSpan","maxWidth","prevClose","change","html","name","escapeHtml","pct","shown","source","prefix","ch","frame","animate","active","now","eased","dt","measureAxis","widest","animating","fg","pass","applyRange","bands","updateJump","updateToolbar","positionEditor","emitView","buttonAt","updateCursor","show","visibleRange","local","rect","zoomAt","factor","anchorAt","setTool","notify","select","undoState","emitUndo","state","commitDrawings","restoreDrawings","undo","previous","closeEditor","redo","updateDrawing","patch","removeDrawing","positionPoints","entry","risk","target","long","stop","finishDraft","done","openEditor","fixDraftAnchor","followDraft","hitLine","hitDrawingAt","hit","separatorAt","autosizeEditor","created","commit","icon","dash","path","toolbarButton","pressed","content","onClick","separator","buildToolbar","swatch","remove","palette","dragging","pts","x0","x1","replayState","emitReplay","columnsOf","showBars","hasVolume","stopReplayTimer","beginReplay","replayStepBy","playReplay","speed","interval","perTick","endReplay","wasPicking","restore","cursor","nextHover","onPointerDown","sep","anchors","onPointerMove","distance","mid","lastIndex","dy","nextBelow","points","di","ds","onPointerUp","onPointerLeave","onWheel","unit","modifier","onDoubleClick","instance","announce","page","move","current","keyboard","resizeObserver","refreshTheme","unwatchTheme","langObserver","applyStatic","compose","origin","view","element","computed","fullscreen","onFullscreen","initRenderer","token","exclude","symbol","wantTimer","applyOptions","nextZone","timeChanged","animateScroll","quality","visible","set","listener"],"sources":["../../../../../charts/src/engine/trading/chart.ts"],"sourcesContent":["// Trading chart: candles (or bars, lines, areas...) over a gap-free index\n// axis, indicator panes, price lines, markers, drawings and streaming.\n//\n// Layers, bottom to top: a Canvas2D background (grid, bands, watermark),\n// the GPU data canvas covering every pane (candles, volumes, indicator\n// lines, baked in device pixels), a Canvas2D overlay (axes, labels, price\n// lines, markers, drawings, crosshair) and DOM legends. The GPU items are\n// rebuilt only when the view, the scales or the data change; a tick\n// rebuilds only the items of the last bar.\n\nimport {\n luminance,\n mix,\n packColor,\n parseColor,\n toCss,\n type Rgba,\n} from \"../color\";\nimport { createDataCanvas, styleElement } from \"../dom\";\nimport { createRenderer } from \"../renderers/detect\";\nimport type { ChartRenderer, RenderItem } from \"../renderers/types\";\nimport { stepDecimals } from \"../scale\";\nimport {\n readTheme,\n themeColorsChanged,\n watchTheme,\n type ChartTheme,\n} from \"../theme\";\nimport type { ChartRendererKind } from \"../types\";\nimport { localeLabels, resolveLocale } from \"../locale\";\nimport {\n anchorCount,\n handlePoints,\n hitDrawing,\n isFillable,\n isPosition,\n moveHandle,\n paintDrawing,\n setDash,\n type Box,\n type DrawingMapper,\n} from \"./drawings\";\nimport {\n DAY,\n HOUR,\n MINUTE,\n boundaryWeight,\n detectPrecision,\n formatCountdown,\n formatCrosshairTime,\n formatFixed,\n formatPercent,\n formatVolume,\n inferTimeframe,\n isTimeZone,\n pickTicks,\n priceFormatter,\n tickText,\n zoneOffset,\n type UtcOffset,\n} from \"./format\";\nimport {\n AreaBuffer,\n BarBuffer,\n LineBuffer,\n candleMetrics,\n clampRange,\n pixelRange,\n} from \"./geometry\";\nimport { heikinAshiInto, parseTimeframe, volumeProfile } from \"./indicators\";\nimport { TRADING_LABELS, fill, type TradingTexts } from \"./labels\";\nimport {\n createScale,\n fitScale,\n fromScaled,\n panScale,\n scaleTicks,\n scaledAt,\n toScaled,\n valueAt,\n yOf,\n yOfScaled,\n zoomScale,\n type PaneScale,\n} from \"./scale\";\nimport {\n appendBars as storeAppend,\n createPyramid,\n createRangePyramid,\n createStore,\n indexOfTime,\n inputLength,\n invalidateRangePyramid,\n barAt,\n prependBars as storePrepend,\n pyramidLevel,\n rangeLevel,\n readBar,\n setBars as storeSet,\n updateBar as storeUpdate,\n lowerBoundTime,\n type BarStore,\n type OhlcColumns,\n type RangePyramid,\n} from \"./store\";\nimport {\n LINE_COLORS,\n buildStudies,\n type Study,\n type StudyOutput,\n} from \"./studies\";\nimport type {\n TradingBarsInput,\n TradingChartEventMap,\n TradingChartInstance,\n TradingChartOptions,\n TradingCrosshairEvent,\n TradingDrawing,\n TradingDrawingPatch,\n TradingDrawingPoint,\n TradingDrawingTool,\n TradingLineStyle,\n TradingPriceLine,\n TradingReplayState,\n TradingScaleMode,\n TradingUndoState,\n TradingVisibleRange,\n TradingVolumeProfile,\n TradingVolumeProfileOptions,\n} from \"./types\";\n\nconst TIME_AXIS = 28;\nconst MIN_AXIS = 60;\nconst MAX_SPACING = 60;\nconst MIN_PANE = 48;\nconst PRICE = \"price\";\nconst UP = \"var(--success-color, #089981)\";\nconst DOWN = \"var(--danger-color, #f23645)\";\nconst WARNING = \"var(--warning-color, #f59e0b)\";\nconst PRIMARY = \"var(--primary-color, #2962ff)\";\nconst HISTORY_LIMIT = 100;\n\n/** Colors of the drawing toolbar */\nconst PALETTE = [\n \"#2962ff\",\n \"#089981\",\n \"#f23645\",\n \"#f59e0b\",\n \"#a855f7\",\n \"#0ea5e9\",\n \"#ec4899\",\n \"#787b86\",\n];\nconst LINE_STYLES: readonly TradingLineStyle[] = [\"solid\", \"dashed\", \"dotted\"];\n\n/**\n * Hooks used by `syncCharts` to follow another chart without echoing its\n * events back (internal: not part of the public instance)\n */\nexport const syncHooks = new WeakMap<\n TradingChartInstance,\n { setTimeRange(range: { from: number; to: number }): void }\n>();\n\nconst PRICE_LINE_TITLES: Record<string, keyof TradingTexts | undefined> = {\n order: \"limit\",\n position: \"position\",\n takeProfit: \"takeProfit\",\n stopLoss: \"stopLoss\",\n alert: \"alert\",\n};\n\nconst clamp = (v: number, lo: number, hi: number) =>\n v < lo ? lo : v > hi ? hi : v;\n\n/** Readable text on a fill (a CSS color): dark on light fills, white otherwise */\nconst textOn = (fill: string) => {\n const color = parseColor(fill);\n return color && luminance(color) > 0.5 ? \"#0b0e11\" : \"#fff\";\n};\n\nconst finite = Number.isFinite;\n\ninterface Pane {\n id: string;\n study: Study | null;\n scale: PaneScale;\n top: number;\n height: number;\n ticks: number[];\n step: number;\n}\n\n/** Bars drawn: a level of the pyramid and the groups in view */\ninterface Visible {\n /** Logical index at the left edge */\n left: number;\n level: number;\n /** Bars per group */\n size: number;\n cols: OhlcColumns;\n /** Groups drawn (one extra on each side) */\n g0: number;\n g1: number;\n /** Groups whose center is in the plot */\n s0: number;\n s1: number;\n /** Last group */\n last: number;\n}\n\ninterface LegendRow {\n row: HTMLDivElement;\n values: HTMLSpanElement[];\n button: HTMLButtonElement | null;\n}\n\ntype Layer = (ga: number, gb: number, live: boolean) => RenderItem[];\n\n/** Interaction in progress */\ntype Gesture =\n | {\n kind: \"pan\";\n x: number;\n y: number;\n right: number;\n pane: Pane | null;\n moved: boolean;\n lastX: number;\n lastY: number;\n lastT: number;\n velocity: number;\n }\n | { kind: \"axisY\"; pane: Pane; y: number; min: number; max: number }\n | { kind: \"axisX\"; x: number; spacing: number }\n | {\n kind: \"separator\";\n index: number;\n y: number;\n above: number;\n below: number;\n }\n | { kind: \"order\"; line: TradingPriceLine; startPrice: number }\n | {\n kind: \"drawing\";\n id: string;\n pane: Pane;\n handle: number;\n x: number;\n y: number;\n original: TradingDrawing;\n moved: boolean;\n }\n | { kind: \"create\"; pane: Pane; x: number; y: number; moved: boolean }\n | { kind: \"button\"; action: () => void };\n\n/** Mounts a trading chart in `container` (which should have a height) */\nexport const createTradingChart = (\n container: HTMLElement,\n initial: TradingChartOptions = {},\n): TradingChartInstance => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n let options: TradingChartOptions = { ...initial };\n let destroyed = false;\n\n // ------------------------------------------------------------------ DOM\n\n const make = <K extends keyof HTMLElementTagNameMap>(\n tag: K,\n style: Partial<CSSStyleDeclaration>,\n ) => styleElement(doc.createElement(tag), style) as HTMLElementTagNameMap[K];\n\n const root = make(\"div\", {\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n overflow: \"hidden\",\n outline: \"none\",\n userSelect: \"none\",\n touchAction: \"pan-y\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n cursor: \"crosshair\",\n });\n root.className = \"minerva-trading-chart\";\n root.tabIndex = 0;\n root.setAttribute(\"role\", \"figure\");\n root.setAttribute(\"aria-roledescription\", \"chart\");\n\n const layer = (tag: \"canvas\" | \"div\") =>\n make(tag, {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n const background = layer(\"canvas\") as HTMLCanvasElement;\n const foreground = layer(\"canvas\") as HTMLCanvasElement;\n background.setAttribute(\"aria-hidden\", \"true\");\n foreground.setAttribute(\"aria-hidden\", \"true\");\n const legends = layer(\"div\") as HTMLDivElement;\n legends.style.right = \"0\";\n legends.style.bottom = \"0\";\n const jump = make(\"button\", {\n position: \"absolute\",\n display: \"none\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"28px\",\n height: \"28px\",\n padding: \"0\",\n borderRadius: \"50%\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 80%, transparent)\",\n background: \"var(--surface-elevated-color, var(--surface-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow: \"0 4px 14px -4px rgba(15, 23, 42, 0.25)\",\n cursor: \"pointer\",\n });\n jump.type = \"button\";\n jump.innerHTML =\n '<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>';\n const live = make(\"div\", {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n });\n live.setAttribute(\"aria-live\", \"polite\");\n // floating toolbar of the selected drawing, and the editor of text drawings\n const toolbar = make(\"div\", {\n position: \"absolute\",\n display: \"none\",\n alignItems: \"center\",\n gap: \"1px\",\n padding: \"3px\",\n borderRadius: \"8px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 85%, transparent)\",\n background: \"var(--surface-elevated-color, var(--surface-color, #fff))\",\n boxShadow: \"0 8px 24px -8px rgba(15, 23, 42, 0.35)\",\n zIndex: \"2\",\n cursor: \"default\",\n });\n toolbar.className = \"minerva-trading-toolbar\";\n toolbar.setAttribute(\"role\", \"toolbar\");\n const editor = make(\"textarea\", {\n position: \"absolute\",\n display: \"none\",\n minWidth: \"120px\",\n minHeight: \"28px\",\n padding: \"5px 9px\",\n resize: \"none\",\n border: \"1px solid var(--primary-color, #2962ff)\",\n borderRadius: \"5px\",\n outline: \"none\",\n background: \"var(--surface-elevated-color, var(--surface-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n font: \"500 13px var(--font-family-sans, system-ui, sans-serif)\",\n boxShadow: \"0 6px 18px -6px rgba(15, 23, 42, 0.3)\",\n zIndex: \"3\",\n });\n editor.rows = 1;\n const sheet = make(\"style\", {});\n sheet.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)}`;\n root.append(\n sheet,\n background,\n foreground,\n legends,\n jump,\n toolbar,\n editor,\n live,\n );\n container.appendChild(root);\n\n // ----------------------------------------------------------------- data\n\n const store = createStore();\n let pyramid = createPyramid();\n /** Heikin-Ashi bars (time and volume shared with the store) */\n const ha: OhlcColumns = {\n time: store.time,\n open: new Float64Array(0),\n high: new Float64Array(0),\n low: new Float64Array(0),\n close: new Float64Array(0),\n volume: store.volume,\n };\n let haValid = 0;\n let haPyramid = createPyramid();\n let studies: Study[] = [];\n const studyValid = new Map<Study, number>();\n const visibility = new Map<string, boolean>();\n interface CompareRuntime {\n id: string;\n name: string;\n color: string;\n width: number;\n times: Float64Array;\n data: Float64Array;\n values: Float64Array;\n valid: number;\n lod: RangePyramid;\n }\n let compares: CompareRuntime[] = [];\n /** Min / max pyramids of the indicator outputs (zoomed-out decimation) */\n const outputLods = new WeakMap<StudyOutput, RangePyramid>();\n /** Changes when bars other than the last one change */\n let dataVersion = 0;\n /** Changes when the last bar changes */\n let tailVersion = 0;\n let detectedPrecision = 2;\n let inferredTimeframe = DAY;\n\n // ----------------------------------------------------------------- view\n\n let spacing = options.barSpacing ?? 8;\n let right = NaN;\n let plotW = 0;\n let plotH = 0;\n let axisW = MIN_AXIS;\n let width = 0;\n let height = 0;\n let panes: Pane[] = [];\n const scales = new Map<string, PaneScale>();\n const paneHeights = new Map<string, number>();\n let vis: Visible | null = null;\n let volumeOverlayMax = 0;\n\n // -------------------------------------------------------------- state\n\n let theme: ChartTheme = readTheme(root);\n let themeVersion = 0;\n let optionsVersion = 0;\n let renderer: ChartRenderer | null = null;\n let rendererToken = 0;\n let frameId = 0;\n let layers: { fn: Layer; main: RenderItem[]; live: RenderItem[] }[] = [];\n let geomKey = \"\";\n let builtTail = -1;\n let itemVersion = 0;\n let resolveReady!: (kind: ChartRendererKind | null) => void;\n const ready = new Promise<ChartRendererKind | null>((resolve) => {\n resolveReady = resolve;\n });\n\n let pointer: { x: number; y: number } | null = null;\n let keyboardIndex: number | null = null;\n let gesture: Gesture | null = null;\n const touches = new Map<number, { x: number; y: number }>();\n let pinch: { distance: number; spacing: number } | null = null;\n let kinetic: { v: number; t: number } | null = null;\n let scrollAnim: { from: number; to: number; start: number } | null = null;\n /** Range asked by `setVisibleRange` / `fitContent`, applied once the plot width is known */\n let pendingRange: { from: number; to: number } | null = null;\n\n let drawings: readonly TradingDrawing[] = options.drawings ?? [];\n let emittedDrawings: readonly TradingDrawing[] | null = null;\n /** Drawings of the last commit: the base of the undo history */\n let committed: readonly TradingDrawing[] = drawings;\n const undoStack: (readonly TradingDrawing[])[] = [];\n const redoStack: (readonly TradingDrawing[])[] = [];\n let undoKey = \"false|false\";\n let tool: TradingDrawingTool = options.drawingMode ?? \"cursor\";\n let selected: string | null = null;\n let hovered: string | null = null;\n let draft: TradingDrawing | null = null;\n /** Clicks still needed by the drawing being made (three-anchor tools) */\n let draftClicks = 0;\n let draftPane: string = PRICE;\n let drawingCounter = 0;\n /** Text boxes measured when painted (hit tests of text drawings) */\n const textBoxes = new Map<string, Box>();\n /** Drawing whose text is being edited */\n let editing: { id: string; created: boolean } | null = null;\n let toolbarKey = \"\";\n let paletteOpen = false;\n const lineOverrides = new Map<string, number>();\n let hoveredLine: string | null = null;\n /** Clickable areas painted on the canvas (close buttons, order entry) */\n let canvasButtons: {\n x: number;\n y: number;\n w: number;\n h: number;\n action: () => void;\n }[] = [];\n let hoveredButton = -1;\n let lastRange: TradingVisibleRange | null = null;\n /** The next view change comes from a synchronized chart: not reported */\n let silentRange = false;\n /** Crosshair set by `setCrosshair` (synchronized charts) */\n let externalCross: { time: number; price: number } | null = null;\n let lastCrosshair = \"\";\n let historyFirst = NaN;\n let countdownTimer: ReturnType<typeof setInterval> | null = null;\n /** Bar replay: the full history, and the bars shown so far */\n let replay: {\n source: BarStore;\n playing: boolean;\n speed: number;\n timer: ReturnType<typeof setInterval> | null;\n } | null = null;\n let replayPicking = false;\n let replaySpeed = 4;\n let profile: { key: string; result: TradingVolumeProfile } | null = null;\n\n // ---------------------------------------------------------- listeners\n\n const listeners = new Map<string, Set<(event: never) => void>>();\n const emit = <K extends keyof TradingChartEventMap>(\n type: K,\n event: TradingChartEventMap[K],\n ) => {\n listeners\n .get(type)\n ?.forEach((fn) => (fn as (e: TradingChartEventMap[K]) => void)(event));\n };\n\n // ------------------------------------------------------------- helpers\n\n // locale and texts, resolved at each options update (and `<html lang>` change)\n let locale = resolveLocale(options.locale);\n let texts = localeLabels(TRADING_LABELS, locale, options.labels);\n const resolveTexts = () => {\n locale = resolveLocale(options.locale);\n texts = localeLabels(TRADING_LABELS, locale, options.labels);\n };\n const labels = () => texts;\n const n = () => store.length;\n const style = () => options.chartStyle ?? \"candles\";\n const redUp = () => options.colorConvention === \"redUp\";\n const upCss = () => options.upColor ?? (redUp() ? DOWN : UP);\n const downCss = () => options.downColor ?? (redUp() ? UP : DOWN);\n const resolve = (css: string, fallback: Rgba = theme.primary): Rgba =>\n theme.resolve ? theme.resolve(css, fallback) : fallback;\n const css = (value: string, alpha = 1) => toCss(resolve(value), alpha);\n const precision = () => options.precision ?? detectedPrecision;\n let priceFormat = priceFormatter(2, undefined);\n let priceFormatKey = \"\";\n const formatPrice = (value: number) => {\n if (options.formatPrice) return options.formatPrice(value);\n const key = `${precision()}|${locale}`;\n if (key !== priceFormatKey) {\n priceFormat = priceFormatter(precision(), locale);\n priceFormatKey = key;\n }\n return priceFormat(value);\n };\n const timeframe = () => {\n const parsed =\n options.timeframe !== undefined\n ? parseTimeframe(options.timeframe)\n : null;\n return (\n parsed ?? {\n unit: \"ms\" as const,\n count: inferredTimeframe,\n ms: inferredTimeframe,\n }\n );\n };\n const tfMs = () => timeframe().ms;\n const font = (size: number, weight = 400) =>\n `${weight} ${size}px ${theme.fontFamily}`;\n\n const isVisible = (study: Study) =>\n visibility.get(study.id) ?? study.config.visible ?? true;\n\n const xOf = (index: number) => plotW + (index - right) * spacing;\n const indexAt = (x: number) => right - (plotW - x) / spacing;\n\n /** Time of a logical index (extrapolated outside the bars) */\n const timeAt = (index: number) => {\n const count = n();\n if (!count) return 0;\n const i = Math.round(index);\n if (i < 0) return store.time[0] + i * tfMs();\n if (i >= count) return store.time[count - 1] + (i - count + 1) * tfMs();\n return store.time[i];\n };\n\n /** Time of a fractional index, interpolated between the bars */\n const timeAtFrac = (index: number) => {\n const count = n();\n if (!count) return 0;\n const i = Math.floor(index);\n if (i < 0 || i >= count - 1) {\n const edge = i < 0 ? 0 : count - 1;\n return store.time[edge] + (index - edge) * tfMs();\n }\n const t = index - i;\n return store.time[i] + t * (store.time[i + 1] - store.time[i]);\n };\n\n /** Fractional index of a time (the inverse of `timeAtFrac`) */\n const indexAtTimeFrac = (time: number) => {\n const count = n();\n if (!count) return 0;\n if (time >= store.time[count - 1])\n return count - 1 + (time - store.time[count - 1]) / tfMs();\n if (time <= store.time[0]) return (time - store.time[0]) / tfMs();\n const i = indexOfTime(store.time, count, time);\n const span = store.time[i + 1] - store.time[i];\n return i + (span > 0 ? (time - store.time[i]) / span : 0);\n };\n\n // displayed time: a fixed offset, a time zone or the local time\n let zone: string | undefined;\n const offsetMinutes = (time: number) =>\n options.utcOffset ??\n (zone\n ? zoneOffset(time, zone)\n : -new Date(finite(time) ? time : 0).getTimezoneOffset());\n const studyOffset: UtcOffset = (time) => offsetMinutes(time);\n /** Time shifted so that the UTC getters read the displayed time */\n const shift = (time: number) => time + offsetMinutes(time) * MINUTE;\n\n /** CSS color of a study color: `up` / `down` stand for the bar colors */\n const colorOf = (color: string) =>\n color === \"up\" ? upCss() : color === \"down\" ? downCss() : color;\n\n /** Min / max / last of each visible group of a column of values */\n const groupRanges = (\n v: Visible,\n values: Float64Array,\n lod: RangePyramid,\n ): {\n min: ArrayLike<number>;\n max: ArrayLike<number>;\n last: ArrayLike<number>;\n } => {\n if (!v.level) return { min: values, max: values, last: values };\n const level = rangeLevel(lod, values, n(), v.level);\n return level;\n };\n const lodOf = (out: StudyOutput) => {\n let lod = outputLods.get(out);\n if (!lod) outputLods.set(out, (lod = createRangePyramid()));\n return lod;\n };\n\n /** Logical index of a time (extrapolated outside the bars) */\n const indexOfTimeExt = (time: number) => {\n const count = n();\n if (!count) return 0;\n const last = store.time[count - 1];\n if (time > last) return count - 1 + (time - last) / tfMs();\n if (time < store.time[0]) return (time - store.time[0]) / tfMs();\n return indexOfTime(store.time, count, time);\n };\n\n /** Bars as drawn: Heikin-Ashi or the store */\n const display = (): OhlcColumns => (style() === \"heikinAshi\" ? ha : store);\n\n // ------------------------------------------------------- derived data\n\n const markDirty = (from: number) => {\n for (const study of studies) {\n studyValid.set(study, Math.min(studyValid.get(study) ?? 0, from));\n for (const out of study.outputs) {\n const lod = outputLods.get(out);\n if (lod) invalidateRangePyramid(lod, from);\n }\n }\n haValid = Math.min(haValid, from);\n for (const c of compares) {\n c.valid = Math.min(c.valid, from);\n invalidateRangePyramid(c.lod, from);\n }\n profile = null;\n const level = (p: typeof pyramid) => {\n for (const l of p.levels)\n if (l) l.valid = Math.min(l.valid, Math.floor(from / l.size));\n };\n level(pyramid);\n level(haPyramid);\n };\n\n const syncDerived = () => {\n const count = n();\n for (const study of studies) {\n const valid = studyValid.get(study) ?? 0;\n if (valid < count) {\n study.compute(store, valid);\n studyValid.set(study, count);\n }\n }\n ha.time = store.time;\n ha.volume = store.volume;\n if (style() === \"heikinAshi\" && haValid < count) {\n if (ha.open.length < store.capacity) {\n for (const key of [\"open\", \"high\", \"low\", \"close\"] as const) {\n const next = new Float64Array(store.capacity);\n next.set(ha[key].subarray(0, haValid));\n ha[key] = next;\n }\n }\n heikinAshiInto(\n store.open,\n store.high,\n store.low,\n store.close,\n count,\n ha,\n haValid,\n );\n haValid = count;\n }\n for (const c of compares) {\n if (c.valid >= count) continue;\n if (c.values.length < store.capacity) {\n const next = new Float64Array(store.capacity).fill(NaN);\n next.set(c.values.subarray(0, c.valid));\n c.values = next;\n }\n for (let i = c.valid; i < count; i++) {\n const j =\n lowerBoundTime(c.times, c.times.length, store.time[i] + 0.5) - 1;\n c.values[i] = j >= 0 ? c.data[j] : NaN;\n }\n c.valid = count;\n }\n };\n\n const afterDataChange = (from: number) => {\n markDirty(from);\n const count = n();\n if (from < count - 1) dataVersion++;\n tailVersion++;\n if (count) {\n detectedPrecision = Math.max(\n from === 0 ? 0 : detectedPrecision,\n detectPrecision(store.close, from, count),\n detectPrecision(store.open, Math.max(from, count - 50), count),\n );\n if (from === 0 || count < 80)\n inferredTimeframe = inferTimeframe(store.time, count);\n }\n invalidate();\n };\n\n const rebuildStudies = () => {\n const { studies: next, reused } = buildStudies(\n options.indicators ?? [],\n studies,\n studyOffset,\n );\n for (const study of studies)\n if (!reused.has(study)) studyValid.delete(study);\n for (const study of next) if (!reused.has(study)) studyValid.set(study, 0);\n studies = next;\n // drop the user's toggles of indicators whose visibility is now set\n for (const id of [...visibility.keys()])\n if (!studies.some((s) => s.id === id)) visibility.delete(id);\n };\n\n const rebuildCompares = () => {\n compares = (options.compare ?? []).map((series, i) => {\n const data = [...series.data].sort((a, b) => a.time - b.time);\n return {\n id: series.id ?? series.name,\n name: series.name,\n color: series.color ?? LINE_COLORS[(i + 2) % LINE_COLORS.length],\n width: series.lineWidth ?? 1.5,\n times: Float64Array.from(data, (d) => d.time),\n data: Float64Array.from(data, (d) => d.value),\n values: new Float64Array(0),\n valid: 0,\n lod: createRangePyramid(),\n };\n });\n };\n\n // ---------------------------------------------------------- bars input\n\n /** Last bar visible: new bars keep the view at the latest bar */\n const followsRealtime = () => {\n const count = n();\n if (!count || !finite(right)) return true;\n const x = xOf(count - 1);\n return x >= 0 && x <= plotW + spacing * 0.5;\n };\n\n const replaceBars = (bars: TradingBarsInput) => {\n storeSet(store, bars);\n pyramid = createPyramid();\n haPyramid = createPyramid();\n haValid = 0;\n historyFirst = NaN;\n for (const scale of scales.values()) scale.auto = true;\n right = n() - 1 + (options.rightOffset ?? 8);\n kinetic = null;\n scrollAnim = null;\n afterDataChange(0);\n };\n\n /**\n * New `bars` option: streamed (same first bars plus newer ones),\n * prepended history (same last bar), or replaced\n */\n const applyBarsOption = (bars: TradingBarsInput) => {\n const count = n();\n const length = inputLength(bars);\n if (count >= 2 && length >= count) {\n const first = barAt(bars, 0).time;\n const last = store.time[count - 1];\n if (\n first === store.time[0] &&\n barAt(bars, count - 2).time === store.time[count - 2]\n ) {\n // streaming through the props: update the last bar, append the rest\n const follow = followsRealtime();\n const before = count;\n let from = count;\n for (let i = count - 1; i < length; i++) {\n const at = storeUpdate(store, barAt(bars, i));\n if (at >= 0) from = Math.min(from, at);\n }\n if (follow) right += n() - before;\n if (from < n()) afterDataChange(from);\n return;\n }\n if (barAt(bars, length - 1).time === last && length > count) {\n const added = length - count;\n storeSet(store, bars);\n pyramid = createPyramid();\n haPyramid = createPyramid();\n haValid = 0;\n right += added;\n afterDataChange(0);\n return;\n }\n }\n replaceBars(bars);\n };\n\n // --------------------------------------------------------------- layout\n\n const layoutPanes = () => {\n const paneStudies = studies.filter((s) => !s.overlay);\n const available = plotH;\n const wanted = paneStudies.map((s) => paneHeights.get(s.id) ?? s.height);\n const total = wanted.reduce((a, b) => a + b, 0);\n const max = Math.max(0, available * 0.62);\n const k = total > max && total > 0 ? max / total : 1;\n const heights = wanted.map((h) =>\n Math.max(MIN_PANE * Math.min(1, k * 2), h * k),\n );\n const priceHeight = Math.max(\n 40,\n available - heights.reduce((a, b) => a + b, 0),\n );\n const next: Pane[] = [];\n const scaleOf = (id: string, mode: TradingScaleMode) => {\n let scale = scales.get(id);\n if (!scale) {\n scale = createScale(mode);\n scales.set(id, scale);\n }\n if (scale.mode !== mode) {\n scale.mode = mode;\n scale.auto = true;\n }\n return scale;\n };\n const price = scaleOf(PRICE, options.scaleMode ?? \"linear\");\n price.top = 0;\n price.height = priceHeight;\n price.marginTop = 0.1;\n price.marginBottom = 0.08;\n next.push({\n id: PRICE,\n study: null,\n scale: price,\n top: 0,\n height: priceHeight,\n ticks: [],\n step: 0,\n });\n let top = priceHeight;\n paneStudies.forEach((study, i) => {\n const scale = scaleOf(study.id, \"linear\");\n scale.top = top;\n scale.height = heights[i];\n scale.marginTop = study.type === \"volume\" ? 0.18 : 0.14;\n scale.marginBottom = study.type === \"volume\" ? 0 : 0.1;\n if (study.range) scale.marginTop = scale.marginBottom = 0.06;\n next.push({\n id: study.id,\n study,\n scale,\n top,\n height: heights[i],\n ticks: [],\n step: 0,\n });\n top += heights[i];\n });\n for (const id of [...scales.keys()])\n if (!next.some((p) => p.id === id)) scales.delete(id);\n panes = next;\n };\n\n const paneAt = (y: number) =>\n panes.find((p) => y >= p.top && y < p.top + p.height) ?? null;\n\n const clampView = () => {\n const count = n();\n const minSpacing = Math.min(1, (plotW * 0.8) / Math.max(1, count));\n spacing = clamp(spacing, Math.max(1e-4, minSpacing), MAX_SPACING);\n const bars = plotW / spacing;\n if (!finite(right)) right = count - 1 + (options.rightOffset ?? 8);\n const hi =\n Math.max(0, count - 1) + Math.max(options.rightOffset ?? 8, bars * 0.75);\n const lo = Math.min(bars * 0.25, hi);\n right = clamp(right, lo, hi);\n };\n\n const computeVisible = (): Visible | null => {\n const count = n();\n if (!count) return null;\n const left = right - plotW / spacing;\n const level = spacing >= 2 ? 0 : Math.ceil(Math.log2(2 / spacing));\n const size = 2 ** level;\n const src = display();\n const cols = level\n ? pyramidLevel(\n style() === \"heikinAshi\" ? haPyramid : pyramid,\n src,\n count,\n level,\n )\n : src;\n const last = Math.floor((count - 1) / size);\n const i0 = clamp(Math.floor(left) - 1, 0, count - 1);\n const i1 = clamp(Math.ceil(right) + 1, 0, count - 1);\n const r0 = clamp(Math.ceil(left - 0.5), 0, count - 1);\n const r1 = clamp(Math.floor(right + 0.5), 0, count - 1);\n return {\n left,\n level,\n size,\n cols,\n g0: Math.floor(i0 / size),\n g1: Math.floor(i1 / size),\n s0: Math.floor(r0 / size),\n s1: Math.floor(r1 / size),\n last,\n };\n };\n\n /** Center index of a group */\n const groupCenter = (v: Visible, g: number) => g * v.size + (v.size - 1) / 2;\n const groupBars = (v: Visible, g: number) =>\n Math.min(v.size, n() - g * v.size);\n\n /** First visible bar: the base of the percent scale and of the baseline */\n const firstVisibleIndex = () =>\n clamp(Math.ceil(right - plotW / spacing - 0.5), 0, Math.max(0, n() - 1));\n\n const compareBase = (c: CompareRuntime) => {\n const count = n();\n for (let i = firstVisibleIndex(); i < count; i++) {\n const v = c.values[i];\n if (finite(v) && v !== 0) return v;\n }\n return NaN;\n };\n\n /** Scaled value of a comparison series (percent: from its own base) */\n const compareScaled = (scale: PaneScale, value: number, base: number) =>\n scale.mode === \"percent\"\n ? (value / base - 1) * 100\n : toScaled(scale, value);\n\n const baselinePrice = () =>\n options.baselinePrice ?? display().close[firstVisibleIndex()];\n\n /** Extends `[lo, hi]` with the visible groups of an output (shift included) */\n const outputExtent = (\n v: Visible,\n values: Float64Array,\n lod: RangePyramid,\n shiftBars: number,\n range: [number, number],\n ) => {\n const r = groupRanges(v, values, lod);\n const offset = Math.round(shiftBars / v.size);\n const a = clamp(v.s0 - offset, 0, v.last);\n const b = clamp(v.s1 - offset, 0, v.last);\n for (let g = a; g <= b; g++) {\n if (r.min[g] < range[0]) range[0] = r.min[g];\n if (r.max[g] > range[1]) range[1] = r.max[g];\n }\n };\n\n const autoscale = (v: Visible | null) => {\n volumeOverlayMax = 0;\n for (const pane of panes) {\n const scale = pane.scale;\n if (!v) continue;\n if (pane.id === PRICE) {\n scale.base = store.close[firstVisibleIndex()] || 1;\n const { cols } = v;\n const s = style();\n const closeOnly = s === \"line\" || s === \"area\" || s === \"baseline\";\n const range: [number, number] = [Infinity, -Infinity];\n for (let g = v.s0; g <= v.s1; g++) {\n const l = closeOnly ? cols.close[g] : cols.low[g];\n const h = closeOnly ? cols.close[g] : cols.high[g];\n if (l < range[0]) range[0] = l;\n if (h > range[1]) range[1] = h;\n }\n for (const study of studies) {\n if (!study.overlay || !isVisible(study)) continue;\n if (study.type === \"volume\") {\n for (let g = v.s0; g <= v.s1; g++) {\n const vol = cols.volume[g] / groupBars(v, g);\n if (vol > volumeOverlayMax) volumeOverlayMax = vol;\n }\n continue;\n }\n for (const out of study.outputs)\n outputExtent(v, out.values, lodOf(out), out.shift, range);\n }\n let [lo, hi] = range;\n if (s === \"baseline\") {\n const b = baselinePrice();\n if (b < lo) lo = b;\n if (b > hi) hi = b;\n }\n if (!scale.auto) continue;\n let a = toScaled(scale, lo);\n let b = toScaled(scale, hi);\n if (scale.mode === \"log\" && !(lo > 0))\n a = toScaled(scale, Math.max(hi * 1e-3, 1e-12));\n for (const c of compares) {\n const base = compareBase(c);\n const extent: [number, number] = [Infinity, -Infinity];\n outputExtent(v, c.values, c.lod, 0, extent);\n for (const value of extent) {\n const scaled = compareScaled(scale, value, base);\n if (scaled < a) a = scaled;\n if (scaled > b) b = scaled;\n }\n }\n if (scale.mode === \"percent\" && compares.length) {\n // the 0% line of a comparison stays in view\n a = Math.min(a, 0);\n b = Math.max(b, 0);\n }\n fitScale(scale, a, b);\n continue;\n }\n const study = pane.study;\n if (!study || !scale.auto) continue;\n if (study.range) {\n fitScale(scale, study.range[0], study.range[1]);\n continue;\n }\n const range: [number, number] = [Infinity, -Infinity];\n if (study.type === \"volume\") range[0] = 0;\n for (const out of study.outputs) {\n if (out.kind === \"volume\") {\n for (let g = v.s0; g <= v.s1; g++) {\n const value = v.cols.volume[g] / groupBars(v, g);\n if (value > range[1]) range[1] = value;\n }\n continue;\n }\n outputExtent(v, out.values, lodOf(out), out.shift, range);\n }\n let [lo, hi] = range;\n if (study.bands && finite(lo) && finite(hi)) {\n // reference bands (CCI ±100, DMI 25) stay in view\n for (const band of study.bands) {\n lo = Math.min(lo, band);\n hi = Math.max(hi, band);\n }\n }\n if (study.zero && finite(lo) && finite(hi)) {\n lo = Math.min(lo, 0);\n hi = Math.max(hi, 0);\n }\n fitScale(scale, lo, hi);\n }\n };\n\n // ----------------------------------------------------------------- ticks\n\n interface TimeLabel {\n x: number;\n text: string;\n bold: boolean;\n }\n\n const timeTicks = (\n v: Visible | null,\n ctx: CanvasRenderingContext2D,\n ): TimeLabel[] => {\n const count = n();\n if (!count || !v) return [];\n const tf = tfMs();\n const intraday = tf < DAY;\n // groups up to the right edge, past the last bar too\n const gEnd = Math.floor(Math.max(0, Math.ceil(right)) / v.size);\n const groupTime = (g: number) => {\n if (g <= v.last) return v.cols.time[g];\n return store.time[count - 1] + (g * v.size - (count - 1)) * tf;\n };\n const candidates: { x: number; weight: number; time: number }[] = [];\n let prev = v.g0 > 0 ? shift(groupTime(v.g0 - 1)) : NaN;\n for (let g = v.g0; g <= gEnd; g++) {\n const time = shift(groupTime(g));\n const x = xOf(groupCenter(v, g));\n const weight = boundaryWeight(prev, time);\n // no labels inside a second (tick charts)\n if (x >= -20 && x <= plotW + 20 && weight > 10)\n candidates.push({ x, weight, time });\n prev = time;\n }\n ctx.font = font(theme.fontSize);\n const sample = intraday ? \"00:00\" : \"Sep 30\";\n const gap =\n Math.max(ctx.measureText(sample).width, ctx.measureText(\"2024\").width) +\n 34;\n return pickTicks(candidates, gap)\n .filter((t) => t.x > 8 && t.x < plotW - 8)\n .map((t) => ({\n x: t.x,\n text: tickText(t.time, t.weight, locale, intraday),\n bold: t.weight >= (intraday ? 50 : 60),\n }));\n };\n\n const paneTickText = (pane: Pane, scaled: number) => {\n if (pane.id === PRICE) {\n if (pane.scale.mode === \"percent\")\n return formatPercent(\n scaled,\n locale,\n Math.min(2, stepDecimals(pane.step)),\n );\n return formatPrice(fromScaled(pane.scale, scaled));\n }\n if (pane.study?.compact) return formatVolume(scaled, locale);\n return formatFixed(scaled, Math.min(4, stepDecimals(pane.step)), locale);\n };\n\n /** Text of a value of a study in the legend */\n const studyValueText = (study: Study, value: number) => {\n if (study.overlay && study.type !== \"volume\") return formatPrice(value);\n if (study.compact) return formatVolume(value, locale);\n return formatFixed(\n value,\n study.range ? 2 : Math.max(2, Math.min(6, precision())),\n locale,\n );\n };\n\n // ------------------------------------------------------------ GPU items\n\n const createLayers = (v: Visible, dpr: number): Layer[] => {\n const result: Layer[] = [];\n const cols = v.cols;\n const up = resolve(upCss());\n const down = resolve(downCss());\n const upP = packColor(up);\n const downP = packColor(down);\n const bg = theme.background;\n const metrics = candleMetrics(spacing * v.size * dpr, dpr);\n const X = (g: number) => xOf(groupCenter(v, g)) * dpr;\n const s = style();\n\n const histogramHalf = Math.max(0.5, metrics.body / 2);\n const volumeColors = {\n up: packColor([up[0], up[1], up[2], 0.5]),\n down: packColor([down[0], down[1], down[2], 0.5]),\n };\n\n for (const pane of panes) {\n const top = pane.top * dpr;\n const bottom = (pane.top + pane.height) * dpr;\n const scale = pane.scale;\n const Y = (value: number) => yOf(scale, value) * dpr;\n\n const lineLayer =\n (\n values: (g: number) => number,\n color: Rgba,\n lineWidth: number,\n toY: (value: number) => number = Y,\n ): Layer =>\n (ga, gb, isLive) => {\n const buffer = new LineBuffer(top, bottom);\n for (let g = isLive ? Math.max(v.g0, ga - 1) : ga; g <= gb; g++)\n buffer.push(X(g), toY(values(g)));\n return buffer.count > 1 ? [buffer.item(\"\", 0, color, lineWidth)] : [];\n };\n\n /**\n * Line of a column of values: one point per bar, or the low and high\n * of each group once zoomed out (min / max decimation), drawn\n * `shiftBars` later\n */\n const rangeLayer =\n (\n values: Float64Array,\n lod: RangePyramid,\n color: Rgba,\n lineWidth: number,\n shiftBars = 0,\n toY: (value: number) => number = Y,\n ): Layer =>\n (ga, gb, isLive) => {\n const r = groupRanges(v, values, lod);\n const dx = shiftBars * spacing * dpr;\n const extra = Math.ceil(Math.abs(shiftBars) / v.size) + 1;\n let from = isLive ? Math.max(0, ga - 1) : ga;\n let to = gb;\n if (!isLive && shiftBars > 0) from = Math.max(0, from - extra);\n if (!isLive && shiftBars < 0) to = Math.min(v.last - 1, to + extra);\n const buffer = new LineBuffer(top, bottom);\n let prevY = NaN;\n for (let g = from; g <= to; g++) {\n const x = X(g) + dx;\n const lo = r.min[g];\n const hi = r.max[g];\n if (!v.level || lo === hi || !finite(lo) || !finite(hi)) {\n prevY = toY(r.last[g]);\n buffer.push(x, prevY);\n continue;\n }\n const yLo = toY(lo);\n const yHi = toY(hi);\n // start with the extreme closest to the previous point\n const first =\n finite(prevY) && Math.abs(prevY - yHi) < Math.abs(prevY - yLo)\n ? yHi\n : yLo;\n const second = first === yHi ? yLo : yHi;\n buffer.push(x, first);\n buffer.push(x, second);\n prevY = second;\n }\n return buffer.count > 1 ? [buffer.item(\"\", 0, color, lineWidth)] : [];\n };\n\n if (pane.id === PRICE) {\n // volume at the bottom of the price pane\n const volumeStudy = studies.find(\n (st) => st.overlay && st.type === \"volume\" && isVisible(st),\n );\n if (volumeStudy && volumeOverlayMax > 0) {\n const h = (bottom - top) * 0.2;\n result.push((ga, gb) => {\n const buffer = new BarBuffer();\n for (let g = ga; g <= gb; g++) {\n const vol = cols.volume[g] / groupBars(v, g);\n if (!(vol > 0)) continue;\n const y = bottom - (vol / volumeOverlayMax) * h;\n const [a, b] = pixelRange(y, bottom);\n buffer.push(\n metrics.snap(X(g)),\n a,\n b,\n cols.close[g] >= cols.open[g]\n ? volumeColors.up\n : volumeColors.down,\n );\n }\n return [buffer.item(\"\", 0, histogramHalf)];\n });\n }\n // comparison series\n for (const c of compares) {\n const base = compareBase(c);\n const color = resolve(c.color);\n result.push(\n rangeLayer(\n c.values,\n c.lod,\n color,\n c.width,\n 0,\n (value) =>\n yOfScaled(scale, compareScaled(scale, value, base)) * dpr,\n ),\n );\n }\n // the bars\n if (s === \"line\" || s === \"area\" || s === \"baseline\") {\n const lineColor = resolve(PRIMARY);\n if (s === \"area\") {\n result.push((ga, gb, isLive) => {\n const area = new AreaBuffer(top, bottom);\n for (let g = isLive ? Math.max(v.g0, ga - 1) : ga; g <= gb; g++)\n area.push(X(g), Y(cols.close[g]), bottom);\n return area.count > 1 ? [area.item(\"\", 0, lineColor, 0.28)] : [];\n });\n }\n if (s === \"baseline\") {\n const yb = Y(baselinePrice());\n result.push((ga, gb, isLive) => {\n const upArea = new AreaBuffer(top, bottom);\n const downArea = new AreaBuffer(top, bottom);\n const upLine = new LineBuffer(top, bottom);\n const downLine = new LineBuffer(top, bottom);\n let px = NaN;\n let py = NaN;\n const point = (x: number, y: number) => {\n upArea.push(x, Math.min(y, yb), yb);\n downArea.push(x, Math.max(y, yb), yb);\n if (y <= yb) upLine.push(x, y);\n else upLine.break();\n if (y >= yb) downLine.push(x, y);\n else downLine.break();\n };\n for (let g = isLive ? Math.max(v.g0, ga - 1) : ga; g <= gb; g++) {\n const x = X(g);\n const y = Y(cols.close[g]);\n if (finite(py) && (py - yb) * (y - yb) < 0) {\n const t = (yb - py) / (y - py);\n point(px + (x - px) * t, yb);\n }\n point(x, y);\n px = x;\n py = y;\n }\n const out: RenderItem[] = [];\n if (upArea.count > 1)\n out.push(\n upArea.item(\"u\", 0, up, 0.22),\n downArea.item(\"d\", 0, down, 0.22),\n );\n if (upLine.count > 1) out.push(upLine.item(\"ul\", 0, up, 2));\n if (downLine.count > 1) out.push(downLine.item(\"dl\", 0, down, 2));\n return out;\n });\n } else {\n result.push(lineLayer((g) => cols.close[g], lineColor, 2));\n }\n } else {\n const hollow = s === \"hollowCandles\";\n const ohlc = s === \"bars\";\n const wick = metrics.wick;\n const body = metrics.body;\n result.push((ga, gb) => {\n const wicks = new BarBuffer();\n const bodies = new BarBuffer();\n const caps = new BarBuffer();\n const ticks = new BarBuffer();\n const tick = Math.max(wick, Math.round((body - wick) / 2));\n for (let g = ga; g <= gb; g++) {\n const o = cols.open[g];\n const h = cols.high[g];\n const l = cols.low[g];\n const c = cols.close[g];\n if (!finite(o) || !finite(c)) continue;\n const rising = hollow\n ? c >= (g > 0 ? cols.close[g - 1] : o)\n : c >= o;\n const color = rising ? upP : downP;\n const cx = metrics.snap(X(g));\n const [wt, wb] = pixelRange(Y(h), Y(l));\n if (ohlc) {\n const range = clampRange(wt, wb, top, bottom);\n if (range) wicks.push(cx, range[0], range[1], color);\n for (const [value, side] of [\n [o, -1],\n [c, 1],\n ] as const) {\n const y = Math.round(Y(value) - wick / 2);\n if (y < top || y + wick > bottom) continue;\n ticks.push(\n cx + side * (wick / 2 + tick / 2),\n y,\n y + wick,\n color,\n );\n }\n continue;\n }\n const [bt, bb] = pixelRange(Y(o), Y(c));\n if (body <= wick) {\n const range = clampRange(wt, wb, top, bottom);\n if (range) wicks.push(cx, range[0], range[1], color);\n continue;\n }\n if (hollow && c > o) {\n const segments: [number, number][] = [\n [wt, bt],\n [bb, wb],\n ];\n for (const [a, b] of segments) {\n const range = b > a ? clampRange(a, b, top, bottom) : null;\n if (range) wicks.push(cx, range[0], range[1], color);\n }\n const edges = clampRange(bt, bb, top, bottom);\n if (edges) {\n wicks.push(\n cx - body / 2 + wick / 2,\n edges[0],\n edges[1],\n color,\n );\n wicks.push(\n cx + body / 2 - wick / 2,\n edges[0],\n edges[1],\n color,\n );\n }\n for (const y of [bt, bb - wick]) {\n if (y >= top && y + wick <= bottom)\n caps.push(cx, y, y + wick, color);\n }\n continue;\n }\n const range = clampRange(wt, wb, top, bottom);\n if (range) wicks.push(cx, range[0], range[1], color);\n const box = clampRange(bt, bb, top, bottom);\n if (box) bodies.push(cx, box[0], box[1], color);\n }\n const items: RenderItem[] = [wicks.item(\"w\", 0, wick / 2)];\n if (bodies.count) items.push(bodies.item(\"b\", 0, body / 2));\n if (caps.count) items.push(caps.item(\"c\", 0, body / 2));\n if (ticks.count) items.push(ticks.item(\"t\", 0, tick / 2));\n return items;\n });\n }\n }\n\n // indicators of the pane\n const paneStudies =\n pane.id === PRICE\n ? studies.filter((st) => st.overlay && st.type !== \"volume\")\n : pane.study\n ? [pane.study]\n : [];\n for (const study of paneStudies) {\n if (!isVisible(study)) continue;\n for (const out of study.outputs) {\n if (out.kind === \"volume\") {\n const y0 = Y(0);\n result.push((ga, gb) => {\n const buffer = new BarBuffer();\n for (let g = ga; g <= gb; g++) {\n const vol = cols.volume[g] / groupBars(v, g);\n if (!(vol > 0)) continue;\n const range = clampRange(\n ...pixelRange(Y(vol), y0),\n top,\n bottom,\n );\n if (range)\n buffer.push(\n metrics.snap(X(g)),\n range[0],\n range[1],\n cols.close[g] >= cols.open[g]\n ? volumeColors.up\n : volumeColors.down,\n );\n }\n return [buffer.item(\"\", 0, histogramHalf)];\n });\n } else if (out.kind === \"histogram\") {\n const y0 = Y(0);\n const strong = { up: upP, down: downP };\n const faded = {\n up: packColor(mix(bg, up, 0.45)),\n down: packColor(mix(bg, down, 0.45)),\n };\n const lod = lodOf(out);\n result.push((ga, gb) => {\n const r = groupRanges(v, out.values, lod);\n const buffer = new BarBuffer();\n for (let g = ga; g <= gb; g++) {\n const value = r.last[g];\n if (!finite(value)) continue;\n const prev = g > 0 ? r.last[g - 1] : value;\n const color =\n value >= 0\n ? value >= prev\n ? strong.up\n : faded.up\n : value <= prev\n ? strong.down\n : faded.down;\n // a group spans its lowest and highest values (and zero)\n const lo = Math.min(0, finite(r.min[g]) ? r.min[g] : value);\n const hi = Math.max(0, finite(r.max[g]) ? r.max[g] : value);\n const range = clampRange(\n ...(v.level\n ? pixelRange(Y(hi), Y(lo))\n : pixelRange(Y(value), y0)),\n top,\n bottom,\n );\n if (range)\n buffer.push(metrics.snap(X(g)), range[0], range[1], color);\n }\n return [buffer.item(\"\", 0, histogramHalf)];\n });\n } else if (out.kind === \"dots\") {\n const fixed = out.color\n ? packColor(resolve(colorOf(out.color)))\n : 0;\n const radius = clamp(spacing * v.size * 0.22, 1.25, 2.6);\n const half = radius * dpr;\n result.push((ga, gb) => {\n const buffer = new BarBuffer();\n for (let g = ga; g <= gb; g++) {\n const value = v.level\n ? out.values[Math.min(n() - 1, g * v.size + v.size - 1)]\n : out.values[g];\n if (!finite(value)) continue;\n const y = Y(value);\n if (y < top || y > bottom) continue;\n const color = fixed || (value <= cols.close[g] ? upP : downP);\n buffer.push(X(g), y - half, y + half, color);\n }\n return buffer.count ? [buffer.item(\"\", 0, half, 0, radius)] : [];\n });\n } else {\n const color = resolve(colorOf(out.color));\n result.push(\n rangeLayer(\n out.values,\n lodOf(out),\n [color[0], color[1], color[2], color[3] * out.alpha],\n out.width,\n out.shift,\n ),\n );\n }\n }\n }\n }\n return result;\n };\n\n /** Builds the items of the main bars or of the last group */\n const runLayer = (\n fn: Layer,\n index: number,\n v: Visible,\n isLive: boolean,\n ): RenderItem[] => {\n const lastMain = Math.min(v.g1, v.last - 1);\n const items = isLive\n ? v.last >= v.g0 && v.last <= v.g1\n ? fn(v.last, v.last, true)\n : []\n : lastMain >= v.g0\n ? fn(v.g0, lastMain, false)\n : [];\n const version = ++itemVersion;\n return items.map((item, k) => ({\n ...item,\n key: `L${index}:${k}:${item.kind}:${item.key}${isLive ? \":live\" : \"\"}`,\n version,\n }));\n };\n\n const renderData = (v: Visible | null, dpr: number) => {\n if (!renderer) return;\n const canvas = renderer.canvas;\n styleElement(canvas, {\n left: \"0px\",\n top: \"0px\",\n width: `${plotW}px`,\n height: `${plotH}px`,\n });\n const bw = Math.max(1, Math.round(plotW * dpr));\n const bh = Math.max(1, Math.round(plotH * dpr));\n if (canvas.width !== bw || canvas.height !== bh) renderer.resize(bw, bh);\n if (v) {\n const key = [\n bw,\n bh,\n dpr,\n spacing,\n right,\n v.level,\n style(),\n dataVersion,\n themeVersion,\n optionsVersion,\n volumeOverlayMax,\n style() === \"baseline\" ? baselinePrice() : 0,\n ...panes.map(\n (p) =>\n `${p.id}:${p.top}:${p.height}:${p.scale.min}:${p.scale.max}:${p.scale.base}:${p.scale.mode}`,\n ),\n ...studies.map((st) => `${st.id}:${isVisible(st)}`),\n ].join(\"|\");\n if (key !== geomKey) {\n geomKey = key;\n builtTail = tailVersion;\n layers = createLayers(v, dpr).map((fn) => ({ fn, main: [], live: [] }));\n layers.forEach((l, i) => {\n l.main = runLayer(l.fn, i, v, false);\n l.live = runLayer(l.fn, i, v, true);\n });\n } else if (builtTail !== tailVersion) {\n builtTail = tailVersion;\n layers.forEach((l, i) => {\n l.live = runLayer(l.fn, i, v, true);\n });\n }\n } else {\n layers = [];\n geomKey = \"\";\n }\n const items = layers.flatMap((l) => [...l.main, ...l.live]);\n renderer.render(items, {\n transform: { xScale: 2 / bw, xOffset: -1, yScale: -2 / bh, yOffset: 1 },\n width: bw,\n height: bh,\n dpr,\n });\n };\n\n // -------------------------------------------------------- 2D painting\n\n const sizeCanvas = (canvas: HTMLCanvasElement, dpr: number) => {\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (canvas.width !== w) canvas.width = w;\n if (canvas.height !== h) canvas.height = h;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n };\n\n const roundRect = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n ) => {\n ctx.beginPath();\n if (typeof ctx.roundRect === \"function\") ctx.roundRect(x, y, w, h, r);\n else ctx.rect(x, y, w, h);\n };\n\n /** Area between two outputs of a study, colored by which one is above */\n const paintFill = (\n ctx: CanvasRenderingContext2D,\n v: Visible,\n pane: Pane,\n study: Study,\n f: Study[\"fills\"][number],\n ) => {\n const outA = study.outputs[f.a];\n const outB = study.outputs[f.b];\n if (!outA || !outB) return;\n const ra = groupRanges(v, outA.values, lodOf(outA));\n const rb = groupRanges(v, outB.values, lodOf(outB));\n const shiftBars = outA.shift;\n const extra = Math.ceil(Math.abs(shiftBars) / v.size) + 1;\n const from = Math.max(0, v.g0 - (shiftBars > 0 ? extra : 0));\n const to = Math.min(v.last, v.g1 + (shiftBars < 0 ? extra : 0));\n const above = css(colorOf(f.color), f.opacity);\n const below = css(colorOf(f.colorBelow ?? f.color), f.opacity);\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, pane.top, plotW, pane.height);\n ctx.clip();\n let run: { x: number; ya: number; yb: number }[] = [];\n let sign = 0;\n const flush = () => {\n if (run.length > 1) {\n ctx.fillStyle = sign >= 0 ? above : below;\n ctx.beginPath();\n run.forEach((p, i) =>\n i ? ctx.lineTo(p.x, p.ya) : ctx.moveTo(p.x, p.ya),\n );\n for (let k = run.length - 1; k >= 0; k--) {\n const p = run[k];\n if (p) ctx.lineTo(p.x, p.yb);\n }\n ctx.closePath();\n ctx.fill();\n }\n run = [];\n };\n for (let g = from; g <= to; g++) {\n const a = ra.last[g];\n const b = rb.last[g];\n if (!finite(a) || !finite(b)) {\n flush();\n sign = 0;\n continue;\n }\n const x = xOf(groupCenter(v, g) + shiftBars);\n const ya = yOf(pane.scale, a);\n const yb = yOf(pane.scale, b);\n const s = a >= b ? 1 : -1;\n const prev = run[run.length - 1];\n if (prev && s !== sign) {\n // the lines cross: close the run at the crossing\n const d0 = prev.ya - prev.yb;\n const t = d0 / (d0 - (ya - yb));\n const cx = prev.x + (x - prev.x) * t;\n const cy = prev.ya + (ya - prev.ya) * t;\n run.push({ x: cx, ya: cy, yb: cy });\n flush();\n run.push({ x: cx, ya: cy, yb: cy });\n }\n sign = s;\n run.push({ x, ya, yb });\n }\n flush();\n ctx.restore();\n };\n\n /** Dashed lines where a day starts (in the displayed time zone) */\n const paintSessionBreaks = (ctx: CanvasRenderingContext2D, v: Visible) => {\n if (!options.sessionBreaks || tfMs() >= DAY) return;\n const xs: number[] = [];\n let prevDay = NaN;\n for (let g = Math.max(0, v.g0 - 1); g <= Math.min(v.g1, v.last); g++) {\n const day = Math.floor(shift(v.cols.time[g]) / DAY);\n if (finite(prevDay) && day !== prevDay) {\n const x = Math.round(xOf(g * v.size - 0.5)) + 0.5;\n if (x > 0 && x < plotW) xs.push(x);\n // too dense to read: none at all\n if (xs.length > plotW / 6) return;\n }\n prevDay = day;\n }\n if (!xs.length) return;\n ctx.save();\n ctx.strokeStyle = toCss(theme.textMuted, 0.4);\n ctx.setLineDash([4, 4]);\n ctx.beginPath();\n for (const x of xs) {\n ctx.moveTo(x, 0);\n ctx.lineTo(x, plotH);\n }\n ctx.stroke();\n ctx.restore();\n };\n\n const profileOptions = (): TradingVolumeProfileOptions | null => {\n const option = options.volumeProfile;\n if (!option) return null;\n return option === true ? {} : option;\n };\n\n /** Volume by price of the visible bars, from the right (or left) edge */\n const paintVolumeProfile = (ctx: CanvasRenderingContext2D, v: Visible) => {\n const o = profileOptions();\n const price = panes[0];\n if (!o || !price || !store.hasVolume) return;\n const rows = clamp(Math.floor(o.rows ?? 24), 2, 400);\n const key = [\n v.level,\n v.s0,\n v.s1,\n rows,\n o.valueArea ?? 0.7,\n dataVersion,\n tailVersion,\n ].join(\"|\");\n if (!profile || profile.key !== key) {\n // real prices, also under Heikin-Ashi bars\n const cols = v.level ? pyramidLevel(pyramid, store, n(), v.level) : store;\n profile = {\n key,\n result: volumeProfile(cols, {\n from: v.s0,\n to: v.s1,\n rows,\n valueArea: o.valueArea,\n }),\n };\n }\n const r = profile.result;\n if (r.poc < 0) return;\n let largest = 0;\n for (let i = 0; i < rows; i++)\n largest = Math.max(largest, (r.up[i] ?? 0) + (r.down[i] ?? 0));\n if (!(largest > 0)) return;\n const span = plotW * clamp(o.width ?? 0.28, 0.05, 0.9);\n const fromRight = (o.side ?? \"right\") === \"right\";\n const upColor = resolve(colorOf(o.upColor ?? \"up\"));\n const downColor = resolve(colorOf(o.downColor ?? \"down\"));\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, price.top, plotW, price.height);\n ctx.clip();\n for (let i = 0; i < rows; i++) {\n const up = r.up[i] ?? 0;\n const down = r.down[i] ?? 0;\n if (!(up + down > 0)) continue;\n const y0 = yOf(price.scale, r.low + i * r.step);\n const y1 = yOf(price.scale, r.low + (i + 1) * r.step);\n const top = Math.min(y0, y1);\n const h = Math.max(\n 1,\n Math.abs(y1 - y0) - (Math.abs(y1 - y0) > 4 ? 1 : 0),\n );\n const inside = i >= r.valueAreaFrom && i <= r.valueAreaTo;\n const alpha = inside ? 0.42 : 0.17;\n const upLength = (up / largest) * span;\n const downLength = (down / largest) * span;\n const edge = fromRight ? plotW : 0;\n const dir = fromRight ? -1 : 1;\n ctx.fillStyle = toCss(upColor, alpha);\n ctx.fillRect(Math.min(edge, edge + dir * upLength), top, upLength, h);\n ctx.fillStyle = toCss(downColor, alpha);\n const start = edge + dir * upLength;\n ctx.fillRect(\n Math.min(start, start + dir * downLength),\n top,\n downLength,\n h,\n );\n }\n // point of control\n const y =\n Math.round(yOf(price.scale, r.low + (r.poc + 0.5) * r.step)) + 0.5;\n ctx.strokeStyle = css(o.pocColor ?? WARNING, 0.9);\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n ctx.stroke();\n ctx.restore();\n };\n\n const paintBackground = (\n ctx: CanvasRenderingContext2D,\n v: Visible | null,\n ticks: TimeLabel[],\n ) => {\n const grid = toCss(theme.grid);\n const showGrid = options.grid !== false;\n ctx.lineWidth = 1;\n if (showGrid) {\n ctx.strokeStyle = grid;\n ctx.beginPath();\n for (const t of ticks) {\n const x = Math.round(t.x) + 0.5;\n ctx.moveTo(x, 0);\n ctx.lineTo(x, plotH);\n }\n for (const pane of panes) {\n for (const t of pane.ticks) {\n const y = Math.round(yOfScaled(pane.scale, t)) + 0.5;\n if (y < pane.top + 2 || y > pane.top + pane.height - 2) continue;\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n }\n }\n ctx.stroke();\n }\n // watermark\n if (options.watermark) {\n const price = panes[0];\n ctx.save();\n ctx.font = font(Math.min(56, Math.max(22, plotW / 14)), 700);\n ctx.fillStyle = toCss(theme.text, 0.07);\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(options.watermark, plotW / 2, price.top + price.height / 2);\n ctx.restore();\n }\n // bands of the indicator panes\n for (const pane of panes) {\n const study = pane.study;\n if (study?.bands && isVisible(study)) {\n const color = resolve(colorOf(study.outputs[0]?.color ?? PRIMARY));\n const ys = study.bands.map((b) => Math.round(yOf(pane.scale, b)) + 0.5);\n if (study.bandFill && ys.length === 2) {\n ctx.fillStyle = toCss(color, 0.07);\n ctx.fillRect(\n 0,\n Math.min(ys[0], ys[1]),\n plotW,\n Math.abs(ys[1] - ys[0]),\n );\n }\n ctx.save();\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = toCss(theme.textMuted, 0.45);\n ctx.beginPath();\n for (const y of ys) {\n if (y < pane.top || y > pane.top + pane.height) continue;\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n }\n ctx.stroke();\n ctx.restore();\n }\n }\n if (v) {\n paintSessionBreaks(ctx, v);\n for (const study of studies) {\n if (!study.fills.length || !isVisible(study)) continue;\n const pane = study.overlay\n ? panes[0]\n : panes.find((p) => p.study === study);\n if (pane)\n for (const f of study.fills) paintFill(ctx, v, pane, study, f);\n }\n const price = panes[0];\n if (price && price.scale.mode === \"percent\" && compares.length) {\n // the common origin of the compared series\n const y = Math.round(yOfScaled(price.scale, 0)) + 0.5;\n if (y > price.top && y < price.top + price.height) {\n ctx.save();\n ctx.strokeStyle = toCss(theme.textMuted, 0.6);\n ctx.setLineDash([2, 3]);\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n ctx.stroke();\n ctx.restore();\n }\n }\n paintVolumeProfile(ctx, v);\n }\n // separators and axis borders\n ctx.strokeStyle = toCss(theme.axis);\n ctx.beginPath();\n for (const pane of panes.slice(1)) {\n const y = Math.round(pane.top) + 0.5;\n ctx.moveTo(0, y);\n ctx.lineTo(width, y);\n }\n ctx.moveTo(Math.round(plotW) + 0.5, 0);\n ctx.lineTo(Math.round(plotW) + 0.5, height);\n ctx.moveTo(0, Math.round(plotH) + 0.5);\n ctx.lineTo(width, Math.round(plotH) + 0.5);\n ctx.stroke();\n };\n\n /** Label on the price axis; returns its vertical extent */\n const axisLabel = (\n ctx: CanvasRenderingContext2D,\n y: number,\n text: string,\n fill: string,\n textColor: string,\n second?: string,\n ) => {\n const h = second ? 32 : 18;\n const top = clamp(Math.round(y - 9), 0, plotH - h);\n roundRect(ctx, plotW + 1, top, axisW - 2, h, 3);\n ctx.fillStyle = fill;\n ctx.fill();\n ctx.fillStyle = textColor;\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n ctx.font = font(theme.fontSize, 500);\n ctx.fillText(text, plotW + 7, top + 9.5);\n if (second) {\n ctx.font = font(theme.fontSize - 1);\n ctx.fillText(second, plotW + 7, top + 24);\n }\n };\n\n const priceAxisText = (value: number) =>\n panes[0]?.scale.mode === \"percent\"\n ? formatPercent(toScaled(panes[0].scale, value), locale)\n : formatPrice(value);\n\n const lineColor = (line: TradingPriceLine) => {\n if (line.color) return css(line.color);\n const kind = line.kind ?? \"line\";\n if (kind === \"takeProfit\") return css(upCss());\n if (kind === \"stopLoss\") return css(downCss());\n if (kind === \"alert\") return css(WARNING);\n if (kind === \"line\") return css(PRIMARY);\n return css(line.side === \"sell\" ? downCss() : upCss());\n };\n\n const linePrice = (line: TradingPriceLine) =>\n lineOverrides.get(line.id) ?? line.price;\n\n const crosshairState = () => {\n if (!vis || !panes.length) return null;\n if (keyboardIndex !== null) {\n const index = keyboardIndex;\n const bar = index >= 0 && index < n() ? display().close[index] : NaN;\n return { index, pane: panes[0], y: yOf(panes[0].scale, bar), price: bar };\n }\n if (!pointer && externalCross) {\n const index = Math.round(indexOfTimeExt(externalCross.time));\n const price = externalCross.price;\n return {\n index,\n pane: panes[0],\n y: finite(price) ? yOf(panes[0].scale, price) : NaN,\n price,\n };\n }\n if (!pointer || pointer.x > plotW || pointer.y > plotH) return null;\n const pane = paneAt(pointer.y);\n if (!pane) return null;\n const index = Math.round(indexAt(pointer.x));\n let y = pointer.y;\n let price = valueAt(pane.scale, y);\n if (\n pane.id === PRICE &&\n options.crosshair !== \"free\" &&\n index >= 0 &&\n index < n() &&\n tool === \"cursor\"\n ) {\n const d = display();\n let best = Infinity;\n for (const value of [\n d.open[index],\n d.high[index],\n d.low[index],\n d.close[index],\n ]) {\n const yy = yOf(pane.scale, value);\n if (Math.abs(yy - pointer.y) < best) {\n best = Math.abs(yy - pointer.y);\n y = yy;\n price = value;\n }\n }\n }\n return { index, pane, y, price };\n };\n\n const paneOf = (id: string | undefined) =>\n panes.find((p) => p.id === (id ?? PRICE)) ?? null;\n\n const drawingMapper = (pane: Pane | null): DrawingMapper | null => {\n if (!pane) return null;\n return {\n x: xOf,\n y: (p) => yOf(pane.scale, p),\n index: indexOfTimeExt,\n left: 0,\n right: plotW,\n top: pane.top,\n bottom: pane.top + pane.height,\n };\n };\n\n const formatSpan = (bars: number, ms: number) => {\n const l = labels();\n const abs = Math.abs(ms);\n const parts: string[] = [];\n const days = Math.floor(abs / DAY);\n const hours = Math.floor((abs % DAY) / HOUR);\n const minutes = Math.floor((abs % HOUR) / MINUTE);\n if (days) parts.push(fill(l.days, { count: days }));\n if (hours) parts.push(fill(l.hours, { count: hours }));\n if (minutes && !days) parts.push(fill(l.minutes, { count: minutes }));\n return `${fill(labels().bars, { count: bars })}, ${parts.join(\" \") || fill(l.minutes, { count: 0 })}`;\n };\n\n /** A value of a pane as written by its axis (prices on the price pane) */\n const paneValueText = (pane: Pane, value: number) =>\n pane.id === PRICE ? formatPrice(value) : paneTickText(pane, value);\n\n /** Price rounded to the precision of the prices */\n const roundPrice = (price: number) => {\n const step = 10 ** -precision();\n return Number((Math.round(price / step) * step).toFixed(precision()));\n };\n\n /** A rounded label (pill) with text */\n const pill = (\n ctx: CanvasRenderingContext2D,\n text: string,\n x: number,\n y: number,\n fillColor: string,\n align: \"left\" | \"center\" | \"right\" = \"center\",\n ) => {\n ctx.font = font(theme.fontSize, 500);\n const w = ctx.measureText(text).width + 16;\n const left = clamp(\n align === \"center\" ? x - w / 2 : align === \"right\" ? x - w : x,\n 2,\n Math.max(2, plotW - w - 2),\n );\n roundRect(ctx, left, y, w, 22, 11);\n ctx.fillStyle = fillColor;\n ctx.fill();\n ctx.fillStyle = textOn(fillColor);\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(text, left + w / 2, y + 11.5);\n return w;\n };\n\n /** Registers a clickable area of the canvas; returns whether it is hovered */\n const canvasButton = (\n x: number,\n y: number,\n w: number,\n h: number,\n action: () => void,\n ) => {\n canvasButtons.push({ x, y, w, h, action });\n return hoveredButton === canvasButtons.length - 1;\n };\n\n const paintDrawings = (\n ctx: CanvasRenderingContext2D,\n colors: { text: string; background: string; up: string; down: string },\n ) => {\n const count = n();\n const last = count ? store.close[count - 1] : NaN;\n const all = draft ? [...drawings, draft] : drawings;\n if (!all.length) return;\n const l = labels();\n const position = {\n target: l.target,\n stop: l.stop,\n riskReward: l.riskReward,\n profit: l.profit,\n long: l.long,\n short: l.short,\n };\n for (const pane of panes) {\n const mapper = drawingMapper(pane);\n if (!mapper) continue;\n const own = all.filter((d) => (d.pane ?? PRICE) === pane.id);\n if (!own.length) continue;\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, pane.top, plotW, pane.height);\n ctx.clip();\n for (const drawing of own) {\n const box = paintDrawing(\n ctx,\n drawing,\n mapper,\n {\n ...colors,\n color: css(drawing.color ?? PRIMARY),\n font: font(theme.fontSize, 500),\n fontFamily: theme.fontFamily,\n formatPrice: (value) => paneValueText(pane, value),\n formatPercent: (value) => formatPercent(value, locale),\n formatSpan,\n textOn,\n defaultText: l.text,\n position,\n last: pane.id === PRICE ? last : NaN,\n fill,\n },\n {\n selected: drawing === draft || drawing.id === selected,\n hovered: drawing.id === hovered,\n },\n );\n if (box) textBoxes.set(drawing.id, box);\n }\n ctx.restore();\n }\n };\n\n const paintForeground = (\n ctx: CanvasRenderingContext2D,\n v: Visible | null,\n ticks: TimeLabel[],\n ) => {\n const price = panes[0];\n if (!price) return;\n canvasButtons = [];\n const count = n();\n const text = toCss(theme.text);\n const muted = toCss(theme.textMuted);\n const bgCss = toCss(theme.background);\n const upC = css(upCss());\n const downC = css(downCss());\n const l = labels();\n\n // ---- price pane contents (clipped)\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, price.top, plotW, price.height);\n ctx.clip();\n\n // high / low of the visible bars, kept inside the plot\n if (\n v &&\n options.highLowMarkers !== false &&\n style() !== \"line\" &&\n style() !== \"area\" &&\n style() !== \"baseline\"\n ) {\n let hi = -Infinity;\n let lo = Infinity;\n let hiG = -1;\n let loG = -1;\n for (let g = v.s0; g <= v.s1; g++) {\n if (v.cols.high[g] > hi) {\n hi = v.cols.high[g];\n hiG = g;\n }\n if (v.cols.low[g] < lo) {\n lo = v.cols.low[g];\n loG = g;\n }\n }\n ctx.font = font(theme.fontSize);\n ctx.fillStyle = muted;\n ctx.strokeStyle = muted;\n ctx.lineWidth = 1;\n for (const [g, value, below] of [\n [hiG, hi, false],\n [loG, lo, true],\n ] as const) {\n if (g < 0 || !finite(value)) continue;\n const x = xOf(groupCenter(v, g));\n const label = formatPrice(value);\n const w = ctx.measureText(label).width;\n let y = clamp(\n yOf(price.scale, value) + (below ? 9 : -9),\n price.top + 8,\n price.top + price.height - 8,\n );\n // not under a row of the legend\n const labelLeft = Math.min(x, x + (x > plotW * 0.6 ? -17 - w : 17 + w));\n for (const row of priceLegend) {\n if (\n labelLeft < row.right &&\n y - 7 < row.bottom &&\n y + 7 > row.top &&\n row.bottom + 10 < price.top + price.height - 8\n )\n y = row.bottom + 10;\n }\n // on the right of the bar, unless it does not fit there\n const roomRight = plotW - 4 - (x + 17 + w);\n const roomLeft = x - 17 - w - 4;\n const leftSide =\n (roomRight < 0 || x > plotW * 0.6) &&\n roomLeft >= Math.min(0, roomRight);\n const dir = leftSide ? -1 : 1;\n ctx.textBaseline = \"middle\";\n ctx.textAlign = \"left\";\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + dir * 14, y);\n ctx.stroke();\n const tx = clamp(leftSide ? x - 17 - w : x + 17, 2, plotW - w - 2);\n ctx.fillText(label, tx, y);\n }\n }\n\n // trade markers\n if (v && options.markers?.length) {\n const stack = new Map<string, number>();\n ctx.font = font(theme.fontSize, 600);\n ctx.textAlign = \"center\";\n const many = options.markers.length > 400;\n for (const marker of options.markers) {\n const index = indexOfTimeExt(marker.time);\n if (index < 0 || index > count - 1) continue;\n const g = Math.floor(index / v.size);\n if (g < v.g0 || g > v.g1) continue;\n const x = Math.round(xOf(groupCenter(v, g)));\n const sell = marker.side === \"sell\";\n const color = marker.color ? css(marker.color) : sell ? downC : upC;\n const key = `${g}:${sell}`;\n const offset = stack.get(key) ?? 0;\n stack.set(key, offset + (marker.text && !many ? 30 : 16));\n const anchor = yOf(price.scale, sell ? v.cols.high[g] : v.cols.low[g]);\n const dir = sell ? -1 : 1;\n const tip = anchor + dir * (6 + offset);\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(x, tip);\n ctx.lineTo(x - 5.5, tip + dir * 7);\n ctx.lineTo(x - 2, tip + dir * 7);\n ctx.lineTo(x - 2, tip + dir * 12);\n ctx.lineTo(x + 2, tip + dir * 12);\n ctx.lineTo(x + 2, tip + dir * 7);\n ctx.lineTo(x + 5.5, tip + dir * 7);\n ctx.closePath();\n ctx.fill();\n if (marker.text && !many) {\n ctx.textBaseline = sell ? \"bottom\" : \"top\";\n ctx.fillText(marker.text, x, tip + dir * 14);\n }\n if (marker.price !== undefined && finite(marker.price)) {\n ctx.beginPath();\n ctx.arc(x, yOf(price.scale, marker.price), 3, 0, Math.PI * 2);\n ctx.fill();\n ctx.lineWidth = 1.5;\n ctx.strokeStyle = bgCss;\n ctx.stroke();\n }\n }\n }\n ctx.restore();\n\n // drawings, each in its pane\n paintDrawings(ctx, { text, background: bgCss, up: upC, down: downC });\n\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, price.top, plotW, price.height);\n ctx.clip();\n // price lines (orders, positions, TP / SL, alerts)\n const lastClose = count ? store.close[count - 1] : NaN;\n for (const line of options.priceLines ?? []) {\n const p = linePrice(line);\n const y = Math.round(yOf(price.scale, p)) + 0.5;\n if (!finite(y) || y < price.top || y > price.top + price.height) continue;\n const color = lineColor(line);\n const kind = line.kind ?? \"line\";\n const lineStyle =\n line.lineStyle ??\n (kind === \"position\" || kind === \"line\" ? \"solid\" : \"dashed\");\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth =\n hoveredLine === line.id ||\n (gesture?.kind === \"order\" && gesture.line.id === line.id)\n ? 1.5\n : 1;\n setDash(ctx, lineStyle, 1);\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n ctx.stroke();\n ctx.restore();\n // label: [grip] title | quantity | profit | close\n const titleKey = PRICE_LINE_TITLES[kind];\n const title = line.title ?? (titleKey ? l[titleKey] : \"\");\n const parts: {\n text: string;\n fill: string;\n color: string;\n cancel?: boolean;\n }[] = [];\n if (title) parts.push({ text: title, fill: color, color: textOn(color) });\n if (line.quantity !== undefined && line.quantity !== \"\")\n parts.push({ text: String(line.quantity), fill: bgCss, color });\n if (\n kind === \"position\" &&\n typeof line.quantity === \"number\" &&\n finite(lastClose)\n ) {\n const pnl =\n (lastClose - p) * line.quantity * (line.side === \"sell\" ? -1 : 1);\n const pnlFill = pnl >= 0 ? upC : downC;\n parts.push({\n text: `${pnl >= 0 ? \"+\" : \"−\"}${formatPrice(Math.abs(pnl))}`,\n fill: pnlFill,\n color: textOn(pnlFill),\n });\n }\n if (line.cancellable)\n parts.push({ text: \"×\", fill: bgCss, color, cancel: true });\n if (!parts.length && !line.draggable) continue;\n ctx.font = font(theme.fontSize, 600);\n const widths = parts.map((part) =>\n part.cancel ? 20 : ctx.measureText(part.text).width + 12,\n );\n const grip = line.draggable ? 14 : 0;\n const total = widths.reduce((a, b) => a + b, 0) + grip;\n let x = Math.round(plotW - total - 56);\n const top = Math.round(y - 9.5);\n roundRect(ctx, x - 0.5, top - 0.5, total + 1, 19, 3);\n ctx.fillStyle = bgCss;\n ctx.fill();\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n ctx.setLineDash([]);\n ctx.stroke();\n if (grip) {\n ctx.fillStyle = color;\n for (let k = 0; k < 3; k++)\n ctx.fillRect(x + 4, top + 5 + k * 3.5, 6, 1.5);\n x += grip;\n }\n ctx.textBaseline = \"middle\";\n ctx.textAlign = \"center\";\n parts.forEach((part, k) => {\n const w = widths[k] ?? 0;\n let partFill = part.fill;\n if (part.cancel) {\n const hover = canvasButton(x, top, w, 18, () =>\n emit(\"orderCancel\", { id: line.id, line }),\n );\n if (hover) partFill = color;\n ctx.fillStyle = color;\n ctx.fillRect(x, top + 3, 1, 12);\n }\n if (partFill !== bgCss) {\n ctx.fillStyle = partFill;\n ctx.fillRect(x, top, w, 18);\n }\n ctx.fillStyle =\n part.cancel && partFill !== bgCss ? textOn(color) : part.color;\n if (part.cancel) ctx.font = font(theme.fontSize + 3, 500);\n ctx.fillText(part.text, x + w / 2, top + (part.cancel ? 9 : 9.5));\n ctx.font = font(theme.fontSize, 600);\n x += w;\n });\n }\n\n // last price line\n const lastLine = options.lastPriceLine !== false && count > 0;\n const lastUp = count > 0 && store.close[count - 1] >= store.open[count - 1];\n // a line takes its own color; bars the color of the last bar\n const lastColor =\n style() === \"line\" || style() === \"area\"\n ? css(PRIMARY)\n : lastUp\n ? upC\n : downC;\n if (lastLine) {\n const y = Math.round(yOf(price.scale, lastClose)) + 0.5;\n ctx.save();\n ctx.strokeStyle = lastColor;\n ctx.setLineDash([1, 2]);\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n ctx.stroke();\n ctx.restore();\n }\n ctx.restore();\n\n // last values of the compared series\n const compareLabels: { y: number; text: string; color: string }[] = [];\n for (const c of compares) {\n let i = count - 1;\n while (i >= 0 && !finite(c.values[i])) i--;\n if (i < 0) continue;\n const value = c.values[i];\n const scaled = compareScaled(price.scale, value, compareBase(c));\n const y = yOfScaled(price.scale, scaled);\n if (!finite(y) || y < price.top || y > price.top + price.height) continue;\n compareLabels.push({\n y,\n text:\n price.scale.mode === \"percent\"\n ? formatPercent(scaled, locale)\n : formatPrice(value),\n color: css(c.color),\n });\n }\n\n // axis ticks, except under the labels drawn over the axis\n const covered: { pane: string; y: number }[] = [];\n for (const line of options.priceLines ?? [])\n covered.push({ pane: PRICE, y: yOf(price.scale, linePrice(line)) });\n for (const drawing of drawings) {\n const pane = paneOf(drawing.pane);\n if (pane && drawing.type === \"horizontalLine\" && drawing.points[0])\n covered.push({\n pane: pane.id,\n y: yOf(pane.scale, drawing.points[0].price),\n });\n }\n for (const label of compareLabels)\n covered.push({ pane: PRICE, y: label.y });\n if (lastLine)\n covered.push({\n pane: PRICE,\n y: yOf(price.scale, lastClose) + (options.countdown ? 7 : 0),\n });\n ctx.font = font(theme.fontSize);\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n ctx.fillStyle = muted;\n for (const pane of panes) {\n for (const t of pane.ticks) {\n const y = yOfScaled(pane.scale, t);\n if (y < pane.top + 8 || y > pane.top + pane.height - 8) continue;\n const gap = options.countdown && pane.id === PRICE ? 18 : 14;\n if (covered.some((c) => c.pane === pane.id && Math.abs(c.y - y) < gap))\n continue;\n ctx.fillText(paneTickText(pane, t), plotW + 8, y);\n }\n }\n // time axis ticks\n ctx.textAlign = \"center\";\n for (const t of ticks) {\n ctx.font = font(theme.fontSize, t.bold ? 600 : 400);\n ctx.fillStyle = t.bold ? text : muted;\n ctx.fillText(t.text, t.x, plotH + TIME_AXIS / 2);\n }\n\n // labels of the price lines, the drawings and the compared series\n for (const line of options.priceLines ?? []) {\n const p = linePrice(line);\n const y = yOf(price.scale, p);\n if (!finite(y) || y < price.top || y > price.top + price.height) continue;\n const fillColor = lineColor(line);\n axisLabel(ctx, y, priceAxisText(p), fillColor, textOn(fillColor));\n }\n for (const drawing of drawings) {\n const pane = paneOf(drawing.pane);\n if (!pane || drawing.type !== \"horizontalLine\" || !drawing.points[0])\n continue;\n const p = drawing.points[0].price;\n const y = yOf(pane.scale, p);\n if (y < pane.top || y > pane.top + pane.height) continue;\n const fillColor = css(drawing.color ?? PRIMARY);\n axisLabel(\n ctx,\n y,\n pane.id === PRICE ? priceAxisText(p) : paneValueText(pane, p),\n fillColor,\n textOn(fillColor),\n );\n }\n for (const label of compareLabels)\n axisLabel(ctx, label.y, label.text, label.color, textOn(label.color));\n // last price label (with the countdown)\n if (lastLine) {\n let second: string | undefined;\n if (options.countdown) {\n const tf = timeframe();\n const start = store.time[count - 1];\n let end = start + tf.ms;\n if (tf.unit === \"month\") {\n const date = new Date(start);\n end = Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth() + tf.count,\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n );\n }\n second = formatCountdown(end - Date.now(), l);\n }\n axisLabel(\n ctx,\n yOf(price.scale, lastClose),\n priceAxisText(lastClose),\n lastColor,\n textOn(lastColor),\n second,\n );\n }\n\n // replay: the badge, or the picking of the first bar (at the bottom of\n // the price pane: the legends cover its top)\n const badgeY = price.top + price.height - 32;\n if (replayPicking) {\n const x = pointer && pointer.x <= plotW ? pointer.x : NaN;\n if (finite(x)) {\n ctx.fillStyle = toCss(theme.background, 0.62);\n ctx.fillRect(x, 0, plotW - x, plotH);\n ctx.strokeStyle = css(PRIMARY);\n ctx.lineWidth = 1.5;\n ctx.beginPath();\n ctx.moveTo(Math.round(x) + 0.5, 0);\n ctx.lineTo(Math.round(x) + 0.5, plotH);\n ctx.stroke();\n }\n pill(ctx, l.replayHint, plotW / 2, badgeY, css(PRIMARY));\n } else if (replay && count) {\n pill(\n ctx,\n fill(l.replay, {\n time: formatCrosshairTime(\n shift(store.time[count - 1]),\n tfMs(),\n locale,\n ),\n }),\n plotW / 2,\n badgeY,\n css(PRIMARY),\n );\n }\n\n // crosshair\n const cross = crosshairState();\n if (cross && v && !replayPicking) {\n const x = Math.round(xOf(cross.index)) + 0.5;\n ctx.save();\n ctx.strokeStyle = toCss(theme.textMuted, 0.75);\n ctx.lineWidth = 1;\n ctx.setLineDash([4, 3]);\n ctx.beginPath();\n if (x >= 0 && x <= plotW) {\n ctx.moveTo(x, 0);\n ctx.lineTo(x, plotH);\n }\n const y = Math.round(cross.y) + 0.5;\n if (\n finite(y) &&\n y >= cross.pane.top &&\n y <= cross.pane.top + cross.pane.height\n ) {\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n }\n ctx.stroke();\n ctx.restore();\n const labelBg = toCss(theme.text);\n if (\n finite(cross.y) &&\n cross.y >= cross.pane.top &&\n cross.y <= cross.pane.top + cross.pane.height\n ) {\n const scaled = scaledAt(cross.pane.scale, cross.y);\n const textValue =\n cross.pane.id === PRICE\n ? priceAxisText(fromScaled(cross.pane.scale, scaled))\n : paneTickText(cross.pane, scaled);\n axisLabel(ctx, cross.y, textValue, labelBg, bgCss);\n }\n if (x >= 0 && x <= plotW && count) {\n const label = formatCrosshairTime(\n shift(timeAt(cross.index)),\n tfMs(),\n locale,\n );\n ctx.font = font(theme.fontSize, 500);\n const w = ctx.measureText(label).width + 16;\n const left = clamp(x - w / 2, 0, width - w);\n roundRect(ctx, left, plotH + 3, w, 21, 3);\n ctx.fillStyle = labelBg;\n ctx.fill();\n ctx.fillStyle = bgCss;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(label, left + w / 2, plotH + 14);\n }\n // order entry: a \"+\" at the crosshair price\n if (\n options.orderEntry &&\n pointer &&\n cross.pane.id === PRICE &&\n finite(cross.y) &&\n tool === \"cursor\" &&\n !gesture &&\n count\n ) {\n const size = 18;\n const bx = plotW - size - 4;\n const by = clamp(\n Math.round(cross.y - size / 2),\n price.top + 1,\n price.top + price.height - size - 1,\n );\n const orderPrice = roundPrice(cross.price);\n const side = orderPrice < lastClose ? \"buy\" : \"sell\";\n const hover = canvasButton(bx, by, size, size, () =>\n emit(\"orderCreate\", { price: orderPrice, side }),\n );\n roundRect(ctx, bx, by, size, size, 4);\n ctx.fillStyle = hover ? css(PRIMARY) : labelBg;\n ctx.fill();\n ctx.strokeStyle = hover ? textOn(css(PRIMARY)) : bgCss;\n ctx.lineWidth = 1.5;\n ctx.beginPath();\n ctx.moveTo(bx + 5, by + size / 2);\n ctx.lineTo(bx + size - 5, by + size / 2);\n ctx.moveTo(bx + size / 2, by + 5);\n ctx.lineTo(bx + size / 2, by + size - 5);\n ctx.stroke();\n if (hover) {\n pill(\n ctx,\n fill(side === \"buy\" ? l.buyLimit : l.sellLimit, {\n price: formatPrice(orderPrice),\n }),\n bx - 6,\n by - 2,\n side === \"buy\" ? upC : downC,\n \"right\",\n );\n }\n }\n }\n };\n\n // -------------------------------------------------------------- legends\n\n let legendKey = \"\";\n /** Rows of the legend of the price pane (labels painted under them are moved) */\n let priceLegend: { right: number; top: number; bottom: number }[] = [];\n const legendRows = new Map<string, LegendRow>();\n const legendBoxes = new Map<string, HTMLDivElement>();\n\n const legendBox = (id: string) => {\n let box = legendBoxes.get(id);\n if (!box) {\n box = make(\"div\", {\n position: \"absolute\",\n left: \"8px\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: \"1px\",\n maxWidth: \"calc(100% - 16px)\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n fontVariantNumeric: \"tabular-nums\",\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n });\n legends.appendChild(box);\n legendBoxes.set(id, box);\n }\n return box;\n };\n\n const legendRow = (\n box: HTMLDivElement,\n title: string,\n study: Study | null,\n outputs: number,\n ) => {\n const row = make(\"div\", {\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n columnGap: \"6px\",\n padding: \"0 4px\",\n marginLeft: \"-4px\",\n borderRadius: \"4px\",\n background:\n \"color-mix(in srgb, var(--surface-color, var(--background-color, #fff)) 86%, transparent)\",\n });\n let button: HTMLButtonElement | null = null;\n if (study) {\n button = make(\"button\", {\n all: \"unset\",\n cursor: \"pointer\",\n pointerEvents: \"auto\",\n color: \"var(--text-color, #1f2937)\",\n fontWeight: \"500\",\n borderRadius: \"3px\",\n });\n button.type = \"button\";\n button.textContent = title;\n button.setAttribute(\n \"aria-label\",\n fill(labels().toggleIndicator, { name: title }),\n );\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n const next = !isVisible(study);\n visibility.set(study.id, next);\n emit(\"indicatorToggle\", { id: study.id, visible: next });\n updateLegends();\n invalidate();\n });\n button.addEventListener(\"pointerdown\", (event) =>\n event.stopPropagation(),\n );\n row.appendChild(button);\n } else if (title) {\n const label = make(\"span\", { fontWeight: \"600\" });\n label.textContent = title;\n row.appendChild(label);\n }\n const values: HTMLSpanElement[] = [];\n for (let i = 0; i < outputs; i++) {\n const span = make(\"span\", {});\n row.appendChild(span);\n values.push(span);\n }\n box.appendChild(row);\n return { row, values, button };\n };\n\n const buildLegends = () => {\n legendRows.clear();\n for (const box of legendBoxes.values()) box.remove();\n legendBoxes.clear();\n if (options.legend === false) return;\n const priceBox = legendBox(PRICE);\n const head = [\n options.symbol,\n options.labels?.timeframe ??\n (typeof options.timeframe === \"string\" ? options.timeframe : \"\"),\n ]\n .filter(Boolean)\n .join(\" · \");\n legendRows.set(\"ohlc\", legendRow(priceBox, head, null, 1));\n for (const study of studies) {\n const slots = study.mergeLegend ? 1 : study.outputs.length;\n if (study.overlay && study.type === \"volume\") {\n legendRows.set(study.id, legendRow(priceBox, titleOf(study), study, 1));\n } else if (study.overlay) {\n legendRows.set(\n study.id,\n legendRow(priceBox, titleOf(study), study, slots),\n );\n }\n }\n for (const c of compares)\n legendRows.set(`compare:${c.id}`, legendRow(priceBox, \"\", null, 1));\n for (const study of studies) {\n if (study.overlay) continue;\n legendRows.set(\n study.id,\n legendRow(\n legendBox(study.id),\n titleOf(study),\n study,\n study.mergeLegend ? 1 : study.outputs.length,\n ),\n );\n }\n };\n\n /** Legend title: indicator abbreviations, but words for the volume and some indicators */\n const titleOf = (study: Study) =>\n study.type === \"volume\"\n ? labels().volume\n : study.titleKey\n ? `${labels()[study.titleKey]} ${study.title}`\n : study.title;\n\n const setSpan = (\n span: HTMLSpanElement | undefined,\n text: string,\n color?: string,\n ) => {\n if (!span) return;\n if (span.textContent !== text) span.textContent = text;\n const c = color ?? \"\";\n if (span.style.color !== c) span.style.color = c;\n };\n\n const updateLegends = () => {\n const key = [\n options.legend !== false,\n options.symbol,\n options.timeframe,\n ...studies.map((s) => `${s.id}:${titleOf(s)}:${s.outputs.length}`),\n ...compares.map((c) => c.id),\n texts.toggleIndicator,\n options.labels?.timeframe,\n ].join(\"|\");\n if (key !== legendKey) {\n legendKey = key;\n buildLegends();\n }\n if (options.legend === false) return;\n for (const pane of panes) {\n const box = legendBoxes.get(pane.id);\n if (!box) continue;\n box.style.top = `${pane.top + 6}px`;\n // over the plot only, never over the price axis\n const maxWidth = `${Math.max(80, Math.floor(plotW - 14))}px`;\n if (box.style.maxWidth !== maxWidth) box.style.maxWidth = maxWidth;\n }\n const priceBox = legendBoxes.get(PRICE);\n priceLegend = priceBox\n ? Array.from(\n priceBox.children as HTMLCollectionOf<HTMLElement>,\n (row) => ({\n right: priceBox.offsetLeft + row.offsetLeft + row.offsetWidth,\n top: priceBox.offsetTop + row.offsetTop,\n bottom: priceBox.offsetTop + row.offsetTop + row.offsetHeight,\n }),\n )\n : [];\n const count = n();\n const cross = crosshairState();\n const index = clamp(\n cross && cross.index >= 0 && cross.index < count\n ? cross.index\n : count - 1,\n 0,\n Math.max(0, count - 1),\n );\n const l = labels();\n const ohlc = legendRows.get(\"ohlc\");\n const upC = css(upCss());\n const downC = css(downCss());\n if (ohlc && count) {\n const d = display();\n const o = d.open[index];\n const c = d.close[index];\n const prevClose = index > 0 ? d.close[index - 1] : o;\n const change = c - prevClose;\n const color = c >= o ? upC : downC;\n const span = ohlc.values[0];\n const html = [\n [l.open, d.open[index]],\n [l.high, d.high[index]],\n [l.low, d.low[index]],\n [l.close, c],\n ]\n .map(\n ([name, value]) =>\n `<span style=\"color:var(--text-secondary-color,#6b7280)\">${escapeHtml(String(name))}</span><span style=\"color:${color}\">${escapeHtml(formatPrice(value as number))}</span>`,\n )\n .join(\" \");\n const pct = prevClose ? (change / prevClose) * 100 : NaN;\n const changeName = l.change\n ? `<span style=\"color:var(--text-secondary-color,#6b7280)\">${escapeHtml(l.change)}</span>`\n : \"\";\n const changeHtml = `${changeName}<span style=\"color:${change >= 0 ? upC : downC}\">${change >= 0 ? \"+\" : \"−\"}${escapeHtml(formatPrice(Math.abs(change)))} (${escapeHtml(formatPercent(pct, locale))})</span>`;\n const vol = store.hasVolume\n ? ` <span style=\"color:var(--text-secondary-color,#6b7280)\">${escapeHtml(l.volume)}</span>${escapeHtml(formatVolume(store.volume[index], locale))}`\n : \"\";\n const next = `${html} ${changeHtml}${vol}`;\n if (span && span.dataset.html !== next) {\n span.innerHTML = next;\n span.dataset.html = next;\n span.style.display = \"inline-flex\";\n span.style.gap = \"4px\";\n span.style.flexWrap = \"wrap\";\n }\n }\n for (const study of studies) {\n const row = legendRows.get(study.id);\n if (!row) continue;\n const shown = isVisible(study);\n row.row.style.opacity = shown ? \"1\" : \"0.5\";\n if (row.button) {\n row.button.setAttribute(\"aria-pressed\", String(shown));\n row.button.style.textDecoration = shown ? \"none\" : \"line-through\";\n }\n const slots = study.outputs.length;\n if (study.mergeLegend) {\n // one value: the output in use (SuperTrend up or down)\n const out = study.outputs.find((o) => finite(o.values[index]));\n setSpan(\n row.values[0],\n shown && count && out ? studyValueText(study, out.values[index]) : \"\",\n out ? css(colorOf(out.color)) : undefined,\n );\n continue;\n }\n study.outputs.forEach((out, i) => {\n // the MACD histogram (drawn first, under the lines) is listed last\n const span =\n row.values[study.type === \"macd\" ? (i + slots - 1) % slots : i];\n if (!shown || !count) {\n setSpan(span, \"\");\n return;\n }\n if (out.kind === \"volume\") {\n const c = store.close[index] >= store.open[index] ? upC : downC;\n setSpan(span, formatVolume(store.volume[index], locale), c);\n return;\n }\n // a shifted output shows the value drawn at this bar\n const source = index - out.shift;\n const value = source >= 0 && source < count ? out.values[source] : NaN;\n let color = out.color ? css(colorOf(out.color)) : undefined;\n if (out.kind === \"histogram\") color = value >= 0 ? upC : downC;\n if (out.kind === \"dots\" && !out.color)\n color = value <= store.close[index] ? upC : downC;\n const prefix =\n study.outputs.length > 1 && !study.plainLegend ? `${out.label} ` : \"\";\n setSpan(span, `${prefix}${studyValueText(study, value)}`, color);\n });\n }\n for (const c of compares) {\n const row = legendRows.get(`compare:${c.id}`);\n if (!row) continue;\n const value = c.values[index];\n const base = compareBase(c);\n const pct = finite(base) ? (value / base - 1) * 100 : NaN;\n setSpan(\n row.values[0],\n `${c.name} ${formatPrice(value)} ${formatPercent(pct, locale)}`,\n css(c.color),\n );\n }\n };\n\n const escapeHtml = (text: string) =>\n text.replace(/[&<>\"]/g, (ch) =>\n ch === \"&\"\n ? \"&amp;\"\n : ch === \"<\"\n ? \"&lt;\"\n : ch === \">\"\n ? \"&gt;\"\n : \"&quot;\",\n );\n\n // ---------------------------------------------------------------- frame\n\n const invalidate = () => {\n if (destroyed || frameId) return;\n frameId = win?.requestAnimationFrame\n ? win.requestAnimationFrame(frame)\n : (setTimeout(() => frame(Date.now()), 16) as unknown as number);\n };\n\n const animate = (now: number) => {\n let active = false;\n if (scrollAnim) {\n const t = Math.min(1, (now - scrollAnim.start) / 320);\n const eased = 1 - (1 - t) ** 3;\n right = scrollAnim.from + (scrollAnim.to - scrollAnim.from) * eased;\n if (t >= 1) scrollAnim = null;\n else active = true;\n }\n if (kinetic) {\n const dt = Math.min(64, now - kinetic.t);\n kinetic.t = now;\n const before = right;\n right -= (kinetic.v * dt) / spacing;\n kinetic.v *= Math.exp(-dt / 320);\n clampView();\n if (Math.abs(kinetic.v) < 0.02 || right === before) kinetic = null;\n else active = true;\n }\n return active;\n };\n\n const measureAxis = (ctx: CanvasRenderingContext2D) => {\n ctx.font = font(theme.fontSize, 500);\n let widest = 0;\n for (const pane of panes) {\n for (const t of pane.ticks)\n widest = Math.max(widest, ctx.measureText(paneTickText(pane, t)).width);\n }\n const count = n();\n if (count) {\n widest = Math.max(\n widest,\n ctx.measureText(priceAxisText(store.close[count - 1])).width,\n );\n if (options.countdown)\n widest = Math.max(widest, ctx.measureText(\"00:00:00\").width);\n }\n const wanted = Math.max(MIN_AXIS, Math.ceil(widest + 18));\n // shrink only when clearly narrower (no jitter while the price moves)\n if (wanted > axisW || wanted < axisW - 12) axisW = wanted;\n };\n\n function frame(now?: number) {\n frameId = 0;\n if (destroyed) return;\n width = root.clientWidth;\n height = root.clientHeight;\n if (width <= 0 || height <= 0) return;\n const time = now ?? Date.now();\n const animating = animate(\n typeof performance !== \"undefined\" ? performance.now() : time,\n );\n const dpr = win?.devicePixelRatio || 1;\n syncDerived();\n sizeCanvas(background, dpr);\n sizeCanvas(foreground, dpr);\n const bg = background.getContext(\"2d\");\n const fg = foreground.getContext(\"2d\");\n plotH = Math.max(1, height - TIME_AXIS);\n for (let pass = 0; pass < 2; pass++) {\n plotW = Math.max(1, width - axisW);\n layoutPanes();\n if (pendingRange) applyRange(pendingRange);\n clampView();\n vis = computeVisible();\n autoscale(vis);\n for (const pane of panes) {\n const ticks = scaleTicks(pane.scale, pane.id === PRICE ? 44 : 30);\n // fixed-range panes (RSI) label their bands and their middle\n const range = pane.study?.range;\n const bands = pane.study?.bands;\n pane.ticks =\n range && bands\n ? [...bands, (range[0] + range[1]) / 2].sort((a, b) => a - b)\n : ticks.scaled;\n pane.step = ticks.step;\n }\n const before = axisW;\n if (fg) measureAxis(fg);\n if (axisW === before) break;\n }\n const v = vis;\n pendingRange = null;\n const ticks = fg ? timeTicks(v, fg) : [];\n renderData(v, dpr);\n if (bg) {\n bg.setTransform(dpr, 0, 0, dpr, 0, 0);\n bg.clearRect(0, 0, width, height);\n paintBackground(bg, v, ticks);\n }\n if (fg) {\n fg.setTransform(dpr, 0, 0, dpr, 0, 0);\n fg.clearRect(0, 0, width, height);\n paintForeground(fg, v, ticks);\n }\n updateLegends();\n updateJump();\n updateToolbar();\n positionEditor();\n emitView();\n // buttons painted this frame may now be under the pointer\n if (\n pointer &&\n !gesture &&\n buttonAt(pointer.x, pointer.y) !== hoveredButton\n ) {\n updateCursor(pointer.x, pointer.y);\n invalidate();\n }\n if (animating) invalidate();\n }\n\n const updateJump = () => {\n const count = n();\n const price = panes[0];\n const show = count > 0 && price && xOf(count - 1) > plotW + spacing * 0.5;\n jump.style.display = show ? \"flex\" : \"none\";\n if (show && price) {\n jump.style.left = `${plotW - 40}px`;\n jump.style.top = `${price.top + price.height - 40}px`;\n const text = labels().scrollToRealtime;\n if (jump.getAttribute(\"aria-label\") !== text) {\n jump.setAttribute(\"aria-label\", text);\n jump.title = text;\n }\n }\n };\n\n const visibleRange = (): TradingVisibleRange => {\n const from = right - plotW / spacing;\n return { from, to: right, fromTime: timeAt(from), toTime: timeAt(right) };\n };\n\n const emitView = () => {\n const count = n();\n if (!count) return;\n const range = visibleRange();\n if (\n !lastRange ||\n Math.abs(lastRange.from - range.from) > 1e-6 ||\n Math.abs(lastRange.to - range.to) > 1e-6\n ) {\n lastRange = range;\n if (!silentRange) emit(\"visibleRangeChange\", range);\n }\n silentRange = false;\n if (range.from < 10 && historyFirst !== store.time[0]) {\n historyFirst = store.time[0];\n emit(\"historyRequest\", { firstTime: store.time[0], count });\n }\n const cross = crosshairState();\n // a crosshair set by `setCrosshair` is not reported\n const own = cross && (pointer || keyboardIndex !== null) ? cross : null;\n const key = own ? `${own.index}|${own.price}|${own.pane.id}` : \"\";\n if (key !== lastCrosshair) {\n lastCrosshair = key;\n if (!own) {\n emit(\"crosshairMove\", null);\n } else {\n const event: TradingCrosshairEvent = {\n index: own.index,\n time: timeAt(own.index),\n bar:\n own.index >= 0 && own.index < count\n ? readBar(store, own.index)\n : null,\n price: own.price,\n pane: own.pane.id,\n x: xOf(own.index),\n y: own.y,\n };\n emit(\"crosshairMove\", event);\n }\n }\n };\n\n // ---------------------------------------------------------- interaction\n\n const local = (event: { clientX: number; clientY: number }) => {\n const rect = root.getBoundingClientRect();\n return { x: event.clientX - rect.left, y: event.clientY - rect.top };\n };\n\n const applyRange = (range: { from: number; to: number }) => {\n spacing = plotW / (range.to - range.from);\n right = range.to;\n clampView();\n };\n\n /**\n * Zooms around `x`; while the latest bar is in view it stays where it is\n * (the reader is following the market), like the price scale side of\n * trading terminals\n */\n const zoomAt = (x: number, factor: number) => {\n const count = n();\n if (count && followsRealtime()) x = Math.min(plotW, xOf(count - 1));\n const anchor = indexAt(x);\n spacing = spacing * factor;\n clampView();\n right = anchor + (plotW - x) / spacing;\n clampView();\n kinetic = null;\n scrollAnim = null;\n invalidate();\n };\n\n const anchorAt = (x: number, y: number, pane: Pane): TradingDrawingPoint => {\n const index = Math.round(indexAt(x));\n return { time: timeAt(index), price: valueAt(pane.scale, y) };\n };\n\n const setTool = (next: TradingDrawingTool, notify: boolean) => {\n if (next === tool) return;\n tool = next;\n draft = null;\n draftClicks = 0;\n if (notify) emit(\"drawingToolChange\", next);\n invalidate();\n };\n\n const select = (id: string | null) => {\n if (id === selected) return;\n selected = id;\n paletteOpen = false;\n emit(\"drawingSelect\", id);\n invalidate();\n };\n\n // ------------------------------------------------------ drawing history\n\n const undoState = (): TradingUndoState => ({\n canUndo: undoStack.length > 0,\n canRedo: redoStack.length > 0,\n });\n\n const emitUndo = () => {\n const state = undoState();\n const key = `${state.canUndo}|${state.canRedo}`;\n if (key === undoKey) return;\n undoKey = key;\n emit(\"undoChange\", state);\n };\n\n /** Records a change of the drawings: undoable, and reported unless `notify` is false */\n const commitDrawings = (next: readonly TradingDrawing[], notify = true) => {\n if (next !== committed) {\n undoStack.push(committed);\n if (undoStack.length > HISTORY_LIMIT) undoStack.shift();\n redoStack.length = 0;\n committed = next;\n }\n drawings = next;\n if (notify) {\n emittedDrawings = next;\n emit(\"drawingsChange\", next);\n }\n if (selected && !next.some((d) => d.id === selected)) select(null);\n emitUndo();\n invalidate();\n };\n\n /** Shows drawings of the history (undo / redo) */\n const restoreDrawings = (next: readonly TradingDrawing[]) => {\n committed = next;\n drawings = next;\n emittedDrawings = next;\n draft = null;\n if (selected && !next.some((d) => d.id === selected)) select(null);\n emit(\"drawingsChange\", next);\n emitUndo();\n invalidate();\n };\n\n const undo = () => {\n const previous = undoStack.pop();\n if (!previous) return;\n if (editing) closeEditor(false);\n redoStack.push(committed);\n restoreDrawings(previous);\n };\n\n const redo = () => {\n const next = redoStack.pop();\n if (!next) return;\n undoStack.push(committed);\n restoreDrawings(next);\n };\n\n const updateDrawing = (id: string, patch: TradingDrawingPatch) => {\n if (!drawings.some((d) => d.id === id)) return;\n commitDrawings(\n drawings.map((d) =>\n d.id === id ? { ...d, ...patch, id: d.id, type: d.type } : d,\n ),\n );\n };\n\n const removeDrawing = (id: string) => {\n if (!drawings.some((d) => d.id === id)) return;\n if (selected === id) select(null);\n commitDrawings(drawings.filter((d) => d.id !== id));\n };\n\n /** Default target and stop of a new position: a reward twice the risk */\n const positionPoints = (\n entry: TradingDrawingPoint,\n pane: Pane,\n long: boolean,\n ): TradingDrawingPoint[] => {\n const y = yOf(pane.scale, entry.price);\n const risk = Math.max(12, pane.height * 0.07);\n const target = valueAt(pane.scale, y + (long ? -2 : 2) * risk);\n const stop = valueAt(pane.scale, y + (long ? 1 : -1) * risk);\n const bars = Math.max(6, Math.round((plotW * 0.16) / spacing));\n const end = timeAt(Math.round(indexOfTimeExt(entry.time)) + bars);\n return [\n entry,\n { time: end, price: roundPrice(target) },\n { time: end, price: roundPrice(stop) },\n ];\n };\n\n const finishDraft = () => {\n if (!draft) return;\n const done = draft;\n draft = null;\n draftClicks = 0;\n commitDrawings([...drawings, done]);\n select(done.id);\n if (!options.keepDrawingMode) setTool(\"cursor\", true);\n if (done.type === \"text\") openEditor(done.id, true);\n };\n\n /** Fixes the anchor following the pointer; the drawing is done after its last anchor */\n const fixDraftAnchor = () => {\n if (!draft) return;\n draftClicks--;\n if (draftClicks <= 0) {\n finishDraft();\n return;\n }\n const last = draft.points[draft.points.length - 1];\n if (last) draft = { ...draft, points: [...draft.points, last] };\n };\n\n /** Moves the anchor of the drawing being made to the pointer */\n const followDraft = (x: number, y: number) => {\n const pane = paneOf(draftPane);\n if (!draft || !pane || draftClicks <= 0) return;\n draft = {\n ...draft,\n points: [...draft.points.slice(0, -1), anchorAt(x, y, pane)],\n };\n };\n\n const hitLine = (x: number, y: number) => {\n const price = panes[0];\n if (!price || x > plotW) return null;\n for (const line of options.priceLines ?? []) {\n if (!line.draggable) continue;\n if (Math.abs(yOf(price.scale, linePrice(line)) - y) <= 5) return line;\n }\n return null;\n };\n\n const hitDrawingAt = (x: number, y: number) => {\n if (x > plotW) return null;\n const pane = paneAt(y);\n const mapper = drawingMapper(pane);\n if (!pane || !mapper) return null;\n for (let i = drawings.length - 1; i >= 0; i--) {\n const drawing = drawings[i];\n if (!drawing || (drawing.pane ?? PRICE) !== pane.id) continue;\n const hit = hitDrawing(\n drawing,\n mapper,\n { x, y },\n 6,\n textBoxes.get(drawing.id),\n );\n if (hit) return { drawing, hit, pane };\n }\n return null;\n };\n\n const buttonAt = (x: number, y: number) =>\n canvasButtons.findIndex(\n (b) => x >= b.x && x <= b.x + b.w && y >= b.y && y <= b.y + b.h,\n );\n\n const separatorAt = (y: number) => {\n for (let i = 1; i < panes.length; i++) {\n if (Math.abs(panes[i].top - y) <= 4) return i;\n }\n return -1;\n };\n\n // --------------------------------------------------------- text editor\n\n const autosizeEditor = () => {\n editor.style.height = \"auto\";\n editor.style.height = `${Math.max(28, editor.scrollHeight + 2)}px`;\n };\n\n const positionEditor = () => {\n if (!editing) return;\n const id = editing.id;\n const drawing = drawings.find((d) => d.id === id);\n const pane = drawing ? paneOf(drawing.pane) : null;\n const anchor = drawing?.points[0];\n if (!drawing || !pane || !anchor) return;\n const x = xOf(indexOfTimeExt(anchor.time));\n const y = yOf(pane.scale, anchor.price);\n editor.style.left = `${clamp(x, 2, Math.max(2, plotW - 160))}px`;\n editor.style.top = `${clamp(y, 2, Math.max(2, plotH - 40))}px`;\n };\n\n function openEditor(id: string, created: boolean) {\n const drawing = drawings.find((d) => d.id === id);\n if (!drawing || drawing.locked) return;\n editing = { id, created };\n editor.value = created ? \"\" : (drawing.text ?? \"\");\n editor.placeholder = labels().text;\n editor.setAttribute(\"aria-label\", labels().editText);\n editor.style.display = \"block\";\n positionEditor();\n autosizeEditor();\n editor.focus();\n editor.select();\n invalidate();\n }\n\n function closeEditor(commit: boolean) {\n if (!editing) return;\n const { id, created } = editing;\n editing = null;\n editor.style.display = \"none\";\n const text = editor.value.replace(/\\s+$/, \"\");\n const drawing = drawings.find((d) => d.id === id);\n if (drawing && created && (!commit || !text)) {\n // a new text left empty or cancelled: as if it had never been made\n const previous = undoStack.pop();\n restoreDrawings(previous ?? drawings.filter((d) => d.id !== id));\n } else if (drawing && commit && text !== (drawing.text ?? \"\")) {\n if (created) {\n // the text completes the creation (a single undo step)\n const next = drawings.map((d) => (d.id === id ? { ...d, text } : d));\n committed = next;\n drawings = next;\n emittedDrawings = next;\n emit(\"drawingsChange\", next);\n } else {\n updateDrawing(id, { text });\n }\n }\n if (doc.activeElement === editor || doc.activeElement === doc.body)\n root.focus();\n invalidate();\n }\n\n editor.addEventListener(\"keydown\", (event) => {\n event.stopPropagation();\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n closeEditor(true);\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n closeEditor(false);\n }\n });\n editor.addEventListener(\"input\", autosizeEditor);\n editor.addEventListener(\"blur\", () => closeEditor(true));\n editor.addEventListener(\"pointerdown\", (event) => event.stopPropagation());\n editor.addEventListener(\"dblclick\", (event) => event.stopPropagation());\n\n // ------------------------------------------------------ drawing toolbar\n\n const icon = (path: string, dash = \"\", width = 1.5) =>\n `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"${width}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"${dash ? ` stroke-dasharray=\"${dash}\"` : \"\"} aria-hidden=\"true\"><path d=\"${path}\"/></svg>`;\n\n const toolbarButton = (\n label: string,\n content: string,\n onClick: () => void,\n pressed?: boolean,\n ) => {\n const button = doc.createElement(\"button\");\n button.type = \"button\";\n button.setAttribute(\"aria-label\", label);\n button.title = label;\n if (pressed !== undefined)\n button.setAttribute(\"aria-pressed\", String(pressed));\n button.innerHTML = content;\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n onClick();\n });\n return button;\n };\n\n const separator = () => {\n const span = doc.createElement(\"span\");\n span.className = \"sep\";\n return span;\n };\n\n const buildToolbar = (drawing: TradingDrawing) => {\n toolbar.textContent = \"\";\n const l = labels();\n toolbar.setAttribute(\"aria-label\", l.lineStyle);\n const id = drawing.id;\n const items: HTMLElement[] = [];\n if (!drawing.locked) {\n const color = css(drawing.color ?? PRIMARY);\n const swatch = toolbarButton(\n l.color,\n `<span style=\"display:block;width:14px;height:14px;border-radius:50%;background:${color};box-shadow:inset 0 0 0 1px rgba(127,127,127,.35)\"></span>`,\n () => {\n paletteOpen = !paletteOpen;\n toolbarKey = \"\";\n updateToolbar();\n },\n );\n swatch.setAttribute(\"aria-expanded\", String(paletteOpen));\n items.push(swatch);\n const width = drawing.lineWidth ?? 1.5;\n const widths = [1, 2, 3, 4];\n items.push(\n toolbarButton(\n `${l.lineWidth}: ${width}px`,\n `${icon(\"M2 8h12\", \"\", Math.min(4, width))}<span style=\"font-size:11px;margin-left:3px\">${width}</span>`,\n () =>\n updateDrawing(id, {\n lineWidth: widths.find((w) => w > width) ?? widths[0],\n }),\n ),\n );\n const lineStyle = drawing.lineStyle ?? \"solid\";\n items.push(\n toolbarButton(\n l.lineStyle,\n icon(\n \"M2 8h12\",\n lineStyle === \"dashed\"\n ? \"3.5 2.5\"\n : lineStyle === \"dotted\"\n ? \"0.1 3\"\n : \"\",\n lineStyle === \"dotted\" ? 2.2 : 1.6,\n ),\n () =>\n updateDrawing(id, {\n lineStyle:\n LINE_STYLES[\n (LINE_STYLES.indexOf(lineStyle) + 1) % LINE_STYLES.length\n ],\n }),\n ),\n );\n if (isFillable(drawing.type)) {\n items.push(\n toolbarButton(\n l.fill,\n '<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>',\n () => updateDrawing(id, { fill: drawing.fill === false }),\n drawing.fill !== false,\n ),\n );\n }\n if (drawing.type === \"text\") {\n items.push(\n toolbarButton(l.editText, icon(\"M3 13h3l7-7-3-3-7 7zM9 4l3 3\"), () =>\n openEditor(id, false),\n ),\n );\n }\n items.push(separator());\n }\n items.push(\n toolbarButton(\n l.lock,\n drawing.locked\n ? icon(\"M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 4 0v2\")\n : icon(\"M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 3.8-.9\"),\n () => updateDrawing(id, { locked: !drawing.locked }),\n !!drawing.locked,\n ),\n );\n if (!drawing.locked) {\n const remove = toolbarButton(\n l.remove,\n icon(\"M3 4.5h10M6.5 4.5V3h3v1.5M4.5 4.5l.7 8.5h5.6l.7-8.5\"),\n () => removeDrawing(id),\n );\n remove.style.color = \"var(--danger-color, #f23645)\";\n items.push(remove);\n }\n toolbar.append(...items);\n if (paletteOpen && !drawing.locked) {\n const palette = make(\"div\", {\n position: \"absolute\",\n left: \"0\",\n top: \"calc(100% + 4px)\",\n display: \"flex\",\n gap: \"2px\",\n padding: \"4px\",\n borderRadius: \"8px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 85%, transparent)\",\n background: \"var(--surface-elevated-color, var(--surface-color, #fff))\",\n boxShadow: \"0 8px 24px -8px rgba(15, 23, 42, 0.35)\",\n });\n for (const color of PALETTE) {\n const button = toolbarButton(\n `${l.color} ${color}`,\n `<span style=\"display:block;width:16px;height:16px;border-radius:50%;background:${color}\"></span>`,\n () => {\n paletteOpen = false;\n updateDrawing(id, { color });\n },\n (drawing.color ?? \"\").toLowerCase() === color,\n );\n palette.appendChild(button);\n }\n toolbar.appendChild(palette);\n }\n };\n\n function updateToolbar() {\n const drawing = selected\n ? drawings.find((d) => d.id === selected)\n : undefined;\n const pane = drawing ? paneOf(drawing.pane) : null;\n const mapper = drawingMapper(pane);\n const dragging = gesture?.kind === \"drawing\" && gesture.moved;\n if (\n !drawing ||\n !pane ||\n !mapper ||\n options.drawingToolbar === false ||\n editing ||\n dragging ||\n draft\n ) {\n toolbar.style.display = \"none\";\n toolbarKey = \"\";\n paletteOpen = false;\n return;\n }\n const key = [\n drawing.id,\n drawing.color,\n drawing.lineWidth,\n drawing.lineStyle,\n drawing.fill,\n drawing.locked,\n paletteOpen,\n locale,\n themeVersion,\n ].join(\"|\");\n if (key !== toolbarKey) {\n toolbarKey = key;\n buildToolbar(drawing);\n }\n toolbar.style.display = \"flex\";\n // above the drawing (below it when there is no room), inside the plot\n const pts = handlePoints(drawing, mapper, textBoxes.get(drawing.id));\n const box = textBoxes.get(drawing.id);\n if (drawing.type === \"text\" && box)\n pts.push({ x: box.x + box.w, y: box.y + box.h });\n let x0 = Infinity;\n let x1 = -Infinity;\n let y0 = Infinity;\n let y1 = -Infinity;\n for (const p of pts) {\n x0 = Math.min(x0, clamp(p.x, 0, plotW));\n x1 = Math.max(x1, clamp(p.x, 0, plotW));\n y0 = Math.min(y0, clamp(p.y, pane.top, pane.top + pane.height));\n y1 = Math.max(y1, clamp(p.y, pane.top, pane.top + pane.height));\n }\n if (drawing.type === \"horizontalLine\") {\n x0 = plotW * 0.35;\n x1 = plotW * 0.65;\n }\n const w = toolbar.offsetWidth || 200;\n const h = toolbar.offsetHeight || 34;\n const left = clamp((x0 + x1) / 2 - w / 2, 4, Math.max(4, plotW - w - 4));\n let top = y0 - h - 14;\n // below, clear of the labels under the drawing (position stops, measures)\n if (top < 4) top = y1 + 32;\n toolbar.style.left = `${Math.round(left)}px`;\n toolbar.style.top = `${Math.round(clamp(top, 4, Math.max(4, plotH - h - 4)))}px`;\n }\n\n toolbar.addEventListener(\"pointerdown\", (event) => event.stopPropagation());\n toolbar.addEventListener(\"dblclick\", (event) => event.stopPropagation());\n // the chart under the toolbar is not hovered\n toolbar.addEventListener(\"pointermove\", (event) => event.stopPropagation());\n toolbar.addEventListener(\"pointerenter\", () => {\n pointer = null;\n hovered = null;\n root.style.cursor = \"default\";\n invalidate();\n });\n\n // ---------------------------------------------------------------- replay\n\n const replayState = (): TradingReplayState => ({\n active: !!replay,\n picking: replayPicking,\n playing: !!replay?.playing,\n speed: replay?.speed ?? replaySpeed,\n index: n(),\n total: replay ? replay.source.length : n(),\n time: n() ? store.time[n() - 1] : NaN,\n });\n\n const emitReplay = () => emit(\"replayChange\", replayState());\n\n const columnsOf = (from: BarStore, count: number) => ({\n time: from.time.subarray(0, count),\n open: from.open.subarray(0, count),\n high: from.high.subarray(0, count),\n low: from.low.subarray(0, count),\n close: from.close.subarray(0, count),\n volume: from.volume.subarray(0, count),\n });\n\n /** Replaces the bars of the store by the first `count` bars of `source` */\n const showBars = (source: BarStore, count: number) => {\n const hasVolume = source.hasVolume;\n storeSet(store, columnsOf(source, count));\n store.hasVolume = hasVolume;\n pyramid = createPyramid();\n haPyramid = createPyramid();\n haValid = 0;\n historyFirst = NaN;\n afterDataChange(0);\n };\n\n const stopReplayTimer = () => {\n if (replay?.timer) clearInterval(replay.timer);\n if (replay) {\n replay.timer = null;\n replay.playing = false;\n }\n };\n\n const beginReplay = (index: number) => {\n replayPicking = false;\n if (!replay) {\n if (!n()) return;\n const source = createStore();\n storeSet(source, columnsOf(store, n()));\n source.hasVolume = store.hasVolume;\n replay = { source, playing: false, speed: replaySpeed, timer: null };\n }\n stopReplayTimer();\n const shown = clamp(Math.round(index) + 1, 1, replay.source.length);\n showBars(replay.source, shown);\n right = shown - 1 + (options.rightOffset ?? 8);\n for (const scale of scales.values()) scale.auto = true;\n emitReplay();\n };\n\n const replayStepBy = (count: number) => {\n if (!replay) return;\n const source = replay.source;\n const before = n();\n const follow = followsRealtime();\n let from = -1;\n for (let i = 0; i < count && n() < source.length; i++) {\n const at = storeUpdate(store, readBar(source, n()));\n if (from < 0) from = at;\n }\n store.hasVolume = source.hasVolume;\n if (from >= 0) {\n if (follow) right += n() - before;\n afterDataChange(from);\n }\n if (n() >= source.length) stopReplayTimer();\n emitReplay();\n };\n\n const playReplay = (speed?: number) => {\n if (!replay) return;\n if (speed !== undefined && speed > 0) replay.speed = replaySpeed = speed;\n stopReplayTimer();\n if (n() >= replay.source.length) {\n emitReplay();\n return;\n }\n const interval = Math.max(16, 1000 / replay.speed);\n const perTick = Math.max(1, Math.round((replay.speed * interval) / 1000));\n replay.playing = true;\n replay.timer = setInterval(() => replayStepBy(perTick), interval);\n emitReplay();\n };\n\n /** Ends the replay; `restore` shows every bar again */\n const endReplay = (restore: boolean) => {\n const wasPicking = replayPicking;\n replayPicking = false;\n if (!replay) {\n if (wasPicking) {\n emitReplay();\n invalidate();\n }\n return;\n }\n stopReplayTimer();\n const source = replay.source;\n replay = null;\n if (restore) showBars(source, source.length);\n emitReplay();\n };\n\n // ----------------------------------------------------------- pointer\n\n const updateCursor = (x: number, y: number) => {\n let cursor = \"crosshair\";\n hoveredLine = null;\n let nextHover: string | null = null;\n const button = gesture ? -1 : buttonAt(x, y);\n if (button !== hoveredButton) hoveredButton = button;\n if (gesture?.kind === \"pan\" && gesture.moved) cursor = \"grabbing\";\n else if (button >= 0) cursor = \"pointer\";\n else if (replayPicking && x <= plotW && y <= plotH) cursor = \"pointer\";\n else if (separatorAt(y) > 0) cursor = \"row-resize\";\n else if (x > plotW && y < plotH) cursor = \"ns-resize\";\n else if (y > plotH) cursor = \"ew-resize\";\n else if (tool === \"cursor\") {\n const line = hitLine(x, y);\n if (line) {\n cursor = \"ns-resize\";\n hoveredLine = line.id;\n } else {\n const hit = hitDrawingAt(x, y);\n if (hit) {\n nextHover = hit.drawing.id;\n cursor = hit.drawing.locked\n ? \"pointer\"\n : hit.hit.part === \"handle\"\n ? \"move\"\n : \"pointer\";\n }\n }\n }\n if (nextHover !== hovered) hovered = nextHover;\n if (root.style.cursor !== cursor) root.style.cursor = cursor;\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (event.button !== 0 && event.pointerType === \"mouse\") return;\n const { x, y } = local(event);\n pointer = { x, y };\n keyboardIndex = null;\n kinetic = null;\n scrollAnim = null;\n if (editing) closeEditor(true);\n if (paletteOpen) {\n paletteOpen = false;\n invalidate();\n }\n if (event.pointerType === \"touch\") {\n touches.set(event.pointerId, { x, y });\n if (touches.size === 2) {\n const [a, b] = [...touches.values()];\n pinch = { distance: Math.hypot(a.x - b.x, a.y - b.y), spacing };\n gesture = null;\n return;\n }\n }\n try {\n root.setPointerCapture(event.pointerId);\n } catch {\n // the pointer may already be released\n }\n const button = buttonAt(x, y);\n const target = canvasButtons[button];\n if (target) {\n gesture = { kind: \"button\", action: target.action };\n return;\n }\n if (replayPicking && x <= plotW && y <= plotH) {\n beginReplay(Math.min(n() - 1, Math.round(indexAt(x))));\n return;\n }\n const sep = separatorAt(y);\n if (sep > 0) {\n const above = panes[sep - 1];\n const below = panes[sep];\n gesture = {\n kind: \"separator\",\n index: sep,\n y,\n above: above.height,\n below: below.height,\n };\n return;\n }\n if (x > plotW && y < plotH) {\n const pane = paneAt(y);\n if (pane)\n gesture = {\n kind: \"axisY\",\n pane,\n y,\n min: pane.scale.min,\n max: pane.scale.max,\n };\n return;\n }\n if (y > plotH) {\n gesture = { kind: \"axisX\", x, spacing };\n return;\n }\n const pane = paneAt(y);\n if (tool !== \"cursor\" && pane && n()) {\n if (draft) {\n // the next anchor of a click-by-click drawing\n followDraft(x, y);\n fixDraftAnchor();\n gesture = null;\n invalidate();\n return;\n }\n const type = tool;\n const position = isPosition(type);\n // positions need prices: on the price pane only\n const at = position ? panes[0] : pane;\n const point = anchorAt(x, clamp(y, at.top, at.top + at.height), at);\n const anchors = anchorCount(type);\n draftPane = at.id;\n draft = {\n id: `drawing-${Date.now().toString(36)}-${++drawingCounter}`,\n type,\n points: position\n ? positionPoints(\n { ...point, price: roundPrice(point.price) },\n at,\n type === \"longPosition\",\n )\n : anchors === 1\n ? [point]\n : [point, point],\n ...(at.id !== PRICE ? { pane: at.id } : {}),\n };\n if (anchors === 1) {\n finishDraft();\n return;\n }\n draftClicks = anchors - 1;\n gesture = { kind: \"create\", pane: at, x, y, moved: false };\n invalidate();\n return;\n }\n if (tool === \"cursor\") {\n const line = hitLine(x, y);\n if (line) {\n gesture = { kind: \"order\", line, startPrice: line.price };\n return;\n }\n const hit = hitDrawingAt(x, y);\n if (hit) {\n select(hit.drawing.id);\n if (!hit.drawing.locked) {\n gesture = {\n kind: \"drawing\",\n id: hit.drawing.id,\n pane: hit.pane,\n handle: hit.hit.part === \"handle\" ? hit.hit.index : -1,\n x,\n y,\n original: hit.drawing,\n moved: false,\n };\n }\n return;\n }\n }\n gesture = {\n kind: \"pan\",\n x,\n y,\n right,\n pane,\n moved: false,\n lastX: x,\n lastY: y,\n lastT: event.timeStamp,\n velocity: 0,\n };\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const { x, y } = local(event);\n pointer = { x, y };\n if (event.pointerType === \"touch\" && touches.has(event.pointerId)) {\n touches.set(event.pointerId, { x, y });\n if (pinch && touches.size === 2) {\n const [a, b] = [...touches.values()];\n const distance = Math.hypot(a.x - b.x, a.y - b.y);\n const count = n();\n const mid =\n count && followsRealtime()\n ? Math.min(plotW, xOf(count - 1))\n : (a.x + b.x) / 2;\n const anchor = indexAt(mid);\n spacing = (pinch.spacing * distance) / Math.max(1, pinch.distance);\n clampView();\n right = anchor + (plotW - mid) / spacing;\n clampView();\n invalidate();\n return;\n }\n }\n const g = gesture;\n if (!g) {\n if (draft) followDraft(x, y);\n updateCursor(x, y);\n invalidate();\n return;\n }\n switch (g.kind) {\n case \"pan\": {\n const dx = x - g.x;\n if (!g.moved && Math.hypot(dx, y - g.y) < 3) break;\n g.moved = true;\n right = g.right - dx / spacing;\n if (g.pane && !g.pane.scale.auto) panScale(g.pane.scale, y - g.lastY);\n g.lastY = y;\n const dt = Math.max(1, event.timeStamp - g.lastT);\n g.velocity = 0.6 * ((x - g.lastX) / dt) + 0.4 * g.velocity;\n g.lastX = x;\n g.lastT = event.timeStamp;\n clampView();\n root.style.cursor = \"grabbing\";\n break;\n }\n case \"axisY\": {\n const scale = g.pane.scale;\n scale.min = g.min;\n scale.max = g.max;\n zoomScale(scale, Math.exp((y - g.y) * 0.006));\n break;\n }\n case \"axisX\": {\n const lastIndex = right;\n spacing = g.spacing * Math.exp((x - g.x) * 0.006);\n clampView();\n right = lastIndex;\n clampView();\n break;\n }\n case \"separator\": {\n const dy = y - g.y;\n const above = panes[g.index - 1];\n const below = panes[g.index];\n if (!above || !below) break;\n const total = g.above + g.below;\n const nextBelow = clamp(g.below - dy, MIN_PANE, total - MIN_PANE);\n paneHeights.set(below.id, nextBelow);\n if (above.id !== PRICE) paneHeights.set(above.id, total - nextBelow);\n break;\n }\n case \"order\": {\n lineOverrides.set(g.line.id, roundPrice(valueAt(panes[0].scale, y)));\n break;\n }\n case \"drawing\": {\n if (!g.moved && Math.hypot(x - g.x, y - g.y) < 3) break;\n g.moved = true;\n const scale = g.pane.scale;\n let points: TradingDrawingPoint[];\n if (g.handle >= 0) {\n points = moveHandle(g.original, g.handle, anchorAt(x, y, g.pane));\n } else {\n const di = Math.round(indexAt(x) - indexAt(g.x));\n const ds = scaledAt(scale, y) - scaledAt(scale, g.y);\n points = g.original.points.map((p) => ({\n time: timeAt(Math.round(indexOfTimeExt(p.time)) + di),\n price: fromScaled(scale, toScaled(scale, p.price) + ds),\n }));\n }\n drawings = drawings.map((d) => (d.id === g.id ? { ...d, points } : d));\n break;\n }\n case \"create\": {\n if (Math.hypot(x - g.x, y - g.y) >= 4) g.moved = true;\n followDraft(x, y);\n break;\n }\n default:\n updateCursor(x, y);\n break;\n }\n invalidate();\n };\n\n const onPointerUp = (event: PointerEvent) => {\n touches.delete(event.pointerId);\n if (touches.size < 2) pinch = null;\n const g = gesture;\n gesture = null;\n const { x, y } = local(event);\n if (event.pointerType === \"touch\") pointer = null;\n if (!g) {\n invalidate();\n return;\n }\n switch (g.kind) {\n case \"pan\":\n if (!g.moved) {\n if (selected) select(null);\n const pane = paneAt(y);\n if (pane && x <= plotW) {\n emit(\"click\", {\n index: Math.round(indexAt(x)),\n time: timeAt(Math.round(indexAt(x))),\n price: valueAt(pane.scale, y),\n pane: pane.id,\n });\n }\n } else if (\n options.kineticScroll !== false &&\n event.timeStamp - g.lastT < 60 &&\n Math.abs(g.velocity) > 0.25\n ) {\n kinetic = {\n v: g.velocity,\n t:\n typeof performance !== \"undefined\"\n ? performance.now()\n : Date.now(),\n };\n }\n break;\n case \"order\": {\n const next = lineOverrides.get(g.line.id);\n if (next !== undefined && next !== g.startPrice) {\n emit(\"orderMove\", {\n id: g.line.id,\n price: next,\n previousPrice: g.startPrice,\n line: g.line,\n });\n } else {\n lineOverrides.delete(g.line.id);\n }\n break;\n }\n case \"drawing\":\n if (g.moved) commitDrawings(drawings);\n break;\n case \"create\":\n // a click starts a click-by-click drawing; a drag fixes the anchor\n if (g.moved) fixDraftAnchor();\n break;\n case \"button\":\n if (buttonAt(x, y) >= 0) g.action();\n break;\n default:\n break;\n }\n updateCursor(x, y);\n invalidate();\n };\n\n const onPointerLeave = (event: PointerEvent) => {\n if (gesture || event.pointerType === \"touch\") return;\n pointer = null;\n hovered = null;\n hoveredLine = null;\n invalidate();\n };\n\n const onWheel = (event: WheelEvent) => {\n const mode = options.wheel ?? \"zoom\";\n if (mode === \"none\") return;\n const { x } = local(event);\n const unit = event.deltaMode === 1 ? 16 : event.deltaMode === 2 ? plotW : 1;\n const dx = event.deltaX * unit;\n const dy = event.deltaY * unit;\n const modifier = event.ctrlKey || event.metaKey;\n if (mode === \"modifier\" && !modifier && Math.abs(dx) <= Math.abs(dy))\n return;\n event.preventDefault();\n keyboardIndex = null;\n if (Math.abs(dx) > Math.abs(dy) || event.shiftKey) {\n right += (Math.abs(dx) > Math.abs(dy) ? dx : dy) / spacing;\n clampView();\n kinetic = null;\n invalidate();\n return;\n }\n const factor = Math.exp(-dy * (event.ctrlKey ? 0.01 : 0.0015));\n zoomAt(Math.min(x, plotW), factor);\n };\n\n const onDoubleClick = (event: MouseEvent) => {\n const { x, y } = local(event);\n const hit = tool === \"cursor\" ? hitDrawingAt(x, y) : null;\n if (hit?.drawing.type === \"text\") {\n openEditor(hit.drawing.id, false);\n return;\n }\n if (x > plotW && y < plotH) {\n const pane = paneAt(y);\n if (pane) pane.scale.auto = true;\n } else if (y > plotH) {\n spacing = options.barSpacing ?? 8;\n instance.scrollToRealtime(true);\n } else {\n for (const scale of scales.values()) scale.auto = true;\n }\n invalidate();\n };\n\n const announce = (index: number) => {\n if (index < 0 || index >= n()) return;\n const d = display();\n const l = labels();\n live.textContent = fill(l.announcement, {\n time: formatCrosshairTime(shift(store.time[index]), tfMs(), locale),\n open: formatPrice(d.open[index]),\n high: formatPrice(d.high[index]),\n low: formatPrice(d.low[index]),\n close: formatPrice(d.close[index]),\n });\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if ((event.ctrlKey || event.metaKey) && !event.altKey) {\n const key = event.key.toLowerCase();\n if (key === \"z\" || key === \"y\") {\n if (key === \"y\" || event.shiftKey) redo();\n else undo();\n event.preventDefault();\n }\n return;\n }\n const count = n();\n const page = Math.max(1, Math.floor(plotW / spacing / 2));\n const move = (index: number) => {\n keyboardIndex = clamp(index, 0, Math.max(0, count - 1));\n const x = xOf(keyboardIndex);\n if (x < spacing) right += (spacing - x) / spacing + 1;\n if (x > plotW - spacing) right -= (x - plotW + spacing) / spacing - 1;\n clampView();\n announce(keyboardIndex);\n };\n const current = keyboardIndex ?? Math.min(count - 1, Math.round(right));\n switch (event.key) {\n case \"ArrowLeft\":\n move(current - (event.shiftKey ? 10 : 1));\n break;\n case \"ArrowRight\":\n move(current + (event.shiftKey ? 10 : 1));\n break;\n case \"PageUp\":\n move(current - page);\n break;\n case \"PageDown\":\n move(current + page);\n break;\n case \"Home\":\n move(0);\n break;\n case \"End\":\n move(count - 1);\n instance.scrollToRealtime(true);\n break;\n case \"+\":\n case \"=\":\n case \"ArrowUp\":\n zoomAt(keyboardIndex !== null ? xOf(keyboardIndex) : plotW, 1.2);\n break;\n case \"-\":\n case \"_\":\n case \"ArrowDown\":\n zoomAt(keyboardIndex !== null ? xOf(keyboardIndex) : plotW, 1 / 1.2);\n break;\n case \"Escape\":\n if (paletteOpen) paletteOpen = false;\n else if (replayPicking) endReplay(false);\n else if (draft) {\n draft = null;\n draftClicks = 0;\n } else if (tool !== \"cursor\") setTool(\"cursor\", true);\n else if (selected) select(null);\n else keyboardIndex = null;\n break;\n case \"Delete\":\n case \"Backspace\": {\n const target = drawings.find((d) => d.id === selected);\n if (!target || target.locked) return;\n removeDrawing(target.id);\n break;\n }\n default:\n return;\n }\n event.preventDefault();\n invalidate();\n };\n\n const onFocus = () => {\n let keyboard = true;\n try {\n keyboard = root.matches(\":focus-visible\");\n } catch {\n // older engines: show the ring\n }\n if (keyboard)\n root.style.boxShadow = `inset 0 0 0 2px ${toCss(theme.primary, 0.6)}`;\n };\n const onBlur = () => {\n root.style.boxShadow = \"\";\n if (keyboardIndex !== null) {\n keyboardIndex = null;\n invalidate();\n }\n };\n\n root.addEventListener(\"pointerdown\", onPointerDown);\n root.addEventListener(\"pointermove\", onPointerMove);\n root.addEventListener(\"pointerup\", onPointerUp);\n root.addEventListener(\"pointercancel\", onPointerUp);\n root.addEventListener(\"pointerleave\", onPointerLeave);\n root.addEventListener(\"wheel\", onWheel, { passive: false });\n root.addEventListener(\"dblclick\", onDoubleClick);\n root.addEventListener(\"keydown\", onKeyDown);\n root.addEventListener(\"focus\", onFocus);\n root.addEventListener(\"blur\", onBlur);\n jump.addEventListener(\"pointerdown\", (event) => event.stopPropagation());\n jump.addEventListener(\"click\", () => instance.scrollToRealtime(true));\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => invalidate())\n : null;\n resizeObserver?.observe(root);\n\n const refreshTheme = () => {\n if (destroyed) return;\n const next = readTheme(root);\n if (themeColorsChanged(theme, next)) themeVersion++;\n theme = next;\n legendKey = \"\";\n invalidate();\n };\n const unwatchTheme = watchTheme(refreshTheme);\n\n // the page language, when no `locale` is given\n let langObserver: MutationObserver | null = null;\n if (typeof MutationObserver === \"function\" && root.ownerDocument) {\n langObserver = new MutationObserver(() => {\n if (options.locale) return;\n const before = locale;\n resolveTexts();\n if (locale === before) return;\n legendKey = \"\";\n optionsVersion++;\n applyStatic();\n invalidate();\n });\n langObserver.observe(root.ownerDocument.documentElement, {\n attributes: true,\n attributeFilter: [\"lang\"],\n });\n }\n\n // ----------------------------------------------------- image, full screen\n\n /** Every layer of the chart (and the legends) drawn on one canvas */\n const compose = (): HTMLCanvasElement | null => {\n if (destroyed) return null;\n // a fresh frame: the GPU canvas is read in the same task\n if (frameId) {\n if (win?.cancelAnimationFrame) win.cancelAnimationFrame(frameId);\n else clearTimeout(frameId);\n frameId = 0;\n }\n frame();\n const dpr = win?.devicePixelRatio || 1;\n const canvas = doc.createElement(\"canvas\");\n canvas.width = Math.max(1, Math.round(width * dpr));\n canvas.height = Math.max(1, Math.round(height * dpr));\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return null;\n ctx.fillStyle = toCss(theme.background);\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n try {\n ctx.drawImage(background, 0, 0);\n if (renderer)\n ctx.drawImage(\n renderer.canvas,\n 0,\n 0,\n Math.round(plotW * dpr),\n Math.round(plotH * dpr),\n );\n ctx.drawImage(foreground, 0, 0);\n } catch {\n // a canvas that can't be read (lost context): skipped\n }\n // the legends are DOM text: written at their place\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n const origin = root.getBoundingClientRect();\n const view = win ?? null;\n legends.querySelectorAll(\"span, button\").forEach((element) => {\n const text = element.textContent ?? \"\";\n if (element.children.length || !text.trim() || !view) return;\n const rect = element.getBoundingClientRect();\n const computed = view.getComputedStyle(element);\n ctx.font = `${computed.fontWeight} ${computed.fontSize} ${computed.fontFamily}`;\n ctx.fillStyle = computed.color || toCss(theme.text);\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(\n text,\n rect.left - origin.left,\n rect.top - origin.top + rect.height / 2,\n );\n });\n return canvas;\n };\n\n let fullscreen = false;\n const onFullscreen = () => {\n const next = doc.fullscreenElement === root;\n if (next === fullscreen) return;\n fullscreen = next;\n root.style.background = next ? toCss(theme.background) : \"\";\n emit(\"fullscreenChange\", next);\n invalidate();\n };\n doc.addEventListener(\"fullscreenchange\", onFullscreen);\n\n // ------------------------------------------------------------- renderer\n\n const initRenderer = async (exclude: Set<ChartRendererKind> = new Set()) => {\n const token = ++rendererToken;\n const next = await createRenderer(\n options.renderer ?? \"auto\",\n () => createDataCanvas(doc),\n (kind) => {\n if (destroyed || renderer?.kind !== kind) return;\n renderer.destroy();\n renderer.canvas.remove();\n renderer = null;\n void initRenderer(new Set([...exclude, kind]));\n },\n exclude,\n );\n if (destroyed || token !== rendererToken) {\n next?.destroy();\n return;\n }\n if (renderer) {\n renderer.destroy();\n renderer.canvas.remove();\n }\n renderer = next;\n geomKey = \"\";\n if (next) {\n root.dataset.renderer = next.kind;\n root.insertBefore(next.canvas, foreground);\n emit(\"renderer\", next.kind);\n }\n resolveReady(next?.kind ?? null);\n invalidate();\n };\n\n // ------------------------------------------------------------- options\n\n const applyStatic = () => {\n const symbol = options.symbol ?? \"\";\n root.setAttribute(\n \"aria-label\",\n options.ariaLabel ?? fill(labels().chart, { symbol }).trim(),\n );\n const wantTimer = !!options.countdown && options.lastPriceLine !== false;\n if (wantTimer && !countdownTimer)\n countdownTimer = setInterval(invalidate, 1000);\n if (!wantTimer && countdownTimer) {\n clearInterval(countdownTimer);\n countdownTimer = null;\n }\n };\n\n const applyOptions = (previous: TradingChartOptions | null) => {\n const next = options;\n resolveTexts();\n const nextZone =\n next.timeZone && isTimeZone(next.timeZone) ? next.timeZone : undefined;\n const timeChanged =\n !!previous &&\n (next.utcOffset !== previous.utcOffset || nextZone !== zone);\n zone = nextZone;\n if (!previous || next.indicators !== previous.indicators) rebuildStudies();\n // session periods (VWAP) follow the displayed time\n if (timeChanged) for (const study of studies) studyValid.set(study, 0);\n if (!previous || next.compare !== previous.compare) rebuildCompares();\n if (next.bars && (!previous || next.bars !== previous.bars)) {\n if (replay) endReplay(false);\n if (previous) applyBarsOption(next.bars);\n else replaceBars(next.bars);\n } else if (!next.bars && previous?.bars) {\n if (replay) endReplay(false);\n replaceBars([]);\n }\n if (previous && next.barSpacing !== previous.barSpacing && next.barSpacing)\n spacing = next.barSpacing;\n if (previous && next.scaleMode !== previous.scaleMode) {\n const price = scales.get(PRICE);\n if (price) price.auto = true;\n }\n if (\n next.drawings &&\n next.drawings !== emittedDrawings &&\n (!previous || next.drawings !== previous.drawings)\n ) {\n if (previous) commitDrawings(next.drawings, false);\n else drawings = committed = next.drawings;\n }\n if (\n previous &&\n (next.drawingMode ?? \"cursor\") !== (previous.drawingMode ?? \"cursor\")\n ) {\n setTool(next.drawingMode ?? \"cursor\", false);\n }\n if (previous && next.priceLines !== previous.priceLines)\n lineOverrides.clear();\n if (previous && next.chartStyle !== previous.chartStyle)\n haValid = Math.min(haValid, 0);\n optionsVersion++;\n applyStatic();\n invalidate();\n };\n\n applyOptions(null);\n void initRenderer();\n\n // ------------------------------------------------------------------ api\n\n const instance: TradingChartInstance = {\n setOptions(next) {\n if (destroyed) return;\n const previous = options;\n options = { ...next };\n applyOptions(previous);\n if ((next.renderer ?? \"auto\") !== (previous.renderer ?? \"auto\"))\n void initRenderer();\n },\n setBars(bars) {\n if (replay) endReplay(false);\n replaceBars(bars);\n },\n update(bar) {\n if (replay) {\n // the stream goes on behind the replay\n storeUpdate(replay.source, bar);\n return;\n }\n const before = n();\n const follow = followsRealtime();\n const at = storeUpdate(store, bar);\n if (at < 0) return;\n if (n() > before && follow) right += n() - before;\n afterDataChange(at);\n },\n appendBars(bars) {\n if (replay) {\n storeAppend(replay.source, bars);\n return;\n }\n const before = n();\n const follow = followsRealtime();\n const at = storeAppend(store, bars);\n if (at < 0) return;\n if (follow) right += n() - before;\n afterDataChange(at);\n },\n prependBars(bars) {\n if (replay) storePrepend(replay.source, bars);\n const added = storePrepend(store, bars);\n if (!added) return;\n pyramid = createPyramid();\n haPyramid = createPyramid();\n haValid = 0;\n right += added;\n if (keyboardIndex !== null) keyboardIndex += added;\n afterDataChange(0);\n },\n getBarCount: () => n(),\n getBar: (index) =>\n index >= 0 && index < n() ? readBar(store, Math.floor(index)) : null,\n scrollToRealtime(animateScroll = true) {\n const target = n() - 1 + (options.rightOffset ?? 8);\n kinetic = null;\n if (\n animateScroll &&\n finite(right) &&\n Math.abs(target - right) * spacing < plotW * 6\n ) {\n scrollAnim = {\n from: right,\n to: target,\n start:\n typeof performance !== \"undefined\" ? performance.now() : Date.now(),\n };\n } else {\n right = target;\n }\n invalidate();\n },\n fitContent() {\n const count = n();\n if (!count) return;\n instance.setVisibleRange({\n from: -0.5,\n to: count - 1 + (options.rightOffset ?? 8),\n });\n },\n getVisibleRange: () => visibleRange(),\n setVisibleRange({ from, to }) {\n if (!(to > from)) return;\n kinetic = null;\n scrollAnim = null;\n pendingRange = { from, to };\n applyRange(pendingRange);\n invalidate();\n },\n getVisibleTimeRange() {\n const range = visibleRange();\n return { from: timeAtFrac(range.from), to: timeAtFrac(range.to) };\n },\n setVisibleTimeRange({ from, to }) {\n if (!n() || !(to > from)) return;\n instance.setVisibleRange({\n from: indexAtTimeFrac(from),\n to: indexAtTimeFrac(to),\n });\n },\n setCrosshair(time, price) {\n externalCross =\n time === null || !finite(time) ? null : { time, price: price ?? NaN };\n invalidate();\n },\n setScaleMode(mode) {\n options = { ...options, scaleMode: mode };\n const price = scales.get(PRICE);\n if (price) price.auto = true;\n invalidate();\n },\n resetPriceScales() {\n for (const scale of scales.values()) scale.auto = true;\n invalidate();\n },\n setDrawingTool: (next) => setTool(next, true),\n getDrawingTool: () => tool,\n getDrawings: () => drawings,\n setDrawings(next) {\n commitDrawings(next, false);\n },\n removeDrawing,\n updateDrawing,\n selectDrawing: (id) => select(id),\n undo,\n redo,\n getUndoState: undoState,\n startReplay(time) {\n if (!n() && !replay) return;\n if (time === undefined) {\n if (replay) endReplay(true);\n replayPicking = true;\n emitReplay();\n invalidate();\n return;\n }\n const source = replay ? replay.source : store;\n beginReplay(indexOfTime(source.time, source.length, time));\n },\n replayStep: (count = 1) => replayStepBy(Math.max(1, Math.floor(count))),\n replayPlay: (speed) => playReplay(speed),\n replayPause() {\n if (!replay) return;\n stopReplayTimer();\n emitReplay();\n },\n stopReplay: () => endReplay(true),\n getReplayState: replayState,\n toDataURL(type = \"image/png\", quality) {\n return compose()?.toDataURL(type, quality) ?? \"\";\n },\n toBlob(type = \"image/png\", quality) {\n const canvas = compose();\n return new Promise((resolve) => {\n if (!canvas || typeof canvas.toBlob !== \"function\") resolve(null);\n else canvas.toBlob(resolve, type, quality);\n });\n },\n async requestFullscreen() {\n if (typeof root.requestFullscreen === \"function\")\n await root.requestFullscreen();\n },\n async exitFullscreen() {\n if (\n doc.fullscreenElement === root &&\n typeof doc.exitFullscreen === \"function\"\n )\n await doc.exitFullscreen();\n },\n isFullscreen: () => doc.fullscreenElement === root,\n setIndicatorVisible(id, visible) {\n visibility.set(id, visible);\n invalidate();\n },\n getRenderer: () => renderer?.kind ?? null,\n ready,\n refreshTheme,\n resize: () => invalidate(),\n on(type, listener) {\n let set = listeners.get(type);\n if (!set) listeners.set(type, (set = new Set()));\n set.add(listener as (event: never) => void);\n return () => set.delete(listener as (event: never) => void);\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n if (frameId) {\n if (win?.cancelAnimationFrame) win.cancelAnimationFrame(frameId);\n else clearTimeout(frameId);\n }\n if (countdownTimer) clearInterval(countdownTimer);\n if (replay?.timer) clearInterval(replay.timer);\n doc.removeEventListener(\"fullscreenchange\", onFullscreen);\n resizeObserver?.disconnect();\n unwatchTheme();\n langObserver?.disconnect();\n root.removeEventListener(\"wheel\", onWheel);\n renderer?.destroy();\n renderer = null;\n resolveReady(null);\n listeners.clear();\n root.remove();\n },\n };\n syncHooks.set(instance, {\n setTimeRange(range) {\n silentRange = true;\n instance.setVisibleTimeRange(range);\n },\n });\n return instance;\n};\n"],"mappings":"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"}