minerva-design 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (824) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +21 -21
  3. package/custom-elements.json +3072 -611
  4. package/dist/angular/fesm2022/minerva-angular.mjs +1491 -5
  5. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  6. package/dist/angular/types/minerva-angular.d.ts +595 -5
  7. package/dist/charts/canvas.d.cts +4 -3
  8. package/dist/charts/canvas.d.ts +4 -3
  9. package/dist/charts/core.cjs +1 -1
  10. package/dist/charts/core.d.cts +6 -4
  11. package/dist/charts/core.d.ts +6 -4
  12. package/dist/charts/core.js +24 -16
  13. package/dist/charts/engine/axis.cjs +1 -1
  14. package/dist/charts/engine/axis.cjs.map +1 -1
  15. package/dist/charts/engine/axis.js +42 -19
  16. package/dist/charts/engine/axis.js.map +1 -1
  17. package/dist/charts/engine/canvas.cjs +1 -1
  18. package/dist/charts/engine/canvas.cjs.map +1 -1
  19. package/dist/charts/engine/canvas.js +155 -127
  20. package/dist/charts/engine/canvas.js.map +1 -1
  21. package/dist/charts/engine/chart.cjs +1 -1
  22. package/dist/charts/engine/chart.cjs.map +1 -1
  23. package/dist/charts/engine/chart.js +370 -255
  24. package/dist/charts/engine/chart.js.map +1 -1
  25. package/dist/charts/engine/color.cjs +1 -1
  26. package/dist/charts/engine/color.cjs.map +1 -1
  27. package/dist/charts/engine/color.d.cts +18 -0
  28. package/dist/charts/engine/color.d.ts +18 -0
  29. package/dist/charts/engine/color.js +48 -2
  30. package/dist/charts/engine/color.js.map +1 -1
  31. package/dist/charts/engine/controller.cjs +2 -2
  32. package/dist/charts/engine/controller.cjs.map +1 -1
  33. package/dist/charts/engine/controller.d.cts +34 -1
  34. package/dist/charts/engine/controller.d.ts +34 -1
  35. package/dist/charts/engine/controller.js +318 -273
  36. package/dist/charts/engine/controller.js.map +1 -1
  37. package/dist/charts/engine/data.cjs +1 -1
  38. package/dist/charts/engine/data.cjs.map +1 -1
  39. package/dist/charts/engine/data.d.cts +3 -1
  40. package/dist/charts/engine/data.d.ts +3 -1
  41. package/dist/charts/engine/data.js +6 -4
  42. package/dist/charts/engine/data.js.map +1 -1
  43. package/dist/charts/engine/defaults.cjs +2 -0
  44. package/dist/charts/engine/defaults.cjs.map +1 -0
  45. package/dist/charts/engine/defaults.d.cts +20 -0
  46. package/dist/charts/engine/defaults.d.ts +20 -0
  47. package/dist/charts/engine/defaults.js +35 -0
  48. package/dist/charts/engine/defaults.js.map +1 -0
  49. package/dist/charts/engine/format.cjs +1 -1
  50. package/dist/charts/engine/format.cjs.map +1 -1
  51. package/dist/charts/engine/format.d.cts +6 -0
  52. package/dist/charts/engine/format.d.ts +6 -0
  53. package/dist/charts/engine/format.js +15 -2
  54. package/dist/charts/engine/format.js.map +1 -1
  55. package/dist/charts/engine/graph/chart.cjs +2 -0
  56. package/dist/charts/engine/graph/chart.cjs.map +1 -0
  57. package/dist/charts/engine/graph/chart.d.cts +3 -0
  58. package/dist/charts/engine/graph/chart.d.ts +3 -0
  59. package/dist/charts/engine/graph/chart.js +1708 -0
  60. package/dist/charts/engine/graph/chart.js.map +1 -0
  61. package/dist/charts/engine/graph/circular.cjs +2 -0
  62. package/dist/charts/engine/graph/circular.cjs.map +1 -0
  63. package/dist/charts/engine/graph/circular.d.cts +16 -0
  64. package/dist/charts/engine/graph/circular.d.ts +16 -0
  65. package/dist/charts/engine/graph/circular.js +62 -0
  66. package/dist/charts/engine/graph/circular.js.map +1 -0
  67. package/dist/charts/engine/graph/dag.cjs +2 -0
  68. package/dist/charts/engine/graph/dag.cjs.map +1 -0
  69. package/dist/charts/engine/graph/dag.d.cts +34 -0
  70. package/dist/charts/engine/graph/dag.d.ts +34 -0
  71. package/dist/charts/engine/graph/dag.js +339 -0
  72. package/dist/charts/engine/graph/dag.js.map +1 -0
  73. package/dist/charts/engine/graph/dom.cjs +2 -0
  74. package/dist/charts/engine/graph/dom.cjs.map +1 -0
  75. package/dist/charts/engine/graph/dom.d.cts +23 -0
  76. package/dist/charts/engine/graph/dom.d.ts +23 -0
  77. package/dist/charts/engine/graph/dom.js +158 -0
  78. package/dist/charts/engine/graph/dom.js.map +1 -0
  79. package/dist/charts/engine/graph/force.cjs +2 -0
  80. package/dist/charts/engine/graph/force.cjs.map +1 -0
  81. package/dist/charts/engine/graph/force.d.cts +76 -0
  82. package/dist/charts/engine/graph/force.d.ts +76 -0
  83. package/dist/charts/engine/graph/force.js +423 -0
  84. package/dist/charts/engine/graph/force.js.map +1 -0
  85. package/dist/charts/engine/graph/geometry.cjs +2 -0
  86. package/dist/charts/engine/graph/geometry.cjs.map +1 -0
  87. package/dist/charts/engine/graph/geometry.d.cts +50 -0
  88. package/dist/charts/engine/graph/geometry.d.ts +50 -0
  89. package/dist/charts/engine/graph/geometry.js +197 -0
  90. package/dist/charts/engine/graph/geometry.js.map +1 -0
  91. package/dist/charts/engine/graph/index.cjs +1 -0
  92. package/dist/charts/engine/graph/index.d.cts +6 -0
  93. package/dist/charts/engine/graph/index.d.ts +6 -0
  94. package/dist/charts/engine/graph/index.js +6 -0
  95. package/dist/charts/engine/graph/labels.cjs +2 -0
  96. package/dist/charts/engine/graph/labels.cjs.map +1 -0
  97. package/dist/charts/engine/graph/labels.d.cts +12 -0
  98. package/dist/charts/engine/graph/labels.d.ts +12 -0
  99. package/dist/charts/engine/graph/labels.js +128 -0
  100. package/dist/charts/engine/graph/labels.js.map +1 -0
  101. package/dist/charts/engine/graph/model.cjs +2 -0
  102. package/dist/charts/engine/graph/model.cjs.map +1 -0
  103. package/dist/charts/engine/graph/model.d.cts +52 -0
  104. package/dist/charts/engine/graph/model.d.ts +52 -0
  105. package/dist/charts/engine/graph/model.js +108 -0
  106. package/dist/charts/engine/graph/model.js.map +1 -0
  107. package/dist/charts/engine/graph/sizing.cjs +2 -0
  108. package/dist/charts/engine/graph/sizing.cjs.map +1 -0
  109. package/dist/charts/engine/graph/sizing.d.cts +33 -0
  110. package/dist/charts/engine/graph/sizing.d.ts +33 -0
  111. package/dist/charts/engine/graph/sizing.js +60 -0
  112. package/dist/charts/engine/graph/sizing.js.map +1 -0
  113. package/dist/charts/engine/graph/tree.cjs +2 -0
  114. package/dist/charts/engine/graph/tree.cjs.map +1 -0
  115. package/dist/charts/engine/graph/tree.d.cts +30 -0
  116. package/dist/charts/engine/graph/tree.d.ts +30 -0
  117. package/dist/charts/engine/graph/tree.js +218 -0
  118. package/dist/charts/engine/graph/tree.js.map +1 -0
  119. package/dist/charts/engine/graph/types.d.cts +640 -0
  120. package/dist/charts/engine/graph/types.d.ts +640 -0
  121. package/dist/charts/engine/graph/worker.cjs +52 -0
  122. package/dist/charts/engine/graph/worker.cjs.map +1 -0
  123. package/dist/charts/engine/graph/worker.d.cts +36 -0
  124. package/dist/charts/engine/graph/worker.d.ts +36 -0
  125. package/dist/charts/engine/graph/worker.js +135 -0
  126. package/dist/charts/engine/graph/worker.js.map +1 -0
  127. package/dist/charts/engine/items.cjs +1 -1
  128. package/dist/charts/engine/items.cjs.map +1 -1
  129. package/dist/charts/engine/items.d.cts +15 -2
  130. package/dist/charts/engine/items.d.ts +15 -2
  131. package/dist/charts/engine/items.js +131 -112
  132. package/dist/charts/engine/items.js.map +1 -1
  133. package/dist/charts/engine/labels.cjs +1 -1
  134. package/dist/charts/engine/labels.cjs.map +1 -1
  135. package/dist/charts/engine/labels.d.cts +17 -0
  136. package/dist/charts/engine/labels.d.ts +17 -0
  137. package/dist/charts/engine/labels.js +28 -4
  138. package/dist/charts/engine/labels.js.map +1 -1
  139. package/dist/charts/engine/layout.cjs +1 -1
  140. package/dist/charts/engine/layout.cjs.map +1 -1
  141. package/dist/charts/engine/layout.d.cts +9 -0
  142. package/dist/charts/engine/layout.d.ts +9 -0
  143. package/dist/charts/engine/layout.js +11 -2
  144. package/dist/charts/engine/layout.js.map +1 -1
  145. package/dist/charts/engine/model.cjs +1 -1
  146. package/dist/charts/engine/model.cjs.map +1 -1
  147. package/dist/charts/engine/model.d.cts +73 -3
  148. package/dist/charts/engine/model.d.ts +73 -3
  149. package/dist/charts/engine/model.js +258 -154
  150. package/dist/charts/engine/model.js.map +1 -1
  151. package/dist/charts/engine/orderbook/field.cjs +37 -0
  152. package/dist/charts/engine/orderbook/field.cjs.map +1 -0
  153. package/dist/charts/engine/orderbook/field.d.cts +92 -0
  154. package/dist/charts/engine/orderbook/field.d.ts +92 -0
  155. package/dist/charts/engine/orderbook/field.js +297 -0
  156. package/dist/charts/engine/orderbook/field.js.map +1 -0
  157. package/dist/charts/engine/orderbook/format.cjs +1 -1
  158. package/dist/charts/engine/orderbook/format.cjs.map +1 -1
  159. package/dist/charts/engine/orderbook/format.d.cts +3 -2
  160. package/dist/charts/engine/orderbook/format.d.ts +3 -2
  161. package/dist/charts/engine/orderbook/format.js +5 -5
  162. package/dist/charts/engine/orderbook/format.js.map +1 -1
  163. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  164. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  165. package/dist/charts/engine/orderbook/heatmap.js +566 -475
  166. package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
  167. package/dist/charts/engine/orderbook/host.cjs +1 -1
  168. package/dist/charts/engine/orderbook/host.cjs.map +1 -1
  169. package/dist/charts/engine/orderbook/host.d.cts +8 -1
  170. package/dist/charts/engine/orderbook/host.d.ts +8 -1
  171. package/dist/charts/engine/orderbook/host.js +27 -5
  172. package/dist/charts/engine/orderbook/host.js.map +1 -1
  173. package/dist/charts/engine/orderbook/ladder.cjs +1 -1
  174. package/dist/charts/engine/orderbook/ladder.cjs.map +1 -1
  175. package/dist/charts/engine/orderbook/ladder.js +1 -1
  176. package/dist/charts/engine/orderbook/ladder.js.map +1 -1
  177. package/dist/charts/engine/orderbook/layout.cjs +2 -0
  178. package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
  179. package/dist/charts/engine/orderbook/layout.d.cts +42 -0
  180. package/dist/charts/engine/orderbook/layout.d.ts +42 -0
  181. package/dist/charts/engine/orderbook/layout.js +76 -0
  182. package/dist/charts/engine/orderbook/layout.js.map +1 -0
  183. package/dist/charts/engine/orderbook/tape.cjs +1 -1
  184. package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
  185. package/dist/charts/engine/orderbook/tape.js +4 -4
  186. package/dist/charts/engine/orderbook/tape.js.map +1 -1
  187. package/dist/charts/engine/orderbook/types.d.cts +27 -3
  188. package/dist/charts/engine/orderbook/types.d.ts +27 -3
  189. package/dist/charts/engine/overlay.cjs +1 -1
  190. package/dist/charts/engine/overlay.cjs.map +1 -1
  191. package/dist/charts/engine/overlay.d.cts +27 -0
  192. package/dist/charts/engine/overlay.d.ts +27 -0
  193. package/dist/charts/engine/overlay.js +34 -12
  194. package/dist/charts/engine/overlay.js.map +1 -1
  195. package/dist/charts/engine/presets.cjs +2 -2
  196. package/dist/charts/engine/presets.cjs.map +1 -1
  197. package/dist/charts/engine/presets.d.cts +35 -3
  198. package/dist/charts/engine/presets.d.ts +35 -3
  199. package/dist/charts/engine/presets.js +121 -101
  200. package/dist/charts/engine/presets.js.map +1 -1
  201. package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
  202. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
  203. package/dist/charts/engine/renderers/canvas2d.js +13 -9
  204. package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
  205. package/dist/charts/engine/renderers/detect.cjs +1 -1
  206. package/dist/charts/engine/renderers/detect.cjs.map +1 -1
  207. package/dist/charts/engine/renderers/detect.d.cts +2 -1
  208. package/dist/charts/engine/renderers/detect.d.ts +2 -1
  209. package/dist/charts/engine/renderers/detect.js +23 -21
  210. package/dist/charts/engine/renderers/detect.js.map +1 -1
  211. package/dist/charts/engine/renderers/follow.cjs +2 -0
  212. package/dist/charts/engine/renderers/follow.cjs.map +1 -0
  213. package/dist/charts/engine/renderers/follow.d.cts +8 -0
  214. package/dist/charts/engine/renderers/follow.d.ts +8 -0
  215. package/dist/charts/engine/renderers/follow.js +10 -0
  216. package/dist/charts/engine/renderers/follow.js.map +1 -0
  217. package/dist/charts/engine/renderers/gl-budget.cjs +2 -0
  218. package/dist/charts/engine/renderers/gl-budget.cjs.map +1 -0
  219. package/dist/charts/engine/renderers/gl-budget.d.cts +32 -0
  220. package/dist/charts/engine/renderers/gl-budget.d.ts +32 -0
  221. package/dist/charts/engine/renderers/gl-budget.js +95 -0
  222. package/dist/charts/engine/renderers/gl-budget.js.map +1 -0
  223. package/dist/charts/engine/renderers/gl.cjs +1 -1
  224. package/dist/charts/engine/renderers/gl.cjs.map +1 -1
  225. package/dist/charts/engine/renderers/gl.js +1 -1
  226. package/dist/charts/engine/renderers/gl.js.map +1 -1
  227. package/dist/charts/engine/renderers/shaders.cjs +9 -6
  228. package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
  229. package/dist/charts/engine/renderers/shaders.d.cts +1 -1
  230. package/dist/charts/engine/renderers/shaders.d.ts +1 -1
  231. package/dist/charts/engine/renderers/shaders.js +9 -6
  232. package/dist/charts/engine/renderers/shaders.js.map +1 -1
  233. package/dist/charts/engine/renderers/types.cjs.map +1 -1
  234. package/dist/charts/engine/renderers/types.d.cts +2 -0
  235. package/dist/charts/engine/renderers/types.d.ts +2 -0
  236. package/dist/charts/engine/renderers/types.js.map +1 -1
  237. package/dist/charts/engine/renderers/webgl.cjs +1 -1
  238. package/dist/charts/engine/renderers/webgl.cjs.map +1 -1
  239. package/dist/charts/engine/renderers/webgl.js +85 -64
  240. package/dist/charts/engine/renderers/webgl.js.map +1 -1
  241. package/dist/charts/engine/renderers/webgl2.cjs +1 -1
  242. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
  243. package/dist/charts/engine/renderers/webgl2.js +72 -58
  244. package/dist/charts/engine/renderers/webgl2.js.map +1 -1
  245. package/dist/charts/engine/renderers/webgpu.cjs +1 -1
  246. package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
  247. package/dist/charts/engine/renderers/webgpu.js +1 -1
  248. package/dist/charts/engine/renderers/webgpu.js.map +1 -1
  249. package/dist/charts/engine/scene.cjs +1 -1
  250. package/dist/charts/engine/scene.cjs.map +1 -1
  251. package/dist/charts/engine/scene.d.cts +104 -4
  252. package/dist/charts/engine/scene.d.ts +104 -4
  253. package/dist/charts/engine/scene.js +412 -193
  254. package/dist/charts/engine/scene.js.map +1 -1
  255. package/dist/charts/engine/shapes/bullet.cjs +1 -1
  256. package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
  257. package/dist/charts/engine/shapes/bullet.js +110 -110
  258. package/dist/charts/engine/shapes/bullet.js.map +1 -1
  259. package/dist/charts/engine/shapes/chart.cjs +1 -1
  260. package/dist/charts/engine/shapes/chart.cjs.map +1 -1
  261. package/dist/charts/engine/shapes/chart.js +4 -1
  262. package/dist/charts/engine/shapes/chart.js.map +1 -1
  263. package/dist/charts/engine/shapes/chord.cjs +2 -0
  264. package/dist/charts/engine/shapes/chord.cjs.map +1 -0
  265. package/dist/charts/engine/shapes/chord.d.cts +18 -0
  266. package/dist/charts/engine/shapes/chord.d.ts +18 -0
  267. package/dist/charts/engine/shapes/chord.js +419 -0
  268. package/dist/charts/engine/shapes/chord.js.map +1 -0
  269. package/dist/charts/engine/shapes/draw.cjs +1 -1
  270. package/dist/charts/engine/shapes/draw.cjs.map +1 -1
  271. package/dist/charts/engine/shapes/draw.d.cts +5 -1
  272. package/dist/charts/engine/shapes/draw.d.ts +5 -1
  273. package/dist/charts/engine/shapes/draw.js +47 -17
  274. package/dist/charts/engine/shapes/draw.js.map +1 -1
  275. package/dist/charts/engine/shapes/hit.cjs +1 -1
  276. package/dist/charts/engine/shapes/hit.cjs.map +1 -1
  277. package/dist/charts/engine/shapes/hit.d.cts +3 -1
  278. package/dist/charts/engine/shapes/hit.d.ts +3 -1
  279. package/dist/charts/engine/shapes/hit.js +75 -46
  280. package/dist/charts/engine/shapes/hit.js.map +1 -1
  281. package/dist/charts/engine/shapes/index.d.cts +3 -2
  282. package/dist/charts/engine/shapes/index.d.ts +3 -2
  283. package/dist/charts/engine/shapes/labels.cjs +1 -1
  284. package/dist/charts/engine/shapes/labels.cjs.map +1 -1
  285. package/dist/charts/engine/shapes/labels.js +12 -4
  286. package/dist/charts/engine/shapes/labels.js.map +1 -1
  287. package/dist/charts/engine/shapes/layout.cjs +2 -2
  288. package/dist/charts/engine/shapes/layout.cjs.map +1 -1
  289. package/dist/charts/engine/shapes/layout.d.cts +3 -1
  290. package/dist/charts/engine/shapes/layout.d.ts +3 -1
  291. package/dist/charts/engine/shapes/layout.js +106 -78
  292. package/dist/charts/engine/shapes/layout.js.map +1 -1
  293. package/dist/charts/engine/shapes/scene.cjs +1 -1
  294. package/dist/charts/engine/shapes/scene.cjs.map +1 -1
  295. package/dist/charts/engine/shapes/scene.d.cts +33 -3
  296. package/dist/charts/engine/shapes/scene.d.ts +33 -3
  297. package/dist/charts/engine/shapes/scene.js +62 -19
  298. package/dist/charts/engine/shapes/scene.js.map +1 -1
  299. package/dist/charts/engine/shapes/types.d.cts +121 -8
  300. package/dist/charts/engine/shapes/types.d.ts +121 -8
  301. package/dist/charts/engine/signature.cjs +1 -1
  302. package/dist/charts/engine/signature.cjs.map +1 -1
  303. package/dist/charts/engine/signature.js +1 -1
  304. package/dist/charts/engine/signature.js.map +1 -1
  305. package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
  306. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
  307. package/dist/charts/engine/three-d/canvas2d.d.cts +41 -3
  308. package/dist/charts/engine/three-d/canvas2d.d.ts +41 -3
  309. package/dist/charts/engine/three-d/canvas2d.js +166 -67
  310. package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
  311. package/dist/charts/engine/three-d/chart.cjs +1 -1
  312. package/dist/charts/engine/three-d/chart.cjs.map +1 -1
  313. package/dist/charts/engine/three-d/chart.js +219 -215
  314. package/dist/charts/engine/three-d/chart.js.map +1 -1
  315. package/dist/charts/engine/three-d/detect.cjs +1 -1
  316. package/dist/charts/engine/three-d/detect.cjs.map +1 -1
  317. package/dist/charts/engine/three-d/detect.d.cts +3 -2
  318. package/dist/charts/engine/three-d/detect.d.ts +3 -2
  319. package/dist/charts/engine/three-d/detect.js +22 -20
  320. package/dist/charts/engine/three-d/detect.js.map +1 -1
  321. package/dist/charts/engine/three-d/geometry.cjs +1 -1
  322. package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
  323. package/dist/charts/engine/three-d/geometry.d.cts +6 -0
  324. package/dist/charts/engine/three-d/geometry.d.ts +6 -0
  325. package/dist/charts/engine/three-d/geometry.js +106 -90
  326. package/dist/charts/engine/three-d/geometry.js.map +1 -1
  327. package/dist/charts/engine/three-d/model.cjs +1 -1
  328. package/dist/charts/engine/three-d/model.cjs.map +1 -1
  329. package/dist/charts/engine/three-d/model.d.cts +2 -0
  330. package/dist/charts/engine/three-d/model.d.ts +2 -0
  331. package/dist/charts/engine/three-d/model.js +2 -0
  332. package/dist/charts/engine/three-d/model.js.map +1 -1
  333. package/dist/charts/engine/three-d/oit.cjs +109 -0
  334. package/dist/charts/engine/three-d/oit.cjs.map +1 -0
  335. package/dist/charts/engine/three-d/oit.d.cts +34 -0
  336. package/dist/charts/engine/three-d/oit.d.ts +34 -0
  337. package/dist/charts/engine/three-d/oit.js +111 -0
  338. package/dist/charts/engine/three-d/oit.js.map +1 -0
  339. package/dist/charts/engine/three-d/overlay.cjs +1 -1
  340. package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
  341. package/dist/charts/engine/three-d/overlay.js +43 -36
  342. package/dist/charts/engine/three-d/overlay.js.map +1 -1
  343. package/dist/charts/engine/three-d/render-types.cjs +1 -1
  344. package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
  345. package/dist/charts/engine/three-d/render-types.d.cts +37 -3
  346. package/dist/charts/engine/three-d/render-types.d.ts +37 -3
  347. package/dist/charts/engine/three-d/render-types.js +6 -10
  348. package/dist/charts/engine/three-d/render-types.js.map +1 -1
  349. package/dist/charts/engine/three-d/shaders.cjs +109 -48
  350. package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
  351. package/dist/charts/engine/three-d/shaders.d.cts +12 -5
  352. package/dist/charts/engine/three-d/shaders.d.ts +12 -5
  353. package/dist/charts/engine/three-d/shaders.js +118 -55
  354. package/dist/charts/engine/three-d/shaders.js.map +1 -1
  355. package/dist/charts/engine/three-d/sort.cjs +1 -1
  356. package/dist/charts/engine/three-d/sort.cjs.map +1 -1
  357. package/dist/charts/engine/three-d/sort.d.cts +18 -5
  358. package/dist/charts/engine/three-d/sort.d.ts +18 -5
  359. package/dist/charts/engine/three-d/sort.js +129 -43
  360. package/dist/charts/engine/three-d/sort.js.map +1 -1
  361. package/dist/charts/engine/three-d/types.d.cts +36 -0
  362. package/dist/charts/engine/three-d/types.d.ts +36 -0
  363. package/dist/charts/engine/three-d/webgl.cjs +1 -1
  364. package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
  365. package/dist/charts/engine/three-d/webgl.d.cts +9 -0
  366. package/dist/charts/engine/three-d/webgl.d.ts +9 -0
  367. package/dist/charts/engine/three-d/webgl.js +199 -74
  368. package/dist/charts/engine/three-d/webgl.js.map +1 -1
  369. package/dist/charts/engine/three-d/webgpu.cjs +1 -1
  370. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
  371. package/dist/charts/engine/three-d/webgpu.js +231 -94
  372. package/dist/charts/engine/three-d/webgpu.js.map +1 -1
  373. package/dist/charts/engine/trading/chart.cjs +1 -1
  374. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  375. package/dist/charts/engine/trading/chart.d.cts +10 -1
  376. package/dist/charts/engine/trading/chart.d.ts +10 -1
  377. package/dist/charts/engine/trading/chart.js +1677 -813
  378. package/dist/charts/engine/trading/chart.js.map +1 -1
  379. package/dist/charts/engine/trading/drawings.cjs +2 -1
  380. package/dist/charts/engine/trading/drawings.cjs.map +1 -1
  381. package/dist/charts/engine/trading/drawings.d.cts +53 -9
  382. package/dist/charts/engine/trading/drawings.d.ts +53 -9
  383. package/dist/charts/engine/trading/drawings.js +346 -71
  384. package/dist/charts/engine/trading/drawings.js.map +1 -1
  385. package/dist/charts/engine/trading/format.cjs +1 -1
  386. package/dist/charts/engine/trading/format.cjs.map +1 -1
  387. package/dist/charts/engine/trading/format.d.cts +19 -0
  388. package/dist/charts/engine/trading/format.d.ts +19 -0
  389. package/dist/charts/engine/trading/format.js +65 -21
  390. package/dist/charts/engine/trading/format.js.map +1 -1
  391. package/dist/charts/engine/trading/geometry.cjs +1 -1
  392. package/dist/charts/engine/trading/geometry.cjs.map +1 -1
  393. package/dist/charts/engine/trading/geometry.d.cts +16 -0
  394. package/dist/charts/engine/trading/geometry.d.ts +16 -0
  395. package/dist/charts/engine/trading/geometry.js +19 -4
  396. package/dist/charts/engine/trading/geometry.js.map +1 -1
  397. package/dist/charts/engine/trading/index.cjs +1 -1
  398. package/dist/charts/engine/trading/index.d.cts +2 -1
  399. package/dist/charts/engine/trading/index.d.ts +2 -1
  400. package/dist/charts/engine/trading/index.js +4 -3
  401. package/dist/charts/engine/trading/indicators.cjs +1 -1
  402. package/dist/charts/engine/trading/indicators.cjs.map +1 -1
  403. package/dist/charts/engine/trading/indicators.d.cts +180 -10
  404. package/dist/charts/engine/trading/indicators.d.ts +180 -10
  405. package/dist/charts/engine/trading/indicators.js +449 -173
  406. package/dist/charts/engine/trading/indicators.js.map +1 -1
  407. package/dist/charts/engine/trading/labels.cjs +1 -1
  408. package/dist/charts/engine/trading/labels.cjs.map +1 -1
  409. package/dist/charts/engine/trading/labels.js +104 -4
  410. package/dist/charts/engine/trading/labels.js.map +1 -1
  411. package/dist/charts/engine/trading/store.cjs +1 -1
  412. package/dist/charts/engine/trading/store.cjs.map +1 -1
  413. package/dist/charts/engine/trading/store.d.cts +21 -0
  414. package/dist/charts/engine/trading/store.d.ts +21 -0
  415. package/dist/charts/engine/trading/store.js +22 -1
  416. package/dist/charts/engine/trading/store.js.map +1 -1
  417. package/dist/charts/engine/trading/studies.cjs +1 -1
  418. package/dist/charts/engine/trading/studies.cjs.map +1 -1
  419. package/dist/charts/engine/trading/studies.d.cts +49 -8
  420. package/dist/charts/engine/trading/studies.d.ts +49 -8
  421. package/dist/charts/engine/trading/studies.js +352 -93
  422. package/dist/charts/engine/trading/studies.js.map +1 -1
  423. package/dist/charts/engine/trading/sync.cjs +2 -0
  424. package/dist/charts/engine/trading/sync.cjs.map +1 -0
  425. package/dist/charts/engine/trading/sync.d.cts +8 -0
  426. package/dist/charts/engine/trading/sync.d.ts +8 -0
  427. package/dist/charts/engine/trading/sync.js +25 -0
  428. package/dist/charts/engine/trading/sync.js.map +1 -0
  429. package/dist/charts/engine/trading/types.d.cts +514 -16
  430. package/dist/charts/engine/trading/types.d.ts +514 -16
  431. package/dist/charts/engine/types.d.cts +106 -11
  432. package/dist/charts/engine/types.d.ts +106 -11
  433. package/dist/charts/index.cjs +1 -1
  434. package/dist/charts/index.d.cts +3 -2
  435. package/dist/charts/index.d.ts +3 -2
  436. package/dist/charts/index.js +30 -22
  437. package/dist/charts/react/charts.cjs +1 -1
  438. package/dist/charts/react/charts.cjs.map +1 -1
  439. package/dist/charts/react/charts.js +51 -34
  440. package/dist/charts/react/charts.js.map +1 -1
  441. package/dist/charts/react/graph.cjs +2 -0
  442. package/dist/charts/react/graph.cjs.map +1 -0
  443. package/dist/charts/react/graph.d.cts +219 -0
  444. package/dist/charts/react/graph.d.ts +219 -0
  445. package/dist/charts/react/graph.js +160 -0
  446. package/dist/charts/react/graph.js.map +1 -0
  447. package/dist/charts/react/orderbook.cjs +1 -1
  448. package/dist/charts/react/orderbook.cjs.map +1 -1
  449. package/dist/charts/react/orderbook.d.cts +3 -1
  450. package/dist/charts/react/orderbook.d.ts +3 -1
  451. package/dist/charts/react/orderbook.js +1 -0
  452. package/dist/charts/react/orderbook.js.map +1 -1
  453. package/dist/charts/react/shapes.cjs +1 -1
  454. package/dist/charts/react/shapes.cjs.map +1 -1
  455. package/dist/charts/react/shapes.d.cts +88 -4
  456. package/dist/charts/react/shapes.d.ts +88 -4
  457. package/dist/charts/react/shapes.js +55 -12
  458. package/dist/charts/react/shapes.js.map +1 -1
  459. package/dist/charts/react/three-d.cjs +1 -1
  460. package/dist/charts/react/three-d.cjs.map +1 -1
  461. package/dist/charts/react/three-d.d.cts +7 -0
  462. package/dist/charts/react/three-d.d.ts +7 -0
  463. package/dist/charts/react/three-d.js +14 -13
  464. package/dist/charts/react/three-d.js.map +1 -1
  465. package/dist/charts/react/trading.cjs +1 -1
  466. package/dist/charts/react/trading.cjs.map +1 -1
  467. package/dist/charts/react/trading.d.cts +54 -2
  468. package/dist/charts/react/trading.d.ts +54 -2
  469. package/dist/charts/react/trading.js +68 -37
  470. package/dist/charts/react/trading.js.map +1 -1
  471. package/dist/charts/react/types.d.cts +11 -0
  472. package/dist/charts/react/types.d.ts +11 -0
  473. package/dist/core/contracts.cjs +1 -1
  474. package/dist/core/contracts.cjs.map +1 -1
  475. package/dist/core/contracts.js +1 -1
  476. package/dist/core/contracts.js.map +1 -1
  477. package/dist/native/charts/src/canvas.cjs +1 -1
  478. package/dist/native/charts/src/canvas.js +5 -4
  479. package/dist/native/charts/src/engine/axis.cjs +1 -1
  480. package/dist/native/charts/src/engine/axis.cjs.map +1 -1
  481. package/dist/native/charts/src/engine/axis.js +42 -19
  482. package/dist/native/charts/src/engine/axis.js.map +1 -1
  483. package/dist/native/charts/src/engine/color.cjs +1 -1
  484. package/dist/native/charts/src/engine/color.cjs.map +1 -1
  485. package/dist/native/charts/src/engine/color.js +47 -5
  486. package/dist/native/charts/src/engine/color.js.map +1 -1
  487. package/dist/native/charts/src/engine/controller.cjs +2 -2
  488. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  489. package/dist/native/charts/src/engine/controller.js +296 -251
  490. package/dist/native/charts/src/engine/controller.js.map +1 -1
  491. package/dist/native/charts/src/engine/data.cjs +1 -1
  492. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  493. package/dist/native/charts/src/engine/data.js +6 -4
  494. package/dist/native/charts/src/engine/data.js.map +1 -1
  495. package/dist/native/charts/src/engine/format.cjs +1 -1
  496. package/dist/native/charts/src/engine/format.cjs.map +1 -1
  497. package/dist/native/charts/src/engine/format.js +15 -2
  498. package/dist/native/charts/src/engine/format.js.map +1 -1
  499. package/dist/native/charts/src/engine/labels.cjs +1 -1
  500. package/dist/native/charts/src/engine/labels.cjs.map +1 -1
  501. package/dist/native/charts/src/engine/labels.js +42 -5
  502. package/dist/native/charts/src/engine/labels.js.map +1 -1
  503. package/dist/native/charts/src/engine/layout.cjs +1 -1
  504. package/dist/native/charts/src/engine/layout.cjs.map +1 -1
  505. package/dist/native/charts/src/engine/layout.js +11 -2
  506. package/dist/native/charts/src/engine/layout.js.map +1 -1
  507. package/dist/native/charts/src/engine/model.cjs +1 -1
  508. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  509. package/dist/native/charts/src/engine/model.js +278 -174
  510. package/dist/native/charts/src/engine/model.js.map +1 -1
  511. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  512. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  513. package/dist/native/charts/src/engine/presets.cjs +2 -2
  514. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  515. package/dist/native/charts/src/engine/presets.js +110 -90
  516. package/dist/native/charts/src/engine/presets.js.map +1 -1
  517. package/dist/native/charts/src/engine/scene.cjs +1 -1
  518. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  519. package/dist/native/charts/src/engine/scene.js +421 -202
  520. package/dist/native/charts/src/engine/scene.js.map +1 -1
  521. package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
  522. package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
  523. package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
  524. package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
  525. package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
  526. package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
  527. package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
  528. package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
  529. package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
  530. package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
  531. package/dist/native/charts/src/engine/shapes/chord.js +419 -0
  532. package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
  533. package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
  534. package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
  535. package/dist/native/charts/src/engine/shapes/draw.js +47 -17
  536. package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
  537. package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
  538. package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
  539. package/dist/native/charts/src/engine/shapes/hit.js +73 -44
  540. package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
  541. package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
  542. package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
  543. package/dist/native/charts/src/engine/shapes/labels.js +12 -4
  544. package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
  545. package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
  546. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
  547. package/dist/native/charts/src/engine/shapes/layout.js +136 -94
  548. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
  549. package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
  550. package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
  551. package/dist/native/charts/src/engine/shapes/scene.js +62 -19
  552. package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
  553. package/dist/native/components/Chart/ChartBase.cjs +1 -1
  554. package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
  555. package/dist/native/components/Chart/ChartBase.js +127 -115
  556. package/dist/native/components/Chart/ChartBase.js.map +1 -1
  557. package/dist/native/components/Chart/charts.cjs +1 -1
  558. package/dist/native/components/Chart/charts.cjs.map +1 -1
  559. package/dist/native/components/Chart/charts.js +8 -5
  560. package/dist/native/components/Chart/charts.js.map +1 -1
  561. package/dist/native/components/Chart/scene.cjs +1 -1
  562. package/dist/native/components/Chart/scene.cjs.map +1 -1
  563. package/dist/native/components/Chart/scene.d.cts +6 -1
  564. package/dist/native/components/Chart/scene.d.ts +6 -1
  565. package/dist/native/components/Chart/scene.js +226 -108
  566. package/dist/native/components/Chart/scene.js.map +1 -1
  567. package/dist/native/components/Chart/types.d.cts +7 -1
  568. package/dist/native/components/Chart/types.d.ts +7 -1
  569. package/dist/native/components/Charts/charts.cjs +1 -1
  570. package/dist/native/components/Charts/charts.cjs.map +1 -1
  571. package/dist/native/components/Charts/charts.js +60 -43
  572. package/dist/native/components/Charts/charts.js.map +1 -1
  573. package/dist/native/components/Charts/types.d.cts +11 -0
  574. package/dist/native/components/Charts/types.d.ts +11 -0
  575. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
  576. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
  577. package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +1 -1
  578. package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +1 -1
  579. package/dist/native/components/ShapeChart/ShapeChartBase.js +97 -106
  580. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
  581. package/dist/native/components/ShapeChart/charts.cjs +1 -1
  582. package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
  583. package/dist/native/components/ShapeChart/charts.d.cts +6 -1
  584. package/dist/native/components/ShapeChart/charts.d.ts +6 -1
  585. package/dist/native/components/ShapeChart/charts.js +138 -96
  586. package/dist/native/components/ShapeChart/charts.js.map +1 -1
  587. package/dist/native/components/ShapeChart/draw.cjs +1 -1
  588. package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
  589. package/dist/native/components/ShapeChart/draw.d.cts +1 -1
  590. package/dist/native/components/ShapeChart/draw.d.ts +1 -1
  591. package/dist/native/components/ShapeChart/draw.js +26 -17
  592. package/dist/native/components/ShapeChart/draw.js.map +1 -1
  593. package/dist/native/components/ShapeChart/geometry.cjs +1 -1
  594. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
  595. package/dist/native/components/ShapeChart/geometry.js +233 -70
  596. package/dist/native/components/ShapeChart/geometry.js.map +1 -1
  597. package/dist/native/components/ShapeChart/index.cjs +1 -1
  598. package/dist/native/components/ShapeChart/index.d.cts +1 -1
  599. package/dist/native/components/ShapeChart/index.d.ts +1 -1
  600. package/dist/native/components/ShapeChart/index.js +2 -2
  601. package/dist/native/components/ShapeChart/recorder.cjs +1 -1
  602. package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
  603. package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
  604. package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
  605. package/dist/native/components/ShapeChart/recorder.js +19 -10
  606. package/dist/native/components/ShapeChart/recorder.js.map +1 -1
  607. package/dist/native/components/ShapeChart/types.d.cts +95 -8
  608. package/dist/native/components/ShapeChart/types.d.ts +95 -8
  609. package/dist/native/index.cjs +1 -1
  610. package/dist/native/index.js +2 -2
  611. package/dist/native/source/components/Chart/ChartBase.tsx +19 -6
  612. package/dist/native/source/components/Chart/charts.tsx +10 -3
  613. package/dist/native/source/components/Chart/scene.tsx +243 -14
  614. package/dist/native/source/components/Chart/types.ts +7 -0
  615. package/dist/native/source/components/Charts/charts.tsx +37 -2
  616. package/dist/native/source/components/Charts/types.ts +11 -0
  617. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +10 -34
  618. package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
  619. package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
  620. package/dist/native/source/components/ShapeChart/geometry.ts +376 -25
  621. package/dist/native/source/components/ShapeChart/index.ts +1 -0
  622. package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
  623. package/dist/native/source/components/ShapeChart/types.ts +99 -6
  624. package/dist/native/source/manifest.ts +1 -0
  625. package/dist/taro/chart-a11y.d.ts +7 -0
  626. package/dist/taro/charts.d.ts +29 -6
  627. package/dist/taro/index.js +3129 -1902
  628. package/dist/taro/shape-charts.d.ts +99 -5
  629. package/dist/uni/AreaChart.vue +2 -1
  630. package/dist/uni/AreaChart.vue.d.ts +5 -1
  631. package/dist/uni/Badge.vue.d.ts +1 -1
  632. package/dist/uni/BarChart.vue +2 -1
  633. package/dist/uni/BarChart.vue.d.ts +5 -1
  634. package/dist/uni/BoxPlotChart.vue +2 -1
  635. package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
  636. package/dist/uni/BubbleChart.vue +2 -1
  637. package/dist/uni/BubbleChart.vue.d.ts +4 -0
  638. package/dist/uni/BulletChart.vue.d.ts +4 -0
  639. package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
  640. package/dist/uni/CandlestickChart.vue +2 -1
  641. package/dist/uni/CandlestickChart.vue.d.ts +4 -0
  642. package/dist/uni/Chart.vue +2 -1
  643. package/dist/uni/Chart.vue.d.ts +4 -0
  644. package/dist/uni/ChordChart.vue +93 -0
  645. package/dist/uni/ChordChart.vue.d.ts +136 -0
  646. package/dist/uni/Divider.vue.d.ts +1 -1
  647. package/dist/uni/DonutChart.vue.d.ts +5 -1
  648. package/dist/uni/FunnelChart.vue.d.ts +4 -0
  649. package/dist/uni/GanttChart.vue +2 -1
  650. package/dist/uni/GanttChart.vue.d.ts +15 -0
  651. package/dist/uni/GaugeChart.vue.d.ts +5 -1
  652. package/dist/uni/HeatmapChart.vue +2 -1
  653. package/dist/uni/HeatmapChart.vue.d.ts +8 -2
  654. package/dist/uni/HistogramChart.vue +2 -1
  655. package/dist/uni/HistogramChart.vue.d.ts +4 -0
  656. package/dist/uni/HorizontalBarChart.vue +2 -1
  657. package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
  658. package/dist/uni/LineChart.vue +2 -1
  659. package/dist/uni/LineChart.vue.d.ts +4 -0
  660. package/dist/uni/MixedChart.vue +2 -1
  661. package/dist/uni/MixedChart.vue.d.ts +4 -0
  662. package/dist/uni/PieChart.vue.d.ts +5 -1
  663. package/dist/uni/QuadrantChart.vue +2 -1
  664. package/dist/uni/QuadrantChart.vue.d.ts +4 -0
  665. package/dist/uni/RadarChart.vue.d.ts +4 -0
  666. package/dist/uni/RadialBarChart.vue.d.ts +4 -0
  667. package/dist/uni/RangeAreaChart.vue +2 -1
  668. package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
  669. package/dist/uni/SankeyChart.vue.d.ts +4 -0
  670. package/dist/uni/ScatterChart.vue +2 -1
  671. package/dist/uni/ScatterChart.vue.d.ts +4 -0
  672. package/dist/uni/Sparkline.vue +2 -1
  673. package/dist/uni/Sparkline.vue.d.ts +4 -0
  674. package/dist/uni/SunburstChart.vue.d.ts +4 -0
  675. package/dist/uni/ToastProvider.vue.d.ts +1 -1
  676. package/dist/uni/TreemapChart.vue.d.ts +4 -0
  677. package/dist/uni/WaterfallChart.vue +2 -1
  678. package/dist/uni/WaterfallChart.vue.d.ts +9 -0
  679. package/dist/uni/chart-a11y.d.ts +7 -0
  680. package/dist/uni/chart-a11y.js +29 -0
  681. package/dist/uni/chart-canvas.d.ts +12 -0
  682. package/dist/uni/chart-canvas.js +15 -1
  683. package/dist/uni/chart-types.d.ts +36 -5
  684. package/dist/uni/chart-types.js +31 -3
  685. package/dist/uni/charts-canvas.js +3 -2
  686. package/dist/uni/index.d.ts +2 -1
  687. package/dist/uni/index.js +1 -0
  688. package/dist/uni/manifest.d.ts +7 -0
  689. package/dist/uni/manifest.js +10 -0
  690. package/dist/uni/named-chart-options.d.ts +11 -2
  691. package/dist/uni/named-chart-options.js +21 -1
  692. package/dist/uni/shape-chart-canvas.d.ts +3 -3
  693. package/dist/uni/shape-chart-canvas.js +17 -58
  694. package/dist/uni/shape-chart-types.d.ts +53 -3
  695. package/dist/uni/shape-chart-types.js +45 -1
  696. package/dist/vue/charts-global.d.ts +48 -0
  697. package/dist/vue/charts.d.ts +18 -0
  698. package/dist/vue/charts.js +56 -0
  699. package/dist/vue/charts.js.map +1 -0
  700. package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +2 -0
  701. package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
  702. package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
  703. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
  704. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  705. package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
  706. package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
  707. package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
  708. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
  709. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  710. package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +181 -0
  711. package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
  712. package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
  713. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
  714. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
  715. package/dist/vue/components/Chart/GanttChart.vue.d.ts +19 -0
  716. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
  717. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +12 -1
  718. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  719. package/dist/vue/components/Chart/GraphChart.vue.d.ts +186 -0
  720. package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
  721. package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
  722. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
  723. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  724. package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
  725. package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
  726. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
  727. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  728. package/dist/vue/components/Chart/Line3DChart.vue.d.ts +2 -0
  729. package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
  730. package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +2 -0
  731. package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +2 -0
  732. package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
  733. package/dist/vue/components/Chart/TradingChart.vue.d.ts +58 -1
  734. package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
  735. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
  736. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  737. package/dist/vue/components/Chart/TreeChart.vue.d.ts +174 -0
  738. package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
  739. package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
  740. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
  741. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  742. package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
  743. package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
  744. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
  745. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  746. package/dist/vue/components/Chart/graph.d.ts +156 -0
  747. package/dist/vue/components/Chart/graph.js +137 -0
  748. package/dist/vue/components/Chart/graph.js.map +1 -0
  749. package/dist/vue/components/Chart/index.d.ts +5 -1
  750. package/dist/vue/components/Chart/index.js +5 -1
  751. package/dist/vue/components/Chart/orderbook.d.ts +5 -1
  752. package/dist/vue/components/Chart/orderbook.js +2 -0
  753. package/dist/vue/components/Chart/orderbook.js.map +1 -1
  754. package/dist/vue/components/Chart/three-d.d.ts +3 -0
  755. package/dist/vue/components/Chart/three-d.js +2 -0
  756. package/dist/vue/components/Chart/three-d.js.map +1 -1
  757. package/dist/vue/components/Chart/trading.d.ts +30 -3
  758. package/dist/vue/components/Chart/trading.js +9 -0
  759. package/dist/vue/components/Chart/trading.js.map +1 -1
  760. package/dist/vue/components/Chart/types.d.ts +74 -2
  761. package/dist/vue/global.d.ts +2 -38
  762. package/dist/vue/groups/charts.js +10 -2
  763. package/dist/vue/groups/charts.js.map +1 -1
  764. package/dist/vue/index.js +6 -2
  765. package/dist/vue/internal/register.d.ts +7 -0
  766. package/dist/vue/internal/register.js +14 -0
  767. package/dist/vue/internal/register.js.map +1 -0
  768. package/dist/vue/plugin.d.ts +9 -4
  769. package/dist/vue/plugin.js +6 -11
  770. package/dist/vue/plugin.js.map +1 -1
  771. package/dist/weapp/area-chart/index.wxml +1 -1
  772. package/dist/weapp/bar-chart/index.wxml +1 -1
  773. package/dist/weapp/box-plot-chart/index.wxml +1 -1
  774. package/dist/weapp/bubble-chart/index.wxml +1 -1
  775. package/dist/weapp/candlestick-chart/index.wxml +1 -1
  776. package/dist/weapp/chart/index.wxml +1 -1
  777. package/dist/weapp/charts/canvas.js +1987 -175
  778. package/dist/weapp/charts/core.js +3 -0
  779. package/dist/weapp/chord-chart/index.js +1 -0
  780. package/dist/weapp/chord-chart/index.json +1 -0
  781. package/dist/weapp/chord-chart/index.wxml +1 -0
  782. package/dist/weapp/chord-chart/index.wxss +1 -0
  783. package/dist/weapp/controls.js +148 -57
  784. package/dist/weapp/gantt-chart/index.wxml +1 -1
  785. package/dist/weapp/heatmap-chart/index.wxml +1 -1
  786. package/dist/weapp/histogram-chart/index.wxml +1 -1
  787. package/dist/weapp/horizontal-bar-chart/index.wxml +1 -1
  788. package/dist/weapp/line-chart/index.wxml +1 -1
  789. package/dist/weapp/mixed-chart/index.wxml +1 -1
  790. package/dist/weapp/quadrant-chart/index.wxml +1 -1
  791. package/dist/weapp/range-area-chart/index.wxml +1 -1
  792. package/dist/weapp/scatter-chart/index.wxml +1 -1
  793. package/dist/weapp/sparkline/index.wxml +1 -1
  794. package/dist/weapp/types.d.ts +96 -4
  795. package/dist/weapp/waterfall-chart/index.wxml +1 -1
  796. package/dist/web-components/components/chart/charts.d.ts +4 -2
  797. package/dist/web-components/components/chart/charts.js +8 -1
  798. package/dist/web-components/components/chart/charts.js.map +1 -1
  799. package/dist/web-components/components/chart/extended.d.ts +21 -7
  800. package/dist/web-components/components/chart/extended.js +29 -9
  801. package/dist/web-components/components/chart/extended.js.map +1 -1
  802. package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
  803. package/dist/web-components/components/chart/shapes-extended.js +27 -1
  804. package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
  805. package/dist/web-components/components/chart-3d/chart-3d.d.ts +1 -1
  806. package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -1
  807. package/dist/web-components/components/graph/graph.d.ts +156 -0
  808. package/dist/web-components/components/graph/graph.js +150 -0
  809. package/dist/web-components/components/graph/graph.js.map +1 -0
  810. package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
  811. package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
  812. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
  813. package/dist/web-components/elements/chart.d.ts +1 -1
  814. package/dist/web-components/elements/chart.js +6 -5
  815. package/dist/web-components/elements/chart.js.map +1 -1
  816. package/dist/web-components/elements/graph.d.ts +2 -0
  817. package/dist/web-components/elements/graph.js +12 -0
  818. package/dist/web-components/elements/graph.js.map +1 -0
  819. package/dist/web-components/html-custom-data.json +318 -4
  820. package/dist/web-components/types/react.d.ts +63 -4
  821. package/dist/web-components/types/solid.d.ts +55 -8
  822. package/dist/web-components/types/svelte.d.ts +55 -8
  823. package/dist/web-components/types/vue.d.ts +55 -4
  824. package/package.json +16 -1
