minerva-design 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (824) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +21 -21
  3. package/custom-elements.json +3072 -611
  4. package/dist/angular/fesm2022/minerva-angular.mjs +1491 -5
  5. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  6. package/dist/angular/types/minerva-angular.d.ts +595 -5
  7. package/dist/charts/canvas.d.cts +4 -3
  8. package/dist/charts/canvas.d.ts +4 -3
  9. package/dist/charts/core.cjs +1 -1
  10. package/dist/charts/core.d.cts +6 -4
  11. package/dist/charts/core.d.ts +6 -4
  12. package/dist/charts/core.js +24 -16
  13. package/dist/charts/engine/axis.cjs +1 -1
  14. package/dist/charts/engine/axis.cjs.map +1 -1
  15. package/dist/charts/engine/axis.js +42 -19
  16. package/dist/charts/engine/axis.js.map +1 -1
  17. package/dist/charts/engine/canvas.cjs +1 -1
  18. package/dist/charts/engine/canvas.cjs.map +1 -1
  19. package/dist/charts/engine/canvas.js +155 -127
  20. package/dist/charts/engine/canvas.js.map +1 -1
  21. package/dist/charts/engine/chart.cjs +1 -1
  22. package/dist/charts/engine/chart.cjs.map +1 -1
  23. package/dist/charts/engine/chart.js +370 -255
  24. package/dist/charts/engine/chart.js.map +1 -1
  25. package/dist/charts/engine/color.cjs +1 -1
  26. package/dist/charts/engine/color.cjs.map +1 -1
  27. package/dist/charts/engine/color.d.cts +18 -0
  28. package/dist/charts/engine/color.d.ts +18 -0
  29. package/dist/charts/engine/color.js +48 -2
  30. package/dist/charts/engine/color.js.map +1 -1
  31. package/dist/charts/engine/controller.cjs +2 -2
  32. package/dist/charts/engine/controller.cjs.map +1 -1
  33. package/dist/charts/engine/controller.d.cts +34 -1
  34. package/dist/charts/engine/controller.d.ts +34 -1
  35. package/dist/charts/engine/controller.js +318 -273
  36. package/dist/charts/engine/controller.js.map +1 -1
  37. package/dist/charts/engine/data.cjs +1 -1
  38. package/dist/charts/engine/data.cjs.map +1 -1
  39. package/dist/charts/engine/data.d.cts +3 -1
  40. package/dist/charts/engine/data.d.ts +3 -1
  41. package/dist/charts/engine/data.js +6 -4
  42. package/dist/charts/engine/data.js.map +1 -1
  43. package/dist/charts/engine/defaults.cjs +2 -0
  44. package/dist/charts/engine/defaults.cjs.map +1 -0
  45. package/dist/charts/engine/defaults.d.cts +20 -0
  46. package/dist/charts/engine/defaults.d.ts +20 -0
  47. package/dist/charts/engine/defaults.js +35 -0
  48. package/dist/charts/engine/defaults.js.map +1 -0
  49. package/dist/charts/engine/format.cjs +1 -1
  50. package/dist/charts/engine/format.cjs.map +1 -1
  51. package/dist/charts/engine/format.d.cts +6 -0
  52. package/dist/charts/engine/format.d.ts +6 -0
  53. package/dist/charts/engine/format.js +15 -2
  54. package/dist/charts/engine/format.js.map +1 -1
  55. package/dist/charts/engine/graph/chart.cjs +2 -0
  56. package/dist/charts/engine/graph/chart.cjs.map +1 -0
  57. package/dist/charts/engine/graph/chart.d.cts +3 -0
  58. package/dist/charts/engine/graph/chart.d.ts +3 -0
  59. package/dist/charts/engine/graph/chart.js +1708 -0
  60. package/dist/charts/engine/graph/chart.js.map +1 -0
  61. package/dist/charts/engine/graph/circular.cjs +2 -0
  62. package/dist/charts/engine/graph/circular.cjs.map +1 -0
  63. package/dist/charts/engine/graph/circular.d.cts +16 -0
  64. package/dist/charts/engine/graph/circular.d.ts +16 -0
  65. package/dist/charts/engine/graph/circular.js +62 -0
  66. package/dist/charts/engine/graph/circular.js.map +1 -0
  67. package/dist/charts/engine/graph/dag.cjs +2 -0
  68. package/dist/charts/engine/graph/dag.cjs.map +1 -0
  69. package/dist/charts/engine/graph/dag.d.cts +34 -0
  70. package/dist/charts/engine/graph/dag.d.ts +34 -0
  71. package/dist/charts/engine/graph/dag.js +339 -0
  72. package/dist/charts/engine/graph/dag.js.map +1 -0
  73. package/dist/charts/engine/graph/dom.cjs +2 -0
  74. package/dist/charts/engine/graph/dom.cjs.map +1 -0
  75. package/dist/charts/engine/graph/dom.d.cts +23 -0
  76. package/dist/charts/engine/graph/dom.d.ts +23 -0
  77. package/dist/charts/engine/graph/dom.js +158 -0
  78. package/dist/charts/engine/graph/dom.js.map +1 -0
  79. package/dist/charts/engine/graph/force.cjs +2 -0
  80. package/dist/charts/engine/graph/force.cjs.map +1 -0
  81. package/dist/charts/engine/graph/force.d.cts +76 -0
  82. package/dist/charts/engine/graph/force.d.ts +76 -0
  83. package/dist/charts/engine/graph/force.js +423 -0
  84. package/dist/charts/engine/graph/force.js.map +1 -0
  85. package/dist/charts/engine/graph/geometry.cjs +2 -0
  86. package/dist/charts/engine/graph/geometry.cjs.map +1 -0
  87. package/dist/charts/engine/graph/geometry.d.cts +50 -0
  88. package/dist/charts/engine/graph/geometry.d.ts +50 -0
  89. package/dist/charts/engine/graph/geometry.js +197 -0
  90. package/dist/charts/engine/graph/geometry.js.map +1 -0
  91. package/dist/charts/engine/graph/index.cjs +1 -0
  92. package/dist/charts/engine/graph/index.d.cts +6 -0
  93. package/dist/charts/engine/graph/index.d.ts +6 -0
  94. package/dist/charts/engine/graph/index.js +6 -0
  95. package/dist/charts/engine/graph/labels.cjs +2 -0
  96. package/dist/charts/engine/graph/labels.cjs.map +1 -0
  97. package/dist/charts/engine/graph/labels.d.cts +12 -0
  98. package/dist/charts/engine/graph/labels.d.ts +12 -0
  99. package/dist/charts/engine/graph/labels.js +128 -0
  100. package/dist/charts/engine/graph/labels.js.map +1 -0
  101. package/dist/charts/engine/graph/model.cjs +2 -0
  102. package/dist/charts/engine/graph/model.cjs.map +1 -0
  103. package/dist/charts/engine/graph/model.d.cts +52 -0
  104. package/dist/charts/engine/graph/model.d.ts +52 -0
  105. package/dist/charts/engine/graph/model.js +108 -0
  106. package/dist/charts/engine/graph/model.js.map +1 -0
  107. package/dist/charts/engine/graph/sizing.cjs +2 -0
  108. package/dist/charts/engine/graph/sizing.cjs.map +1 -0
  109. package/dist/charts/engine/graph/sizing.d.cts +33 -0
  110. package/dist/charts/engine/graph/sizing.d.ts +33 -0
  111. package/dist/charts/engine/graph/sizing.js +60 -0
  112. package/dist/charts/engine/graph/sizing.js.map +1 -0
  113. package/dist/charts/engine/graph/tree.cjs +2 -0
  114. package/dist/charts/engine/graph/tree.cjs.map +1 -0
  115. package/dist/charts/engine/graph/tree.d.cts +30 -0
  116. package/dist/charts/engine/graph/tree.d.ts +30 -0
  117. package/dist/charts/engine/graph/tree.js +218 -0
  118. package/dist/charts/engine/graph/tree.js.map +1 -0
  119. package/dist/charts/engine/graph/types.d.cts +640 -0
  120. package/dist/charts/engine/graph/types.d.ts +640 -0
  121. package/dist/charts/engine/graph/worker.cjs +52 -0
  122. package/dist/charts/engine/graph/worker.cjs.map +1 -0
  123. package/dist/charts/engine/graph/worker.d.cts +36 -0
  124. package/dist/charts/engine/graph/worker.d.ts +36 -0
  125. package/dist/charts/engine/graph/worker.js +135 -0
  126. package/dist/charts/engine/graph/worker.js.map +1 -0
  127. package/dist/charts/engine/items.cjs +1 -1
  128. package/dist/charts/engine/items.cjs.map +1 -1
  129. package/dist/charts/engine/items.d.cts +15 -2
  130. package/dist/charts/engine/items.d.ts +15 -2
  131. package/dist/charts/engine/items.js +131 -112
  132. package/dist/charts/engine/items.js.map +1 -1
  133. package/dist/charts/engine/labels.cjs +1 -1
  134. package/dist/charts/engine/labels.cjs.map +1 -1
  135. package/dist/charts/engine/labels.d.cts +17 -0
  136. package/dist/charts/engine/labels.d.ts +17 -0
  137. package/dist/charts/engine/labels.js +28 -4
  138. package/dist/charts/engine/labels.js.map +1 -1
  139. package/dist/charts/engine/layout.cjs +1 -1
  140. package/dist/charts/engine/layout.cjs.map +1 -1
  141. package/dist/charts/engine/layout.d.cts +9 -0
  142. package/dist/charts/engine/layout.d.ts +9 -0
  143. package/dist/charts/engine/layout.js +11 -2
  144. package/dist/charts/engine/layout.js.map +1 -1
  145. package/dist/charts/engine/model.cjs +1 -1
  146. package/dist/charts/engine/model.cjs.map +1 -1
  147. package/dist/charts/engine/model.d.cts +73 -3
  148. package/dist/charts/engine/model.d.ts +73 -3
  149. package/dist/charts/engine/model.js +258 -154
  150. package/dist/charts/engine/model.js.map +1 -1
  151. package/dist/charts/engine/orderbook/field.cjs +37 -0
  152. package/dist/charts/engine/orderbook/field.cjs.map +1 -0
  153. package/dist/charts/engine/orderbook/field.d.cts +92 -0
  154. package/dist/charts/engine/orderbook/field.d.ts +92 -0
  155. package/dist/charts/engine/orderbook/field.js +297 -0
  156. package/dist/charts/engine/orderbook/field.js.map +1 -0
  157. package/dist/charts/engine/orderbook/format.cjs +1 -1
  158. package/dist/charts/engine/orderbook/format.cjs.map +1 -1
  159. package/dist/charts/engine/orderbook/format.d.cts +3 -2
  160. package/dist/charts/engine/orderbook/format.d.ts +3 -2
  161. package/dist/charts/engine/orderbook/format.js +5 -5
  162. package/dist/charts/engine/orderbook/format.js.map +1 -1
  163. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  164. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  165. package/dist/charts/engine/orderbook/heatmap.js +566 -475
  166. package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
  167. package/dist/charts/engine/orderbook/host.cjs +1 -1
  168. package/dist/charts/engine/orderbook/host.cjs.map +1 -1
  169. package/dist/charts/engine/orderbook/host.d.cts +8 -1
  170. package/dist/charts/engine/orderbook/host.d.ts +8 -1
  171. package/dist/charts/engine/orderbook/host.js +27 -5
  172. package/dist/charts/engine/orderbook/host.js.map +1 -1
  173. package/dist/charts/engine/orderbook/ladder.cjs +1 -1
  174. package/dist/charts/engine/orderbook/ladder.cjs.map +1 -1
  175. package/dist/charts/engine/orderbook/ladder.js +1 -1
  176. package/dist/charts/engine/orderbook/ladder.js.map +1 -1
  177. package/dist/charts/engine/orderbook/layout.cjs +2 -0
  178. package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
  179. package/dist/charts/engine/orderbook/layout.d.cts +42 -0
  180. package/dist/charts/engine/orderbook/layout.d.ts +42 -0
  181. package/dist/charts/engine/orderbook/layout.js +76 -0
  182. package/dist/charts/engine/orderbook/layout.js.map +1 -0
  183. package/dist/charts/engine/orderbook/tape.cjs +1 -1
  184. package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
  185. package/dist/charts/engine/orderbook/tape.js +4 -4
  186. package/dist/charts/engine/orderbook/tape.js.map +1 -1
  187. package/dist/charts/engine/orderbook/types.d.cts +27 -3
  188. package/dist/charts/engine/orderbook/types.d.ts +27 -3
  189. package/dist/charts/engine/overlay.cjs +1 -1
  190. package/dist/charts/engine/overlay.cjs.map +1 -1
  191. package/dist/charts/engine/overlay.d.cts +27 -0
  192. package/dist/charts/engine/overlay.d.ts +27 -0
  193. package/dist/charts/engine/overlay.js +34 -12
  194. package/dist/charts/engine/overlay.js.map +1 -1
  195. package/dist/charts/engine/presets.cjs +2 -2
  196. package/dist/charts/engine/presets.cjs.map +1 -1
  197. package/dist/charts/engine/presets.d.cts +35 -3
  198. package/dist/charts/engine/presets.d.ts +35 -3
  199. package/dist/charts/engine/presets.js +121 -101
  200. package/dist/charts/engine/presets.js.map +1 -1
  201. package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
  202. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
  203. package/dist/charts/engine/renderers/canvas2d.js +13 -9
  204. package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
  205. package/dist/charts/engine/renderers/detect.cjs +1 -1
  206. package/dist/charts/engine/renderers/detect.cjs.map +1 -1
  207. package/dist/charts/engine/renderers/detect.d.cts +2 -1
  208. package/dist/charts/engine/renderers/detect.d.ts +2 -1
  209. package/dist/charts/engine/renderers/detect.js +23 -21
  210. package/dist/charts/engine/renderers/detect.js.map +1 -1
  211. package/dist/charts/engine/renderers/follow.cjs +2 -0
  212. package/dist/charts/engine/renderers/follow.cjs.map +1 -0
  213. package/dist/charts/engine/renderers/follow.d.cts +8 -0
  214. package/dist/charts/engine/renderers/follow.d.ts +8 -0
  215. package/dist/charts/engine/renderers/follow.js +10 -0
  216. package/dist/charts/engine/renderers/follow.js.map +1 -0
  217. package/dist/charts/engine/renderers/gl-budget.cjs +2 -0
  218. package/dist/charts/engine/renderers/gl-budget.cjs.map +1 -0
  219. package/dist/charts/engine/renderers/gl-budget.d.cts +32 -0
  220. package/dist/charts/engine/renderers/gl-budget.d.ts +32 -0
  221. package/dist/charts/engine/renderers/gl-budget.js +95 -0
  222. package/dist/charts/engine/renderers/gl-budget.js.map +1 -0
  223. package/dist/charts/engine/renderers/gl.cjs +1 -1
  224. package/dist/charts/engine/renderers/gl.cjs.map +1 -1
  225. package/dist/charts/engine/renderers/gl.js +1 -1
  226. package/dist/charts/engine/renderers/gl.js.map +1 -1
  227. package/dist/charts/engine/renderers/shaders.cjs +9 -6
  228. package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
  229. package/dist/charts/engine/renderers/shaders.d.cts +1 -1
  230. package/dist/charts/engine/renderers/shaders.d.ts +1 -1
  231. package/dist/charts/engine/renderers/shaders.js +9 -6
  232. package/dist/charts/engine/renderers/shaders.js.map +1 -1
  233. package/dist/charts/engine/renderers/types.cjs.map +1 -1
  234. package/dist/charts/engine/renderers/types.d.cts +2 -0
  235. package/dist/charts/engine/renderers/types.d.ts +2 -0
  236. package/dist/charts/engine/renderers/types.js.map +1 -1
  237. package/dist/charts/engine/renderers/webgl.cjs +1 -1
  238. package/dist/charts/engine/renderers/webgl.cjs.map +1 -1
  239. package/dist/charts/engine/renderers/webgl.js +85 -64
  240. package/dist/charts/engine/renderers/webgl.js.map +1 -1
  241. package/dist/charts/engine/renderers/webgl2.cjs +1 -1
  242. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
  243. package/dist/charts/engine/renderers/webgl2.js +72 -58
  244. package/dist/charts/engine/renderers/webgl2.js.map +1 -1
  245. package/dist/charts/engine/renderers/webgpu.cjs +1 -1
  246. package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
  247. package/dist/charts/engine/renderers/webgpu.js +1 -1
  248. package/dist/charts/engine/renderers/webgpu.js.map +1 -1
  249. package/dist/charts/engine/scene.cjs +1 -1
  250. package/dist/charts/engine/scene.cjs.map +1 -1
  251. package/dist/charts/engine/scene.d.cts +104 -4
  252. package/dist/charts/engine/scene.d.ts +104 -4
  253. package/dist/charts/engine/scene.js +412 -193
  254. package/dist/charts/engine/scene.js.map +1 -1
  255. package/dist/charts/engine/shapes/bullet.cjs +1 -1
  256. package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
  257. package/dist/charts/engine/shapes/bullet.js +110 -110
  258. package/dist/charts/engine/shapes/bullet.js.map +1 -1
  259. package/dist/charts/engine/shapes/chart.cjs +1 -1
  260. package/dist/charts/engine/shapes/chart.cjs.map +1 -1
  261. package/dist/charts/engine/shapes/chart.js +4 -1
  262. package/dist/charts/engine/shapes/chart.js.map +1 -1
  263. package/dist/charts/engine/shapes/chord.cjs +2 -0
  264. package/dist/charts/engine/shapes/chord.cjs.map +1 -0
  265. package/dist/charts/engine/shapes/chord.d.cts +18 -0
  266. package/dist/charts/engine/shapes/chord.d.ts +18 -0
  267. package/dist/charts/engine/shapes/chord.js +419 -0
  268. package/dist/charts/engine/shapes/chord.js.map +1 -0
  269. package/dist/charts/engine/shapes/draw.cjs +1 -1
  270. package/dist/charts/engine/shapes/draw.cjs.map +1 -1
  271. package/dist/charts/engine/shapes/draw.d.cts +5 -1
  272. package/dist/charts/engine/shapes/draw.d.ts +5 -1
  273. package/dist/charts/engine/shapes/draw.js +47 -17
  274. package/dist/charts/engine/shapes/draw.js.map +1 -1
  275. package/dist/charts/engine/shapes/hit.cjs +1 -1
  276. package/dist/charts/engine/shapes/hit.cjs.map +1 -1
  277. package/dist/charts/engine/shapes/hit.d.cts +3 -1
  278. package/dist/charts/engine/shapes/hit.d.ts +3 -1
  279. package/dist/charts/engine/shapes/hit.js +75 -46
  280. package/dist/charts/engine/shapes/hit.js.map +1 -1
  281. package/dist/charts/engine/shapes/index.d.cts +3 -2
  282. package/dist/charts/engine/shapes/index.d.ts +3 -2
  283. package/dist/charts/engine/shapes/labels.cjs +1 -1
  284. package/dist/charts/engine/shapes/labels.cjs.map +1 -1
  285. package/dist/charts/engine/shapes/labels.js +12 -4
  286. package/dist/charts/engine/shapes/labels.js.map +1 -1
  287. package/dist/charts/engine/shapes/layout.cjs +2 -2
  288. package/dist/charts/engine/shapes/layout.cjs.map +1 -1
  289. package/dist/charts/engine/shapes/layout.d.cts +3 -1
  290. package/dist/charts/engine/shapes/layout.d.ts +3 -1
  291. package/dist/charts/engine/shapes/layout.js +106 -78
  292. package/dist/charts/engine/shapes/layout.js.map +1 -1
  293. package/dist/charts/engine/shapes/scene.cjs +1 -1
  294. package/dist/charts/engine/shapes/scene.cjs.map +1 -1
  295. package/dist/charts/engine/shapes/scene.d.cts +33 -3
  296. package/dist/charts/engine/shapes/scene.d.ts +33 -3
  297. package/dist/charts/engine/shapes/scene.js +62 -19
  298. package/dist/charts/engine/shapes/scene.js.map +1 -1
  299. package/dist/charts/engine/shapes/types.d.cts +121 -8
  300. package/dist/charts/engine/shapes/types.d.ts +121 -8
  301. package/dist/charts/engine/signature.cjs +1 -1
  302. package/dist/charts/engine/signature.cjs.map +1 -1
  303. package/dist/charts/engine/signature.js +1 -1
  304. package/dist/charts/engine/signature.js.map +1 -1
  305. package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
  306. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
  307. package/dist/charts/engine/three-d/canvas2d.d.cts +41 -3
  308. package/dist/charts/engine/three-d/canvas2d.d.ts +41 -3
  309. package/dist/charts/engine/three-d/canvas2d.js +166 -67
  310. package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
  311. package/dist/charts/engine/three-d/chart.cjs +1 -1
  312. package/dist/charts/engine/three-d/chart.cjs.map +1 -1
  313. package/dist/charts/engine/three-d/chart.js +219 -215
  314. package/dist/charts/engine/three-d/chart.js.map +1 -1
  315. package/dist/charts/engine/three-d/detect.cjs +1 -1
  316. package/dist/charts/engine/three-d/detect.cjs.map +1 -1
  317. package/dist/charts/engine/three-d/detect.d.cts +3 -2
  318. package/dist/charts/engine/three-d/detect.d.ts +3 -2
  319. package/dist/charts/engine/three-d/detect.js +22 -20
  320. package/dist/charts/engine/three-d/detect.js.map +1 -1
  321. package/dist/charts/engine/three-d/geometry.cjs +1 -1
  322. package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
  323. package/dist/charts/engine/three-d/geometry.d.cts +6 -0
  324. package/dist/charts/engine/three-d/geometry.d.ts +6 -0
  325. package/dist/charts/engine/three-d/geometry.js +106 -90
  326. package/dist/charts/engine/three-d/geometry.js.map +1 -1
  327. package/dist/charts/engine/three-d/model.cjs +1 -1
  328. package/dist/charts/engine/three-d/model.cjs.map +1 -1
  329. package/dist/charts/engine/three-d/model.d.cts +2 -0
  330. package/dist/charts/engine/three-d/model.d.ts +2 -0
  331. package/dist/charts/engine/three-d/model.js +2 -0
  332. package/dist/charts/engine/three-d/model.js.map +1 -1
  333. package/dist/charts/engine/three-d/oit.cjs +109 -0
  334. package/dist/charts/engine/three-d/oit.cjs.map +1 -0
  335. package/dist/charts/engine/three-d/oit.d.cts +34 -0
  336. package/dist/charts/engine/three-d/oit.d.ts +34 -0
  337. package/dist/charts/engine/three-d/oit.js +111 -0
  338. package/dist/charts/engine/three-d/oit.js.map +1 -0
  339. package/dist/charts/engine/three-d/overlay.cjs +1 -1
  340. package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
  341. package/dist/charts/engine/three-d/overlay.js +43 -36
  342. package/dist/charts/engine/three-d/overlay.js.map +1 -1
  343. package/dist/charts/engine/three-d/render-types.cjs +1 -1
  344. package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
  345. package/dist/charts/engine/three-d/render-types.d.cts +37 -3
  346. package/dist/charts/engine/three-d/render-types.d.ts +37 -3
  347. package/dist/charts/engine/three-d/render-types.js +6 -10
  348. package/dist/charts/engine/three-d/render-types.js.map +1 -1
  349. package/dist/charts/engine/three-d/shaders.cjs +109 -48
  350. package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
  351. package/dist/charts/engine/three-d/shaders.d.cts +12 -5
  352. package/dist/charts/engine/three-d/shaders.d.ts +12 -5
  353. package/dist/charts/engine/three-d/shaders.js +118 -55
  354. package/dist/charts/engine/three-d/shaders.js.map +1 -1
  355. package/dist/charts/engine/three-d/sort.cjs +1 -1
  356. package/dist/charts/engine/three-d/sort.cjs.map +1 -1
  357. package/dist/charts/engine/three-d/sort.d.cts +18 -5
  358. package/dist/charts/engine/three-d/sort.d.ts +18 -5
  359. package/dist/charts/engine/three-d/sort.js +129 -43
  360. package/dist/charts/engine/three-d/sort.js.map +1 -1
  361. package/dist/charts/engine/three-d/types.d.cts +36 -0
  362. package/dist/charts/engine/three-d/types.d.ts +36 -0
  363. package/dist/charts/engine/three-d/webgl.cjs +1 -1
  364. package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
  365. package/dist/charts/engine/three-d/webgl.d.cts +9 -0
  366. package/dist/charts/engine/three-d/webgl.d.ts +9 -0
  367. package/dist/charts/engine/three-d/webgl.js +199 -74
  368. package/dist/charts/engine/three-d/webgl.js.map +1 -1
  369. package/dist/charts/engine/three-d/webgpu.cjs +1 -1
  370. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
  371. package/dist/charts/engine/three-d/webgpu.js +231 -94
  372. package/dist/charts/engine/three-d/webgpu.js.map +1 -1
  373. package/dist/charts/engine/trading/chart.cjs +1 -1
  374. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  375. package/dist/charts/engine/trading/chart.d.cts +10 -1
  376. package/dist/charts/engine/trading/chart.d.ts +10 -1
  377. package/dist/charts/engine/trading/chart.js +1677 -813
  378. package/dist/charts/engine/trading/chart.js.map +1 -1
  379. package/dist/charts/engine/trading/drawings.cjs +2 -1
  380. package/dist/charts/engine/trading/drawings.cjs.map +1 -1
  381. package/dist/charts/engine/trading/drawings.d.cts +53 -9
  382. package/dist/charts/engine/trading/drawings.d.ts +53 -9
  383. package/dist/charts/engine/trading/drawings.js +346 -71
  384. package/dist/charts/engine/trading/drawings.js.map +1 -1
  385. package/dist/charts/engine/trading/format.cjs +1 -1
  386. package/dist/charts/engine/trading/format.cjs.map +1 -1
  387. package/dist/charts/engine/trading/format.d.cts +19 -0
  388. package/dist/charts/engine/trading/format.d.ts +19 -0
  389. package/dist/charts/engine/trading/format.js +65 -21
  390. package/dist/charts/engine/trading/format.js.map +1 -1
  391. package/dist/charts/engine/trading/geometry.cjs +1 -1
  392. package/dist/charts/engine/trading/geometry.cjs.map +1 -1
  393. package/dist/charts/engine/trading/geometry.d.cts +16 -0
  394. package/dist/charts/engine/trading/geometry.d.ts +16 -0
  395. package/dist/charts/engine/trading/geometry.js +19 -4
  396. package/dist/charts/engine/trading/geometry.js.map +1 -1
  397. package/dist/charts/engine/trading/index.cjs +1 -1
  398. package/dist/charts/engine/trading/index.d.cts +2 -1
  399. package/dist/charts/engine/trading/index.d.ts +2 -1
  400. package/dist/charts/engine/trading/index.js +4 -3
  401. package/dist/charts/engine/trading/indicators.cjs +1 -1
  402. package/dist/charts/engine/trading/indicators.cjs.map +1 -1
  403. package/dist/charts/engine/trading/indicators.d.cts +180 -10
  404. package/dist/charts/engine/trading/indicators.d.ts +180 -10
  405. package/dist/charts/engine/trading/indicators.js +449 -173
  406. package/dist/charts/engine/trading/indicators.js.map +1 -1
  407. package/dist/charts/engine/trading/labels.cjs +1 -1
  408. package/dist/charts/engine/trading/labels.cjs.map +1 -1
  409. package/dist/charts/engine/trading/labels.js +104 -4
  410. package/dist/charts/engine/trading/labels.js.map +1 -1
  411. package/dist/charts/engine/trading/store.cjs +1 -1
  412. package/dist/charts/engine/trading/store.cjs.map +1 -1
  413. package/dist/charts/engine/trading/store.d.cts +21 -0
  414. package/dist/charts/engine/trading/store.d.ts +21 -0
  415. package/dist/charts/engine/trading/store.js +22 -1
  416. package/dist/charts/engine/trading/store.js.map +1 -1
  417. package/dist/charts/engine/trading/studies.cjs +1 -1
  418. package/dist/charts/engine/trading/studies.cjs.map +1 -1
  419. package/dist/charts/engine/trading/studies.d.cts +49 -8
  420. package/dist/charts/engine/trading/studies.d.ts +49 -8
  421. package/dist/charts/engine/trading/studies.js +352 -93
  422. package/dist/charts/engine/trading/studies.js.map +1 -1
  423. package/dist/charts/engine/trading/sync.cjs +2 -0
  424. package/dist/charts/engine/trading/sync.cjs.map +1 -0
  425. package/dist/charts/engine/trading/sync.d.cts +8 -0
  426. package/dist/charts/engine/trading/sync.d.ts +8 -0
  427. package/dist/charts/engine/trading/sync.js +25 -0
  428. package/dist/charts/engine/trading/sync.js.map +1 -0
  429. package/dist/charts/engine/trading/types.d.cts +514 -16
  430. package/dist/charts/engine/trading/types.d.ts +514 -16
  431. package/dist/charts/engine/types.d.cts +106 -11
  432. package/dist/charts/engine/types.d.ts +106 -11
  433. package/dist/charts/index.cjs +1 -1
  434. package/dist/charts/index.d.cts +3 -2
  435. package/dist/charts/index.d.ts +3 -2
  436. package/dist/charts/index.js +30 -22
  437. package/dist/charts/react/charts.cjs +1 -1
  438. package/dist/charts/react/charts.cjs.map +1 -1
  439. package/dist/charts/react/charts.js +51 -34
  440. package/dist/charts/react/charts.js.map +1 -1
  441. package/dist/charts/react/graph.cjs +2 -0
  442. package/dist/charts/react/graph.cjs.map +1 -0
  443. package/dist/charts/react/graph.d.cts +219 -0
  444. package/dist/charts/react/graph.d.ts +219 -0
  445. package/dist/charts/react/graph.js +160 -0
  446. package/dist/charts/react/graph.js.map +1 -0
  447. package/dist/charts/react/orderbook.cjs +1 -1
  448. package/dist/charts/react/orderbook.cjs.map +1 -1
  449. package/dist/charts/react/orderbook.d.cts +3 -1
  450. package/dist/charts/react/orderbook.d.ts +3 -1
  451. package/dist/charts/react/orderbook.js +1 -0
  452. package/dist/charts/react/orderbook.js.map +1 -1
  453. package/dist/charts/react/shapes.cjs +1 -1
  454. package/dist/charts/react/shapes.cjs.map +1 -1
  455. package/dist/charts/react/shapes.d.cts +88 -4
  456. package/dist/charts/react/shapes.d.ts +88 -4
  457. package/dist/charts/react/shapes.js +55 -12
  458. package/dist/charts/react/shapes.js.map +1 -1
  459. package/dist/charts/react/three-d.cjs +1 -1
  460. package/dist/charts/react/three-d.cjs.map +1 -1
  461. package/dist/charts/react/three-d.d.cts +7 -0
  462. package/dist/charts/react/three-d.d.ts +7 -0
  463. package/dist/charts/react/three-d.js +14 -13
  464. package/dist/charts/react/three-d.js.map +1 -1
  465. package/dist/charts/react/trading.cjs +1 -1
  466. package/dist/charts/react/trading.cjs.map +1 -1
  467. package/dist/charts/react/trading.d.cts +54 -2
  468. package/dist/charts/react/trading.d.ts +54 -2
  469. package/dist/charts/react/trading.js +68 -37
  470. package/dist/charts/react/trading.js.map +1 -1
  471. package/dist/charts/react/types.d.cts +11 -0
  472. package/dist/charts/react/types.d.ts +11 -0
  473. package/dist/core/contracts.cjs +1 -1
  474. package/dist/core/contracts.cjs.map +1 -1
  475. package/dist/core/contracts.js +1 -1
  476. package/dist/core/contracts.js.map +1 -1
  477. package/dist/native/charts/src/canvas.cjs +1 -1
  478. package/dist/native/charts/src/canvas.js +5 -4
  479. package/dist/native/charts/src/engine/axis.cjs +1 -1
  480. package/dist/native/charts/src/engine/axis.cjs.map +1 -1
  481. package/dist/native/charts/src/engine/axis.js +42 -19
  482. package/dist/native/charts/src/engine/axis.js.map +1 -1
  483. package/dist/native/charts/src/engine/color.cjs +1 -1
  484. package/dist/native/charts/src/engine/color.cjs.map +1 -1
  485. package/dist/native/charts/src/engine/color.js +47 -5
  486. package/dist/native/charts/src/engine/color.js.map +1 -1
  487. package/dist/native/charts/src/engine/controller.cjs +2 -2
  488. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  489. package/dist/native/charts/src/engine/controller.js +296 -251
  490. package/dist/native/charts/src/engine/controller.js.map +1 -1
  491. package/dist/native/charts/src/engine/data.cjs +1 -1
  492. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  493. package/dist/native/charts/src/engine/data.js +6 -4
  494. package/dist/native/charts/src/engine/data.js.map +1 -1
  495. package/dist/native/charts/src/engine/format.cjs +1 -1
  496. package/dist/native/charts/src/engine/format.cjs.map +1 -1
  497. package/dist/native/charts/src/engine/format.js +15 -2
  498. package/dist/native/charts/src/engine/format.js.map +1 -1
  499. package/dist/native/charts/src/engine/labels.cjs +1 -1
  500. package/dist/native/charts/src/engine/labels.cjs.map +1 -1
  501. package/dist/native/charts/src/engine/labels.js +42 -5
  502. package/dist/native/charts/src/engine/labels.js.map +1 -1
  503. package/dist/native/charts/src/engine/layout.cjs +1 -1
  504. package/dist/native/charts/src/engine/layout.cjs.map +1 -1
  505. package/dist/native/charts/src/engine/layout.js +11 -2
  506. package/dist/native/charts/src/engine/layout.js.map +1 -1
  507. package/dist/native/charts/src/engine/model.cjs +1 -1
  508. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  509. package/dist/native/charts/src/engine/model.js +278 -174
  510. package/dist/native/charts/src/engine/model.js.map +1 -1
  511. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  512. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  513. package/dist/native/charts/src/engine/presets.cjs +2 -2
  514. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  515. package/dist/native/charts/src/engine/presets.js +110 -90
  516. package/dist/native/charts/src/engine/presets.js.map +1 -1
  517. package/dist/native/charts/src/engine/scene.cjs +1 -1
  518. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  519. package/dist/native/charts/src/engine/scene.js +421 -202
  520. package/dist/native/charts/src/engine/scene.js.map +1 -1
  521. package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
  522. package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
  523. package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
  524. package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
  525. package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
  526. package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
  527. package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
  528. package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
  529. package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
  530. package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
  531. package/dist/native/charts/src/engine/shapes/chord.js +419 -0
  532. package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
  533. package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
  534. package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
  535. package/dist/native/charts/src/engine/shapes/draw.js +47 -17
  536. package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
  537. package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
  538. package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
  539. package/dist/native/charts/src/engine/shapes/hit.js +73 -44
  540. package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
  541. package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
  542. package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
  543. package/dist/native/charts/src/engine/shapes/labels.js +12 -4
  544. package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
  545. package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
  546. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
  547. package/dist/native/charts/src/engine/shapes/layout.js +136 -94
  548. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
  549. package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
  550. package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
  551. package/dist/native/charts/src/engine/shapes/scene.js +62 -19
  552. package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
  553. package/dist/native/components/Chart/ChartBase.cjs +1 -1
  554. package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
  555. package/dist/native/components/Chart/ChartBase.js +127 -115
  556. package/dist/native/components/Chart/ChartBase.js.map +1 -1
  557. package/dist/native/components/Chart/charts.cjs +1 -1
  558. package/dist/native/components/Chart/charts.cjs.map +1 -1
  559. package/dist/native/components/Chart/charts.js +8 -5
  560. package/dist/native/components/Chart/charts.js.map +1 -1
  561. package/dist/native/components/Chart/scene.cjs +1 -1
  562. package/dist/native/components/Chart/scene.cjs.map +1 -1
  563. package/dist/native/components/Chart/scene.d.cts +6 -1
  564. package/dist/native/components/Chart/scene.d.ts +6 -1
  565. package/dist/native/components/Chart/scene.js +226 -108
  566. package/dist/native/components/Chart/scene.js.map +1 -1
  567. package/dist/native/components/Chart/types.d.cts +7 -1
  568. package/dist/native/components/Chart/types.d.ts +7 -1
  569. package/dist/native/components/Charts/charts.cjs +1 -1
  570. package/dist/native/components/Charts/charts.cjs.map +1 -1
  571. package/dist/native/components/Charts/charts.js +60 -43
  572. package/dist/native/components/Charts/charts.js.map +1 -1
  573. package/dist/native/components/Charts/types.d.cts +11 -0
  574. package/dist/native/components/Charts/types.d.ts +11 -0
  575. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
  576. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
  577. package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +1 -1
  578. package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +1 -1
  579. package/dist/native/components/ShapeChart/ShapeChartBase.js +97 -106
  580. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
  581. package/dist/native/components/ShapeChart/charts.cjs +1 -1
  582. package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
  583. package/dist/native/components/ShapeChart/charts.d.cts +6 -1
  584. package/dist/native/components/ShapeChart/charts.d.ts +6 -1
  585. package/dist/native/components/ShapeChart/charts.js +138 -96
  586. package/dist/native/components/ShapeChart/charts.js.map +1 -1
  587. package/dist/native/components/ShapeChart/draw.cjs +1 -1
  588. package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
  589. package/dist/native/components/ShapeChart/draw.d.cts +1 -1
  590. package/dist/native/components/ShapeChart/draw.d.ts +1 -1
  591. package/dist/native/components/ShapeChart/draw.js +26 -17
  592. package/dist/native/components/ShapeChart/draw.js.map +1 -1
  593. package/dist/native/components/ShapeChart/geometry.cjs +1 -1
  594. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
  595. package/dist/native/components/ShapeChart/geometry.js +233 -70
  596. package/dist/native/components/ShapeChart/geometry.js.map +1 -1
  597. package/dist/native/components/ShapeChart/index.cjs +1 -1
  598. package/dist/native/components/ShapeChart/index.d.cts +1 -1
  599. package/dist/native/components/ShapeChart/index.d.ts +1 -1
  600. package/dist/native/components/ShapeChart/index.js +2 -2
  601. package/dist/native/components/ShapeChart/recorder.cjs +1 -1
  602. package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
  603. package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
  604. package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
  605. package/dist/native/components/ShapeChart/recorder.js +19 -10
  606. package/dist/native/components/ShapeChart/recorder.js.map +1 -1
  607. package/dist/native/components/ShapeChart/types.d.cts +95 -8
  608. package/dist/native/components/ShapeChart/types.d.ts +95 -8
  609. package/dist/native/index.cjs +1 -1
  610. package/dist/native/index.js +2 -2
  611. package/dist/native/source/components/Chart/ChartBase.tsx +19 -6
  612. package/dist/native/source/components/Chart/charts.tsx +10 -3
  613. package/dist/native/source/components/Chart/scene.tsx +243 -14
  614. package/dist/native/source/components/Chart/types.ts +7 -0
  615. package/dist/native/source/components/Charts/charts.tsx +37 -2
  616. package/dist/native/source/components/Charts/types.ts +11 -0
  617. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +10 -34
  618. package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
  619. package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
  620. package/dist/native/source/components/ShapeChart/geometry.ts +376 -25
  621. package/dist/native/source/components/ShapeChart/index.ts +1 -0
  622. package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
  623. package/dist/native/source/components/ShapeChart/types.ts +99 -6
  624. package/dist/native/source/manifest.ts +1 -0
  625. package/dist/taro/chart-a11y.d.ts +7 -0
  626. package/dist/taro/charts.d.ts +29 -6
  627. package/dist/taro/index.js +3129 -1902
  628. package/dist/taro/shape-charts.d.ts +99 -5
  629. package/dist/uni/AreaChart.vue +2 -1
  630. package/dist/uni/AreaChart.vue.d.ts +5 -1
  631. package/dist/uni/Badge.vue.d.ts +1 -1
  632. package/dist/uni/BarChart.vue +2 -1
  633. package/dist/uni/BarChart.vue.d.ts +5 -1
  634. package/dist/uni/BoxPlotChart.vue +2 -1
  635. package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
  636. package/dist/uni/BubbleChart.vue +2 -1
  637. package/dist/uni/BubbleChart.vue.d.ts +4 -0
  638. package/dist/uni/BulletChart.vue.d.ts +4 -0
  639. package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
  640. package/dist/uni/CandlestickChart.vue +2 -1
  641. package/dist/uni/CandlestickChart.vue.d.ts +4 -0
  642. package/dist/uni/Chart.vue +2 -1
  643. package/dist/uni/Chart.vue.d.ts +4 -0
  644. package/dist/uni/ChordChart.vue +93 -0
  645. package/dist/uni/ChordChart.vue.d.ts +136 -0
  646. package/dist/uni/Divider.vue.d.ts +1 -1
  647. package/dist/uni/DonutChart.vue.d.ts +5 -1
  648. package/dist/uni/FunnelChart.vue.d.ts +4 -0
  649. package/dist/uni/GanttChart.vue +2 -1
  650. package/dist/uni/GanttChart.vue.d.ts +15 -0
  651. package/dist/uni/GaugeChart.vue.d.ts +5 -1
  652. package/dist/uni/HeatmapChart.vue +2 -1
  653. package/dist/uni/HeatmapChart.vue.d.ts +8 -2
  654. package/dist/uni/HistogramChart.vue +2 -1
  655. package/dist/uni/HistogramChart.vue.d.ts +4 -0
  656. package/dist/uni/HorizontalBarChart.vue +2 -1
  657. package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
  658. package/dist/uni/LineChart.vue +2 -1
  659. package/dist/uni/LineChart.vue.d.ts +4 -0
  660. package/dist/uni/MixedChart.vue +2 -1
  661. package/dist/uni/MixedChart.vue.d.ts +4 -0
  662. package/dist/uni/PieChart.vue.d.ts +5 -1
  663. package/dist/uni/QuadrantChart.vue +2 -1
  664. package/dist/uni/QuadrantChart.vue.d.ts +4 -0
  665. package/dist/uni/RadarChart.vue.d.ts +4 -0
  666. package/dist/uni/RadialBarChart.vue.d.ts +4 -0
  667. package/dist/uni/RangeAreaChart.vue +2 -1
  668. package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
  669. package/dist/uni/SankeyChart.vue.d.ts +4 -0
  670. package/dist/uni/ScatterChart.vue +2 -1
  671. package/dist/uni/ScatterChart.vue.d.ts +4 -0
  672. package/dist/uni/Sparkline.vue +2 -1
  673. package/dist/uni/Sparkline.vue.d.ts +4 -0
  674. package/dist/uni/SunburstChart.vue.d.ts +4 -0
  675. package/dist/uni/ToastProvider.vue.d.ts +1 -1
  676. package/dist/uni/TreemapChart.vue.d.ts +4 -0
  677. package/dist/uni/WaterfallChart.vue +2 -1
  678. package/dist/uni/WaterfallChart.vue.d.ts +9 -0
  679. package/dist/uni/chart-a11y.d.ts +7 -0
  680. package/dist/uni/chart-a11y.js +29 -0
  681. package/dist/uni/chart-canvas.d.ts +12 -0
  682. package/dist/uni/chart-canvas.js +15 -1
  683. package/dist/uni/chart-types.d.ts +36 -5
  684. package/dist/uni/chart-types.js +31 -3
  685. package/dist/uni/charts-canvas.js +3 -2
  686. package/dist/uni/index.d.ts +2 -1
  687. package/dist/uni/index.js +1 -0
  688. package/dist/uni/manifest.d.ts +7 -0
  689. package/dist/uni/manifest.js +10 -0
  690. package/dist/uni/named-chart-options.d.ts +11 -2
  691. package/dist/uni/named-chart-options.js +21 -1
  692. package/dist/uni/shape-chart-canvas.d.ts +3 -3
  693. package/dist/uni/shape-chart-canvas.js +17 -58
  694. package/dist/uni/shape-chart-types.d.ts +53 -3
  695. package/dist/uni/shape-chart-types.js +45 -1
  696. package/dist/vue/charts-global.d.ts +48 -0
  697. package/dist/vue/charts.d.ts +18 -0
  698. package/dist/vue/charts.js +56 -0
  699. package/dist/vue/charts.js.map +1 -0
  700. package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +2 -0
  701. package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
  702. package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
  703. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
  704. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  705. package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
  706. package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
  707. package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
  708. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
  709. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  710. package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +181 -0
  711. package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
  712. package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
  713. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
  714. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
  715. package/dist/vue/components/Chart/GanttChart.vue.d.ts +19 -0
  716. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
  717. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +12 -1
  718. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  719. package/dist/vue/components/Chart/GraphChart.vue.d.ts +186 -0
  720. package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
  721. package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
  722. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
  723. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  724. package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
  725. package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
  726. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
  727. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  728. package/dist/vue/components/Chart/Line3DChart.vue.d.ts +2 -0
  729. package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
  730. package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +2 -0
  731. package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +2 -0
  732. package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
  733. package/dist/vue/components/Chart/TradingChart.vue.d.ts +58 -1
  734. package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
  735. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
  736. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  737. package/dist/vue/components/Chart/TreeChart.vue.d.ts +174 -0
  738. package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
  739. package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
  740. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
  741. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  742. package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
  743. package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
  744. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
  745. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  746. package/dist/vue/components/Chart/graph.d.ts +156 -0
  747. package/dist/vue/components/Chart/graph.js +137 -0
  748. package/dist/vue/components/Chart/graph.js.map +1 -0
  749. package/dist/vue/components/Chart/index.d.ts +5 -1
  750. package/dist/vue/components/Chart/index.js +5 -1
  751. package/dist/vue/components/Chart/orderbook.d.ts +5 -1
  752. package/dist/vue/components/Chart/orderbook.js +2 -0
  753. package/dist/vue/components/Chart/orderbook.js.map +1 -1
  754. package/dist/vue/components/Chart/three-d.d.ts +3 -0
  755. package/dist/vue/components/Chart/three-d.js +2 -0
  756. package/dist/vue/components/Chart/three-d.js.map +1 -1
  757. package/dist/vue/components/Chart/trading.d.ts +30 -3
  758. package/dist/vue/components/Chart/trading.js +9 -0
  759. package/dist/vue/components/Chart/trading.js.map +1 -1
  760. package/dist/vue/components/Chart/types.d.ts +74 -2
  761. package/dist/vue/global.d.ts +2 -38
  762. package/dist/vue/groups/charts.js +10 -2
  763. package/dist/vue/groups/charts.js.map +1 -1
  764. package/dist/vue/index.js +6 -2
  765. package/dist/vue/internal/register.d.ts +7 -0
  766. package/dist/vue/internal/register.js +14 -0
  767. package/dist/vue/internal/register.js.map +1 -0
  768. package/dist/vue/plugin.d.ts +9 -4
  769. package/dist/vue/plugin.js +6 -11
  770. package/dist/vue/plugin.js.map +1 -1
  771. package/dist/weapp/area-chart/index.wxml +1 -1
  772. package/dist/weapp/bar-chart/index.wxml +1 -1
  773. package/dist/weapp/box-plot-chart/index.wxml +1 -1
  774. package/dist/weapp/bubble-chart/index.wxml +1 -1
  775. package/dist/weapp/candlestick-chart/index.wxml +1 -1
  776. package/dist/weapp/chart/index.wxml +1 -1
  777. package/dist/weapp/charts/canvas.js +1987 -175
  778. package/dist/weapp/charts/core.js +3 -0
  779. package/dist/weapp/chord-chart/index.js +1 -0
  780. package/dist/weapp/chord-chart/index.json +1 -0
  781. package/dist/weapp/chord-chart/index.wxml +1 -0
  782. package/dist/weapp/chord-chart/index.wxss +1 -0
  783. package/dist/weapp/controls.js +148 -57
  784. package/dist/weapp/gantt-chart/index.wxml +1 -1
  785. package/dist/weapp/heatmap-chart/index.wxml +1 -1
  786. package/dist/weapp/histogram-chart/index.wxml +1 -1
  787. package/dist/weapp/horizontal-bar-chart/index.wxml +1 -1
  788. package/dist/weapp/line-chart/index.wxml +1 -1
  789. package/dist/weapp/mixed-chart/index.wxml +1 -1
  790. package/dist/weapp/quadrant-chart/index.wxml +1 -1
  791. package/dist/weapp/range-area-chart/index.wxml +1 -1
  792. package/dist/weapp/scatter-chart/index.wxml +1 -1
  793. package/dist/weapp/sparkline/index.wxml +1 -1
  794. package/dist/weapp/types.d.ts +96 -4
  795. package/dist/weapp/waterfall-chart/index.wxml +1 -1
  796. package/dist/web-components/components/chart/charts.d.ts +4 -2
  797. package/dist/web-components/components/chart/charts.js +8 -1
  798. package/dist/web-components/components/chart/charts.js.map +1 -1
  799. package/dist/web-components/components/chart/extended.d.ts +21 -7
  800. package/dist/web-components/components/chart/extended.js +29 -9
  801. package/dist/web-components/components/chart/extended.js.map +1 -1
  802. package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
  803. package/dist/web-components/components/chart/shapes-extended.js +27 -1
  804. package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
  805. package/dist/web-components/components/chart-3d/chart-3d.d.ts +1 -1
  806. package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -1
  807. package/dist/web-components/components/graph/graph.d.ts +156 -0
  808. package/dist/web-components/components/graph/graph.js +150 -0
  809. package/dist/web-components/components/graph/graph.js.map +1 -0
  810. package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
  811. package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
  812. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
  813. package/dist/web-components/elements/chart.d.ts +1 -1
  814. package/dist/web-components/elements/chart.js +6 -5
  815. package/dist/web-components/elements/chart.js.map +1 -1
  816. package/dist/web-components/elements/graph.d.ts +2 -0
  817. package/dist/web-components/elements/graph.js +12 -0
  818. package/dist/web-components/elements/graph.js.map +1 -0
  819. package/dist/web-components/html-custom-data.json +318 -4
  820. package/dist/web-components/types/react.d.ts +63 -4
  821. package/dist/web-components/types/solid.d.ts +55 -8
  822. package/dist/web-components/types/svelte.d.ts +55 -8
  823. package/dist/web-components/types/vue.d.ts +55 -4
  824. package/package.json +16 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chart.js","names":["wheelFactor","pixels","deltaMode","deltaY","pinch","DEFAULT_LIGHTING","ROTATE_SPEED","DRAG_DEGREES","KEY_DEGREES","TWEEN_MS","initialCamera","clampCamera","camera","DEFAULT_CAMERA","copyCamera","c","sameCamera","a","b","lerpCamera","da","t","stageLayout","side","width","top","height","bottom","barSpace","colorBar","fit","h","createChart3D","doc","container","win","dom","createChart3DDom","stage","options","initialOptions","theme","readTheme","themeVersion","destroyed","listeners","emit","type","fn","event","toggled","model","buildModel","colors","lut","lutKey","lutId","buildGeometry","createGeometryBuilder","geometry","geometryDirty","picker","createPicker","sortTransparent","createDepthSorter","renderer","rendererToken","resolveReady","ready","resolve","homeCamera","cameraKey","tween","frameId","dataDirty","lastFrame","lastLayout","overlay","overlayStyle","isDark","hoverHit","hoverEvt","pendingHover","lastPointer","pointerInside","visible","lastRotate","reducedMotion","interaction","o","rotateSpeed","showsColorBar","effectiveOptions","id","s","i","resolveColor","value","parseColor","refreshColors","key","colorLut","colorStops","f","palette","m","rebuild","renderLegend","updateAccessibility","invalidate","scheduleHover","legendKey","named","show","config","toggle","toCss","focused","item","fill","labels","style","swatch","names","lines","count","name","size","axis","range","data","frame","rotating","drag","lightDirection","v","normalize","dpr","time","eased","dt","sizeCanvas","layout","fov","half","cameraFrame","bg","drawWalls","CPU_BUDGET","GPU_BUDGET","w","l","frame3d","drawForeground","fg","drawAxes","colorBarFormat","shape","highlightShape","drawHighlight","d","locale","step","tickStep","tooltipEnabled","stageOffset","setHover","hit","hoverEvent","changed","renderTooltip","tip","custom","content","defaultTooltip","tw","th","x","y","fragment","header","valueName","row","tooltipRows","el","n","pickAt","hoverFrame","p","pointers","local","r","fitHeight","setCameraInternal","clamped","next","notify","animateTo","target","pinchInfo","pts","startDrag","mode","onPointerDown","ia","pan","onPointerMove","scale","distance","center","dx","dy","onPointerUp","wasDrag","rest","onPointerCancel","onPointerEnter","onPointerLeave","onWheel","factor","zoom","ratio","cx","cy","nx","ny","onDoubleClick","onContextMenu","onFocus","keyboard","onBlur","onKeyDown","resizeObserver","intersection","entry","entries","was","onVisibility","dprQuery","onDprChange","watchDpr","onMotionChange","refreshTheme","themeColorsChanged","unwatchTheme","watchTheme","langObserver","resolveLocale","initRenderer","token","createRenderer3D","canvas","layerCanvas","kind","exclude","previous","set","listener","luminance"],"sources":["../../../../../charts/src/engine/three-d/chart.ts"],"sourcesContent":["// createChart3D: 3D scatter / surface / bar / line charts. The data layer\n// is drawn by a GPU backend (WebGPU -> WebGL2 -> WebGL) or by Canvas2D (CPU\n// projection, painter's algorithm); walls, labels, color bar and hover\n// highlight are 2D canvases around it. Frames are drawn on demand: the only\n// animation loop is the optional auto rotation (paused off-screen, while\n// hovered and with prefers-reduced-motion).\n\nimport { luminance, parseColor, toCss, type Rgba } from \"../color\";\nimport { resolveLocale } from \"../locale\";\nimport { tickStep } from \"../scale\";\nimport {\n readTheme,\n themeColorsChanged,\n watchTheme,\n type ChartTheme,\n} from \"../theme\";\nimport type { ChartRendererKind } from \"../types\";\nimport { colorLut, colorStops, type ColorLut } from \"./colormap\";\nimport { createRenderer3D } from \"./detect\";\nimport {\n createChart3DDom,\n layerCanvas,\n sizeCanvas,\n style,\n swatch,\n} from \"./dom\";\nimport {\n CPU_BUDGET,\n GPU_BUDGET,\n createGeometryBuilder,\n type Geometry,\n type GeometryColors,\n} from \"./geometry\";\nimport { highlightShape, hoverEvent, tooltipRows } from \"./hover\";\nimport { fill } from \"./labels\";\nimport {\n DEFAULT_CAMERA,\n cameraFrame,\n clampCamera,\n normalize,\n type CameraFrame,\n type FitRect,\n type Vec3,\n} from \"./math\";\nimport { buildModel, type Model3D } from \"./model\";\nimport {\n drawAxes,\n drawColorBar,\n drawHighlight,\n drawWalls,\n overlayStyle,\n type HighlightShape,\n type OverlayStyle,\n} from \"./overlay\";\nimport { createPicker, type PickHit } from \"./pick\";\nimport type { Frame3D, Renderer3D } from \"./render-types\";\nimport { createDepthSorter } from \"./sort\";\nimport type {\n Chart3DCameraOptions,\n Chart3DCameraState,\n Chart3DEventMap,\n Chart3DHoverEvent,\n Chart3DInstance,\n Chart3DInteractionOptions,\n Chart3DOptions,\n} from \"./types\";\n\n/** Zoom factor of a wheel event (same feel as the 2D charts) */\nconst wheelFactor = (deltaY: number, deltaMode: number, pinch: boolean) => {\n const pixels =\n deltaMode === 1 ? deltaY * 16 : deltaMode === 2 ? deltaY * 400 : deltaY;\n const speed = pinch ? 0.01 : 0.0025;\n return Math.exp(Math.max(-1, Math.min(1, pixels * speed)));\n};\n\nconst DEFAULT_LIGHTING = {\n ambient: 0.5,\n diffuse: 0.6,\n specular: 0.25,\n shininess: 32,\n};\n\nconst ROTATE_SPEED = 12;\nconst DRAG_DEGREES = 0.45;\nconst KEY_DEGREES = 5;\nconst TWEEN_MS = 380;\n\n/** Camera of the options (also the one restored by a reset) */\nexport const initialCamera = (\n camera: Chart3DCameraOptions | undefined,\n): Chart3DCameraState =>\n clampCamera({\n azimuth: camera?.azimuth ?? DEFAULT_CAMERA.azimuth,\n elevation: camera?.elevation ?? DEFAULT_CAMERA.elevation,\n zoom: camera?.zoom ?? DEFAULT_CAMERA.zoom,\n pan: [0, 0],\n projection: camera?.projection ?? DEFAULT_CAMERA.projection,\n });\n\nconst copyCamera = (c: Chart3DCameraState): Chart3DCameraState => ({\n ...c,\n pan: [c.pan[0], c.pan[1]],\n});\n\nconst sameCamera = (a: Chart3DCameraState, b: Chart3DCameraState) =>\n a.azimuth === b.azimuth &&\n a.elevation === b.elevation &&\n a.zoom === b.zoom &&\n a.pan[0] === b.pan[0] &&\n a.pan[1] === b.pan[1] &&\n a.projection === b.projection;\n\n/** Interpolated camera (shortest way around for the azimuth) */\nconst lerpCamera = (\n a: Chart3DCameraState,\n b: Chart3DCameraState,\n t: number,\n): Chart3DCameraState => {\n let da = (b.azimuth - a.azimuth) % 360;\n if (da > 180) da -= 360;\n if (da < -180) da += 360;\n return clampCamera({\n azimuth: a.azimuth + da * t,\n elevation: a.elevation + (b.elevation - a.elevation) * t,\n zoom: a.zoom * Math.pow(b.zoom / a.zoom, t),\n pan: [\n a.pan[0] + (b.pan[0] - a.pan[0]) * t,\n a.pan[1] + (b.pan[1] - a.pan[1]) * t,\n ],\n projection: t < 0.5 ? a.projection : b.projection,\n });\n};\n\n/** Layout of the stage: area the box is fitted into and the color bar */\nexport const stageLayout = (\n width: number,\n height: number,\n colorBar: boolean,\n): {\n fit: FitRect;\n bar: { x: number; y: number; w: number; h: number } | null;\n} => {\n const side = Math.max(30, Math.min(72, width * 0.08));\n const top = Math.max(14, Math.min(28, height * 0.05));\n const bottom = Math.max(30, Math.min(56, height * 0.1));\n const barSpace = colorBar ? 74 : 0;\n const fit: FitRect = {\n x: side,\n y: top,\n width: Math.max(10, width - side * 2 - barSpace),\n height: Math.max(10, height - top - bottom),\n };\n if (!colorBar) return { fit, bar: null };\n const h = Math.max(40, Math.min(260, height * 0.62));\n return {\n fit,\n bar: { x: width - 66, y: (height - h) / 2 + 8, w: 12, h },\n };\n};\n\nexport const createChart3D = (\n container: HTMLElement,\n initialOptions: Chart3DOptions,\n): Chart3DInstance => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n const dom = createChart3DDom(container);\n const stage = dom.stage;\n let options = initialOptions;\n let theme: ChartTheme = readTheme(dom.root, options.palette);\n let themeVersion = 0;\n let destroyed = false;\n\n const listeners = new Map<keyof Chart3DEventMap, Set<(e: never) => void>>();\n const emit = <K extends keyof Chart3DEventMap>(\n type: K,\n event: Chart3DEventMap[K],\n ) => {\n listeners\n .get(type)\n ?.forEach((fn) => (fn as (e: Chart3DEventMap[K]) => void)(event));\n };\n\n // ------------------------------------------------------------- state\n\n /** Series whose visibility the legend flipped (ids) */\n const toggled = new Set<string>();\n let model: Model3D = buildModel(options);\n let colors: GeometryColors;\n let lut: ColorLut;\n let lutKey = \"\";\n let lutId = 0;\n const buildGeometry = createGeometryBuilder();\n let geometry: Geometry = { items: [], targets: [], counts: [] };\n let geometryDirty = true;\n const picker = createPicker();\n const sortTransparent = createDepthSorter();\n\n let renderer: Renderer3D | null = null;\n let rendererToken = 0;\n let resolveReady: (kind: ChartRendererKind | null) => void = () => {};\n const ready = new Promise<ChartRendererKind | null>((resolve) => {\n resolveReady = resolve;\n });\n\n let homeCamera = initialCamera(options.camera);\n let cameraKey = JSON.stringify(options.camera ?? {});\n let camera = copyCamera(homeCamera);\n let tween: {\n from: Chart3DCameraState;\n to: Chart3DCameraState;\n start: number;\n } | null = null;\n\n let frameId = 0;\n let dataDirty = true;\n let lastFrame: CameraFrame | null = null;\n let lastLayout: ReturnType<typeof stageLayout> | null = null;\n let overlay: OverlayStyle = overlayStyle(theme, isDark(theme));\n\n let hoverHit: PickHit | null = null;\n let hoverEvt: Chart3DHoverEvent | null = null;\n let pendingHover: { x: number; y: number } | null = null;\n let lastPointer: { x: number; y: number } | null = null;\n let pointerInside = false;\n let visible = true;\n let lastRotate = 0;\n\n const reducedMotion =\n typeof win?.matchMedia === \"function\"\n ? win.matchMedia(\"(prefers-reduced-motion: reduce)\")\n : null;\n\n // ------------------------------------------------------------ options\n\n const interaction = (): Required<Chart3DInteractionOptions> | null => {\n const o = options.interaction;\n if (o === false) return null;\n const c = typeof o === \"object\" ? o : {};\n return {\n rotate: c.rotate ?? true,\n zoom: c.zoom ?? true,\n wheel: c.wheel ?? \"modifier\",\n pan: c.pan ?? true,\n keyboard: c.keyboard ?? true,\n };\n };\n\n const rotateSpeed = () => {\n const a = options.autoRotate;\n if (a === true) return ROTATE_SPEED;\n return typeof a === \"number\" && Number.isFinite(a) ? a : 0;\n };\n\n const showsColorBar = () => {\n const o = options.colorBar;\n if (o === false) return false;\n return !!model.colorDomain;\n };\n\n const effectiveOptions = (): Chart3DOptions => ({\n ...options,\n series: options.series.map((s, i) => {\n const id = s.id ?? String(i);\n return toggled.has(id) ? { ...s, hidden: !s.hidden } : s;\n }),\n });\n\n const resolveColor = (value: string): Rgba =>\n theme.resolve\n ? theme.resolve(value, [0.5, 0.5, 0.5, 1])\n : (parseColor(value) ?? [0.5, 0.5, 0.5, 1]);\n\n const refreshColors = () => {\n const key = `${JSON.stringify(options.colorScale ?? \"viridis\")}|${themeVersion}`;\n if (key !== lutKey || !lut) {\n lutKey = key;\n lut = colorLut(\n colorStops(options.colorScale, (c, f) =>\n theme.resolve ? theme.resolve(c, f) : (parseColor(c) ?? f),\n ),\n );\n lutId++;\n }\n const palette = theme.palette.length ? theme.palette : [theme.primary];\n colors = {\n series: model.series.map((m, i) =>\n m.color\n ? resolveColor(m.color)\n : (palette[i % palette.length] ?? theme.primary),\n ),\n resolve: resolveColor,\n lut,\n wire: [theme.text[0], theme.text[1], theme.text[2], 0.38],\n };\n };\n\n const rebuild = () => {\n model = buildModel(effectiveOptions());\n refreshColors();\n geometryDirty = true;\n overlay = overlayStyle(theme, isDark(theme));\n renderLegend();\n updateAccessibility();\n invalidate(true);\n // the hovered item may have moved (live data): pick it again after the frame\n if (hoverHit && lastPointer) scheduleHover(lastPointer.x, lastPointer.y);\n };\n\n // ------------------------------------------------------------- legend\n\n let legendKey = \"\";\n const renderLegend = () => {\n const o = options.legend;\n const named = model.series.filter((s) => s.name).length;\n const show = o === undefined ? named > 1 : !!o;\n const config = typeof o === \"object\" ? o : {};\n const toggle = config.toggle ?? true;\n const bottom = config.position === \"bottom\";\n let key = `${show}|${bottom}|${toggle}`;\n if (show) {\n model.series.forEach((s, i) => {\n key += `\\n${s.id}\\u0001${s.name}\\u0001${toCss(colors.series[i] ?? theme.primary)}\\u0001${s.hidden}`;\n });\n }\n if (key === legendKey) return;\n legendKey = key;\n const focused = [...dom.legend.children].indexOf(\n doc.activeElement as Element,\n );\n dom.legend.replaceChildren();\n dom.legend.style.display = show ? \"flex\" : \"none\";\n if (!show) return;\n dom.legend.style.order = bottom ? \"1\" : \"0\";\n dom.legend.style.padding = bottom ? \"8px 4px 0\" : \"0 4px 8px\";\n model.series.forEach((s, i) => {\n if (!s.name) return;\n const item = doc.createElement(toggle ? \"button\" : \"span\");\n if (item instanceof HTMLButtonElement) {\n item.type = \"button\";\n item.setAttribute(\"aria-pressed\", String(!s.hidden));\n item.addEventListener(\"click\", () => {\n if (toggled.has(s.id)) toggled.delete(s.id);\n else toggled.add(s.id);\n const { labels } = model.locale;\n dom.live.textContent = fill(s.hidden ? labels.shown : labels.hidden, {\n name: s.name,\n });\n rebuild();\n });\n }\n style(item, {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"2px 4px\",\n margin: \"0\",\n border: \"0\",\n borderRadius: \"4px\",\n background: \"none\",\n font: \"inherit\",\n color: \"var(--text-secondary-color, #6b7280)\",\n cursor: toggle ? \"pointer\" : \"default\",\n opacity: s.hidden ? \"0.45\" : \"1\",\n textDecoration: s.hidden ? \"line-through\" : \"none\",\n });\n item.append(\n swatch(\n doc,\n toCss(colors.series[i] ?? theme.primary),\n s.type !== \"bar\" && s.type !== \"surface\",\n ),\n doc.createTextNode(s.name),\n );\n dom.legend.appendChild(item);\n });\n if (focused >= 0)\n (dom.legend.children[focused] as HTMLElement | undefined)?.focus();\n };\n\n // ------------------------------------------------------ accessibility\n\n const updateAccessibility = () => {\n const { labels, count } = model.locale;\n const names = model.series\n .map((s) => s.name)\n .filter(Boolean)\n .join(labels.listSeparator);\n stage.setAttribute(\"aria-roledescription\", labels.chart);\n stage.setAttribute(\n \"aria-label\",\n options.ariaLabel ??\n (names ? fill(labels.chartNamed, { names }) : labels.chart),\n );\n const keyboard = interaction()?.keyboard;\n if (keyboard) stage.tabIndex = 0;\n else stage.removeAttribute(\"tabindex\");\n stage.style.cursor = interaction()?.rotate ? \"grab\" : \"default\";\n const lines: string[] = [];\n lines.push(fill(labels.seriesCount, { count: count(model.series.length) }));\n for (const m of model.series) {\n const name = m.name || fill(labels.series, { n: m.index + 1 });\n const size =\n m.type === \"surface\"\n ? fill(labels.grid, {\n rows: count(m.grid.rows),\n cols: count(m.grid.cols),\n })\n : m.type === \"bar\"\n ? fill(labels.bars, { count: count(m.bars.count) })\n : fill(m.type === \"line\" ? labels.vertices : labels.points, {\n count: count(m.cols.count),\n });\n lines.push(\n fill(m.hidden ? labels.seriesSummaryHidden : labels.seriesSummary, {\n name,\n type: labels[m.type],\n size,\n }),\n );\n }\n for (const key of [\"x\", \"y\", \"z\"] as const) {\n const axis = model[key];\n const range = axis.categories\n ? axis.categories.join(labels.listSeparator)\n : fill(labels.range, {\n min: axis.format(axis.domain[0]),\n max: axis.format(axis.domain[1]),\n });\n lines.push(\n fill(axis.title ? labels.axisTitled : labels.axis, {\n axis: key.toUpperCase(),\n title: axis.title,\n range,\n }),\n );\n }\n dom.summary.textContent = lines.join(\" \");\n };\n\n // -------------------------------------------------------------- frame\n\n function invalidate(data = true) {\n if (data) dataDirty = true;\n if (destroyed || frameId || !win) return;\n frameId = win.requestAnimationFrame(frame);\n }\n\n const rotating = () =>\n rotateSpeed() !== 0 &&\n visible &&\n !pointerInside &&\n !drag &&\n !tween &&\n !reducedMotion?.matches &&\n !(doc.visibilityState === \"hidden\");\n\n const lightDirection = (f: CameraFrame): Vec3 => {\n // a headlight from the upper left, slightly raised towards the sky\n const v: Vec3 = [0, 0, 0];\n for (let i = 0; i < 3; i++) {\n v[i] = -f.right[i]! * 0.35 + f.up[i]! * 0.55 - f.forward[i]! * 0.7;\n }\n v[2] += 0.35;\n return normalize(v);\n };\n\n function frame(time: number) {\n frameId = 0;\n if (destroyed) return;\n const width = stage.clientWidth;\n const height = stage.clientHeight;\n if (width <= 0 || height <= 0) return;\n const dpr = win?.devicePixelRatio || 1;\n // camera animations\n if (tween) {\n const t = Math.min(1, (time - tween.start) / TWEEN_MS);\n const eased = 1 - Math.pow(1 - t, 3);\n camera = lerpCamera(tween.from, tween.to, eased);\n if (t >= 1) {\n camera = copyCamera(tween.to);\n tween = null;\n emit(\"camera\", copyCamera(camera));\n }\n dataDirty = true;\n } else if (rotating()) {\n const dt = lastRotate ? Math.min(0.1, (time - lastRotate) / 1000) : 0;\n if (dt > 0) {\n camera = clampCamera({\n ...camera,\n azimuth: camera.azimuth - rotateSpeed() * dt,\n });\n dataDirty = true;\n }\n lastRotate = time;\n } else {\n lastRotate = 0;\n }\n\n sizeCanvas(dom.background, width, height, dpr);\n sizeCanvas(dom.foreground, width, height, dpr);\n const layout = stageLayout(width, height, showsColorBar());\n const fov = options.camera?.fov ?? 32;\n const half: Vec3 = [model.x.half, model.y.half, model.z.half];\n const f = cameraFrame(camera, half, width, height, layout.fit, fov);\n lastFrame = f;\n lastLayout = layout;\n\n if (dataDirty) {\n dataDirty = false;\n const bg = dom.background.getContext(\"2d\");\n if (bg) {\n bg.setTransform(dpr, 0, 0, dpr, 0, 0);\n bg.clearRect(0, 0, width, height);\n if (options.box !== false) drawWalls(bg, f, model, overlay);\n }\n if (renderer) {\n if (geometryDirty) {\n geometry = buildGeometry(\n model,\n colors,\n renderer.kind === \"canvas2d\" ? CPU_BUDGET : GPU_BUDGET,\n lutId,\n );\n geometryDirty = false;\n picker.reset();\n }\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (renderer.canvas.width !== w || renderer.canvas.height !== h)\n renderer.resize(w, h);\n renderer.canvas.style.width = `${width}px`;\n renderer.canvas.style.height = `${height}px`;\n const l = options.lighting ?? {};\n const frame3d: Frame3D = {\n viewProj: f.viewProj,\n eye: f.eye,\n light: lightDirection(f),\n orthographic: f.orthographic,\n distance: f.distance,\n radius: f.radius,\n width: w,\n height: h,\n dpr,\n lighting: [\n l.ambient ?? DEFAULT_LIGHTING.ambient,\n l.diffuse ?? DEFAULT_LIGHTING.diffuse,\n l.specular ?? DEFAULT_LIGHTING.specular,\n l.shininess ?? DEFAULT_LIGHTING.shininess,\n ],\n fog: theme.background,\n };\n renderer.render(\n renderer.kind === \"canvas2d\"\n ? geometry.items\n : sortTransparent(geometry.items, frame3d),\n frame3d,\n );\n }\n }\n drawForeground(f, layout, width, height, dpr);\n if (tween || rotating()) invalidate(true);\n }\n\n const drawForeground = (\n f: CameraFrame,\n layout: ReturnType<typeof stageLayout>,\n width: number,\n height: number,\n dpr: number,\n ) => {\n const fg = dom.foreground.getContext(\"2d\");\n if (!fg) return;\n fg.setTransform(dpr, 0, 0, dpr, 0, 0);\n fg.clearRect(0, 0, width, height);\n if (options.box !== false) {\n drawAxes(fg, f, model, overlay, {\n left: 4,\n top: 4,\n right: layout.bar ? layout.bar.x - 10 : width - 4,\n bottom: height - 4,\n });\n }\n if (layout.bar && model.colorDomain) {\n const o = typeof options.colorBar === \"object\" ? options.colorBar : {};\n drawColorBar(\n fg,\n layout.bar,\n lut,\n model.colorDomain,\n o.format ?? colorBarFormat(),\n o.title ?? (model.colorFromZ ? model.z.title : \"\"),\n overlay,\n width,\n );\n }\n if (hoverHit && hoverEvt) {\n const shape: HighlightShape | null = highlightShape(\n geometry.targets,\n hoverHit,\n hoverEvt.color,\n );\n if (shape) drawHighlight(fg, f, model, shape, overlay);\n }\n };\n\n const colorBarFormat = () => {\n const d = model.colorDomain;\n const { locale } = model;\n if (!d) return locale.value;\n if (model.colorFromZ && options.zAxis?.format) return options.zAxis.format;\n const step = tickStep(d[0], d[1], 5);\n return step > 0\n ? locale.ticks(step, Math.max(Math.abs(d[0]), Math.abs(d[1])))\n : locale.value;\n };\n\n // -------------------------------------------------------------- hover\n\n const tooltipEnabled = () => options.tooltip !== false;\n\n const stageOffset = () => ({ x: stage.offsetLeft, y: stage.offsetTop });\n\n const setHover = (hit: PickHit | null) => {\n const event =\n hit && !geometryDirty\n ? hoverEvent(model, geometry.targets, hit, colors, stageOffset())\n : null;\n const changed =\n (event === null) !== (hoverEvt === null) ||\n (!!event &&\n !!hoverEvt &&\n (event.seriesIndex !== hoverEvt.seriesIndex ||\n event.index !== hoverEvt.index ||\n event.type !== hoverEvt.type));\n hoverHit = event ? hit : null;\n hoverEvt = event;\n renderTooltip();\n if (lastFrame && lastLayout) {\n const width = stage.clientWidth;\n const height = stage.clientHeight;\n if (width > 0 && height > 0)\n drawForeground(\n lastFrame,\n lastLayout,\n width,\n height,\n win?.devicePixelRatio || 1,\n );\n }\n if (changed) emit(\"hover\", event);\n };\n\n const renderTooltip = () => {\n const tip = dom.tooltip;\n if (!hoverEvt || !hoverHit || !tooltipEnabled()) {\n tip.style.display = \"none\";\n return;\n }\n const custom =\n typeof options.tooltip === \"object\" ? options.tooltip.render : undefined;\n const content = custom ? custom(hoverEvt) : defaultTooltip(hoverEvt);\n if (content === null) {\n tip.style.display = \"none\";\n return;\n }\n if (typeof content === \"string\") tip.textContent = content;\n else tip.replaceChildren(content);\n tip.style.display = \"block\";\n const width = stage.clientWidth;\n const height = stage.clientHeight;\n const tw = tip.offsetWidth;\n const th = tip.offsetHeight;\n let x = hoverHit.x + 16;\n if (x + tw > width - 4) x = hoverHit.x - 16 - tw;\n x = Math.max(4, x);\n const y = Math.max(4, Math.min(height - th - 4, hoverHit.y - th / 2));\n tip.style.transform = `translate(${Math.round(x)}px, ${Math.round(y)}px)`;\n };\n\n const defaultTooltip = (event: Chart3DHoverEvent): Node => {\n const fragment = doc.createDocumentFragment();\n const header = style(doc.createElement(\"div\"), {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n fontWeight: \"600\",\n marginBottom: \"4px\",\n color: \"var(--text-color, #1f2937)\",\n });\n header.append(\n swatch(doc, event.color, event.type !== \"bar\"),\n doc.createTextNode(\n event.seriesName ||\n fill(model.locale.labels.series, { n: event.seriesIndex + 1 }),\n ),\n );\n fragment.append(header);\n const valueName =\n typeof options.colorBar === \"object\" && options.colorBar.title\n ? options.colorBar.title\n : \"\";\n for (const row of tooltipRows(model, event, valueName)) {\n const el = style(doc.createElement(\"div\"), {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n });\n const n = style(doc.createElement(\"span\"), {\n flex: \"1 1 auto\",\n color: \"var(--text-secondary-color, #6b7280)\",\n });\n n.textContent = row.name;\n const v = style(doc.createElement(\"span\"), {\n fontWeight: row.name ? \"600\" : \"400\",\n fontVariantNumeric: \"tabular-nums\",\n marginLeft: row.name ? \"12px\" : \"0\",\n });\n v.textContent = row.value;\n if (row.name) el.append(n, v);\n else el.append(v);\n fragment.append(el);\n }\n return fragment;\n };\n\n const pickAt = (x: number, y: number): PickHit | null => {\n if (!lastFrame || geometryDirty || !renderer) return null;\n return picker.pick(geometry.targets, lastFrame, x, y);\n };\n\n let hoverFrame = 0;\n const scheduleHover = (x: number, y: number) => {\n pendingHover = { x, y };\n if (hoverFrame || !win) return;\n hoverFrame = win.requestAnimationFrame(() => {\n hoverFrame = 0;\n const p = pendingHover;\n pendingHover = null;\n if (!p || destroyed || drag) return;\n setHover(pickAt(p.x, p.y));\n });\n };\n\n // -------------------------------------------------------- interaction\n\n interface DragState {\n mode: \"rotate\" | \"pan\" | \"pinch\";\n pointers: Map<number, { x: number; y: number }>;\n start: Chart3DCameraState;\n origin: { x: number; y: number };\n distance: number;\n moved: boolean;\n }\n let drag: DragState | null = null;\n const pointers = new Map<number, { x: number; y: number }>();\n\n const local = (e: { clientX: number; clientY: number }) => {\n const r = stage.getBoundingClientRect();\n return { x: e.clientX - r.left, y: e.clientY - r.top };\n };\n\n const fitHeight = () =>\n lastLayout?.fit.height ?? Math.max(1, stage.clientHeight);\n\n const setCameraInternal = (next: Chart3DCameraState, notify = true) => {\n const clamped = clampCamera(next);\n if (sameCamera(clamped, camera)) return;\n camera = clamped;\n tween = null;\n if (hoverHit) setHover(null);\n invalidate(true);\n if (notify) emit(\"camera\", copyCamera(camera));\n };\n\n const animateTo = (target: Chart3DCameraState) => {\n if (reducedMotion?.matches || !win) {\n setCameraInternal(target);\n return;\n }\n tween = {\n from: copyCamera(camera),\n to: copyCamera(target),\n start: win.performance.now(),\n };\n invalidate(true);\n };\n\n const pinchInfo = () => {\n const pts = [...pointers.values()];\n const a = pts[0] ?? { x: 0, y: 0 };\n const b = pts[1] ?? a;\n return {\n distance: Math.hypot(a.x - b.x, a.y - b.y),\n center: { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 },\n };\n };\n\n const startDrag = (\n mode: DragState[\"mode\"],\n origin: { x: number; y: number },\n ) => {\n drag = {\n mode,\n pointers,\n start: copyCamera(camera),\n origin,\n distance: mode === \"pinch\" ? pinchInfo().distance : 0,\n moved: false,\n };\n tween = null;\n if (hoverHit) setHover(null);\n stage.style.cursor = mode === \"rotate\" ? \"grabbing\" : \"move\";\n };\n\n const onPointerDown = (e: PointerEvent) => {\n const ia = interaction();\n if (!ia) return;\n const p = local(e);\n pointers.set(e.pointerId, p);\n stage.setPointerCapture?.(e.pointerId);\n if (pointers.size === 2 && (ia.zoom || ia.pan)) {\n startDrag(\"pinch\", pinchInfo().center);\n return;\n }\n if (pointers.size > 1) return;\n const pan = ia.pan && (e.button === 2 || e.shiftKey || e.button === 1);\n if (pan) startDrag(\"pan\", p);\n else if (ia.rotate && e.button === 0) startDrag(\"rotate\", p);\n else drag = null;\n if (pan || e.button === 1) e.preventDefault();\n };\n\n const onPointerMove = (e: PointerEvent) => {\n const p = local(e);\n lastPointer = p;\n if (pointers.has(e.pointerId)) pointers.set(e.pointerId, p);\n if (!drag) {\n if (e.pointerType === \"touch\" && pointers.size) return;\n if (\n tooltipEnabled() ||\n listeners.get(\"hover\")?.size ||\n listeners.get(\"click\")?.size\n )\n scheduleHover(p.x, p.y);\n return;\n }\n const ia = interaction();\n if (!ia) return;\n if (drag.mode === \"pinch\") {\n const { distance, center } = pinchInfo();\n const scale = drag.distance > 0 ? distance / drag.distance : 1;\n const h = fitHeight();\n setCameraInternal({\n ...drag.start,\n zoom: ia.zoom ? drag.start.zoom * scale : drag.start.zoom,\n pan: ia.pan\n ? [\n drag.start.pan[0] + (center.x - drag.origin.x) / h,\n drag.start.pan[1] + (center.y - drag.origin.y) / h,\n ]\n : drag.start.pan,\n });\n drag.moved = true;\n return;\n }\n const dx = p.x - drag.origin.x;\n const dy = p.y - drag.origin.y;\n if (!drag.moved && Math.hypot(dx, dy) < 3) return;\n drag.moved = true;\n if (drag.mode === \"pan\") {\n const h = fitHeight();\n setCameraInternal({\n ...drag.start,\n pan: [drag.start.pan[0] + dx / h, drag.start.pan[1] + dy / h],\n });\n } else {\n setCameraInternal({\n ...drag.start,\n azimuth: drag.start.azimuth - dx * DRAG_DEGREES,\n elevation: drag.start.elevation + dy * DRAG_DEGREES,\n });\n }\n };\n\n const onPointerUp = (e: PointerEvent) => {\n const wasDrag = drag;\n pointers.delete(e.pointerId);\n if (stage.hasPointerCapture?.(e.pointerId))\n stage.releasePointerCapture(e.pointerId);\n if (pointers.size === 1 && wasDrag?.mode === \"pinch\") {\n // continue with the remaining finger as a rotation\n const rest = [...pointers.values()][0]!;\n startDrag(\"rotate\", rest);\n return;\n }\n if (pointers.size) return;\n drag = null;\n stage.style.cursor = interaction()?.rotate ? \"grab\" : \"default\";\n if (wasDrag && !wasDrag.moved && e.button === 0) {\n const p = local(e);\n const hit = pickAt(p.x, p.y);\n setHover(hit);\n if (hoverEvt) emit(\"click\", hoverEvt);\n }\n if (rotating()) invalidate(false);\n };\n\n const onPointerCancel = (e: PointerEvent) => {\n pointers.delete(e.pointerId);\n if (!pointers.size) {\n drag = null;\n stage.style.cursor = interaction()?.rotate ? \"grab\" : \"default\";\n }\n };\n\n const onPointerEnter = (e: PointerEvent) => {\n if (e.pointerType !== \"touch\") pointerInside = true;\n };\n\n const onPointerLeave = () => {\n pointerInside = false;\n pendingHover = null;\n lastPointer = null;\n if (!drag && hoverHit) setHover(null);\n if (rotating()) invalidate(false);\n };\n\n const onWheel = (e: WheelEvent) => {\n const ia = interaction();\n if (!ia?.zoom) return;\n const pinch = e.ctrlKey && !e.metaKey;\n if (ia.wheel === \"modifier\" && !e.ctrlKey && !e.metaKey) return;\n e.preventDefault();\n const factor = wheelFactor(e.deltaY, e.deltaMode, pinch);\n const zoom = camera.zoom / factor;\n // keep the point under the pointer in place\n const layout = lastLayout;\n if (!layout) {\n setCameraInternal({ ...camera, zoom });\n return;\n }\n const clamped = clampCamera({ ...camera, zoom });\n const ratio = clamped.zoom / camera.zoom;\n const h = layout.fit.height;\n const cx = layout.fit.x + layout.fit.width / 2 + camera.pan[0] * h;\n const cy = layout.fit.y + layout.fit.height / 2 + camera.pan[1] * h;\n const m = local(e);\n const nx = m.x - ratio * (m.x - cx);\n const ny = m.y - ratio * (m.y - cy);\n setCameraInternal({\n ...clamped,\n pan: [camera.pan[0] + (nx - cx) / h, camera.pan[1] + (ny - cy) / h],\n });\n if (hoverHit) setHover(null);\n };\n\n const onDoubleClick = (e: MouseEvent) => {\n if (!interaction()) return;\n e.preventDefault();\n animateTo(homeCamera);\n };\n\n const onContextMenu = (e: MouseEvent) => {\n if (interaction()?.pan) e.preventDefault();\n };\n\n // a focus ring for keyboard users only\n const onFocus = () => {\n let keyboard: boolean;\n try {\n keyboard = stage.matches(\":focus-visible\");\n } catch {\n keyboard = true;\n }\n if (keyboard)\n stage.style.boxShadow = \"0 0 0 2px var(--primary-color, #4f46e5)\";\n };\n\n const onBlur = () => {\n stage.style.boxShadow = \"\";\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const ia = interaction();\n if (!ia?.keyboard) return;\n let next: Chart3DCameraState | null = null;\n const step = e.shiftKey ? KEY_DEGREES * 3 : KEY_DEGREES;\n switch (e.key) {\n case \"ArrowLeft\":\n if (ia.rotate) next = { ...camera, azimuth: camera.azimuth + step };\n break;\n case \"ArrowRight\":\n if (ia.rotate) next = { ...camera, azimuth: camera.azimuth - step };\n break;\n case \"ArrowUp\":\n if (ia.rotate) next = { ...camera, elevation: camera.elevation + step };\n break;\n case \"ArrowDown\":\n if (ia.rotate) next = { ...camera, elevation: camera.elevation - step };\n break;\n case \"+\":\n case \"=\":\n if (ia.zoom) next = { ...camera, zoom: camera.zoom * 1.2 };\n break;\n case \"-\":\n case \"_\":\n if (ia.zoom) next = { ...camera, zoom: camera.zoom / 1.2 };\n break;\n case \"0\":\n case \"Home\":\n e.preventDefault();\n animateTo(homeCamera);\n return;\n case \"Escape\":\n lastPointer = null;\n if (hoverHit) {\n e.preventDefault();\n setHover(null);\n }\n return;\n default:\n return;\n }\n if (!next) return;\n e.preventDefault();\n setCameraInternal(next);\n };\n\n stage.addEventListener(\"pointerdown\", onPointerDown);\n stage.addEventListener(\"pointermove\", onPointerMove);\n stage.addEventListener(\"pointerup\", onPointerUp);\n stage.addEventListener(\"pointercancel\", onPointerCancel);\n stage.addEventListener(\"pointerenter\", onPointerEnter);\n stage.addEventListener(\"pointerleave\", onPointerLeave);\n stage.addEventListener(\"wheel\", onWheel, { passive: false });\n stage.addEventListener(\"dblclick\", onDoubleClick);\n stage.addEventListener(\"contextmenu\", onContextMenu);\n stage.addEventListener(\"keydown\", onKeyDown);\n stage.addEventListener(\"focus\", onFocus);\n stage.addEventListener(\"blur\", onBlur);\n\n // ----------------------------------------------------------- watchers\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => {\n picker.reset();\n invalidate(true);\n })\n : null;\n resizeObserver?.observe(stage);\n\n const intersection =\n typeof IntersectionObserver === \"function\"\n ? new IntersectionObserver((entries) => {\n const entry = entries[entries.length - 1];\n if (!entry) return;\n const was = visible;\n visible = entry.isIntersecting;\n if (visible && !was) invalidate(true);\n })\n : null;\n intersection?.observe(stage);\n\n const onVisibility = () => {\n if (doc.visibilityState !== \"hidden\") invalidate(false);\n };\n doc.addEventListener(\"visibilitychange\", onVisibility);\n\n // device pixel ratio changes (zoom, moving to another screen)\n let dprQuery: MediaQueryList | null = null;\n const onDprChange = () => {\n watchDpr();\n invalidate(true);\n };\n const watchDpr = () => {\n dprQuery?.removeEventListener?.(\"change\", onDprChange);\n dprQuery =\n typeof win?.matchMedia === \"function\"\n ? win.matchMedia(`(resolution: ${win.devicePixelRatio || 1}dppx)`)\n : null;\n dprQuery?.addEventListener?.(\"change\", onDprChange);\n };\n watchDpr();\n\n const onMotionChange = () => invalidate(false);\n reducedMotion?.addEventListener?.(\"change\", onMotionChange);\n\n const refreshTheme = () => {\n if (destroyed) return;\n const next = readTheme(dom.root, options.palette);\n if (themeColorsChanged(theme, next)) themeVersion++;\n theme = next;\n rebuild();\n };\n const unwatchTheme = watchTheme(refreshTheme);\n\n // texts follow the page language when no `locale` is set\n const langObserver =\n typeof win?.MutationObserver === \"function\"\n ? new win.MutationObserver(() => {\n if (\n !destroyed &&\n resolveLocale(options.locale) !== model.locale.locale\n )\n rebuild();\n })\n : null;\n langObserver?.observe(doc.documentElement, {\n attributes: true,\n attributeFilter: [\"lang\"],\n });\n\n // ----------------------------------------------------------- renderer\n\n const initRenderer = async (exclude: Set<ChartRendererKind> = new Set()) => {\n const token = ++rendererToken;\n const next = await createRenderer3D(\n options.renderer ?? \"auto\",\n () => {\n const canvas = layerCanvas(doc);\n canvas.className = \"minerva-chart-data\";\n return canvas;\n },\n (kind) => {\n if (destroyed || renderer?.kind !== kind) return;\n renderer.destroy();\n renderer.canvas.remove();\n renderer = null;\n void initRenderer(new Set([...exclude, kind]));\n },\n exclude,\n );\n if (destroyed || token !== rendererToken) {\n next?.destroy();\n return;\n }\n if (renderer) {\n renderer.destroy();\n renderer.canvas.remove();\n }\n renderer = next;\n geometryDirty = true;\n if (next) {\n dom.root.dataset.renderer = next.kind;\n stage.insertBefore(next.canvas, dom.foreground);\n emit(\"renderer\", next.kind);\n } else {\n delete dom.root.dataset.renderer;\n }\n resolveReady(next?.kind ?? null);\n invalidate(true);\n };\n\n refreshColors();\n rebuild();\n void initRenderer();\n\n // ---------------------------------------------------------------- api\n\n const instance: Chart3DInstance = {\n setOptions(next) {\n if (destroyed) return;\n const previous = options;\n options = next;\n if ((next.palette ?? []).join() !== (previous.palette ?? []).join()) {\n theme = readTheme(dom.root, next.palette);\n themeVersion++;\n }\n const key = JSON.stringify(next.camera ?? {});\n if (key !== cameraKey) {\n cameraKey = key;\n homeCamera = initialCamera(next.camera);\n setCameraInternal({ ...homeCamera });\n }\n if ((next.renderer ?? \"auto\") !== (previous.renderer ?? \"auto\"))\n void initRenderer();\n rebuild();\n },\n resize() {\n picker.reset();\n invalidate(true);\n },\n resetCamera() {\n setCameraInternal(copyCamera(homeCamera));\n },\n getCamera: () => copyCamera(camera),\n setCamera(next) {\n if (destroyed) return;\n setCameraInternal({\n azimuth: next.azimuth ?? camera.azimuth,\n elevation: next.elevation ?? camera.elevation,\n zoom: next.zoom ?? camera.zoom,\n pan: next.pan ? [next.pan[0], next.pan[1]] : camera.pan,\n projection: next.projection ?? camera.projection,\n });\n },\n getRenderer: () => renderer?.kind ?? null,\n ready,\n refreshTheme,\n on(type, listener) {\n let set = listeners.get(type);\n if (!set) {\n set = new Set();\n listeners.set(type, set);\n }\n set.add(listener as (e: never) => void);\n return () => {\n set.delete(listener as (e: never) => void);\n };\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n rendererToken++;\n if (frameId) win?.cancelAnimationFrame(frameId);\n if (hoverFrame) win?.cancelAnimationFrame(hoverFrame);\n frameId = 0;\n hoverFrame = 0;\n resizeObserver?.disconnect();\n intersection?.disconnect();\n doc.removeEventListener(\"visibilitychange\", onVisibility);\n dprQuery?.removeEventListener?.(\"change\", onDprChange);\n reducedMotion?.removeEventListener?.(\"change\", onMotionChange);\n unwatchTheme();\n langObserver?.disconnect();\n stage.removeEventListener(\"pointerdown\", onPointerDown);\n stage.removeEventListener(\"pointermove\", onPointerMove);\n stage.removeEventListener(\"pointerup\", onPointerUp);\n stage.removeEventListener(\"pointercancel\", onPointerCancel);\n stage.removeEventListener(\"pointerenter\", onPointerEnter);\n stage.removeEventListener(\"pointerleave\", onPointerLeave);\n stage.removeEventListener(\"wheel\", onWheel);\n stage.removeEventListener(\"dblclick\", onDoubleClick);\n stage.removeEventListener(\"contextmenu\", onContextMenu);\n stage.removeEventListener(\"keydown\", onKeyDown);\n stage.removeEventListener(\"focus\", onFocus);\n stage.removeEventListener(\"blur\", onBlur);\n renderer?.destroy();\n renderer = null;\n listeners.clear();\n resolveReady(null);\n dom.root.remove();\n },\n };\n return instance;\n};\n\nfunction isDark(theme: ChartTheme): boolean {\n return luminance(theme.background) < 0.4 || luminance(theme.text) > 0.6;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"chart.js","names":["wheelFactor","pixels","deltaMode","deltaY","pinch","DEFAULT_LIGHTING","ROTATE_SPEED","DRAG_DEGREES","KEY_DEGREES","TWEEN_MS","initialCamera","clampCamera","camera","DEFAULT_CAMERA","copyCamera","c","sameCamera","a","b","lerpCamera","da","t","stageLayout","side","width","top","height","bottom","barSpace","colorBar","fit","h","createChart3D","doc","container","win","dom","createChart3DDom","stage","options","initialOptions","theme","readTheme","themeVersion","destroyed","listeners","emit","type","fn","event","toggled","model","buildModel","colors","lut","lutKey","lutId","buildGeometry","createGeometryBuilder","geometry","geometryDirty","picker","createPicker","sortTransparent","createDepthSorter","renderer","rendererToken","resolveReady","ready","resolve","homeCamera","cameraKey","tween","frameId","dataDirty","lastFrame","lastLayout","overlay","overlayStyle","isDark","hoverHit","hoverEvt","pendingHover","lastPointer","pointerInside","visible","lastRotate","reducedMotion","interaction","o","rotateSpeed","showsColorBar","effectiveOptions","id","s","i","resolveColor","value","parseColor","refreshColors","key","colorLut","colorStops","f","palette","m","rebuild","renderLegend","updateAccessibility","invalidate","scheduleHover","legendKey","named","show","config","toggle","toCss","focused","item","fill","labels","style","swatch","names","lines","count","name","size","axis","range","data","frame","rotating","drag","lightDirection","v","normalize","dpr","time","eased","dt","sizeCanvas","layout","fov","half","cameraFrame","bg","drawWalls","CPU_BUDGET","GPU_BUDGET","w","l","frame3d","drawForeground","fg","drawAxes","colorBarFormat","shape","highlightShape","drawHighlight","d","locale","step","tickStep","tooltipEnabled","stageOffset","setHover","hit","hoverEvent","changed","renderTooltip","tip","custom","content","defaultTooltip","tw","th","x","y","fragment","header","valueName","row","tooltipRows","el","n","pickAt","hoverFrame","p","pointers","local","r","fitHeight","setCameraInternal","clamped","next","notify","animateTo","target","pinchInfo","pts","startDrag","mode","onPointerDown","ia","pan","onPointerMove","scale","distance","center","dx","dy","onPointerUp","wasDrag","rest","onPointerCancel","onPointerEnter","onPointerLeave","onWheel","factor","zoom","ratio","cx","cy","nx","ny","onDoubleClick","onContextMenu","onFocus","keyboard","onBlur","onKeyDown","resizeObserver","intersection","entry","entries","was","onVisibility","dprQuery","onDprChange","watchDpr","onMotionChange","refreshTheme","themeColorsChanged","unwatchTheme","watchTheme","langObserver","resolveLocale","initRenderer","token","createRenderer3D","canvas","layerCanvas","kind","exclude","unfollowDefault","followDefaultRenderer","previous","set","listener","luminance"],"sources":["../../../../../charts/src/engine/three-d/chart.ts"],"sourcesContent":["// createChart3D: 3D scatter / surface / bar / line charts. The data layer\n// is drawn by a GPU backend (WebGPU -> WebGL2 -> WebGL) or by Canvas2D (CPU\n// projection, painter's algorithm); walls, labels, color bar and hover\n// highlight are 2D canvases around it. Frames are drawn on demand: the only\n// animation loop is the optional auto rotation (paused off-screen, while\n// hovered and with prefers-reduced-motion).\n\nimport { luminance, parseColor, toCss, type Rgba } from \"../color\";\nimport { resolveLocale } from \"../locale\";\nimport { followDefaultRenderer } from \"../renderers/follow\";\nimport { tickStep } from \"../scale\";\nimport {\n readTheme,\n themeColorsChanged,\n watchTheme,\n type ChartTheme,\n} from \"../theme\";\nimport type { ChartRendererKind } from \"../types\";\nimport { colorLut, colorStops, type ColorLut } from \"./colormap\";\nimport { createRenderer3D } from \"./detect\";\nimport {\n createChart3DDom,\n layerCanvas,\n sizeCanvas,\n style,\n swatch,\n} from \"./dom\";\nimport {\n CPU_BUDGET,\n GPU_BUDGET,\n createGeometryBuilder,\n type Geometry,\n type GeometryColors,\n} from \"./geometry\";\nimport { highlightShape, hoverEvent, tooltipRows } from \"./hover\";\nimport { fill } from \"./labels\";\nimport {\n DEFAULT_CAMERA,\n cameraFrame,\n clampCamera,\n normalize,\n type CameraFrame,\n type FitRect,\n type Vec3,\n} from \"./math\";\nimport { buildModel, type Model3D } from \"./model\";\nimport {\n drawAxes,\n drawColorBar,\n drawHighlight,\n drawWalls,\n overlayStyle,\n type HighlightShape,\n type OverlayStyle,\n} from \"./overlay\";\nimport { createPicker, type PickHit } from \"./pick\";\nimport type { Frame3D, Renderer3D } from \"./render-types\";\nimport { createDepthSorter } from \"./sort\";\nimport type {\n Chart3DCameraOptions,\n Chart3DCameraState,\n Chart3DEventMap,\n Chart3DHoverEvent,\n Chart3DInstance,\n Chart3DInteractionOptions,\n Chart3DOptions,\n} from \"./types\";\n\n/** Zoom factor of a wheel event (same feel as the 2D charts) */\nconst wheelFactor = (deltaY: number, deltaMode: number, pinch: boolean) => {\n const pixels =\n deltaMode === 1 ? deltaY * 16 : deltaMode === 2 ? deltaY * 400 : deltaY;\n const speed = pinch ? 0.01 : 0.0025;\n return Math.exp(Math.max(-1, Math.min(1, pixels * speed)));\n};\n\nconst DEFAULT_LIGHTING = {\n ambient: 0.5,\n diffuse: 0.6,\n specular: 0.25,\n shininess: 32,\n};\n\nconst ROTATE_SPEED = 12;\nconst DRAG_DEGREES = 0.45;\nconst KEY_DEGREES = 5;\nconst TWEEN_MS = 380;\n\n/** Camera of the options (also the one restored by a reset) */\nexport const initialCamera = (\n camera: Chart3DCameraOptions | undefined,\n): Chart3DCameraState =>\n clampCamera({\n azimuth: camera?.azimuth ?? DEFAULT_CAMERA.azimuth,\n elevation: camera?.elevation ?? DEFAULT_CAMERA.elevation,\n zoom: camera?.zoom ?? DEFAULT_CAMERA.zoom,\n pan: [0, 0],\n projection: camera?.projection ?? DEFAULT_CAMERA.projection,\n });\n\nconst copyCamera = (c: Chart3DCameraState): Chart3DCameraState => ({\n ...c,\n pan: [c.pan[0], c.pan[1]],\n});\n\nconst sameCamera = (a: Chart3DCameraState, b: Chart3DCameraState) =>\n a.azimuth === b.azimuth &&\n a.elevation === b.elevation &&\n a.zoom === b.zoom &&\n a.pan[0] === b.pan[0] &&\n a.pan[1] === b.pan[1] &&\n a.projection === b.projection;\n\n/** Interpolated camera (shortest way around for the azimuth) */\nconst lerpCamera = (\n a: Chart3DCameraState,\n b: Chart3DCameraState,\n t: number,\n): Chart3DCameraState => {\n let da = (b.azimuth - a.azimuth) % 360;\n if (da > 180) da -= 360;\n if (da < -180) da += 360;\n return clampCamera({\n azimuth: a.azimuth + da * t,\n elevation: a.elevation + (b.elevation - a.elevation) * t,\n zoom: a.zoom * Math.pow(b.zoom / a.zoom, t),\n pan: [\n a.pan[0] + (b.pan[0] - a.pan[0]) * t,\n a.pan[1] + (b.pan[1] - a.pan[1]) * t,\n ],\n projection: t < 0.5 ? a.projection : b.projection,\n });\n};\n\n/** Layout of the stage: area the box is fitted into and the color bar */\nexport const stageLayout = (\n width: number,\n height: number,\n colorBar: boolean,\n): {\n fit: FitRect;\n bar: { x: number; y: number; w: number; h: number } | null;\n} => {\n const side = Math.max(30, Math.min(72, width * 0.08));\n const top = Math.max(14, Math.min(28, height * 0.05));\n const bottom = Math.max(30, Math.min(56, height * 0.1));\n const barSpace = colorBar ? 74 : 0;\n const fit: FitRect = {\n x: side,\n y: top,\n width: Math.max(10, width - side * 2 - barSpace),\n height: Math.max(10, height - top - bottom),\n };\n if (!colorBar) return { fit, bar: null };\n const h = Math.max(40, Math.min(260, height * 0.62));\n return {\n fit,\n bar: { x: width - 66, y: (height - h) / 2 + 8, w: 12, h },\n };\n};\n\nexport const createChart3D = (\n container: HTMLElement,\n initialOptions: Chart3DOptions,\n): Chart3DInstance => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n const dom = createChart3DDom(container);\n const stage = dom.stage;\n let options = initialOptions;\n let theme: ChartTheme = readTheme(dom.root, options.palette);\n let themeVersion = 0;\n let destroyed = false;\n\n const listeners = new Map<keyof Chart3DEventMap, Set<(e: never) => void>>();\n const emit = <K extends keyof Chart3DEventMap>(\n type: K,\n event: Chart3DEventMap[K],\n ) => {\n listeners\n .get(type)\n ?.forEach((fn) => (fn as (e: Chart3DEventMap[K]) => void)(event));\n };\n\n // ------------------------------------------------------------- state\n\n /** Series whose visibility the legend flipped (ids) */\n const toggled = new Set<string>();\n let model: Model3D = buildModel(options);\n let colors: GeometryColors;\n let lut: ColorLut;\n let lutKey = \"\";\n let lutId = 0;\n const buildGeometry = createGeometryBuilder();\n let geometry: Geometry = { items: [], targets: [], counts: [] };\n let geometryDirty = true;\n const picker = createPicker();\n const sortTransparent = createDepthSorter();\n\n let renderer: Renderer3D | null = null;\n let rendererToken = 0;\n let resolveReady: (kind: ChartRendererKind | null) => void = () => {};\n const ready = new Promise<ChartRendererKind | null>((resolve) => {\n resolveReady = resolve;\n });\n\n let homeCamera = initialCamera(options.camera);\n let cameraKey = JSON.stringify(options.camera ?? {});\n let camera = copyCamera(homeCamera);\n let tween: {\n from: Chart3DCameraState;\n to: Chart3DCameraState;\n start: number;\n } | null = null;\n\n let frameId = 0;\n let dataDirty = true;\n let lastFrame: CameraFrame | null = null;\n let lastLayout: ReturnType<typeof stageLayout> | null = null;\n let overlay: OverlayStyle = overlayStyle(theme, isDark(theme));\n\n let hoverHit: PickHit | null = null;\n let hoverEvt: Chart3DHoverEvent | null = null;\n let pendingHover: { x: number; y: number } | null = null;\n let lastPointer: { x: number; y: number } | null = null;\n let pointerInside = false;\n let visible = true;\n let lastRotate = 0;\n\n const reducedMotion =\n typeof win?.matchMedia === \"function\"\n ? win.matchMedia(\"(prefers-reduced-motion: reduce)\")\n : null;\n\n // ------------------------------------------------------------ options\n\n const interaction = (): Required<Chart3DInteractionOptions> | null => {\n const o = options.interaction;\n if (o === false) return null;\n const c = typeof o === \"object\" ? o : {};\n return {\n rotate: c.rotate ?? true,\n zoom: c.zoom ?? true,\n wheel: c.wheel ?? \"modifier\",\n pan: c.pan ?? true,\n keyboard: c.keyboard ?? true,\n };\n };\n\n const rotateSpeed = () => {\n const a = options.autoRotate;\n if (a === true) return ROTATE_SPEED;\n return typeof a === \"number\" && Number.isFinite(a) ? a : 0;\n };\n\n const showsColorBar = () => {\n const o = options.colorBar;\n if (o === false) return false;\n return !!model.colorDomain;\n };\n\n const effectiveOptions = (): Chart3DOptions => ({\n ...options,\n series: options.series.map((s, i) => {\n const id = s.id ?? String(i);\n return toggled.has(id) ? { ...s, hidden: !s.hidden } : s;\n }),\n });\n\n const resolveColor = (value: string): Rgba =>\n theme.resolve\n ? theme.resolve(value, [0.5, 0.5, 0.5, 1])\n : (parseColor(value) ?? [0.5, 0.5, 0.5, 1]);\n\n const refreshColors = () => {\n const key = `${JSON.stringify(options.colorScale ?? \"viridis\")}|${themeVersion}`;\n if (key !== lutKey || !lut) {\n lutKey = key;\n lut = colorLut(\n colorStops(options.colorScale, (c, f) =>\n theme.resolve ? theme.resolve(c, f) : (parseColor(c) ?? f),\n ),\n );\n lutId++;\n }\n const palette = theme.palette.length ? theme.palette : [theme.primary];\n colors = {\n series: model.series.map((m, i) =>\n m.color\n ? resolveColor(m.color)\n : (palette[i % palette.length] ?? theme.primary),\n ),\n resolve: resolveColor,\n lut,\n wire: [theme.text[0], theme.text[1], theme.text[2], 0.38],\n };\n };\n\n const rebuild = () => {\n model = buildModel(effectiveOptions());\n refreshColors();\n geometryDirty = true;\n overlay = overlayStyle(theme, isDark(theme));\n renderLegend();\n updateAccessibility();\n invalidate(true);\n // the hovered item may have moved (live data): pick it again after the frame\n if (hoverHit && lastPointer) scheduleHover(lastPointer.x, lastPointer.y);\n };\n\n // ------------------------------------------------------------- legend\n\n let legendKey = \"\";\n const renderLegend = () => {\n const o = options.legend;\n const named = model.series.filter((s) => s.name).length;\n const show = o === undefined ? named > 1 : !!o;\n const config = typeof o === \"object\" ? o : {};\n const toggle = config.toggle ?? true;\n const bottom = config.position === \"bottom\";\n let key = `${show}|${bottom}|${toggle}`;\n if (show) {\n model.series.forEach((s, i) => {\n key += `\\n${s.id}\\u0001${s.name}\\u0001${toCss(colors.series[i] ?? theme.primary)}\\u0001${s.hidden}`;\n });\n }\n if (key === legendKey) return;\n legendKey = key;\n const focused = [...dom.legend.children].indexOf(\n doc.activeElement as Element,\n );\n dom.legend.replaceChildren();\n dom.legend.style.display = show ? \"flex\" : \"none\";\n if (!show) return;\n dom.legend.style.order = bottom ? \"1\" : \"0\";\n dom.legend.style.padding = bottom ? \"8px 4px 0\" : \"0 4px 8px\";\n model.series.forEach((s, i) => {\n if (!s.name) return;\n const item = doc.createElement(toggle ? \"button\" : \"span\");\n if (item instanceof HTMLButtonElement) {\n item.type = \"button\";\n item.setAttribute(\"aria-pressed\", String(!s.hidden));\n item.addEventListener(\"click\", () => {\n if (toggled.has(s.id)) toggled.delete(s.id);\n else toggled.add(s.id);\n const { labels } = model.locale;\n dom.live.textContent = fill(s.hidden ? labels.shown : labels.hidden, {\n name: s.name,\n });\n rebuild();\n });\n }\n style(item, {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"2px 4px\",\n margin: \"0\",\n border: \"0\",\n borderRadius: \"4px\",\n background: \"none\",\n font: \"inherit\",\n color: \"var(--text-secondary-color, #6b7280)\",\n cursor: toggle ? \"pointer\" : \"default\",\n opacity: s.hidden ? \"0.45\" : \"1\",\n textDecoration: s.hidden ? \"line-through\" : \"none\",\n });\n item.append(\n swatch(\n doc,\n toCss(colors.series[i] ?? theme.primary),\n s.type !== \"bar\" && s.type !== \"surface\",\n ),\n doc.createTextNode(s.name),\n );\n dom.legend.appendChild(item);\n });\n if (focused >= 0)\n (dom.legend.children[focused] as HTMLElement | undefined)?.focus();\n };\n\n // ------------------------------------------------------ accessibility\n\n const updateAccessibility = () => {\n const { labels, count } = model.locale;\n const names = model.series\n .map((s) => s.name)\n .filter(Boolean)\n .join(labels.listSeparator);\n stage.setAttribute(\"aria-roledescription\", labels.chart);\n stage.setAttribute(\n \"aria-label\",\n options.ariaLabel ??\n (names ? fill(labels.chartNamed, { names }) : labels.chart),\n );\n const keyboard = interaction()?.keyboard;\n if (keyboard) stage.tabIndex = 0;\n else stage.removeAttribute(\"tabindex\");\n stage.style.cursor = interaction()?.rotate ? \"grab\" : \"default\";\n const lines: string[] = [];\n lines.push(fill(labels.seriesCount, { count: count(model.series.length) }));\n for (const m of model.series) {\n const name = m.name || fill(labels.series, { n: m.index + 1 });\n const size =\n m.type === \"surface\"\n ? fill(labels.grid, {\n rows: count(m.grid.rows),\n cols: count(m.grid.cols),\n })\n : m.type === \"bar\"\n ? fill(labels.bars, { count: count(m.bars.count) })\n : fill(m.type === \"line\" ? labels.vertices : labels.points, {\n count: count(m.cols.count),\n });\n lines.push(\n fill(m.hidden ? labels.seriesSummaryHidden : labels.seriesSummary, {\n name,\n type: labels[m.type],\n size,\n }),\n );\n }\n for (const key of [\"x\", \"y\", \"z\"] as const) {\n const axis = model[key];\n const range = axis.categories\n ? axis.categories.join(labels.listSeparator)\n : fill(labels.range, {\n min: axis.format(axis.domain[0]),\n max: axis.format(axis.domain[1]),\n });\n lines.push(\n fill(axis.title ? labels.axisTitled : labels.axis, {\n axis: key.toUpperCase(),\n title: axis.title,\n range,\n }),\n );\n }\n dom.summary.textContent = lines.join(\" \");\n };\n\n // -------------------------------------------------------------- frame\n\n function invalidate(data = true) {\n if (data) dataDirty = true;\n if (destroyed || frameId || !win) return;\n frameId = win.requestAnimationFrame(frame);\n }\n\n const rotating = () =>\n rotateSpeed() !== 0 &&\n visible &&\n !pointerInside &&\n !drag &&\n !tween &&\n !reducedMotion?.matches &&\n !(doc.visibilityState === \"hidden\");\n\n const lightDirection = (f: CameraFrame): Vec3 => {\n // a headlight from the upper left, slightly raised towards the sky\n const v: Vec3 = [0, 0, 0];\n for (let i = 0; i < 3; i++) {\n v[i] = -f.right[i]! * 0.35 + f.up[i]! * 0.55 - f.forward[i]! * 0.7;\n }\n v[2] += 0.35;\n return normalize(v);\n };\n\n function frame(time: number) {\n frameId = 0;\n if (destroyed) return;\n const width = stage.clientWidth;\n const height = stage.clientHeight;\n if (width <= 0 || height <= 0) return;\n const dpr = win?.devicePixelRatio || 1;\n // camera animations\n if (tween) {\n const t = Math.min(1, (time - tween.start) / TWEEN_MS);\n const eased = 1 - Math.pow(1 - t, 3);\n camera = lerpCamera(tween.from, tween.to, eased);\n if (t >= 1) {\n camera = copyCamera(tween.to);\n tween = null;\n emit(\"camera\", copyCamera(camera));\n }\n dataDirty = true;\n } else if (rotating()) {\n const dt = lastRotate ? Math.min(0.1, (time - lastRotate) / 1000) : 0;\n if (dt > 0) {\n camera = clampCamera({\n ...camera,\n azimuth: camera.azimuth - rotateSpeed() * dt,\n });\n dataDirty = true;\n }\n lastRotate = time;\n } else {\n lastRotate = 0;\n }\n\n sizeCanvas(dom.background, width, height, dpr);\n sizeCanvas(dom.foreground, width, height, dpr);\n const layout = stageLayout(width, height, showsColorBar());\n const fov = options.camera?.fov ?? 32;\n const half: Vec3 = [model.x.half, model.y.half, model.z.half];\n const f = cameraFrame(camera, half, width, height, layout.fit, fov);\n lastFrame = f;\n lastLayout = layout;\n\n if (dataDirty) {\n dataDirty = false;\n const bg = dom.background.getContext(\"2d\");\n if (bg) {\n bg.setTransform(dpr, 0, 0, dpr, 0, 0);\n bg.clearRect(0, 0, width, height);\n if (options.box !== false) drawWalls(bg, f, model, overlay);\n }\n if (renderer) {\n if (geometryDirty) {\n geometry = buildGeometry(\n model,\n colors,\n renderer.kind === \"canvas2d\" ? CPU_BUDGET : GPU_BUDGET,\n lutId,\n );\n geometryDirty = false;\n picker.reset();\n }\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (renderer.canvas.width !== w || renderer.canvas.height !== h)\n renderer.resize(w, h);\n renderer.canvas.style.width = `${width}px`;\n renderer.canvas.style.height = `${height}px`;\n const l = options.lighting ?? {};\n const frame3d: Frame3D = {\n viewProj: f.viewProj,\n eye: f.eye,\n light: lightDirection(f),\n orthographic: f.orthographic,\n distance: f.distance,\n radius: f.radius,\n width: w,\n height: h,\n dpr,\n lighting: [\n l.ambient ?? DEFAULT_LIGHTING.ambient,\n l.diffuse ?? DEFAULT_LIGHTING.diffuse,\n l.specular ?? DEFAULT_LIGHTING.specular,\n l.shininess ?? DEFAULT_LIGHTING.shininess,\n ],\n fog: theme.background,\n exposure: Math.max(0, options.exposure ?? 1),\n };\n renderer.render(\n renderer.kind === \"canvas2d\" || renderer.orderIndependent\n ? geometry.items\n : sortTransparent(geometry.items, frame3d),\n frame3d,\n );\n }\n }\n drawForeground(f, layout, width, height, dpr);\n if (tween || rotating()) invalidate(true);\n }\n\n const drawForeground = (\n f: CameraFrame,\n layout: ReturnType<typeof stageLayout>,\n width: number,\n height: number,\n dpr: number,\n ) => {\n const fg = dom.foreground.getContext(\"2d\");\n if (!fg) return;\n fg.setTransform(dpr, 0, 0, dpr, 0, 0);\n fg.clearRect(0, 0, width, height);\n if (options.box !== false) {\n drawAxes(fg, f, model, overlay, {\n left: 4,\n top: 4,\n right: layout.bar ? layout.bar.x - 10 : width - 4,\n bottom: height - 4,\n });\n }\n if (layout.bar && model.colorDomain) {\n const o = typeof options.colorBar === \"object\" ? options.colorBar : {};\n drawColorBar(\n fg,\n layout.bar,\n lut,\n model.colorDomain,\n o.format ?? colorBarFormat(),\n o.title ?? (model.colorFromZ ? model.z.title : \"\"),\n overlay,\n width,\n );\n }\n if (hoverHit && hoverEvt) {\n const shape: HighlightShape | null = highlightShape(\n geometry.targets,\n hoverHit,\n hoverEvt.color,\n );\n if (shape) drawHighlight(fg, f, model, shape, overlay);\n }\n };\n\n const colorBarFormat = () => {\n const d = model.colorDomain;\n const { locale } = model;\n if (!d) return locale.value;\n if (model.colorFromZ && options.zAxis?.format) return options.zAxis.format;\n const step = tickStep(d[0], d[1], 5);\n return step > 0\n ? locale.ticks(step, Math.max(Math.abs(d[0]), Math.abs(d[1])))\n : locale.value;\n };\n\n // -------------------------------------------------------------- hover\n\n const tooltipEnabled = () => options.tooltip !== false;\n\n const stageOffset = () => ({ x: stage.offsetLeft, y: stage.offsetTop });\n\n const setHover = (hit: PickHit | null) => {\n const event =\n hit && !geometryDirty\n ? hoverEvent(model, geometry.targets, hit, colors, stageOffset())\n : null;\n const changed =\n (event === null) !== (hoverEvt === null) ||\n (!!event &&\n !!hoverEvt &&\n (event.seriesIndex !== hoverEvt.seriesIndex ||\n event.index !== hoverEvt.index ||\n event.type !== hoverEvt.type));\n hoverHit = event ? hit : null;\n hoverEvt = event;\n renderTooltip();\n if (lastFrame && lastLayout) {\n const width = stage.clientWidth;\n const height = stage.clientHeight;\n if (width > 0 && height > 0)\n drawForeground(\n lastFrame,\n lastLayout,\n width,\n height,\n win?.devicePixelRatio || 1,\n );\n }\n if (changed) emit(\"hover\", event);\n };\n\n const renderTooltip = () => {\n const tip = dom.tooltip;\n if (!hoverEvt || !hoverHit || !tooltipEnabled()) {\n tip.style.display = \"none\";\n return;\n }\n const custom =\n typeof options.tooltip === \"object\" ? options.tooltip.render : undefined;\n const content = custom ? custom(hoverEvt) : defaultTooltip(hoverEvt);\n if (content === null) {\n tip.style.display = \"none\";\n return;\n }\n if (typeof content === \"string\") tip.textContent = content;\n else tip.replaceChildren(content);\n tip.style.display = \"block\";\n const width = stage.clientWidth;\n const height = stage.clientHeight;\n const tw = tip.offsetWidth;\n const th = tip.offsetHeight;\n let x = hoverHit.x + 16;\n if (x + tw > width - 4) x = hoverHit.x - 16 - tw;\n x = Math.max(4, x);\n const y = Math.max(4, Math.min(height - th - 4, hoverHit.y - th / 2));\n tip.style.transform = `translate(${Math.round(x)}px, ${Math.round(y)}px)`;\n };\n\n const defaultTooltip = (event: Chart3DHoverEvent): Node => {\n const fragment = doc.createDocumentFragment();\n const header = style(doc.createElement(\"div\"), {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n fontWeight: \"600\",\n marginBottom: \"4px\",\n color: \"var(--text-color, #1f2937)\",\n });\n header.append(\n swatch(doc, event.color, event.type !== \"bar\"),\n doc.createTextNode(\n event.seriesName ||\n fill(model.locale.labels.series, { n: event.seriesIndex + 1 }),\n ),\n );\n fragment.append(header);\n const valueName =\n typeof options.colorBar === \"object\" && options.colorBar.title\n ? options.colorBar.title\n : \"\";\n for (const row of tooltipRows(model, event, valueName)) {\n const el = style(doc.createElement(\"div\"), {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n });\n const n = style(doc.createElement(\"span\"), {\n flex: \"1 1 auto\",\n color: \"var(--text-secondary-color, #6b7280)\",\n });\n n.textContent = row.name;\n const v = style(doc.createElement(\"span\"), {\n fontWeight: row.name ? \"600\" : \"400\",\n fontVariantNumeric: \"tabular-nums\",\n marginLeft: row.name ? \"12px\" : \"0\",\n });\n v.textContent = row.value;\n if (row.name) el.append(n, v);\n else el.append(v);\n fragment.append(el);\n }\n return fragment;\n };\n\n const pickAt = (x: number, y: number): PickHit | null => {\n if (!lastFrame || geometryDirty || !renderer) return null;\n return picker.pick(geometry.targets, lastFrame, x, y);\n };\n\n let hoverFrame = 0;\n const scheduleHover = (x: number, y: number) => {\n pendingHover = { x, y };\n if (hoverFrame || !win) return;\n hoverFrame = win.requestAnimationFrame(() => {\n hoverFrame = 0;\n const p = pendingHover;\n pendingHover = null;\n if (!p || destroyed || drag) return;\n setHover(pickAt(p.x, p.y));\n });\n };\n\n // -------------------------------------------------------- interaction\n\n interface DragState {\n mode: \"rotate\" | \"pan\" | \"pinch\";\n pointers: Map<number, { x: number; y: number }>;\n start: Chart3DCameraState;\n origin: { x: number; y: number };\n distance: number;\n moved: boolean;\n }\n let drag: DragState | null = null;\n const pointers = new Map<number, { x: number; y: number }>();\n\n const local = (e: { clientX: number; clientY: number }) => {\n const r = stage.getBoundingClientRect();\n return { x: e.clientX - r.left, y: e.clientY - r.top };\n };\n\n const fitHeight = () =>\n lastLayout?.fit.height ?? Math.max(1, stage.clientHeight);\n\n const setCameraInternal = (next: Chart3DCameraState, notify = true) => {\n const clamped = clampCamera(next);\n if (sameCamera(clamped, camera)) return;\n camera = clamped;\n tween = null;\n if (hoverHit) setHover(null);\n invalidate(true);\n if (notify) emit(\"camera\", copyCamera(camera));\n };\n\n const animateTo = (target: Chart3DCameraState) => {\n if (reducedMotion?.matches || !win) {\n setCameraInternal(target);\n return;\n }\n tween = {\n from: copyCamera(camera),\n to: copyCamera(target),\n start: win.performance.now(),\n };\n invalidate(true);\n };\n\n const pinchInfo = () => {\n const pts = [...pointers.values()];\n const a = pts[0] ?? { x: 0, y: 0 };\n const b = pts[1] ?? a;\n return {\n distance: Math.hypot(a.x - b.x, a.y - b.y),\n center: { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 },\n };\n };\n\n const startDrag = (\n mode: DragState[\"mode\"],\n origin: { x: number; y: number },\n ) => {\n drag = {\n mode,\n pointers,\n start: copyCamera(camera),\n origin,\n distance: mode === \"pinch\" ? pinchInfo().distance : 0,\n moved: false,\n };\n tween = null;\n if (hoverHit) setHover(null);\n stage.style.cursor = mode === \"rotate\" ? \"grabbing\" : \"move\";\n };\n\n const onPointerDown = (e: PointerEvent) => {\n const ia = interaction();\n if (!ia) return;\n const p = local(e);\n pointers.set(e.pointerId, p);\n stage.setPointerCapture?.(e.pointerId);\n if (pointers.size === 2 && (ia.zoom || ia.pan)) {\n startDrag(\"pinch\", pinchInfo().center);\n return;\n }\n if (pointers.size > 1) return;\n const pan = ia.pan && (e.button === 2 || e.shiftKey || e.button === 1);\n if (pan) startDrag(\"pan\", p);\n else if (ia.rotate && e.button === 0) startDrag(\"rotate\", p);\n else drag = null;\n if (pan || e.button === 1) e.preventDefault();\n };\n\n const onPointerMove = (e: PointerEvent) => {\n const p = local(e);\n lastPointer = p;\n if (pointers.has(e.pointerId)) pointers.set(e.pointerId, p);\n if (!drag) {\n if (e.pointerType === \"touch\" && pointers.size) return;\n if (\n tooltipEnabled() ||\n listeners.get(\"hover\")?.size ||\n listeners.get(\"click\")?.size\n )\n scheduleHover(p.x, p.y);\n return;\n }\n const ia = interaction();\n if (!ia) return;\n if (drag.mode === \"pinch\") {\n const { distance, center } = pinchInfo();\n const scale = drag.distance > 0 ? distance / drag.distance : 1;\n const h = fitHeight();\n setCameraInternal({\n ...drag.start,\n zoom: ia.zoom ? drag.start.zoom * scale : drag.start.zoom,\n pan: ia.pan\n ? [\n drag.start.pan[0] + (center.x - drag.origin.x) / h,\n drag.start.pan[1] + (center.y - drag.origin.y) / h,\n ]\n : drag.start.pan,\n });\n drag.moved = true;\n return;\n }\n const dx = p.x - drag.origin.x;\n const dy = p.y - drag.origin.y;\n if (!drag.moved && Math.hypot(dx, dy) < 3) return;\n drag.moved = true;\n if (drag.mode === \"pan\") {\n const h = fitHeight();\n setCameraInternal({\n ...drag.start,\n pan: [drag.start.pan[0] + dx / h, drag.start.pan[1] + dy / h],\n });\n } else {\n setCameraInternal({\n ...drag.start,\n azimuth: drag.start.azimuth - dx * DRAG_DEGREES,\n elevation: drag.start.elevation + dy * DRAG_DEGREES,\n });\n }\n };\n\n const onPointerUp = (e: PointerEvent) => {\n const wasDrag = drag;\n pointers.delete(e.pointerId);\n if (stage.hasPointerCapture?.(e.pointerId))\n stage.releasePointerCapture(e.pointerId);\n if (pointers.size === 1 && wasDrag?.mode === \"pinch\") {\n // continue with the remaining finger as a rotation\n const rest = [...pointers.values()][0]!;\n startDrag(\"rotate\", rest);\n return;\n }\n if (pointers.size) return;\n drag = null;\n stage.style.cursor = interaction()?.rotate ? \"grab\" : \"default\";\n if (wasDrag && !wasDrag.moved && e.button === 0) {\n const p = local(e);\n const hit = pickAt(p.x, p.y);\n setHover(hit);\n if (hoverEvt) emit(\"click\", hoverEvt);\n }\n if (rotating()) invalidate(false);\n };\n\n const onPointerCancel = (e: PointerEvent) => {\n pointers.delete(e.pointerId);\n if (!pointers.size) {\n drag = null;\n stage.style.cursor = interaction()?.rotate ? \"grab\" : \"default\";\n }\n };\n\n const onPointerEnter = (e: PointerEvent) => {\n if (e.pointerType !== \"touch\") pointerInside = true;\n };\n\n const onPointerLeave = () => {\n pointerInside = false;\n pendingHover = null;\n lastPointer = null;\n if (!drag && hoverHit) setHover(null);\n if (rotating()) invalidate(false);\n };\n\n const onWheel = (e: WheelEvent) => {\n const ia = interaction();\n if (!ia?.zoom) return;\n const pinch = e.ctrlKey && !e.metaKey;\n if (ia.wheel === \"modifier\" && !e.ctrlKey && !e.metaKey) return;\n e.preventDefault();\n const factor = wheelFactor(e.deltaY, e.deltaMode, pinch);\n const zoom = camera.zoom / factor;\n // keep the point under the pointer in place\n const layout = lastLayout;\n if (!layout) {\n setCameraInternal({ ...camera, zoom });\n return;\n }\n const clamped = clampCamera({ ...camera, zoom });\n const ratio = clamped.zoom / camera.zoom;\n const h = layout.fit.height;\n const cx = layout.fit.x + layout.fit.width / 2 + camera.pan[0] * h;\n const cy = layout.fit.y + layout.fit.height / 2 + camera.pan[1] * h;\n const m = local(e);\n const nx = m.x - ratio * (m.x - cx);\n const ny = m.y - ratio * (m.y - cy);\n setCameraInternal({\n ...clamped,\n pan: [camera.pan[0] + (nx - cx) / h, camera.pan[1] + (ny - cy) / h],\n });\n if (hoverHit) setHover(null);\n };\n\n const onDoubleClick = (e: MouseEvent) => {\n if (!interaction()) return;\n e.preventDefault();\n animateTo(homeCamera);\n };\n\n const onContextMenu = (e: MouseEvent) => {\n if (interaction()?.pan) e.preventDefault();\n };\n\n // a focus ring for keyboard users only\n const onFocus = () => {\n let keyboard: boolean;\n try {\n keyboard = stage.matches(\":focus-visible\");\n } catch {\n keyboard = true;\n }\n if (keyboard)\n stage.style.boxShadow = \"0 0 0 2px var(--primary-color, #4f46e5)\";\n };\n\n const onBlur = () => {\n stage.style.boxShadow = \"\";\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const ia = interaction();\n if (!ia?.keyboard) return;\n let next: Chart3DCameraState | null = null;\n const step = e.shiftKey ? KEY_DEGREES * 3 : KEY_DEGREES;\n switch (e.key) {\n case \"ArrowLeft\":\n if (ia.rotate) next = { ...camera, azimuth: camera.azimuth + step };\n break;\n case \"ArrowRight\":\n if (ia.rotate) next = { ...camera, azimuth: camera.azimuth - step };\n break;\n case \"ArrowUp\":\n if (ia.rotate) next = { ...camera, elevation: camera.elevation + step };\n break;\n case \"ArrowDown\":\n if (ia.rotate) next = { ...camera, elevation: camera.elevation - step };\n break;\n case \"+\":\n case \"=\":\n if (ia.zoom) next = { ...camera, zoom: camera.zoom * 1.2 };\n break;\n case \"-\":\n case \"_\":\n if (ia.zoom) next = { ...camera, zoom: camera.zoom / 1.2 };\n break;\n case \"0\":\n case \"Home\":\n e.preventDefault();\n animateTo(homeCamera);\n return;\n case \"Escape\":\n lastPointer = null;\n if (hoverHit) {\n e.preventDefault();\n setHover(null);\n }\n return;\n default:\n return;\n }\n if (!next) return;\n e.preventDefault();\n setCameraInternal(next);\n };\n\n stage.addEventListener(\"pointerdown\", onPointerDown);\n stage.addEventListener(\"pointermove\", onPointerMove);\n stage.addEventListener(\"pointerup\", onPointerUp);\n stage.addEventListener(\"pointercancel\", onPointerCancel);\n stage.addEventListener(\"pointerenter\", onPointerEnter);\n stage.addEventListener(\"pointerleave\", onPointerLeave);\n stage.addEventListener(\"wheel\", onWheel, { passive: false });\n stage.addEventListener(\"dblclick\", onDoubleClick);\n stage.addEventListener(\"contextmenu\", onContextMenu);\n stage.addEventListener(\"keydown\", onKeyDown);\n stage.addEventListener(\"focus\", onFocus);\n stage.addEventListener(\"blur\", onBlur);\n\n // ----------------------------------------------------------- watchers\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => {\n picker.reset();\n invalidate(true);\n })\n : null;\n resizeObserver?.observe(stage);\n\n const intersection =\n typeof IntersectionObserver === \"function\"\n ? new IntersectionObserver((entries) => {\n const entry = entries[entries.length - 1];\n if (!entry) return;\n const was = visible;\n visible = entry.isIntersecting;\n if (visible && !was) invalidate(true);\n })\n : null;\n intersection?.observe(stage);\n\n const onVisibility = () => {\n if (doc.visibilityState !== \"hidden\") invalidate(false);\n };\n doc.addEventListener(\"visibilitychange\", onVisibility);\n\n // device pixel ratio changes (zoom, moving to another screen)\n let dprQuery: MediaQueryList | null = null;\n const onDprChange = () => {\n watchDpr();\n invalidate(true);\n };\n const watchDpr = () => {\n dprQuery?.removeEventListener?.(\"change\", onDprChange);\n dprQuery =\n typeof win?.matchMedia === \"function\"\n ? win.matchMedia(`(resolution: ${win.devicePixelRatio || 1}dppx)`)\n : null;\n dprQuery?.addEventListener?.(\"change\", onDprChange);\n };\n watchDpr();\n\n const onMotionChange = () => invalidate(false);\n reducedMotion?.addEventListener?.(\"change\", onMotionChange);\n\n const refreshTheme = () => {\n if (destroyed) return;\n const next = readTheme(dom.root, options.palette);\n if (themeColorsChanged(theme, next)) themeVersion++;\n theme = next;\n rebuild();\n };\n const unwatchTheme = watchTheme(refreshTheme);\n\n // texts follow the page language when no `locale` is set\n const langObserver =\n typeof win?.MutationObserver === \"function\"\n ? new win.MutationObserver(() => {\n if (\n !destroyed &&\n resolveLocale(options.locale) !== model.locale.locale\n )\n rebuild();\n })\n : null;\n langObserver?.observe(doc.documentElement, {\n attributes: true,\n attributeFilter: [\"lang\"],\n });\n\n // ----------------------------------------------------------- renderer\n\n const initRenderer = async (exclude: Set<ChartRendererKind> = new Set()) => {\n const token = ++rendererToken;\n const next = await createRenderer3D(\n options.renderer ?? \"auto\",\n () => {\n const canvas = layerCanvas(doc);\n canvas.className = \"minerva-chart-data\";\n return canvas;\n },\n (kind) => {\n if (destroyed || renderer?.kind !== kind) return;\n renderer.destroy();\n renderer.canvas.remove();\n renderer = null;\n void initRenderer(new Set([...exclude, kind]));\n },\n exclude,\n );\n if (destroyed || token !== rendererToken) {\n next?.destroy();\n return;\n }\n if (renderer) {\n renderer.destroy();\n renderer.canvas.remove();\n }\n renderer = next;\n geometryDirty = true;\n if (next) {\n dom.root.dataset.renderer = next.kind;\n stage.insertBefore(next.canvas, dom.foreground);\n emit(\"renderer\", next.kind);\n } else {\n delete dom.root.dataset.renderer;\n }\n resolveReady(next?.kind ?? null);\n invalidate(true);\n };\n\n refreshColors();\n rebuild();\n void initRenderer();\n const unfollowDefault = followDefaultRenderer(\n () => options.renderer,\n () => void initRenderer(),\n );\n\n // ---------------------------------------------------------------- api\n\n const instance: Chart3DInstance = {\n setOptions(next) {\n if (destroyed) return;\n const previous = options;\n options = next;\n if ((next.palette ?? []).join() !== (previous.palette ?? []).join()) {\n theme = readTheme(dom.root, next.palette);\n themeVersion++;\n }\n const key = JSON.stringify(next.camera ?? {});\n if (key !== cameraKey) {\n cameraKey = key;\n homeCamera = initialCamera(next.camera);\n setCameraInternal({ ...homeCamera });\n }\n if ((next.renderer ?? \"auto\") !== (previous.renderer ?? \"auto\"))\n void initRenderer();\n rebuild();\n },\n resize() {\n picker.reset();\n invalidate(true);\n },\n resetCamera() {\n setCameraInternal(copyCamera(homeCamera));\n },\n getCamera: () => copyCamera(camera),\n setCamera(next) {\n if (destroyed) return;\n setCameraInternal({\n azimuth: next.azimuth ?? camera.azimuth,\n elevation: next.elevation ?? camera.elevation,\n zoom: next.zoom ?? camera.zoom,\n pan: next.pan ? [next.pan[0], next.pan[1]] : camera.pan,\n projection: next.projection ?? camera.projection,\n });\n },\n getRenderer: () => renderer?.kind ?? null,\n ready,\n refreshTheme,\n on(type, listener) {\n let set = listeners.get(type);\n if (!set) {\n set = new Set();\n listeners.set(type, set);\n }\n set.add(listener as (e: never) => void);\n return () => {\n set.delete(listener as (e: never) => void);\n };\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n rendererToken++;\n if (frameId) win?.cancelAnimationFrame(frameId);\n if (hoverFrame) win?.cancelAnimationFrame(hoverFrame);\n frameId = 0;\n hoverFrame = 0;\n resizeObserver?.disconnect();\n intersection?.disconnect();\n doc.removeEventListener(\"visibilitychange\", onVisibility);\n dprQuery?.removeEventListener?.(\"change\", onDprChange);\n reducedMotion?.removeEventListener?.(\"change\", onMotionChange);\n unfollowDefault();\n unwatchTheme();\n langObserver?.disconnect();\n stage.removeEventListener(\"pointerdown\", onPointerDown);\n stage.removeEventListener(\"pointermove\", onPointerMove);\n stage.removeEventListener(\"pointerup\", onPointerUp);\n stage.removeEventListener(\"pointercancel\", onPointerCancel);\n stage.removeEventListener(\"pointerenter\", onPointerEnter);\n stage.removeEventListener(\"pointerleave\", onPointerLeave);\n stage.removeEventListener(\"wheel\", onWheel);\n stage.removeEventListener(\"dblclick\", onDoubleClick);\n stage.removeEventListener(\"contextmenu\", onContextMenu);\n stage.removeEventListener(\"keydown\", onKeyDown);\n stage.removeEventListener(\"focus\", onFocus);\n stage.removeEventListener(\"blur\", onBlur);\n renderer?.destroy();\n renderer = null;\n listeners.clear();\n resolveReady(null);\n dom.root.remove();\n },\n };\n return instance;\n};\n\nfunction isDark(theme: ChartTheme): boolean {\n return luminance(theme.background) < 0.4 || luminance(theme.text) > 0.6;\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("./canvas2d.cjs"),t=require("./webgl.cjs"),n=require("./webgpu.cjs");var r=[`webgpu`,`webgl2`,`webgl`,`canvas2d`],i=(e,t=new Set)=>{let n=e===`auto`?0:r.indexOf(e);return r.slice(Math.max(0,n)).filter(e=>!t.has(e))},a=async(r,i,a,o)=>{switch(r){case`webgpu`:return n.createWebGpu3D(i,a,o);case`webgl2`:return t.createWebGl3D(i,2,a,o);case`webgl`:return t.createWebGl3D(i,1,a,o);default:return e.createCanvas2d3D(i)}},o=async(e,t,n,r)=>{for(let o of i(e,r)){let r;try{r=await a(o,t(),()=>n(o),e===`auto`||e!==o)}catch{r=null}if(r)return r}return null};exports.createRenderer3D=o,exports.rendererCandidates3D=i;
