@fusedashlabs/widgets 0.3.1 → 0.4.1

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 (409) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +1 -1
  3. package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts +2 -0
  4. package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts.map +1 -1
  5. package/dist/components/chart-renderer/element/ui9000-chart-renderer.js +23 -2
  6. package/dist/components/chart-renderer/element/ui9000-chart-renderer.js.map +1 -1
  7. package/dist/components/chart-renderer/lib/registry.d.ts.map +1 -1
  8. package/dist/components/chart-renderer/lib/registry.js +20 -5
  9. package/dist/components/chart-renderer/lib/registry.js.map +1 -1
  10. package/dist/components/chart-renderer/lib/types.d.ts +5 -0
  11. package/dist/components/chart-renderer/lib/types.d.ts.map +1 -1
  12. package/dist/components/donut-chart/element/ui9000-donut-chart.js +1 -1
  13. package/dist/components/donut-chart/element/ui9000-donut-chart.js.map +1 -1
  14. package/dist/components/kpi-widget/element/styles.d.ts.map +1 -1
  15. package/dist/components/kpi-widget/element/styles.js +268 -5
  16. package/dist/components/kpi-widget/element/styles.js.map +1 -1
  17. package/dist/components/kpi-widget/element/ui9000-kpi-widget.d.ts +10 -1
  18. package/dist/components/kpi-widget/element/ui9000-kpi-widget.d.ts.map +1 -1
  19. package/dist/components/kpi-widget/element/ui9000-kpi-widget.js +154 -27
  20. package/dist/components/kpi-widget/element/ui9000-kpi-widget.js.map +1 -1
  21. package/dist/components/kpi-widget/index.d.ts +1 -1
  22. package/dist/components/kpi-widget/index.d.ts.map +1 -1
  23. package/dist/components/kpi-widget/index.js +7 -4
  24. package/dist/components/kpi-widget/lib/extract.d.ts +5 -1
  25. package/dist/components/kpi-widget/lib/extract.d.ts.map +1 -1
  26. package/dist/components/kpi-widget/lib/extract.js +110 -34
  27. package/dist/components/kpi-widget/lib/extract.js.map +1 -1
  28. package/dist/components/kpi-widget/lib/format.d.ts +5 -0
  29. package/dist/components/kpi-widget/lib/format.d.ts.map +1 -1
  30. package/dist/components/kpi-widget/lib/format.js +10 -1
  31. package/dist/components/kpi-widget/lib/format.js.map +1 -1
  32. package/dist/components/kpi-widget/lib/grid.d.ts +5 -0
  33. package/dist/components/kpi-widget/lib/grid.d.ts.map +1 -1
  34. package/dist/components/kpi-widget/lib/grid.js +18 -0
  35. package/dist/components/kpi-widget/lib/grid.js.map +1 -1
  36. package/dist/components/kpi-widget/lib/index.d.ts +5 -5
  37. package/dist/components/kpi-widget/lib/index.d.ts.map +1 -1
  38. package/dist/components/kpi-widget/lib/normalize.d.ts +2 -0
  39. package/dist/components/kpi-widget/lib/normalize.d.ts.map +1 -1
  40. package/dist/components/kpi-widget/lib/normalize.js +73 -12
  41. package/dist/components/kpi-widget/lib/normalize.js.map +1 -1
  42. package/dist/components/kpi-widget/lib/types.d.ts +41 -0
  43. package/dist/components/kpi-widget/lib/types.d.ts.map +1 -1
  44. package/dist/components/kpi-widget/metadata.json.d.ts +1 -1
  45. package/dist/components/kpi-widget/metadata.json.js +1 -1
  46. package/dist/components/lollipop/element/styles.d.ts.map +1 -1
  47. package/dist/components/lollipop/element/styles.js +19 -1
  48. package/dist/components/lollipop/element/styles.js.map +1 -1
  49. package/dist/components/lollipop/element/ui9000-lollipop.d.ts +6 -1
  50. package/dist/components/lollipop/element/ui9000-lollipop.d.ts.map +1 -1
  51. package/dist/components/lollipop/element/ui9000-lollipop.js +68 -7
  52. package/dist/components/lollipop/element/ui9000-lollipop.js.map +1 -1
  53. package/dist/components/lollipop/index.d.ts +1 -1
  54. package/dist/components/lollipop/index.d.ts.map +1 -1
  55. package/dist/components/lollipop/index.js +2 -0
  56. package/dist/components/lollipop/index.js.map +1 -1
  57. package/dist/components/lollipop/lib/domain.d.ts +16 -1
  58. package/dist/components/lollipop/lib/domain.d.ts.map +1 -1
  59. package/dist/components/lollipop/lib/domain.js +56 -1
  60. package/dist/components/lollipop/lib/domain.js.map +1 -1
  61. package/dist/components/lollipop/lib/index.d.ts +3 -2
  62. package/dist/components/lollipop/lib/index.d.ts.map +1 -1
  63. package/dist/components/lollipop/lib/layout.d.ts +16 -0
  64. package/dist/components/lollipop/lib/layout.d.ts.map +1 -0
  65. package/dist/components/lollipop/lib/layout.js +16 -0
  66. package/dist/components/lollipop/lib/layout.js.map +1 -0
  67. package/dist/components/lollipop/lib/types.d.ts +5 -0
  68. package/dist/components/lollipop/lib/types.d.ts.map +1 -1
  69. package/dist/components/lollipop/metadata.json.d.ts +10 -0
  70. package/dist/components/lollipop/metadata.json.js +4 -1
  71. package/dist/components/lollipop/metadata.json.js.map +1 -1
  72. package/dist/components/lollipop/render/draw.d.ts +8 -1
  73. package/dist/components/lollipop/render/draw.d.ts.map +1 -1
  74. package/dist/components/lollipop/render/draw.js +155 -84
  75. package/dist/components/lollipop/render/draw.js.map +1 -1
  76. package/dist/components/map-chart/element/styles.d.ts +2 -0
  77. package/dist/components/map-chart/element/styles.d.ts.map +1 -0
  78. package/dist/components/map-chart/element/styles.js +372 -0
  79. package/dist/components/map-chart/element/styles.js.map +1 -0
  80. package/dist/components/map-chart/element/ui9000-map-chart.d.ts +54 -0
  81. package/dist/components/map-chart/element/ui9000-map-chart.d.ts.map +1 -0
  82. package/dist/components/map-chart/element/ui9000-map-chart.js +539 -0
  83. package/dist/components/map-chart/element/ui9000-map-chart.js.map +1 -0
  84. package/dist/components/map-chart/index.d.ts +5 -0
  85. package/dist/components/map-chart/index.d.ts.map +1 -0
  86. package/dist/components/map-chart/index.js +29 -0
  87. package/dist/components/map-chart/index.js.map +1 -0
  88. package/dist/components/map-chart/lib/constants.d.ts +34 -0
  89. package/dist/components/map-chart/lib/constants.d.ts.map +1 -0
  90. package/dist/components/map-chart/lib/constants.js +122 -0
  91. package/dist/components/map-chart/lib/constants.js.map +1 -0
  92. package/dist/components/map-chart/lib/domain.d.ts +12 -0
  93. package/dist/components/map-chart/lib/domain.d.ts.map +1 -0
  94. package/dist/components/map-chart/lib/domain.js +105 -0
  95. package/dist/components/map-chart/lib/domain.js.map +1 -0
  96. package/dist/components/map-chart/lib/format.d.ts +8 -0
  97. package/dist/components/map-chart/lib/format.d.ts.map +1 -0
  98. package/dist/components/map-chart/lib/format.js +45 -0
  99. package/dist/components/map-chart/lib/format.js.map +1 -0
  100. package/dist/components/map-chart/lib/geo-index.d.ts +7 -0
  101. package/dist/components/map-chart/lib/geo-index.d.ts.map +1 -0
  102. package/dist/components/map-chart/lib/geo-index.js +200 -0
  103. package/dist/components/map-chart/lib/geo-index.js.map +1 -0
  104. package/dist/components/map-chart/lib/geojson.d.ts +5 -0
  105. package/dist/components/map-chart/lib/geojson.d.ts.map +1 -0
  106. package/dist/components/map-chart/lib/geojson.js +47 -0
  107. package/dist/components/map-chart/lib/geojson.js.map +1 -0
  108. package/dist/components/map-chart/lib/index.d.ts +13 -0
  109. package/dist/components/map-chart/lib/index.d.ts.map +1 -0
  110. package/dist/components/map-chart/lib/join.d.ts +7 -0
  111. package/dist/components/map-chart/lib/join.d.ts.map +1 -0
  112. package/dist/components/map-chart/lib/join.js +156 -0
  113. package/dist/components/map-chart/lib/join.js.map +1 -0
  114. package/dist/components/map-chart/lib/legend.d.ts +45 -0
  115. package/dist/components/map-chart/lib/legend.d.ts.map +1 -0
  116. package/dist/components/map-chart/lib/legend.js +108 -0
  117. package/dist/components/map-chart/lib/legend.js.map +1 -0
  118. package/dist/components/map-chart/lib/normalize.d.ts +3 -0
  119. package/dist/components/map-chart/lib/normalize.d.ts.map +1 -0
  120. package/dist/components/map-chart/lib/normalize.js +177 -0
  121. package/dist/components/map-chart/lib/normalize.js.map +1 -0
  122. package/dist/components/map-chart/lib/pmtiles.d.ts +41 -0
  123. package/dist/components/map-chart/lib/pmtiles.d.ts.map +1 -0
  124. package/dist/components/map-chart/lib/pmtiles.js +112 -0
  125. package/dist/components/map-chart/lib/pmtiles.js.map +1 -0
  126. package/dist/components/map-chart/lib/types.d.ts +128 -0
  127. package/dist/components/map-chart/lib/types.d.ts.map +1 -0
  128. package/dist/components/map-chart/metadata.json.d.ts +83 -0
  129. package/dist/components/map-chart/metadata.json.js +42 -0
  130. package/dist/components/map-chart/metadata.json.js.map +1 -0
  131. package/dist/components/map-chart/render/draw.d.ts +24 -0
  132. package/dist/components/map-chart/render/draw.d.ts.map +1 -0
  133. package/dist/components/map-chart/render/draw.js +456 -0
  134. package/dist/components/map-chart/render/draw.js.map +1 -0
  135. package/dist/components/map-chart/render/index.d.ts +2 -0
  136. package/dist/components/map-chart/render/index.d.ts.map +1 -0
  137. package/dist/components/matrix-chart/element/styles.d.ts +2 -0
  138. package/dist/components/matrix-chart/element/styles.d.ts.map +1 -0
  139. package/dist/components/matrix-chart/element/styles.js +97 -0
  140. package/dist/components/matrix-chart/element/styles.js.map +1 -0
  141. package/dist/components/matrix-chart/element/ui9000-matrix-chart.d.ts +39 -0
  142. package/dist/components/matrix-chart/element/ui9000-matrix-chart.d.ts.map +1 -0
  143. package/dist/components/matrix-chart/element/ui9000-matrix-chart.js +238 -0
  144. package/dist/components/matrix-chart/element/ui9000-matrix-chart.js.map +1 -0
  145. package/dist/components/matrix-chart/index.d.ts +5 -0
  146. package/dist/components/matrix-chart/index.d.ts.map +1 -0
  147. package/dist/components/matrix-chart/index.js +20 -0
  148. package/dist/components/matrix-chart/lib/domain.d.ts +7 -0
  149. package/dist/components/matrix-chart/lib/domain.d.ts.map +1 -0
  150. package/dist/components/matrix-chart/lib/domain.js +58 -0
  151. package/dist/components/matrix-chart/lib/domain.js.map +1 -0
  152. package/dist/components/matrix-chart/lib/format.d.ts +5 -0
  153. package/dist/components/matrix-chart/lib/format.d.ts.map +1 -0
  154. package/dist/components/matrix-chart/lib/format.js +16 -0
  155. package/dist/components/matrix-chart/lib/format.js.map +1 -0
  156. package/dist/components/matrix-chart/lib/index.d.ts +5 -0
  157. package/dist/components/matrix-chart/lib/index.d.ts.map +1 -0
  158. package/dist/components/matrix-chart/lib/normalize.d.ts +5 -0
  159. package/dist/components/matrix-chart/lib/normalize.d.ts.map +1 -0
  160. package/dist/components/matrix-chart/lib/normalize.js +165 -0
  161. package/dist/components/matrix-chart/lib/normalize.js.map +1 -0
  162. package/dist/components/matrix-chart/lib/types.d.ts +33 -0
  163. package/dist/components/matrix-chart/lib/types.d.ts.map +1 -0
  164. package/dist/components/matrix-chart/metadata.json.d.ts +110 -0
  165. package/dist/components/matrix-chart/metadata.json.js +42 -0
  166. package/dist/components/matrix-chart/metadata.json.js.map +1 -0
  167. package/dist/components/matrix-chart/render/draw.d.ts +63 -0
  168. package/dist/components/matrix-chart/render/draw.d.ts.map +1 -0
  169. package/dist/components/matrix-chart/render/draw.js +225 -0
  170. package/dist/components/matrix-chart/render/draw.js.map +1 -0
  171. package/dist/components/matrix-chart/render/index.d.ts +2 -0
  172. package/dist/components/matrix-chart/render/index.d.ts.map +1 -0
  173. package/dist/components/network-graph/element/styles.d.ts.map +1 -1
  174. package/dist/components/network-graph/element/styles.js +177 -57
  175. package/dist/components/network-graph/element/styles.js.map +1 -1
  176. package/dist/components/network-graph/element/ui9000-network-graph.d.ts +4 -0
  177. package/dist/components/network-graph/element/ui9000-network-graph.d.ts.map +1 -1
  178. package/dist/components/network-graph/element/ui9000-network-graph.js +116 -39
  179. package/dist/components/network-graph/element/ui9000-network-graph.js.map +1 -1
  180. package/dist/components/network-graph/lib/domain.d.ts +2 -2
  181. package/dist/components/network-graph/lib/domain.js.map +1 -1
  182. package/dist/components/network-graph/lib/index.d.ts +1 -0
  183. package/dist/components/network-graph/lib/index.d.ts.map +1 -1
  184. package/dist/components/network-graph/lib/legend.d.ts +15 -0
  185. package/dist/components/network-graph/lib/legend.d.ts.map +1 -0
  186. package/dist/components/network-graph/lib/legend.js +35 -0
  187. package/dist/components/network-graph/lib/legend.js.map +1 -0
  188. package/dist/components/network-graph/render/draw.d.ts +4 -1
  189. package/dist/components/network-graph/render/draw.d.ts.map +1 -1
  190. package/dist/components/network-graph/render/draw.js +34 -9
  191. package/dist/components/network-graph/render/draw.js.map +1 -1
  192. package/dist/components/partial-dependence-chart/element/styles.d.ts +2 -0
  193. package/dist/components/partial-dependence-chart/element/styles.d.ts.map +1 -0
  194. package/dist/components/partial-dependence-chart/element/styles.js +48 -0
  195. package/dist/components/partial-dependence-chart/element/styles.js.map +1 -0
  196. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.d.ts +30 -0
  197. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.d.ts.map +1 -0
  198. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.js +163 -0
  199. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.js.map +1 -0
  200. package/dist/components/partial-dependence-chart/index.d.ts +5 -0
  201. package/dist/components/partial-dependence-chart/index.d.ts.map +1 -0
  202. package/dist/components/partial-dependence-chart/index.js +18 -0
  203. package/dist/components/partial-dependence-chart/index.js.map +1 -0
  204. package/dist/components/partial-dependence-chart/lib/domain.d.ts +6 -0
  205. package/dist/components/partial-dependence-chart/lib/domain.d.ts.map +1 -0
  206. package/dist/components/partial-dependence-chart/lib/domain.js +16 -0
  207. package/dist/components/partial-dependence-chart/lib/domain.js.map +1 -0
  208. package/dist/components/partial-dependence-chart/lib/index.d.ts +5 -0
  209. package/dist/components/partial-dependence-chart/lib/index.d.ts.map +1 -0
  210. package/dist/components/partial-dependence-chart/lib/normalize.d.ts +4 -0
  211. package/dist/components/partial-dependence-chart/lib/normalize.d.ts.map +1 -0
  212. package/dist/components/partial-dependence-chart/lib/normalize.js +167 -0
  213. package/dist/components/partial-dependence-chart/lib/normalize.js.map +1 -0
  214. package/dist/components/partial-dependence-chart/lib/series.d.ts +15 -0
  215. package/dist/components/partial-dependence-chart/lib/series.d.ts.map +1 -0
  216. package/dist/components/partial-dependence-chart/lib/series.js +63 -0
  217. package/dist/components/partial-dependence-chart/lib/series.js.map +1 -0
  218. package/dist/components/partial-dependence-chart/lib/types.d.ts +50 -0
  219. package/dist/components/partial-dependence-chart/lib/types.d.ts.map +1 -0
  220. package/dist/components/partial-dependence-chart/metadata.json.d.ts +80 -0
  221. package/dist/components/partial-dependence-chart/metadata.json.js +42 -0
  222. package/dist/components/partial-dependence-chart/metadata.json.js.map +1 -0
  223. package/dist/components/partial-dependence-chart/render/draw.d.ts +34 -0
  224. package/dist/components/partial-dependence-chart/render/draw.d.ts.map +1 -0
  225. package/dist/components/partial-dependence-chart/render/draw.js +95 -0
  226. package/dist/components/partial-dependence-chart/render/draw.js.map +1 -0
  227. package/dist/components/partial-dependence-chart/render/index.d.ts +2 -0
  228. package/dist/components/partial-dependence-chart/render/index.d.ts.map +1 -0
  229. package/dist/components/pie-chart/element/styles.d.ts.map +1 -1
  230. package/dist/components/pie-chart/element/styles.js +34 -1
  231. package/dist/components/pie-chart/element/styles.js.map +1 -1
  232. package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts +0 -2
  233. package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts.map +1 -1
  234. package/dist/components/pie-chart/element/ui9000-pie-chart.js +2 -8
  235. package/dist/components/pie-chart/element/ui9000-pie-chart.js.map +1 -1
  236. package/dist/components/pie-chart/metadata.json.d.ts +1 -7
  237. package/dist/components/pie-chart/metadata.json.js +2 -2
  238. package/dist/components/polar-area-chart/element/styles.d.ts +1 -1
  239. package/dist/components/polar-area-chart/element/styles.d.ts.map +1 -1
  240. package/dist/components/{donut-group-chart → polar-area-chart}/element/styles.js +9 -27
  241. package/dist/components/polar-area-chart/element/styles.js.map +1 -0
  242. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.d.ts.map +1 -1
  243. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js +4 -3
  244. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js.map +1 -1
  245. package/dist/components/polar-area-chart/index.d.ts +1 -1
  246. package/dist/components/polar-area-chart/index.d.ts.map +1 -1
  247. package/dist/components/polar-area-chart/index.js +2 -1
  248. package/dist/components/polar-area-chart/lib/domain.d.ts +8 -0
  249. package/dist/components/polar-area-chart/lib/domain.d.ts.map +1 -1
  250. package/dist/components/polar-area-chart/lib/domain.js +20 -0
  251. package/dist/components/polar-area-chart/lib/domain.js.map +1 -1
  252. package/dist/components/polar-area-chart/lib/index.d.ts +1 -1
  253. package/dist/components/polar-area-chart/lib/index.d.ts.map +1 -1
  254. package/dist/components/polar-area-chart/lib/normalize.d.ts.map +1 -1
  255. package/dist/components/polar-area-chart/lib/normalize.js +72 -6
  256. package/dist/components/polar-area-chart/lib/normalize.js.map +1 -1
  257. package/dist/components/polar-area-chart/lib/types.d.ts +6 -1
  258. package/dist/components/polar-area-chart/lib/types.d.ts.map +1 -1
  259. package/dist/components/polar-area-chart/metadata.json.d.ts +1 -1
  260. package/dist/components/polar-area-chart/metadata.json.js +1 -1
  261. package/dist/components/polar-area-chart/render/draw.d.ts.map +1 -1
  262. package/dist/components/polar-area-chart/render/draw.js +2 -2
  263. package/dist/components/polar-area-chart/render/draw.js.map +1 -1
  264. package/dist/components/punchcard-chart/metadata.json.d.ts +1 -1
  265. package/dist/components/punchcard-chart/metadata.json.js +1 -1
  266. package/dist/components/sankey-chart/element/styles.d.ts.map +1 -1
  267. package/dist/components/sankey-chart/element/styles.js +7 -27
  268. package/dist/components/sankey-chart/element/styles.js.map +1 -1
  269. package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts +5 -5
  270. package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts.map +1 -1
  271. package/dist/components/sankey-chart/element/ui9000-sankey-chart.js +37 -35
  272. package/dist/components/sankey-chart/element/ui9000-sankey-chart.js.map +1 -1
  273. package/dist/components/treemap-chart/element/styles.d.ts +2 -0
  274. package/dist/components/treemap-chart/element/styles.d.ts.map +1 -0
  275. package/dist/components/treemap-chart/element/styles.js +141 -0
  276. package/dist/components/treemap-chart/element/styles.js.map +1 -0
  277. package/dist/components/treemap-chart/element/ui9000-treemap-chart.d.ts +35 -0
  278. package/dist/components/treemap-chart/element/ui9000-treemap-chart.d.ts.map +1 -0
  279. package/dist/components/treemap-chart/element/ui9000-treemap-chart.js +177 -0
  280. package/dist/components/treemap-chart/element/ui9000-treemap-chart.js.map +1 -0
  281. package/dist/components/treemap-chart/index.d.ts +5 -0
  282. package/dist/components/treemap-chart/index.d.ts.map +1 -0
  283. package/dist/components/treemap-chart/index.js +22 -0
  284. package/dist/components/treemap-chart/index.js.map +1 -0
  285. package/dist/components/treemap-chart/lib/color.d.ts +25 -0
  286. package/dist/components/treemap-chart/lib/color.d.ts.map +1 -0
  287. package/dist/components/treemap-chart/lib/color.js +67 -0
  288. package/dist/components/treemap-chart/lib/color.js.map +1 -0
  289. package/dist/components/treemap-chart/lib/format.d.ts +7 -0
  290. package/dist/components/treemap-chart/lib/format.d.ts.map +1 -0
  291. package/dist/components/treemap-chart/lib/format.js +9 -0
  292. package/dist/components/treemap-chart/lib/format.js.map +1 -0
  293. package/dist/components/treemap-chart/lib/index.d.ts +6 -0
  294. package/dist/components/treemap-chart/lib/index.d.ts.map +1 -0
  295. package/dist/components/treemap-chart/lib/layout.d.ts +18 -0
  296. package/dist/components/treemap-chart/lib/layout.d.ts.map +1 -0
  297. package/dist/components/treemap-chart/lib/layout.js +31 -0
  298. package/dist/components/treemap-chart/lib/layout.js.map +1 -0
  299. package/dist/components/treemap-chart/lib/normalize.d.ts +4 -0
  300. package/dist/components/treemap-chart/lib/normalize.d.ts.map +1 -0
  301. package/dist/components/treemap-chart/lib/normalize.js +182 -0
  302. package/dist/components/treemap-chart/lib/normalize.js.map +1 -0
  303. package/dist/components/treemap-chart/lib/types.d.ts +63 -0
  304. package/dist/components/treemap-chart/lib/types.d.ts.map +1 -0
  305. package/dist/components/treemap-chart/metadata.json.d.ts +126 -0
  306. package/dist/components/treemap-chart/metadata.json.js +45 -0
  307. package/dist/components/treemap-chart/render/draw.d.ts +24 -0
  308. package/dist/components/treemap-chart/render/draw.d.ts.map +1 -0
  309. package/dist/components/treemap-chart/render/draw.js +124 -0
  310. package/dist/components/treemap-chart/render/draw.js.map +1 -0
  311. package/dist/components/treemap-chart/render/index.d.ts +2 -0
  312. package/dist/components/treemap-chart/render/index.d.ts.map +1 -0
  313. package/dist/element/chart-legend-render.d.ts +5 -0
  314. package/dist/element/chart-legend-render.d.ts.map +1 -1
  315. package/dist/element/chart-legend-render.js +19 -1
  316. package/dist/element/chart-legend-render.js.map +1 -1
  317. package/dist/element/chart-shell-styles.d.ts.map +1 -1
  318. package/dist/element/chart-shell-styles.js +35 -0
  319. package/dist/element/chart-shell-styles.js.map +1 -1
  320. package/dist/index.d.ts +11 -5
  321. package/dist/index.d.ts.map +1 -1
  322. package/dist/index.js +91 -42
  323. package/dist/index.js.map +1 -1
  324. package/dist/lazy/index.d.ts +5 -2
  325. package/dist/lazy/index.d.ts.map +1 -1
  326. package/dist/lazy/index.js +32 -8
  327. package/dist/lazy/index.js.map +1 -1
  328. package/dist/lazy/map-chart.d.ts +4 -0
  329. package/dist/lazy/map-chart.d.ts.map +1 -0
  330. package/dist/lazy/map-chart.js +5 -0
  331. package/dist/lazy/map-chart.js.map +1 -0
  332. package/dist/lazy/matrix-chart.d.ts +4 -0
  333. package/dist/lazy/matrix-chart.d.ts.map +1 -0
  334. package/dist/lazy/matrix-chart.js +5 -0
  335. package/dist/lazy/matrix-chart.js.map +1 -0
  336. package/dist/lazy/partial-dependence-chart.d.ts +4 -0
  337. package/dist/lazy/partial-dependence-chart.d.ts.map +1 -0
  338. package/dist/lazy/partial-dependence-chart.js +5 -0
  339. package/dist/lazy/partial-dependence-chart.js.map +1 -0
  340. package/dist/lazy/treemap-chart.d.ts +4 -0
  341. package/dist/lazy/treemap-chart.d.ts.map +1 -0
  342. package/dist/lazy/treemap-chart.js +5 -0
  343. package/dist/lazy/treemap-chart.js.map +1 -0
  344. package/dist/utils/axis-units.d.ts +15 -0
  345. package/dist/utils/axis-units.d.ts.map +1 -0
  346. package/dist/utils/axis-units.js +27 -0
  347. package/dist/utils/axis-units.js.map +1 -0
  348. package/dist/utils/chart-helpers.d.ts +6 -6
  349. package/dist/utils/chart-helpers.d.ts.map +1 -1
  350. package/dist/utils/chart-helpers.js +31 -15
  351. package/dist/utils/chart-helpers.js.map +1 -1
  352. package/dist/utils/format-text.d.ts +5 -0
  353. package/dist/utils/format-text.d.ts.map +1 -1
  354. package/dist/utils/format-text.js +7 -0
  355. package/dist/utils/format-text.js.map +1 -1
  356. package/dist/utils/fuse-palette.d.ts +12 -0
  357. package/dist/utils/fuse-palette.d.ts.map +1 -1
  358. package/dist/utils/fuse-palette.js +23 -1
  359. package/dist/utils/fuse-palette.js.map +1 -1
  360. package/dist/utils/fuse-widget.d.ts +13 -4
  361. package/dist/utils/fuse-widget.d.ts.map +1 -1
  362. package/dist/utils/fuse-widget.js.map +1 -1
  363. package/dist/utils/fusedash-visual.d.ts +77 -52
  364. package/dist/utils/fusedash-visual.d.ts.map +1 -1
  365. package/dist/utils/fusedash-visual.js +55 -29
  366. package/dist/utils/fusedash-visual.js.map +1 -1
  367. package/package.json +48 -12
  368. package/dist/components/donut-group-chart/element/styles.d.ts +0 -2
  369. package/dist/components/donut-group-chart/element/styles.d.ts.map +0 -1
  370. package/dist/components/donut-group-chart/element/styles.js.map +0 -1
  371. package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.d.ts +0 -34
  372. package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.d.ts.map +0 -1
  373. package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.js +0 -169
  374. package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.js.map +0 -1
  375. package/dist/components/donut-group-chart/index.d.ts +0 -5
  376. package/dist/components/donut-group-chart/index.d.ts.map +0 -1
  377. package/dist/components/donut-group-chart/index.js +0 -23
  378. package/dist/components/donut-group-chart/lib/domain.d.ts +0 -39
  379. package/dist/components/donut-group-chart/lib/domain.d.ts.map +0 -1
  380. package/dist/components/donut-group-chart/lib/domain.js +0 -51
  381. package/dist/components/donut-group-chart/lib/domain.js.map +0 -1
  382. package/dist/components/donut-group-chart/lib/format.d.ts +0 -7
  383. package/dist/components/donut-group-chart/lib/format.d.ts.map +0 -1
  384. package/dist/components/donut-group-chart/lib/format.js +0 -21
  385. package/dist/components/donut-group-chart/lib/format.js.map +0 -1
  386. package/dist/components/donut-group-chart/lib/index.d.ts +0 -5
  387. package/dist/components/donut-group-chart/lib/index.d.ts.map +0 -1
  388. package/dist/components/donut-group-chart/lib/normalize.d.ts +0 -14
  389. package/dist/components/donut-group-chart/lib/normalize.d.ts.map +0 -1
  390. package/dist/components/donut-group-chart/lib/normalize.js +0 -98
  391. package/dist/components/donut-group-chart/lib/normalize.js.map +0 -1
  392. package/dist/components/donut-group-chart/lib/types.d.ts +0 -49
  393. package/dist/components/donut-group-chart/lib/types.d.ts.map +0 -1
  394. package/dist/components/donut-group-chart/metadata.json.d.ts +0 -113
  395. package/dist/components/donut-group-chart/metadata.json.js +0 -45
  396. package/dist/components/donut-group-chart/render/draw.d.ts +0 -44
  397. package/dist/components/donut-group-chart/render/draw.d.ts.map +0 -1
  398. package/dist/components/donut-group-chart/render/draw.js +0 -194
  399. package/dist/components/donut-group-chart/render/draw.js.map +0 -1
  400. package/dist/components/donut-group-chart/render/index.d.ts +0 -2
  401. package/dist/components/donut-group-chart/render/index.d.ts.map +0 -1
  402. package/dist/components/donut-group-chart/tests/fixtures.d.ts +0 -33
  403. package/dist/components/donut-group-chart/tests/fixtures.d.ts.map +0 -1
  404. package/dist/lazy/donut-group-chart.d.ts +0 -4
  405. package/dist/lazy/donut-group-chart.d.ts.map +0 -1
  406. package/dist/lazy/donut-group-chart.js +0 -5
  407. package/dist/lazy/donut-group-chart.js.map +0 -1
  408. /package/dist/components/{donut-group-chart → matrix-chart}/index.js.map +0 -0
  409. /package/dist/components/{donut-group-chart → treemap-chart}/metadata.json.js.map +0 -0
