minerva-design 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +21 -21
  3. package/custom-elements.json +4047 -1703
  4. package/dist/angular/fesm2022/minerva-angular.mjs +1436 -5
  5. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  6. package/dist/angular/types/minerva-angular.d.ts +573 -4
  7. package/dist/charts/canvas.d.cts +2 -2
  8. package/dist/charts/canvas.d.ts +2 -2
  9. package/dist/charts/core.cjs +1 -1
  10. package/dist/charts/core.d.cts +6 -4
  11. package/dist/charts/core.d.ts +6 -4
  12. package/dist/charts/core.js +24 -16
  13. package/dist/charts/engine/axis.cjs +1 -1
  14. package/dist/charts/engine/axis.cjs.map +1 -1
  15. package/dist/charts/engine/axis.js +42 -19
  16. package/dist/charts/engine/axis.js.map +1 -1
  17. package/dist/charts/engine/canvas.cjs +1 -1
  18. package/dist/charts/engine/canvas.cjs.map +1 -1
  19. package/dist/charts/engine/canvas.js +154 -127
  20. package/dist/charts/engine/canvas.js.map +1 -1
  21. package/dist/charts/engine/chart.cjs +1 -1
  22. package/dist/charts/engine/chart.cjs.map +1 -1
  23. package/dist/charts/engine/chart.js +365 -251
  24. package/dist/charts/engine/chart.js.map +1 -1
  25. package/dist/charts/engine/color.cjs +1 -1
  26. package/dist/charts/engine/color.cjs.map +1 -1
  27. package/dist/charts/engine/color.d.cts +18 -0
  28. package/dist/charts/engine/color.d.ts +18 -0
  29. package/dist/charts/engine/color.js +48 -2
  30. package/dist/charts/engine/color.js.map +1 -1
  31. package/dist/charts/engine/controller.cjs +2 -2
  32. package/dist/charts/engine/controller.cjs.map +1 -1
  33. package/dist/charts/engine/controller.d.cts +32 -1
  34. package/dist/charts/engine/controller.d.ts +32 -1
  35. package/dist/charts/engine/controller.js +310 -263
  36. package/dist/charts/engine/controller.js.map +1 -1
  37. package/dist/charts/engine/data.cjs +1 -1
  38. package/dist/charts/engine/data.cjs.map +1 -1
  39. package/dist/charts/engine/data.d.cts +3 -1
  40. package/dist/charts/engine/data.d.ts +3 -1
  41. package/dist/charts/engine/data.js +6 -4
  42. package/dist/charts/engine/data.js.map +1 -1
  43. package/dist/charts/engine/defaults.cjs +2 -0
  44. package/dist/charts/engine/defaults.cjs.map +1 -0
  45. package/dist/charts/engine/defaults.d.cts +20 -0
  46. package/dist/charts/engine/defaults.d.ts +20 -0
  47. package/dist/charts/engine/defaults.js +35 -0
  48. package/dist/charts/engine/defaults.js.map +1 -0
  49. package/dist/charts/engine/format.cjs +1 -1
  50. package/dist/charts/engine/format.cjs.map +1 -1
  51. package/dist/charts/engine/format.d.cts +6 -0
  52. package/dist/charts/engine/format.d.ts +6 -0
  53. package/dist/charts/engine/format.js +15 -2
  54. package/dist/charts/engine/format.js.map +1 -1
  55. package/dist/charts/engine/graph/chart.cjs +2 -0
  56. package/dist/charts/engine/graph/chart.cjs.map +1 -0
  57. package/dist/charts/engine/graph/chart.d.cts +3 -0
  58. package/dist/charts/engine/graph/chart.d.ts +3 -0
  59. package/dist/charts/engine/graph/chart.js +1565 -0
  60. package/dist/charts/engine/graph/chart.js.map +1 -0
  61. package/dist/charts/engine/graph/circular.cjs +2 -0
  62. package/dist/charts/engine/graph/circular.cjs.map +1 -0
  63. package/dist/charts/engine/graph/circular.d.cts +16 -0
  64. package/dist/charts/engine/graph/circular.d.ts +16 -0
  65. package/dist/charts/engine/graph/circular.js +62 -0
  66. package/dist/charts/engine/graph/circular.js.map +1 -0
  67. package/dist/charts/engine/graph/dag.cjs +2 -0
  68. package/dist/charts/engine/graph/dag.cjs.map +1 -0
  69. package/dist/charts/engine/graph/dag.d.cts +34 -0
  70. package/dist/charts/engine/graph/dag.d.ts +34 -0
  71. package/dist/charts/engine/graph/dag.js +314 -0
  72. package/dist/charts/engine/graph/dag.js.map +1 -0
  73. package/dist/charts/engine/graph/dom.cjs +2 -0
  74. package/dist/charts/engine/graph/dom.cjs.map +1 -0
  75. package/dist/charts/engine/graph/dom.d.cts +23 -0
  76. package/dist/charts/engine/graph/dom.d.ts +23 -0
  77. package/dist/charts/engine/graph/dom.js +158 -0
  78. package/dist/charts/engine/graph/dom.js.map +1 -0
  79. package/dist/charts/engine/graph/force.cjs +2 -0
  80. package/dist/charts/engine/graph/force.cjs.map +1 -0
  81. package/dist/charts/engine/graph/force.d.cts +67 -0
  82. package/dist/charts/engine/graph/force.d.ts +67 -0
  83. package/dist/charts/engine/graph/force.js +325 -0
  84. package/dist/charts/engine/graph/force.js.map +1 -0
  85. package/dist/charts/engine/graph/geometry.cjs +2 -0
  86. package/dist/charts/engine/graph/geometry.cjs.map +1 -0
  87. package/dist/charts/engine/graph/geometry.d.cts +37 -0
  88. package/dist/charts/engine/graph/geometry.d.ts +37 -0
  89. package/dist/charts/engine/graph/geometry.js +144 -0
  90. package/dist/charts/engine/graph/geometry.js.map +1 -0
  91. package/dist/charts/engine/graph/index.cjs +1 -0
  92. package/dist/charts/engine/graph/index.d.cts +6 -0
  93. package/dist/charts/engine/graph/index.d.ts +6 -0
  94. package/dist/charts/engine/graph/index.js +6 -0
  95. package/dist/charts/engine/graph/labels.cjs +2 -0
  96. package/dist/charts/engine/graph/labels.cjs.map +1 -0
  97. package/dist/charts/engine/graph/labels.d.cts +12 -0
  98. package/dist/charts/engine/graph/labels.d.ts +12 -0
  99. package/dist/charts/engine/graph/labels.js +128 -0
  100. package/dist/charts/engine/graph/labels.js.map +1 -0
  101. package/dist/charts/engine/graph/model.cjs +2 -0
  102. package/dist/charts/engine/graph/model.cjs.map +1 -0
  103. package/dist/charts/engine/graph/model.d.cts +43 -0
  104. package/dist/charts/engine/graph/model.d.ts +43 -0
  105. package/dist/charts/engine/graph/model.js +88 -0
  106. package/dist/charts/engine/graph/model.js.map +1 -0
  107. package/dist/charts/engine/graph/sizing.cjs +2 -0
  108. package/dist/charts/engine/graph/sizing.cjs.map +1 -0
  109. package/dist/charts/engine/graph/sizing.d.cts +33 -0
  110. package/dist/charts/engine/graph/sizing.d.ts +33 -0
  111. package/dist/charts/engine/graph/sizing.js +60 -0
  112. package/dist/charts/engine/graph/sizing.js.map +1 -0
  113. package/dist/charts/engine/graph/tree.cjs +2 -0
  114. package/dist/charts/engine/graph/tree.cjs.map +1 -0
  115. package/dist/charts/engine/graph/tree.d.cts +30 -0
  116. package/dist/charts/engine/graph/tree.d.ts +30 -0
  117. package/dist/charts/engine/graph/tree.js +218 -0
  118. package/dist/charts/engine/graph/tree.js.map +1 -0
  119. package/dist/charts/engine/graph/types.d.cts +626 -0
  120. package/dist/charts/engine/graph/types.d.ts +626 -0
  121. package/dist/charts/engine/graph/worker.cjs +46 -0
  122. package/dist/charts/engine/graph/worker.cjs.map +1 -0
  123. package/dist/charts/engine/graph/worker.d.cts +36 -0
  124. package/dist/charts/engine/graph/worker.d.ts +36 -0
  125. package/dist/charts/engine/graph/worker.js +129 -0
  126. package/dist/charts/engine/graph/worker.js.map +1 -0
  127. package/dist/charts/engine/items.cjs +1 -1
  128. package/dist/charts/engine/items.cjs.map +1 -1
  129. package/dist/charts/engine/items.d.cts +15 -2
  130. package/dist/charts/engine/items.d.ts +15 -2
  131. package/dist/charts/engine/items.js +131 -112
  132. package/dist/charts/engine/items.js.map +1 -1
  133. package/dist/charts/engine/labels.cjs +1 -1
  134. package/dist/charts/engine/labels.cjs.map +1 -1
  135. package/dist/charts/engine/labels.js +28 -4
  136. package/dist/charts/engine/labels.js.map +1 -1
  137. package/dist/charts/engine/layout.cjs +1 -1
  138. package/dist/charts/engine/layout.cjs.map +1 -1
  139. package/dist/charts/engine/layout.d.cts +9 -0
  140. package/dist/charts/engine/layout.d.ts +9 -0
  141. package/dist/charts/engine/layout.js +11 -2
  142. package/dist/charts/engine/layout.js.map +1 -1
  143. package/dist/charts/engine/model.cjs +1 -1
  144. package/dist/charts/engine/model.cjs.map +1 -1
  145. package/dist/charts/engine/model.d.cts +40 -3
  146. package/dist/charts/engine/model.d.ts +40 -3
  147. package/dist/charts/engine/model.js +246 -165
  148. package/dist/charts/engine/model.js.map +1 -1
  149. package/dist/charts/engine/orderbook/format.cjs +1 -1
  150. package/dist/charts/engine/orderbook/format.cjs.map +1 -1
  151. package/dist/charts/engine/orderbook/format.d.cts +3 -2
  152. package/dist/charts/engine/orderbook/format.d.ts +3 -2
  153. package/dist/charts/engine/orderbook/format.js +5 -5
  154. package/dist/charts/engine/orderbook/format.js.map +1 -1
  155. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  156. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  157. package/dist/charts/engine/orderbook/heatmap.js +527 -408
  158. package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
  159. package/dist/charts/engine/orderbook/layout.cjs +2 -0
  160. package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
  161. package/dist/charts/engine/orderbook/layout.d.cts +37 -0
  162. package/dist/charts/engine/orderbook/layout.d.ts +37 -0
  163. package/dist/charts/engine/orderbook/layout.js +70 -0
  164. package/dist/charts/engine/orderbook/layout.js.map +1 -0
  165. package/dist/charts/engine/orderbook/tape.cjs +1 -1
  166. package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
  167. package/dist/charts/engine/orderbook/tape.js +1 -1
  168. package/dist/charts/engine/orderbook/tape.js.map +1 -1
  169. package/dist/charts/engine/orderbook/types.d.cts +18 -2
  170. package/dist/charts/engine/orderbook/types.d.ts +18 -2
  171. package/dist/charts/engine/overlay.cjs +1 -1
  172. package/dist/charts/engine/overlay.cjs.map +1 -1
  173. package/dist/charts/engine/overlay.d.cts +10 -0
  174. package/dist/charts/engine/overlay.d.ts +10 -0
  175. package/dist/charts/engine/overlay.js +6 -0
  176. package/dist/charts/engine/overlay.js.map +1 -1
  177. package/dist/charts/engine/presets.cjs +2 -2
  178. package/dist/charts/engine/presets.cjs.map +1 -1
  179. package/dist/charts/engine/presets.d.cts +25 -3
  180. package/dist/charts/engine/presets.d.ts +25 -3
  181. package/dist/charts/engine/presets.js +115 -101
  182. package/dist/charts/engine/presets.js.map +1 -1
  183. package/dist/charts/engine/renderers/detect.cjs +1 -1
  184. package/dist/charts/engine/renderers/detect.cjs.map +1 -1
  185. package/dist/charts/engine/renderers/detect.d.cts +2 -1
  186. package/dist/charts/engine/renderers/detect.d.ts +2 -1
  187. package/dist/charts/engine/renderers/detect.js +23 -21
  188. package/dist/charts/engine/renderers/detect.js.map +1 -1
  189. package/dist/charts/engine/scene.cjs +1 -1
  190. package/dist/charts/engine/scene.cjs.map +1 -1
  191. package/dist/charts/engine/scene.d.cts +57 -4
  192. package/dist/charts/engine/scene.d.ts +57 -4
  193. package/dist/charts/engine/scene.js +335 -182
  194. package/dist/charts/engine/scene.js.map +1 -1
  195. package/dist/charts/engine/shapes/bullet.cjs +1 -1
  196. package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
  197. package/dist/charts/engine/shapes/bullet.js +110 -110
  198. package/dist/charts/engine/shapes/bullet.js.map +1 -1
  199. package/dist/charts/engine/shapes/chart.cjs +1 -1
  200. package/dist/charts/engine/shapes/chart.cjs.map +1 -1
  201. package/dist/charts/engine/shapes/chart.js +4 -1
  202. package/dist/charts/engine/shapes/chart.js.map +1 -1
  203. package/dist/charts/engine/shapes/chord.cjs +2 -0
  204. package/dist/charts/engine/shapes/chord.cjs.map +1 -0
  205. package/dist/charts/engine/shapes/chord.d.cts +18 -0
  206. package/dist/charts/engine/shapes/chord.d.ts +18 -0
  207. package/dist/charts/engine/shapes/chord.js +414 -0
  208. package/dist/charts/engine/shapes/chord.js.map +1 -0
  209. package/dist/charts/engine/shapes/draw.cjs +1 -1
  210. package/dist/charts/engine/shapes/draw.cjs.map +1 -1
  211. package/dist/charts/engine/shapes/draw.d.cts +5 -1
  212. package/dist/charts/engine/shapes/draw.d.ts +5 -1
  213. package/dist/charts/engine/shapes/draw.js +47 -17
  214. package/dist/charts/engine/shapes/draw.js.map +1 -1
  215. package/dist/charts/engine/shapes/hit.cjs +1 -1
  216. package/dist/charts/engine/shapes/hit.cjs.map +1 -1
  217. package/dist/charts/engine/shapes/hit.d.cts +3 -1
  218. package/dist/charts/engine/shapes/hit.d.ts +3 -1
  219. package/dist/charts/engine/shapes/hit.js +75 -46
  220. package/dist/charts/engine/shapes/hit.js.map +1 -1
  221. package/dist/charts/engine/shapes/index.d.cts +3 -2
  222. package/dist/charts/engine/shapes/index.d.ts +3 -2
  223. package/dist/charts/engine/shapes/labels.cjs +1 -1
  224. package/dist/charts/engine/shapes/labels.cjs.map +1 -1
  225. package/dist/charts/engine/shapes/labels.js +12 -4
  226. package/dist/charts/engine/shapes/labels.js.map +1 -1
  227. package/dist/charts/engine/shapes/layout.cjs +2 -2
  228. package/dist/charts/engine/shapes/layout.cjs.map +1 -1
  229. package/dist/charts/engine/shapes/layout.d.cts +3 -1
  230. package/dist/charts/engine/shapes/layout.d.ts +3 -1
  231. package/dist/charts/engine/shapes/layout.js +106 -78
  232. package/dist/charts/engine/shapes/layout.js.map +1 -1
  233. package/dist/charts/engine/shapes/scene.cjs +1 -1
  234. package/dist/charts/engine/shapes/scene.cjs.map +1 -1
  235. package/dist/charts/engine/shapes/scene.d.cts +33 -3
  236. package/dist/charts/engine/shapes/scene.d.ts +33 -3
  237. package/dist/charts/engine/shapes/scene.js +62 -19
  238. package/dist/charts/engine/shapes/scene.js.map +1 -1
  239. package/dist/charts/engine/shapes/types.d.cts +119 -8
  240. package/dist/charts/engine/shapes/types.d.ts +119 -8
  241. package/dist/charts/engine/signature.cjs +1 -1
  242. package/dist/charts/engine/signature.cjs.map +1 -1
  243. package/dist/charts/engine/signature.js +1 -1
  244. package/dist/charts/engine/signature.js.map +1 -1
  245. package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
  246. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
  247. package/dist/charts/engine/three-d/canvas2d.d.cts +5 -2
  248. package/dist/charts/engine/three-d/canvas2d.d.ts +5 -2
  249. package/dist/charts/engine/three-d/canvas2d.js +89 -65
  250. package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
  251. package/dist/charts/engine/three-d/detect.cjs +1 -1
  252. package/dist/charts/engine/three-d/detect.cjs.map +1 -1
  253. package/dist/charts/engine/three-d/detect.d.cts +3 -2
  254. package/dist/charts/engine/three-d/detect.d.ts +3 -2
  255. package/dist/charts/engine/three-d/detect.js +22 -20
  256. package/dist/charts/engine/three-d/detect.js.map +1 -1
  257. package/dist/charts/engine/three-d/geometry.cjs +1 -1
  258. package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
  259. package/dist/charts/engine/three-d/geometry.d.cts +6 -0
  260. package/dist/charts/engine/three-d/geometry.d.ts +6 -0
  261. package/dist/charts/engine/three-d/geometry.js +106 -90
  262. package/dist/charts/engine/three-d/geometry.js.map +1 -1
  263. package/dist/charts/engine/three-d/model.cjs +1 -1
  264. package/dist/charts/engine/three-d/model.cjs.map +1 -1
  265. package/dist/charts/engine/three-d/model.d.cts +2 -0
  266. package/dist/charts/engine/three-d/model.d.ts +2 -0
  267. package/dist/charts/engine/three-d/model.js +2 -0
  268. package/dist/charts/engine/three-d/model.js.map +1 -1
  269. package/dist/charts/engine/three-d/overlay.cjs +1 -1
  270. package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
  271. package/dist/charts/engine/three-d/overlay.js +43 -36
  272. package/dist/charts/engine/three-d/overlay.js.map +1 -1
  273. package/dist/charts/engine/three-d/render-types.cjs +1 -1
  274. package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
  275. package/dist/charts/engine/three-d/render-types.d.cts +24 -3
  276. package/dist/charts/engine/three-d/render-types.d.ts +24 -3
  277. package/dist/charts/engine/three-d/render-types.js +6 -7
  278. package/dist/charts/engine/three-d/render-types.js.map +1 -1
  279. package/dist/charts/engine/three-d/shaders.cjs +63 -28
  280. package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
  281. package/dist/charts/engine/three-d/shaders.d.cts +2 -3
  282. package/dist/charts/engine/three-d/shaders.d.ts +2 -3
  283. package/dist/charts/engine/three-d/shaders.js +41 -22
  284. package/dist/charts/engine/three-d/shaders.js.map +1 -1
  285. package/dist/charts/engine/three-d/sort.cjs +1 -1
  286. package/dist/charts/engine/three-d/sort.cjs.map +1 -1
  287. package/dist/charts/engine/three-d/sort.d.cts +15 -4
  288. package/dist/charts/engine/three-d/sort.d.ts +15 -4
  289. package/dist/charts/engine/three-d/sort.js +117 -43
  290. package/dist/charts/engine/three-d/sort.js.map +1 -1
  291. package/dist/charts/engine/three-d/types.d.cts +27 -0
  292. package/dist/charts/engine/three-d/types.d.ts +27 -0
  293. package/dist/charts/engine/three-d/webgl.cjs +1 -1
  294. package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
  295. package/dist/charts/engine/three-d/webgl.js +15 -13
  296. package/dist/charts/engine/three-d/webgl.js.map +1 -1
  297. package/dist/charts/engine/three-d/webgpu.cjs +1 -1
  298. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
  299. package/dist/charts/engine/three-d/webgpu.js +50 -39
  300. package/dist/charts/engine/three-d/webgpu.js.map +1 -1
  301. package/dist/charts/engine/trading/chart.cjs +1 -1
  302. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  303. package/dist/charts/engine/trading/chart.d.cts +10 -0
  304. package/dist/charts/engine/trading/chart.d.ts +10 -0
  305. package/dist/charts/engine/trading/chart.js +1475 -776
  306. package/dist/charts/engine/trading/chart.js.map +1 -1
  307. package/dist/charts/engine/trading/drawings.cjs +2 -1
  308. package/dist/charts/engine/trading/drawings.cjs.map +1 -1
  309. package/dist/charts/engine/trading/drawings.d.cts +47 -9
  310. package/dist/charts/engine/trading/drawings.d.ts +47 -9
  311. package/dist/charts/engine/trading/drawings.js +338 -75
  312. package/dist/charts/engine/trading/drawings.js.map +1 -1
  313. package/dist/charts/engine/trading/format.cjs +1 -1
  314. package/dist/charts/engine/trading/format.cjs.map +1 -1
  315. package/dist/charts/engine/trading/format.d.cts +13 -0
  316. package/dist/charts/engine/trading/format.d.ts +13 -0
  317. package/dist/charts/engine/trading/format.js +51 -19
  318. package/dist/charts/engine/trading/format.js.map +1 -1
  319. package/dist/charts/engine/trading/index.cjs +1 -1
  320. package/dist/charts/engine/trading/index.d.cts +2 -1
  321. package/dist/charts/engine/trading/index.d.ts +2 -1
  322. package/dist/charts/engine/trading/index.js +4 -3
  323. package/dist/charts/engine/trading/indicators.cjs +1 -1
  324. package/dist/charts/engine/trading/indicators.cjs.map +1 -1
  325. package/dist/charts/engine/trading/indicators.d.cts +180 -10
  326. package/dist/charts/engine/trading/indicators.d.ts +180 -10
  327. package/dist/charts/engine/trading/indicators.js +449 -173
  328. package/dist/charts/engine/trading/indicators.js.map +1 -1
  329. package/dist/charts/engine/trading/labels.cjs +1 -1
  330. package/dist/charts/engine/trading/labels.cjs.map +1 -1
  331. package/dist/charts/engine/trading/labels.js +84 -4
  332. package/dist/charts/engine/trading/labels.js.map +1 -1
  333. package/dist/charts/engine/trading/store.cjs +1 -1
  334. package/dist/charts/engine/trading/store.cjs.map +1 -1
  335. package/dist/charts/engine/trading/store.d.cts +21 -0
  336. package/dist/charts/engine/trading/store.d.ts +21 -0
  337. package/dist/charts/engine/trading/store.js +22 -1
  338. package/dist/charts/engine/trading/store.js.map +1 -1
  339. package/dist/charts/engine/trading/studies.cjs +1 -1
  340. package/dist/charts/engine/trading/studies.cjs.map +1 -1
  341. package/dist/charts/engine/trading/studies.d.cts +41 -8
  342. package/dist/charts/engine/trading/studies.d.ts +41 -8
  343. package/dist/charts/engine/trading/studies.js +349 -93
  344. package/dist/charts/engine/trading/studies.js.map +1 -1
  345. package/dist/charts/engine/trading/sync.cjs +2 -0
  346. package/dist/charts/engine/trading/sync.cjs.map +1 -0
  347. package/dist/charts/engine/trading/sync.d.cts +8 -0
  348. package/dist/charts/engine/trading/sync.d.ts +8 -0
  349. package/dist/charts/engine/trading/sync.js +25 -0
  350. package/dist/charts/engine/trading/sync.js.map +1 -0
  351. package/dist/charts/engine/trading/types.d.cts +484 -9
  352. package/dist/charts/engine/trading/types.d.ts +484 -9
  353. package/dist/charts/engine/types.d.cts +82 -8
  354. package/dist/charts/engine/types.d.ts +82 -8
  355. package/dist/charts/index.cjs +1 -1
  356. package/dist/charts/index.d.cts +3 -2
  357. package/dist/charts/index.d.ts +3 -2
  358. package/dist/charts/index.js +30 -22
  359. package/dist/charts/react/charts.cjs +1 -1
  360. package/dist/charts/react/charts.cjs.map +1 -1
  361. package/dist/charts/react/charts.js +46 -34
  362. package/dist/charts/react/charts.js.map +1 -1
  363. package/dist/charts/react/graph.cjs +2 -0
  364. package/dist/charts/react/graph.cjs.map +1 -0
  365. package/dist/charts/react/graph.d.cts +213 -0
  366. package/dist/charts/react/graph.d.ts +213 -0
  367. package/dist/charts/react/graph.js +159 -0
  368. package/dist/charts/react/graph.js.map +1 -0
  369. package/dist/charts/react/shapes.cjs +1 -1
  370. package/dist/charts/react/shapes.cjs.map +1 -1
  371. package/dist/charts/react/shapes.d.cts +87 -4
  372. package/dist/charts/react/shapes.d.ts +87 -4
  373. package/dist/charts/react/shapes.js +55 -12
  374. package/dist/charts/react/shapes.js.map +1 -1
  375. package/dist/charts/react/trading.cjs +1 -1
  376. package/dist/charts/react/trading.cjs.map +1 -1
  377. package/dist/charts/react/trading.d.cts +53 -1
  378. package/dist/charts/react/trading.d.ts +53 -1
  379. package/dist/charts/react/trading.js +68 -37
  380. package/dist/charts/react/trading.js.map +1 -1
  381. package/dist/charts/react/types.d.cts +11 -0
  382. package/dist/charts/react/types.d.ts +11 -0
  383. package/dist/core/contracts.cjs +1 -1
  384. package/dist/core/contracts.cjs.map +1 -1
  385. package/dist/core/contracts.js +1 -1
  386. package/dist/core/contracts.js.map +1 -1
  387. package/dist/native/charts/src/canvas.cjs +1 -1
  388. package/dist/native/charts/src/canvas.js +3 -3
  389. package/dist/native/charts/src/engine/axis.cjs +1 -1
  390. package/dist/native/charts/src/engine/axis.cjs.map +1 -1
  391. package/dist/native/charts/src/engine/axis.js +42 -19
  392. package/dist/native/charts/src/engine/axis.js.map +1 -1
  393. package/dist/native/charts/src/engine/color.cjs +1 -1
  394. package/dist/native/charts/src/engine/color.cjs.map +1 -1
  395. package/dist/native/charts/src/engine/color.js +47 -5
  396. package/dist/native/charts/src/engine/color.js.map +1 -1
  397. package/dist/native/charts/src/engine/controller.cjs +2 -2
  398. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  399. package/dist/native/charts/src/engine/controller.js +300 -253
  400. package/dist/native/charts/src/engine/controller.js.map +1 -1
  401. package/dist/native/charts/src/engine/data.cjs +1 -1
  402. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  403. package/dist/native/charts/src/engine/data.js +6 -4
  404. package/dist/native/charts/src/engine/data.js.map +1 -1
  405. package/dist/native/charts/src/engine/format.cjs +1 -1
  406. package/dist/native/charts/src/engine/format.cjs.map +1 -1
  407. package/dist/native/charts/src/engine/format.js +15 -2
  408. package/dist/native/charts/src/engine/format.js.map +1 -1
  409. package/dist/native/charts/src/engine/labels.cjs +1 -1
  410. package/dist/native/charts/src/engine/labels.cjs.map +1 -1
  411. package/dist/native/charts/src/engine/labels.js +28 -4
  412. package/dist/native/charts/src/engine/labels.js.map +1 -1
  413. package/dist/native/charts/src/engine/layout.cjs +1 -1
  414. package/dist/native/charts/src/engine/layout.cjs.map +1 -1
  415. package/dist/native/charts/src/engine/layout.js +11 -2
  416. package/dist/native/charts/src/engine/layout.js.map +1 -1
  417. package/dist/native/charts/src/engine/model.cjs +1 -1
  418. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  419. package/dist/native/charts/src/engine/model.js +252 -171
  420. package/dist/native/charts/src/engine/model.js.map +1 -1
  421. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  422. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  423. package/dist/native/charts/src/engine/presets.cjs +2 -2
  424. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  425. package/dist/native/charts/src/engine/presets.js +104 -90
  426. package/dist/native/charts/src/engine/presets.js.map +1 -1
  427. package/dist/native/charts/src/engine/scene.cjs +1 -1
  428. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  429. package/dist/native/charts/src/engine/scene.js +341 -188
  430. package/dist/native/charts/src/engine/scene.js.map +1 -1
  431. package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
  432. package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
  433. package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
  434. package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
  435. package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
  436. package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
  437. package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
  438. package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
  439. package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
  440. package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
  441. package/dist/native/charts/src/engine/shapes/chord.js +414 -0
  442. package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
  443. package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
  444. package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
  445. package/dist/native/charts/src/engine/shapes/draw.js +47 -17
  446. package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
  447. package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
  448. package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
  449. package/dist/native/charts/src/engine/shapes/hit.js +73 -44
  450. package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
  451. package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
  452. package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
  453. package/dist/native/charts/src/engine/shapes/labels.js +12 -4
  454. package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
  455. package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
  456. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
  457. package/dist/native/charts/src/engine/shapes/layout.js +117 -90
  458. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
  459. package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
  460. package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
  461. package/dist/native/charts/src/engine/shapes/scene.js +62 -19
  462. package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
  463. package/dist/native/components/Chart/scene.cjs +1 -1
  464. package/dist/native/components/Chart/scene.cjs.map +1 -1
  465. package/dist/native/components/Chart/scene.js +140 -71
  466. package/dist/native/components/Chart/scene.js.map +1 -1
  467. package/dist/native/components/Charts/charts.cjs +1 -1
  468. package/dist/native/components/Charts/charts.cjs.map +1 -1
  469. package/dist/native/components/Charts/charts.js +54 -42
  470. package/dist/native/components/Charts/charts.js.map +1 -1
  471. package/dist/native/components/Charts/types.d.cts +11 -0
  472. package/dist/native/components/Charts/types.d.ts +11 -0
  473. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
  474. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
  475. package/dist/native/components/ShapeChart/ShapeChartBase.js +1 -0
  476. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
  477. package/dist/native/components/ShapeChart/charts.cjs +1 -1
  478. package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
  479. package/dist/native/components/ShapeChart/charts.d.cts +6 -1
  480. package/dist/native/components/ShapeChart/charts.d.ts +6 -1
  481. package/dist/native/components/ShapeChart/charts.js +138 -96
  482. package/dist/native/components/ShapeChart/charts.js.map +1 -1
  483. package/dist/native/components/ShapeChart/draw.cjs +1 -1
  484. package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
  485. package/dist/native/components/ShapeChart/draw.d.cts +1 -1
  486. package/dist/native/components/ShapeChart/draw.d.ts +1 -1
  487. package/dist/native/components/ShapeChart/draw.js +26 -17
  488. package/dist/native/components/ShapeChart/draw.js.map +1 -1
  489. package/dist/native/components/ShapeChart/geometry.cjs +1 -1
  490. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
  491. package/dist/native/components/ShapeChart/geometry.js +138 -59
  492. package/dist/native/components/ShapeChart/geometry.js.map +1 -1
  493. package/dist/native/components/ShapeChart/index.cjs +1 -1
  494. package/dist/native/components/ShapeChart/index.d.cts +1 -1
  495. package/dist/native/components/ShapeChart/index.d.ts +1 -1
  496. package/dist/native/components/ShapeChart/index.js +2 -2
  497. package/dist/native/components/ShapeChart/recorder.cjs +1 -1
  498. package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
  499. package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
  500. package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
  501. package/dist/native/components/ShapeChart/recorder.js +19 -10
  502. package/dist/native/components/ShapeChart/recorder.js.map +1 -1
  503. package/dist/native/components/ShapeChart/types.d.cts +92 -7
  504. package/dist/native/components/ShapeChart/types.d.ts +92 -7
  505. package/dist/native/index.cjs +1 -1
  506. package/dist/native/index.js +2 -2
  507. package/dist/native/source/components/Chart/scene.tsx +158 -14
  508. package/dist/native/source/components/Charts/charts.tsx +30 -2
  509. package/dist/native/source/components/Charts/types.ts +11 -0
  510. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +2 -0
  511. package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
  512. package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
  513. package/dist/native/source/components/ShapeChart/geometry.ts +189 -8
  514. package/dist/native/source/components/ShapeChart/index.ts +1 -0
  515. package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
  516. package/dist/native/source/components/ShapeChart/types.ts +96 -5
  517. package/dist/native/source/manifest.ts +1 -0
  518. package/dist/taro/charts.d.ts +25 -5
  519. package/dist/taro/index.js +3900 -2836
  520. package/dist/taro/shape-charts.d.ts +96 -4
  521. package/dist/uni/AreaChart.vue.d.ts +5 -1
  522. package/dist/uni/Badge.vue.d.ts +1 -1
  523. package/dist/uni/BarChart.vue.d.ts +5 -1
  524. package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
  525. package/dist/uni/BubbleChart.vue.d.ts +4 -0
  526. package/dist/uni/BulletChart.vue.d.ts +4 -0
  527. package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
  528. package/dist/uni/CandlestickChart.vue.d.ts +4 -0
  529. package/dist/uni/Chart.vue.d.ts +4 -0
  530. package/dist/uni/ChordChart.vue +93 -0
  531. package/dist/uni/ChordChart.vue.d.ts +136 -0
  532. package/dist/uni/DonutChart.vue.d.ts +4 -0
  533. package/dist/uni/FunnelChart.vue.d.ts +4 -0
  534. package/dist/uni/GanttChart.vue.d.ts +4 -0
  535. package/dist/uni/GaugeChart.vue.d.ts +4 -0
  536. package/dist/uni/HeatmapChart.vue.d.ts +8 -2
  537. package/dist/uni/HistogramChart.vue.d.ts +4 -0
  538. package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
  539. package/dist/uni/LineChart.vue.d.ts +4 -0
  540. package/dist/uni/MixedChart.vue.d.ts +4 -0
  541. package/dist/uni/PieChart.vue.d.ts +4 -0
  542. package/dist/uni/QuadrantChart.vue.d.ts +4 -0
  543. package/dist/uni/RadarChart.vue.d.ts +4 -0
  544. package/dist/uni/RadialBarChart.vue.d.ts +4 -0
  545. package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
  546. package/dist/uni/SankeyChart.vue.d.ts +4 -0
  547. package/dist/uni/ScatterChart.vue.d.ts +4 -0
  548. package/dist/uni/Sparkline.vue.d.ts +4 -0
  549. package/dist/uni/SunburstChart.vue.d.ts +4 -0
  550. package/dist/uni/ToastProvider.vue.d.ts +1 -1
  551. package/dist/uni/TreemapChart.vue.d.ts +4 -0
  552. package/dist/uni/WaterfallChart.vue.d.ts +9 -0
  553. package/dist/uni/chart-canvas.d.ts +3 -0
  554. package/dist/uni/chart-canvas.js +4 -0
  555. package/dist/uni/chart-types.d.ts +28 -4
  556. package/dist/uni/chart-types.js +26 -2
  557. package/dist/uni/charts-canvas.js +1 -1
  558. package/dist/uni/index.d.ts +2 -1
  559. package/dist/uni/index.js +1 -0
  560. package/dist/uni/manifest.d.ts +7 -0
  561. package/dist/uni/manifest.js +10 -0
  562. package/dist/uni/named-chart-options.d.ts +9 -2
  563. package/dist/uni/named-chart-options.js +18 -1
  564. package/dist/uni/shape-chart-canvas.d.ts +3 -1
  565. package/dist/uni/shape-chart-canvas.js +15 -24
  566. package/dist/uni/shape-chart-types.d.ts +52 -2
  567. package/dist/uni/shape-chart-types.js +44 -0
  568. package/dist/vue/charts-global.d.ts +48 -0
  569. package/dist/vue/charts.d.ts +18 -0
  570. package/dist/vue/charts.js +56 -0
  571. package/dist/vue/charts.js.map +1 -0
  572. package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
  573. package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
  574. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
  575. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  576. package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
  577. package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
  578. package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
  579. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
  580. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  581. package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +179 -0
  582. package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
  583. package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
  584. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
  585. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
  586. package/dist/vue/components/Chart/GanttChart.vue.d.ts +4 -0
  587. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
  588. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +4 -1
  589. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  590. package/dist/vue/components/Chart/GraphChart.vue.d.ts +184 -0
  591. package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
  592. package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
  593. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
  594. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  595. package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
  596. package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
  597. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
  598. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  599. package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
  600. package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
  601. package/dist/vue/components/Chart/TradingChart.vue.d.ts +49 -1
  602. package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
  603. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
  604. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  605. package/dist/vue/components/Chart/TreeChart.vue.d.ts +172 -0
  606. package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
  607. package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
  608. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
  609. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  610. package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
  611. package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
  612. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
  613. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  614. package/dist/vue/components/Chart/graph.d.ts +153 -0
  615. package/dist/vue/components/Chart/graph.js +135 -0
  616. package/dist/vue/components/Chart/graph.js.map +1 -0
  617. package/dist/vue/components/Chart/index.d.ts +5 -1
  618. package/dist/vue/components/Chart/index.js +5 -1
  619. package/dist/vue/components/Chart/orderbook.d.ts +5 -1
  620. package/dist/vue/components/Chart/orderbook.js +2 -0
  621. package/dist/vue/components/Chart/orderbook.js.map +1 -1
  622. package/dist/vue/components/Chart/trading.d.ts +24 -2
  623. package/dist/vue/components/Chart/trading.js +8 -0
  624. package/dist/vue/components/Chart/trading.js.map +1 -1
  625. package/dist/vue/components/Chart/types.d.ts +74 -2
  626. package/dist/vue/global.d.ts +2 -38
  627. package/dist/vue/groups/charts.js +10 -2
  628. package/dist/vue/groups/charts.js.map +1 -1
  629. package/dist/vue/index.js +6 -2
  630. package/dist/vue/internal/register.d.ts +7 -0
  631. package/dist/vue/internal/register.js +14 -0
  632. package/dist/vue/internal/register.js.map +1 -0
  633. package/dist/vue/plugin.d.ts +9 -4
  634. package/dist/vue/plugin.js +6 -11
  635. package/dist/vue/plugin.js.map +1 -1
  636. package/dist/weapp/charts/canvas.js +1687 -147
  637. package/dist/weapp/charts/core.js +1 -0
  638. package/dist/weapp/chord-chart/index.js +1 -0
  639. package/dist/weapp/chord-chart/index.json +1 -0
  640. package/dist/weapp/chord-chart/index.wxml +1 -0
  641. package/dist/weapp/chord-chart/index.wxss +1 -0
  642. package/dist/weapp/controls.js +92 -32
  643. package/dist/weapp/types.d.ts +87 -4
  644. package/dist/web-components/components/chart/charts.d.ts +4 -2
  645. package/dist/web-components/components/chart/charts.js +8 -1
  646. package/dist/web-components/components/chart/charts.js.map +1 -1
  647. package/dist/web-components/components/chart/extended.d.ts +17 -7
  648. package/dist/web-components/components/chart/extended.js +23 -9
  649. package/dist/web-components/components/chart/extended.js.map +1 -1
  650. package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
  651. package/dist/web-components/components/chart/shapes-extended.js +27 -1
  652. package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
  653. package/dist/web-components/components/graph/graph.d.ts +154 -0
  654. package/dist/web-components/components/graph/graph.js +149 -0
  655. package/dist/web-components/components/graph/graph.js.map +1 -0
  656. package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
  657. package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
  658. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
  659. package/dist/web-components/elements/chart.d.ts +1 -1
  660. package/dist/web-components/elements/chart.js +6 -5
  661. package/dist/web-components/elements/chart.js.map +1 -1
  662. package/dist/web-components/elements/graph.d.ts +2 -0
  663. package/dist/web-components/elements/graph.js +12 -0
  664. package/dist/web-components/elements/graph.js.map +1 -0
  665. package/dist/web-components/html-custom-data.json +273 -4
  666. package/dist/web-components/types/react.d.ts +63 -4
  667. package/dist/web-components/types/solid.d.ts +55 -8
  668. package/dist/web-components/types/svelte.d.ts +55 -8
  669. package/dist/web-components/types/vue.d.ts +55 -4
  670. package/package.json +16 -1
