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,39 +1,62 @@
1
+ import { writesDepth as e } from "./render-types.js";
2
+ import { GLSL_OIT as t, WGSL_OIT as n } from "./oit.js";
1
3
  //#region src/engine/three-d/shaders.ts
2
- var e = (e, t, n, r, i, a, o, s) => (e.set(t, 0), e.set(n, 16), e.set(r, 20), e.set(i, 24), e.set(a, 28), e.set(o, 32), e.set(s, 36), e), t = (t, n, r) => {
3
- let i = t.kind === "points" ? +!!t.perspective : t.kind === "lines" ? t.width : 0;
4
- return e(r, n.viewProj, [
5
- n.width,
6
- n.height,
7
- n.dpr,
8
- +!!n.orthographic
4
+ var r = (e, t, n, r, i, a, o, s) => (e.set(t, 0), e.set(n, 16), e.set(r, 20), e.set(i, 24), e.set(a, 28), e.set(o, 32), e.set(s, 36), e), i = (e, t, n) => {
5
+ let i = e.kind === "points" ? +!!e.perspective : e.kind === "lines" ? e.width : 0;
6
+ return r(n, t.viewProj, [
7
+ t.width,
8
+ t.height,
9
+ t.dpr,
10
+ +!!t.orthographic
9
11
  ], [
10
- n.eye[0],
11
- n.eye[1],
12
- n.eye[2],
13
- t.kind === "lines" ? t.bias : 0
12
+ t.eye[0],
13
+ t.eye[1],
14
+ t.eye[2],
15
+ e.kind === "lines" ? e.bias : e.kind === "points" ? e.style ?? 0 : 0
14
16
  ], [
15
- n.light[0],
16
- n.light[1],
17
- n.light[2],
18
- 0
19
- ], n.lighting, [
20
- t.opacity,
17
+ t.light[0],
18
+ t.light[1],
19
+ t.light[2],
20
+ e.kind === "points" && e.additive ? 1 : 0
21
+ ], t.lighting, [
22
+ e.opacity,
21
23
  i,
22
- n.distance,
23
- n.radius
24
+ t.distance,
25
+ t.radius
24
26
  ], [
25
- n.fog[0],
26
- n.fog[1],
27
- n.fog[2],
28
- 1
27
+ t.fog[0],
28
+ t.fog[1],
29
+ t.fog[2],
30
+ t.exposure
29
31
  ]);
30
- }, n = (e) => e.opacity >= 1, r = "\nstruct U {\n viewProj: mat4x4f,\n viewport: vec4f,\n eye: vec4f,\n light: vec4f,\n material: vec4f,\n params: vec4f,\n fog: vec4f,\n};\n@group(0) @binding(0) var<uniform> u: U;\n\nfn toWebGpuDepth(p: vec4f) -> vec4f {\n return vec4f(p.x, p.y, (p.z + p.w) * 0.5, p.w);\n}\n\nfn depthCue(world: vec3f) -> f32 {\n let near = u.params.z - u.params.w;\n return clamp((length(world - u.eye.xyz) - near) / (2.0 * u.params.w), 0.0, 1.0);\n}\n", i = `${r}
32
+ }, a = `
33
+ struct U {
34
+ viewProj: mat4x4f,
35
+ viewport: vec4f,
36
+ eye: vec4f,
37
+ light: vec4f,
38
+ material: vec4f,
39
+ params: vec4f,
40
+ fog: vec4f,
41
+ };
42
+ @group(0) @binding(0) var<uniform> u: U;
43
+
44
+ fn toWebGpuDepth(p: vec4f) -> vec4f {
45
+ return vec4f(p.x, p.y, (p.z + p.w) * 0.5, p.w);
46
+ }
47
+
48
+ fn depthCue(world: vec3f) -> f32 {
49
+ let near = u.params.z - u.params.w;
50
+ return clamp((length(world - u.eye.xyz) - near) / (2.0 * u.params.w), 0.0, 1.0);
51
+ }
52
+ ${n}`, o = `${a}
31
53
  struct Out {
32
54
  @builtin(position) position: vec4f,
33
55
  @location(0) offset: vec2f,
34
56
  @location(1) radius: f32,
35
57
  @location(2) color: vec4f,
36
58
  @location(3) fog: f32,
59
+ @location(4) coverage: f32,
37
60
  };
38
61
 
39
62
  @vertex
@@ -50,34 +73,62 @@ fn vs(
50
73
  if (u.params.y > 0.5 && u.viewport.w < 0.5) {
51
74
  factor = clamp(u.params.z / max(clip.w, 1e-6), 0.5, 2.0);
52
75
  }
53
- let radius = max(0.5, size * u.viewport.z * factor * 0.5);
54
- let reach = radius + 1.0;
76
+ let glow = u.eye.w > 1.5;
77
+ let raw = max(size, 0.0) * u.viewport.z * factor * 0.5;
78
+ let radius = max(raw, select(0.5, 0.75, glow));
79
+ let reach = select(radius + 1.0, radius * 2.2 + 1.0, glow);
55
80
  let shift = corner * reach * 2.0 / u.viewport.xy * clip.w;
56
81
  out.position = toWebGpuDepth(vec4f(clip.xy + shift, clip.z, clip.w));
57
82
  out.offset = corner * reach;
58
83
  out.radius = radius;
59
84
  out.color = color;
60
- out.fog = depthCue(pos) * 0.45;
85
+ out.fog = depthCue(pos);
86
+ out.coverage = min(1.0, raw * raw / (radius * radius));
61
87
  return out;
62
88
  }
63
89
 
64
- @fragment
65
- fn fs(in: Out) -> @location(0) vec4f {
90
+ fn shade(in: Out) -> vec4f {
66
91
  let d = length(in.offset);
67
- var alpha = clamp(in.radius + 0.5 - d, 0.0, 1.0);
68
- if (alpha <= 0.0) { discard; }
69
- let q = min(d / in.radius, 1.0);
70
- let n = vec3f(in.offset.x / in.radius, in.offset.y / in.radius, sqrt(max(0.0, 1.0 - q * q)));
71
- let l = normalize(vec3f(-0.45, 0.55, 0.7));
72
- let lambert = max(dot(n, l), 0.0);
73
- let shaded = in.color.rgb * (0.62 + 0.45 * lambert) + vec3f(pow(lambert, 18.0) * 0.28);
74
- let sphere = smoothstep(1.5, 3.5, in.radius);
75
- var rgb = mix(in.color.rgb, shaded, sphere);
76
- rgb = mix(rgb, u.fog.rgb, in.fog);
77
- alpha = alpha * in.color.a * u.params.x;
92
+ let r = in.radius;
93
+ var alpha = clamp(r + 0.5 - d, 0.0, 1.0);
94
+ var rgb = in.color.rgb;
95
+ if (u.eye.w > 1.5) {
96
+ // glow: an anti-aliased core and a gaussian halo
97
+ let core = clamp(r * 0.6 + 0.5 - d, 0.0, 1.0);
98
+ let q = d / r;
99
+ alpha = core + (1.0 - core) * exp(-1.2 * q * q);
100
+ rgb = rgb + (vec3f(1.0) - rgb) * (0.2 * core);
101
+ } else if (u.eye.w < 0.5) {
102
+ let q = min(d / r, 1.0);
103
+ let n = vec3f(in.offset.x / r, in.offset.y / r, sqrt(max(0.0, 1.0 - q * q)));
104
+ let l = normalize(vec3f(-0.45, 0.55, 0.7));
105
+ let lambert = max(dot(n, l), 0.0);
106
+ let shaded = rgb * (0.62 + 0.45 * lambert) + vec3f(pow(lambert, 18.0) * 0.28);
107
+ rgb = mix(rgb, shaded, smoothstep(1.5, 3.5, r));
108
+ }
109
+ if (alpha <= 0.004) { discard; }
110
+ let fog = in.fog * 0.45;
111
+ if (u.light.w > 0.5) {
112
+ // additive light fades with the distance
113
+ alpha = alpha * (1.0 - fog);
114
+ rgb = rgb * u.fog.w;
115
+ } else {
116
+ rgb = mix(rgb, u.fog.rgb, fog);
117
+ }
118
+ alpha = alpha * in.coverage * in.color.a * u.params.x;
78
119
  return vec4f(rgb * alpha, alpha);
79
120
  }
80
- `, a = `${r}
121
+
122
+ @fragment
123
+ fn fs(in: Out) -> @location(0) vec4f {
124
+ return shade(in);
125
+ }
126
+
127
+ @fragment
128
+ fn fsOit(in: Out) -> Oit {
129
+ return oit(shade(in), in.fog);
130
+ }
131
+ `, s = `${a}
81
132
  struct Out {
82
133
  @builtin(position) position: vec4f,
83
134
  @location(0) world: vec3f,
@@ -99,8 +150,7 @@ fn vs(
99
150
  return out;
100
151
  }
101
152
 
102
- @fragment
103
- fn fs(in: Out) -> @location(0) vec4f {
153
+ fn shade(in: Out) -> vec4f {
104
154
  var n = normalize(in.normal);
105
155
  let v = normalize(u.eye.xyz - in.world);
106
156
  if (dot(n, v) < 0.0) { n = -n; }
@@ -112,7 +162,17 @@ fn fs(in: Out) -> @location(0) vec4f {
112
162
  let alpha = in.color.a * u.params.x;
113
163
  return vec4f(rgb * alpha, alpha);
114
164
  }
115
- `, o = `${r}
165
+
166
+ @fragment
167
+ fn fs(in: Out) -> @location(0) vec4f {
168
+ return shade(in);
169
+ }
170
+
171
+ @fragment
172
+ fn fsOit(in: Out) -> Oit {
173
+ return oit(shade(in), depthCue(in.world));
174
+ }
175
+ `, c = `${a}
116
176
  struct Out {
117
177
  @builtin(position) position: vec4f,
118
178
  @location(0) across: f32,
@@ -156,17 +216,20 @@ fn fs(in: Out) -> @location(0) vec4f {
156
216
  if (alpha <= 0.0) { discard; }
157
217
  return vec4f(in.color.rgb * alpha, alpha);
158
218
  }
159
- `, s = "\nuniform mat4 u_viewProj;\nuniform vec4 u_viewport;\nuniform vec4 u_eye;\nuniform vec4 u_light;\nuniform vec4 u_material;\nuniform vec4 u_params;\nuniform vec4 u_fog;\n", c = "\nattribute vec2 a_corner;\nattribute vec3 a_pos;\nattribute float a_size;\nattribute vec4 a_color;\nvarying vec2 v_offset;\nvarying float v_radius;\nvarying vec4 v_color;\nvarying float v_fog;\nvoid main() {\n vec2 corner = a_corner * 2.0 - 1.0;\n vec4 clip = u_viewProj * vec4(a_pos, 1.0);\n float factor = 1.0;\n if (u_params.y > 0.5 && u_viewport.w < 0.5) {\n factor = clamp(u_params.z / max(clip.w, 1e-6), 0.5, 2.0);\n }\n float radius = max(0.5, a_size * u_viewport.z * factor * 0.5);\n float reach = radius + 1.0;\n vec2 shift = corner * reach * 2.0 / u_viewport.xy * clip.w;\n gl_Position = vec4(clip.xy + shift, clip.z, clip.w);\n v_offset = corner * reach;\n v_radius = radius;\n v_color = a_color;\n float near = u_params.z - u_params.w;\n v_fog = clamp((length(a_pos - u_eye.xyz) - near) / (2.0 * u_params.w), 0.0, 1.0) * 0.45;\n}\n", l = "\nvarying vec2 v_offset;\nvarying float v_radius;\nvarying vec4 v_color;\nvarying float v_fog;\nvoid main() {\n float d = length(v_offset);\n float alpha = clamp(v_radius + 0.5 - d, 0.0, 1.0);\n if (alpha <= 0.0) discard;\n float q = min(d / v_radius, 1.0);\n vec3 n = vec3(v_offset / v_radius, sqrt(max(0.0, 1.0 - q * q)));\n vec3 l = normalize(vec3(-0.45, 0.55, 0.7));\n float lambert = max(dot(n, l), 0.0);\n vec3 shaded = v_color.rgb * (0.62 + 0.45 * lambert) + vec3(pow(lambert, 18.0) * 0.28);\n float sphere = smoothstep(1.5, 3.5, v_radius);\n vec3 rgb = mix(v_color.rgb, shaded, sphere);\n rgb = mix(rgb, u_fog.rgb, v_fog);\n alpha = alpha * v_color.a * u_params.x;\n FRAG = vec4(rgb * alpha, alpha);\n}\n", u = "\nattribute vec3 a_pos;\nattribute vec3 a_normal;\nattribute vec4 a_color;\nvarying vec3 v_world;\nvarying vec3 v_normal;\nvarying vec4 v_color;\nvoid main() {\n gl_Position = u_viewProj * vec4(a_pos, 1.0);\n v_world = a_pos;\n v_normal = a_normal;\n v_color = a_color;\n}\n", d = "\nvarying vec3 v_world;\nvarying vec3 v_normal;\nvarying vec4 v_color;\nvoid main() {\n vec3 n = normalize(v_normal);\n vec3 v = normalize(u_eye.xyz - v_world);\n if (dot(n, v) < 0.0) n = -n;\n vec3 l = u_light.xyz;\n float diffuse = max(dot(n, l), 0.0);\n vec3 h = normalize(l + v);\n float specular = pow(max(dot(n, h), 0.0), u_material.w) * u_material.z;\n vec3 rgb = v_color.rgb * (u_material.x + u_material.y * diffuse) + vec3(specular);\n float alpha = v_color.a * u_params.x;\n FRAG = vec4(rgb * alpha, alpha);\n}\n", f = "\nattribute vec2 a_corner;\nattribute vec3 a_a;\nattribute vec3 a_b;\nattribute vec4 a_color;\nvarying float v_across;\nvarying vec4 v_color;\nvoid main() {\n vec4 ca = u_viewProj * vec4(a_a, 1.0);\n vec4 cb = u_viewProj * vec4(a_b, 1.0);\n vec2 halfSize = u_viewport.xy * 0.5;\n vec2 sa = ca.xy / ca.w * halfSize;\n vec2 sb = cb.xy / cb.w * halfSize;\n vec2 dir = sb - sa;\n float len = length(dir);\n dir = len > 1e-6 ? dir / len : vec2(1.0, 0.0);\n vec2 normal = vec2(-dir.y, dir.x);\n float w = max(0.5, u_params.y * u_viewport.z * 0.5) + 0.5;\n bool atEnd = a_corner.x > 0.5;\n vec4 clip = atEnd ? cb : ca;\n float side = a_corner.y * 2.0 - 1.0;\n vec2 pixel = (atEnd ? sb : sa) + dir * (a_corner.x * 2.0 - 1.0) * w + normal * side * w;\n gl_Position = vec4(pixel / halfSize * clip.w, clip.z - u_eye.w * clip.w, clip.w);\n v_across = side * w;\n v_color = a_color;\n}\n", p = "\nvarying float v_across;\nvarying vec4 v_color;\nvoid main() {\n float core = u_params.y * u_viewport.z * 0.5;\n float coverage = clamp(max(core, 0.5) + 0.5 - abs(v_across), 0.0, 1.0) * min(1.0, core * 2.0);\n float alpha = coverage * v_color.a * u_params.x;\n if (alpha <= 0.0) discard;\n FRAG = vec4(v_color.rgb * alpha, alpha);\n}\n", m = "\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n", h = (e, t, n) => n === 2 ? {
160
- vertex: `#version 300 es\n#define attribute in\n#define varying out\n${s}${e}`,
161
- fragment: `#version 300 es\nprecision highp float;\n#define varying in\nout vec4 fragColor;\n#define FRAG fragColor\n${s}${t}`
219
+ `, l = "\nuniform mat4 u_viewProj;\nuniform vec4 u_viewport;\nuniform vec4 u_eye;\nuniform vec4 u_light;\nuniform vec4 u_material;\nuniform vec4 u_params;\nuniform vec4 u_fog;\n", u = "\nattribute vec2 a_corner;\nattribute vec3 a_pos;\nattribute float a_size;\nattribute vec4 a_color;\nvarying vec2 v_offset;\nvarying float v_radius;\nvarying vec4 v_color;\nvarying float v_fog;\nvarying float v_coverage;\nvoid main() {\n vec2 corner = a_corner * 2.0 - 1.0;\n vec4 clip = u_viewProj * vec4(a_pos, 1.0);\n float factor = 1.0;\n if (u_params.y > 0.5 && u_viewport.w < 0.5) {\n factor = clamp(u_params.z / max(clip.w, 1e-6), 0.5, 2.0);\n }\n bool glow = u_eye.w > 1.5;\n float raw = max(a_size, 0.0) * u_viewport.z * factor * 0.5;\n float radius = max(raw, glow ? 0.75 : 0.5);\n float reach = glow ? radius * 2.2 + 1.0 : radius + 1.0;\n vec2 shift = corner * reach * 2.0 / u_viewport.xy * clip.w;\n gl_Position = vec4(clip.xy + shift, clip.z, clip.w);\n v_offset = corner * reach;\n v_radius = radius;\n v_color = a_color;\n float near = u_params.z - u_params.w;\n v_fog = clamp((length(a_pos - u_eye.xyz) - near) / (2.0 * u_params.w), 0.0, 1.0);\n v_coverage = min(1.0, raw * raw / (radius * radius));\n}\n", d = "\nvarying vec2 v_offset;\nvarying float v_radius;\nvarying vec4 v_color;\nvarying float v_fog;\nvarying float v_coverage;\nvoid main() {\n float d = length(v_offset);\n float r = v_radius;\n float alpha = clamp(r + 0.5 - d, 0.0, 1.0);\n vec3 rgb = v_color.rgb;\n if (u_eye.w > 1.5) {\n float core = clamp(r * 0.6 + 0.5 - d, 0.0, 1.0);\n float q = d / r;\n alpha = core + (1.0 - core) * exp(-1.2 * q * q);\n rgb = rgb + (vec3(1.0) - rgb) * (0.2 * core);\n } else if (u_eye.w < 0.5) {\n float q = min(d / r, 1.0);\n vec3 n = vec3(v_offset / r, sqrt(max(0.0, 1.0 - q * q)));\n vec3 l = normalize(vec3(-0.45, 0.55, 0.7));\n float lambert = max(dot(n, l), 0.0);\n vec3 shaded = rgb * (0.62 + 0.45 * lambert) + vec3(pow(lambert, 18.0) * 0.28);\n rgb = mix(rgb, shaded, smoothstep(1.5, 3.5, r));\n }\n if (alpha <= 0.004) discard;\n float fog = v_fog * 0.45;\n if (u_light.w > 0.5) {\n alpha = alpha * (1.0 - fog);\n rgb = rgb * u_fog.w;\n } else {\n rgb = mix(rgb, u_fog.rgb, fog);\n }\n alpha = alpha * v_coverage * v_color.a * u_params.x;\n EMIT(vec4(rgb * alpha, alpha), v_fog);\n}\n", f = "\nattribute vec3 a_pos;\nattribute vec3 a_normal;\nattribute vec4 a_color;\nvarying vec3 v_world;\nvarying vec3 v_normal;\nvarying vec4 v_color;\nvoid main() {\n gl_Position = u_viewProj * vec4(a_pos, 1.0);\n v_world = a_pos;\n v_normal = a_normal;\n v_color = a_color;\n}\n", p = "\nvarying vec3 v_world;\nvarying vec3 v_normal;\nvarying vec4 v_color;\nvoid main() {\n vec3 n = normalize(v_normal);\n vec3 v = normalize(u_eye.xyz - v_world);\n if (dot(n, v) < 0.0) n = -n;\n vec3 l = u_light.xyz;\n float diffuse = max(dot(n, l), 0.0);\n vec3 h = normalize(l + v);\n float specular = pow(max(dot(n, h), 0.0), u_material.w) * u_material.z;\n vec3 rgb = v_color.rgb * (u_material.x + u_material.y * diffuse) + vec3(specular);\n float alpha = v_color.a * u_params.x;\n float near = u_params.z - u_params.w;\n float depth = (length(v_world - u_eye.xyz) - near) / (2.0 * u_params.w);\n EMIT(vec4(rgb * alpha, alpha), depth);\n}\n", m = "\nattribute vec2 a_corner;\nattribute vec3 a_a;\nattribute vec3 a_b;\nattribute vec4 a_color;\nvarying float v_across;\nvarying vec4 v_color;\nvoid main() {\n vec4 ca = u_viewProj * vec4(a_a, 1.0);\n vec4 cb = u_viewProj * vec4(a_b, 1.0);\n vec2 halfSize = u_viewport.xy * 0.5;\n vec2 sa = ca.xy / ca.w * halfSize;\n vec2 sb = cb.xy / cb.w * halfSize;\n vec2 dir = sb - sa;\n float len = length(dir);\n dir = len > 1e-6 ? dir / len : vec2(1.0, 0.0);\n vec2 normal = vec2(-dir.y, dir.x);\n float w = max(0.5, u_params.y * u_viewport.z * 0.5) + 0.5;\n bool atEnd = a_corner.x > 0.5;\n vec4 clip = atEnd ? cb : ca;\n float side = a_corner.y * 2.0 - 1.0;\n vec2 pixel = (atEnd ? sb : sa) + dir * (a_corner.x * 2.0 - 1.0) * w + normal * side * w;\n gl_Position = vec4(pixel / halfSize * clip.w, clip.z - u_eye.w * clip.w, clip.w);\n v_across = side * w;\n v_color = a_color;\n}\n", h = "\nvarying float v_across;\nvarying vec4 v_color;\nvoid main() {\n float core = u_params.y * u_viewport.z * 0.5;\n float coverage = clamp(max(core, 0.5) + 0.5 - abs(v_across), 0.0, 1.0) * min(1.0, core * 2.0);\n float alpha = coverage * v_color.a * u_params.x;\n if (alpha <= 0.0) discard;\n EMIT(vec4(v_color.rgb * alpha, alpha), 0.0);\n}\n", g = "\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n", _ = (e, n, r, i = !1) => r === 2 ? {
220
+ vertex: `#version 300 es\n#define attribute in\n#define varying out\n${l}${e}`,
221
+ fragment: `#version 300 es\nprecision highp float;\n#define varying in\n${l}${i ? t : "out vec4 fragColor;\n#define EMIT(c, d) fragColor = (c)\n"}${n}`
162
222
  } : {
163
- vertex: `${s}${e}`,
164
- fragment: `${m}#define FRAG gl_FragColor\n${s}${t}`
165
- }, g = (e) => ({
166
- points: h(c, l, e),
167
- mesh: h(u, d, e),
168
- lines: h(f, p, e)
169
- }), _ = {
223
+ vertex: `${l}${e}`,
224
+ fragment: `${g}#define EMIT(c, d) gl_FragColor = (c)\n${l}${n}`
225
+ }, v = (e) => ({
226
+ points: _(u, d, e),
227
+ mesh: _(f, p, e),
228
+ lines: _(m, h, e)
229
+ }), y = () => ({
230
+ points: _(u, d, 2, !0),
231
+ mesh: _(f, p, 2, !0)
232
+ }), b = {
170
233
  points: [
171
234
  "a_corner",
172
235
  "a_pos",
@@ -186,6 +249,6 @@ fn fs(in: Out) -> @location(0) vec4f {
186
249
  ]
187
250
  };
188
251
  //#endregion
189
- export { _ as GLSL_ATTRIBUTES, o as WGSL_LINES, a as WGSL_MESH, i as WGSL_POINTS, g as glslPrograms, t as itemUniforms, n as writesDepth };
252
+ export { b as GLSL_ATTRIBUTES, c as WGSL_LINES, s as WGSL_MESH, o as WGSL_POINTS, y as glslOitPrograms, v as glslPrograms, i as itemUniforms, e as writesDepth };
190
253
 
191
254
  //# sourceMappingURL=shaders.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shaders.js","names":["writeUniforms","out","viewProj","viewport","eye","light","material","params","fog","itemUniforms","second","item","frame","writesDepth","WGSL_UNIFORMS","WGSL_POINTS","WGSL_MESH","WGSL_LINES","GLSL_UNIFORMS","GLSL_POINTS_VS","GLSL_POINTS_FS","GLSL_MESH_VS","GLSL_MESH_FS","GLSL_LINES_VS","GLSL_LINES_FS","PRECISION","glsl","version","vs","fs","glslPrograms","GLSL_ATTRIBUTES"],"sources":["../../../../../charts/src/engine/three-d/shaders.ts"],"sourcesContent":["// Shaders of the 3D data layer: instanced point billboards shaded as small\n// spheres, lit triangles (two-sided Lambert + Blinn-Phong) and screen-space\n// wide line segments. WGSL for WebGPU, GLSL ES 1.0 for WebGL (turned into\n// GLSL ES 3.0 for WebGL2 by a macro prefix). Outputs are premultiplied.\n//\n// Uniforms (WGSL struct, GLSL vec4 uniforms of the same names):\n// viewProj world -> clip (OpenGL depth convention)\n// viewport drawing buffer width, height (device px), dpr, orthographic\n// eye camera position, depth bias of the lines (NDC)\n// light unit vector towards the light\n// material ambient, diffuse, specular, shininess\n// params opacity, perspective sizes (0/1) | line width (CSS px), distance, radius\n// fog background color (far points fade towards it)\n\nimport type { Frame3D, Item3D } from \"./render-types\";\n\n/** Bytes of the WGSL uniform struct */\nexport const UNIFORM_BYTES = 160;\n\n/** Writes the uniforms of an item in the WGSL struct layout */\nconst writeUniforms = (\n out: Float32Array,\n viewProj: Float32Array,\n viewport: readonly [number, number, number, number],\n eye: readonly [number, number, number, number],\n light: readonly [number, number, number, number],\n material: readonly [number, number, number, number],\n params: readonly [number, number, number, number],\n fog: readonly [number, number, number, number],\n): Float32Array => {\n out.set(viewProj, 0);\n out.set(viewport, 16);\n out.set(eye, 20);\n out.set(light, 24);\n out.set(material, 28);\n out.set(params, 32);\n out.set(fog, 36);\n return out;\n};\n\n/** Uniform values of an item (40 floats, the WGSL struct layout) */\nexport const itemUniforms = (\n item: Item3D,\n frame: Frame3D,\n out: Float32Array,\n): Float32Array => {\n const second =\n item.kind === \"points\"\n ? item.perspective\n ? 1\n : 0\n : item.kind === \"lines\"\n ? item.width\n : 0;\n return writeUniforms(\n out,\n frame.viewProj,\n [frame.width, frame.height, frame.dpr, frame.orthographic ? 1 : 0],\n [\n frame.eye[0],\n frame.eye[1],\n frame.eye[2],\n item.kind === \"lines\" ? item.bias : 0,\n ],\n [frame.light[0], frame.light[1], frame.light[2], 0],\n frame.lighting,\n [item.opacity, second, frame.distance, frame.radius],\n [frame.fog[0], frame.fog[1], frame.fog[2], 1],\n );\n};\n\n/** Whether an item writes the depth buffer (opaque items) */\nexport const writesDepth = (item: Item3D): boolean => item.opacity >= 1;\n\n// ------------------------------------------------------------------- WGSL\n\nconst WGSL_UNIFORMS = /* wgsl */ `\nstruct U {\n viewProj: mat4x4f,\n viewport: vec4f,\n eye: vec4f,\n light: vec4f,\n material: vec4f,\n params: vec4f,\n fog: vec4f,\n};\n@group(0) @binding(0) var<uniform> u: U;\n\nfn toWebGpuDepth(p: vec4f) -> vec4f {\n return vec4f(p.x, p.y, (p.z + p.w) * 0.5, p.w);\n}\n\nfn depthCue(world: vec3f) -> f32 {\n let near = u.params.z - u.params.w;\n return clamp((length(world - u.eye.xyz) - near) / (2.0 * u.params.w), 0.0, 1.0);\n}\n`;\n\nexport const WGSL_POINTS = /* wgsl */ `${WGSL_UNIFORMS}\nstruct Out {\n @builtin(position) position: vec4f,\n @location(0) offset: vec2f,\n @location(1) radius: f32,\n @location(2) color: vec4f,\n @location(3) fog: f32,\n};\n\n@vertex\nfn vs(\n @builtin(vertex_index) vi: u32,\n @location(0) pos: vec3f,\n @location(1) size: f32,\n @location(2) color: vec4f,\n) -> Out {\n var out: Out;\n let corner = vec2f(f32(vi & 1u), f32(vi >> 1u)) * 2.0 - 1.0;\n let clip = u.viewProj * vec4f(pos, 1.0);\n var factor = 1.0;\n if (u.params.y > 0.5 && u.viewport.w < 0.5) {\n factor = clamp(u.params.z / max(clip.w, 1e-6), 0.5, 2.0);\n }\n let radius = max(0.5, size * u.viewport.z * factor * 0.5);\n let reach = radius + 1.0;\n let shift = corner * reach * 2.0 / u.viewport.xy * clip.w;\n out.position = toWebGpuDepth(vec4f(clip.xy + shift, clip.z, clip.w));\n out.offset = corner * reach;\n out.radius = radius;\n out.color = color;\n out.fog = depthCue(pos) * 0.45;\n return out;\n}\n\n@fragment\nfn fs(in: Out) -> @location(0) vec4f {\n let d = length(in.offset);\n var alpha = clamp(in.radius + 0.5 - d, 0.0, 1.0);\n if (alpha <= 0.0) { discard; }\n let q = min(d / in.radius, 1.0);\n let n = vec3f(in.offset.x / in.radius, in.offset.y / in.radius, sqrt(max(0.0, 1.0 - q * q)));\n let l = normalize(vec3f(-0.45, 0.55, 0.7));\n let lambert = max(dot(n, l), 0.0);\n let shaded = in.color.rgb * (0.62 + 0.45 * lambert) + vec3f(pow(lambert, 18.0) * 0.28);\n let sphere = smoothstep(1.5, 3.5, in.radius);\n var rgb = mix(in.color.rgb, shaded, sphere);\n rgb = mix(rgb, u.fog.rgb, in.fog);\n alpha = alpha * in.color.a * u.params.x;\n return vec4f(rgb * alpha, alpha);\n}\n`;\n\nexport const WGSL_MESH = /* wgsl */ `${WGSL_UNIFORMS}\nstruct Out {\n @builtin(position) position: vec4f,\n @location(0) world: vec3f,\n @location(1) normal: vec3f,\n @location(2) color: vec4f,\n};\n\n@vertex\nfn vs(\n @location(0) pos: vec3f,\n @location(1) normal: vec3f,\n @location(2) color: vec4f,\n) -> Out {\n var out: Out;\n out.position = toWebGpuDepth(u.viewProj * vec4f(pos, 1.0));\n out.world = pos;\n out.normal = normal;\n out.color = color;\n return out;\n}\n\n@fragment\nfn fs(in: Out) -> @location(0) vec4f {\n var n = normalize(in.normal);\n let v = normalize(u.eye.xyz - in.world);\n if (dot(n, v) < 0.0) { n = -n; }\n let l = u.light.xyz;\n let diffuse = max(dot(n, l), 0.0);\n let h = normalize(l + v);\n let specular = pow(max(dot(n, h), 0.0), u.material.w) * u.material.z;\n let rgb = in.color.rgb * (u.material.x + u.material.y * diffuse) + vec3f(specular);\n let alpha = in.color.a * u.params.x;\n return vec4f(rgb * alpha, alpha);\n}\n`;\n\nexport const WGSL_LINES = /* wgsl */ `${WGSL_UNIFORMS}\nstruct Out {\n @builtin(position) position: vec4f,\n @location(0) across: f32,\n @location(1) color: vec4f,\n};\n\n@vertex\nfn vs(\n @builtin(vertex_index) vi: u32,\n @location(0) a: vec3f,\n @location(1) b: vec3f,\n @location(2) color: vec4f,\n) -> Out {\n var out: Out;\n let corner = vec2f(f32(vi & 1u), f32(vi >> 1u));\n let ca = u.viewProj * vec4f(a, 1.0);\n let cb = u.viewProj * vec4f(b, 1.0);\n let halfSize = u.viewport.xy * 0.5;\n let sa = ca.xy / ca.w * halfSize;\n let sb = cb.xy / cb.w * halfSize;\n var dir = sb - sa;\n let len = length(dir);\n dir = select(vec2f(1.0, 0.0), dir / len, len > 1e-6);\n let normal = vec2f(-dir.y, dir.x);\n let w = max(0.5, u.params.y * u.viewport.z * 0.5) + 0.5;\n let clip = select(ca, cb, corner.x > 0.5);\n let side = corner.y * 2.0 - 1.0;\n let pixel = select(sa, sb, corner.x > 0.5) + dir * (corner.x * 2.0 - 1.0) * w + normal * side * w;\n let z = clip.z - u.eye.w * clip.w;\n out.position = toWebGpuDepth(vec4f(pixel / halfSize * clip.w, z, clip.w));\n out.across = side * w;\n out.color = color;\n return out;\n}\n\n@fragment\nfn fs(in: Out) -> @location(0) vec4f {\n let core = u.params.y * u.viewport.z * 0.5;\n let coverage = clamp(max(core, 0.5) + 0.5 - abs(in.across), 0.0, 1.0) * min(1.0, core * 2.0);\n let alpha = coverage * in.color.a * u.params.x;\n if (alpha <= 0.0) { discard; }\n return vec4f(in.color.rgb * alpha, alpha);\n}\n`;\n\n// ------------------------------------------------------------------- GLSL\n\nconst GLSL_UNIFORMS = `\nuniform mat4 u_viewProj;\nuniform vec4 u_viewport;\nuniform vec4 u_eye;\nuniform vec4 u_light;\nuniform vec4 u_material;\nuniform vec4 u_params;\nuniform vec4 u_fog;\n`;\n\nconst GLSL_POINTS_VS = `\nattribute vec2 a_corner;\nattribute vec3 a_pos;\nattribute float a_size;\nattribute vec4 a_color;\nvarying vec2 v_offset;\nvarying float v_radius;\nvarying vec4 v_color;\nvarying float v_fog;\nvoid main() {\n vec2 corner = a_corner * 2.0 - 1.0;\n vec4 clip = u_viewProj * vec4(a_pos, 1.0);\n float factor = 1.0;\n if (u_params.y > 0.5 && u_viewport.w < 0.5) {\n factor = clamp(u_params.z / max(clip.w, 1e-6), 0.5, 2.0);\n }\n float radius = max(0.5, a_size * u_viewport.z * factor * 0.5);\n float reach = radius + 1.0;\n vec2 shift = corner * reach * 2.0 / u_viewport.xy * clip.w;\n gl_Position = vec4(clip.xy + shift, clip.z, clip.w);\n v_offset = corner * reach;\n v_radius = radius;\n v_color = a_color;\n float near = u_params.z - u_params.w;\n v_fog = clamp((length(a_pos - u_eye.xyz) - near) / (2.0 * u_params.w), 0.0, 1.0) * 0.45;\n}\n`;\n\nconst GLSL_POINTS_FS = `\nvarying vec2 v_offset;\nvarying float v_radius;\nvarying vec4 v_color;\nvarying float v_fog;\nvoid main() {\n float d = length(v_offset);\n float alpha = clamp(v_radius + 0.5 - d, 0.0, 1.0);\n if (alpha <= 0.0) discard;\n float q = min(d / v_radius, 1.0);\n vec3 n = vec3(v_offset / v_radius, sqrt(max(0.0, 1.0 - q * q)));\n vec3 l = normalize(vec3(-0.45, 0.55, 0.7));\n float lambert = max(dot(n, l), 0.0);\n vec3 shaded = v_color.rgb * (0.62 + 0.45 * lambert) + vec3(pow(lambert, 18.0) * 0.28);\n float sphere = smoothstep(1.5, 3.5, v_radius);\n vec3 rgb = mix(v_color.rgb, shaded, sphere);\n rgb = mix(rgb, u_fog.rgb, v_fog);\n alpha = alpha * v_color.a * u_params.x;\n FRAG = vec4(rgb * alpha, alpha);\n}\n`;\n\nconst GLSL_MESH_VS = `\nattribute vec3 a_pos;\nattribute vec3 a_normal;\nattribute vec4 a_color;\nvarying vec3 v_world;\nvarying vec3 v_normal;\nvarying vec4 v_color;\nvoid main() {\n gl_Position = u_viewProj * vec4(a_pos, 1.0);\n v_world = a_pos;\n v_normal = a_normal;\n v_color = a_color;\n}\n`;\n\nconst GLSL_MESH_FS = `\nvarying vec3 v_world;\nvarying vec3 v_normal;\nvarying vec4 v_color;\nvoid main() {\n vec3 n = normalize(v_normal);\n vec3 v = normalize(u_eye.xyz - v_world);\n if (dot(n, v) < 0.0) n = -n;\n vec3 l = u_light.xyz;\n float diffuse = max(dot(n, l), 0.0);\n vec3 h = normalize(l + v);\n float specular = pow(max(dot(n, h), 0.0), u_material.w) * u_material.z;\n vec3 rgb = v_color.rgb * (u_material.x + u_material.y * diffuse) + vec3(specular);\n float alpha = v_color.a * u_params.x;\n FRAG = vec4(rgb * alpha, alpha);\n}\n`;\n\nconst GLSL_LINES_VS = `\nattribute vec2 a_corner;\nattribute vec3 a_a;\nattribute vec3 a_b;\nattribute vec4 a_color;\nvarying float v_across;\nvarying vec4 v_color;\nvoid main() {\n vec4 ca = u_viewProj * vec4(a_a, 1.0);\n vec4 cb = u_viewProj * vec4(a_b, 1.0);\n vec2 halfSize = u_viewport.xy * 0.5;\n vec2 sa = ca.xy / ca.w * halfSize;\n vec2 sb = cb.xy / cb.w * halfSize;\n vec2 dir = sb - sa;\n float len = length(dir);\n dir = len > 1e-6 ? dir / len : vec2(1.0, 0.0);\n vec2 normal = vec2(-dir.y, dir.x);\n float w = max(0.5, u_params.y * u_viewport.z * 0.5) + 0.5;\n bool atEnd = a_corner.x > 0.5;\n vec4 clip = atEnd ? cb : ca;\n float side = a_corner.y * 2.0 - 1.0;\n vec2 pixel = (atEnd ? sb : sa) + dir * (a_corner.x * 2.0 - 1.0) * w + normal * side * w;\n gl_Position = vec4(pixel / halfSize * clip.w, clip.z - u_eye.w * clip.w, clip.w);\n v_across = side * w;\n v_color = a_color;\n}\n`;\n\nconst GLSL_LINES_FS = `\nvarying float v_across;\nvarying vec4 v_color;\nvoid main() {\n float core = u_params.y * u_viewport.z * 0.5;\n float coverage = clamp(max(core, 0.5) + 0.5 - abs(v_across), 0.0, 1.0) * min(1.0, core * 2.0);\n float alpha = coverage * v_color.a * u_params.x;\n if (alpha <= 0.0) discard;\n FRAG = vec4(v_color.rgb * alpha, alpha);\n}\n`;\n\nconst PRECISION = `\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n`;\n\nexport interface GlslSource {\n vertex: string;\n fragment: string;\n}\n\nconst glsl = (vs: string, fs: string, version: 1 | 2): GlslSource =>\n version === 2\n ? {\n vertex: `#version 300 es\\n#define attribute in\\n#define varying out\\n${GLSL_UNIFORMS}${vs}`,\n fragment: `#version 300 es\\nprecision highp float;\\n#define varying in\\nout vec4 fragColor;\\n#define FRAG fragColor\\n${GLSL_UNIFORMS}${fs}`,\n }\n : {\n vertex: `${GLSL_UNIFORMS}${vs}`,\n fragment: `${PRECISION}#define FRAG gl_FragColor\\n${GLSL_UNIFORMS}${fs}`,\n };\n\n/** GLSL programs of the three primitives for WebGL (1) or WebGL2 */\nexport const glslPrograms = (version: 1 | 2) => ({\n points: glsl(GLSL_POINTS_VS, GLSL_POINTS_FS, version),\n mesh: glsl(GLSL_MESH_VS, GLSL_MESH_FS, version),\n lines: glsl(GLSL_LINES_VS, GLSL_LINES_FS, version),\n});\n\n/** Attribute names of every program, bound to locations 0, 1, ... */\nexport const GLSL_ATTRIBUTES = {\n points: [\"a_corner\", \"a_pos\", \"a_size\", \"a_color\"],\n mesh: [\"a_pos\", \"a_normal\", \"a_color\"],\n lines: [\"a_corner\", \"a_a\", \"a_b\", \"a_color\"],\n} as const;\n"],"mappings":";AAoBA,IAAMA,KACJ,GACA,GACA,GACA,GACA,GACA,GACA,GACA,OAEAC,EAAI,IAAIC,GAAU,CAAC,GACnBD,EAAI,IAAIE,GAAU,EAAE,GACpBF,EAAI,IAAIG,GAAK,EAAE,GACfH,EAAI,IAAII,GAAO,EAAE,GACjBJ,EAAI,IAAIK,GAAU,EAAE,GACpBL,EAAI,IAAIM,GAAQ,EAAE,GAClBN,EAAI,IAAIO,GAAK,EAAE,GACRP,IAIIQ,KACX,GACA,GACA,MACiB;CACjB,IAAMC,IACJC,EAAK,SAAS,WACV,KAAK,cAGLA,EAAK,SAAS,UACZA,EAAK,QACL;CACR,OAAOX,EACLC,GACAW,EAAM,UACN;EAACA,EAAM;EAAOA,EAAM;EAAQA,EAAM;EAAK,KAAM;CAAoB,GACjE;EACEA,EAAM,IAAI;EACVA,EAAM,IAAI;EACVA,EAAM,IAAI;EACVD,EAAK,SAAS,UAAUA,EAAK,OAAO;CACtC,GACA;EAACC,EAAM,MAAM;EAAIA,EAAM,MAAM;EAAIA,EAAM,MAAM;EAAI;CAAC,GAClDA,EAAM,UACN;EAACD,EAAK;EAASD;EAAQE,EAAM;EAAUA,EAAM;CAAM,GACnD;EAACA,EAAM,IAAI;EAAIA,EAAM,IAAI;EAAIA,EAAM,IAAI;EAAI;CAAC,CAC9C;AACF,GAGaC,KAAe,MAA0BF,EAAK,WAAW,GAIhEG,IAA2B,kcAsBpBC,IAAyB,GAAGD,EAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoD1CE,IAAuB,GAAGF,EAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCxCG,IAAwB,GAAGH,EAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDhDI,IAAgB,6KAUhBC,IAAiB,i2BA4BjBC,IAAiB,ytBAsBjBC,IAAe,0RAefC,IAAe,whBAkBfC,IAAgB,+3BA4BhBC,IAAgB,yVAYhBC,IAAY,0GAaZC,KAAQ,GAAY,GAAY,MACpCC,MAAY,IACR;CACE,QAAQ,+DAA+DT,IAAgBU;CACvF,UAAU,6GAA6GV,IAAgBW;AACzI,IACA;CACE,QAAQ,GAAGX,IAAgBU;CAC3B,UAAU,GAAGH,EAAU,6BAA6BP,IAAgBW;AACtE,GAGOC,KAAgB,OAAoB;CAC/C,QAAQJ,EAAKP,GAAgBC,GAAgBO,CAAO;CACpD,MAAMD,EAAKL,GAAcC,GAAcK,CAAO;CAC9C,OAAOD,EAAKH,GAAeC,GAAeG,CAAO;AACnD,IAGaI,IAAkB;CAC7B,QAAQ;EAAC;EAAY;EAAS;EAAU;CAAS;CACjD,MAAM;EAAC;EAAS;EAAY;CAAS;CACrC,OAAO;EAAC;EAAY;EAAO;EAAO;CAAS;AAC7C"}
1
+ {"version":3,"file":"shaders.js","names":["writeUniforms","out","viewProj","viewport","eye","light","material","params","fog","itemUniforms","second","item","frame","WGSL_UNIFORMS","WGSL_OIT","WGSL_POINTS","WGSL_MESH","WGSL_LINES","GLSL_UNIFORMS","GLSL_POINTS_VS","GLSL_POINTS_FS","GLSL_MESH_VS","GLSL_MESH_FS","GLSL_LINES_VS","GLSL_LINES_FS","PRECISION","glsl","version","vs","oit","GLSL_OIT","fs","glslPrograms","glslOitPrograms","GLSL_ATTRIBUTES","writesDepth"],"sources":["../../../../../charts/src/engine/three-d/shaders.ts"],"sourcesContent":["// Shaders of the 3D data layer: instanced point billboards (shaded spheres,\n// flat discs or glowing discs), lit triangles (two-sided Lambert +\n// Blinn-Phong) and screen-space wide line segments. WGSL for WebGPU, GLSL ES\n// 1.0 for WebGL (turned into GLSL ES 3.0 for WebGL2 by a macro prefix).\n// Outputs are premultiplied.\n//\n// Uniforms (WGSL struct, GLSL vec4 uniforms of the same names):\n// viewProj world -> clip (OpenGL depth convention)\n// viewport drawing buffer width, height (device px), dpr, orthographic\n// eye camera position, depth bias of the lines (NDC) | point style\n// light unit vector towards the light, additive points (0/1)\n// material ambient, diffuse, specular, shininess\n// params opacity, perspective sizes (0/1) | line width (CSS px), distance, radius\n// fog background color (far points fade towards it), exposure of the\n// additive light\n//\n// Points and meshes have a second fragment entry point writing the targets\n// of the order-independent transparency (`oit.ts`): `fsOit` in WGSL, the\n// `oit` variant of the GLSL programs (WebGL2).\n//\n// Point sizes are CSS pixels times the device pixel ratio (billboards: no\n// point size limit). Dots thinner than the smallest drawn radius keep their\n// energy: their alpha scales with the area they would cover.\n\nimport { GLSL_OIT, WGSL_OIT } from \"./oit\";\nimport { POINT_SPHERE, type Frame3D, type Item3D } from \"./render-types\";\n\nexport { writesDepth } from \"./render-types\";\n\n/** Bytes of the WGSL uniform struct */\nexport const UNIFORM_BYTES = 160;\n\n/** Writes the uniforms of an item in the WGSL struct layout */\nconst writeUniforms = (\n out: Float32Array,\n viewProj: Float32Array,\n viewport: readonly [number, number, number, number],\n eye: readonly [number, number, number, number],\n light: readonly [number, number, number, number],\n material: readonly [number, number, number, number],\n params: readonly [number, number, number, number],\n fog: readonly [number, number, number, number],\n): Float32Array => {\n out.set(viewProj, 0);\n out.set(viewport, 16);\n out.set(eye, 20);\n out.set(light, 24);\n out.set(material, 28);\n out.set(params, 32);\n out.set(fog, 36);\n return out;\n};\n\n/** Uniform values of an item (40 floats, the WGSL struct layout) */\nexport const itemUniforms = (\n item: Item3D,\n frame: Frame3D,\n out: Float32Array,\n): Float32Array => {\n const second =\n item.kind === \"points\"\n ? item.perspective\n ? 1\n : 0\n : item.kind === \"lines\"\n ? item.width\n : 0;\n return writeUniforms(\n out,\n frame.viewProj,\n [frame.width, frame.height, frame.dpr, frame.orthographic ? 1 : 0],\n [\n frame.eye[0],\n frame.eye[1],\n frame.eye[2],\n item.kind === \"lines\"\n ? item.bias\n : item.kind === \"points\"\n ? (item.style ?? POINT_SPHERE)\n : 0,\n ],\n [\n frame.light[0],\n frame.light[1],\n frame.light[2],\n item.kind === \"points\" && item.additive ? 1 : 0,\n ],\n frame.lighting,\n [item.opacity, second, frame.distance, frame.radius],\n [frame.fog[0], frame.fog[1], frame.fog[2], frame.exposure],\n );\n};\n\n// ------------------------------------------------------------------- WGSL\n\nconst WGSL_UNIFORMS = /* wgsl */ `\nstruct U {\n viewProj: mat4x4f,\n viewport: vec4f,\n eye: vec4f,\n light: vec4f,\n material: vec4f,\n params: vec4f,\n fog: vec4f,\n};\n@group(0) @binding(0) var<uniform> u: U;\n\nfn toWebGpuDepth(p: vec4f) -> vec4f {\n return vec4f(p.x, p.y, (p.z + p.w) * 0.5, p.w);\n}\n\nfn depthCue(world: vec3f) -> f32 {\n let near = u.params.z - u.params.w;\n return clamp((length(world - u.eye.xyz) - near) / (2.0 * u.params.w), 0.0, 1.0);\n}\n${WGSL_OIT}`;\n\nexport const WGSL_POINTS = /* wgsl */ `${WGSL_UNIFORMS}\nstruct Out {\n @builtin(position) position: vec4f,\n @location(0) offset: vec2f,\n @location(1) radius: f32,\n @location(2) color: vec4f,\n @location(3) fog: f32,\n @location(4) coverage: f32,\n};\n\n@vertex\nfn vs(\n @builtin(vertex_index) vi: u32,\n @location(0) pos: vec3f,\n @location(1) size: f32,\n @location(2) color: vec4f,\n) -> Out {\n var out: Out;\n let corner = vec2f(f32(vi & 1u), f32(vi >> 1u)) * 2.0 - 1.0;\n let clip = u.viewProj * vec4f(pos, 1.0);\n var factor = 1.0;\n if (u.params.y > 0.5 && u.viewport.w < 0.5) {\n factor = clamp(u.params.z / max(clip.w, 1e-6), 0.5, 2.0);\n }\n let glow = u.eye.w > 1.5;\n let raw = max(size, 0.0) * u.viewport.z * factor * 0.5;\n let radius = max(raw, select(0.5, 0.75, glow));\n let reach = select(radius + 1.0, radius * 2.2 + 1.0, glow);\n let shift = corner * reach * 2.0 / u.viewport.xy * clip.w;\n out.position = toWebGpuDepth(vec4f(clip.xy + shift, clip.z, clip.w));\n out.offset = corner * reach;\n out.radius = radius;\n out.color = color;\n out.fog = depthCue(pos);\n out.coverage = min(1.0, raw * raw / (radius * radius));\n return out;\n}\n\nfn shade(in: Out) -> vec4f {\n let d = length(in.offset);\n let r = in.radius;\n var alpha = clamp(r + 0.5 - d, 0.0, 1.0);\n var rgb = in.color.rgb;\n if (u.eye.w > 1.5) {\n // glow: an anti-aliased core and a gaussian halo\n let core = clamp(r * 0.6 + 0.5 - d, 0.0, 1.0);\n let q = d / r;\n alpha = core + (1.0 - core) * exp(-1.2 * q * q);\n rgb = rgb + (vec3f(1.0) - rgb) * (0.2 * core);\n } else if (u.eye.w < 0.5) {\n let q = min(d / r, 1.0);\n let n = vec3f(in.offset.x / r, in.offset.y / r, sqrt(max(0.0, 1.0 - q * q)));\n let l = normalize(vec3f(-0.45, 0.55, 0.7));\n let lambert = max(dot(n, l), 0.0);\n let shaded = rgb * (0.62 + 0.45 * lambert) + vec3f(pow(lambert, 18.0) * 0.28);\n rgb = mix(rgb, shaded, smoothstep(1.5, 3.5, r));\n }\n if (alpha <= 0.004) { discard; }\n let fog = in.fog * 0.45;\n if (u.light.w > 0.5) {\n // additive light fades with the distance\n alpha = alpha * (1.0 - fog);\n rgb = rgb * u.fog.w;\n } else {\n rgb = mix(rgb, u.fog.rgb, fog);\n }\n alpha = alpha * in.coverage * in.color.a * u.params.x;\n return vec4f(rgb * alpha, alpha);\n}\n\n@fragment\nfn fs(in: Out) -> @location(0) vec4f {\n return shade(in);\n}\n\n@fragment\nfn fsOit(in: Out) -> Oit {\n return oit(shade(in), in.fog);\n}\n`;\n\nexport const WGSL_MESH = /* wgsl */ `${WGSL_UNIFORMS}\nstruct Out {\n @builtin(position) position: vec4f,\n @location(0) world: vec3f,\n @location(1) normal: vec3f,\n @location(2) color: vec4f,\n};\n\n@vertex\nfn vs(\n @location(0) pos: vec3f,\n @location(1) normal: vec3f,\n @location(2) color: vec4f,\n) -> Out {\n var out: Out;\n out.position = toWebGpuDepth(u.viewProj * vec4f(pos, 1.0));\n out.world = pos;\n out.normal = normal;\n out.color = color;\n return out;\n}\n\nfn shade(in: Out) -> vec4f {\n var n = normalize(in.normal);\n let v = normalize(u.eye.xyz - in.world);\n if (dot(n, v) < 0.0) { n = -n; }\n let l = u.light.xyz;\n let diffuse = max(dot(n, l), 0.0);\n let h = normalize(l + v);\n let specular = pow(max(dot(n, h), 0.0), u.material.w) * u.material.z;\n let rgb = in.color.rgb * (u.material.x + u.material.y * diffuse) + vec3f(specular);\n let alpha = in.color.a * u.params.x;\n return vec4f(rgb * alpha, alpha);\n}\n\n@fragment\nfn fs(in: Out) -> @location(0) vec4f {\n return shade(in);\n}\n\n@fragment\nfn fsOit(in: Out) -> Oit {\n return oit(shade(in), depthCue(in.world));\n}\n`;\n\nexport const WGSL_LINES = /* wgsl */ `${WGSL_UNIFORMS}\nstruct Out {\n @builtin(position) position: vec4f,\n @location(0) across: f32,\n @location(1) color: vec4f,\n};\n\n@vertex\nfn vs(\n @builtin(vertex_index) vi: u32,\n @location(0) a: vec3f,\n @location(1) b: vec3f,\n @location(2) color: vec4f,\n) -> Out {\n var out: Out;\n let corner = vec2f(f32(vi & 1u), f32(vi >> 1u));\n let ca = u.viewProj * vec4f(a, 1.0);\n let cb = u.viewProj * vec4f(b, 1.0);\n let halfSize = u.viewport.xy * 0.5;\n let sa = ca.xy / ca.w * halfSize;\n let sb = cb.xy / cb.w * halfSize;\n var dir = sb - sa;\n let len = length(dir);\n dir = select(vec2f(1.0, 0.0), dir / len, len > 1e-6);\n let normal = vec2f(-dir.y, dir.x);\n let w = max(0.5, u.params.y * u.viewport.z * 0.5) + 0.5;\n let clip = select(ca, cb, corner.x > 0.5);\n let side = corner.y * 2.0 - 1.0;\n let pixel = select(sa, sb, corner.x > 0.5) + dir * (corner.x * 2.0 - 1.0) * w + normal * side * w;\n let z = clip.z - u.eye.w * clip.w;\n out.position = toWebGpuDepth(vec4f(pixel / halfSize * clip.w, z, clip.w));\n out.across = side * w;\n out.color = color;\n return out;\n}\n\n@fragment\nfn fs(in: Out) -> @location(0) vec4f {\n let core = u.params.y * u.viewport.z * 0.5;\n let coverage = clamp(max(core, 0.5) + 0.5 - abs(in.across), 0.0, 1.0) * min(1.0, core * 2.0);\n let alpha = coverage * in.color.a * u.params.x;\n if (alpha <= 0.0) { discard; }\n return vec4f(in.color.rgb * alpha, alpha);\n}\n`;\n\n// ------------------------------------------------------------------- GLSL\n\nconst GLSL_UNIFORMS = `\nuniform mat4 u_viewProj;\nuniform vec4 u_viewport;\nuniform vec4 u_eye;\nuniform vec4 u_light;\nuniform vec4 u_material;\nuniform vec4 u_params;\nuniform vec4 u_fog;\n`;\n\nconst GLSL_POINTS_VS = `\nattribute vec2 a_corner;\nattribute vec3 a_pos;\nattribute float a_size;\nattribute vec4 a_color;\nvarying vec2 v_offset;\nvarying float v_radius;\nvarying vec4 v_color;\nvarying float v_fog;\nvarying float v_coverage;\nvoid main() {\n vec2 corner = a_corner * 2.0 - 1.0;\n vec4 clip = u_viewProj * vec4(a_pos, 1.0);\n float factor = 1.0;\n if (u_params.y > 0.5 && u_viewport.w < 0.5) {\n factor = clamp(u_params.z / max(clip.w, 1e-6), 0.5, 2.0);\n }\n bool glow = u_eye.w > 1.5;\n float raw = max(a_size, 0.0) * u_viewport.z * factor * 0.5;\n float radius = max(raw, glow ? 0.75 : 0.5);\n float reach = glow ? radius * 2.2 + 1.0 : radius + 1.0;\n vec2 shift = corner * reach * 2.0 / u_viewport.xy * clip.w;\n gl_Position = vec4(clip.xy + shift, clip.z, clip.w);\n v_offset = corner * reach;\n v_radius = radius;\n v_color = a_color;\n float near = u_params.z - u_params.w;\n v_fog = clamp((length(a_pos - u_eye.xyz) - near) / (2.0 * u_params.w), 0.0, 1.0);\n v_coverage = min(1.0, raw * raw / (radius * radius));\n}\n`;\n\nconst GLSL_POINTS_FS = `\nvarying vec2 v_offset;\nvarying float v_radius;\nvarying vec4 v_color;\nvarying float v_fog;\nvarying float v_coverage;\nvoid main() {\n float d = length(v_offset);\n float r = v_radius;\n float alpha = clamp(r + 0.5 - d, 0.0, 1.0);\n vec3 rgb = v_color.rgb;\n if (u_eye.w > 1.5) {\n float core = clamp(r * 0.6 + 0.5 - d, 0.0, 1.0);\n float q = d / r;\n alpha = core + (1.0 - core) * exp(-1.2 * q * q);\n rgb = rgb + (vec3(1.0) - rgb) * (0.2 * core);\n } else if (u_eye.w < 0.5) {\n float q = min(d / r, 1.0);\n vec3 n = vec3(v_offset / r, sqrt(max(0.0, 1.0 - q * q)));\n vec3 l = normalize(vec3(-0.45, 0.55, 0.7));\n float lambert = max(dot(n, l), 0.0);\n vec3 shaded = rgb * (0.62 + 0.45 * lambert) + vec3(pow(lambert, 18.0) * 0.28);\n rgb = mix(rgb, shaded, smoothstep(1.5, 3.5, r));\n }\n if (alpha <= 0.004) discard;\n float fog = v_fog * 0.45;\n if (u_light.w > 0.5) {\n alpha = alpha * (1.0 - fog);\n rgb = rgb * u_fog.w;\n } else {\n rgb = mix(rgb, u_fog.rgb, fog);\n }\n alpha = alpha * v_coverage * v_color.a * u_params.x;\n EMIT(vec4(rgb * alpha, alpha), v_fog);\n}\n`;\n\nconst GLSL_MESH_VS = `\nattribute vec3 a_pos;\nattribute vec3 a_normal;\nattribute vec4 a_color;\nvarying vec3 v_world;\nvarying vec3 v_normal;\nvarying vec4 v_color;\nvoid main() {\n gl_Position = u_viewProj * vec4(a_pos, 1.0);\n v_world = a_pos;\n v_normal = a_normal;\n v_color = a_color;\n}\n`;\n\nconst GLSL_MESH_FS = `\nvarying vec3 v_world;\nvarying vec3 v_normal;\nvarying vec4 v_color;\nvoid main() {\n vec3 n = normalize(v_normal);\n vec3 v = normalize(u_eye.xyz - v_world);\n if (dot(n, v) < 0.0) n = -n;\n vec3 l = u_light.xyz;\n float diffuse = max(dot(n, l), 0.0);\n vec3 h = normalize(l + v);\n float specular = pow(max(dot(n, h), 0.0), u_material.w) * u_material.z;\n vec3 rgb = v_color.rgb * (u_material.x + u_material.y * diffuse) + vec3(specular);\n float alpha = v_color.a * u_params.x;\n float near = u_params.z - u_params.w;\n float depth = (length(v_world - u_eye.xyz) - near) / (2.0 * u_params.w);\n EMIT(vec4(rgb * alpha, alpha), depth);\n}\n`;\n\nconst GLSL_LINES_VS = `\nattribute vec2 a_corner;\nattribute vec3 a_a;\nattribute vec3 a_b;\nattribute vec4 a_color;\nvarying float v_across;\nvarying vec4 v_color;\nvoid main() {\n vec4 ca = u_viewProj * vec4(a_a, 1.0);\n vec4 cb = u_viewProj * vec4(a_b, 1.0);\n vec2 halfSize = u_viewport.xy * 0.5;\n vec2 sa = ca.xy / ca.w * halfSize;\n vec2 sb = cb.xy / cb.w * halfSize;\n vec2 dir = sb - sa;\n float len = length(dir);\n dir = len > 1e-6 ? dir / len : vec2(1.0, 0.0);\n vec2 normal = vec2(-dir.y, dir.x);\n float w = max(0.5, u_params.y * u_viewport.z * 0.5) + 0.5;\n bool atEnd = a_corner.x > 0.5;\n vec4 clip = atEnd ? cb : ca;\n float side = a_corner.y * 2.0 - 1.0;\n vec2 pixel = (atEnd ? sb : sa) + dir * (a_corner.x * 2.0 - 1.0) * w + normal * side * w;\n gl_Position = vec4(pixel / halfSize * clip.w, clip.z - u_eye.w * clip.w, clip.w);\n v_across = side * w;\n v_color = a_color;\n}\n`;\n\nconst GLSL_LINES_FS = `\nvarying float v_across;\nvarying vec4 v_color;\nvoid main() {\n float core = u_params.y * u_viewport.z * 0.5;\n float coverage = clamp(max(core, 0.5) + 0.5 - abs(v_across), 0.0, 1.0) * min(1.0, core * 2.0);\n float alpha = coverage * v_color.a * u_params.x;\n if (alpha <= 0.0) discard;\n EMIT(vec4(v_color.rgb * alpha, alpha), 0.0);\n}\n`;\n\nconst PRECISION = `\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n`;\n\nexport interface GlslSource {\n vertex: string;\n fragment: string;\n}\n\nconst glsl = (\n vs: string,\n fs: string,\n version: 1 | 2,\n oit = false,\n): GlslSource =>\n version === 2\n ? {\n vertex: `#version 300 es\\n#define attribute in\\n#define varying out\\n${GLSL_UNIFORMS}${vs}`,\n fragment: `#version 300 es\\nprecision highp float;\\n#define varying in\\n${GLSL_UNIFORMS}${\n oit\n ? GLSL_OIT\n : \"out vec4 fragColor;\\n#define EMIT(c, d) fragColor = (c)\\n\"\n }${fs}`,\n }\n : {\n vertex: `${GLSL_UNIFORMS}${vs}`,\n fragment: `${PRECISION}#define EMIT(c, d) gl_FragColor = (c)\\n${GLSL_UNIFORMS}${fs}`,\n };\n\n/** GLSL programs of the three primitives for WebGL (1) or WebGL2 */\nexport const glslPrograms = (version: 1 | 2) => ({\n points: glsl(GLSL_POINTS_VS, GLSL_POINTS_FS, version),\n mesh: glsl(GLSL_MESH_VS, GLSL_MESH_FS, version),\n lines: glsl(GLSL_LINES_VS, GLSL_LINES_FS, version),\n});\n\n/**\n * Variants of the points and meshes writing the targets of the\n * order-independent transparency (WebGL2)\n */\nexport const glslOitPrograms = () => ({\n points: glsl(GLSL_POINTS_VS, GLSL_POINTS_FS, 2, true),\n mesh: glsl(GLSL_MESH_VS, GLSL_MESH_FS, 2, true),\n});\n\n/** Attribute names of every program, bound to locations 0, 1, ... */\nexport const GLSL_ATTRIBUTES = {\n points: [\"a_corner\", \"a_pos\", \"a_size\", \"a_color\"],\n mesh: [\"a_pos\", \"a_normal\", \"a_color\"],\n lines: [\"a_corner\", \"a_a\", \"a_b\", \"a_color\"],\n} as const;\n"],"mappings":";;;AAiCA,IAAMA,KACJ,GACA,GACA,GACA,GACA,GACA,GACA,GACA,OAEAC,EAAI,IAAIC,GAAU,CAAC,GACnBD,EAAI,IAAIE,GAAU,EAAE,GACpBF,EAAI,IAAIG,GAAK,EAAE,GACfH,EAAI,IAAII,GAAO,EAAE,GACjBJ,EAAI,IAAIK,GAAU,EAAE,GACpBL,EAAI,IAAIM,GAAQ,EAAE,GAClBN,EAAI,IAAIO,GAAK,EAAE,GACRP,IAIIQ,KACX,GACA,GACA,MACiB;CACjB,IAAMC,IACJC,EAAK,SAAS,WACV,KAAK,cAGLA,EAAK,SAAS,UACZA,EAAK,QACL;CACR,OAAOX,EACLC,GACAW,EAAM,UACN;EAACA,EAAM;EAAOA,EAAM;EAAQA,EAAM;EAAK,KAAM;CAAoB,GACjE;EACEA,EAAM,IAAI;EACVA,EAAM,IAAI;EACVA,EAAM,IAAI;EACVD,EAAK,SAAS,UACVA,EAAK,OACLA,EAAK,SAAS,WACXA,EAAK,SAAA,IACN;CACR,GACA;EACEC,EAAM,MAAM;EACZA,EAAM,MAAM;EACZA,EAAM,MAAM;EACZD,EAAK,SAAS,YAAYA,EAAK,WAAW,IAAI;CAChD,GACAC,EAAM,UACN;EAACD,EAAK;EAASD;EAAQE,EAAM;EAAUA,EAAM;CAAM,GACnD;EAACA,EAAM,IAAI;EAAIA,EAAM,IAAI;EAAIA,EAAM,IAAI;EAAIA,EAAM;CAAQ,CAC3D;AACF,GAIMC,IAA2B;;;;;;;;;;;;;;;;;;;;EAoB/BC,KAEWC,IAAyB,GAAGF,EAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiF1CG,IAAuB,GAAGH,EAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CxCI,IAAwB,GAAGJ,EAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDhDK,IAAgB,6KAUhBC,IAAiB,ohCAgCjBC,IAAiB,inCAqCjBC,IAAe,0RAefC,IAAe,mpBAoBfC,IAAgB,+3BA4BhBC,IAAgB,6VAYhBC,IAAY,0GAaZC,KACJ,GACA,GACA,GACA,IAAM,OAENC,MAAY,IACR;CACE,QAAQ,+DAA+DT,IAAgBU;CACvF,UAAU,gEAAgEV,IACxEW,IACIC,IACA,8DACHC;AACL,IACA;CACE,QAAQ,GAAGb,IAAgBU;CAC3B,UAAU,GAAGH,EAAU,yCAAyCP,IAAgBa;AAClF,GAGOC,KAAgB,OAAoB;CAC/C,QAAQN,EAAKP,GAAgBC,GAAgBO,CAAO;CACpD,MAAMD,EAAKL,GAAcC,GAAcK,CAAO;CAC9C,OAAOD,EAAKH,GAAeC,GAAeG,CAAO;AACnD,IAMaM,WAAyB;CACpC,QAAQP,EAAKP,GAAgBC,GAAgB,GAAG,EAAI;CACpD,MAAMM,EAAKL,GAAcC,GAAc,GAAG,EAAI;AAChD,IAGaY,IAAkB;CAC7B,QAAQ;EAAC;EAAY;EAAS;EAAU;CAAS;CACjD,MAAM;EAAC;EAAS;EAAY;CAAS;CACrC,OAAO;EAAC;EAAY;EAAO;EAAO;CAAS;AAC7C"}
@@ -1,2 +1,2 @@
1
- var e=1<<18,t=65536,n=7,r=(e,r,i,a,o,s)=>{let c=Math.floor(e.length/6),{keys:l,counts:u}=s,d=a?2:3,f=i[d]??0,p=i[d+4]??0,m=i[d+8]??0,h=1/0,g=-1/0;for(let t=0;t<c;t++){let i=t*6,a=0,o=0,s=0;for(let t=0;t<4;t++){let c=(e[i+(t===3?5:t)]??0)*n;a+=r[c]??0,o+=r[c+1]??0,s+=r[c+2]??0}let c=f*a+p*o+m*s;l[t]=c,c<h&&(h=c),c>g&&(g=c)}u.fill(0);let _=g>h?65535/(g-h):0;for(let e=0;e<c;e++){let t=Math.min(65535,Math.max(0,Math.floor((g-(l[e]??g))*_)));l[e]=t,u[t]=(u[t]??0)+1}let v=0;for(let e=0;e<t;e++){let t=u[e]??0;u[e]=v,v+=t}for(let t=0;t<c;t++){let n=l[t]??0,r=(u[n]??0)*6;u[n]=(u[n]??0)+1;let i=t*6;for(let t=0;t<6;t++)o[r+t]=e[i+t]??0}},i=(e,t)=>{if(!e)return!1;for(let n=0;n<16;n++)if(e[n]!==t[n])return!1;return!0},a=()=>{let e=new Map,n=null,a=!1,o=0,s=null,c=e=>e.kind===`mesh`&&e.opacity<1&&e.indices.length>=12&&e.indices.length%6==0&&e.indices.length/6<=262144;return(l,u)=>{if(!l.some(c))return e.clear(),l;let d=!i(n,u.viewProj)||a!==u.orthographic;d&&(n=Float32Array.from(u.viewProj),a=u.orthographic);let f=new Set,p=l.map(n=>{if(!c(n))return n;f.add(n.key);let i=e.get(n.key),a=!i||i.version!==n.version||i.source!==n.indices;if(a||d){let c=n.indices.length/6;(!s||s.keys.length<c)&&(s={keys:new Float32Array(Math.max(c,1024)),counts:new Uint32Array(t)});let l=i&&!a&&i.indices.length===n.indices.length?i.indices:new Uint32Array(n.indices.length);r(n.indices,new Float32Array(n.vertices),u.viewProj,u.orthographic,l,s),i={version:n.version,source:n.indices,indices:l,order:++o},e.set(n.key,i)}return{...n,indices:i.indices,order:i.order}});for(let t of e.keys())f.has(t)||e.delete(t);return p}};exports.MAX_SORTED_QUADS=e,exports.createDepthSorter=a,exports.sortQuads=r;
1
+ const e=require("./render-types.cjs");var t=1<<18,n=`transparent`,r=65536,i=7,a=(e,t,n,a,o,s)=>{let c=Math.floor(e.length/6),{keys:l,counts:u}=s,d=a?2:3,f=n[d]??0,p=n[d+4]??0,m=n[d+8]??0,h=1/0,g=-1/0;for(let n=0;n<c;n++){let r=n*6,a=0,o=0,s=0;for(let n=0;n<4;n++){let c=(e[r+(n===3?5:n)]??0)*i;a+=t[c]??0,o+=t[c+1]??0,s+=t[c+2]??0}let c=f*a+p*o+m*s;l[n]=c,c<h&&(h=c),c>g&&(g=c)}u.fill(0);let _=g>h?65535/(g-h):0;for(let e=0;e<c;e++){let t=Math.min(65535,Math.max(0,Math.floor((g-(l[e]??g))*_)));l[e]=t,u[t]=(u[t]??0)+1}let v=0;for(let e=0;e<r;e++){let t=u[e]??0;u[e]=v,v+=t}for(let t=0;t<c;t++){let n=l[t]??0,r=(u[n]??0)*6;u[n]=(u[n]??0)+1;let i=t*6;for(let t=0;t<6;t++)o[r+t]=e[i+t]??0}},o=(e,t,n)=>{let r=0,i=0;for(let t of e)r+=t.vertexCount,i+=t.indices.length;let a=new ArrayBuffer(r*28),o=new Uint8Array(a),s=new Uint32Array(i),c=0,l=0;for(let t of e){let e=Math.min(t.vertices.byteLength,t.vertexCount*28);o.set(new Uint8Array(t.vertices,0,e),c*28);let n=Math.max(0,Math.min(1,t.opacity));if(n<1)for(let e=0;e<t.vertexCount;e++){let t=(c+e)*28+27;o[t]=Math.round((o[t]??0)*n)}let r=t.indices;for(let e=0;e<r.length;e++)s[l+e]=(r[e]??0)+c;c+=t.vertexCount,l+=r.length}return{kind:`mesh`,key:t,version:n,opacity:1,transparent:!0,vertices:a,vertexCount:r,indices:s}},s=(e,t)=>{if(!e)return!1;for(let n=0;n<16;n++)if(e[n]!==t[n])return!1;return!0},c=t=>t.kind===`mesh`&&!e.writesDepth(t),l=t=>t.kind!==`lines`&&!e.writesDepth(t),u=e=>e.indices.length>0&&e.indices.length%6==0,d=e=>{let t=e.kind===`mesh`,n=t?e.vertices:e.data,r=(t?28:20)/4,i=t?e.vertexCount:e.count,a=new Float32Array(n,0,Math.min(Math.floor(n.byteLength/4),i*r)),o=[1/0,1/0,1/0],s=[-1/0,-1/0,-1/0];for(let e=0;e+2<a.length;e+=r)for(let t=0;t<3;t++){let n=a[e+t]??0;n<(o[t]??0)&&(o[t]=n),n>(s[t]??0)&&(s[t]=n)}return[0,1,2].map(e=>o[e]<=s[e]?(o[e]+s[e])/2:0)},f=()=>{let e=new Map,t=new Map,i=null,f=0,p=null,m=!1,h=0,g=null,_=(t,n,i,o)=>{let s=t.indices.length/6;if(!u(t)||s<2||s>262144)return t;o.add(t.key);let c=e.get(t.key),l=!c||c.version!==t.version||c.source!==t.indices;if(l||i){(!g||g.keys.length<s)&&(g={keys:new Float32Array(Math.max(s,1024)),counts:new Uint32Array(r)});let i=c&&!l&&c.indices.length===t.indices.length?c.indices:new Uint32Array(t.indices.length);a(t.indices,new Float32Array(t.vertices),n.viewProj,n.orthographic,i,g),c={version:t.version,source:t.indices,indices:i,order:++h},e.set(t.key,c)}return{...t,indices:c.indices,order:c.order}},v=(e,n)=>{let r=t.get(e.key);(!r||r.version!==e.version)&&(r={version:e.version,center:d(e)},t.set(e.key,r));let i=n.viewProj,a=n.orthographic?2:3,[o,s,c]=r.center;return(i[a]??0)*o+(i[a+4]??0)*s+(i[a+8]??0)*c+(i[a+12]??0)},y=(e,t)=>{let n=[];if(e.forEach((e,t)=>{l(e)&&n.push(t)}),n.length<2)return e;let r=n.map((n,r)=>({item:e[n],k:r,depth:v(e[n],t)})).sort((e,t)=>t.depth-e.depth||e.k-t.k);return n.forEach((t,n)=>{e[t]=r[n].item}),e};return(r,a)=>{let d=r.filter(c),h=r.filter(l);if(d.length===0&&h.length<2)return e.clear(),t.clear(),i=null,r;let g=!s(p,a.viewProj)||m!==a.orthographic;g&&(p=Float32Array.from(a.viewProj),m=a.orthographic);let v=new Set,b=0;for(let e of d)b+=e.indices.length/6;let x=[];if(d.length===0)i=null,x.push(...r);else if(d.length>=2&&b<=262144&&d.every(u)){let e=d.map(e=>`${e.key}@${e.version}@${e.opacity}`).join(`|`);(!i||i.signature!==e)&&(i={signature:e,item:o(d,n,++f)});let t=_(i.item,a,g,v),s=!1;for(let e of r)c(e)?s||(x.push(t),s=!0):x.push(e)}else{i=null;let e=0,t=d.map(e=>_(e,a,g,v));for(let n of r)x.push(c(n)?t[e++]:n)}for(let t of e.keys())v.has(t)||e.delete(t);y(x,a);for(let e of t.keys())x.some(t=>t.key===e)||t.delete(e);return x}};exports.MAX_SORTED_QUADS=t,exports.MERGED_KEY=n,exports.createDepthSorter=f,exports.itemCenter=d,exports.mergeMeshes=o,exports.sortQuads=a;
2
2
  //# sourceMappingURL=sort.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sort.cjs","names":["MAX_SORTED_QUADS","BUCKETS","FLOATS","sortQuads","quads","indices","scratch","row","orthographic","mx","viewProj","my","mz","min","max","q","o","x","y","z","c","v","vertices","depth","counts","scale","b","keys","sum","at","j","sameMatrix","a","i","createDepthSorter","sorted","view","order","sortable","item","items","moved","frame","seen","result","entry","stale","out","key"],"sources":["../../../../../charts/src/engine/three-d/sort.ts"],"sourcesContent":["// Back-to-front order of the transparent meshes for the GPU backends:\n// transparent items are drawn without writing depth, so their triangles must\n// come farthest first to blend correctly where a surface folds over itself.\n// Meshes are made of quads (6 indices: two triangles sharing an edge, as\n// built for surface cells and bar faces); quads are sorted by the camera\n// depth of their center with a bucket sort (O(n)), and only again when the\n// camera moved. Canvas2D sorts every triangle itself (painter's algorithm).\n\nimport type { Frame3D, Item3D, MeshItem } from \"./render-types\";\nimport { VERTEX_STRIDE } from \"./render-types\";\n\n/** Largest transparent mesh sorted (quads): a 512 × 512 surface grid */\nexport const MAX_SORTED_QUADS = 1 << 18;\n\nconst BUCKETS = 1 << 16;\nconst FLOATS = VERTEX_STRIDE / 4;\n\n/**\n * Writes into `out` the quads of `indices` (6 indices each) ordered by\n * decreasing camera depth: view depth (clip w) in perspective, clip z in\n * orthographic projection. Equal depths keep their order.\n */\nexport const sortQuads = (\n indices: Uint32Array,\n vertices: Float32Array,\n viewProj: Float32Array,\n orthographic: boolean,\n out: Uint32Array,\n scratch: { keys: Float32Array; counts: Uint32Array },\n): void => {\n const quads = Math.floor(indices.length / 6);\n const { keys, counts } = scratch;\n // depth = row 4 (w) or row 3 (z) of the column-major matrix\n const row = orthographic ? 2 : 3;\n const mx = viewProj[row] ?? 0;\n const my = viewProj[row + 4] ?? 0;\n const mz = viewProj[row + 8] ?? 0;\n let min = Infinity;\n let max = -Infinity;\n for (let q = 0; q < quads; q++) {\n const o = q * 6;\n let x = 0;\n let y = 0;\n let z = 0;\n // the 4 corners: indices 0, 1, 2 and 5 of the quad\n for (let c = 0; c < 4; c++) {\n const v = (indices[o + (c === 3 ? 5 : c)] ?? 0) * FLOATS;\n x += vertices[v] ?? 0;\n y += vertices[v + 1] ?? 0;\n z += vertices[v + 2] ?? 0;\n }\n const depth = mx * x + my * y + mz * z;\n keys[q] = depth;\n if (depth < min) min = depth;\n if (depth > max) max = depth;\n }\n counts.fill(0);\n const scale = max > min ? (BUCKETS - 1) / (max - min) : 0;\n // bucket 0 = farthest (clamped: the keys are rounded to float32)\n for (let q = 0; q < quads; q++) {\n const b = Math.min(\n BUCKETS - 1,\n Math.max(0, Math.floor((max - (keys[q] ?? max)) * scale)),\n );\n keys[q] = b;\n counts[b] = (counts[b] ?? 0) + 1;\n }\n let sum = 0;\n for (let b = 0; b < BUCKETS; b++) {\n const c = counts[b] ?? 0;\n counts[b] = sum;\n sum += c;\n }\n for (let q = 0; q < quads; q++) {\n const b = keys[q] ?? 0;\n const at = (counts[b] ?? 0) * 6;\n counts[b] = (counts[b] ?? 0) + 1;\n const o = q * 6;\n for (let j = 0; j < 6; j++) out[at + j] = indices[o + j] ?? 0;\n }\n};\n\ninterface SortedMesh {\n version: number;\n source: Uint32Array;\n indices: Uint32Array;\n order: number;\n}\n\nconst sameMatrix = (a: Float32Array | null, b: Float32Array) => {\n if (!a) return false;\n for (let i = 0; i < 16; i++) if (a[i] !== b[i]) return false;\n return true;\n};\n\n/**\n * Sorter of the transparent meshes: returns the items with the transparent\n * meshes' indices in back-to-front order (`order` changes when only the\n * indices must be uploaded again)\n */\nexport const createDepthSorter = () => {\n const sorted = new Map<string, SortedMesh>();\n let view: Float32Array | null = null;\n let orthographic = false;\n let order = 0;\n let scratch: { keys: Float32Array; counts: Uint32Array } | null = null;\n\n const sortable = (item: Item3D): item is MeshItem =>\n item.kind === \"mesh\" &&\n item.opacity < 1 &&\n item.indices.length >= 12 &&\n item.indices.length % 6 === 0 &&\n item.indices.length / 6 <= MAX_SORTED_QUADS;\n\n return (items: readonly Item3D[], frame: Frame3D): readonly Item3D[] => {\n if (!items.some(sortable)) {\n sorted.clear();\n return items;\n }\n const moved =\n !sameMatrix(view, frame.viewProj) || orthographic !== frame.orthographic;\n if (moved) {\n view = Float32Array.from(frame.viewProj);\n orthographic = frame.orthographic;\n }\n const seen = new Set<string>();\n const result = items.map((item): Item3D => {\n if (!sortable(item)) return item;\n seen.add(item.key);\n let entry = sorted.get(item.key);\n const stale =\n !entry ||\n entry.version !== item.version ||\n entry.source !== item.indices;\n if (stale || moved) {\n const quads = item.indices.length / 6;\n if (!scratch || scratch.keys.length < quads)\n scratch = {\n keys: new Float32Array(Math.max(quads, 1024)),\n counts: new Uint32Array(BUCKETS),\n };\n const out =\n entry && !stale && entry.indices.length === item.indices.length\n ? entry.indices\n : new Uint32Array(item.indices.length);\n sortQuads(\n item.indices,\n new Float32Array(item.vertices),\n frame.viewProj,\n frame.orthographic,\n out,\n scratch,\n );\n entry = {\n version: item.version,\n source: item.indices,\n indices: out,\n order: ++order,\n };\n sorted.set(item.key, entry);\n }\n return { ...item, indices: entry!.indices, order: entry!.order };\n });\n for (const key of sorted.keys()) if (!seen.has(key)) sorted.delete(key);\n return result;\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"sort.cjs","names":["writesDepth","require_render_types","MAX_SORTED_QUADS","MERGED_KEY","BUCKETS","FLOATS","sortQuads","quads","indices","scratch","row","orthographic","mx","viewProj","my","mz","min","max","q","o","x","y","z","c","v","vertices","depth","counts","scale","b","keys","sum","at","j","mergeMeshes","vertexCount","indexCount","m","meshes","bytes","base","length","opacity","a","source","sameMatrix","i","isTransparentMesh","item","isBlended","isQuadMesh","itemCenter","mesh","buffer","stride","count","f","k","createDepthSorter","sorted","centers","merged","mergedVersion","view","order","sortMesh","seen","entry","stale","moved","out","frame","centerDepth","byDepth","slots","items","it","ordered","transparent","blended","result","signature","placed","next","own","key"],"sources":["../../../../../charts/src/engine/three-d/sort.ts"],"sourcesContent":["// Back-to-front order of the transparent items for the GPU backends without\n// order-independent transparency (WebGL 1, no float render targets):\n// transparent items are drawn without writing depth, so their triangles must\n// come farthest first to blend correctly where a surface folds over itself\n// or where several transparent surfaces / bar series overlap. Meshes are\n// made of quads (6 indices: two triangles sharing an edge, as built for\n// surface cells and bar faces); quads are sorted by the camera depth of\n// their center with a bucket sort (O(n)), and only again when the camera\n// moved. Several transparent meshes are merged into one item (opacity baked\n// into the vertex colors) so that their quads are sorted together; above\n// the sort budget, the meshes are drawn by decreasing depth of their center\n// with their own quads sorted. Blended point clouds and the transparent\n// meshes are then drawn by decreasing depth of their center. Canvas2D sorts\n// every triangle and dot of every item itself (painter's algorithm).\n\nimport type { Frame3D, Item3D, MeshItem } from \"./render-types\";\nimport { POINT_STRIDE, VERTEX_STRIDE, writesDepth } from \"./render-types\";\n\n/** Largest number of transparent quads sorted: a 512 × 512 surface grid */\nexport const MAX_SORTED_QUADS = 1 << 18;\n\n/** Key of the merged transparent meshes */\nexport const MERGED_KEY = \"transparent\";\n\nconst BUCKETS = 1 << 16;\nconst FLOATS = VERTEX_STRIDE / 4;\n\n/**\n * Writes into `out` the quads of `indices` (6 indices each) ordered by\n * decreasing camera depth: view depth (clip w) in perspective, clip z in\n * orthographic projection. Equal depths keep their order.\n */\nexport const sortQuads = (\n indices: Uint32Array,\n vertices: Float32Array,\n viewProj: Float32Array,\n orthographic: boolean,\n out: Uint32Array,\n scratch: { keys: Float32Array; counts: Uint32Array },\n): void => {\n const quads = Math.floor(indices.length / 6);\n const { keys, counts } = scratch;\n // depth = row 4 (w) or row 3 (z) of the column-major matrix\n const row = orthographic ? 2 : 3;\n const mx = viewProj[row] ?? 0;\n const my = viewProj[row + 4] ?? 0;\n const mz = viewProj[row + 8] ?? 0;\n let min = Infinity;\n let max = -Infinity;\n for (let q = 0; q < quads; q++) {\n const o = q * 6;\n let x = 0;\n let y = 0;\n let z = 0;\n // the 4 corners: indices 0, 1, 2 and 5 of the quad\n for (let c = 0; c < 4; c++) {\n const v = (indices[o + (c === 3 ? 5 : c)] ?? 0) * FLOATS;\n x += vertices[v] ?? 0;\n y += vertices[v + 1] ?? 0;\n z += vertices[v + 2] ?? 0;\n }\n const depth = mx * x + my * y + mz * z;\n keys[q] = depth;\n if (depth < min) min = depth;\n if (depth > max) max = depth;\n }\n counts.fill(0);\n const scale = max > min ? (BUCKETS - 1) / (max - min) : 0;\n // bucket 0 = farthest (clamped: the keys are rounded to float32)\n for (let q = 0; q < quads; q++) {\n const b = Math.min(\n BUCKETS - 1,\n Math.max(0, Math.floor((max - (keys[q] ?? max)) * scale)),\n );\n keys[q] = b;\n counts[b] = (counts[b] ?? 0) + 1;\n }\n let sum = 0;\n for (let b = 0; b < BUCKETS; b++) {\n const c = counts[b] ?? 0;\n counts[b] = sum;\n sum += c;\n }\n for (let q = 0; q < quads; q++) {\n const b = keys[q] ?? 0;\n const at = (counts[b] ?? 0) * 6;\n counts[b] = (counts[b] ?? 0) + 1;\n const o = q * 6;\n for (let j = 0; j < 6; j++) out[at + j] = indices[o + j] ?? 0;\n }\n};\n\n/**\n * One transparent item made of several meshes: vertices concatenated (the\n * opacity of every mesh multiplies the alpha of its vertex colors), indices\n * shifted. Drawn with opacity 1, without writing depth.\n */\nexport const mergeMeshes = (\n meshes: readonly MeshItem[],\n key: string,\n version: number,\n): MeshItem => {\n let vertexCount = 0;\n let indexCount = 0;\n for (const m of meshes) {\n vertexCount += m.vertexCount;\n indexCount += m.indices.length;\n }\n const vertices = new ArrayBuffer(vertexCount * VERTEX_STRIDE);\n const bytes = new Uint8Array(vertices);\n const indices = new Uint32Array(indexCount);\n let base = 0;\n let at = 0;\n for (const m of meshes) {\n const length = Math.min(\n m.vertices.byteLength,\n m.vertexCount * VERTEX_STRIDE,\n );\n bytes.set(new Uint8Array(m.vertices, 0, length), base * VERTEX_STRIDE);\n const opacity = Math.max(0, Math.min(1, m.opacity));\n if (opacity < 1) {\n for (let v = 0; v < m.vertexCount; v++) {\n const a = (base + v) * VERTEX_STRIDE + 27;\n bytes[a] = Math.round((bytes[a] ?? 0) * opacity);\n }\n }\n const source = m.indices;\n for (let j = 0; j < source.length; j++)\n indices[at + j] = (source[j] ?? 0) + base;\n base += m.vertexCount;\n at += source.length;\n }\n return {\n kind: \"mesh\",\n key,\n version,\n opacity: 1,\n transparent: true,\n vertices,\n vertexCount,\n indices,\n };\n};\n\ninterface SortedMesh {\n version: number;\n source: Uint32Array;\n indices: Uint32Array;\n order: number;\n}\n\nconst sameMatrix = (a: Float32Array | null, b: Float32Array) => {\n if (!a) return false;\n for (let i = 0; i < 16; i++) if (a[i] !== b[i]) return false;\n return true;\n};\n\nconst isTransparentMesh = (item: Item3D): item is MeshItem =>\n item.kind === \"mesh\" && !writesDepth(item);\n\n/** Drawn without writing depth (transparent meshes, blended points) */\nconst isBlended = (item: Item3D) => item.kind !== \"lines\" && !writesDepth(item);\n\n/** Made of whole quads: its triangles can be sorted by pairs */\nconst isQuadMesh = (item: MeshItem) =>\n item.indices.length > 0 && item.indices.length % 6 === 0;\n\n/** Center of the bounding box of a mesh's vertices or a cloud's points */\nexport const itemCenter = (item: Item3D): [number, number, number] => {\n const mesh = item.kind === \"mesh\";\n const buffer = mesh ? item.vertices : item.data;\n const stride = (mesh ? VERTEX_STRIDE : POINT_STRIDE) / 4;\n const count = mesh ? item.vertexCount : item.count;\n const f = new Float32Array(\n buffer,\n 0,\n Math.min(Math.floor(buffer.byteLength / 4), count * stride),\n );\n const min = [Infinity, Infinity, Infinity];\n const max = [-Infinity, -Infinity, -Infinity];\n for (let o = 0; o + 2 < f.length; o += stride) {\n for (let k = 0; k < 3; k++) {\n const v = f[o + k] ?? 0;\n if (v < (min[k] ?? 0)) min[k] = v;\n if (v > (max[k] ?? 0)) max[k] = v;\n }\n }\n return [0, 1, 2].map((k) =>\n min[k]! <= max[k]! ? (min[k]! + max[k]!) / 2 : 0,\n ) as [number, number, number];\n};\n\n/**\n * Sorter of the transparent items: returns the items with the transparent\n * meshes merged into one item (`MERGED_KEY`) whose quads are in back-to-front\n * order, or — above `MAX_SORTED_QUADS` or for meshes that aren't made of\n * quads — the transparent meshes each with its own quads sorted; the blended\n * items (meshes and point clouds) come by decreasing depth of their center.\n * `order` changes when only the indices must be uploaded again.\n */\nexport const createDepthSorter = () => {\n const sorted = new Map<string, SortedMesh>();\n const centers = new Map<\n string,\n { version: number; center: [number, number, number] }\n >();\n let merged: { signature: string; item: MeshItem } | null = null;\n let mergedVersion = 0;\n let view: Float32Array | null = null;\n let orthographic = false;\n let order = 0;\n let scratch: { keys: Float32Array; counts: Uint32Array } | null = null;\n\n /** Sorts the quads of a mesh when stale or when the camera moved */\n const sortMesh = (\n item: MeshItem,\n frame: Frame3D,\n moved: boolean,\n seen: Set<string>,\n ): MeshItem => {\n const quads = item.indices.length / 6;\n if (!isQuadMesh(item) || quads < 2 || quads > MAX_SORTED_QUADS) return item;\n seen.add(item.key);\n let entry = sorted.get(item.key);\n const stale =\n !entry || entry.version !== item.version || entry.source !== item.indices;\n if (stale || moved) {\n if (!scratch || scratch.keys.length < quads)\n scratch = {\n keys: new Float32Array(Math.max(quads, 1024)),\n counts: new Uint32Array(BUCKETS),\n };\n const out =\n entry && !stale && entry.indices.length === item.indices.length\n ? entry.indices\n : new Uint32Array(item.indices.length);\n sortQuads(\n item.indices,\n new Float32Array(item.vertices),\n frame.viewProj,\n frame.orthographic,\n out,\n scratch,\n );\n entry = {\n version: item.version,\n source: item.indices,\n indices: out,\n order: ++order,\n };\n sorted.set(item.key, entry);\n }\n return { ...item, indices: entry!.indices, order: entry!.order };\n };\n\n /** Camera depth of the center of an item (larger: farther) */\n const centerDepth = (item: Item3D, frame: Frame3D) => {\n let entry = centers.get(item.key);\n if (!entry || entry.version !== item.version) {\n entry = { version: item.version, center: itemCenter(item) };\n centers.set(item.key, entry);\n }\n const m = frame.viewProj;\n const row = frame.orthographic ? 2 : 3;\n const [x, y, z] = entry.center;\n return (\n (m[row] ?? 0) * x +\n (m[row + 4] ?? 0) * y +\n (m[row + 8] ?? 0) * z +\n (m[row + 12] ?? 0)\n );\n };\n\n /** The blended items of `items` by decreasing depth (stable) */\n const byDepth = (items: Item3D[], frame: Frame3D): Item3D[] => {\n const slots: number[] = [];\n items.forEach((it, i) => {\n if (isBlended(it)) slots.push(i);\n });\n if (slots.length < 2) return items;\n const ordered = slots\n .map((i, k) => ({\n item: items[i]!,\n k,\n depth: centerDepth(items[i]!, frame),\n }))\n .sort((a, b) => b.depth - a.depth || a.k - b.k);\n slots.forEach((i, k) => {\n items[i] = ordered[k]!.item;\n });\n return items;\n };\n\n return (items: readonly Item3D[], frame: Frame3D): readonly Item3D[] => {\n const transparent = items.filter(isTransparentMesh);\n const blended = items.filter(isBlended);\n if (transparent.length === 0 && blended.length < 2) {\n sorted.clear();\n centers.clear();\n merged = null;\n return items;\n }\n const moved =\n !sameMatrix(view, frame.viewProj) || orthographic !== frame.orthographic;\n if (moved) {\n view = Float32Array.from(frame.viewProj);\n orthographic = frame.orthographic;\n }\n const seen = new Set<string>();\n let quads = 0;\n for (const m of transparent) quads += m.indices.length / 6;\n const result: Item3D[] = [];\n if (transparent.length === 0) {\n merged = null;\n result.push(...items);\n } else if (\n transparent.length >= 2 &&\n quads <= MAX_SORTED_QUADS &&\n transparent.every(isQuadMesh)\n ) {\n // one item: every transparent quad sorted together\n const signature = transparent\n .map((m) => `${m.key}@${m.version}@${m.opacity}`)\n .join(\"|\");\n if (!merged || merged.signature !== signature) {\n merged = {\n signature,\n item: mergeMeshes(transparent, MERGED_KEY, ++mergedVersion),\n };\n }\n const item = sortMesh(merged.item, frame, moved, seen);\n let placed = false;\n for (const it of items) {\n if (!isTransparentMesh(it)) result.push(it);\n else if (!placed) {\n result.push(item);\n placed = true;\n }\n }\n } else {\n merged = null;\n // each mesh with its own quads sorted (ordered with the clouds below)\n let next = 0;\n const own = transparent.map((m) => sortMesh(m, frame, moved, seen));\n for (const it of items)\n result.push(isTransparentMesh(it) ? own[next++]! : it);\n }\n for (const key of sorted.keys()) if (!seen.has(key)) sorted.delete(key);\n byDepth(result, frame);\n for (const key of centers.keys())\n if (!result.some((it) => it.key === key)) centers.delete(key);\n return result;\n };\n};\n"],"mappings":"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"}
@@ -1,6 +1,8 @@
1
- import { Frame3D, Item3D } from './render-types.cjs';
2
- /** Largest transparent mesh sorted (quads): a 512 × 512 surface grid */
1
+ import { Frame3D, Item3D, MeshItem } from './render-types.cjs';
2
+ /** Largest number of transparent quads sorted: a 512 × 512 surface grid */
3
3
  export declare const MAX_SORTED_QUADS: number;
4
+ /** Key of the merged transparent meshes */
5
+ export declare const MERGED_KEY = "transparent";
4
6
  /**
5
7
  * Writes into `out` the quads of `indices` (6 indices each) ordered by
6
8
  * decreasing camera depth: view depth (clip w) in perspective, clip z in
@@ -11,8 +13,19 @@ export declare const sortQuads: (indices: Uint32Array, vertices: Float32Array, v
11
13
  counts: Uint32Array;
12
14
  }) => void;
13
15
  /**
14
- * Sorter of the transparent meshes: returns the items with the transparent
15
- * meshes' indices in back-to-front order (`order` changes when only the
16
- * indices must be uploaded again)
16
+ * One transparent item made of several meshes: vertices concatenated (the
17
+ * opacity of every mesh multiplies the alpha of its vertex colors), indices
18
+ * shifted. Drawn with opacity 1, without writing depth.
19
+ */
20
+ export declare const mergeMeshes: (meshes: readonly MeshItem[], key: string, version: number) => MeshItem;
21
+ /** Center of the bounding box of a mesh's vertices or a cloud's points */
22
+ export declare const itemCenter: (item: Item3D) => [number, number, number];
23
+ /**
24
+ * Sorter of the transparent items: returns the items with the transparent
25
+ * meshes merged into one item (`MERGED_KEY`) whose quads are in back-to-front
26
+ * order, or — above `MAX_SORTED_QUADS` or for meshes that aren't made of
27
+ * quads — the transparent meshes each with its own quads sorted; the blended
28
+ * items (meshes and point clouds) come by decreasing depth of their center.
29
+ * `order` changes when only the indices must be uploaded again.
17
30
  */
18
31
  export declare const createDepthSorter: () => (items: readonly Item3D[], frame: Frame3D) => readonly Item3D[];
@@ -1,6 +1,8 @@
1
- import { Frame3D, Item3D } from './render-types.js';
2
- /** Largest transparent mesh sorted (quads): a 512 × 512 surface grid */
1
+ import { Frame3D, Item3D, MeshItem } from './render-types.js';
2
+ /** Largest number of transparent quads sorted: a 512 × 512 surface grid */
3
3
  export declare const MAX_SORTED_QUADS: number;
4
+ /** Key of the merged transparent meshes */
5
+ export declare const MERGED_KEY = "transparent";
4
6
  /**
5
7
  * Writes into `out` the quads of `indices` (6 indices each) ordered by
6
8
  * decreasing camera depth: view depth (clip w) in perspective, clip z in
@@ -11,8 +13,19 @@ export declare const sortQuads: (indices: Uint32Array, vertices: Float32Array, v
11
13
  counts: Uint32Array;
12
14
  }) => void;
13
15
  /**
14
- * Sorter of the transparent meshes: returns the items with the transparent
15
- * meshes' indices in back-to-front order (`order` changes when only the
16
- * indices must be uploaded again)
16
+ * One transparent item made of several meshes: vertices concatenated (the
17
+ * opacity of every mesh multiplies the alpha of its vertex colors), indices
18
+ * shifted. Drawn with opacity 1, without writing depth.
19
+ */
20
+ export declare const mergeMeshes: (meshes: readonly MeshItem[], key: string, version: number) => MeshItem;
21
+ /** Center of the bounding box of a mesh's vertices or a cloud's points */
22
+ export declare const itemCenter: (item: Item3D) => [number, number, number];
23
+ /**
24
+ * Sorter of the transparent items: returns the items with the transparent
25
+ * meshes merged into one item (`MERGED_KEY`) whose quads are in back-to-front
26
+ * order, or — above `MAX_SORTED_QUADS` or for meshes that aren't made of
27
+ * quads — the transparent meshes each with its own quads sorted; the blended
28
+ * items (meshes and point clouds) come by decreasing depth of their center.
29
+ * `order` changes when only the indices must be uploaded again.
17
30
  */
18
31
  export declare const createDepthSorter: () => (items: readonly Item3D[], frame: Frame3D) => readonly Item3D[];