minerva-design 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/custom-elements.json +122 -5
  3. package/dist/angular/fesm2022/minerva-angular.mjs +55 -0
  4. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  5. package/dist/angular/types/minerva-angular.d.ts +23 -2
  6. package/dist/charts/canvas.d.cts +2 -1
  7. package/dist/charts/canvas.d.ts +2 -1
  8. package/dist/charts/core.d.cts +1 -1
  9. package/dist/charts/core.d.ts +1 -1
  10. package/dist/charts/engine/canvas.cjs +1 -1
  11. package/dist/charts/engine/canvas.cjs.map +1 -1
  12. package/dist/charts/engine/canvas.js +2 -1
  13. package/dist/charts/engine/canvas.js.map +1 -1
  14. package/dist/charts/engine/chart.cjs +1 -1
  15. package/dist/charts/engine/chart.cjs.map +1 -1
  16. package/dist/charts/engine/chart.js +144 -143
  17. package/dist/charts/engine/chart.js.map +1 -1
  18. package/dist/charts/engine/controller.cjs +2 -2
  19. package/dist/charts/engine/controller.cjs.map +1 -1
  20. package/dist/charts/engine/controller.d.cts +3 -1
  21. package/dist/charts/engine/controller.d.ts +3 -1
  22. package/dist/charts/engine/controller.js +130 -132
  23. package/dist/charts/engine/controller.js.map +1 -1
  24. package/dist/charts/engine/defaults.cjs.map +1 -1
  25. package/dist/charts/engine/defaults.d.cts +4 -4
  26. package/dist/charts/engine/defaults.d.ts +4 -4
  27. package/dist/charts/engine/defaults.js.map +1 -1
  28. package/dist/charts/engine/graph/chart.cjs +1 -1
  29. package/dist/charts/engine/graph/chart.cjs.map +1 -1
  30. package/dist/charts/engine/graph/chart.js +740 -597
  31. package/dist/charts/engine/graph/chart.js.map +1 -1
  32. package/dist/charts/engine/graph/dag.cjs +1 -1
  33. package/dist/charts/engine/graph/dag.cjs.map +1 -1
  34. package/dist/charts/engine/graph/dag.js +191 -166
  35. package/dist/charts/engine/graph/dag.js.map +1 -1
  36. package/dist/charts/engine/graph/force.cjs +1 -1
  37. package/dist/charts/engine/graph/force.cjs.map +1 -1
  38. package/dist/charts/engine/graph/force.d.cts +9 -0
  39. package/dist/charts/engine/graph/force.d.ts +9 -0
  40. package/dist/charts/engine/graph/force.js +279 -181
  41. package/dist/charts/engine/graph/force.js.map +1 -1
  42. package/dist/charts/engine/graph/geometry.cjs +1 -1
  43. package/dist/charts/engine/graph/geometry.cjs.map +1 -1
  44. package/dist/charts/engine/graph/geometry.d.cts +14 -1
  45. package/dist/charts/engine/graph/geometry.d.ts +14 -1
  46. package/dist/charts/engine/graph/geometry.js +77 -24
  47. package/dist/charts/engine/graph/geometry.js.map +1 -1
  48. package/dist/charts/engine/graph/model.cjs +1 -1
  49. package/dist/charts/engine/graph/model.cjs.map +1 -1
  50. package/dist/charts/engine/graph/model.d.cts +9 -0
  51. package/dist/charts/engine/graph/model.d.ts +9 -0
  52. package/dist/charts/engine/graph/model.js +63 -43
  53. package/dist/charts/engine/graph/model.js.map +1 -1
  54. package/dist/charts/engine/graph/types.d.cts +14 -0
  55. package/dist/charts/engine/graph/types.d.ts +14 -0
  56. package/dist/charts/engine/graph/worker.cjs +12 -6
  57. package/dist/charts/engine/graph/worker.cjs.map +1 -1
  58. package/dist/charts/engine/graph/worker.js +12 -6
  59. package/dist/charts/engine/graph/worker.js.map +1 -1
  60. package/dist/charts/engine/labels.cjs.map +1 -1
  61. package/dist/charts/engine/labels.d.cts +17 -0
  62. package/dist/charts/engine/labels.d.ts +17 -0
  63. package/dist/charts/engine/labels.js.map +1 -1
  64. package/dist/charts/engine/model.cjs +1 -1
  65. package/dist/charts/engine/model.cjs.map +1 -1
  66. package/dist/charts/engine/model.d.cts +33 -0
  67. package/dist/charts/engine/model.d.ts +33 -0
  68. package/dist/charts/engine/model.js +149 -126
  69. package/dist/charts/engine/model.js.map +1 -1
  70. package/dist/charts/engine/orderbook/field.cjs +37 -0
  71. package/dist/charts/engine/orderbook/field.cjs.map +1 -0
  72. package/dist/charts/engine/orderbook/field.d.cts +92 -0
  73. package/dist/charts/engine/orderbook/field.d.ts +92 -0
  74. package/dist/charts/engine/orderbook/field.js +297 -0
  75. package/dist/charts/engine/orderbook/field.js.map +1 -0
  76. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  77. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  78. package/dist/charts/engine/orderbook/heatmap.js +413 -441
  79. package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
  80. package/dist/charts/engine/orderbook/host.cjs +1 -1
  81. package/dist/charts/engine/orderbook/host.cjs.map +1 -1
  82. package/dist/charts/engine/orderbook/host.d.cts +8 -1
  83. package/dist/charts/engine/orderbook/host.d.ts +8 -1
  84. package/dist/charts/engine/orderbook/host.js +27 -5
  85. package/dist/charts/engine/orderbook/host.js.map +1 -1
  86. package/dist/charts/engine/orderbook/ladder.cjs +1 -1
  87. package/dist/charts/engine/orderbook/ladder.cjs.map +1 -1
  88. package/dist/charts/engine/orderbook/ladder.js +1 -1
  89. package/dist/charts/engine/orderbook/ladder.js.map +1 -1
  90. package/dist/charts/engine/orderbook/layout.cjs +1 -1
  91. package/dist/charts/engine/orderbook/layout.cjs.map +1 -1
  92. package/dist/charts/engine/orderbook/layout.d.cts +5 -0
  93. package/dist/charts/engine/orderbook/layout.d.ts +5 -0
  94. package/dist/charts/engine/orderbook/layout.js +8 -2
  95. package/dist/charts/engine/orderbook/layout.js.map +1 -1
  96. package/dist/charts/engine/orderbook/tape.cjs +1 -1
  97. package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
  98. package/dist/charts/engine/orderbook/tape.js +3 -3
  99. package/dist/charts/engine/orderbook/tape.js.map +1 -1
  100. package/dist/charts/engine/orderbook/types.d.cts +12 -4
  101. package/dist/charts/engine/orderbook/types.d.ts +12 -4
  102. package/dist/charts/engine/overlay.cjs +1 -1
  103. package/dist/charts/engine/overlay.cjs.map +1 -1
  104. package/dist/charts/engine/overlay.d.cts +17 -0
  105. package/dist/charts/engine/overlay.d.ts +17 -0
  106. package/dist/charts/engine/overlay.js +29 -13
  107. package/dist/charts/engine/overlay.js.map +1 -1
  108. package/dist/charts/engine/presets.cjs +1 -1
  109. package/dist/charts/engine/presets.cjs.map +1 -1
  110. package/dist/charts/engine/presets.d.cts +12 -2
  111. package/dist/charts/engine/presets.d.ts +12 -2
  112. package/dist/charts/engine/presets.js +8 -2
  113. package/dist/charts/engine/presets.js.map +1 -1
  114. package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
  115. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
  116. package/dist/charts/engine/renderers/canvas2d.js +13 -9
  117. package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
  118. package/dist/charts/engine/renderers/follow.cjs +2 -0
  119. package/dist/charts/engine/renderers/follow.cjs.map +1 -0
  120. package/dist/charts/engine/renderers/follow.d.cts +8 -0
  121. package/dist/charts/engine/renderers/follow.d.ts +8 -0
  122. package/dist/charts/engine/renderers/follow.js +10 -0
  123. package/dist/charts/engine/renderers/follow.js.map +1 -0
  124. package/dist/charts/engine/renderers/gl-budget.cjs +2 -0
  125. package/dist/charts/engine/renderers/gl-budget.cjs.map +1 -0
  126. package/dist/charts/engine/renderers/gl-budget.d.cts +32 -0
  127. package/dist/charts/engine/renderers/gl-budget.d.ts +32 -0
  128. package/dist/charts/engine/renderers/gl-budget.js +95 -0
  129. package/dist/charts/engine/renderers/gl-budget.js.map +1 -0
  130. package/dist/charts/engine/renderers/gl.cjs +1 -1
  131. package/dist/charts/engine/renderers/gl.cjs.map +1 -1
  132. package/dist/charts/engine/renderers/gl.js +1 -1
  133. package/dist/charts/engine/renderers/gl.js.map +1 -1
  134. package/dist/charts/engine/renderers/shaders.cjs +9 -6
  135. package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
  136. package/dist/charts/engine/renderers/shaders.d.cts +1 -1
  137. package/dist/charts/engine/renderers/shaders.d.ts +1 -1
  138. package/dist/charts/engine/renderers/shaders.js +9 -6
  139. package/dist/charts/engine/renderers/shaders.js.map +1 -1
  140. package/dist/charts/engine/renderers/types.cjs.map +1 -1
  141. package/dist/charts/engine/renderers/types.d.cts +2 -0
  142. package/dist/charts/engine/renderers/types.d.ts +2 -0
  143. package/dist/charts/engine/renderers/types.js.map +1 -1
  144. package/dist/charts/engine/renderers/webgl.cjs +1 -1
  145. package/dist/charts/engine/renderers/webgl.cjs.map +1 -1
  146. package/dist/charts/engine/renderers/webgl.js +85 -64
  147. package/dist/charts/engine/renderers/webgl.js.map +1 -1
  148. package/dist/charts/engine/renderers/webgl2.cjs +1 -1
  149. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
  150. package/dist/charts/engine/renderers/webgl2.js +72 -58
  151. package/dist/charts/engine/renderers/webgl2.js.map +1 -1
  152. package/dist/charts/engine/renderers/webgpu.cjs +1 -1
  153. package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
  154. package/dist/charts/engine/renderers/webgpu.js +1 -1
  155. package/dist/charts/engine/renderers/webgpu.js.map +1 -1
  156. package/dist/charts/engine/scene.cjs +1 -1
  157. package/dist/charts/engine/scene.cjs.map +1 -1
  158. package/dist/charts/engine/scene.d.cts +51 -4
  159. package/dist/charts/engine/scene.d.ts +51 -4
  160. package/dist/charts/engine/scene.js +188 -122
  161. package/dist/charts/engine/scene.js.map +1 -1
  162. package/dist/charts/engine/shapes/chord.cjs +1 -1
  163. package/dist/charts/engine/shapes/chord.cjs.map +1 -1
  164. package/dist/charts/engine/shapes/chord.js +108 -103
  165. package/dist/charts/engine/shapes/chord.js.map +1 -1
  166. package/dist/charts/engine/shapes/types.d.cts +5 -3
  167. package/dist/charts/engine/shapes/types.d.ts +5 -3
  168. package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
  169. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
  170. package/dist/charts/engine/three-d/canvas2d.d.cts +36 -1
  171. package/dist/charts/engine/three-d/canvas2d.d.ts +36 -1
  172. package/dist/charts/engine/three-d/canvas2d.js +155 -80
  173. package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
  174. package/dist/charts/engine/three-d/chart.cjs +1 -1
  175. package/dist/charts/engine/three-d/chart.cjs.map +1 -1
  176. package/dist/charts/engine/three-d/chart.js +219 -215
  177. package/dist/charts/engine/three-d/chart.js.map +1 -1
  178. package/dist/charts/engine/three-d/oit.cjs +109 -0
  179. package/dist/charts/engine/three-d/oit.cjs.map +1 -0
  180. package/dist/charts/engine/three-d/oit.d.cts +34 -0
  181. package/dist/charts/engine/three-d/oit.d.ts +34 -0
  182. package/dist/charts/engine/three-d/oit.js +111 -0
  183. package/dist/charts/engine/three-d/oit.js.map +1 -0
  184. package/dist/charts/engine/three-d/render-types.cjs +1 -1
  185. package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
  186. package/dist/charts/engine/three-d/render-types.d.cts +16 -3
  187. package/dist/charts/engine/three-d/render-types.d.ts +16 -3
  188. package/dist/charts/engine/three-d/render-types.js +6 -9
  189. package/dist/charts/engine/three-d/render-types.js.map +1 -1
  190. package/dist/charts/engine/three-d/shaders.cjs +52 -26
  191. package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
  192. package/dist/charts/engine/three-d/shaders.d.cts +11 -3
  193. package/dist/charts/engine/three-d/shaders.d.ts +11 -3
  194. package/dist/charts/engine/three-d/shaders.js +84 -40
  195. package/dist/charts/engine/three-d/shaders.js.map +1 -1
  196. package/dist/charts/engine/three-d/sort.cjs +1 -1
  197. package/dist/charts/engine/three-d/sort.cjs.map +1 -1
  198. package/dist/charts/engine/three-d/sort.d.cts +6 -4
  199. package/dist/charts/engine/three-d/sort.d.ts +6 -4
  200. package/dist/charts/engine/three-d/sort.js +51 -39
  201. package/dist/charts/engine/three-d/sort.js.map +1 -1
  202. package/dist/charts/engine/three-d/types.d.cts +9 -0
  203. package/dist/charts/engine/three-d/types.d.ts +9 -0
  204. package/dist/charts/engine/three-d/webgl.cjs +1 -1
  205. package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
  206. package/dist/charts/engine/three-d/webgl.d.cts +9 -0
  207. package/dist/charts/engine/three-d/webgl.d.ts +9 -0
  208. package/dist/charts/engine/three-d/webgl.js +199 -76
  209. package/dist/charts/engine/three-d/webgl.js.map +1 -1
  210. package/dist/charts/engine/three-d/webgpu.cjs +1 -1
  211. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
  212. package/dist/charts/engine/three-d/webgpu.js +225 -99
  213. package/dist/charts/engine/three-d/webgpu.js.map +1 -1
  214. package/dist/charts/engine/trading/chart.cjs +1 -1
  215. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  216. package/dist/charts/engine/trading/chart.d.cts +0 -1
  217. package/dist/charts/engine/trading/chart.d.ts +0 -1
  218. package/dist/charts/engine/trading/chart.js +1048 -883
  219. package/dist/charts/engine/trading/chart.js.map +1 -1
  220. package/dist/charts/engine/trading/drawings.cjs +2 -2
  221. package/dist/charts/engine/trading/drawings.cjs.map +1 -1
  222. package/dist/charts/engine/trading/drawings.d.cts +6 -0
  223. package/dist/charts/engine/trading/drawings.d.ts +6 -0
  224. package/dist/charts/engine/trading/drawings.js +100 -88
  225. package/dist/charts/engine/trading/drawings.js.map +1 -1
  226. package/dist/charts/engine/trading/format.cjs +1 -1
  227. package/dist/charts/engine/trading/format.cjs.map +1 -1
  228. package/dist/charts/engine/trading/format.d.cts +6 -0
  229. package/dist/charts/engine/trading/format.d.ts +6 -0
  230. package/dist/charts/engine/trading/format.js +42 -30
  231. package/dist/charts/engine/trading/format.js.map +1 -1
  232. package/dist/charts/engine/trading/geometry.cjs +1 -1
  233. package/dist/charts/engine/trading/geometry.cjs.map +1 -1
  234. package/dist/charts/engine/trading/geometry.d.cts +16 -0
  235. package/dist/charts/engine/trading/geometry.d.ts +16 -0
  236. package/dist/charts/engine/trading/geometry.js +19 -4
  237. package/dist/charts/engine/trading/geometry.js.map +1 -1
  238. package/dist/charts/engine/trading/labels.cjs +1 -1
  239. package/dist/charts/engine/trading/labels.cjs.map +1 -1
  240. package/dist/charts/engine/trading/labels.js +24 -4
  241. package/dist/charts/engine/trading/labels.js.map +1 -1
  242. package/dist/charts/engine/trading/studies.cjs +1 -1
  243. package/dist/charts/engine/trading/studies.cjs.map +1 -1
  244. package/dist/charts/engine/trading/studies.d.cts +8 -0
  245. package/dist/charts/engine/trading/studies.d.ts +8 -0
  246. package/dist/charts/engine/trading/studies.js +4 -1
  247. package/dist/charts/engine/trading/studies.js.map +1 -1
  248. package/dist/charts/engine/trading/types.d.cts +34 -11
  249. package/dist/charts/engine/trading/types.d.ts +34 -11
  250. package/dist/charts/engine/types.d.cts +25 -4
  251. package/dist/charts/engine/types.d.ts +25 -4
  252. package/dist/charts/react/charts.cjs +1 -1
  253. package/dist/charts/react/charts.cjs.map +1 -1
  254. package/dist/charts/react/charts.js +20 -15
  255. package/dist/charts/react/charts.js.map +1 -1
  256. package/dist/charts/react/graph.cjs +1 -1
  257. package/dist/charts/react/graph.cjs.map +1 -1
  258. package/dist/charts/react/graph.d.cts +6 -0
  259. package/dist/charts/react/graph.d.ts +6 -0
  260. package/dist/charts/react/graph.js +28 -27
  261. package/dist/charts/react/graph.js.map +1 -1
  262. package/dist/charts/react/orderbook.cjs +1 -1
  263. package/dist/charts/react/orderbook.cjs.map +1 -1
  264. package/dist/charts/react/orderbook.d.cts +3 -1
  265. package/dist/charts/react/orderbook.d.ts +3 -1
  266. package/dist/charts/react/orderbook.js +1 -0
  267. package/dist/charts/react/orderbook.js.map +1 -1
  268. package/dist/charts/react/shapes.cjs.map +1 -1
  269. package/dist/charts/react/shapes.d.cts +4 -3
  270. package/dist/charts/react/shapes.d.ts +4 -3
  271. package/dist/charts/react/shapes.js.map +1 -1
  272. package/dist/charts/react/three-d.cjs +1 -1
  273. package/dist/charts/react/three-d.cjs.map +1 -1
  274. package/dist/charts/react/three-d.d.cts +7 -0
  275. package/dist/charts/react/three-d.d.ts +7 -0
  276. package/dist/charts/react/three-d.js +14 -13
  277. package/dist/charts/react/three-d.js.map +1 -1
  278. package/dist/charts/react/trading.cjs.map +1 -1
  279. package/dist/charts/react/trading.d.cts +3 -3
  280. package/dist/charts/react/trading.d.ts +3 -3
  281. package/dist/charts/react/trading.js.map +1 -1
  282. package/dist/core/contracts.cjs +1 -1
  283. package/dist/core/contracts.cjs.map +1 -1
  284. package/dist/core/contracts.js +1 -1
  285. package/dist/core/contracts.js.map +1 -1
  286. package/dist/native/charts/src/canvas.cjs +1 -1
  287. package/dist/native/charts/src/canvas.js +4 -3
  288. package/dist/native/charts/src/engine/controller.cjs +2 -2
  289. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  290. package/dist/native/charts/src/engine/controller.js +102 -104
  291. package/dist/native/charts/src/engine/controller.js.map +1 -1
  292. package/dist/native/charts/src/engine/labels.cjs +1 -1
  293. package/dist/native/charts/src/engine/labels.cjs.map +1 -1
  294. package/dist/native/charts/src/engine/labels.js +14 -1
  295. package/dist/native/charts/src/engine/labels.js.map +1 -1
  296. package/dist/native/charts/src/engine/model.cjs +1 -1
  297. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  298. package/dist/native/charts/src/engine/model.js +180 -157
  299. package/dist/native/charts/src/engine/model.js.map +1 -1
  300. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  301. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  302. package/dist/native/charts/src/engine/presets.cjs +1 -1
  303. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  304. package/dist/native/charts/src/engine/presets.js +8 -2
  305. package/dist/native/charts/src/engine/presets.js.map +1 -1
  306. package/dist/native/charts/src/engine/scene.cjs +1 -1
  307. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  308. package/dist/native/charts/src/engine/scene.js +188 -122
  309. package/dist/native/charts/src/engine/scene.js.map +1 -1
  310. package/dist/native/charts/src/engine/shapes/chord.cjs +1 -1
  311. package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -1
  312. package/dist/native/charts/src/engine/shapes/chord.js +108 -103
  313. package/dist/native/charts/src/engine/shapes/chord.js.map +1 -1
  314. package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
  315. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
  316. package/dist/native/charts/src/engine/shapes/layout.js +88 -73
  317. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
  318. package/dist/native/components/Chart/ChartBase.cjs +1 -1
  319. package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
  320. package/dist/native/components/Chart/ChartBase.js +127 -115
  321. package/dist/native/components/Chart/ChartBase.js.map +1 -1
  322. package/dist/native/components/Chart/charts.cjs +1 -1
  323. package/dist/native/components/Chart/charts.cjs.map +1 -1
  324. package/dist/native/components/Chart/charts.js +8 -5
  325. package/dist/native/components/Chart/charts.js.map +1 -1
  326. package/dist/native/components/Chart/scene.cjs +1 -1
  327. package/dist/native/components/Chart/scene.cjs.map +1 -1
  328. package/dist/native/components/Chart/scene.d.cts +6 -1
  329. package/dist/native/components/Chart/scene.d.ts +6 -1
  330. package/dist/native/components/Chart/scene.js +99 -50
  331. package/dist/native/components/Chart/scene.js.map +1 -1
  332. package/dist/native/components/Chart/types.d.cts +7 -1
  333. package/dist/native/components/Chart/types.d.ts +7 -1
  334. package/dist/native/components/Charts/charts.cjs +1 -1
  335. package/dist/native/components/Charts/charts.cjs.map +1 -1
  336. package/dist/native/components/Charts/charts.js +23 -18
  337. package/dist/native/components/Charts/charts.js.map +1 -1
  338. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
  339. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
  340. package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +1 -1
  341. package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +1 -1
  342. package/dist/native/components/ShapeChart/ShapeChartBase.js +97 -107
  343. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
  344. package/dist/native/components/ShapeChart/geometry.cjs +1 -1
  345. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
  346. package/dist/native/components/ShapeChart/geometry.js +120 -36
  347. package/dist/native/components/ShapeChart/geometry.js.map +1 -1
  348. package/dist/native/components/ShapeChart/types.d.cts +6 -4
  349. package/dist/native/components/ShapeChart/types.d.ts +6 -4
  350. package/dist/native/source/components/Chart/ChartBase.tsx +19 -6
  351. package/dist/native/source/components/Chart/charts.tsx +10 -3
  352. package/dist/native/source/components/Chart/scene.tsx +85 -0
  353. package/dist/native/source/components/Chart/types.ts +7 -0
  354. package/dist/native/source/components/Charts/charts.tsx +7 -0
  355. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +10 -36
  356. package/dist/native/source/components/ShapeChart/geometry.ts +188 -18
  357. package/dist/native/source/components/ShapeChart/types.ts +6 -4
  358. package/dist/taro/chart-a11y.d.ts +7 -0
  359. package/dist/taro/charts.d.ts +4 -1
  360. package/dist/taro/index.js +3212 -3049
  361. package/dist/taro/shape-charts.d.ts +6 -4
  362. package/dist/uni/AreaChart.vue +2 -1
  363. package/dist/uni/AreaChart.vue.d.ts +1 -1
  364. package/dist/uni/BarChart.vue +2 -1
  365. package/dist/uni/BarChart.vue.d.ts +1 -1
  366. package/dist/uni/BoxPlotChart.vue +2 -1
  367. package/dist/uni/BubbleChart.vue +2 -1
  368. package/dist/uni/CandlestickChart.vue +2 -1
  369. package/dist/uni/Chart.vue +2 -1
  370. package/dist/uni/Divider.vue.d.ts +1 -1
  371. package/dist/uni/DonutChart.vue.d.ts +1 -1
  372. package/dist/uni/GanttChart.vue +2 -1
  373. package/dist/uni/GanttChart.vue.d.ts +11 -0
  374. package/dist/uni/GaugeChart.vue.d.ts +1 -1
  375. package/dist/uni/HeatmapChart.vue +2 -1
  376. package/dist/uni/HistogramChart.vue +2 -1
  377. package/dist/uni/HorizontalBarChart.vue +2 -1
  378. package/dist/uni/HorizontalBarChart.vue.d.ts +1 -1
  379. package/dist/uni/LineChart.vue +2 -1
  380. package/dist/uni/MixedChart.vue +2 -1
  381. package/dist/uni/PieChart.vue.d.ts +1 -1
  382. package/dist/uni/QuadrantChart.vue +2 -1
  383. package/dist/uni/RangeAreaChart.vue +2 -1
  384. package/dist/uni/ScatterChart.vue +2 -1
  385. package/dist/uni/Sparkline.vue +2 -1
  386. package/dist/uni/WaterfallChart.vue +2 -1
  387. package/dist/uni/chart-a11y.d.ts +7 -0
  388. package/dist/uni/chart-a11y.js +29 -0
  389. package/dist/uni/chart-canvas.d.ts +9 -0
  390. package/dist/uni/chart-canvas.js +11 -1
  391. package/dist/uni/chart-types.d.ts +8 -1
  392. package/dist/uni/chart-types.js +5 -1
  393. package/dist/uni/charts-canvas.js +2 -1
  394. package/dist/uni/named-chart-options.d.ts +2 -0
  395. package/dist/uni/named-chart-options.js +3 -0
  396. package/dist/uni/shape-chart-canvas.d.ts +0 -2
  397. package/dist/uni/shape-chart-canvas.js +4 -36
  398. package/dist/uni/shape-chart-types.d.ts +2 -2
  399. package/dist/uni/shape-chart-types.js +2 -2
  400. package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +2 -0
  401. package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +2 -0
  402. package/dist/vue/components/Chart/GanttChart.vue.d.ts +15 -0
  403. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
  404. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +8 -0
  405. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  406. package/dist/vue/components/Chart/GraphChart.vue.d.ts +2 -0
  407. package/dist/vue/components/Chart/Line3DChart.vue.d.ts +2 -0
  408. package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +2 -0
  409. package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +2 -0
  410. package/dist/vue/components/Chart/TradingChart.vue.d.ts +9 -0
  411. package/dist/vue/components/Chart/TreeChart.vue.d.ts +2 -0
  412. package/dist/vue/components/Chart/graph.d.ts +3 -0
  413. package/dist/vue/components/Chart/graph.js +2 -0
  414. package/dist/vue/components/Chart/graph.js.map +1 -1
  415. package/dist/vue/components/Chart/three-d.d.ts +3 -0
  416. package/dist/vue/components/Chart/three-d.js +2 -0
  417. package/dist/vue/components/Chart/three-d.js.map +1 -1
  418. package/dist/vue/components/Chart/trading.d.ts +7 -2
  419. package/dist/vue/components/Chart/trading.js +1 -0
  420. package/dist/vue/components/Chart/trading.js.map +1 -1
  421. package/dist/weapp/area-chart/index.wxml +1 -1
  422. package/dist/weapp/bar-chart/index.wxml +1 -1
  423. package/dist/weapp/box-plot-chart/index.wxml +1 -1
  424. package/dist/weapp/bubble-chart/index.wxml +1 -1
  425. package/dist/weapp/candlestick-chart/index.wxml +1 -1
  426. package/dist/weapp/chart/index.wxml +1 -1
  427. package/dist/weapp/charts/canvas.js +326 -54
  428. package/dist/weapp/charts/core.js +2 -0
  429. package/dist/weapp/controls.js +58 -27
  430. package/dist/weapp/gantt-chart/index.wxml +1 -1
  431. package/dist/weapp/heatmap-chart/index.wxml +1 -1
  432. package/dist/weapp/histogram-chart/index.wxml +1 -1
  433. package/dist/weapp/horizontal-bar-chart/index.wxml +1 -1
  434. package/dist/weapp/line-chart/index.wxml +1 -1
  435. package/dist/weapp/mixed-chart/index.wxml +1 -1
  436. package/dist/weapp/quadrant-chart/index.wxml +1 -1
  437. package/dist/weapp/range-area-chart/index.wxml +1 -1
  438. package/dist/weapp/scatter-chart/index.wxml +1 -1
  439. package/dist/weapp/sparkline/index.wxml +1 -1
  440. package/dist/weapp/types.d.ts +11 -2
  441. package/dist/weapp/waterfall-chart/index.wxml +1 -1
  442. package/dist/web-components/components/chart/extended.d.ts +4 -0
  443. package/dist/web-components/components/chart/extended.js +8 -2
  444. package/dist/web-components/components/chart/extended.js.map +1 -1
  445. package/dist/web-components/components/chart-3d/chart-3d.d.ts +1 -1
  446. package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -1
  447. package/dist/web-components/components/graph/graph.d.ts +2 -0
  448. package/dist/web-components/components/graph/graph.js +3 -2
  449. package/dist/web-components/components/graph/graph.js.map +1 -1
  450. package/dist/web-components/components/trading-chart/trading-chart.d.ts +1 -1
  451. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
  452. package/dist/web-components/html-custom-data.json +45 -0
  453. package/dist/web-components/types/react.d.ts +4 -4
  454. package/dist/web-components/types/solid.d.ts +8 -8
  455. package/dist/web-components/types/svelte.d.ts +8 -8
  456. package/dist/web-components/types/vue.d.ts +4 -4
  457. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChartBase.cjs","names":["createChartController","measureChartText","drawStatic","useState","View","part","tooltipCard","useTheme","useMemo","chartThemeInput","useRef","StyleSheet","chartAriaLabel","drawHover","require_MinervaProvider","require_parts","require_labels","require_controller","require_measure","require_scene","require_theme","react","react_native","react_jsx_runtime","engineOptions","props","CUSTOM_TOOLTIP","idOf","id","t","index","requestFrame","callback","createChartStore","version","frame","listeners","cache","origin","touches","dragsPoints","o","draggable","options","claimed","notify","listener","cancelFrame","controller","size","local","sync","n","event","i","p","previous","store","next","scene","key","view","plot","family","value","active","changed","last","touch","base","CustomTooltip","setSize","left","anchor","top","width","height","w","h","ChartBase","handlers","fonts","theme","tokens","customTooltip","renderTooltip","resolved","applied","current","handlersRef","offs","e","v","off","handleRef","onLayout","tooltip","content","style","overlay"],"sources":["../../../../../native/src/components/Chart/ChartBase.tsx"],"sourcesContent":["// The chart host of React Native: owns a platform-free chart controller\n// (@minerva/charts/canvas: options, model, zoom, gestures, scene in pixels)\n// and draws its scene with views (./scene). Touches go through the\n// responder system; the drawing is `pointerEvents=\"none\"`, so every touch\n// lands on the surface and positions come from page coordinates.\n\nimport {\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport {\n StyleSheet,\n View,\n type DimensionValue,\n type GestureResponderEvent,\n type LayoutChangeEvent,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport {\n chartAriaLabel,\n createChartController,\n type ChartController,\n type ChartDragEvent,\n type ChartHoverEvent,\n type ChartOptions,\n type ChartPlotClickEvent,\n type ChartRect,\n type ChartScene,\n type ChartThemeInput,\n type ChartTooltipOptions,\n type ChartView,\n} from \"@minerva/charts/canvas\";\nimport { useTheme } from \"../../theme/MinervaProvider\";\nimport { part } from \"../../internal/parts\";\nimport { measureChartText } from \"./measure\";\nimport { drawHover, drawStatic, tooltipCard } from \"./scene\";\nimport { chartThemeInput } from \"./theme\";\nimport type { ChartCommonProps, ChartHandle } from \"./types\";\n\ninterface Handlers {\n onHover?: (event: ChartHoverEvent | null) => void;\n onPointClick?: (event: ChartHoverEvent) => void;\n onPlotClick?: (event: ChartPlotClickEvent) => void;\n onZoom?: (view: ChartView) => void;\n onDrag?: (event: ChartDragEvent) => void;\n onDrop?: (event: ChartDragEvent) => void;\n}\n\n/** Engine options of the common props */\nexport const engineOptions = (\n props: Pick<\n ChartCommonProps,\n | \"xAxis\"\n | \"yAxis\"\n | \"legend\"\n | \"tooltip\"\n | \"crosshair\"\n | \"annotations\"\n | \"interaction\"\n | \"padding\"\n | \"palette\"\n | \"ariaLabel\"\n | \"locale\"\n | \"labels\"\n > &\n Pick<ChartOptions, \"series\">,\n): ChartOptions => ({\n series: props.series,\n xAxis: props.xAxis,\n yAxis: props.yAxis,\n legend: props.legend,\n tooltip: props.tooltip,\n crosshair: props.crosshair,\n annotations: props.annotations,\n interaction: props.interaction,\n padding: props.padding,\n palette: props.palette,\n ariaLabel: props.ariaLabel,\n locale: props.locale,\n labels: props.labels,\n});\n\ntype TooltipResult = Exclude<\n ReturnType<NonNullable<ChartTooltipOptions[\"render\"]>>,\n string | null\n>;\n/** Non-string result of `tooltip.render`: the engine lays a tooltip out without drawing text */\nconst CUSTOM_TOOLTIP = {} as unknown as TooltipResult;\n\ninterface TouchPoint {\n identifier?: number | string;\n pageX: number;\n pageY: number;\n locationX?: number;\n locationY?: number;\n}\n\nconst idOf = (t: TouchPoint, index: number) => {\n const id = Number(t.identifier);\n return Number.isFinite(id) ? id : index;\n};\n\ntype Frame = { cancel: () => void };\n\nconst requestFrame = (callback: () => void): Frame => {\n if (typeof requestAnimationFrame === \"function\") {\n const id = requestAnimationFrame(callback);\n return { cancel: () => cancelAnimationFrame(id) };\n }\n const id = setTimeout(callback, 16);\n return { cancel: () => clearTimeout(id) };\n};\n\n/**\n * External store of a chart: the controller, a version bumped when its\n * scene must be drawn again (coalesced per frame), the touches being\n * tracked and the cache of the static layers.\n */\ninterface ChartStore {\n controller: ChartController;\n /** Options of the controller (`setOptions` of the controller) */\n setOptions: (options: ChartOptions) => void;\n subscribe: (listener: () => void) => () => void;\n version: () => number;\n /** Draws again now */\n commit: () => void;\n /** Static layers of a scene (cached while model / view / size are the same) */\n layers: (scene: ChartScene, family: string | undefined) => ReactNode;\n /** Last single-finger position (anchor of a custom tooltip) */\n anchor: { x: number; y: number } | null;\n /**\n * First finger (responder grant); returns whether the chart owns the\n * gesture, which keeps native scroll views from taking it (Android)\n */\n touchStart: (event: GestureResponderEvent) => boolean;\n /** Another finger touches the chart */\n touchAdd: (event: GestureResponderEvent) => void;\n /** Moves (drawn on the next frame) */\n touchMove: (event: GestureResponderEvent) => void;\n touchEnd: (event: GestureResponderEvent) => void;\n touchCancel: () => void;\n /** Whether the chart keeps the touches (pinch, point drag, pan when zoomed) */\n holdsGesture: () => boolean;\n}\n\nfunction createChartStore(\n options: ChartOptions,\n theme: ChartThemeInput,\n size: [number, number] | null,\n): ChartStore {\n let version = 0;\n let frame: Frame | null = null;\n const listeners = new Set<() => void>();\n let cache: { key: unknown[]; node: ReactNode } | null = null;\n let origin = { x: 0, y: 0 };\n const touches = new Map<number, { x: number; y: number }>();\n const dragsPoints = (o: ChartOptions) =>\n typeof o.interaction === \"object\" && !!o.interaction.dragPoints;\n let draggable = dragsPoints(options);\n /** The current touch sequence started on the plot of a draggable chart */\n let claimed = false;\n\n const notify = () => {\n version++;\n listeners.forEach((listener) => listener());\n };\n const cancelFrame = () => {\n frame?.cancel();\n frame = null;\n };\n const schedule = () => {\n if (frame || !listeners.size) return;\n frame = requestFrame(() => {\n frame = null;\n notify();\n });\n };\n\n const controller = createChartController({\n options,\n theme,\n measureText: measureChartText,\n onInvalidate: schedule,\n });\n if (size) controller.setSize(size[0], size[1]);\n\n const local = (t: TouchPoint) => ({\n x: t.pageX - origin.x,\n y: t.pageY - origin.y,\n });\n\n /** Feeds the controller the fingers that appeared or moved */\n const sync = (event: GestureResponderEvent) => {\n const n = event.nativeEvent;\n const list: readonly TouchPoint[] = n.touches?.length\n ? n.touches\n : [n as unknown as TouchPoint];\n list.forEach((t, i) => {\n const id = idOf(t, i);\n const p = local(t);\n const previous = touches.get(id);\n if (!previous) {\n touches.set(id, p);\n controller.pointerDown(p.x, p.y, { id, touch: true });\n } else if (previous.x !== p.x || previous.y !== p.y) {\n touches.set(id, p);\n controller.pointerMove(p.x, p.y, { id, touch: true });\n }\n });\n if (touches.size === 1) store.anchor = [...touches.values()][0];\n };\n\n const store: ChartStore = {\n controller,\n setOptions(next) {\n draggable = dragsPoints(next);\n controller.setOptions(next);\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (!listeners.size) cancelFrame();\n };\n },\n version: () => version,\n commit() {\n cancelFrame();\n notify();\n },\n layers(scene, family) {\n const { plot } = scene.layout;\n const { view } = scene;\n const key = [\n scene.model,\n scene.annotations,\n scene.theme,\n scene.width,\n scene.height,\n view.x[0],\n view.x[1],\n view.y[0],\n view.y[1],\n plot.x,\n plot.y,\n plot.width,\n plot.height,\n family,\n ];\n if (!cache || cache.key.some((value, i) => value !== key[i]))\n cache = { key, node: drawStatic(scene, family) };\n return cache.node;\n },\n anchor: null,\n touchStart(event) {\n const n = event.nativeEvent as unknown as TouchPoint;\n // the drawing ignores touches: `location` is relative to the surface\n if (!touches.size && n.locationX !== undefined)\n origin = { x: n.pageX - n.locationX, y: n.pageY - (n.locationY ?? 0) };\n sync(event);\n store.commit();\n // draggable points: the drag only starts after the touch slop, too\n // late to keep a scroll view from stealing the touch: claim it now\n const plot = controller.getPlotRect();\n const p = touches.values().next().value;\n claimed =\n draggable &&\n !!plot &&\n !!p &&\n p.x >= plot.x &&\n p.x <= plot.x + plot.width &&\n p.y >= plot.y &&\n p.y <= plot.y + plot.height;\n return store.holdsGesture();\n },\n touchAdd(event) {\n sync(event);\n store.commit();\n },\n touchMove: sync,\n touchEnd(event) {\n const n = event.nativeEvent;\n const active = new Set(\n (n.touches ?? []).map((t, i) => idOf(t as TouchPoint, i)),\n );\n const changed: readonly TouchPoint[] = n.changedTouches?.length\n ? n.changedTouches\n : [n as unknown as TouchPoint];\n for (const [id, last] of [...touches]) {\n if (active.has(id)) continue;\n const touch = changed.find((t, i) => idOf(t, i) === id);\n const p = touch ? local(touch) : last;\n touches.delete(id);\n if (touches.size === 0) store.anchor = p;\n controller.pointerUp(p.x, p.y, { id, touch: true });\n }\n store.commit();\n },\n touchCancel() {\n for (const id of touches.keys()) controller.pointerCancel({ id });\n touches.clear();\n store.commit();\n },\n holdsGesture() {\n if (touches.size > 1 || (claimed && touches.size > 0)) return true;\n const scene = controller.getScene();\n if (!scene) return false;\n if (scene.dragging) return true;\n const { base } = scene.model;\n const view = controller.getView();\n return (\n view.x[0] !== base.x[0] ||\n view.x[1] !== base.x[1] ||\n view.y[0] !== base.y[0] ||\n view.y[1] !== base.y[1]\n );\n },\n };\n return store;\n}\n\n/** A `renderTooltip` node, placed next to the finger once measured */\nfunction CustomTooltip({\n scene,\n anchor,\n children,\n}: {\n scene: ChartScene;\n anchor: { x: number; y: number };\n children: ReactNode;\n}) {\n const [size, setSize] = useState<{ width: number; height: number } | null>(\n null,\n );\n const { width, height } = scene;\n let left = anchor.x + 14;\n let top = anchor.y;\n if (size) {\n if (left + size.width > width - 4) left = anchor.x - 14 - size.width;\n left = Math.max(4, Math.min(left, width - size.width - 4));\n top = Math.max(\n 4,\n Math.min(anchor.y - size.height / 2, height - size.height - 4),\n );\n }\n return (\n <View\n pointerEvents=\"none\"\n {...part(\"chart\", \"tooltip\", { custom: true })}\n onLayout={(e: LayoutChangeEvent) => {\n const { width: w, height: h } = e.nativeEvent.layout;\n setSize((previous) =>\n previous && previous.width === w && previous.height === h\n ? previous\n : { width: w, height: h },\n );\n }}\n style={[\n tooltipCard(scene),\n {\n // laid out at the origin (full width available), moved by a transform\n left: 0,\n top: 0,\n maxWidth: Math.max(0, width - 8),\n padding: 8,\n opacity: size ? 1 : 0,\n transform: [{ translateX: left }, { translateY: top }],\n },\n ]}\n >\n {children}\n </View>\n );\n}\n\ninterface ChartBaseProps extends Handlers {\n options: ChartOptions;\n height?: DimensionValue;\n width?: DimensionValue;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n handleRef?: Ref<ChartHandle>;\n /** React content of the tooltip (replaces the engine's content) */\n renderTooltip?: (event: ChartHoverEvent) => ReactNode;\n /** React content placed over the plot area, given the plot rectangle */\n overlay?: (plot: ChartRect) => ReactNode;\n}\n\n/** Sizes the chart, forwards options / theme / touches to the controller and draws its scene */\nexport function ChartBase({\n options,\n height = 320,\n width = \"100%\",\n style,\n testID,\n handleRef,\n renderTooltip,\n overlay,\n ...handlers\n}: ChartBaseProps) {\n const { tokens, fonts } = useTheme();\n const family = fonts.sans;\n const theme = useMemo(() => chartThemeInput(tokens), [tokens]);\n const customTooltip = !!renderTooltip && options.tooltip !== false;\n const resolved = useMemo((): ChartOptions => {\n if (!customTooltip) return options;\n const base = typeof options.tooltip === \"object\" ? options.tooltip : {};\n return { ...options, tooltip: { ...base, render: () => CUSTOM_TOOLTIP } };\n }, [options, customTooltip]);\n\n const [store] = useState(() =>\n createChartStore(\n resolved,\n theme,\n typeof width === \"number\" && typeof height === \"number\"\n ? [width, height]\n : null,\n ),\n );\n const { controller } = store;\n useSyncExternalStore(store.subscribe, store.version, store.version);\n\n const applied = useRef({ options: resolved, theme });\n useLayoutEffect(() => {\n const current = applied.current;\n if (current.theme === theme && current.options === resolved) return;\n if (current.theme !== theme) controller.setTheme(theme);\n if (current.options !== resolved) store.setOptions(resolved);\n applied.current = { options: resolved, theme };\n store.commit();\n }, [controller, store, resolved, theme]);\n\n useLayoutEffect(() => {\n if (typeof width !== \"number\" || typeof height !== \"number\") return;\n const scene = controller.getScene();\n if (scene && scene.width === width && scene.height === height) return;\n controller.setSize(width, height);\n store.commit();\n }, [controller, store, width, height]);\n\n const handlersRef = useRef<Handlers>(handlers);\n useLayoutEffect(() => {\n handlersRef.current = handlers;\n });\n useEffect(() => {\n const h = handlersRef;\n const offs = [\n controller.on(\"hover\", (e) => h.current.onHover?.(e)),\n controller.on(\"click\", (e) => h.current.onPointClick?.(e)),\n controller.on(\"plotClick\", (e) => h.current.onPlotClick?.(e)),\n controller.on(\"zoom\", (v) => h.current.onZoom?.(v)),\n controller.on(\"drag\", (e) => h.current.onDrag?.(e)),\n controller.on(\"drop\", (e) => h.current.onDrop?.(e)),\n ];\n return () => offs.forEach((off) => off());\n }, [controller]);\n\n useImperativeHandle(\n handleRef,\n () => ({\n resetZoom: () => controller.resetZoom(),\n getView: () => controller.getView(),\n setView: (view) => controller.setView(view),\n getPlotRect: () => controller.getPlotRect(),\n getController: () => controller,\n }),\n [controller],\n );\n\n const onLayout = (e: LayoutChangeEvent) => {\n const { width: w, height: h } = e.nativeEvent.layout;\n const scene = controller.getScene();\n if (scene && scene.width === w && scene.height === h) return;\n controller.setSize(w, h);\n store.commit();\n };\n\n const scene = controller.getScene();\n let tooltip: ReactNode = null;\n const event = scene?.hover?.tooltip ? scene.hover.event : null;\n if (scene && event && customTooltip && renderTooltip) {\n const content = renderTooltip(event);\n const anchor = store.anchor ?? scene.hover?.marks[0] ?? null;\n if (\n content !== null &&\n content !== undefined &&\n content !== false &&\n anchor\n )\n tooltip = (\n <CustomTooltip scene={scene} anchor={anchor}>\n {content}\n </CustomTooltip>\n );\n }\n\n return (\n <View\n testID={testID}\n onLayout={onLayout}\n style={[{ width, height }, style]}\n {...part(\"chart\", \"root\")}\n >\n <View\n style={StyleSheet.absoluteFill}\n accessible\n accessibilityRole=\"image\"\n accessibilityLabel={\n options.ariaLabel ?? (scene ? chartAriaLabel(scene.model) : undefined)\n }\n onStartShouldSetResponder={() => true}\n onResponderTerminationRequest={() => !store.holdsGesture()}\n onResponderGrant={store.touchStart}\n onResponderStart={store.touchAdd}\n onResponderMove={store.touchMove}\n onResponderEnd={store.touchEnd}\n onResponderRelease={store.touchEnd}\n onResponderTerminate={store.touchCancel}\n {...part(\"chart\", \"surface\")}\n >\n <View pointerEvents=\"none\" style={StyleSheet.absoluteFill}>\n {scene ? store.layers(scene, family) : null}\n {scene ? drawHover(scene, family, customTooltip) : null}\n </View>\n </View>\n {overlay && scene ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n left: scene.layout.plot.x,\n top: scene.layout.plot.y,\n width: scene.layout.plot.width,\n height: scene.layout.plot.height,\n }}\n {...part(\"chart\", \"overlay\")}\n >\n {overlay(scene.layout.plot)}\n </View>\n ) : null}\n {tooltip}\n </View>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ChartBase.cjs","names":["createChartController","measureChartText","drawStatic","useState","View","part","tooltipCard","useTheme","useI18n","useMemo","chartThemeInput","useRef","StyleSheet","describeChart","drawHover","require_MinervaProvider","require_parts","require_labels","require_controller","require_measure","require_scene","require_theme","react","react_native","react_jsx_runtime","engineOptions","props","CUSTOM_TOOLTIP","idOf","id","t","index","requestFrame","callback","createChartStore","version","frame","listeners","cache","origin","touches","dragsPoints","o","draggable","options","claimed","notify","listener","cancelFrame","controller","size","local","sync","n","event","i","p","previous","store","next","scene","key","view","plot","family","value","active","changed","last","touch","base","CustomTooltip","setSize","left","anchor","top","width","height","w","h","ChartBase","handlers","fonts","theme","tokens","customTooltip","renderTooltip","resolved","localized","language","applied","current","handlersRef","offs","e","v","off","handleRef","onLayout","tooltip","content","style","overlay"],"sources":["../../../../../native/src/components/Chart/ChartBase.tsx"],"sourcesContent":["// The chart host of React Native: owns a platform-free chart controller\n// (@minerva/charts/canvas: options, model, zoom, gestures, scene in pixels)\n// and draws its scene with views (./scene). Touches go through the\n// responder system; the drawing is `pointerEvents=\"none\"`, so every touch\n// lands on the surface and positions come from page coordinates.\n\nimport {\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport {\n StyleSheet,\n View,\n type DimensionValue,\n type GestureResponderEvent,\n type LayoutChangeEvent,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport {\n createChartController,\n describeChart,\n type ChartController,\n type ChartDragEvent,\n type ChartHoverEvent,\n type ChartOptions,\n type ChartPlotClickEvent,\n type ChartRect,\n type ChartScene,\n type ChartThemeInput,\n type ChartTooltipOptions,\n type ChartView,\n} from \"@minerva/charts/canvas\";\nimport { useI18n, useTheme } from \"../../theme/MinervaProvider\";\nimport { part } from \"../../internal/parts\";\nimport { measureChartText } from \"./measure\";\nimport { drawHover, drawStatic, tooltipCard } from \"./scene\";\nimport { chartThemeInput } from \"./theme\";\nimport type { ChartCommonProps, ChartHandle } from \"./types\";\n\ninterface Handlers {\n onHover?: (event: ChartHoverEvent | null) => void;\n onPointClick?: (event: ChartHoverEvent) => void;\n onPlotClick?: (event: ChartPlotClickEvent) => void;\n onZoom?: (view: ChartView) => void;\n onDrag?: (event: ChartDragEvent) => void;\n onDrop?: (event: ChartDragEvent) => void;\n}\n\n/** Engine options of the common props */\nexport const engineOptions = (\n props: Pick<\n ChartCommonProps,\n | \"xAxis\"\n | \"yAxis\"\n | \"legend\"\n | \"tooltip\"\n | \"crosshair\"\n | \"annotations\"\n | \"interaction\"\n | \"padding\"\n | \"palette\"\n | \"ariaLabel\"\n | \"locale\"\n | \"labels\"\n > &\n Pick<ChartOptions, \"series\">,\n): ChartOptions => ({\n series: props.series,\n xAxis: props.xAxis,\n yAxis: props.yAxis,\n legend: props.legend,\n tooltip: props.tooltip,\n crosshair: props.crosshair,\n annotations: props.annotations,\n interaction: props.interaction,\n padding: props.padding,\n palette: props.palette,\n ariaLabel: props.ariaLabel,\n locale: props.locale,\n labels: props.labels,\n});\n\ntype TooltipResult = Exclude<\n ReturnType<NonNullable<ChartTooltipOptions[\"render\"]>>,\n string | null\n>;\n/** Non-string result of `tooltip.render`: the engine lays a tooltip out without drawing text */\nconst CUSTOM_TOOLTIP = {} as unknown as TooltipResult;\n\ninterface TouchPoint {\n identifier?: number | string;\n pageX: number;\n pageY: number;\n locationX?: number;\n locationY?: number;\n}\n\nconst idOf = (t: TouchPoint, index: number) => {\n const id = Number(t.identifier);\n return Number.isFinite(id) ? id : index;\n};\n\ntype Frame = { cancel: () => void };\n\nconst requestFrame = (callback: () => void): Frame => {\n if (typeof requestAnimationFrame === \"function\") {\n const id = requestAnimationFrame(callback);\n return { cancel: () => cancelAnimationFrame(id) };\n }\n const id = setTimeout(callback, 16);\n return { cancel: () => clearTimeout(id) };\n};\n\n/**\n * External store of a chart: the controller, a version bumped when its\n * scene must be drawn again (coalesced per frame), the touches being\n * tracked and the cache of the static layers.\n */\ninterface ChartStore {\n controller: ChartController;\n /** Options of the controller (`setOptions` of the controller) */\n setOptions: (options: ChartOptions) => void;\n subscribe: (listener: () => void) => () => void;\n version: () => number;\n /** Draws again now */\n commit: () => void;\n /** Static layers of a scene (cached while model / view / size are the same) */\n layers: (scene: ChartScene, family: string | undefined) => ReactNode;\n /** Last single-finger position (anchor of a custom tooltip) */\n anchor: { x: number; y: number } | null;\n /**\n * First finger (responder grant); returns whether the chart owns the\n * gesture, which keeps native scroll views from taking it (Android)\n */\n touchStart: (event: GestureResponderEvent) => boolean;\n /** Another finger touches the chart */\n touchAdd: (event: GestureResponderEvent) => void;\n /** Moves (drawn on the next frame) */\n touchMove: (event: GestureResponderEvent) => void;\n touchEnd: (event: GestureResponderEvent) => void;\n touchCancel: () => void;\n /** Whether the chart keeps the touches (pinch, point drag, pan when zoomed) */\n holdsGesture: () => boolean;\n}\n\nfunction createChartStore(\n options: ChartOptions,\n theme: ChartThemeInput,\n size: [number, number] | null,\n): ChartStore {\n let version = 0;\n let frame: Frame | null = null;\n const listeners = new Set<() => void>();\n let cache: { key: unknown[]; node: ReactNode } | null = null;\n let origin = { x: 0, y: 0 };\n const touches = new Map<number, { x: number; y: number }>();\n const dragsPoints = (o: ChartOptions) =>\n typeof o.interaction === \"object\" && !!o.interaction.dragPoints;\n let draggable = dragsPoints(options);\n /** The current touch sequence started on the plot of a draggable chart */\n let claimed = false;\n\n const notify = () => {\n version++;\n listeners.forEach((listener) => listener());\n };\n const cancelFrame = () => {\n frame?.cancel();\n frame = null;\n };\n const schedule = () => {\n if (frame || !listeners.size) return;\n frame = requestFrame(() => {\n frame = null;\n notify();\n });\n };\n\n const controller = createChartController({\n options,\n theme,\n measureText: measureChartText,\n onInvalidate: schedule,\n });\n if (size) controller.setSize(size[0], size[1]);\n\n const local = (t: TouchPoint) => ({\n x: t.pageX - origin.x,\n y: t.pageY - origin.y,\n });\n\n /** Feeds the controller the fingers that appeared or moved */\n const sync = (event: GestureResponderEvent) => {\n const n = event.nativeEvent;\n const list: readonly TouchPoint[] = n.touches?.length\n ? n.touches\n : [n as unknown as TouchPoint];\n list.forEach((t, i) => {\n const id = idOf(t, i);\n const p = local(t);\n const previous = touches.get(id);\n if (!previous) {\n touches.set(id, p);\n controller.pointerDown(p.x, p.y, { id, touch: true });\n } else if (previous.x !== p.x || previous.y !== p.y) {\n touches.set(id, p);\n controller.pointerMove(p.x, p.y, { id, touch: true });\n }\n });\n if (touches.size === 1) store.anchor = [...touches.values()][0];\n };\n\n const store: ChartStore = {\n controller,\n setOptions(next) {\n draggable = dragsPoints(next);\n controller.setOptions(next);\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (!listeners.size) cancelFrame();\n };\n },\n version: () => version,\n commit() {\n cancelFrame();\n notify();\n },\n layers(scene, family) {\n const { plot } = scene.layout;\n const { view } = scene;\n const key = [\n scene.model,\n scene.annotations,\n scene.theme,\n scene.width,\n scene.height,\n view.x[0],\n view.x[1],\n view.y[0],\n view.y[1],\n plot.x,\n plot.y,\n plot.width,\n plot.height,\n family,\n ];\n if (!cache || cache.key.some((value, i) => value !== key[i]))\n cache = { key, node: drawStatic(scene, family) };\n return cache.node;\n },\n anchor: null,\n touchStart(event) {\n const n = event.nativeEvent as unknown as TouchPoint;\n // the drawing ignores touches: `location` is relative to the surface\n if (!touches.size && n.locationX !== undefined)\n origin = { x: n.pageX - n.locationX, y: n.pageY - (n.locationY ?? 0) };\n sync(event);\n store.commit();\n // draggable points: the drag only starts after the touch slop, too\n // late to keep a scroll view from stealing the touch: claim it now\n const plot = controller.getPlotRect();\n const p = touches.values().next().value;\n claimed =\n draggable &&\n !!plot &&\n !!p &&\n p.x >= plot.x &&\n p.x <= plot.x + plot.width &&\n p.y >= plot.y &&\n p.y <= plot.y + plot.height;\n return store.holdsGesture();\n },\n touchAdd(event) {\n sync(event);\n store.commit();\n },\n touchMove: sync,\n touchEnd(event) {\n const n = event.nativeEvent;\n const active = new Set(\n (n.touches ?? []).map((t, i) => idOf(t as TouchPoint, i)),\n );\n const changed: readonly TouchPoint[] = n.changedTouches?.length\n ? n.changedTouches\n : [n as unknown as TouchPoint];\n for (const [id, last] of [...touches]) {\n if (active.has(id)) continue;\n const touch = changed.find((t, i) => idOf(t, i) === id);\n const p = touch ? local(touch) : last;\n touches.delete(id);\n if (touches.size === 0) store.anchor = p;\n controller.pointerUp(p.x, p.y, { id, touch: true });\n }\n store.commit();\n },\n touchCancel() {\n for (const id of touches.keys()) controller.pointerCancel({ id });\n touches.clear();\n store.commit();\n },\n holdsGesture() {\n if (touches.size > 1 || (claimed && touches.size > 0)) return true;\n const scene = controller.getScene();\n if (!scene) return false;\n if (scene.dragging) return true;\n const { base } = scene.model;\n const view = controller.getView();\n return (\n view.x[0] !== base.x[0] ||\n view.x[1] !== base.x[1] ||\n view.y[0] !== base.y[0] ||\n view.y[1] !== base.y[1]\n );\n },\n };\n return store;\n}\n\n/** A `renderTooltip` node, placed next to the finger once measured */\nfunction CustomTooltip({\n scene,\n anchor,\n children,\n}: {\n scene: ChartScene;\n anchor: { x: number; y: number };\n children: ReactNode;\n}) {\n const [size, setSize] = useState<{ width: number; height: number } | null>(\n null,\n );\n const { width, height } = scene;\n let left = anchor.x + 14;\n let top = anchor.y;\n if (size) {\n if (left + size.width > width - 4) left = anchor.x - 14 - size.width;\n left = Math.max(4, Math.min(left, width - size.width - 4));\n top = Math.max(\n 4,\n Math.min(anchor.y - size.height / 2, height - size.height - 4),\n );\n }\n return (\n <View\n pointerEvents=\"none\"\n {...part(\"chart\", \"tooltip\", { custom: true })}\n onLayout={(e: LayoutChangeEvent) => {\n const { width: w, height: h } = e.nativeEvent.layout;\n setSize((previous) =>\n previous && previous.width === w && previous.height === h\n ? previous\n : { width: w, height: h },\n );\n }}\n style={[\n tooltipCard(scene),\n {\n // laid out at the origin (full width available), moved by a transform\n left: 0,\n top: 0,\n maxWidth: Math.max(0, width - 8),\n padding: 8,\n opacity: size ? 1 : 0,\n transform: [{ translateX: left }, { translateY: top }],\n },\n ]}\n >\n {children}\n </View>\n );\n}\n\ninterface ChartBaseProps extends Handlers {\n options: ChartOptions;\n height?: DimensionValue;\n width?: DimensionValue;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n handleRef?: Ref<ChartHandle>;\n /** React content of the tooltip (replaces the engine's content) */\n renderTooltip?: (event: ChartHoverEvent) => ReactNode;\n /** React content placed over the plot area, given the plot rectangle */\n overlay?: (plot: ChartRect) => ReactNode;\n}\n\n/** Sizes the chart, forwards options / theme / touches to the controller and draws its scene */\nexport function ChartBase({\n options,\n height = 320,\n width = \"100%\",\n style,\n testID,\n handleRef,\n renderTooltip,\n overlay,\n ...handlers\n}: ChartBaseProps) {\n const { tokens, fonts } = useTheme();\n const { language } = useI18n();\n const family = fonts.sans;\n const theme = useMemo(() => chartThemeInput(tokens), [tokens]);\n const customTooltip = !!renderTooltip && options.tooltip !== false;\n const resolved = useMemo((): ChartOptions => {\n // The chart's own locale wins over the language of the provider.\n const localized = options.locale\n ? options\n : { ...options, locale: language };\n if (!customTooltip) return localized;\n const base = typeof options.tooltip === \"object\" ? options.tooltip : {};\n return {\n ...localized,\n tooltip: { ...base, render: () => CUSTOM_TOOLTIP },\n };\n }, [options, customTooltip, language]);\n\n const [store] = useState(() =>\n createChartStore(\n resolved,\n theme,\n typeof width === \"number\" && typeof height === \"number\"\n ? [width, height]\n : null,\n ),\n );\n const { controller } = store;\n useSyncExternalStore(store.subscribe, store.version, store.version);\n\n const applied = useRef({ options: resolved, theme });\n useLayoutEffect(() => {\n const current = applied.current;\n if (current.theme === theme && current.options === resolved) return;\n if (current.theme !== theme) controller.setTheme(theme);\n if (current.options !== resolved) store.setOptions(resolved);\n applied.current = { options: resolved, theme };\n store.commit();\n }, [controller, store, resolved, theme]);\n\n useLayoutEffect(() => {\n if (typeof width !== \"number\" || typeof height !== \"number\") return;\n const scene = controller.getScene();\n if (scene && scene.width === width && scene.height === height) return;\n controller.setSize(width, height);\n store.commit();\n }, [controller, store, width, height]);\n\n const handlersRef = useRef<Handlers>(handlers);\n useLayoutEffect(() => {\n handlersRef.current = handlers;\n });\n useEffect(() => {\n const h = handlersRef;\n const offs = [\n controller.on(\"hover\", (e) => h.current.onHover?.(e)),\n controller.on(\"click\", (e) => h.current.onPointClick?.(e)),\n controller.on(\"plotClick\", (e) => h.current.onPlotClick?.(e)),\n controller.on(\"zoom\", (v) => h.current.onZoom?.(v)),\n controller.on(\"drag\", (e) => h.current.onDrag?.(e)),\n controller.on(\"drop\", (e) => h.current.onDrop?.(e)),\n ];\n return () => offs.forEach((off) => off());\n }, [controller]);\n\n useImperativeHandle(\n handleRef,\n () => ({\n resetZoom: () => controller.resetZoom(),\n getView: () => controller.getView(),\n setView: (view) => controller.setView(view),\n getPlotRect: () => controller.getPlotRect(),\n getController: () => controller,\n }),\n [controller],\n );\n\n const onLayout = (e: LayoutChangeEvent) => {\n const { width: w, height: h } = e.nativeEvent.layout;\n const scene = controller.getScene();\n if (scene && scene.width === w && scene.height === h) return;\n controller.setSize(w, h);\n store.commit();\n };\n\n const scene = controller.getScene();\n let tooltip: ReactNode = null;\n const event = scene?.hover?.tooltip ? scene.hover.event : null;\n if (scene && event && customTooltip && renderTooltip) {\n const content = renderTooltip(event);\n const anchor = store.anchor ?? scene.hover?.marks[0] ?? null;\n if (\n content !== null &&\n content !== undefined &&\n content !== false &&\n anchor\n )\n tooltip = (\n <CustomTooltip scene={scene} anchor={anchor}>\n {content}\n </CustomTooltip>\n );\n }\n\n return (\n <View\n testID={testID}\n onLayout={onLayout}\n style={[{ width, height }, style]}\n {...part(\"chart\", \"root\")}\n >\n <View\n style={StyleSheet.absoluteFill}\n accessible\n accessibilityRole=\"image\"\n accessibilityLabel={\n resolved.ariaLabel ??\n describeChart({\n locale: resolved.locale,\n labels: resolved.labels,\n series: scene?.model.series,\n })\n }\n onStartShouldSetResponder={() => true}\n onResponderTerminationRequest={() => !store.holdsGesture()}\n onResponderGrant={store.touchStart}\n onResponderStart={store.touchAdd}\n onResponderMove={store.touchMove}\n onResponderEnd={store.touchEnd}\n onResponderRelease={store.touchEnd}\n onResponderTerminate={store.touchCancel}\n {...part(\"chart\", \"surface\")}\n >\n <View pointerEvents=\"none\" style={StyleSheet.absoluteFill}>\n {scene ? store.layers(scene, family) : null}\n {scene ? drawHover(scene, family, customTooltip) : null}\n </View>\n </View>\n {overlay && scene ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n left: scene.layout.plot.x,\n top: scene.layout.plot.y,\n width: scene.layout.plot.width,\n height: scene.layout.plot.height,\n }}\n {...part(\"chart\", \"overlay\")}\n >\n {overlay(scene.layout.plot)}\n </View>\n ) : null}\n {tooltip}\n </View>\n );\n}\n"],"mappings":"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"}