@@ -1 +1 @@
1
- {"version":3,"file":"recorder.cjs","names":["measureChartText","require_measure","TAU","BLACK","clamp01","v","NAMED","parseColor","value","s","named","fn","parts","p","r","g","b","alphaText","hex","short","at","i","opaqueCss","c","cssWithAlpha","alpha","paintAt","paint","dx","dy","len2","t","x","y","stops","a","span","k","mix","u","FONT","parseFont","match","font","w","weight","GRADIENT","isGradient","toPaint","gradient","fromPaint","normalizeTextAlign","normalizeBaseline","arcSweep","ccw","end","start","createRecorder","frame","initial","state","stack","paths","current","pen","pendingHalo","map","d","e","f","scaleOf","rotationOf","multiply","n","moveTo","px","py","ensure","lineTo","arc","sweep","sx","sy","ex","ey","cx","cy","rot","curve","steps","point","curveSteps","length","list","copy","kind","shadow","text","size","maxWidth","context","previous","cos","angle","sin","rx","ry","rotation","x1","y1","x0","y0","ax","ay","bx","x2","by","y2","la","lb","cross","half","dist","t0x","t0y","t1x","t1y","ux","uy","lu","cd","a0","a1","cpx","cpy","c1x","c1y","c2x","c2y","h","radii","saved","op","halo","width","segments","offset","color","q"],"sources":["../../../../../native/src/components/ShapeChart/recorder.ts"],"sourcesContent":["// A Canvas2D context that records instead of painting. The shape chart\n// engine (@minerva/charts/canvas: layouts, animations, legend, tooltip,\n// hover dimming, events) draws its frames on it; ./geometry turns the\n// recorded fills, strokes and texts into views. Paths are stored in chart\n// pixels (the current transform applied); arcs stay arcs so that circles,\n// rings and sectors become exact rounded views.\n\nimport { measureChartText } from \"../Chart/measure\";\n\n/** A color: channels 0-255, alpha 0-1 (`raw`: a CSS color that could not be parsed) */\nexport interface Color {\n r: number;\n g: number;\n b: number;\n a: number;\n raw?: string;\n}\n\n/** A linear gradient in chart pixels */\nexport interface Gradient {\n x0: number;\n y0: number;\n x1: number;\n y1: number;\n stops: { offset: number; color: Color }[];\n}\n\n/** Fill or stroke style: a color, or a gradient (and its first color) */\nexport interface Paint {\n color: Color;\n gradient?: Gradient;\n}\n\n/** Straight segment to (x, y), or arc (implicitly joined by a segment to its start) */\nexport type Segment =\n | { t: \"L\"; x: number; y: number }\n | {\n t: \"A\";\n cx: number;\n cy: number;\n r: number;\n /** Start angle and end angle (`a1 - a0` is the signed sweep) */\n a0: number;\n a1: number;\n };\n\nexport interface Subpath {\n x: number;\n y: number;\n segs: Segment[];\n closed: boolean;\n}\n\nexport interface FillOp {\n kind: \"fill\";\n paths: Subpath[];\n paint: Paint;\n alpha: number;\n /** Drawn with a shadow */\n shadow: boolean;\n}\n\nexport interface StrokeOp {\n kind: \"stroke\";\n paths: Subpath[];\n paint: Paint;\n alpha: number;\n width: number;\n cap: \"butt\" | \"round\" | \"square\";\n join: \"round\" | \"bevel\" | \"miter\";\n dash: number[];\n}\n\nexport interface TextOp {\n kind: \"text\";\n text: string;\n x: number;\n y: number;\n size: number;\n weight: number;\n align: \"left\" | \"center\" | \"right\";\n baseline: \"top\" | \"middle\" | \"bottom\" | \"alphabetic\";\n color: Color;\n alpha: number;\n /** Rotation around (x, y), radians clockwise */\n rotate: number;\n maxWidth?: number;\n /** Outline color (`strokeText` under the same text) */\n halo?: Color;\n}\n\nexport type DrawOp = FillOp | StrokeOp | TextOp;\n\nconst TAU = Math.PI * 2;\nconst BLACK: Color = { r: 0, g: 0, b: 0, a: 1 };\n\nconst clamp01 = (v: number) => (v < 0 ? 0 : v > 1 ? 1 : v);\n\nconst NAMED: Record<string, Color> = {\n transparent: { r: 0, g: 0, b: 0, a: 0 },\n black: BLACK,\n white: { r: 255, g: 255, b: 255, a: 1 },\n};\n\n/** Parses the colors the engine produces: `rgba()`, `rgb()`, `#hex` */\nexport function parseColor(value: unknown): Color {\n if (typeof value !== \"string\") return BLACK;\n const s = value.trim().toLowerCase();\n const named = NAMED[s];\n if (named) return named;\n const fn = /^rgba?\\(([^)]*)\\)$/.exec(s);\n if (fn) {\n const parts = (fn[1] ?? \"\")\n .split(/[\\s,/]+/)\n .filter(Boolean)\n .map((p) => (p.endsWith(\"%\") ? (parseFloat(p) / 100) * 255 : +p));\n const [r = 0, g = 0, b = 0] = parts;\n let a = parts[3] ?? 1;\n const alphaText = (fn[1] ?? \"\").split(/[\\s,/]+/).filter(Boolean)[3];\n if (alphaText?.endsWith(\"%\")) a = parseFloat(alphaText) / 100;\n if ([r, g, b, a].every(Number.isFinite)) return { r, g, b, a: clamp01(a) };\n }\n const hex = /^#([0-9a-f]{3,8})$/.exec(s)?.[1];\n if (hex && hex.length !== 5 && hex.length !== 7) {\n const short = hex.length <= 4;\n const at = (i: number) =>\n short\n ? parseInt((hex[i] ?? \"f\") + (hex[i] ?? \"f\"), 16)\n : parseInt(hex.slice(i * 2, i * 2 + 2) || \"ff\", 16);\n const n = short ? hex.length : hex.length / 2;\n return { r: at(0), g: at(1), b: at(2), a: n === 4 ? at(3) / 255 : 1 };\n }\n return { r: 0, g: 0, b: 0, a: 1, raw: value };\n}\n\n/** Opaque CSS color (the alpha goes to an `opacity`) */\nexport const opaqueCss = (c: Color) =>\n c.raw ?? `rgb(${Math.round(c.r)}, ${Math.round(c.g)}, ${Math.round(c.b)})`;\n\n/** CSS color with an extra alpha */\nexport const cssWithAlpha = (c: Color, alpha: number) =>\n c.raw ??\n `rgba(${Math.round(c.r)}, ${Math.round(c.g)}, ${Math.round(c.b)}, ${+clamp01(c.a * alpha).toFixed(3)})`;\n\n/** Color of a paint at a point (gradients: projected on their axis) */\nexport function paintAt(paint: Paint, x: number, y: number): Color {\n const g = paint.gradient;\n if (!g || g.stops.length < 2) return paint.color;\n const dx = g.x1 - g.x0;\n const dy = g.y1 - g.y0;\n const len2 = dx * dx + dy * dy;\n const t = len2 > 0 ? clamp01(((x - g.x0) * dx + (y - g.y0) * dy) / len2) : 0;\n const stops = g.stops;\n let i = 0;\n while (i < stops.length - 2 && (stops[i + 1]?.offset ?? 1) < t) i++;\n const a = stops[i];\n const b = stops[i + 1];\n if (!a || !b) return paint.color;\n const span = b.offset - a.offset;\n const k = span > 0 ? clamp01((t - a.offset) / span) : 0;\n const mix = (u: number, v: number) => u + (v - u) * k;\n if (a.color.raw || b.color.raw) return k < 0.5 ? a.color : b.color;\n return {\n r: mix(a.color.r, b.color.r),\n g: mix(a.color.g, b.color.g),\n b: mix(a.color.b, b.color.b),\n a: mix(a.color.a, b.color.a),\n };\n}\n\ntype Matrix = [number, number, number, number, number, number];\n\ninterface State {\n m: Matrix;\n alpha: number;\n fill: Paint;\n stroke: Paint;\n lineWidth: number;\n cap: StrokeOp[\"cap\"];\n join: StrokeOp[\"join\"];\n font: string;\n align: TextOp[\"align\"];\n baseline: TextOp[\"baseline\"];\n dash: number[];\n shadowColor: string;\n shadowBlur: number;\n shadowOffsetX: number;\n shadowOffsetY: number;\n}\n\nconst FONT =\n /^\\s*(?:(?:italic|oblique|normal)\\s+)?(?:(\\d{3}|bold|normal)\\s+)?([\\d.]+)px/;\n\n/** Size (px) and weight of a CSS font */\nexport function parseFont(font: string): { size: number; weight: number } {\n const match = FONT.exec(font);\n const w = match?.[1];\n const weight = w === \"bold\" ? 700 : w && w !== \"normal\" ? +w : 400;\n return { size: match ? Number(match[2]) : 10, weight };\n}\n\nconst GRADIENT = Symbol(\"gradient\");\n\ninterface RecordedGradient {\n [GRADIENT]: Gradient;\n addColorStop(offset: number, color: string): void;\n}\n\nconst isGradient = (v: unknown): v is RecordedGradient =>\n typeof v === \"object\" && v !== null && GRADIENT in v;\n\nconst toPaint = (value: unknown): Paint => {\n if (isGradient(value)) {\n const gradient = value[GRADIENT];\n return { color: gradient.stops[0]?.color ?? BLACK, gradient };\n }\n return { color: parseColor(value) };\n};\n\nconst fromPaint = (paint: Paint): unknown =>\n paint.color.raw ??\n `rgba(${paint.color.r}, ${paint.color.g}, ${paint.color.b}, ${paint.color.a})`;\n\nconst normalizeTextAlign = (v: string): TextOp[\"align\"] =>\n v === \"center\" ? \"center\" : v === \"right\" || v === \"end\" ? \"right\" : \"left\";\n\nconst normalizeBaseline = (v: string): TextOp[\"baseline\"] =>\n v === \"top\" || v === \"hanging\"\n ? \"top\"\n : v === \"middle\"\n ? \"middle\"\n : v === \"bottom\" || v === \"ideographic\"\n ? \"bottom\"\n : \"alphabetic\";\n\n/** Signed sweep of a canvas `arc()` */\nexport function arcSweep(start: number, end: number, ccw: boolean): number {\n if (!ccw) {\n if (end - start >= TAU) return TAU;\n let s = (end - start) % TAU;\n if (s < 0) s += TAU;\n return s;\n }\n if (start - end >= TAU) return -TAU;\n let s = (start - end) % TAU;\n if (s < 0) s += TAU;\n return -s;\n}\n\nexport interface Recorder {\n /** The 2D context handed to the engine */\n readonly context: unknown;\n /** Operations of the last frame (a new array per frame) */\n ops(): DrawOp[];\n}\n\n/**\n * Records the drawing calls of a Canvas2D context. `clearRect` of the whole\n * canvas starts a new frame.\n */\nexport function createRecorder(): Recorder {\n let frame: DrawOp[] = [];\n const initial = (): State => ({\n m: [1, 0, 0, 1, 0, 0],\n alpha: 1,\n fill: { color: BLACK },\n stroke: { color: BLACK },\n lineWidth: 1,\n cap: \"butt\",\n join: \"miter\",\n font: \"10px sans-serif\",\n align: \"left\",\n baseline: \"alphabetic\",\n dash: [],\n shadowColor: \"rgba(0, 0, 0, 0)\",\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n });\n let state = initial();\n const stack: State[] = [];\n let paths: Subpath[] = [];\n let current: Subpath | null = null;\n let pen: [number, number] | null = null;\n let pendingHalo: TextOp | null = null;\n\n const map = (x: number, y: number): [number, number] => {\n const [a, b, c, d, e, f] = state.m;\n return [a * x + c * y + e, b * x + d * y + f];\n };\n /** Uniform scale and rotation of the transform */\n const scaleOf = () => {\n const [a, b, c, d] = state.m;\n return Math.sqrt(Math.abs(a * d - b * c)) || 0;\n };\n const rotationOf = () => Math.atan2(state.m[1], state.m[0]);\n const multiply = (n: Matrix) => {\n const [a, b, c, d, e, f] = state.m;\n state.m = [\n a * n[0] + c * n[1],\n b * n[0] + d * n[1],\n a * n[2] + c * n[3],\n b * n[2] + d * n[3],\n a * n[4] + c * n[5] + e,\n b * n[4] + d * n[5] + f,\n ];\n };\n\n const moveTo = (x: number, y: number) => {\n const [px, py] = map(x, y);\n current = { x: px, y: py, segs: [], closed: false };\n paths.push(current);\n pen = [x, y];\n };\n const ensure = (x: number, y: number) => {\n if (!current) moveTo(x, y);\n };\n const lineTo = (x: number, y: number) => {\n if (!current) {\n moveTo(x, y);\n return;\n }\n const [px, py] = map(x, y);\n current.segs.push({ t: \"L\", x: px, y: py });\n pen = [x, y];\n };\n const arc = (\n x: number,\n y: number,\n r: number,\n start: number,\n end: number,\n ccw = false,\n ) => {\n const sweep = arcSweep(start, end, ccw);\n const sx = x + r * Math.cos(start);\n const sy = y + r * Math.sin(start);\n const ex = x + r * Math.cos(start + sweep);\n const ey = y + r * Math.sin(start + sweep);\n if (!current) moveTo(sx, sy);\n if (r <= 0 || sweep === 0) {\n lineTo(sx, sy);\n return;\n }\n const [cx, cy] = map(x, y);\n const rot = rotationOf();\n current?.segs.push({\n t: \"A\",\n cx,\n cy,\n r: r * scaleOf(),\n a0: start + rot,\n a1: start + sweep + rot,\n });\n pen = [ex, ey];\n };\n const curve = (point: (t: number) => [number, number], steps: number) => {\n for (let i = 1; i <= steps; i++) {\n const [x, y] = point(i / steps);\n lineTo(x, y);\n }\n };\n /** Segments of a flattened curve: ~6px each, 2 for the small corner roundings */\n const curveSteps = (length: number) =>\n Math.max(2, Math.min(32, Math.ceil((length * scaleOf()) / 6)));\n\n const paint = (kind: \"fill\" | \"stroke\") => {\n const list = paths.filter((p) => p.segs.length || p.closed);\n if (!list.length) return;\n // a copy: the engine may keep drawing on the same path\n const copy = list.map((p) => ({ ...p, segs: [...p.segs] }));\n if (kind === \"fill\") {\n const shadow =\n state.shadowBlur > 0 &&\n parseColor(state.shadowColor).a > 0 &&\n !parseColor(state.shadowColor).raw;\n frame.push({\n kind: \"fill\",\n paths: copy,\n paint: state.fill,\n alpha: state.alpha,\n shadow,\n });\n } else {\n frame.push({\n kind: \"stroke\",\n paths: copy,\n paint: state.stroke,\n alpha: state.alpha,\n width: state.lineWidth * scaleOf(),\n cap: state.cap,\n join: state.join,\n dash: state.dash.map((v) => v * scaleOf()),\n });\n }\n };\n\n const text = (value: string, x: number, y: number, maxWidth?: number) => {\n const [px, py] = map(x, y);\n const { size, weight } = parseFont(state.font);\n const s = scaleOf();\n return {\n kind: \"text\" as const,\n text: String(value),\n x: px,\n y: py,\n size: size * s,\n weight,\n align: state.align,\n baseline: state.baseline,\n color: state.fill.color,\n alpha: state.alpha,\n rotate: rotationOf(),\n maxWidth:\n maxWidth !== undefined && Number.isFinite(maxWidth)\n ? maxWidth * s\n : undefined,\n };\n };\n\n const context = {\n canvas: null,\n get globalAlpha() {\n return state.alpha;\n },\n set globalAlpha(v: number) {\n if (Number.isFinite(v)) state.alpha = clamp01(v);\n },\n get fillStyle(): unknown {\n return state.fill.gradient ? null : fromPaint(state.fill);\n },\n set fillStyle(v: unknown) {\n state.fill = toPaint(v);\n },\n get strokeStyle(): unknown {\n return state.stroke.gradient ? null : fromPaint(state.stroke);\n },\n set strokeStyle(v: unknown) {\n state.stroke = toPaint(v);\n },\n get lineWidth() {\n return state.lineWidth;\n },\n set lineWidth(v: number) {\n if (Number.isFinite(v) && v > 0) state.lineWidth = v;\n },\n get lineCap() {\n return state.cap;\n },\n set lineCap(v: string) {\n state.cap = v === \"round\" ? \"round\" : v === \"square\" ? \"square\" : \"butt\";\n },\n get lineJoin() {\n return state.join;\n },\n set lineJoin(v: string) {\n state.join = v === \"round\" ? \"round\" : v === \"bevel\" ? \"bevel\" : \"miter\";\n },\n get font() {\n return state.font;\n },\n set font(v: string) {\n state.font = v;\n },\n get textAlign() {\n return state.align;\n },\n set textAlign(v: string) {\n state.align = normalizeTextAlign(v);\n },\n get textBaseline() {\n return state.baseline;\n },\n set textBaseline(v: string) {\n state.baseline = normalizeBaseline(v);\n },\n get shadowColor() {\n return state.shadowColor;\n },\n set shadowColor(v: string) {\n state.shadowColor = v;\n },\n get shadowBlur() {\n return state.shadowBlur;\n },\n set shadowBlur(v: number) {\n state.shadowBlur = v;\n },\n get shadowOffsetX() {\n return state.shadowOffsetX;\n },\n set shadowOffsetX(v: number) {\n state.shadowOffsetX = v;\n },\n get shadowOffsetY() {\n return state.shadowOffsetY;\n },\n set shadowOffsetY(v: number) {\n state.shadowOffsetY = v;\n },\n lineDashOffset: 0,\n miterLimit: 10,\n globalCompositeOperation: \"source-over\",\n imageSmoothingEnabled: true,\n direction: \"inherit\",\n save() {\n stack.push({ ...state, dash: [...state.dash] });\n },\n restore() {\n const previous = stack.pop();\n if (previous) state = previous;\n },\n setTransform(\n a:\n | number\n | { a: number; b: number; c: number; d: number; e: number; f: number },\n b = 0,\n c = 0,\n d = 1,\n e = 0,\n f = 0,\n ) {\n state.m =\n typeof a === \"object\"\n ? [a.a, a.b, a.c, a.d, a.e, a.f]\n : [a, b, c, d, e, f];\n },\n resetTransform() {\n state.m = [1, 0, 0, 1, 0, 0];\n },\n transform(\n a: number,\n b: number,\n c: number,\n d: number,\n e: number,\n f: number,\n ) {\n multiply([a, b, c, d, e, f]);\n },\n translate(x: number, y: number) {\n multiply([1, 0, 0, 1, x, y]);\n },\n scale(x: number, y: number) {\n multiply([x, 0, 0, y, 0, 0]);\n },\n rotate(angle: number) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n multiply([cos, sin, -sin, cos, 0, 0]);\n },\n beginPath() {\n paths = [];\n current = null;\n pen = null;\n },\n closePath() {\n if (!current) return;\n current.closed = true;\n const start = current;\n // drawing goes on from the start of the closed subpath\n current = { x: start.x, y: start.y, segs: [], closed: false };\n paths.push(current);\n },\n moveTo,\n lineTo,\n arc,\n ellipse(\n x: number,\n y: number,\n rx: number,\n ry: number,\n rotation: number,\n start: number,\n end: number,\n ccw = false,\n ) {\n if (Math.abs(rx - ry) < 1e-6 && rotation === 0) {\n arc(x, y, rx, start, end, ccw);\n return;\n }\n const sweep = arcSweep(start, end, ccw);\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const at = (t: number): [number, number] => {\n const a = start + sweep * t;\n const ex = rx * Math.cos(a);\n const ey = ry * Math.sin(a);\n return [x + ex * cos - ey * sin, y + ex * sin + ey * cos];\n };\n const [sx, sy] = at(0);\n if (!current) moveTo(sx, sy);\n else lineTo(sx, sy);\n curve(at, curveSteps(Math.abs(sweep) * Math.max(rx, ry)));\n },\n arcTo(x1: number, y1: number, x2: number, y2: number, r: number) {\n ensure(x1, y1);\n const [x0, y0] = pen ?? [x1, y1];\n const ax = x0 - x1;\n const ay = y0 - y1;\n const bx = x2 - x1;\n const by = y2 - y1;\n const la = Math.hypot(ax, ay);\n const lb = Math.hypot(bx, by);\n const cross = ax * by - ay * bx;\n if (r <= 0 || la < 1e-9 || lb < 1e-9 || Math.abs(cross) < 1e-9) {\n lineTo(x1, y1);\n return;\n }\n const cos = (ax * bx + ay * by) / (la * lb);\n const half = Math.acos(Math.max(-1, Math.min(1, cos))) / 2;\n const dist = r / Math.tan(half);\n const t0x = x1 + (ax / la) * dist;\n const t0y = y1 + (ay / la) * dist;\n const t1x = x1 + (bx / lb) * dist;\n const t1y = y1 + (by / lb) * dist;\n // center: along the bisector, at r / sin(half)\n const ux = ax / la + bx / lb;\n const uy = ay / la + by / lb;\n const lu = Math.hypot(ux, uy);\n const cd = r / Math.sin(half);\n const cx = x1 + (ux / lu) * cd;\n const cy = y1 + (uy / lu) * cd;\n lineTo(t0x, t0y);\n const a0 = Math.atan2(t0y - cy, t0x - cx);\n const a1 = Math.atan2(t1y - cy, t1x - cx);\n arc(cx, cy, r, a0, a1, cross > 0);\n },\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {\n ensure(cpx, cpy);\n const [x0, y0] = pen ?? [cpx, cpy];\n curve(\n (t) => {\n const u = 1 - t;\n return [\n u * u * x0 + 2 * u * t * cpx + t * t * x,\n u * u * y0 + 2 * u * t * cpy + t * t * y,\n ];\n },\n curveSteps(\n Math.hypot(cpx - x0, cpy - y0) + Math.hypot(x - cpx, y - cpy),\n ),\n );\n },\n bezierCurveTo(\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x: number,\n y: number,\n ) {\n ensure(c1x, c1y);\n const [x0, y0] = pen ?? [c1x, c1y];\n curve(\n (t) => {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const c = 3 * u * t * t;\n const d = t * t * t;\n return [\n a * x0 + b * c1x + c * c2x + d * x,\n a * y0 + b * c1y + c * c2y + d * y,\n ];\n },\n curveSteps(\n Math.hypot(c1x - x0, c1y - y0) +\n Math.hypot(c2x - c1x, c2y - c1y) +\n Math.hypot(x - c2x, y - c2y),\n ),\n );\n },\n rect(x: number, y: number, w: number, h: number) {\n moveTo(x, y);\n lineTo(x + w, y);\n lineTo(x + w, y + h);\n lineTo(x, y + h);\n context.closePath();\n },\n roundRect(x: number, y: number, w: number, h: number, radii?: unknown) {\n const r = Math.max(\n 0,\n Math.min(\n typeof radii === \"number\"\n ? radii\n : Array.isArray(radii) && typeof radii[0] === \"number\"\n ? radii[0]\n : 0,\n Math.abs(w) / 2,\n Math.abs(h) / 2,\n ),\n );\n if (r <= 0) {\n context.rect(x, y, w, h);\n return;\n }\n moveTo(x + r, y);\n context.arcTo(x + w, y, x + w, y + h, r);\n context.arcTo(x + w, y + h, x, y + h, r);\n context.arcTo(x, y + h, x, y, r);\n context.arcTo(x, y, x + w, y, r);\n context.closePath();\n },\n fill() {\n paint(\"fill\");\n },\n stroke() {\n paint(\"stroke\");\n },\n clip() {\n // views are not clipped by paths (the engine only clips decorations)\n },\n fillRect(x: number, y: number, w: number, h: number) {\n const saved = { paths, current, pen };\n paths = [];\n context.rect(x, y, w, h);\n paint(\"fill\");\n ({ paths, current, pen } = saved);\n },\n strokeRect(x: number, y: number, w: number, h: number) {\n const saved = { paths, current, pen };\n paths = [];\n context.rect(x, y, w, h);\n paint(\"stroke\");\n ({ paths, current, pen } = saved);\n },\n clearRect(x: number, y: number, w: number, h: number) {\n const [x0, y0] = map(x, y);\n const [x1, y1] = map(x + w, y + h);\n // clearing (most of) the canvas starts a frame\n if (x0 <= 1 && y0 <= 1 && x1 - x0 > 1 && y1 - y0 > 1) {\n frame = [];\n pendingHalo = null;\n }\n },\n fillText(value: string, x: number, y: number, maxWidth?: number) {\n const op: TextOp = text(value, x, y, maxWidth);\n const halo = pendingHalo;\n pendingHalo = null;\n if (halo && halo.text === op.text && halo.x === op.x && halo.y === op.y) {\n const at = frame.indexOf(halo);\n if (at >= 0) frame.splice(at, 1);\n op.halo = halo.color;\n }\n frame.push(op);\n },\n strokeText(value: string, x: number, y: number, maxWidth?: number) {\n const op: TextOp = {\n ...text(value, x, y, maxWidth),\n color: state.stroke.color,\n };\n pendingHalo = op;\n frame.push(op);\n },\n measureText(value: string) {\n const width = measureChartText(String(value), state.font);\n const { size } = parseFont(state.font);\n return {\n width,\n actualBoundingBoxAscent: size * 0.8,\n actualBoundingBoxDescent: size * 0.2,\n actualBoundingBoxLeft: 0,\n actualBoundingBoxRight: width,\n fontBoundingBoxAscent: size * 0.9,\n fontBoundingBoxDescent: size * 0.25,\n };\n },\n setLineDash(segments: number[]) {\n state.dash = Array.isArray(segments)\n ? segments.filter((v) => Number.isFinite(v) && v >= 0)\n : [];\n },\n getLineDash() {\n return [...state.dash];\n },\n createLinearGradient(x0: number, y0: number, x1: number, y1: number) {\n const [ax, ay] = map(x0, y0);\n const [bx, by] = map(x1, y1);\n const gradient: Gradient = { x0: ax, y0: ay, x1: bx, y1: by, stops: [] };\n const recorded: RecordedGradient = {\n [GRADIENT]: gradient,\n addColorStop(offset: number, color: string) {\n gradient.stops.push({\n offset: clamp01(offset),\n color: parseColor(color),\n });\n gradient.stops.sort((p, q) => p.offset - q.offset);\n },\n };\n return recorded;\n },\n createRadialGradient(x0: number, y0: number) {\n // approximated by its colors along x\n return context.createLinearGradient(x0, y0, x0 + 1, y0);\n },\n createConicGradient(_angle: number, x: number, y: number) {\n return context.createLinearGradient(x, y, x + 1, y);\n },\n createPattern() {\n return null;\n },\n drawImage() {\n // not supported by views\n },\n isPointInPath() {\n return false;\n },\n isPointInStroke() {\n return false;\n },\n getTransform() {\n const [a, b, c, d, e, f] = state.m;\n return { a, b, c, d, e, f };\n },\n reset() {\n state = initial();\n stack.length = 0;\n paths = [];\n current = null;\n pen = null;\n frame = [];\n },\n };\n\n return {\n context,\n ops: () => frame,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"recorder.cjs","names":["measureChartText","require_measure","TAU","BLACK","clamp01","v","NAMED","parseColor","value","s","named","fn","parts","p","r","g","b","alphaText","hex","short","at","i","opaqueCss","c","cssWithAlpha","alpha","paintAt","paint","dx","dy","len2","t","x","y","stops","a","span","k","mix","u","FONT","parseFont","match","font","w","weight","GRADIENT","isGradient","toPaint","gradient","fromPaint","normalizeTextAlign","normalizeBaseline","arcSweep","ccw","end","start","createRecorder","frame","initial","state","stack","paths","current","pen","pendingHalo","map","d","e","f","scaleOf","rotationOf","multiply","n","moveTo","px","py","ensure","lineTo","q","arc","sweep","sx","sy","ex","ey","cx","cy","rot","curve","steps","point","curveSteps","length","list","copy","kind","shadow","text","size","maxWidth","context","previous","cos","angle","sin","rx","ry","rotation","x1","y1","x0","y0","ax","ay","bx","x2","by","y2","la","lb","cross","half","dist","t0x","t0y","t1x","t1y","ux","uy","lu","cd","a0","a1","cpx","cpy","c1x","c1y","c2x","c2y","h","radii","saved","op","halo","width","segments","offset","color"],"sources":["../../../../../native/src/components/ShapeChart/recorder.ts"],"sourcesContent":["// A Canvas2D context that records instead of painting. The shape chart\n// engine (@minerva/charts/canvas: layouts, animations, legend, tooltip,\n// hover dimming, events) draws its frames on it; ./geometry turns the\n// recorded fills, strokes and texts into views. Paths are stored in chart\n// pixels (the current transform applied); arcs stay arcs so that circles,\n// rings and sectors become exact rounded views.\n\nimport { measureChartText } from \"../Chart/measure\";\n\n/** A color: channels 0-255, alpha 0-1 (`raw`: a CSS color that could not be parsed) */\nexport interface Color {\n r: number;\n g: number;\n b: number;\n a: number;\n raw?: string;\n}\n\n/** A linear gradient in chart pixels */\nexport interface Gradient {\n x0: number;\n y0: number;\n x1: number;\n y1: number;\n stops: { offset: number; color: Color }[];\n}\n\n/** Fill or stroke style: a color, or a gradient (and its first color) */\nexport interface Paint {\n color: Color;\n gradient?: Gradient;\n}\n\n/** Straight segment to (x, y), or arc (implicitly joined by a segment to its start) */\n/** A quadratic curve (device coordinates) */\nexport interface Quad {\n from: [number, number];\n ctrl: [number, number];\n to: [number, number];\n}\n\nexport type Segment =\n /** `q`: the curve this segment flattens, if any */\n | { t: \"L\"; x: number; y: number; q?: Quad }\n | {\n t: \"A\";\n cx: number;\n cy: number;\n r: number;\n /** Start angle and end angle (`a1 - a0` is the signed sweep) */\n a0: number;\n a1: number;\n };\n\nexport interface Subpath {\n x: number;\n y: number;\n segs: Segment[];\n closed: boolean;\n}\n\nexport interface FillOp {\n kind: \"fill\";\n paths: Subpath[];\n paint: Paint;\n alpha: number;\n /** Drawn with a shadow */\n shadow: boolean;\n}\n\nexport interface StrokeOp {\n kind: \"stroke\";\n paths: Subpath[];\n paint: Paint;\n alpha: number;\n width: number;\n cap: \"butt\" | \"round\" | \"square\";\n join: \"round\" | \"bevel\" | \"miter\";\n dash: number[];\n}\n\nexport interface TextOp {\n kind: \"text\";\n text: string;\n x: number;\n y: number;\n size: number;\n weight: number;\n align: \"left\" | \"center\" | \"right\";\n baseline: \"top\" | \"middle\" | \"bottom\" | \"alphabetic\";\n color: Color;\n alpha: number;\n /** Rotation around (x, y), radians clockwise */\n rotate: number;\n maxWidth?: number;\n /** Outline color (`strokeText` under the same text) */\n halo?: Color;\n}\n\nexport type DrawOp = FillOp | StrokeOp | TextOp;\n\nconst TAU = Math.PI * 2;\nconst BLACK: Color = { r: 0, g: 0, b: 0, a: 1 };\n\nconst clamp01 = (v: number) => (v < 0 ? 0 : v > 1 ? 1 : v);\n\nconst NAMED: Record<string, Color> = {\n transparent: { r: 0, g: 0, b: 0, a: 0 },\n black: BLACK,\n white: { r: 255, g: 255, b: 255, a: 1 },\n};\n\n/** Parses the colors the engine produces: `rgba()`, `rgb()`, `#hex` */\nexport function parseColor(value: unknown): Color {\n if (typeof value !== \"string\") return BLACK;\n const s = value.trim().toLowerCase();\n const named = NAMED[s];\n if (named) return named;\n const fn = /^rgba?\\(([^)]*)\\)$/.exec(s);\n if (fn) {\n const parts = (fn[1] ?? \"\")\n .split(/[\\s,/]+/)\n .filter(Boolean)\n .map((p) => (p.endsWith(\"%\") ? (parseFloat(p) / 100) * 255 : +p));\n const [r = 0, g = 0, b = 0] = parts;\n let a = parts[3] ?? 1;\n const alphaText = (fn[1] ?? \"\").split(/[\\s,/]+/).filter(Boolean)[3];\n if (alphaText?.endsWith(\"%\")) a = parseFloat(alphaText) / 100;\n if ([r, g, b, a].every(Number.isFinite)) return { r, g, b, a: clamp01(a) };\n }\n const hex = /^#([0-9a-f]{3,8})$/.exec(s)?.[1];\n if (hex && hex.length !== 5 && hex.length !== 7) {\n const short = hex.length <= 4;\n const at = (i: number) =>\n short\n ? parseInt((hex[i] ?? \"f\") + (hex[i] ?? \"f\"), 16)\n : parseInt(hex.slice(i * 2, i * 2 + 2) || \"ff\", 16);\n const n = short ? hex.length : hex.length / 2;\n return { r: at(0), g: at(1), b: at(2), a: n === 4 ? at(3) / 255 : 1 };\n }\n return { r: 0, g: 0, b: 0, a: 1, raw: value };\n}\n\n/** Opaque CSS color (the alpha goes to an `opacity`) */\nexport const opaqueCss = (c: Color) =>\n c.raw ?? `rgb(${Math.round(c.r)}, ${Math.round(c.g)}, ${Math.round(c.b)})`;\n\n/** CSS color with an extra alpha */\nexport const cssWithAlpha = (c: Color, alpha: number) =>\n c.raw ??\n `rgba(${Math.round(c.r)}, ${Math.round(c.g)}, ${Math.round(c.b)}, ${+clamp01(c.a * alpha).toFixed(3)})`;\n\n/** Color of a paint at a point (gradients: projected on their axis) */\nexport function paintAt(paint: Paint, x: number, y: number): Color {\n const g = paint.gradient;\n if (!g || g.stops.length < 2) return paint.color;\n const dx = g.x1 - g.x0;\n const dy = g.y1 - g.y0;\n const len2 = dx * dx + dy * dy;\n const t = len2 > 0 ? clamp01(((x - g.x0) * dx + (y - g.y0) * dy) / len2) : 0;\n const stops = g.stops;\n let i = 0;\n while (i < stops.length - 2 && (stops[i + 1]?.offset ?? 1) < t) i++;\n const a = stops[i];\n const b = stops[i + 1];\n if (!a || !b) return paint.color;\n const span = b.offset - a.offset;\n const k = span > 0 ? clamp01((t - a.offset) / span) : 0;\n const mix = (u: number, v: number) => u + (v - u) * k;\n if (a.color.raw || b.color.raw) return k < 0.5 ? a.color : b.color;\n return {\n r: mix(a.color.r, b.color.r),\n g: mix(a.color.g, b.color.g),\n b: mix(a.color.b, b.color.b),\n a: mix(a.color.a, b.color.a),\n };\n}\n\ntype Matrix = [number, number, number, number, number, number];\n\ninterface State {\n m: Matrix;\n alpha: number;\n fill: Paint;\n stroke: Paint;\n lineWidth: number;\n cap: StrokeOp[\"cap\"];\n join: StrokeOp[\"join\"];\n font: string;\n align: TextOp[\"align\"];\n baseline: TextOp[\"baseline\"];\n dash: number[];\n shadowColor: string;\n shadowBlur: number;\n shadowOffsetX: number;\n shadowOffsetY: number;\n}\n\nconst FONT =\n /^\\s*(?:(?:italic|oblique|normal)\\s+)?(?:(\\d{3}|bold|normal)\\s+)?([\\d.]+)px/;\n\n/** Size (px) and weight of a CSS font */\nexport function parseFont(font: string): { size: number; weight: number } {\n const match = FONT.exec(font);\n const w = match?.[1];\n const weight = w === \"bold\" ? 700 : w && w !== \"normal\" ? +w : 400;\n return { size: match ? Number(match[2]) : 10, weight };\n}\n\nconst GRADIENT = Symbol(\"gradient\");\n\ninterface RecordedGradient {\n [GRADIENT]: Gradient;\n addColorStop(offset: number, color: string): void;\n}\n\nconst isGradient = (v: unknown): v is RecordedGradient =>\n typeof v === \"object\" && v !== null && GRADIENT in v;\n\nconst toPaint = (value: unknown): Paint => {\n if (isGradient(value)) {\n const gradient = value[GRADIENT];\n return { color: gradient.stops[0]?.color ?? BLACK, gradient };\n }\n return { color: parseColor(value) };\n};\n\nconst fromPaint = (paint: Paint): unknown =>\n paint.color.raw ??\n `rgba(${paint.color.r}, ${paint.color.g}, ${paint.color.b}, ${paint.color.a})`;\n\nconst normalizeTextAlign = (v: string): TextOp[\"align\"] =>\n v === \"center\" ? \"center\" : v === \"right\" || v === \"end\" ? \"right\" : \"left\";\n\nconst normalizeBaseline = (v: string): TextOp[\"baseline\"] =>\n v === \"top\" || v === \"hanging\"\n ? \"top\"\n : v === \"middle\"\n ? \"middle\"\n : v === \"bottom\" || v === \"ideographic\"\n ? \"bottom\"\n : \"alphabetic\";\n\n/** Signed sweep of a canvas `arc()` */\nexport function arcSweep(start: number, end: number, ccw: boolean): number {\n if (!ccw) {\n if (end - start >= TAU) return TAU;\n let s = (end - start) % TAU;\n if (s < 0) s += TAU;\n return s;\n }\n if (start - end >= TAU) return -TAU;\n let s = (start - end) % TAU;\n if (s < 0) s += TAU;\n return -s;\n}\n\nexport interface Recorder {\n /** The 2D context handed to the engine */\n readonly context: unknown;\n /** Operations of the last frame (a new array per frame) */\n ops(): DrawOp[];\n}\n\n/**\n * Records the drawing calls of a Canvas2D context. `clearRect` of the whole\n * canvas starts a new frame.\n */\nexport function createRecorder(): Recorder {\n let frame: DrawOp[] = [];\n const initial = (): State => ({\n m: [1, 0, 0, 1, 0, 0],\n alpha: 1,\n fill: { color: BLACK },\n stroke: { color: BLACK },\n lineWidth: 1,\n cap: \"butt\",\n join: \"miter\",\n font: \"10px sans-serif\",\n align: \"left\",\n baseline: \"alphabetic\",\n dash: [],\n shadowColor: \"rgba(0, 0, 0, 0)\",\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n });\n let state = initial();\n const stack: State[] = [];\n let paths: Subpath[] = [];\n let current: Subpath | null = null;\n let pen: [number, number] | null = null;\n let pendingHalo: TextOp | null = null;\n\n const map = (x: number, y: number): [number, number] => {\n const [a, b, c, d, e, f] = state.m;\n return [a * x + c * y + e, b * x + d * y + f];\n };\n /** Uniform scale and rotation of the transform */\n const scaleOf = () => {\n const [a, b, c, d] = state.m;\n return Math.sqrt(Math.abs(a * d - b * c)) || 0;\n };\n const rotationOf = () => Math.atan2(state.m[1], state.m[0]);\n const multiply = (n: Matrix) => {\n const [a, b, c, d, e, f] = state.m;\n state.m = [\n a * n[0] + c * n[1],\n b * n[0] + d * n[1],\n a * n[2] + c * n[3],\n b * n[2] + d * n[3],\n a * n[4] + c * n[5] + e,\n b * n[4] + d * n[5] + f,\n ];\n };\n\n const moveTo = (x: number, y: number) => {\n const [px, py] = map(x, y);\n current = { x: px, y: py, segs: [], closed: false };\n paths.push(current);\n pen = [x, y];\n };\n const ensure = (x: number, y: number) => {\n if (!current) moveTo(x, y);\n };\n const lineTo = (x: number, y: number, q?: Quad) => {\n if (!current) {\n moveTo(x, y);\n return;\n }\n const [px, py] = map(x, y);\n current.segs.push(\n q ? { t: \"L\", x: px, y: py, q } : { t: \"L\", x: px, y: py },\n );\n pen = [x, y];\n };\n const arc = (\n x: number,\n y: number,\n r: number,\n start: number,\n end: number,\n ccw = false,\n ) => {\n const sweep = arcSweep(start, end, ccw);\n const sx = x + r * Math.cos(start);\n const sy = y + r * Math.sin(start);\n const ex = x + r * Math.cos(start + sweep);\n const ey = y + r * Math.sin(start + sweep);\n if (!current) moveTo(sx, sy);\n if (r <= 0 || sweep === 0) {\n lineTo(sx, sy);\n return;\n }\n const [cx, cy] = map(x, y);\n const rot = rotationOf();\n current?.segs.push({\n t: \"A\",\n cx,\n cy,\n r: r * scaleOf(),\n a0: start + rot,\n a1: start + sweep + rot,\n });\n pen = [ex, ey];\n };\n const curve = (\n point: (t: number) => [number, number],\n steps: number,\n q?: Quad,\n ) => {\n for (let i = 1; i <= steps; i++) {\n const [x, y] = point(i / steps);\n lineTo(x, y, q);\n }\n };\n /** Segments of a flattened curve: ~6px each, 2 for the small corner roundings */\n const curveSteps = (length: number) =>\n Math.max(2, Math.min(32, Math.ceil((length * scaleOf()) / 6)));\n\n const paint = (kind: \"fill\" | \"stroke\") => {\n const list = paths.filter((p) => p.segs.length || p.closed);\n if (!list.length) return;\n // a copy: the engine may keep drawing on the same path\n const copy = list.map((p) => ({ ...p, segs: [...p.segs] }));\n if (kind === \"fill\") {\n const shadow =\n state.shadowBlur > 0 &&\n parseColor(state.shadowColor).a > 0 &&\n !parseColor(state.shadowColor).raw;\n frame.push({\n kind: \"fill\",\n paths: copy,\n paint: state.fill,\n alpha: state.alpha,\n shadow,\n });\n } else {\n frame.push({\n kind: \"stroke\",\n paths: copy,\n paint: state.stroke,\n alpha: state.alpha,\n width: state.lineWidth * scaleOf(),\n cap: state.cap,\n join: state.join,\n dash: state.dash.map((v) => v * scaleOf()),\n });\n }\n };\n\n const text = (value: string, x: number, y: number, maxWidth?: number) => {\n const [px, py] = map(x, y);\n const { size, weight } = parseFont(state.font);\n const s = scaleOf();\n return {\n kind: \"text\" as const,\n text: String(value),\n x: px,\n y: py,\n size: size * s,\n weight,\n align: state.align,\n baseline: state.baseline,\n color: state.fill.color,\n alpha: state.alpha,\n rotate: rotationOf(),\n maxWidth:\n maxWidth !== undefined && Number.isFinite(maxWidth)\n ? maxWidth * s\n : undefined,\n };\n };\n\n const context = {\n canvas: null,\n get globalAlpha() {\n return state.alpha;\n },\n set globalAlpha(v: number) {\n if (Number.isFinite(v)) state.alpha = clamp01(v);\n },\n get fillStyle(): unknown {\n return state.fill.gradient ? null : fromPaint(state.fill);\n },\n set fillStyle(v: unknown) {\n state.fill = toPaint(v);\n },\n get strokeStyle(): unknown {\n return state.stroke.gradient ? null : fromPaint(state.stroke);\n },\n set strokeStyle(v: unknown) {\n state.stroke = toPaint(v);\n },\n get lineWidth() {\n return state.lineWidth;\n },\n set lineWidth(v: number) {\n if (Number.isFinite(v) && v > 0) state.lineWidth = v;\n },\n get lineCap() {\n return state.cap;\n },\n set lineCap(v: string) {\n state.cap = v === \"round\" ? \"round\" : v === \"square\" ? \"square\" : \"butt\";\n },\n get lineJoin() {\n return state.join;\n },\n set lineJoin(v: string) {\n state.join = v === \"round\" ? \"round\" : v === \"bevel\" ? \"bevel\" : \"miter\";\n },\n get font() {\n return state.font;\n },\n set font(v: string) {\n state.font = v;\n },\n get textAlign() {\n return state.align;\n },\n set textAlign(v: string) {\n state.align = normalizeTextAlign(v);\n },\n get textBaseline() {\n return state.baseline;\n },\n set textBaseline(v: string) {\n state.baseline = normalizeBaseline(v);\n },\n get shadowColor() {\n return state.shadowColor;\n },\n set shadowColor(v: string) {\n state.shadowColor = v;\n },\n get shadowBlur() {\n return state.shadowBlur;\n },\n set shadowBlur(v: number) {\n state.shadowBlur = v;\n },\n get shadowOffsetX() {\n return state.shadowOffsetX;\n },\n set shadowOffsetX(v: number) {\n state.shadowOffsetX = v;\n },\n get shadowOffsetY() {\n return state.shadowOffsetY;\n },\n set shadowOffsetY(v: number) {\n state.shadowOffsetY = v;\n },\n lineDashOffset: 0,\n miterLimit: 10,\n globalCompositeOperation: \"source-over\",\n imageSmoothingEnabled: true,\n direction: \"inherit\",\n save() {\n stack.push({ ...state, dash: [...state.dash] });\n },\n restore() {\n const previous = stack.pop();\n if (previous) state = previous;\n },\n setTransform(\n a:\n | number\n | { a: number; b: number; c: number; d: number; e: number; f: number },\n b = 0,\n c = 0,\n d = 1,\n e = 0,\n f = 0,\n ) {\n state.m =\n typeof a === \"object\"\n ? [a.a, a.b, a.c, a.d, a.e, a.f]\n : [a, b, c, d, e, f];\n },\n resetTransform() {\n state.m = [1, 0, 0, 1, 0, 0];\n },\n transform(\n a: number,\n b: number,\n c: number,\n d: number,\n e: number,\n f: number,\n ) {\n multiply([a, b, c, d, e, f]);\n },\n translate(x: number, y: number) {\n multiply([1, 0, 0, 1, x, y]);\n },\n scale(x: number, y: number) {\n multiply([x, 0, 0, y, 0, 0]);\n },\n rotate(angle: number) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n multiply([cos, sin, -sin, cos, 0, 0]);\n },\n beginPath() {\n paths = [];\n current = null;\n pen = null;\n },\n closePath() {\n if (!current) return;\n current.closed = true;\n const start = current;\n // drawing goes on from the start of the closed subpath\n current = { x: start.x, y: start.y, segs: [], closed: false };\n paths.push(current);\n },\n moveTo,\n lineTo,\n arc,\n ellipse(\n x: number,\n y: number,\n rx: number,\n ry: number,\n rotation: number,\n start: number,\n end: number,\n ccw = false,\n ) {\n if (Math.abs(rx - ry) < 1e-6 && rotation === 0) {\n arc(x, y, rx, start, end, ccw);\n return;\n }\n const sweep = arcSweep(start, end, ccw);\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const at = (t: number): [number, number] => {\n const a = start + sweep * t;\n const ex = rx * Math.cos(a);\n const ey = ry * Math.sin(a);\n return [x + ex * cos - ey * sin, y + ex * sin + ey * cos];\n };\n const [sx, sy] = at(0);\n if (!current) moveTo(sx, sy);\n else lineTo(sx, sy);\n curve(at, curveSteps(Math.abs(sweep) * Math.max(rx, ry)));\n },\n arcTo(x1: number, y1: number, x2: number, y2: number, r: number) {\n ensure(x1, y1);\n const [x0, y0] = pen ?? [x1, y1];\n const ax = x0 - x1;\n const ay = y0 - y1;\n const bx = x2 - x1;\n const by = y2 - y1;\n const la = Math.hypot(ax, ay);\n const lb = Math.hypot(bx, by);\n const cross = ax * by - ay * bx;\n if (r <= 0 || la < 1e-9 || lb < 1e-9 || Math.abs(cross) < 1e-9) {\n lineTo(x1, y1);\n return;\n }\n const cos = (ax * bx + ay * by) / (la * lb);\n const half = Math.acos(Math.max(-1, Math.min(1, cos))) / 2;\n const dist = r / Math.tan(half);\n const t0x = x1 + (ax / la) * dist;\n const t0y = y1 + (ay / la) * dist;\n const t1x = x1 + (bx / lb) * dist;\n const t1y = y1 + (by / lb) * dist;\n // center: along the bisector, at r / sin(half)\n const ux = ax / la + bx / lb;\n const uy = ay / la + by / lb;\n const lu = Math.hypot(ux, uy);\n const cd = r / Math.sin(half);\n const cx = x1 + (ux / lu) * cd;\n const cy = y1 + (uy / lu) * cd;\n lineTo(t0x, t0y);\n const a0 = Math.atan2(t0y - cy, t0x - cx);\n const a1 = Math.atan2(t1y - cy, t1x - cx);\n arc(cx, cy, r, a0, a1, cross > 0);\n },\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {\n ensure(cpx, cpy);\n const [x0, y0] = pen ?? [cpx, cpy];\n curve(\n (t) => {\n const u = 1 - t;\n return [\n u * u * x0 + 2 * u * t * cpx + t * t * x,\n u * u * y0 + 2 * u * t * cpy + t * t * y,\n ];\n },\n curveSteps(\n Math.hypot(cpx - x0, cpy - y0) + Math.hypot(x - cpx, y - cpy),\n ),\n { from: map(x0, y0), ctrl: map(cpx, cpy), to: map(x, y) },\n );\n },\n bezierCurveTo(\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x: number,\n y: number,\n ) {\n ensure(c1x, c1y);\n const [x0, y0] = pen ?? [c1x, c1y];\n curve(\n (t) => {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const c = 3 * u * t * t;\n const d = t * t * t;\n return [\n a * x0 + b * c1x + c * c2x + d * x,\n a * y0 + b * c1y + c * c2y + d * y,\n ];\n },\n curveSteps(\n Math.hypot(c1x - x0, c1y - y0) +\n Math.hypot(c2x - c1x, c2y - c1y) +\n Math.hypot(x - c2x, y - c2y),\n ),\n );\n },\n rect(x: number, y: number, w: number, h: number) {\n moveTo(x, y);\n lineTo(x + w, y);\n lineTo(x + w, y + h);\n lineTo(x, y + h);\n context.closePath();\n },\n roundRect(x: number, y: number, w: number, h: number, radii?: unknown) {\n const r = Math.max(\n 0,\n Math.min(\n typeof radii === \"number\"\n ? radii\n : Array.isArray(radii) && typeof radii[0] === \"number\"\n ? radii[0]\n : 0,\n Math.abs(w) / 2,\n Math.abs(h) / 2,\n ),\n );\n if (r <= 0) {\n context.rect(x, y, w, h);\n return;\n }\n moveTo(x + r, y);\n context.arcTo(x + w, y, x + w, y + h, r);\n context.arcTo(x + w, y + h, x, y + h, r);\n context.arcTo(x, y + h, x, y, r);\n context.arcTo(x, y, x + w, y, r);\n context.closePath();\n },\n fill() {\n paint(\"fill\");\n },\n stroke() {\n paint(\"stroke\");\n },\n clip() {\n // views are not clipped by paths (the engine only clips decorations)\n },\n fillRect(x: number, y: number, w: number, h: number) {\n const saved = { paths, current, pen };\n paths = [];\n context.rect(x, y, w, h);\n paint(\"fill\");\n ({ paths, current, pen } = saved);\n },\n strokeRect(x: number, y: number, w: number, h: number) {\n const saved = { paths, current, pen };\n paths = [];\n context.rect(x, y, w, h);\n paint(\"stroke\");\n ({ paths, current, pen } = saved);\n },\n clearRect(x: number, y: number, w: number, h: number) {\n const [x0, y0] = map(x, y);\n const [x1, y1] = map(x + w, y + h);\n // clearing (most of) the canvas starts a frame\n if (x0 <= 1 && y0 <= 1 && x1 - x0 > 1 && y1 - y0 > 1) {\n frame = [];\n pendingHalo = null;\n }\n },\n fillText(value: string, x: number, y: number, maxWidth?: number) {\n const op: TextOp = text(value, x, y, maxWidth);\n const halo = pendingHalo;\n pendingHalo = null;\n if (halo && halo.text === op.text && halo.x === op.x && halo.y === op.y) {\n const at = frame.indexOf(halo);\n if (at >= 0) frame.splice(at, 1);\n op.halo = halo.color;\n }\n frame.push(op);\n },\n strokeText(value: string, x: number, y: number, maxWidth?: number) {\n const op: TextOp = {\n ...text(value, x, y, maxWidth),\n color: state.stroke.color,\n };\n pendingHalo = op;\n frame.push(op);\n },\n measureText(value: string) {\n const width = measureChartText(String(value), state.font);\n const { size } = parseFont(state.font);\n return {\n width,\n actualBoundingBoxAscent: size * 0.8,\n actualBoundingBoxDescent: size * 0.2,\n actualBoundingBoxLeft: 0,\n actualBoundingBoxRight: width,\n fontBoundingBoxAscent: size * 0.9,\n fontBoundingBoxDescent: size * 0.25,\n };\n },\n setLineDash(segments: number[]) {\n state.dash = Array.isArray(segments)\n ? segments.filter((v) => Number.isFinite(v) && v >= 0)\n : [];\n },\n getLineDash() {\n return [...state.dash];\n },\n createLinearGradient(x0: number, y0: number, x1: number, y1: number) {\n const [ax, ay] = map(x0, y0);\n const [bx, by] = map(x1, y1);\n const gradient: Gradient = { x0: ax, y0: ay, x1: bx, y1: by, stops: [] };\n const recorded: RecordedGradient = {\n [GRADIENT]: gradient,\n addColorStop(offset: number, color: string) {\n gradient.stops.push({\n offset: clamp01(offset),\n color: parseColor(color),\n });\n gradient.stops.sort((p, q) => p.offset - q.offset);\n },\n };\n return recorded;\n },\n createRadialGradient(x0: number, y0: number) {\n // approximated by its colors along x\n return context.createLinearGradient(x0, y0, x0 + 1, y0);\n },\n createConicGradient(_angle: number, x: number, y: number) {\n return context.createLinearGradient(x, y, x + 1, y);\n },\n createPattern() {\n return null;\n },\n drawImage() {\n // not supported by views\n },\n isPointInPath() {\n return false;\n },\n isPointInStroke() {\n return false;\n },\n getTransform() {\n const [a, b, c, d, e, f] = state.m;\n return { a, b, c, d, e, f };\n },\n reset() {\n state = initial();\n stack.length = 0;\n paths = [];\n current = null;\n pen = null;\n frame = [];\n },\n };\n\n return {\n context,\n ops: () => frame,\n };\n}\n"],"mappings":"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"}
@@ -23,10 +23,19 @@ export interface Paint {
23
23
  gradient?: Gradient;
24
24
  }
25
25
  /** Straight segment to (x, y), or arc (implicitly joined by a segment to its start) */
26
- export type Segment = {
26
+ /** A quadratic curve (device coordinates) */
27
+ export interface Quad {
28
+ from: [number, number];
29
+ ctrl: [number, number];
30
+ to: [number, number];
31
+ }
32
+ export type Segment =
33
+ /** `q`: the curve this segment flattens, if any */
34
+ {
27
35
  t: "L";
28
36
  x: number;
29
37
  y: number;
38
+ q?: Quad;
30
39
  } | {
31
40
  t: "A";
32
41
  cx: number;
@@ -23,10 +23,19 @@ export interface Paint {
23
23
  gradient?: Gradient;
24
24
  }
25
25
  /** Straight segment to (x, y), or arc (implicitly joined by a segment to its start) */
26
- export type Segment = {
26
+ /** A quadratic curve (device coordinates) */
27
+ export interface Quad {
28
+ from: [number, number];
29
+ ctrl: [number, number];
30
+ to: [number, number];
31
+ }
32
+ export type Segment =
33
+ /** `q`: the curve this segment flattens, if any */
34
+ {
27
35
  t: "L";
28
36
  x: number;
29
37
  y: number;
38
+ q?: Quad;
30
39
  } | {
31
40
  t: "A";
32
41
  cx: number;
@@ -151,16 +151,21 @@ function v() {
151
151
  }, c.push(l), f = [e, t];
152
152
  }, w = (e, t) => {
153
153
  l || C(e, t);
154
- }, T = (e, t) => {
154
+ }, T = (e, t, n) => {
155
155
  if (!l) {
156
156
  C(e, t);
157
157
  return;
158
158
  }
159
- let [n, r] = y(e, t);
160
- l.segs.push({
159
+ let [r, i] = y(e, t);
160
+ l.segs.push(n ? {
161
161
  t: "L",
162
- x: n,
163
- y: r
162
+ x: r,
163
+ y: i,
164
+ q: n
165
+ } : {
166
+ t: "L",
167
+ x: r,
168
+ y: i
164
169
  }), f = [e, t];
165
170
  }, E = (e, t, n, r, i, a = !1) => {
166
171
  let o = _(r, i, a), s = e + n * Math.cos(r), c = t + n * Math.sin(r), u = e + n * Math.cos(r + o), d = t + n * Math.sin(r + o);
@@ -177,10 +182,10 @@ function v() {
177
182
  a0: r + h,
178
183
  a1: r + o + h
179
184
  }), f = [u, d];
180
- }, D = (e, t) => {
181
- for (let n = 1; n <= t; n++) {
182
- let [r, i] = e(n / t);
183
- T(r, i);
185
+ }, D = (e, t, n) => {
186
+ for (let r = 1; r <= t; r++) {
187
+ let [i, a] = e(r / t);
188
+ T(i, a, n);
184
189
  }
185
190
  }, O = (e) => Math.max(2, Math.min(32, Math.ceil(e * b() / 6))), k = (e) => {
186
191
  let n = c.filter((e) => e.segs.length || e.closed);
@@ -433,7 +438,11 @@ function v() {
433
438
  D((o) => {
434
439
  let s = 1 - o;
435
440
  return [s * s * i + 2 * s * o * e + o * o * n, s * s * a + 2 * s * o * t + o * o * r];
436
- }, O(Math.hypot(e - i, t - a) + Math.hypot(n - e, r - t)));
441
+ }, O(Math.hypot(e - i, t - a) + Math.hypot(n - e, r - t)), {
442
+ from: y(i, a),
443
+ ctrl: y(e, t),
444
+ to: y(n, r)
445
+ });
437
446
  },
438
447
  bezierCurveTo(e, t, n, r, i, a) {
439
448
  w(e, t);
@@ -1 +1 @@
1
- {"version":3,"file":"recorder.js","names":["TAU","BLACK","clamp01","v","NAMED","parseColor","value","s","named","fn","parts","p","r","g","b","alphaText","hex","short","at","i","opaqueCss","c","cssWithAlpha","alpha","paintAt","paint","dx","dy","len2","t","x","y","stops","a","span","k","mix","u","FONT","parseFont","match","font","w","weight","GRADIENT","isGradient","toPaint","gradient","fromPaint","normalizeTextAlign","normalizeBaseline","arcSweep","ccw","end","start","createRecorder","frame","initial","state","stack","paths","current","pen","pendingHalo","map","d","e","f","scaleOf","rotationOf","multiply","n","moveTo","px","py","ensure","lineTo","arc","sweep","sx","sy","ex","ey","cx","cy","rot","curve","steps","point","curveSteps","length","list","copy","kind","shadow","text","size","maxWidth","context","previous","cos","angle","sin","rx","ry","rotation","x1","y1","x0","y0","ax","ay","bx","x2","by","y2","la","lb","cross","half","dist","t0x","t0y","t1x","t1y","ux","uy","lu","cd","a0","a1","cpx","cpy","c1x","c1y","c2x","c2y","h","radii","saved","op","halo","width","measureChartText","segments","offset","color","q"],"sources":["../../../../../native/src/components/ShapeChart/recorder.ts"],"sourcesContent":["// A Canvas2D context that records instead of painting. The shape chart\n// engine (@minerva/charts/canvas: layouts, animations, legend, tooltip,\n// hover dimming, events) draws its frames on it; ./geometry turns the\n// recorded fills, strokes and texts into views. Paths are stored in chart\n// pixels (the current transform applied); arcs stay arcs so that circles,\n// rings and sectors become exact rounded views.\n\nimport { measureChartText } from \"../Chart/measure\";\n\n/** A color: channels 0-255, alpha 0-1 (`raw`: a CSS color that could not be parsed) */\nexport interface Color {\n r: number;\n g: number;\n b: number;\n a: number;\n raw?: string;\n}\n\n/** A linear gradient in chart pixels */\nexport interface Gradient {\n x0: number;\n y0: number;\n x1: number;\n y1: number;\n stops: { offset: number; color: Color }[];\n}\n\n/** Fill or stroke style: a color, or a gradient (and its first color) */\nexport interface Paint {\n color: Color;\n gradient?: Gradient;\n}\n\n/** Straight segment to (x, y), or arc (implicitly joined by a segment to its start) */\nexport type Segment =\n | { t: \"L\"; x: number; y: number }\n | {\n t: \"A\";\n cx: number;\n cy: number;\n r: number;\n /** Start angle and end angle (`a1 - a0` is the signed sweep) */\n a0: number;\n a1: number;\n };\n\nexport interface Subpath {\n x: number;\n y: number;\n segs: Segment[];\n closed: boolean;\n}\n\nexport interface FillOp {\n kind: \"fill\";\n paths: Subpath[];\n paint: Paint;\n alpha: number;\n /** Drawn with a shadow */\n shadow: boolean;\n}\n\nexport interface StrokeOp {\n kind: \"stroke\";\n paths: Subpath[];\n paint: Paint;\n alpha: number;\n width: number;\n cap: \"butt\" | \"round\" | \"square\";\n join: \"round\" | \"bevel\" | \"miter\";\n dash: number[];\n}\n\nexport interface TextOp {\n kind: \"text\";\n text: string;\n x: number;\n y: number;\n size: number;\n weight: number;\n align: \"left\" | \"center\" | \"right\";\n baseline: \"top\" | \"middle\" | \"bottom\" | \"alphabetic\";\n color: Color;\n alpha: number;\n /** Rotation around (x, y), radians clockwise */\n rotate: number;\n maxWidth?: number;\n /** Outline color (`strokeText` under the same text) */\n halo?: Color;\n}\n\nexport type DrawOp = FillOp | StrokeOp | TextOp;\n\nconst TAU = Math.PI * 2;\nconst BLACK: Color = { r: 0, g: 0, b: 0, a: 1 };\n\nconst clamp01 = (v: number) => (v < 0 ? 0 : v > 1 ? 1 : v);\n\nconst NAMED: Record<string, Color> = {\n transparent: { r: 0, g: 0, b: 0, a: 0 },\n black: BLACK,\n white: { r: 255, g: 255, b: 255, a: 1 },\n};\n\n/** Parses the colors the engine produces: `rgba()`, `rgb()`, `#hex` */\nexport function parseColor(value: unknown): Color {\n if (typeof value !== \"string\") return BLACK;\n const s = value.trim().toLowerCase();\n const named = NAMED[s];\n if (named) return named;\n const fn = /^rgba?\\(([^)]*)\\)$/.exec(s);\n if (fn) {\n const parts = (fn[1] ?? \"\")\n .split(/[\\s,/]+/)\n .filter(Boolean)\n .map((p) => (p.endsWith(\"%\") ? (parseFloat(p) / 100) * 255 : +p));\n const [r = 0, g = 0, b = 0] = parts;\n let a = parts[3] ?? 1;\n const alphaText = (fn[1] ?? \"\").split(/[\\s,/]+/).filter(Boolean)[3];\n if (alphaText?.endsWith(\"%\")) a = parseFloat(alphaText) / 100;\n if ([r, g, b, a].every(Number.isFinite)) return { r, g, b, a: clamp01(a) };\n }\n const hex = /^#([0-9a-f]{3,8})$/.exec(s)?.[1];\n if (hex && hex.length !== 5 && hex.length !== 7) {\n const short = hex.length <= 4;\n const at = (i: number) =>\n short\n ? parseInt((hex[i] ?? \"f\") + (hex[i] ?? \"f\"), 16)\n : parseInt(hex.slice(i * 2, i * 2 + 2) || \"ff\", 16);\n const n = short ? hex.length : hex.length / 2;\n return { r: at(0), g: at(1), b: at(2), a: n === 4 ? at(3) / 255 : 1 };\n }\n return { r: 0, g: 0, b: 0, a: 1, raw: value };\n}\n\n/** Opaque CSS color (the alpha goes to an `opacity`) */\nexport const opaqueCss = (c: Color) =>\n c.raw ?? `rgb(${Math.round(c.r)}, ${Math.round(c.g)}, ${Math.round(c.b)})`;\n\n/** CSS color with an extra alpha */\nexport const cssWithAlpha = (c: Color, alpha: number) =>\n c.raw ??\n `rgba(${Math.round(c.r)}, ${Math.round(c.g)}, ${Math.round(c.b)}, ${+clamp01(c.a * alpha).toFixed(3)})`;\n\n/** Color of a paint at a point (gradients: projected on their axis) */\nexport function paintAt(paint: Paint, x: number, y: number): Color {\n const g = paint.gradient;\n if (!g || g.stops.length < 2) return paint.color;\n const dx = g.x1 - g.x0;\n const dy = g.y1 - g.y0;\n const len2 = dx * dx + dy * dy;\n const t = len2 > 0 ? clamp01(((x - g.x0) * dx + (y - g.y0) * dy) / len2) : 0;\n const stops = g.stops;\n let i = 0;\n while (i < stops.length - 2 && (stops[i + 1]?.offset ?? 1) < t) i++;\n const a = stops[i];\n const b = stops[i + 1];\n if (!a || !b) return paint.color;\n const span = b.offset - a.offset;\n const k = span > 0 ? clamp01((t - a.offset) / span) : 0;\n const mix = (u: number, v: number) => u + (v - u) * k;\n if (a.color.raw || b.color.raw) return k < 0.5 ? a.color : b.color;\n return {\n r: mix(a.color.r, b.color.r),\n g: mix(a.color.g, b.color.g),\n b: mix(a.color.b, b.color.b),\n a: mix(a.color.a, b.color.a),\n };\n}\n\ntype Matrix = [number, number, number, number, number, number];\n\ninterface State {\n m: Matrix;\n alpha: number;\n fill: Paint;\n stroke: Paint;\n lineWidth: number;\n cap: StrokeOp[\"cap\"];\n join: StrokeOp[\"join\"];\n font: string;\n align: TextOp[\"align\"];\n baseline: TextOp[\"baseline\"];\n dash: number[];\n shadowColor: string;\n shadowBlur: number;\n shadowOffsetX: number;\n shadowOffsetY: number;\n}\n\nconst FONT =\n /^\\s*(?:(?:italic|oblique|normal)\\s+)?(?:(\\d{3}|bold|normal)\\s+)?([\\d.]+)px/;\n\n/** Size (px) and weight of a CSS font */\nexport function parseFont(font: string): { size: number; weight: number } {\n const match = FONT.exec(font);\n const w = match?.[1];\n const weight = w === \"bold\" ? 700 : w && w !== \"normal\" ? +w : 400;\n return { size: match ? Number(match[2]) : 10, weight };\n}\n\nconst GRADIENT = Symbol(\"gradient\");\n\ninterface RecordedGradient {\n [GRADIENT]: Gradient;\n addColorStop(offset: number, color: string): void;\n}\n\nconst isGradient = (v: unknown): v is RecordedGradient =>\n typeof v === \"object\" && v !== null && GRADIENT in v;\n\nconst toPaint = (value: unknown): Paint => {\n if (isGradient(value)) {\n const gradient = value[GRADIENT];\n return { color: gradient.stops[0]?.color ?? BLACK, gradient };\n }\n return { color: parseColor(value) };\n};\n\nconst fromPaint = (paint: Paint): unknown =>\n paint.color.raw ??\n `rgba(${paint.color.r}, ${paint.color.g}, ${paint.color.b}, ${paint.color.a})`;\n\nconst normalizeTextAlign = (v: string): TextOp[\"align\"] =>\n v === \"center\" ? \"center\" : v === \"right\" || v === \"end\" ? \"right\" : \"left\";\n\nconst normalizeBaseline = (v: string): TextOp[\"baseline\"] =>\n v === \"top\" || v === \"hanging\"\n ? \"top\"\n : v === \"middle\"\n ? \"middle\"\n : v === \"bottom\" || v === \"ideographic\"\n ? \"bottom\"\n : \"alphabetic\";\n\n/** Signed sweep of a canvas `arc()` */\nexport function arcSweep(start: number, end: number, ccw: boolean): number {\n if (!ccw) {\n if (end - start >= TAU) return TAU;\n let s = (end - start) % TAU;\n if (s < 0) s += TAU;\n return s;\n }\n if (start - end >= TAU) return -TAU;\n let s = (start - end) % TAU;\n if (s < 0) s += TAU;\n return -s;\n}\n\nexport interface Recorder {\n /** The 2D context handed to the engine */\n readonly context: unknown;\n /** Operations of the last frame (a new array per frame) */\n ops(): DrawOp[];\n}\n\n/**\n * Records the drawing calls of a Canvas2D context. `clearRect` of the whole\n * canvas starts a new frame.\n */\nexport function createRecorder(): Recorder {\n let frame: DrawOp[] = [];\n const initial = (): State => ({\n m: [1, 0, 0, 1, 0, 0],\n alpha: 1,\n fill: { color: BLACK },\n stroke: { color: BLACK },\n lineWidth: 1,\n cap: \"butt\",\n join: \"miter\",\n font: \"10px sans-serif\",\n align: \"left\",\n baseline: \"alphabetic\",\n dash: [],\n shadowColor: \"rgba(0, 0, 0, 0)\",\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n });\n let state = initial();\n const stack: State[] = [];\n let paths: Subpath[] = [];\n let current: Subpath | null = null;\n let pen: [number, number] | null = null;\n let pendingHalo: TextOp | null = null;\n\n const map = (x: number, y: number): [number, number] => {\n const [a, b, c, d, e, f] = state.m;\n return [a * x + c * y + e, b * x + d * y + f];\n };\n /** Uniform scale and rotation of the transform */\n const scaleOf = () => {\n const [a, b, c, d] = state.m;\n return Math.sqrt(Math.abs(a * d - b * c)) || 0;\n };\n const rotationOf = () => Math.atan2(state.m[1], state.m[0]);\n const multiply = (n: Matrix) => {\n const [a, b, c, d, e, f] = state.m;\n state.m = [\n a * n[0] + c * n[1],\n b * n[0] + d * n[1],\n a * n[2] + c * n[3],\n b * n[2] + d * n[3],\n a * n[4] + c * n[5] + e,\n b * n[4] + d * n[5] + f,\n ];\n };\n\n const moveTo = (x: number, y: number) => {\n const [px, py] = map(x, y);\n current = { x: px, y: py, segs: [], closed: false };\n paths.push(current);\n pen = [x, y];\n };\n const ensure = (x: number, y: number) => {\n if (!current) moveTo(x, y);\n };\n const lineTo = (x: number, y: number) => {\n if (!current) {\n moveTo(x, y);\n return;\n }\n const [px, py] = map(x, y);\n current.segs.push({ t: \"L\", x: px, y: py });\n pen = [x, y];\n };\n const arc = (\n x: number,\n y: number,\n r: number,\n start: number,\n end: number,\n ccw = false,\n ) => {\n const sweep = arcSweep(start, end, ccw);\n const sx = x + r * Math.cos(start);\n const sy = y + r * Math.sin(start);\n const ex = x + r * Math.cos(start + sweep);\n const ey = y + r * Math.sin(start + sweep);\n if (!current) moveTo(sx, sy);\n if (r <= 0 || sweep === 0) {\n lineTo(sx, sy);\n return;\n }\n const [cx, cy] = map(x, y);\n const rot = rotationOf();\n current?.segs.push({\n t: \"A\",\n cx,\n cy,\n r: r * scaleOf(),\n a0: start + rot,\n a1: start + sweep + rot,\n });\n pen = [ex, ey];\n };\n const curve = (point: (t: number) => [number, number], steps: number) => {\n for (let i = 1; i <= steps; i++) {\n const [x, y] = point(i / steps);\n lineTo(x, y);\n }\n };\n /** Segments of a flattened curve: ~6px each, 2 for the small corner roundings */\n const curveSteps = (length: number) =>\n Math.max(2, Math.min(32, Math.ceil((length * scaleOf()) / 6)));\n\n const paint = (kind: \"fill\" | \"stroke\") => {\n const list = paths.filter((p) => p.segs.length || p.closed);\n if (!list.length) return;\n // a copy: the engine may keep drawing on the same path\n const copy = list.map((p) => ({ ...p, segs: [...p.segs] }));\n if (kind === \"fill\") {\n const shadow =\n state.shadowBlur > 0 &&\n parseColor(state.shadowColor).a > 0 &&\n !parseColor(state.shadowColor).raw;\n frame.push({\n kind: \"fill\",\n paths: copy,\n paint: state.fill,\n alpha: state.alpha,\n shadow,\n });\n } else {\n frame.push({\n kind: \"stroke\",\n paths: copy,\n paint: state.stroke,\n alpha: state.alpha,\n width: state.lineWidth * scaleOf(),\n cap: state.cap,\n join: state.join,\n dash: state.dash.map((v) => v * scaleOf()),\n });\n }\n };\n\n const text = (value: string, x: number, y: number, maxWidth?: number) => {\n const [px, py] = map(x, y);\n const { size, weight } = parseFont(state.font);\n const s = scaleOf();\n return {\n kind: \"text\" as const,\n text: String(value),\n x: px,\n y: py,\n size: size * s,\n weight,\n align: state.align,\n baseline: state.baseline,\n color: state.fill.color,\n alpha: state.alpha,\n rotate: rotationOf(),\n maxWidth:\n maxWidth !== undefined && Number.isFinite(maxWidth)\n ? maxWidth * s\n : undefined,\n };\n };\n\n const context = {\n canvas: null,\n get globalAlpha() {\n return state.alpha;\n },\n set globalAlpha(v: number) {\n if (Number.isFinite(v)) state.alpha = clamp01(v);\n },\n get fillStyle(): unknown {\n return state.fill.gradient ? null : fromPaint(state.fill);\n },\n set fillStyle(v: unknown) {\n state.fill = toPaint(v);\n },\n get strokeStyle(): unknown {\n return state.stroke.gradient ? null : fromPaint(state.stroke);\n },\n set strokeStyle(v: unknown) {\n state.stroke = toPaint(v);\n },\n get lineWidth() {\n return state.lineWidth;\n },\n set lineWidth(v: number) {\n if (Number.isFinite(v) && v > 0) state.lineWidth = v;\n },\n get lineCap() {\n return state.cap;\n },\n set lineCap(v: string) {\n state.cap = v === \"round\" ? \"round\" : v === \"square\" ? \"square\" : \"butt\";\n },\n get lineJoin() {\n return state.join;\n },\n set lineJoin(v: string) {\n state.join = v === \"round\" ? \"round\" : v === \"bevel\" ? \"bevel\" : \"miter\";\n },\n get font() {\n return state.font;\n },\n set font(v: string) {\n state.font = v;\n },\n get textAlign() {\n return state.align;\n },\n set textAlign(v: string) {\n state.align = normalizeTextAlign(v);\n },\n get textBaseline() {\n return state.baseline;\n },\n set textBaseline(v: string) {\n state.baseline = normalizeBaseline(v);\n },\n get shadowColor() {\n return state.shadowColor;\n },\n set shadowColor(v: string) {\n state.shadowColor = v;\n },\n get shadowBlur() {\n return state.shadowBlur;\n },\n set shadowBlur(v: number) {\n state.shadowBlur = v;\n },\n get shadowOffsetX() {\n return state.shadowOffsetX;\n },\n set shadowOffsetX(v: number) {\n state.shadowOffsetX = v;\n },\n get shadowOffsetY() {\n return state.shadowOffsetY;\n },\n set shadowOffsetY(v: number) {\n state.shadowOffsetY = v;\n },\n lineDashOffset: 0,\n miterLimit: 10,\n globalCompositeOperation: \"source-over\",\n imageSmoothingEnabled: true,\n direction: \"inherit\",\n save() {\n stack.push({ ...state, dash: [...state.dash] });\n },\n restore() {\n const previous = stack.pop();\n if (previous) state = previous;\n },\n setTransform(\n a:\n | number\n | { a: number; b: number; c: number; d: number; e: number; f: number },\n b = 0,\n c = 0,\n d = 1,\n e = 0,\n f = 0,\n ) {\n state.m =\n typeof a === \"object\"\n ? [a.a, a.b, a.c, a.d, a.e, a.f]\n : [a, b, c, d, e, f];\n },\n resetTransform() {\n state.m = [1, 0, 0, 1, 0, 0];\n },\n transform(\n a: number,\n b: number,\n c: number,\n d: number,\n e: number,\n f: number,\n ) {\n multiply([a, b, c, d, e, f]);\n },\n translate(x: number, y: number) {\n multiply([1, 0, 0, 1, x, y]);\n },\n scale(x: number, y: number) {\n multiply([x, 0, 0, y, 0, 0]);\n },\n rotate(angle: number) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n multiply([cos, sin, -sin, cos, 0, 0]);\n },\n beginPath() {\n paths = [];\n current = null;\n pen = null;\n },\n closePath() {\n if (!current) return;\n current.closed = true;\n const start = current;\n // drawing goes on from the start of the closed subpath\n current = { x: start.x, y: start.y, segs: [], closed: false };\n paths.push(current);\n },\n moveTo,\n lineTo,\n arc,\n ellipse(\n x: number,\n y: number,\n rx: number,\n ry: number,\n rotation: number,\n start: number,\n end: number,\n ccw = false,\n ) {\n if (Math.abs(rx - ry) < 1e-6 && rotation === 0) {\n arc(x, y, rx, start, end, ccw);\n return;\n }\n const sweep = arcSweep(start, end, ccw);\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const at = (t: number): [number, number] => {\n const a = start + sweep * t;\n const ex = rx * Math.cos(a);\n const ey = ry * Math.sin(a);\n return [x + ex * cos - ey * sin, y + ex * sin + ey * cos];\n };\n const [sx, sy] = at(0);\n if (!current) moveTo(sx, sy);\n else lineTo(sx, sy);\n curve(at, curveSteps(Math.abs(sweep) * Math.max(rx, ry)));\n },\n arcTo(x1: number, y1: number, x2: number, y2: number, r: number) {\n ensure(x1, y1);\n const [x0, y0] = pen ?? [x1, y1];\n const ax = x0 - x1;\n const ay = y0 - y1;\n const bx = x2 - x1;\n const by = y2 - y1;\n const la = Math.hypot(ax, ay);\n const lb = Math.hypot(bx, by);\n const cross = ax * by - ay * bx;\n if (r <= 0 || la < 1e-9 || lb < 1e-9 || Math.abs(cross) < 1e-9) {\n lineTo(x1, y1);\n return;\n }\n const cos = (ax * bx + ay * by) / (la * lb);\n const half = Math.acos(Math.max(-1, Math.min(1, cos))) / 2;\n const dist = r / Math.tan(half);\n const t0x = x1 + (ax / la) * dist;\n const t0y = y1 + (ay / la) * dist;\n const t1x = x1 + (bx / lb) * dist;\n const t1y = y1 + (by / lb) * dist;\n // center: along the bisector, at r / sin(half)\n const ux = ax / la + bx / lb;\n const uy = ay / la + by / lb;\n const lu = Math.hypot(ux, uy);\n const cd = r / Math.sin(half);\n const cx = x1 + (ux / lu) * cd;\n const cy = y1 + (uy / lu) * cd;\n lineTo(t0x, t0y);\n const a0 = Math.atan2(t0y - cy, t0x - cx);\n const a1 = Math.atan2(t1y - cy, t1x - cx);\n arc(cx, cy, r, a0, a1, cross > 0);\n },\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {\n ensure(cpx, cpy);\n const [x0, y0] = pen ?? [cpx, cpy];\n curve(\n (t) => {\n const u = 1 - t;\n return [\n u * u * x0 + 2 * u * t * cpx + t * t * x,\n u * u * y0 + 2 * u * t * cpy + t * t * y,\n ];\n },\n curveSteps(\n Math.hypot(cpx - x0, cpy - y0) + Math.hypot(x - cpx, y - cpy),\n ),\n );\n },\n bezierCurveTo(\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x: number,\n y: number,\n ) {\n ensure(c1x, c1y);\n const [x0, y0] = pen ?? [c1x, c1y];\n curve(\n (t) => {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const c = 3 * u * t * t;\n const d = t * t * t;\n return [\n a * x0 + b * c1x + c * c2x + d * x,\n a * y0 + b * c1y + c * c2y + d * y,\n ];\n },\n curveSteps(\n Math.hypot(c1x - x0, c1y - y0) +\n Math.hypot(c2x - c1x, c2y - c1y) +\n Math.hypot(x - c2x, y - c2y),\n ),\n );\n },\n rect(x: number, y: number, w: number, h: number) {\n moveTo(x, y);\n lineTo(x + w, y);\n lineTo(x + w, y + h);\n lineTo(x, y + h);\n context.closePath();\n },\n roundRect(x: number, y: number, w: number, h: number, radii?: unknown) {\n const r = Math.max(\n 0,\n Math.min(\n typeof radii === \"number\"\n ? radii\n : Array.isArray(radii) && typeof radii[0] === \"number\"\n ? radii[0]\n : 0,\n Math.abs(w) / 2,\n Math.abs(h) / 2,\n ),\n );\n if (r <= 0) {\n context.rect(x, y, w, h);\n return;\n }\n moveTo(x + r, y);\n context.arcTo(x + w, y, x + w, y + h, r);\n context.arcTo(x + w, y + h, x, y + h, r);\n context.arcTo(x, y + h, x, y, r);\n context.arcTo(x, y, x + w, y, r);\n context.closePath();\n },\n fill() {\n paint(\"fill\");\n },\n stroke() {\n paint(\"stroke\");\n },\n clip() {\n // views are not clipped by paths (the engine only clips decorations)\n },\n fillRect(x: number, y: number, w: number, h: number) {\n const saved = { paths, current, pen };\n paths = [];\n context.rect(x, y, w, h);\n paint(\"fill\");\n ({ paths, current, pen } = saved);\n },\n strokeRect(x: number, y: number, w: number, h: number) {\n const saved = { paths, current, pen };\n paths = [];\n context.rect(x, y, w, h);\n paint(\"stroke\");\n ({ paths, current, pen } = saved);\n },\n clearRect(x: number, y: number, w: number, h: number) {\n const [x0, y0] = map(x, y);\n const [x1, y1] = map(x + w, y + h);\n // clearing (most of) the canvas starts a frame\n if (x0 <= 1 && y0 <= 1 && x1 - x0 > 1 && y1 - y0 > 1) {\n frame = [];\n pendingHalo = null;\n }\n },\n fillText(value: string, x: number, y: number, maxWidth?: number) {\n const op: TextOp = text(value, x, y, maxWidth);\n const halo = pendingHalo;\n pendingHalo = null;\n if (halo && halo.text === op.text && halo.x === op.x && halo.y === op.y) {\n const at = frame.indexOf(halo);\n if (at >= 0) frame.splice(at, 1);\n op.halo = halo.color;\n }\n frame.push(op);\n },\n strokeText(value: string, x: number, y: number, maxWidth?: number) {\n const op: TextOp = {\n ...text(value, x, y, maxWidth),\n color: state.stroke.color,\n };\n pendingHalo = op;\n frame.push(op);\n },\n measureText(value: string) {\n const width = measureChartText(String(value), state.font);\n const { size } = parseFont(state.font);\n return {\n width,\n actualBoundingBoxAscent: size * 0.8,\n actualBoundingBoxDescent: size * 0.2,\n actualBoundingBoxLeft: 0,\n actualBoundingBoxRight: width,\n fontBoundingBoxAscent: size * 0.9,\n fontBoundingBoxDescent: size * 0.25,\n };\n },\n setLineDash(segments: number[]) {\n state.dash = Array.isArray(segments)\n ? segments.filter((v) => Number.isFinite(v) && v >= 0)\n : [];\n },\n getLineDash() {\n return [...state.dash];\n },\n createLinearGradient(x0: number, y0: number, x1: number, y1: number) {\n const [ax, ay] = map(x0, y0);\n const [bx, by] = map(x1, y1);\n const gradient: Gradient = { x0: ax, y0: ay, x1: bx, y1: by, stops: [] };\n const recorded: RecordedGradient = {\n [GRADIENT]: gradient,\n addColorStop(offset: number, color: string) {\n gradient.stops.push({\n offset: clamp01(offset),\n color: parseColor(color),\n });\n gradient.stops.sort((p, q) => p.offset - q.offset);\n },\n };\n return recorded;\n },\n createRadialGradient(x0: number, y0: number) {\n // approximated by its colors along x\n return context.createLinearGradient(x0, y0, x0 + 1, y0);\n },\n createConicGradient(_angle: number, x: number, y: number) {\n return context.createLinearGradient(x, y, x + 1, y);\n },\n createPattern() {\n return null;\n },\n drawImage() {\n // not supported by views\n },\n isPointInPath() {\n return false;\n },\n isPointInStroke() {\n return false;\n },\n getTransform() {\n const [a, b, c, d, e, f] = state.m;\n return { a, b, c, d, e, f };\n },\n reset() {\n state = initial();\n stack.length = 0;\n paths = [];\n current = null;\n pen = null;\n frame = [];\n },\n };\n\n return {\n context,\n ops: () => frame,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"recorder.js","names":["TAU","BLACK","clamp01","v","NAMED","parseColor","value","s","named","fn","parts","p","r","g","b","alphaText","hex","short","at","i","opaqueCss","c","cssWithAlpha","alpha","paintAt","paint","dx","dy","len2","t","x","y","stops","a","span","k","mix","u","FONT","parseFont","match","font","w","weight","GRADIENT","isGradient","toPaint","gradient","fromPaint","normalizeTextAlign","normalizeBaseline","arcSweep","ccw","end","start","createRecorder","frame","initial","state","stack","paths","current","pen","pendingHalo","map","d","e","f","scaleOf","rotationOf","multiply","n","moveTo","px","py","ensure","lineTo","q","arc","sweep","sx","sy","ex","ey","cx","cy","rot","curve","steps","point","curveSteps","length","list","copy","kind","shadow","text","size","maxWidth","context","previous","cos","angle","sin","rx","ry","rotation","x1","y1","x0","y0","ax","ay","bx","x2","by","y2","la","lb","cross","half","dist","t0x","t0y","t1x","t1y","ux","uy","lu","cd","a0","a1","cpx","cpy","c1x","c1y","c2x","c2y","h","radii","saved","op","halo","width","measureChartText","segments","offset","color"],"sources":["../../../../../native/src/components/ShapeChart/recorder.ts"],"sourcesContent":["// A Canvas2D context that records instead of painting. The shape chart\n// engine (@minerva/charts/canvas: layouts, animations, legend, tooltip,\n// hover dimming, events) draws its frames on it; ./geometry turns the\n// recorded fills, strokes and texts into views. Paths are stored in chart\n// pixels (the current transform applied); arcs stay arcs so that circles,\n// rings and sectors become exact rounded views.\n\nimport { measureChartText } from \"../Chart/measure\";\n\n/** A color: channels 0-255, alpha 0-1 (`raw`: a CSS color that could not be parsed) */\nexport interface Color {\n r: number;\n g: number;\n b: number;\n a: number;\n raw?: string;\n}\n\n/** A linear gradient in chart pixels */\nexport interface Gradient {\n x0: number;\n y0: number;\n x1: number;\n y1: number;\n stops: { offset: number; color: Color }[];\n}\n\n/** Fill or stroke style: a color, or a gradient (and its first color) */\nexport interface Paint {\n color: Color;\n gradient?: Gradient;\n}\n\n/** Straight segment to (x, y), or arc (implicitly joined by a segment to its start) */\n/** A quadratic curve (device coordinates) */\nexport interface Quad {\n from: [number, number];\n ctrl: [number, number];\n to: [number, number];\n}\n\nexport type Segment =\n /** `q`: the curve this segment flattens, if any */\n | { t: \"L\"; x: number; y: number; q?: Quad }\n | {\n t: \"A\";\n cx: number;\n cy: number;\n r: number;\n /** Start angle and end angle (`a1 - a0` is the signed sweep) */\n a0: number;\n a1: number;\n };\n\nexport interface Subpath {\n x: number;\n y: number;\n segs: Segment[];\n closed: boolean;\n}\n\nexport interface FillOp {\n kind: \"fill\";\n paths: Subpath[];\n paint: Paint;\n alpha: number;\n /** Drawn with a shadow */\n shadow: boolean;\n}\n\nexport interface StrokeOp {\n kind: \"stroke\";\n paths: Subpath[];\n paint: Paint;\n alpha: number;\n width: number;\n cap: \"butt\" | \"round\" | \"square\";\n join: \"round\" | \"bevel\" | \"miter\";\n dash: number[];\n}\n\nexport interface TextOp {\n kind: \"text\";\n text: string;\n x: number;\n y: number;\n size: number;\n weight: number;\n align: \"left\" | \"center\" | \"right\";\n baseline: \"top\" | \"middle\" | \"bottom\" | \"alphabetic\";\n color: Color;\n alpha: number;\n /** Rotation around (x, y), radians clockwise */\n rotate: number;\n maxWidth?: number;\n /** Outline color (`strokeText` under the same text) */\n halo?: Color;\n}\n\nexport type DrawOp = FillOp | StrokeOp | TextOp;\n\nconst TAU = Math.PI * 2;\nconst BLACK: Color = { r: 0, g: 0, b: 0, a: 1 };\n\nconst clamp01 = (v: number) => (v < 0 ? 0 : v > 1 ? 1 : v);\n\nconst NAMED: Record<string, Color> = {\n transparent: { r: 0, g: 0, b: 0, a: 0 },\n black: BLACK,\n white: { r: 255, g: 255, b: 255, a: 1 },\n};\n\n/** Parses the colors the engine produces: `rgba()`, `rgb()`, `#hex` */\nexport function parseColor(value: unknown): Color {\n if (typeof value !== \"string\") return BLACK;\n const s = value.trim().toLowerCase();\n const named = NAMED[s];\n if (named) return named;\n const fn = /^rgba?\\(([^)]*)\\)$/.exec(s);\n if (fn) {\n const parts = (fn[1] ?? \"\")\n .split(/[\\s,/]+/)\n .filter(Boolean)\n .map((p) => (p.endsWith(\"%\") ? (parseFloat(p) / 100) * 255 : +p));\n const [r = 0, g = 0, b = 0] = parts;\n let a = parts[3] ?? 1;\n const alphaText = (fn[1] ?? \"\").split(/[\\s,/]+/).filter(Boolean)[3];\n if (alphaText?.endsWith(\"%\")) a = parseFloat(alphaText) / 100;\n if ([r, g, b, a].every(Number.isFinite)) return { r, g, b, a: clamp01(a) };\n }\n const hex = /^#([0-9a-f]{3,8})$/.exec(s)?.[1];\n if (hex && hex.length !== 5 && hex.length !== 7) {\n const short = hex.length <= 4;\n const at = (i: number) =>\n short\n ? parseInt((hex[i] ?? \"f\") + (hex[i] ?? \"f\"), 16)\n : parseInt(hex.slice(i * 2, i * 2 + 2) || \"ff\", 16);\n const n = short ? hex.length : hex.length / 2;\n return { r: at(0), g: at(1), b: at(2), a: n === 4 ? at(3) / 255 : 1 };\n }\n return { r: 0, g: 0, b: 0, a: 1, raw: value };\n}\n\n/** Opaque CSS color (the alpha goes to an `opacity`) */\nexport const opaqueCss = (c: Color) =>\n c.raw ?? `rgb(${Math.round(c.r)}, ${Math.round(c.g)}, ${Math.round(c.b)})`;\n\n/** CSS color with an extra alpha */\nexport const cssWithAlpha = (c: Color, alpha: number) =>\n c.raw ??\n `rgba(${Math.round(c.r)}, ${Math.round(c.g)}, ${Math.round(c.b)}, ${+clamp01(c.a * alpha).toFixed(3)})`;\n\n/** Color of a paint at a point (gradients: projected on their axis) */\nexport function paintAt(paint: Paint, x: number, y: number): Color {\n const g = paint.gradient;\n if (!g || g.stops.length < 2) return paint.color;\n const dx = g.x1 - g.x0;\n const dy = g.y1 - g.y0;\n const len2 = dx * dx + dy * dy;\n const t = len2 > 0 ? clamp01(((x - g.x0) * dx + (y - g.y0) * dy) / len2) : 0;\n const stops = g.stops;\n let i = 0;\n while (i < stops.length - 2 && (stops[i + 1]?.offset ?? 1) < t) i++;\n const a = stops[i];\n const b = stops[i + 1];\n if (!a || !b) return paint.color;\n const span = b.offset - a.offset;\n const k = span > 0 ? clamp01((t - a.offset) / span) : 0;\n const mix = (u: number, v: number) => u + (v - u) * k;\n if (a.color.raw || b.color.raw) return k < 0.5 ? a.color : b.color;\n return {\n r: mix(a.color.r, b.color.r),\n g: mix(a.color.g, b.color.g),\n b: mix(a.color.b, b.color.b),\n a: mix(a.color.a, b.color.a),\n };\n}\n\ntype Matrix = [number, number, number, number, number, number];\n\ninterface State {\n m: Matrix;\n alpha: number;\n fill: Paint;\n stroke: Paint;\n lineWidth: number;\n cap: StrokeOp[\"cap\"];\n join: StrokeOp[\"join\"];\n font: string;\n align: TextOp[\"align\"];\n baseline: TextOp[\"baseline\"];\n dash: number[];\n shadowColor: string;\n shadowBlur: number;\n shadowOffsetX: number;\n shadowOffsetY: number;\n}\n\nconst FONT =\n /^\\s*(?:(?:italic|oblique|normal)\\s+)?(?:(\\d{3}|bold|normal)\\s+)?([\\d.]+)px/;\n\n/** Size (px) and weight of a CSS font */\nexport function parseFont(font: string): { size: number; weight: number } {\n const match = FONT.exec(font);\n const w = match?.[1];\n const weight = w === \"bold\" ? 700 : w && w !== \"normal\" ? +w : 400;\n return { size: match ? Number(match[2]) : 10, weight };\n}\n\nconst GRADIENT = Symbol(\"gradient\");\n\ninterface RecordedGradient {\n [GRADIENT]: Gradient;\n addColorStop(offset: number, color: string): void;\n}\n\nconst isGradient = (v: unknown): v is RecordedGradient =>\n typeof v === \"object\" && v !== null && GRADIENT in v;\n\nconst toPaint = (value: unknown): Paint => {\n if (isGradient(value)) {\n const gradient = value[GRADIENT];\n return { color: gradient.stops[0]?.color ?? BLACK, gradient };\n }\n return { color: parseColor(value) };\n};\n\nconst fromPaint = (paint: Paint): unknown =>\n paint.color.raw ??\n `rgba(${paint.color.r}, ${paint.color.g}, ${paint.color.b}, ${paint.color.a})`;\n\nconst normalizeTextAlign = (v: string): TextOp[\"align\"] =>\n v === \"center\" ? \"center\" : v === \"right\" || v === \"end\" ? \"right\" : \"left\";\n\nconst normalizeBaseline = (v: string): TextOp[\"baseline\"] =>\n v === \"top\" || v === \"hanging\"\n ? \"top\"\n : v === \"middle\"\n ? \"middle\"\n : v === \"bottom\" || v === \"ideographic\"\n ? \"bottom\"\n : \"alphabetic\";\n\n/** Signed sweep of a canvas `arc()` */\nexport function arcSweep(start: number, end: number, ccw: boolean): number {\n if (!ccw) {\n if (end - start >= TAU) return TAU;\n let s = (end - start) % TAU;\n if (s < 0) s += TAU;\n return s;\n }\n if (start - end >= TAU) return -TAU;\n let s = (start - end) % TAU;\n if (s < 0) s += TAU;\n return -s;\n}\n\nexport interface Recorder {\n /** The 2D context handed to the engine */\n readonly context: unknown;\n /** Operations of the last frame (a new array per frame) */\n ops(): DrawOp[];\n}\n\n/**\n * Records the drawing calls of a Canvas2D context. `clearRect` of the whole\n * canvas starts a new frame.\n */\nexport function createRecorder(): Recorder {\n let frame: DrawOp[] = [];\n const initial = (): State => ({\n m: [1, 0, 0, 1, 0, 0],\n alpha: 1,\n fill: { color: BLACK },\n stroke: { color: BLACK },\n lineWidth: 1,\n cap: \"butt\",\n join: \"miter\",\n font: \"10px sans-serif\",\n align: \"left\",\n baseline: \"alphabetic\",\n dash: [],\n shadowColor: \"rgba(0, 0, 0, 0)\",\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n });\n let state = initial();\n const stack: State[] = [];\n let paths: Subpath[] = [];\n let current: Subpath | null = null;\n let pen: [number, number] | null = null;\n let pendingHalo: TextOp | null = null;\n\n const map = (x: number, y: number): [number, number] => {\n const [a, b, c, d, e, f] = state.m;\n return [a * x + c * y + e, b * x + d * y + f];\n };\n /** Uniform scale and rotation of the transform */\n const scaleOf = () => {\n const [a, b, c, d] = state.m;\n return Math.sqrt(Math.abs(a * d - b * c)) || 0;\n };\n const rotationOf = () => Math.atan2(state.m[1], state.m[0]);\n const multiply = (n: Matrix) => {\n const [a, b, c, d, e, f] = state.m;\n state.m = [\n a * n[0] + c * n[1],\n b * n[0] + d * n[1],\n a * n[2] + c * n[3],\n b * n[2] + d * n[3],\n a * n[4] + c * n[5] + e,\n b * n[4] + d * n[5] + f,\n ];\n };\n\n const moveTo = (x: number, y: number) => {\n const [px, py] = map(x, y);\n current = { x: px, y: py, segs: [], closed: false };\n paths.push(current);\n pen = [x, y];\n };\n const ensure = (x: number, y: number) => {\n if (!current) moveTo(x, y);\n };\n const lineTo = (x: number, y: number, q?: Quad) => {\n if (!current) {\n moveTo(x, y);\n return;\n }\n const [px, py] = map(x, y);\n current.segs.push(\n q ? { t: \"L\", x: px, y: py, q } : { t: \"L\", x: px, y: py },\n );\n pen = [x, y];\n };\n const arc = (\n x: number,\n y: number,\n r: number,\n start: number,\n end: number,\n ccw = false,\n ) => {\n const sweep = arcSweep(start, end, ccw);\n const sx = x + r * Math.cos(start);\n const sy = y + r * Math.sin(start);\n const ex = x + r * Math.cos(start + sweep);\n const ey = y + r * Math.sin(start + sweep);\n if (!current) moveTo(sx, sy);\n if (r <= 0 || sweep === 0) {\n lineTo(sx, sy);\n return;\n }\n const [cx, cy] = map(x, y);\n const rot = rotationOf();\n current?.segs.push({\n t: \"A\",\n cx,\n cy,\n r: r * scaleOf(),\n a0: start + rot,\n a1: start + sweep + rot,\n });\n pen = [ex, ey];\n };\n const curve = (\n point: (t: number) => [number, number],\n steps: number,\n q?: Quad,\n ) => {\n for (let i = 1; i <= steps; i++) {\n const [x, y] = point(i / steps);\n lineTo(x, y, q);\n }\n };\n /** Segments of a flattened curve: ~6px each, 2 for the small corner roundings */\n const curveSteps = (length: number) =>\n Math.max(2, Math.min(32, Math.ceil((length * scaleOf()) / 6)));\n\n const paint = (kind: \"fill\" | \"stroke\") => {\n const list = paths.filter((p) => p.segs.length || p.closed);\n if (!list.length) return;\n // a copy: the engine may keep drawing on the same path\n const copy = list.map((p) => ({ ...p, segs: [...p.segs] }));\n if (kind === \"fill\") {\n const shadow =\n state.shadowBlur > 0 &&\n parseColor(state.shadowColor).a > 0 &&\n !parseColor(state.shadowColor).raw;\n frame.push({\n kind: \"fill\",\n paths: copy,\n paint: state.fill,\n alpha: state.alpha,\n shadow,\n });\n } else {\n frame.push({\n kind: \"stroke\",\n paths: copy,\n paint: state.stroke,\n alpha: state.alpha,\n width: state.lineWidth * scaleOf(),\n cap: state.cap,\n join: state.join,\n dash: state.dash.map((v) => v * scaleOf()),\n });\n }\n };\n\n const text = (value: string, x: number, y: number, maxWidth?: number) => {\n const [px, py] = map(x, y);\n const { size, weight } = parseFont(state.font);\n const s = scaleOf();\n return {\n kind: \"text\" as const,\n text: String(value),\n x: px,\n y: py,\n size: size * s,\n weight,\n align: state.align,\n baseline: state.baseline,\n color: state.fill.color,\n alpha: state.alpha,\n rotate: rotationOf(),\n maxWidth:\n maxWidth !== undefined && Number.isFinite(maxWidth)\n ? maxWidth * s\n : undefined,\n };\n };\n\n const context = {\n canvas: null,\n get globalAlpha() {\n return state.alpha;\n },\n set globalAlpha(v: number) {\n if (Number.isFinite(v)) state.alpha = clamp01(v);\n },\n get fillStyle(): unknown {\n return state.fill.gradient ? null : fromPaint(state.fill);\n },\n set fillStyle(v: unknown) {\n state.fill = toPaint(v);\n },\n get strokeStyle(): unknown {\n return state.stroke.gradient ? null : fromPaint(state.stroke);\n },\n set strokeStyle(v: unknown) {\n state.stroke = toPaint(v);\n },\n get lineWidth() {\n return state.lineWidth;\n },\n set lineWidth(v: number) {\n if (Number.isFinite(v) && v > 0) state.lineWidth = v;\n },\n get lineCap() {\n return state.cap;\n },\n set lineCap(v: string) {\n state.cap = v === \"round\" ? \"round\" : v === \"square\" ? \"square\" : \"butt\";\n },\n get lineJoin() {\n return state.join;\n },\n set lineJoin(v: string) {\n state.join = v === \"round\" ? \"round\" : v === \"bevel\" ? \"bevel\" : \"miter\";\n },\n get font() {\n return state.font;\n },\n set font(v: string) {\n state.font = v;\n },\n get textAlign() {\n return state.align;\n },\n set textAlign(v: string) {\n state.align = normalizeTextAlign(v);\n },\n get textBaseline() {\n return state.baseline;\n },\n set textBaseline(v: string) {\n state.baseline = normalizeBaseline(v);\n },\n get shadowColor() {\n return state.shadowColor;\n },\n set shadowColor(v: string) {\n state.shadowColor = v;\n },\n get shadowBlur() {\n return state.shadowBlur;\n },\n set shadowBlur(v: number) {\n state.shadowBlur = v;\n },\n get shadowOffsetX() {\n return state.shadowOffsetX;\n },\n set shadowOffsetX(v: number) {\n state.shadowOffsetX = v;\n },\n get shadowOffsetY() {\n return state.shadowOffsetY;\n },\n set shadowOffsetY(v: number) {\n state.shadowOffsetY = v;\n },\n lineDashOffset: 0,\n miterLimit: 10,\n globalCompositeOperation: \"source-over\",\n imageSmoothingEnabled: true,\n direction: \"inherit\",\n save() {\n stack.push({ ...state, dash: [...state.dash] });\n },\n restore() {\n const previous = stack.pop();\n if (previous) state = previous;\n },\n setTransform(\n a:\n | number\n | { a: number; b: number; c: number; d: number; e: number; f: number },\n b = 0,\n c = 0,\n d = 1,\n e = 0,\n f = 0,\n ) {\n state.m =\n typeof a === \"object\"\n ? [a.a, a.b, a.c, a.d, a.e, a.f]\n : [a, b, c, d, e, f];\n },\n resetTransform() {\n state.m = [1, 0, 0, 1, 0, 0];\n },\n transform(\n a: number,\n b: number,\n c: number,\n d: number,\n e: number,\n f: number,\n ) {\n multiply([a, b, c, d, e, f]);\n },\n translate(x: number, y: number) {\n multiply([1, 0, 0, 1, x, y]);\n },\n scale(x: number, y: number) {\n multiply([x, 0, 0, y, 0, 0]);\n },\n rotate(angle: number) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n multiply([cos, sin, -sin, cos, 0, 0]);\n },\n beginPath() {\n paths = [];\n current = null;\n pen = null;\n },\n closePath() {\n if (!current) return;\n current.closed = true;\n const start = current;\n // drawing goes on from the start of the closed subpath\n current = { x: start.x, y: start.y, segs: [], closed: false };\n paths.push(current);\n },\n moveTo,\n lineTo,\n arc,\n ellipse(\n x: number,\n y: number,\n rx: number,\n ry: number,\n rotation: number,\n start: number,\n end: number,\n ccw = false,\n ) {\n if (Math.abs(rx - ry) < 1e-6 && rotation === 0) {\n arc(x, y, rx, start, end, ccw);\n return;\n }\n const sweep = arcSweep(start, end, ccw);\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const at = (t: number): [number, number] => {\n const a = start + sweep * t;\n const ex = rx * Math.cos(a);\n const ey = ry * Math.sin(a);\n return [x + ex * cos - ey * sin, y + ex * sin + ey * cos];\n };\n const [sx, sy] = at(0);\n if (!current) moveTo(sx, sy);\n else lineTo(sx, sy);\n curve(at, curveSteps(Math.abs(sweep) * Math.max(rx, ry)));\n },\n arcTo(x1: number, y1: number, x2: number, y2: number, r: number) {\n ensure(x1, y1);\n const [x0, y0] = pen ?? [x1, y1];\n const ax = x0 - x1;\n const ay = y0 - y1;\n const bx = x2 - x1;\n const by = y2 - y1;\n const la = Math.hypot(ax, ay);\n const lb = Math.hypot(bx, by);\n const cross = ax * by - ay * bx;\n if (r <= 0 || la < 1e-9 || lb < 1e-9 || Math.abs(cross) < 1e-9) {\n lineTo(x1, y1);\n return;\n }\n const cos = (ax * bx + ay * by) / (la * lb);\n const half = Math.acos(Math.max(-1, Math.min(1, cos))) / 2;\n const dist = r / Math.tan(half);\n const t0x = x1 + (ax / la) * dist;\n const t0y = y1 + (ay / la) * dist;\n const t1x = x1 + (bx / lb) * dist;\n const t1y = y1 + (by / lb) * dist;\n // center: along the bisector, at r / sin(half)\n const ux = ax / la + bx / lb;\n const uy = ay / la + by / lb;\n const lu = Math.hypot(ux, uy);\n const cd = r / Math.sin(half);\n const cx = x1 + (ux / lu) * cd;\n const cy = y1 + (uy / lu) * cd;\n lineTo(t0x, t0y);\n const a0 = Math.atan2(t0y - cy, t0x - cx);\n const a1 = Math.atan2(t1y - cy, t1x - cx);\n arc(cx, cy, r, a0, a1, cross > 0);\n },\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {\n ensure(cpx, cpy);\n const [x0, y0] = pen ?? [cpx, cpy];\n curve(\n (t) => {\n const u = 1 - t;\n return [\n u * u * x0 + 2 * u * t * cpx + t * t * x,\n u * u * y0 + 2 * u * t * cpy + t * t * y,\n ];\n },\n curveSteps(\n Math.hypot(cpx - x0, cpy - y0) + Math.hypot(x - cpx, y - cpy),\n ),\n { from: map(x0, y0), ctrl: map(cpx, cpy), to: map(x, y) },\n );\n },\n bezierCurveTo(\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x: number,\n y: number,\n ) {\n ensure(c1x, c1y);\n const [x0, y0] = pen ?? [c1x, c1y];\n curve(\n (t) => {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const c = 3 * u * t * t;\n const d = t * t * t;\n return [\n a * x0 + b * c1x + c * c2x + d * x,\n a * y0 + b * c1y + c * c2y + d * y,\n ];\n },\n curveSteps(\n Math.hypot(c1x - x0, c1y - y0) +\n Math.hypot(c2x - c1x, c2y - c1y) +\n Math.hypot(x - c2x, y - c2y),\n ),\n );\n },\n rect(x: number, y: number, w: number, h: number) {\n moveTo(x, y);\n lineTo(x + w, y);\n lineTo(x + w, y + h);\n lineTo(x, y + h);\n context.closePath();\n },\n roundRect(x: number, y: number, w: number, h: number, radii?: unknown) {\n const r = Math.max(\n 0,\n Math.min(\n typeof radii === \"number\"\n ? radii\n : Array.isArray(radii) && typeof radii[0] === \"number\"\n ? radii[0]\n : 0,\n Math.abs(w) / 2,\n Math.abs(h) / 2,\n ),\n );\n if (r <= 0) {\n context.rect(x, y, w, h);\n return;\n }\n moveTo(x + r, y);\n context.arcTo(x + w, y, x + w, y + h, r);\n context.arcTo(x + w, y + h, x, y + h, r);\n context.arcTo(x, y + h, x, y, r);\n context.arcTo(x, y, x + w, y, r);\n context.closePath();\n },\n fill() {\n paint(\"fill\");\n },\n stroke() {\n paint(\"stroke\");\n },\n clip() {\n // views are not clipped by paths (the engine only clips decorations)\n },\n fillRect(x: number, y: number, w: number, h: number) {\n const saved = { paths, current, pen };\n paths = [];\n context.rect(x, y, w, h);\n paint(\"fill\");\n ({ paths, current, pen } = saved);\n },\n strokeRect(x: number, y: number, w: number, h: number) {\n const saved = { paths, current, pen };\n paths = [];\n context.rect(x, y, w, h);\n paint(\"stroke\");\n ({ paths, current, pen } = saved);\n },\n clearRect(x: number, y: number, w: number, h: number) {\n const [x0, y0] = map(x, y);\n const [x1, y1] = map(x + w, y + h);\n // clearing (most of) the canvas starts a frame\n if (x0 <= 1 && y0 <= 1 && x1 - x0 > 1 && y1 - y0 > 1) {\n frame = [];\n pendingHalo = null;\n }\n },\n fillText(value: string, x: number, y: number, maxWidth?: number) {\n const op: TextOp = text(value, x, y, maxWidth);\n const halo = pendingHalo;\n pendingHalo = null;\n if (halo && halo.text === op.text && halo.x === op.x && halo.y === op.y) {\n const at = frame.indexOf(halo);\n if (at >= 0) frame.splice(at, 1);\n op.halo = halo.color;\n }\n frame.push(op);\n },\n strokeText(value: string, x: number, y: number, maxWidth?: number) {\n const op: TextOp = {\n ...text(value, x, y, maxWidth),\n color: state.stroke.color,\n };\n pendingHalo = op;\n frame.push(op);\n },\n measureText(value: string) {\n const width = measureChartText(String(value), state.font);\n const { size } = parseFont(state.font);\n return {\n width,\n actualBoundingBoxAscent: size * 0.8,\n actualBoundingBoxDescent: size * 0.2,\n actualBoundingBoxLeft: 0,\n actualBoundingBoxRight: width,\n fontBoundingBoxAscent: size * 0.9,\n fontBoundingBoxDescent: size * 0.25,\n };\n },\n setLineDash(segments: number[]) {\n state.dash = Array.isArray(segments)\n ? segments.filter((v) => Number.isFinite(v) && v >= 0)\n : [];\n },\n getLineDash() {\n return [...state.dash];\n },\n createLinearGradient(x0: number, y0: number, x1: number, y1: number) {\n const [ax, ay] = map(x0, y0);\n const [bx, by] = map(x1, y1);\n const gradient: Gradient = { x0: ax, y0: ay, x1: bx, y1: by, stops: [] };\n const recorded: RecordedGradient = {\n [GRADIENT]: gradient,\n addColorStop(offset: number, color: string) {\n gradient.stops.push({\n offset: clamp01(offset),\n color: parseColor(color),\n });\n gradient.stops.sort((p, q) => p.offset - q.offset);\n },\n };\n return recorded;\n },\n createRadialGradient(x0: number, y0: number) {\n // approximated by its colors along x\n return context.createLinearGradient(x0, y0, x0 + 1, y0);\n },\n createConicGradient(_angle: number, x: number, y: number) {\n return context.createLinearGradient(x, y, x + 1, y);\n },\n createPattern() {\n return null;\n },\n drawImage() {\n // not supported by views\n },\n isPointInPath() {\n return false;\n },\n isPointInStroke() {\n return false;\n },\n getTransform() {\n const [a, b, c, d, e, f] = state.m;\n return { a, b, c, d, e, f };\n },\n reset() {\n state = initial();\n stack.length = 0;\n paths = [];\n current = null;\n pen = null;\n frame = [];\n },\n };\n\n return {\n context,\n ops: () => frame,\n };\n}\n"],"mappings":"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"}