@@ -1,98 +0,0 @@
1
- const STATUSES = ["positive", "negative", "neutral"];
2
- function toStatus(value) {
3
- return STATUSES.includes(value) ? value : void 0;
4
- }
5
- function toNumber(value) {
6
- if (value == null || value === "") return void 0;
7
- const n = Number(value);
8
- return Number.isFinite(n) ? n : void 0;
9
- }
10
- function toText(value) {
11
- if (value == null) return void 0;
12
- const text = String(value).trim();
13
- return text.length ? text : void 0;
14
- }
15
- function rowLabel(row, fallback) {
16
- return toText(row.label) ?? toText(row.name) ?? toText(row.x) ?? toText(row.category) ?? fallback;
17
- }
18
- function rowValue(row) {
19
- return toNumber(row.value) ?? toNumber(row.y) ?? toNumber(row.count);
20
- }
21
- function rowMax(row) {
22
- const max = toNumber(row.max) ?? toNumber(row.maximalValue) ?? toNumber(row.total);
23
- return max != null && max > 0 ? max : void 0;
24
- }
25
- function cleanSlices(rows) {
26
- return rows.map((row) => ({ row, value: rowValue(row) })).filter((entry) => entry.value != null).map(({ row, value }, i) => ({
27
- label: rowLabel(row, `Slice ${i + 1}`),
28
- value,
29
- color: toText(row.color)
30
- }));
31
- }
32
- function gaugeFromRow(row, index) {
33
- const value = rowValue(row);
34
- if (value == null) return null;
35
- const label = rowLabel(row, `Item ${index + 1}`);
36
- return {
37
- id: toText(row.id) ?? label,
38
- label,
39
- value,
40
- max: rowMax(row),
41
- statusLabel: toText(row.statusLabel) ?? toText(row.badge),
42
- status: toStatus(row.status),
43
- color: toText(row.color)
44
- };
45
- }
46
- function fromItems(items) {
47
- return items.map((item, i) => {
48
- const value = toNumber(item.value);
49
- const slices = Array.isArray(item.slices) ? cleanSlices(item.slices) : [];
50
- const total = slices.reduce((sum, s) => sum + s.value, 0);
51
- if (value == null && !slices.length) return null;
52
- const label = toText(item.label) ?? toText(item.id) ?? `Item ${i + 1}`;
53
- return {
54
- id: toText(item.id) ?? label,
55
- label,
56
- value: value ?? total,
57
- max: item.max != null && item.max > 0 ? item.max : void 0,
58
- statusLabel: toText(item.statusLabel),
59
- status: toStatus(item.status),
60
- color: toText(item.color),
61
- slices: slices.length ? slices : void 0
62
- };
63
- }).filter((item) => item != null);
64
- }
65
- function normalizeDonutGroupData(input) {
66
- var _a, _b;
67
- if (!input) return [];
68
- if (Array.isArray(input)) {
69
- if (!input.length) return [];
70
- if (Array.isArray(input[0])) {
71
- return input.map((rows, i) => {
72
- const slices = cleanSlices(Array.isArray(rows) ? rows : []);
73
- if (!slices.length) return null;
74
- if (slices.length === 1) return gaugeFromRow(rows[0], i);
75
- const first2 = rows[0] ?? {};
76
- const label = rowLabel(first2, `Item ${i + 1}`);
77
- return {
78
- id: toText(first2.id) ?? label,
79
- label,
80
- value: slices.reduce((sum, s) => sum + s.value, 0),
81
- slices
82
- };
83
- }).filter((item) => item != null);
84
- }
85
- const first = input[0];
86
- if (Array.isArray(first.slices)) return fromItems(input);
87
- return input.map((row, i) => gaugeFromRow(row, i)).filter((item) => item != null);
88
- }
89
- if ((_a = input.items) == null ? void 0 : _a.length) return fromItems(input.items);
90
- if ((_b = input.points) == null ? void 0 : _b.length) {
91
- return input.points.map((row, i) => gaugeFromRow(row, i)).filter((item) => item != null);
92
- }
93
- return [];
94
- }
95
- export {
96
- normalizeDonutGroupData
97
- };
98
- //# sourceMappingURL=normalize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize.js","sources":["../../../../src/components/donut-group-chart/lib/normalize.ts"],"sourcesContent":["import type { DataPoint } from '../../../types/index.js';\nimport type {\n DonutGauge,\n DonutGroupChartData,\n DonutSlice,\n DonutStatus,\n} from './types.js';\n\n/** Loose row shape accepted from chat payloads and FuseDash widget data. */\ntype RawRow = Record<string, unknown>;\n\nconst STATUSES: DonutStatus[] = ['positive', 'negative', 'neutral'];\n\nfunction toStatus(value: unknown): DonutStatus | undefined {\n return STATUSES.includes(value as DonutStatus) ? (value as DonutStatus) : undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (value == null || value === '') return undefined;\n const n = Number(value);\n return Number.isFinite(n) ? n : undefined;\n}\n\nfunction toText(value: unknown): string | undefined {\n if (value == null) return undefined;\n const text = String(value).trim();\n return text.length ? text : undefined;\n}\n\n/** FuseDash `arrangeBy` / `groupBy` / chat `label` all land in the same slot. */\nfunction rowLabel(row: RawRow, fallback: string): string {\n return (\n toText(row.label) ??\n toText(row.name) ??\n toText(row.x) ??\n toText(row.category) ??\n fallback\n );\n}\n\n/** FuseDash `display` — the measured column. */\nfunction rowValue(row: RawRow): number | undefined {\n return toNumber(row.value) ?? toNumber(row.y) ?? toNumber(row.count);\n}\n\nfunction rowMax(row: RawRow): number | undefined {\n const max = toNumber(row.max) ?? toNumber(row.maximalValue) ?? toNumber(row.total);\n return max != null && max > 0 ? max : undefined;\n}\n\nfunction cleanSlices(rows: RawRow[]): DonutSlice[] {\n return rows\n .map((row) => ({ row, value: rowValue(row) }))\n .filter((entry): entry is { row: RawRow; value: number } => entry.value != null)\n .map(({ row, value }, i) => ({\n label: rowLabel(row, `Slice ${i + 1}`),\n value,\n color: toText(row.color),\n }));\n}\n\nfunction gaugeFromRow(row: RawRow, index: number): DonutGauge | null {\n const value = rowValue(row);\n if (value == null) return null;\n const label = rowLabel(row, `Item ${index + 1}`);\n return {\n id: toText(row.id) ?? label,\n label,\n value,\n max: rowMax(row),\n statusLabel: toText(row.statusLabel) ?? toText(row.badge),\n status: toStatus(row.status),\n color: toText(row.color),\n };\n}\n\n/** Already-shaped items still get their slices and ids cleaned up. */\nfunction fromItems(items: DonutGauge[]): DonutGauge[] {\n return items\n .map((item, i): DonutGauge | null => {\n const value = toNumber(item.value);\n const slices = Array.isArray(item.slices)\n ? cleanSlices(item.slices as unknown as RawRow[])\n : [];\n // a value is optional when slices carry it — the gauge then shows the sum\n const total = slices.reduce((sum, s) => sum + s.value, 0);\n if (value == null && !slices.length) return null;\n const label = toText(item.label) ?? toText(item.id) ?? `Item ${i + 1}`;\n return {\n id: toText(item.id) ?? label,\n label,\n value: value ?? total,\n max: item.max != null && item.max > 0 ? item.max : undefined,\n statusLabel: toText(item.statusLabel),\n status: toStatus(item.status),\n color: toText(item.color),\n slices: slices.length ? slices : undefined,\n };\n })\n .filter((item): item is DonutGauge => item != null);\n}\n\n/**\n * Normalize chat payloads and FuseDash widget data into one donut per entry.\n *\n * Mirrors how FuseDash `DonutGroupChart` feeds `DonutGroupItem`: a group with a\n * single row is a gauge against `maximalValue`, a group with several rows is a\n * breakdown donut over those rows.\n */\nexport function normalizeDonutGroupData(\n input:\n | DataPoint[]\n | DonutGauge[]\n | DonutGroupChartData\n | RawRow[]\n | RawRow[][]\n | null\n | undefined,\n): DonutGauge[] {\n if (!input) return [];\n\n if (Array.isArray(input)) {\n if (!input.length) return [];\n\n // FuseDash shape: one array of rows per donut\n if (Array.isArray(input[0])) {\n return (input as RawRow[][])\n .map((rows, i): DonutGauge | null => {\n const slices = cleanSlices(Array.isArray(rows) ? rows : []);\n if (!slices.length) return null;\n if (slices.length === 1) return gaugeFromRow(rows[0], i);\n const first = rows[0] ?? {};\n const label = rowLabel(first, `Item ${i + 1}`);\n return {\n id: toText(first.id) ?? label,\n label,\n value: slices.reduce((sum, s) => sum + s.value, 0),\n slices,\n };\n })\n .filter((item): item is DonutGauge => item != null);\n }\n\n const first = input[0] as RawRow;\n if (Array.isArray(first.slices)) return fromItems(input as DonutGauge[]);\n return (input as RawRow[])\n .map((row, i) => gaugeFromRow(row, i))\n .filter((item): item is DonutGauge => item != null);\n }\n\n if (input.items?.length) return fromItems(input.items);\n\n if (input.points?.length) {\n return (input.points as unknown as RawRow[])\n .map((row, i) => gaugeFromRow(row, i))\n .filter((item): item is DonutGauge => item != null);\n }\n\n return [];\n}\n"],"names":["first"],"mappings":"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"}
@@ -1,49 +0,0 @@
1
- /** One wedge of a breakdown donut (FuseDash passes these as the group's rows). */
2
- export interface DonutSlice {
3
- label: string;
4
- value: number;
5
- /** Optional slice color; falls back to the styleId palette */
6
- color?: string;
7
- }
8
- /** FuseDash `status` — drives the badge colors under the value. */
9
- export type DonutStatus = 'positive' | 'negative' | 'neutral';
10
- /**
11
- * One donut in the group. With no `slices` it renders as a gauge: the value arc
12
- * over a neutral track that runs to `max` (FuseDash `maximalValue`).
13
- */
14
- export interface DonutGauge {
15
- /** Stable id for tooltip / hover payloads */
16
- id: string;
17
- /** Caption under the value (FuseDash `groupBy` value) */
18
- label: string;
19
- /** The measured value (FuseDash `display`) */
20
- value: number;
21
- /** Gauge full scale — FuseDash `maximalValue`, defaults to 100 */
22
- max?: number;
23
- /** Text of the badge between value and label (FuseDash `statusLabel`) */
24
- statusLabel?: string;
25
- status?: DonutStatus;
26
- /** Optional arc color; falls back to the styleId palette */
27
- color?: string;
28
- /** More than one slice renders a breakdown donut instead of a gauge */
29
- slices?: DonutSlice[];
30
- }
31
- export interface DonutGroupChartData {
32
- /** The donuts to draw, left to right */
33
- items?: DonutGauge[];
34
- /** Chat shorthand — one gauge per point, same shape as the other charts */
35
- points?: {
36
- x: string;
37
- y: number;
38
- }[];
39
- }
40
- /** One hovered arc, handed to the element so it can render the tooltip. */
41
- export interface DonutHoverEntry {
42
- itemId: string;
43
- label: string;
44
- color: string;
45
- value: number;
46
- /** Share of the donut this arc covers, 0–1 */
47
- ratio: number;
48
- }
49
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/donut-group-chart/lib/types.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,2EAA2E;IAC3E,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrC;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -1,113 +0,0 @@
1
- declare const _default: {
2
- "id": "donut-group-chart",
3
- "tag": "ui9000-donut-group-chart",
4
- "title": "Donut Group Chart",
5
- "description": "Chat-optimized donut group rewritten in D3 (Visx → D3). A row of KPI donuts: each entry is a gauge filled to value / max over a neutral track, or a breakdown donut when the entry carries several slices. No Redux.",
6
- "chartTypeKeys": ["donutGroupChart"],
7
- "chartTypeMap": {
8
- "donutGroupChart": { "showValue": true, "showStatus": true, "showLabel": true }
9
- },
10
- "source": "client/libs/shared/components/src/Widgets/DonutGroupChart/",
11
- "stack": "d3",
12
- "lazyImport": "@ui9000/widgets/lazy/donut-group-chart",
13
- "entry": "@ui9000/widgets/donut-group-chart",
14
- "usageConditions": {
15
- "host": "mcp-chat",
16
- "notFor": "fusedash-editor",
17
- "mapsExcluded": true,
18
- "context": "theme, scale, styleId and mode come from WidgetContext CSS custom properties, not props"
19
- },
20
- "allowedActions": ["hover", "resize"],
21
- "propsSchema": {
22
- "$schema": "https://json-schema.org/draft/2020-12/schema",
23
- "type": "object",
24
- "properties": {
25
- "data": {
26
- "oneOf": [
27
- {
28
- "type": "array",
29
- "items": {
30
- "type": "object",
31
- "required": ["label", "value"],
32
- "properties": {
33
- "label": { "type": "string" },
34
- "value": { "type": "number" }
35
- }
36
- }
37
- },
38
- {
39
- "type": "array",
40
- "items": {
41
- "type": "object",
42
- "required": ["label", "value"],
43
- "properties": {
44
- "id": { "type": "string" },
45
- "label": { "type": "string" },
46
- "value": { "type": "number" },
47
- "max": {
48
- "type": "number",
49
- "description": "FuseDash `maximalValue` — the gauge's full scale."
50
- },
51
- "statusLabel": { "type": "string" },
52
- "status": {
53
- "type": "string",
54
- "enum": ["positive", "negative", "neutral"]
55
- },
56
- "color": { "type": "string" },
57
- "slices": {
58
- "type": "array",
59
- "description": "More than one slice renders a breakdown donut instead of a gauge.",
60
- "items": {
61
- "type": "object",
62
- "required": ["label", "value"],
63
- "properties": {
64
- "label": { "type": "string" },
65
- "value": { "type": "number" },
66
- "color": { "type": "string" }
67
- }
68
- }
69
- }
70
- }
71
- }
72
- },
73
- {
74
- "type": "object",
75
- "properties": {
76
- "items": { "type": "array", "items": { "type": "object" } },
77
- "points": {
78
- "type": "array",
79
- "items": {
80
- "type": "object",
81
- "required": ["x", "y"],
82
- "properties": {
83
- "x": { "type": "string" },
84
- "y": { "type": "number" }
85
- }
86
- }
87
- }
88
- }
89
- }
90
- ]
91
- },
92
- "scale": {
93
- "type": "string",
94
- "enum": ["compact", "default", "comfortable"],
95
- "default": "default"
96
- },
97
- "max": {
98
- "type": "number",
99
- "default": 100,
100
- "description": "Gauge full scale for entries without their own `max`."
101
- },
102
- "showValue": { "type": "boolean", "default": true },
103
- "showStatus": { "type": "boolean", "default": true },
104
- "showLabel": { "type": "boolean", "default": true },
105
- "showLegend": { "type": "boolean", "default": true },
106
- "showTooltip": { "type": "boolean", "default": true }
107
- },
108
- "required": ["data"]
109
- }
110
- }
111
- ;
112
-
113
- export default _default;
@@ -1,45 +0,0 @@
1
- const id = "donut-group-chart";
2
- const tag = "ui9000-donut-group-chart";
3
- const title = "Donut Group Chart";
4
- const description = "Chat-optimized donut group rewritten in D3 (Visx → D3). A row of KPI donuts: each entry is a gauge filled to value / max over a neutral track, or a breakdown donut when the entry carries several slices. No Redux.";
5
- const chartTypeKeys = ["donutGroupChart"];
6
- const chartTypeMap = { "donutGroupChart": { "showValue": true, "showStatus": true, "showLabel": true } };
7
- const source = "client/libs/shared/components/src/Widgets/DonutGroupChart/";
8
- const stack = "d3";
9
- const lazyImport = "@ui9000/widgets/lazy/donut-group-chart";
10
- const entry = "@ui9000/widgets/donut-group-chart";
11
- const usageConditions = { "host": "mcp-chat", "notFor": "fusedash-editor", "mapsExcluded": true, "context": "theme, scale, styleId and mode come from WidgetContext CSS custom properties, not props" };
12
- const allowedActions = ["hover", "resize"];
13
- const propsSchema = { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "data": { "oneOf": [{ "type": "array", "items": { "type": "object", "required": ["label", "value"], "properties": { "label": { "type": "string" }, "value": { "type": "number" } } } }, { "type": "array", "items": { "type": "object", "required": ["label", "value"], "properties": { "id": { "type": "string" }, "label": { "type": "string" }, "value": { "type": "number" }, "max": { "type": "number", "description": "FuseDash `maximalValue` — the gauge's full scale." }, "statusLabel": { "type": "string" }, "status": { "type": "string", "enum": ["positive", "negative", "neutral"] }, "color": { "type": "string" }, "slices": { "type": "array", "description": "More than one slice renders a breakdown donut instead of a gauge.", "items": { "type": "object", "required": ["label", "value"], "properties": { "label": { "type": "string" }, "value": { "type": "number" }, "color": { "type": "string" } } } } } } }, { "type": "object", "properties": { "items": { "type": "array", "items": { "type": "object" } }, "points": { "type": "array", "items": { "type": "object", "required": ["x", "y"], "properties": { "x": { "type": "string" }, "y": { "type": "number" } } } } } }] }, "scale": { "type": "string", "enum": ["compact", "default", "comfortable"], "default": "default" }, "max": { "type": "number", "default": 100, "description": "Gauge full scale for entries without their own `max`." }, "showValue": { "type": "boolean", "default": true }, "showStatus": { "type": "boolean", "default": true }, "showLabel": { "type": "boolean", "default": true }, "showLegend": { "type": "boolean", "default": true }, "showTooltip": { "type": "boolean", "default": true } }, "required": ["data"] };
14
- const donutGroupMeta = {
15
- id,
16
- tag,
17
- title,
18
- description,
19
- chartTypeKeys,
20
- chartTypeMap,
21
- source,
22
- stack,
23
- lazyImport,
24
- entry,
25
- usageConditions,
26
- allowedActions,
27
- propsSchema
28
- };
29
- export {
30
- allowedActions,
31
- chartTypeKeys,
32
- chartTypeMap,
33
- donutGroupMeta as default,
34
- description,
35
- entry,
36
- id,
37
- lazyImport,
38
- propsSchema,
39
- source,
40
- stack,
41
- tag,
42
- title,
43
- usageConditions
44
- };
45
- //# sourceMappingURL=metadata.json.js.map
@@ -1,44 +0,0 @@
1
- import { WidgetTheme } from '../../../types/index.js';
2
- import { DonutGauge, DonutHoverEntry } from '../lib/index.js';
3
- export interface RenderDonutGroupChartOptions {
4
- items: DonutGauge[];
5
- width: number;
6
- height: number;
7
- /** FuseDash DonutGroupChart frame when omitted by the host */
8
- margin?: {
9
- top: number;
10
- right: number;
11
- bottom: number;
12
- left: number;
13
- };
14
- theme: WidgetTheme;
15
- themeMode?: 'light' | 'dark';
16
- /** FuseDash page setting — picks the qualitative palette */
17
- styleId?: string;
18
- /** Value in the hole (FuseDash `display`) */
19
- showValue?: boolean;
20
- /** Badge under the value (FuseDash `statusLabel`) */
21
- showStatus?: boolean;
22
- /** Caption under the badge (FuseDash `groupBy` value) */
23
- showLabel?: boolean;
24
- /** Slice legend — breakdown donuts only */
25
- showLegend?: boolean;
26
- showTooltip?: boolean;
27
- /** Gauge full scale for rows without their own `max` */
28
- defaultMax?: number;
29
- onHover?: (payload: {
30
- title: string;
31
- entries: DonutHoverEntry[];
32
- event: MouseEvent;
33
- }) => void;
34
- onLeave?: () => void;
35
- }
36
- /**
37
- * FuseDash DonutGroupChart — D3 rewrite of the Visx `DonutGroupItem` row.
38
- *
39
- * Each entry is a ring with a KPI block in its hole: a gauge filled to
40
- * `value / max` over a neutral track, or a breakdown donut when the entry
41
- * carries more than one slice.
42
- */
43
- export declare function renderDonutGroupChart(container: HTMLElement, options: RenderDonutGroupChartOptions): void;
44
- //# sourceMappingURL=draw.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../../../src/components/donut-group-chart/render/draw.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,EAQL,KAAK,UAAU,EACf,KAAK,eAAe,EAErB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yDAAyD;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,KAAK,EAAE,UAAU,CAAC;KACnB,KAAK,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAoCD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,4BAA4B,GACpC,IAAI,CA+MN"}
@@ -1,194 +0,0 @@
1
- import { select } from "d3-selection";
2
- import { pie, arc } from "d3-shape";
3
- import { pickQualitativePalette } from "../../../utils/fuse-palette.js";
4
- import { FD } from "../../../utils/fusedash-visual.js";
5
- import { donutGridLayout, donutRadii, donutArcValues, gaugeRatio, resolveMax } from "../lib/domain.js";
6
- import { formatCompact, fitLabel } from "../lib/format.js";
7
- function measureText(node, label, fontSize) {
8
- var _a;
9
- const measured = (_a = node == null ? void 0 : node.getComputedTextLength) == null ? void 0 : _a.call(node);
10
- return Number.isFinite(measured) && measured > 0 ? measured : label.length * fontSize * 0.56;
11
- }
12
- function clamp(value, min, max) {
13
- return Math.min(Math.max(value, min), max);
14
- }
15
- function resolveColor(override, index, count, theme, styleId) {
16
- if (override) return override;
17
- const usingDefaultStyle = !styleId || styleId === "default";
18
- if (usingDefaultStyle) {
19
- if (index === 0 && theme.primary) return theme.primary;
20
- if (index === 1 && theme.secondary) return theme.secondary;
21
- }
22
- const palette = pickQualitativePalette(0, count);
23
- return palette[index % palette.length];
24
- }
25
- function renderDonutGroupChart(container, options) {
26
- const {
27
- items,
28
- width,
29
- height,
30
- margin = { ...FD.donutMargin },
31
- theme,
32
- themeMode = "light",
33
- styleId,
34
- showValue = true,
35
- showStatus = true,
36
- showLabel = true,
37
- showLegend = true,
38
- showTooltip = true,
39
- defaultMax = FD.donutDefaultMax,
40
- onHover,
41
- onLeave
42
- } = options;
43
- container.replaceChildren();
44
- if (!items.length || width <= 0 || height <= 0) return;
45
- const dark = themeMode === "dark";
46
- const trackFill = dark ? FD.donutTrackFillDark : FD.donutTrackFill;
47
- const dividerStroke = dark ? FD.donutDividerDark : FD.donutDivider;
48
- const sliceStroke = dark ? FD.donutSliceStrokeDark : FD.donutSliceStroke;
49
- const statusColors = dark ? FD.donutStatusColorsDark : FD.donutStatusColors;
50
- const legendSource = items.reduce(
51
- (best, item) => {
52
- var _a, _b;
53
- return (((_a = item.slices) == null ? void 0 : _a.length) ?? 0) > (((_b = best == null ? void 0 : best.slices) == null ? void 0 : _b.length) ?? 0) ? item : best;
54
- },
55
- void 0
56
- );
57
- const legendSlices = showLegend ? (legendSource == null ? void 0 : legendSource.slices) ?? [] : [];
58
- const legendHeight = legendSlices.length > 1 ? 22 : 0;
59
- const gridLeft = margin.left;
60
- const gridTop = margin.top + legendHeight;
61
- const gridWidth = width - margin.left - margin.right;
62
- const gridHeight = height - gridTop - margin.bottom;
63
- if (gridWidth <= 0 || gridHeight <= 0) return;
64
- const { columns, rows, cellWidth, cellHeight } = donutGridLayout(
65
- items.length,
66
- gridWidth,
67
- gridHeight
68
- );
69
- if (!columns || !rows) return;
70
- const svg = select(container).append("svg").attr("width", width).attr("height", height).attr("role", "img").attr("aria-label", `donut group chart, ${items.length} donuts`).style("display", "block").style("font-family", theme.fontFamily);
71
- const root = svg.append("g").attr("class", "donuts");
72
- if (legendSlices.length > 1) {
73
- const legend = svg.append("g").attr("class", "legend").attr("transform", `translate(${gridLeft},${margin.top})`);
74
- let lx = 0;
75
- legendSlices.forEach((slice, i) => {
76
- const color = resolveColor(slice.color, i, legendSlices.length, theme, styleId);
77
- const item = legend.append("g").attr("transform", `translate(${lx},0)`);
78
- item.append("rect").attr("x", 0).attr("y", 2).attr("width", 10).attr("height", 10).attr("rx", 2).attr("fill", color);
79
- const text = item.append("text").attr("x", 16).attr("y", 11).attr("fill", FD.axisLabelFill).attr("font-size", FD.axisLabelSize).text(slice.label);
80
- lx += measureText(text.node(), slice.label, FD.axisLabelSize) + 30;
81
- });
82
- }
83
- const dimOthers = (hovered) => {
84
- root.selectAll("path.donut-arc").attr("opacity", function() {
85
- return this === hovered ? 1 : FD.donutArcOpacityDimmed;
86
- });
87
- };
88
- const restoreArcs = () => {
89
- root.selectAll("path.donut-arc").attr("opacity", FD.donutArcOpacity);
90
- };
91
- const pieGen = pie().sort(null).value((d) => d);
92
- items.forEach((item, index) => {
93
- const column = index % columns;
94
- const row = Math.floor(index / columns);
95
- const cellLeft = gridLeft + column * cellWidth;
96
- const cellTop = gridTop + row * cellHeight;
97
- const cx = cellLeft + cellWidth / 2;
98
- const cy = cellTop + cellHeight / 2;
99
- const { outerRadius, innerRadius } = donutRadii(cellWidth, cellHeight);
100
- if (outerRadius <= 0) return;
101
- if (column > 0) {
102
- root.append("line").attr("class", "donut-divider").attr("x1", cellLeft).attr("x2", cellLeft).attr("y1", cellTop + 8).attr("y2", cellTop + cellHeight - 8).attr("stroke", dividerStroke).attr("shape-rendering", "crispEdges");
103
- }
104
- const cell = root.append("g").attr("class", "donut").attr("data-donut", item.id).attr("transform", `translate(${cx},${cy})`);
105
- const slices = item.slices ?? [];
106
- const breakdown = slices.length > 1;
107
- const { values, track } = donutArcValues(item, defaultMax);
108
- const total = values.reduce((sum, v) => sum + v, 0);
109
- const arcs = pieGen(values);
110
- const arcGen = arc().innerRadius(innerRadius).outerRadius(outerRadius);
111
- arcs.forEach((slice, i) => {
112
- var _a;
113
- if (slice.endAngle - slice.startAngle <= 0) return;
114
- const isTrack = track && i === 1;
115
- const color = isTrack ? trackFill : breakdown ? resolveColor((_a = slices[i]) == null ? void 0 : _a.color, i, slices.length, theme, styleId) : resolveColor(item.color, index, items.length, theme, styleId);
116
- const path = cell.append("path").attr("class", isTrack ? "donut-track" : "donut-arc").attr("d", arcGen({ startAngle: slice.startAngle, endAngle: slice.endAngle })).attr("fill", color).attr("opacity", isTrack ? 1 : FD.donutArcOpacity).attr("stroke", sliceStroke).attr("stroke-width", FD.donutSliceStrokeWidth);
117
- if (isTrack || !showTooltip || !onHover) return;
118
- const label = breakdown ? slices[i].label : item.label;
119
- const value = breakdown ? slices[i].value : item.value;
120
- const ratio = breakdown ? total > 0 ? Math.abs(value) / total : 0 : gaugeRatio(item.value, resolveMax(item, defaultMax));
121
- path.style("cursor", "pointer").on("mouseenter", function(event) {
122
- dimOthers(this);
123
- onHover({
124
- title: item.label,
125
- entries: [{ itemId: item.id, label, color, value, ratio }],
126
- event
127
- });
128
- }).on("mousemove", function(event) {
129
- onHover({
130
- title: item.label,
131
- entries: [{ itemId: item.id, label, color, value, ratio }],
132
- event
133
- });
134
- }).on("mouseleave", () => {
135
- restoreArcs();
136
- onLeave == null ? void 0 : onLeave();
137
- });
138
- });
139
- drawKpi(cell, {
140
- item,
141
- innerRadius,
142
- theme,
143
- statusColors,
144
- showValue,
145
- showStatus,
146
- showLabel
147
- });
148
- });
149
- }
150
- function drawKpi(cell, options) {
151
- const { item, innerRadius, theme, statusColors, showValue, showStatus, showLabel } = options;
152
- if (innerRadius <= 6) return;
153
- const box = innerRadius * 2;
154
- const valueSize = clamp(innerRadius * 0.62, 9, FD.donutValueSize);
155
- const captionSize = clamp(valueSize * 0.42, 7, FD.donutLabelSize);
156
- const gap = Math.max(2, captionSize * 0.35);
157
- const badgeHeight = captionSize * 1.6;
158
- const statusLabel = showStatus ? item.statusLabel : void 0;
159
- const label = showLabel ? item.label : "";
160
- const valueHeight = showValue ? valueSize * 1.15 : 0;
161
- const labelHeight = captionSize * 1.3;
162
- let hasBadge = Boolean(statusLabel);
163
- let hasLabel = Boolean(label);
164
- const measure = () => valueHeight + (hasBadge ? badgeHeight + gap : 0) + (hasLabel ? labelHeight + gap : 0);
165
- if (measure() > box && hasLabel) hasLabel = false;
166
- if (measure() > box && hasBadge) hasBadge = false;
167
- const blockHeight = measure();
168
- if (!blockHeight) return;
169
- const kpi = cell.append("g").attr("class", "donut-kpi").attr("pointer-events", "none");
170
- let y = -blockHeight / 2;
171
- if (showValue) {
172
- kpi.append("text").attr("class", "donut-value").attr("x", 0).attr("y", y + valueHeight / 2).attr("text-anchor", "middle").attr("fill", theme.text).attr("font-size", valueSize).attr("font-weight", FD.donutValueWeight).style("dominant-baseline", "middle").text(formatCompact(item.value));
173
- y += valueHeight;
174
- }
175
- if (hasBadge && statusLabel) {
176
- y += gap;
177
- const colors = statusColors[item.status ?? "neutral"];
178
- const badge = kpi.append("g").attr("class", "donut-badge");
179
- const rect = badge.append("rect");
180
- const text = badge.append("text").attr("x", 0).attr("y", y + badgeHeight / 2).attr("text-anchor", "middle").attr("fill", colors.text).attr("font-size", captionSize).style("dominant-baseline", "middle").text(fitLabel(statusLabel, Math.max(1, Math.floor(box / (captionSize * 0.56)))));
181
- const textWidth = measureText(text.node(), statusLabel, captionSize);
182
- const badgeWidth = Math.min(textWidth + captionSize, box);
183
- rect.attr("x", -badgeWidth / 2).attr("y", y).attr("width", badgeWidth).attr("height", badgeHeight).attr("rx", badgeHeight / 2).attr("fill", colors.background);
184
- y += badgeHeight;
185
- }
186
- if (hasLabel) {
187
- y += gap;
188
- kpi.append("text").attr("class", "donut-label").attr("x", 0).attr("y", y + labelHeight / 2).attr("text-anchor", "middle").attr("fill", theme.textMuted).attr("font-size", captionSize).style("dominant-baseline", "middle").text(fitLabel(label, Math.max(1, Math.floor(box / (captionSize * 0.56)))));
189
- }
190
- }
191
- export {
192
- renderDonutGroupChart
193
- };
194
- //# sourceMappingURL=draw.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"draw.js","sources":["../../../../src/components/donut-group-chart/render/draw.ts"],"sourcesContent":["import { select, type Selection } from 'd3-selection';\nimport { arc, pie } from 'd3-shape';\n\nimport type { WidgetTheme } from '../../../types/index.js';\nimport { pickQualitativePalette } from '../../../utils/fuse-palette.js';\nimport { FD } from '../../../utils/fusedash-visual.js';\nimport {\n donutArcValues,\n donutGridLayout,\n donutRadii,\n fitLabel,\n formatCompact,\n gaugeRatio,\n resolveMax,\n type DonutGauge,\n type DonutHoverEntry,\n type DonutStatus,\n} from '../lib/index.js';\n\nexport interface RenderDonutGroupChartOptions {\n items: DonutGauge[];\n width: number;\n height: number;\n /** FuseDash DonutGroupChart frame when omitted by the host */\n margin?: { top: number; right: number; bottom: number; left: number };\n theme: WidgetTheme;\n themeMode?: 'light' | 'dark';\n /** FuseDash page setting — picks the qualitative palette */\n styleId?: string;\n /** Value in the hole (FuseDash `display`) */\n showValue?: boolean;\n /** Badge under the value (FuseDash `statusLabel`) */\n showStatus?: boolean;\n /** Caption under the badge (FuseDash `groupBy` value) */\n showLabel?: boolean;\n /** Slice legend — breakdown donuts only */\n showLegend?: boolean;\n showTooltip?: boolean;\n /** Gauge full scale for rows without their own `max` */\n defaultMax?: number;\n onHover?: (payload: {\n title: string;\n entries: DonutHoverEntry[];\n event: MouseEvent;\n }) => void;\n onLeave?: () => void;\n}\n\n/** `getComputedTextLength` is unavailable without a layout engine (jsdom, SSR). */\nfunction measureText(node: SVGTextElement | null, label: string, fontSize: number): number {\n const measured = node?.getComputedTextLength?.();\n return Number.isFinite(measured) && (measured as number) > 0\n ? (measured as number)\n : label.length * fontSize * 0.56;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * FuseDash `getCurrentColor`: an explicit color wins, then the theme's\n * primary/secondary (so a host that themed the widget keeps its brand on the\n * first two donuts), then the `styleId` palette for this donut count.\n */\nfunction resolveColor(\n override: string | undefined,\n index: number,\n count: number,\n theme: WidgetTheme,\n styleId?: string,\n): string {\n if (override) return override;\n const usingDefaultStyle = !styleId || styleId === 'default';\n if (usingDefaultStyle) {\n if (index === 0 && theme.primary) return theme.primary;\n if (index === 1 && theme.secondary) return theme.secondary;\n }\n const palette = pickQualitativePalette(0, count);\n return palette[index % palette.length];\n}\n\n/**\n * FuseDash DonutGroupChart — D3 rewrite of the Visx `DonutGroupItem` row.\n *\n * Each entry is a ring with a KPI block in its hole: a gauge filled to\n * `value / max` over a neutral track, or a breakdown donut when the entry\n * carries more than one slice.\n */\nexport function renderDonutGroupChart(\n container: HTMLElement,\n options: RenderDonutGroupChartOptions,\n): void {\n const {\n items,\n width,\n height,\n margin = { ...FD.donutMargin },\n theme,\n themeMode = 'light',\n styleId,\n showValue = true,\n showStatus = true,\n showLabel = true,\n showLegend = true,\n showTooltip = true,\n defaultMax = FD.donutDefaultMax,\n onHover,\n onLeave,\n } = options;\n\n container.replaceChildren();\n if (!items.length || width <= 0 || height <= 0) return;\n\n const dark = themeMode === 'dark';\n const trackFill = dark ? FD.donutTrackFillDark : FD.donutTrackFill;\n const dividerStroke = dark ? FD.donutDividerDark : FD.donutDivider;\n const sliceStroke = dark ? FD.donutSliceStrokeDark : FD.donutSliceStroke;\n const statusColors = dark ? FD.donutStatusColorsDark : FD.donutStatusColors;\n\n // the legend describes slices, so it only appears for breakdown donuts\n const legendSource = items.reduce<DonutGauge | undefined>(\n (best, item) =>\n (item.slices?.length ?? 0) > (best?.slices?.length ?? 0) ? item : best,\n undefined,\n );\n const legendSlices = showLegend ? (legendSource?.slices ?? []) : [];\n const legendHeight = legendSlices.length > 1 ? 22 : 0;\n\n const gridLeft = margin.left;\n const gridTop = margin.top + legendHeight;\n const gridWidth = width - margin.left - margin.right;\n const gridHeight = height - gridTop - margin.bottom;\n if (gridWidth <= 0 || gridHeight <= 0) return;\n\n const { columns, rows, cellWidth, cellHeight } = donutGridLayout(\n items.length,\n gridWidth,\n gridHeight,\n );\n if (!columns || !rows) return;\n\n const svg = select(container)\n .append('svg')\n .attr('width', width)\n .attr('height', height)\n .attr('role', 'img')\n .attr('aria-label', `donut group chart, ${items.length} donuts`)\n .style('display', 'block')\n .style('font-family', theme.fontFamily);\n\n const root = svg.append('g').attr('class', 'donuts');\n\n // --- Legend ---------------------------------------------------------------\n if (legendSlices.length > 1) {\n const legend = svg\n .append('g')\n .attr('class', 'legend')\n .attr('transform', `translate(${gridLeft},${margin.top})`);\n let lx = 0;\n legendSlices.forEach((slice, i) => {\n const color = resolveColor(slice.color, i, legendSlices.length, theme, styleId);\n const item = legend.append('g').attr('transform', `translate(${lx},0)`);\n item\n .append('rect')\n .attr('x', 0)\n .attr('y', 2)\n .attr('width', 10)\n .attr('height', 10)\n .attr('rx', 2)\n .attr('fill', color);\n const text = item\n .append('text')\n .attr('x', 16)\n .attr('y', 11)\n .attr('fill', FD.axisLabelFill)\n .attr('font-size', FD.axisLabelSize)\n .text(slice.label);\n lx += measureText(text.node(), slice.label, FD.axisLabelSize) + 30;\n });\n }\n\n // --- Hover dimming (FuseDash fades every other arc to 0.2) ----------------\n const dimOthers = (hovered: SVGPathElement): void => {\n root\n .selectAll<SVGPathElement, unknown>('path.donut-arc')\n .attr('opacity', function () {\n return this === hovered ? 1 : FD.donutArcOpacityDimmed;\n });\n };\n const restoreArcs = (): void => {\n root.selectAll('path.donut-arc').attr('opacity', FD.donutArcOpacity);\n };\n\n // --- Donuts ---------------------------------------------------------------\n const pieGen = pie<number>()\n .sort(null)\n .value((d) => d);\n\n items.forEach((item, index) => {\n const column = index % columns;\n const row = Math.floor(index / columns);\n const cellLeft = gridLeft + column * cellWidth;\n const cellTop = gridTop + row * cellHeight;\n const cx = cellLeft + cellWidth / 2;\n const cy = cellTop + cellHeight / 2;\n\n const { outerRadius, innerRadius } = donutRadii(cellWidth, cellHeight);\n if (outerRadius <= 0) return;\n\n // FuseDash separates the donuts with a left border on every item but the first\n if (column > 0) {\n root\n .append('line')\n .attr('class', 'donut-divider')\n .attr('x1', cellLeft)\n .attr('x2', cellLeft)\n .attr('y1', cellTop + 8)\n .attr('y2', cellTop + cellHeight - 8)\n .attr('stroke', dividerStroke)\n .attr('shape-rendering', 'crispEdges');\n }\n\n const cell = root\n .append('g')\n .attr('class', 'donut')\n .attr('data-donut', item.id)\n .attr('transform', `translate(${cx},${cy})`);\n\n const slices = item.slices ?? [];\n const breakdown = slices.length > 1;\n const { values, track } = donutArcValues(item, defaultMax);\n const total = values.reduce((sum, v) => sum + v, 0);\n const arcs = pieGen(values);\n const arcGen = arc<{ startAngle: number; endAngle: number }>()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius);\n\n arcs.forEach((slice, i) => {\n if (slice.endAngle - slice.startAngle <= 0) return;\n const isTrack = track && i === 1;\n const color = isTrack\n ? trackFill\n : breakdown\n ? resolveColor(slices[i]?.color, i, slices.length, theme, styleId)\n : resolveColor(item.color, index, items.length, theme, styleId);\n\n const path = cell\n .append('path')\n .attr('class', isTrack ? 'donut-track' : 'donut-arc')\n .attr('d', arcGen({ startAngle: slice.startAngle, endAngle: slice.endAngle }))\n .attr('fill', color)\n .attr('opacity', isTrack ? 1 : FD.donutArcOpacity)\n .attr('stroke', sliceStroke)\n .attr('stroke-width', FD.donutSliceStrokeWidth);\n\n if (isTrack || !showTooltip || !onHover) return;\n\n const label = breakdown ? slices[i].label : item.label;\n const value = breakdown ? slices[i].value : item.value;\n const ratio = breakdown\n ? total > 0\n ? Math.abs(value) / total\n : 0\n : gaugeRatio(item.value, resolveMax(item, defaultMax));\n\n path\n .style('cursor', 'pointer')\n .on('mouseenter', function (event: MouseEvent) {\n dimOthers(this as SVGPathElement);\n onHover({\n title: item.label,\n entries: [{ itemId: item.id, label, color, value, ratio }],\n event,\n });\n })\n .on('mousemove', function (event: MouseEvent) {\n onHover({\n title: item.label,\n entries: [{ itemId: item.id, label, color, value, ratio }],\n event,\n });\n })\n .on('mouseleave', () => {\n restoreArcs();\n onLeave?.();\n });\n });\n\n drawKpi(cell, {\n item,\n innerRadius,\n theme,\n statusColors,\n showValue,\n showStatus,\n showLabel,\n });\n });\n}\n\ninterface KpiOptions {\n item: DonutGauge;\n innerRadius: number;\n theme: WidgetTheme;\n statusColors: Record<DonutStatus, { background: string; text: string }>;\n showValue: boolean;\n showStatus: boolean;\n showLabel: boolean;\n}\n\n/**\n * The KPI block FuseDash overlays on the hole: value, status badge, caption.\n * Type sizes are FuseDash's 30/12/12 scaled down with the hole so the block\n * never spills out of small chat cells.\n */\nfunction drawKpi(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cell: Selection<any, unknown, null, undefined>,\n options: KpiOptions,\n): void {\n const { item, innerRadius, theme, statusColors, showValue, showStatus, showLabel } =\n options;\n if (innerRadius <= 6) return;\n\n const box = innerRadius * 2;\n const valueSize = clamp(innerRadius * 0.62, 9, FD.donutValueSize);\n const captionSize = clamp(valueSize * 0.42, 7, FD.donutLabelSize);\n const gap = Math.max(2, captionSize * 0.35);\n const badgeHeight = captionSize * 1.6;\n\n const statusLabel = showStatus ? item.statusLabel : undefined;\n const label = showLabel ? item.label : '';\n const valueHeight = showValue ? valueSize * 1.15 : 0;\n const labelHeight = captionSize * 1.3;\n\n // The hole is small in chat: drop the caption first, then the badge, rather\n // than letting the block spill over the ring.\n let hasBadge = Boolean(statusLabel);\n let hasLabel = Boolean(label);\n const measure = (): number =>\n valueHeight + (hasBadge ? badgeHeight + gap : 0) + (hasLabel ? labelHeight + gap : 0);\n if (measure() > box && hasLabel) hasLabel = false;\n if (measure() > box && hasBadge) hasBadge = false;\n const blockHeight = measure();\n if (!blockHeight) return;\n\n const kpi = cell.append('g').attr('class', 'donut-kpi').attr('pointer-events', 'none');\n let y = -blockHeight / 2;\n\n if (showValue) {\n kpi\n .append('text')\n .attr('class', 'donut-value')\n .attr('x', 0)\n .attr('y', y + valueHeight / 2)\n .attr('text-anchor', 'middle')\n .attr('fill', theme.text)\n .attr('font-size', valueSize)\n .attr('font-weight', FD.donutValueWeight)\n .style('dominant-baseline', 'middle')\n .text(formatCompact(item.value));\n y += valueHeight;\n }\n\n if (hasBadge && statusLabel) {\n y += gap;\n const colors = statusColors[item.status ?? 'neutral'];\n const badge = kpi.append('g').attr('class', 'donut-badge');\n const rect = badge.append('rect');\n const text = badge\n .append('text')\n .attr('x', 0)\n .attr('y', y + badgeHeight / 2)\n .attr('text-anchor', 'middle')\n .attr('fill', colors.text)\n .attr('font-size', captionSize)\n .style('dominant-baseline', 'middle')\n .text(fitLabel(statusLabel, Math.max(1, Math.floor(box / (captionSize * 0.56)))));\n const textWidth = measureText(text.node(), statusLabel, captionSize);\n const badgeWidth = Math.min(textWidth + captionSize, box);\n rect\n .attr('x', -badgeWidth / 2)\n .attr('y', y)\n .attr('width', badgeWidth)\n .attr('height', badgeHeight)\n .attr('rx', badgeHeight / 2)\n .attr('fill', colors.background);\n y += badgeHeight;\n }\n\n if (hasLabel) {\n y += gap;\n kpi\n .append('text')\n .attr('class', 'donut-label')\n .attr('x', 0)\n .attr('y', y + labelHeight / 2)\n .attr('text-anchor', 'middle')\n .attr('fill', theme.textMuted)\n .attr('font-size', captionSize)\n .style('dominant-baseline', 'middle')\n .text(fitLabel(label, Math.max(1, Math.floor(box / (captionSize * 0.56)))));\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export { renderDonutGroupChart, type RenderDonutGroupChartOptions } from './draw.js';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/donut-group-chart/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,4BAA4B,EAAE,MAAM,WAAW,CAAC"}