@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,8 @@
1
+ import { BiasVarianceSeries } from './types.js';
2
+ /** Client `extent(data, d => x)` with the Visx `[0, 1]` fallback. */
3
+ export declare function biasVarianceXDomain(series: BiasVarianceSeries[]): [number, number];
4
+ /** Client `[0, max(y) * 1.1]` — the plot always sits on a zero baseline. */
5
+ export declare function biasVarianceYDomain(series: BiasVarianceSeries[]): [number, number];
6
+ /** Union of every series' x values, ascending — the crosshair snaps to these. */
7
+ export declare function biasVarianceXValues(series: BiasVarianceSeries[]): number[];
8
+ //# sourceMappingURL=domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../../src/components/bias-variance-tradeoff-chart/lib/domain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAYlF;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CASlF;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAM1E"}
@@ -0,0 +1,37 @@
1
+ import { FD } from "../../../utils/fusedash-visual.js";
2
+ function biasVarianceXDomain(series) {
3
+ let min = Infinity;
4
+ let max = -Infinity;
5
+ for (const s of series) {
6
+ for (const p of s.points) {
7
+ if (p.x < min) min = p.x;
8
+ if (p.x > max) max = p.x;
9
+ }
10
+ }
11
+ if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];
12
+ if (min === max) return [min, min + 1];
13
+ return [min, max];
14
+ }
15
+ function biasVarianceYDomain(series) {
16
+ let max = -Infinity;
17
+ for (const s of series) {
18
+ for (const p of s.points) {
19
+ if (p.y > max) max = p.y;
20
+ }
21
+ }
22
+ if (!Number.isFinite(max) || max <= 0) return [0, 1];
23
+ return [0, max * FD.biasVarianceDomainPadFactor];
24
+ }
25
+ function biasVarianceXValues(series) {
26
+ const seen = /* @__PURE__ */ new Set();
27
+ for (const s of series) {
28
+ for (const p of s.points) seen.add(p.x);
29
+ }
30
+ return [...seen].sort((a, b) => a - b);
31
+ }
32
+ export {
33
+ biasVarianceXDomain,
34
+ biasVarianceXValues,
35
+ biasVarianceYDomain
36
+ };
37
+ //# sourceMappingURL=domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.js","sources":["../../../../src/components/bias-variance-tradeoff-chart/lib/domain.ts"],"sourcesContent":["import { FD } from '../../../utils/fusedash-visual.js';\nimport type { BiasVarianceSeries } from './types.js';\n\n/** Client `extent(data, d => x)` with the Visx `[0, 1]` fallback. */\nexport function biasVarianceXDomain(series: BiasVarianceSeries[]): [number, number] {\n let min = Infinity;\n let max = -Infinity;\n for (const s of series) {\n for (const p of s.points) {\n if (p.x < min) min = p.x;\n if (p.x > max) max = p.x;\n }\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\n if (min === max) return [min, min + 1];\n return [min, max];\n}\n\n/** Client `[0, max(y) * 1.1]` — the plot always sits on a zero baseline. */\nexport function biasVarianceYDomain(series: BiasVarianceSeries[]): [number, number] {\n let max = -Infinity;\n for (const s of series) {\n for (const p of s.points) {\n if (p.y > max) max = p.y;\n }\n }\n if (!Number.isFinite(max) || max <= 0) return [0, 1];\n return [0, max * FD.biasVarianceDomainPadFactor];\n}\n\n/** Union of every series' x values, ascending — the crosshair snaps to these. */\nexport function biasVarianceXValues(series: BiasVarianceSeries[]): number[] {\n const seen = new Set<number>();\n for (const s of series) {\n for (const p of s.points) seen.add(p.x);\n }\n return [...seen].sort((a, b) => a - b);\n}\n"],"names":[],"mappings":";AAIO,SAAS,oBAAoB,QAAgD;AAClF,MAAI,MAAM;AACV,MAAI,MAAM;AACV,aAAW,KAAK,QAAQ;AACtB,eAAW,KAAK,EAAE,QAAQ;AACxB,UAAI,EAAE,IAAI,IAAK,OAAM,EAAE;AACvB,UAAI,EAAE,IAAI,IAAK,OAAM,EAAE;AAAA,IACzB;AAAA,EACF;AACA,MAAI,CAAC,OAAO,SAAS,GAAG,KAAK,CAAC,OAAO,SAAS,GAAG,EAAG,QAAO,CAAC,GAAG,CAAC;AAChE,MAAI,QAAQ,IAAK,QAAO,CAAC,KAAK,MAAM,CAAC;AACrC,SAAO,CAAC,KAAK,GAAG;AAClB;AAGO,SAAS,oBAAoB,QAAgD;AAClF,MAAI,MAAM;AACV,aAAW,KAAK,QAAQ;AACtB,eAAW,KAAK,EAAE,QAAQ;AACxB,UAAI,EAAE,IAAI,IAAK,OAAM,EAAE;AAAA,IACzB;AAAA,EACF;AACA,MAAI,CAAC,OAAO,SAAS,GAAG,KAAK,OAAO,EAAG,QAAO,CAAC,GAAG,CAAC;AACnD,SAAO,CAAC,GAAG,MAAM,GAAG,2BAA2B;AACjD;AAGO,SAAS,oBAAoB,QAAwC;AAC1E,QAAM,2BAAW,IAAA;AACjB,aAAW,KAAK,QAAQ;AACtB,eAAW,KAAK,EAAE,OAAQ,MAAK,IAAI,EAAE,CAAC;AAAA,EACxC;AACA,SAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AACvC;"}
@@ -0,0 +1,3 @@
1
+ /** Tooltip / reference-label numbers: trim trailing zeros, keep small floats readable. */
2
+ export declare function formatTradeoffValue(value: number): string;
3
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/components/bias-variance-tradeoff-chart/lib/format.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD"}
@@ -0,0 +1,9 @@
1
+ function formatTradeoffValue(value) {
2
+ if (!Number.isFinite(value)) return "";
3
+ if (Number.isInteger(value)) return String(value);
4
+ return String(Number(value.toFixed(3)));
5
+ }
6
+ export {
7
+ formatTradeoffValue
8
+ };
9
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sources":["../../../../src/components/bias-variance-tradeoff-chart/lib/format.ts"],"sourcesContent":["/** Tooltip / reference-label numbers: trim trailing zeros, keep small floats readable. */\nexport function formatTradeoffValue(value: number): string {\n if (!Number.isFinite(value)) return '';\n if (Number.isInteger(value)) return String(value);\n return String(Number(value.toFixed(3)));\n}\n"],"names":[],"mappings":"AACO,SAAS,oBAAoB,OAAuB;AACzD,MAAI,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACpC,MAAI,OAAO,UAAU,KAAK,EAAG,QAAO,OAAO,KAAK;AAChD,SAAO,OAAO,OAAO,MAAM,QAAQ,CAAC,CAAC,CAAC;AACxC;"}
@@ -0,0 +1,5 @@
1
+ export { normalizeBiasVarianceData } from './normalize.js';
2
+ export { biasVarianceXDomain, biasVarianceXValues, biasVarianceYDomain, } from './domain.js';
3
+ export { formatTradeoffValue } from './format.js';
4
+ export type { BiasVarianceAxisDetail, BiasVarianceChartData, BiasVarianceChartInput, BiasVarianceDomainLimit, BiasVarianceHoverEntry, BiasVarianceModel, BiasVariancePoint, BiasVarianceSeries, } from './types.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/bias-variance-tradeoff-chart/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { BiasVarianceChartInput, BiasVarianceModel } from './types.js';
2
+ /** Normalize FuseDash widget / chat payloads into tradeoff curves. */
3
+ export declare function normalizeBiasVarianceData(input: BiasVarianceChartInput): BiasVarianceModel;
4
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/components/bias-variance-tradeoff-chart/lib/normalize.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,sBAAsB,EAEtB,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AA8HpB,sEAAsE;AACtE,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,sBAAsB,GAC5B,iBAAiB,CAwCnB"}
@@ -0,0 +1,135 @@
1
+ import { resolveFormattingColor } from "../../../utils/fuse-palette.js";
2
+ import { isFuseWidgetPayload, rowsOf, firstField, resolveUniqueValuesOrder } from "../../../utils/fuse-widget.js";
3
+ import { FD } from "../../../utils/fusedash-visual.js";
4
+ const EMPTY = { series: [], domainsLimits: [] };
5
+ function colorForSeries(formatting, key, index, seriesCount) {
6
+ const hasKey = formatting == null ? void 0 : formatting.some((entry) => String(entry.key) === key);
7
+ if (hasKey) return resolveFormattingColor(formatting, key, seriesCount);
8
+ return FD.biasVarianceSeries[index % FD.biasVarianceSeries.length];
9
+ }
10
+ function toNumber(value) {
11
+ return Number(value ?? 0);
12
+ }
13
+ function sortPoints(points) {
14
+ return points.sort((a, b) => a.x - b.x);
15
+ }
16
+ function normalizeDomainLimits(raw) {
17
+ if (!Array.isArray(raw)) return [];
18
+ const limits = [];
19
+ for (const item of raw) {
20
+ if (!item || typeof item !== "object") continue;
21
+ const entry = item;
22
+ if (!Array.isArray(entry.values)) continue;
23
+ const values = entry.values.map((v) => Number(v)).filter((v) => Number.isFinite(v)).slice(0, 2);
24
+ if (!values.length) continue;
25
+ limits.push({
26
+ values,
27
+ color: typeof entry.color === "string" ? entry.color : void 0,
28
+ orientation: entry.orientation === "vertical" ? "vertical" : "horizontal"
29
+ });
30
+ }
31
+ return limits;
32
+ }
33
+ function fromFuseWidget(widget) {
34
+ const rows = rowsOf(widget);
35
+ const xKey = firstField(widget.xAxe ?? void 0) ?? "x";
36
+ const yKey = firstField(widget.yAxe ?? void 0) ?? "y";
37
+ const seriesKey = firstField(widget.groupBy ?? void 0) ?? "series";
38
+ const byGroup = /* @__PURE__ */ new Map();
39
+ for (const row of rows) {
40
+ const x = toNumber(row[xKey]);
41
+ const y = toNumber(row[yKey]);
42
+ if (!Number.isFinite(x) || !Number.isFinite(y)) continue;
43
+ const id = String(row[seriesKey] ?? "");
44
+ const points = byGroup.get(id) ?? [];
45
+ points.push({ x, y });
46
+ byGroup.set(id, points);
47
+ }
48
+ const ids = resolveUniqueValuesOrder(byGroup.keys(), widget.uniqueValues, seriesKey);
49
+ const series = ids.filter((id) => byGroup.has(id)).map((id, index) => ({
50
+ id,
51
+ name: id,
52
+ color: colorForSeries(widget.formatting, id, index, ids.length),
53
+ points: sortPoints(byGroup.get(id) ?? [])
54
+ })).filter((s) => s.points.length > 0);
55
+ return {
56
+ series,
57
+ domainsLimits: normalizeDomainLimits(
58
+ widget.domainsLimits
59
+ ),
60
+ xField: firstField(widget.xAxe ?? void 0),
61
+ yField: firstField(widget.yAxe ?? void 0),
62
+ groupField: firstField(widget.groupBy ?? void 0),
63
+ axisDetails: widget.axisDetails
64
+ };
65
+ }
66
+ function fromSeriesList(list) {
67
+ return list.map((s, index) => ({
68
+ id: s.id,
69
+ name: s.name ?? s.id,
70
+ color: s.color ?? FD.biasVarianceSeries[index % FD.biasVarianceSeries.length],
71
+ points: sortPoints(
72
+ (s.points ?? []).map((p) => ({ x: Number(p.x), y: Number(p.y) })).filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y))
73
+ )
74
+ })).filter((s) => s.points.length > 0);
75
+ }
76
+ function fromLabelValues(rows) {
77
+ const points = [];
78
+ rows.forEach((row, index) => {
79
+ const parsed = Number(row.label);
80
+ const x = Number.isFinite(parsed) ? parsed : index;
81
+ const y = Number(row.value);
82
+ if (!Number.isFinite(y)) return;
83
+ points.push({ x, y });
84
+ });
85
+ if (!points.length) return [];
86
+ return [
87
+ {
88
+ id: "default",
89
+ name: "Series",
90
+ color: FD.biasVarianceSeries[0],
91
+ points: sortPoints(points)
92
+ }
93
+ ];
94
+ }
95
+ function normalizeBiasVarianceData(input) {
96
+ if (!input) return EMPTY;
97
+ if (Array.isArray(input)) {
98
+ if (!input.length) return EMPTY;
99
+ const first = input[0];
100
+ if ("points" in first) {
101
+ return { ...EMPTY, series: fromSeriesList(input) };
102
+ }
103
+ if ("label" in first && "value" in first) {
104
+ return {
105
+ ...EMPTY,
106
+ series: fromLabelValues(input)
107
+ };
108
+ }
109
+ return EMPTY;
110
+ }
111
+ if (isFuseWidgetPayload(input)) return fromFuseWidget(input);
112
+ if (typeof input === "object") {
113
+ const chart = input;
114
+ const domainsLimits = normalizeDomainLimits(chart.domainsLimits);
115
+ if (Array.isArray(chart.series)) {
116
+ return {
117
+ series: fromSeriesList(chart.series),
118
+ domainsLimits
119
+ };
120
+ }
121
+ if (Array.isArray(chart.points)) {
122
+ return {
123
+ series: fromSeriesList([
124
+ { id: "default", name: "Series", points: chart.points }
125
+ ]),
126
+ domainsLimits
127
+ };
128
+ }
129
+ }
130
+ return EMPTY;
131
+ }
132
+ export {
133
+ normalizeBiasVarianceData
134
+ };
135
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sources":["../../../../src/components/bias-variance-tradeoff-chart/lib/normalize.ts"],"sourcesContent":["import { 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 { FD } from '../../../utils/fusedash-visual.js';\nimport type {\n BiasVarianceChartInput,\n BiasVarianceDomainLimit,\n BiasVarianceModel,\n BiasVariancePoint,\n BiasVarianceSeries,\n} from './types.js';\n\nconst EMPTY: BiasVarianceModel = { series: [], domainsLimits: [] };\n\n/**\n * Client widget palette — the FuseDash BiasVarianceTradeoffChart carries its own\n * `colors` array instead of going through `formatting`, so that stays the\n * default. An explicit `formatting` block on the payload still wins.\n */\nfunction colorForSeries(\n formatting: FuseWidgetLike['formatting'],\n key: string,\n index: number,\n seriesCount: number,\n): string {\n const hasKey = formatting?.some((entry) => String(entry.key) === key);\n if (hasKey) return resolveFormattingColor(formatting, key, seriesCount);\n return FD.biasVarianceSeries[index % FD.biasVarianceSeries.length];\n}\n\nfunction toNumber(value: unknown): number {\n return Number(value ?? 0);\n}\n\nfunction sortPoints(points: BiasVariancePoint[]): BiasVariancePoint[] {\n return points.sort((a, b) => a.x - b.x);\n}\n\n/** `domainsLimits` is optional on the widget and hand-authored — keep only usable entries. */\nfunction normalizeDomainLimits(raw: unknown): BiasVarianceDomainLimit[] {\n if (!Array.isArray(raw)) return [];\n const limits: BiasVarianceDomainLimit[] = [];\n for (const item of raw) {\n if (!item || typeof item !== 'object') continue;\n const entry = item as { values?: unknown; color?: unknown; orientation?: unknown };\n if (!Array.isArray(entry.values)) continue;\n const values = entry.values\n .map((v) => Number(v))\n .filter((v) => Number.isFinite(v))\n .slice(0, 2);\n if (!values.length) continue;\n limits.push({\n values,\n color: typeof entry.color === 'string' ? entry.color : undefined,\n orientation: entry.orientation === 'vertical' ? 'vertical' : 'horizontal',\n });\n }\n return limits;\n}\n\nfunction fromFuseWidget(widget: FuseWidgetLike): BiasVarianceModel {\n const rows = rowsOf(widget);\n const xKey = firstField(widget.xAxe ?? undefined) ?? 'x';\n const yKey = firstField(widget.yAxe ?? undefined) ?? 'y';\n const seriesKey = firstField(widget.groupBy ?? undefined) ?? 'series';\n\n const byGroup = new Map<string, BiasVariancePoint[]>();\n for (const row of rows) {\n const x = toNumber(row[xKey]);\n const y = toNumber(row[yKey]);\n if (!Number.isFinite(x) || !Number.isFinite(y)) continue;\n const id = String(row[seriesKey] ?? '');\n const points = byGroup.get(id) ?? [];\n points.push({ x, y });\n byGroup.set(id, points);\n }\n\n const ids = resolveUniqueValuesOrder(byGroup.keys(), widget.uniqueValues, seriesKey);\n const series = ids\n .filter((id) => byGroup.has(id))\n .map((id, index) => ({\n id,\n name: id,\n color: colorForSeries(widget.formatting, id, index, ids.length),\n points: sortPoints(byGroup.get(id) ?? []),\n }))\n .filter((s) => s.points.length > 0);\n\n return {\n series,\n domainsLimits: normalizeDomainLimits(\n (widget as { domainsLimits?: unknown }).domainsLimits,\n ),\n xField: firstField(widget.xAxe ?? undefined),\n yField: firstField(widget.yAxe ?? undefined),\n groupField: firstField(widget.groupBy ?? undefined),\n axisDetails: widget.axisDetails as BiasVarianceModel['axisDetails'],\n };\n}\n\nfunction fromSeriesList(list: BiasVarianceSeries[]): BiasVarianceSeries[] {\n return list\n .map((s, index) => ({\n id: s.id,\n name: s.name ?? s.id,\n color: s.color ?? FD.biasVarianceSeries[index % FD.biasVarianceSeries.length],\n points: sortPoints(\n (s.points ?? [])\n .map((p) => ({ x: Number(p.x), y: Number(p.y) }))\n .filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y)),\n ),\n }))\n .filter((s) => s.points.length > 0);\n}\n\n/** `[{ label, value }]` — labels are the complexity steps, index when not numeric. */\nfunction fromLabelValues(rows: Array<{ label?: unknown; value?: unknown }>): BiasVarianceSeries[] {\n const points: BiasVariancePoint[] = [];\n rows.forEach((row, index) => {\n const parsed = Number(row.label);\n const x = Number.isFinite(parsed) ? parsed : index;\n const y = Number(row.value);\n if (!Number.isFinite(y)) return;\n points.push({ x, y });\n });\n if (!points.length) return [];\n return [\n {\n id: 'default',\n name: 'Series',\n color: FD.biasVarianceSeries[0],\n points: sortPoints(points),\n },\n ];\n}\n\n/** Normalize FuseDash widget / chat payloads into tradeoff curves. */\nexport function normalizeBiasVarianceData(\n input: BiasVarianceChartInput,\n): BiasVarianceModel {\n if (!input) return EMPTY;\n\n if (Array.isArray(input)) {\n if (!input.length) return EMPTY;\n const first = input[0] as unknown as Record<string, unknown>;\n if ('points' in first) {\n return { ...EMPTY, series: fromSeriesList(input as BiasVarianceSeries[]) };\n }\n if ('label' in first && 'value' in first) {\n return {\n ...EMPTY,\n series: fromLabelValues(input as unknown as Array<{ label: unknown; value: unknown }>),\n };\n }\n return EMPTY;\n }\n\n if (isFuseWidgetPayload(input)) return fromFuseWidget(input);\n\n if (typeof input === 'object') {\n const chart = input as { series?: unknown; points?: unknown; domainsLimits?: unknown };\n const domainsLimits = normalizeDomainLimits(chart.domainsLimits);\n if (Array.isArray(chart.series)) {\n return {\n series: fromSeriesList(chart.series as BiasVarianceSeries[]),\n domainsLimits,\n };\n }\n if (Array.isArray(chart.points)) {\n return {\n series: fromSeriesList([\n { id: 'default', name: 'Series', points: chart.points as BiasVariancePoint[] },\n ]),\n domainsLimits,\n };\n }\n }\n\n return EMPTY;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /** One point on a tradeoff curve — both axes are continuous. */
2
+ export interface BiasVariancePoint {
3
+ x: number;
4
+ y: number;
5
+ }
6
+ export interface BiasVarianceSeries {
7
+ id: string;
8
+ name?: string;
9
+ color?: string;
10
+ /** Sorted ascending by `x` */
11
+ points: BiasVariancePoint[];
12
+ }
13
+ /** FuseDash `domainsLimits` entry — a reference line, or a band when it carries two values. */
14
+ export interface BiasVarianceDomainLimit {
15
+ values: number[];
16
+ color?: string;
17
+ orientation: 'vertical' | 'horizontal';
18
+ }
19
+ export interface BiasVarianceAxisDetail {
20
+ label?: string;
21
+ measure_unit_symbol?: string;
22
+ }
23
+ /** One row of the crosshair tooltip. */
24
+ export interface BiasVarianceHoverEntry {
25
+ seriesId: string;
26
+ seriesName: string;
27
+ color: string;
28
+ value: number;
29
+ /** The curve nearest the cursor — siblings are dimmed while it is hovered. */
30
+ focused: boolean;
31
+ }
32
+ export interface BiasVarianceModel {
33
+ series: BiasVarianceSeries[];
34
+ domainsLimits: BiasVarianceDomainLimit[];
35
+ xField?: string;
36
+ yField?: string;
37
+ groupField?: string;
38
+ axisDetails?: Record<string, BiasVarianceAxisDetail>;
39
+ }
40
+ /** Chat shape: `{ series: [...] }` or `{ points: [...] }` for a single curve. */
41
+ export interface BiasVarianceChartData {
42
+ series?: BiasVarianceSeries[];
43
+ points?: BiasVariancePoint[];
44
+ domainsLimits?: BiasVarianceDomainLimit[];
45
+ }
46
+ export type BiasVarianceChartInput = BiasVarianceChartData | BiasVarianceSeries[] | Record<string, unknown> | null | undefined;
47
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/bias-variance-tradeoff-chart/lib/types.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,+FAA+F;AAC/F,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,UAAU,GAAG,YAAY,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wCAAwC;AACxC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,aAAa,EAAE,uBAAuB,EAAE,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACtD;AAED,iFAAiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;CAC3C;AAED,MAAM,MAAM,sBAAsB,GAC9B,qBAAqB,GACrB,kBAAkB,EAAE,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,IAAI,GACJ,SAAS,CAAC"}
@@ -0,0 +1,41 @@
1
+ declare const _default: {
2
+ "id": "bias-variance-tradeoff-chart",
3
+ "tag": "ui9000-bias-variance-tradeoff-chart",
4
+ "title": "Bias-Variance Tradeoff Chart",
5
+ "description": "Chat-optimized bias-variance tradeoff curves. FuseDash BiasVarianceTradeoffChart Visx → D3.",
6
+ "chartTypeKeys": ["biasVarianceTradeoffChart"],
7
+ "source": "client/libs/shared/components/src/Widgets/BiasVarianceTradeoffChart/",
8
+ "stack": "d3",
9
+ "lazyImport": "@fusedashlabs/widgets/lazy/bias-variance-tradeoff-chart",
10
+ "entry": "@fusedashlabs/widgets/bias-variance-tradeoff-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": "object",
25
+ "description": "FuseDash WidgetItem-shaped payload (numeric xAxe / yAxe, groupBy series, optional domainsLimits)"
26
+ },
27
+ {
28
+ "type": "object",
29
+ "description": "Chat shape: { series: [{ id, name, color, points: [{ x, y }] }], domainsLimits }"
30
+ }
31
+ ]
32
+ },
33
+ "show-grid": { "type": "boolean" },
34
+ "show-legend": { "type": "boolean" },
35
+ "show-tooltip": { "type": "boolean" }
36
+ }
37
+ }
38
+ }
39
+ ;
40
+
41
+ export default _default;
@@ -0,0 +1,42 @@
1
+ const id = "bias-variance-tradeoff-chart";
2
+ const tag = "ui9000-bias-variance-tradeoff-chart";
3
+ const title = "Bias-Variance Tradeoff Chart";
4
+ const description = "Chat-optimized bias-variance tradeoff curves. FuseDash BiasVarianceTradeoffChart Visx → D3.";
5
+ const chartTypeKeys = ["biasVarianceTradeoffChart"];
6
+ const source = "client/libs/shared/components/src/Widgets/BiasVarianceTradeoffChart/";
7
+ const stack = "d3";
8
+ const lazyImport = "@fusedashlabs/widgets/lazy/bias-variance-tradeoff-chart";
9
+ const entry = "@fusedashlabs/widgets/bias-variance-tradeoff-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": "object", "description": "FuseDash WidgetItem-shaped payload (numeric xAxe / yAxe, groupBy series, optional domainsLimits)" }, { "type": "object", "description": "Chat shape: { series: [{ id, name, color, points: [{ x, y }] }], domainsLimits }" }] }, "show-grid": { "type": "boolean" }, "show-legend": { "type": "boolean" }, "show-tooltip": { "type": "boolean" } } };
13
+ const biasVarianceTradeoffMeta = {
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
+ biasVarianceTradeoffMeta 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,31 @@
1
+ import { WidgetTheme } from '../../../types/index.js';
2
+ import { BiasVarianceHoverEntry, BiasVarianceModel } from '../lib/index.js';
3
+ export interface RenderBiasVarianceChartOptions {
4
+ model: BiasVarianceModel;
5
+ width: number;
6
+ height: number;
7
+ /** FuseDash BiasVarianceTradeoffChart margins when omitted by the host */
8
+ margin?: {
9
+ top: number;
10
+ right: number;
11
+ bottom: number;
12
+ left: number;
13
+ };
14
+ theme: WidgetTheme;
15
+ showGrid?: boolean;
16
+ showTooltip?: boolean;
17
+ onHover?: (payload: {
18
+ x: number;
19
+ entries: BiasVarianceHoverEntry[];
20
+ event: MouseEvent;
21
+ }) => void;
22
+ onLeave?: () => void;
23
+ }
24
+ /**
25
+ * FuseDash BiasVarianceTradeoffChart — D3 rewrite.
26
+ *
27
+ * Coordinate system matches the client Visx build: both scales carry the margin
28
+ * in their range, so there is no inner plot translate.
29
+ */
30
+ export declare function renderBiasVarianceChart(container: HTMLElement, options: RenderBiasVarianceChartOptions): void;
31
+ //# sourceMappingURL=draw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../../../src/components/bias-variance-tradeoff-chart/render/draw.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAML,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EAGvB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,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,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE;QAClB,CAAC,EAAE,MAAM,CAAC;QACV,OAAO,EAAE,sBAAsB,EAAE,CAAC;QAClC,KAAK,EAAE,UAAU,CAAC;KACnB,KAAK,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAiKD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,8BAA8B,GACtC,IAAI,CA+ON"}
@@ -0,0 +1,203 @@
1
+ import { scaleLinear } from "d3-scale";
2
+ import { select, pointer } from "d3-selection";
3
+ import { line, curveMonotoneX } from "d3-shape";
4
+ import { FD, seriesColor } from "../../../utils/fusedash-visual.js";
5
+ import { biasVarianceXDomain, biasVarianceYDomain, biasVarianceXValues } from "../lib/domain.js";
6
+ import { formatTradeoffValue } from "../lib/format.js";
7
+ function resolveColor(series, index, theme) {
8
+ if (series.color) return series.color;
9
+ if (index === 0 && theme.primary) return theme.primary;
10
+ if (index === 1 && theme.secondary) return theme.secondary;
11
+ return seriesColor(index);
12
+ }
13
+ function clamp(value, min, max) {
14
+ return Math.max(min, Math.min(max, value));
15
+ }
16
+ function appendLimitLabel(parent, opts) {
17
+ const { x, y, text, align } = opts;
18
+ const width = text.length * 6 + 8;
19
+ const height = 16;
20
+ const left = align === "center" ? x - width / 2 : x + 8;
21
+ parent.append("rect").attr("x", left).attr("y", y).attr("width", width).attr("height", height).attr("rx", 6).attr("ry", 6).attr("fill", FD.domainLimitLabelFill);
22
+ parent.append("text").attr("x", left + width / 2).attr("y", y + 11).attr("text-anchor", "middle").attr("fill", FD.domainLimitLabelText).attr("font-size", FD.domainLimitLabelSize).text(text);
23
+ }
24
+ function renderDomainLimits(root, limits, xScale, yScale, bounds) {
25
+ const arrow = FD.domainLimitArrow;
26
+ const layer = root.append("g").attr("class", "domain-limits").attr("pointer-events", "none");
27
+ for (const limit of limits) {
28
+ const color = limit.color || FD.domainLimitColor;
29
+ const group = layer.append("g").attr("class", `domain-limit domain-limit--${limit.orientation}`);
30
+ const hasBand = limit.values.length === 2;
31
+ if (limit.orientation === "vertical") {
32
+ const positions2 = limit.values.map(
33
+ (v) => clamp(xScale(v), bounds.left, bounds.right)
34
+ );
35
+ if (hasBand) {
36
+ group.append("rect").attr("x", Math.min(positions2[0], positions2[1])).attr("y", bounds.top).attr("width", Math.abs(positions2[1] - positions2[0])).attr("height", bounds.bottom - bounds.top).attr("fill", color).attr("fill-opacity", FD.domainLimitFillOpacity);
37
+ }
38
+ positions2.forEach((x, i) => {
39
+ group.append("line").attr("x1", x).attr("x2", x).attr("y1", bounds.top).attr("y2", bounds.bottom).attr("stroke", color).attr("stroke-dasharray", FD.domainLimitDash);
40
+ group.append("path").attr("d", `M ${x},${bounds.top + arrow} L ${x - 6},${bounds.top} L ${x + 6},${bounds.top} Z`).attr("fill", color);
41
+ group.append("path").attr(
42
+ "d",
43
+ `M ${x},${bounds.bottom - arrow} L ${x - 6},${bounds.bottom} L ${x + 6},${bounds.bottom} Z`
44
+ ).attr("fill", color);
45
+ appendLimitLabel(group, {
46
+ x,
47
+ y: bounds.top + arrow,
48
+ text: formatTradeoffValue(limit.values[i]),
49
+ align: "center"
50
+ });
51
+ });
52
+ continue;
53
+ }
54
+ const positions = limit.values.map((v) => clamp(yScale(v), bounds.top, bounds.bottom));
55
+ if (hasBand) {
56
+ group.append("rect").attr("x", bounds.left).attr("y", Math.min(positions[0], positions[1])).attr("width", bounds.right - bounds.left).attr("height", Math.abs(positions[1] - positions[0])).attr("fill", color).attr("fill-opacity", FD.domainLimitFillOpacity);
57
+ }
58
+ positions.forEach((y, i) => {
59
+ group.append("line").attr("x1", bounds.left).attr("x2", bounds.right).attr("y1", y).attr("y2", y).attr("stroke", color).attr("stroke-dasharray", FD.domainLimitDash);
60
+ group.append("path").attr(
61
+ "d",
62
+ `M ${bounds.right - arrow},${y} L ${bounds.right},${y - 6} L ${bounds.right},${y + 6} Z`
63
+ ).attr("fill", color);
64
+ group.append("path").attr(
65
+ "d",
66
+ `M ${bounds.left + arrow},${y} L ${bounds.left},${y - 6} L ${bounds.left},${y + 6} Z`
67
+ ).attr("fill", color);
68
+ appendLimitLabel(group, {
69
+ x: bounds.left,
70
+ y: y - 17,
71
+ text: formatTradeoffValue(limit.values[i]),
72
+ align: "right"
73
+ });
74
+ });
75
+ }
76
+ }
77
+ function renderBiasVarianceChart(container, options) {
78
+ const {
79
+ model,
80
+ width,
81
+ height,
82
+ margin = { ...FD.biasVarianceMargin },
83
+ theme,
84
+ showGrid = true,
85
+ showTooltip = true,
86
+ onHover,
87
+ onLeave
88
+ } = options;
89
+ container.replaceChildren();
90
+ const { series } = model;
91
+ if (!series.length || width <= 0 || height <= 0) return;
92
+ const plotLeft = margin.left;
93
+ const plotRight = width - margin.right;
94
+ const plotTop = margin.top;
95
+ const plotBottom = height - margin.bottom;
96
+ if (plotRight - plotLeft < 8 || plotBottom - plotTop < 8) return;
97
+ const xScale = scaleLinear().domain(biasVarianceXDomain(series)).range([plotLeft, plotRight]);
98
+ const yScale = scaleLinear().domain(biasVarianceYDomain(series)).range([plotBottom, plotTop]).nice();
99
+ const xTicks = xScale.ticks(FD.biasVarianceXTicks);
100
+ const yTicks = yScale.ticks(FD.biasVarianceYTicks);
101
+ const svg = select(container).append("svg").attr("width", width).attr("height", height).attr("viewBox", `0 0 ${width} ${height}`).attr("preserveAspectRatio", "xMidYMid meet").attr("role", "img").attr("aria-label", "Bias-variance tradeoff chart").style("display", "block").style("font-family", theme.fontFamily);
102
+ const root = svg.append("g").attr("class", "plot");
103
+ if (showGrid) {
104
+ const grid = root.append("g").attr("class", "grid").attr("pointer-events", "none");
105
+ for (const tick of yTicks) {
106
+ grid.append("line").attr("x1", plotLeft).attr("x2", plotRight).attr("y1", yScale(tick)).attr("y2", yScale(tick)).attr("stroke", FD.biasVarianceGridStroke).attr("stroke-dasharray", FD.biasVarianceGridDash).attr("shape-rendering", "crispEdges");
107
+ }
108
+ }
109
+ const lineGen = line().x((d) => xScale(d.x)).y((d) => yScale(d.y)).curve(curveMonotoneX);
110
+ const curves = root.append("g").attr("class", "series-layer");
111
+ series.forEach((s, i) => {
112
+ curves.append("path").attr("class", `series series-${i}`).datum(s.points).attr("fill", "none").attr("stroke", resolveColor(s, i, theme)).attr("stroke-width", FD.biasVarianceLineWidth).attr("opacity", FD.biasVarianceLineOpacity).attr("pointer-events", "none").attr("d", lineGen);
113
+ });
114
+ const allSeriesPaths = () => curves.selectAll("path.series");
115
+ const focusSeries = (focused) => {
116
+ allSeriesPaths().attr(
117
+ "opacity",
118
+ (_d, i) => i === focused ? 1 : FD.biasVarianceLineOpacityDimmed
119
+ );
120
+ };
121
+ const restoreSeries = () => {
122
+ allSeriesPaths().attr("opacity", FD.biasVarianceLineOpacity);
123
+ };
124
+ const axes = root.append("g").attr("class", "axes").attr("pointer-events", "none");
125
+ for (const tick of yTicks) {
126
+ axes.append("text").attr("x", plotLeft - 8).attr("y", yScale(tick) + 4).attr("text-anchor", "end").attr("fill", FD.biasVarianceLabelFill).attr("font-size", FD.axisLabelSize).text(formatTradeoffValue(tick));
127
+ }
128
+ for (const tick of xTicks) {
129
+ axes.append("text").attr("x", xScale(tick)).attr("y", plotBottom + 18).attr("text-anchor", "middle").attr("fill", FD.biasVarianceLabelFill).attr("font-size", FD.axisLabelSize).text(formatTradeoffValue(tick));
130
+ }
131
+ axes.append("line").attr("x1", plotLeft).attr("x2", plotLeft).attr("y1", plotTop).attr("y2", plotBottom).attr("stroke", FD.biasVarianceAxisStroke);
132
+ axes.append("line").attr("x1", plotLeft).attr("x2", plotRight).attr("y1", plotBottom).attr("y2", plotBottom).attr("stroke", FD.biasVarianceAxisStroke);
133
+ if (model.domainsLimits.length) {
134
+ renderDomainLimits(root, model.domainsLimits, xScale, yScale, {
135
+ left: plotLeft,
136
+ right: plotRight,
137
+ top: plotTop,
138
+ bottom: plotBottom
139
+ });
140
+ }
141
+ if (!showTooltip || !onHover) return;
142
+ const hoverLayer = root.append("g").attr("class", "hover").attr("pointer-events", "none");
143
+ const guide = hoverLayer.append("line").attr("stroke", FD.biasVarianceAxisStroke).attr("stroke-width", 1).attr("stroke-dasharray", FD.domainLimitDash).attr("opacity", 0);
144
+ const dots = hoverLayer.append("g").attr("class", "hover-dots");
145
+ const xValues = biasVarianceXValues(series);
146
+ const nearestX = (px) => {
147
+ let best = xValues[0];
148
+ let bestDist = Infinity;
149
+ for (const value of xValues) {
150
+ const dist = Math.abs(xScale(value) - px);
151
+ if (dist < bestDist) {
152
+ bestDist = dist;
153
+ best = value;
154
+ }
155
+ }
156
+ return best;
157
+ };
158
+ root.append("rect").attr("class", "hover-target").attr("x", plotLeft).attr("y", plotTop).attr("width", plotRight - plotLeft).attr("height", plotBottom - plotTop).attr("fill", "transparent").on("mousemove", (event) => {
159
+ const [px, py] = pointer(event, svg.node());
160
+ const x = nearestX(px);
161
+ if (x == null) return;
162
+ const gx = xScale(x);
163
+ guide.attr("x1", gx).attr("x2", gx).attr("y1", plotTop).attr("y2", plotBottom).attr("opacity", 1);
164
+ let focused = -1;
165
+ let focusedDist = Infinity;
166
+ series.forEach((s, i) => {
167
+ const point = s.points.find((p) => p.x === x);
168
+ if (!point) return;
169
+ const dist = Math.abs(yScale(point.y) - py);
170
+ if (dist < focusedDist) {
171
+ focusedDist = dist;
172
+ focused = i;
173
+ }
174
+ });
175
+ focusSeries(focused);
176
+ dots.selectAll("*").remove();
177
+ const entries = [];
178
+ series.forEach((s, i) => {
179
+ const point = s.points.find((p) => p.x === x);
180
+ if (!point) return;
181
+ const color = resolveColor(s, i, theme);
182
+ const isFocused = i === focused;
183
+ entries.push({
184
+ seriesId: s.id,
185
+ seriesName: s.name ?? s.id,
186
+ color,
187
+ value: point.y,
188
+ focused: isFocused
189
+ });
190
+ dots.append("circle").attr("class", isFocused ? "hover-dot hover-dot--focused" : "hover-dot").attr("cx", gx).attr("cy", yScale(point.y)).attr("r", FD.stepHoverDotRadius).attr("fill", color).attr("stroke", "#fff").attr("stroke-width", 2).attr("opacity", isFocused ? 1 : FD.biasVarianceLineOpacityDimmed);
191
+ });
192
+ onHover({ x, entries, event });
193
+ }).on("mouseleave", () => {
194
+ guide.attr("opacity", 0);
195
+ dots.selectAll("*").remove();
196
+ restoreSeries();
197
+ onLeave == null ? void 0 : onLeave();
198
+ });
199
+ }
200
+ export {
201
+ renderBiasVarianceChart
202
+ };
203
+ //# sourceMappingURL=draw.js.map