1
+ const e=require("../defaults.cjs"),t=require("./canvas2d.cjs"),n=require("./webgl.cjs"),r=require("./webgpu.cjs");var i=[`webgpu`,`webgl2`,`webgl`,`canvas2d`],a=(e,t=new Set)=>{let n=e===`auto`?0:i.indexOf(e);return i.slice(Math.max(0,n)).filter(e=>!t.has(e))},o=async(e,i,a,o)=>{switch(e){case`webgpu`:return r.createWebGpu3D(i,a,o);case`webgl2`:return n.createWebGl3D(i,2,a,o);case`webgl`:return n.createWebGl3D(i,1,a,o);default:return t.createCanvas2d3D(i)}},s=async(t,n,r,i)=>{let s=e.resolveRendererPreference(t);for(let e of a(s,i)){let t;try{t=await o(e,n(),()=>r(e),s===`auto`||s!==e)}catch{t=null}if(t)return t}return null};exports.createRenderer3D=s,exports.rendererCandidates3D=a;
2
2
  //# sourceMappingURL=detect.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect.cjs","names":["createWebGpu3D","createWebGl3D","createCanvas2d3D","require_canvas2d","require_webgl","require_webgpu","ORDER","rendererCandidates3D","start","preference","exclude","k","create","kind","canvas","onLost","requireHardware","createRenderer3D","renderer","makeCanvas"],"sources":["../../../../../charts/src/engine/three-d/detect.ts"],"sourcesContent":["// Backend selection of the 3D charts: WebGPU -> WebGL2 -> WebGL -> Canvas2D.\n\nimport type { ChartRendererKind, ChartRendererPreference } from \"../types\";\nimport { createCanvas2d3D } from \"./canvas2d\";\nimport type { Renderer3D } from \"./render-types\";\nimport { createWebGl3D } from \"./webgl\";\nimport { createWebGpu3D } from \"./webgpu\";\n\nconst ORDER: readonly ChartRendererKind[] = [\n \"webgpu\",\n \"webgl2\",\n \"webgl\",\n \"canvas2d\",\n];\n\n/** Backends to try for a preference, best first */\nexport const rendererCandidates3D = (\n preference: ChartRendererPreference,\n exclude: ReadonlySet<ChartRendererKind> = new Set(),\n): ChartRendererKind[] => {\n const start = preference === \"auto\" ? 0 : ORDER.indexOf(preference);\n return ORDER.slice(Math.max(0, start)).filter((k) => !exclude.has(k));\n};\n\nconst create = async (\n kind: ChartRendererKind,\n canvas: HTMLCanvasElement,\n onLost: () => void,\n requireHardware: boolean,\n): Promise<Renderer3D | null> => {\n switch (kind) {\n case \"webgpu\":\n return createWebGpu3D(canvas, onLost, requireHardware);\n case \"webgl2\":\n return createWebGl3D(canvas, 2, onLost, requireHardware);\n case \"webgl\":\n return createWebGl3D(canvas, 1, onLost, requireHardware);\n default:\n return createCanvas2d3D(canvas);\n }\n};\n\n/**\n * Creates the first backend that works, on a fresh canvas for every\n * attempt (a canvas only ever gets one kind of context). Under `auto` and\n * when falling back from the preferred backend, GPUs running in software\n * are skipped: Canvas2D with decimation is faster there.\n */\nexport const createRenderer3D = async (\n preference: ChartRendererPreference,\n makeCanvas: () => HTMLCanvasElement,\n onLost: (kind: ChartRendererKind) => void,\n exclude?: ReadonlySet<ChartRendererKind>,\n): Promise<Renderer3D | null> => {\n for (const kind of rendererCandidates3D(preference, exclude)) {\n let renderer: Renderer3D | null;\n try {\n renderer = await create(\n kind,\n makeCanvas(),\n () => onLost(kind),\n preference === \"auto\" || preference !== kind,\n );\n } catch {\n renderer = null;\n }\n if (renderer) return renderer;\n }\n return null;\n};\n"],"mappings":"qFAQA,IAAMM,EAAsC,CAC1C,SACA,SACA,QACA,UACF,EAGaC,GACX,EACA,EAA0C,IAAI,MACtB,CACxB,IAAMC,EAAQC,IAAe,OAAS,EAAIH,EAAM,QAAQG,CAAU,EAClE,OAAOH,EAAM,MAAM,KAAK,IAAI,EAAGE,CAAK,CAAC,CAAC,CAAC,OAAQ,GAAM,CAACE,EAAQ,IAAIC,CAAC,CAAC,CACtE,EAEMC,EAAS,MACb,EACA,EACA,EACA,IAC+B,CAC/B,OAAQC,EAAR,CACE,IAAK,SACH,OAAOb,EAAAA,eAAec,EAAQC,EAAQC,CAAe,EACvD,IAAK,SACH,OAAOf,EAAAA,cAAca,EAAQ,EAAGC,EAAQC,CAAe,EACzD,IAAK,QACH,OAAOf,EAAAA,cAAca,EAAQ,EAAGC,EAAQC,CAAe,EACzD,QACE,OAAOd,EAAAA,iBAAiBY,CAAM,CAClC,CACF,EAQaG,EAAmB,MAC9B,EACA,EACA,EACA,IAC+B,CAC/B,IAAK,IAAMJ,KAAQN,EAAqBE,EAAYC,CAAO,EAAG,CAC5D,IAAIQ,EACJ,GAAI,CACF,EAAW,MAAMN,EACfC,EACAM,EAAW,MACLJ,EAAOF,CAAI,EACjBJ,IAAe,QAAUA,IAAeI,CAC1C,CACF,MAAQ,CACN,EAAW,IACb,CACA,GAAIK,EAAU,OAAOA,CACvB,CACA,OAAO,IACT"}