@@ -1,16 +1,16 @@
1
- import { useTheme as e } from "../../theme/MinervaProvider.js";
2
- import { part as t } from "../../internal/parts.js";
3
- import { chartAriaLabel as n } from "../../charts/src/engine/labels.js";
4
- import { createChartController as r } from "../../charts/src/engine/controller.js";
1
+ import { useI18n as e, useTheme as t } from "../../theme/MinervaProvider.js";
2
+ import { part as n } from "../../internal/parts.js";
3
+ import { describeChart as r } from "../../charts/src/engine/labels.js";
4
+ import { createChartController as i } from "../../charts/src/engine/controller.js";
5
5
  import "../../charts/src/canvas.js";
6
- import { measureChartText as i } from "./measure.js";
7
- import { drawHover as a, drawStatic as o, tooltipCard as s } from "./scene.js";
8
- import { chartThemeInput as c } from "./theme.js";
9
- import { useEffect as l, useImperativeHandle as u, useLayoutEffect as d, useMemo as f, useRef as p, useState as m, useSyncExternalStore as h } from "react";
10
- import { StyleSheet as g, View as _ } from "react-native";
11
- import { jsx as v, jsxs as y } from "react/jsx-runtime";
6
+ import { measureChartText as a } from "./measure.js";
7
+ import { drawHover as o, drawStatic as s, tooltipCard as c } from "./scene.js";
8
+ import { chartThemeInput as l } from "./theme.js";
9
+ import { useEffect as u, useImperativeHandle as d, useLayoutEffect as f, useMemo as p, useRef as m, useState as h, useSyncExternalStore as g } from "react";
10
+ import { StyleSheet as _, View as v } from "react-native";
11
+ import { jsx as y, jsxs as b } from "react/jsx-runtime";
12
12
  //#region src/components/Chart/ChartBase.tsx