@@ -1,2 +1,3 @@
1
- var e=[0,.236,.382,.5,.618,.786,1],t=[`#787b86`,`#f23645`,`#ff9800`,`#4caf50`,`#089981`,`#2962ff`,`#787b86`],n=e=>e===`horizontalLine`||e===`verticalLine`?1:2,r=(e,t)=>e.points.map(e=>({x:t.x(t.index(e.time)),y:t.y(e.price)})),i=(e,t,n,r,i)=>{let a=n.x-t.x,o=n.y-t.y,s=a*a+o*o;if(s===0)return Math.hypot(e.x-t.x,e.y-t.y);let c=((e.x-t.x)*a+(e.y-t.y)*o)/s;return r||(c=Math.max(0,c)),i||(c=Math.min(1,c)),Math.hypot(e.x-(t.x+c*a),e.y-(t.y+c*o))},a=(t,n,a,o=6)=>{let s=r(t,n);for(let e=0;e<s.length;e++){let t=s[e];if(Math.hypot(t.x-a.x,t.y-a.y)<=o+2)return{part:`handle`,index:e}}let[c,l]=s;if(!c)return null;let u=e=>e<=o?{part:`body`}:null;switch(t.type){case`horizontalLine`:return u(Math.abs(a.y-c.y));case`verticalLine`:return u(Math.abs(a.x-c.x));case`trendLine`:return l?u(i(a,c,l,!1,!1)):null;case`ray`:return l?u(i(a,c,l,!1,!0)):null;case`extendedLine`:return l?u(i(a,c,l,!0,!0)):null;case`fibRetracement`:{if(!l)return null;let t=Math.min(c.x,l.x),n=Math.max(c.x,l.x);if(a.x<t-o||a.x>n+o)return null;for(let t of e){let e=l.y+(c.y-l.y)*t;if(Math.abs(a.y-e)<=o)return{part:`body`}}return null}default:{if(!l)return null;let e=Math.min(c.x,l.x)-o,t=Math.max(c.x,l.x)+o,n=Math.min(c.y,l.y)-o,r=Math.max(c.y,l.y)+o;return a.x>=e&&a.x<=t&&a.y>=n&&a.y<=r?{part:`body`}:null}}},o=(e,t,n)=>{t===`dashed`?e.setLineDash([6,4]):t===`dotted`?e.setLineDash([Math.max(1,n),3]):e.setLineDash([])},s=(e,t,n)=>{let r=t.x-e.x,i=t.y-e.y,a=Math.hypot(r,i);if(!a)return t;let o=(Math.abs(n.right-n.left)+Math.abs(n.bottom-n.top))*4;return{x:e.x+r/a*o,y:e.y+i/a*o}},c=(e,t,n,r,i,a)=>{e.beginPath(),typeof e.roundRect==`function`?e.roundRect(t,n,r,i,a):e.rect(t,n,r,i)},l=(e,t,n,i,a)=>{let c=r(t,n),[l,f]=c;if(!l)return;let p=(t.lineWidth??1.5)+(a.hovered?.5:0);e.save(),e.lineWidth=p,e.strokeStyle=i.color,e.fillStyle=i.color,e.font=i.font,o(e,t.lineStyle,p);let m=(t,n)=>{e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(n.x,n.y),e.stroke()};switch(t.type){case`horizontalLine`:m({x:n.left,y:l.y},{x:n.right,y:l.y});break;case`verticalLine`:m({x:l.x,y:n.top},{x:l.x,y:n.bottom});break;case`trendLine`:f&&m(l,f);break;case`ray`:f&&m(l,s(l,f,n));break;case`extendedLine`:f&&m(s(f,l,n),s(l,f,n));break;case`rectangle`:if(f){let t=Math.min(l.x,f.x),n=Math.min(l.y,f.y),r=Math.abs(f.x-l.x),i=Math.abs(f.y-l.y);e.globalAlpha=.12,e.fillRect(t,n,r,i),e.globalAlpha=1,e.strokeRect(t,n,r,i)}break;case`fibRetracement`:f&&u(e,t,l,f,i);break;case`measure`:f&&d(e,t,l,f,n,i)}if(a.selected||a.hovered){e.setLineDash([]),e.lineWidth=1.5;for(let t of c)e.beginPath(),e.arc(t.x,t.y,a.selected?4.5:3.5,0,Math.PI*2),e.fillStyle=i.background,e.fill(),e.strokeStyle=i.color,e.stroke()}e.restore()},u=(n,r,i,a,o)=>{let s=Math.min(i.x,a.x),c=Math.max(i.x,a.x),l=r.points[0]?.price??0,u=r.points[1]?.price??0,d=e.map(e=>a.y+(i.y-a.y)*e);for(let i=0;i+1<e.length;i++)n.globalAlpha=.08,n.fillStyle=r.color?o.color:t[i+1],n.fillRect(s,Math.min(d[i],d[i+1]),c-s,Math.abs(d[i+1]-d[i]));n.globalAlpha=1,n.textBaseline=`bottom`,n.textAlign=`left`,e.forEach((e,i)=>{let a=Math.round(d[i])+.5,f=r.color?o.color:t[i];n.strokeStyle=f,n.fillStyle=f,n.beginPath(),n.moveTo(s,a),n.lineTo(c,a),n.stroke();let p=u+(l-u)*e;n.fillText(`${e} (${o.formatPrice(p)})`,s+4,a-2)}),n.setLineDash([4,4]),n.strokeStyle=o.color,n.globalAlpha=.6,n.beginPath(),n.moveTo(i.x,i.y),n.lineTo(a.x,a.y),n.stroke(),n.globalAlpha=1},d=(e,t,n,r,i,a)=>{let[o,s]=t.points,l=s.price>=o.price,u=t.color?a.color:l?a.up:a.down,d=Math.min(n.x,r.x),f=Math.max(n.x,r.x),p=Math.min(n.y,r.y),m=Math.max(n.y,r.y);e.setLineDash([]),e.fillStyle=u,e.globalAlpha=.14,e.fillRect(d,p,f-d,m-p),e.globalAlpha=1,e.strokeStyle=u,e.lineWidth=1;let h=Math.round((d+f)/2)+.5,g=Math.round((p+m)/2)+.5,_=(t,n)=>{e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(n.x,n.y),e.stroke();let r=Math.atan2(n.y-t.y,n.x-t.x);e.beginPath(),e.moveTo(n.x,n.y),e.lineTo(n.x-6*Math.cos(r-.5),n.y-6*Math.sin(r-.5)),e.lineTo(n.x-6*Math.cos(r+.5),n.y-6*Math.sin(r+.5)),e.closePath(),e.fill()};m-p>10&&_({x:h,y:l?m:p},{x:h,y:l?p:m}),f-d>10&&_({x:n.x<r.x?d:f,y:g},{x:n.x<r.x?f:d,y:g});let v=s.price-o.price,y=o.price?v/o.price*100:NaN,b=Math.round(i.index(s.time)-i.index(o.time)),x=[`${v>=0?`+`:`−`}${a.formatPrice(Math.abs(v))} (${a.formatPercent(y)})`,a.formatSpan(b,s.time-o.time)],S=x.map(t=>e.measureText(t).width),C=Math.max(...S)+16,w=(d+f)/2-C/2,T=l?p-38-6:m+6;c(e,w,T,C,38,4),e.fillStyle=u,e.fill(),e.fillStyle=a.textOn(u),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(x[0],w+C/2,T+11),e.fillText(x[1],w+C/2,T+27)};exports.FIB_LEVELS=e,exports.anchorCount=n,exports.hitDrawing=a,exports.paintDrawing=l,exports.screenPoints=r,exports.setDash=o;
1
+ var e=[0,.236,.382,.5,.618,.786,1],t=[`#787b86`,`#f23645`,`#ff9800`,`#4caf50`,`#089981`,`#2962ff`,`#787b86`],n=e=>{switch(e){case`horizontalLine`:case`verticalLine`:case`text`:case`longPosition`:case`shortPosition`:return 1;case`parallelChannel`:case`pitchfork`:return 3;default:return 2}},r=e=>e===`rectangle`||e===`parallelChannel`||e===`pitchfork`||e===`fibRetracement`||e===`text`,i=e=>e===`longPosition`||e===`shortPosition`,a=(e,t,n,r)=>{let i=e.points,a=i[0];if(!a||e.type===`verticalLine`)return[];if(e.type===`horizontalLine`)return Number.isFinite(a.price)?[a.price]:[];let o=i.map(e=>t(e.time)),s=Math.min(...o),c=Math.max(...o);if((e.type===`ray`||e.type===`pitchfork`)&&(c=1/0),e.type===`extendedLine`&&(s=-1/0,c=1/0),c<n||s>r)return[];let l=i.map(e=>e.price),u=i[1],d=i[2];if(e.type===`parallelChannel`&&u&&d){let e=o[0]??0,t=(o[1]??0)-e,n=t?((o[2]??0)-e)/t:0,r=d.price-(a.price+n*(u.price-a.price));l.push(a.price+r,u.price+r)}return l.filter(Number.isFinite)},o=(e,t)=>e.points.map(e=>({x:t.x(t.index(e.time)),y:t.y(e.price)})),s=(e,t,n)=>{let r=t.x-e.x,i=r?(n.x-e.x)/r:0,a=n.y-(e.y+i*(t.y-e.y));return{base:[e,t],parallel:[{x:e.x,y:e.y+a},{x:t.x,y:t.y+a}]}},c=(e,t,n)=>{let r={x:(t.x+n.x)/2,y:(t.y+n.y)/2},i={x:r.x-e.x,y:r.y-e.y};return{median:[e,r],upper:[t,{x:t.x+i.x,y:t.y+i.y}],lower:[n,{x:n.x+i.x,y:n.y+i.y}]}},l=e=>{let[t,n,r]=e;return!t||!n||!r?null:{x0:Math.min(t.x,n.x),x1:Math.max(t.x,n.x),entry:t.y,target:n.y,stop:r.y}},u=(e,t,n)=>{let r=o(e,t);if(i(e.type)){let e=l(r),t=r[0];if(!e||!t)return r.slice(0,1);let n=r[1]?r[1].x:t.x;return[{x:t.x,y:e.entry},{x:t.x,y:e.target},{x:t.x,y:e.stop},{x:n,y:e.entry}]}if(e.type===`parallelChannel`){let[e,t,n]=r;if(!e||!t||!n)return r;let{parallel:i}=s(e,t,n);return[e,t,{x:(i[0].x+i[1].x)/2,y:(i[0].y+i[1].y)/2}]}return e.type===`text`&&n&&r[0]?[r[0]]:r},d=(e,t,n)=>{let r=[...e.points];if(i(e.type)){let[e,i,a]=r;if(!e||!i||!a)return r;switch(t){case 0:return[n,i,a];case 1:return[e,{...i,price:n.price},a];case 2:return[e,i,{...a,price:n.price}];default:return[e,{...i,time:n.time},{...a,time:n.time}]}}return t>=0&&t<r.length&&(r[t]=n),r},f=(e,t,n,r,i)=>{let a=n.x-t.x,o=n.y-t.y,s=a*a+o*o;if(s===0)return Math.hypot(e.x-t.x,e.y-t.y);let c=((e.x-t.x)*a+(e.y-t.y)*o)/s;return r||(c=Math.max(0,c)),i||(c=Math.min(1,c)),Math.hypot(e.x-(t.x+c*a),e.y-(t.y+c*o))},p=(e,t)=>{let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r++){let a=t[r],o=t[i];a&&o&&a.y>e.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y||1e-9)+a.x&&(n=!n)}return n},m=(t,n,r,i=6,a)=>{let d=u(t,n,a);for(let e=0;e<d.length;e++){let t=d[e];if(t&&Math.hypot(t.x-r.x,t.y-r.y)<=i+2)return{part:`handle`,index:e}}let m=o(t,n),[h,g,_]=m;if(!h)return null;let v=e=>e<=i?{part:`body`}:null,y=(e,t,n,a)=>r.x>=Math.min(e,n)-i&&r.x<=Math.max(e,n)+i&&r.y>=Math.min(t,a)-i&&r.y<=Math.max(t,a)+i;switch(t.type){case`horizontalLine`:return v(Math.abs(r.y-h.y));case`verticalLine`:return v(Math.abs(r.x-h.x));case`trendLine`:case`arrow`:return g?v(f(r,h,g,!1,!1)):null;case`ray`:return g?v(f(r,h,g,!1,!0)):null;case`extendedLine`:return g?v(f(r,h,g,!0,!0)):null;case`text`:{let e=a??{x:h.x,y:h.y,w:40,h:22};return y(e.x,e.y,e.x+e.w,e.y+e.h)?{part:`body`}:null}case`parallelChannel`:{if(!g||!_)return null;let{parallel:e}=s(h,g,_);return p(r,[h,g,e[1],e[0]])?{part:`body`}:v(Math.min(f(r,h,g,!1,!1),f(r,e[0],e[1],!1,!1)))}case`pitchfork`:{if(!g||!_)return null;let e=c(h,g,_);return v(Math.min(f(r,e.median[0],e.median[1],!1,!0),f(r,e.upper[0],e.upper[1],!1,!0),f(r,e.lower[0],e.lower[1],!1,!0),f(r,g,_,!1,!1)))}case`longPosition`:case`shortPosition`:{let e=l(m);if(!e)return null;let t=Math.min(e.target,e.stop),n=Math.max(e.target,e.stop);return y(e.x0,t,e.x1,n)?{part:`body`}:null}case`fibRetracement`:{if(!g)return null;let t=Math.min(h.x,g.x),n=Math.max(h.x,g.x);if(r.x<t-i||r.x>n+i)return null;for(let t of e){let e=g.y+(h.y-g.y)*t;if(Math.abs(r.y-e)<=i)return{part:`body`}}return null}default:return g&&y(h.x,h.y,g.x,g.y)?{part:`body`}:null}},h=(e,t,n)=>{t===`dashed`?e.setLineDash([6,4]):t===`dotted`?e.setLineDash([Math.max(1,n),3]):e.setLineDash([])},g=(e,t,n)=>{let r=t.x-e.x,i=t.y-e.y,a=Math.hypot(r,i);if(!a)return t;let o=(Math.abs(n.right-n.left)+Math.abs(n.bottom-n.top))*4;return{x:e.x+r/a*o,y:e.y+i/a*o}},_=(e,t,n,r,i,a)=>{e.beginPath(),typeof e.roundRect==`function`?e.roundRect(t,n,r,i,a):e.rect(t,n,r,i)},v=(e,t,n,r,i)=>{let a=o(t,n),[l,d,f]=a;if(!l)return null;let p=(t.lineWidth??1.5)+(i.hovered?.5:0),m=t.fill!==!1,_=null;e.save(),e.lineWidth=p,e.strokeStyle=r.color,e.fillStyle=r.color,e.font=r.font,e.lineCap=`round`,h(e,t.lineStyle,p);let v=(t,n)=>{e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(n.x,n.y),e.stroke()},w=(t,n=.1)=>{m&&(e.save(),e.globalAlpha=n,e.beginPath(),t.forEach((t,n)=>n?e.lineTo(t.x,t.y):e.moveTo(t.x,t.y)),e.closePath(),e.fill(),e.restore())};switch(t.type){case`horizontalLine`:v({x:n.left,y:l.y},{x:n.right,y:l.y});break;case`verticalLine`:v({x:l.x,y:n.top},{x:l.x,y:n.bottom});break;case`trendLine`:d&&v(l,d);break;case`arrow`:d&&y(e,l,d,p);break;case`ray`:d&&v(l,g(l,d,n));break;case`extendedLine`:d&&v(g(d,l,n),g(l,d,n));break;case`rectangle`:if(d){let t=Math.min(l.x,d.x),n=Math.min(l.y,d.y);w([{x:t,y:n},{x:t+Math.abs(d.x-l.x),y:n},{x:t+Math.abs(d.x-l.x),y:n+Math.abs(d.y-l.y)},{x:t,y:n+Math.abs(d.y-l.y)}]),e.strokeRect(t,n,Math.abs(d.x-l.x),Math.abs(d.y-l.y))}break;case`parallelChannel`:if(d&&f){let{parallel:t}=s(l,d,f);w([l,d,t[1],t[0]]),v(l,d),v(t[0],t[1]),e.save(),e.globalAlpha=.55,e.setLineDash([4,4]),v({x:l.x,y:(l.y+t[0].y)/2},{x:d.x,y:(d.y+t[1].y)/2}),e.restore()}else d&&v(l,d);break;case`pitchfork`:if(d&&f){let t=c(l,d,f),r=e=>g(e[0],e[1],n);w([d,r(t.upper),r(t.lower),f],.07),v(t.median[0],r(t.median)),v(d,r(t.upper)),v(f,r(t.lower)),e.save(),e.globalAlpha=.55,e.setLineDash([4,4]),v(d,f),e.restore()}else d&&v(l,d);break;case`fibRetracement`:d&&S(e,t,l,d,r,m,n);break;case`measure`:d&&C(e,t,l,d,n,r);break;case`text`:_=b(e,t,l,r,m);break;case`longPosition`:case`shortPosition`:x(e,t,a,n,r)}if(i.selected||i.hovered){e.setLineDash([]),e.lineWidth=1.5;for(let a of u(t,n,_??void 0))e.beginPath(),e.arc(a.x,a.y,i.selected?4.5:3.5,0,Math.PI*2),e.fillStyle=r.background,e.fill(),e.strokeStyle=r.color,e.stroke()}return e.restore(),_},y=(e,t,n,r)=>{let i=Math.atan2(n.y-t.y,n.x-t.x),a=8+r*2,o=Math.hypot(n.x-t.x,n.y-t.y),s=o>a?(o-a*.6)/o:0;e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(t.x+(n.x-t.x)*s,t.y+(n.y-t.y)*s),e.stroke(),e.setLineDash([]),e.beginPath(),e.moveTo(n.x,n.y),e.lineTo(n.x-a*Math.cos(i-.42),n.y-a*Math.sin(i-.42)),e.lineTo(n.x-a*Math.cos(i+.42),n.y-a*Math.sin(i+.42)),e.closePath(),e.fill()},b=(e,t,n,r,i)=>{let a=t.fontSize??13,o=(t.text||r.defaultText).split(`
2
+ `);e.font=`500 ${a}px ${r.fontFamily}`;let s=Math.round(a*1.35),c=i?22:10,l=Math.max(...o.map(t=>e.measureText(t).width))+c+8,u=o.length*s+10,d={x:n.x,y:n.y,w:l,h:u};return e.setLineDash([]),i&&(_(e,n.x+.5,n.y+.5,l-1,u-1,5),e.globalAlpha=.94,e.fillStyle=r.background,e.fill(),e.globalAlpha=.1,e.fillStyle=r.color,e.fill(),e.globalAlpha=.55,e.lineWidth=1,e.strokeStyle=r.color,e.stroke(),e.globalAlpha=1,e.fillStyle=r.color,e.beginPath(),e.arc(n.x+11,n.y+5+s/2,3.5,0,Math.PI*2),e.fill()),e.fillStyle=i?r.text:r.color,e.textAlign=`left`,e.textBaseline=`middle`,o.forEach((t,r)=>e.fillText(t,n.x+c,n.y+5+s*(r+.5))),d},x=(e,t,n,r,i)=>{let a=l(n),[o,s,c]=t.points;if(!a||!o||!s||!c)return;let u=t.type===`longPosition`,d=Math.max(1,a.x1-a.x0);e.setLineDash([]);for(let[t,n]of[[a.target,i.up],[a.stop,i.down]])e.globalAlpha=.16,e.fillStyle=n,e.fillRect(a.x0,Math.min(t,a.entry),d,Math.abs(t-a.entry)),e.globalAlpha=.7,e.strokeStyle=n,e.lineWidth=1,e.beginPath(),e.moveTo(a.x0,Math.round(t)+.5),e.lineTo(a.x1,Math.round(t)+.5),e.stroke();e.globalAlpha=1,e.strokeStyle=i.text,e.lineWidth=1,e.beginPath(),e.moveTo(a.x0,Math.round(a.entry)+.5),e.lineTo(a.x1,Math.round(a.entry)+.5),e.stroke();let f=u?1:-1,p=e=>i.formatPercent((e-o.price)/o.price*100),m=Math.abs(s.price-o.price),h=Math.abs(o.price-c.price),g=h>0?m/h:NaN,v=i.position,y=(t,n,o,s)=>{e.font=i.font;let c=e.measureText(t).width+14,l=Math.max(r.left+2,Math.min(a.x0+d/2-c/2,r.right-c-2)),u=s?n-24:n+4;_(e,l,u,c,20,4),e.fillStyle=o,e.fill(),e.fillStyle=i.textOn(o),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(t,l+c/2,u+10.5)},b=a.target<a.entry;y(i.fill(v.target,{price:i.formatPrice(s.price),change:p(s.price)}),a.target,i.up,b),y(i.fill(v.stop,{price:i.formatPrice(c.price),change:p(c.price)}),a.stop,i.down,!b);let x=[u?v.long:v.short,i.fill(v.riskReward,{ratio:Number.isFinite(g)?g.toFixed(2):`–`})];if(Number.isFinite(i.last)&&o.price){let e=(i.last-o.price)*f,n=i.formatPercent(e/o.price*100),r=t.quantity===void 0?n:`${e*t.quantity>=0?`+`:`−`}${i.formatPrice(Math.abs(e*t.quantity))} (${n})`;x.push(i.fill(v.profit,{value:r}))}e.font=i.font;let S=x.join(` · `),C=e.measureText(S).width+16,w=Math.max(r.left+2,Math.min(a.x0+d/2-C/2,r.right-C-2)),T=a.entry-10;_(e,w,T,C,20,4),e.fillStyle=i.text,e.fill(),e.fillStyle=i.background,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(S,w+C/2,T+10.5)},S=(n,r,i,a,o,s,c)=>{let l=Math.min(i.x,a.x),u=Math.max(i.x,a.x),d=Math.max(l,c.left)+4,f=r.points[0]?.price??0,p=r.points[1]?.price??0,m=e.map(e=>a.y+(i.y-a.y)*e);if(s)for(let i=0;i+1<e.length;i++)n.globalAlpha=.08,n.fillStyle=r.color?o.color:t[i+1]??o.color,n.fillRect(l,Math.min(m[i]??0,m[i+1]??0),u-l,Math.abs((m[i+1]??0)-(m[i]??0)));n.globalAlpha=1,n.textBaseline=`bottom`,n.textAlign=`left`,e.forEach((e,i)=>{let a=Math.round(m[i]??0)+.5,s=r.color?o.color:t[i]??o.color;n.strokeStyle=s,n.fillStyle=s,n.beginPath(),n.moveTo(l,a),n.lineTo(u,a),n.stroke();let c=p+(f-p)*e;n.fillText(`${e} (${o.formatPrice(c)})`,d,a-2)}),n.setLineDash([4,4]),n.strokeStyle=o.color,n.globalAlpha=.6,n.beginPath(),n.moveTo(i.x,i.y),n.lineTo(a.x,a.y),n.stroke(),n.globalAlpha=1},C=(e,t,n,r,i,a)=>{let[o,s]=t.points,c=s.price>=o.price,l=t.color?a.color:c?a.up:a.down,u=Math.min(n.x,r.x),d=Math.max(n.x,r.x),f=Math.min(n.y,r.y),p=Math.max(n.y,r.y);e.setLineDash([]),e.fillStyle=l,e.globalAlpha=.14,e.fillRect(u,f,d-u,p-f),e.globalAlpha=1,e.strokeStyle=l,e.lineWidth=1;let m=Math.round((u+d)/2)+.5,h=Math.round((f+p)/2)+.5,g=(t,n)=>{e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(n.x,n.y),e.stroke();let r=Math.atan2(n.y-t.y,n.x-t.x);e.beginPath(),e.moveTo(n.x,n.y),e.lineTo(n.x-6*Math.cos(r-.5),n.y-6*Math.sin(r-.5)),e.lineTo(n.x-6*Math.cos(r+.5),n.y-6*Math.sin(r+.5)),e.closePath(),e.fill()};p-f>10&&g({x:m,y:c?p:f},{x:m,y:c?f:p}),d-u>10&&g({x:n.x<r.x?u:d,y:h},{x:n.x<r.x?d:u,y:h});let v=s.price-o.price,y=o.price?v/o.price*100:NaN,b=Math.round(i.index(s.time)-i.index(o.time)),x=[`${v>=0?`+`:`−`}${a.formatPrice(Math.abs(v))} (${a.formatPercent(y)})`,a.formatSpan(b,s.time-o.time)],S=x.map(t=>e.measureText(t).width),C=Math.max(...S)+16,w=(u+d)/2-C/2,T=c?f-38-6:p+6;T<i.top+2&&(T=p+6),T+38>i.bottom-2&&(T=Math.max(i.top+2,f-38-6)),_(e,w,T,C,38,4),e.fillStyle=l,e.fill(),e.fillStyle=a.textOn(l),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(x[0]??``,w+C/2,T+11),e.fillText(x[1]??``,w+C/2,T+27)};exports.FIB_LEVELS=e,exports.anchorCount=n,exports.drawingPrices=a,exports.handlePoints=u,exports.hitDrawing=m,exports.isFillable=r,exports.isPosition=i,exports.moveHandle=d,exports.paintDrawing=v,exports.screenPoints=o,exports.setDash=h;
2
3
  //# sourceMappingURL=drawings.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"drawings.cjs","names":["FIB_LEVELS","FIB_COLORS","anchorCount","tool","screenPoints","drawing","m","p","distanceToSegment","dx","b","a","dy","len2","t","extendStart","extendEnd","hitDrawing","pts","i","q","tolerance","near","d","x0","x1","level","y","y0","y1","setDash","style","ctx","width","extend","len","k","roundRect","x","w","h","r","paintDrawing","state","c","line","paintFib","paintMeasure","p1","p2","ys","color","price","rising","midX","midY","arrow","from","to","angle","change","percent","bars","lines","widths","lx","ly"],"sources":["../../../../../charts/src/engine/trading/drawings.ts"],"sourcesContent":["// Drawings of the price pane: geometry in CSS pixels, hit tests and\n// Canvas2D painting. Anchors are stored as (time, price) so drawings stay\n// on their bars when the chart scrolls, zooms or receives new bars.\n\nimport type {\n TradingDrawing,\n TradingDrawingPoint,\n TradingDrawingTool,\n TradingLineStyle,\n} from \"./types\";\n\n/** Converts between anchors and the pixels of the price pane */\nexport interface DrawingMapper {\n /** x (CSS px) of a logical bar index */\n x(index: number): number;\n /** y (CSS px) of a price */\n y(price: number): number;\n /** Logical index of a time (extrapolated outside the bars) */\n index(time: number): number;\n /** Plot rectangle of the price pane */\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\n/** Fibonacci retracement levels */\nexport const FIB_LEVELS = [0, 0.236, 0.382, 0.5, 0.618, 0.786, 1];\nconst FIB_COLORS = [\n \"#787b86\",\n \"#f23645\",\n \"#ff9800\",\n \"#4caf50\",\n \"#089981\",\n \"#2962ff\",\n \"#787b86\",\n];\n\n/** Number of anchors of a tool */\nexport const anchorCount = (tool: Exclude<TradingDrawingTool, \"cursor\">) =>\n tool === \"horizontalLine\" || tool === \"verticalLine\" ? 1 : 2;\n\nexport const screenPoints = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n): Point[] =>\n drawing.points.map((p) => ({ x: m.x(m.index(p.time)), y: m.y(p.price) }));\n\nconst distanceToSegment = (\n p: Point,\n a: Point,\n b: Point,\n extendStart: boolean,\n extendEnd: boolean,\n) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len2 = dx * dx + dy * dy;\n if (len2 === 0) return Math.hypot(p.x - a.x, p.y - a.y);\n let t = ((p.x - a.x) * dx + (p.y - a.y) * dy) / len2;\n if (!extendStart) t = Math.max(0, t);\n if (!extendEnd) t = Math.min(1, t);\n return Math.hypot(p.x - (a.x + t * dx), p.y - (a.y + t * dy));\n};\n\n/** Part of a drawing under the pointer */\nexport type DrawingHit = { part: \"handle\"; index: number } | { part: \"body\" };\n\nexport const hitDrawing = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n p: Point,\n tolerance = 6,\n): DrawingHit | null => {\n const pts = screenPoints(drawing, m);\n for (let i = 0; i < pts.length; i++) {\n const q = pts[i];\n if (Math.hypot(q.x - p.x, q.y - p.y) <= tolerance + 2)\n return { part: \"handle\", index: i };\n }\n const [a, b] = pts;\n if (!a) return null;\n const near = (d: number) =>\n d <= tolerance ? { part: \"body\" as const } : null;\n switch (drawing.type) {\n case \"horizontalLine\":\n return near(Math.abs(p.y - a.y));\n case \"verticalLine\":\n return near(Math.abs(p.x - a.x));\n case \"trendLine\":\n return b ? near(distanceToSegment(p, a, b, false, false)) : null;\n case \"ray\":\n return b ? near(distanceToSegment(p, a, b, false, true)) : null;\n case \"extendedLine\":\n return b ? near(distanceToSegment(p, a, b, true, true)) : null;\n case \"fibRetracement\": {\n if (!b) return null;\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n if (p.x < x0 - tolerance || p.x > x1 + tolerance) return null;\n for (const level of FIB_LEVELS) {\n const y = b.y + (a.y - b.y) * level;\n if (Math.abs(p.y - y) <= tolerance) return { part: \"body\" };\n }\n return null;\n }\n default: {\n // rectangle, measure: inside or on the outline\n if (!b) return null;\n const x0 = Math.min(a.x, b.x) - tolerance;\n const x1 = Math.max(a.x, b.x) + tolerance;\n const y0 = Math.min(a.y, b.y) - tolerance;\n const y1 = Math.max(a.y, b.y) + tolerance;\n return p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1\n ? { part: \"body\" }\n : null;\n }\n }\n};\n\nexport const setDash = (\n ctx: CanvasRenderingContext2D,\n style: TradingLineStyle | undefined,\n width: number,\n) => {\n if (style === \"dashed\") ctx.setLineDash([6, 4]);\n else if (style === \"dotted\") ctx.setLineDash([Math.max(1, width), 3]);\n else ctx.setLineDash([]);\n};\n\n/** Values and helpers the painter needs from the chart */\nexport interface DrawingPaintContext {\n /** Resolved CSS color of a drawing */\n color: string;\n /** Text color on the plot */\n text: string;\n /** Background of the plot (handles) */\n background: string;\n /** Up / down colors (measure) */\n up: string;\n down: string;\n font: string;\n formatPrice(price: number): string;\n formatPercent(value: number): string;\n /** `\"24 bars, 2d 4h\"` */\n formatSpan(bars: number, ms: number): string;\n /** Readable text color on a fill */\n textOn(fill: string): string;\n}\n\n/** Point at the end of a line through `a` and `b`, far past the plot */\nconst extend = (a: Point, b: Point, m: DrawingMapper): Point => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n if (!len) return b;\n const k = (Math.abs(m.right - m.left) + Math.abs(m.bottom - m.top)) * 4;\n return { x: a.x + (dx / len) * k, y: a.y + (dy / len) * k };\n};\n\nconst 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/** Paints a drawing (the context is clipped to the price pane) */\nexport const paintDrawing = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n m: DrawingMapper,\n c: DrawingPaintContext,\n state: { selected: boolean; hovered: boolean },\n): void => {\n const pts = screenPoints(drawing, m);\n const [a, b] = pts;\n if (!a) return;\n const width = (drawing.lineWidth ?? 1.5) + (state.hovered ? 0.5 : 0);\n ctx.save();\n ctx.lineWidth = width;\n ctx.strokeStyle = c.color;\n ctx.fillStyle = c.color;\n ctx.font = c.font;\n setDash(ctx, drawing.lineStyle, width);\n const line = (p: Point, q: Point) => {\n ctx.beginPath();\n ctx.moveTo(p.x, p.y);\n ctx.lineTo(q.x, q.y);\n ctx.stroke();\n };\n switch (drawing.type) {\n case \"horizontalLine\":\n line({ x: m.left, y: a.y }, { x: m.right, y: a.y });\n break;\n case \"verticalLine\":\n line({ x: a.x, y: m.top }, { x: a.x, y: m.bottom });\n break;\n case \"trendLine\":\n if (b) line(a, b);\n break;\n case \"ray\":\n if (b) line(a, extend(a, b, m));\n break;\n case \"extendedLine\":\n if (b) line(extend(b, a, m), extend(a, b, m));\n break;\n case \"rectangle\":\n if (b) {\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n const w = Math.abs(b.x - a.x);\n const h = Math.abs(b.y - a.y);\n ctx.globalAlpha = 0.12;\n ctx.fillRect(x, y, w, h);\n ctx.globalAlpha = 1;\n ctx.strokeRect(x, y, w, h);\n }\n break;\n case \"fibRetracement\":\n if (b) paintFib(ctx, drawing, a, b, c);\n break;\n case \"measure\":\n if (b) paintMeasure(ctx, drawing, a, b, m, c);\n break;\n }\n if (state.selected || state.hovered) {\n ctx.setLineDash([]);\n ctx.lineWidth = 1.5;\n for (const p of pts) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, state.selected ? 4.5 : 3.5, 0, Math.PI * 2);\n ctx.fillStyle = c.background;\n ctx.fill();\n ctx.strokeStyle = c.color;\n ctx.stroke();\n }\n }\n ctx.restore();\n};\n\nconst paintFib = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n b: Point,\n c: DrawingPaintContext,\n) => {\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n const p1 = drawing.points[0]?.price ?? 0;\n const p2 = drawing.points[1]?.price ?? 0;\n const ys = FIB_LEVELS.map((level) => b.y + (a.y - b.y) * level);\n // bands between levels\n for (let i = 0; i + 1 < FIB_LEVELS.length; i++) {\n ctx.globalAlpha = 0.08;\n ctx.fillStyle = drawing.color ? c.color : FIB_COLORS[i + 1];\n ctx.fillRect(\n x0,\n Math.min(ys[i], ys[i + 1]),\n x1 - x0,\n Math.abs(ys[i + 1] - ys[i]),\n );\n }\n ctx.globalAlpha = 1;\n ctx.textBaseline = \"bottom\";\n ctx.textAlign = \"left\";\n FIB_LEVELS.forEach((level, i) => {\n const y = Math.round(ys[i]) + 0.5;\n const color = drawing.color ? c.color : FIB_COLORS[i];\n ctx.strokeStyle = color;\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(x0, y);\n ctx.lineTo(x1, y);\n ctx.stroke();\n const price = p2 + (p1 - p2) * level;\n ctx.fillText(`${level} (${c.formatPrice(price)})`, x0 + 4, y - 2);\n });\n // the trend line between the anchors\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = c.color;\n ctx.globalAlpha = 0.6;\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n};\n\nconst paintMeasure = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n b: Point,\n m: DrawingMapper,\n c: DrawingPaintContext,\n) => {\n const [p1, p2] = drawing.points as [TradingDrawingPoint, TradingDrawingPoint];\n const rising = p2.price >= p1.price;\n const color = drawing.color ? c.color : rising ? c.up : c.down;\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n const y0 = Math.min(a.y, b.y);\n const y1 = Math.max(a.y, b.y);\n ctx.setLineDash([]);\n ctx.fillStyle = color;\n ctx.globalAlpha = 0.14;\n ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n ctx.globalAlpha = 1;\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n // arrows across the box\n const midX = Math.round((x0 + x1) / 2) + 0.5;\n const midY = Math.round((y0 + y1) / 2) + 0.5;\n const arrow = (from: Point, to: Point) => {\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n ctx.stroke();\n const angle = Math.atan2(to.y - from.y, to.x - from.x);\n ctx.beginPath();\n ctx.moveTo(to.x, to.y);\n ctx.lineTo(\n to.x - 6 * Math.cos(angle - 0.5),\n to.y - 6 * Math.sin(angle - 0.5),\n );\n ctx.lineTo(\n to.x - 6 * Math.cos(angle + 0.5),\n to.y - 6 * Math.sin(angle + 0.5),\n );\n ctx.closePath();\n ctx.fill();\n };\n if (y1 - y0 > 10)\n arrow({ x: midX, y: rising ? y1 : y0 }, { x: midX, y: rising ? y0 : y1 });\n if (x1 - x0 > 10)\n arrow(\n { x: a.x < b.x ? x0 : x1, y: midY },\n { x: a.x < b.x ? x1 : x0, y: midY },\n );\n // label\n const change = p2.price - p1.price;\n const percent = p1.price ? (change / p1.price) * 100 : NaN;\n const bars = Math.round(m.index(p2.time) - m.index(p1.time));\n const lines = [\n `${change >= 0 ? \"+\" : \"−\"}${c.formatPrice(Math.abs(change))} (${c.formatPercent(percent)})`,\n c.formatSpan(bars, p2.time - p1.time),\n ];\n const widths = lines.map((t) => ctx.measureText(t).width);\n const w = Math.max(...widths) + 16;\n const h = 38;\n const lx = (x0 + x1) / 2 - w / 2;\n const below = !rising;\n const ly = below ? y1 + 6 : y0 - h - 6;\n roundRect(ctx, lx, ly, w, h, 4);\n ctx.fillStyle = color;\n ctx.fill();\n ctx.fillStyle = c.textOn(color);\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(lines[0], lx + w / 2, ly + 11);\n ctx.fillText(lines[1], lx + w / 2, ly + 27);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"drawings.cjs","names":["FIB_LEVELS","FIB_COLORS","anchorCount","tool","isFillable","type","isPosition","drawingPrices","pts","drawing","first","xs","index","p","lo","hi","from","to","prices","b","c","xa","dx","t","offset","screenPoints","m","channelLines","a","dy","pitchforkLines","mid","dir","positionGeometry","entry","target","stop","handlePoints","g","edge","parallel","box","moveHandle","points","point","distanceToSegment","len2","extendStart","extendEnd","inPolygon","inside","i","j","q","hitDrawing","handles","tolerance","near","d","inRect","x0","x1","y0","y1","r","lines","top","bottom","level","y","setDash","style","ctx","width","extend","len","k","roundRect","x","w","h","paintDrawing","third","state","filled","line","shade","alpha","paintArrow","far","paintFib","paintMeasure","paintText","paintPosition","angle","head","size","lineHeight","inset","long","color","change","price","reward","risk","ratio","texts","label","tw","text","above","fill","targetUp","parts","move","percent","value","center","labelX","p1","p2","ys","rising","midX","midY","arrow","bars","widths","lx","ly"],"sources":["../../../../../charts/src/engine/trading/drawings.ts"],"sourcesContent":["// Drawings: geometry in CSS pixels, handles, hit tests and Canvas2D\n// painting. Anchors are stored as (time, price) so drawings stay on their\n// bars when the chart scrolls, zooms or receives new bars; a drawing lives\n// in a pane (the price pane or an indicator pane) and uses its scale.\n\nimport type {\n TradingDrawing,\n TradingDrawingPoint,\n TradingDrawingTool,\n TradingLineStyle,\n} from \"./types\";\n\n/** Converts between anchors and the pixels of a pane */\nexport interface DrawingMapper {\n /** x (CSS px) of a logical bar index */\n x(index: number): number;\n /** y (CSS px) of a price */\n y(price: number): number;\n /** Logical index of a time (extrapolated outside the bars) */\n index(time: number): number;\n /** Plot rectangle of the pane */\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\n/** Rectangle in CSS pixels (text boxes, measured when painted) */\nexport interface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\ntype DrawingType = Exclude<TradingDrawingTool, \"cursor\">;\n\n/** Fibonacci retracement levels */\nexport const FIB_LEVELS = [0, 0.236, 0.382, 0.5, 0.618, 0.786, 1];\nconst FIB_COLORS = [\n \"#787b86\",\n \"#f23645\",\n \"#ff9800\",\n \"#4caf50\",\n \"#089981\",\n \"#2962ff\",\n \"#787b86\",\n];\n\n/** Clicks that create a drawing (positions get a default target and stop) */\nexport const anchorCount = (tool: DrawingType): number => {\n switch (tool) {\n case \"horizontalLine\":\n case \"verticalLine\":\n case \"text\":\n case \"longPosition\":\n case \"shortPosition\":\n return 1;\n case \"parallelChannel\":\n case \"pitchfork\":\n return 3;\n default:\n return 2;\n }\n};\n\n/** Drawings with an area that `fill` can turn off */\nexport const isFillable = (type: DrawingType): boolean =>\n type === \"rectangle\" ||\n type === \"parallelChannel\" ||\n type === \"pitchfork\" ||\n type === \"fibRetracement\" ||\n type === \"text\";\n\nexport const isPosition = (type: DrawingType): boolean =>\n type === \"longPosition\" || type === \"shortPosition\";\n\n/**\n * Prices a drawing spans when it overlaps the bars `[from, to]` (logical\n * indices), for `autoscaleIncludesDrawings`: its anchors and the parallel of\n * channels; horizontal lines always count, vertical lines never\n */\nexport const drawingPrices = (\n drawing: TradingDrawing,\n index: (time: number) => number,\n from: number,\n to: number,\n): number[] => {\n const pts = drawing.points;\n const first = pts[0];\n if (!first || drawing.type === \"verticalLine\") return [];\n if (drawing.type === \"horizontalLine\")\n return Number.isFinite(first.price) ? [first.price] : [];\n const xs = pts.map((p) => index(p.time));\n let lo = Math.min(...xs);\n let hi = Math.max(...xs);\n // lines extended past their anchors\n if (drawing.type === \"ray\" || drawing.type === \"pitchfork\") hi = Infinity;\n if (drawing.type === \"extendedLine\") {\n lo = -Infinity;\n hi = Infinity;\n }\n if (hi < from || lo > to) return [];\n const prices = pts.map((p) => p.price);\n const b = pts[1];\n const c = pts[2];\n if (drawing.type === \"parallelChannel\" && b && c) {\n const xa = xs[0] ?? 0;\n const dx = (xs[1] ?? 0) - xa;\n const t = dx ? ((xs[2] ?? 0) - xa) / dx : 0;\n const offset = c.price - (first.price + t * (b.price - first.price));\n prices.push(first.price + offset, b.price + offset);\n }\n return prices.filter(Number.isFinite);\n};\n\nexport const screenPoints = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n): Point[] =>\n drawing.points.map((p) => ({ x: m.x(m.index(p.time)), y: m.y(p.price) }));\n\n/** Lines of a parallel channel: the base line and the parallel through the third anchor */\nconst channelLines = (a: Point, b: Point, c: Point) => {\n const dx = b.x - a.x;\n const t = dx ? (c.x - a.x) / dx : 0;\n const dy = c.y - (a.y + t * (b.y - a.y));\n return {\n base: [a, b] as const,\n parallel: [\n { x: a.x, y: a.y + dy },\n { x: b.x, y: b.y + dy },\n ] as const,\n };\n};\n\n/** Median line of a pitchfork: from the pivot through the middle of the other anchors */\nconst pitchforkLines = (a: Point, b: Point, c: Point) => {\n const mid = { x: (b.x + c.x) / 2, y: (b.y + c.y) / 2 };\n const dir = { x: mid.x - a.x, y: mid.y - a.y };\n return {\n median: [a, mid] as const,\n upper: [b, { x: b.x + dir.x, y: b.y + dir.y }] as const,\n lower: [c, { x: c.x + dir.x, y: c.y + dir.y }] as const,\n };\n};\n\n/** Pixels of a position drawing: the box and its three prices */\nconst positionGeometry = (pts: Point[]) => {\n const [entry, target, stop] = pts;\n if (!entry || !target || !stop) return null;\n const x0 = Math.min(entry.x, target.x);\n const x1 = Math.max(entry.x, target.x);\n return { x0, x1, entry: entry.y, target: target.y, stop: stop.y };\n};\n\n/** Handles of a drawing, in the order `moveHandle` understands */\nexport const handlePoints = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n box?: Box,\n): Point[] => {\n const pts = screenPoints(drawing, m);\n if (isPosition(drawing.type)) {\n const g = positionGeometry(pts);\n const entry = pts[0];\n if (!g || !entry) return pts.slice(0, 1);\n const edge = pts[1] ? pts[1].x : entry.x;\n return [\n { x: entry.x, y: g.entry },\n { x: entry.x, y: g.target },\n { x: entry.x, y: g.stop },\n { x: edge, y: g.entry },\n ];\n }\n if (drawing.type === \"parallelChannel\") {\n const [a, b, c] = pts;\n if (!a || !b || !c) return pts;\n const { parallel } = channelLines(a, b, c);\n return [\n a,\n b,\n {\n x: (parallel[0].x + parallel[1].x) / 2,\n y: (parallel[0].y + parallel[1].y) / 2,\n },\n ];\n }\n if (drawing.type === \"text\" && box && pts[0]) return [pts[0]];\n return pts;\n};\n\n/** New anchors after dragging handle `index` to `point` */\nexport const moveHandle = (\n drawing: TradingDrawing,\n index: number,\n point: TradingDrawingPoint,\n): TradingDrawingPoint[] => {\n const points = [...drawing.points];\n if (isPosition(drawing.type)) {\n const [entry, target, stop] = points;\n if (!entry || !target || !stop) return points;\n switch (index) {\n case 0:\n return [point, target, stop];\n case 1:\n return [entry, { ...target, price: point.price }, stop];\n case 2:\n return [entry, target, { ...stop, price: point.price }];\n default:\n return [\n entry,\n { ...target, time: point.time },\n { ...stop, time: point.time },\n ];\n }\n }\n if (index >= 0 && index < points.length) points[index] = point;\n return points;\n};\n\nconst distanceToSegment = (\n p: Point,\n a: Point,\n b: Point,\n extendStart: boolean,\n extendEnd: boolean,\n) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len2 = dx * dx + dy * dy;\n if (len2 === 0) return Math.hypot(p.x - a.x, p.y - a.y);\n let t = ((p.x - a.x) * dx + (p.y - a.y) * dy) / len2;\n if (!extendStart) t = Math.max(0, t);\n if (!extendEnd) t = Math.min(1, t);\n return Math.hypot(p.x - (a.x + t * dx), p.y - (a.y + t * dy));\n};\n\n/** Whether `p` is inside the quadrilateral `q` (convex or not, even-odd rule) */\nconst inPolygon = (p: Point, q: readonly Point[]) => {\n let inside = false;\n for (let i = 0, j = q.length - 1; i < q.length; j = i++) {\n const a = q[i];\n const b = q[j];\n if (!a || !b) continue;\n if (\n a.y > p.y !== b.y > p.y &&\n p.x < ((b.x - a.x) * (p.y - a.y)) / (b.y - a.y || 1e-9) + a.x\n )\n inside = !inside;\n }\n return inside;\n};\n\n/** Part of a drawing under the pointer */\nexport type DrawingHit = { part: \"handle\"; index: number } | { part: \"body\" };\n\nexport const hitDrawing = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n p: Point,\n tolerance = 6,\n box?: Box,\n): DrawingHit | null => {\n const handles = handlePoints(drawing, m, box);\n for (let i = 0; i < handles.length; i++) {\n const q = handles[i];\n if (q && Math.hypot(q.x - p.x, q.y - p.y) <= tolerance + 2)\n return { part: \"handle\", index: i };\n }\n const pts = screenPoints(drawing, m);\n const [a, b, c] = pts;\n if (!a) return null;\n const near = (d: number) =>\n d <= tolerance ? { part: \"body\" as const } : null;\n const inRect = (x0: number, y0: number, x1: number, y1: number) =>\n p.x >= Math.min(x0, x1) - tolerance &&\n p.x <= Math.max(x0, x1) + tolerance &&\n p.y >= Math.min(y0, y1) - tolerance &&\n p.y <= Math.max(y0, y1) + tolerance;\n switch (drawing.type) {\n case \"horizontalLine\":\n return near(Math.abs(p.y - a.y));\n case \"verticalLine\":\n return near(Math.abs(p.x - a.x));\n case \"trendLine\":\n case \"arrow\":\n return b ? near(distanceToSegment(p, a, b, false, false)) : null;\n case \"ray\":\n return b ? near(distanceToSegment(p, a, b, false, true)) : null;\n case \"extendedLine\":\n return b ? near(distanceToSegment(p, a, b, true, true)) : null;\n case \"text\": {\n const r = box ?? { x: a.x, y: a.y, w: 40, h: 22 };\n return inRect(r.x, r.y, r.x + r.w, r.y + r.h) ? { part: \"body\" } : null;\n }\n case \"parallelChannel\": {\n if (!b || !c) return null;\n const { parallel } = channelLines(a, b, c);\n if (inPolygon(p, [a, b, parallel[1], parallel[0]]))\n return { part: \"body\" };\n return near(\n Math.min(\n distanceToSegment(p, a, b, false, false),\n distanceToSegment(p, parallel[0], parallel[1], false, false),\n ),\n );\n }\n case \"pitchfork\": {\n if (!b || !c) return null;\n const lines = pitchforkLines(a, b, c);\n return near(\n Math.min(\n distanceToSegment(p, lines.median[0], lines.median[1], false, true),\n distanceToSegment(p, lines.upper[0], lines.upper[1], false, true),\n distanceToSegment(p, lines.lower[0], lines.lower[1], false, true),\n distanceToSegment(p, b, c, false, false),\n ),\n );\n }\n case \"longPosition\":\n case \"shortPosition\": {\n const g = positionGeometry(pts);\n if (!g) return null;\n const top = Math.min(g.target, g.stop);\n const bottom = Math.max(g.target, g.stop);\n return inRect(g.x0, top, g.x1, bottom) ? { part: \"body\" } : null;\n }\n case \"fibRetracement\": {\n if (!b) return null;\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n if (p.x < x0 - tolerance || p.x > x1 + tolerance) return null;\n for (const level of FIB_LEVELS) {\n const y = b.y + (a.y - b.y) * level;\n if (Math.abs(p.y - y) <= tolerance) return { part: \"body\" };\n }\n return null;\n }\n default:\n // rectangle, measure: inside or on the outline\n return b && inRect(a.x, a.y, b.x, b.y) ? { part: \"body\" } : null;\n }\n};\n\nexport const setDash = (\n ctx: CanvasRenderingContext2D,\n style: TradingLineStyle | undefined,\n width: number,\n) => {\n if (style === \"dashed\") ctx.setLineDash([6, 4]);\n else if (style === \"dotted\") ctx.setLineDash([Math.max(1, width), 3]);\n else ctx.setLineDash([]);\n};\n\n/** Texts of the position tools (templates of the chart labels) */\nexport interface PositionTexts {\n target: string;\n stop: string;\n riskReward: string;\n profit: string;\n long: string;\n short: string;\n}\n\n/** Values and helpers the painter needs from the chart */\nexport interface DrawingPaintContext {\n /** Resolved CSS color of a drawing */\n color: string;\n /** Text color on the plot */\n text: string;\n /** Background of the plot (handles) */\n background: string;\n /** Up / down colors (measure, positions) */\n up: string;\n down: string;\n font: string;\n /** Font family of the text drawings */\n fontFamily: string;\n formatPrice(price: number): string;\n formatPercent(value: number): string;\n /** `\"24 bars, 2d 4h\"` */\n formatSpan(bars: number, ms: number): string;\n /** Readable text color on a fill */\n textOn(fill: string): string;\n /** Default text of a text drawing */\n defaultText: string;\n /** Texts of the position tools */\n position: PositionTexts;\n /** Last price (profit of the position tools) */\n last: number;\n /** Fills `{name}` placeholders */\n fill(template: string, values: Record<string, string | number>): string;\n}\n\n/** Point at the end of a line through `a` and `b`, far past the plot */\nconst extend = (a: Point, b: Point, m: DrawingMapper): Point => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n if (!len) return b;\n const k = (Math.abs(m.right - m.left) + Math.abs(m.bottom - m.top)) * 4;\n return { x: a.x + (dx / len) * k, y: a.y + (dy / len) * k };\n};\n\nconst 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/**\n * Paints a drawing (the context is clipped to its pane). Returns the box of\n * a text drawing, used by the hit tests.\n */\nexport const paintDrawing = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n m: DrawingMapper,\n c: DrawingPaintContext,\n state: { selected: boolean; hovered: boolean },\n): Box | null => {\n const pts = screenPoints(drawing, m);\n const [a, b, third] = pts;\n if (!a) return null;\n const width = (drawing.lineWidth ?? 1.5) + (state.hovered ? 0.5 : 0);\n const filled = drawing.fill !== false;\n let box: Box | null = null;\n ctx.save();\n ctx.lineWidth = width;\n ctx.strokeStyle = c.color;\n ctx.fillStyle = c.color;\n ctx.font = c.font;\n ctx.lineCap = \"round\";\n setDash(ctx, drawing.lineStyle, width);\n const line = (p: Point, q: Point) => {\n ctx.beginPath();\n ctx.moveTo(p.x, p.y);\n ctx.lineTo(q.x, q.y);\n ctx.stroke();\n };\n const shade = (points: readonly Point[], alpha = 0.1) => {\n if (!filled) return;\n ctx.save();\n ctx.globalAlpha = alpha;\n ctx.beginPath();\n points.forEach((p, i) => (i ? ctx.lineTo(p.x, p.y) : ctx.moveTo(p.x, p.y)));\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n };\n switch (drawing.type) {\n case \"horizontalLine\":\n line({ x: m.left, y: a.y }, { x: m.right, y: a.y });\n break;\n case \"verticalLine\":\n line({ x: a.x, y: m.top }, { x: a.x, y: m.bottom });\n break;\n case \"trendLine\":\n if (b) line(a, b);\n break;\n case \"arrow\":\n if (b) paintArrow(ctx, a, b, width);\n break;\n case \"ray\":\n if (b) line(a, extend(a, b, m));\n break;\n case \"extendedLine\":\n if (b) line(extend(b, a, m), extend(a, b, m));\n break;\n case \"rectangle\":\n if (b) {\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n shade([\n { x, y },\n { x: x + Math.abs(b.x - a.x), y },\n { x: x + Math.abs(b.x - a.x), y: y + Math.abs(b.y - a.y) },\n { x, y: y + Math.abs(b.y - a.y) },\n ]);\n ctx.strokeRect(x, y, Math.abs(b.x - a.x), Math.abs(b.y - a.y));\n }\n break;\n case \"parallelChannel\":\n if (b && third) {\n const { parallel } = channelLines(a, b, third);\n shade([a, b, parallel[1], parallel[0]]);\n line(a, b);\n line(parallel[0], parallel[1]);\n // the middle line, dashed\n ctx.save();\n ctx.globalAlpha = 0.55;\n ctx.setLineDash([4, 4]);\n line(\n { x: a.x, y: (a.y + parallel[0].y) / 2 },\n { x: b.x, y: (b.y + parallel[1].y) / 2 },\n );\n ctx.restore();\n } else if (b) {\n line(a, b);\n }\n break;\n case \"pitchfork\":\n if (b && third) {\n const lines = pitchforkLines(a, b, third);\n const far = (p: readonly [Point, Point]) => extend(p[0], p[1], m);\n shade([b, far(lines.upper), far(lines.lower), third], 0.07);\n line(lines.median[0], far(lines.median));\n line(b, far(lines.upper));\n line(third, far(lines.lower));\n ctx.save();\n ctx.globalAlpha = 0.55;\n ctx.setLineDash([4, 4]);\n line(b, third);\n ctx.restore();\n } else if (b) {\n line(a, b);\n }\n break;\n case \"fibRetracement\":\n if (b) paintFib(ctx, drawing, a, b, c, filled, m);\n break;\n case \"measure\":\n if (b) paintMeasure(ctx, drawing, a, b, m, c);\n break;\n case \"text\":\n box = paintText(ctx, drawing, a, c, filled);\n break;\n case \"longPosition\":\n case \"shortPosition\":\n paintPosition(ctx, drawing, pts, m, c);\n break;\n }\n if (state.selected || state.hovered) {\n ctx.setLineDash([]);\n ctx.lineWidth = 1.5;\n for (const p of handlePoints(drawing, m, box ?? undefined)) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, state.selected ? 4.5 : 3.5, 0, Math.PI * 2);\n ctx.fillStyle = c.background;\n ctx.fill();\n ctx.strokeStyle = c.color;\n ctx.stroke();\n }\n }\n ctx.restore();\n return box;\n};\n\nconst paintArrow = (\n ctx: CanvasRenderingContext2D,\n a: Point,\n b: Point,\n width: number,\n) => {\n const angle = Math.atan2(b.y - a.y, b.x - a.x);\n const head = 8 + width * 2;\n const len = Math.hypot(b.x - a.x, b.y - a.y);\n // the shaft stops inside the head so the tip stays sharp\n const k = len > head ? (len - head * 0.6) / len : 0;\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(a.x + (b.x - a.x) * k, a.y + (b.y - a.y) * k);\n ctx.stroke();\n ctx.setLineDash([]);\n ctx.beginPath();\n ctx.moveTo(b.x, b.y);\n ctx.lineTo(\n b.x - head * Math.cos(angle - 0.42),\n b.y - head * Math.sin(angle - 0.42),\n );\n ctx.lineTo(\n b.x - head * Math.cos(angle + 0.42),\n b.y - head * Math.sin(angle + 0.42),\n );\n ctx.closePath();\n ctx.fill();\n};\n\nconst paintText = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n c: DrawingPaintContext,\n filled: boolean,\n): Box => {\n const size = drawing.fontSize ?? 13;\n const lines = (drawing.text || c.defaultText).split(\"\\n\");\n ctx.font = `500 ${size}px ${c.fontFamily}`;\n const lineHeight = Math.round(size * 1.35);\n // a note card: room for the colored dot before the text\n const inset = filled ? 22 : 10;\n const w = Math.max(...lines.map((t) => ctx.measureText(t).width)) + inset + 8;\n const h = lines.length * lineHeight + 10;\n const box = { x: a.x, y: a.y, w, h };\n ctx.setLineDash([]);\n if (filled) {\n // a note card: the plot background tinted, a subtle border all around\n // and a colored dot\n roundRect(ctx, a.x + 0.5, a.y + 0.5, w - 1, h - 1, 5);\n ctx.globalAlpha = 0.94;\n ctx.fillStyle = c.background;\n ctx.fill();\n ctx.globalAlpha = 0.1;\n ctx.fillStyle = c.color;\n ctx.fill();\n ctx.globalAlpha = 0.55;\n ctx.lineWidth = 1;\n ctx.strokeStyle = c.color;\n ctx.stroke();\n ctx.globalAlpha = 1;\n ctx.fillStyle = c.color;\n ctx.beginPath();\n ctx.arc(a.x + 11, a.y + 5 + lineHeight / 2, 3.5, 0, Math.PI * 2);\n ctx.fill();\n }\n ctx.fillStyle = filled ? c.text : c.color;\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n lines.forEach((t, i) =>\n ctx.fillText(t, a.x + inset, a.y + 5 + lineHeight * (i + 0.5)),\n );\n return box;\n};\n\nconst paintPosition = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n pts: Point[],\n m: DrawingMapper,\n c: DrawingPaintContext,\n) => {\n const g = positionGeometry(pts);\n const [entry, target, stop] = drawing.points;\n if (!g || !entry || !target || !stop) return;\n const long = drawing.type === \"longPosition\";\n const w = Math.max(1, g.x1 - g.x0);\n ctx.setLineDash([]);\n // the reward zone and the risk zone\n for (const [y, color] of [\n [g.target, c.up],\n [g.stop, c.down],\n ] as const) {\n ctx.globalAlpha = 0.16;\n ctx.fillStyle = color;\n ctx.fillRect(g.x0, Math.min(y, g.entry), w, Math.abs(y - g.entry));\n ctx.globalAlpha = 0.7;\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(g.x0, Math.round(y) + 0.5);\n ctx.lineTo(g.x1, Math.round(y) + 0.5);\n ctx.stroke();\n }\n ctx.globalAlpha = 1;\n ctx.strokeStyle = c.text;\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(g.x0, Math.round(g.entry) + 0.5);\n ctx.lineTo(g.x1, Math.round(g.entry) + 0.5);\n ctx.stroke();\n const dir = long ? 1 : -1;\n const change = (price: number) =>\n c.formatPercent(((price - entry.price) / entry.price) * 100);\n const reward = Math.abs(target.price - entry.price);\n const risk = Math.abs(entry.price - stop.price);\n const ratio = risk > 0 ? reward / risk : NaN;\n const texts = c.position;\n const label = (text: string, y: number, fill: string, above: boolean) => {\n ctx.font = c.font;\n const tw = ctx.measureText(text).width + 14;\n const x = Math.max(\n m.left + 2,\n Math.min(g.x0 + w / 2 - tw / 2, m.right - tw - 2),\n );\n const top = above ? y - 24 : y + 4;\n roundRect(ctx, x, top, tw, 20, 4);\n ctx.fillStyle = fill;\n ctx.fill();\n ctx.fillStyle = c.textOn(fill);\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(text, x + tw / 2, top + 10.5);\n };\n const targetUp = g.target < g.entry;\n label(\n c.fill(texts.target, {\n price: c.formatPrice(target.price),\n change: change(target.price),\n }),\n g.target,\n c.up,\n targetUp,\n );\n label(\n c.fill(texts.stop, {\n price: c.formatPrice(stop.price),\n change: change(stop.price),\n }),\n g.stop,\n c.down,\n !targetUp,\n );\n // the side, the ratio and the profit at the last price\n const parts = [\n long ? texts.long : texts.short,\n c.fill(texts.riskReward, {\n ratio: Number.isFinite(ratio) ? ratio.toFixed(2) : \"–\",\n }),\n ];\n if (Number.isFinite(c.last) && entry.price) {\n const move = (c.last - entry.price) * dir;\n const percent = c.formatPercent((move / entry.price) * 100);\n const value =\n drawing.quantity !== undefined\n ? `${move * drawing.quantity >= 0 ? \"+\" : \"−\"}${c.formatPrice(Math.abs(move * drawing.quantity))} (${percent})`\n : percent;\n parts.push(c.fill(texts.profit, { value }));\n }\n ctx.font = c.font;\n const text = parts.join(\" · \");\n const tw = ctx.measureText(text).width + 16;\n const x = Math.max(\n m.left + 2,\n Math.min(g.x0 + w / 2 - tw / 2, m.right - tw - 2),\n );\n const center = g.entry - 10;\n roundRect(ctx, x, center, tw, 20, 4);\n ctx.fillStyle = c.text;\n ctx.fill();\n ctx.fillStyle = c.background;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(text, x + tw / 2, center + 10.5);\n};\n\nconst paintFib = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n b: Point,\n c: DrawingPaintContext,\n filled: boolean,\n m: DrawingMapper,\n) => {\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n // labels stay readable when the left anchor is scrolled out\n const labelX = Math.max(x0, m.left) + 4;\n const p1 = drawing.points[0]?.price ?? 0;\n const p2 = drawing.points[1]?.price ?? 0;\n const ys = FIB_LEVELS.map((level) => b.y + (a.y - b.y) * level);\n // bands between levels\n if (filled) {\n for (let i = 0; i + 1 < FIB_LEVELS.length; i++) {\n ctx.globalAlpha = 0.08;\n ctx.fillStyle = drawing.color ? c.color : (FIB_COLORS[i + 1] ?? c.color);\n ctx.fillRect(\n x0,\n Math.min(ys[i] ?? 0, ys[i + 1] ?? 0),\n x1 - x0,\n Math.abs((ys[i + 1] ?? 0) - (ys[i] ?? 0)),\n );\n }\n }\n ctx.globalAlpha = 1;\n ctx.textBaseline = \"bottom\";\n ctx.textAlign = \"left\";\n FIB_LEVELS.forEach((level, i) => {\n const y = Math.round(ys[i] ?? 0) + 0.5;\n const color = drawing.color ? c.color : (FIB_COLORS[i] ?? c.color);\n ctx.strokeStyle = color;\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(x0, y);\n ctx.lineTo(x1, y);\n ctx.stroke();\n const price = p2 + (p1 - p2) * level;\n ctx.fillText(`${level} (${c.formatPrice(price)})`, labelX, y - 2);\n });\n // the trend line between the anchors\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = c.color;\n ctx.globalAlpha = 0.6;\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n};\n\nconst paintMeasure = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n b: Point,\n m: DrawingMapper,\n c: DrawingPaintContext,\n) => {\n const [p1, p2] = drawing.points as [TradingDrawingPoint, TradingDrawingPoint];\n const rising = p2.price >= p1.price;\n const color = drawing.color ? c.color : rising ? c.up : c.down;\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n const y0 = Math.min(a.y, b.y);\n const y1 = Math.max(a.y, b.y);\n ctx.setLineDash([]);\n ctx.fillStyle = color;\n ctx.globalAlpha = 0.14;\n ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n ctx.globalAlpha = 1;\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n // arrows across the box\n const midX = Math.round((x0 + x1) / 2) + 0.5;\n const midY = Math.round((y0 + y1) / 2) + 0.5;\n const arrow = (from: Point, to: Point) => {\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n ctx.stroke();\n const angle = Math.atan2(to.y - from.y, to.x - from.x);\n ctx.beginPath();\n ctx.moveTo(to.x, to.y);\n ctx.lineTo(\n to.x - 6 * Math.cos(angle - 0.5),\n to.y - 6 * Math.sin(angle - 0.5),\n );\n ctx.lineTo(\n to.x - 6 * Math.cos(angle + 0.5),\n to.y - 6 * Math.sin(angle + 0.5),\n );\n ctx.closePath();\n ctx.fill();\n };\n if (y1 - y0 > 10)\n arrow({ x: midX, y: rising ? y1 : y0 }, { x: midX, y: rising ? y0 : y1 });\n if (x1 - x0 > 10)\n arrow(\n { x: a.x < b.x ? x0 : x1, y: midY },\n { x: a.x < b.x ? x1 : x0, y: midY },\n );\n // label\n const change = p2.price - p1.price;\n const percent = p1.price ? (change / p1.price) * 100 : NaN;\n const bars = Math.round(m.index(p2.time) - m.index(p1.time));\n const lines = [\n `${change >= 0 ? \"+\" : \"−\"}${c.formatPrice(Math.abs(change))} (${c.formatPercent(percent)})`,\n c.formatSpan(bars, p2.time - p1.time),\n ];\n const widths = lines.map((t) => ctx.measureText(t).width);\n const w = Math.max(...widths) + 16;\n const h = 38;\n const lx = (x0 + x1) / 2 - w / 2;\n const below = !rising;\n // flip inside the pane when the label would leave it\n let ly = below ? y1 + 6 : y0 - h - 6;\n if (ly < m.top + 2) ly = y1 + 6;\n if (ly + h > m.bottom - 2) ly = Math.max(m.top + 2, y0 - h - 6);\n roundRect(ctx, lx, ly, w, h, 4);\n ctx.fillStyle = color;\n ctx.fill();\n ctx.fillStyle = c.textOn(color);\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(lines[0] ?? \"\", lx + w / 2, ly + 11);\n ctx.fillText(lines[1] ?? \"\", lx + w / 2, ly + 27);\n};\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { TradingDrawing, TradingDrawingTool, TradingLineStyle } from './types.cjs';
