@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.
- package/CHANGELOG.md +72 -17
- package/README.md +24 -26
- package/dist/components/area-chart/element/ui9000-area-chart.d.ts +1 -1
- package/dist/components/area-grouped-bar-chart/element/ui9000-area-grouped-bar-chart.d.ts +1 -1
- package/dist/components/area-grouped-bar-chart/lib/normalize.js +3 -3
- package/dist/components/area-grouped-bar-chart/lib/normalize.js.map +1 -1
- package/dist/components/bar-chart/element/ui9000-bar-chart.d.ts +1 -1
- package/dist/components/bias-variance-tradeoff-chart/element/styles.d.ts +7 -0
- package/dist/components/bias-variance-tradeoff-chart/element/styles.d.ts.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/element/styles.js +13 -0
- package/dist/components/bias-variance-tradeoff-chart/element/styles.js.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.d.ts +27 -0
- package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.d.ts.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.js +173 -0
- package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.js.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/index.d.ts +5 -0
- package/dist/components/bias-variance-tradeoff-chart/index.d.ts.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/index.js +19 -0
- package/dist/components/bias-variance-tradeoff-chart/index.js.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/domain.d.ts +8 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/domain.d.ts.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/domain.js +37 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/domain.js.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/format.d.ts +3 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/format.d.ts.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/format.js +9 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/format.js.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/index.d.ts +5 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/index.d.ts.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/normalize.d.ts +4 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/normalize.d.ts.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/normalize.js +135 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/normalize.js.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/types.d.ts +47 -0
- package/dist/components/bias-variance-tradeoff-chart/lib/types.d.ts.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/metadata.json.d.ts +41 -0
- package/dist/components/bias-variance-tradeoff-chart/metadata.json.js +42 -0
- package/dist/components/bias-variance-tradeoff-chart/metadata.json.js.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/render/draw.d.ts +31 -0
- package/dist/components/bias-variance-tradeoff-chart/render/draw.d.ts.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/render/draw.js +203 -0
- package/dist/components/bias-variance-tradeoff-chart/render/draw.js.map +1 -0
- package/dist/components/bias-variance-tradeoff-chart/render/index.d.ts +2 -0
- package/dist/components/bias-variance-tradeoff-chart/render/index.d.ts.map +1 -0
- package/dist/components/box-plot-chart/element/ui9000-box-plot-chart.d.ts +1 -1
- package/dist/components/bubble-chart/element/ui9000-bubble-chart.d.ts +1 -1
- package/dist/components/chart-renderer/lib/registry.d.ts.map +1 -1
- package/dist/components/chart-renderer/lib/registry.js +12 -0
- package/dist/components/chart-renderer/lib/registry.js.map +1 -1
- package/dist/components/donut-chart/element/ui9000-donut-chart.d.ts +1 -1
- package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.d.ts +1 -1
- package/dist/components/gini-impurity-entropy-chart/element/styles.d.ts +2 -0
- package/dist/components/gini-impurity-entropy-chart/element/styles.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/element/styles.js +72 -0
- package/dist/components/gini-impurity-entropy-chart/element/styles.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.d.ts +36 -0
- package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.js +186 -0
- package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/index.d.ts +5 -0
- package/dist/components/gini-impurity-entropy-chart/index.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/index.js +32 -0
- package/dist/components/gini-impurity-entropy-chart/index.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/domain.d.ts +9 -0
- package/dist/components/gini-impurity-entropy-chart/lib/domain.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/domain.js +32 -0
- package/dist/components/gini-impurity-entropy-chart/lib/domain.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/format.d.ts +10 -0
- package/dist/components/gini-impurity-entropy-chart/lib/format.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/format.js +22 -0
- package/dist/components/gini-impurity-entropy-chart/lib/format.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/index.d.ts +7 -0
- package/dist/components/gini-impurity-entropy-chart/lib/index.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/normalize.d.ts +7 -0
- package/dist/components/gini-impurity-entropy-chart/lib/normalize.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/normalize.js +117 -0
- package/dist/components/gini-impurity-entropy-chart/lib/normalize.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/overlays.d.ts +19 -0
- package/dist/components/gini-impurity-entropy-chart/lib/overlays.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/overlays.js +63 -0
- package/dist/components/gini-impurity-entropy-chart/lib/overlays.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/series.d.ts +12 -0
- package/dist/components/gini-impurity-entropy-chart/lib/series.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/series.js +45 -0
- package/dist/components/gini-impurity-entropy-chart/lib/series.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/types.d.ts +83 -0
- package/dist/components/gini-impurity-entropy-chart/lib/types.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/lib/types.js +19 -0
- package/dist/components/gini-impurity-entropy-chart/lib/types.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/metadata.json.d.ts +115 -0
- package/dist/components/gini-impurity-entropy-chart/metadata.json.js +42 -0
- package/dist/components/gini-impurity-entropy-chart/metadata.json.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/render/draw.d.ts +40 -0
- package/dist/components/gini-impurity-entropy-chart/render/draw.d.ts.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/render/draw.js +160 -0
- package/dist/components/gini-impurity-entropy-chart/render/draw.js.map +1 -0
- package/dist/components/gini-impurity-entropy-chart/render/index.d.ts +2 -0
- package/dist/components/gini-impurity-entropy-chart/render/index.d.ts.map +1 -0
- package/dist/components/histogram-chart/element/ui9000-histogram-chart.d.ts +1 -1
- package/dist/components/kpi-widget/element/ui9000-kpi-widget.d.ts +1 -1
- package/dist/components/kpi-widget/element/ui9000-kpi-widget.js +1 -1
- package/dist/components/line-chart/element/ui9000-line-chart.d.ts +1 -1
- package/dist/components/lollipop/element/ui9000-lollipop.d.ts +1 -1
- package/dist/components/network-graph/element/styles.d.ts +2 -0
- package/dist/components/network-graph/element/styles.d.ts.map +1 -0
- package/dist/components/network-graph/element/styles.js +152 -0
- package/dist/components/network-graph/element/styles.js.map +1 -0
- package/dist/components/network-graph/element/ui9000-network-graph.d.ts +43 -0
- package/dist/components/network-graph/element/ui9000-network-graph.d.ts.map +1 -0
- package/dist/components/network-graph/element/ui9000-network-graph.js +230 -0
- package/dist/components/network-graph/element/ui9000-network-graph.js.map +1 -0
- package/dist/components/network-graph/index.d.ts +5 -0
- package/dist/components/network-graph/index.d.ts.map +1 -0
- package/dist/components/network-graph/index.js +37 -0
- package/dist/components/network-graph/index.js.map +1 -0
- package/dist/components/network-graph/lib/domain.d.ts +96 -0
- package/dist/components/network-graph/lib/domain.d.ts.map +1 -0
- package/dist/components/network-graph/lib/domain.js +211 -0
- package/dist/components/network-graph/lib/domain.js.map +1 -0
- package/dist/components/network-graph/lib/format.d.ts +7 -0
- package/dist/components/network-graph/lib/format.d.ts.map +1 -0
- package/dist/components/network-graph/lib/format.js +29 -0
- package/dist/components/network-graph/lib/format.js.map +1 -0
- package/dist/components/network-graph/lib/index.d.ts +5 -0
- package/dist/components/network-graph/lib/index.d.ts.map +1 -0
- package/dist/components/network-graph/lib/normalize.d.ts +10 -0
- package/dist/components/network-graph/lib/normalize.d.ts.map +1 -0
- package/dist/components/network-graph/lib/normalize.js +140 -0
- package/dist/components/network-graph/lib/normalize.js.map +1 -0
- package/dist/components/network-graph/lib/types.d.ts +56 -0
- package/dist/components/network-graph/lib/types.d.ts.map +1 -0
- package/dist/components/network-graph/metadata.json.d.ts +91 -0
- package/dist/components/network-graph/metadata.json.js +42 -0
- package/dist/components/network-graph/metadata.json.js.map +1 -0
- package/dist/components/network-graph/render/draw.d.ts +46 -0
- package/dist/components/network-graph/render/draw.d.ts.map +1 -0
- package/dist/components/network-graph/render/draw.js +468 -0
- package/dist/components/network-graph/render/draw.js.map +1 -0
- package/dist/components/network-graph/render/index.d.ts +2 -0
- package/dist/components/network-graph/render/index.d.ts.map +1 -0
- package/dist/components/parallel-coordinates-chart/element/styles.d.ts +2 -0
- package/dist/components/parallel-coordinates-chart/element/styles.d.ts.map +1 -0
- package/dist/components/parallel-coordinates-chart/element/styles.js +71 -0
- package/dist/components/parallel-coordinates-chart/element/styles.js.map +1 -0
- package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.d.ts +33 -0
- package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.d.ts.map +1 -0
- package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.js +182 -0
- package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.js.map +1 -0
- package/dist/components/parallel-coordinates-chart/index.d.ts +5 -0
- package/dist/components/parallel-coordinates-chart/index.d.ts.map +1 -0
- package/dist/components/parallel-coordinates-chart/index.js +23 -0
- package/dist/components/parallel-coordinates-chart/index.js.map +1 -0
- package/dist/components/parallel-coordinates-chart/lib/domain.d.ts +14 -0
- package/dist/components/parallel-coordinates-chart/lib/domain.d.ts.map +1 -0
- package/dist/components/parallel-coordinates-chart/lib/domain.js +28 -0
- package/dist/components/parallel-coordinates-chart/lib/domain.js.map +1 -0
- package/dist/components/parallel-coordinates-chart/lib/format.d.ts +12 -0
- package/dist/components/parallel-coordinates-chart/lib/format.d.ts.map +1 -0
- package/dist/components/parallel-coordinates-chart/lib/format.js +18 -0
- package/dist/components/parallel-coordinates-chart/lib/format.js.map +1 -0
- package/dist/components/parallel-coordinates-chart/lib/index.d.ts +5 -0
- package/dist/components/parallel-coordinates-chart/lib/index.d.ts.map +1 -0
- package/dist/components/parallel-coordinates-chart/lib/normalize.d.ts +23 -0
- package/dist/components/parallel-coordinates-chart/lib/normalize.d.ts.map +1 -0
- package/dist/components/parallel-coordinates-chart/lib/normalize.js +156 -0
- package/dist/components/parallel-coordinates-chart/lib/normalize.js.map +1 -0
- package/dist/components/parallel-coordinates-chart/lib/types.d.ts +48 -0
- package/dist/components/parallel-coordinates-chart/lib/types.d.ts.map +1 -0
- package/dist/components/parallel-coordinates-chart/metadata.json.d.ts +103 -0
- package/dist/components/parallel-coordinates-chart/metadata.json.js +45 -0
- package/dist/components/parallel-coordinates-chart/metadata.json.js.map +1 -0
- package/dist/components/parallel-coordinates-chart/render/draw.d.ts +30 -0
- package/dist/components/parallel-coordinates-chart/render/draw.d.ts.map +1 -0
- package/dist/components/parallel-coordinates-chart/render/draw.js +160 -0
- package/dist/components/parallel-coordinates-chart/render/draw.js.map +1 -0
- package/dist/components/parallel-coordinates-chart/render/index.d.ts +2 -0
- package/dist/components/parallel-coordinates-chart/render/index.d.ts.map +1 -0
- package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts +1 -1
- package/dist/components/polar-area-chart/element/styles.d.ts +2 -0
- package/dist/components/polar-area-chart/element/styles.d.ts.map +1 -0
- package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.d.ts +29 -0
- package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.d.ts.map +1 -0
- package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js +167 -0
- package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js.map +1 -0
- package/dist/components/polar-area-chart/index.d.ts +5 -0
- package/dist/components/polar-area-chart/index.d.ts.map +1 -0
- package/dist/components/polar-area-chart/index.js +18 -0
- package/dist/components/polar-area-chart/index.js.map +1 -0
- package/dist/components/polar-area-chart/lib/domain.d.ts +25 -0
- package/dist/components/polar-area-chart/lib/domain.d.ts.map +1 -0
- package/dist/components/polar-area-chart/lib/domain.js +47 -0
- package/dist/components/polar-area-chart/lib/domain.js.map +1 -0
- package/dist/components/polar-area-chart/lib/index.d.ts +4 -0
- package/dist/components/polar-area-chart/lib/index.d.ts.map +1 -0
- package/dist/components/polar-area-chart/lib/normalize.d.ts +4 -0
- package/dist/components/polar-area-chart/lib/normalize.d.ts.map +1 -0
- package/dist/components/polar-area-chart/lib/normalize.js +117 -0
- package/dist/components/polar-area-chart/lib/normalize.js.map +1 -0
- package/dist/components/polar-area-chart/lib/types.d.ts +43 -0
- package/dist/components/polar-area-chart/lib/types.d.ts.map +1 -0
- package/dist/components/polar-area-chart/metadata.json.d.ts +79 -0
- package/dist/components/polar-area-chart/metadata.json.js +42 -0
- package/dist/components/polar-area-chart/metadata.json.js.map +1 -0
- package/dist/components/polar-area-chart/render/draw.d.ts +25 -0
- package/dist/components/polar-area-chart/render/draw.d.ts.map +1 -0
- package/dist/components/polar-area-chart/render/draw.js +127 -0
- package/dist/components/polar-area-chart/render/draw.js.map +1 -0
- package/dist/components/polar-area-chart/render/index.d.ts +2 -0
- package/dist/components/polar-area-chart/render/index.d.ts.map +1 -0
- package/dist/components/punchcard-chart/element/ui9000-punchcard-chart.d.ts +1 -1
- package/dist/components/radar-chart/element/ui9000-radar-chart.d.ts +1 -1
- package/dist/components/radial-bar-chart/element/styles.d.ts +2 -0
- package/dist/components/radial-bar-chart/element/styles.d.ts.map +1 -0
- package/dist/components/radial-bar-chart/element/styles.js +53 -0
- package/dist/components/radial-bar-chart/element/styles.js.map +1 -0
- package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.d.ts +35 -0
- package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.d.ts.map +1 -0
- package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.js +174 -0
- package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.js.map +1 -0
- package/dist/components/radial-bar-chart/index.d.ts +5 -0
- package/dist/components/radial-bar-chart/index.d.ts.map +1 -0
- package/dist/components/radial-bar-chart/index.js +21 -0
- package/dist/components/radial-bar-chart/index.js.map +1 -0
- package/dist/components/radial-bar-chart/lib/domain.d.ts +47 -0
- package/dist/components/radial-bar-chart/lib/domain.d.ts.map +1 -0
- package/dist/components/radial-bar-chart/lib/domain.js +50 -0
- package/dist/components/radial-bar-chart/lib/domain.js.map +1 -0
- package/dist/components/radial-bar-chart/lib/format.d.ts +6 -0
- package/dist/components/radial-bar-chart/lib/format.d.ts.map +1 -0
- package/dist/components/radial-bar-chart/lib/format.js +12 -0
- package/dist/components/radial-bar-chart/lib/format.js.map +1 -0
- package/dist/components/radial-bar-chart/lib/index.d.ts +5 -0
- package/dist/components/radial-bar-chart/lib/index.d.ts.map +1 -0
- package/dist/components/radial-bar-chart/lib/normalize.d.ts +4 -0
- package/dist/components/radial-bar-chart/lib/normalize.d.ts.map +1 -0
- package/dist/components/radial-bar-chart/lib/normalize.js +92 -0
- package/dist/components/radial-bar-chart/lib/normalize.js.map +1 -0
- package/dist/components/radial-bar-chart/lib/types.d.ts +34 -0
- package/dist/components/radial-bar-chart/lib/types.d.ts.map +1 -0
- package/dist/components/radial-bar-chart/metadata.json.d.ts +62 -0
- package/dist/components/radial-bar-chart/metadata.json.js +42 -0
- package/dist/components/radial-bar-chart/metadata.json.js.map +1 -0
- package/dist/components/radial-bar-chart/render/draw.d.ts +29 -0
- package/dist/components/radial-bar-chart/render/draw.d.ts.map +1 -0
- package/dist/components/radial-bar-chart/render/draw.js +92 -0
- package/dist/components/radial-bar-chart/render/draw.js.map +1 -0
- package/dist/components/radial-bar-chart/render/index.d.ts +2 -0
- package/dist/components/radial-bar-chart/render/index.d.ts.map +1 -0
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts +1 -1
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.js +2 -1
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.js.map +1 -1
- package/dist/components/sankey-chart/index.js +4 -2
- package/dist/components/sankey-chart/index.js.map +1 -1
- package/dist/components/sankey-chart/lib/domain.d.ts +2 -2
- package/dist/components/sankey-chart/lib/domain.d.ts.map +1 -1
- package/dist/components/sankey-chart/lib/domain.js +1 -13
- package/dist/components/sankey-chart/lib/domain.js.map +1 -1
- package/dist/components/sankey-chart/lib/format.d.ts +1 -2
- package/dist/components/sankey-chart/lib/format.d.ts.map +1 -1
- package/dist/components/sankey-chart/lib/format.js +3 -7
- package/dist/components/sankey-chart/lib/format.js.map +1 -1
- package/dist/components/scatter-plot-chart/element/ui9000-scatter-plot.d.ts +1 -1
- package/dist/components/scatter-sparkline-chart/element/ui9000-scatter-sparkline-chart.d.ts +1 -1
- package/dist/components/spark-area-chart/element/ui9000-spark-area-chart.d.ts +1 -1
- package/dist/components/spark-line-chart/element/ui9000-spark-line-chart.d.ts +1 -1
- package/dist/components/step-line-chart/element/ui9000-step-line-chart.d.ts +1 -1
- package/dist/components/violin-chart/element/ui9000-violin-chart.d.ts +1 -1
- package/dist/components/waterfall-chart/element/ui9000-waterfall-chart.d.ts +1 -1
- package/dist/element/ui9000-chart-base.d.ts +2 -2
- package/dist/index.d.ts +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +110 -13
- package/dist/index.js.map +1 -1
- package/dist/lazy/bias-variance-tradeoff-chart.d.ts +4 -0
- package/dist/lazy/bias-variance-tradeoff-chart.d.ts.map +1 -0
- package/dist/lazy/bias-variance-tradeoff-chart.js +5 -0
- package/dist/lazy/bias-variance-tradeoff-chart.js.map +1 -0
- package/dist/lazy/gini-impurity-entropy-chart.d.ts +4 -0
- package/dist/lazy/gini-impurity-entropy-chart.d.ts.map +1 -0
- package/dist/lazy/gini-impurity-entropy-chart.js +5 -0
- package/dist/lazy/gini-impurity-entropy-chart.js.map +1 -0
- package/dist/lazy/index.d.ts +7 -1
- package/dist/lazy/index.d.ts.map +1 -1
- package/dist/lazy/index.js +48 -0
- package/dist/lazy/index.js.map +1 -1
- package/dist/lazy/network-graph.d.ts +4 -0
- package/dist/lazy/network-graph.d.ts.map +1 -0
- package/dist/lazy/network-graph.js +5 -0
- package/dist/lazy/network-graph.js.map +1 -0
- package/dist/lazy/parallel-coordinates-chart.d.ts +4 -0
- package/dist/lazy/parallel-coordinates-chart.d.ts.map +1 -0
- package/dist/lazy/parallel-coordinates-chart.js +5 -0
- package/dist/lazy/parallel-coordinates-chart.js.map +1 -0
- package/dist/lazy/polar-area-chart.d.ts +4 -0
- package/dist/lazy/polar-area-chart.d.ts.map +1 -0
- package/dist/lazy/polar-area-chart.js +5 -0
- package/dist/lazy/polar-area-chart.js.map +1 -0
- package/dist/lazy/radial-bar-chart.d.ts +4 -0
- package/dist/lazy/radial-bar-chart.d.ts.map +1 -0
- package/dist/lazy/radial-bar-chart.js +5 -0
- package/dist/lazy/radial-bar-chart.js.map +1 -0
- package/dist/utils/breakpoints.d.ts +7 -0
- package/dist/utils/breakpoints.d.ts.map +1 -0
- package/dist/utils/breakpoints.js +17 -0
- package/dist/utils/breakpoints.js.map +1 -0
- package/dist/utils/chart-helpers.d.ts +21 -0
- package/dist/utils/chart-helpers.d.ts.map +1 -1
- package/dist/utils/chart-helpers.js +54 -0
- package/dist/utils/chart-helpers.js.map +1 -1
- package/dist/utils/format-text.d.ts +17 -0
- package/dist/utils/format-text.d.ts.map +1 -0
- package/dist/utils/format-text.js +26 -0
- package/dist/utils/format-text.js.map +1 -0
- package/dist/utils/fusedash-visual.d.ts +143 -0
- package/dist/utils/fusedash-visual.d.ts.map +1 -1
- package/dist/utils/fusedash-visual.js +114 -1
- package/dist/utils/fusedash-visual.js.map +1 -1
- package/package.json +56 -4
- package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive.js +0 -28
- package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive.js.map +0 -1
- package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/style-map.js +0 -37
- package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/style-map.js.map +0 -1
- package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/lit-html.js +0 -231
- 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 @@
|
|
|
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 @@
|
|
|
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
|