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":"geometry.js","names":["GPU_BUDGET","CPU_BUDGET","nextId","ids","objectId","value","id","colorKey","c","v","domainKey","a","isFiniteNumber","scaleColor","domain","fallback","lut","lutIndex","buildPoints","m","n","cols","buffer","f32","u32","seriesColor","packColor","colors","byScale","scaleSource","cache","source","count","ax","ay","az","model","sx","sy","sz","ox","oy","oz","i","x","y","z","k","o","size","defaultSize","own","color","packed","sampleIndices","max","all","out","buildSurface","rowIndex","grid","budget","colIndex","rows","positions","r","gy","toWorld","gx","h","byValue","P","finite","c0","c1","r0","r1","nx","ny","nz","ux","uz","vy","vz","len","gi","indices","b","d","e","segmentBuffer","j","coords","MAX_WIRES","stepped","step","buildWireframe","mesh","rowStep","options","colStep","segment","contourLevels","min","nice","linearTicks","buildContours","levels","floor","onSurface","fixed","floorZ","xAt","f","yAt","segments","level","contourSegments","lz","x0","y0","x1","y1","FACES","buildBars","bars","boxes","width","cellX","cellY","hx","hy","cx","cy","za","zb","lo","hi","face","buildLine","points","opacity","createGeometryBuilder","version","signatureOf","s","lutId","stackHash","next","items","targets","counts","kept","signature","entry","buildSeries","key","wire","contours","lines","target","pointTarget","hash","packedCss","toCss"],"sources":["../../../../../charts/src/engine/three-d/geometry.ts"],"sourcesContent":["// Model -> GPU items (points, meshes, line segments) and the CPU data the\n// hover picking needs. Items keep their version (no re-upload) while their\n// signature is unchanged.\n\nimport { packColor, toCss, type Rgba } from \"../color\";\nimport { linearTicks } from \"../scale\";\nimport { contourSegments } from \"./contours\";\nimport { lutIndex, type ColorLut } from \"./colormap\";\nimport {\n toWorld,\n type AxisModel,\n type BarModel,\n type LineModel,\n type Model3D,\n type ScatterModel,\n type SeriesModel,\n type SurfaceModel,\n} from \"./model\";\nimport {\n POINT_STRIDE,\n SEGMENT_STRIDE,\n VERTEX_STRIDE,\n type Item3D,\n type LinesItem,\n type MeshItem,\n type PointsItem,\n} from \"./render-types\";\nimport type {\n Surface3DContourOptions,\n Surface3DWireframeOptions,\n} from \"./types\";\n\n/** Colors the geometry needs, resolved by the chart */\nexport interface GeometryColors {\n /** Color of every series (option or palette) */\n series: Rgba[];\n /** Resolves a CSS color of the data */\n resolve: (value: string) => Rgba;\n /** Sampled color scale */\n lut: ColorLut;\n /** Default wireframe color */\n wire: Rgba;\n}\n\n/** Limits of the CPU (Canvas2D) backend */\nexport interface GeometryBudget {\n /** Largest surface grid side drawn (resampled above) */\n maxGridSide: number;\n}\n\nexport const GPU_BUDGET: GeometryBudget = { maxGridSide: 2048 };\nexport const CPU_BUDGET: GeometryBudget = { maxGridSide: 72 };\n\n/** Picking data of a point cloud (scatter dots, line vertices) */\nexport interface PointTarget {\n kind: \"points\";\n series: number;\n /** World positions, stride `stride` floats */\n positions: Float32Array;\n stride: number;\n count: number;\n /** Diameters in CSS pixels (stride as positions, offset 3) or `null` */\n sized: boolean;\n defaultSize: number;\n /** Index in the series data of every drawn point (`null`: identity) */\n source: Uint32Array | null;\n /** Packed colors (offset 4 of the stride) or the series color */\n packed: Uint32Array | null;\n}\n\n/** Picking data of a surface: its (possibly resampled) world grid */\nexport interface SurfaceTarget {\n kind: \"surface\";\n series: number;\n rows: number;\n cols: number;\n /** World positions of the sampled vertices (x, y, z) */\n positions: Float32Array;\n /** Rows / columns of the data grid the samples come from */\n rowIndex: Int32Array;\n colIndex: Int32Array;\n}\n\n/** Picking data of bars: one world box per bar */\nexport interface BarTarget {\n kind: \"bars\";\n series: number;\n count: number;\n /** min x, y, z, max x, y, z per bar */\n boxes: Float32Array;\n}\n\nexport type PickTarget = PointTarget | SurfaceTarget | BarTarget;\n\nexport interface Geometry {\n items: Item3D[];\n targets: PickTarget[];\n /** Total number of drawn points / cells / bars (summary) */\n counts: number[];\n}\n\n// -------------------------------------------------------------- utilities\n\nlet nextId = 1;\nconst ids = new WeakMap<object, number>();\n/** Stable identity number of an object (data arrays) */\nexport const objectId = (value: object | null | undefined): number => {\n if (!value) return 0;\n let id = ids.get(value);\n if (id === undefined) {\n id = nextId++;\n ids.set(value, id);\n }\n return id;\n};\n\nconst colorKey = (c: Rgba) => c.map((v) => v.toFixed(4)).join(\",\");\n\nconst domainKey = (a: AxisModel) =>\n `${a.domain[0]},${a.domain[1]},${a.half},${a.categories?.length ?? -1}`;\n\nconst isFiniteNumber = (v: number) =>\n v === v && v !== Infinity && v !== -Infinity;\n\n/** Packs the scale color of `value` (NaN -> fallback) */\nconst scaleColor = (\n lut: ColorLut,\n domain: [number, number] | null,\n value: number,\n fallback: number,\n) => {\n if (!domain || !isFiniteNumber(value)) return fallback;\n return lut.packed[lutIndex(value, domain[0], domain[1])];\n};\n\n// ------------------------------------------------------------------ points\n\nconst buildPoints = (\n m: ScatterModel | LineModel,\n model: Model3D,\n colors: GeometryColors,\n defaultSize: number,\n): {\n data: ArrayBuffer;\n count: number;\n source: Uint32Array | null;\n sized: boolean;\n} => {\n const { cols } = m;\n const n = cols.count;\n const buffer = new ArrayBuffer(n * POINT_STRIDE);\n const f32 = new Float32Array(buffer);\n const u32 = new Uint32Array(buffer);\n const seriesColor = packColor(colors.series[m.index] ?? [0.5, 0.5, 0.5, 1]);\n const byScale = m.colorBy !== \"series\";\n const scaleSource = m.colorBy === \"value\" && cols.value ? cols.value : cols.z;\n const cache = new Map<string, number>();\n let source: Uint32Array | null = null;\n let count = 0;\n const { x: ax, y: ay, z: az } = model;\n // inline world mapping (hot loop for 1M points)\n const sx = (2 * ax.half) / (ax.domain[1] - ax.domain[0] || 1);\n const sy = (2 * ay.half) / (ay.domain[1] - ay.domain[0] || 1);\n const sz = (2 * az.half) / (az.domain[1] - az.domain[0] || 1);\n const ox = -ax.half - ax.domain[0] * sx;\n const oy = -ay.half - ay.domain[0] * sy;\n const oz = -az.half - az.domain[0] * sz;\n for (let i = 0; i < n; i++) {\n const x = cols.x[i];\n const y = cols.y[i];\n const z = cols.z[i];\n if (!isFiniteNumber(x) || !isFiniteNumber(y) || !isFiniteNumber(z)) {\n if (!source) {\n source = new Uint32Array(n);\n for (let k = 0; k < count; k++) source[k] = k;\n }\n continue;\n }\n if (source) source[count] = i;\n const o = count * 5;\n f32[o] = x * sx + ox;\n f32[o + 1] = y * sy + oy;\n f32[o + 2] = z * sz + oz;\n const size = cols.size ? cols.size[i] : NaN;\n f32[o + 3] = isFiniteNumber(size) ? size : defaultSize;\n const own = cols.colors?.[i];\n let color: number;\n if (own !== undefined) {\n let packed = cache.get(own);\n if (packed === undefined) {\n packed = packColor(colors.resolve(own));\n cache.set(own, packed);\n }\n color = packed;\n } else if (byScale) {\n color = scaleColor(\n colors.lut,\n model.colorDomain,\n scaleSource[i],\n seriesColor,\n );\n } else {\n color = seriesColor;\n }\n u32[o + 4] = color;\n count++;\n }\n return {\n data: buffer,\n count,\n source: source ? source.subarray(0, count) : null,\n sized: !!cols.size,\n };\n};\n\n// ----------------------------------------------------------------- surface\n\n/** Indices of the sampled rows / columns: every `step`, the last one included */\nconst sampleIndices = (count: number, max: number): Int32Array => {\n if (count <= max) {\n const all = new Int32Array(count);\n for (let i = 0; i < count; i++) all[i] = i;\n return all;\n }\n const out = new Int32Array(max);\n for (let i = 0; i < max; i++)\n out[i] = Math.round((i * (count - 1)) / (max - 1));\n return out;\n};\n\ninterface SurfaceMesh {\n positions: Float32Array;\n rowIndex: Int32Array;\n colIndex: Int32Array;\n mesh: MeshItem | null;\n}\n\nconst buildSurface = (\n m: SurfaceModel,\n model: Model3D,\n colors: GeometryColors,\n budget: GeometryBudget,\n key: string,\n version: number,\n): SurfaceMesh => {\n const { grid } = m;\n const rowIndex = sampleIndices(grid.rows, budget.maxGridSide);\n const colIndex = sampleIndices(grid.cols, budget.maxGridSide);\n const rows = rowIndex.length;\n const cols = colIndex.length;\n const n = rows * cols;\n const positions = new Float32Array(n * 3);\n for (let r = 0; r < rows; r++) {\n const gy = toWorld(model.y, grid.y[rowIndex[r]]);\n for (let c = 0; c < cols; c++) {\n const gx = toWorld(model.x, grid.x[colIndex[c]]);\n const h = grid.z[rowIndex[r] * grid.cols + colIndex[c]];\n const o = (r * cols + c) * 3;\n positions[o] = gx;\n positions[o + 1] = gy;\n positions[o + 2] = isFiniteNumber(h) ? toWorld(model.z, h) : NaN;\n }\n }\n if (m.series.fill === false) {\n return { positions, rowIndex, colIndex, mesh: null };\n }\n const buffer = new ArrayBuffer(n * VERTEX_STRIDE);\n const f32 = new Float32Array(buffer);\n const u32 = new Uint32Array(buffer);\n const seriesColor = packColor(colors.series[m.index] ?? [0.5, 0.5, 0.5, 1]);\n const byValue = m.colorBy === \"value\" && grid.value;\n const P = (r: number, c: number, k: number) =>\n positions[(r * cols + c) * 3 + k];\n const finite = (r: number, c: number) =>\n r >= 0 && r < rows && c >= 0 && c < cols && isFiniteNumber(P(r, c, 2));\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n const v = r * cols + c;\n const o = v * 7;\n f32[o] = P(r, c, 0);\n f32[o + 1] = P(r, c, 1);\n f32[o + 2] = isFiniteNumber(P(r, c, 2)) ? P(r, c, 2) : 0;\n // normal: cross product of the central (or one-sided) differences\n const c0 = finite(r, c - 1) ? c - 1 : c;\n const c1 = finite(r, c + 1) ? c + 1 : c;\n const r0 = finite(r - 1, c) ? r - 1 : r;\n const r1 = finite(r + 1, c) ? r + 1 : r;\n let nx = 0;\n let ny = 0;\n let nz = 1;\n if (finite(r, c) && c0 !== c1 && r0 !== r1) {\n const ux = P(r, c1, 0) - P(r, c0, 0);\n const uz = P(r, c1, 2) - P(r, c0, 2);\n const vy = P(r1, c, 1) - P(r0, c, 1);\n const vz = P(r1, c, 2) - P(r0, c, 2);\n // u = (ux, 0, uz), v = (0, vy, vz): u × v\n nx = -uz * vy;\n ny = -ux * vz;\n nz = ux * vy;\n const len = Math.hypot(nx, ny, nz) || 1;\n nx /= len;\n ny /= len;\n nz /= len;\n if (nz < 0) {\n nx = -nx;\n ny = -ny;\n nz = -nz;\n }\n }\n f32[o + 3] = nx;\n f32[o + 4] = ny;\n f32[o + 5] = nz;\n const gi = rowIndex[r] * grid.cols + colIndex[c];\n u32[o + 6] =\n m.colorBy === \"series\"\n ? seriesColor\n : scaleColor(\n colors.lut,\n model.colorDomain,\n byValue ? grid.value![gi] : grid.z[gi],\n seriesColor,\n );\n }\n }\n const indices = new Uint32Array((rows - 1) * (cols - 1) * 6);\n let k = 0;\n for (let r = 0; r < rows - 1; r++) {\n for (let c = 0; c < cols - 1; c++) {\n if (\n !finite(r, c) ||\n !finite(r, c + 1) ||\n !finite(r + 1, c) ||\n !finite(r + 1, c + 1)\n ) {\n continue;\n }\n const a = r * cols + c;\n const b = a + 1;\n const d = a + cols;\n const e = d + 1;\n indices[k++] = a;\n indices[k++] = b;\n indices[k++] = e;\n indices[k++] = a;\n indices[k++] = e;\n indices[k++] = d;\n }\n }\n return {\n positions,\n rowIndex,\n colIndex,\n mesh: {\n kind: \"mesh\",\n key,\n version,\n opacity: m.opacity,\n vertices: buffer,\n vertexCount: n,\n indices: indices.subarray(0, k),\n },\n };\n};\n\n/** Segment buffer from a flat list of world coordinates (6 per segment) and packed colors */\nconst segmentBuffer = (coords: number[], packed: number[]) => {\n const count = packed.length;\n const buffer = new ArrayBuffer(count * SEGMENT_STRIDE);\n const f32 = new Float32Array(buffer);\n const u32 = new Uint32Array(buffer);\n for (let i = 0; i < count; i++) {\n const o = i * 7;\n for (let j = 0; j < 6; j++) f32[o + j] = coords[i * 6 + j];\n u32[o + 6] = packed[i];\n }\n return { buffer, count };\n};\n\nconst MAX_WIRES = 64;\n\n/** 0, step, 2 step, … and the last index */\nexport const stepped = (count: number, step: number): number[] => {\n const out: number[] = [];\n for (let i = 0; i < count; i += step) out.push(i);\n if (count > 0 && out[out.length - 1] !== count - 1) out.push(count - 1);\n return out;\n};\n\nconst buildWireframe = (\n mesh: SurfaceMesh,\n options: Surface3DWireframeOptions,\n color: number,\n key: string,\n version: number,\n): LinesItem => {\n const rows = mesh.rowIndex.length;\n const cols = mesh.colIndex.length;\n const P = mesh.positions;\n const coords: number[] = [];\n const packed: number[] = [];\n const rowStep = Math.max(\n 1,\n Math.round(options.step ?? Math.ceil(rows / MAX_WIRES)),\n );\n const colStep = Math.max(\n 1,\n Math.round(options.step ?? Math.ceil(cols / MAX_WIRES)),\n );\n const segment = (a: number, b: number) => {\n if (!isFiniteNumber(P[a * 3 + 2]) || !isFiniteNumber(P[b * 3 + 2])) return;\n coords.push(\n P[a * 3],\n P[a * 3 + 1],\n P[a * 3 + 2],\n P[b * 3],\n P[b * 3 + 1],\n P[b * 3 + 2],\n );\n packed.push(color);\n };\n for (const r of stepped(rows, rowStep)) {\n for (let c = 0; c < cols - 1; c++) segment(r * cols + c, r * cols + c + 1);\n }\n for (const c of stepped(cols, colStep)) {\n for (let r = 0; r < rows - 1; r++)\n segment(r * cols + c, (r + 1) * cols + c);\n }\n const { buffer, count } = segmentBuffer(coords, packed);\n return {\n kind: \"lines\",\n key,\n version,\n opacity: 1,\n data: buffer,\n count,\n width: options.width ?? 1,\n bias: 0.0015,\n };\n};\n\n/** Levels of the contour lines */\nexport const contourLevels = (\n options: Surface3DContourOptions,\n min: number,\n max: number,\n): number[] => {\n if (options.levels) return options.levels.filter(isFiniteNumber);\n if (!(max > min)) return [];\n const count = Math.max(1, Math.round(options.count ?? 10));\n const nice = linearTicks(min, max, count).filter((v) => v > min && v < max);\n if (nice.length >= Math.max(2, count / 2)) return nice;\n return Array.from(\n { length: count },\n (_, i) => min + ((i + 0.5) * (max - min)) / count,\n );\n};\n\nconst buildContours = (\n m: SurfaceModel,\n model: Model3D,\n colors: GeometryColors,\n options: Surface3DContourOptions,\n key: string,\n version: number,\n): LinesItem | null => {\n const { grid } = m;\n const levels = contourLevels(options, grid.extent.z.min, grid.extent.z.max);\n if (!levels.length) return null;\n const floor = options.floor ?? true;\n const onSurface = options.surface ?? false;\n if (!floor && !onSurface) return null;\n const fixed = options.color ? packColor(colors.resolve(options.color)) : null;\n const floorZ = -model.z.half + 0.002;\n // the color of a level follows the scale when the surface is colored by height\n const domain =\n model.colorDomain && m.colorBy !== \"value\"\n ? model.colorDomain\n : ([grid.extent.z.min, grid.extent.z.max] as [number, number]);\n const coords: number[] = [];\n const packed: number[] = [];\n const xAt = (c: number) => {\n const i = Math.floor(c);\n const f = c - i;\n const a = grid.x[Math.min(i, grid.cols - 1)];\n const b = grid.x[Math.min(i + 1, grid.cols - 1)];\n return toWorld(model.x, a + (b - a) * f);\n };\n const yAt = (r: number) => {\n const i = Math.floor(r);\n const f = r - i;\n const a = grid.y[Math.min(i, grid.rows - 1)];\n const b = grid.y[Math.min(i + 1, grid.rows - 1)];\n return toWorld(model.y, a + (b - a) * f);\n };\n const segments: number[] = [];\n for (const level of levels) {\n segments.length = 0;\n contourSegments(grid.z, grid.rows, grid.cols, level, segments);\n if (!segments.length) continue;\n const color =\n fixed ?? colors.lut.packed[lutIndex(level, domain[0], domain[1])];\n const lz = toWorld(model.z, level);\n for (let i = 0; i < segments.length; i += 4) {\n const x0 = xAt(segments[i]);\n const y0 = yAt(segments[i + 1]);\n const x1 = xAt(segments[i + 2]);\n const y1 = yAt(segments[i + 3]);\n if (floor) {\n coords.push(x0, y0, floorZ, x1, y1, floorZ);\n packed.push(color);\n }\n if (onSurface) {\n coords.push(x0, y0, lz, x1, y1, lz);\n packed.push(color);\n }\n }\n }\n if (!packed.length) return null;\n const { buffer, count } = segmentBuffer(coords, packed);\n return {\n kind: \"lines\",\n key,\n version,\n opacity: 1,\n data: buffer,\n count,\n width: options.width ?? 1,\n bias: 0.002,\n };\n};\n\n// -------------------------------------------------------------------- bars\n\n/** Corners of the 6 faces (4 each, counterclockwise from outside) and their normals */\nconst FACES: readonly { n: [number, number, number]; c: number[] }[] = [\n { n: [0, 0, 1], c: [0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1] },\n { n: [0, 0, -1], c: [0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0] },\n { n: [1, 0, 0], c: [1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1] },\n { n: [-1, 0, 0], c: [0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0] },\n { n: [0, 1, 0], c: [0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0] },\n { n: [0, -1, 0], c: [0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1] },\n];\n\nconst buildBars = (\n m: BarModel,\n model: Model3D,\n colors: GeometryColors,\n key: string,\n version: number,\n): { mesh: MeshItem; target: BarTarget } => {\n const { bars } = m;\n const n = bars.count;\n const buffer = new ArrayBuffer(n * 24 * VERTEX_STRIDE);\n const f32 = new Float32Array(buffer);\n const u32 = new Uint32Array(buffer);\n const indices = new Uint32Array(n * 36);\n const boxes = new Float32Array(n * 6);\n const seriesColor = packColor(colors.series[m.index] ?? [0.5, 0.5, 0.5, 1]);\n const width = Math.max(0.05, Math.min(1, m.series.barWidth ?? 0.7));\n const cellX =\n (2 * model.x.half) / Math.max(1, model.x.domain[1] - model.x.domain[0]);\n const cellY =\n (2 * model.y.half) / Math.max(1, model.y.domain[1] - model.y.domain[0]);\n const hx = (cellX * width) / 2;\n const hy = (cellY * width) / 2;\n const cache = new Map<string, number>();\n let v = 0;\n let k = 0;\n for (let i = 0; i < n; i++) {\n const cx = toWorld(model.x, bars.xi[i]);\n const cy = toWorld(model.y, bars.yi[i]);\n const za = toWorld(model.z, bars.z0[i]);\n const zb = toWorld(model.z, bars.z1[i]);\n const lo: [number, number, number] = [cx - hx, cy - hy, Math.min(za, zb)];\n const hi: [number, number, number] = [cx + hx, cy + hy, Math.max(za, zb)];\n boxes.set([lo[0], lo[1], lo[2], hi[0], hi[1], hi[2]], i * 6);\n const own = bars.colors?.[i];\n let color: number;\n if (own !== undefined) {\n color = cache.get(own) ?? packColor(colors.resolve(own));\n cache.set(own, color);\n } else if (m.colorBy === \"series\") {\n color = seriesColor;\n } else {\n const value =\n m.colorBy === \"value\" && bars.value ? bars.value[i] : bars.z[i];\n color = scaleColor(colors.lut, model.colorDomain, value, seriesColor);\n }\n for (const face of FACES) {\n for (let j = 0; j < 4; j++) {\n const o = (v + j) * 7;\n f32[o] = face.c[j * 3] ? hi[0] : lo[0];\n f32[o + 1] = face.c[j * 3 + 1] ? hi[1] : lo[1];\n f32[o + 2] = face.c[j * 3 + 2] ? hi[2] : lo[2];\n f32[o + 3] = face.n[0];\n f32[o + 4] = face.n[1];\n f32[o + 5] = face.n[2];\n u32[o + 6] = color;\n }\n indices[k++] = v;\n indices[k++] = v + 1;\n indices[k++] = v + 2;\n indices[k++] = v;\n indices[k++] = v + 2;\n indices[k++] = v + 3;\n v += 4;\n }\n }\n return {\n mesh: {\n kind: \"mesh\",\n key,\n version,\n opacity: m.opacity,\n vertices: buffer,\n vertexCount: v,\n indices,\n },\n target: { kind: \"bars\", series: m.index, count: n, boxes },\n };\n};\n\n// ------------------------------------------------------------------- lines\n\nconst buildLine = (\n m: LineModel,\n points: { data: ArrayBuffer; count: number; source: Uint32Array | null },\n key: string,\n version: number,\n): LinesItem => {\n const f32 = new Float32Array(points.data);\n const u32 = new Uint32Array(points.data);\n const coords: number[] = [];\n const packed: number[] = [];\n const opacity = m.opacity;\n for (let i = 0; i < points.count - 1; i++) {\n // a gap in the data (NaN) breaks the line\n if (points.source && points.source[i + 1] !== points.source[i] + 1)\n continue;\n const a = i * 5;\n const b = a + 5;\n coords.push(f32[a], f32[a + 1], f32[a + 2], f32[b], f32[b + 1], f32[b + 2]);\n packed.push(u32[a + 4]);\n }\n const { buffer, count } = segmentBuffer(coords, packed);\n return {\n kind: \"lines\",\n key,\n version,\n opacity,\n data: buffer,\n count,\n width: m.series.lineWidth ?? 2,\n bias: 0,\n };\n};\n\n// -------------------------------------------------------------------- main\n\ninterface CacheEntry {\n signature: string;\n items: Item3D[];\n target: PickTarget[];\n count: number;\n}\n\n/** Builds the items of every visible series, reusing the unchanged ones */\nexport const createGeometryBuilder = () => {\n let cache = new Map<string, CacheEntry>();\n let version = 0;\n\n const signatureOf = (\n m: SeriesModel,\n model: Model3D,\n colors: GeometryColors,\n budget: GeometryBudget,\n lutId: number,\n ): string => {\n const s = m.series as unknown as Record<string, unknown>;\n const options = JSON.stringify({\n type: m.type,\n colorBy: m.colorBy,\n opacity: m.opacity,\n pointSize: s.pointSize,\n lineWidth: s.lineWidth,\n perspectiveSize: s.perspectiveSize,\n wireframe: s.wireframe,\n contours: s.contours,\n fill: s.fill,\n barWidth: s.barWidth,\n });\n return [\n objectId(m.series.data as object),\n options,\n domainKey(model.x),\n domainKey(model.y),\n domainKey(model.z),\n model.colorDomain?.join() ?? \"\",\n colorKey(colors.series[m.index] ?? [0, 0, 0, 0]),\n colorKey(colors.wire),\n lutId,\n budget.maxGridSide,\n // stacked bars depend on the other bar series\n m.type === \"bar\" ? stackHash(m) : \"\",\n ].join(\"|\");\n };\n\n return (\n model: Model3D,\n colors: GeometryColors,\n budget: GeometryBudget,\n lutId: number,\n ): Geometry => {\n const next = new Map<string, CacheEntry>();\n const items: Item3D[] = [];\n const targets: PickTarget[] = [];\n const counts: number[] = [];\n for (const m of model.series) {\n const id = `${m.index}:${m.id}`;\n if (m.hidden) {\n counts.push(0);\n // keep the geometry while hidden: showing it again is instant\n const kept = cache.get(id);\n if (kept) next.set(id, kept);\n continue;\n }\n const signature = signatureOf(m, model, colors, budget, lutId);\n let entry = cache.get(id);\n if (!entry || entry.signature !== signature) {\n entry = buildSeries(\n m,\n model,\n colors,\n budget,\n `s${id}`,\n ++version,\n signature,\n );\n }\n next.set(id, entry);\n items.push(...entry.items);\n targets.push(...entry.target);\n counts.push(entry.count);\n }\n cache = next;\n return { items, targets, counts };\n };\n};\n\nconst buildSeries = (\n m: SeriesModel,\n model: Model3D,\n colors: GeometryColors,\n budget: GeometryBudget,\n key: string,\n version: number,\n signature: string,\n): CacheEntry => {\n switch (m.type) {\n case \"surface\": {\n const mesh = buildSurface(\n m,\n model,\n colors,\n budget,\n `${key}:mesh`,\n version,\n );\n const items: Item3D[] = [];\n if (mesh.mesh) items.push(mesh.mesh);\n const wire = m.series.wireframe;\n if (wire) {\n const o = wire === true ? {} : wire;\n const color = o.color\n ? packColor(colors.resolve(o.color))\n : packColor(colors.wire);\n items.push(buildWireframe(mesh, o, color, `${key}:wire`, version));\n }\n const contours = m.series.contours;\n if (contours) {\n const lines = buildContours(\n m,\n model,\n colors,\n contours === true ? {} : contours,\n `${key}:contours`,\n version,\n );\n if (lines) items.push(lines);\n }\n return {\n signature,\n items,\n target: [\n {\n kind: \"surface\",\n series: m.index,\n rows: mesh.rowIndex.length,\n cols: mesh.colIndex.length,\n positions: mesh.positions,\n rowIndex: mesh.rowIndex,\n colIndex: mesh.colIndex,\n },\n ],\n count: m.grid.rows * m.grid.cols,\n };\n }\n case \"bar\": {\n const { mesh, target } = buildBars(\n m,\n model,\n colors,\n `${key}:bars`,\n version,\n );\n return {\n signature,\n items: [mesh],\n target: [target],\n count: m.bars.count,\n };\n }\n case \"line\": {\n const size = m.series.pointSize ?? 0;\n const points = buildPoints(m, model, colors, size);\n const items: Item3D[] = [buildLine(m, points, `${key}:line`, version)];\n if (size > 0) {\n items.push({\n kind: \"points\",\n key: `${key}:points`,\n version,\n opacity: m.opacity,\n data: points.data,\n count: points.count,\n perspective: false,\n } satisfies PointsItem);\n }\n return {\n signature,\n items,\n target: [\n pointTarget(m.index, points, Math.max(size, m.series.lineWidth ?? 2)),\n ],\n count: points.count,\n };\n }\n default: {\n const size = m.series.pointSize ?? 6;\n const points = buildPoints(m, model, colors, size);\n return {\n signature,\n items: [\n {\n kind: \"points\",\n key: `${key}:points`,\n version,\n opacity: m.opacity,\n data: points.data,\n count: points.count,\n perspective: m.series.perspectiveSize ?? true,\n },\n ],\n target: [pointTarget(m.index, points, size)],\n count: points.count,\n };\n }\n }\n};\n\nconst pointTarget = (\n series: number,\n points: {\n data: ArrayBuffer;\n count: number;\n source: Uint32Array | null;\n sized: boolean;\n },\n defaultSize: number,\n): PointTarget => ({\n kind: \"points\",\n series,\n positions: new Float32Array(points.data),\n stride: 5,\n count: points.count,\n sized: points.sized,\n defaultSize,\n source: points.source,\n packed: new Uint32Array(points.data),\n});\n\nconst stackHash = (m: BarModel) => {\n let hash = m.bars.count;\n for (let i = 0; i < m.bars.count; i++) {\n hash = (hash * 31 + m.bars.z0[i] * 997 + m.bars.z1[i] * 13) % 1e12;\n }\n return String(hash);\n};\n\n/** CSS color of a packed color */\nexport const packedCss = (packed: number): string =>\n toCss([\n (packed & 0xff) / 255,\n ((packed >>> 8) & 0xff) / 255,\n ((packed >>> 16) & 0xff) / 255,\n ((packed >>> 24) & 0xff) / 255,\n ]);\n"],"mappings":"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"}
1
+ {"version":3,"file":"geometry.js","names":["GPU_BUDGET","CPU_BUDGET","nextId","ids","objectId","value","id","colorKey","c","v","domainKey","a","isFiniteNumber","scaleColor","domain","fallback","lut","lutIndex","packRgb","rgb","buildPoints","m","n","cols","stride","buffer","f32","u32","seriesColor","packColor","colors","byScale","scaleSource","cache","source","count","ax","ay","az","model","sx","sy","sz","ox","oy","oz","i","x","y","z","k","o","size","defaultSize","own","color","packed","sampleIndices","max","all","out","buildSurface","rowIndex","grid","budget","colIndex","rows","positions","r","gy","toWorld","gx","h","byValue","P","finite","c0","c1","r0","r1","nx","ny","nz","ux","uz","vy","vz","len","gi","indices","b","d","e","segmentBuffer","j","coords","MAX_WIRES","stepped","step","buildWireframe","mesh","rowStep","options","colStep","segment","contourLevels","min","nice","linearTicks","buildContours","levels","floor","onSurface","fixed","floorZ","xAt","f","yAt","segments","level","contourSegments","lz","x0","y0","x1","y1","FACES","buildBars","bars","boxes","width","cellX","cellY","hx","hy","cx","cy","za","zb","lo","hi","face","buildLine","points","opacity","createGeometryBuilder","version","signatureOf","s","lutId","stackHash","next","items","targets","counts","total","kept","signature","entry","buildSeries","key","wire","contours","lines","target","pointTarget","style","hash","packedCss","toCss"],"sources":["../../../../../charts/src/engine/three-d/geometry.ts"],"sourcesContent":["// Model -> GPU items (points, meshes, line segments) and the CPU data the\n// hover picking needs. Items keep their version (no re-upload) while their\n// signature is unchanged.\n\nimport { packColor, toCss, type Rgba } from \"../color\";\nimport { linearTicks } from \"../scale\";\nimport { contourSegments } from \"./contours\";\nimport { lutIndex, type ColorLut } from \"./colormap\";\nimport {\n toWorld,\n type AxisModel,\n type BarModel,\n type LineModel,\n type Model3D,\n type ScatterModel,\n type SeriesModel,\n type SurfaceModel,\n} from \"./model\";\nimport {\n POINT_DISC,\n POINT_GLOW,\n POINT_SPHERE,\n POINT_STRIDE,\n SEGMENT_STRIDE,\n VERTEX_STRIDE,\n type Item3D,\n type LinesItem,\n type MeshItem,\n type PointsItem,\n} from \"./render-types\";\nimport type {\n Surface3DContourOptions,\n Surface3DWireframeOptions,\n} from \"./types\";\n\n/** Colors the geometry needs, resolved by the chart */\nexport interface GeometryColors {\n /** Color of every series (option or palette) */\n series: Rgba[];\n /** Resolves a CSS color of the data */\n resolve: (value: string) => Rgba;\n /** Sampled color scale */\n lut: ColorLut;\n /** Default wireframe color */\n wire: Rgba;\n}\n\n/** Limits of the CPU (Canvas2D) backend */\nexport interface GeometryBudget {\n /** Largest surface grid side drawn (resampled above) */\n maxGridSide: number;\n /**\n * Largest number of scatter dots drawn (every series together): above,\n * the clouds keep 1 point out of n, and only the kept points can be\n * hovered\n */\n maxPoints: number;\n}\n\nexport const GPU_BUDGET: GeometryBudget = {\n maxGridSide: 2048,\n maxPoints: Infinity,\n};\nexport const CPU_BUDGET: GeometryBudget = {\n maxGridSide: 72,\n maxPoints: 40_000,\n};\n\n/** Picking data of a point cloud (scatter dots, line vertices) */\nexport interface PointTarget {\n kind: \"points\";\n series: number;\n /** World positions, stride `stride` floats */\n positions: Float32Array;\n stride: number;\n count: number;\n /** Diameters in CSS pixels (stride as positions, offset 3) or `null` */\n sized: boolean;\n defaultSize: number;\n /** Index in the series data of every drawn point (`null`: identity) */\n source: Uint32Array | null;\n /** Packed colors (offset 4 of the stride) or the series color */\n packed: Uint32Array | null;\n}\n\n/** Picking data of a surface: its (possibly resampled) world grid */\nexport interface SurfaceTarget {\n kind: \"surface\";\n series: number;\n rows: number;\n cols: number;\n /** World positions of the sampled vertices (x, y, z) */\n positions: Float32Array;\n /** Rows / columns of the data grid the samples come from */\n rowIndex: Int32Array;\n colIndex: Int32Array;\n}\n\n/** Picking data of bars: one world box per bar */\nexport interface BarTarget {\n kind: \"bars\";\n series: number;\n count: number;\n /** min x, y, z, max x, y, z per bar */\n boxes: Float32Array;\n}\n\nexport type PickTarget = PointTarget | SurfaceTarget | BarTarget;\n\nexport interface Geometry {\n items: Item3D[];\n targets: PickTarget[];\n /** Total number of drawn points / cells / bars (summary) */\n counts: number[];\n}\n\n// -------------------------------------------------------------- utilities\n\nlet nextId = 1;\nconst ids = new WeakMap<object, number>();\n/** Stable identity number of an object (data arrays) */\nexport const objectId = (value: object | null | undefined): number => {\n if (!value) return 0;\n let id = ids.get(value);\n if (id === undefined) {\n id = nextId++;\n ids.set(value, id);\n }\n return id;\n};\n\nconst colorKey = (c: Rgba) => c.map((v) => v.toFixed(4)).join(\",\");\n\nconst domainKey = (a: AxisModel) =>\n `${a.domain[0]},${a.domain[1]},${a.half},${a.categories?.length ?? -1}`;\n\nconst isFiniteNumber = (v: number) =>\n v === v && v !== Infinity && v !== -Infinity;\n\n/** Packs the scale color of `value` (NaN -> fallback) */\nconst scaleColor = (\n lut: ColorLut,\n domain: [number, number] | null,\n value: number,\n fallback: number,\n) => {\n if (!domain || !isFiniteNumber(value)) return fallback;\n return lut.packed[lutIndex(value, domain[0], domain[1])];\n};\n\n// ------------------------------------------------------------------ points\n\n/** `0xRRGGBB` -> packed opaque color (r in the low byte) */\nconst packRgb = (rgb: number) =>\n (0xff000000 |\n ((rgb & 0xff) << 16) |\n (rgb & 0xff00) |\n ((rgb >>> 16) & 0xff)) >>>\n 0;\n\nconst buildPoints = (\n m: ScatterModel | LineModel,\n model: Model3D,\n colors: GeometryColors,\n defaultSize: number,\n /** Keeps 1 point out of `stride` (CPU backend) */\n stride = 1,\n): {\n data: ArrayBuffer;\n count: number;\n source: Uint32Array | null;\n sized: boolean;\n} => {\n const { cols } = m;\n const n = Math.ceil(cols.count / stride);\n const buffer = new ArrayBuffer(n * POINT_STRIDE);\n const f32 = new Float32Array(buffer);\n const u32 = new Uint32Array(buffer);\n const seriesColor = packColor(colors.series[m.index] ?? [0.5, 0.5, 0.5, 1]);\n const byScale = m.colorBy !== \"series\";\n const scaleSource = m.colorBy === \"value\" && cols.value ? cols.value : cols.z;\n const cache = new Map<string, number>();\n let source: Uint32Array | null = null;\n if (stride > 1) source = new Uint32Array(n);\n let count = 0;\n const { x: ax, y: ay, z: az } = model;\n // inline world mapping (hot loop for 1M points)\n const sx = (2 * ax.half) / (ax.domain[1] - ax.domain[0] || 1);\n const sy = (2 * ay.half) / (ay.domain[1] - ay.domain[0] || 1);\n const sz = (2 * az.half) / (az.domain[1] - az.domain[0] || 1);\n const ox = -ax.half - ax.domain[0] * sx;\n const oy = -ay.half - ay.domain[0] * sy;\n const oz = -az.half - az.domain[0] * sz;\n for (let i = 0; i < cols.count; i += stride) {\n const x = cols.x[i];\n const y = cols.y[i];\n const z = cols.z[i];\n if (!isFiniteNumber(x) || !isFiniteNumber(y) || !isFiniteNumber(z)) {\n if (!source) {\n source = new Uint32Array(n);\n for (let k = 0; k < count; k++) source[k] = k;\n }\n continue;\n }\n if (source) source[count] = i;\n const o = count * 5;\n f32[o] = x * sx + ox;\n f32[o + 1] = y * sy + oy;\n f32[o + 2] = z * sz + oz;\n const size = cols.size ? cols.size[i] : NaN;\n f32[o + 3] = isFiniteNumber(size) ? size : defaultSize;\n const own = cols.colors?.[i];\n const rgb = cols.rgb ? cols.rgb[i] : NaN;\n let color: number;\n if (own !== undefined) {\n let packed = cache.get(own);\n if (packed === undefined) {\n packed = packColor(colors.resolve(own));\n cache.set(own, packed);\n }\n color = packed;\n } else if (isFiniteNumber(rgb)) {\n color = packRgb(rgb);\n } else if (byScale) {\n color = scaleColor(\n colors.lut,\n model.colorDomain,\n scaleSource[i],\n seriesColor,\n );\n } else {\n color = seriesColor;\n }\n u32[o + 4] = color;\n count++;\n }\n return {\n data: buffer,\n count,\n source: source ? source.subarray(0, count) : null,\n sized: !!cols.size,\n };\n};\n\n// ----------------------------------------------------------------- surface\n\n/** Indices of the sampled rows / columns: every `step`, the last one included */\nconst sampleIndices = (count: number, max: number): Int32Array => {\n if (count <= max) {\n const all = new Int32Array(count);\n for (let i = 0; i < count; i++) all[i] = i;\n return all;\n }\n const out = new Int32Array(max);\n for (let i = 0; i < max; i++)\n out[i] = Math.round((i * (count - 1)) / (max - 1));\n return out;\n};\n\ninterface SurfaceMesh {\n positions: Float32Array;\n rowIndex: Int32Array;\n colIndex: Int32Array;\n mesh: MeshItem | null;\n}\n\nconst buildSurface = (\n m: SurfaceModel,\n model: Model3D,\n colors: GeometryColors,\n budget: GeometryBudget,\n key: string,\n version: number,\n): SurfaceMesh => {\n const { grid } = m;\n const rowIndex = sampleIndices(grid.rows, budget.maxGridSide);\n const colIndex = sampleIndices(grid.cols, budget.maxGridSide);\n const rows = rowIndex.length;\n const cols = colIndex.length;\n const n = rows * cols;\n const positions = new Float32Array(n * 3);\n for (let r = 0; r < rows; r++) {\n const gy = toWorld(model.y, grid.y[rowIndex[r]]);\n for (let c = 0; c < cols; c++) {\n const gx = toWorld(model.x, grid.x[colIndex[c]]);\n const h = grid.z[rowIndex[r] * grid.cols + colIndex[c]];\n const o = (r * cols + c) * 3;\n positions[o] = gx;\n positions[o + 1] = gy;\n positions[o + 2] = isFiniteNumber(h) ? toWorld(model.z, h) : NaN;\n }\n }\n if (m.series.fill === false) {\n return { positions, rowIndex, colIndex, mesh: null };\n }\n const buffer = new ArrayBuffer(n * VERTEX_STRIDE);\n const f32 = new Float32Array(buffer);\n const u32 = new Uint32Array(buffer);\n const seriesColor = packColor(colors.series[m.index] ?? [0.5, 0.5, 0.5, 1]);\n const byValue = m.colorBy === \"value\" && grid.value;\n const P = (r: number, c: number, k: number) =>\n positions[(r * cols + c) * 3 + k];\n const finite = (r: number, c: number) =>\n r >= 0 && r < rows && c >= 0 && c < cols && isFiniteNumber(P(r, c, 2));\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n const v = r * cols + c;\n const o = v * 7;\n f32[o] = P(r, c, 0);\n f32[o + 1] = P(r, c, 1);\n f32[o + 2] = isFiniteNumber(P(r, c, 2)) ? P(r, c, 2) : 0;\n // normal: cross product of the central (or one-sided) differences\n const c0 = finite(r, c - 1) ? c - 1 : c;\n const c1 = finite(r, c + 1) ? c + 1 : c;\n const r0 = finite(r - 1, c) ? r - 1 : r;\n const r1 = finite(r + 1, c) ? r + 1 : r;\n let nx = 0;\n let ny = 0;\n let nz = 1;\n if (finite(r, c) && c0 !== c1 && r0 !== r1) {\n const ux = P(r, c1, 0) - P(r, c0, 0);\n const uz = P(r, c1, 2) - P(r, c0, 2);\n const vy = P(r1, c, 1) - P(r0, c, 1);\n const vz = P(r1, c, 2) - P(r0, c, 2);\n // u = (ux, 0, uz), v = (0, vy, vz): u × v\n nx = -uz * vy;\n ny = -ux * vz;\n nz = ux * vy;\n const len = Math.hypot(nx, ny, nz) || 1;\n nx /= len;\n ny /= len;\n nz /= len;\n if (nz < 0) {\n nx = -nx;\n ny = -ny;\n nz = -nz;\n }\n }\n f32[o + 3] = nx;\n f32[o + 4] = ny;\n f32[o + 5] = nz;\n const gi = rowIndex[r] * grid.cols + colIndex[c];\n u32[o + 6] =\n m.colorBy === \"series\"\n ? seriesColor\n : scaleColor(\n colors.lut,\n model.colorDomain,\n byValue ? grid.value![gi] : grid.z[gi],\n seriesColor,\n );\n }\n }\n const indices = new Uint32Array((rows - 1) * (cols - 1) * 6);\n let k = 0;\n for (let r = 0; r < rows - 1; r++) {\n for (let c = 0; c < cols - 1; c++) {\n if (\n !finite(r, c) ||\n !finite(r, c + 1) ||\n !finite(r + 1, c) ||\n !finite(r + 1, c + 1)\n ) {\n continue;\n }\n const a = r * cols + c;\n const b = a + 1;\n const d = a + cols;\n const e = d + 1;\n indices[k++] = a;\n indices[k++] = b;\n indices[k++] = e;\n indices[k++] = a;\n indices[k++] = e;\n indices[k++] = d;\n }\n }\n return {\n positions,\n rowIndex,\n colIndex,\n mesh: {\n kind: \"mesh\",\n key,\n version,\n opacity: m.opacity,\n vertices: buffer,\n vertexCount: n,\n indices: indices.subarray(0, k),\n },\n };\n};\n\n/** Segment buffer from a flat list of world coordinates (6 per segment) and packed colors */\nconst segmentBuffer = (coords: number[], packed: number[]) => {\n const count = packed.length;\n const buffer = new ArrayBuffer(count * SEGMENT_STRIDE);\n const f32 = new Float32Array(buffer);\n const u32 = new Uint32Array(buffer);\n for (let i = 0; i < count; i++) {\n const o = i * 7;\n for (let j = 0; j < 6; j++) f32[o + j] = coords[i * 6 + j];\n u32[o + 6] = packed[i];\n }\n return { buffer, count };\n};\n\nconst MAX_WIRES = 64;\n\n/** 0, step, 2 step, … and the last index */\nexport const stepped = (count: number, step: number): number[] => {\n const out: number[] = [];\n for (let i = 0; i < count; i += step) out.push(i);\n if (count > 0 && out[out.length - 1] !== count - 1) out.push(count - 1);\n return out;\n};\n\nconst buildWireframe = (\n mesh: SurfaceMesh,\n options: Surface3DWireframeOptions,\n color: number,\n key: string,\n version: number,\n): LinesItem => {\n const rows = mesh.rowIndex.length;\n const cols = mesh.colIndex.length;\n const P = mesh.positions;\n const coords: number[] = [];\n const packed: number[] = [];\n const rowStep = Math.max(\n 1,\n Math.round(options.step ?? Math.ceil(rows / MAX_WIRES)),\n );\n const colStep = Math.max(\n 1,\n Math.round(options.step ?? Math.ceil(cols / MAX_WIRES)),\n );\n const segment = (a: number, b: number) => {\n if (!isFiniteNumber(P[a * 3 + 2]) || !isFiniteNumber(P[b * 3 + 2])) return;\n coords.push(\n P[a * 3],\n P[a * 3 + 1],\n P[a * 3 + 2],\n P[b * 3],\n P[b * 3 + 1],\n P[b * 3 + 2],\n );\n packed.push(color);\n };\n for (const r of stepped(rows, rowStep)) {\n for (let c = 0; c < cols - 1; c++) segment(r * cols + c, r * cols + c + 1);\n }\n for (const c of stepped(cols, colStep)) {\n for (let r = 0; r < rows - 1; r++)\n segment(r * cols + c, (r + 1) * cols + c);\n }\n const { buffer, count } = segmentBuffer(coords, packed);\n return {\n kind: \"lines\",\n key,\n version,\n opacity: 1,\n data: buffer,\n count,\n width: options.width ?? 1,\n bias: 0.0015,\n };\n};\n\n/** Levels of the contour lines */\nexport const contourLevels = (\n options: Surface3DContourOptions,\n min: number,\n max: number,\n): number[] => {\n if (options.levels) return options.levels.filter(isFiniteNumber);\n if (!(max > min)) return [];\n const count = Math.max(1, Math.round(options.count ?? 10));\n const nice = linearTicks(min, max, count).filter((v) => v > min && v < max);\n if (nice.length >= Math.max(2, count / 2)) return nice;\n return Array.from(\n { length: count },\n (_, i) => min + ((i + 0.5) * (max - min)) / count,\n );\n};\n\nconst buildContours = (\n m: SurfaceModel,\n model: Model3D,\n colors: GeometryColors,\n options: Surface3DContourOptions,\n key: string,\n version: number,\n): LinesItem | null => {\n const { grid } = m;\n const levels = contourLevels(options, grid.extent.z.min, grid.extent.z.max);\n if (!levels.length) return null;\n const floor = options.floor ?? true;\n const onSurface = options.surface ?? false;\n if (!floor && !onSurface) return null;\n const fixed = options.color ? packColor(colors.resolve(options.color)) : null;\n const floorZ = -model.z.half + 0.002;\n // the color of a level follows the scale when the surface is colored by height\n const domain =\n model.colorDomain && m.colorBy !== \"value\"\n ? model.colorDomain\n : ([grid.extent.z.min, grid.extent.z.max] as [number, number]);\n const coords: number[] = [];\n const packed: number[] = [];\n const xAt = (c: number) => {\n const i = Math.floor(c);\n const f = c - i;\n const a = grid.x[Math.min(i, grid.cols - 1)];\n const b = grid.x[Math.min(i + 1, grid.cols - 1)];\n return toWorld(model.x, a + (b - a) * f);\n };\n const yAt = (r: number) => {\n const i = Math.floor(r);\n const f = r - i;\n const a = grid.y[Math.min(i, grid.rows - 1)];\n const b = grid.y[Math.min(i + 1, grid.rows - 1)];\n return toWorld(model.y, a + (b - a) * f);\n };\n const segments: number[] = [];\n for (const level of levels) {\n segments.length = 0;\n contourSegments(grid.z, grid.rows, grid.cols, level, segments);\n if (!segments.length) continue;\n const color =\n fixed ?? colors.lut.packed[lutIndex(level, domain[0], domain[1])];\n const lz = toWorld(model.z, level);\n for (let i = 0; i < segments.length; i += 4) {\n const x0 = xAt(segments[i]);\n const y0 = yAt(segments[i + 1]);\n const x1 = xAt(segments[i + 2]);\n const y1 = yAt(segments[i + 3]);\n if (floor) {\n coords.push(x0, y0, floorZ, x1, y1, floorZ);\n packed.push(color);\n }\n if (onSurface) {\n coords.push(x0, y0, lz, x1, y1, lz);\n packed.push(color);\n }\n }\n }\n if (!packed.length) return null;\n const { buffer, count } = segmentBuffer(coords, packed);\n return {\n kind: \"lines\",\n key,\n version,\n opacity: 1,\n data: buffer,\n count,\n width: options.width ?? 1,\n bias: 0.002,\n };\n};\n\n// -------------------------------------------------------------------- bars\n\n/** Corners of the 6 faces (4 each, counterclockwise from outside) and their normals */\nconst FACES: readonly { n: [number, number, number]; c: number[] }[] = [\n { n: [0, 0, 1], c: [0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1] },\n { n: [0, 0, -1], c: [0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0] },\n { n: [1, 0, 0], c: [1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1] },\n { n: [-1, 0, 0], c: [0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0] },\n { n: [0, 1, 0], c: [0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0] },\n { n: [0, -1, 0], c: [0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1] },\n];\n\nconst buildBars = (\n m: BarModel,\n model: Model3D,\n colors: GeometryColors,\n key: string,\n version: number,\n): { mesh: MeshItem; target: BarTarget } => {\n const { bars } = m;\n const n = bars.count;\n const buffer = new ArrayBuffer(n * 24 * VERTEX_STRIDE);\n const f32 = new Float32Array(buffer);\n const u32 = new Uint32Array(buffer);\n const indices = new Uint32Array(n * 36);\n const boxes = new Float32Array(n * 6);\n const seriesColor = packColor(colors.series[m.index] ?? [0.5, 0.5, 0.5, 1]);\n const width = Math.max(0.05, Math.min(1, m.series.barWidth ?? 0.7));\n const cellX =\n (2 * model.x.half) / Math.max(1, model.x.domain[1] - model.x.domain[0]);\n const cellY =\n (2 * model.y.half) / Math.max(1, model.y.domain[1] - model.y.domain[0]);\n const hx = (cellX * width) / 2;\n const hy = (cellY * width) / 2;\n const cache = new Map<string, number>();\n let v = 0;\n let k = 0;\n for (let i = 0; i < n; i++) {\n const cx = toWorld(model.x, bars.xi[i]);\n const cy = toWorld(model.y, bars.yi[i]);\n const za = toWorld(model.z, bars.z0[i]);\n const zb = toWorld(model.z, bars.z1[i]);\n const lo: [number, number, number] = [cx - hx, cy - hy, Math.min(za, zb)];\n const hi: [number, number, number] = [cx + hx, cy + hy, Math.max(za, zb)];\n boxes.set([lo[0], lo[1], lo[2], hi[0], hi[1], hi[2]], i * 6);\n const own = bars.colors?.[i];\n let color: number;\n if (own !== undefined) {\n color = cache.get(own) ?? packColor(colors.resolve(own));\n cache.set(own, color);\n } else if (m.colorBy === \"series\") {\n color = seriesColor;\n } else {\n const value =\n m.colorBy === \"value\" && bars.value ? bars.value[i] : bars.z[i];\n color = scaleColor(colors.lut, model.colorDomain, value, seriesColor);\n }\n for (const face of FACES) {\n for (let j = 0; j < 4; j++) {\n const o = (v + j) * 7;\n f32[o] = face.c[j * 3] ? hi[0] : lo[0];\n f32[o + 1] = face.c[j * 3 + 1] ? hi[1] : lo[1];\n f32[o + 2] = face.c[j * 3 + 2] ? hi[2] : lo[2];\n f32[o + 3] = face.n[0];\n f32[o + 4] = face.n[1];\n f32[o + 5] = face.n[2];\n u32[o + 6] = color;\n }\n indices[k++] = v;\n indices[k++] = v + 1;\n indices[k++] = v + 2;\n indices[k++] = v;\n indices[k++] = v + 2;\n indices[k++] = v + 3;\n v += 4;\n }\n }\n return {\n mesh: {\n kind: \"mesh\",\n key,\n version,\n opacity: m.opacity,\n vertices: buffer,\n vertexCount: v,\n indices,\n },\n target: { kind: \"bars\", series: m.index, count: n, boxes },\n };\n};\n\n// ------------------------------------------------------------------- lines\n\nconst buildLine = (\n m: LineModel,\n points: { data: ArrayBuffer; count: number; source: Uint32Array | null },\n key: string,\n version: number,\n): LinesItem => {\n const f32 = new Float32Array(points.data);\n const u32 = new Uint32Array(points.data);\n const coords: number[] = [];\n const packed: number[] = [];\n const opacity = m.opacity;\n for (let i = 0; i < points.count - 1; i++) {\n // a gap in the data (NaN) breaks the line\n if (points.source && points.source[i + 1] !== points.source[i] + 1)\n continue;\n const a = i * 5;\n const b = a + 5;\n coords.push(f32[a], f32[a + 1], f32[a + 2], f32[b], f32[b + 1], f32[b + 2]);\n packed.push(u32[a + 4]);\n }\n const { buffer, count } = segmentBuffer(coords, packed);\n return {\n kind: \"lines\",\n key,\n version,\n opacity,\n data: buffer,\n count,\n width: m.series.lineWidth ?? 2,\n bias: 0,\n };\n};\n\n// -------------------------------------------------------------------- main\n\ninterface CacheEntry {\n signature: string;\n items: Item3D[];\n target: PickTarget[];\n count: number;\n}\n\n/** Builds the items of every visible series, reusing the unchanged ones */\nexport const createGeometryBuilder = () => {\n let cache = new Map<string, CacheEntry>();\n let version = 0;\n\n const signatureOf = (\n m: SeriesModel,\n model: Model3D,\n colors: GeometryColors,\n budget: GeometryBudget,\n lutId: number,\n stride: number,\n ): string => {\n const s = m.series as unknown as Record<string, unknown>;\n const options = JSON.stringify({\n type: m.type,\n colorBy: m.colorBy,\n opacity: m.opacity,\n pointSize: s.pointSize,\n pointStyle: s.pointStyle,\n blend: s.blend,\n lineWidth: s.lineWidth,\n perspectiveSize: s.perspectiveSize,\n wireframe: s.wireframe,\n contours: s.contours,\n fill: s.fill,\n barWidth: s.barWidth,\n });\n return [\n objectId(m.series.data as object),\n options,\n domainKey(model.x),\n domainKey(model.y),\n domainKey(model.z),\n model.colorDomain?.join() ?? \"\",\n colorKey(colors.series[m.index] ?? [0, 0, 0, 0]),\n colorKey(colors.wire),\n lutId,\n budget.maxGridSide,\n m.type === \"scatter\" ? stride : 1,\n // stacked bars depend on the other bar series\n m.type === \"bar\" ? stackHash(m) : \"\",\n ].join(\"|\");\n };\n\n return (\n model: Model3D,\n colors: GeometryColors,\n budget: GeometryBudget,\n lutId: number,\n ): Geometry => {\n const next = new Map<string, CacheEntry>();\n const items: Item3D[] = [];\n const targets: PickTarget[] = [];\n const counts: number[] = [];\n // the CPU backend thins every cloud by the same stride\n let total = 0;\n for (const m of model.series)\n if (m.type === \"scatter\" && !m.hidden) total += m.cols.count;\n const stride = Math.max(1, Math.ceil(total / budget.maxPoints));\n for (const m of model.series) {\n const id = `${m.index}:${m.id}`;\n if (m.hidden) {\n counts.push(0);\n // keep the geometry while hidden: showing it again is instant\n const kept = cache.get(id);\n if (kept) next.set(id, kept);\n continue;\n }\n const signature = signatureOf(m, model, colors, budget, lutId, stride);\n let entry = cache.get(id);\n if (!entry || entry.signature !== signature) {\n entry = buildSeries(\n m,\n model,\n colors,\n budget,\n `s${id}`,\n ++version,\n signature,\n stride,\n );\n }\n next.set(id, entry);\n items.push(...entry.items);\n targets.push(...entry.target);\n counts.push(entry.count);\n }\n cache = next;\n return { items, targets, counts };\n };\n};\n\nconst buildSeries = (\n m: SeriesModel,\n model: Model3D,\n colors: GeometryColors,\n budget: GeometryBudget,\n key: string,\n version: number,\n signature: string,\n /** Thinning of the scatter clouds (CPU backend) */\n stride = 1,\n): CacheEntry => {\n switch (m.type) {\n case \"surface\": {\n const mesh = buildSurface(\n m,\n model,\n colors,\n budget,\n `${key}:mesh`,\n version,\n );\n const items: Item3D[] = [];\n if (mesh.mesh) items.push(mesh.mesh);\n const wire = m.series.wireframe;\n if (wire) {\n const o = wire === true ? {} : wire;\n const color = o.color\n ? packColor(colors.resolve(o.color))\n : packColor(colors.wire);\n items.push(buildWireframe(mesh, o, color, `${key}:wire`, version));\n }\n const contours = m.series.contours;\n if (contours) {\n const lines = buildContours(\n m,\n model,\n colors,\n contours === true ? {} : contours,\n `${key}:contours`,\n version,\n );\n if (lines) items.push(lines);\n }\n return {\n signature,\n items,\n target: [\n {\n kind: \"surface\",\n series: m.index,\n rows: mesh.rowIndex.length,\n cols: mesh.colIndex.length,\n positions: mesh.positions,\n rowIndex: mesh.rowIndex,\n colIndex: mesh.colIndex,\n },\n ],\n count: m.grid.rows * m.grid.cols,\n };\n }\n case \"bar\": {\n const { mesh, target } = buildBars(\n m,\n model,\n colors,\n `${key}:bars`,\n version,\n );\n return {\n signature,\n items: [mesh],\n target: [target],\n count: m.bars.count,\n };\n }\n case \"line\": {\n const size = m.series.pointSize ?? 0;\n const points = buildPoints(m, model, colors, size);\n const items: Item3D[] = [buildLine(m, points, `${key}:line`, version)];\n if (size > 0) {\n items.push({\n kind: \"points\",\n key: `${key}:points`,\n version,\n opacity: m.opacity,\n data: points.data,\n count: points.count,\n perspective: false,\n } satisfies PointsItem);\n }\n return {\n signature,\n items,\n target: [\n pointTarget(m.index, points, Math.max(size, m.series.lineWidth ?? 2)),\n ],\n count: points.count,\n };\n }\n default: {\n const size = m.series.pointSize ?? 6;\n const points = buildPoints(m, model, colors, size, stride);\n const style = m.series.pointStyle;\n return {\n signature,\n items: [\n {\n kind: \"points\",\n key: `${key}:points`,\n version,\n opacity: m.opacity,\n data: points.data,\n count: points.count,\n perspective: m.series.perspectiveSize ?? true,\n style:\n style === \"glow\"\n ? POINT_GLOW\n : style === \"disc\"\n ? POINT_DISC\n : POINT_SPHERE,\n additive: m.series.blend === \"additive\",\n thinned: stride,\n },\n ],\n target: [pointTarget(m.index, points, size)],\n // the size of the data, thinned or not\n count: stride > 1 ? m.cols.count : points.count,\n };\n }\n }\n};\n\nconst pointTarget = (\n series: number,\n points: {\n data: ArrayBuffer;\n count: number;\n source: Uint32Array | null;\n sized: boolean;\n },\n defaultSize: number,\n): PointTarget => ({\n kind: \"points\",\n series,\n positions: new Float32Array(points.data),\n stride: 5,\n count: points.count,\n sized: points.sized,\n defaultSize,\n source: points.source,\n packed: new Uint32Array(points.data),\n});\n\nconst stackHash = (m: BarModel) => {\n let hash = m.bars.count;\n for (let i = 0; i < m.bars.count; i++) {\n hash = (hash * 31 + m.bars.z0[i] * 997 + m.bars.z1[i] * 13) % 1e12;\n }\n return String(hash);\n};\n\n/** CSS color of a packed color */\nexport const packedCss = (packed: number): string =>\n toCss([\n (packed & 0xff) / 255,\n ((packed >>> 8) & 0xff) / 255,\n ((packed >>> 16) & 0xff) / 255,\n ((packed >>> 24) & 0xff) / 255,\n ]);\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("../scale.cjs"),t=require("./labels.cjs");var n=()=>({min:1/0,max:-1/0}),r=(e,t=e.length)=>{let n=1/0,r=-1/0;for(let i=0;i<t;i++){let t=e[i];t<n&&(n=t),t>r&&(r=t)}return{min:n,max:r}},i=(e,t)=>{t.min<e.min&&(e.min=t.min),t.max>e.max&&(e.max=t.max)},a=e=>!Array.isArray(e)&&typeof e.x==`object`&&e.x!==null,o=new WeakMap,s=e=>{let t=o.get(e);if(t)return t;let i;if(a(e))i={count:Math.min(e.x.length,e.y.length,e.z.length),x:e.x,y:e.y,z:e.z,size:e.size??null,value:e.value??null,colors:null,labels:e.label??null};else{let t=e,n=t.length,r=new Float64Array(n),a=new Float64Array(n),o=new Float64Array(n),s=null,c=null,l=null,u=null;for(let e=0;e<n;e++){let i=t[e];if(Array.isArray(i)){let t=i;r[e]=t[0]??NaN,a[e]=t[1]??NaN,o[e]=t[2]??NaN;continue}let d=i;r[e]=d.x,a[e]=d.y,o[e]=d.z,d.size!==void 0&&(s??(s=new Float32Array(n).fill(NaN)),s[e]=d.size),d.value!==void 0&&(c??(c=new Float64Array(n).fill(NaN)),c[e]=d.value),d.color!==void 0&&(l??(l=Array(n)),l[e]=d.color),d.label!==void 0&&(u??(u=Array(n)),u[e]=d.label)}i={count:n,x:r,y:a,z:o,size:s,value:c,colors:l,labels:u}}let s={...i,extent:{x:r(i.x,i.count),y:r(i.y,i.count),z:r(i.z,i.count),value:i.value?r(i.value,i.count):n()}};return o.set(e,s),s},c=new WeakMap,l=e=>{let t=new Float64Array(e);for(let n=0;n<e;n++)t[n]=n;return t},u=e=>{let t=c.get(e);if(t)return t;let i=Math.max(0,Math.floor(e.cols)),a=Math.max(0,Math.floor(e.rows)),o=a>=2&&i>=2&&e.z.length>=a*i,s=e.x&&e.x.length>=i?e.x:l(i),u=e.y&&e.y.length>=a?e.y:l(a),d=e.value&&e.value.length>=a*i?e.value:null,f={rows:o?a:0,cols:o?i:0,z:e.z,x:s,y:u,value:d,extent:{x:o?r(s,i):n(),y:o?r(u,a):n(),z:o?r(e.z,a*i):n(),value:o&&d?r(d,a*i):n()}};return c.set(e,f),f},d=e=>Array.isArray(e)?{x:e[0],y:e[1],z:e[2]}:e,f=class{constructor(e){this.lookup=new Map,this.names=e?[...e]:[],this.fixed=!!e,this.names.forEach((e,t)=>this.lookup.set(e,t))}index(e){if(typeof e==`number`&&this.fixed)return Number.isInteger(e)&&e>=0&&e<this.names.length?e:-1;let t=String(e),n=this.lookup.get(t);return n===void 0?this.fixed?-1:(this.names.push(t),this.lookup.set(t,this.names.length-1),this.names.length-1):n}},p=(e,t,r)=>{let a=new Map,o=new Map;return e.map(e=>{let s=e.data,c=s.length,l=new Int32Array(c),u=new Int32Array(c),f=new Float64Array(c),p=new Float64Array(c),m=new Float64Array(c),h=new Int32Array(c),g=null,_=null,v=null,y=n(),b=n(),x=n(),S=0;for(let n=0;n<c;n++){let C=d(s[n]),w=t.index(C.x),T=r.index(C.y),E=C.z;if(w<0||T<0||E===null||!Number.isFinite(E))continue;let D=T*1000003+w,O=E>=0?a:o,k=e.hidden?0:O.get(D)??0;e.hidden||O.set(D,k+E),l[S]=w,u[S]=T,f[S]=k,p[S]=k+E,m[S]=E,h[S]=n,C.value!==void 0&&(g??(g=new Float64Array(c).fill(NaN)),g[S]=C.value,i(x,{min:C.value,max:C.value})),C.color!==void 0&&(_??(_=Array(c)),_[S]=C.color),C.label!==void 0&&(v??(v=Array(c)),v[S]=C.label),i(y,{min:Math.min(k,k+E),max:Math.max(k,k+E)}),i(b,{min:E,max:E}),S++}return{count:S,xi:l,yi:u,z0:f,z1:p,z:m,source:h,value:g,colors:_,labels:v,extent:{z:y,height:b,value:x}}})},m=(e,t)=>{let[n,r]=e.domain;return((t-n)/(r-n||1)*2-1)*e.half},h=(t,n,r,i,a,o,s)=>{let c=n??{},l=Math.max(2,c.tickCount??5);if(a){let e=Math.max(1,a.length),n=e=>{let t=Math.round(e);return c.format?c.format(t):a[t]??String(t)},r=Array.from({length:a.length},(e,t)=>t);return{key:t,title:c.title??``,categories:a,domain:[-.5,e-.5],half:i,ticks:r,labels:r.map(n),format:n,grid:c.grid??!0,visible:c.visible??!0}}let u=c.min??r.min,d=c.max??r.max;if(o&&c.min===void 0&&u>0&&(u=0),o&&c.max===void 0&&d<0&&(d=0),[u,d]=e.ensureSpan(u,d),c.nice??!0){let[t,n]=e.niceDomain(u,d,l);c.min===void 0&&(u=t),c.max===void 0&&(d=n)}let f=e.linearTicks(u,d,l),p=e.tickStep(u,d,l),m=c.format??s.ticks(p,Math.max(Math.abs(u),Math.abs(d)));return{key:t,title:c.title??``,categories:null,domain:[u,d],half:i,ticks:f,labels:f.map(m),format:c.format??s.value,grid:c.grid??!0,visible:c.visible??!0}},g=e=>e.type??`scatter`,_=(e,t)=>e===void 0||!Number.isFinite(e)?t:Math.max(0,Math.min(1,e)),v=e=>{let t=(e??[1,1,.7]).map(e=>Number.isFinite(e)&&e>0?e:1),n=Math.max(t[0],t[1],t[2]);return[t[0]/n,t[1]/n,t[2]/n]},y=(r,a=t.locale3D(r.locale,r.labels))=>{let o=v(r.aspect),c={x:n(),y:n(),z:n()},l=r.series.filter(e=>g(e)===`bar`),d=l.length||r.xAxis?.categories?new f(r.xAxis?.categories):null,m=l.length||r.yAxis?.categories?new f(r.yAxis?.categories):null,y=d&&m?p(l,d,m):[],b=0,x=r.series.map((e,t)=>{let n=g(e),r={index:t,id:e.id??String(t),name:e.name??``,hidden:!!e.hidden,color:e.color,format:e.format};switch(n){case`surface`:{let t=e,a=u(t.data);return i(c.x,a.extent.x),i(c.y,a.extent.y),i(c.z,a.extent.z),{...r,type:n,series:t,grid:a,colorBy:t.colorBy??(a.value?`value`:`z`),opacity:_(t.opacity,1)}}case`bar`:{let t=e,a=y[b++];return i(c.z,a.extent.z),{...r,type:n,series:t,bars:a,colorBy:t.colorBy??`series`,opacity:_(t.opacity,1)}}default:{let t=e,a=s(t.data);i(c.x,a.extent.x),i(c.y,a.extent.y),i(c.z,a.extent.z);let o={...r,cols:a,colorBy:t.colorBy??(a.value?`value`:`series`),opacity:_(t.opacity,1)};return n===`line`?{...o,type:`line`,series:t}:{...o,type:`scatter`,series:t}}}}),S=h(`x`,r.xAxis,c.x,o[0],d?d.names:null,!1,a),C=h(`y`,r.yAxis,c.y,o[1],m?m.names:null,!1,a),w=h(`z`,r.zAxis,c.z,o[2],null,l.length>0,a),T=n(),E=!0,D=!1;for(let e of x){if(e.hidden||e.colorBy===`series`)continue;D=!0;let t=e.colorBy===`value`;if(e.type===`surface`){let n=t&&e.grid.value?e.grid.extent.value:e.grid.extent.z;t&&e.grid.value&&(E=!1),i(T,n)}else if(e.type===`bar`){let n=t&&e.bars.value?e.bars.extent.value:e.bars.extent.height;t&&e.bars.value&&(E=!1),i(T,n)}else{let n=t&&e.cols.value?e.cols.extent.value:e.cols.extent.z;t&&e.cols.value&&(E=!1),i(T,n)}}let O=null;return D&&(O=r.valueRange?[r.valueRange[0],r.valueRange[1]]:e.ensureSpan(T.min,T.max)),{series:x,x:S,y:C,z:w,colorDomain:O,colorFromZ:E,locale:a}};exports.CategoryIndex=f,exports.barColumns=p,exports.boxHalf=v,exports.buildModel=y,exports.pointColumns=s,exports.seriesType=g,exports.surfaceGrid=u,exports.toWorld=m;
1
+ const e=require("../scale.cjs"),t=require("./labels.cjs");var n=()=>({min:1/0,max:-1/0}),r=(e,t=e.length)=>{let n=1/0,r=-1/0;for(let i=0;i<t;i++){let t=e[i];t<n&&(n=t),t>r&&(r=t)}return{min:n,max:r}},i=(e,t)=>{t.min<e.min&&(e.min=t.min),t.max>e.max&&(e.max=t.max)},a=e=>!Array.isArray(e)&&typeof e.x==`object`&&e.x!==null,o=new WeakMap,s=e=>{let t=o.get(e);if(t)return t;let i;if(a(e))i={count:Math.min(e.x.length,e.y.length,e.z.length),x:e.x,y:e.y,z:e.z,size:e.size??null,value:e.value??null,colors:null,rgb:e.color??null,labels:e.label??null};else{let t=e,n=t.length,r=new Float64Array(n),a=new Float64Array(n),o=new Float64Array(n),s=null,c=null,l=null,u=null;for(let e=0;e<n;e++){let i=t[e];if(Array.isArray(i)){let t=i;r[e]=t[0]??NaN,a[e]=t[1]??NaN,o[e]=t[2]??NaN;continue}let d=i;r[e]=d.x,a[e]=d.y,o[e]=d.z,d.size!==void 0&&(s??(s=new Float32Array(n).fill(NaN)),s[e]=d.size),d.value!==void 0&&(c??(c=new Float64Array(n).fill(NaN)),c[e]=d.value),d.color!==void 0&&(l??(l=Array(n)),l[e]=d.color),d.label!==void 0&&(u??(u=Array(n)),u[e]=d.label)}i={count:n,x:r,y:a,z:o,size:s,value:c,colors:l,rgb:null,labels:u}}let s={...i,extent:{x:r(i.x,i.count),y:r(i.y,i.count),z:r(i.z,i.count),value:i.value?r(i.value,i.count):n()}};return o.set(e,s),s},c=new WeakMap,l=e=>{let t=new Float64Array(e);for(let n=0;n<e;n++)t[n]=n;return t},u=e=>{let t=c.get(e);if(t)return t;let i=Math.max(0,Math.floor(e.cols)),a=Math.max(0,Math.floor(e.rows)),o=a>=2&&i>=2&&e.z.length>=a*i,s=e.x&&e.x.length>=i?e.x:l(i),u=e.y&&e.y.length>=a?e.y:l(a),d=e.value&&e.value.length>=a*i?e.value:null,f={rows:o?a:0,cols:o?i:0,z:e.z,x:s,y:u,value:d,extent:{x:o?r(s,i):n(),y:o?r(u,a):n(),z:o?r(e.z,a*i):n(),value:o&&d?r(d,a*i):n()}};return c.set(e,f),f},d=e=>Array.isArray(e)?{x:e[0],y:e[1],z:e[2]}:e,f=class{constructor(e){this.lookup=new Map,this.names=e?[...e]:[],this.fixed=!!e,this.names.forEach((e,t)=>this.lookup.set(e,t))}index(e){if(typeof e==`number`&&this.fixed)return Number.isInteger(e)&&e>=0&&e<this.names.length?e:-1;let t=String(e),n=this.lookup.get(t);return n===void 0?this.fixed?-1:(this.names.push(t),this.lookup.set(t,this.names.length-1),this.names.length-1):n}},p=(e,t,r)=>{let a=new Map,o=new Map;return e.map(e=>{let s=e.data,c=s.length,l=new Int32Array(c),u=new Int32Array(c),f=new Float64Array(c),p=new Float64Array(c),m=new Float64Array(c),h=new Int32Array(c),g=null,_=null,v=null,y=n(),b=n(),x=n(),S=0;for(let n=0;n<c;n++){let C=d(s[n]),w=t.index(C.x),T=r.index(C.y),E=C.z;if(w<0||T<0||E===null||!Number.isFinite(E))continue;let D=T*1000003+w,O=E>=0?a:o,k=e.hidden?0:O.get(D)??0;e.hidden||O.set(D,k+E),l[S]=w,u[S]=T,f[S]=k,p[S]=k+E,m[S]=E,h[S]=n,C.value!==void 0&&(g??(g=new Float64Array(c).fill(NaN)),g[S]=C.value,i(x,{min:C.value,max:C.value})),C.color!==void 0&&(_??(_=Array(c)),_[S]=C.color),C.label!==void 0&&(v??(v=Array(c)),v[S]=C.label),i(y,{min:Math.min(k,k+E),max:Math.max(k,k+E)}),i(b,{min:E,max:E}),S++}return{count:S,xi:l,yi:u,z0:f,z1:p,z:m,source:h,value:g,colors:_,labels:v,extent:{z:y,height:b,value:x}}})},m=(e,t)=>{let[n,r]=e.domain;return((t-n)/(r-n||1)*2-1)*e.half},h=(t,n,r,i,a,o,s)=>{let c=n??{},l=Math.max(2,c.tickCount??5);if(a){let e=Math.max(1,a.length),n=e=>{let t=Math.round(e);return c.format?c.format(t):a[t]??String(t)},r=Array.from({length:a.length},(e,t)=>t);return{key:t,title:c.title??``,categories:a,domain:[-.5,e-.5],half:i,ticks:r,labels:r.map(n),format:n,grid:c.grid??!0,visible:c.visible??!0}}let u=c.min??r.min,d=c.max??r.max;if(o&&c.min===void 0&&u>0&&(u=0),o&&c.max===void 0&&d<0&&(d=0),[u,d]=e.ensureSpan(u,d),c.nice??!0){let[t,n]=e.niceDomain(u,d,l);c.min===void 0&&(u=t),c.max===void 0&&(d=n)}let f=e.linearTicks(u,d,l),p=e.tickStep(u,d,l),m=c.format??s.ticks(p,Math.max(Math.abs(u),Math.abs(d)));return{key:t,title:c.title??``,categories:null,domain:[u,d],half:i,ticks:f,labels:f.map(m),format:c.format??s.value,grid:c.grid??!0,visible:c.visible??!0}},g=e=>e.type??`scatter`,_=(e,t)=>e===void 0||!Number.isFinite(e)?t:Math.max(0,Math.min(1,e)),v=e=>{let t=(e??[1,1,.7]).map(e=>Number.isFinite(e)&&e>0?e:1),n=Math.max(t[0],t[1],t[2]);return[t[0]/n,t[1]/n,t[2]/n]},y=(r,a=t.locale3D(r.locale,r.labels))=>{let o=v(r.aspect),c={x:n(),y:n(),z:n()},l=r.series.filter(e=>g(e)===`bar`),d=l.length||r.xAxis?.categories?new f(r.xAxis?.categories):null,m=l.length||r.yAxis?.categories?new f(r.yAxis?.categories):null,y=d&&m?p(l,d,m):[],b=0,x=r.series.map((e,t)=>{let n=g(e),r={index:t,id:e.id??String(t),name:e.name??``,hidden:!!e.hidden,color:e.color,format:e.format};switch(n){case`surface`:{let t=e,a=u(t.data);return i(c.x,a.extent.x),i(c.y,a.extent.y),i(c.z,a.extent.z),{...r,type:n,series:t,grid:a,colorBy:t.colorBy??(a.value?`value`:`z`),opacity:_(t.opacity,1)}}case`bar`:{let t=e,a=y[b++];return i(c.z,a.extent.z),{...r,type:n,series:t,bars:a,colorBy:t.colorBy??`series`,opacity:_(t.opacity,1)}}default:{let t=e,a=s(t.data);i(c.x,a.extent.x),i(c.y,a.extent.y),i(c.z,a.extent.z);let o={...r,cols:a,colorBy:t.colorBy??(a.value?`value`:`series`),opacity:_(t.opacity,1)};return n===`line`?{...o,type:`line`,series:t}:{...o,type:`scatter`,series:t}}}}),S=h(`x`,r.xAxis,c.x,o[0],d?d.names:null,!1,a),C=h(`y`,r.yAxis,c.y,o[1],m?m.names:null,!1,a),w=h(`z`,r.zAxis,c.z,o[2],null,l.length>0,a),T=n(),E=!0,D=!1;for(let e of x){if(e.hidden||e.colorBy===`series`)continue;D=!0;let t=e.colorBy===`value`;if(e.type===`surface`){let n=t&&e.grid.value?e.grid.extent.value:e.grid.extent.z;t&&e.grid.value&&(E=!1),i(T,n)}else if(e.type===`bar`){let n=t&&e.bars.value?e.bars.extent.value:e.bars.extent.height;t&&e.bars.value&&(E=!1),i(T,n)}else{let n=t&&e.cols.value?e.cols.extent.value:e.cols.extent.z;t&&e.cols.value&&(E=!1),i(T,n)}}let O=null;return D&&(O=r.valueRange?[r.valueRange[0],r.valueRange[1]]:e.ensureSpan(T.min,T.max)),{series:x,x:S,y:C,z:w,colorDomain:O,colorFromZ:E,locale:a}};exports.CategoryIndex=f,exports.barColumns=p,exports.boxHalf=v,exports.buildModel=y,exports.pointColumns=s,exports.seriesType=g,exports.surfaceGrid=u,exports.toWorld=m;
2
2
  //# sourceMappingURL=model.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.cjs","names":["ensureSpan","niceDomain","linearTicks","tickStep","locale3D","require_scale","require_labels","emptyExtent","extentOf","values","min","max","count","v","merge","other","target","isColumns","data","pointCache","pointColumns","cached","columns","list","x","y","z","size","value","colors","labels","i","item","tuple","point","result","gridCache","indices","out","surfaceGrid","cols","rows","valid","grid","barDatum","CategoryIndex","categories","name","found","barColumns","positive","negative","series","s","n","xi","yi","z0","z1","source","zExtent","heightExtent","valueExtent","d","cx","xCategories","cy","yCategories","h","key","stack","base","toWorld","axis","buildAxis","o","options","ticks","extent","includeZero","nMin","nMax","step","tick","locale","seriesType","clamp01","fallback","boxHalf","safe","aspect","largest","buildModel","half","barSeries","bars","barIndex","models","type","index","common","color","colorFromZ","usesScale","m","byValue","e","colorDomain"],"sources":["../../../../../charts/src/engine/three-d/model.ts"],"sourcesContent":["// Options -> model: data columns (cached per data object), axis domains,\n// ticks and the world mapping of the 3D charts. The box spans\n// [-half, half] on every axis; the largest side is 2 world units.\n\nimport { ensureSpan, linearTicks, niceDomain, tickStep } from \"../scale\";\nimport { locale3D, type Locale3D } from \"./labels\";\nimport type {\n Bar3DDatum,\n Bar3DSeries,\n Chart3DAxisOptions,\n Chart3DColorBy,\n Chart3DColumnData,\n Chart3DOptions,\n Chart3DPoint,\n Chart3DPointData,\n Chart3DSeries,\n Chart3DSeriesType,\n Line3DSeries,\n Scatter3DSeries,\n Surface3DData,\n Surface3DSeries,\n} from \"./types\";\n\nexport type AxisKey = \"x\" | \"y\" | \"z\";\n\nexport interface Extent {\n min: number;\n max: number;\n}\n\nconst emptyExtent = (): Extent => ({ min: Infinity, max: -Infinity });\n\nconst extentOf = (values: ArrayLike<number>, count = values.length) => {\n let min = Infinity;\n let max = -Infinity;\n for (let i = 0; i < count; i++) {\n const v = values[i];\n if (v < min) min = v;\n if (v > max) max = v;\n }\n return { min, max };\n};\n\nconst merge = (target: Extent, other: Extent) => {\n if (other.min < target.min) target.min = other.min;\n if (other.max > target.max) target.max = other.max;\n};\n\n// ------------------------------------------------------------------ points\n\n/** Columns of a scatter / line series */\nexport interface PointColumns {\n count: number;\n x: ArrayLike<number>;\n y: ArrayLike<number>;\n z: ArrayLike<number>;\n size: ArrayLike<number> | null;\n value: ArrayLike<number> | null;\n colors: readonly (string | undefined)[] | null;\n labels: readonly (string | undefined)[] | null;\n extent: Record<AxisKey | \"value\", Extent>;\n}\n\nconst isColumns = (data: Chart3DPointData): data is Chart3DColumnData =>\n !Array.isArray(data) &&\n typeof (data as Chart3DColumnData).x === \"object\" &&\n (data as Chart3DColumnData).x !== null;\n\nconst pointCache = new WeakMap<object, PointColumns>();\n\n/** Columns of points written as objects, tuples or columns (cached per data object) */\nexport const pointColumns = (data: Chart3DPointData): PointColumns => {\n const cached = pointCache.get(data);\n if (cached) return cached;\n let columns: Omit<PointColumns, \"extent\">;\n if (isColumns(data)) {\n const count = Math.min(data.x.length, data.y.length, data.z.length);\n columns = {\n count,\n x: data.x,\n y: data.y,\n z: data.z,\n size: data.size ?? null,\n value: data.value ?? null,\n colors: null,\n labels: data.label ?? null,\n };\n } else {\n const list = data as readonly (\n Chart3DPoint | readonly [number, number, number]\n )[];\n const count = list.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n const z = new Float64Array(count);\n let size: Float32Array | null = null;\n let value: Float64Array | null = null;\n let colors: (string | undefined)[] | null = null;\n let labels: (string | undefined)[] | null = null;\n for (let i = 0; i < count; i++) {\n const item = list[i];\n if (Array.isArray(item)) {\n const tuple = item as readonly [number, number, number];\n x[i] = tuple[0] ?? NaN;\n y[i] = tuple[1] ?? NaN;\n z[i] = tuple[2] ?? NaN;\n continue;\n }\n const point = item as Chart3DPoint;\n x[i] = point.x;\n y[i] = point.y;\n z[i] = point.z;\n if (point.size !== undefined) {\n size ??= new Float32Array(count).fill(NaN);\n size[i] = point.size;\n }\n if (point.value !== undefined) {\n value ??= new Float64Array(count).fill(NaN);\n value[i] = point.value;\n }\n if (point.color !== undefined) {\n colors ??= new Array<string | undefined>(count);\n colors[i] = point.color;\n }\n if (point.label !== undefined) {\n labels ??= new Array<string | undefined>(count);\n labels[i] = point.label;\n }\n }\n columns = { count, x, y, z, size, value, colors, labels };\n }\n const result: PointColumns = {\n ...columns,\n extent: {\n x: extentOf(columns.x, columns.count),\n y: extentOf(columns.y, columns.count),\n z: extentOf(columns.z, columns.count),\n value: columns.value\n ? extentOf(columns.value, columns.count)\n : emptyExtent(),\n },\n };\n pointCache.set(data, result);\n return result;\n};\n\n// ----------------------------------------------------------------- surface\n\n/** A surface grid with its coordinates */\nexport interface SurfaceGrid {\n rows: number;\n cols: number;\n z: ArrayLike<number>;\n x: ArrayLike<number>;\n y: ArrayLike<number>;\n value: ArrayLike<number> | null;\n extent: Record<AxisKey | \"value\", Extent>;\n}\n\nconst gridCache = new WeakMap<object, SurfaceGrid>();\n\nconst indices = (count: number) => {\n const out = new Float64Array(count);\n for (let i = 0; i < count; i++) out[i] = i;\n return out;\n};\n\nexport const surfaceGrid = (data: Surface3DData): SurfaceGrid => {\n const cached = gridCache.get(data);\n if (cached) return cached;\n const cols = Math.max(0, Math.floor(data.cols));\n const rows = Math.max(0, Math.floor(data.rows));\n const valid = rows >= 2 && cols >= 2 && data.z.length >= rows * cols;\n const x = data.x && data.x.length >= cols ? data.x : indices(cols);\n const y = data.y && data.y.length >= rows ? data.y : indices(rows);\n const value =\n data.value && data.value.length >= rows * cols ? data.value : null;\n const grid: SurfaceGrid = {\n rows: valid ? rows : 0,\n cols: valid ? cols : 0,\n z: data.z,\n x,\n y,\n value,\n extent: {\n x: valid ? extentOf(x, cols) : emptyExtent(),\n y: valid ? extentOf(y, rows) : emptyExtent(),\n z: valid ? extentOf(data.z, rows * cols) : emptyExtent(),\n value: valid && value ? extentOf(value, rows * cols) : emptyExtent(),\n },\n };\n gridCache.set(data, grid);\n return grid;\n};\n\n// -------------------------------------------------------------------- bars\n\n/** Bars of a series resolved to category indices */\nexport interface BarColumns {\n count: number;\n /** Category index on x / y */\n xi: Int32Array;\n yi: Int32Array;\n /** Bottom and top of every bar (stacked on the series before) */\n z0: Float64Array;\n z1: Float64Array;\n /** Height of the datum itself */\n z: Float64Array;\n /** Index of the datum in the series data */\n source: Int32Array;\n value: Float64Array | null;\n colors: (string | undefined)[] | null;\n labels: (string | undefined)[] | null;\n /** `z`: bottoms and tops (stacks included), `height`: the heights of the data */\n extent: Record<\"z\" | \"height\" | \"value\", Extent>;\n}\n\ntype BarInput = Bar3DSeries[\"data\"][number];\n\nconst barDatum = (item: BarInput): Bar3DDatum =>\n Array.isArray(item)\n ? {\n x: (\n item as readonly [string | number, string | number, number | null]\n )[0],\n y: (\n item as readonly [string | number, string | number, number | null]\n )[1],\n z: (\n item as readonly [string | number, string | number, number | null]\n )[2],\n }\n : (item as Bar3DDatum);\n\n/** Category axis of the bars: names given by the axis or collected from the data */\nexport class CategoryIndex {\n readonly names: string[];\n private readonly lookup = new Map<string, number>();\n private readonly fixed: boolean;\n\n constructor(categories: readonly string[] | undefined) {\n this.names = categories ? [...categories] : [];\n this.fixed = !!categories;\n this.names.forEach((name, i) => this.lookup.set(name, i));\n }\n\n /** Index of a category name (numbers are indices when the categories are given) */\n index(value: string | number): number {\n if (typeof value === \"number\" && this.fixed) {\n return Number.isInteger(value) && value >= 0 && value < this.names.length\n ? value\n : -1;\n }\n const name = String(value);\n const found = this.lookup.get(name);\n if (found !== undefined) return found;\n if (this.fixed) return -1;\n this.names.push(name);\n this.lookup.set(name, this.names.length - 1);\n return this.names.length - 1;\n }\n}\n\n/** Bars of every bar series, stacked in series order where cells coincide */\nexport const barColumns = (\n series: readonly Bar3DSeries[],\n xCategories: CategoryIndex,\n yCategories: CategoryIndex,\n): BarColumns[] => {\n const positive = new Map<number, number>();\n const negative = new Map<number, number>();\n return series.map((s) => {\n const data = s.data as readonly BarInput[];\n const n = data.length;\n const xi = new Int32Array(n);\n const yi = new Int32Array(n);\n const z0 = new Float64Array(n);\n const z1 = new Float64Array(n);\n const z = new Float64Array(n);\n const source = new Int32Array(n);\n let value: Float64Array | null = null;\n let colors: (string | undefined)[] | null = null;\n let labels: (string | undefined)[] | null = null;\n const zExtent = emptyExtent();\n const heightExtent = emptyExtent();\n const valueExtent = emptyExtent();\n let count = 0;\n for (let i = 0; i < n; i++) {\n const d = barDatum(data[i]);\n const cx = xCategories.index(d.x);\n const cy = yCategories.index(d.y);\n const h = d.z;\n if (cx < 0 || cy < 0 || h === null || !Number.isFinite(h)) continue;\n const key = cy * 1_000_003 + cx;\n const stack = h >= 0 ? positive : negative;\n const base = s.hidden ? 0 : (stack.get(key) ?? 0);\n if (!s.hidden) stack.set(key, base + h);\n xi[count] = cx;\n yi[count] = cy;\n z0[count] = base;\n z1[count] = base + h;\n z[count] = h;\n source[count] = i;\n if (d.value !== undefined) {\n value ??= new Float64Array(n).fill(NaN);\n value[count] = d.value;\n merge(valueExtent, { min: d.value, max: d.value });\n }\n if (d.color !== undefined) {\n colors ??= new Array<string | undefined>(n);\n colors[count] = d.color;\n }\n if (d.label !== undefined) {\n labels ??= new Array<string | undefined>(n);\n labels[count] = d.label;\n }\n merge(zExtent, {\n min: Math.min(base, base + h),\n max: Math.max(base, base + h),\n });\n merge(heightExtent, { min: h, max: h });\n count++;\n }\n return {\n count,\n xi,\n yi,\n z0,\n z1,\n z,\n source,\n value,\n colors,\n labels,\n extent: { z: zExtent, height: heightExtent, value: valueExtent },\n };\n });\n};\n\n// -------------------------------------------------------------------- axes\n\nexport interface AxisModel {\n key: AxisKey;\n title: string;\n /** Category names (category axis) or `null` */\n categories: string[] | null;\n domain: [number, number];\n /** Half extent of the axis in world units */\n half: number;\n ticks: number[];\n labels: string[];\n /** Full label of any value (tooltips) */\n format: (value: number) => string;\n grid: boolean;\n visible: boolean;\n}\n\n/** World coordinate of a data value */\nexport const toWorld = (axis: AxisModel, value: number): number => {\n const [min, max] = axis.domain;\n return (((value - min) / (max - min || 1)) * 2 - 1) * axis.half;\n};\n\n/** Data value of a world coordinate */\nexport const fromWorld = (axis: AxisModel, world: number): number => {\n const [min, max] = axis.domain;\n return min + ((world / axis.half + 1) / 2) * (max - min);\n};\n\nconst buildAxis = (\n key: AxisKey,\n options: Chart3DAxisOptions | undefined,\n extent: Extent,\n half: number,\n categories: string[] | null,\n includeZero: boolean,\n locale: Locale3D,\n): AxisModel => {\n const o = options ?? {};\n const count = Math.max(2, o.tickCount ?? 5);\n if (categories) {\n const n = Math.max(1, categories.length);\n const name = (v: number) => {\n const i = Math.round(v);\n return o.format ? o.format(i) : (categories[i] ?? String(i));\n };\n const ticks = Array.from({ length: categories.length }, (_, i) => i);\n return {\n key,\n title: o.title ?? \"\",\n categories,\n domain: [-0.5, n - 0.5],\n half,\n ticks,\n labels: ticks.map(name),\n format: name,\n grid: o.grid ?? true,\n visible: o.visible ?? true,\n };\n }\n let min = o.min ?? extent.min;\n let max = o.max ?? extent.max;\n if (includeZero && o.min === undefined && min > 0) min = 0;\n if (includeZero && o.max === undefined && max < 0) max = 0;\n [min, max] = ensureSpan(min, max);\n if (o.nice ?? true) {\n const [nMin, nMax] = niceDomain(min, max, count);\n if (o.min === undefined) min = nMin;\n if (o.max === undefined) max = nMax;\n }\n const ticks = linearTicks(min, max, count);\n const step = tickStep(min, max, count);\n const tick =\n o.format ?? locale.ticks(step, Math.max(Math.abs(min), Math.abs(max)));\n return {\n key,\n title: o.title ?? \"\",\n categories: null,\n domain: [min, max],\n half,\n ticks,\n labels: ticks.map(tick),\n format: o.format ?? locale.value,\n grid: o.grid ?? true,\n visible: o.visible ?? true,\n };\n};\n\n// ------------------------------------------------------------------ series\n\nexport const seriesType = (series: Chart3DSeries): Chart3DSeriesType =>\n series.type ?? \"scatter\";\n\ninterface SeriesModelBase {\n index: number;\n id: string;\n name: string;\n hidden: boolean;\n /** Color option (resolved later with the theme) */\n color: string | undefined;\n colorBy: Chart3DColorBy;\n opacity: number;\n format: ((value: number) => string) | undefined;\n}\n\nexport interface ScatterModel extends SeriesModelBase {\n type: \"scatter\";\n series: Scatter3DSeries;\n cols: PointColumns;\n}\n\nexport interface LineModel extends SeriesModelBase {\n type: \"line\";\n series: Line3DSeries;\n cols: PointColumns;\n}\n\nexport interface SurfaceModel extends SeriesModelBase {\n type: \"surface\";\n series: Surface3DSeries;\n grid: SurfaceGrid;\n}\n\nexport interface BarModel extends SeriesModelBase {\n type: \"bar\";\n series: Bar3DSeries;\n bars: BarColumns;\n}\n\nexport type SeriesModel = ScatterModel | LineModel | SurfaceModel | BarModel;\n\nexport interface Model3D {\n series: SeriesModel[];\n x: AxisModel;\n y: AxisModel;\n z: AxisModel;\n /** Range mapped to the color scale; `null` when no visible series uses it */\n colorDomain: [number, number] | null;\n /** Whether the color domain comes from the heights only (the color bar reuses the z format) */\n colorFromZ: boolean;\n /** Texts and number formats of the `locale` / `labels` options */\n locale: Locale3D;\n}\n\nconst clamp01 = (v: number | undefined, fallback: number) =>\n v === undefined || !Number.isFinite(v)\n ? fallback\n : Math.max(0, Math.min(1, v));\n\n/** Half extents of the box: `aspect` scaled so the largest side is 2 */\nexport const boxHalf = (\n aspect: readonly [number, number, number] | undefined,\n): [number, number, number] => {\n const a = aspect ?? [1, 1, 0.7];\n const safe = a.map((v) => (Number.isFinite(v) && v > 0 ? v : 1)) as [\n number,\n number,\n number,\n ];\n const largest = Math.max(safe[0], safe[1], safe[2]);\n return [safe[0] / largest, safe[1] / largest, safe[2] / largest];\n};\n\nexport const buildModel = (\n options: Chart3DOptions,\n locale: Locale3D = locale3D(options.locale, options.labels),\n): Model3D => {\n const half = boxHalf(options.aspect);\n const extent = { x: emptyExtent(), y: emptyExtent(), z: emptyExtent() };\n const barSeries = options.series.filter((s) => seriesType(s) === \"bar\");\n const xCategories =\n barSeries.length || options.xAxis?.categories\n ? new CategoryIndex(options.xAxis?.categories)\n : null;\n const yCategories =\n barSeries.length || options.yAxis?.categories\n ? new CategoryIndex(options.yAxis?.categories)\n : null;\n const bars =\n xCategories && yCategories\n ? barColumns(barSeries as Bar3DSeries[], xCategories, yCategories)\n : [];\n let barIndex = 0;\n\n const models: SeriesModel[] = options.series.map((series, index) => {\n const type = seriesType(series);\n const base = {\n index,\n id: series.id ?? String(index),\n name: series.name ?? \"\",\n hidden: !!series.hidden,\n color: series.color,\n format: series.format,\n };\n switch (type) {\n case \"surface\": {\n const s = series as Surface3DSeries;\n const grid = surfaceGrid(s.data);\n merge(extent.x, grid.extent.x);\n merge(extent.y, grid.extent.y);\n merge(extent.z, grid.extent.z);\n return {\n ...base,\n type,\n series: s,\n grid,\n colorBy: s.colorBy ?? (grid.value ? \"value\" : \"z\"),\n opacity: clamp01(s.opacity, 1),\n };\n }\n case \"bar\": {\n const s = series as Bar3DSeries;\n const columns = bars[barIndex++]!;\n merge(extent.z, columns.extent.z);\n return {\n ...base,\n type,\n series: s,\n bars: columns,\n colorBy: s.colorBy ?? \"series\",\n opacity: clamp01(s.opacity, 1),\n };\n }\n default: {\n const s = series as Scatter3DSeries | Line3DSeries;\n const cols = pointColumns(s.data);\n merge(extent.x, cols.extent.x);\n merge(extent.y, cols.extent.y);\n merge(extent.z, cols.extent.z);\n const common = {\n ...base,\n cols,\n colorBy: s.colorBy ?? (cols.value ? \"value\" : \"series\"),\n opacity: clamp01(s.opacity, 1),\n } as const;\n return type === \"line\"\n ? { ...common, type: \"line\", series: s as Line3DSeries }\n : { ...common, type: \"scatter\", series: s as Scatter3DSeries };\n }\n }\n });\n\n const x = buildAxis(\n \"x\",\n options.xAxis,\n extent.x,\n half[0],\n xCategories ? xCategories.names : null,\n false,\n locale,\n );\n const y = buildAxis(\n \"y\",\n options.yAxis,\n extent.y,\n half[1],\n yCategories ? yCategories.names : null,\n false,\n locale,\n );\n const z = buildAxis(\n \"z\",\n options.zAxis,\n extent.z,\n half[2],\n null,\n barSeries.length > 0,\n locale,\n );\n\n // color domain: the colored quantity of every visible series using the scale\n const color = emptyExtent();\n let colorFromZ = true;\n let usesScale = false;\n for (const m of models) {\n if (m.hidden || m.colorBy === \"series\") continue;\n usesScale = true;\n const byValue = m.colorBy === \"value\";\n if (m.type === \"surface\") {\n const e = byValue && m.grid.value ? m.grid.extent.value : m.grid.extent.z;\n if (byValue && m.grid.value) colorFromZ = false;\n merge(color, e);\n } else if (m.type === \"bar\") {\n const e =\n byValue && m.bars.value ? m.bars.extent.value : m.bars.extent.height;\n if (byValue && m.bars.value) colorFromZ = false;\n merge(color, e);\n } else {\n const e = byValue && m.cols.value ? m.cols.extent.value : m.cols.extent.z;\n if (byValue && m.cols.value) colorFromZ = false;\n merge(color, e);\n }\n }\n let colorDomain: [number, number] | null = null;\n if (usesScale) {\n colorDomain = options.valueRange\n ? [options.valueRange[0], options.valueRange[1]]\n : ensureSpan(color.min, color.max);\n }\n return { series: models, x, y, z, colorDomain, colorFromZ, locale };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"model.cjs","names":["ensureSpan","niceDomain","linearTicks","tickStep","locale3D","require_scale","require_labels","emptyExtent","extentOf","values","min","max","count","v","merge","other","target","isColumns","data","pointCache","pointColumns","cached","columns","list","x","y","z","size","value","colors","labels","i","item","tuple","point","result","gridCache","indices","out","surfaceGrid","cols","rows","valid","grid","barDatum","CategoryIndex","categories","name","found","barColumns","positive","negative","series","s","n","xi","yi","z0","z1","source","zExtent","heightExtent","valueExtent","d","cx","xCategories","cy","yCategories","h","key","stack","base","toWorld","axis","buildAxis","o","options","ticks","extent","includeZero","nMin","nMax","step","tick","locale","seriesType","clamp01","fallback","boxHalf","safe","aspect","largest","buildModel","half","barSeries","bars","barIndex","models","type","index","common","color","colorFromZ","usesScale","m","byValue","e","colorDomain"],"sources":["../../../../../charts/src/engine/three-d/model.ts"],"sourcesContent":["// Options -> model: data columns (cached per data object), axis domains,\n// ticks and the world mapping of the 3D charts. The box spans\n// [-half, half] on every axis; the largest side is 2 world units.\n\nimport { ensureSpan, linearTicks, niceDomain, tickStep } from \"../scale\";\nimport { locale3D, type Locale3D } from \"./labels\";\nimport type {\n Bar3DDatum,\n Bar3DSeries,\n Chart3DAxisOptions,\n Chart3DColorBy,\n Chart3DColumnData,\n Chart3DOptions,\n Chart3DPoint,\n Chart3DPointData,\n Chart3DSeries,\n Chart3DSeriesType,\n Line3DSeries,\n Scatter3DSeries,\n Surface3DData,\n Surface3DSeries,\n} from \"./types\";\n\nexport type AxisKey = \"x\" | \"y\" | \"z\";\n\nexport interface Extent {\n min: number;\n max: number;\n}\n\nconst emptyExtent = (): Extent => ({ min: Infinity, max: -Infinity });\n\nconst extentOf = (values: ArrayLike<number>, count = values.length) => {\n let min = Infinity;\n let max = -Infinity;\n for (let i = 0; i < count; i++) {\n const v = values[i];\n if (v < min) min = v;\n if (v > max) max = v;\n }\n return { min, max };\n};\n\nconst merge = (target: Extent, other: Extent) => {\n if (other.min < target.min) target.min = other.min;\n if (other.max > target.max) target.max = other.max;\n};\n\n// ------------------------------------------------------------------ points\n\n/** Columns of a scatter / line series */\nexport interface PointColumns {\n count: number;\n x: ArrayLike<number>;\n y: ArrayLike<number>;\n z: ArrayLike<number>;\n size: ArrayLike<number> | null;\n value: ArrayLike<number> | null;\n colors: readonly (string | undefined)[] | null;\n /** Per-point `0xRRGGBB` colors (column data) */\n rgb: ArrayLike<number> | null;\n labels: readonly (string | undefined)[] | null;\n extent: Record<AxisKey | \"value\", Extent>;\n}\n\nconst isColumns = (data: Chart3DPointData): data is Chart3DColumnData =>\n !Array.isArray(data) &&\n typeof (data as Chart3DColumnData).x === \"object\" &&\n (data as Chart3DColumnData).x !== null;\n\nconst pointCache = new WeakMap<object, PointColumns>();\n\n/** Columns of points written as objects, tuples or columns (cached per data object) */\nexport const pointColumns = (data: Chart3DPointData): PointColumns => {\n const cached = pointCache.get(data);\n if (cached) return cached;\n let columns: Omit<PointColumns, \"extent\">;\n if (isColumns(data)) {\n const count = Math.min(data.x.length, data.y.length, data.z.length);\n columns = {\n count,\n x: data.x,\n y: data.y,\n z: data.z,\n size: data.size ?? null,\n value: data.value ?? null,\n colors: null,\n rgb: data.color ?? null,\n labels: data.label ?? null,\n };\n } else {\n const list = data as readonly (\n Chart3DPoint | readonly [number, number, number]\n )[];\n const count = list.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n const z = new Float64Array(count);\n let size: Float32Array | null = null;\n let value: Float64Array | null = null;\n let colors: (string | undefined)[] | null = null;\n let labels: (string | undefined)[] | null = null;\n for (let i = 0; i < count; i++) {\n const item = list[i];\n if (Array.isArray(item)) {\n const tuple = item as readonly [number, number, number];\n x[i] = tuple[0] ?? NaN;\n y[i] = tuple[1] ?? NaN;\n z[i] = tuple[2] ?? NaN;\n continue;\n }\n const point = item as Chart3DPoint;\n x[i] = point.x;\n y[i] = point.y;\n z[i] = point.z;\n if (point.size !== undefined) {\n size ??= new Float32Array(count).fill(NaN);\n size[i] = point.size;\n }\n if (point.value !== undefined) {\n value ??= new Float64Array(count).fill(NaN);\n value[i] = point.value;\n }\n if (point.color !== undefined) {\n colors ??= new Array<string | undefined>(count);\n colors[i] = point.color;\n }\n if (point.label !== undefined) {\n labels ??= new Array<string | undefined>(count);\n labels[i] = point.label;\n }\n }\n columns = { count, x, y, z, size, value, colors, rgb: null, labels };\n }\n const result: PointColumns = {\n ...columns,\n extent: {\n x: extentOf(columns.x, columns.count),\n y: extentOf(columns.y, columns.count),\n z: extentOf(columns.z, columns.count),\n value: columns.value\n ? extentOf(columns.value, columns.count)\n : emptyExtent(),\n },\n };\n pointCache.set(data, result);\n return result;\n};\n\n// ----------------------------------------------------------------- surface\n\n/** A surface grid with its coordinates */\nexport interface SurfaceGrid {\n rows: number;\n cols: number;\n z: ArrayLike<number>;\n x: ArrayLike<number>;\n y: ArrayLike<number>;\n value: ArrayLike<number> | null;\n extent: Record<AxisKey | \"value\", Extent>;\n}\n\nconst gridCache = new WeakMap<object, SurfaceGrid>();\n\nconst indices = (count: number) => {\n const out = new Float64Array(count);\n for (let i = 0; i < count; i++) out[i] = i;\n return out;\n};\n\nexport const surfaceGrid = (data: Surface3DData): SurfaceGrid => {\n const cached = gridCache.get(data);\n if (cached) return cached;\n const cols = Math.max(0, Math.floor(data.cols));\n const rows = Math.max(0, Math.floor(data.rows));\n const valid = rows >= 2 && cols >= 2 && data.z.length >= rows * cols;\n const x = data.x && data.x.length >= cols ? data.x : indices(cols);\n const y = data.y && data.y.length >= rows ? data.y : indices(rows);\n const value =\n data.value && data.value.length >= rows * cols ? data.value : null;\n const grid: SurfaceGrid = {\n rows: valid ? rows : 0,\n cols: valid ? cols : 0,\n z: data.z,\n x,\n y,\n value,\n extent: {\n x: valid ? extentOf(x, cols) : emptyExtent(),\n y: valid ? extentOf(y, rows) : emptyExtent(),\n z: valid ? extentOf(data.z, rows * cols) : emptyExtent(),\n value: valid && value ? extentOf(value, rows * cols) : emptyExtent(),\n },\n };\n gridCache.set(data, grid);\n return grid;\n};\n\n// -------------------------------------------------------------------- bars\n\n/** Bars of a series resolved to category indices */\nexport interface BarColumns {\n count: number;\n /** Category index on x / y */\n xi: Int32Array;\n yi: Int32Array;\n /** Bottom and top of every bar (stacked on the series before) */\n z0: Float64Array;\n z1: Float64Array;\n /** Height of the datum itself */\n z: Float64Array;\n /** Index of the datum in the series data */\n source: Int32Array;\n value: Float64Array | null;\n colors: (string | undefined)[] | null;\n labels: (string | undefined)[] | null;\n /** `z`: bottoms and tops (stacks included), `height`: the heights of the data */\n extent: Record<\"z\" | \"height\" | \"value\", Extent>;\n}\n\ntype BarInput = Bar3DSeries[\"data\"][number];\n\nconst barDatum = (item: BarInput): Bar3DDatum =>\n Array.isArray(item)\n ? {\n x: (\n item as readonly [string | number, string | number, number | null]\n )[0],\n y: (\n item as readonly [string | number, string | number, number | null]\n )[1],\n z: (\n item as readonly [string | number, string | number, number | null]\n )[2],\n }\n : (item as Bar3DDatum);\n\n/** Category axis of the bars: names given by the axis or collected from the data */\nexport class CategoryIndex {\n readonly names: string[];\n private readonly lookup = new Map<string, number>();\n private readonly fixed: boolean;\n\n constructor(categories: readonly string[] | undefined) {\n this.names = categories ? [...categories] : [];\n this.fixed = !!categories;\n this.names.forEach((name, i) => this.lookup.set(name, i));\n }\n\n /** Index of a category name (numbers are indices when the categories are given) */\n index(value: string | number): number {\n if (typeof value === \"number\" && this.fixed) {\n return Number.isInteger(value) && value >= 0 && value < this.names.length\n ? value\n : -1;\n }\n const name = String(value);\n const found = this.lookup.get(name);\n if (found !== undefined) return found;\n if (this.fixed) return -1;\n this.names.push(name);\n this.lookup.set(name, this.names.length - 1);\n return this.names.length - 1;\n }\n}\n\n/** Bars of every bar series, stacked in series order where cells coincide */\nexport const barColumns = (\n series: readonly Bar3DSeries[],\n xCategories: CategoryIndex,\n yCategories: CategoryIndex,\n): BarColumns[] => {\n const positive = new Map<number, number>();\n const negative = new Map<number, number>();\n return series.map((s) => {\n const data = s.data as readonly BarInput[];\n const n = data.length;\n const xi = new Int32Array(n);\n const yi = new Int32Array(n);\n const z0 = new Float64Array(n);\n const z1 = new Float64Array(n);\n const z = new Float64Array(n);\n const source = new Int32Array(n);\n let value: Float64Array | null = null;\n let colors: (string | undefined)[] | null = null;\n let labels: (string | undefined)[] | null = null;\n const zExtent = emptyExtent();\n const heightExtent = emptyExtent();\n const valueExtent = emptyExtent();\n let count = 0;\n for (let i = 0; i < n; i++) {\n const d = barDatum(data[i]);\n const cx = xCategories.index(d.x);\n const cy = yCategories.index(d.y);\n const h = d.z;\n if (cx < 0 || cy < 0 || h === null || !Number.isFinite(h)) continue;\n const key = cy * 1_000_003 + cx;\n const stack = h >= 0 ? positive : negative;\n const base = s.hidden ? 0 : (stack.get(key) ?? 0);\n if (!s.hidden) stack.set(key, base + h);\n xi[count] = cx;\n yi[count] = cy;\n z0[count] = base;\n z1[count] = base + h;\n z[count] = h;\n source[count] = i;\n if (d.value !== undefined) {\n value ??= new Float64Array(n).fill(NaN);\n value[count] = d.value;\n merge(valueExtent, { min: d.value, max: d.value });\n }\n if (d.color !== undefined) {\n colors ??= new Array<string | undefined>(n);\n colors[count] = d.color;\n }\n if (d.label !== undefined) {\n labels ??= new Array<string | undefined>(n);\n labels[count] = d.label;\n }\n merge(zExtent, {\n min: Math.min(base, base + h),\n max: Math.max(base, base + h),\n });\n merge(heightExtent, { min: h, max: h });\n count++;\n }\n return {\n count,\n xi,\n yi,\n z0,\n z1,\n z,\n source,\n value,\n colors,\n labels,\n extent: { z: zExtent, height: heightExtent, value: valueExtent },\n };\n });\n};\n\n// -------------------------------------------------------------------- axes\n\nexport interface AxisModel {\n key: AxisKey;\n title: string;\n /** Category names (category axis) or `null` */\n categories: string[] | null;\n domain: [number, number];\n /** Half extent of the axis in world units */\n half: number;\n ticks: number[];\n labels: string[];\n /** Full label of any value (tooltips) */\n format: (value: number) => string;\n grid: boolean;\n visible: boolean;\n}\n\n/** World coordinate of a data value */\nexport const toWorld = (axis: AxisModel, value: number): number => {\n const [min, max] = axis.domain;\n return (((value - min) / (max - min || 1)) * 2 - 1) * axis.half;\n};\n\n/** Data value of a world coordinate */\nexport const fromWorld = (axis: AxisModel, world: number): number => {\n const [min, max] = axis.domain;\n return min + ((world / axis.half + 1) / 2) * (max - min);\n};\n\nconst buildAxis = (\n key: AxisKey,\n options: Chart3DAxisOptions | undefined,\n extent: Extent,\n half: number,\n categories: string[] | null,\n includeZero: boolean,\n locale: Locale3D,\n): AxisModel => {\n const o = options ?? {};\n const count = Math.max(2, o.tickCount ?? 5);\n if (categories) {\n const n = Math.max(1, categories.length);\n const name = (v: number) => {\n const i = Math.round(v);\n return o.format ? o.format(i) : (categories[i] ?? String(i));\n };\n const ticks = Array.from({ length: categories.length }, (_, i) => i);\n return {\n key,\n title: o.title ?? \"\",\n categories,\n domain: [-0.5, n - 0.5],\n half,\n ticks,\n labels: ticks.map(name),\n format: name,\n grid: o.grid ?? true,\n visible: o.visible ?? true,\n };\n }\n let min = o.min ?? extent.min;\n let max = o.max ?? extent.max;\n if (includeZero && o.min === undefined && min > 0) min = 0;\n if (includeZero && o.max === undefined && max < 0) max = 0;\n [min, max] = ensureSpan(min, max);\n if (o.nice ?? true) {\n const [nMin, nMax] = niceDomain(min, max, count);\n if (o.min === undefined) min = nMin;\n if (o.max === undefined) max = nMax;\n }\n const ticks = linearTicks(min, max, count);\n const step = tickStep(min, max, count);\n const tick =\n o.format ?? locale.ticks(step, Math.max(Math.abs(min), Math.abs(max)));\n return {\n key,\n title: o.title ?? \"\",\n categories: null,\n domain: [min, max],\n half,\n ticks,\n labels: ticks.map(tick),\n format: o.format ?? locale.value,\n grid: o.grid ?? true,\n visible: o.visible ?? true,\n };\n};\n\n// ------------------------------------------------------------------ series\n\nexport const seriesType = (series: Chart3DSeries): Chart3DSeriesType =>\n series.type ?? \"scatter\";\n\ninterface SeriesModelBase {\n index: number;\n id: string;\n name: string;\n hidden: boolean;\n /** Color option (resolved later with the theme) */\n color: string | undefined;\n colorBy: Chart3DColorBy;\n opacity: number;\n format: ((value: number) => string) | undefined;\n}\n\nexport interface ScatterModel extends SeriesModelBase {\n type: \"scatter\";\n series: Scatter3DSeries;\n cols: PointColumns;\n}\n\nexport interface LineModel extends SeriesModelBase {\n type: \"line\";\n series: Line3DSeries;\n cols: PointColumns;\n}\n\nexport interface SurfaceModel extends SeriesModelBase {\n type: \"surface\";\n series: Surface3DSeries;\n grid: SurfaceGrid;\n}\n\nexport interface BarModel extends SeriesModelBase {\n type: \"bar\";\n series: Bar3DSeries;\n bars: BarColumns;\n}\n\nexport type SeriesModel = ScatterModel | LineModel | SurfaceModel | BarModel;\n\nexport interface Model3D {\n series: SeriesModel[];\n x: AxisModel;\n y: AxisModel;\n z: AxisModel;\n /** Range mapped to the color scale; `null` when no visible series uses it */\n colorDomain: [number, number] | null;\n /** Whether the color domain comes from the heights only (the color bar reuses the z format) */\n colorFromZ: boolean;\n /** Texts and number formats of the `locale` / `labels` options */\n locale: Locale3D;\n}\n\nconst clamp01 = (v: number | undefined, fallback: number) =>\n v === undefined || !Number.isFinite(v)\n ? fallback\n : Math.max(0, Math.min(1, v));\n\n/** Half extents of the box: `aspect` scaled so the largest side is 2 */\nexport const boxHalf = (\n aspect: readonly [number, number, number] | undefined,\n): [number, number, number] => {\n const a = aspect ?? [1, 1, 0.7];\n const safe = a.map((v) => (Number.isFinite(v) && v > 0 ? v : 1)) as [\n number,\n number,\n number,\n ];\n const largest = Math.max(safe[0], safe[1], safe[2]);\n return [safe[0] / largest, safe[1] / largest, safe[2] / largest];\n};\n\nexport const buildModel = (\n options: Chart3DOptions,\n locale: Locale3D = locale3D(options.locale, options.labels),\n): Model3D => {\n const half = boxHalf(options.aspect);\n const extent = { x: emptyExtent(), y: emptyExtent(), z: emptyExtent() };\n const barSeries = options.series.filter((s) => seriesType(s) === \"bar\");\n const xCategories =\n barSeries.length || options.xAxis?.categories\n ? new CategoryIndex(options.xAxis?.categories)\n : null;\n const yCategories =\n barSeries.length || options.yAxis?.categories\n ? new CategoryIndex(options.yAxis?.categories)\n : null;\n const bars =\n xCategories && yCategories\n ? barColumns(barSeries as Bar3DSeries[], xCategories, yCategories)\n : [];\n let barIndex = 0;\n\n const models: SeriesModel[] = options.series.map((series, index) => {\n const type = seriesType(series);\n const base = {\n index,\n id: series.id ?? String(index),\n name: series.name ?? \"\",\n hidden: !!series.hidden,\n color: series.color,\n format: series.format,\n };\n switch (type) {\n case \"surface\": {\n const s = series as Surface3DSeries;\n const grid = surfaceGrid(s.data);\n merge(extent.x, grid.extent.x);\n merge(extent.y, grid.extent.y);\n merge(extent.z, grid.extent.z);\n return {\n ...base,\n type,\n series: s,\n grid,\n colorBy: s.colorBy ?? (grid.value ? \"value\" : \"z\"),\n opacity: clamp01(s.opacity, 1),\n };\n }\n case \"bar\": {\n const s = series as Bar3DSeries;\n const columns = bars[barIndex++]!;\n merge(extent.z, columns.extent.z);\n return {\n ...base,\n type,\n series: s,\n bars: columns,\n colorBy: s.colorBy ?? \"series\",\n opacity: clamp01(s.opacity, 1),\n };\n }\n default: {\n const s = series as Scatter3DSeries | Line3DSeries;\n const cols = pointColumns(s.data);\n merge(extent.x, cols.extent.x);\n merge(extent.y, cols.extent.y);\n merge(extent.z, cols.extent.z);\n const common = {\n ...base,\n cols,\n colorBy: s.colorBy ?? (cols.value ? \"value\" : \"series\"),\n opacity: clamp01(s.opacity, 1),\n } as const;\n return type === \"line\"\n ? { ...common, type: \"line\", series: s as Line3DSeries }\n : { ...common, type: \"scatter\", series: s as Scatter3DSeries };\n }\n }\n });\n\n const x = buildAxis(\n \"x\",\n options.xAxis,\n extent.x,\n half[0],\n xCategories ? xCategories.names : null,\n false,\n locale,\n );\n const y = buildAxis(\n \"y\",\n options.yAxis,\n extent.y,\n half[1],\n yCategories ? yCategories.names : null,\n false,\n locale,\n );\n const z = buildAxis(\n \"z\",\n options.zAxis,\n extent.z,\n half[2],\n null,\n barSeries.length > 0,\n locale,\n );\n\n // color domain: the colored quantity of every visible series using the scale\n const color = emptyExtent();\n let colorFromZ = true;\n let usesScale = false;\n for (const m of models) {\n if (m.hidden || m.colorBy === \"series\") continue;\n usesScale = true;\n const byValue = m.colorBy === \"value\";\n if (m.type === \"surface\") {\n const e = byValue && m.grid.value ? m.grid.extent.value : m.grid.extent.z;\n if (byValue && m.grid.value) colorFromZ = false;\n merge(color, e);\n } else if (m.type === \"bar\") {\n const e =\n byValue && m.bars.value ? m.bars.extent.value : m.bars.extent.height;\n if (byValue && m.bars.value) colorFromZ = false;\n merge(color, e);\n } else {\n const e = byValue && m.cols.value ? m.cols.extent.value : m.cols.extent.z;\n if (byValue && m.cols.value) colorFromZ = false;\n merge(color, e);\n }\n }\n let colorDomain: [number, number] | null = null;\n if (usesScale) {\n colorDomain = options.valueRange\n ? [options.valueRange[0], options.valueRange[1]]\n : ensureSpan(color.min, color.max);\n }\n return { series: models, x, y, z, colorDomain, colorFromZ, locale };\n};\n"],"mappings":"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"}
@@ -14,6 +14,8 @@ export interface PointColumns {
14
14
  size: ArrayLike<number> | null;
15
15
  value: ArrayLike<number> | null;
16
16
  colors: readonly (string | undefined)[] | null;
17
+ /** Per-point `0xRRGGBB` colors (column data) */
18
+ rgb: ArrayLike<number> | null;
17
19
  labels: readonly (string | undefined)[] | null;
18
20
  extent: Record<AxisKey | "value", Extent>;
19
21
  }
@@ -14,6 +14,8 @@ export interface PointColumns {
14
14
  size: ArrayLike<number> | null;
15
15
  value: ArrayLike<number> | null;
16
16
  colors: readonly (string | undefined)[] | null;
17
+ /** Per-point `0xRRGGBB` colors (column data) */
18
+ rgb: ArrayLike<number> | null;
17
19
  labels: readonly (string | undefined)[] | null;
18
20
  extent: Record<AxisKey | "value", Extent>;
19
21
  }
@@ -28,6 +28,7 @@ var a = () => ({
28
28
  size: e.size ?? null,
29
29
  value: e.value ?? null,
30
30
  colors: null,
31
+ rgb: e.color ?? null,
31
32
  labels: e.label ?? null
32
33
  };
33
34
  else {
@@ -50,6 +51,7 @@ var a = () => ({
50
51
  size: s,
51
52
  value: c,
52
53
  colors: l,
54
+ rgb: null,
53
55
  labels: u
54
56
  };
55
57
  }