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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dag.js","names":["TRANSPOSE_PASSES","TRANSPOSE_BUDGET","bilayerCrossings","edges","a","b","tree","lowerSize","crossings","seen","q","le","i","countCrossings","layerOf","pos","layer","v","l","between","order","la","lb","total","list","isotonic","blockW","count","blockV","blockN","top","weight","target","w","k","layeredLayout","input","horizontal","direction","breadth","depth","E","out","n","indeg","e","s","t","reversedEdge","color","visit","stack","start","pairKey","accA","accB","chainOf","key","id","A","succ","pred","topo","remaining","p","u","maxLayer","layerCount","lo","hi","ins","outs","best","vLayer","vPred","vSucc","vWeight","chains","link","chain","prev","d","N","L","layers","placed","place","firstOrder","roots","r","updatePos","totalCrossings","pairs","initial","bestLayers","reorder","nb","up","useMedian","mid","fixedSlots","movable","sweeps","median","c","predStart","succStart","predPos","succPos","work","prepare","sideGain","a0","a1","b0","b1","cross","ties","j","arr","dirty","pass","changed","any","size","gapOf","bx","cursor","shift","offset","succWeight","align","sw","sx","mode","iter","layerDepth","layerPos","toOut","x","y","px","py","routes","reversed","pts","dd","flipped","dagLayout","indexGraph","nodes","width","height","h","options","node","result","edge","longestPath","source","dist","via","inOrder","duration","end","criticalPath"],"sources":["../../../../../charts/src/engine/graph/dag.ts"],"sourcesContent":["// Layered (Sugiyama) layout of directed graphs: cycle breaking (DFS),\n// longest-path layering with a balancing pass, dummy nodes on long edges,\n// barycenter / median crossing reduction with transposition, and\n// coordinate assignment by weighted isotonic regression (long edges stay\n// straight). Index-based core + id-based public wrappers, no DOM.\n\nimport { indexGraph } from \"./force\";\nimport type {\n GraphDagLayoutOptions,\n GraphDagLayoutResult,\n GraphCriticalPath,\n GraphDirection,\n GraphEdge,\n GraphNode,\n} from \"./types\";\n\nexport interface LayeredInput {\n n: number;\n source: ArrayLike<number>;\n target: ArrayLike<number>;\n /** Width / height of each node */\n width: ArrayLike<number>;\n height: ArrayLike<number>;\n direction: GraphDirection;\n layerGap: number;\n nodeGap: number;\n sweeps: number;\n}\n\n/** Most passes of the neighbor transposition */\nconst TRANSPOSE_PASSES = 24;\n/**\n * Work budget of the transposition (neighbor positions compared): about\n * 50-100 ms on large graphs, unbounded in practice below some 10k nodes\n */\nconst TRANSPOSE_BUDGET = 2e7;\n\n/** Crossings between two consecutive layers (Fenwick tree, O(E log V)) */\nconst bilayerCrossings = (\n edges: [number, number][],\n lowerSize: number,\n): number => {\n if (edges.length < 2) return 0;\n edges.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n const tree = new Int32Array(lowerSize + 1);\n let crossings = 0;\n let seen = 0;\n for (const [, q] of edges) {\n // edges already inserted that end to the right of q\n let le = 0;\n for (let i = q + 1; i > 0; i -= i & -i) le += tree[i];\n crossings += seen - le;\n for (let i = q + 1; i <= lowerSize; i += i & -i) tree[i]++;\n seen++;\n }\n return crossings;\n};\n\n/**\n * Edge crossings of a layered drawing: `order[l]` lists the nodes of layer\n * `l` from left to right, `edges` are `[a, b]` pairs between consecutive\n * layers (other pairs are ignored)\n */\nexport const countCrossings = (\n order: readonly (readonly number[])[],\n edges: readonly (readonly [number, number])[],\n): number => {\n const layerOf = new Map<number, number>();\n const pos = new Map<number, number>();\n order.forEach((layer, l) =>\n layer.forEach((v, i) => {\n layerOf.set(v, l);\n pos.set(v, i);\n }),\n );\n const between: [number, number][][] = order.map(() => []);\n for (const [a, b] of edges) {\n const la = layerOf.get(a);\n const lb = layerOf.get(b);\n if (la === undefined || lb === undefined) continue;\n if (lb === la + 1) between[la].push([pos.get(a)!, pos.get(b)!]);\n else if (la === lb + 1) between[lb].push([pos.get(b)!, pos.get(a)!]);\n }\n let total = 0;\n between.forEach((list, l) => {\n if (l + 1 < order.length)\n total += bilayerCrossings(list, order[l + 1].length);\n });\n return total;\n};\n\n/** Weighted isotonic regression (pool adjacent violators), in place */\nconst isotonic = (\n target: Float64Array,\n weight: Float64Array,\n count: number,\n): void => {\n const blockW = new Float64Array(count);\n const blockV = new Float64Array(count);\n const blockN = new Int32Array(count);\n let top = 0;\n for (let i = 0; i < count; i++) {\n blockW[top] = weight[i];\n blockV[top] = target[i];\n blockN[top] = 1;\n top++;\n while (top > 1 && blockV[top - 2] > blockV[top - 1]) {\n const w = blockW[top - 2] + blockW[top - 1];\n blockV[top - 2] =\n (blockV[top - 2] * blockW[top - 2] +\n blockV[top - 1] * blockW[top - 1]) /\n w;\n blockW[top - 2] = w;\n blockN[top - 2] += blockN[top - 1];\n top--;\n }\n }\n let i = 0;\n for (let b = 0; b < top; b++) {\n for (let k = 0; k < blockN[b]; k++) target[i++] = blockV[b];\n }\n};\n\n/** The layered layout on index data */\nexport const layeredLayout = (input: LayeredInput): GraphDagLayoutResult => {\n const { n, direction } = input;\n const horizontal = direction === \"LR\" || direction === \"RL\";\n const breadth = horizontal ? input.height : input.width;\n const depth = horizontal ? input.width : input.height;\n const E = input.source.length;\n\n // ---------------------------------------------------- 1. cycles\n const out: number[][] = Array.from({ length: n }, () => []);\n const indeg = new Int32Array(n);\n for (let e = 0; e < E; e++) {\n const s = input.source[e];\n const t = input.target[e];\n if (s === t || s < 0 || t < 0 || s >= n || t >= n) continue;\n out[s].push(e);\n indeg[t]++;\n }\n const reversedEdge = new Uint8Array(E);\n const color = new Uint8Array(n);\n const visit = (start: number) => {\n const stack: [number, number][] = [[start, 0]];\n color[start] = 1;\n while (stack.length) {\n const top = stack[stack.length - 1];\n const [v, k] = top;\n if (k >= out[v].length) {\n color[v] = 2;\n stack.pop();\n continue;\n }\n top[1]++;\n const e = out[v][k];\n const w = input.target[e];\n if (color[w] === 1) reversedEdge[e] = 1;\n else if (color[w] === 0) {\n color[w] = 1;\n stack.push([w, 0]);\n }\n }\n };\n for (let v = 0; v < n; v++) if (!indeg[v] && !color[v]) visit(v);\n for (let v = 0; v < n; v++) if (!color[v]) visit(v);\n\n // acyclic, deduplicated edges\n const pairKey = new Map<number, number>();\n const accA: number[] = [];\n const accB: number[] = [];\n const chainOf = new Int32Array(E).fill(-1);\n for (let e = 0; e < E; e++) {\n const s = input.source[e];\n const t = input.target[e];\n if (s === t || s < 0 || t < 0 || s >= n || t >= n) continue;\n const a = reversedEdge[e] ? t : s;\n const b = reversedEdge[e] ? s : t;\n const key = a * n + b;\n let id = pairKey.get(key);\n if (id === undefined) {\n id = accA.length;\n pairKey.set(key, id);\n accA.push(a);\n accB.push(b);\n }\n chainOf[e] = id;\n }\n const A = accA.length;\n\n // ---------------------------------------------------- 2. layers\n const succ: number[][] = Array.from({ length: n }, () => []);\n const pred: number[][] = Array.from({ length: n }, () => []);\n for (let k = 0; k < A; k++) {\n succ[accA[k]].push(accB[k]);\n pred[accB[k]].push(accA[k]);\n }\n const topo: number[] = [];\n const remaining = Int32Array.from(pred, (p) => p.length);\n for (let v = 0; v < n; v++) if (!remaining[v]) topo.push(v);\n for (let i = 0; i < topo.length; i++) {\n for (const w of succ[topo[i]]) if (--remaining[w] === 0) topo.push(w);\n }\n const layer = new Int32Array(n);\n for (const v of topo) {\n for (const u of pred[v]) layer[v] = Math.max(layer[v], layer[u] + 1);\n }\n let maxLayer = 0;\n for (let v = 0; v < n; v++) maxLayer = Math.max(maxLayer, layer[v]);\n const layerCount = new Int32Array(maxLayer + 1);\n for (let v = 0; v < n; v++) layerCount[layer[v]]++;\n // balancing: move nodes within their feasible range (shorter edges, then emptier layers)\n for (let i = topo.length - 1; i >= 0; i--) {\n const v = topo[i];\n let lo = 0;\n for (const u of pred[v]) lo = Math.max(lo, layer[u] + 1);\n let hi = maxLayer;\n for (const w of succ[v]) hi = Math.min(hi, layer[w] - 1);\n if (!succ[v].length) hi = layer[v];\n if (hi <= lo) continue;\n const ins = pred[v].length;\n const outs = succ[v].length;\n let best = layer[v];\n if (outs > ins) best = hi;\n else if (ins > outs) best = lo;\n else {\n for (let l = lo; l <= hi; l++) {\n if (layerCount[l] < layerCount[best] - 1) best = l;\n }\n }\n if (best !== layer[v]) {\n layerCount[layer[v]]--;\n layerCount[best]++;\n layer[v] = best;\n }\n }\n\n // ---------------------------------------------------- 3. dummies\n // virtual nodes: 0..n-1 real, n.. dummies\n const vLayer: number[] = Array.from(layer);\n const vPred: number[][] = Array.from({ length: n }, () => []);\n const vSucc: number[][] = Array.from({ length: n }, () => []);\n const vWeight: number[][] = Array.from({ length: n }, () => []);\n const chains: number[][] = [];\n const link = (p: number, q: number, w: number) => {\n vSucc[p].push(q);\n vPred[q].push(p);\n vWeight[q].push(w);\n };\n for (let k = 0; k < A; k++) {\n const a = accA[k];\n const b = accB[k];\n const chain: number[] = [a];\n let prev = a;\n for (let l = layer[a] + 1; l < layer[b]; l++) {\n const d = vLayer.length;\n vLayer.push(l);\n vPred.push([]);\n vSucc.push([]);\n vWeight.push([]);\n link(prev, d, prev >= n ? 8 : 2);\n chain.push(d);\n prev = d;\n }\n link(prev, b, prev >= n ? 2 : 1);\n chain.push(b);\n chains.push(chain);\n }\n const N = vLayer.length;\n const L = maxLayer + 1;\n\n // ---------------------------------------------------- 4. ordering\n const layers: number[][] = Array.from({ length: L }, () => []);\n const placed = new Uint8Array(N);\n const place = (v: number) => {\n if (placed[v]) return;\n placed[v] = 1;\n layers[vLayer[v]].push(v);\n };\n // depth-first from the sources keeps related nodes together\n const firstOrder: number[] = [];\n const seen = new Uint8Array(N);\n const roots = topo.filter((v) => !vPred[v].length);\n for (const r of roots.length ? roots : [0]) {\n if (r >= N || seen[r]) continue;\n const stack = [r];\n while (stack.length) {\n const v = stack.pop()!;\n if (seen[v]) continue;\n seen[v] = 1;\n firstOrder.push(v);\n for (let k = vSucc[v].length - 1; k >= 0; k--) stack.push(vSucc[v][k]);\n }\n }\n for (const v of firstOrder) place(v);\n for (let v = 0; v < N; v++) place(v);\n\n const pos = new Float64Array(N);\n const updatePos = (list: number[]) => list.forEach((v, i) => (pos[v] = i));\n layers.forEach(updatePos);\n\n const totalCrossings = () => {\n let total = 0;\n for (let l = 0; l + 1 < L; l++) {\n const pairs: [number, number][] = [];\n for (const v of layers[l])\n for (const w of vSucc[v]) pairs.push([pos[v], pos[w]]);\n total += bilayerCrossings(pairs, layers[l + 1].length);\n }\n return total;\n };\n\n const initial = totalCrossings();\n let best = initial;\n let bestLayers = layers.map((l) => l.slice());\n const key = new Float64Array(N);\n const reorder = (l: number, useMedian: boolean, up: boolean) => {\n const list = layers[l];\n for (const v of list) {\n const nb = up ? vSucc[v] : vPred[v];\n if (!nb.length) {\n key[v] = -1;\n continue;\n }\n if (useMedian) {\n const p = nb.map((w) => pos[w]).sort((a, b) => a - b);\n const mid = p.length >> 1;\n key[v] = p.length % 2 ? p[mid] : (p[mid - 1] + p[mid]) / 2;\n } else {\n let s = 0;\n for (const w of nb) s += pos[w];\n key[v] = s / nb.length;\n }\n }\n // nodes without neighbors keep their slot\n const fixedSlots = list.map((v) => key[v] < 0);\n const movable = list\n .filter((v) => key[v] >= 0)\n .sort((a, b) => key[a] - key[b] || pos[a] - pos[b]);\n let k = 0;\n for (let i = 0; i < list.length; i++) {\n if (!fixedSlots[i]) list[i] = movable[k++];\n }\n updatePos(list);\n };\n\n const sweeps = Math.max(0, Math.floor(input.sweeps));\n for (let s = 0; s < sweeps && best > 0; s++) {\n const median = s % 4 >= 2;\n if (s % 2 === 0) for (let l = 1; l < L; l++) reorder(l, median, false);\n else for (let l = L - 2; l >= 0; l--) reorder(l, median, true);\n const c = totalCrossings();\n if (c < best) {\n best = c;\n bestLayers = layers.map((l) => l.slice());\n }\n }\n bestLayers.forEach((list, l) => {\n layers[l] = list;\n updatePos(list);\n });\n\n // transposition of neighbors while it helps, any size: crossings of a\n // pair come from sorted neighbor positions (two pointers, O(deg u +\n // deg v), so hubs stay cheap), only layers next to a change are revisited,\n // and a work budget (deterministic, unlike a clock) bounds huge graphs\n if (best > 0) {\n const predStart = new Int32Array(N + 1);\n const succStart = new Int32Array(N + 1);\n for (let v = 0; v < N; v++) {\n predStart[v + 1] = predStart[v] + vPred[v].length;\n succStart[v + 1] = succStart[v] + vSucc[v].length;\n }\n const predPos = new Float64Array(predStart[N]);\n const succPos = new Float64Array(succStart[N]);\n let work = 0;\n const prepare = (list: number[]) => {\n for (const v of list) {\n const p = vPred[v];\n const s = vSucc[v];\n for (let k = 0; k < p.length; k++)\n predPos[predStart[v] + k] = pos[p[k]];\n for (let k = 0; k < s.length; k++)\n succPos[succStart[v] + k] = pos[s[k]];\n if (p.length > 1)\n predPos.subarray(predStart[v], predStart[v + 1]).sort();\n if (s.length > 1)\n succPos.subarray(succStart[v], succStart[v + 1]).sort();\n work += p.length + s.length + 1;\n }\n };\n // crossings with u left of v minus crossings with v left of u, on one side\n const sideGain = (\n arr: Float64Array,\n start: Int32Array,\n u: number,\n v: number,\n ) => {\n const a0 = start[u];\n const a1 = start[u + 1];\n const b0 = start[v];\n const b1 = start[v + 1];\n if (a0 === a1 || b0 === b1) return 0;\n let cross = 0;\n let ties = 0;\n let j = b0;\n for (let i = a0; i < a1; i++) {\n const a = arr[i];\n while (j < b1 && arr[j] < a) j++;\n cross += j - b0;\n if (j < b1 && arr[j] === a) ties++;\n }\n work += a1 - a0 + b1 - b0;\n const pairs = (a1 - a0) * (b1 - b0);\n return cross - (pairs - cross - ties);\n };\n let dirty = new Uint8Array(L).fill(1);\n for (let pass = 0; pass < TRANSPOSE_PASSES; pass++) {\n const changed = new Uint8Array(L);\n let any = false;\n for (let l = 0; l < L && work < TRANSPOSE_BUDGET; l++) {\n if (!dirty[l]) continue;\n const list = layers[l];\n prepare(list);\n for (let i = 0; i + 1 < list.length; i++) {\n const u = list[i];\n const v = list[i + 1];\n const gain =\n sideGain(predPos, predStart, u, v) +\n sideGain(succPos, succStart, u, v);\n if (gain > 0) {\n list[i] = v;\n list[i + 1] = u;\n pos[u] = i + 1;\n pos[v] = i;\n changed[l] = 1;\n any = true;\n }\n }\n }\n if (!any || work >= TRANSPOSE_BUDGET) break;\n dirty = new Uint8Array(L);\n for (let l = 0; l < L; l++) {\n if (!changed[l]) continue;\n if (l > 0) dirty[l - 1] = 1;\n dirty[l] = 1;\n if (l + 1 < L) dirty[l + 1] = 1;\n }\n }\n best = totalCrossings();\n }\n\n // ---------------------------------------------------- 5. coordinates\n const size = (v: number) => (v < n ? breadth[v] : 0);\n const gapOf = (a: number, b: number) =>\n a < n && b < n ? input.nodeGap : input.nodeGap * 0.5;\n const bx = new Float64Array(N);\n for (const list of layers) {\n let cursor = 0;\n list.forEach((v, i) => {\n if (i)\n cursor += (size(list[i - 1]) + size(v)) / 2 + gapOf(list[i - 1], v);\n bx[v] = cursor;\n });\n const shift = cursor / 2;\n for (const v of list) bx[v] -= shift;\n }\n const target = new Float64Array(N);\n const weight = new Float64Array(N);\n const offset = new Float64Array(N);\n // weights of the edges seen from both ends\n const succWeight: number[][] = Array.from({ length: N }, () => []);\n for (let q = 0; q < N; q++) {\n vPred[q].forEach((p, k) => {\n succWeight[p][vSucc[p].indexOf(q)] = vWeight[q][k];\n });\n }\n const align = (list: number[], mode: \"down\" | \"up\" | \"both\") => {\n const count = list.length;\n if (!count) return;\n for (let i = 0; i < count; i++) {\n const v = list[i];\n let sw = 0;\n let sx = 0;\n if (mode !== \"up\") {\n vPred[v].forEach((p, k) => {\n sw += vWeight[v][k];\n sx += vWeight[v][k] * bx[p];\n });\n }\n if (mode !== \"down\") {\n vSucc[v].forEach((q, k) => {\n const w = succWeight[v][k] ?? 1;\n sw += w;\n sx += w * bx[q];\n });\n }\n offset[i] = i\n ? offset[i - 1] +\n (size(list[i - 1]) + size(v)) / 2 +\n gapOf(list[i - 1], v)\n : 0;\n target[i] = (sw ? sx / sw : bx[v]) - offset[i];\n weight[i] = sw || 0.05;\n }\n isotonic(target, weight, count);\n for (let i = 0; i < count; i++) bx[list[i]] = target[i] + offset[i];\n };\n for (let iter = 0; iter < 10; iter++) {\n if (iter % 2 === 0) for (let l = 1; l < L; l++) align(layers[l], \"down\");\n else for (let l = L - 2; l >= 0; l--) align(layers[l], \"up\");\n }\n for (let l = 0; l < L; l++) align(layers[l], \"both\");\n\n // layer depths\n const layerDepth = new Float64Array(L);\n for (let v = 0; v < n; v++)\n layerDepth[layer[v]] = Math.max(layerDepth[layer[v]], depth[v]);\n const layerPos = new Float64Array(L);\n for (let l = 1; l < L; l++) {\n layerPos[l] =\n layerPos[l - 1] +\n layerDepth[l - 1] / 2 +\n input.layerGap +\n layerDepth[l] / 2;\n }\n\n // ---------------------------------------------------- 6. output\n const toOut = (b: number, d: number): [number, number] => {\n switch (direction) {\n case \"BT\":\n return [b, -d];\n case \"LR\":\n return [d, b];\n case \"RL\":\n return [-d, b];\n default:\n return [b, d];\n }\n };\n const x = new Float64Array(n);\n const y = new Float64Array(n);\n for (let v = 0; v < n; v++) {\n const [px, py] = toOut(bx[v], layerPos[layer[v]]);\n x[v] = px;\n y[v] = py;\n }\n const routes: number[][] = [];\n const reversed: number[] = [];\n for (let e = 0; e < E; e++) {\n const id = chainOf[e];\n if (id < 0) {\n routes.push([]);\n continue;\n }\n if (reversedEdge[e]) reversed.push(e);\n const chain = chains[id];\n const pts: number[] = [];\n chain.forEach((v, i) => {\n const d = layerPos[vLayer[v]];\n let dd = d;\n if (i === 0) dd = d + depth[v] / 2;\n else if (i === chain.length - 1) dd = d - depth[v] / 2;\n const [px, py] = toOut(bx[v], dd);\n pts.push(px, py);\n });\n if (reversedEdge[e]) {\n const flipped: number[] = [];\n for (let i = pts.length - 2; i >= 0; i -= 2)\n flipped.push(pts[i], pts[i + 1]);\n routes.push(flipped);\n } else {\n routes.push(pts);\n }\n }\n const order = layers.map((list) =>\n list.map((v) => (v < n ? v : -1 - (v - n))),\n );\n return {\n x,\n y,\n layer,\n order,\n routes,\n reversed,\n crossings: { initial, final: best },\n };\n};\n\n/** Layered (Sugiyama) layout of a directed graph */\nexport const dagLayout = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options: GraphDagLayoutOptions = {},\n): GraphDagLayoutResult => {\n const { source, target, edge } = indexGraph(nodes, edges);\n const width = new Float64Array(nodes.length);\n const height = new Float64Array(nodes.length);\n nodes.forEach((node, i) => {\n const [w, h] = options.size?.(node, i) ?? [24, 24];\n width[i] = w;\n height[i] = h;\n });\n const result = layeredLayout({\n n: nodes.length,\n source,\n target,\n width,\n height,\n direction: options.direction ?? \"TB\",\n layerGap: options.layerGap ?? 56,\n nodeGap: options.nodeGap ?? 24,\n sweeps: options.sweeps ?? 8,\n });\n // routes / reversed indices of the input edges\n const routes: number[][] = edges.map(() => []);\n edge.forEach((k, i) => (routes[k] = result.routes[i]));\n return {\n ...result,\n routes,\n reversed: result.reversed.map((i) => edge[i]),\n };\n};\n\n/** Index version of `criticalPath` */\nexport const longestPath = (\n n: number,\n source: ArrayLike<number>,\n target: ArrayLike<number>,\n duration: (i: number) => number,\n): { nodes: number[]; edges: number[]; length: number } => {\n const E = source.length;\n const out: number[][] = Array.from({ length: n }, () => []);\n const indeg = new Int32Array(n);\n for (let e = 0; e < E; e++) {\n if (source[e] === target[e]) continue;\n out[source[e]].push(e);\n indeg[target[e]]++;\n }\n const order: number[] = [];\n for (let v = 0; v < n; v++) if (!indeg[v]) order.push(v);\n for (let i = 0; i < order.length; i++) {\n for (const e of out[order[i]])\n if (--indeg[target[e]] === 0) order.push(target[e]);\n }\n const dist = new Float64Array(n);\n const via = new Int32Array(n).fill(-1);\n const inOrder = new Uint8Array(n);\n for (const v of order) {\n inOrder[v] = 1;\n dist[v] += duration(v);\n for (const e of out[v]) {\n const w = target[e];\n if (dist[v] > dist[w]) {\n dist[w] = dist[v];\n via[w] = e;\n }\n }\n }\n let end = -1;\n for (const v of order) if (end < 0 || dist[v] > dist[end]) end = v;\n if (end < 0) return { nodes: [], edges: [], length: 0 };\n const nodes: number[] = [end];\n const edges: number[] = [];\n for (let v = end; via[v] >= 0 && inOrder[source[via[v]]];) {\n edges.push(via[v]);\n v = source[via[v]];\n nodes.push(v);\n }\n return { nodes: nodes.reverse(), edges: edges.reverse(), length: dist[end] };\n};\n\n/**\n * Critical path of a DAG: the chain of tasks with the largest total\n * duration (node `value`, 1 when omitted). Nodes on cycles are ignored.\n */\nexport const criticalPath = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n): GraphCriticalPath => {\n const { source, target, edge } = indexGraph(nodes, edges);\n const result = longestPath(nodes.length, source, target, (i) => {\n const v = nodes[i].value;\n return Number.isFinite(v) && v! >= 0 ? v! : 1;\n });\n return {\n nodes: result.nodes.map((i) => nodes[i].id),\n edges: result.edges.map((i) => edge[i]),\n length: result.length,\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var e=(e,t)=>(Object.assign(e.style,t),e),t={position:`absolute`,width:`1px`,height:`1px`,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`},n=0,r=t=>{let n=e(t.createElement(`canvas`),{position:`absolute`,left:`0`,top:`0`,pointerEvents:`none`});return n.setAttribute(`aria-hidden`,`true`),n},i={zoomIn:`<path d="M8 3.5v9M3.5 8h9"/>`,zoomOut:`<path d="M3.5 8h9"/>`,fit:`<path d="M2.5 6V2.5H6M10 2.5h3.5V6M13.5 10v3.5H10M6 13.5H2.5V10"/>`},a=(t,n)=>{let r=e(t.createElement(`button`),{display:`inline-flex`,alignItems:`center`,justifyContent:`center`,width:`28px`,height:`28px`,padding:`0`,margin:`0`,border:`0`,borderRadius:`6px`,background:`transparent`,color:`var(--text-secondary-color, #6b7280)`,cursor:`pointer`});return r.type=`button`,r.innerHTML=`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${i[n]}</svg>`,r},o=i=>{let o=i.ownerDocument,s=e(o.createElement(`div`),{position:`relative`,display:`flex`,flexDirection:`column`,width:`100%`,height:`100%`,minHeight:`0`,fontFamily:`var(--font-family-sans, system-ui, sans-serif)`,color:`var(--text-color, #1f2937)`});s.className=`minerva-chart minerva-chart-graph`;let c=e(o.createElement(`div`),{display:`none`,flexWrap:`wrap`,alignItems:`center`,gap:`4px 12px`,padding:`0 4px 8px`,fontSize:`12px`,lineHeight:`18px`});c.className=`minerva-chart-legend`;let l=e(o.createElement(`div`),{position:`relative`,flex:`1 1 auto`,minHeight:`0`,overflow:`hidden`,outline:`none`,touchAction:`none`,userSelect:`none`,borderRadius:`6px`,cursor:`grab`});l.className=`minerva-chart-stage`,l.setAttribute(`role`,`figure`);let u=r(o);u.className=`minerva-chart-labels`;let d=e(o.createElement(`div`),{position:`absolute`,right:`8px`,bottom:`8px`,zIndex:`1`,display:`flex`,flexDirection:`column`,gap:`2px`,padding:`2px`,borderRadius:`8px`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 80%, transparent)`,background:`color-mix(in srgb, var(--surface-elevated-color, var(--background-color, #fff)) 92%, transparent)`,boxShadow:`0 2px 8px -2px rgba(15, 23, 42, 0.12)`});d.className=`minerva-chart-controls`;let f=a(o,`zoomIn`),p=a(o,`zoomOut`),m=a(o,`fit`);d.append(f,p,m);let h=e(o.createElement(`div`),{position:`absolute`,inset:`0`,zIndex:`2`,display:`flex`,alignItems:`center`,justifyContent:`center`,pointerEvents:`none`,opacity:`0`,transition:`opacity 160ms ease-out`,background:`color-mix(in srgb, var(--text-color, #1f2937) 32%, transparent)`,color:`#fff`,fontSize:`14px`,fontWeight:`500`});h.className=`minerva-chart-hint`,h.setAttribute(`aria-hidden`,`true`);let g=e(o.createElement(`div`),{position:`absolute`,left:`0`,top:`0`,zIndex:`3`,display:`none`,pointerEvents:`none`,minWidth:`120px`,maxWidth:`320px`,padding:`8px 12px`,borderRadius:`10px`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)`,background:`var(--surface-elevated-color, var(--background-color, #fff))`,color:`var(--text-color, #1f2937)`,boxShadow:`0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)`,fontSize:`12px`,lineHeight:`20px`,whiteSpace:`nowrap`});g.className=`minerva-chart-tooltip`,g.setAttribute(`role`,`tooltip`);let _=e(o.createElement(`div`),t);_.id=`minerva-chart-graph-summary-${++n}`,l.setAttribute(`aria-describedby`,_.id);let v=e(o.createElement(`div`),t);return v.setAttribute(`aria-live`,`polite`),l.append(u,d,h,g,_,v),s.append(c,l),i.appendChild(s),{root:s,legend:c,stage:l,foreground:u,controls:d,zoomIn:f,zoomOut:p,fit:m,hint:h,tooltip:g,summary:_,live:v}},s=(t,n)=>e(t.createElement(`span`),{display:`inline-block`,flex:`none`,width:`9px`,height:`9px`,borderRadius:`50%`,background:n}),c=(e,t,n,r)=>{let i=Math.max(1,Math.round(t*r)),a=Math.max(1,Math.round(n*r));e.width!==i&&(e.width=i),e.height!==a&&(e.height=a),e.style.width=`${t}px`,e.style.height=`${n}px`};exports.createGraphDom=o,exports.layerCanvas=r,exports.sizeCanvas=c,exports.style=e,exports.swatch=s;
2
+ //# sourceMappingURL=dom.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.cjs","names":["style","el","css","VISUALLY_HIDDEN","nextId","layerCanvas","canvas","doc","ICONS","controlButton","button","icon","createGraphDom","container","root","legend","stage","foreground","controls","zoomIn","zoomOut","fit","hint","tooltip","summary","live","swatch","color","sizeCanvas","w","width","dpr","h","height"],"sources":["../../../../../charts/src/engine/graph/dom.ts"],"sourcesContent":["// DOM of a graph chart: legend, focusable stage with the data canvas (added\n// by the renderer) and the label canvas, zoom buttons, wheel hint,\n// tooltip, a visually hidden summary and a live region. Styled inline with\n// the Minerva CSS variables.\n\nexport interface GraphDom {\n root: HTMLDivElement;\n legend: HTMLDivElement;\n stage: HTMLDivElement;\n /** Labels, badges, focus ring (above the data) */\n foreground: HTMLCanvasElement;\n controls: HTMLDivElement;\n zoomIn: HTMLButtonElement;\n zoomOut: HTMLButtonElement;\n fit: HTMLButtonElement;\n hint: HTMLDivElement;\n tooltip: HTMLDivElement;\n summary: HTMLDivElement;\n live: HTMLDivElement;\n}\n\nexport const style = <T extends HTMLElement>(\n el: T,\n css: Partial<CSSStyleDeclaration>,\n): T => {\n Object.assign(el.style, css);\n return el;\n};\n\nconst VISUALLY_HIDDEN: Partial<CSSStyleDeclaration> = {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n};\n\nlet nextId = 0;\n\n/** Canvas layer covering the stage */\nexport const layerCanvas = (doc: Document): HTMLCanvasElement => {\n const canvas = style(doc.createElement(\"canvas\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n canvas.setAttribute(\"aria-hidden\", \"true\");\n return canvas;\n};\n\nconst ICONS = {\n zoomIn: '<path d=\"M8 3.5v9M3.5 8h9\"/>',\n zoomOut: '<path d=\"M3.5 8h9\"/>',\n fit: '<path d=\"M2.5 6V2.5H6M10 2.5h3.5V6M13.5 10v3.5H10M6 13.5H2.5V10\"/>',\n};\n\nconst controlButton = (doc: Document, icon: keyof typeof ICONS) => {\n const button = style(doc.createElement(\"button\"), {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"28px\",\n height: \"28px\",\n padding: \"0\",\n margin: \"0\",\n border: \"0\",\n borderRadius: \"6px\",\n background: \"transparent\",\n color: \"var(--text-secondary-color, #6b7280)\",\n cursor: \"pointer\",\n });\n button.type = \"button\";\n button.innerHTML = `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${ICONS[icon]}</svg>`;\n return button;\n};\n\nexport const createGraphDom = (container: HTMLElement): GraphDom => {\n const doc = container.ownerDocument;\n const root = style(doc.createElement(\"div\"), {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n });\n root.className = \"minerva-chart minerva-chart-graph\";\n\n const legend = style(doc.createElement(\"div\"), {\n display: \"none\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: \"4px 12px\",\n padding: \"0 4px 8px\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n });\n legend.className = \"minerva-chart-legend\";\n\n const stage = style(doc.createElement(\"div\"), {\n position: \"relative\",\n flex: \"1 1 auto\",\n minHeight: \"0\",\n overflow: \"hidden\",\n outline: \"none\",\n touchAction: \"none\",\n userSelect: \"none\",\n borderRadius: \"6px\",\n cursor: \"grab\",\n });\n stage.className = \"minerva-chart-stage\";\n stage.setAttribute(\"role\", \"figure\");\n\n const foreground = layerCanvas(doc);\n foreground.className = \"minerva-chart-labels\";\n\n const controls = style(doc.createElement(\"div\"), {\n position: \"absolute\",\n right: \"8px\",\n bottom: \"8px\",\n zIndex: \"1\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n padding: \"2px\",\n borderRadius: \"8px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 80%, transparent)\",\n background:\n \"color-mix(in srgb, var(--surface-elevated-color, var(--background-color, #fff)) 92%, transparent)\",\n boxShadow: \"0 2px 8px -2px rgba(15, 23, 42, 0.12)\",\n });\n controls.className = \"minerva-chart-controls\";\n const zoomIn = controlButton(doc, \"zoomIn\");\n const zoomOut = controlButton(doc, \"zoomOut\");\n const fit = controlButton(doc, \"fit\");\n controls.append(zoomIn, zoomOut, fit);\n\n const hint = style(doc.createElement(\"div\"), {\n position: \"absolute\",\n inset: \"0\",\n zIndex: \"2\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n pointerEvents: \"none\",\n opacity: \"0\",\n transition: \"opacity 160ms ease-out\",\n background:\n \"color-mix(in srgb, var(--text-color, #1f2937) 32%, transparent)\",\n color: \"#fff\",\n fontSize: \"14px\",\n fontWeight: \"500\",\n });\n hint.className = \"minerva-chart-hint\";\n hint.setAttribute(\"aria-hidden\", \"true\");\n\n const tooltip = style(doc.createElement(\"div\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"3\",\n display: \"none\",\n pointerEvents: \"none\",\n minWidth: \"120px\",\n maxWidth: \"320px\",\n padding: \"8px 12px\",\n borderRadius: \"10px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)\",\n fontSize: \"12px\",\n lineHeight: \"20px\",\n whiteSpace: \"nowrap\",\n });\n tooltip.className = \"minerva-chart-tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n\n const summary = style(doc.createElement(\"div\"), VISUALLY_HIDDEN);\n summary.id = `minerva-chart-graph-summary-${++nextId}`;\n stage.setAttribute(\"aria-describedby\", summary.id);\n\n const live = style(doc.createElement(\"div\"), VISUALLY_HIDDEN);\n live.setAttribute(\"aria-live\", \"polite\");\n\n stage.append(foreground, controls, hint, tooltip, summary, live);\n root.append(legend, stage);\n container.appendChild(root);\n return {\n root,\n legend,\n stage,\n foreground,\n controls,\n zoomIn,\n zoomOut,\n fit,\n hint,\n tooltip,\n summary,\n live,\n };\n};\n\n/** Color dot of the legend and the tooltip */\nexport const swatch = (doc: Document, color: string) =>\n style(doc.createElement(\"span\"), {\n display: \"inline-block\",\n flex: \"none\",\n width: \"9px\",\n height: \"9px\",\n borderRadius: \"50%\",\n background: color,\n });\n\n/** Sizes a canvas to the stage (CSS pixels × device pixel ratio) */\nexport const sizeCanvas = (\n canvas: HTMLCanvasElement,\n width: number,\n height: number,\n dpr: number,\n): void => {\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (canvas.width !== w) canvas.width = w;\n if (canvas.height !== h) canvas.height = h;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n};\n"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface GraphDom {
2
+ root: HTMLDivElement;
3
+ legend: HTMLDivElement;
4
+ stage: HTMLDivElement;
5
+ /** Labels, badges, focus ring (above the data) */
6
+ foreground: HTMLCanvasElement;
7
+ controls: HTMLDivElement;
8
+ zoomIn: HTMLButtonElement;
9
+ zoomOut: HTMLButtonElement;
10
+ fit: HTMLButtonElement;
11
+ hint: HTMLDivElement;
12
+ tooltip: HTMLDivElement;
13
+ summary: HTMLDivElement;
14
+ live: HTMLDivElement;
15
+ }
16
+ export declare const style: <T extends HTMLElement>(el: T, css: Partial<CSSStyleDeclaration>) => T;
17
+ /** Canvas layer covering the stage */
18
+ export declare const layerCanvas: (doc: Document) => HTMLCanvasElement;
19
+ export declare const createGraphDom: (container: HTMLElement) => GraphDom;
20
+ /** Color dot of the legend and the tooltip */
21
+ export declare const swatch: (doc: Document, color: string) => HTMLSpanElement;
22
+ /** Sizes a canvas to the stage (CSS pixels × device pixel ratio) */
23
+ export declare const sizeCanvas: (canvas: HTMLCanvasElement, width: number, height: number, dpr: number) => void;
@@ -0,0 +1,23 @@
1
+ export interface GraphDom {
2
+ root: HTMLDivElement;
3
+ legend: HTMLDivElement;
4
+ stage: HTMLDivElement;
5
+ /** Labels, badges, focus ring (above the data) */
6
+ foreground: HTMLCanvasElement;
7
+ controls: HTMLDivElement;
8
+ zoomIn: HTMLButtonElement;
9
+ zoomOut: HTMLButtonElement;
10
+ fit: HTMLButtonElement;
11
+ hint: HTMLDivElement;
12
+ tooltip: HTMLDivElement;
13
+ summary: HTMLDivElement;
14
+ live: HTMLDivElement;
15
+ }
16
+ export declare const style: <T extends HTMLElement>(el: T, css: Partial<CSSStyleDeclaration>) => T;
17
+ /** Canvas layer covering the stage */
18
+ export declare const layerCanvas: (doc: Document) => HTMLCanvasElement;
19
+ export declare const createGraphDom: (container: HTMLElement) => GraphDom;
20
+ /** Color dot of the legend and the tooltip */
21
+ export declare const swatch: (doc: Document, color: string) => HTMLSpanElement;
22
+ /** Sizes a canvas to the stage (CSS pixels × device pixel ratio) */
23
+ export declare const sizeCanvas: (canvas: HTMLCanvasElement, width: number, height: number, dpr: number) => void;
@@ -0,0 +1,158 @@
1
+ //#region src/engine/graph/dom.ts
2
+ var e = (e, t) => (Object.assign(e.style, t), e), t = {
3
+ position: "absolute",
4
+ width: "1px",
5
+ height: "1px",
6
+ overflow: "hidden",
7
+ clip: "rect(0 0 0 0)",
8
+ clipPath: "inset(50%)",
9
+ whiteSpace: "nowrap"
10
+ }, n = 0, r = (t) => {
11
+ let n = e(t.createElement("canvas"), {
12
+ position: "absolute",
13
+ left: "0",
14
+ top: "0",
15
+ pointerEvents: "none"
16
+ });
17
+ return n.setAttribute("aria-hidden", "true"), n;
18
+ }, i = {
19
+ zoomIn: "<path d=\"M8 3.5v9M3.5 8h9\"/>",
20
+ zoomOut: "<path d=\"M3.5 8h9\"/>",
21
+ fit: "<path d=\"M2.5 6V2.5H6M10 2.5h3.5V6M13.5 10v3.5H10M6 13.5H2.5V10\"/>"
22
+ }, a = (t, n) => {
23
+ let r = e(t.createElement("button"), {
24
+ display: "inline-flex",
25
+ alignItems: "center",
26
+ justifyContent: "center",
27
+ width: "28px",
28
+ height: "28px",
29
+ padding: "0",
30
+ margin: "0",
31
+ border: "0",
32
+ borderRadius: "6px",
33
+ background: "transparent",
34
+ color: "var(--text-secondary-color, #6b7280)",
35
+ cursor: "pointer"
36
+ });
37
+ return r.type = "button", r.innerHTML = `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${i[n]}</svg>`, r;
38
+ }, o = (i) => {
39
+ let o = i.ownerDocument, s = e(o.createElement("div"), {
40
+ position: "relative",
41
+ display: "flex",
42
+ flexDirection: "column",
43
+ width: "100%",
44
+ height: "100%",
45
+ minHeight: "0",
46
+ fontFamily: "var(--font-family-sans, system-ui, sans-serif)",
47
+ color: "var(--text-color, #1f2937)"
48
+ });
49
+ s.className = "minerva-chart minerva-chart-graph";
50
+ let c = e(o.createElement("div"), {
51
+ display: "none",
52
+ flexWrap: "wrap",
53
+ alignItems: "center",
54
+ gap: "4px 12px",
55
+ padding: "0 4px 8px",
56
+ fontSize: "12px",
57
+ lineHeight: "18px"
58
+ });
59
+ c.className = "minerva-chart-legend";
60
+ let l = e(o.createElement("div"), {
61
+ position: "relative",
62
+ flex: "1 1 auto",
63
+ minHeight: "0",
64
+ overflow: "hidden",
65
+ outline: "none",
66
+ touchAction: "none",
67
+ userSelect: "none",
68
+ borderRadius: "6px",
69
+ cursor: "grab"
70
+ });
71
+ l.className = "minerva-chart-stage", l.setAttribute("role", "figure");
72
+ let u = r(o);
73
+ u.className = "minerva-chart-labels";
74
+ let d = e(o.createElement("div"), {
75
+ position: "absolute",
76
+ right: "8px",
77
+ bottom: "8px",
78
+ zIndex: "1",
79
+ display: "flex",
80
+ flexDirection: "column",
81
+ gap: "2px",
82
+ padding: "2px",
83
+ borderRadius: "8px",
84
+ border: "1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 80%, transparent)",
85
+ background: "color-mix(in srgb, var(--surface-elevated-color, var(--background-color, #fff)) 92%, transparent)",
86
+ boxShadow: "0 2px 8px -2px rgba(15, 23, 42, 0.12)"
87
+ });
88
+ d.className = "minerva-chart-controls";
89
+ let f = a(o, "zoomIn"), p = a(o, "zoomOut"), m = a(o, "fit");
90
+ d.append(f, p, m);
91
+ let h = e(o.createElement("div"), {
92
+ position: "absolute",
93
+ inset: "0",
94
+ zIndex: "2",
95
+ display: "flex",
96
+ alignItems: "center",
97
+ justifyContent: "center",
98
+ pointerEvents: "none",
99
+ opacity: "0",
100
+ transition: "opacity 160ms ease-out",
101
+ background: "color-mix(in srgb, var(--text-color, #1f2937) 32%, transparent)",
102
+ color: "#fff",
103
+ fontSize: "14px",
104
+ fontWeight: "500"
105
+ });
106
+ h.className = "minerva-chart-hint", h.setAttribute("aria-hidden", "true");
107
+ let g = e(o.createElement("div"), {
108
+ position: "absolute",
109
+ left: "0",
110
+ top: "0",
111
+ zIndex: "3",
112
+ display: "none",
113
+ pointerEvents: "none",
114
+ minWidth: "120px",
115
+ maxWidth: "320px",
116
+ padding: "8px 12px",
117
+ borderRadius: "10px",
118
+ border: "1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)",
119
+ background: "var(--surface-elevated-color, var(--background-color, #fff))",
120
+ color: "var(--text-color, #1f2937)",
121
+ boxShadow: "0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)",
122
+ fontSize: "12px",
123
+ lineHeight: "20px",
124
+ whiteSpace: "nowrap"
125
+ });
126
+ g.className = "minerva-chart-tooltip", g.setAttribute("role", "tooltip");
127
+ let _ = e(o.createElement("div"), t);
128
+ _.id = `minerva-chart-graph-summary-${++n}`, l.setAttribute("aria-describedby", _.id);
129
+ let v = e(o.createElement("div"), t);
130
+ return v.setAttribute("aria-live", "polite"), l.append(u, d, h, g, _, v), s.append(c, l), i.appendChild(s), {
131
+ root: s,
132
+ legend: c,
133
+ stage: l,
134
+ foreground: u,
135
+ controls: d,
136
+ zoomIn: f,
137
+ zoomOut: p,
138
+ fit: m,
139
+ hint: h,
140
+ tooltip: g,
141
+ summary: _,
142
+ live: v
143
+ };
144
+ }, s = (t, n) => e(t.createElement("span"), {
145
+ display: "inline-block",
146
+ flex: "none",
147
+ width: "9px",
148
+ height: "9px",
149
+ borderRadius: "50%",
150
+ background: n
151
+ }), c = (e, t, n, r) => {
152
+ let i = Math.max(1, Math.round(t * r)), a = Math.max(1, Math.round(n * r));
153
+ e.width !== i && (e.width = i), e.height !== a && (e.height = a), e.style.width = `${t}px`, e.style.height = `${n}px`;
154
+ };
155
+ //#endregion
156
+ export { o as createGraphDom, r as layerCanvas, c as sizeCanvas, e as style, s as swatch };
157
+
158
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","names":["style","el","css","VISUALLY_HIDDEN","nextId","layerCanvas","canvas","doc","ICONS","controlButton","button","icon","createGraphDom","container","root","legend","stage","foreground","controls","zoomIn","zoomOut","fit","hint","tooltip","summary","live","swatch","color","sizeCanvas","w","width","dpr","h","height"],"sources":["../../../../../charts/src/engine/graph/dom.ts"],"sourcesContent":["// DOM of a graph chart: legend, focusable stage with the data canvas (added\n// by the renderer) and the label canvas, zoom buttons, wheel hint,\n// tooltip, a visually hidden summary and a live region. Styled inline with\n// the Minerva CSS variables.\n\nexport interface GraphDom {\n root: HTMLDivElement;\n legend: HTMLDivElement;\n stage: HTMLDivElement;\n /** Labels, badges, focus ring (above the data) */\n foreground: HTMLCanvasElement;\n controls: HTMLDivElement;\n zoomIn: HTMLButtonElement;\n zoomOut: HTMLButtonElement;\n fit: HTMLButtonElement;\n hint: HTMLDivElement;\n tooltip: HTMLDivElement;\n summary: HTMLDivElement;\n live: HTMLDivElement;\n}\n\nexport const style = <T extends HTMLElement>(\n el: T,\n css: Partial<CSSStyleDeclaration>,\n): T => {\n Object.assign(el.style, css);\n return el;\n};\n\nconst VISUALLY_HIDDEN: Partial<CSSStyleDeclaration> = {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n};\n\nlet nextId = 0;\n\n/** Canvas layer covering the stage */\nexport const layerCanvas = (doc: Document): HTMLCanvasElement => {\n const canvas = style(doc.createElement(\"canvas\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n canvas.setAttribute(\"aria-hidden\", \"true\");\n return canvas;\n};\n\nconst ICONS = {\n zoomIn: '<path d=\"M8 3.5v9M3.5 8h9\"/>',\n zoomOut: '<path d=\"M3.5 8h9\"/>',\n fit: '<path d=\"M2.5 6V2.5H6M10 2.5h3.5V6M13.5 10v3.5H10M6 13.5H2.5V10\"/>',\n};\n\nconst controlButton = (doc: Document, icon: keyof typeof ICONS) => {\n const button = style(doc.createElement(\"button\"), {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"28px\",\n height: \"28px\",\n padding: \"0\",\n margin: \"0\",\n border: \"0\",\n borderRadius: \"6px\",\n background: \"transparent\",\n color: \"var(--text-secondary-color, #6b7280)\",\n cursor: \"pointer\",\n });\n button.type = \"button\";\n button.innerHTML = `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${ICONS[icon]}</svg>`;\n return button;\n};\n\nexport const createGraphDom = (container: HTMLElement): GraphDom => {\n const doc = container.ownerDocument;\n const root = style(doc.createElement(\"div\"), {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n });\n root.className = \"minerva-chart minerva-chart-graph\";\n\n const legend = style(doc.createElement(\"div\"), {\n display: \"none\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: \"4px 12px\",\n padding: \"0 4px 8px\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n });\n legend.className = \"minerva-chart-legend\";\n\n const stage = style(doc.createElement(\"div\"), {\n position: \"relative\",\n flex: \"1 1 auto\",\n minHeight: \"0\",\n overflow: \"hidden\",\n outline: \"none\",\n touchAction: \"none\",\n userSelect: \"none\",\n borderRadius: \"6px\",\n cursor: \"grab\",\n });\n stage.className = \"minerva-chart-stage\";\n stage.setAttribute(\"role\", \"figure\");\n\n const foreground = layerCanvas(doc);\n foreground.className = \"minerva-chart-labels\";\n\n const controls = style(doc.createElement(\"div\"), {\n position: \"absolute\",\n right: \"8px\",\n bottom: \"8px\",\n zIndex: \"1\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n padding: \"2px\",\n borderRadius: \"8px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 80%, transparent)\",\n background:\n \"color-mix(in srgb, var(--surface-elevated-color, var(--background-color, #fff)) 92%, transparent)\",\n boxShadow: \"0 2px 8px -2px rgba(15, 23, 42, 0.12)\",\n });\n controls.className = \"minerva-chart-controls\";\n const zoomIn = controlButton(doc, \"zoomIn\");\n const zoomOut = controlButton(doc, \"zoomOut\");\n const fit = controlButton(doc, \"fit\");\n controls.append(zoomIn, zoomOut, fit);\n\n const hint = style(doc.createElement(\"div\"), {\n position: \"absolute\",\n inset: \"0\",\n zIndex: \"2\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n pointerEvents: \"none\",\n opacity: \"0\",\n transition: \"opacity 160ms ease-out\",\n background:\n \"color-mix(in srgb, var(--text-color, #1f2937) 32%, transparent)\",\n color: \"#fff\",\n fontSize: \"14px\",\n fontWeight: \"500\",\n });\n hint.className = \"minerva-chart-hint\";\n hint.setAttribute(\"aria-hidden\", \"true\");\n\n const tooltip = style(doc.createElement(\"div\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"3\",\n display: \"none\",\n pointerEvents: \"none\",\n minWidth: \"120px\",\n maxWidth: \"320px\",\n padding: \"8px 12px\",\n borderRadius: \"10px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)\",\n fontSize: \"12px\",\n lineHeight: \"20px\",\n whiteSpace: \"nowrap\",\n });\n tooltip.className = \"minerva-chart-tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n\n const summary = style(doc.createElement(\"div\"), VISUALLY_HIDDEN);\n summary.id = `minerva-chart-graph-summary-${++nextId}`;\n stage.setAttribute(\"aria-describedby\", summary.id);\n\n const live = style(doc.createElement(\"div\"), VISUALLY_HIDDEN);\n live.setAttribute(\"aria-live\", \"polite\");\n\n stage.append(foreground, controls, hint, tooltip, summary, live);\n root.append(legend, stage);\n container.appendChild(root);\n return {\n root,\n legend,\n stage,\n foreground,\n controls,\n zoomIn,\n zoomOut,\n fit,\n hint,\n tooltip,\n summary,\n live,\n };\n};\n\n/** Color dot of the legend and the tooltip */\nexport const swatch = (doc: Document, color: string) =>\n style(doc.createElement(\"span\"), {\n display: \"inline-block\",\n flex: \"none\",\n width: \"9px\",\n height: \"9px\",\n borderRadius: \"50%\",\n background: color,\n });\n\n/** Sizes a canvas to the stage (CSS pixels × device pixel ratio) */\nexport const sizeCanvas = (\n canvas: HTMLCanvasElement,\n width: number,\n height: number,\n dpr: number,\n): void => {\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (canvas.width !== w) canvas.width = w;\n if (canvas.height !== h) canvas.height = h;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n};\n"],"mappings":";AAqBA,IAAaA,KACX,GACA,OAEA,OAAO,OAAOC,EAAG,OAAOC,CAAG,GACpBD,IAGHE,IAAgD;CACpD,UAAU;CACV,OAAO;CACP,QAAQ;CACR,UAAU;CACV,MAAM;CACN,UAAU;CACV,YAAY;AACd,GAEIC,IAAS,GAGAC,KAAe,MAAqC;CAC/D,IAAMC,IAASN,EAAMO,EAAI,cAAc,QAAQ,GAAG;EAChD,UAAU;EACV,MAAM;EACN,KAAK;EACL,eAAe;CACjB,CAAC;CAED,OADAD,EAAO,aAAa,eAAe,MAAM,GAClCA;AACT,GAEME,IAAQ;CACZ,QAAQ;CACR,SAAS;CACT,KAAK;AACP,GAEMC,KAAiB,GAAe,MAA6B;CACjE,IAAMC,IAASV,EAAMO,EAAI,cAAc,QAAQ,GAAG;EAChD,SAAS;EACT,YAAY;EACZ,gBAAgB;EAChB,OAAO;EACP,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,OAAO;EACP,QAAQ;CACV,CAAC;CAGD,OAFA,EAAO,OAAO,UACd,EAAO,YAAY,0KAA0KC,EAAMG,GAAM,SAClMD;AACT,GAEaE,KAAkB,MAAqC;CAClE,IAAML,IAAMM,EAAU,eAChBC,IAAOd,EAAMO,EAAI,cAAc,KAAK,GAAG;EAC3C,UAAU;EACV,SAAS;EACT,eAAe;EACf,OAAO;EACP,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,OAAO;CACT,CAAC;CACD,EAAK,YAAY;CAEjB,IAAMQ,IAASf,EAAMO,EAAI,cAAc,KAAK,GAAG;EAC7C,SAAS;EACT,UAAU;EACV,YAAY;EACZ,KAAK;EACL,SAAS;EACT,UAAU;EACV,YAAY;CACd,CAAC;CACD,EAAO,YAAY;CAEnB,IAAMS,IAAQhB,EAAMO,EAAI,cAAc,KAAK,GAAG;EAC5C,UAAU;EACV,MAAM;EACN,WAAW;EACX,UAAU;EACV,SAAS;EACT,aAAa;EACb,YAAY;EACZ,cAAc;EACd,QAAQ;CACV,CAAC;CAED,AADA,EAAM,YAAY,uBAClBS,EAAM,aAAa,QAAQ,QAAQ;CAEnC,IAAMC,IAAaZ,EAAYE,CAAG;CAClC,EAAW,YAAY;CAEvB,IAAMW,IAAWlB,EAAMO,EAAI,cAAc,KAAK,GAAG;EAC/C,UAAU;EACV,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,eAAe;EACf,KAAK;EACL,SAAS;EACT,cAAc;EACd,QACE;EACF,YACE;EACF,WAAW;CACb,CAAC;CACD,EAAS,YAAY;CACrB,IAAMY,IAASV,EAAcF,GAAK,QAAQ,GACpCa,IAAUX,EAAcF,GAAK,SAAS,GACtCc,IAAMZ,EAAcF,GAAK,KAAK;CACpC,EAAS,OAAOY,GAAQC,GAASC,CAAG;CAEpC,IAAMC,IAAOtB,EAAMO,EAAI,cAAc,KAAK,GAAG;EAC3C,UAAU;EACV,OAAO;EACP,QAAQ;EACR,SAAS;EACT,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,SAAS;EACT,YAAY;EACZ,YACE;EACF,OAAO;EACP,UAAU;EACV,YAAY;CACd,CAAC;CAED,AADA,EAAK,YAAY,sBACjBe,EAAK,aAAa,eAAe,MAAM;CAEvC,IAAMC,IAAUvB,EAAMO,EAAI,cAAc,KAAK,GAAG;EAC9C,UAAU;EACV,MAAM;EACN,KAAK;EACL,QAAQ;EACR,SAAS;EACT,eAAe;EACf,UAAU;EACV,UAAU;EACV,SAAS;EACT,cAAc;EACd,QACE;EACF,YAAY;EACZ,OAAO;EACP,WACE;EACF,UAAU;EACV,YAAY;EACZ,YAAY;CACd,CAAC;CAED,AADA,EAAQ,YAAY,yBACpBgB,EAAQ,aAAa,QAAQ,SAAS;CAEtC,IAAMC,IAAUxB,EAAMO,EAAI,cAAc,KAAK,GAAGJ,CAAe;CAE/D,AADA,EAAQ,KAAK,+BAA+B,EAAEC,KAC9CY,EAAM,aAAa,oBAAoBQ,EAAQ,EAAE;CAEjD,IAAMC,IAAOzB,EAAMO,EAAI,cAAc,KAAK,GAAGJ,CAAe;CAM5D,OALAsB,EAAK,aAAa,aAAa,QAAQ,GAEvCT,EAAM,OAAOC,GAAYC,GAAUI,GAAMC,GAASC,GAASC,CAAI,GAC/DX,EAAK,OAAOC,GAAQC,CAAK,GACzBH,EAAU,YAAYC,CAAI,GACnB;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF,GAGaY,KAAU,GAAe,MACpC1B,EAAMO,EAAI,cAAc,MAAM,GAAG;CAC/B,SAAS;CACT,MAAM;CACN,OAAO;CACP,QAAQ;CACR,cAAc;CACd,YAAYoB;AACd,CAAC,GAGUC,KACX,GACA,GACA,GACA,MACS;CACT,IAAMC,IAAI,KAAK,IAAI,GAAG,KAAK,MAAMC,IAAQC,CAAG,CAAC,GACvCC,IAAI,KAAK,IAAI,GAAG,KAAK,MAAMC,IAASF,CAAG,CAAC;CAI9C,AAHIzB,EAAO,UAAUuB,MAAG,EAAO,QAAQA,IACnCvB,EAAO,WAAW0B,MAAG,EAAO,SAASA,IACzC,EAAO,MAAM,QAAQ,GAAGF,EAAM,KAC9B,EAAO,MAAM,SAAS,GAAGG,EAAO;AAClC"}
@@ -0,0 +1,2 @@
1
+ function e(){return function e(t){let n=t.n,r=.3,i=t.x,a=t.y,o=t.radius,s=new Float64Array(n),c=new Float64Array(n),l=new Float64Array(n).fill(NaN),u=new Float64Array(n).fill(NaN),d=new Uint8Array(n),f=t.seed|0||1,p=()=>{f=f+1831565813|0;let e=Math.imul(f^f>>>15,1|f);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296},m=()=>(p()-.5)*1e-6,h=t.mass,g=t.alpha>=1&&n>=(t.coarsen||1/0);for(let e=0;e<n&&g;e++)(t.fixed[e]||Number.isFinite(i[e])||Number.isFinite(a[e]))&&(g=!1);let _=Math.PI*(3-Math.sqrt(5)),v=Math.max(10,t.linkDistance*.35);for(let e=0;e<n;e++){if(!(Number.isFinite(i[e])&&Number.isFinite(a[e]))){let t=v*Math.sqrt(.5+e),n=e*_;i[e]=t*Math.cos(n)+m(),a[e]=t*Math.sin(n)+m()}t.fixed[e]&&(d[e]=1,l[e]=i[e],u[e]=a[e])}let y=t.source.length,b=t.source,x=t.target,S=new Int32Array(n);for(let e=0;e<y;e++)S[b[e]]++,S[x[e]]++;let C=new Float64Array(y),ee=new Float64Array(y);for(let e=0;e<y;e++){let n=S[b[e]],r=S[x[e]];C[e]=n/(n+r);let i=Number.isFinite(t.linkStrength)?t.linkStrength:1/Math.min(n,r);ee[e]=i*(t.weight[e]||1)}let w=t.alpha>0?t.alpha:1,T=.001,E=1-T**(1/Math.max(1,t.iterations)),D=0,te=t.theta,ne=t.charge,O=new Float64Array(n);for(let e=0;e<n;e++)O[e]=ne*(h?h[e]:1);let k=t.collide,A=0;for(let e=0;e<n;e++)A=Math.max(A,o[e]);let j=null,M=g?new Int32Array(n).fill(-1):null,N=g?new Float64Array(n):null,P=g?new Float64Array(n):null;if(M&&N&&P){let i=new Int32Array(n);for(let e=0;e<y;e++)b[e]!==x[e]&&(i[b[e]]++,i[x[e]]++);let a=new Int32Array(n+1);for(let e=0;e<n;e++)a[e+1]=a[e]+i[e];let s=new Int32Array(a[n]),c=a.slice(0,n);for(let e=0;e<y;e++)b[e]!==x[e]&&(s[c[b[e]]++]=x[e],s[c[x[e]]++]=b[e]);let l=0;for(let e=0;e<n;e++)l=Math.max(l,i[e]);let u=new Int32Array(l+2);for(let e=0;e<n;e++)u[i[e]+1]++;for(let e=0;e<=l;e++)u[e+1]+=u[e];let d=new Int32Array(n);for(let e=0;e<n;e++)d[u[i[e]]++]=e;let f=e=>h?h[e]:1,m=new Int32Array(n),g=0;for(let e=0;e<n;e++){let t=d[e];if(M[t]>=0)continue;let n=-1;for(let e=a[t];e<a[t+1];e++){let r=s[e];r===t||M[r]>=0||(n<0||f(r)<f(n))&&(n=r)}n<0||(M[t]=M[n]=g,m[g++]=2)}for(let e=0;e<n;e++){let t=d[e];if(M[t]>=0)continue;let n=-1;for(let e=a[t];e<a[t+1];e++){let r=M[s[e]];r<0||i[t]>1&&m[r]>=3||(n<0||m[r]<m[n])&&(n=r)}n>=0?(M[t]=n,m[n]++):(M[t]=g,m[g++]=1)}if(g<=n*.8){let i=new Float64Array(g),a=new Float64Array(g);for(let e=0;e<n;e++)i[M[e]]+=f(e),a[M[e]]+=o[e]*o[e];for(let e=0;e<g;e++)a[e]=Math.sqrt(a[e]);let s=[];for(let e=0;e<y;e++){let t=M[b[e]],n=M[x[e]];t!==n&&s.push(t<n?t*g+n:n*g+t)}let c=Float64Array.from(s).sort(),l=[],u=[];for(let e=0;e<c.length;e++)e&&c[e]===c[e-1]||(l.push(Math.floor(c[e]/g)),u.push(c[e]%g));j=e({...t,n:g,x:new Float64Array(g).fill(NaN),y:new Float64Array(g).fill(NaN),radius:a,fixed:new Uint8Array(g),source:Int32Array.from(l),target:Int32Array.from(u),weight:new Float64Array(l.length).fill(1),mass:i,alpha:1});for(let e=0;e<n;e++){let n=p()*Math.PI*2,r=(t.linkDistance*.5+o[e])*(.4+.6*p());N[e]=Math.cos(n)*r,P[e]=Math.sin(n)*r}w=Math.min(w,r),E=1-(T/w)**(1/Math.max(1,Math.round(t.iterations*.15)))}}let F=()=>{if(!j||!M||!N||!P)return;let e=j.x,t=j.y;for(let r=0;r<n;r++)i[r]=e[M[r]]+N[r],a[r]=t[M[r]]+P[r]},I=()=>{F(),j=null};F();let L=0,R=new Float64Array,z=new Float64Array,B=new Float64Array,V=new Int32Array,H=new Int32Array,U=new Uint8Array,W=new Float64Array,G=new Float64Array,K=new Float64Array,q=new Int32Array(n),J=0,re=e=>{if(e<=L)return;let t=Math.max(e,L*2,64),n=e=>{let n=new Float64Array(t);return n.set(e),n};R=n(R),z=n(z),B=n(B),W=n(W),G=n(G),K=n(K);let r=new Int32Array(t*4);r.set(V),V=r;let i=new Int32Array(t);i.set(H),H=i;let a=new Uint8Array(t);a.set(U),U=a,L=t},ie=(e,t,n)=>{re(J+1);let r=J++;return R[r]=e,z[r]=t,B[r]=n,V[r*4]=-1,V[r*4+1]=-1,V[r*4+2]=-1,V[r*4+3]=-1,H[r]=-1,U[r]=0,r},ae=(e,t,n)=>{let r=B[e]/2;return+(t>=R[e]+r)|(n>=z[e]+r?2:0)},oe=(e,t)=>{let n=B[e]/2;return ie(R[e]+(t&1?n:0),z[e]+(t&2?n:0),n)},se=e=>{let t=0,n=i[e],r=a[e];for(let o=0;;o++){if(U[t]){let i=ae(t,n,r),a=V[t*4+i];if(a<0){a=oe(t,i),V[t*4+i]=a,H[a]=e,q[e]=-1;return}t=a;continue}let s=H[t];if(s<0){H[t]=e,q[e]=-1;return}if(i[s]===n&&a[s]===r||o>48){q[e]=s,H[t]=e;return}H[t]=-1,U[t]=1;let c=ae(t,i[s],a[s]),l=oe(t,c);V[t*4+c]=l,H[l]=s}},ce=()=>{let e=1/0,t=1/0,r=-1/0,o=-1/0;for(let s=0;s<n;s++)i[s]<e&&(e=i[s]),i[s]>r&&(r=i[s]),a[s]<t&&(t=a[s]),a[s]>o&&(o=a[s]);let s=Math.max(r-e,o-t,1)*1.0001+1e-6;J=0,re(n*2+8),ie(e,t,s);for(let e=0;e<n;e++)se(e);for(let e=J-1;e>=0;e--)if(U[e]){let t=0,n=0,r=0,i=0;for(let a=0;a<4;a++){let o=V[e*4+a];if(o<0)continue;let s=Math.abs(W[o]);t+=W[o],n+=s,r+=s*G[o],i+=s*K[o]}W[e]=t,G[e]=n?r/n:R[e],K[e]=n?i/n:z[e]}else{let t=0;for(let n=H[e];n>=0;n=q[n])t+=O[n];W[e]=t,G[e]=i[H[e]],K[e]=a[H[e]]}},Y=new Int32Array(256),le=new Int32Array(n),ue=()=>{if(!ne||n<2)return;ce();let e=te*(1+.5*Math.min(1,w/r)),t=1/(e*e),o=0,l=0;for(Y[l++]=0;l;){let e=Y[--l];if(U[e]){if(l+4>Y.length){let e=new Int32Array(Y.length*2);e.set(Y),Y=e}for(let t=0;t<4;t++){let n=V[e*4+t];n>=0&&(Y[l++]=n)}}else for(let t=H[e];t>=0;t=q[t])le[o++]=t}for(let e=0;e<o;e++){let n=le[e],r=i[n],o=a[n];for(l=0,Y[l++]=0;l;){let e=Y[--l];if(W[e]){if(U[e]){let i=G[e]-r,a=K[e]-o,u=B[e],d=i*i+a*a;if(u*u*t<d){d<1&&(d=Math.sqrt(d));let t=W[e]*w/d;s[n]+=i*t,c[n]+=a*t;continue}if(l+4>Y.length){let e=new Int32Array(Y.length*2);e.set(Y),Y=e}for(let t=0;t<4;t++){let n=V[e*4+t];n>=0&&(Y[l++]=n)}}else for(let t=H[e];t>=0;t=q[t]){if(t===n)continue;let e=i[t]-r,l=a[t]-o,u=e*e+l*l;e===0&&(e=m(),u+=e*e),l===0&&(l=m(),u+=l*l),u<1&&(u=Math.sqrt(u));let d=O[t]*w/u;s[n]+=e*d,c[n]+=l*d}}}}},de=()=>{let e=t.linkDistance;for(let t=0;t<y;t++){let n=b[t],r=x[t];if(n===r)continue;let l=i[r]+s[r]-i[n]-s[n]||m(),u=a[r]+c[r]-a[n]-c[n]||m(),d=Math.sqrt(l*l+u*u);d=(d-e-o[n]-o[r])/d*w*ee[t],l*=d,u*=d;let f=C[t];s[r]-=l*f,c[r]-=u*f,s[n]+=l*(1-f),c[n]+=u*(1-f)}},fe=()=>{let e=t.gravity*w;if(!e)return;let r=Math.sqrt(Math.max(.25,Math.min(4,t.aspect>0?t.aspect:1))),o=e/r,l=e*r;for(let e=0;e<n;e++)s[e]-=i[e]*o,c[e]-=a[e]*l},X=1;for(;X<n*2;)X<<=1;let Z=new Int32Array(X+1),pe=new Int32Array(n),me=new Int32Array(n),he=(e,t)=>(Math.imul(e,73856093)^Math.imul(t,19349663))&X-1,ge=(e,t,r)=>{let i=Math.max(1e-6,(A+r)*2);Z.fill(0);for(let r=0;r<n;r++){let n=he(Math.floor(e[r]/i),Math.floor(t[r]/i));me[r]=n,Z[n+1]++}for(let e=0;e<X;e++)Z[e+1]+=Z[e];let a=Z.slice(0,X);for(let e=0;e<n;e++)pe[a[me[e]]++]=e;return i},Q=new Int32Array(X).fill(-1),_e=(e,t,r,i)=>{let a=ge(e,t,r);Q.fill(-1);for(let r=0;r<n;r++){let n=Math.floor(e[r]/a),o=Math.floor(t[r]/a);for(let e=-1;e<=1;e++)for(let t=-1;t<=1;t++){let a=he(n+t,o+e);if(Q[a]!==r){Q[a]=r;for(let e=Z[a];e<Z[a+1];e++){let t=pe[e];t>r&&i(r,t)}}}}},ve=new Float64Array(n),ye=new Float64Array(n),be=()=>{if(!(k<0||n<2)){for(let e=0;e<n;e++)ve[e]=i[e]+s[e],ye[e]=a[e]+c[e];_e(ve,ye,k,(e,t)=>{let n=o[e]+k,r=o[t]+k,l=n+r,u=i[e]+s[e]-i[t]-s[t],d=a[e]+c[e]-a[t]-c[t],f=u*u+d*d;if(f>=l*l)return;u===0&&(u=m(),f+=u*u),d===0&&(d=m(),f+=d*d);let p=Math.sqrt(f),h=(l-p)/p*.7;u*=h,d*=h;let g=r*r,_=g/(n*n+g);s[e]+=u*_,c[e]+=d*_,s[t]-=u*(1-_),c[t]-=d*(1-_)})}},xe=()=>{let e=0,t=0;for(let r=0;r<n;r++){if(!Number.isNaN(l[r]))return;e+=i[r],t+=a[r]}e/=n||1,t/=n||1;for(let r=0;r<n;r++)i[r]-=e,a[r]-=t},Se=t.aspect>0?t.aspect:1,Ce=t.alpha>=1&&n>2&&Math.abs(Math.log(Se))>.15,we=()=>{let e=0,t=0,r=0;for(let o=0;o<n;o++){if(!Number.isNaN(l[o]))return;e+=i[o]*i[o],t+=a[o]*a[o],r+=i[o]*a[o]}if(Math.hypot(e-t,2*r)<(e+t)*.04)return;let o=.5*Math.atan2(2*r,e-t),u=(Se>1?0:Math.PI/2)-o;if(u>Math.PI/2&&(u-=Math.PI),u<-Math.PI/2&&(u+=Math.PI),u*=.12,Math.abs(u)<1e-5)return;let d=Math.cos(u),f=Math.sin(u);for(let e=0;e<n;e++){let t=i[e],n=s[e];i[e]=t*d-a[e]*f,a[e]=t*f+a[e]*d,s[e]=n*d-c[e]*f,c[e]=n*f+c[e]*d}},Te=()=>{w+=(D-w)*E,de(),ue(),fe(),be();let e=1-t.velocityDecay;for(let t=0;t<n;t++)Number.isNaN(l[t])?(s[t]*=e,c[t]*=e,i[t]+=s[t],a[t]+=c[t]):(i[t]=l[t],a[t]=u[t],s[t]=c[t]=0);xe(),Ce&&we()},$=()=>!j&&w<T&&D===0;return{x:i,y:a,tick(e=1){for(let t=0;t<e;t++){if(j){j.tick(1)?F():I();continue}if($())return!1;Te()}return!$()},alpha:()=>j?Math.max(w,j.alpha()):w,reheat(e=.3){j&&I(),w=Math.max(w,e)},drag(e,t,r){e<0||e>=n||(j&&I(),l[e]=i[e]=t,u[e]=a[e]=r,D=.3,w<.3&&(w=.3))},release(e,t){D=0,!(e<0||e>=n||t||d[e])&&(l[e]=NaN,u[e]=NaN)},done:$,settle(){let e=Math.max(0,k);for(let t=0;t<80;t++){let t=!1;if(_e(i,a,e,(n,r)=>{let s=o[n]+o[r]+e*2,c=i[n]-i[r],u=a[n]-a[r],d=c*c+u*u;if(d>=s*s*.9999)return;d===0&&(c=p()-.5,u=p()-.5,d=c*c+u*u);let f=Math.sqrt(d),m=(s-f)/f,h=+!!Number.isNaN(l[n]),g=+!!Number.isNaN(l[r]);if(!h&&!g)return;let _=h/(h+g),v=g/(h+g);i[n]+=c*m*_*1.001,a[n]+=u*m*_*1.001,i[r]-=c*m*v*1.001,a[r]-=u*m*v*1.001,t=!0}),!t)break}}}}}var t={linkDistance:60,charge:-160,theta:.9,gravity:.04,collide:2,velocityDecay:.4,iterations:300,seed:1,multilevel:400},n=(e,n,r,i,a={})=>{let o=i??{},s=o.collide===!1?-1:typeof o.collide==`number`?Math.max(0,o.collide):t.collide;return{n:e,x:a.x??new Float64Array(e).fill(NaN),y:a.y??new Float64Array(e).fill(NaN),radius:a.radius??new Float64Array(e).fill(6),fixed:a.fixed??new Uint8Array(e),source:n,target:r,weight:a.weight??new Float64Array(n.length).fill(1),linkDistance:o.linkDistance??t.linkDistance,linkStrength:o.linkStrength??NaN,charge:o.charge??t.charge,theta:o.theta??t.theta,gravity:o.gravity??t.gravity,collide:s,velocityDecay:o.velocityDecay??t.velocityDecay,iterations:o.iterations??t.iterations,seed:o.seed??t.seed,alpha:a.alpha??1,aspect:a.aspect??1,coarsen:o.multilevel===!1?0:t.multilevel}},r=(e,t)=>{let n=new Map;e.forEach((e,t)=>{n.has(e.id)||n.set(e.id,t)});let r=[],i=[],a=[];return t.forEach((e,t)=>{let o=n.get(e.source),s=n.get(e.target);o!==void 0&&s!==void 0&&(r.push(o),i.push(s),a.push(t))}),{index:n,source:Int32Array.from(r),target:Int32Array.from(i),edge:Int32Array.from(a)}},i=(t,i,a)=>{let{source:o,target:s,edge:c}=r(t,i),l=t.length,u=new Float64Array(l).fill(NaN),d=new Float64Array(l).fill(NaN),f=new Uint8Array(l),p=new Float64Array(l);t.forEach((e,t)=>{Number.isFinite(e.x)&&Number.isFinite(e.y)&&(u[t]=e.x,d[t]=e.y,e.fixed&&(f[t]=1)),p[t]=a?.radius?.(e,t)??6});let m=Array.from(c,e=>i[e].value),h=m.filter(e=>Number.isFinite(e)&&e>0),g=h.length?h.reduce((e,t)=>e+t,0)/h.length:1,_=Float64Array.from(m,e=>Number.isFinite(e)&&e>0?Math.max(.5,Math.min(2,Math.sqrt(e/g))):1);return e()(n(l,o,s,a,{x:u,y:d,fixed:f,radius:p,weight:_}))},a=(e,t,n)=>i(e,t,n),o=(e,t,n)=>{let r=i(e,t,n);for(;r.tick(16););return r.settle(),{x:r.x,y:r.y}};exports.FORCE_DEFAULTS=t,exports.createForceSimulation=a,exports.forceInit=n,exports.forceKernel=e,exports.forceLayout=o,exports.indexGraph=r;
2
+ //# sourceMappingURL=force.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"force.cjs","names":["forceKernel","createSim","init","REFINE_ALPHA","x","y","radius","vx","vy","fx","fy","pinned","seed","random","t","jiggle","mass","fresh","i","angle","spread","r","a","m","src","tgt","count","l","bias","strength","b","base","alpha","alphaMin","alphaDecay","alphaTarget","theta","charge","nodeCharge","collidePad","maxRadius","coarse","group","offsetX","offsetY","degree","adjStart","adj","fill","maxDegree","byDegree","d","order","weightOf","size","cn","o","u","best","v","g","cmass","cradius","keys","sorted","cs","ct","k","project","cx","cy","finishCoarse","cap","qx0","qy0","qsize","qchild","qpoint","qinner","qmass","qcx","qcy","nextPoint","qcount","grow","need","next","copyF","c","p","q","newQuad","x0","y0","quadrant","half","py","childQuad","insert","px","depth","j","buildTree","x1","y1","weight","sx","sy","w","stack","spatial","manyBody","open","top","s","xi","yi","dx","dy","f","links","distance","gravity","stretch","gx","gy","tableSize","cellStart","cellItems","cellOf","hash","bucket","cell","pad","h","fillAt","visited","eachPair","oy","ox","pair","collide","ri","rj","rj2","share","center","aspect","orient","align","sxx","syy","sxy","axis","turn","pvx","step","decay","done","value","px2","py2","keep","pass","moved","push","fi","fj","si","sj","FORCE_DEFAULTS","forceInit","options","extra","n","source","indexGraph","index","nodes","node","e","edges","edge","simulationOf","fixed","values","known","mean","target","createForceSimulation","forceLayout","sim"],"sources":["../../../../../charts/src/engine/graph/force.ts"],"sourcesContent":["// Force-directed layout: Barnes–Hut many-body (flat quadtree), links (d3\n// semantics), gravity, centering and collisions (hash grid), with alpha\n// cooling and a deterministic seed. `forceKernel` is self-contained (no\n// reference to anything outside its body): it is serialized into the Web\n// Worker of large graphs (see worker.ts).\n\nimport type {\n GraphForceLayoutOptions,\n GraphForceSimulation,\n GraphEdge,\n GraphLayoutResult,\n GraphNode,\n} from \"./types\";\n\n/** Data of a simulation (index-based, transferable to a worker) */\nexport interface ForceKernelInit {\n n: number;\n /** Initial positions (NaN = automatic) */\n x: Float64Array;\n y: Float64Array;\n radius: Float64Array;\n /** 1 = pinned at its initial position */\n fixed: Uint8Array;\n source: Int32Array;\n target: Int32Array;\n /** Strength multiplier per link */\n weight: Float64Array;\n linkDistance: number;\n /** NaN = 1 / min(degree) */\n linkStrength: number;\n charge: number;\n theta: number;\n gravity: number;\n /** Extra spacing of the collisions; negative disables them */\n collide: number;\n velocityDecay: number;\n iterations: number;\n seed: number;\n /** Starting temperature (1 for a new layout, lower to refine one) */\n alpha: number;\n /** Width / height of the view: gravity stretches the layout to it */\n aspect: number;\n /** Charge multiplier per node (merged nodes of a coarse level) */\n mass?: Float64Array;\n /**\n * Multilevel start: a fresh layout of at least this many nodes is first\n * computed on a coarsened graph (0 = never)\n */\n coarsen?: number;\n}\n\nexport type ForceKernel = (init: ForceKernelInit) => GraphForceSimulation;\n\n/** Returns the simulation factory (self-contained: serialized into workers) */\nexport function forceKernel(): ForceKernel {\n return function createSim(init: ForceKernelInit): GraphForceSimulation {\n const n = init.n;\n // multilevel refinement: starting temperature and share of `iterations`\n const REFINE_ALPHA = 0.3;\n const REFINE_SHARE = 0.15;\n const THETA_BOOST = 0.5;\n const x = init.x;\n const y = init.y;\n const radius = init.radius;\n const vx = new Float64Array(n);\n const vy = new Float64Array(n);\n const fx = new Float64Array(n).fill(NaN);\n const fy = new Float64Array(n).fill(NaN);\n const pinned = new Uint8Array(n);\n let seed = init.seed | 0 || 1;\n const random = () => {\n // mulberry32\n seed = (seed + 0x6d2b79f5) | 0;\n let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n const jiggle = () => (random() - 0.5) * 1e-6;\n const mass = init.mass;\n\n // a fresh layout (no known position) of a large graph starts from the\n // layout of a coarsened graph\n let fresh = init.alpha >= 1 && n >= (init.coarsen || Infinity);\n for (let i = 0; i < n && fresh; i++)\n if (init.fixed[i] || Number.isFinite(x[i]) || Number.isFinite(y[i]))\n fresh = false;\n\n // phyllotaxis start (like d3), seeded jitter keeps it deterministic\n const angle = Math.PI * (3 - Math.sqrt(5));\n const spread = Math.max(10, init.linkDistance * 0.35);\n for (let i = 0; i < n; i++) {\n if (!(Number.isFinite(x[i]) && Number.isFinite(y[i]))) {\n const r = spread * Math.sqrt(0.5 + i);\n const a = i * angle;\n x[i] = r * Math.cos(a) + jiggle();\n y[i] = r * Math.sin(a) + jiggle();\n }\n if (init.fixed[i]) {\n pinned[i] = 1;\n fx[i] = x[i];\n fy[i] = y[i];\n }\n }\n\n // links\n const m = init.source.length;\n const src = init.source;\n const tgt = init.target;\n const count = new Int32Array(n);\n for (let l = 0; l < m; l++) {\n count[src[l]]++;\n count[tgt[l]]++;\n }\n const bias = new Float64Array(m);\n const strength = new Float64Array(m);\n for (let l = 0; l < m; l++) {\n const a = count[src[l]];\n const b = count[tgt[l]];\n bias[l] = a / (a + b);\n const base = Number.isFinite(init.linkStrength)\n ? init.linkStrength\n : 1 / Math.min(a, b);\n strength[l] = base * (init.weight[l] || 1);\n }\n\n let alpha = init.alpha > 0 ? init.alpha : 1;\n const alphaMin = 0.001;\n let alphaDecay = 1 - Math.pow(alphaMin, 1 / Math.max(1, init.iterations));\n let alphaTarget = 0;\n const theta = init.theta;\n const charge = init.charge;\n const nodeCharge = new Float64Array(n);\n for (let i = 0; i < n; i++) nodeCharge[i] = charge * (mass ? mass[i] : 1);\n const collidePad = init.collide;\n let maxRadius = 0;\n for (let i = 0; i < n; i++) maxRadius = Math.max(maxRadius, radius[i]);\n\n // ---- multilevel start: neighbors are merged (a matching, then the\n // leftover nodes join a neighbor's group), the coarse graph is laid out\n // by a nested simulation (recursively coarsened), then its positions are\n // spread to the members and refined with a short cooling\n let coarse: GraphForceSimulation | null = null;\n const group = fresh ? new Int32Array(n).fill(-1) : null;\n const offsetX = fresh ? new Float64Array(n) : null;\n const offsetY = fresh ? new Float64Array(n) : null;\n if (group && offsetX && offsetY) {\n const degree = new Int32Array(n);\n for (let l = 0; l < m; l++) {\n if (src[l] === tgt[l]) continue;\n degree[src[l]]++;\n degree[tgt[l]]++;\n }\n const adjStart = new Int32Array(n + 1);\n for (let i = 0; i < n; i++) adjStart[i + 1] = adjStart[i] + degree[i];\n const adj = new Int32Array(adjStart[n]);\n const fill = adjStart.slice(0, n);\n for (let l = 0; l < m; l++) {\n if (src[l] === tgt[l]) continue;\n adj[fill[src[l]]++] = tgt[l];\n adj[fill[tgt[l]]++] = src[l];\n }\n // nodes by increasing degree (counting sort): leaves pair with hubs\n let maxDegree = 0;\n for (let i = 0; i < n; i++) maxDegree = Math.max(maxDegree, degree[i]);\n const byDegree = new Int32Array(maxDegree + 2);\n for (let i = 0; i < n; i++) byDegree[degree[i] + 1]++;\n for (let d = 0; d <= maxDegree; d++) byDegree[d + 1] += byDegree[d];\n const order = new Int32Array(n);\n for (let i = 0; i < n; i++) order[byDegree[degree[i]]++] = i;\n const weightOf = (i: number) => (mass ? mass[i] : 1);\n const size = new Int32Array(n);\n let cn = 0;\n for (let o = 0; o < n; o++) {\n const u = order[o];\n if (group[u] >= 0) continue;\n let best = -1;\n for (let a = adjStart[u]; a < adjStart[u + 1]; a++) {\n const v = adj[a];\n if (v === u || group[v] >= 0) continue;\n if (best < 0 || weightOf(v) < weightOf(best)) best = v;\n }\n if (best < 0) continue;\n group[u] = group[best] = cn;\n size[cn++] = 2;\n }\n for (let o = 0; o < n; o++) {\n const u = order[o];\n if (group[u] >= 0) continue;\n let best = -1;\n for (let a = adjStart[u]; a < adjStart[u + 1]; a++) {\n const g = group[adj[a]];\n // leaves always join their neighbor (\"solar systems\")\n if (g < 0 || (degree[u] > 1 && size[g] >= 3)) continue;\n if (best < 0 || size[g] < size[best]) best = g;\n }\n if (best >= 0) {\n group[u] = best;\n size[best]++;\n } else {\n group[u] = cn;\n size[cn++] = 1;\n }\n }\n if (cn <= n * 0.8) {\n const cmass = new Float64Array(cn);\n const cradius = new Float64Array(cn);\n for (let i = 0; i < n; i++) {\n cmass[group[i]] += weightOf(i);\n cradius[group[i]] += radius[i] * radius[i];\n }\n for (let g = 0; g < cn; g++) cradius[g] = Math.sqrt(cradius[g]);\n // coarse links: deduplicated pairs of groups\n const keys: number[] = [];\n for (let l = 0; l < m; l++) {\n const a = group[src[l]];\n const b = group[tgt[l]];\n if (a !== b) keys.push(a < b ? a * cn + b : b * cn + a);\n }\n const sorted = Float64Array.from(keys).sort();\n const cs: number[] = [];\n const ct: number[] = [];\n for (let k = 0; k < sorted.length; k++) {\n if (k && sorted[k] === sorted[k - 1]) continue;\n cs.push(Math.floor(sorted[k] / cn));\n ct.push(sorted[k] % cn);\n }\n coarse = createSim({\n ...init,\n n: cn,\n x: new Float64Array(cn).fill(NaN),\n y: new Float64Array(cn).fill(NaN),\n radius: cradius,\n fixed: new Uint8Array(cn),\n source: Int32Array.from(cs),\n target: Int32Array.from(ct),\n weight: new Float64Array(cs.length).fill(1),\n mass: cmass,\n alpha: 1,\n });\n // members spread around their group, a refinement finishes the layout\n for (let i = 0; i < n; i++) {\n const a = random() * Math.PI * 2;\n const d =\n (init.linkDistance * 0.5 + radius[i]) * (0.4 + 0.6 * random());\n offsetX[i] = Math.cos(a) * d;\n offsetY[i] = Math.sin(a) * d;\n }\n alpha = Math.min(alpha, REFINE_ALPHA);\n alphaDecay =\n 1 -\n Math.pow(\n alphaMin / alpha,\n 1 / Math.max(1, Math.round(init.iterations * REFINE_SHARE)),\n );\n }\n }\n const project = () => {\n if (!coarse || !group || !offsetX || !offsetY) return;\n const cx = coarse.x;\n const cy = coarse.y;\n for (let i = 0; i < n; i++) {\n x[i] = cx[group[i]] + offsetX[i];\n y[i] = cy[group[i]] + offsetY[i];\n }\n };\n const finishCoarse = () => {\n project();\n coarse = null;\n };\n project();\n\n // ---- flat quadtree (rebuilt every tick)\n let cap = 0;\n let qx0 = new Float64Array(0);\n let qy0 = new Float64Array(0);\n let qsize = new Float64Array(0);\n let qchild = new Int32Array(0);\n let qpoint = new Int32Array(0);\n let qinner = new Uint8Array(0);\n let qmass = new Float64Array(0);\n let qcx = new Float64Array(0);\n let qcy = new Float64Array(0);\n const nextPoint = new Int32Array(n);\n let qcount = 0;\n\n const grow = (need: number) => {\n if (need <= cap) return;\n const next = Math.max(need, cap * 2, 64);\n const copyF = (a: Float64Array) => {\n const b = new Float64Array(next);\n b.set(a);\n return b;\n };\n qx0 = copyF(qx0);\n qy0 = copyF(qy0);\n qsize = copyF(qsize);\n qmass = copyF(qmass);\n qcx = copyF(qcx);\n qcy = copyF(qcy);\n const c = new Int32Array(next * 4);\n c.set(qchild);\n qchild = c;\n const p = new Int32Array(next);\n p.set(qpoint);\n qpoint = p;\n const q = new Uint8Array(next);\n q.set(qinner);\n qinner = q;\n cap = next;\n };\n\n const newQuad = (x0: number, y0: number, size: number) => {\n grow(qcount + 1);\n const q = qcount++;\n qx0[q] = x0;\n qy0[q] = y0;\n qsize[q] = size;\n qchild[q * 4] = -1;\n qchild[q * 4 + 1] = -1;\n qchild[q * 4 + 2] = -1;\n qchild[q * 4 + 3] = -1;\n qpoint[q] = -1;\n qinner[q] = 0;\n return q;\n };\n\n const quadrant = (q: number, px: number, py: number) => {\n const half = qsize[q] / 2;\n return (px >= qx0[q] + half ? 1 : 0) | (py >= qy0[q] + half ? 2 : 0);\n };\n\n const childQuad = (q: number, k: number) => {\n const half = qsize[q] / 2;\n return newQuad(\n qx0[q] + (k & 1 ? half : 0),\n qy0[q] + (k & 2 ? half : 0),\n half,\n );\n };\n\n const insert = (i: number) => {\n let q = 0;\n const px = x[i];\n const py = y[i];\n for (let depth = 0; ; depth++) {\n if (qinner[q]) {\n const k = quadrant(q, px, py);\n let c = qchild[q * 4 + k];\n if (c < 0) {\n c = childQuad(q, k);\n qchild[q * 4 + k] = c;\n qpoint[c] = i;\n nextPoint[i] = -1;\n return;\n }\n q = c;\n continue;\n }\n const j = qpoint[q];\n if (j < 0) {\n qpoint[q] = i;\n nextPoint[i] = -1;\n return;\n }\n if ((x[j] === px && y[j] === py) || depth > 48) {\n nextPoint[i] = j;\n qpoint[q] = i;\n return;\n }\n // split: the points of the leaf move to a child\n qpoint[q] = -1;\n qinner[q] = 1;\n const k = quadrant(q, x[j], y[j]);\n const c = childQuad(q, k);\n qchild[q * 4 + k] = c;\n qpoint[c] = j;\n }\n };\n\n const buildTree = () => {\n let x0 = Infinity;\n let y0 = Infinity;\n let x1 = -Infinity;\n let y1 = -Infinity;\n for (let i = 0; i < n; i++) {\n if (x[i] < x0) x0 = x[i];\n if (x[i] > x1) x1 = x[i];\n if (y[i] < y0) y0 = y[i];\n if (y[i] > y1) y1 = y[i];\n }\n const size = Math.max(x1 - x0, y1 - y0, 1) * 1.0001 + 1e-6;\n qcount = 0;\n grow(n * 2 + 8);\n newQuad(x0, y0, size);\n for (let i = 0; i < n; i++) insert(i);\n // aggregates, children before parents\n for (let q = qcount - 1; q >= 0; q--) {\n if (qinner[q]) {\n let mass = 0;\n let weight = 0;\n let sx = 0;\n let sy = 0;\n for (let k = 0; k < 4; k++) {\n const c = qchild[q * 4 + k];\n if (c < 0) continue;\n const w = Math.abs(qmass[c]);\n mass += qmass[c];\n weight += w;\n sx += w * qcx[c];\n sy += w * qcy[c];\n }\n qmass[q] = mass;\n qcx[q] = weight ? sx / weight : qx0[q];\n qcy[q] = weight ? sy / weight : qy0[q];\n } else {\n let mass = 0;\n for (let j = qpoint[q]; j >= 0; j = nextPoint[j])\n mass += nodeCharge[j];\n qmass[q] = mass;\n qcx[q] = x[qpoint[q]];\n qcy[q] = y[qpoint[q]];\n }\n }\n };\n\n let stack = new Int32Array(256);\n const spatial = new Int32Array(n);\n const manyBody = () => {\n if (!charge || n < 2) return;\n buildTree();\n // adaptive accuracy: a hot layout moves a lot anyway, coarser\n // approximations are enough; full accuracy when it cools down\n const t = theta * (1 + THETA_BOOST * Math.min(1, alpha / REFINE_ALPHA));\n const open = 1 / (t * t);\n // nodes in tree order: neighbors walk the same cells (cache friendly)\n let count = 0;\n let top = 0;\n stack[top++] = 0;\n while (top) {\n const q = stack[--top];\n if (qinner[q]) {\n if (top + 4 > stack.length) {\n const s = new Int32Array(stack.length * 2);\n s.set(stack);\n stack = s;\n }\n for (let k = 0; k < 4; k++) {\n const c = qchild[q * 4 + k];\n if (c >= 0) stack[top++] = c;\n }\n } else {\n for (let j = qpoint[q]; j >= 0; j = nextPoint[j])\n spatial[count++] = j;\n }\n }\n for (let o = 0; o < count; o++) {\n const i = spatial[o];\n const xi = x[i];\n const yi = y[i];\n top = 0;\n stack[top++] = 0;\n while (top) {\n const q = stack[--top];\n if (!qmass[q]) continue;\n if (qinner[q]) {\n const dx = qcx[q] - xi;\n const dy = qcy[q] - yi;\n const w = qsize[q];\n let l = dx * dx + dy * dy;\n if (w * w * open < l) {\n if (l < 1) l = Math.sqrt(l);\n const f = (qmass[q] * alpha) / l;\n vx[i] += dx * f;\n vy[i] += dy * f;\n continue;\n }\n if (top + 4 > stack.length) {\n const s = new Int32Array(stack.length * 2);\n s.set(stack);\n stack = s;\n }\n for (let k = 0; k < 4; k++) {\n const c = qchild[q * 4 + k];\n if (c >= 0) stack[top++] = c;\n }\n } else {\n for (let j = qpoint[q]; j >= 0; j = nextPoint[j]) {\n if (j === i) continue;\n let dx = x[j] - xi;\n let dy = y[j] - yi;\n let l = dx * dx + dy * dy;\n if (dx === 0) {\n dx = jiggle();\n l += dx * dx;\n }\n if (dy === 0) {\n dy = jiggle();\n l += dy * dy;\n }\n if (l < 1) l = Math.sqrt(l);\n const f = (nodeCharge[j] * alpha) / l;\n vx[i] += dx * f;\n vy[i] += dy * f;\n }\n }\n }\n }\n };\n\n const links = () => {\n const distance = init.linkDistance;\n for (let l = 0; l < m; l++) {\n const s = src[l];\n const t = tgt[l];\n if (s === t) continue;\n let dx = x[t] + vx[t] - x[s] - vx[s] || jiggle();\n let dy = y[t] + vy[t] - y[s] - vy[s] || jiggle();\n let d = Math.sqrt(dx * dx + dy * dy);\n d = ((d - distance - radius[s] - radius[t]) / d) * alpha * strength[l];\n dx *= d;\n dy *= d;\n const b = bias[l];\n vx[t] -= dx * b;\n vy[t] -= dy * b;\n vx[s] += dx * (1 - b);\n vy[s] += dy * (1 - b);\n }\n };\n\n const gravity = () => {\n const g = init.gravity * alpha;\n if (!g) return;\n // a stronger pull along the short side of the view\n const stretch = Math.sqrt(\n Math.max(0.25, Math.min(4, init.aspect > 0 ? init.aspect : 1)),\n );\n const gx = g / stretch;\n const gy = g * stretch;\n for (let i = 0; i < n; i++) {\n vx[i] -= x[i] * gx;\n vy[i] -= y[i] * gy;\n }\n };\n\n // ---- hash grid of the collisions\n let tableSize = 1;\n while (tableSize < n * 2) tableSize <<= 1;\n const cellStart = new Int32Array(tableSize + 1);\n const cellItems = new Int32Array(n);\n const cellOf = new Int32Array(n);\n const hash = (cx: number, cy: number) =>\n (Math.imul(cx, 73856093) ^ Math.imul(cy, 19349663)) & (tableSize - 1);\n\n /** Buckets the nodes by cell of (`px`, `py`); returns the cell size */\n const bucket = (px: Float64Array, py: Float64Array, pad: number) => {\n const cell = Math.max(1e-6, (maxRadius + pad) * 2);\n cellStart.fill(0);\n for (let i = 0; i < n; i++) {\n const h = hash(Math.floor(px[i] / cell), Math.floor(py[i] / cell));\n cellOf[i] = h;\n cellStart[h + 1]++;\n }\n for (let h = 0; h < tableSize; h++) cellStart[h + 1] += cellStart[h];\n const fillAt = cellStart.slice(0, tableSize);\n for (let i = 0; i < n; i++) cellItems[fillAt[cellOf[i]]++] = i;\n return cell;\n };\n\n const visited = new Int32Array(tableSize).fill(-1);\n\n /** Calls `pair(i, j)` (i < j) for nodes in neighboring cells */\n const eachPair = (\n px: Float64Array,\n py: Float64Array,\n pad: number,\n pair: (i: number, j: number) => void,\n ) => {\n const cell = bucket(px, py, pad);\n visited.fill(-1);\n for (let i = 0; i < n; i++) {\n const cx = Math.floor(px[i] / cell);\n const cy = Math.floor(py[i] / cell);\n for (let oy = -1; oy <= 1; oy++) {\n for (let ox = -1; ox <= 1; ox++) {\n const h = hash(cx + ox, cy + oy);\n // two neighbor cells may share a bucket: visit it once\n if (visited[h] === i) continue;\n visited[h] = i;\n for (let k = cellStart[h]; k < cellStart[h + 1]; k++) {\n const j = cellItems[k];\n if (j > i) pair(i, j);\n }\n }\n }\n }\n };\n\n const px = new Float64Array(n);\n const py = new Float64Array(n);\n const collide = () => {\n if (collidePad < 0 || n < 2) return;\n for (let i = 0; i < n; i++) {\n px[i] = x[i] + vx[i];\n py[i] = y[i] + vy[i];\n }\n eachPair(px, py, collidePad, (i, j) => {\n const ri = radius[i] + collidePad;\n const rj = radius[j] + collidePad;\n const r = ri + rj;\n let dx = x[i] + vx[i] - x[j] - vx[j];\n let dy = y[i] + vy[i] - y[j] - vy[j];\n let l = dx * dx + dy * dy;\n if (l >= r * r) return;\n if (dx === 0) {\n dx = jiggle();\n l += dx * dx;\n }\n if (dy === 0) {\n dy = jiggle();\n l += dy * dy;\n }\n const d = Math.sqrt(l);\n const f = ((r - d) / d) * 0.7;\n dx *= f;\n dy *= f;\n const rj2 = rj * rj;\n const share = rj2 / (ri * ri + rj2);\n vx[i] += dx * share;\n vy[i] += dy * share;\n vx[j] -= dx * (1 - share);\n vy[j] -= dy * (1 - share);\n });\n };\n\n const center = () => {\n let sx = 0;\n let sy = 0;\n for (let i = 0; i < n; i++) {\n if (!Number.isNaN(fx[i])) return;\n sx += x[i];\n sy += y[i];\n }\n sx /= n || 1;\n sy /= n || 1;\n for (let i = 0; i < n; i++) {\n x[i] -= sx;\n y[i] -= sy;\n }\n };\n\n // a fresh layout turns its long axis toward the long side of the view\n // (rigid, so the forces are unchanged): wide boxes are filled, not just\n // their middle\n const aspect = init.aspect > 0 ? init.aspect : 1;\n const orient =\n init.alpha >= 1 && n > 2 && Math.abs(Math.log(aspect)) > 0.15;\n const align = () => {\n let sxx = 0;\n let syy = 0;\n let sxy = 0;\n for (let i = 0; i < n; i++) {\n if (!Number.isNaN(fx[i])) return;\n sxx += x[i] * x[i];\n syy += y[i] * y[i];\n sxy += x[i] * y[i];\n }\n const spread2 = Math.hypot(sxx - syy, 2 * sxy);\n // a round layout has no long axis\n if (spread2 < (sxx + syy) * 0.04) return;\n const axis = 0.5 * Math.atan2(2 * sxy, sxx - syy);\n let turn = (aspect > 1 ? 0 : Math.PI / 2) - axis;\n if (turn > Math.PI / 2) turn -= Math.PI;\n if (turn < -Math.PI / 2) turn += Math.PI;\n turn *= 0.12;\n if (Math.abs(turn) < 1e-5) return;\n const c = Math.cos(turn);\n const s = Math.sin(turn);\n for (let i = 0; i < n; i++) {\n const px = x[i];\n const pvx = vx[i];\n x[i] = px * c - y[i] * s;\n y[i] = px * s + y[i] * c;\n vx[i] = pvx * c - vy[i] * s;\n vy[i] = pvx * s + vy[i] * c;\n }\n };\n\n const step = () => {\n alpha += (alphaTarget - alpha) * alphaDecay;\n links();\n manyBody();\n gravity();\n collide();\n const decay = 1 - init.velocityDecay;\n for (let i = 0; i < n; i++) {\n if (Number.isNaN(fx[i])) {\n vx[i] *= decay;\n vy[i] *= decay;\n x[i] += vx[i];\n y[i] += vy[i];\n } else {\n x[i] = fx[i];\n y[i] = fy[i];\n vx[i] = vy[i] = 0;\n }\n }\n center();\n if (orient) align();\n };\n\n const done = () => !coarse && alpha < alphaMin && alphaTarget === 0;\n\n return {\n x,\n y,\n tick(k = 1) {\n for (let i = 0; i < k; i++) {\n if (coarse) {\n if (coarse.tick(1)) project();\n else finishCoarse();\n continue;\n }\n if (done()) return false;\n step();\n }\n return !done();\n },\n alpha: () => (coarse ? Math.max(alpha, coarse.alpha()) : alpha),\n reheat(value = 0.3) {\n if (coarse) finishCoarse();\n alpha = Math.max(alpha, value);\n },\n drag(i, px2, py2) {\n if (i < 0 || i >= n) return;\n if (coarse) finishCoarse();\n fx[i] = x[i] = px2;\n fy[i] = y[i] = py2;\n alphaTarget = 0.3;\n if (alpha < 0.3) alpha = 0.3;\n },\n release(i, keep) {\n alphaTarget = 0;\n if (i < 0 || i >= n || keep || pinned[i]) return;\n fx[i] = NaN;\n fy[i] = NaN;\n },\n done,\n settle() {\n // position-based passes until no two nodes overlap\n const pad = Math.max(0, collidePad);\n for (let pass = 0; pass < 80; pass++) {\n let moved = false;\n eachPair(x, y, pad, (i, j) => {\n const r = radius[i] + radius[j] + pad * 2;\n let dx = x[i] - x[j];\n let dy = y[i] - y[j];\n let l = dx * dx + dy * dy;\n if (l >= r * r * 0.9999) return;\n if (l === 0) {\n dx = random() - 0.5;\n dy = random() - 0.5;\n l = dx * dx + dy * dy;\n }\n const d = Math.sqrt(l);\n const push = (r - d) / d;\n const fi = Number.isNaN(fx[i]) ? 1 : 0;\n const fj = Number.isNaN(fx[j]) ? 1 : 0;\n if (!fi && !fj) return;\n const si = fi / (fi + fj);\n const sj = fj / (fi + fj);\n x[i] += dx * push * si * 1.001;\n y[i] += dy * push * si * 1.001;\n x[j] -= dx * push * sj * 1.001;\n y[j] -= dy * push * sj * 1.001;\n moved = true;\n });\n if (!moved) break;\n }\n },\n };\n };\n}\n\n// ------------------------------------------------------------- inputs\n\nexport const FORCE_DEFAULTS = {\n linkDistance: 60,\n charge: -160,\n theta: 0.9,\n gravity: 0.04,\n collide: 2,\n velocityDecay: 0.4,\n iterations: 300,\n seed: 1,\n /** Smallest fresh layout computed with a multilevel start */\n multilevel: 400,\n};\n\n/** Kernel input from index-based data */\nexport const forceInit = (\n n: number,\n source: Int32Array,\n target: Int32Array,\n options: GraphForceLayoutOptions | undefined,\n extra: {\n x?: Float64Array;\n y?: Float64Array;\n radius?: Float64Array;\n fixed?: Uint8Array;\n weight?: Float64Array;\n alpha?: number;\n aspect?: number;\n } = {},\n): ForceKernelInit => {\n const o = options ?? {};\n const collide =\n o.collide === false\n ? -1\n : typeof o.collide === \"number\"\n ? Math.max(0, o.collide)\n : FORCE_DEFAULTS.collide;\n return {\n n,\n x: extra.x ?? new Float64Array(n).fill(NaN),\n y: extra.y ?? new Float64Array(n).fill(NaN),\n radius: extra.radius ?? new Float64Array(n).fill(6),\n fixed: extra.fixed ?? new Uint8Array(n),\n source,\n target,\n weight: extra.weight ?? new Float64Array(source.length).fill(1),\n linkDistance: o.linkDistance ?? FORCE_DEFAULTS.linkDistance,\n linkStrength: o.linkStrength ?? NaN,\n charge: o.charge ?? FORCE_DEFAULTS.charge,\n theta: o.theta ?? FORCE_DEFAULTS.theta,\n gravity: o.gravity ?? FORCE_DEFAULTS.gravity,\n collide,\n velocityDecay: o.velocityDecay ?? FORCE_DEFAULTS.velocityDecay,\n iterations: o.iterations ?? FORCE_DEFAULTS.iterations,\n seed: o.seed ?? FORCE_DEFAULTS.seed,\n alpha: extra.alpha ?? 1,\n aspect: extra.aspect ?? 1,\n coarsen: o.multilevel === false ? 0 : FORCE_DEFAULTS.multilevel,\n };\n};\n\n/** Index of the ids and the valid edges (unknown ids are skipped) */\nexport const indexGraph = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n): {\n index: Map<string, number>;\n source: Int32Array;\n target: Int32Array;\n edge: Int32Array;\n} => {\n const index = new Map<string, number>();\n nodes.forEach((node, i) => {\n if (!index.has(node.id)) index.set(node.id, i);\n });\n const s: number[] = [];\n const t: number[] = [];\n const e: number[] = [];\n edges.forEach((edge, k) => {\n const a = index.get(edge.source);\n const b = index.get(edge.target);\n if (a === undefined || b === undefined) return;\n s.push(a);\n t.push(b);\n e.push(k);\n });\n return {\n index,\n source: Int32Array.from(s),\n target: Int32Array.from(t),\n edge: Int32Array.from(e),\n };\n};\n\nconst simulationOf = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options: GraphForceLayoutOptions | undefined,\n): GraphForceSimulation => {\n const { source, target, edge } = indexGraph(nodes, edges);\n const n = nodes.length;\n const x = new Float64Array(n).fill(NaN);\n const y = new Float64Array(n).fill(NaN);\n const fixed = new Uint8Array(n);\n const radius = new Float64Array(n);\n nodes.forEach((node, i) => {\n if (Number.isFinite(node.x) && Number.isFinite(node.y)) {\n x[i] = node.x!;\n y[i] = node.y!;\n if (node.fixed) fixed[i] = 1;\n }\n radius[i] = options?.radius?.(node, i) ?? 6;\n });\n const values = Array.from(edge, (k) => edges[k].value);\n const known = values.filter((v): v is number => Number.isFinite(v) && v! > 0);\n const mean = known.length\n ? known.reduce((a, b) => a + b, 0) / known.length\n : 1;\n const weight = Float64Array.from(values, (v) =>\n Number.isFinite(v) && v! > 0\n ? Math.max(0.5, Math.min(2, Math.sqrt(v! / mean)))\n : 1,\n );\n return forceKernel()(\n forceInit(n, source, target, options, { x, y, fixed, radius, weight }),\n );\n};\n\n/**\n * A force simulation of the nodes and edges, stepped by the caller (no DOM,\n * no timers: usable in workers and mini-programs)\n */\nexport const createForceSimulation = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options?: GraphForceLayoutOptions,\n): GraphForceSimulation => simulationOf(nodes, edges, options);\n\n/** Runs a force simulation to the end and returns the positions (synchronous) */\nexport const forceLayout = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options?: GraphForceLayoutOptions,\n): GraphLayoutResult => {\n const sim = simulationOf(nodes, edges, options);\n while (sim.tick(16));\n sim.settle();\n return { x: sim.x, y: sim.y };\n};\n"],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import { GraphForceLayoutOptions, GraphForceSimulation, GraphEdge, GraphLayoutResult, GraphNode } from './types.cjs';
2
+ /** Data of a simulation (index-based, transferable to a worker) */
3
+ export interface ForceKernelInit {
4
+ n: number;
5
+ /** Initial positions (NaN = automatic) */
6
+ x: Float64Array;
7
+ y: Float64Array;
8
+ radius: Float64Array;
9
+ /** 1 = pinned at its initial position */
10
+ fixed: Uint8Array;
11
+ source: Int32Array;
12
+ target: Int32Array;
13
+ /** Strength multiplier per link */
14
+ weight: Float64Array;
15
+ linkDistance: number;
16
+ /** NaN = 1 / min(degree) */
17
+ linkStrength: number;
18
+ charge: number;
19
+ theta: number;
20
+ gravity: number;
21
+ /** Extra spacing of the collisions; negative disables them */
22
+ collide: number;
23
+ velocityDecay: number;
24
+ iterations: number;
25
+ seed: number;
26
+ /** Starting temperature (1 for a new layout, lower to refine one) */
27
+ alpha: number;
28
+ /** Width / height of the view: gravity stretches the layout to it */
29
+ aspect: number;
30
+ /** Charge multiplier per node (merged nodes of a coarse level) */
31
+ mass?: Float64Array;
32
+ /**
33
+ * Multilevel start: a fresh layout of at least this many nodes is first
34
+ * computed on a coarsened graph (0 = never)
35
+ */
36
+ coarsen?: number;
37
+ }
38
+ export type ForceKernel = (init: ForceKernelInit) => GraphForceSimulation;
39
+ /** Returns the simulation factory (self-contained: serialized into workers) */
40
+ export declare function forceKernel(): ForceKernel;
41
+ export declare const FORCE_DEFAULTS: {
42
+ linkDistance: number;
43
+ charge: number;
44
+ theta: number;
45
+ gravity: number;
46
+ collide: number;
47
+ velocityDecay: number;
48
+ iterations: number;
49
+ seed: number;
50
+ /** Smallest fresh layout computed with a multilevel start */
51
+ multilevel: number;
52
+ };
53
+ /** Kernel input from index-based data */
54
+ export declare const forceInit: (n: number, source: Int32Array, target: Int32Array, options: GraphForceLayoutOptions | undefined, extra?: {
55
+ x?: Float64Array;
56
+ y?: Float64Array;
57
+ radius?: Float64Array;
58
+ fixed?: Uint8Array;
59
+ weight?: Float64Array;
60
+ alpha?: number;
61
+ aspect?: number;
62
+ }) => ForceKernelInit;
63
+ /** Index of the ids and the valid edges (unknown ids are skipped) */
64
+ export declare const indexGraph: (nodes: readonly GraphNode[], edges: readonly GraphEdge[]) => {
65
+ index: Map<string, number>;
66
+ source: Int32Array;
67
+ target: Int32Array;
68
+ edge: Int32Array;
69
+ };
70
+ /**
71
+ * A force simulation of the nodes and edges, stepped by the caller (no DOM,
72
+ * no timers: usable in workers and mini-programs)
73
+ */
74
+ export declare const createForceSimulation: (nodes: readonly GraphNode[], edges: readonly GraphEdge[], options?: GraphForceLayoutOptions) => GraphForceSimulation;
75
+ /** Runs a force simulation to the end and returns the positions (synchronous) */
76
+ export declare const forceLayout: (nodes: readonly GraphNode[], edges: readonly GraphEdge[], options?: GraphForceLayoutOptions) => GraphLayoutResult;