@fusedashlabs/widgets 0.2.0 → 0.3.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 (324) hide show
  1. package/CHANGELOG.md +72 -17
  2. package/README.md +24 -26
  3. package/dist/components/area-chart/element/ui9000-area-chart.d.ts +1 -1
  4. package/dist/components/area-grouped-bar-chart/element/ui9000-area-grouped-bar-chart.d.ts +1 -1
  5. package/dist/components/area-grouped-bar-chart/lib/normalize.js +3 -3
  6. package/dist/components/area-grouped-bar-chart/lib/normalize.js.map +1 -1
  7. package/dist/components/bar-chart/element/ui9000-bar-chart.d.ts +1 -1
  8. package/dist/components/bias-variance-tradeoff-chart/element/styles.d.ts +7 -0
  9. package/dist/components/bias-variance-tradeoff-chart/element/styles.d.ts.map +1 -0
  10. package/dist/components/bias-variance-tradeoff-chart/element/styles.js +13 -0
  11. package/dist/components/bias-variance-tradeoff-chart/element/styles.js.map +1 -0
  12. package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.d.ts +27 -0
  13. package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.d.ts.map +1 -0
  14. package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.js +173 -0
  15. package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.js.map +1 -0
  16. package/dist/components/bias-variance-tradeoff-chart/index.d.ts +5 -0
  17. package/dist/components/bias-variance-tradeoff-chart/index.d.ts.map +1 -0
  18. package/dist/components/bias-variance-tradeoff-chart/index.js +19 -0
  19. package/dist/components/bias-variance-tradeoff-chart/index.js.map +1 -0
  20. package/dist/components/bias-variance-tradeoff-chart/lib/domain.d.ts +8 -0
  21. package/dist/components/bias-variance-tradeoff-chart/lib/domain.d.ts.map +1 -0
  22. package/dist/components/bias-variance-tradeoff-chart/lib/domain.js +37 -0
  23. package/dist/components/bias-variance-tradeoff-chart/lib/domain.js.map +1 -0
  24. package/dist/components/bias-variance-tradeoff-chart/lib/format.d.ts +3 -0
  25. package/dist/components/bias-variance-tradeoff-chart/lib/format.d.ts.map +1 -0
  26. package/dist/components/bias-variance-tradeoff-chart/lib/format.js +9 -0
  27. package/dist/components/bias-variance-tradeoff-chart/lib/format.js.map +1 -0
  28. package/dist/components/bias-variance-tradeoff-chart/lib/index.d.ts +5 -0
  29. package/dist/components/bias-variance-tradeoff-chart/lib/index.d.ts.map +1 -0
  30. package/dist/components/bias-variance-tradeoff-chart/lib/normalize.d.ts +4 -0
  31. package/dist/components/bias-variance-tradeoff-chart/lib/normalize.d.ts.map +1 -0
  32. package/dist/components/bias-variance-tradeoff-chart/lib/normalize.js +135 -0
  33. package/dist/components/bias-variance-tradeoff-chart/lib/normalize.js.map +1 -0
  34. package/dist/components/bias-variance-tradeoff-chart/lib/types.d.ts +47 -0
  35. package/dist/components/bias-variance-tradeoff-chart/lib/types.d.ts.map +1 -0
  36. package/dist/components/bias-variance-tradeoff-chart/metadata.json.d.ts +41 -0
  37. package/dist/components/bias-variance-tradeoff-chart/metadata.json.js +42 -0
  38. package/dist/components/bias-variance-tradeoff-chart/metadata.json.js.map +1 -0
  39. package/dist/components/bias-variance-tradeoff-chart/render/draw.d.ts +31 -0
  40. package/dist/components/bias-variance-tradeoff-chart/render/draw.d.ts.map +1 -0
  41. package/dist/components/bias-variance-tradeoff-chart/render/draw.js +203 -0
  42. package/dist/components/bias-variance-tradeoff-chart/render/draw.js.map +1 -0
  43. package/dist/components/bias-variance-tradeoff-chart/render/index.d.ts +2 -0
  44. package/dist/components/bias-variance-tradeoff-chart/render/index.d.ts.map +1 -0
  45. package/dist/components/box-plot-chart/element/ui9000-box-plot-chart.d.ts +1 -1
  46. package/dist/components/bubble-chart/element/ui9000-bubble-chart.d.ts +1 -1
  47. package/dist/components/chart-renderer/lib/registry.d.ts.map +1 -1
  48. package/dist/components/chart-renderer/lib/registry.js +12 -0
  49. package/dist/components/chart-renderer/lib/registry.js.map +1 -1
  50. package/dist/components/donut-chart/element/ui9000-donut-chart.d.ts +1 -1
  51. package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.d.ts +1 -1
  52. package/dist/components/gini-impurity-entropy-chart/element/styles.d.ts +2 -0
  53. package/dist/components/gini-impurity-entropy-chart/element/styles.d.ts.map +1 -0
  54. package/dist/components/gini-impurity-entropy-chart/element/styles.js +72 -0
  55. package/dist/components/gini-impurity-entropy-chart/element/styles.js.map +1 -0
  56. package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.d.ts +36 -0
  57. package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.d.ts.map +1 -0
  58. package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.js +186 -0
  59. package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.js.map +1 -0
  60. package/dist/components/gini-impurity-entropy-chart/index.d.ts +5 -0
  61. package/dist/components/gini-impurity-entropy-chart/index.d.ts.map +1 -0
  62. package/dist/components/gini-impurity-entropy-chart/index.js +32 -0
  63. package/dist/components/gini-impurity-entropy-chart/index.js.map +1 -0
  64. package/dist/components/gini-impurity-entropy-chart/lib/domain.d.ts +9 -0
  65. package/dist/components/gini-impurity-entropy-chart/lib/domain.d.ts.map +1 -0
  66. package/dist/components/gini-impurity-entropy-chart/lib/domain.js +32 -0
  67. package/dist/components/gini-impurity-entropy-chart/lib/domain.js.map +1 -0
  68. package/dist/components/gini-impurity-entropy-chart/lib/format.d.ts +10 -0
  69. package/dist/components/gini-impurity-entropy-chart/lib/format.d.ts.map +1 -0
  70. package/dist/components/gini-impurity-entropy-chart/lib/format.js +22 -0
  71. package/dist/components/gini-impurity-entropy-chart/lib/format.js.map +1 -0
  72. package/dist/components/gini-impurity-entropy-chart/lib/index.d.ts +7 -0
  73. package/dist/components/gini-impurity-entropy-chart/lib/index.d.ts.map +1 -0
  74. package/dist/components/gini-impurity-entropy-chart/lib/normalize.d.ts +7 -0
  75. package/dist/components/gini-impurity-entropy-chart/lib/normalize.d.ts.map +1 -0
  76. package/dist/components/gini-impurity-entropy-chart/lib/normalize.js +117 -0
  77. package/dist/components/gini-impurity-entropy-chart/lib/normalize.js.map +1 -0
  78. package/dist/components/gini-impurity-entropy-chart/lib/overlays.d.ts +19 -0
  79. package/dist/components/gini-impurity-entropy-chart/lib/overlays.d.ts.map +1 -0
  80. package/dist/components/gini-impurity-entropy-chart/lib/overlays.js +63 -0
  81. package/dist/components/gini-impurity-entropy-chart/lib/overlays.js.map +1 -0
  82. package/dist/components/gini-impurity-entropy-chart/lib/series.d.ts +12 -0
  83. package/dist/components/gini-impurity-entropy-chart/lib/series.d.ts.map +1 -0
  84. package/dist/components/gini-impurity-entropy-chart/lib/series.js +45 -0
  85. package/dist/components/gini-impurity-entropy-chart/lib/series.js.map +1 -0
  86. package/dist/components/gini-impurity-entropy-chart/lib/types.d.ts +83 -0
  87. package/dist/components/gini-impurity-entropy-chart/lib/types.d.ts.map +1 -0
  88. package/dist/components/gini-impurity-entropy-chart/lib/types.js +19 -0
  89. package/dist/components/gini-impurity-entropy-chart/lib/types.js.map +1 -0
  90. package/dist/components/gini-impurity-entropy-chart/metadata.json.d.ts +115 -0
  91. package/dist/components/gini-impurity-entropy-chart/metadata.json.js +42 -0
  92. package/dist/components/gini-impurity-entropy-chart/metadata.json.js.map +1 -0
  93. package/dist/components/gini-impurity-entropy-chart/render/draw.d.ts +40 -0
  94. package/dist/components/gini-impurity-entropy-chart/render/draw.d.ts.map +1 -0
  95. package/dist/components/gini-impurity-entropy-chart/render/draw.js +160 -0
  96. package/dist/components/gini-impurity-entropy-chart/render/draw.js.map +1 -0
  97. package/dist/components/gini-impurity-entropy-chart/render/index.d.ts +2 -0
  98. package/dist/components/gini-impurity-entropy-chart/render/index.d.ts.map +1 -0
  99. package/dist/components/histogram-chart/element/ui9000-histogram-chart.d.ts +1 -1
  100. package/dist/components/kpi-widget/element/ui9000-kpi-widget.d.ts +1 -1
  101. package/dist/components/kpi-widget/element/ui9000-kpi-widget.js +1 -1
  102. package/dist/components/line-chart/element/ui9000-line-chart.d.ts +1 -1
  103. package/dist/components/lollipop/element/ui9000-lollipop.d.ts +1 -1
  104. package/dist/components/network-graph/element/styles.d.ts +2 -0
  105. package/dist/components/network-graph/element/styles.d.ts.map +1 -0
  106. package/dist/components/network-graph/element/styles.js +152 -0
  107. package/dist/components/network-graph/element/styles.js.map +1 -0
  108. package/dist/components/network-graph/element/ui9000-network-graph.d.ts +43 -0
  109. package/dist/components/network-graph/element/ui9000-network-graph.d.ts.map +1 -0
  110. package/dist/components/network-graph/element/ui9000-network-graph.js +230 -0
  111. package/dist/components/network-graph/element/ui9000-network-graph.js.map +1 -0
  112. package/dist/components/network-graph/index.d.ts +5 -0
  113. package/dist/components/network-graph/index.d.ts.map +1 -0
  114. package/dist/components/network-graph/index.js +37 -0
  115. package/dist/components/network-graph/index.js.map +1 -0
  116. package/dist/components/network-graph/lib/domain.d.ts +96 -0
  117. package/dist/components/network-graph/lib/domain.d.ts.map +1 -0
  118. package/dist/components/network-graph/lib/domain.js +211 -0
  119. package/dist/components/network-graph/lib/domain.js.map +1 -0
  120. package/dist/components/network-graph/lib/format.d.ts +7 -0
  121. package/dist/components/network-graph/lib/format.d.ts.map +1 -0
  122. package/dist/components/network-graph/lib/format.js +29 -0
  123. package/dist/components/network-graph/lib/format.js.map +1 -0
  124. package/dist/components/network-graph/lib/index.d.ts +5 -0
  125. package/dist/components/network-graph/lib/index.d.ts.map +1 -0
  126. package/dist/components/network-graph/lib/normalize.d.ts +10 -0
  127. package/dist/components/network-graph/lib/normalize.d.ts.map +1 -0
  128. package/dist/components/network-graph/lib/normalize.js +140 -0
  129. package/dist/components/network-graph/lib/normalize.js.map +1 -0
  130. package/dist/components/network-graph/lib/types.d.ts +56 -0
  131. package/dist/components/network-graph/lib/types.d.ts.map +1 -0
  132. package/dist/components/network-graph/metadata.json.d.ts +91 -0
  133. package/dist/components/network-graph/metadata.json.js +42 -0
  134. package/dist/components/network-graph/metadata.json.js.map +1 -0
  135. package/dist/components/network-graph/render/draw.d.ts +46 -0
  136. package/dist/components/network-graph/render/draw.d.ts.map +1 -0
  137. package/dist/components/network-graph/render/draw.js +468 -0
  138. package/dist/components/network-graph/render/draw.js.map +1 -0
  139. package/dist/components/network-graph/render/index.d.ts +2 -0
  140. package/dist/components/network-graph/render/index.d.ts.map +1 -0
  141. package/dist/components/parallel-coordinates-chart/element/styles.d.ts +2 -0
  142. package/dist/components/parallel-coordinates-chart/element/styles.d.ts.map +1 -0
  143. package/dist/components/parallel-coordinates-chart/element/styles.js +71 -0
  144. package/dist/components/parallel-coordinates-chart/element/styles.js.map +1 -0
  145. package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.d.ts +33 -0
  146. package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.d.ts.map +1 -0
  147. package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.js +182 -0
  148. package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.js.map +1 -0
  149. package/dist/components/parallel-coordinates-chart/index.d.ts +5 -0
  150. package/dist/components/parallel-coordinates-chart/index.d.ts.map +1 -0
  151. package/dist/components/parallel-coordinates-chart/index.js +23 -0
  152. package/dist/components/parallel-coordinates-chart/index.js.map +1 -0
  153. package/dist/components/parallel-coordinates-chart/lib/domain.d.ts +14 -0
  154. package/dist/components/parallel-coordinates-chart/lib/domain.d.ts.map +1 -0
  155. package/dist/components/parallel-coordinates-chart/lib/domain.js +28 -0
  156. package/dist/components/parallel-coordinates-chart/lib/domain.js.map +1 -0
  157. package/dist/components/parallel-coordinates-chart/lib/format.d.ts +12 -0
  158. package/dist/components/parallel-coordinates-chart/lib/format.d.ts.map +1 -0
  159. package/dist/components/parallel-coordinates-chart/lib/format.js +18 -0
  160. package/dist/components/parallel-coordinates-chart/lib/format.js.map +1 -0
  161. package/dist/components/parallel-coordinates-chart/lib/index.d.ts +5 -0
  162. package/dist/components/parallel-coordinates-chart/lib/index.d.ts.map +1 -0
  163. package/dist/components/parallel-coordinates-chart/lib/normalize.d.ts +23 -0
  164. package/dist/components/parallel-coordinates-chart/lib/normalize.d.ts.map +1 -0
  165. package/dist/components/parallel-coordinates-chart/lib/normalize.js +156 -0
  166. package/dist/components/parallel-coordinates-chart/lib/normalize.js.map +1 -0
  167. package/dist/components/parallel-coordinates-chart/lib/types.d.ts +48 -0
  168. package/dist/components/parallel-coordinates-chart/lib/types.d.ts.map +1 -0
  169. package/dist/components/parallel-coordinates-chart/metadata.json.d.ts +103 -0
  170. package/dist/components/parallel-coordinates-chart/metadata.json.js +45 -0
  171. package/dist/components/parallel-coordinates-chart/metadata.json.js.map +1 -0
  172. package/dist/components/parallel-coordinates-chart/render/draw.d.ts +30 -0
  173. package/dist/components/parallel-coordinates-chart/render/draw.d.ts.map +1 -0
  174. package/dist/components/parallel-coordinates-chart/render/draw.js +160 -0
  175. package/dist/components/parallel-coordinates-chart/render/draw.js.map +1 -0
  176. package/dist/components/parallel-coordinates-chart/render/index.d.ts +2 -0
  177. package/dist/components/parallel-coordinates-chart/render/index.d.ts.map +1 -0
  178. package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts +1 -1
  179. package/dist/components/polar-area-chart/element/styles.d.ts +2 -0
  180. package/dist/components/polar-area-chart/element/styles.d.ts.map +1 -0
  181. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.d.ts +29 -0
  182. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.d.ts.map +1 -0
  183. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js +167 -0
  184. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js.map +1 -0
  185. package/dist/components/polar-area-chart/index.d.ts +5 -0
  186. package/dist/components/polar-area-chart/index.d.ts.map +1 -0
  187. package/dist/components/polar-area-chart/index.js +18 -0
  188. package/dist/components/polar-area-chart/index.js.map +1 -0
  189. package/dist/components/polar-area-chart/lib/domain.d.ts +25 -0
  190. package/dist/components/polar-area-chart/lib/domain.d.ts.map +1 -0
  191. package/dist/components/polar-area-chart/lib/domain.js +47 -0
  192. package/dist/components/polar-area-chart/lib/domain.js.map +1 -0
  193. package/dist/components/polar-area-chart/lib/index.d.ts +4 -0
  194. package/dist/components/polar-area-chart/lib/index.d.ts.map +1 -0
  195. package/dist/components/polar-area-chart/lib/normalize.d.ts +4 -0
  196. package/dist/components/polar-area-chart/lib/normalize.d.ts.map +1 -0
  197. package/dist/components/polar-area-chart/lib/normalize.js +117 -0
  198. package/dist/components/polar-area-chart/lib/normalize.js.map +1 -0
  199. package/dist/components/polar-area-chart/lib/types.d.ts +43 -0
  200. package/dist/components/polar-area-chart/lib/types.d.ts.map +1 -0
  201. package/dist/components/polar-area-chart/metadata.json.d.ts +79 -0
  202. package/dist/components/polar-area-chart/metadata.json.js +42 -0
  203. package/dist/components/polar-area-chart/metadata.json.js.map +1 -0
  204. package/dist/components/polar-area-chart/render/draw.d.ts +25 -0
  205. package/dist/components/polar-area-chart/render/draw.d.ts.map +1 -0
  206. package/dist/components/polar-area-chart/render/draw.js +127 -0
  207. package/dist/components/polar-area-chart/render/draw.js.map +1 -0
  208. package/dist/components/polar-area-chart/render/index.d.ts +2 -0
  209. package/dist/components/polar-area-chart/render/index.d.ts.map +1 -0
  210. package/dist/components/punchcard-chart/element/ui9000-punchcard-chart.d.ts +1 -1
  211. package/dist/components/radar-chart/element/ui9000-radar-chart.d.ts +1 -1
  212. package/dist/components/radial-bar-chart/element/styles.d.ts +2 -0
  213. package/dist/components/radial-bar-chart/element/styles.d.ts.map +1 -0
  214. package/dist/components/radial-bar-chart/element/styles.js +53 -0
  215. package/dist/components/radial-bar-chart/element/styles.js.map +1 -0
  216. package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.d.ts +35 -0
  217. package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.d.ts.map +1 -0
  218. package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.js +174 -0
  219. package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.js.map +1 -0
  220. package/dist/components/radial-bar-chart/index.d.ts +5 -0
  221. package/dist/components/radial-bar-chart/index.d.ts.map +1 -0
  222. package/dist/components/radial-bar-chart/index.js +21 -0
  223. package/dist/components/radial-bar-chart/index.js.map +1 -0
  224. package/dist/components/radial-bar-chart/lib/domain.d.ts +47 -0
  225. package/dist/components/radial-bar-chart/lib/domain.d.ts.map +1 -0
  226. package/dist/components/radial-bar-chart/lib/domain.js +50 -0
  227. package/dist/components/radial-bar-chart/lib/domain.js.map +1 -0
  228. package/dist/components/radial-bar-chart/lib/format.d.ts +6 -0
  229. package/dist/components/radial-bar-chart/lib/format.d.ts.map +1 -0
  230. package/dist/components/radial-bar-chart/lib/format.js +12 -0
  231. package/dist/components/radial-bar-chart/lib/format.js.map +1 -0
  232. package/dist/components/radial-bar-chart/lib/index.d.ts +5 -0
  233. package/dist/components/radial-bar-chart/lib/index.d.ts.map +1 -0
  234. package/dist/components/radial-bar-chart/lib/normalize.d.ts +4 -0
  235. package/dist/components/radial-bar-chart/lib/normalize.d.ts.map +1 -0
  236. package/dist/components/radial-bar-chart/lib/normalize.js +92 -0
  237. package/dist/components/radial-bar-chart/lib/normalize.js.map +1 -0
  238. package/dist/components/radial-bar-chart/lib/types.d.ts +34 -0
  239. package/dist/components/radial-bar-chart/lib/types.d.ts.map +1 -0
  240. package/dist/components/radial-bar-chart/metadata.json.d.ts +62 -0
  241. package/dist/components/radial-bar-chart/metadata.json.js +42 -0
  242. package/dist/components/radial-bar-chart/metadata.json.js.map +1 -0
  243. package/dist/components/radial-bar-chart/render/draw.d.ts +29 -0
  244. package/dist/components/radial-bar-chart/render/draw.d.ts.map +1 -0
  245. package/dist/components/radial-bar-chart/render/draw.js +92 -0
  246. package/dist/components/radial-bar-chart/render/draw.js.map +1 -0
  247. package/dist/components/radial-bar-chart/render/index.d.ts +2 -0
  248. package/dist/components/radial-bar-chart/render/index.d.ts.map +1 -0
  249. package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts +1 -1
  250. package/dist/components/sankey-chart/element/ui9000-sankey-chart.js +2 -1
  251. package/dist/components/sankey-chart/element/ui9000-sankey-chart.js.map +1 -1
  252. package/dist/components/sankey-chart/index.js +4 -2
  253. package/dist/components/sankey-chart/index.js.map +1 -1
  254. package/dist/components/sankey-chart/lib/domain.d.ts +2 -2
  255. package/dist/components/sankey-chart/lib/domain.d.ts.map +1 -1
  256. package/dist/components/sankey-chart/lib/domain.js +1 -13
  257. package/dist/components/sankey-chart/lib/domain.js.map +1 -1
  258. package/dist/components/sankey-chart/lib/format.d.ts +1 -2
  259. package/dist/components/sankey-chart/lib/format.d.ts.map +1 -1
  260. package/dist/components/sankey-chart/lib/format.js +3 -7
  261. package/dist/components/sankey-chart/lib/format.js.map +1 -1
  262. package/dist/components/scatter-plot-chart/element/ui9000-scatter-plot.d.ts +1 -1
  263. package/dist/components/scatter-sparkline-chart/element/ui9000-scatter-sparkline-chart.d.ts +1 -1
  264. package/dist/components/spark-area-chart/element/ui9000-spark-area-chart.d.ts +1 -1
  265. package/dist/components/spark-line-chart/element/ui9000-spark-line-chart.d.ts +1 -1
  266. package/dist/components/step-line-chart/element/ui9000-step-line-chart.d.ts +1 -1
  267. package/dist/components/violin-chart/element/ui9000-violin-chart.d.ts +1 -1
  268. package/dist/components/waterfall-chart/element/ui9000-waterfall-chart.d.ts +1 -1
  269. package/dist/element/ui9000-chart-base.d.ts +2 -2
  270. package/dist/index.d.ts +14 -2
  271. package/dist/index.d.ts.map +1 -1
  272. package/dist/index.js +110 -13
  273. package/dist/index.js.map +1 -1
  274. package/dist/lazy/bias-variance-tradeoff-chart.d.ts +4 -0
  275. package/dist/lazy/bias-variance-tradeoff-chart.d.ts.map +1 -0
  276. package/dist/lazy/bias-variance-tradeoff-chart.js +5 -0
  277. package/dist/lazy/bias-variance-tradeoff-chart.js.map +1 -0
  278. package/dist/lazy/gini-impurity-entropy-chart.d.ts +4 -0
  279. package/dist/lazy/gini-impurity-entropy-chart.d.ts.map +1 -0
  280. package/dist/lazy/gini-impurity-entropy-chart.js +5 -0
  281. package/dist/lazy/gini-impurity-entropy-chart.js.map +1 -0
  282. package/dist/lazy/index.d.ts +7 -1
  283. package/dist/lazy/index.d.ts.map +1 -1
  284. package/dist/lazy/index.js +48 -0
  285. package/dist/lazy/index.js.map +1 -1
  286. package/dist/lazy/network-graph.d.ts +4 -0
  287. package/dist/lazy/network-graph.d.ts.map +1 -0
  288. package/dist/lazy/network-graph.js +5 -0
  289. package/dist/lazy/network-graph.js.map +1 -0
  290. package/dist/lazy/parallel-coordinates-chart.d.ts +4 -0
  291. package/dist/lazy/parallel-coordinates-chart.d.ts.map +1 -0
  292. package/dist/lazy/parallel-coordinates-chart.js +5 -0
  293. package/dist/lazy/parallel-coordinates-chart.js.map +1 -0
  294. package/dist/lazy/polar-area-chart.d.ts +4 -0
  295. package/dist/lazy/polar-area-chart.d.ts.map +1 -0
  296. package/dist/lazy/polar-area-chart.js +5 -0
  297. package/dist/lazy/polar-area-chart.js.map +1 -0
  298. package/dist/lazy/radial-bar-chart.d.ts +4 -0
  299. package/dist/lazy/radial-bar-chart.d.ts.map +1 -0
  300. package/dist/lazy/radial-bar-chart.js +5 -0
  301. package/dist/lazy/radial-bar-chart.js.map +1 -0
  302. package/dist/utils/breakpoints.d.ts +7 -0
  303. package/dist/utils/breakpoints.d.ts.map +1 -0
  304. package/dist/utils/breakpoints.js +17 -0
  305. package/dist/utils/breakpoints.js.map +1 -0
  306. package/dist/utils/chart-helpers.d.ts +21 -0
  307. package/dist/utils/chart-helpers.d.ts.map +1 -1
  308. package/dist/utils/chart-helpers.js +54 -0
  309. package/dist/utils/chart-helpers.js.map +1 -1
  310. package/dist/utils/format-text.d.ts +17 -0
  311. package/dist/utils/format-text.d.ts.map +1 -0
  312. package/dist/utils/format-text.js +26 -0
  313. package/dist/utils/format-text.js.map +1 -0
  314. package/dist/utils/fusedash-visual.d.ts +143 -0
  315. package/dist/utils/fusedash-visual.d.ts.map +1 -1
  316. package/dist/utils/fusedash-visual.js +114 -1
  317. package/dist/utils/fusedash-visual.js.map +1 -1
  318. package/package.json +56 -4
  319. package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive.js +0 -28
  320. package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive.js.map +0 -1
  321. package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/style-map.js +0 -37
  322. package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/style-map.js.map +0 -1
  323. package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/lit-html.js +0 -231
  324. package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/lit-html.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui9000-radial-bar-chart.js","sources":["../../../../src/components/radial-bar-chart/element/ui9000-radial-bar-chart.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { readThemeFromElement } from '../../../context/widget-context.js';\nimport { renderChartLegend } from '../../../element/chart-legend-render.js';\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { getRadialBarDimensions, parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { swatchLegendEntries } from '../../../utils/chart-legend.js';\nimport { chartPropsChanged } from '../../../utils/lit-draw.js';\nimport {\n formatRadialBarCategory,\n formatRadialBarValue,\n normalizeRadialBarData,\n type RadialBarChartData,\n type RadialBarModel,\n} from '../lib/index.js';\nimport { renderRadialBarChart } from '../render/draw.js';\nimport { radialBarChartStyles } from './styles.js';\n\n@customElement('ui9000-radial-bar-chart')\nexport class Ui9000RadialBarChart extends Ui9000ChartElement {\n static override styles = [radialBarChartStyles, chartShellStyles];\n\n @property({ type: String, attribute: 'scale' })\n scale: WidgetScale = 'default';\n\n @property({ type: Boolean, attribute: 'show-grid' })\n showGrid = true;\n\n @property({ type: Boolean, attribute: 'show-legend' })\n showLegend = true;\n\n @property({ type: Boolean, attribute: 'show-tooltip' })\n showTooltip = true;\n\n @state()\n private _tooltip: {\n x: number;\n y: number;\n title: string;\n lines: string[];\n } | null = null;\n\n @state()\n private _empty = false;\n\n /**\n * Model from the last draw. `render()` reads it for the legend so a paint\n * never re-parses the `data` attribute; `_`-prefixed state is ignored by\n * `chartPropsChanged`, so assigning it cannot loop back into a redraw.\n */\n @state()\n private _model: RadialBarModel | null = null;\n\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.scheduleDraw());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n cancelAnimationFrame(this._raf);\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (chartPropsChanged(changed)) this.scheduleDraw();\n }\n\n private scheduleDraw(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => this.draw());\n }\n\n private parseData(): RadialBarModel {\n const raw = parseJsonAttr<RadialBarChartData>(this.dataJson, null);\n return normalizeRadialBarData(raw);\n }\n\n private renderLegend(model: RadialBarModel) {\n if (!this.showLegend || !model.legend.length) return nothing;\n const theme = readThemeFromElement(this);\n return renderChartLegend(\n swatchLegendEntries(\n model.legend.map((bar) => bar.label),\n theme,\n (_label, index) => model.legend[index]?.color ?? theme.primary,\n ),\n );\n }\n\n private draw(): void {\n const root = this.shadowRoot?.querySelector('.chart-root') as HTMLElement | null;\n if (!root) return;\n\n const model = this.parseData();\n this._model = model;\n this._empty = model.bars.length === 0;\n if (this._empty) {\n root.replaceChildren();\n return;\n }\n\n const theme = readThemeFromElement(this);\n const { width, height, margin } = getRadialBarDimensions(root, this.scale);\n const xField = model.xField;\n const yField = model.yField;\n\n renderRadialBarChart(root, {\n bars: model.bars,\n width,\n height,\n margin,\n theme,\n showGrid: this.showGrid,\n showTooltip: this.showTooltip,\n ...this.axisLabelHandlers(),\n onHover: this.showTooltip\n ? ({ bar, event }) => {\n const rect = this.getBoundingClientRect();\n const xDetail = xField ? model.axisDetails?.[xField] : undefined;\n const yDetail = yField ? model.axisDetails?.[yField] : undefined;\n this._tooltip = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n title: formatRadialBarCategory(bar.label),\n lines: [\n `${xDetail?.label ?? xField ?? 'Category'}: ${formatRadialBarCategory(bar.label, xDetail)}`,\n `${yDetail?.label ?? yField ?? 'Value'}: ${formatRadialBarValue(bar.value, yDetail)}`,\n ],\n };\n }\n : undefined,\n onLeave: this.showTooltip\n ? () => {\n this._tooltip = null;\n }\n : undefined,\n });\n }\n\n override render() {\n const title = this.headerTitle();\n const model = this._empty ? null : this._model;\n return html`\n <div class=\"widget-shell\" part=\"shell\">\n ${this.renderShellHeader(title)}\n <div class=\"widget-body\">\n ${model ? this.renderLegend(model) : nothing}\n <div class=\"chart-root\" part=\"chart\" ?hidden=${this._empty}></div>\n ${this._empty ? html`<div class=\"empty\" part=\"empty\">No data</div>` : nothing}\n ${this._tooltip\n ? html`<div\n class=\"tooltip\"\n part=\"tooltip\"\n style=\"left:${this._tooltip.x}px;top:${this._tooltip.y}px\"\n >\n <div class=\"tooltip-title\">${this._tooltip.title}</div>\n ${this._tooltip.lines.map((line) => html`<div>${line}</div>`)}\n </div>`\n : nothing}\n ${this.renderShellLabelTooltip()}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-radial-bar-chart': Ui9000RadialBarChart;\n }\n}\n\nexport function registerRadialBarChart(): void {\n if (!customElements.get('ui9000-radial-bar-chart')) {\n customElements.define('ui9000-radial-bar-chart', Ui9000RadialBarChart);\n }\n}\n\nregisterRadialBarChart();\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { Ui9000RadialBarChart, registerRadialBarChart, } from './element/ui9000-radial-bar-chart.js';
2
+ export { renderRadialBarChart, type RenderRadialBarChartOptions, } from './render/index.js';
3
+ export { RADIAL_BAR_SWEEP, formatRadialBarCategory, formatRadialBarValue, normalizeRadialBarData, radialBarAngleScale, radialBarArcWidth, radialBarLabelLimit, type RadialBarChartData, type RadialBarDatum, type RadialBarModel, } from './lib/index.js';
4
+ export { default as radialBarChartMetadata } from './metadata.json';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/radial-bar-chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { registerRadialBarChart } from "./element/ui9000-radial-bar-chart.js";
2
+ import { Ui9000RadialBarChart } from "./element/ui9000-radial-bar-chart.js";
3
+ import { default as default2 } from "./metadata.json.js";
4
+ import { RADIAL_BAR_SWEEP, radialBarAngleScale, radialBarArcWidth, radialBarLabelLimit } from "./lib/domain.js";
5
+ import { formatRadialBarCategory, formatRadialBarValue } from "./lib/format.js";
6
+ import { normalizeRadialBarData } from "./lib/normalize.js";
7
+ import { renderRadialBarChart } from "./render/draw.js";
8
+ export {
9
+ RADIAL_BAR_SWEEP,
10
+ Ui9000RadialBarChart,
11
+ formatRadialBarCategory,
12
+ formatRadialBarValue,
13
+ normalizeRadialBarData,
14
+ radialBarAngleScale,
15
+ radialBarArcWidth,
16
+ default2 as radialBarChartMetadata,
17
+ radialBarLabelLimit,
18
+ registerRadialBarChart,
19
+ renderRadialBarChart
20
+ };
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,47 @@
1
+ import { ScaleLinear } from 'd3-scale';
2
+ /** Full sweep of the rings: 270° in radians (0 = 12 o'clock, clockwise). */
3
+ export declare const RADIAL_BAR_SWEEP: number;
4
+ /**
5
+ * Client `radialScale`: value → angle over [0, 270°], `.nice()`-ed, with the
6
+ * lower bound pinned to zero unless the data actually goes negative.
7
+ */
8
+ export declare function radialBarAngleScale(values: number[]): ScaleLinear<number, number>;
9
+ /**
10
+ * Client `radiusScale`. Domain and range are the same interval, so `.nice()`
11
+ * widens the domain only — the rings end up slightly inset from the raw radii.
12
+ */
13
+ export declare function radialBarRadiusScale(innerRadius: number, outerRadius: number): ScaleLinear<number, number>;
14
+ /** Client `arcWidth`: half of the free space per ring, clamped to 4–24px. */
15
+ export declare function radialBarArcWidth(innerRadius: number, outerRadius: number, ringCount: number): number;
16
+ /** Client `maxLengthBarLabel`: characters that fit between the hole and the rim. */
17
+ export declare function radialBarLabelLimit(innerRadius: number, outerRadius: number): number;
18
+ export type RadialBarMargin = {
19
+ top: number;
20
+ right: number;
21
+ bottom: number;
22
+ left: number;
23
+ };
24
+ /**
25
+ * Client anchoring: the labels straight above and below the hole are centred on
26
+ * their tick, the rest sit beside it.
27
+ */
28
+ export declare function radialBarTickAnchor(angle: number): 'start' | 'middle' | 'end';
29
+ /**
30
+ * Client `outerRadius`: the circle inscribed in the frame, whatever the aspect
31
+ * ratio.
32
+ *
33
+ * Value labels are drawn 12px beyond the rim and are allowed to run past the
34
+ * SVG edge, exactly as in FuseDash: a square or portrait body clips the
35
+ * right-hand label against the widget viewBox (420x420 loses ~20px of it,
36
+ * 360x600 ~48px), while every landscape body has room to spare. Matching the
37
+ * client ring size is the accepted trade — do not shrink the circle to rescue
38
+ * the label.
39
+ *
40
+ * One difference remains, and it is in our favour: the client scales a
41
+ * `0 0 width height+40` viewBox into a `100%`-sized element, so its whole
42
+ * drawing letterboxes and its 12px text is not really 12px. We keep a 1:1
43
+ * pixel viewBox, so labels clip against the container edge instead of that
44
+ * inset box — same ring, same failure mode, a few px different boundary.
45
+ */
46
+ export declare function radialBarOuterRadius(width: number, height: number, margin: RadialBarMargin): number;
47
+ //# sourceMappingURL=domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../../src/components/radial-bar-chart/lib/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAIzD,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AAEvE;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EAAE,GACf,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAa7B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAK7B;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,MAAM,CAOR;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,MAAM,CAKR;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAI7E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,eAAe,GACtB,MAAM,CAKR"}
@@ -0,0 +1,50 @@
1
+ import { scaleLinear } from "d3-scale";
2
+ import { FD } from "../../../utils/fusedash-visual.js";
3
+ const RADIAL_BAR_SWEEP = FD.radialBarSweepDeg / 180 * Math.PI;
4
+ function radialBarAngleScale(values) {
5
+ const finite = values.filter((v) => Number.isFinite(v));
6
+ const min = finite.length ? Math.min(...finite) : 0;
7
+ const max = finite.length ? Math.max(...finite) : 0;
8
+ const scale = scaleLinear().domain([min < 0 ? min : 0, max]).range([0, RADIAL_BAR_SWEEP]).nice();
9
+ const [niceMin, niceMax] = scale.domain();
10
+ scale.domain([min < 0 ? niceMin : 0, niceMax]);
11
+ return scale;
12
+ }
13
+ function radialBarRadiusScale(innerRadius, outerRadius) {
14
+ return scaleLinear().domain([innerRadius, outerRadius]).rangeRound([innerRadius, outerRadius]).nice();
15
+ }
16
+ function radialBarArcWidth(innerRadius, outerRadius, ringCount) {
17
+ if (ringCount <= 0) return FD.radialBarMinArcWidth;
18
+ const free = outerRadius - innerRadius - ringCount;
19
+ return Math.max(
20
+ FD.radialBarMinArcWidth,
21
+ Math.min(FD.radialBarMaxArcWidth, free / ringCount * 0.5)
22
+ );
23
+ }
24
+ function radialBarLabelLimit(innerRadius, outerRadius) {
25
+ return Math.max(
26
+ 1,
27
+ Math.ceil((outerRadius - innerRadius) / FD.radialBarLabelCharWidth)
28
+ );
29
+ }
30
+ function radialBarTickAnchor(angle) {
31
+ const vertical = Math.abs(Math.abs(angle) - Math.PI / 2) < 1e-9;
32
+ if (vertical) return "middle";
33
+ return angle > -Math.PI / 2 && angle < Math.PI / 2 ? "start" : "end";
34
+ }
35
+ function radialBarOuterRadius(width, height, margin) {
36
+ return Math.max(
37
+ 0,
38
+ Math.min(width - margin.left - margin.right, height - margin.top - margin.bottom) / 2
39
+ );
40
+ }
41
+ export {
42
+ RADIAL_BAR_SWEEP,
43
+ radialBarAngleScale,
44
+ radialBarArcWidth,
45
+ radialBarLabelLimit,
46
+ radialBarOuterRadius,
47
+ radialBarRadiusScale,
48
+ radialBarTickAnchor
49
+ };
50
+ //# sourceMappingURL=domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.js","sources":["../../../../src/components/radial-bar-chart/lib/domain.ts"],"sourcesContent":["import { scaleLinear, type ScaleLinear } from 'd3-scale';\n\nimport { FD } from '../../../utils/fusedash-visual.js';\n\n/** Full sweep of the rings: 270° in radians (0 = 12 o'clock, clockwise). */\nexport const RADIAL_BAR_SWEEP = (FD.radialBarSweepDeg / 180) * Math.PI;\n\n/**\n * Client `radialScale`: value → angle over [0, 270°], `.nice()`-ed, with the\n * lower bound pinned to zero unless the data actually goes negative.\n */\nexport function radialBarAngleScale(\n values: number[],\n): ScaleLinear<number, number> {\n const finite = values.filter((v) => Number.isFinite(v));\n const min = finite.length ? Math.min(...finite) : 0;\n const max = finite.length ? Math.max(...finite) : 0;\n\n const scale = scaleLinear()\n .domain([min < 0 ? min : 0, max])\n .range([0, RADIAL_BAR_SWEEP])\n .nice();\n\n const [niceMin, niceMax] = scale.domain();\n scale.domain([min < 0 ? niceMin : 0, niceMax]);\n return scale;\n}\n\n/**\n * Client `radiusScale`. Domain and range are the same interval, so `.nice()`\n * widens the domain only — the rings end up slightly inset from the raw radii.\n */\nexport function radialBarRadiusScale(\n innerRadius: number,\n outerRadius: number,\n): ScaleLinear<number, number> {\n return scaleLinear()\n .domain([innerRadius, outerRadius])\n .rangeRound([innerRadius, outerRadius])\n .nice();\n}\n\n/** Client `arcWidth`: half of the free space per ring, clamped to 4–24px. */\nexport function radialBarArcWidth(\n innerRadius: number,\n outerRadius: number,\n ringCount: number,\n): number {\n if (ringCount <= 0) return FD.radialBarMinArcWidth;\n const free = outerRadius - innerRadius - ringCount;\n return Math.max(\n FD.radialBarMinArcWidth,\n Math.min(FD.radialBarMaxArcWidth, (free / ringCount) * 0.5),\n );\n}\n\n/** Client `maxLengthBarLabel`: characters that fit between the hole and the rim. */\nexport function radialBarLabelLimit(\n innerRadius: number,\n outerRadius: number,\n): number {\n return Math.max(\n 1,\n Math.ceil((outerRadius - innerRadius) / FD.radialBarLabelCharWidth),\n );\n}\n\nexport type RadialBarMargin = {\n top: number;\n right: number;\n bottom: number;\n left: number;\n};\n\n/**\n * Client anchoring: the labels straight above and below the hole are centred on\n * their tick, the rest sit beside it.\n */\nexport function radialBarTickAnchor(angle: number): 'start' | 'middle' | 'end' {\n const vertical = Math.abs(Math.abs(angle) - Math.PI / 2) < 1e-9;\n if (vertical) return 'middle';\n return angle > -Math.PI / 2 && angle < Math.PI / 2 ? 'start' : 'end';\n}\n\n/**\n * Client `outerRadius`: the circle inscribed in the frame, whatever the aspect\n * ratio.\n *\n * Value labels are drawn 12px beyond the rim and are allowed to run past the\n * SVG edge, exactly as in FuseDash: a square or portrait body clips the\n * right-hand label against the widget viewBox (420x420 loses ~20px of it,\n * 360x600 ~48px), while every landscape body has room to spare. Matching the\n * client ring size is the accepted trade — do not shrink the circle to rescue\n * the label.\n *\n * One difference remains, and it is in our favour: the client scales a\n * `0 0 width height+40` viewBox into a `100%`-sized element, so its whole\n * drawing letterboxes and its 12px text is not really 12px. We keep a 1:1\n * pixel viewBox, so labels clip against the container edge instead of that\n * inset box — same ring, same failure mode, a few px different boundary.\n */\nexport function radialBarOuterRadius(\n width: number,\n height: number,\n margin: RadialBarMargin,\n): number {\n return Math.max(\n 0,\n Math.min(width - margin.left - margin.right, height - margin.top - margin.bottom) / 2,\n );\n}\n"],"names":[],"mappings":";;AAKO,MAAM,mBAAoB,GAAG,oBAAoB,MAAO,KAAK;AAM7D,SAAS,oBACd,QAC6B;AAC7B,QAAM,SAAS,OAAO,OAAO,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AACtD,QAAM,MAAM,OAAO,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;AAClD,QAAM,MAAM,OAAO,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;AAElD,QAAM,QAAQ,YAAA,EACX,OAAO,CAAC,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC,EAC/B,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAC3B,KAAA;AAEH,QAAM,CAAC,SAAS,OAAO,IAAI,MAAM,OAAA;AACjC,QAAM,OAAO,CAAC,MAAM,IAAI,UAAU,GAAG,OAAO,CAAC;AAC7C,SAAO;AACT;AAMO,SAAS,qBACd,aACA,aAC6B;AAC7B,SAAO,YAAA,EACJ,OAAO,CAAC,aAAa,WAAW,CAAC,EACjC,WAAW,CAAC,aAAa,WAAW,CAAC,EACrC,KAAA;AACL;AAGO,SAAS,kBACd,aACA,aACA,WACQ;AACR,MAAI,aAAa,EAAG,QAAO,GAAG;AAC9B,QAAM,OAAO,cAAc,cAAc;AACzC,SAAO,KAAK;AAAA,IACV,GAAG;AAAA,IACH,KAAK,IAAI,GAAG,sBAAuB,OAAO,YAAa,GAAG;AAAA,EAAA;AAE9D;AAGO,SAAS,oBACd,aACA,aACQ;AACR,SAAO,KAAK;AAAA,IACV;AAAA,IACA,KAAK,MAAM,cAAc,eAAe,GAAG,uBAAuB;AAAA,EAAA;AAEtE;AAaO,SAAS,oBAAoB,OAA2C;AAC7E,QAAM,WAAW,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI;AAC3D,MAAI,SAAU,QAAO;AACrB,SAAO,QAAQ,CAAC,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,IAAI,UAAU;AACjE;AAmBO,SAAS,qBACd,OACA,QACA,QACQ;AACR,SAAO,KAAK;AAAA,IACV;AAAA,IACA,KAAK,IAAI,QAAQ,OAAO,OAAO,OAAO,OAAO,SAAS,OAAO,MAAM,OAAO,MAAM,IAAI;AAAA,EAAA;AAExF;"}
@@ -0,0 +1,6 @@
1
+ import { FuseAxisDetail } from '../../../utils/format-text.js';
2
+ /** Client tooltip category row: capitalized words, then the axis unit. */
3
+ export declare function formatRadialBarCategory(label: string, detail?: FuseAxisDetail): string;
4
+ /** Client tooltip value row: `formatNumber(value)` plus the axis unit. */
5
+ export declare function formatRadialBarValue(value: number, detail?: FuseAxisDetail): string;
6
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/components/radial-bar-chart/lib/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,+BAA+B,CAAC;AAEvC,0EAA0E;AAC1E,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,CAER;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,CAER"}
@@ -0,0 +1,12 @@
1
+ import { formatValueWithUnit, formatCapitalizedWords, formatFuseNumber } from "../../../utils/format-text.js";
2
+ function formatRadialBarCategory(label, detail) {
3
+ return formatValueWithUnit(formatCapitalizedWords(label), detail);
4
+ }
5
+ function formatRadialBarValue(value, detail) {
6
+ return formatValueWithUnit(formatFuseNumber(value), detail);
7
+ }
8
+ export {
9
+ formatRadialBarCategory,
10
+ formatRadialBarValue
11
+ };
12
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sources":["../../../../src/components/radial-bar-chart/lib/format.ts"],"sourcesContent":["import {\n formatCapitalizedWords,\n formatFuseNumber,\n formatValueWithUnit,\n type FuseAxisDetail,\n} from '../../../utils/format-text.js';\n\n/** Client tooltip category row: capitalized words, then the axis unit. */\nexport function formatRadialBarCategory(\n label: string,\n detail?: FuseAxisDetail,\n): string {\n return formatValueWithUnit(formatCapitalizedWords(label), detail);\n}\n\n/** Client tooltip value row: `formatNumber(value)` plus the axis unit. */\nexport function formatRadialBarValue(\n value: number,\n detail?: FuseAxisDetail,\n): string {\n return formatValueWithUnit(formatFuseNumber(value), detail);\n}\n"],"names":[],"mappings":";AAQO,SAAS,wBACd,OACA,QACQ;AACR,SAAO,oBAAoB,uBAAuB,KAAK,GAAG,MAAM;AAClE;AAGO,SAAS,qBACd,OACA,QACQ;AACR,SAAO,oBAAoB,iBAAiB,KAAK,GAAG,MAAM;AAC5D;"}
@@ -0,0 +1,5 @@
1
+ export { normalizeRadialBarData } from './normalize.js';
2
+ export { RADIAL_BAR_SWEEP, radialBarAngleScale, radialBarArcWidth, radialBarLabelLimit, radialBarOuterRadius, radialBarRadiusScale, radialBarTickAnchor, type RadialBarMargin, } from './domain.js';
3
+ export { formatRadialBarCategory, formatRadialBarValue } from './format.js';
4
+ export type { RadialBarChartData, RadialBarDatum, RadialBarLabelValue, RadialBarModel, RadialBarPoints, } from './types.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/radial-bar-chart/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC5E,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { RadialBarChartData, RadialBarModel } from './types.js';
2
+ /** Normalize chat / FuseDash WidgetItem payloads into radial bar rings. */
3
+ export declare function normalizeRadialBarData(input: RadialBarChartData): RadialBarModel;
4
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/components/radial-bar-chart/lib/normalize.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,kBAAkB,EAGlB,cAAc,EAEf,MAAM,YAAY,CAAC;AA4GpB,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,kBAAkB,GACxB,cAAc,CAoBhB"}
@@ -0,0 +1,92 @@
1
+ import { resolveFormattingColor } from "../../../utils/fuse-palette.js";
2
+ import { isFuseWidgetPayload, firstField, rowsOf, resolveUniqueValuesOrder } from "../../../utils/fuse-widget.js";
3
+ import { resolveWidgetFormatting } from "../../../utils/chart-formatting/from-fuse-widget.js";
4
+ const EMPTY = { bars: [], legend: [] };
5
+ function isLabelValueArray(input) {
6
+ if (!Array.isArray(input) || !input.length) return false;
7
+ const first = input[0];
8
+ return !!first && typeof first === "object" && "label" in first && "value" in first;
9
+ }
10
+ function isPointsPayload(input) {
11
+ return !!input && typeof input === "object" && Array.isArray(input.points);
12
+ }
13
+ function parseRows(rows) {
14
+ const parsed = [];
15
+ for (const row of rows) {
16
+ const key = row.key;
17
+ const value = Number(row.value);
18
+ if (key == null || key === "" || !Number.isFinite(value)) continue;
19
+ parsed.push({ key: String(key), label: String(key), value });
20
+ }
21
+ return parsed;
22
+ }
23
+ function buildModel(parsed, orderedKeys, colorFor) {
24
+ if (!parsed.length) return EMPTY;
25
+ const byKey = new Map(parsed.map((row) => [row.key, row]));
26
+ const legend = orderedKeys.map((key) => byKey.get(key)).filter((row) => row != null).map((row) => ({ ...row, color: colorFor(row.key, orderedKeys.length) }));
27
+ return { bars: [...legend].reverse(), legend };
28
+ }
29
+ function fromFuseWidget(widget) {
30
+ var _a, _b;
31
+ const xKey = firstField(widget.xAxe ?? void 0);
32
+ const yKey = firstField(widget.yAxe ?? void 0);
33
+ if (!xKey || !yKey) return EMPTY;
34
+ const parsed = parseRows(
35
+ rowsOf(widget).map((row) => ({ key: row[xKey], value: row[yKey] }))
36
+ );
37
+ const orderKey = ((_b = (_a = widget.uniqueValues) == null ? void 0 : _a[xKey]) == null ? void 0 : _b.length) ? xKey : Object.keys(widget.uniqueValues ?? {})[0];
38
+ const orderedKeys = resolveUniqueValuesOrder(
39
+ parsed.map((row) => row.key),
40
+ widget.uniqueValues,
41
+ orderKey
42
+ );
43
+ const formatting = resolveWidgetFormatting(widget);
44
+ const model = buildModel(
45
+ parsed,
46
+ orderedKeys,
47
+ (key, count) => resolveFormattingColor(formatting, key, count)
48
+ );
49
+ return {
50
+ ...model,
51
+ xField: xKey,
52
+ yField: yKey,
53
+ axisDetails: widget.axisDetails ?? void 0
54
+ };
55
+ }
56
+ function fromLabelValue(rows) {
57
+ const parsed = parseRows(
58
+ rows.map((row) => ({ key: row.label, value: row.value }))
59
+ );
60
+ const colorByKey = new Map(
61
+ rows.filter((row) => row.color).map((row) => [String(row.label), row.color])
62
+ );
63
+ const formatting = parsed.map((row, index) => ({
64
+ key: row.key,
65
+ color: String(index % 12 + 1)
66
+ }));
67
+ return buildModel(
68
+ parsed,
69
+ parsed.map((row) => row.key),
70
+ (key, count) => colorByKey.get(key) ?? resolveFormattingColor(formatting, key, count)
71
+ );
72
+ }
73
+ function normalizeRadialBarData(input) {
74
+ if (!input) return EMPTY;
75
+ if (Array.isArray(input)) {
76
+ return isLabelValueArray(input) ? fromLabelValue(input) : EMPTY;
77
+ }
78
+ if (isFuseWidgetPayload(input)) return fromFuseWidget(input);
79
+ if (isPointsPayload(input)) {
80
+ return fromLabelValue(
81
+ input.points.map((point) => ({ label: String(point.x), value: point.y }))
82
+ );
83
+ }
84
+ if (Array.isArray(input.bars)) {
85
+ return input;
86
+ }
87
+ return EMPTY;
88
+ }
89
+ export {
90
+ normalizeRadialBarData
91
+ };
92
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sources":["../../../../src/components/radial-bar-chart/lib/normalize.ts"],"sourcesContent":["import { resolveWidgetFormatting } from '../../../utils/chart-formatting/index.js';\nimport { resolveFormattingColor } from '../../../utils/fuse-palette.js';\nimport {\n firstField,\n isFuseWidgetPayload,\n resolveUniqueValuesOrder,\n rowsOf,\n type FuseWidgetLike,\n} from '../../../utils/fuse-widget.js';\nimport type {\n RadialBarChartData,\n RadialBarDatum,\n RadialBarLabelValue,\n RadialBarModel,\n RadialBarPoints,\n} from './types.js';\n\nconst EMPTY: RadialBarModel = { bars: [], legend: [] };\n\ntype ParsedRow = { key: string; label: string; value: number };\n\nfunction isLabelValueArray(input: unknown): input is RadialBarLabelValue[] {\n if (!Array.isArray(input) || !input.length) return false;\n const first = input[0] as Record<string, unknown> | null;\n return !!first && typeof first === 'object' && 'label' in first && 'value' in first;\n}\n\nfunction isPointsPayload(input: unknown): input is RadialBarPoints {\n return (\n !!input &&\n typeof input === 'object' &&\n Array.isArray((input as RadialBarPoints).points)\n );\n}\n\nfunction parseRows(\n rows: Array<{ key: unknown; value: unknown }>,\n): ParsedRow[] {\n const parsed: ParsedRow[] = [];\n for (const row of rows) {\n const key = row.key;\n const value = Number(row.value);\n if (key == null || key === '' || !Number.isFinite(value)) continue;\n parsed.push({ key: String(key), label: String(key), value });\n }\n return parsed;\n}\n\n/**\n * Rings sit in `uniqueValues` order reversed (client sorts then `.reverse()`),\n * while the legend keeps the original order.\n */\nfunction buildModel(\n parsed: ParsedRow[],\n orderedKeys: string[],\n colorFor: (key: string, count: number) => string,\n): RadialBarModel {\n if (!parsed.length) return EMPTY;\n\n const byKey = new Map(parsed.map((row) => [row.key, row]));\n const legend: RadialBarDatum[] = orderedKeys\n .map((key) => byKey.get(key))\n .filter((row): row is ParsedRow => row != null)\n .map((row) => ({ ...row, color: colorFor(row.key, orderedKeys.length) }));\n\n return { bars: [...legend].reverse(), legend };\n}\n\nfunction fromFuseWidget(widget: FuseWidgetLike): RadialBarModel {\n const xKey = firstField(widget.xAxe ?? undefined);\n const yKey = firstField(widget.yAxe ?? undefined);\n if (!xKey || !yKey) return EMPTY;\n\n const parsed = parseRows(\n rowsOf(widget).map((row) => ({ key: row[xKey], value: row[yKey] })),\n );\n // Client reads the category order from `uniqueValues[xAxe]` and falls back to\n // the first `uniqueValues` key for the legend.\n const orderKey = widget.uniqueValues?.[xKey]?.length\n ? xKey\n : Object.keys(widget.uniqueValues ?? {})[0];\n const orderedKeys = resolveUniqueValuesOrder(\n parsed.map((row) => row.key),\n widget.uniqueValues,\n orderKey,\n );\n\n const formatting = resolveWidgetFormatting(widget);\n const model = buildModel(parsed, orderedKeys, (key, count) =>\n resolveFormattingColor(formatting, key, count),\n );\n\n return {\n ...model,\n xField: xKey,\n yField: yKey,\n axisDetails: widget.axisDetails ?? undefined,\n };\n}\n\nfunction fromLabelValue(rows: RadialBarLabelValue[]): RadialBarModel {\n const parsed = parseRows(\n rows.map((row) => ({ key: row.label, value: row.value })),\n );\n const colorByKey = new Map(\n rows\n .filter((row) => row.color)\n .map((row) => [String(row.label), row.color as string]),\n );\n // Chat payloads carry no formatting, so generate the same 1-based color\n // indices `getUniversalFormatting` would have produced for a widget.\n const formatting = parsed.map((row, index) => ({\n key: row.key,\n color: String((index % 12) + 1),\n }));\n\n return buildModel(\n parsed,\n parsed.map((row) => row.key),\n (key, count) => colorByKey.get(key) ?? resolveFormattingColor(formatting, key, count),\n );\n}\n\n/** Normalize chat / FuseDash WidgetItem payloads into radial bar rings. */\nexport function normalizeRadialBarData(\n input: RadialBarChartData,\n): RadialBarModel {\n if (!input) return EMPTY;\n\n if (Array.isArray(input)) {\n return isLabelValueArray(input) ? fromLabelValue(input) : EMPTY;\n }\n\n if (isFuseWidgetPayload(input)) return fromFuseWidget(input);\n\n if (isPointsPayload(input)) {\n return fromLabelValue(\n input.points.map((point) => ({ label: String(point.x), value: point.y })),\n );\n }\n\n if (Array.isArray((input as RadialBarModel).bars)) {\n return input as RadialBarModel;\n }\n\n return EMPTY;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { FuseAxisDetail } from '../../../utils/format-text.js';
2
+ import { FuseWidgetLike } from '../../../utils/fuse-widget.js';
3
+ /** One ring of the radial bar chart. */
4
+ export interface RadialBarDatum {
5
+ key: string;
6
+ label: string;
7
+ value: number;
8
+ color: string;
9
+ }
10
+ export interface RadialBarModel {
11
+ /**
12
+ * Rings from the inside out. The client sorts `data` by `uniqueValues[xAxe]`
13
+ * and then reverses it, so the last category ends up on the innermost ring.
14
+ */
15
+ bars: RadialBarDatum[];
16
+ /** Legend keeps the `uniqueValues` order, i.e. the reverse of `bars`. */
17
+ legend: RadialBarDatum[];
18
+ xField?: string;
19
+ yField?: string;
20
+ axisDetails?: Record<string, FuseAxisDetail>;
21
+ }
22
+ export type RadialBarLabelValue = {
23
+ label: string;
24
+ value: number;
25
+ color?: string;
26
+ };
27
+ export type RadialBarPoints = {
28
+ points: Array<{
29
+ x: string | number;
30
+ y: number;
31
+ }>;
32
+ };
33
+ export type RadialBarChartData = RadialBarLabelValue[] | RadialBarPoints | RadialBarModel | FuseWidgetLike | null | undefined;
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/radial-bar-chart/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,wCAAwC;AACxC,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,yEAAyE;IACzE,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC9C;AAED,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,mBAAmB,EAAE,GACrB,eAAe,GACf,cAAc,GACd,cAAc,GACd,IAAI,GACJ,SAAS,CAAC"}
@@ -0,0 +1,62 @@
1
+ declare const _default: {
2
+ "id": "radial-bar-chart",
3
+ "tag": "ui9000-radial-bar-chart",
4
+ "title": "Radial Bar Chart",
5
+ "description": "Chat-optimized radial bar chart rewritten in D3. One ring per category over a 270° sweep, no Redux.",
6
+ "chartTypeKeys": ["radialBarChart"],
7
+ "source": "client/libs/shared/components/src/Widgets/RadialBarChart/",
8
+ "stack": "d3",
9
+ "lazyImport": "@fusedashlabs/widgets/lazy/radial-bar-chart",
10
+ "entry": "@fusedashlabs/widgets/radial-bar-chart",
11
+ "usageConditions": {
12
+ "host": "mcp-chat",
13
+ "notFor": "fusedash-editor",
14
+ "mapsExcluded": true
15
+ },
16
+ "allowedActions": ["hover", "resize"],
17
+ "propsSchema": {
18
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
19
+ "type": "object",
20
+ "properties": {
21
+ "data": {
22
+ "oneOf": [
23
+ {
24
+ "type": "array",
25
+ "items": {
26
+ "type": "object",
27
+ "required": ["label", "value"],
28
+ "properties": {
29
+ "label": { "type": "string" },
30
+ "value": { "type": "number" },
31
+ "color": { "type": "string" }
32
+ }
33
+ }
34
+ },
35
+ {
36
+ "type": "object",
37
+ "description": "FuseDash WidgetItem-shaped payload",
38
+ "properties": {
39
+ "chartType": { "type": "string" },
40
+ "xAxe": { "type": "array", "items": { "type": "string" } },
41
+ "yAxe": { "type": "array", "items": { "type": "string" } },
42
+ "uniqueValues": { "type": "object" },
43
+ "formatting": { "type": "array" },
44
+ "axisDetails": { "type": "object" },
45
+ "data": { "type": "array" }
46
+ }
47
+ }
48
+ ]
49
+ },
50
+ "show-grid": { "type": "boolean" },
51
+ "show-legend": { "type": "boolean" },
52
+ "show-tooltip": { "type": "boolean" },
53
+ "scale": {
54
+ "type": "string",
55
+ "enum": ["compact", "default", "comfortable"]
56
+ }
57
+ }
58
+ }
59
+ }
60
+ ;
61
+
62
+ export default _default;
@@ -0,0 +1,42 @@
1
+ const id = "radial-bar-chart";
2
+ const tag = "ui9000-radial-bar-chart";
3
+ const title = "Radial Bar Chart";
4
+ const description = "Chat-optimized radial bar chart rewritten in D3. One ring per category over a 270° sweep, no Redux.";
5
+ const chartTypeKeys = ["radialBarChart"];
6
+ const source = "client/libs/shared/components/src/Widgets/RadialBarChart/";
7
+ const stack = "d3";
8
+ const lazyImport = "@fusedashlabs/widgets/lazy/radial-bar-chart";
9
+ const entry = "@fusedashlabs/widgets/radial-bar-chart";
10
+ const usageConditions = { "host": "mcp-chat", "notFor": "fusedash-editor", "mapsExcluded": true };
11
+ const allowedActions = ["hover", "resize"];
12
+ 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" }, "color": { "type": "string" } } } }, { "type": "object", "description": "FuseDash WidgetItem-shaped payload", "properties": { "chartType": { "type": "string" }, "xAxe": { "type": "array", "items": { "type": "string" } }, "yAxe": { "type": "array", "items": { "type": "string" } }, "uniqueValues": { "type": "object" }, "formatting": { "type": "array" }, "axisDetails": { "type": "object" }, "data": { "type": "array" } } }] }, "show-grid": { "type": "boolean" }, "show-legend": { "type": "boolean" }, "show-tooltip": { "type": "boolean" }, "scale": { "type": "string", "enum": ["compact", "default", "comfortable"] } } };
13
+ const radialBarMeta = {
14
+ id,
15
+ tag,
16
+ title,
17
+ description,
18
+ chartTypeKeys,
19
+ source,
20
+ stack,
21
+ lazyImport,
22
+ entry,
23
+ usageConditions,
24
+ allowedActions,
25
+ propsSchema
26
+ };
27
+ export {
28
+ allowedActions,
29
+ chartTypeKeys,
30
+ radialBarMeta as default,
31
+ description,
32
+ entry,
33
+ id,
34
+ lazyImport,
35
+ propsSchema,
36
+ source,
37
+ stack,
38
+ tag,
39
+ title,
40
+ usageConditions
41
+ };
42
+ //# sourceMappingURL=metadata.json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,29 @@
1
+ import { WidgetTheme } from '../../../types/index.js';
2
+ import { AxisLabelTooltipHandlers } from '../../../utils/axis-labels.js';
3
+ import { RadialBarDatum } from '../lib/types.js';
4
+ export interface RenderRadialBarChartOptions extends AxisLabelTooltipHandlers {
5
+ /** Rings from the inside out. */
6
+ bars: RadialBarDatum[];
7
+ width: number;
8
+ height: number;
9
+ margin: {
10
+ top: number;
11
+ right: number;
12
+ bottom: number;
13
+ left: number;
14
+ };
15
+ theme: WidgetTheme;
16
+ showGrid?: boolean;
17
+ showTooltip?: boolean;
18
+ onHover?: (payload: {
19
+ bar: RadialBarDatum;
20
+ event: MouseEvent;
21
+ }) => void;
22
+ onLeave?: () => void;
23
+ }
24
+ /**
25
+ * FuseDash RadialBarChart — D3 rewrite of the client widget.
26
+ * Rings sweep 270° clockwise from 12 o'clock; the legend lives in the Lit shell.
27
+ */
28
+ export declare function renderRadialBarChart(container: HTMLElement, options: RenderRadialBarChartOptions): void;
29
+ //# sourceMappingURL=draw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../../../src/components/radial-bar-chart/render/draw.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,+BAA+B,CAAC;AAWvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,WAAW,2BAA4B,SAAQ,wBAAwB;IAC3E,iCAAiC;IACjC,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;IACxE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAwBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,2BAA2B,GACnC,IAAI,CAmJN"}
@@ -0,0 +1,92 @@
1
+ import { select } from "d3-selection";
2
+ import { arc } from "d3-shape";
3
+ import { decorateManualAxisLabel } from "../../../utils/axis-labels.js";
4
+ import { FD, formatCompactNumber } from "../../../utils/fusedash-visual.js";
5
+ import { radialBarAngleScale, radialBarOuterRadius, radialBarRadiusScale, radialBarTickAnchor, RADIAL_BAR_SWEEP, radialBarArcWidth, radialBarLabelLimit } from "../lib/domain.js";
6
+ function drawRings(parent, radii, endAngle) {
7
+ const ring = arc().innerRadius((d) => d.radius).outerRadius((d) => d.radius).startAngle(0).endAngle(endAngle);
8
+ parent.selectAll("path").data(radii.map((radius) => ({ radius }))).enter().append("path").attr("class", "radial-grid-arc").attr("d", ring).attr("fill", "none").attr("stroke", FD.radialBarGridStroke);
9
+ }
10
+ function renderRadialBarChart(container, options) {
11
+ const {
12
+ bars,
13
+ width,
14
+ height,
15
+ margin,
16
+ showGrid = true,
17
+ showTooltip = true,
18
+ onHover,
19
+ onLeave
20
+ } = options;
21
+ container.replaceChildren();
22
+ if (!bars.length || width <= 0 || height <= 0) return;
23
+ const angleScale = radialBarAngleScale(bars.map((bar) => bar.value));
24
+ const ticks = angleScale.ticks(FD.radialBarTicks);
25
+ const outerRadius = radialBarOuterRadius(width, height, margin);
26
+ if (outerRadius <= 0) return;
27
+ const innerRadius = outerRadius * FD.radialBarInnerRadiusRatio;
28
+ const radiusScale = radialBarRadiusScale(innerRadius, outerRadius);
29
+ const ringCount = bars.length;
30
+ const ringInterval = (outerRadius - innerRadius) / ringCount;
31
+ const arcWidth = radialBarArcWidth(innerRadius, outerRadius, ringCount);
32
+ const rimRadius = radiusScale(outerRadius);
33
+ const holeRadius = radiusScale(innerRadius);
34
+ const endAngle = angleScale(angleScale.domain()[1]);
35
+ const zeroAngle = angleScale(0);
36
+ const ringRadius = (index) => radiusScale(innerRadius + ringInterval * index) + ringInterval / 2;
37
+ const svg = select(container).append("svg").attr("width", width).attr("height", height).attr("viewBox", `0 0 ${width} ${height}`);
38
+ const root = svg.append("g").attr("transform", `translate(${width / 2}, ${height / 2})`);
39
+ if (showGrid) {
40
+ drawRings(
41
+ root.append("g").attr("class", "radial-grid"),
42
+ Array.from(
43
+ { length: ringCount + 1 },
44
+ (_, i) => radiusScale(innerRadius + ringInterval * i)
45
+ ),
46
+ endAngle
47
+ );
48
+ }
49
+ const axisGroup = root.append("g").attr("class", "radial-axis");
50
+ const labelLimit = radialBarLabelLimit(innerRadius, outerRadius);
51
+ ticks.forEach((value) => {
52
+ const angle = angleScale(value) - Math.PI / 2;
53
+ const cos = Math.cos(angle);
54
+ const sin = Math.sin(angle);
55
+ if (showGrid) {
56
+ axisGroup.append("line").attr("x1", holeRadius * cos).attr("y1", holeRadius * sin).attr("x2", rimRadius * cos).attr("y2", rimRadius * sin).attr("stroke", FD.radialBarGridStroke).attr("stroke-linejoin", "round").attr("stroke-linecap", "round").attr("stroke-dasharray", value === 0 ? null : FD.radialBarTickDash);
57
+ }
58
+ const labelRadius = rimRadius + FD.radialBarTickLabelOffset;
59
+ axisGroup.append("text").attr("class", "radial-tick-label").attr("x", labelRadius * cos).attr("y", labelRadius * sin).attr("text-anchor", radialBarTickAnchor(angle)).attr("dominant-baseline", "central").attr("font-size", FD.radialBarTickLabelSize).attr("fill", FD.radialBarLabelFill).text(formatCompactNumber(value));
60
+ });
61
+ const ringLabels = root.append("g").attr("class", "radial-ring-labels");
62
+ bars.forEach((bar, i) => {
63
+ const text = ringLabels.append("text").attr("class", "radial-ring-label").attr("x", -rimRadius).attr("y", -ringRadius(i)).attr("text-anchor", "start").attr("dominant-baseline", "central").attr("font-size", FD.radialBarRingLabelSize).attr("fill", FD.radialBarLabelFill);
64
+ decorateManualAxisLabel(text, bar.label, {
65
+ maxLength: labelLimit,
66
+ onAxisLabelHover: options.onAxisLabelHover,
67
+ onAxisLabelLeave: options.onAxisLabelLeave
68
+ });
69
+ });
70
+ const barArc = arc().cornerRadius(FD.radialBarArcCornerRadius).innerRadius((d) => ringRadius(d.index) - arcWidth / 2).outerRadius((d) => ringRadius(d.index) + arcWidth / 2).startAngle(
71
+ (d) => d.value >= 0 ? zeroAngle : Math.min(angleScale(d.value), RADIAL_BAR_SWEEP)
72
+ ).endAngle(
73
+ (d) => d.value >= 0 ? Math.min(angleScale(d.value), RADIAL_BAR_SWEEP) : zeroAngle
74
+ );
75
+ const paths = root.append("g").attr("class", "radial-bars").selectAll("path").data(bars.map((bar, index) => ({ ...bar, index }))).enter().append("path").attr("class", "radial-bar").attr("d", barArc).attr("fill", (d) => d.color).attr("opacity", FD.radialBarArcOpacity);
76
+ if (showTooltip && onHover) {
77
+ paths.style("cursor", "pointer").on("mouseenter", function(event, datum) {
78
+ root.selectAll(".radial-bar").attr("opacity", FD.radialBarArcOpacityDimmed);
79
+ select(this).attr("opacity", 1);
80
+ onHover({ bar: datum, event });
81
+ }).on("mousemove", (event, datum) => {
82
+ onHover({ bar: datum, event });
83
+ }).on("mouseleave", () => {
84
+ root.selectAll(".radial-bar").attr("opacity", FD.radialBarArcOpacity);
85
+ onLeave == null ? void 0 : onLeave();
86
+ });
87
+ }
88
+ }
89
+ export {
90
+ renderRadialBarChart
91
+ };
92
+ //# sourceMappingURL=draw.js.map