2
- /** Converts between anchors and the pixels of the price pane */
1
+ import { TradingDrawing, TradingDrawingPoint, TradingDrawingTool, TradingLineStyle } from './types.cjs';
2
+ /** Converts between anchors and the pixels of a pane */
3
3
  export interface DrawingMapper {
4
4
  /** x (CSS px) of a logical bar index */
5
5
  x(index: number): number;
@@ -7,7 +7,7 @@ export interface DrawingMapper {
7
7
  y(price: number): number;
8
8
  /** Logical index of a time (extrapolated outside the bars) */
9
9
  index(time: number): number;
10
- /** Plot rectangle of the price pane */
10
+ /** Plot rectangle of the pane */
11
11
  left: number;
12
12
  right: number;
13
13
  top: number;
@@ -17,11 +17,32 @@ export interface Point {
17
17
  x: number;
18
18
  y: number;
19
19
  }
20
+ /** Rectangle in CSS pixels (text boxes, measured when painted) */
21
+ export interface Box {
22
+ x: number;
23
+ y: number;
24
+ w: number;
25
+ h: number;
26
+ }
27
+ type DrawingType = Exclude<TradingDrawingTool, "cursor">;
20
28
  /** Fibonacci retracement levels */
21
29
  export declare const FIB_LEVELS: number[];
22
- /** Number of anchors of a tool */
23
- export declare const anchorCount: (tool: Exclude<TradingDrawingTool, "cursor">) => 2 | 1;
30
+ /** Clicks that create a drawing (positions get a default target and stop) */
31
+ export declare const anchorCount: (tool: DrawingType) => number;
32
+ /** Drawings with an area that `fill` can turn off */
33
+ export declare const isFillable: (type: DrawingType) => boolean;
34
+ export declare const isPosition: (type: DrawingType) => boolean;
35
+ /**
36
+ * Prices a drawing spans when it overlaps the bars `[from, to]` (logical
37
+ * indices), for `autoscaleIncludesDrawings`: its anchors and the parallel of
38
+ * channels; horizontal lines always count, vertical lines never
39
+ */
40
+ export declare const drawingPrices: (drawing: TradingDrawing, index: (time: number) => number, from: number, to: number) => number[];
24
41
  export declare const screenPoints: (drawing: TradingDrawing, m: DrawingMapper) => Point[];
42
+ /** Handles of a drawing, in the order `moveHandle` understands */
43
+ export declare const handlePoints: (drawing: TradingDrawing, m: DrawingMapper, box?: Box) => Point[];
44
+ /** New anchors after dragging handle `index` to `point` */
45
+ export declare const moveHandle: (drawing: TradingDrawing, index: number, point: TradingDrawingPoint) => TradingDrawingPoint[];
25
46
  /** Part of a drawing under the pointer */
26
47
  export type DrawingHit = {
27
48
  part: "handle";
@@ -29,8 +50,17 @@ export type DrawingHit = {
29
50
  } | {
30
51
  part: "body";
31
52
  };
32
- export declare const hitDrawing: (drawing: TradingDrawing, m: DrawingMapper, p: Point, tolerance?: number) => DrawingHit | null;
53
+ export declare const hitDrawing: (drawing: TradingDrawing, m: DrawingMapper, p: Point, tolerance?: number, box?: Box) => DrawingHit | null;
33
54
  export declare const setDash: (ctx: CanvasRenderingContext2D, style: TradingLineStyle | undefined, width: number) => void;
55
+ /** Texts of the position tools (templates of the chart labels) */
56
+ export interface PositionTexts {
57
+ target: string;
58
+ stop: string;
59
+ riskReward: string;
60
+ profit: string;
61
+ long: string;
62
+ short: string;
63
+ }
34
64
  /** Values and helpers the painter needs from the chart */
35
65
  export interface DrawingPaintContext {
36
66
  /** Resolved CSS color of a drawing */
@@ -39,19 +69,33 @@ export interface DrawingPaintContext {
39
69
  text: string;
40
70
  /** Background of the plot (handles) */
41
71
  background: string;
42
- /** Up / down colors (measure) */
72
+ /** Up / down colors (measure, positions) */
43
73
  up: string;
44
74
  down: string;
45
75
  font: string;
76
+ /** Font family of the text drawings */
77
+ fontFamily: string;
46
78
  formatPrice(price: number): string;
47
79
  formatPercent(value: number): string;
48
80
  /** `"24 bars, 2d 4h"` */
49
81
  formatSpan(bars: number, ms: number): string;
50
82
  /** Readable text color on a fill */
51
83
  textOn(fill: string): string;
84
+ /** Default text of a text drawing */
85
+ defaultText: string;
86
+ /** Texts of the position tools */
87
+ position: PositionTexts;
88
+ /** Last price (profit of the position tools) */
89
+ last: number;
90
+ /** Fills `{name}` placeholders */
91
+ fill(template: string, values: Record<string, string | number>): string;
52
92
  }
53
- /** Paints a drawing (the context is clipped to the price pane) */
93
+ /**
94
+ * Paints a drawing (the context is clipped to its pane). Returns the box of
95
+ * a text drawing, used by the hit tests.
96
+ */
54
97
  export declare const paintDrawing: (ctx: CanvasRenderingContext2D, drawing: TradingDrawing, m: DrawingMapper, c: DrawingPaintContext, state: {
55
98
  selected: boolean;
56
99
  hovered: boolean;
57
- }) => void;
100
+ }) => Box | null;
101
+ export {};
@@ -1,5 +1,5 @@
1
- import { TradingDrawing, TradingDrawingTool, TradingLineStyle } from './types.js';
2
- /** Converts between anchors and the pixels of the price pane */
1
+ import { TradingDrawing, TradingDrawingPoint, TradingDrawingTool, TradingLineStyle } from './types.js';
2
+ /** Converts between anchors and the pixels of a pane */
3
3
  export interface DrawingMapper {
4
4
  /** x (CSS px) of a logical bar index */
5
5
  x(index: number): number;
@@ -7,7 +7,7 @@ export interface DrawingMapper {
7
7
  y(price: number): number;
8
8
  /** Logical index of a time (extrapolated outside the bars) */
9
9
  index(time: number): number;
10
- /** Plot rectangle of the price pane */
10
+ /** Plot rectangle of the pane */
11
11
  left: number;
12
12
  right: number;
13
13
  top: number;
@@ -17,11 +17,32 @@ export interface Point {
17
17
  x: number;
18
18
  y: number;
19
19
  }
20
+ /** Rectangle in CSS pixels (text boxes, measured when painted) */
21
+ export interface Box {
22
+ x: number;
23
+ y: number;
24
+ w: number;
25
+ h: number;
26
+ }
27
+ type DrawingType = Exclude<TradingDrawingTool, "cursor">;
20
28
  /** Fibonacci retracement levels */
21
29
  export declare const FIB_LEVELS: number[];
22
- /** Number of anchors of a tool */
23
- export declare const anchorCount: (tool: Exclude<TradingDrawingTool, "cursor">) => 2 | 1;
30
+ /** Clicks that create a drawing (positions get a default target and stop) */
31
+ export declare const anchorCount: (tool: DrawingType) => number;
32
+ /** Drawings with an area that `fill` can turn off */
33
+ export declare const isFillable: (type: DrawingType) => boolean;
34
+ export declare const isPosition: (type: DrawingType) => boolean;
35
+ /**
36
+ * Prices a drawing spans when it overlaps the bars `[from, to]` (logical
37
+ * indices), for `autoscaleIncludesDrawings`: its anchors and the parallel of
38
+ * channels; horizontal lines always count, vertical lines never
39
+ */
40
+ export declare const drawingPrices: (drawing: TradingDrawing, index: (time: number) => number, from: number, to: number) => number[];
24
41
  export declare const screenPoints: (drawing: TradingDrawing, m: DrawingMapper) => Point[];
42
+ /** Handles of a drawing, in the order `moveHandle` understands */
43
+ export declare const handlePoints: (drawing: TradingDrawing, m: DrawingMapper, box?: Box) => Point[];
44
+ /** New anchors after dragging handle `index` to `point` */
45
+ export declare const moveHandle: (drawing: TradingDrawing, index: number, point: TradingDrawingPoint) => TradingDrawingPoint[];
25
46
  /** Part of a drawing under the pointer */
26
47
  export type DrawingHit = {
27
48
  part: "handle";
@@ -29,8 +50,17 @@ export type DrawingHit = {
29
50
  } | {
30
51
  part: "body";
31
52
  };
32
- export declare const hitDrawing: (drawing: TradingDrawing, m: DrawingMapper, p: Point, tolerance?: number) => DrawingHit | null;
53
+ export declare const hitDrawing: (drawing: TradingDrawing, m: DrawingMapper, p: Point, tolerance?: number, box?: Box) => DrawingHit | null;
33
54
  export declare const setDash: (ctx: CanvasRenderingContext2D, style: TradingLineStyle | undefined, width: number) => void;
55
+ /** Texts of the position tools (templates of the chart labels) */
56
+ export interface PositionTexts {
57
+ target: string;
58
+ stop: string;
59
+ riskReward: string;
60
+ profit: string;
61
+ long: string;
62
+ short: string;
63
+ }
34
64
  /** Values and helpers the painter needs from the chart */
35
65
  export interface DrawingPaintContext {
36
66
  /** Resolved CSS color of a drawing */
@@ -39,19 +69,33 @@ export interface DrawingPaintContext {
39
69
  text: string;
40
70
  /** Background of the plot (handles) */
41
71
  background: string;
42
- /** Up / down colors (measure) */
72
+ /** Up / down colors (measure, positions) */
43
73
  up: string;
44
74
  down: string;
45
75
  font: string;
76
+ /** Font family of the text drawings */
77
+ fontFamily: string;
46
78
  formatPrice(price: number): string;
47
79
  formatPercent(value: number): string;
48
80
  /** `"24 bars, 2d 4h"` */
49
81
  formatSpan(bars: number, ms: number): string;
50
82
  /** Readable text color on a fill */
51
83
  textOn(fill: string): string;
84
+ /** Default text of a text drawing */
85
+ defaultText: string;
86
+ /** Texts of the position tools */
87
+ position: PositionTexts;
88
+ /** Last price (profit of the position tools) */
89
+ last: number;
90
+ /** Fills `{name}` placeholders */
91
+ fill(template: string, values: Record<string, string | number>): string;
52
92
  }
53
- /** Paints a drawing (the context is clipped to the price pane) */
93
+ /**
94
+ * Paints a drawing (the context is clipped to its pane). Returns the box of
95
+ * a text drawing, used by the hit tests.
96
+ */
54
97
  export declare const paintDrawing: (ctx: CanvasRenderingContext2D, drawing: TradingDrawing, m: DrawingMapper, c: DrawingPaintContext, state: {
55
98
  selected: boolean;
56
99
  hovered: boolean;
57
- }) => void;
100
+ }) => Box | null;
101
+ export {};