13
- var b = (e) => ({
13
+ var x = (e) => ({
14
14
  series: e.series,
15
15
  xAxis: e.xAxis,
16
16
  yAxis: e.yAxis,
@@ -24,10 +24,10 @@ var b = (e) => ({
24
24
  ariaLabel: e.ariaLabel,
25
25
  locale: e.locale,
26
26
  labels: e.labels
27
- }), x = {}, S = (e, t) => {
27
+ }), S = {}, C = (e, t) => {
28
28
  let n = Number(e.identifier);
29
29
  return Number.isFinite(n) ? n : t;
30
- }, C = (e) => {
30
+ }, w = (e) => {
31
31
  if (typeof requestAnimationFrame == "function") {
32
32
  let t = requestAnimationFrame(e);
33
33
  return { cancel: () => cancelAnimationFrame(t) };
@@ -35,21 +35,21 @@ var b = (e) => ({
35
35
  let t = setTimeout(e, 16);
36
36
  return { cancel: () => clearTimeout(t) };
37
37
  };
38
- function w(e, t, n) {
39
- let a = 0, s = null, c = /* @__PURE__ */ new Set(), l = null, u = {
38
+ function T(e, t, n) {
39
+ let r = 0, o = null, c = /* @__PURE__ */ new Set(), l = null, u = {
40
40
  x: 0,
41
41
  y: 0
42
42
  }, d = /* @__PURE__ */ new Map(), f = (e) => typeof e.interaction == "object" && !!e.interaction.dragPoints, p = f(e), m = !1, h = () => {
43
- a++, c.forEach((e) => e());
43
+ r++, c.forEach((e) => e());
44
44
  }, g = () => {
45
- s?.cancel(), s = null;
46
- }, _ = r({
45
+ o?.cancel(), o = null;
46
+ }, _ = i({
47
47
  options: e,
48
48
  theme: t,
49
- measureText: i,
49
+ measureText: a,
50
50
  onInvalidate: () => {
51
- !s && c.size && (s = C(() => {
52
- s = null, h();
51
+ !o && c.size && (o = w(() => {
52
+ o = null, h();
53
53
  }));
54
54
  }
55
55
  });
@@ -60,7 +60,7 @@ function w(e, t, n) {
60
60
  }), y = (e) => {
61
61
  let t = e.nativeEvent;
62
62
  (t.touches?.length ? t.touches : [t]).forEach((e, t) => {
63
- let n = S(e, t), r = v(e), i = d.get(n);
63
+ let n = C(e, t), r = v(e), i = d.get(n);
64
64
  i ? (i.x !== r.x || i.y !== r.y) && (d.set(n, r), _.pointerMove(r.x, r.y, {
65
65
  id: n,
66
66
  touch: !0
@@ -79,7 +79,7 @@ function w(e, t, n) {
79
79
  c.delete(e), c.size || g();
80
80
  };
81
81
  },
82
- version: () => a,
82
+ version: () => r,
83
83
  commit() {
84
84
  g(), h();
85
85
  },
@@ -102,7 +102,7 @@ function w(e, t, n) {
102
102
  ];
103
103
  return (!l || l.key.some((e, t) => e !== i[t])) && (l = {
104
104
  key: i,
105
- node: o(e, t)
105
+ node: s(e, t)
106
106
  }), l.node;
107
107
  },
108
108
  anchor: null,
@@ -120,10 +120,10 @@ function w(e, t, n) {
120
120
  },
121
121
  touchMove: y,
122
122
  touchEnd(e) {
123
- let t = e.nativeEvent, n = new Set((t.touches ?? []).map((e, t) => S(e, t))), r = t.changedTouches?.length ? t.changedTouches : [t];
123
+ let t = e.nativeEvent, n = new Set((t.touches ?? []).map((e, t) => C(e, t))), r = t.changedTouches?.length ? t.changedTouches : [t];
124
124
  for (let [e, t] of [...d]) {
125
125
  if (n.has(e)) continue;
126
- let i = r.find((t, n) => S(t, n) === e), a = i ? v(i) : t;
126
+ let i = r.find((t, n) => C(t, n) === e), a = i ? v(i) : t;
127
127
  d.delete(e), d.size === 0 && (b.anchor = a), _.pointerUp(a.x, a.y, {
128
128
  id: e,
129
129
  touch: !0
@@ -146,11 +146,11 @@ function w(e, t, n) {
146
146
  };
147
147
  return b;
148
148
  }
149
- function T({ scene: e, anchor: n, children: r }) {
150
- let [i, a] = m(null), { width: o, height: c } = e, l = n.x + 14, u = n.y;
151
- return i && (l + i.width > o - 4 && (l = n.x - 14 - i.width), l = Math.max(4, Math.min(l, o - i.width - 4)), u = Math.max(4, Math.min(n.y - i.height / 2, c - i.height - 4))), /* @__PURE__ */ v(_, {
149
+ function E({ scene: e, anchor: t, children: r }) {
150
+ let [i, a] = h(null), { width: o, height: s } = e, l = t.x + 14, u = t.y;
151
+ return i && (l + i.width > o - 4 && (l = t.x - 14 - i.width), l = Math.max(4, Math.min(l, o - i.width - 4)), u = Math.max(4, Math.min(t.y - i.height / 2, s - i.height - 4))), /* @__PURE__ */ y(v, {
152
152
  pointerEvents: "none",
153
- ...t("chart", "tooltip", { custom: !0 }),
153
+ ...n("chart", "tooltip", { custom: !0 }),
154
154
  onLayout: (e) => {
155
155
  let { width: t, height: n } = e.nativeEvent.layout;
156
156
  a((e) => e && e.width === t && e.height === n ? e : {
@@ -158,7 +158,7 @@ function T({ scene: e, anchor: n, children: r }) {
158
158
  height: n
159
159
  });
160
160
  },
161
- style: [s(e), {
161
+ style: [c(e), {
162
162
  left: 0,
163
163
  top: 0,
164
164
  maxWidth: Math.max(0, o - 8),
@@ -169,122 +169,134 @@ function T({ scene: e, anchor: n, children: r }) {
169
169
  children: r
170
170
  });
171
171
  }
172
- function E({ options: r, height: i = 320, width: o = "100%", style: s, testID: b, handleRef: S, renderTooltip: C, overlay: E, ...D }) {
173
- let { tokens: O, fonts: k } = e(), A = k.sans, j = f(() => c(O), [O]), M = !!C && r.tooltip !== !1, N = f(() => {
174
- if (!M) return r;
175
- let e = typeof r.tooltip == "object" ? r.tooltip : {};
172
+ function D({ options: i, height: a = 320, width: s = "100%", style: c, testID: x, handleRef: C, renderTooltip: w, overlay: D, ...O }) {
173
+ let { tokens: k, fonts: A } = t(), { language: j } = e(), M = A.sans, N = p(() => l(k), [k]), P = !!w && i.tooltip !== !1, F = p(() => {
174
+ let e = i.locale ? i : {
175
+ ...i,
176
+ locale: j
177
+ };
178
+ if (!P) return e;
179
+ let t = typeof i.tooltip == "object" ? i.tooltip : {};
176
180
  return {
177
- ...r,
181
+ ...e,
178
182
  tooltip: {
179
- ...e,
180
- render: () => x
183
+ ...t,
184
+ render: () => S
181
185
  }
182
186
  };
183
- }, [r, M]), [P] = m(() => w(N, j, typeof o == "number" && typeof i == "number" ? [o, i] : null)), { controller: F } = P;
184
- h(P.subscribe, P.version, P.version);
185
- let I = p({
186
- options: N,
187
- theme: j
188
- });
189
- d(() => {
190
- let e = I.current;
191
- (e.theme !== j || e.options !== N) && (e.theme !== j && F.setTheme(j), e.options !== N && P.setOptions(N), I.current = {
192
- options: N,
193
- theme: j
194
- }, P.commit());
195
187
  }, [
196
- F,
188
+ i,
197
189
  P,
198
- N,
199
190
  j
200
- ]), d(() => {
201
- if (typeof o != "number" || typeof i != "number") return;
202
- let e = F.getScene();
203
- e && e.width === o && e.height === i || (F.setSize(o, i), P.commit());
191
+ ]), [I] = h(() => T(F, N, typeof s == "number" && typeof a == "number" ? [s, a] : null)), { controller: L } = I;
192
+ g(I.subscribe, I.version, I.version);
193
+ let R = m({
194
+ options: F,
195
+ theme: N
196
+ });
197
+ f(() => {
198
+ let e = R.current;
199
+ (e.theme !== N || e.options !== F) && (e.theme !== N && L.setTheme(N), e.options !== F && I.setOptions(F), R.current = {
200
+ options: F,
201
+ theme: N
202
+ }, I.commit());
204
203
  }, [
204
+ L,
205
+ I,
205
206
  F,
206
- P,
207
- o,
208
- i
207
+ N
208
+ ]), f(() => {
209
+ if (typeof s != "number" || typeof a != "number") return;
210
+ let e = L.getScene();
211
+ e && e.width === s && e.height === a || (L.setSize(s, a), I.commit());
212
+ }, [
213
+ L,
214
+ I,
215
+ s,
216
+ a
209
217
  ]);
210
- let L = p(D);
211
- d(() => {
212
- L.current = D;
213
- }), l(() => {
214
- let e = L, t = [
215
- F.on("hover", (t) => e.current.onHover?.(t)),
216
- F.on("click", (t) => e.current.onPointClick?.(t)),
217
- F.on("plotClick", (t) => e.current.onPlotClick?.(t)),
218
- F.on("zoom", (t) => e.current.onZoom?.(t)),
219
- F.on("drag", (t) => e.current.onDrag?.(t)),
220
- F.on("drop", (t) => e.current.onDrop?.(t))
218
+ let z = m(O);
219
+ f(() => {
220
+ z.current = O;
221
+ }), u(() => {
222
+ let e = z, t = [
223
+ L.on("hover", (t) => e.current.onHover?.(t)),
224
+ L.on("click", (t) => e.current.onPointClick?.(t)),
225
+ L.on("plotClick", (t) => e.current.onPlotClick?.(t)),
226
+ L.on("zoom", (t) => e.current.onZoom?.(t)),
227
+ L.on("drag", (t) => e.current.onDrag?.(t)),
228
+ L.on("drop", (t) => e.current.onDrop?.(t))
221
229
  ];
222
230
  return () => t.forEach((e) => e());
223
- }, [F]), u(S, () => ({
224
- resetZoom: () => F.resetZoom(),
225
- getView: () => F.getView(),
226
- setView: (e) => F.setView(e),
227
- getPlotRect: () => F.getPlotRect(),
228
- getController: () => F
229
- }), [F]);
230
- let R = (e) => {
231
- let { width: t, height: n } = e.nativeEvent.layout, r = F.getScene();
232
- r && r.width === t && r.height === n || (F.setSize(t, n), P.commit());
233
- }, z = F.getScene(), B = null, V = z?.hover?.tooltip ? z.hover.event : null;
234
- if (z && V && M && C) {
235
- let e = C(V), t = P.anchor ?? z.hover?.marks[0] ?? null;
236
- e != null && e !== !1 && t && (B = /* @__PURE__ */ v(T, {
237
- scene: z,
231
+ }, [L]), d(C, () => ({
232
+ resetZoom: () => L.resetZoom(),
233
+ getView: () => L.getView(),
234
+ setView: (e) => L.setView(e),
235
+ getPlotRect: () => L.getPlotRect(),
236
+ getController: () => L
237
+ }), [L]);
238
+ let B = (e) => {
239
+ let { width: t, height: n } = e.nativeEvent.layout, r = L.getScene();
240
+ r && r.width === t && r.height === n || (L.setSize(t, n), I.commit());
241
+ }, V = L.getScene(), H = null, U = V?.hover?.tooltip ? V.hover.event : null;
242
+ if (V && U && P && w) {
243
+ let e = w(U), t = I.anchor ?? V.hover?.marks[0] ?? null;
244
+ e != null && e !== !1 && t && (H = /* @__PURE__ */ y(E, {
245
+ scene: V,
238
246
  anchor: t,
239
247
  children: e
240
248
  }));
241
249
  }
242
- return /* @__PURE__ */ y(_, {
243
- testID: b,
244
- onLayout: R,
250
+ return /* @__PURE__ */ b(v, {
251
+ testID: x,
252
+ onLayout: B,
245
253
  style: [{
246
- width: o,
247
- height: i
248
- }, s],
249
- ...t("chart", "root"),
254
+ width: s,
255
+ height: a
256
+ }, c],
257
+ ...n("chart", "root"),
250
258
  children: [
251
- /* @__PURE__ */ v(_, {
252
- style: g.absoluteFill,
259
+ /* @__PURE__ */ y(v, {
260
+ style: _.absoluteFill,
253
261
  accessible: !0,
254
262
  accessibilityRole: "image",
255
- accessibilityLabel: r.ariaLabel ?? (z ? n(z.model) : void 0),
263
+ accessibilityLabel: F.ariaLabel ?? r({
264
+ locale: F.locale,
265
+ labels: F.labels,
266
+ series: V?.model.series
267
+ }),
256
268
  onStartShouldSetResponder: () => !0,
257
- onResponderTerminationRequest: () => !P.holdsGesture(),
258
- onResponderGrant: P.touchStart,
259
- onResponderStart: P.touchAdd,
260
- onResponderMove: P.touchMove,
261
- onResponderEnd: P.touchEnd,
262
- onResponderRelease: P.touchEnd,
263
- onResponderTerminate: P.touchCancel,
264
- ...t("chart", "surface"),
265
- children: /* @__PURE__ */ y(_, {
269
+ onResponderTerminationRequest: () => !I.holdsGesture(),
270
+ onResponderGrant: I.touchStart,
271
+ onResponderStart: I.touchAdd,
272
+ onResponderMove: I.touchMove,
273
+ onResponderEnd: I.touchEnd,
274
+ onResponderRelease: I.touchEnd,
275
+ onResponderTerminate: I.touchCancel,
276
+ ...n("chart", "surface"),
277
+ children: /* @__PURE__ */ b(v, {
266
278
  pointerEvents: "none",
267
- style: g.absoluteFill,
268
- children: [z ? P.layers(z, A) : null, z ? a(z, A, M) : null]
279
+ style: _.absoluteFill,
280
+ children: [V ? I.layers(V, M) : null, V ? o(V, M, P) : null]
269
281
  })
270
282
  }),
271
- E && z ? /* @__PURE__ */ v(_, {
283
+ D && V ? /* @__PURE__ */ y(v, {
272
284
  pointerEvents: "box-none",
273
285
  style: {
274
286
  position: "absolute",
275
- left: z.layout.plot.x,
276
- top: z.layout.plot.y,
277
- width: z.layout.plot.width,
278
- height: z.layout.plot.height
287
+ left: V.layout.plot.x,
288
+ top: V.layout.plot.y,
289
+ width: V.layout.plot.width,
290
+ height: V.layout.plot.height
279
291
  },
280
- ...t("chart", "overlay"),
281
- children: E(z.layout.plot)
292
+ ...n("chart", "overlay"),
293
+ children: D(V.layout.plot)
282
294
  }) : null,
283
- B
295
+ H
284
296
  ]
285
297
  });
286
298
  }
287
299
  //#endregion
288
- export { E as ChartBase, b as engineOptions };
300
+ export { D as ChartBase, x as engineOptions };
289
301
 
290
302
  //# sourceMappingURL=ChartBase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartBase.js","names":["engineOptions","props","CUSTOM_TOOLTIP","idOf","id","t","index","requestFrame","callback","createChartStore","version","frame","listeners","cache","origin","touches","dragsPoints","o","draggable","options","claimed","notify","listener","cancelFrame","controller","createChartController","measureChartText","size","local","sync","n","event","i","p","previous","store","next","scene","key","view","plot","family","value","drawStatic","active","changed","last","touch","base","CustomTooltip","setSize","useState","left","anchor","top","width","height","View","part","w","h","tooltipCard","ChartBase","handlers","useTheme","fonts","theme","useMemo","chartThemeInput","tokens","customTooltip","renderTooltip","resolved","applied","useRef","useLayoutEffect","current","handlersRef","useEffect","offs","e","v","off","useImperativeHandle","handleRef","onLayout","tooltip","content","style","StyleSheet","chartAriaLabel","drawHover","overlay"],"sources":["../../../../../native/src/components/Chart/ChartBase.tsx"],"sourcesContent":["// The chart host of React Native: owns a platform-free chart controller\n// (@minerva/charts/canvas: options, model, zoom, gestures, scene in pixels)\n// and draws its scene with views (./scene). Touches go through the\n// responder system; the drawing is `pointerEvents=\"none\"`, so every touch\n// lands on the surface and positions come from page coordinates.\n\nimport {\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport {\n StyleSheet,\n View,\n type DimensionValue,\n type GestureResponderEvent,\n type LayoutChangeEvent,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport {\n chartAriaLabel,\n createChartController,\n type ChartController,\n type ChartDragEvent,\n type ChartHoverEvent,\n type ChartOptions,\n type ChartPlotClickEvent,\n type ChartRect,\n type ChartScene,\n type ChartThemeInput,\n type ChartTooltipOptions,\n type ChartView,\n} from \"@minerva/charts/canvas\";\nimport { useTheme } from \"../../theme/MinervaProvider\";\nimport { part } from \"../../internal/parts\";\nimport { measureChartText } from \"./measure\";\nimport { drawHover, drawStatic, tooltipCard } from \"./scene\";\nimport { chartThemeInput } from \"./theme\";\nimport type { ChartCommonProps, ChartHandle } from \"./types\";\n\ninterface Handlers {\n onHover?: (event: ChartHoverEvent | null) => void;\n onPointClick?: (event: ChartHoverEvent) => void;\n onPlotClick?: (event: ChartPlotClickEvent) => void;\n onZoom?: (view: ChartView) => void;\n onDrag?: (event: ChartDragEvent) => void;\n onDrop?: (event: ChartDragEvent) => void;\n}\n\n/** Engine options of the common props */\nexport const engineOptions = (\n props: Pick<\n ChartCommonProps,\n | \"xAxis\"\n | \"yAxis\"\n | \"legend\"\n | \"tooltip\"\n | \"crosshair\"\n | \"annotations\"\n | \"interaction\"\n | \"padding\"\n | \"palette\"\n | \"ariaLabel\"\n | \"locale\"\n | \"labels\"\n > &\n Pick<ChartOptions, \"series\">,\n): ChartOptions => ({\n series: props.series,\n xAxis: props.xAxis,\n yAxis: props.yAxis,\n legend: props.legend,\n tooltip: props.tooltip,\n crosshair: props.crosshair,\n annotations: props.annotations,\n interaction: props.interaction,\n padding: props.padding,\n palette: props.palette,\n ariaLabel: props.ariaLabel,\n locale: props.locale,\n labels: props.labels,\n});\n\ntype TooltipResult = Exclude<\n ReturnType<NonNullable<ChartTooltipOptions[\"render\"]>>,\n string | null\n>;\n/** Non-string result of `tooltip.render`: the engine lays a tooltip out without drawing text */\nconst CUSTOM_TOOLTIP = {} as unknown as TooltipResult;\n\ninterface TouchPoint {\n identifier?: number | string;\n pageX: number;\n pageY: number;\n locationX?: number;\n locationY?: number;\n}\n\nconst idOf = (t: TouchPoint, index: number) => {\n const id = Number(t.identifier);\n return Number.isFinite(id) ? id : index;\n};\n\ntype Frame = { cancel: () => void };\n\nconst requestFrame = (callback: () => void): Frame => {\n if (typeof requestAnimationFrame === \"function\") {\n const id = requestAnimationFrame(callback);\n return { cancel: () => cancelAnimationFrame(id) };\n }\n const id = setTimeout(callback, 16);\n return { cancel: () => clearTimeout(id) };\n};\n\n/**\n * External store of a chart: the controller, a version bumped when its\n * scene must be drawn again (coalesced per frame), the touches being\n * tracked and the cache of the static layers.\n */\ninterface ChartStore {\n controller: ChartController;\n /** Options of the controller (`setOptions` of the controller) */\n setOptions: (options: ChartOptions) => void;\n subscribe: (listener: () => void) => () => void;\n version: () => number;\n /** Draws again now */\n commit: () => void;\n /** Static layers of a scene (cached while model / view / size are the same) */\n layers: (scene: ChartScene, family: string | undefined) => ReactNode;\n /** Last single-finger position (anchor of a custom tooltip) */\n anchor: { x: number; y: number } | null;\n /**\n * First finger (responder grant); returns whether the chart owns the\n * gesture, which keeps native scroll views from taking it (Android)\n */\n touchStart: (event: GestureResponderEvent) => boolean;\n /** Another finger touches the chart */\n touchAdd: (event: GestureResponderEvent) => void;\n /** Moves (drawn on the next frame) */\n touchMove: (event: GestureResponderEvent) => void;\n touchEnd: (event: GestureResponderEvent) => void;\n touchCancel: () => void;\n /** Whether the chart keeps the touches (pinch, point drag, pan when zoomed) */\n holdsGesture: () => boolean;\n}\n\nfunction createChartStore(\n options: ChartOptions,\n theme: ChartThemeInput,\n size: [number, number] | null,\n): ChartStore {\n let version = 0;\n let frame: Frame | null = null;\n const listeners = new Set<() => void>();\n let cache: { key: unknown[]; node: ReactNode } | null = null;\n let origin = { x: 0, y: 0 };\n const touches = new Map<number, { x: number; y: number }>();\n const dragsPoints = (o: ChartOptions) =>\n typeof o.interaction === \"object\" && !!o.interaction.dragPoints;\n let draggable = dragsPoints(options);\n /** The current touch sequence started on the plot of a draggable chart */\n let claimed = false;\n\n const notify = () => {\n version++;\n listeners.forEach((listener) => listener());\n };\n const cancelFrame = () => {\n frame?.cancel();\n frame = null;\n };\n const schedule = () => {\n if (frame || !listeners.size) return;\n frame = requestFrame(() => {\n frame = null;\n notify();\n });\n };\n\n const controller = createChartController({\n options,\n theme,\n measureText: measureChartText,\n onInvalidate: schedule,\n });\n if (size) controller.setSize(size[0], size[1]);\n\n const local = (t: TouchPoint) => ({\n x: t.pageX - origin.x,\n y: t.pageY - origin.y,\n });\n\n /** Feeds the controller the fingers that appeared or moved */\n const sync = (event: GestureResponderEvent) => {\n const n = event.nativeEvent;\n const list: readonly TouchPoint[] = n.touches?.length\n ? n.touches\n : [n as unknown as TouchPoint];\n list.forEach((t, i) => {\n const id = idOf(t, i);\n const p = local(t);\n const previous = touches.get(id);\n if (!previous) {\n touches.set(id, p);\n controller.pointerDown(p.x, p.y, { id, touch: true });\n } else if (previous.x !== p.x || previous.y !== p.y) {\n touches.set(id, p);\n controller.pointerMove(p.x, p.y, { id, touch: true });\n }\n });\n if (touches.size === 1) store.anchor = [...touches.values()][0];\n };\n\n const store: ChartStore = {\n controller,\n setOptions(next) {\n draggable = dragsPoints(next);\n controller.setOptions(next);\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (!listeners.size) cancelFrame();\n };\n },\n version: () => version,\n commit() {\n cancelFrame();\n notify();\n },\n layers(scene, family) {\n const { plot } = scene.layout;\n const { view } = scene;\n const key = [\n scene.model,\n scene.annotations,\n scene.theme,\n scene.width,\n scene.height,\n view.x[0],\n view.x[1],\n view.y[0],\n view.y[1],\n plot.x,\n plot.y,\n plot.width,\n plot.height,\n family,\n ];\n if (!cache || cache.key.some((value, i) => value !== key[i]))\n cache = { key, node: drawStatic(scene, family) };\n return cache.node;\n },\n anchor: null,\n touchStart(event) {\n const n = event.nativeEvent as unknown as TouchPoint;\n // the drawing ignores touches: `location` is relative to the surface\n if (!touches.size && n.locationX !== undefined)\n origin = { x: n.pageX - n.locationX, y: n.pageY - (n.locationY ?? 0) };\n sync(event);\n store.commit();\n // draggable points: the drag only starts after the touch slop, too\n // late to keep a scroll view from stealing the touch: claim it now\n const plot = controller.getPlotRect();\n const p = touches.values().next().value;\n claimed =\n draggable &&\n !!plot &&\n !!p &&\n p.x >= plot.x &&\n p.x <= plot.x + plot.width &&\n p.y >= plot.y &&\n p.y <= plot.y + plot.height;\n return store.holdsGesture();\n },\n touchAdd(event) {\n sync(event);\n store.commit();\n },\n touchMove: sync,\n touchEnd(event) {\n const n = event.nativeEvent;\n const active = new Set(\n (n.touches ?? []).map((t, i) => idOf(t as TouchPoint, i)),\n );\n const changed: readonly TouchPoint[] = n.changedTouches?.length\n ? n.changedTouches\n : [n as unknown as TouchPoint];\n for (const [id, last] of [...touches]) {\n if (active.has(id)) continue;\n const touch = changed.find((t, i) => idOf(t, i) === id);\n const p = touch ? local(touch) : last;\n touches.delete(id);\n if (touches.size === 0) store.anchor = p;\n controller.pointerUp(p.x, p.y, { id, touch: true });\n }\n store.commit();\n },\n touchCancel() {\n for (const id of touches.keys()) controller.pointerCancel({ id });\n touches.clear();\n store.commit();\n },\n holdsGesture() {\n if (touches.size > 1 || (claimed && touches.size > 0)) return true;\n const scene = controller.getScene();\n if (!scene) return false;\n if (scene.dragging) return true;\n const { base } = scene.model;\n const view = controller.getView();\n return (\n view.x[0] !== base.x[0] ||\n view.x[1] !== base.x[1] ||\n view.y[0] !== base.y[0] ||\n view.y[1] !== base.y[1]\n );\n },\n };\n return store;\n}\n\n/** A `renderTooltip` node, placed next to the finger once measured */\nfunction CustomTooltip({\n scene,\n anchor,\n children,\n}: {\n scene: ChartScene;\n anchor: { x: number; y: number };\n children: ReactNode;\n}) {\n const [size, setSize] = useState<{ width: number; height: number } | null>(\n null,\n );\n const { width, height } = scene;\n let left = anchor.x + 14;\n let top = anchor.y;\n if (size) {\n if (left + size.width > width - 4) left = anchor.x - 14 - size.width;\n left = Math.max(4, Math.min(left, width - size.width - 4));\n top = Math.max(\n 4,\n Math.min(anchor.y - size.height / 2, height - size.height - 4),\n );\n }\n return (\n <View\n pointerEvents=\"none\"\n {...part(\"chart\", \"tooltip\", { custom: true })}\n onLayout={(e: LayoutChangeEvent) => {\n const { width: w, height: h } = e.nativeEvent.layout;\n setSize((previous) =>\n previous && previous.width === w && previous.height === h\n ? previous\n : { width: w, height: h },\n );\n }}\n style={[\n tooltipCard(scene),\n {\n // laid out at the origin (full width available), moved by a transform\n left: 0,\n top: 0,\n maxWidth: Math.max(0, width - 8),\n padding: 8,\n opacity: size ? 1 : 0,\n transform: [{ translateX: left }, { translateY: top }],\n },\n ]}\n >\n {children}\n </View>\n );\n}\n\ninterface ChartBaseProps extends Handlers {\n options: ChartOptions;\n height?: DimensionValue;\n width?: DimensionValue;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n handleRef?: Ref<ChartHandle>;\n /** React content of the tooltip (replaces the engine's content) */\n renderTooltip?: (event: ChartHoverEvent) => ReactNode;\n /** React content placed over the plot area, given the plot rectangle */\n overlay?: (plot: ChartRect) => ReactNode;\n}\n\n/** Sizes the chart, forwards options / theme / touches to the controller and draws its scene */\nexport function ChartBase({\n options,\n height = 320,\n width = \"100%\",\n style,\n testID,\n handleRef,\n renderTooltip,\n overlay,\n ...handlers\n}: ChartBaseProps) {\n const { tokens, fonts } = useTheme();\n const family = fonts.sans;\n const theme = useMemo(() => chartThemeInput(tokens), [tokens]);\n const customTooltip = !!renderTooltip && options.tooltip !== false;\n const resolved = useMemo((): ChartOptions => {\n if (!customTooltip) return options;\n const base = typeof options.tooltip === \"object\" ? options.tooltip : {};\n return { ...options, tooltip: { ...base, render: () => CUSTOM_TOOLTIP } };\n }, [options, customTooltip]);\n\n const [store] = useState(() =>\n createChartStore(\n resolved,\n theme,\n typeof width === \"number\" && typeof height === \"number\"\n ? [width, height]\n : null,\n ),\n );\n const { controller } = store;\n useSyncExternalStore(store.subscribe, store.version, store.version);\n\n const applied = useRef({ options: resolved, theme });\n useLayoutEffect(() => {\n const current = applied.current;\n if (current.theme === theme && current.options === resolved) return;\n if (current.theme !== theme) controller.setTheme(theme);\n if (current.options !== resolved) store.setOptions(resolved);\n applied.current = { options: resolved, theme };\n store.commit();\n }, [controller, store, resolved, theme]);\n\n useLayoutEffect(() => {\n if (typeof width !== \"number\" || typeof height !== \"number\") return;\n const scene = controller.getScene();\n if (scene && scene.width === width && scene.height === height) return;\n controller.setSize(width, height);\n store.commit();\n }, [controller, store, width, height]);\n\n const handlersRef = useRef<Handlers>(handlers);\n useLayoutEffect(() => {\n handlersRef.current = handlers;\n });\n useEffect(() => {\n const h = handlersRef;\n const offs = [\n controller.on(\"hover\", (e) => h.current.onHover?.(e)),\n controller.on(\"click\", (e) => h.current.onPointClick?.(e)),\n controller.on(\"plotClick\", (e) => h.current.onPlotClick?.(e)),\n controller.on(\"zoom\", (v) => h.current.onZoom?.(v)),\n controller.on(\"drag\", (e) => h.current.onDrag?.(e)),\n controller.on(\"drop\", (e) => h.current.onDrop?.(e)),\n ];\n return () => offs.forEach((off) => off());\n }, [controller]);\n\n useImperativeHandle(\n handleRef,\n () => ({\n resetZoom: () => controller.resetZoom(),\n getView: () => controller.getView(),\n setView: (view) => controller.setView(view),\n getPlotRect: () => controller.getPlotRect(),\n getController: () => controller,\n }),\n [controller],\n );\n\n const onLayout = (e: LayoutChangeEvent) => {\n const { width: w, height: h } = e.nativeEvent.layout;\n const scene = controller.getScene();\n if (scene && scene.width === w && scene.height === h) return;\n controller.setSize(w, h);\n store.commit();\n };\n\n const scene = controller.getScene();\n let tooltip: ReactNode = null;\n const event = scene?.hover?.tooltip ? scene.hover.event : null;\n if (scene && event && customTooltip && renderTooltip) {\n const content = renderTooltip(event);\n const anchor = store.anchor ?? scene.hover?.marks[0] ?? null;\n if (\n content !== null &&\n content !== undefined &&\n content !== false &&\n anchor\n )\n tooltip = (\n <CustomTooltip scene={scene} anchor={anchor}>\n {content}\n </CustomTooltip>\n );\n }\n\n return (\n <View\n testID={testID}\n onLayout={onLayout}\n style={[{ width, height }, style]}\n {...part(\"chart\", \"root\")}\n >\n <View\n style={StyleSheet.absoluteFill}\n accessible\n accessibilityRole=\"image\"\n accessibilityLabel={\n options.ariaLabel ?? (scene ? chartAriaLabel(scene.model) : undefined)\n }\n onStartShouldSetResponder={() => true}\n onResponderTerminationRequest={() => !store.holdsGesture()}\n onResponderGrant={store.touchStart}\n onResponderStart={store.touchAdd}\n onResponderMove={store.touchMove}\n onResponderEnd={store.touchEnd}\n onResponderRelease={store.touchEnd}\n onResponderTerminate={store.touchCancel}\n {...part(\"chart\", \"surface\")}\n >\n <View pointerEvents=\"none\" style={StyleSheet.absoluteFill}>\n {scene ? store.layers(scene, family) : null}\n {scene ? drawHover(scene, family, customTooltip) : null}\n </View>\n </View>\n {overlay && scene ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n left: scene.layout.plot.x,\n top: scene.layout.plot.y,\n width: scene.layout.plot.width,\n height: scene.layout.plot.height,\n }}\n {...part(\"chart\", \"overlay\")}\n >\n {overlay(scene.layout.plot)}\n </View>\n ) : null}\n {tooltip}\n </View>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ChartBase.js","names":["engineOptions","props","CUSTOM_TOOLTIP","idOf","id","t","index","requestFrame","callback","createChartStore","version","frame","listeners","cache","origin","touches","dragsPoints","o","draggable","options","claimed","notify","listener","cancelFrame","controller","createChartController","measureChartText","size","local","sync","n","event","i","p","previous","store","next","scene","key","view","plot","family","value","drawStatic","active","changed","last","touch","base","CustomTooltip","setSize","useState","left","anchor","top","width","height","View","part","w","h","tooltipCard","ChartBase","handlers","useTheme","useI18n","fonts","theme","useMemo","chartThemeInput","tokens","customTooltip","renderTooltip","resolved","localized","language","applied","useRef","useLayoutEffect","current","handlersRef","useEffect","offs","e","v","off","useImperativeHandle","handleRef","onLayout","tooltip","content","style","StyleSheet","describeChart","drawHover","overlay"],"sources":["../../../../../native/src/components/Chart/ChartBase.tsx"],"sourcesContent":["// The chart host of React Native: owns a platform-free chart controller\n// (@minerva/charts/canvas: options, model, zoom, gestures, scene in pixels)\n// and draws its scene with views (./scene). Touches go through the\n// responder system; the drawing is `pointerEvents=\"none\"`, so every touch\n// lands on the surface and positions come from page coordinates.\n\nimport {\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport {\n StyleSheet,\n View,\n type DimensionValue,\n type GestureResponderEvent,\n type LayoutChangeEvent,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport {\n createChartController,\n describeChart,\n type ChartController,\n type ChartDragEvent,\n type ChartHoverEvent,\n type ChartOptions,\n type ChartPlotClickEvent,\n type ChartRect,\n type ChartScene,\n type ChartThemeInput,\n type ChartTooltipOptions,\n type ChartView,\n} from \"@minerva/charts/canvas\";\nimport { useI18n, useTheme } from \"../../theme/MinervaProvider\";\nimport { part } from \"../../internal/parts\";\nimport { measureChartText } from \"./measure\";\nimport { drawHover, drawStatic, tooltipCard } from \"./scene\";\nimport { chartThemeInput } from \"./theme\";\nimport type { ChartCommonProps, ChartHandle } from \"./types\";\n\ninterface Handlers {\n onHover?: (event: ChartHoverEvent | null) => void;\n onPointClick?: (event: ChartHoverEvent) => void;\n onPlotClick?: (event: ChartPlotClickEvent) => void;\n onZoom?: (view: ChartView) => void;\n onDrag?: (event: ChartDragEvent) => void;\n onDrop?: (event: ChartDragEvent) => void;\n}\n\n/** Engine options of the common props */\nexport const engineOptions = (\n props: Pick<\n ChartCommonProps,\n | \"xAxis\"\n | \"yAxis\"\n | \"legend\"\n | \"tooltip\"\n | \"crosshair\"\n | \"annotations\"\n | \"interaction\"\n | \"padding\"\n | \"palette\"\n | \"ariaLabel\"\n | \"locale\"\n | \"labels\"\n > &\n Pick<ChartOptions, \"series\">,\n): ChartOptions => ({\n series: props.series,\n xAxis: props.xAxis,\n yAxis: props.yAxis,\n legend: props.legend,\n tooltip: props.tooltip,\n crosshair: props.crosshair,\n annotations: props.annotations,\n interaction: props.interaction,\n padding: props.padding,\n palette: props.palette,\n ariaLabel: props.ariaLabel,\n locale: props.locale,\n labels: props.labels,\n});\n\ntype TooltipResult = Exclude<\n ReturnType<NonNullable<ChartTooltipOptions[\"render\"]>>,\n string | null\n>;\n/** Non-string result of `tooltip.render`: the engine lays a tooltip out without drawing text */\nconst CUSTOM_TOOLTIP = {} as unknown as TooltipResult;\n\ninterface TouchPoint {\n identifier?: number | string;\n pageX: number;\n pageY: number;\n locationX?: number;\n locationY?: number;\n}\n\nconst idOf = (t: TouchPoint, index: number) => {\n const id = Number(t.identifier);\n return Number.isFinite(id) ? id : index;\n};\n\ntype Frame = { cancel: () => void };\n\nconst requestFrame = (callback: () => void): Frame => {\n if (typeof requestAnimationFrame === \"function\") {\n const id = requestAnimationFrame(callback);\n return { cancel: () => cancelAnimationFrame(id) };\n }\n const id = setTimeout(callback, 16);\n return { cancel: () => clearTimeout(id) };\n};\n\n/**\n * External store of a chart: the controller, a version bumped when its\n * scene must be drawn again (coalesced per frame), the touches being\n * tracked and the cache of the static layers.\n */\ninterface ChartStore {\n controller: ChartController;\n /** Options of the controller (`setOptions` of the controller) */\n setOptions: (options: ChartOptions) => void;\n subscribe: (listener: () => void) => () => void;\n version: () => number;\n /** Draws again now */\n commit: () => void;\n /** Static layers of a scene (cached while model / view / size are the same) */\n layers: (scene: ChartScene, family: string | undefined) => ReactNode;\n /** Last single-finger position (anchor of a custom tooltip) */\n anchor: { x: number; y: number } | null;\n /**\n * First finger (responder grant); returns whether the chart owns the\n * gesture, which keeps native scroll views from taking it (Android)\n */\n touchStart: (event: GestureResponderEvent) => boolean;\n /** Another finger touches the chart */\n touchAdd: (event: GestureResponderEvent) => void;\n /** Moves (drawn on the next frame) */\n touchMove: (event: GestureResponderEvent) => void;\n touchEnd: (event: GestureResponderEvent) => void;\n touchCancel: () => void;\n /** Whether the chart keeps the touches (pinch, point drag, pan when zoomed) */\n holdsGesture: () => boolean;\n}\n\nfunction createChartStore(\n options: ChartOptions,\n theme: ChartThemeInput,\n size: [number, number] | null,\n): ChartStore {\n let version = 0;\n let frame: Frame | null = null;\n const listeners = new Set<() => void>();\n let cache: { key: unknown[]; node: ReactNode } | null = null;\n let origin = { x: 0, y: 0 };\n const touches = new Map<number, { x: number; y: number }>();\n const dragsPoints = (o: ChartOptions) =>\n typeof o.interaction === \"object\" && !!o.interaction.dragPoints;\n let draggable = dragsPoints(options);\n /** The current touch sequence started on the plot of a draggable chart */\n let claimed = false;\n\n const notify = () => {\n version++;\n listeners.forEach((listener) => listener());\n };\n const cancelFrame = () => {\n frame?.cancel();\n frame = null;\n };\n const schedule = () => {\n if (frame || !listeners.size) return;\n frame = requestFrame(() => {\n frame = null;\n notify();\n });\n };\n\n const controller = createChartController({\n options,\n theme,\n measureText: measureChartText,\n onInvalidate: schedule,\n });\n if (size) controller.setSize(size[0], size[1]);\n\n const local = (t: TouchPoint) => ({\n x: t.pageX - origin.x,\n y: t.pageY - origin.y,\n });\n\n /** Feeds the controller the fingers that appeared or moved */\n const sync = (event: GestureResponderEvent) => {\n const n = event.nativeEvent;\n const list: readonly TouchPoint[] = n.touches?.length\n ? n.touches\n : [n as unknown as TouchPoint];\n list.forEach((t, i) => {\n const id = idOf(t, i);\n const p = local(t);\n const previous = touches.get(id);\n if (!previous) {\n touches.set(id, p);\n controller.pointerDown(p.x, p.y, { id, touch: true });\n } else if (previous.x !== p.x || previous.y !== p.y) {\n touches.set(id, p);\n controller.pointerMove(p.x, p.y, { id, touch: true });\n }\n });\n if (touches.size === 1) store.anchor = [...touches.values()][0];\n };\n\n const store: ChartStore = {\n controller,\n setOptions(next) {\n draggable = dragsPoints(next);\n controller.setOptions(next);\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (!listeners.size) cancelFrame();\n };\n },\n version: () => version,\n commit() {\n cancelFrame();\n notify();\n },\n layers(scene, family) {\n const { plot } = scene.layout;\n const { view } = scene;\n const key = [\n scene.model,\n scene.annotations,\n scene.theme,\n scene.width,\n scene.height,\n view.x[0],\n view.x[1],\n view.y[0],\n view.y[1],\n plot.x,\n plot.y,\n plot.width,\n plot.height,\n family,\n ];\n if (!cache || cache.key.some((value, i) => value !== key[i]))\n cache = { key, node: drawStatic(scene, family) };\n return cache.node;\n },\n anchor: null,\n touchStart(event) {\n const n = event.nativeEvent as unknown as TouchPoint;\n // the drawing ignores touches: `location` is relative to the surface\n if (!touches.size && n.locationX !== undefined)\n origin = { x: n.pageX - n.locationX, y: n.pageY - (n.locationY ?? 0) };\n sync(event);\n store.commit();\n // draggable points: the drag only starts after the touch slop, too\n // late to keep a scroll view from stealing the touch: claim it now\n const plot = controller.getPlotRect();\n const p = touches.values().next().value;\n claimed =\n draggable &&\n !!plot &&\n !!p &&\n p.x >= plot.x &&\n p.x <= plot.x + plot.width &&\n p.y >= plot.y &&\n p.y <= plot.y + plot.height;\n return store.holdsGesture();\n },\n touchAdd(event) {\n sync(event);\n store.commit();\n },\n touchMove: sync,\n touchEnd(event) {\n const n = event.nativeEvent;\n const active = new Set(\n (n.touches ?? []).map((t, i) => idOf(t as TouchPoint, i)),\n );\n const changed: readonly TouchPoint[] = n.changedTouches?.length\n ? n.changedTouches\n : [n as unknown as TouchPoint];\n for (const [id, last] of [...touches]) {\n if (active.has(id)) continue;\n const touch = changed.find((t, i) => idOf(t, i) === id);\n const p = touch ? local(touch) : last;\n touches.delete(id);\n if (touches.size === 0) store.anchor = p;\n controller.pointerUp(p.x, p.y, { id, touch: true });\n }\n store.commit();\n },\n touchCancel() {\n for (const id of touches.keys()) controller.pointerCancel({ id });\n touches.clear();\n store.commit();\n },\n holdsGesture() {\n if (touches.size > 1 || (claimed && touches.size > 0)) return true;\n const scene = controller.getScene();\n if (!scene) return false;\n if (scene.dragging) return true;\n const { base } = scene.model;\n const view = controller.getView();\n return (\n view.x[0] !== base.x[0] ||\n view.x[1] !== base.x[1] ||\n view.y[0] !== base.y[0] ||\n view.y[1] !== base.y[1]\n );\n },\n };\n return store;\n}\n\n/** A `renderTooltip` node, placed next to the finger once measured */\nfunction CustomTooltip({\n scene,\n anchor,\n children,\n}: {\n scene: ChartScene;\n anchor: { x: number; y: number };\n children: ReactNode;\n}) {\n const [size, setSize] = useState<{ width: number; height: number } | null>(\n null,\n );\n const { width, height } = scene;\n let left = anchor.x + 14;\n let top = anchor.y;\n if (size) {\n if (left + size.width > width - 4) left = anchor.x - 14 - size.width;\n left = Math.max(4, Math.min(left, width - size.width - 4));\n top = Math.max(\n 4,\n Math.min(anchor.y - size.height / 2, height - size.height - 4),\n );\n }\n return (\n <View\n pointerEvents=\"none\"\n {...part(\"chart\", \"tooltip\", { custom: true })}\n onLayout={(e: LayoutChangeEvent) => {\n const { width: w, height: h } = e.nativeEvent.layout;\n setSize((previous) =>\n previous && previous.width === w && previous.height === h\n ? previous\n : { width: w, height: h },\n );\n }}\n style={[\n tooltipCard(scene),\n {\n // laid out at the origin (full width available), moved by a transform\n left: 0,\n top: 0,\n maxWidth: Math.max(0, width - 8),\n padding: 8,\n opacity: size ? 1 : 0,\n transform: [{ translateX: left }, { translateY: top }],\n },\n ]}\n >\n {children}\n </View>\n );\n}\n\ninterface ChartBaseProps extends Handlers {\n options: ChartOptions;\n height?: DimensionValue;\n width?: DimensionValue;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n handleRef?: Ref<ChartHandle>;\n /** React content of the tooltip (replaces the engine's content) */\n renderTooltip?: (event: ChartHoverEvent) => ReactNode;\n /** React content placed over the plot area, given the plot rectangle */\n overlay?: (plot: ChartRect) => ReactNode;\n}\n\n/** Sizes the chart, forwards options / theme / touches to the controller and draws its scene */\nexport function ChartBase({\n options,\n height = 320,\n width = \"100%\",\n style,\n testID,\n handleRef,\n renderTooltip,\n overlay,\n ...handlers\n}: ChartBaseProps) {\n const { tokens, fonts } = useTheme();\n const { language } = useI18n();\n const family = fonts.sans;\n const theme = useMemo(() => chartThemeInput(tokens), [tokens]);\n const customTooltip = !!renderTooltip && options.tooltip !== false;\n const resolved = useMemo((): ChartOptions => {\n // The chart's own locale wins over the language of the provider.\n const localized = options.locale\n ? options\n : { ...options, locale: language };\n if (!customTooltip) return localized;\n const base = typeof options.tooltip === \"object\" ? options.tooltip : {};\n return {\n ...localized,\n tooltip: { ...base, render: () => CUSTOM_TOOLTIP },\n };\n }, [options, customTooltip, language]);\n\n const [store] = useState(() =>\n createChartStore(\n resolved,\n theme,\n typeof width === \"number\" && typeof height === \"number\"\n ? [width, height]\n : null,\n ),\n );\n const { controller } = store;\n useSyncExternalStore(store.subscribe, store.version, store.version);\n\n const applied = useRef({ options: resolved, theme });\n useLayoutEffect(() => {\n const current = applied.current;\n if (current.theme === theme && current.options === resolved) return;\n if (current.theme !== theme) controller.setTheme(theme);\n if (current.options !== resolved) store.setOptions(resolved);\n applied.current = { options: resolved, theme };\n store.commit();\n }, [controller, store, resolved, theme]);\n\n useLayoutEffect(() => {\n if (typeof width !== \"number\" || typeof height !== \"number\") return;\n const scene = controller.getScene();\n if (scene && scene.width === width && scene.height === height) return;\n controller.setSize(width, height);\n store.commit();\n }, [controller, store, width, height]);\n\n const handlersRef = useRef<Handlers>(handlers);\n useLayoutEffect(() => {\n handlersRef.current = handlers;\n });\n useEffect(() => {\n const h = handlersRef;\n const offs = [\n controller.on(\"hover\", (e) => h.current.onHover?.(e)),\n controller.on(\"click\", (e) => h.current.onPointClick?.(e)),\n controller.on(\"plotClick\", (e) => h.current.onPlotClick?.(e)),\n controller.on(\"zoom\", (v) => h.current.onZoom?.(v)),\n controller.on(\"drag\", (e) => h.current.onDrag?.(e)),\n controller.on(\"drop\", (e) => h.current.onDrop?.(e)),\n ];\n return () => offs.forEach((off) => off());\n }, [controller]);\n\n useImperativeHandle(\n handleRef,\n () => ({\n resetZoom: () => controller.resetZoom(),\n getView: () => controller.getView(),\n setView: (view) => controller.setView(view),\n getPlotRect: () => controller.getPlotRect(),\n getController: () => controller,\n }),\n [controller],\n );\n\n const onLayout = (e: LayoutChangeEvent) => {\n const { width: w, height: h } = e.nativeEvent.layout;\n const scene = controller.getScene();\n if (scene && scene.width === w && scene.height === h) return;\n controller.setSize(w, h);\n store.commit();\n };\n\n const scene = controller.getScene();\n let tooltip: ReactNode = null;\n const event = scene?.hover?.tooltip ? scene.hover.event : null;\n if (scene && event && customTooltip && renderTooltip) {\n const content = renderTooltip(event);\n const anchor = store.anchor ?? scene.hover?.marks[0] ?? null;\n if (\n content !== null &&\n content !== undefined &&\n content !== false &&\n anchor\n )\n tooltip = (\n <CustomTooltip scene={scene} anchor={anchor}>\n {content}\n </CustomTooltip>\n );\n }\n\n return (\n <View\n testID={testID}\n onLayout={onLayout}\n style={[{ width, height }, style]}\n {...part(\"chart\", \"root\")}\n >\n <View\n style={StyleSheet.absoluteFill}\n accessible\n accessibilityRole=\"image\"\n accessibilityLabel={\n resolved.ariaLabel ??\n describeChart({\n locale: resolved.locale,\n labels: resolved.labels,\n series: scene?.model.series,\n })\n }\n onStartShouldSetResponder={() => true}\n onResponderTerminationRequest={() => !store.holdsGesture()}\n onResponderGrant={store.touchStart}\n onResponderStart={store.touchAdd}\n onResponderMove={store.touchMove}\n onResponderEnd={store.touchEnd}\n onResponderRelease={store.touchEnd}\n onResponderTerminate={store.touchCancel}\n {...part(\"chart\", \"surface\")}\n >\n <View pointerEvents=\"none\" style={StyleSheet.absoluteFill}>\n {scene ? store.layers(scene, family) : null}\n {scene ? drawHover(scene, family, customTooltip) : null}\n </View>\n </View>\n {overlay && scene ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n left: scene.layout.plot.x,\n top: scene.layout.plot.y,\n width: scene.layout.plot.width,\n height: scene.layout.plot.height,\n }}\n {...part(\"chart\", \"overlay\")}\n >\n {overlay(scene.layout.plot)}\n </View>\n ) : null}\n {tooltip}\n </View>\n );\n}\n"],"mappings":"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"}