1
+ {"version":3,"file":"detect.cjs","names":["createWebGpu3D","createWebGl3D","createCanvas2d3D","resolveRendererPreference","require_defaults","require_canvas2d","require_webgl","require_webgpu","ORDER","rendererCandidates3D","start","preference","exclude","k","create","kind","canvas","onLost","requireHardware","createRenderer3D","requested","renderer","makeCanvas"],"sources":["../../../../../charts/src/engine/three-d/detect.ts"],"sourcesContent":["// Backend selection of the 3D charts: WebGPU -> WebGL2 -> WebGL -> Canvas2D.\n\nimport { resolveRendererPreference } from \"../defaults\";\nimport type { ChartRendererKind, ChartRendererPreference } from \"../types\";\nimport { createCanvas2d3D } from \"./canvas2d\";\nimport type { Renderer3D } from \"./render-types\";\nimport { createWebGl3D } from \"./webgl\";\nimport { createWebGpu3D } from \"./webgpu\";\n\nconst ORDER: readonly ChartRendererKind[] = [\n \"webgpu\",\n \"webgl2\",\n \"webgl\",\n \"canvas2d\",\n];\n\n/** Backends to try for a preference, best first */\nexport const rendererCandidates3D = (\n preference: ChartRendererPreference,\n exclude: ReadonlySet<ChartRendererKind> = new Set(),\n): ChartRendererKind[] => {\n const start = preference === \"auto\" ? 0 : ORDER.indexOf(preference);\n return ORDER.slice(Math.max(0, start)).filter((k) => !exclude.has(k));\n};\n\nconst create = async (\n kind: ChartRendererKind,\n canvas: HTMLCanvasElement,\n onLost: () => void,\n requireHardware: boolean,\n): Promise<Renderer3D | null> => {\n switch (kind) {\n case \"webgpu\":\n return createWebGpu3D(canvas, onLost, requireHardware);\n case \"webgl2\":\n return createWebGl3D(canvas, 2, onLost, requireHardware);\n case \"webgl\":\n return createWebGl3D(canvas, 1, onLost, requireHardware);\n default:\n return createCanvas2d3D(canvas);\n }\n};\n\n/**\n * Creates the first backend that works, on a fresh canvas for every\n * attempt (a canvas only ever gets one kind of context). Under `auto` and\n * when falling back from the preferred backend, GPUs running in software\n * are skipped: Canvas2D with decimation is faster there. `auto` starts\n * from the global default (`setDefaultChartRenderer`).\n */\nexport const createRenderer3D = async (\n requested: ChartRendererPreference,\n makeCanvas: () => HTMLCanvasElement,\n onLost: (kind: ChartRendererKind) => void,\n exclude?: ReadonlySet<ChartRendererKind>,\n): Promise<Renderer3D | null> => {\n const preference = resolveRendererPreference(requested);\n for (const kind of rendererCandidates3D(preference, exclude)) {\n let renderer: Renderer3D | null;\n try {\n renderer = await create(\n kind,\n makeCanvas(),\n () => onLost(kind),\n preference === \"auto\" || preference !== kind,\n );\n } catch {\n renderer = null;\n }\n if (renderer) return renderer;\n }\n return null;\n};\n"],"mappings":"kHASA,IAAMQ,EAAsC,CAC1C,SACA,SACA,QACA,UACF,EAGaC,GACX,EACA,EAA0C,IAAI,MACtB,CACxB,IAAMC,EAAQC,IAAe,OAAS,EAAIH,EAAM,QAAQG,CAAU,EAClE,OAAOH,EAAM,MAAM,KAAK,IAAI,EAAGE,CAAK,CAAC,CAAC,CAAC,OAAQ,GAAM,CAACE,EAAQ,IAAIC,CAAC,CAAC,CACtE,EAEMC,EAAS,MACb,EACA,EACA,EACA,IAC+B,CAC/B,OAAQC,EAAR,CACE,IAAK,SACH,OAAOf,EAAAA,eAAegB,EAAQC,EAAQC,CAAe,EACvD,IAAK,SACH,OAAOjB,EAAAA,cAAce,EAAQ,EAAGC,EAAQC,CAAe,EACzD,IAAK,QACH,OAAOjB,EAAAA,cAAce,EAAQ,EAAGC,EAAQC,CAAe,EACzD,QACE,OAAOhB,EAAAA,iBAAiBc,CAAM,CAClC,CACF,EASaG,EAAmB,MAC9B,EACA,EACA,EACA,IAC+B,CAC/B,IAAMR,EAAaR,EAAAA,0BAA0BiB,CAAS,EACtD,IAAK,IAAML,KAAQN,EAAqBE,EAAYC,CAAO,EAAG,CAC5D,IAAIS,EACJ,GAAI,CACF,EAAW,MAAMP,EACfC,EACAO,EAAW,MACLL,EAAOF,CAAI,EACjBJ,IAAe,QAAUA,IAAeI,CAC1C,CACF,MAAQ,CACN,EAAW,IACb,CACA,GAAIM,EAAU,OAAOA,CACvB,CACA,OAAO,IACT"}
@@ -6,6 +6,7 @@ export declare const rendererCandidates3D: (preference: ChartRendererPreference,
6
6
  * Creates the first backend that works, on a fresh canvas for every
7
7
  * attempt (a canvas only ever gets one kind of context). Under `auto` and
8
8
  * when falling back from the preferred backend, GPUs running in software
9
- * are skipped: Canvas2D with decimation is faster there.
9
+ * are skipped: Canvas2D with decimation is faster there. `auto` starts
10
+ * from the global default (`setDefaultChartRenderer`).
10
11
  */
11
- export declare const createRenderer3D: (preference: ChartRendererPreference, makeCanvas: () => HTMLCanvasElement, onLost: (kind: ChartRendererKind) => void, exclude?: ReadonlySet<ChartRendererKind>) => Promise<Renderer3D | null>;
12
+ export declare const createRenderer3D: (requested: ChartRendererPreference, makeCanvas: () => HTMLCanvasElement, onLost: (kind: ChartRendererKind) => void, exclude?: ReadonlySet<ChartRendererKind>) => Promise<Renderer3D | null>;
@@ -6,6 +6,7 @@ export declare const rendererCandidates3D: (preference: ChartRendererPreference,
6
6
  * Creates the first backend that works, on a fresh canvas for every
7
7
  * attempt (a canvas only ever gets one kind of context). Under `auto` and
8
8
  * when falling back from the preferred backend, GPUs running in software
9
- * are skipped: Canvas2D with decimation is faster there.
9
+ * are skipped: Canvas2D with decimation is faster there. `auto` starts
10
+ * from the global default (`setDefaultChartRenderer`).
10
11
  */
11
- export declare const createRenderer3D: (preference: ChartRendererPreference, makeCanvas: () => HTMLCanvasElement, onLost: (kind: ChartRendererKind) => void, exclude?: ReadonlySet<ChartRendererKind>) => Promise<Renderer3D | null>;
12
+ export declare const createRenderer3D: (requested: ChartRendererPreference, makeCanvas: () => HTMLCanvasElement, onLost: (kind: ChartRendererKind) => void, exclude?: ReadonlySet<ChartRendererKind>) => Promise<Renderer3D | null>;
@@ -1,35 +1,37 @@
1
- import { createCanvas2d3D as e } from "./canvas2d.js";
2
- import { createWebGl3D as t } from "./webgl.js";
3
- import { createWebGpu3D as n } from "./webgpu.js";
1
+ import { resolveRendererPreference as e } from "../defaults.js";
2
+ import { createCanvas2d3D as t } from "./canvas2d.js";
3
+ import { createWebGl3D as n } from "./webgl.js";
4
+ import { createWebGpu3D as r } from "./webgpu.js";
4
5
  //#region src/engine/three-d/detect.ts
5
- var r = [
6
+ var i = [
6
7
  "webgpu",
7
8
  "webgl2",
8
9
  "webgl",
9
10
  "canvas2d"
10
- ], i = (e, t = /* @__PURE__ */ new Set()) => {
11
- let n = e === "auto" ? 0 : r.indexOf(e);
12
- return r.slice(Math.max(0, n)).filter((e) => !t.has(e));
13
- }, a = async (r, i, a, o) => {
14
- switch (r) {
15
- case "webgpu": return n(i, a, o);
16
- case "webgl2": return t(i, 2, a, o);
17
- case "webgl": return t(i, 1, a, o);
18
- default: return e(i);
11
+ ], a = (e, t = /* @__PURE__ */ new Set()) => {
12
+ let n = e === "auto" ? 0 : i.indexOf(e);
13
+ return i.slice(Math.max(0, n)).filter((e) => !t.has(e));
14
+ }, o = async (e, i, a, o) => {
15
+ switch (e) {
16
+ case "webgpu": return r(i, a, o);
17
+ case "webgl2": return n(i, 2, a, o);
18
+ case "webgl": return n(i, 1, a, o);
19
+ default: return t(i);
19
20
  }
20
- }, o = async (e, t, n, r) => {
21
- for (let o of i(e, r)) {
22
- let r;
21
+ }, s = async (t, n, r, i) => {
22
+ let s = e(t);
23
+ for (let e of a(s, i)) {
24
+ let t;
23
25
  try {
24
- r = await a(o, t(), () => n(o), e === "auto" || e !== o);
26
+ t = await o(e, n(), () => r(e), s === "auto" || s !== e);
25
27
  } catch {
26
- r = null;
28
+ t = null;
27
29
  }
28
- if (r) return r;
30
+ if (t) return t;
29
31
  }
30
32
  return null;
31
33
  };
32
34
  //#endregion
33
- export { o as createRenderer3D, i as rendererCandidates3D };
35
+ export { s as createRenderer3D, a as rendererCandidates3D };
34
36
 
35
37
  //# sourceMappingURL=detect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","names":["ORDER","rendererCandidates3D","start","preference","exclude","k","create","kind","createWebGpu3D","canvas","onLost","requireHardware","createWebGl3D","createCanvas2d3D","createRenderer3D","renderer","makeCanvas"],"sources":["../../../../../charts/src/engine/three-d/detect.ts"],"sourcesContent":["// Backend selection of the 3D charts: WebGPU -> WebGL2 -> WebGL -> Canvas2D.\n\nimport type { ChartRendererKind, ChartRendererPreference } from \"../types\";\nimport { createCanvas2d3D } from \"./canvas2d\";\nimport type { Renderer3D } from \"./render-types\";\nimport { createWebGl3D } from \"./webgl\";\nimport { createWebGpu3D } from \"./webgpu\";\n\nconst ORDER: readonly ChartRendererKind[] = [\n \"webgpu\",\n \"webgl2\",\n \"webgl\",\n \"canvas2d\",\n];\n\n/** Backends to try for a preference, best first */\nexport const rendererCandidates3D = (\n preference: ChartRendererPreference,\n exclude: ReadonlySet<ChartRendererKind> = new Set(),\n): ChartRendererKind[] => {\n const start = preference === \"auto\" ? 0 : ORDER.indexOf(preference);\n return ORDER.slice(Math.max(0, start)).filter((k) => !exclude.has(k));\n};\n\nconst create = async (\n kind: ChartRendererKind,\n canvas: HTMLCanvasElement,\n onLost: () => void,\n requireHardware: boolean,\n): Promise<Renderer3D | null> => {\n switch (kind) {\n case \"webgpu\":\n return createWebGpu3D(canvas, onLost, requireHardware);\n case \"webgl2\":\n return createWebGl3D(canvas, 2, onLost, requireHardware);\n case \"webgl\":\n return createWebGl3D(canvas, 1, onLost, requireHardware);\n default:\n return createCanvas2d3D(canvas);\n }\n};\n\n/**\n * Creates the first backend that works, on a fresh canvas for every\n * attempt (a canvas only ever gets one kind of context). Under `auto` and\n * when falling back from the preferred backend, GPUs running in software\n * are skipped: Canvas2D with decimation is faster there.\n */\nexport const createRenderer3D = async (\n preference: ChartRendererPreference,\n makeCanvas: () => HTMLCanvasElement,\n onLost: (kind: ChartRendererKind) => void,\n exclude?: ReadonlySet<ChartRendererKind>,\n): Promise<Renderer3D | null> => {\n for (const kind of rendererCandidates3D(preference, exclude)) {\n let renderer: Renderer3D | null;\n try {\n renderer = await create(\n kind,\n makeCanvas(),\n () => onLost(kind),\n preference === \"auto\" || preference !== kind,\n );\n } catch {\n renderer = null;\n }\n if (renderer) return renderer;\n }\n return null;\n};\n"],"mappings":";;;;AAQA,IAAMA,IAAsC;CAC1C;CACA;CACA;CACA;AACF,GAGaC,KACX,GACA,oBAA0C,IAAI,IAAI,MAC1B;CACxB,IAAMC,IAAQC,MAAe,SAAS,IAAIH,EAAM,QAAQG,CAAU;CAClE,OAAOH,EAAM,MAAM,KAAK,IAAI,GAAGE,CAAK,CAAC,CAAC,CAAC,QAAQ,MAAM,CAACE,EAAQ,IAAIC,CAAC,CAAC;AACtE,GAEMC,IAAS,OACb,GACA,GACA,GACA,MAC+B;CAC/B,QAAQC,GAAR;EACE,KAAK,UACH,OAAOC,EAAeC,GAAQC,GAAQC,CAAe;EACvD,KAAK,UACH,OAAOC,EAAcH,GAAQ,GAAGC,GAAQC,CAAe;EACzD,KAAK,SACH,OAAOC,EAAcH,GAAQ,GAAGC,GAAQC,CAAe;EACzD,SACE,OAAOE,EAAiBJ,CAAM;CAClC;AACF,GAQaK,IAAmB,OAC9B,GACA,GACA,GACA,MAC+B;CAC/B,KAAK,IAAMP,KAAQN,EAAqBE,GAAYC,CAAO,GAAG;EAC5D,IAAIW;EACJ,IAAI;GACF,IAAW,MAAMT,EACfC,GACAS,EAAW,SACLN,EAAOH,CAAI,GACjBJ,MAAe,UAAUA,MAAeI,CAC1C;EACF,QAAQ;GACN,IAAW;EACb;EACA,IAAIQ,GAAU,OAAOA;CACvB;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"detect.js","names":["ORDER","rendererCandidates3D","start","preference","exclude","k","create","kind","createWebGpu3D","canvas","onLost","requireHardware","createWebGl3D","createCanvas2d3D","createRenderer3D","resolveRendererPreference","requested","renderer","makeCanvas"],"sources":["../../../../../charts/src/engine/three-d/detect.ts"],"sourcesContent":["// Backend selection of the 3D charts: WebGPU -> WebGL2 -> WebGL -> Canvas2D.\n\nimport { resolveRendererPreference } from \"../defaults\";\nimport type { ChartRendererKind, ChartRendererPreference } from \"../types\";\nimport { createCanvas2d3D } from \"./canvas2d\";\nimport type { Renderer3D } from \"./render-types\";\nimport { createWebGl3D } from \"./webgl\";\nimport { createWebGpu3D } from \"./webgpu\";\n\nconst ORDER: readonly ChartRendererKind[] = [\n \"webgpu\",\n \"webgl2\",\n \"webgl\",\n \"canvas2d\",\n];\n\n/** Backends to try for a preference, best first */\nexport const rendererCandidates3D = (\n preference: ChartRendererPreference,\n exclude: ReadonlySet<ChartRendererKind> = new Set(),\n): ChartRendererKind[] => {\n const start = preference === \"auto\" ? 0 : ORDER.indexOf(preference);\n return ORDER.slice(Math.max(0, start)).filter((k) => !exclude.has(k));\n};\n\nconst create = async (\n kind: ChartRendererKind,\n canvas: HTMLCanvasElement,\n onLost: () => void,\n requireHardware: boolean,\n): Promise<Renderer3D | null> => {\n switch (kind) {\n case \"webgpu\":\n return createWebGpu3D(canvas, onLost, requireHardware);\n case \"webgl2\":\n return createWebGl3D(canvas, 2, onLost, requireHardware);\n case \"webgl\":\n return createWebGl3D(canvas, 1, onLost, requireHardware);\n default:\n return createCanvas2d3D(canvas);\n }\n};\n\n/**\n * Creates the first backend that works, on a fresh canvas for every\n * attempt (a canvas only ever gets one kind of context). Under `auto` and\n * when falling back from the preferred backend, GPUs running in software\n * are skipped: Canvas2D with decimation is faster there. `auto` starts\n * from the global default (`setDefaultChartRenderer`).\n */\nexport const createRenderer3D = async (\n requested: ChartRendererPreference,\n makeCanvas: () => HTMLCanvasElement,\n onLost: (kind: ChartRendererKind) => void,\n exclude?: ReadonlySet<ChartRendererKind>,\n): Promise<Renderer3D | null> => {\n const preference = resolveRendererPreference(requested);\n for (const kind of rendererCandidates3D(preference, exclude)) {\n let renderer: Renderer3D | null;\n try {\n renderer = await create(\n kind,\n makeCanvas(),\n () => onLost(kind),\n preference === \"auto\" || preference !== kind,\n );\n } catch {\n renderer = null;\n }\n if (renderer) return renderer;\n }\n return null;\n};\n"],"mappings":";;;;;AASA,IAAMA,IAAsC;CAC1C;CACA;CACA;CACA;AACF,GAGaC,KACX,GACA,oBAA0C,IAAI,IAAI,MAC1B;CACxB,IAAMC,IAAQC,MAAe,SAAS,IAAIH,EAAM,QAAQG,CAAU;CAClE,OAAOH,EAAM,MAAM,KAAK,IAAI,GAAGE,CAAK,CAAC,CAAC,CAAC,QAAQ,MAAM,CAACE,EAAQ,IAAIC,CAAC,CAAC;AACtE,GAEMC,IAAS,OACb,GACA,GACA,GACA,MAC+B;CAC/B,QAAQC,GAAR;EACE,KAAK,UACH,OAAOC,EAAeC,GAAQC,GAAQC,CAAe;EACvD,KAAK,UACH,OAAOC,EAAcH,GAAQ,GAAGC,GAAQC,CAAe;EACzD,KAAK,SACH,OAAOC,EAAcH,GAAQ,GAAGC,GAAQC,CAAe;EACzD,SACE,OAAOE,EAAiBJ,CAAM;CAClC;AACF,GASaK,IAAmB,OAC9B,GACA,GACA,GACA,MAC+B;CAC/B,IAAMX,IAAaY,EAA0BC,CAAS;CACtD,KAAK,IAAMT,KAAQN,EAAqBE,GAAYC,CAAO,GAAG;EAC5D,IAAIa;EACJ,IAAI;GACF,IAAW,MAAMX,EACfC,GACAW,EAAW,SACLR,EAAOH,CAAI,GACjBJ,MAAe,UAAUA,MAAeI,CAC1C;EACF,QAAQ;GACN,IAAW;EACb;EACA,IAAIU,GAAU,OAAOA;CACvB;CACA,OAAO;AACT"}
@@ -1,2 +1,2 @@
1
- const e=require("../color.cjs"),t=require("../scale.cjs"),n=require("./colormap.cjs"),r=require("./contours.cjs"),i=require("./model.cjs");var a={maxGridSide:2048},o={maxGridSide:72},s=1,c=new WeakMap,l=e=>{if(!e)return 0;let t=c.get(e);return t===void 0&&(t=s++,c.set(e,t)),t},u=e=>e.map(e=>e.toFixed(4)).join(`,`),d=e=>`${e.domain[0]},${e.domain[1]},${e.half},${e.categories?.length??-1}`,f=e=>e===e&&e!==1/0&&e!==-1/0,p=(e,t,r,i)=>!t||!f(r)?i:e.packed[n.lutIndex(r,t[0],t[1])],m=(t,n,r,i)=>{let{cols:a}=t,o=a.count,s=new ArrayBuffer(o*20),c=new Float32Array(s),l=new Uint32Array(s),u=e.packColor(r.series[t.index]??[.5,.5,.5,1]),d=t.colorBy!==`series`,m=t.colorBy===`value`&&a.value?a.value:a.z,h=new Map,g=null,_=0,{x:v,y,z:b}=n,x=2*v.half/(v.domain[1]-v.domain[0]||1),S=2*y.half/(y.domain[1]-y.domain[0]||1),C=2*b.half/(b.domain[1]-b.domain[0]||1),w=-v.half-v.domain[0]*x,T=-y.half-y.domain[0]*S,E=-b.half-b.domain[0]*C;for(let t=0;t<o;t++){let s=a.x[t],v=a.y[t],y=a.z[t];if(!f(s)||!f(v)||!f(y)){if(!g){g=new Uint32Array(o);for(let e=0;e<_;e++)g[e]=e}continue}g&&(g[_]=t);let b=_*5;c[b]=s*x+w,c[b+1]=v*S+T,c[b+2]=y*C+E;let D=a.size?a.size[t]:NaN;c[b+3]=f(D)?D:i;let O=a.colors?.[t],k;if(O!==void 0){let t=h.get(O);t===void 0&&(t=e.packColor(r.resolve(O)),h.set(O,t)),k=t}else k=d?p(r.lut,n.colorDomain,m[t],u):u;l[b+4]=k,_++}return{data:s,count:_,source:g?g.subarray(0,_):null,sized:!!a.size}},h=(e,t)=>{if(e<=t){let t=new Int32Array(e);for(let n=0;n<e;n++)t[n]=n;return t}let n=new Int32Array(t);for(let r=0;r<t;r++)n[r]=Math.round(r*(e-1)/(t-1));return n},g=(t,n,r,a,o,s)=>{let{grid:c}=t,l=h(c.rows,a.maxGridSide),u=h(c.cols,a.maxGridSide),d=l.length,m=u.length,g=d*m,_=new Float32Array(g*3);for(let e=0;e<d;e++){let t=i.toWorld(n.y,c.y[l[e]]);for(let r=0;r<m;r++){let a=i.toWorld(n.x,c.x[u[r]]),o=c.z[l[e]*c.cols+u[r]],s=(e*m+r)*3;_[s]=a,_[s+1]=t,_[s+2]=f(o)?i.toWorld(n.z,o):NaN}}if(t.series.fill===!1)return{positions:_,rowIndex:l,colIndex:u,mesh:null};let v=new ArrayBuffer(g*28),y=new Float32Array(v),b=new Uint32Array(v),x=e.packColor(r.series[t.index]??[.5,.5,.5,1]),S=t.colorBy===`value`&&c.value,C=(e,t,n)=>_[(e*m+t)*3+n],w=(e,t)=>e>=0&&e<d&&t>=0&&t<m&&f(C(e,t,2));for(let e=0;e<d;e++)for(let i=0;i<m;i++){let a=(e*m+i)*7;y[a]=C(e,i,0),y[a+1]=C(e,i,1),y[a+2]=f(C(e,i,2))?C(e,i,2):0;let o=w(e,i-1)?i-1:i,s=w(e,i+1)?i+1:i,d=w(e-1,i)?e-1:e,h=w(e+1,i)?e+1:e,g=0,_=0,v=1;if(w(e,i)&&o!==s&&d!==h){let t=C(e,s,0)-C(e,o,0),n=C(e,s,2)-C(e,o,2),r=C(h,i,1)-C(d,i,1),a=C(h,i,2)-C(d,i,2);g=-n*r,_=-t*a,v=t*r;let c=Math.hypot(g,_,v)||1;g/=c,_/=c,v/=c,v<0&&(g=-g,_=-_,v=-v)}y[a+3]=g,y[a+4]=_,y[a+5]=v;let T=l[e]*c.cols+u[i];b[a+6]=t.colorBy===`series`?x:p(r.lut,n.colorDomain,S?c.value[T]:c.z[T],x)}let T=new Uint32Array((d-1)*(m-1)*6),E=0;for(let e=0;e<d-1;e++)for(let t=0;t<m-1;t++){if(!w(e,t)||!w(e,t+1)||!w(e+1,t)||!w(e+1,t+1))continue;let n=e*m+t,r=n+1,i=n+m,a=i+1;T[E++]=n,T[E++]=r,T[E++]=a,T[E++]=n,T[E++]=a,T[E++]=i}return{positions:_,rowIndex:l,colIndex:u,mesh:{kind:`mesh`,key:o,version:s,opacity:t.opacity,vertices:v,vertexCount:g,indices:T.subarray(0,E)}}},_=(e,t)=>{let n=t.length,r=new ArrayBuffer(n*28),i=new Float32Array(r),a=new Uint32Array(r);for(let r=0;r<n;r++){let n=r*7;for(let t=0;t<6;t++)i[n+t]=e[r*6+t];a[n+6]=t[r]}return{buffer:r,count:n}},v=64,y=(e,t)=>{let n=[];for(let r=0;r<e;r+=t)n.push(r);return e>0&&n[n.length-1]!==e-1&&n.push(e-1),n},b=(e,t,n,r,i)=>{let a=e.rowIndex.length,o=e.colIndex.length,s=e.positions,c=[],l=[],u=Math.max(1,Math.round(t.step??Math.ceil(a/v))),d=Math.max(1,Math.round(t.step??Math.ceil(o/v))),p=(e,t)=>{f(s[e*3+2])&&f(s[t*3+2])&&(c.push(s[e*3],s[e*3+1],s[e*3+2],s[t*3],s[t*3+1],s[t*3+2]),l.push(n))};for(let e of y(a,u))for(let t=0;t<o-1;t++)p(e*o+t,e*o+t+1);for(let e of y(o,d))for(let t=0;t<a-1;t++)p(t*o+e,(t+1)*o+e);let{buffer:m,count:h}=_(c,l);return{kind:`lines`,key:r,version:i,opacity:1,data:m,count:h,width:t.width??1,bias:.0015}},x=(e,n,r)=>{if(e.levels)return e.levels.filter(f);if(!(r>n))return[];let i=Math.max(1,Math.round(e.count??10)),a=t.linearTicks(n,r,i).filter(e=>e>n&&e<r);return a.length>=Math.max(2,i/2)?a:Array.from({length:i},(e,t)=>n+(t+.5)*(r-n)/i)},S=(t,a,o,s,c,l)=>{let{grid:u}=t,d=x(s,u.extent.z.min,u.extent.z.max);if(!d.length)return null;let f=s.floor??!0,p=s.surface??!1;if(!f&&!p)return null;let m=s.color?e.packColor(o.resolve(s.color)):null,h=-a.z.half+.002,g=a.colorDomain&&t.colorBy!==`value`?a.colorDomain:[u.extent.z.min,u.extent.z.max],v=[],y=[],b=e=>{let t=Math.floor(e),n=e-t,r=u.x[Math.min(t,u.cols-1)],o=u.x[Math.min(t+1,u.cols-1)];return i.toWorld(a.x,r+(o-r)*n)},S=e=>{let t=Math.floor(e),n=e-t,r=u.y[Math.min(t,u.rows-1)],o=u.y[Math.min(t+1,u.rows-1)];return i.toWorld(a.y,r+(o-r)*n)},C=[];for(let e of d){if(C.length=0,r.contourSegments(u.z,u.rows,u.cols,e,C),!C.length)continue;let t=m??o.lut.packed[n.lutIndex(e,g[0],g[1])],s=i.toWorld(a.z,e);for(let e=0;e<C.length;e+=4){let n=b(C[e]),r=S(C[e+1]),i=b(C[e+2]),a=S(C[e+3]);f&&(v.push(n,r,h,i,a,h),y.push(t)),p&&(v.push(n,r,s,i,a,s),y.push(t))}}if(!y.length)return null;let{buffer:w,count:T}=_(v,y);return{kind:`lines`,key:c,version:l,opacity:1,data:w,count:T,width:s.width??1,bias:.002}},C=[{n:[0,0,1],c:[0,0,1,1,0,1,1,1,1,0,1,1]},{n:[0,0,-1],c:[0,0,0,0,1,0,1,1,0,1,0,0]},{n:[1,0,0],c:[1,0,0,1,1,0,1,1,1,1,0,1]},{n:[-1,0,0],c:[0,0,0,0,0,1,0,1,1,0,1,0]},{n:[0,1,0],c:[0,1,0,0,1,1,1,1,1,1,1,0]},{n:[0,-1,0],c:[0,0,0,1,0,0,1,0,1,0,0,1]}],w=(t,n,r,a,o)=>{let{bars:s}=t,c=s.count,l=new ArrayBuffer(c*24*28),u=new Float32Array(l),d=new Uint32Array(l),f=new Uint32Array(c*36),m=new Float32Array(c*6),h=e.packColor(r.series[t.index]??[.5,.5,.5,1]),g=Math.max(.05,Math.min(1,t.series.barWidth??.7)),_=2*n.x.half/Math.max(1,n.x.domain[1]-n.x.domain[0]),v=2*n.y.half/Math.max(1,n.y.domain[1]-n.y.domain[0]),y=_*g/2,b=v*g/2,x=new Map,S=0,w=0;for(let a=0;a<c;a++){let o=i.toWorld(n.x,s.xi[a]),c=i.toWorld(n.y,s.yi[a]),l=i.toWorld(n.z,s.z0[a]),g=i.toWorld(n.z,s.z1[a]),_=[o-y,c-b,Math.min(l,g)],v=[o+y,c+b,Math.max(l,g)];m.set([_[0],_[1],_[2],v[0],v[1],v[2]],a*6);let T=s.colors?.[a],E;if(T!==void 0)E=x.get(T)??e.packColor(r.resolve(T)),x.set(T,E);else if(t.colorBy===`series`)E=h;else{let e=t.colorBy===`value`&&s.value?s.value[a]:s.z[a];E=p(r.lut,n.colorDomain,e,h)}for(let e of C){for(let t=0;t<4;t++){let n=(S+t)*7;u[n]=e.c[t*3]?v[0]:_[0],u[n+1]=e.c[t*3+1]?v[1]:_[1],u[n+2]=e.c[t*3+2]?v[2]:_[2],u[n+3]=e.n[0],u[n+4]=e.n[1],u[n+5]=e.n[2],d[n+6]=E}f[w++]=S,f[w++]=S+1,f[w++]=S+2,f[w++]=S,f[w++]=S+2,f[w++]=S+3,S+=4}}return{mesh:{kind:`mesh`,key:a,version:o,opacity:t.opacity,vertices:l,vertexCount:S,indices:f},target:{kind:`bars`,series:t.index,count:c,boxes:m}}},T=(e,t,n,r)=>{let i=new Float32Array(t.data),a=new Uint32Array(t.data),o=[],s=[],c=e.opacity;for(let e=0;e<t.count-1;e++){if(t.source&&t.source[e+1]!==t.source[e]+1)continue;let n=e*5,r=n+5;o.push(i[n],i[n+1],i[n+2],i[r],i[r+1],i[r+2]),s.push(a[n+4])}let{buffer:l,count:u}=_(o,s);return{kind:`lines`,key:n,version:r,opacity:c,data:l,count:u,width:e.series.lineWidth??2,bias:0}},E=()=>{let e=new Map,t=0,n=(e,t,n,r,i)=>{let a=e.series,o=JSON.stringify({type:e.type,colorBy:e.colorBy,opacity:e.opacity,pointSize:a.pointSize,lineWidth:a.lineWidth,perspectiveSize:a.perspectiveSize,wireframe:a.wireframe,contours:a.contours,fill:a.fill,barWidth:a.barWidth});return[l(e.series.data),o,d(t.x),d(t.y),d(t.z),t.colorDomain?.join()??``,u(n.series[e.index]??[0,0,0,0]),u(n.wire),i,r.maxGridSide,e.type===`bar`?k(e):``].join(`|`)};return(r,i,a,o)=>{let s=new Map,c=[],l=[],u=[];for(let d of r.series){let f=`${d.index}:${d.id}`;if(d.hidden){u.push(0);let t=e.get(f);t&&s.set(f,t);continue}let p=n(d,r,i,a,o),m=e.get(f);(!m||m.signature!==p)&&(m=D(d,r,i,a,`s${f}`,++t,p)),s.set(f,m),c.push(...m.items),l.push(...m.target),u.push(m.count)}return e=s,{items:c,targets:l,counts:u}}},D=(t,n,r,i,a,o,s)=>{switch(t.type){case`surface`:{let c=g(t,n,r,i,`${a}:mesh`,o),l=[];c.mesh&&l.push(c.mesh);let u=t.series.wireframe;if(u){let t=u===!0?{}:u,n=t.color?e.packColor(r.resolve(t.color)):e.packColor(r.wire);l.push(b(c,t,n,`${a}:wire`,o))}let d=t.series.contours;if(d){let e=S(t,n,r,d===!0?{}:d,`${a}:contours`,o);e&&l.push(e)}return{signature:s,items:l,target:[{kind:`surface`,series:t.index,rows:c.rowIndex.length,cols:c.colIndex.length,positions:c.positions,rowIndex:c.rowIndex,colIndex:c.colIndex}],count:t.grid.rows*t.grid.cols}}case`bar`:{let{mesh:e,target:i}=w(t,n,r,`${a}:bars`,o);return{signature:s,items:[e],target:[i],count:t.bars.count}}case`line`:{let e=t.series.pointSize??0,i=m(t,n,r,e),c=[T(t,i,`${a}:line`,o)];return e>0&&c.push({kind:`points`,key:`${a}:points`,version:o,opacity:t.opacity,data:i.data,count:i.count,perspective:!1}),{signature:s,items:c,target:[O(t.index,i,Math.max(e,t.series.lineWidth??2))],count:i.count}}default:{let e=t.series.pointSize??6,i=m(t,n,r,e);return{signature:s,items:[{kind:`points`,key:`${a}:points`,version:o,opacity:t.opacity,data:i.data,count:i.count,perspective:t.series.perspectiveSize??!0}],target:[O(t.index,i,e)],count:i.count}}}},O=(e,t,n)=>({kind:`points`,series:e,positions:new Float32Array(t.data),stride:5,count:t.count,sized:t.sized,defaultSize:n,source:t.source,packed:new Uint32Array(t.data)}),k=e=>{let t=e.bars.count;for(let n=0;n<e.bars.count;n++)t=(t*31+e.bars.z0[n]*997+e.bars.z1[n]*13)%0xe8d4a51000;return String(t)},A=t=>e.toCss([(t&255)/255,(t>>>8&255)/255,(t>>>16&255)/255,(t>>>24&255)/255]);exports.CPU_BUDGET=o,exports.GPU_BUDGET=a,exports.contourLevels=x,exports.createGeometryBuilder=E,exports.objectId=l,exports.packedCss=A,exports.stepped=y;
1
+ const e=require("../color.cjs"),t=require("../scale.cjs"),n=require("./colormap.cjs"),r=require("./contours.cjs"),i=require("./model.cjs");var a={maxGridSide:2048,maxPoints:1/0},o={maxGridSide:72,maxPoints:4e4},s=1,c=new WeakMap,l=e=>{if(!e)return 0;let t=c.get(e);return t===void 0&&(t=s++,c.set(e,t)),t},u=e=>e.map(e=>e.toFixed(4)).join(`,`),d=e=>`${e.domain[0]},${e.domain[1]},${e.half},${e.categories?.length??-1}`,f=e=>e===e&&e!==1/0&&e!==-1/0,p=(e,t,r,i)=>!t||!f(r)?i:e.packed[n.lutIndex(r,t[0],t[1])],m=e=>(4278190080|(e&255)<<16|e&65280|e>>>16&255)>>>0,h=(t,n,r,i,a=1)=>{let{cols:o}=t,s=Math.ceil(o.count/a),c=new ArrayBuffer(s*20),l=new Float32Array(c),u=new Uint32Array(c),d=e.packColor(r.series[t.index]??[.5,.5,.5,1]),h=t.colorBy!==`series`,g=t.colorBy===`value`&&o.value?o.value:o.z,_=new Map,v=null;a>1&&(v=new Uint32Array(s));let y=0,{x:b,y:x,z:S}=n,C=2*b.half/(b.domain[1]-b.domain[0]||1),w=2*x.half/(x.domain[1]-x.domain[0]||1),T=2*S.half/(S.domain[1]-S.domain[0]||1),E=-b.half-b.domain[0]*C,D=-x.half-x.domain[0]*w,O=-S.half-S.domain[0]*T;for(let t=0;t<o.count;t+=a){let a=o.x[t],c=o.y[t],b=o.z[t];if(!f(a)||!f(c)||!f(b)){if(!v){v=new Uint32Array(s);for(let e=0;e<y;e++)v[e]=e}continue}v&&(v[y]=t);let x=y*5;l[x]=a*C+E,l[x+1]=c*w+D,l[x+2]=b*T+O;let S=o.size?o.size[t]:NaN;l[x+3]=f(S)?S:i;let k=o.colors?.[t],A=o.rgb?o.rgb[t]:NaN,j;if(k!==void 0){let t=_.get(k);t===void 0&&(t=e.packColor(r.resolve(k)),_.set(k,t)),j=t}else j=f(A)?m(A):h?p(r.lut,n.colorDomain,g[t],d):d;u[x+4]=j,y++}return{data:c,count:y,source:v?v.subarray(0,y):null,sized:!!o.size}},g=(e,t)=>{if(e<=t){let t=new Int32Array(e);for(let n=0;n<e;n++)t[n]=n;return t}let n=new Int32Array(t);for(let r=0;r<t;r++)n[r]=Math.round(r*(e-1)/(t-1));return n},_=(t,n,r,a,o,s)=>{let{grid:c}=t,l=g(c.rows,a.maxGridSide),u=g(c.cols,a.maxGridSide),d=l.length,m=u.length,h=d*m,_=new Float32Array(h*3);for(let e=0;e<d;e++){let t=i.toWorld(n.y,c.y[l[e]]);for(let r=0;r<m;r++){let a=i.toWorld(n.x,c.x[u[r]]),o=c.z[l[e]*c.cols+u[r]],s=(e*m+r)*3;_[s]=a,_[s+1]=t,_[s+2]=f(o)?i.toWorld(n.z,o):NaN}}if(t.series.fill===!1)return{positions:_,rowIndex:l,colIndex:u,mesh:null};let v=new ArrayBuffer(h*28),y=new Float32Array(v),b=new Uint32Array(v),x=e.packColor(r.series[t.index]??[.5,.5,.5,1]),S=t.colorBy===`value`&&c.value,C=(e,t,n)=>_[(e*m+t)*3+n],w=(e,t)=>e>=0&&e<d&&t>=0&&t<m&&f(C(e,t,2));for(let e=0;e<d;e++)for(let i=0;i<m;i++){let a=(e*m+i)*7;y[a]=C(e,i,0),y[a+1]=C(e,i,1),y[a+2]=f(C(e,i,2))?C(e,i,2):0;let o=w(e,i-1)?i-1:i,s=w(e,i+1)?i+1:i,d=w(e-1,i)?e-1:e,h=w(e+1,i)?e+1:e,g=0,_=0,v=1;if(w(e,i)&&o!==s&&d!==h){let t=C(e,s,0)-C(e,o,0),n=C(e,s,2)-C(e,o,2),r=C(h,i,1)-C(d,i,1),a=C(h,i,2)-C(d,i,2);g=-n*r,_=-t*a,v=t*r;let c=Math.hypot(g,_,v)||1;g/=c,_/=c,v/=c,v<0&&(g=-g,_=-_,v=-v)}y[a+3]=g,y[a+4]=_,y[a+5]=v;let T=l[e]*c.cols+u[i];b[a+6]=t.colorBy===`series`?x:p(r.lut,n.colorDomain,S?c.value[T]:c.z[T],x)}let T=new Uint32Array((d-1)*(m-1)*6),E=0;for(let e=0;e<d-1;e++)for(let t=0;t<m-1;t++){if(!w(e,t)||!w(e,t+1)||!w(e+1,t)||!w(e+1,t+1))continue;let n=e*m+t,r=n+1,i=n+m,a=i+1;T[E++]=n,T[E++]=r,T[E++]=a,T[E++]=n,T[E++]=a,T[E++]=i}return{positions:_,rowIndex:l,colIndex:u,mesh:{kind:`mesh`,key:o,version:s,opacity:t.opacity,vertices:v,vertexCount:h,indices:T.subarray(0,E)}}},v=(e,t)=>{let n=t.length,r=new ArrayBuffer(n*28),i=new Float32Array(r),a=new Uint32Array(r);for(let r=0;r<n;r++){let n=r*7;for(let t=0;t<6;t++)i[n+t]=e[r*6+t];a[n+6]=t[r]}return{buffer:r,count:n}},y=64,b=(e,t)=>{let n=[];for(let r=0;r<e;r+=t)n.push(r);return e>0&&n[n.length-1]!==e-1&&n.push(e-1),n},x=(e,t,n,r,i)=>{let a=e.rowIndex.length,o=e.colIndex.length,s=e.positions,c=[],l=[],u=Math.max(1,Math.round(t.step??Math.ceil(a/y))),d=Math.max(1,Math.round(t.step??Math.ceil(o/y))),p=(e,t)=>{f(s[e*3+2])&&f(s[t*3+2])&&(c.push(s[e*3],s[e*3+1],s[e*3+2],s[t*3],s[t*3+1],s[t*3+2]),l.push(n))};for(let e of b(a,u))for(let t=0;t<o-1;t++)p(e*o+t,e*o+t+1);for(let e of b(o,d))for(let t=0;t<a-1;t++)p(t*o+e,(t+1)*o+e);let{buffer:m,count:h}=v(c,l);return{kind:`lines`,key:r,version:i,opacity:1,data:m,count:h,width:t.width??1,bias:.0015}},S=(e,n,r)=>{if(e.levels)return e.levels.filter(f);if(!(r>n))return[];let i=Math.max(1,Math.round(e.count??10)),a=t.linearTicks(n,r,i).filter(e=>e>n&&e<r);return a.length>=Math.max(2,i/2)?a:Array.from({length:i},(e,t)=>n+(t+.5)*(r-n)/i)},C=(t,a,o,s,c,l)=>{let{grid:u}=t,d=S(s,u.extent.z.min,u.extent.z.max);if(!d.length)return null;let f=s.floor??!0,p=s.surface??!1;if(!f&&!p)return null;let m=s.color?e.packColor(o.resolve(s.color)):null,h=-a.z.half+.002,g=a.colorDomain&&t.colorBy!==`value`?a.colorDomain:[u.extent.z.min,u.extent.z.max],_=[],y=[],b=e=>{let t=Math.floor(e),n=e-t,r=u.x[Math.min(t,u.cols-1)],o=u.x[Math.min(t+1,u.cols-1)];return i.toWorld(a.x,r+(o-r)*n)},x=e=>{let t=Math.floor(e),n=e-t,r=u.y[Math.min(t,u.rows-1)],o=u.y[Math.min(t+1,u.rows-1)];return i.toWorld(a.y,r+(o-r)*n)},C=[];for(let e of d){if(C.length=0,r.contourSegments(u.z,u.rows,u.cols,e,C),!C.length)continue;let t=m??o.lut.packed[n.lutIndex(e,g[0],g[1])],s=i.toWorld(a.z,e);for(let e=0;e<C.length;e+=4){let n=b(C[e]),r=x(C[e+1]),i=b(C[e+2]),a=x(C[e+3]);f&&(_.push(n,r,h,i,a,h),y.push(t)),p&&(_.push(n,r,s,i,a,s),y.push(t))}}if(!y.length)return null;let{buffer:w,count:T}=v(_,y);return{kind:`lines`,key:c,version:l,opacity:1,data:w,count:T,width:s.width??1,bias:.002}},w=[{n:[0,0,1],c:[0,0,1,1,0,1,1,1,1,0,1,1]},{n:[0,0,-1],c:[0,0,0,0,1,0,1,1,0,1,0,0]},{n:[1,0,0],c:[1,0,0,1,1,0,1,1,1,1,0,1]},{n:[-1,0,0],c:[0,0,0,0,0,1,0,1,1,0,1,0]},{n:[0,1,0],c:[0,1,0,0,1,1,1,1,1,1,1,0]},{n:[0,-1,0],c:[0,0,0,1,0,0,1,0,1,0,0,1]}],T=(t,n,r,a,o)=>{let{bars:s}=t,c=s.count,l=new ArrayBuffer(c*24*28),u=new Float32Array(l),d=new Uint32Array(l),f=new Uint32Array(c*36),m=new Float32Array(c*6),h=e.packColor(r.series[t.index]??[.5,.5,.5,1]),g=Math.max(.05,Math.min(1,t.series.barWidth??.7)),_=2*n.x.half/Math.max(1,n.x.domain[1]-n.x.domain[0]),v=2*n.y.half/Math.max(1,n.y.domain[1]-n.y.domain[0]),y=_*g/2,b=v*g/2,x=new Map,S=0,C=0;for(let a=0;a<c;a++){let o=i.toWorld(n.x,s.xi[a]),c=i.toWorld(n.y,s.yi[a]),l=i.toWorld(n.z,s.z0[a]),g=i.toWorld(n.z,s.z1[a]),_=[o-y,c-b,Math.min(l,g)],v=[o+y,c+b,Math.max(l,g)];m.set([_[0],_[1],_[2],v[0],v[1],v[2]],a*6);let T=s.colors?.[a],E;if(T!==void 0)E=x.get(T)??e.packColor(r.resolve(T)),x.set(T,E);else if(t.colorBy===`series`)E=h;else{let e=t.colorBy===`value`&&s.value?s.value[a]:s.z[a];E=p(r.lut,n.colorDomain,e,h)}for(let e of w){for(let t=0;t<4;t++){let n=(S+t)*7;u[n]=e.c[t*3]?v[0]:_[0],u[n+1]=e.c[t*3+1]?v[1]:_[1],u[n+2]=e.c[t*3+2]?v[2]:_[2],u[n+3]=e.n[0],u[n+4]=e.n[1],u[n+5]=e.n[2],d[n+6]=E}f[C++]=S,f[C++]=S+1,f[C++]=S+2,f[C++]=S,f[C++]=S+2,f[C++]=S+3,S+=4}}return{mesh:{kind:`mesh`,key:a,version:o,opacity:t.opacity,vertices:l,vertexCount:S,indices:f},target:{kind:`bars`,series:t.index,count:c,boxes:m}}},E=(e,t,n,r)=>{let i=new Float32Array(t.data),a=new Uint32Array(t.data),o=[],s=[],c=e.opacity;for(let e=0;e<t.count-1;e++){if(t.source&&t.source[e+1]!==t.source[e]+1)continue;let n=e*5,r=n+5;o.push(i[n],i[n+1],i[n+2],i[r],i[r+1],i[r+2]),s.push(a[n+4])}let{buffer:l,count:u}=v(o,s);return{kind:`lines`,key:n,version:r,opacity:c,data:l,count:u,width:e.series.lineWidth??2,bias:0}},D=()=>{let e=new Map,t=0,n=(e,t,n,r,i,a)=>{let o=e.series,s=JSON.stringify({type:e.type,colorBy:e.colorBy,opacity:e.opacity,pointSize:o.pointSize,pointStyle:o.pointStyle,blend:o.blend,lineWidth:o.lineWidth,perspectiveSize:o.perspectiveSize,wireframe:o.wireframe,contours:o.contours,fill:o.fill,barWidth:o.barWidth});return[l(e.series.data),s,d(t.x),d(t.y),d(t.z),t.colorDomain?.join()??``,u(n.series[e.index]??[0,0,0,0]),u(n.wire),i,r.maxGridSide,e.type===`scatter`?a:1,e.type===`bar`?A(e):``].join(`|`)};return(r,i,a,o)=>{let s=new Map,c=[],l=[],u=[],d=0;for(let e of r.series)e.type===`scatter`&&!e.hidden&&(d+=e.cols.count);let f=Math.max(1,Math.ceil(d/a.maxPoints));for(let d of r.series){let p=`${d.index}:${d.id}`;if(d.hidden){u.push(0);let t=e.get(p);t&&s.set(p,t);continue}let m=n(d,r,i,a,o,f),h=e.get(p);(!h||h.signature!==m)&&(h=O(d,r,i,a,`s${p}`,++t,m,f)),s.set(p,h),c.push(...h.items),l.push(...h.target),u.push(h.count)}return e=s,{items:c,targets:l,counts:u}}},O=(t,n,r,i,a,o,s,c=1)=>{switch(t.type){case`surface`:{let c=_(t,n,r,i,`${a}:mesh`,o),l=[];c.mesh&&l.push(c.mesh);let u=t.series.wireframe;if(u){let t=u===!0?{}:u,n=t.color?e.packColor(r.resolve(t.color)):e.packColor(r.wire);l.push(x(c,t,n,`${a}:wire`,o))}let d=t.series.contours;if(d){let e=C(t,n,r,d===!0?{}:d,`${a}:contours`,o);e&&l.push(e)}return{signature:s,items:l,target:[{kind:`surface`,series:t.index,rows:c.rowIndex.length,cols:c.colIndex.length,positions:c.positions,rowIndex:c.rowIndex,colIndex:c.colIndex}],count:t.grid.rows*t.grid.cols}}case`bar`:{let{mesh:e,target:i}=T(t,n,r,`${a}:bars`,o);return{signature:s,items:[e],target:[i],count:t.bars.count}}case`line`:{let e=t.series.pointSize??0,i=h(t,n,r,e),c=[E(t,i,`${a}:line`,o)];return e>0&&c.push({kind:`points`,key:`${a}:points`,version:o,opacity:t.opacity,data:i.data,count:i.count,perspective:!1}),{signature:s,items:c,target:[k(t.index,i,Math.max(e,t.series.lineWidth??2))],count:i.count}}default:{let e=t.series.pointSize??6,i=h(t,n,r,e,c),l=t.series.pointStyle;return{signature:s,items:[{kind:`points`,key:`${a}:points`,version:o,opacity:t.opacity,data:i.data,count:i.count,perspective:t.series.perspectiveSize??!0,style:l===`glow`?2:+(l===`disc`),additive:t.series.blend===`additive`,thinned:c}],target:[k(t.index,i,e)],count:c>1?t.cols.count:i.count}}}},k=(e,t,n)=>({kind:`points`,series:e,positions:new Float32Array(t.data),stride:5,count:t.count,sized:t.sized,defaultSize:n,source:t.source,packed:new Uint32Array(t.data)}),A=e=>{let t=e.bars.count;for(let n=0;n<e.bars.count;n++)t=(t*31+e.bars.z0[n]*997+e.bars.z1[n]*13)%0xe8d4a51000;return String(t)},j=t=>e.toCss([(t&255)/255,(t>>>8&255)/255,(t>>>16&255)/255,(t>>>24&255)/255]);exports.CPU_BUDGET=o,exports.GPU_BUDGET=a,exports.contourLevels=S,exports.createGeometryBuilder=D,exports.objectId=l,exports.packedCss=j,exports.stepped=b;
2
2
  //# sourceMappingURL=geometry.cjs.map