minerva-design 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/custom-elements.json +122 -5
  3. package/dist/angular/fesm2022/minerva-angular.mjs +55 -0
  4. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  5. package/dist/angular/types/minerva-angular.d.ts +23 -2
  6. package/dist/charts/canvas.d.cts +2 -1
  7. package/dist/charts/canvas.d.ts +2 -1
  8. package/dist/charts/core.d.cts +1 -1
  9. package/dist/charts/core.d.ts +1 -1
  10. package/dist/charts/engine/canvas.cjs +1 -1
  11. package/dist/charts/engine/canvas.cjs.map +1 -1
  12. package/dist/charts/engine/canvas.js +2 -1
  13. package/dist/charts/engine/canvas.js.map +1 -1
  14. package/dist/charts/engine/chart.cjs +1 -1
  15. package/dist/charts/engine/chart.cjs.map +1 -1
  16. package/dist/charts/engine/chart.js +144 -143
  17. package/dist/charts/engine/chart.js.map +1 -1
  18. package/dist/charts/engine/controller.cjs +2 -2
  19. package/dist/charts/engine/controller.cjs.map +1 -1
  20. package/dist/charts/engine/controller.d.cts +3 -1
  21. package/dist/charts/engine/controller.d.ts +3 -1
  22. package/dist/charts/engine/controller.js +130 -132
  23. package/dist/charts/engine/controller.js.map +1 -1
  24. package/dist/charts/engine/defaults.cjs.map +1 -1
  25. package/dist/charts/engine/defaults.d.cts +4 -4
  26. package/dist/charts/engine/defaults.d.ts +4 -4
  27. package/dist/charts/engine/defaults.js.map +1 -1
  28. package/dist/charts/engine/graph/chart.cjs +1 -1
  29. package/dist/charts/engine/graph/chart.cjs.map +1 -1
  30. package/dist/charts/engine/graph/chart.js +740 -597
  31. package/dist/charts/engine/graph/chart.js.map +1 -1
  32. package/dist/charts/engine/graph/dag.cjs +1 -1
  33. package/dist/charts/engine/graph/dag.cjs.map +1 -1
  34. package/dist/charts/engine/graph/dag.js +191 -166
  35. package/dist/charts/engine/graph/dag.js.map +1 -1
  36. package/dist/charts/engine/graph/force.cjs +1 -1
  37. package/dist/charts/engine/graph/force.cjs.map +1 -1
  38. package/dist/charts/engine/graph/force.d.cts +9 -0
  39. package/dist/charts/engine/graph/force.d.ts +9 -0
  40. package/dist/charts/engine/graph/force.js +279 -181
  41. package/dist/charts/engine/graph/force.js.map +1 -1
  42. package/dist/charts/engine/graph/geometry.cjs +1 -1
  43. package/dist/charts/engine/graph/geometry.cjs.map +1 -1
  44. package/dist/charts/engine/graph/geometry.d.cts +14 -1
  45. package/dist/charts/engine/graph/geometry.d.ts +14 -1
  46. package/dist/charts/engine/graph/geometry.js +77 -24
  47. package/dist/charts/engine/graph/geometry.js.map +1 -1
  48. package/dist/charts/engine/graph/model.cjs +1 -1
  49. package/dist/charts/engine/graph/model.cjs.map +1 -1
  50. package/dist/charts/engine/graph/model.d.cts +9 -0
  51. package/dist/charts/engine/graph/model.d.ts +9 -0
  52. package/dist/charts/engine/graph/model.js +63 -43
  53. package/dist/charts/engine/graph/model.js.map +1 -1
  54. package/dist/charts/engine/graph/types.d.cts +14 -0
  55. package/dist/charts/engine/graph/types.d.ts +14 -0
  56. package/dist/charts/engine/graph/worker.cjs +12 -6
  57. package/dist/charts/engine/graph/worker.cjs.map +1 -1
  58. package/dist/charts/engine/graph/worker.js +12 -6
  59. package/dist/charts/engine/graph/worker.js.map +1 -1
  60. package/dist/charts/engine/labels.cjs.map +1 -1
  61. package/dist/charts/engine/labels.d.cts +17 -0
  62. package/dist/charts/engine/labels.d.ts +17 -0
  63. package/dist/charts/engine/labels.js.map +1 -1
  64. package/dist/charts/engine/model.cjs +1 -1
  65. package/dist/charts/engine/model.cjs.map +1 -1
  66. package/dist/charts/engine/model.d.cts +33 -0
  67. package/dist/charts/engine/model.d.ts +33 -0
  68. package/dist/charts/engine/model.js +149 -126
  69. package/dist/charts/engine/model.js.map +1 -1
  70. package/dist/charts/engine/orderbook/field.cjs +37 -0
  71. package/dist/charts/engine/orderbook/field.cjs.map +1 -0
  72. package/dist/charts/engine/orderbook/field.d.cts +92 -0
  73. package/dist/charts/engine/orderbook/field.d.ts +92 -0
  74. package/dist/charts/engine/orderbook/field.js +297 -0
  75. package/dist/charts/engine/orderbook/field.js.map +1 -0
  76. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  77. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  78. package/dist/charts/engine/orderbook/heatmap.js +413 -441
  79. package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
  80. package/dist/charts/engine/orderbook/host.cjs +1 -1
  81. package/dist/charts/engine/orderbook/host.cjs.map +1 -1
  82. package/dist/charts/engine/orderbook/host.d.cts +8 -1
  83. package/dist/charts/engine/orderbook/host.d.ts +8 -1
  84. package/dist/charts/engine/orderbook/host.js +27 -5
  85. package/dist/charts/engine/orderbook/host.js.map +1 -1
  86. package/dist/charts/engine/orderbook/ladder.cjs +1 -1
  87. package/dist/charts/engine/orderbook/ladder.cjs.map +1 -1
  88. package/dist/charts/engine/orderbook/ladder.js +1 -1
  89. package/dist/charts/engine/orderbook/ladder.js.map +1 -1
  90. package/dist/charts/engine/orderbook/layout.cjs +1 -1
  91. package/dist/charts/engine/orderbook/layout.cjs.map +1 -1
  92. package/dist/charts/engine/orderbook/layout.d.cts +5 -0
  93. package/dist/charts/engine/orderbook/layout.d.ts +5 -0
  94. package/dist/charts/engine/orderbook/layout.js +8 -2
  95. package/dist/charts/engine/orderbook/layout.js.map +1 -1
  96. package/dist/charts/engine/orderbook/tape.cjs +1 -1
  97. package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
  98. package/dist/charts/engine/orderbook/tape.js +3 -3
  99. package/dist/charts/engine/orderbook/tape.js.map +1 -1
  100. package/dist/charts/engine/orderbook/types.d.cts +12 -4
  101. package/dist/charts/engine/orderbook/types.d.ts +12 -4
  102. package/dist/charts/engine/overlay.cjs +1 -1
  103. package/dist/charts/engine/overlay.cjs.map +1 -1
  104. package/dist/charts/engine/overlay.d.cts +17 -0
  105. package/dist/charts/engine/overlay.d.ts +17 -0
  106. package/dist/charts/engine/overlay.js +29 -13
  107. package/dist/charts/engine/overlay.js.map +1 -1
  108. package/dist/charts/engine/presets.cjs +1 -1
  109. package/dist/charts/engine/presets.cjs.map +1 -1
  110. package/dist/charts/engine/presets.d.cts +12 -2
  111. package/dist/charts/engine/presets.d.ts +12 -2
  112. package/dist/charts/engine/presets.js +8 -2
  113. package/dist/charts/engine/presets.js.map +1 -1
  114. package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
  115. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
  116. package/dist/charts/engine/renderers/canvas2d.js +13 -9
  117. package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
  118. package/dist/charts/engine/renderers/follow.cjs +2 -0
  119. package/dist/charts/engine/renderers/follow.cjs.map +1 -0
  120. package/dist/charts/engine/renderers/follow.d.cts +8 -0
  121. package/dist/charts/engine/renderers/follow.d.ts +8 -0
  122. package/dist/charts/engine/renderers/follow.js +10 -0
  123. package/dist/charts/engine/renderers/follow.js.map +1 -0
  124. package/dist/charts/engine/renderers/gl-budget.cjs +2 -0
  125. package/dist/charts/engine/renderers/gl-budget.cjs.map +1 -0
  126. package/dist/charts/engine/renderers/gl-budget.d.cts +32 -0
  127. package/dist/charts/engine/renderers/gl-budget.d.ts +32 -0
  128. package/dist/charts/engine/renderers/gl-budget.js +95 -0
  129. package/dist/charts/engine/renderers/gl-budget.js.map +1 -0
  130. package/dist/charts/engine/renderers/gl.cjs +1 -1
  131. package/dist/charts/engine/renderers/gl.cjs.map +1 -1
  132. package/dist/charts/engine/renderers/gl.js +1 -1
  133. package/dist/charts/engine/renderers/gl.js.map +1 -1
  134. package/dist/charts/engine/renderers/shaders.cjs +9 -6
  135. package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
  136. package/dist/charts/engine/renderers/shaders.d.cts +1 -1
  137. package/dist/charts/engine/renderers/shaders.d.ts +1 -1
  138. package/dist/charts/engine/renderers/shaders.js +9 -6
  139. package/dist/charts/engine/renderers/shaders.js.map +1 -1
  140. package/dist/charts/engine/renderers/types.cjs.map +1 -1
  141. package/dist/charts/engine/renderers/types.d.cts +2 -0
  142. package/dist/charts/engine/renderers/types.d.ts +2 -0
  143. package/dist/charts/engine/renderers/types.js.map +1 -1
  144. package/dist/charts/engine/renderers/webgl.cjs +1 -1
  145. package/dist/charts/engine/renderers/webgl.cjs.map +1 -1
  146. package/dist/charts/engine/renderers/webgl.js +85 -64
  147. package/dist/charts/engine/renderers/webgl.js.map +1 -1
  148. package/dist/charts/engine/renderers/webgl2.cjs +1 -1
  149. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
  150. package/dist/charts/engine/renderers/webgl2.js +72 -58
  151. package/dist/charts/engine/renderers/webgl2.js.map +1 -1
  152. package/dist/charts/engine/renderers/webgpu.cjs +1 -1
  153. package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
  154. package/dist/charts/engine/renderers/webgpu.js +1 -1
  155. package/dist/charts/engine/renderers/webgpu.js.map +1 -1
  156. package/dist/charts/engine/scene.cjs +1 -1
  157. package/dist/charts/engine/scene.cjs.map +1 -1
  158. package/dist/charts/engine/scene.d.cts +51 -4
  159. package/dist/charts/engine/scene.d.ts +51 -4
  160. package/dist/charts/engine/scene.js +188 -122
  161. package/dist/charts/engine/scene.js.map +1 -1
  162. package/dist/charts/engine/shapes/chord.cjs +1 -1
  163. package/dist/charts/engine/shapes/chord.cjs.map +1 -1
  164. package/dist/charts/engine/shapes/chord.js +108 -103
  165. package/dist/charts/engine/shapes/chord.js.map +1 -1
  166. package/dist/charts/engine/shapes/types.d.cts +5 -3
  167. package/dist/charts/engine/shapes/types.d.ts +5 -3
  168. package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
  169. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
  170. package/dist/charts/engine/three-d/canvas2d.d.cts +36 -1
  171. package/dist/charts/engine/three-d/canvas2d.d.ts +36 -1
  172. package/dist/charts/engine/three-d/canvas2d.js +155 -80
  173. package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
  174. package/dist/charts/engine/three-d/chart.cjs +1 -1
  175. package/dist/charts/engine/three-d/chart.cjs.map +1 -1
  176. package/dist/charts/engine/three-d/chart.js +219 -215
  177. package/dist/charts/engine/three-d/chart.js.map +1 -1
  178. package/dist/charts/engine/three-d/oit.cjs +109 -0
  179. package/dist/charts/engine/three-d/oit.cjs.map +1 -0
  180. package/dist/charts/engine/three-d/oit.d.cts +34 -0
  181. package/dist/charts/engine/three-d/oit.d.ts +34 -0
  182. package/dist/charts/engine/three-d/oit.js +111 -0
  183. package/dist/charts/engine/three-d/oit.js.map +1 -0
  184. package/dist/charts/engine/three-d/render-types.cjs +1 -1
  185. package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
  186. package/dist/charts/engine/three-d/render-types.d.cts +16 -3
  187. package/dist/charts/engine/three-d/render-types.d.ts +16 -3
  188. package/dist/charts/engine/three-d/render-types.js +6 -9
  189. package/dist/charts/engine/three-d/render-types.js.map +1 -1
  190. package/dist/charts/engine/three-d/shaders.cjs +52 -26
  191. package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
  192. package/dist/charts/engine/three-d/shaders.d.cts +11 -3
  193. package/dist/charts/engine/three-d/shaders.d.ts +11 -3
  194. package/dist/charts/engine/three-d/shaders.js +84 -40
  195. package/dist/charts/engine/three-d/shaders.js.map +1 -1
  196. package/dist/charts/engine/three-d/sort.cjs +1 -1
  197. package/dist/charts/engine/three-d/sort.cjs.map +1 -1
  198. package/dist/charts/engine/three-d/sort.d.cts +6 -4
  199. package/dist/charts/engine/three-d/sort.d.ts +6 -4
  200. package/dist/charts/engine/three-d/sort.js +51 -39
  201. package/dist/charts/engine/three-d/sort.js.map +1 -1
  202. package/dist/charts/engine/three-d/types.d.cts +9 -0
  203. package/dist/charts/engine/three-d/types.d.ts +9 -0
  204. package/dist/charts/engine/three-d/webgl.cjs +1 -1
  205. package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
  206. package/dist/charts/engine/three-d/webgl.d.cts +9 -0
  207. package/dist/charts/engine/three-d/webgl.d.ts +9 -0
  208. package/dist/charts/engine/three-d/webgl.js +199 -76
  209. package/dist/charts/engine/three-d/webgl.js.map +1 -1
  210. package/dist/charts/engine/three-d/webgpu.cjs +1 -1
  211. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
  212. package/dist/charts/engine/three-d/webgpu.js +225 -99
  213. package/dist/charts/engine/three-d/webgpu.js.map +1 -1
  214. package/dist/charts/engine/trading/chart.cjs +1 -1
  215. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  216. package/dist/charts/engine/trading/chart.d.cts +0 -1
  217. package/dist/charts/engine/trading/chart.d.ts +0 -1
  218. package/dist/charts/engine/trading/chart.js +1048 -883
  219. package/dist/charts/engine/trading/chart.js.map +1 -1
  220. package/dist/charts/engine/trading/drawings.cjs +2 -2
  221. package/dist/charts/engine/trading/drawings.cjs.map +1 -1
  222. package/dist/charts/engine/trading/drawings.d.cts +6 -0
  223. package/dist/charts/engine/trading/drawings.d.ts +6 -0
  224. package/dist/charts/engine/trading/drawings.js +100 -88
  225. package/dist/charts/engine/trading/drawings.js.map +1 -1
  226. package/dist/charts/engine/trading/format.cjs +1 -1
  227. package/dist/charts/engine/trading/format.cjs.map +1 -1
  228. package/dist/charts/engine/trading/format.d.cts +6 -0
  229. package/dist/charts/engine/trading/format.d.ts +6 -0
  230. package/dist/charts/engine/trading/format.js +42 -30
  231. package/dist/charts/engine/trading/format.js.map +1 -1
  232. package/dist/charts/engine/trading/geometry.cjs +1 -1
  233. package/dist/charts/engine/trading/geometry.cjs.map +1 -1
  234. package/dist/charts/engine/trading/geometry.d.cts +16 -0
  235. package/dist/charts/engine/trading/geometry.d.ts +16 -0
  236. package/dist/charts/engine/trading/geometry.js +19 -4
  237. package/dist/charts/engine/trading/geometry.js.map +1 -1
  238. package/dist/charts/engine/trading/labels.cjs +1 -1
  239. package/dist/charts/engine/trading/labels.cjs.map +1 -1
  240. package/dist/charts/engine/trading/labels.js +24 -4
  241. package/dist/charts/engine/trading/labels.js.map +1 -1
  242. package/dist/charts/engine/trading/studies.cjs +1 -1
  243. package/dist/charts/engine/trading/studies.cjs.map +1 -1
  244. package/dist/charts/engine/trading/studies.d.cts +8 -0
  245. package/dist/charts/engine/trading/studies.d.ts +8 -0
  246. package/dist/charts/engine/trading/studies.js +4 -1
  247. package/dist/charts/engine/trading/studies.js.map +1 -1
  248. package/dist/charts/engine/trading/types.d.cts +34 -11
  249. package/dist/charts/engine/trading/types.d.ts +34 -11
  250. package/dist/charts/engine/types.d.cts +25 -4
  251. package/dist/charts/engine/types.d.ts +25 -4
  252. package/dist/charts/react/charts.cjs +1 -1
  253. package/dist/charts/react/charts.cjs.map +1 -1
  254. package/dist/charts/react/charts.js +20 -15
  255. package/dist/charts/react/charts.js.map +1 -1
  256. package/dist/charts/react/graph.cjs +1 -1
  257. package/dist/charts/react/graph.cjs.map +1 -1
  258. package/dist/charts/react/graph.d.cts +6 -0
  259. package/dist/charts/react/graph.d.ts +6 -0
  260. package/dist/charts/react/graph.js +28 -27
  261. package/dist/charts/react/graph.js.map +1 -1
  262. package/dist/charts/react/orderbook.cjs +1 -1
  263. package/dist/charts/react/orderbook.cjs.map +1 -1
  264. package/dist/charts/react/orderbook.d.cts +3 -1
  265. package/dist/charts/react/orderbook.d.ts +3 -1
  266. package/dist/charts/react/orderbook.js +1 -0
  267. package/dist/charts/react/orderbook.js.map +1 -1
  268. package/dist/charts/react/shapes.cjs.map +1 -1
  269. package/dist/charts/react/shapes.d.cts +4 -3
  270. package/dist/charts/react/shapes.d.ts +4 -3
  271. package/dist/charts/react/shapes.js.map +1 -1
  272. package/dist/charts/react/three-d.cjs +1 -1
  273. package/dist/charts/react/three-d.cjs.map +1 -1
  274. package/dist/charts/react/three-d.d.cts +7 -0
  275. package/dist/charts/react/three-d.d.ts +7 -0
  276. package/dist/charts/react/three-d.js +14 -13
  277. package/dist/charts/react/three-d.js.map +1 -1
  278. package/dist/charts/react/trading.cjs.map +1 -1
  279. package/dist/charts/react/trading.d.cts +3 -3
  280. package/dist/charts/react/trading.d.ts +3 -3
  281. package/dist/charts/react/trading.js.map +1 -1
  282. package/dist/core/contracts.cjs +1 -1
  283. package/dist/core/contracts.cjs.map +1 -1
  284. package/dist/core/contracts.js +1 -1
  285. package/dist/core/contracts.js.map +1 -1
  286. package/dist/native/charts/src/canvas.cjs +1 -1
  287. package/dist/native/charts/src/canvas.js +4 -3
  288. package/dist/native/charts/src/engine/controller.cjs +2 -2
  289. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  290. package/dist/native/charts/src/engine/controller.js +102 -104
  291. package/dist/native/charts/src/engine/controller.js.map +1 -1
  292. package/dist/native/charts/src/engine/labels.cjs +1 -1
  293. package/dist/native/charts/src/engine/labels.cjs.map +1 -1
  294. package/dist/native/charts/src/engine/labels.js +14 -1
  295. package/dist/native/charts/src/engine/labels.js.map +1 -1
  296. package/dist/native/charts/src/engine/model.cjs +1 -1
  297. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  298. package/dist/native/charts/src/engine/model.js +180 -157
  299. package/dist/native/charts/src/engine/model.js.map +1 -1
  300. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  301. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  302. package/dist/native/charts/src/engine/presets.cjs +1 -1
  303. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  304. package/dist/native/charts/src/engine/presets.js +8 -2
  305. package/dist/native/charts/src/engine/presets.js.map +1 -1
  306. package/dist/native/charts/src/engine/scene.cjs +1 -1
  307. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  308. package/dist/native/charts/src/engine/scene.js +188 -122
  309. package/dist/native/charts/src/engine/scene.js.map +1 -1
  310. package/dist/native/charts/src/engine/shapes/chord.cjs +1 -1
  311. package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -1
  312. package/dist/native/charts/src/engine/shapes/chord.js +108 -103
  313. package/dist/native/charts/src/engine/shapes/chord.js.map +1 -1
  314. package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
  315. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
  316. package/dist/native/charts/src/engine/shapes/layout.js +88 -73
  317. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
  318. package/dist/native/components/Chart/ChartBase.cjs +1 -1
  319. package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
  320. package/dist/native/components/Chart/ChartBase.js +127 -115
  321. package/dist/native/components/Chart/ChartBase.js.map +1 -1
  322. package/dist/native/components/Chart/charts.cjs +1 -1
  323. package/dist/native/components/Chart/charts.cjs.map +1 -1
  324. package/dist/native/components/Chart/charts.js +8 -5
  325. package/dist/native/components/Chart/charts.js.map +1 -1
  326. package/dist/native/components/Chart/scene.cjs +1 -1
  327. package/dist/native/components/Chart/scene.cjs.map +1 -1
  328. package/dist/native/components/Chart/scene.d.cts +6 -1
  329. package/dist/native/components/Chart/scene.d.ts +6 -1
  330. package/dist/native/components/Chart/scene.js +99 -50
  331. package/dist/native/components/Chart/scene.js.map +1 -1
  332. package/dist/native/components/Chart/types.d.cts +7 -1
  333. package/dist/native/components/Chart/types.d.ts +7 -1
  334. package/dist/native/components/Charts/charts.cjs +1 -1
  335. package/dist/native/components/Charts/charts.cjs.map +1 -1
  336. package/dist/native/components/Charts/charts.js +23 -18
  337. package/dist/native/components/Charts/charts.js.map +1 -1
  338. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
  339. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
  340. package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +1 -1
  341. package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +1 -1
  342. package/dist/native/components/ShapeChart/ShapeChartBase.js +97 -107
  343. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
  344. package/dist/native/components/ShapeChart/geometry.cjs +1 -1
  345. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
  346. package/dist/native/components/ShapeChart/geometry.js +120 -36
  347. package/dist/native/components/ShapeChart/geometry.js.map +1 -1
  348. package/dist/native/components/ShapeChart/types.d.cts +6 -4
  349. package/dist/native/components/ShapeChart/types.d.ts +6 -4
  350. package/dist/native/source/components/Chart/ChartBase.tsx +19 -6
  351. package/dist/native/source/components/Chart/charts.tsx +10 -3
  352. package/dist/native/source/components/Chart/scene.tsx +85 -0
  353. package/dist/native/source/components/Chart/types.ts +7 -0
  354. package/dist/native/source/components/Charts/charts.tsx +7 -0
  355. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +10 -36
  356. package/dist/native/source/components/ShapeChart/geometry.ts +188 -18
  357. package/dist/native/source/components/ShapeChart/types.ts +6 -4
  358. package/dist/taro/chart-a11y.d.ts +7 -0
  359. package/dist/taro/charts.d.ts +4 -1
  360. package/dist/taro/index.js +3212 -3049
  361. package/dist/taro/shape-charts.d.ts +6 -4
  362. package/dist/uni/AreaChart.vue +2 -1
  363. package/dist/uni/AreaChart.vue.d.ts +1 -1
  364. package/dist/uni/BarChart.vue +2 -1
  365. package/dist/uni/BarChart.vue.d.ts +1 -1
  366. package/dist/uni/BoxPlotChart.vue +2 -1
  367. package/dist/uni/BubbleChart.vue +2 -1
  368. package/dist/uni/CandlestickChart.vue +2 -1
  369. package/dist/uni/Chart.vue +2 -1
  370. package/dist/uni/Divider.vue.d.ts +1 -1
  371. package/dist/uni/DonutChart.vue.d.ts +1 -1
  372. package/dist/uni/GanttChart.vue +2 -1
  373. package/dist/uni/GanttChart.vue.d.ts +11 -0
  374. package/dist/uni/GaugeChart.vue.d.ts +1 -1
  375. package/dist/uni/HeatmapChart.vue +2 -1
  376. package/dist/uni/HistogramChart.vue +2 -1
  377. package/dist/uni/HorizontalBarChart.vue +2 -1
  378. package/dist/uni/HorizontalBarChart.vue.d.ts +1 -1
  379. package/dist/uni/LineChart.vue +2 -1
  380. package/dist/uni/MixedChart.vue +2 -1
  381. package/dist/uni/PieChart.vue.d.ts +1 -1
  382. package/dist/uni/QuadrantChart.vue +2 -1
  383. package/dist/uni/RangeAreaChart.vue +2 -1
  384. package/dist/uni/ScatterChart.vue +2 -1
  385. package/dist/uni/Sparkline.vue +2 -1
  386. package/dist/uni/WaterfallChart.vue +2 -1
  387. package/dist/uni/chart-a11y.d.ts +7 -0
  388. package/dist/uni/chart-a11y.js +29 -0
  389. package/dist/uni/chart-canvas.d.ts +9 -0
  390. package/dist/uni/chart-canvas.js +11 -1
  391. package/dist/uni/chart-types.d.ts +8 -1
  392. package/dist/uni/chart-types.js +5 -1
  393. package/dist/uni/charts-canvas.js +2 -1
  394. package/dist/uni/named-chart-options.d.ts +2 -0
  395. package/dist/uni/named-chart-options.js +3 -0
  396. package/dist/uni/shape-chart-canvas.d.ts +0 -2
  397. package/dist/uni/shape-chart-canvas.js +4 -36
  398. package/dist/uni/shape-chart-types.d.ts +2 -2
  399. package/dist/uni/shape-chart-types.js +2 -2
  400. package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +2 -0
  401. package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +2 -0
  402. package/dist/vue/components/Chart/GanttChart.vue.d.ts +15 -0
  403. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
  404. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +8 -0
  405. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  406. package/dist/vue/components/Chart/GraphChart.vue.d.ts +2 -0
  407. package/dist/vue/components/Chart/Line3DChart.vue.d.ts +2 -0
  408. package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +2 -0
  409. package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +2 -0
  410. package/dist/vue/components/Chart/TradingChart.vue.d.ts +9 -0
  411. package/dist/vue/components/Chart/TreeChart.vue.d.ts +2 -0
  412. package/dist/vue/components/Chart/graph.d.ts +3 -0
  413. package/dist/vue/components/Chart/graph.js +2 -0
  414. package/dist/vue/components/Chart/graph.js.map +1 -1
  415. package/dist/vue/components/Chart/three-d.d.ts +3 -0
  416. package/dist/vue/components/Chart/three-d.js +2 -0
  417. package/dist/vue/components/Chart/three-d.js.map +1 -1
  418. package/dist/vue/components/Chart/trading.d.ts +7 -2
  419. package/dist/vue/components/Chart/trading.js +1 -0
  420. package/dist/vue/components/Chart/trading.js.map +1 -1
  421. package/dist/weapp/area-chart/index.wxml +1 -1
  422. package/dist/weapp/bar-chart/index.wxml +1 -1
  423. package/dist/weapp/box-plot-chart/index.wxml +1 -1
  424. package/dist/weapp/bubble-chart/index.wxml +1 -1
  425. package/dist/weapp/candlestick-chart/index.wxml +1 -1
  426. package/dist/weapp/chart/index.wxml +1 -1
  427. package/dist/weapp/charts/canvas.js +326 -54
  428. package/dist/weapp/charts/core.js +2 -0
  429. package/dist/weapp/controls.js +58 -27
  430. package/dist/weapp/gantt-chart/index.wxml +1 -1
  431. package/dist/weapp/heatmap-chart/index.wxml +1 -1
  432. package/dist/weapp/histogram-chart/index.wxml +1 -1
  433. package/dist/weapp/horizontal-bar-chart/index.wxml +1 -1
  434. package/dist/weapp/line-chart/index.wxml +1 -1
  435. package/dist/weapp/mixed-chart/index.wxml +1 -1
  436. package/dist/weapp/quadrant-chart/index.wxml +1 -1
  437. package/dist/weapp/range-area-chart/index.wxml +1 -1
  438. package/dist/weapp/scatter-chart/index.wxml +1 -1
  439. package/dist/weapp/sparkline/index.wxml +1 -1
  440. package/dist/weapp/types.d.ts +11 -2
  441. package/dist/weapp/waterfall-chart/index.wxml +1 -1
  442. package/dist/web-components/components/chart/extended.d.ts +4 -0
  443. package/dist/web-components/components/chart/extended.js +8 -2
  444. package/dist/web-components/components/chart/extended.js.map +1 -1
  445. package/dist/web-components/components/chart-3d/chart-3d.d.ts +1 -1
  446. package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -1
  447. package/dist/web-components/components/graph/graph.d.ts +2 -0
  448. package/dist/web-components/components/graph/graph.js +3 -2
  449. package/dist/web-components/components/graph/graph.js.map +1 -1
  450. package/dist/web-components/components/trading-chart/trading-chart.d.ts +1 -1
  451. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
  452. package/dist/web-components/html-custom-data.json +45 -0
  453. package/dist/web-components/types/react.d.ts +4 -4
  454. package/dist/web-components/types/solid.d.ts +8 -8
  455. package/dist/web-components/types/svelte.d.ts +8 -8
  456. package/dist/web-components/types/vue.d.ts +4 -4
  457. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chord.cjs","names":["positive","uniqueKeys","emptyLayout","clamp","font","finite","TAU","toCss","mix","localeFormat","upright","ellipsize","require_color","require_overlay","require_labels","require_scene","resolveChord","names","colors","byName","g","o","group","cellColors","declared","resolve","end","known","flows","l","s","t","n","matrix","v","color","rows","i","j","chordKeys","keys","m","isFlow","directed","chordValues","k","out","hidden","totals","inc","niceCeil","raw","base","f","LABEL_FONT_SIZE","TICK_BAND","layoutChord","c","model","flow","shown","row","target","now","goal","whole","a","b","visibleWeight","sumNow","allGoal","order","sign","pos","p","cx","area","cy","half","labelMode","nameFont","theme","tickFont","tickOption","showTicks","tickBand","pad","padTotal","padScale","start","arcs","a0","a1","drawnGroup","nameW","measure","name","fitsTangential","r","mode","reach","cos","sin","midOf","horizontal","outer","need","arcWidth","inner","ribbonR","segments","sortSub","offset","d","list","dir","segment","css","col","neutral","colorMode","opacity","activeAlpha","head","ribbons","ribbonIndex","src","tgt","ribbonsOf","nodes","width","own","c0","c1","muted","tickColor","unitPx","tickFormat","labelPx","major","count","minor","perMajor","tickR","labelR","lastEnd","firstStart","also","isMajor","len","text","halfAngle","nameR","placed","samples","pts","steps","length","x","dx","y","dy","collides","other","u","byValue","mid","room","ax","ay","outward","aligns","clear","py","align","w","right","items","asymmetric","value","percent","flowTotal","ribbonItems","reverse","source","ms","mt","enter"],"sources":["../../../../../charts/src/engine/shapes/chord.ts"],"sourcesContent":["// Chord diagram layout: groups as arcs around a circle (sized by their\n// flows), flows as ribbons between the arcs. Undirected: one ribbon per pair\n// whose ends are as wide as the flow leaving each end; directed: one ribbon\n// per direction, optionally with an arrowhead at the target. Ribbon ends are\n// ordered along each arc so that ribbons cross as little as possible.\n\nimport { mix, toCss, type Rgba } from \"../color\";\nimport { font } from \"../overlay\";\nimport { localeFormat } from \"./labels\";\nimport {\n clamp,\n ellipsize,\n emptyLayout,\n finite,\n positive,\n TAU,\n uniqueKeys,\n upright,\n type LayoutContext,\n type LayoutResult,\n type ShapeItem,\n type ShapeNode,\n} from \"./scene\";\nimport type { ChordChartOptions } from \"./types\";\n\n/** Groups, flow matrix and ribbon colors of a chord diagram */\nexport interface ChordModel {\n names: string[];\n colors: (string | undefined)[];\n /** `matrix[i][j]`: flow from group i to group j (non-negative) */\n matrix: number[][];\n /** Custom ribbon colors, by `i * n + j` */\n cellColors: Map<number, string>;\n}\n\n/**\n * Resolves the groups (declared, then the ones only named by links) and\n * the square flow matrix (from `links`, else `matrix`)\n */\nexport const resolveChord = (o: ChordChartOptions): ChordModel => {\n const names: string[] = [];\n const colors: (string | undefined)[] = [];\n const byName = new Map<string, number>();\n for (const g of o.groups ?? []) {\n const group = typeof g === \"string\" ? { name: g } : g;\n if (!group || typeof group.name !== \"string\") continue;\n if (!byName.has(group.name)) byName.set(group.name, names.length);\n names.push(group.name);\n colors.push(group.color);\n }\n const cellColors = new Map<number, string>();\n if (o.links) {\n const declared = names.length;\n const resolve = (end: string | number): number => {\n if (typeof end === \"number\")\n return Number.isInteger(end) && end >= 0 && end < declared ? end : -1;\n if (typeof end !== \"string\") return -1;\n const known = byName.get(end);\n if (known !== undefined) return known;\n byName.set(end, names.length);\n names.push(end);\n colors.push(undefined);\n return names.length - 1;\n };\n const flows: [number, number, number, string | undefined][] = [];\n for (const l of o.links) {\n if (!l) continue;\n const s = resolve(l.source);\n const t = resolve(l.target);\n if (s < 0 || t < 0) continue;\n flows.push([s, t, positive(l.value), l.color]);\n }\n const n = names.length;\n const matrix = names.map(() => new Array<number>(n).fill(0));\n for (const [s, t, v, color] of flows) {\n matrix[s][t] += v;\n if (color) cellColors.set(s * n + t, color);\n }\n return { names, colors, matrix, cellColors };\n }\n const rows = o.matrix ?? [];\n const n = Math.max(names.length, rows.length);\n for (let i = names.length; i < n; i++) {\n names.push(String(i + 1));\n colors.push(undefined);\n }\n const matrix = names.map((_, i) =>\n names.map((__, j) => positive(rows[i]?.[j])),\n );\n return { names, colors, matrix, cellColors };\n};\n\n/** Keys of the animated quantities: `~group` (shown 0-1) and `group→group` */\nconst chordKeys = (m: ChordModel) => {\n const keys = uniqueKeys(m.names);\n return {\n group: (i: number) => `~${keys[i]}`,\n cell: (i: number, j: number) => `${keys[i]}\\u2192${keys[j]}`,\n };\n};\n\n/** Whether a cell is a flow of the diagram (directed: self flows are ignored) */\nconst isFlow = (m: ChordModel, directed: boolean, i: number, j: number) =>\n m.matrix[i][j] > 0 && !(directed && i === j);\n\nexport const chordValues = (\n o: ChordChartOptions,\n hidden: ReadonlySet<number>,\n out: Map<string, number>,\n) => {\n const m = resolveChord(o);\n const k = chordKeys(m);\n const directed = !!o.directed;\n m.names.forEach((_, i) => {\n out.set(k.group(i), hidden.has(i) ? 0 : 1);\n m.names.forEach((__, j) => {\n if (isFlow(m, directed, i, j))\n out.set(\n k.cell(i, j),\n hidden.has(i) || hidden.has(j) ? 0 : m.matrix[i][j],\n );\n });\n });\n};\n\n/** Totals of a matrix: outgoing, incoming and arc value of every group */\nconst totals = (matrix: readonly (readonly number[])[], directed: boolean) => {\n const n = matrix.length;\n const out = new Array<number>(n).fill(0);\n const inc = new Array<number>(n).fill(0);\n for (let i = 0; i < n; i++)\n for (let j = 0; j < n; j++) {\n if (directed && i === j) continue;\n out[i] += matrix[i][j];\n inc[j] += matrix[i][j];\n }\n return {\n out,\n inc,\n value: out.map((v, i) => (directed ? v + inc[i] : v)),\n };\n};\n\n/** Smallest of 1, 2, 5 × 10^k not below `raw` */\nconst niceCeil = (raw: number) => {\n if (!(raw > 0) || !Number.isFinite(raw)) return 0;\n const base = Math.pow(10, Math.floor(Math.log10(raw)));\n for (const f of [1, 2, 5, 10])\n if (f * base >= raw * (1 - 1e-9)) return f * base;\n return 10 * base;\n};\n\n/** An end of a ribbon on an arc */\ninterface Segment {\n /** Other group of the flow */\n j: number;\n /** `out`: flow from this group to `j`; `in`: flow from `j` to this group */\n dir: \"out\" | \"in\";\n /** Target (not animated) size, used to sort */\n raw: number;\n a0: number;\n a1: number;\n}\n\nconst LABEL_FONT_SIZE = 12;\nconst TICK_BAND = 22;\n\nexport const layoutChord = (\n o: ChordChartOptions,\n c: LayoutContext,\n): LayoutResult => {\n const { theme, area, measure, hidden } = c;\n const model = resolveChord(o);\n const { names, matrix: raw } = model;\n const n = names.length;\n if (!n) return emptyLayout(c);\n const directed = !!o.directed;\n const keys = chordKeys(model);\n const flow = (i: number, j: number) => isFlow(model, directed, i, j);\n\n // displayed (animated) flows, and the targets (hidden groups count as 0)\n const shown = raw.map((row, i) =>\n row.map((v, j) =>\n flow(i, j)\n ? Math.max(\n 0,\n c.value(keys.cell(i, j), hidden.has(i) || hidden.has(j) ? 0 : v),\n )\n : 0,\n ),\n );\n const target = raw.map((row, i) =>\n row.map((v, j) => (flow(i, j) && !hidden.has(i) && !hidden.has(j) ? v : 0)),\n );\n const now = totals(shown, directed);\n const goal = totals(target, directed);\n const whole = goal.value.reduce((a, b) => a + b, 0);\n const visibleWeight = names.map((_, i) =>\n goal.value[i] > 0 || now.value[i] > 1e-9\n ? clamp(c.value(keys.group(i), hidden.has(i) ? 0 : 1), 0, 1)\n : 0,\n );\n const sumNow = now.value.reduce((a, b) => a + b, 0);\n if (sumNow <= 1e-12) return emptyLayout(c);\n\n // order of the groups around the circle\n const allGoal = totals(\n raw.map((row, i) => row.map((v, j) => (flow(i, j) ? v : 0))),\n directed,\n ).value;\n const order = names.map((_, i) => i);\n if (o.sortGroups === \"ascending\" || o.sortGroups === \"descending\") {\n const sign = o.sortGroups === \"ascending\" ? 1 : -1;\n order.sort((a, b) => sign * (allGoal[a] - allGoal[b]) || a - b);\n }\n const pos = new Array<number>(n);\n order.forEach((g, p) => (pos[g] = p));\n\n // radii: arcs, ticks and labels from the center out\n const cx = area.x + area.width / 2;\n const cy = area.y + area.height / 2;\n const half = Math.min(area.width, area.height) / 2;\n const labelMode = o.labels ?? \"auto\";\n const nameFont = font(theme, LABEL_FONT_SIZE, 500);\n const tickFont = font(theme, 10);\n const tickOption = o.ticks;\n const showTicks =\n tickOption === false\n ? false\n : typeof tickOption === \"number\"\n ? tickOption > 0\n : half >= 150;\n const tickBand = showTicks ? TICK_BAND : 0;\n const pad = clamp(finite(o.padAngle, 2), 0, 45) * (Math.PI / 180);\n const padTotal = pad * visibleWeight.reduce((a, b) => a + b, 0);\n const padScale = padTotal > TAU * 0.5 ? (TAU * 0.5) / padTotal : 1;\n const k = (TAU - padTotal * padScale) / sumNow;\n const start = -Math.PI / 2 + (finite(o.startAngle) * Math.PI) / 180;\n\n // group arcs (angles only; the radius comes with the labels)\n const arcs: { a0: number; a1: number }[] = new Array(n);\n {\n let a = start + (pad * padScale * (visibleWeight[order[0]] ?? 0)) / 2;\n for (const g of order) {\n const a0 = a;\n const a1 = a0 + now.value[g] * k;\n arcs[g] = { a0, a1 };\n a = a1 + pad * padScale * visibleWeight[g];\n }\n }\n const drawnGroup = (g: number) => arcs[g].a1 - arcs[g].a0 > 1e-6;\n\n // labels: tangential when every name fits its arc (auto), else radial\n const nameW = names.map((name) => measure(name, nameFont));\n const fitsTangential = (r: number) =>\n order.every(\n (g) =>\n !drawnGroup(g) ||\n nameW[g] + 6 <= (arcs[g].a1 - arcs[g].a0 + pad * padScale * 0.8) * r,\n );\n let mode: \"tangential\" | \"radial\" | \"none\" =\n labelMode === \"none\"\n ? \"none\"\n : labelMode === \"radial\"\n ? \"radial\"\n : \"tangential\";\n const tangentialRoom = LABEL_FONT_SIZE + 10;\n if (labelMode === \"auto\" && !fitsTangential(Math.max(1, half - 12)))\n mode = \"radial\";\n // distance from the center to the edge of the area along an angle\n const reach = (a: number) => {\n const cos = Math.abs(Math.cos(a));\n const sin = Math.abs(Math.sin(a));\n return Math.min(\n cos > 1e-6 ? (area.width / 2 - 2) / cos : Infinity,\n sin > 1e-6 ? (area.height / 2 - LABEL_FONT_SIZE / 2 - 1) / sin : Infinity,\n );\n };\n const midOf = (g: number) => (arcs[g].a0 + arcs[g].a1) / 2;\n // radial names near 12 and 6 o'clock are written horizontally: they then\n // need one line of height instead of their whole width\n const horizontal = (a: number) => Math.abs(Math.sin(a)) > 0.92;\n let outer: number;\n if (mode === \"radial\") {\n // the largest radius leaving each name room along its ray (a wide area\n // gives the names on the sides more room), but not below half the size;\n // names that still do not fit are shortened\n outer = half - tickBand - 8;\n for (const g of order)\n if (drawnGroup(g) && visibleWeight[g] > 0.5) {\n const a = midOf(g);\n const need = horizontal(a) ? LABEL_FONT_SIZE + 2 : nameW[g];\n outer = Math.min(outer, reach(a) - need - tickBand - 10);\n }\n outer = Math.max(half * 0.5, outer);\n } else {\n outer = half - tickBand - (mode === \"none\" ? 0 : tangentialRoom) - 2;\n }\n outer = Math.max(16, outer);\n const arcWidth = clamp(\n finite(o.arcWidth, clamp(outer * 0.06, 8, 18)),\n 2,\n outer * 0.5,\n );\n const inner = outer - arcWidth;\n const ribbonR = Math.max(4, inner - 2);\n\n // ribbon ends along each arc\n const segments: Segment[][] = names.map(() => []);\n for (let i = 0; i < n; i++)\n for (let j = 0; j < n; j++) {\n if (directed) {\n if (flow(i, j)) {\n segments[i].push({ j, dir: \"out\", raw: raw[i][j], a0: 0, a1: 0 });\n segments[j].push({ j: i, dir: \"in\", raw: raw[i][j], a0: 0, a1: 0 });\n }\n } else if (flow(i, j) || flow(j, i)) {\n segments[i].push({ j, dir: \"out\", raw: raw[i][j], a0: 0, a1: 0 });\n }\n }\n const sortSub = o.sortSubgroups ?? \"auto\";\n segments.forEach((list, i) => {\n // `auto`: flows toward the groups just after this one (clockwise) end\n // the arc, those toward the groups just before start it\n const offset = (j: number) => {\n const d = (pos[j] - pos[i] + n) % n;\n return d === 0 ? n / 2 : d;\n };\n list.sort((a, b) => {\n const dir = Number(a.dir === \"in\") - Number(b.dir === \"in\");\n if (sortSub === \"ascending\" || sortSub === \"descending\") {\n const s = sortSub === \"ascending\" ? 1 : -1;\n return s * (a.raw - b.raw) || pos[a.j] - pos[b.j] || dir;\n }\n if (sortSub === \"none\") return pos[a.j] - pos[b.j] || dir;\n return offset(b.j) - offset(a.j) || dir;\n });\n let a = arcs[i].a0;\n for (const s of list) {\n const v = s.dir === \"out\" ? shown[i][s.j] : shown[s.j][i];\n s.a0 = a;\n s.a1 = a + v * k;\n a = s.a1;\n }\n });\n const segment = (g: number, j: number, dir: \"out\" | \"in\") =>\n segments[g].find((s) => s.j === j && s.dir === dir);\n\n // colors\n const colors: Rgba[] = names.map((_, i) => c.color(model.colors[i], i));\n const css = colors.map((col) => toCss(col));\n const neutral = toCss(mix(theme.grid, theme.textMuted, 0.45));\n const colorMode = o.ribbonColor ?? \"gradient\";\n const opacity = clamp(finite(o.ribbonOpacity, 0.65), 0.02, 1);\n const activeAlpha = Math.min(1, opacity + 0.25);\n const head = (o.arrows ?? directed) ? clamp(ribbonR * 0.07, 5, 12) : 0;\n\n // ribbons: [source, target] by item index\n interface Ribbon {\n index: number;\n s: number;\n t: number;\n src: Segment;\n tgt: Segment;\n }\n const ribbons: Ribbon[] = [];\n const ribbonIndex = (s: number, t: number) => n + s * n + t;\n for (let i = 0; i < n; i++)\n for (let j = directed ? 0 : i; j < n; j++) {\n if (directed) {\n if (!flow(i, j)) continue;\n const src = segment(i, j, \"out\");\n const tgt = segment(j, i, \"in\");\n if (src && tgt)\n ribbons.push({ index: ribbonIndex(i, j), s: i, t: j, src, tgt });\n } else {\n if (!flow(i, j) && !flow(j, i)) continue;\n // the larger direction is the source\n const [s, t] = raw[j][i] > raw[i][j] ? [j, i] : [i, j];\n const src = segment(s, t, \"out\");\n const tgt = segment(t, s, \"out\");\n if (src && tgt)\n ribbons.push({ index: ribbonIndex(s, t), s, t, src, tgt });\n }\n }\n const ribbonsOf = names.map(() => [] as number[]);\n for (const r of ribbons) {\n ribbonsOf[r.s].push(r.index);\n if (r.t !== r.s) ribbonsOf[r.t].push(r.index);\n }\n\n const nodes: ShapeNode[] = [];\n const width = (r: Ribbon) => r.src.a1 - r.src.a0 + (r.tgt.a1 - r.tgt.a0);\n for (const r of ribbons.slice().sort((a, b) => width(b) - width(a))) {\n if (width(r) <= 1e-6) continue;\n const own =\n model.cellColors.get(r.s * n + r.t) ??\n (directed ? undefined : model.cellColors.get(r.t * n + r.s));\n let c0: string;\n let c1: string;\n if (own) c0 = c1 = toCss(c.color(own, r.s));\n else if (colorMode === \"source\") c0 = c1 = css[r.s];\n else if (colorMode === \"target\") c0 = c1 = css[r.t];\n else if (colorMode === \"neutral\") c0 = c1 = neutral;\n else {\n c0 = css[r.s];\n c1 = css[r.t];\n }\n nodes.push({\n kind: \"ribbon\",\n cx,\n cy,\n r: ribbonR,\n s0: r.src.a0,\n s1: r.src.a1,\n t0: r.tgt.a0,\n t1: r.tgt.a1,\n head: r.s === r.t ? 0 : head,\n color0: c0,\n color1: c1,\n alpha: opacity,\n activeAlpha,\n hit: r.index,\n also: r.s === r.t ? [r.s] : [r.s, r.t],\n });\n }\n\n // group arcs\n for (const g of order) {\n if (!drawnGroup(g)) continue;\n nodes.push({\n kind: \"sector\",\n cx,\n cy,\n r0: inner,\n r1: outer,\n a0: arcs[g].a0,\n a1: arcs[g].a1,\n pad: 0,\n corner: Math.min(2, arcWidth / 4),\n fill: css[g],\n hit: g,\n also: ribbonsOf[g],\n alpha: visibleWeight[g],\n });\n }\n\n // value ticks: minor ticks, labelled major ticks where the labels fit\n const muted = toCss(theme.textMuted);\n const tickColor = toCss(theme.textMuted, 0.7);\n if (showTicks) {\n const unitPx = k * outer;\n const tickFormat = o.tickFormat ?? localeFormat(c.locale);\n const sample = tickFormat(Math.max(...allGoal));\n const labelPx = measure(sample, tickFont) + 14;\n let major =\n typeof tickOption === \"number\"\n ? tickOption\n : niceCeil(labelPx / Math.max(unitPx, 1e-12));\n // keep the number of ticks reasonable\n const count = sumNow / Math.max(major, 1e-12);\n if (!(major > 0) || count > 240) major = niceCeil(sumNow / 240);\n const minor =\n (major / 5) * unitPx >= 5\n ? major / 5\n : (major / 2) * unitPx >= 5\n ? major / 2\n : major;\n const perMajor = Math.round(major / minor);\n const tickR = outer + 2;\n const labelR = outer + 15;\n let lastEnd = -Infinity;\n let firstStart: number | null = null;\n for (const g of order) {\n if (!drawnGroup(g)) continue;\n const { a0, a1 } = arcs[g];\n const also = ribbonsOf[g];\n for (let m = 0; ; m++) {\n const a = a0 + m * minor * k;\n if (a > a1 + 1e-9) break;\n const isMajor = m % perMajor === 0;\n const len = isMajor ? 5 : 3;\n if (unitPx * minor >= 3 || isMajor)\n nodes.push({\n kind: \"line\",\n points: [\n cx + tickR * Math.cos(a),\n cy + tickR * Math.sin(a),\n cx + (tickR + len) * Math.cos(a),\n cy + (tickR + len) * Math.sin(a),\n ],\n color: tickColor,\n width: 1,\n hit: g,\n also,\n });\n if (!isMajor) continue;\n const text = tickFormat(m * minor);\n const halfAngle = (measure(text, tickFont) / 2 + 3) / labelR;\n if (a - halfAngle < lastEnd) continue;\n if (firstStart !== null && a + halfAngle > firstStart + TAU) continue;\n if (firstStart === null) firstStart = a - halfAngle;\n lastEnd = a + halfAngle;\n nodes.push({\n kind: \"text\",\n x: cx + labelR * Math.cos(a),\n y: cy + labelR * Math.sin(a),\n text,\n font: tickFont,\n color: muted,\n align: \"center\",\n baseline: \"middle\",\n rotate: upright(a + Math.PI / 2),\n hit: g,\n also,\n });\n }\n }\n }\n\n // group names\n if (mode !== \"none\") {\n const nameR = outer + tickBand + 6;\n const color = toCss(theme.text);\n // placed names as sample points along their baseline: two names collide\n // when samples are closer than a line height (works for any rotation)\n const placed: [number, number][][] = [];\n const lineGap = LABEL_FONT_SIZE + 3;\n const samples = (\n x: number,\n y: number,\n dx: number,\n dy: number,\n length: number,\n ) => {\n const pts: [number, number][] = [];\n const steps = Math.max(1, Math.ceil(length / 6));\n for (let s = 0; s <= steps; s++)\n pts.push([\n x + (dx * length * s) / steps,\n y + (dy * length * s) / steps,\n ]);\n return pts;\n };\n const collides = (pts: [number, number][]) =>\n placed.some((other) =>\n other.some(([x, y]) =>\n pts.some(([u, v]) => Math.hypot(x - u, y - v) < lineGap),\n ),\n );\n // biggest first, so collisions drop the small groups\n const byValue = order\n .filter((g) => drawnGroup(g) && visibleWeight[g] > 0.5)\n .sort((a, b) => now.value[b] - now.value[a]);\n for (const g of byValue) {\n const { a0, a1 } = arcs[g];\n const mid = (a0 + a1) / 2;\n if (mode === \"tangential\") {\n const room = (a1 - a0 + pad * padScale * 0.8) * (nameR + 6) - 6;\n const text = ellipsize(names[g], room, nameFont, measure);\n if (!text) continue;\n nodes.push({\n kind: \"text\",\n x: cx + (nameR + 6) * Math.cos(mid),\n y: cy + (nameR + 6) * Math.sin(mid),\n text,\n font: nameFont,\n color,\n align: \"center\",\n baseline: \"middle\",\n rotate: upright(mid + Math.PI / 2),\n hit: g,\n also: ribbonsOf[g],\n });\n continue;\n }\n const ax = cx + nameR * Math.cos(mid);\n const ay = cy + nameR * Math.sin(mid);\n if (horizontal(mid)) {\n // above (12 o'clock) or below (6 o'clock): centered on the arc, else\n // extending away from the vertical axis, else toward it; the text must\n // clear the tick ring and the names already placed\n const y = ay + Math.sign(Math.sin(mid)) * (LABEL_FONT_SIZE / 2 + 1);\n const outward = Math.cos(mid) >= 0 ? \"left\" : \"right\";\n const aligns: (\"center\" | \"left\" | \"right\")[] = [\n \"center\",\n outward,\n outward === \"left\" ? \"right\" : \"left\",\n ];\n const clear = (pts: [number, number][]) =>\n pts.every(([x, py]) => Math.hypot(x - cx, py - cy) >= nameR + 2);\n for (const align of aligns) {\n const room =\n align === \"center\"\n ? 2 * Math.min(ax - area.x, area.x + area.width - ax) - 4\n : align === \"left\"\n ? area.x + area.width - ax - 2\n : ax - area.x - 2;\n const text = ellipsize(names[g], room, nameFont, measure);\n if (!text) continue;\n const w = measure(text, nameFont);\n const x0 =\n align === \"left\" ? ax : align === \"right\" ? ax - w : ax - w / 2;\n const pts = samples(x0, y, 1, 0, w);\n if (!clear(pts) || collides(pts)) continue;\n placed.push(pts);\n nodes.push({\n kind: \"text\",\n x: ax,\n y,\n text,\n font: nameFont,\n color,\n align,\n baseline: \"middle\",\n hit: g,\n also: ribbonsOf[g],\n });\n break;\n }\n continue;\n }\n const text = ellipsize(\n names[g],\n reach(mid) - nameR - 2,\n nameFont,\n measure,\n );\n if (!text) continue;\n const pts = samples(\n ax,\n ay,\n Math.cos(mid),\n Math.sin(mid),\n measure(text, nameFont),\n );\n if (collides(pts)) continue;\n placed.push(pts);\n const right = Math.cos(mid) >= 0;\n nodes.push({\n kind: \"text\",\n x: ax,\n y: ay,\n text,\n font: nameFont,\n color,\n align: right ? \"left\" : \"right\",\n baseline: \"middle\",\n rotate: right ? mid : mid + Math.PI,\n hit: g,\n also: ribbonsOf[g],\n });\n }\n }\n\n // items: groups around the circle, then the ribbons by source\n const items: ShapeItem[] = [];\n const asymmetric =\n directed ||\n raw.some((row, i) => row.some((v, j) => Math.abs(v - raw[j][i]) > 1e-12));\n for (const g of order) {\n const value = goal.value[g];\n if (!(value > 0) || hidden.has(g)) continue;\n const percent = whole > 0 ? value / whole : 0;\n const mid = (arcs[g].a0 + arcs[g].a1) / 2;\n items.push({\n index: g,\n name: names[g],\n value,\n percent,\n share: c.percent(percent),\n color: css[g],\n x: cx + outer * Math.cos(mid),\n y: cy + outer * Math.sin(mid),\n rows: [\n ...(directed || !asymmetric\n ? [{ name: c.labels.value, value: c.format(value) }]\n : []),\n ...(asymmetric\n ? [\n { name: c.labels.outgoing, value: c.format(goal.out[g]) },\n { name: c.labels.incoming, value: c.format(goal.inc[g]) },\n ]\n : []),\n { name: c.labels.share, value: c.percent(percent) },\n ],\n });\n }\n const flowTotal = target.reduce(\n (s, row) => s + row.reduce((a, b) => a + b, 0),\n 0,\n );\n const ribbonItems = ribbons\n .filter((r) => target[r.s][r.t] > 0 || target[r.t][r.s] > 0)\n .sort(\n (a, b) =>\n pos[a.s] - pos[b.s] || a.src.a0 - b.src.a0 || pos[a.t] - pos[b.t],\n );\n for (const r of ribbonItems) {\n const value = target[r.s][r.t];\n const reverse =\n r.s !== r.t && target[r.s][r.t] + target[r.t][r.s] > 0\n ? raw[r.t][r.s]\n : 0;\n const percent = flowTotal > 0 ? value / flowTotal : 0;\n const source = names[r.s];\n const tgt = names[r.t];\n const ms = (r.src.a0 + r.src.a1) / 2;\n const mt = (r.tgt.a0 + r.tgt.a1) / 2;\n // middle of the quadratic curve between the two ends\n const x =\n r.s === r.t\n ? cx + ribbonR * 0.7 * Math.cos(ms)\n : 0.25 * (cx + ribbonR * Math.cos(ms)) +\n 0.5 * cx +\n 0.25 * (cx + ribbonR * Math.cos(mt));\n const y =\n r.s === r.t\n ? cy + ribbonR * 0.7 * Math.sin(ms)\n : 0.25 * (cy + ribbonR * Math.sin(ms)) +\n 0.5 * cy +\n 0.25 * (cy + ribbonR * Math.sin(mt));\n items.push({\n index: r.index,\n name: r.s === r.t ? source : `${source} \\u2192 ${tgt}`,\n value,\n percent,\n share: c.percent(percent),\n color: css[r.s],\n x,\n y,\n rows: [\n { name: c.labels.value, value: c.format(value) },\n ...(r.s !== r.t && (!directed || reverse > 0)\n ? [{ name: c.labels.reverse, value: c.format(reverse) }]\n : []),\n { name: c.labels.share, value: c.percent(percent) },\n ],\n event: { source, target: tgt, reverseValue: reverse },\n });\n }\n\n const enter = clamp(c.enter, 0, 1);\n return {\n nodes,\n items,\n dim: 0.25,\n empty: false,\n ...(enter < 1\n ? { enter: { alpha: enter, scale: 0.94 + 0.06 * enter, cx, cy } }\n : {}),\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"chord.cjs","names":["positive","uniqueKeys","emptyLayout","clamp","font","finite","TAU","toCss","mix","localeFormat","upright","ellipsize","require_color","require_overlay","require_labels","require_scene","resolveChord","names","colors","byName","g","o","group","cellColors","declared","resolve","end","known","flows","l","s","t","n","matrix","v","color","rows","i","j","chordKeys","keys","m","isFlow","directed","chordValues","k","out","hidden","isSymmetric","row","w","pairValue","symmetric","totals","inc","niceCeil","raw","base","f","LABEL_FONT_SIZE","TICK_BAND","layoutChord","c","model","flow","shown","target","pair","now","goal","whole","a","b","visibleWeight","sumNow","allGoal","order","sign","pos","p","cx","area","cy","half","labelMode","nameFont","theme","tickFont","tickOption","showTicks","tickBand","pad","padTotal","padScale","start","arcs","a0","a1","drawnGroup","nameW","measure","name","fitsTangential","r","mode","reach","cos","sin","midOf","horizontal","outer","need","arcWidth","inner","ribbonR","segments","sortSub","offset","d","list","dir","segment","css","col","neutral","colorMode","opacity","activeAlpha","head","ribbons","ribbonIndex","src","tgt","ribbonsOf","nodes","width","own","c0","c1","muted","tickColor","unitPx","tickFormat","labelPx","major","count","minor","perMajor","tickR","labelR","lastEnd","firstStart","also","isMajor","len","text","halfAngle","nameR","placed","samples","pts","steps","length","x","dx","y","dy","collides","other","u","byValue","mid","room","ax","ay","outward","aligns","clear","py","align","right","items","value","percent","ribbonSize","flowTotal","ribbonItems","reverse","source","ms","mt","enter"],"sources":["../../../../../charts/src/engine/shapes/chord.ts"],"sourcesContent":["// Chord diagram layout: groups as arcs around a circle (sized by their\n// flows), flows as ribbons between the arcs. Undirected: one ribbon per pair\n// as wide as the flows of both directions; directed: one ribbon per\n// direction, optionally with an arrowhead at the target. Ribbon ends are\n// ordered along each arc so that ribbons cross as little as possible.\n\nimport { mix, toCss, type Rgba } from \"../color\";\nimport { font } from \"../overlay\";\nimport { localeFormat } from \"./labels\";\nimport {\n clamp,\n ellipsize,\n emptyLayout,\n finite,\n positive,\n TAU,\n uniqueKeys,\n upright,\n type LayoutContext,\n type LayoutResult,\n type ShapeItem,\n type ShapeNode,\n} from \"./scene\";\nimport type { ChordChartOptions } from \"./types\";\n\n/** Groups, flow matrix and ribbon colors of a chord diagram */\nexport interface ChordModel {\n names: string[];\n colors: (string | undefined)[];\n /** `matrix[i][j]`: flow from group i to group j (non-negative) */\n matrix: number[][];\n /** Custom ribbon colors, by `i * n + j` */\n cellColors: Map<number, string>;\n}\n\n/**\n * Resolves the groups (declared, then the ones only named by links) and\n * the square flow matrix (from `links`, else `matrix`)\n */\nexport const resolveChord = (o: ChordChartOptions): ChordModel => {\n const names: string[] = [];\n const colors: (string | undefined)[] = [];\n const byName = new Map<string, number>();\n for (const g of o.groups ?? []) {\n const group = typeof g === \"string\" ? { name: g } : g;\n if (!group || typeof group.name !== \"string\") continue;\n if (!byName.has(group.name)) byName.set(group.name, names.length);\n names.push(group.name);\n colors.push(group.color);\n }\n const cellColors = new Map<number, string>();\n if (o.links) {\n const declared = names.length;\n const resolve = (end: string | number): number => {\n if (typeof end === \"number\")\n return Number.isInteger(end) && end >= 0 && end < declared ? end : -1;\n if (typeof end !== \"string\") return -1;\n const known = byName.get(end);\n if (known !== undefined) return known;\n byName.set(end, names.length);\n names.push(end);\n colors.push(undefined);\n return names.length - 1;\n };\n const flows: [number, number, number, string | undefined][] = [];\n for (const l of o.links) {\n if (!l) continue;\n const s = resolve(l.source);\n const t = resolve(l.target);\n if (s < 0 || t < 0) continue;\n flows.push([s, t, positive(l.value), l.color]);\n }\n const n = names.length;\n const matrix = names.map(() => new Array<number>(n).fill(0));\n for (const [s, t, v, color] of flows) {\n matrix[s][t] += v;\n if (color) cellColors.set(s * n + t, color);\n }\n return { names, colors, matrix, cellColors };\n }\n const rows = o.matrix ?? [];\n const n = Math.max(names.length, rows.length);\n for (let i = names.length; i < n; i++) {\n names.push(String(i + 1));\n colors.push(undefined);\n }\n const matrix = names.map((_, i) =>\n names.map((__, j) => positive(rows[i]?.[j])),\n );\n return { names, colors, matrix, cellColors };\n};\n\n/** Keys of the animated quantities: `~group` (shown 0-1) and `group→group` */\nconst chordKeys = (m: ChordModel) => {\n const keys = uniqueKeys(m.names);\n return {\n group: (i: number) => `~${keys[i]}`,\n cell: (i: number, j: number) => `${keys[i]}\\u2192${keys[j]}`,\n };\n};\n\n/** Whether a cell is a flow of the diagram (directed: self flows are ignored) */\nconst isFlow = (m: ChordModel, directed: boolean, i: number, j: number) =>\n m.matrix[i][j] > 0 && !(directed && i === j);\n\nexport const chordValues = (\n o: ChordChartOptions,\n hidden: ReadonlySet<number>,\n out: Map<string, number>,\n) => {\n const m = resolveChord(o);\n const k = chordKeys(m);\n const directed = !!o.directed;\n m.names.forEach((_, i) => {\n out.set(k.group(i), hidden.has(i) ? 0 : 1);\n m.names.forEach((__, j) => {\n if (isFlow(m, directed, i, j))\n out.set(\n k.cell(i, j),\n hidden.has(i) || hidden.has(j) ? 0 : m.matrix[i][j],\n );\n });\n });\n};\n\ntype Matrix = readonly (readonly number[])[];\n\n/** Whether a matrix is symmetric (up to rounding) */\nconst isSymmetric = (m: Matrix) =>\n m.every((row, i) =>\n row.every((v, j) => {\n const w = m[j]?.[i] ?? 0;\n return Math.abs(v - w) <= 1e-9 * Math.max(1, Math.abs(v), Math.abs(w));\n }),\n );\n\n/**\n * Undirected size of the ribbon joining `i` and `j`: a symmetric matrix holds\n * every relation in both cells (counted once), otherwise the flows of both\n * directions add up, so that a group with only incoming flows keeps its arc\n */\nconst pairValue = (m: Matrix, symmetric: boolean, i: number, j: number) =>\n i === j || symmetric ? m[i][j] : m[i][j] + m[j][i];\n\n/**\n * Totals of a matrix: outgoing, incoming and arc value of every group. The\n * arc holds the ends of all the ribbons of the group: both directions when\n * directed, the undirected pair sizes ({@link pairValue}) otherwise\n */\nconst totals = (matrix: Matrix, directed: boolean, symmetric: boolean) => {\n const n = matrix.length;\n const out = new Array<number>(n).fill(0);\n const inc = new Array<number>(n).fill(0);\n for (let i = 0; i < n; i++)\n for (let j = 0; j < n; j++) {\n if (directed && i === j) continue;\n out[i] += matrix[i][j];\n inc[j] += matrix[i][j];\n }\n return {\n out,\n inc,\n value: out.map((v, i) =>\n directed\n ? v + inc[i]\n : symmetric\n ? v\n : Math.max(0, v + inc[i] - matrix[i][i]),\n ),\n };\n};\n\n/** Smallest of 1, 2, 5 × 10^k not below `raw` */\nconst niceCeil = (raw: number) => {\n if (!(raw > 0) || !Number.isFinite(raw)) return 0;\n const base = Math.pow(10, Math.floor(Math.log10(raw)));\n for (const f of [1, 2, 5, 10])\n if (f * base >= raw * (1 - 1e-9)) return f * base;\n return 10 * base;\n};\n\n/** An end of a ribbon on an arc */\ninterface Segment {\n /** Other group of the flow */\n j: number;\n /** `out`: flow from this group to `j`; `in`: flow from `j` to this group */\n dir: \"out\" | \"in\";\n /** Target (not animated) size, used to sort */\n raw: number;\n a0: number;\n a1: number;\n}\n\nconst LABEL_FONT_SIZE = 12;\nconst TICK_BAND = 22;\n\nexport const layoutChord = (\n o: ChordChartOptions,\n c: LayoutContext,\n): LayoutResult => {\n const { theme, area, measure, hidden } = c;\n const model = resolveChord(o);\n const { names, matrix: raw } = model;\n const n = names.length;\n if (!n) return emptyLayout(c);\n const directed = !!o.directed;\n const keys = chordKeys(model);\n const flow = (i: number, j: number) => isFlow(model, directed, i, j);\n\n // displayed (animated) flows, and the targets (hidden groups count as 0)\n const shown = raw.map((row, i) =>\n row.map((v, j) =>\n flow(i, j)\n ? Math.max(\n 0,\n c.value(keys.cell(i, j), hidden.has(i) || hidden.has(j) ? 0 : v),\n )\n : 0,\n ),\n );\n const target = raw.map((row, i) =>\n row.map((v, j) => (flow(i, j) && !hidden.has(i) && !hidden.has(j) ? v : 0)),\n );\n // undirected: does every relation appear in both cells?\n const symmetric =\n !directed &&\n isSymmetric(raw.map((row, i) => row.map((v, j) => (flow(i, j) ? v : 0))));\n const pair = (m: Matrix, i: number, j: number) =>\n pairValue(m, symmetric, i, j);\n const now = totals(shown, directed, symmetric);\n const goal = totals(target, directed, symmetric);\n const whole = goal.value.reduce((a, b) => a + b, 0);\n const visibleWeight = names.map((_, i) =>\n goal.value[i] > 0 || now.value[i] > 1e-9\n ? clamp(c.value(keys.group(i), hidden.has(i) ? 0 : 1), 0, 1)\n : 0,\n );\n const sumNow = now.value.reduce((a, b) => a + b, 0);\n if (sumNow <= 1e-12) return emptyLayout(c);\n\n // order of the groups around the circle\n const allGoal = totals(\n raw.map((row, i) => row.map((v, j) => (flow(i, j) ? v : 0))),\n directed,\n symmetric,\n ).value;\n const order = names.map((_, i) => i);\n if (o.sortGroups === \"ascending\" || o.sortGroups === \"descending\") {\n const sign = o.sortGroups === \"ascending\" ? 1 : -1;\n order.sort((a, b) => sign * (allGoal[a] - allGoal[b]) || a - b);\n }\n const pos = new Array<number>(n);\n order.forEach((g, p) => (pos[g] = p));\n\n // radii: arcs, ticks and labels from the center out\n const cx = area.x + area.width / 2;\n const cy = area.y + area.height / 2;\n const half = Math.min(area.width, area.height) / 2;\n const labelMode = o.labels ?? \"auto\";\n const nameFont = font(theme, LABEL_FONT_SIZE, 500);\n const tickFont = font(theme, 10);\n const tickOption = o.ticks;\n const showTicks =\n tickOption === false\n ? false\n : typeof tickOption === \"number\"\n ? tickOption > 0\n : half >= 150;\n const tickBand = showTicks ? TICK_BAND : 0;\n const pad = clamp(finite(o.padAngle, 2), 0, 45) * (Math.PI / 180);\n const padTotal = pad * visibleWeight.reduce((a, b) => a + b, 0);\n const padScale = padTotal > TAU * 0.5 ? (TAU * 0.5) / padTotal : 1;\n const k = (TAU - padTotal * padScale) / sumNow;\n const start = -Math.PI / 2 + (finite(o.startAngle) * Math.PI) / 180;\n\n // group arcs (angles only; the radius comes with the labels)\n const arcs: { a0: number; a1: number }[] = new Array(n);\n {\n let a = start + (pad * padScale * (visibleWeight[order[0]] ?? 0)) / 2;\n for (const g of order) {\n const a0 = a;\n const a1 = a0 + now.value[g] * k;\n arcs[g] = { a0, a1 };\n a = a1 + pad * padScale * visibleWeight[g];\n }\n }\n const drawnGroup = (g: number) => arcs[g].a1 - arcs[g].a0 > 1e-6;\n\n // labels: tangential when every name fits its arc (auto), else radial\n const nameW = names.map((name) => measure(name, nameFont));\n const fitsTangential = (r: number) =>\n order.every(\n (g) =>\n !drawnGroup(g) ||\n nameW[g] + 6 <= (arcs[g].a1 - arcs[g].a0 + pad * padScale * 0.8) * r,\n );\n let mode: \"tangential\" | \"radial\" | \"none\" =\n labelMode === \"none\"\n ? \"none\"\n : labelMode === \"radial\"\n ? \"radial\"\n : \"tangential\";\n const tangentialRoom = LABEL_FONT_SIZE + 10;\n if (labelMode === \"auto\" && !fitsTangential(Math.max(1, half - 12)))\n mode = \"radial\";\n // distance from the center to the edge of the area along an angle\n const reach = (a: number) => {\n const cos = Math.abs(Math.cos(a));\n const sin = Math.abs(Math.sin(a));\n return Math.min(\n cos > 1e-6 ? (area.width / 2 - 2) / cos : Infinity,\n sin > 1e-6 ? (area.height / 2 - LABEL_FONT_SIZE / 2 - 1) / sin : Infinity,\n );\n };\n const midOf = (g: number) => (arcs[g].a0 + arcs[g].a1) / 2;\n // radial names near 12 and 6 o'clock are written horizontally: they then\n // need one line of height instead of their whole width\n const horizontal = (a: number) => Math.abs(Math.sin(a)) > 0.92;\n let outer: number;\n if (mode === \"radial\") {\n // the largest radius leaving each name room along its ray (a wide area\n // gives the names on the sides more room), but not below half the size;\n // names that still do not fit are shortened\n outer = half - tickBand - 8;\n for (const g of order)\n if (drawnGroup(g) && visibleWeight[g] > 0.5) {\n const a = midOf(g);\n const need = horizontal(a) ? LABEL_FONT_SIZE + 2 : nameW[g];\n outer = Math.min(outer, reach(a) - need - tickBand - 10);\n }\n outer = Math.max(half * 0.5, outer);\n } else {\n outer = half - tickBand - (mode === \"none\" ? 0 : tangentialRoom) - 2;\n }\n outer = Math.max(16, outer);\n const arcWidth = clamp(\n finite(o.arcWidth, clamp(outer * 0.06, 8, 18)),\n 2,\n outer * 0.5,\n );\n const inner = outer - arcWidth;\n const ribbonR = Math.max(4, inner - 2);\n\n // ribbon ends along each arc\n const segments: Segment[][] = names.map(() => []);\n for (let i = 0; i < n; i++)\n for (let j = 0; j < n; j++) {\n if (directed) {\n if (flow(i, j)) {\n segments[i].push({ j, dir: \"out\", raw: raw[i][j], a0: 0, a1: 0 });\n segments[j].push({ j: i, dir: \"in\", raw: raw[i][j], a0: 0, a1: 0 });\n }\n } else if (flow(i, j) || flow(j, i)) {\n segments[i].push({ j, dir: \"out\", raw: raw[i][j], a0: 0, a1: 0 });\n }\n }\n const sortSub = o.sortSubgroups ?? \"auto\";\n segments.forEach((list, i) => {\n // `auto`: flows toward the groups just after this one (clockwise) end\n // the arc, those toward the groups just before start it\n const offset = (j: number) => {\n const d = (pos[j] - pos[i] + n) % n;\n return d === 0 ? n / 2 : d;\n };\n list.sort((a, b) => {\n const dir = Number(a.dir === \"in\") - Number(b.dir === \"in\");\n if (sortSub === \"ascending\" || sortSub === \"descending\") {\n const s = sortSub === \"ascending\" ? 1 : -1;\n return s * (a.raw - b.raw) || pos[a.j] - pos[b.j] || dir;\n }\n if (sortSub === \"none\") return pos[a.j] - pos[b.j] || dir;\n return offset(b.j) - offset(a.j) || dir;\n });\n let a = arcs[i].a0;\n for (const s of list) {\n const v = !directed\n ? pair(shown, i, s.j)\n : s.dir === \"out\"\n ? shown[i][s.j]\n : shown[s.j][i];\n s.a0 = a;\n s.a1 = a + v * k;\n a = s.a1;\n }\n });\n const segment = (g: number, j: number, dir: \"out\" | \"in\") =>\n segments[g].find((s) => s.j === j && s.dir === dir);\n\n // colors\n const colors: Rgba[] = names.map((_, i) => c.color(model.colors[i], i));\n const css = colors.map((col) => toCss(col));\n const neutral = toCss(mix(theme.grid, theme.textMuted, 0.45));\n const colorMode = o.ribbonColor ?? \"gradient\";\n const opacity = clamp(finite(o.ribbonOpacity, 0.65), 0.02, 1);\n const activeAlpha = Math.min(1, opacity + 0.25);\n const head = (o.arrows ?? directed) ? clamp(ribbonR * 0.07, 5, 12) : 0;\n\n // ribbons: [source, target] by item index\n interface Ribbon {\n index: number;\n s: number;\n t: number;\n src: Segment;\n tgt: Segment;\n }\n const ribbons: Ribbon[] = [];\n const ribbonIndex = (s: number, t: number) => n + s * n + t;\n for (let i = 0; i < n; i++)\n for (let j = directed ? 0 : i; j < n; j++) {\n if (directed) {\n if (!flow(i, j)) continue;\n const src = segment(i, j, \"out\");\n const tgt = segment(j, i, \"in\");\n if (src && tgt)\n ribbons.push({ index: ribbonIndex(i, j), s: i, t: j, src, tgt });\n } else {\n if (!flow(i, j) && !flow(j, i)) continue;\n // the larger direction is the source\n const [s, t] = raw[j][i] > raw[i][j] ? [j, i] : [i, j];\n const src = segment(s, t, \"out\");\n const tgt = segment(t, s, \"out\");\n if (src && tgt)\n ribbons.push({ index: ribbonIndex(s, t), s, t, src, tgt });\n }\n }\n const ribbonsOf = names.map(() => [] as number[]);\n for (const r of ribbons) {\n ribbonsOf[r.s].push(r.index);\n if (r.t !== r.s) ribbonsOf[r.t].push(r.index);\n }\n\n const nodes: ShapeNode[] = [];\n const width = (r: Ribbon) => r.src.a1 - r.src.a0 + (r.tgt.a1 - r.tgt.a0);\n for (const r of ribbons.slice().sort((a, b) => width(b) - width(a))) {\n if (width(r) <= 1e-6) continue;\n const own =\n model.cellColors.get(r.s * n + r.t) ??\n (directed ? undefined : model.cellColors.get(r.t * n + r.s));\n let c0: string;\n let c1: string;\n if (own) c0 = c1 = toCss(c.color(own, r.s));\n else if (colorMode === \"source\") c0 = c1 = css[r.s];\n else if (colorMode === \"target\") c0 = c1 = css[r.t];\n else if (colorMode === \"neutral\") c0 = c1 = neutral;\n else {\n c0 = css[r.s];\n c1 = css[r.t];\n }\n nodes.push({\n kind: \"ribbon\",\n cx,\n cy,\n r: ribbonR,\n s0: r.src.a0,\n s1: r.src.a1,\n t0: r.tgt.a0,\n t1: r.tgt.a1,\n head: r.s === r.t ? 0 : head,\n color0: c0,\n color1: c1,\n alpha: opacity,\n activeAlpha,\n hit: r.index,\n also: r.s === r.t ? [r.s] : [r.s, r.t],\n });\n }\n\n // group arcs\n for (const g of order) {\n if (!drawnGroup(g)) continue;\n nodes.push({\n kind: \"sector\",\n cx,\n cy,\n r0: inner,\n r1: outer,\n a0: arcs[g].a0,\n a1: arcs[g].a1,\n pad: 0,\n corner: Math.min(2, arcWidth / 4),\n fill: css[g],\n hit: g,\n also: ribbonsOf[g],\n alpha: visibleWeight[g],\n });\n }\n\n // value ticks: minor ticks, labelled major ticks where the labels fit\n const muted = toCss(theme.textMuted);\n const tickColor = toCss(theme.textMuted, 0.7);\n if (showTicks) {\n const unitPx = k * outer;\n const tickFormat = o.tickFormat ?? localeFormat(c.locale);\n const sample = tickFormat(Math.max(...allGoal));\n const labelPx = measure(sample, tickFont) + 14;\n let major =\n typeof tickOption === \"number\"\n ? tickOption\n : niceCeil(labelPx / Math.max(unitPx, 1e-12));\n // keep the number of ticks reasonable\n const count = sumNow / Math.max(major, 1e-12);\n if (!(major > 0) || count > 240) major = niceCeil(sumNow / 240);\n const minor =\n (major / 5) * unitPx >= 5\n ? major / 5\n : (major / 2) * unitPx >= 5\n ? major / 2\n : major;\n const perMajor = Math.round(major / minor);\n const tickR = outer + 2;\n const labelR = outer + 15;\n let lastEnd = -Infinity;\n let firstStart: number | null = null;\n for (const g of order) {\n if (!drawnGroup(g)) continue;\n const { a0, a1 } = arcs[g];\n const also = ribbonsOf[g];\n for (let m = 0; ; m++) {\n const a = a0 + m * minor * k;\n if (a > a1 + 1e-9) break;\n const isMajor = m % perMajor === 0;\n const len = isMajor ? 5 : 3;\n if (unitPx * minor >= 3 || isMajor)\n nodes.push({\n kind: \"line\",\n points: [\n cx + tickR * Math.cos(a),\n cy + tickR * Math.sin(a),\n cx + (tickR + len) * Math.cos(a),\n cy + (tickR + len) * Math.sin(a),\n ],\n color: tickColor,\n width: 1,\n hit: g,\n also,\n });\n if (!isMajor) continue;\n const text = tickFormat(m * minor);\n const halfAngle = (measure(text, tickFont) / 2 + 3) / labelR;\n if (a - halfAngle < lastEnd) continue;\n if (firstStart !== null && a + halfAngle > firstStart + TAU) continue;\n if (firstStart === null) firstStart = a - halfAngle;\n lastEnd = a + halfAngle;\n nodes.push({\n kind: \"text\",\n x: cx + labelR * Math.cos(a),\n y: cy + labelR * Math.sin(a),\n text,\n font: tickFont,\n color: muted,\n align: \"center\",\n baseline: \"middle\",\n rotate: upright(a + Math.PI / 2),\n hit: g,\n also,\n });\n }\n }\n }\n\n // group names\n if (mode !== \"none\") {\n const nameR = outer + tickBand + 6;\n const color = toCss(theme.text);\n // placed names as sample points along their baseline: two names collide\n // when samples are closer than a line height (works for any rotation)\n const placed: [number, number][][] = [];\n const lineGap = LABEL_FONT_SIZE + 3;\n const samples = (\n x: number,\n y: number,\n dx: number,\n dy: number,\n length: number,\n ) => {\n const pts: [number, number][] = [];\n const steps = Math.max(1, Math.ceil(length / 6));\n for (let s = 0; s <= steps; s++)\n pts.push([\n x + (dx * length * s) / steps,\n y + (dy * length * s) / steps,\n ]);\n return pts;\n };\n const collides = (pts: [number, number][]) =>\n placed.some((other) =>\n other.some(([x, y]) =>\n pts.some(([u, v]) => Math.hypot(x - u, y - v) < lineGap),\n ),\n );\n // biggest first, so collisions drop the small groups\n const byValue = order\n .filter((g) => drawnGroup(g) && visibleWeight[g] > 0.5)\n .sort((a, b) => now.value[b] - now.value[a]);\n for (const g of byValue) {\n const { a0, a1 } = arcs[g];\n const mid = (a0 + a1) / 2;\n if (mode === \"tangential\") {\n const room = (a1 - a0 + pad * padScale * 0.8) * (nameR + 6) - 6;\n const text = ellipsize(names[g], room, nameFont, measure);\n if (!text) continue;\n nodes.push({\n kind: \"text\",\n x: cx + (nameR + 6) * Math.cos(mid),\n y: cy + (nameR + 6) * Math.sin(mid),\n text,\n font: nameFont,\n color,\n align: \"center\",\n baseline: \"middle\",\n rotate: upright(mid + Math.PI / 2),\n hit: g,\n also: ribbonsOf[g],\n });\n continue;\n }\n const ax = cx + nameR * Math.cos(mid);\n const ay = cy + nameR * Math.sin(mid);\n if (horizontal(mid)) {\n // above (12 o'clock) or below (6 o'clock): centered on the arc, else\n // extending away from the vertical axis, else toward it; the text must\n // clear the tick ring and the names already placed\n const y = ay + Math.sign(Math.sin(mid)) * (LABEL_FONT_SIZE / 2 + 1);\n const outward = Math.cos(mid) >= 0 ? \"left\" : \"right\";\n const aligns: (\"center\" | \"left\" | \"right\")[] = [\n \"center\",\n outward,\n outward === \"left\" ? \"right\" : \"left\",\n ];\n const clear = (pts: [number, number][]) =>\n pts.every(([x, py]) => Math.hypot(x - cx, py - cy) >= nameR + 2);\n for (const align of aligns) {\n const room =\n align === \"center\"\n ? 2 * Math.min(ax - area.x, area.x + area.width - ax) - 4\n : align === \"left\"\n ? area.x + area.width - ax - 2\n : ax - area.x - 2;\n const text = ellipsize(names[g], room, nameFont, measure);\n if (!text) continue;\n const w = measure(text, nameFont);\n const x0 =\n align === \"left\" ? ax : align === \"right\" ? ax - w : ax - w / 2;\n const pts = samples(x0, y, 1, 0, w);\n if (!clear(pts) || collides(pts)) continue;\n placed.push(pts);\n nodes.push({\n kind: \"text\",\n x: ax,\n y,\n text,\n font: nameFont,\n color,\n align,\n baseline: \"middle\",\n hit: g,\n also: ribbonsOf[g],\n });\n break;\n }\n continue;\n }\n const text = ellipsize(\n names[g],\n reach(mid) - nameR - 2,\n nameFont,\n measure,\n );\n if (!text) continue;\n const pts = samples(\n ax,\n ay,\n Math.cos(mid),\n Math.sin(mid),\n measure(text, nameFont),\n );\n if (collides(pts)) continue;\n placed.push(pts);\n const right = Math.cos(mid) >= 0;\n nodes.push({\n kind: \"text\",\n x: ax,\n y: ay,\n text,\n font: nameFont,\n color,\n align: right ? \"left\" : \"right\",\n baseline: \"middle\",\n rotate: right ? mid : mid + Math.PI,\n hit: g,\n also: ribbonsOf[g],\n });\n }\n }\n\n // items: groups around the circle, then the ribbons by source\n const items: ShapeItem[] = [];\n for (const g of order) {\n const value = goal.value[g];\n if (!(value > 0) || hidden.has(g)) continue;\n const percent = whole > 0 ? value / whole : 0;\n const mid = (arcs[g].a0 + arcs[g].a1) / 2;\n items.push({\n index: g,\n name: names[g],\n value,\n percent,\n share: c.percent(percent),\n color: css[g],\n x: cx + outer * Math.cos(mid),\n y: cy + outer * Math.sin(mid),\n rows: [\n { name: c.labels.value, value: c.format(value) },\n ...(!symmetric\n ? [\n { name: c.labels.outgoing, value: c.format(goal.out[g]) },\n { name: c.labels.incoming, value: c.format(goal.inc[g]) },\n ]\n : []),\n { name: c.labels.share, value: c.percent(percent) },\n ],\n });\n }\n // share of a ribbon: of all the flows (directed) or of all the pairs\n const ribbonSize = (s: number, t: number) =>\n directed ? target[s][t] : pair(target, s, t);\n let flowTotal = 0;\n for (let i = 0; i < n; i++)\n for (let j = directed ? 0 : i; j < n; j++) flowTotal += ribbonSize(i, j);\n const ribbonItems = ribbons\n .filter((r) => target[r.s][r.t] > 0 || target[r.t][r.s] > 0)\n .sort(\n (a, b) =>\n pos[a.s] - pos[b.s] || a.src.a0 - b.src.a0 || pos[a.t] - pos[b.t],\n );\n for (const r of ribbonItems) {\n const value = target[r.s][r.t];\n const reverse =\n r.s !== r.t && target[r.s][r.t] + target[r.t][r.s] > 0\n ? raw[r.t][r.s]\n : 0;\n const percent = flowTotal > 0 ? ribbonSize(r.s, r.t) / flowTotal : 0;\n const source = names[r.s];\n const tgt = names[r.t];\n const ms = (r.src.a0 + r.src.a1) / 2;\n const mt = (r.tgt.a0 + r.tgt.a1) / 2;\n // middle of the quadratic curve between the two ends\n const x =\n r.s === r.t\n ? cx + ribbonR * 0.7 * Math.cos(ms)\n : 0.25 * (cx + ribbonR * Math.cos(ms)) +\n 0.5 * cx +\n 0.25 * (cx + ribbonR * Math.cos(mt));\n const y =\n r.s === r.t\n ? cy + ribbonR * 0.7 * Math.sin(ms)\n : 0.25 * (cy + ribbonR * Math.sin(ms)) +\n 0.5 * cy +\n 0.25 * (cy + ribbonR * Math.sin(mt));\n items.push({\n index: r.index,\n name: r.s === r.t ? source : `${source} \\u2192 ${tgt}`,\n value,\n percent,\n share: c.percent(percent),\n color: css[r.s],\n x,\n y,\n rows: [\n { name: c.labels.value, value: c.format(value) },\n ...(r.s !== r.t && (directed ? reverse > 0 : !symmetric)\n ? [{ name: c.labels.reverse, value: c.format(reverse) }]\n : []),\n { name: c.labels.share, value: c.percent(percent) },\n ],\n event: { source, target: tgt, reverseValue: reverse },\n });\n }\n\n const enter = clamp(c.enter, 0, 1);\n return {\n nodes,\n items,\n dim: 0.25,\n empty: false,\n ...(enter < 1\n ? { enter: { alpha: enter, scale: 0.94 + 0.06 * enter, cx, cy } }\n : {}),\n };\n};\n"],"mappings":"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"}