@fusedashlabs/widgets 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +94 -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/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/element/ui9000-chart-renderer.d.ts +1 -0
- package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts.map +1 -1
- package/dist/components/chart-renderer/element/ui9000-chart-renderer.js +12 -1
- package/dist/components/chart-renderer/element/ui9000-chart-renderer.js.map +1 -1
- package/dist/components/chart-renderer/lib/registry.d.ts.map +1 -1
- package/dist/components/chart-renderer/lib/registry.js +29 -4
- package/dist/components/chart-renderer/lib/registry.js.map +1 -1
- package/dist/components/chart-renderer/lib/types.d.ts +5 -0
- package/dist/components/chart-renderer/lib/types.d.ts.map +1 -1
- package/dist/components/donut-chart/element/ui9000-donut-chart.d.ts +1 -1
- package/dist/components/donut-chart/element/ui9000-donut-chart.js +1 -1
- package/dist/components/donut-chart/element/ui9000-donut-chart.js.map +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/{donut-group-chart → gini-impurity-entropy-chart}/element/styles.js +17 -11
- 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/styles.d.ts.map +1 -1
- package/dist/components/lollipop/element/styles.js +19 -1
- package/dist/components/lollipop/element/styles.js.map +1 -1
- package/dist/components/lollipop/element/ui9000-lollipop.d.ts +7 -2
- package/dist/components/lollipop/element/ui9000-lollipop.d.ts.map +1 -1
- package/dist/components/lollipop/element/ui9000-lollipop.js +68 -7
- package/dist/components/lollipop/element/ui9000-lollipop.js.map +1 -1
- package/dist/components/lollipop/index.d.ts +1 -1
- package/dist/components/lollipop/index.d.ts.map +1 -1
- package/dist/components/lollipop/index.js +2 -0
- package/dist/components/lollipop/index.js.map +1 -1
- package/dist/components/lollipop/lib/domain.d.ts +16 -1
- package/dist/components/lollipop/lib/domain.d.ts.map +1 -1
- package/dist/components/lollipop/lib/domain.js +56 -1
- package/dist/components/lollipop/lib/domain.js.map +1 -1
- package/dist/components/lollipop/lib/index.d.ts +3 -2
- package/dist/components/lollipop/lib/index.d.ts.map +1 -1
- package/dist/components/lollipop/lib/layout.d.ts +16 -0
- package/dist/components/lollipop/lib/layout.d.ts.map +1 -0
- package/dist/components/lollipop/lib/layout.js +16 -0
- package/dist/components/lollipop/lib/layout.js.map +1 -0
- package/dist/components/lollipop/lib/types.d.ts +5 -0
- package/dist/components/lollipop/lib/types.d.ts.map +1 -1
- package/dist/components/lollipop/metadata.json.d.ts +10 -0
- package/dist/components/lollipop/metadata.json.js +4 -1
- package/dist/components/lollipop/metadata.json.js.map +1 -1
- package/dist/components/lollipop/render/draw.d.ts +8 -1
- package/dist/components/lollipop/render/draw.d.ts.map +1 -1
- package/dist/components/lollipop/render/draw.js +155 -84
- package/dist/components/lollipop/render/draw.js.map +1 -1
- package/dist/components/map-chart/element/styles.d.ts +2 -0
- package/dist/components/map-chart/element/styles.d.ts.map +1 -0
- package/dist/components/map-chart/element/styles.js +372 -0
- package/dist/components/map-chart/element/styles.js.map +1 -0
- package/dist/components/map-chart/element/ui9000-map-chart.d.ts +54 -0
- package/dist/components/map-chart/element/ui9000-map-chart.d.ts.map +1 -0
- package/dist/components/map-chart/element/ui9000-map-chart.js +539 -0
- package/dist/components/map-chart/element/ui9000-map-chart.js.map +1 -0
- package/dist/components/map-chart/index.d.ts +5 -0
- package/dist/components/map-chart/index.d.ts.map +1 -0
- package/dist/components/map-chart/index.js +29 -0
- package/dist/components/map-chart/index.js.map +1 -0
- package/dist/components/map-chart/lib/constants.d.ts +34 -0
- package/dist/components/map-chart/lib/constants.d.ts.map +1 -0
- package/dist/components/map-chart/lib/constants.js +122 -0
- package/dist/components/map-chart/lib/constants.js.map +1 -0
- package/dist/components/map-chart/lib/domain.d.ts +12 -0
- package/dist/components/map-chart/lib/domain.d.ts.map +1 -0
- package/dist/components/map-chart/lib/domain.js +105 -0
- package/dist/components/map-chart/lib/domain.js.map +1 -0
- package/dist/components/map-chart/lib/format.d.ts +8 -0
- package/dist/components/map-chart/lib/format.d.ts.map +1 -0
- package/dist/components/map-chart/lib/format.js +45 -0
- package/dist/components/map-chart/lib/format.js.map +1 -0
- package/dist/components/map-chart/lib/geo-index.d.ts +7 -0
- package/dist/components/map-chart/lib/geo-index.d.ts.map +1 -0
- package/dist/components/map-chart/lib/geo-index.js +200 -0
- package/dist/components/map-chart/lib/geo-index.js.map +1 -0
- package/dist/components/map-chart/lib/geojson.d.ts +5 -0
- package/dist/components/map-chart/lib/geojson.d.ts.map +1 -0
- package/dist/components/map-chart/lib/geojson.js +47 -0
- package/dist/components/map-chart/lib/geojson.js.map +1 -0
- package/dist/components/map-chart/lib/index.d.ts +13 -0
- package/dist/components/map-chart/lib/index.d.ts.map +1 -0
- package/dist/components/map-chart/lib/join.d.ts +7 -0
- package/dist/components/map-chart/lib/join.d.ts.map +1 -0
- package/dist/components/map-chart/lib/join.js +156 -0
- package/dist/components/map-chart/lib/join.js.map +1 -0
- package/dist/components/map-chart/lib/legend.d.ts +45 -0
- package/dist/components/map-chart/lib/legend.d.ts.map +1 -0
- package/dist/components/map-chart/lib/legend.js +108 -0
- package/dist/components/map-chart/lib/legend.js.map +1 -0
- package/dist/components/map-chart/lib/normalize.d.ts +3 -0
- package/dist/components/map-chart/lib/normalize.d.ts.map +1 -0
- package/dist/components/map-chart/lib/normalize.js +177 -0
- package/dist/components/map-chart/lib/normalize.js.map +1 -0
- package/dist/components/map-chart/lib/pmtiles.d.ts +41 -0
- package/dist/components/map-chart/lib/pmtiles.d.ts.map +1 -0
- package/dist/components/map-chart/lib/pmtiles.js +112 -0
- package/dist/components/map-chart/lib/pmtiles.js.map +1 -0
- package/dist/components/map-chart/lib/types.d.ts +128 -0
- package/dist/components/map-chart/lib/types.d.ts.map +1 -0
- package/dist/components/map-chart/metadata.json.d.ts +83 -0
- package/dist/components/map-chart/metadata.json.js +42 -0
- package/dist/components/map-chart/metadata.json.js.map +1 -0
- package/dist/components/map-chart/render/draw.d.ts +24 -0
- package/dist/components/map-chart/render/draw.d.ts.map +1 -0
- package/dist/components/map-chart/render/draw.js +455 -0
- package/dist/components/map-chart/render/draw.js.map +1 -0
- package/dist/components/map-chart/render/index.d.ts +2 -0
- package/dist/components/map-chart/render/index.d.ts.map +1 -0
- package/dist/components/matrix-chart/element/styles.d.ts +2 -0
- package/dist/components/matrix-chart/element/styles.d.ts.map +1 -0
- package/dist/components/matrix-chart/element/styles.js +97 -0
- package/dist/components/matrix-chart/element/styles.js.map +1 -0
- package/dist/components/matrix-chart/element/ui9000-matrix-chart.d.ts +39 -0
- package/dist/components/matrix-chart/element/ui9000-matrix-chart.d.ts.map +1 -0
- package/dist/components/matrix-chart/element/ui9000-matrix-chart.js +238 -0
- package/dist/components/matrix-chart/element/ui9000-matrix-chart.js.map +1 -0
- package/dist/components/matrix-chart/index.d.ts +5 -0
- package/dist/components/matrix-chart/index.d.ts.map +1 -0
- package/dist/components/matrix-chart/index.js +20 -0
- package/dist/components/matrix-chart/index.js.map +1 -0
- package/dist/components/matrix-chart/lib/domain.d.ts +7 -0
- package/dist/components/matrix-chart/lib/domain.d.ts.map +1 -0
- package/dist/components/matrix-chart/lib/domain.js +58 -0
- package/dist/components/matrix-chart/lib/domain.js.map +1 -0
- package/dist/components/matrix-chart/lib/format.d.ts +5 -0
- package/dist/components/matrix-chart/lib/format.d.ts.map +1 -0
- package/dist/components/matrix-chart/lib/format.js +16 -0
- package/dist/components/matrix-chart/lib/format.js.map +1 -0
- package/dist/components/matrix-chart/lib/index.d.ts +5 -0
- package/dist/components/matrix-chart/lib/index.d.ts.map +1 -0
- package/dist/components/matrix-chart/lib/normalize.d.ts +5 -0
- package/dist/components/matrix-chart/lib/normalize.d.ts.map +1 -0
- package/dist/components/matrix-chart/lib/normalize.js +165 -0
- package/dist/components/matrix-chart/lib/normalize.js.map +1 -0
- package/dist/components/matrix-chart/lib/types.d.ts +33 -0
- package/dist/components/matrix-chart/lib/types.d.ts.map +1 -0
- package/dist/components/matrix-chart/metadata.json.d.ts +110 -0
- package/dist/components/matrix-chart/metadata.json.js +42 -0
- package/dist/components/matrix-chart/metadata.json.js.map +1 -0
- package/dist/components/matrix-chart/render/draw.d.ts +63 -0
- package/dist/components/matrix-chart/render/draw.d.ts.map +1 -0
- package/dist/components/matrix-chart/render/draw.js +225 -0
- package/dist/components/matrix-chart/render/draw.js.map +1 -0
- package/dist/components/matrix-chart/render/index.d.ts +2 -0
- package/dist/components/matrix-chart/render/index.d.ts.map +1 -0
- 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 +272 -0
- package/dist/components/network-graph/element/styles.js.map +1 -0
- package/dist/components/network-graph/element/ui9000-network-graph.d.ts +47 -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 +307 -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 +6 -0
- package/dist/components/network-graph/lib/index.d.ts.map +1 -0
- package/dist/components/network-graph/lib/legend.d.ts +15 -0
- package/dist/components/network-graph/lib/legend.d.ts.map +1 -0
- package/dist/components/network-graph/lib/legend.js +35 -0
- package/dist/components/network-graph/lib/legend.js.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 +49 -0
- package/dist/components/network-graph/render/draw.d.ts.map +1 -0
- package/dist/components/network-graph/render/draw.js +493 -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/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/styles.d.ts.map +1 -1
- package/dist/components/pie-chart/element/styles.js +34 -1
- package/dist/components/pie-chart/element/styles.js.map +1 -1
- package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts +1 -3
- package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts.map +1 -1
- package/dist/components/pie-chart/element/ui9000-pie-chart.js +2 -8
- package/dist/components/pie-chart/element/ui9000-pie-chart.js.map +1 -1
- package/dist/components/pie-chart/metadata.json.d.ts +1 -7
- package/dist/components/pie-chart/metadata.json.js +2 -2
- 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/styles.js +48 -0
- package/dist/components/polar-area-chart/element/styles.js.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 +168 -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 +19 -0
- package/dist/components/polar-area-chart/index.js.map +1 -0
- package/dist/components/polar-area-chart/lib/domain.d.ts +33 -0
- package/dist/components/polar-area-chart/lib/domain.d.ts.map +1 -0
- package/dist/components/polar-area-chart/lib/domain.js +67 -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 +183 -0
- package/dist/components/polar-area-chart/lib/normalize.js.map +1 -0
- package/dist/components/polar-area-chart/lib/types.d.ts +48 -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/punchcard-chart/metadata.json.d.ts +1 -1
- package/dist/components/punchcard-chart/metadata.json.js +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/styles.d.ts.map +1 -1
- package/dist/components/sankey-chart/element/styles.js +7 -27
- package/dist/components/sankey-chart/element/styles.js.map +1 -1
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts +6 -6
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts.map +1 -1
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.js +39 -36
- 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/treemap-chart/element/styles.d.ts +2 -0
- package/dist/components/treemap-chart/element/styles.d.ts.map +1 -0
- package/dist/components/treemap-chart/element/styles.js +141 -0
- package/dist/components/treemap-chart/element/styles.js.map +1 -0
- package/dist/components/treemap-chart/element/ui9000-treemap-chart.d.ts +35 -0
- package/dist/components/treemap-chart/element/ui9000-treemap-chart.d.ts.map +1 -0
- package/dist/components/treemap-chart/element/ui9000-treemap-chart.js +177 -0
- package/dist/components/treemap-chart/element/ui9000-treemap-chart.js.map +1 -0
- package/dist/components/treemap-chart/index.d.ts +5 -0
- package/dist/components/treemap-chart/index.d.ts.map +1 -0
- package/dist/components/treemap-chart/index.js +22 -0
- package/dist/components/treemap-chart/index.js.map +1 -0
- package/dist/components/treemap-chart/lib/color.d.ts +25 -0
- package/dist/components/treemap-chart/lib/color.d.ts.map +1 -0
- package/dist/components/treemap-chart/lib/color.js +67 -0
- package/dist/components/treemap-chart/lib/color.js.map +1 -0
- package/dist/components/treemap-chart/lib/format.d.ts +7 -0
- package/dist/components/treemap-chart/lib/format.d.ts.map +1 -0
- package/dist/components/treemap-chart/lib/format.js +9 -0
- package/dist/components/treemap-chart/lib/format.js.map +1 -0
- package/dist/components/treemap-chart/lib/index.d.ts +6 -0
- package/dist/components/treemap-chart/lib/index.d.ts.map +1 -0
- package/dist/components/treemap-chart/lib/layout.d.ts +18 -0
- package/dist/components/treemap-chart/lib/layout.d.ts.map +1 -0
- package/dist/components/treemap-chart/lib/layout.js +31 -0
- package/dist/components/treemap-chart/lib/layout.js.map +1 -0
- package/dist/components/treemap-chart/lib/normalize.d.ts +4 -0
- package/dist/components/treemap-chart/lib/normalize.d.ts.map +1 -0
- package/dist/components/treemap-chart/lib/normalize.js +182 -0
- package/dist/components/treemap-chart/lib/normalize.js.map +1 -0
- package/dist/components/treemap-chart/lib/types.d.ts +63 -0
- package/dist/components/treemap-chart/lib/types.d.ts.map +1 -0
- package/dist/components/treemap-chart/metadata.json.d.ts +126 -0
- package/dist/components/treemap-chart/metadata.json.js +45 -0
- package/dist/components/treemap-chart/metadata.json.js.map +1 -0
- package/dist/components/treemap-chart/render/draw.d.ts +24 -0
- package/dist/components/treemap-chart/render/draw.d.ts.map +1 -0
- package/dist/components/treemap-chart/render/draw.js +124 -0
- package/dist/components/treemap-chart/render/draw.js.map +1 -0
- package/dist/components/treemap-chart/render/index.d.ts +2 -0
- package/dist/components/treemap-chart/render/index.d.ts.map +1 -0
- 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/chart-legend-render.d.ts +5 -0
- package/dist/element/chart-legend-render.d.ts.map +1 -1
- package/dist/element/chart-legend-render.js +19 -1
- package/dist/element/chart-legend-render.js.map +1 -1
- package/dist/element/chart-shell-styles.d.ts.map +1 -1
- package/dist/element/chart-shell-styles.js +35 -0
- package/dist/element/chart-shell-styles.js.map +1 -1
- package/dist/element/ui9000-chart-base.d.ts +2 -2
- package/dist/index.d.ts +20 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +178 -47
- 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 +10 -2
- package/dist/lazy/index.d.ts.map +1 -1
- package/dist/lazy/index.js +72 -8
- package/dist/lazy/index.js.map +1 -1
- package/dist/lazy/map-chart.d.ts +4 -0
- package/dist/lazy/map-chart.d.ts.map +1 -0
- package/dist/lazy/map-chart.js +5 -0
- package/dist/lazy/map-chart.js.map +1 -0
- package/dist/lazy/matrix-chart.d.ts +4 -0
- package/dist/lazy/matrix-chart.d.ts.map +1 -0
- package/dist/lazy/matrix-chart.js +5 -0
- package/dist/lazy/matrix-chart.js.map +1 -0
- 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/lazy/treemap-chart.d.ts +4 -0
- package/dist/lazy/treemap-chart.d.ts.map +1 -0
- package/dist/lazy/treemap-chart.js +5 -0
- package/dist/lazy/treemap-chart.js.map +1 -0
- package/dist/node_modules/lit-html/directive.js.map +1 -0
- package/dist/node_modules/lit-html/directives/style-map.js.map +1 -0
- package/dist/node_modules/lit-html/lit-html.js.map +1 -0
- package/dist/utils/axis-units.d.ts +15 -0
- package/dist/utils/axis-units.d.ts.map +1 -0
- package/dist/utils/axis-units.js +27 -0
- package/dist/utils/axis-units.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 +25 -6
- package/dist/utils/chart-helpers.d.ts.map +1 -1
- package/dist/utils/chart-helpers.js +70 -15
- package/dist/utils/chart-helpers.js.map +1 -1
- package/dist/utils/format-text.d.ts +22 -0
- package/dist/utils/format-text.d.ts.map +1 -0
- package/dist/utils/format-text.js +33 -0
- package/dist/utils/format-text.js.map +1 -0
- package/dist/utils/fuse-palette.d.ts +12 -0
- package/dist/utils/fuse-palette.d.ts.map +1 -1
- package/dist/utils/fuse-palette.js +23 -1
- package/dist/utils/fuse-palette.js.map +1 -1
- package/dist/utils/fuse-widget.d.ts +13 -4
- package/dist/utils/fuse-widget.d.ts.map +1 -1
- package/dist/utils/fuse-widget.js.map +1 -1
- package/dist/utils/fusedash-visual.d.ts +208 -52
- package/dist/utils/fusedash-visual.d.ts.map +1 -1
- package/dist/utils/fusedash-visual.js +162 -30
- package/dist/utils/fusedash-visual.js.map +1 -1
- package/package.json +91 -12
- package/dist/components/donut-group-chart/element/styles.d.ts +0 -2
- package/dist/components/donut-group-chart/element/styles.d.ts.map +0 -1
- package/dist/components/donut-group-chart/element/styles.js.map +0 -1
- package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.d.ts +0 -34
- package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.d.ts.map +0 -1
- package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.js +0 -169
- package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.js.map +0 -1
- package/dist/components/donut-group-chart/index.d.ts +0 -5
- package/dist/components/donut-group-chart/index.d.ts.map +0 -1
- package/dist/components/donut-group-chart/index.js +0 -23
- package/dist/components/donut-group-chart/lib/domain.d.ts +0 -39
- package/dist/components/donut-group-chart/lib/domain.d.ts.map +0 -1
- package/dist/components/donut-group-chart/lib/domain.js +0 -51
- package/dist/components/donut-group-chart/lib/domain.js.map +0 -1
- package/dist/components/donut-group-chart/lib/format.d.ts +0 -7
- package/dist/components/donut-group-chart/lib/format.d.ts.map +0 -1
- package/dist/components/donut-group-chart/lib/format.js +0 -21
- package/dist/components/donut-group-chart/lib/format.js.map +0 -1
- package/dist/components/donut-group-chart/lib/index.d.ts +0 -5
- package/dist/components/donut-group-chart/lib/index.d.ts.map +0 -1
- package/dist/components/donut-group-chart/lib/normalize.d.ts +0 -14
- package/dist/components/donut-group-chart/lib/normalize.d.ts.map +0 -1
- package/dist/components/donut-group-chart/lib/normalize.js +0 -98
- package/dist/components/donut-group-chart/lib/normalize.js.map +0 -1
- package/dist/components/donut-group-chart/lib/types.d.ts +0 -49
- package/dist/components/donut-group-chart/lib/types.d.ts.map +0 -1
- package/dist/components/donut-group-chart/metadata.json.d.ts +0 -113
- package/dist/components/donut-group-chart/metadata.json.js +0 -45
- package/dist/components/donut-group-chart/render/draw.d.ts +0 -44
- package/dist/components/donut-group-chart/render/draw.d.ts.map +0 -1
- package/dist/components/donut-group-chart/render/draw.js +0 -194
- package/dist/components/donut-group-chart/render/draw.js.map +0 -1
- package/dist/components/donut-group-chart/render/index.d.ts +0 -2
- package/dist/components/donut-group-chart/render/index.d.ts.map +0 -1
- package/dist/components/donut-group-chart/tests/fixtures.d.ts +0 -33
- package/dist/components/donut-group-chart/tests/fixtures.d.ts.map +0 -1
- package/dist/lazy/donut-group-chart.d.ts +0 -4
- package/dist/lazy/donut-group-chart.d.ts.map +0 -1
- package/dist/lazy/donut-group-chart.js +0 -5
- package/dist/lazy/donut-group-chart.js.map +0 -1
- 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.map +0 -1
- package/dist/node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/lit-html.js.map +0 -1
- /package/dist/components/{donut-group-chart → bias-variance-tradeoff-chart}/index.js.map +0 -0
- /package/dist/components/{donut-group-chart → parallel-coordinates-chart}/metadata.json.js.map +0 -0
- /package/dist/node_modules/{.pnpm/lit-html@3.3.3/node_modules/lit-html → lit-html}/directive.js +0 -0
- /package/dist/node_modules/{.pnpm/lit-html@3.3.3/node_modules/lit-html → lit-html}/directives/style-map.js +0 -0
- /package/dist/node_modules/{.pnpm/lit-html@3.3.3/node_modules/lit-html → lit-html}/lit-html.js +0 -0
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draw.js","sources":["../../../../src/components/bias-variance-tradeoff-chart/render/draw.ts"],"sourcesContent":["import { scaleLinear } from 'd3-scale';\nimport { pointer, select } from 'd3-selection';\nimport { curveMonotoneX, line as d3Line } from 'd3-shape';\n\nimport type { WidgetTheme } from '../../../types/index.js';\nimport { FD, seriesColor as fdSeriesColor } from '../../../utils/fusedash-visual.js';\nimport {\n biasVarianceXDomain,\n biasVarianceXValues,\n biasVarianceYDomain,\n formatTradeoffValue,\n type BiasVarianceDomainLimit,\n type BiasVarianceHoverEntry,\n type BiasVarianceModel,\n type BiasVariancePoint,\n type BiasVarianceSeries,\n} from '../lib/index.js';\n\nexport interface RenderBiasVarianceChartOptions {\n model: BiasVarianceModel;\n width: number;\n height: number;\n /** FuseDash BiasVarianceTradeoffChart margins when omitted by the host */\n margin?: { top: number; right: number; bottom: number; left: number };\n theme: WidgetTheme;\n showGrid?: boolean;\n showTooltip?: boolean;\n onHover?: (payload: {\n x: number;\n entries: BiasVarianceHoverEntry[];\n event: MouseEvent;\n }) => void;\n onLeave?: () => void;\n}\n\ntype LinearScale = ReturnType<typeof scaleLinear<number, number>>;\n\nfunction resolveColor(\n series: BiasVarianceSeries,\n index: number,\n theme: WidgetTheme,\n): string {\n if (series.color) return series.color;\n if (index === 0 && theme.primary) return theme.primary;\n if (index === 1 && theme.secondary) return theme.secondary;\n return fdSeriesColor(index);\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\n/** Pill label of the client `DomainsLimits` foreignObject, drawn as plain SVG. */\nfunction appendLimitLabel(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parent: ReturnType<typeof select<any, unknown>>,\n opts: { x: number; y: number; text: string; align: 'center' | 'right' },\n): void {\n const { x, y, text, align } = opts;\n const width = text.length * 6 + 8;\n const height = 16;\n const left = align === 'center' ? x - width / 2 : x + 8;\n\n parent\n .append('rect')\n .attr('x', left)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height)\n .attr('rx', 6)\n .attr('ry', 6)\n .attr('fill', FD.domainLimitLabelFill);\n parent\n .append('text')\n .attr('x', left + width / 2)\n .attr('y', y + 11)\n .attr('text-anchor', 'middle')\n .attr('fill', FD.domainLimitLabelText)\n .attr('font-size', FD.domainLimitLabelSize)\n .text(text);\n}\n\n/**\n * Client `DomainsLimits`: a dashed reference line per value, a translucent band\n * when an entry carries two, arrow caps, and a value pill. Positions are clamped\n * to the plot frame so an out-of-range limit cannot paint over the axes.\n */\nfunction renderDomainLimits(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n root: ReturnType<typeof select<any, unknown>>,\n limits: BiasVarianceDomainLimit[],\n xScale: LinearScale,\n yScale: LinearScale,\n bounds: { left: number; right: number; top: number; bottom: number },\n): void {\n const arrow = FD.domainLimitArrow;\n const layer = root\n .append('g')\n .attr('class', 'domain-limits')\n .attr('pointer-events', 'none');\n\n for (const limit of limits) {\n const color = limit.color || FD.domainLimitColor;\n const group = layer.append('g').attr('class', `domain-limit domain-limit--${limit.orientation}`);\n const hasBand = limit.values.length === 2;\n\n if (limit.orientation === 'vertical') {\n const positions = limit.values.map((v) =>\n clamp(xScale(v), bounds.left, bounds.right),\n );\n if (hasBand) {\n group\n .append('rect')\n .attr('x', Math.min(positions[0], positions[1]))\n .attr('y', bounds.top)\n .attr('width', Math.abs(positions[1] - positions[0]))\n .attr('height', bounds.bottom - bounds.top)\n .attr('fill', color)\n .attr('fill-opacity', FD.domainLimitFillOpacity);\n }\n positions.forEach((x, i) => {\n group\n .append('line')\n .attr('x1', x)\n .attr('x2', x)\n .attr('y1', bounds.top)\n .attr('y2', bounds.bottom)\n .attr('stroke', color)\n .attr('stroke-dasharray', FD.domainLimitDash);\n group\n .append('path')\n .attr('d', `M ${x},${bounds.top + arrow} L ${x - 6},${bounds.top} L ${x + 6},${bounds.top} Z`)\n .attr('fill', color);\n group\n .append('path')\n .attr(\n 'd',\n `M ${x},${bounds.bottom - arrow} L ${x - 6},${bounds.bottom} L ${x + 6},${bounds.bottom} Z`,\n )\n .attr('fill', color);\n appendLimitLabel(group, {\n x,\n y: bounds.top + arrow,\n text: formatTradeoffValue(limit.values[i]),\n align: 'center',\n });\n });\n continue;\n }\n\n const positions = limit.values.map((v) => clamp(yScale(v), bounds.top, bounds.bottom));\n if (hasBand) {\n group\n .append('rect')\n .attr('x', bounds.left)\n .attr('y', Math.min(positions[0], positions[1]))\n .attr('width', bounds.right - bounds.left)\n .attr('height', Math.abs(positions[1] - positions[0]))\n .attr('fill', color)\n .attr('fill-opacity', FD.domainLimitFillOpacity);\n }\n positions.forEach((y, i) => {\n group\n .append('line')\n .attr('x1', bounds.left)\n .attr('x2', bounds.right)\n .attr('y1', y)\n .attr('y2', y)\n .attr('stroke', color)\n .attr('stroke-dasharray', FD.domainLimitDash);\n group\n .append('path')\n .attr(\n 'd',\n `M ${bounds.right - arrow},${y} L ${bounds.right},${y - 6} L ${bounds.right},${y + 6} Z`,\n )\n .attr('fill', color);\n group\n .append('path')\n .attr(\n 'd',\n `M ${bounds.left + arrow},${y} L ${bounds.left},${y - 6} L ${bounds.left},${y + 6} Z`,\n )\n .attr('fill', color);\n appendLimitLabel(group, {\n x: bounds.left,\n y: y - 17,\n text: formatTradeoffValue(limit.values[i]),\n align: 'right',\n });\n });\n }\n}\n\n/**\n * FuseDash BiasVarianceTradeoffChart — D3 rewrite.\n *\n * Coordinate system matches the client Visx build: both scales carry the margin\n * in their range, so there is no inner plot translate.\n */\nexport function renderBiasVarianceChart(\n container: HTMLElement,\n options: RenderBiasVarianceChartOptions,\n): void {\n const {\n model,\n width,\n height,\n margin = { ...FD.biasVarianceMargin },\n theme,\n showGrid = true,\n showTooltip = true,\n onHover,\n onLeave,\n } = options;\n\n container.replaceChildren();\n const { series } = model;\n if (!series.length || width <= 0 || height <= 0) return;\n\n const plotLeft = margin.left;\n const plotRight = width - margin.right;\n const plotTop = margin.top;\n const plotBottom = height - margin.bottom;\n if (plotRight - plotLeft < 8 || plotBottom - plotTop < 8) return;\n\n const xScale = scaleLinear<number, number>()\n .domain(biasVarianceXDomain(series))\n .range([plotLeft, plotRight]);\n\n const yScale = scaleLinear<number, number>()\n .domain(biasVarianceYDomain(series))\n .range([plotBottom, plotTop])\n .nice();\n\n const xTicks = xScale.ticks(FD.biasVarianceXTicks);\n const yTicks = yScale.ticks(FD.biasVarianceYTicks);\n\n const svg = select(container)\n .append('svg')\n .attr('width', width)\n .attr('height', height)\n .attr('viewBox', `0 0 ${width} ${height}`)\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .attr('role', 'img')\n .attr('aria-label', 'Bias-variance tradeoff chart')\n .style('display', 'block')\n .style('font-family', theme.fontFamily);\n\n const root = svg.append('g').attr('class', 'plot');\n\n if (showGrid) {\n const grid = root.append('g').attr('class', 'grid').attr('pointer-events', 'none');\n for (const tick of yTicks) {\n grid\n .append('line')\n .attr('x1', plotLeft)\n .attr('x2', plotRight)\n .attr('y1', yScale(tick))\n .attr('y2', yScale(tick))\n .attr('stroke', FD.biasVarianceGridStroke)\n .attr('stroke-dasharray', FD.biasVarianceGridDash)\n .attr('shape-rendering', 'crispEdges');\n }\n }\n\n const lineGen = d3Line<BiasVariancePoint>()\n .x((d) => xScale(d.x))\n .y((d) => yScale(d.y))\n .curve(curveMonotoneX);\n\n const curves = root.append('g').attr('class', 'series-layer');\n series.forEach((s, i) => {\n curves\n .append('path')\n .attr('class', `series series-${i}`)\n .datum(s.points)\n .attr('fill', 'none')\n .attr('stroke', resolveColor(s, i, theme))\n .attr('stroke-width', FD.biasVarianceLineWidth)\n .attr('opacity', FD.biasVarianceLineOpacity)\n .attr('pointer-events', 'none')\n .attr('d', lineGen);\n });\n\n /**\n * Hover focus: fade every other curve (FuseDash line-hover convention). Both\n * helpers only touch the `opacity` attribute, so the plot is never rebuilt.\n */\n const allSeriesPaths = () => curves.selectAll<SVGPathElement, unknown>('path.series');\n const focusSeries = (focused: number): void => {\n allSeriesPaths().attr('opacity', (_d, i) =>\n i === focused ? 1 : FD.biasVarianceLineOpacityDimmed,\n );\n };\n const restoreSeries = (): void => {\n allSeriesPaths().attr('opacity', FD.biasVarianceLineOpacity);\n };\n\n const axes = root.append('g').attr('class', 'axes').attr('pointer-events', 'none');\n\n for (const tick of yTicks) {\n axes\n .append('text')\n .attr('x', plotLeft - 8)\n .attr('y', yScale(tick) + 4)\n .attr('text-anchor', 'end')\n .attr('fill', FD.biasVarianceLabelFill)\n .attr('font-size', FD.axisLabelSize)\n .text(formatTradeoffValue(tick));\n }\n\n for (const tick of xTicks) {\n axes\n .append('text')\n .attr('x', xScale(tick))\n .attr('y', plotBottom + 18)\n .attr('text-anchor', 'middle')\n .attr('fill', FD.biasVarianceLabelFill)\n .attr('font-size', FD.axisLabelSize)\n .text(formatTradeoffValue(tick));\n }\n\n axes\n .append('line')\n .attr('x1', plotLeft)\n .attr('x2', plotLeft)\n .attr('y1', plotTop)\n .attr('y2', plotBottom)\n .attr('stroke', FD.biasVarianceAxisStroke);\n axes\n .append('line')\n .attr('x1', plotLeft)\n .attr('x2', plotRight)\n .attr('y1', plotBottom)\n .attr('y2', plotBottom)\n .attr('stroke', FD.biasVarianceAxisStroke);\n\n if (model.domainsLimits.length) {\n renderDomainLimits(root, model.domainsLimits, xScale, yScale, {\n left: plotLeft,\n right: plotRight,\n top: plotTop,\n bottom: plotBottom,\n });\n }\n\n if (!showTooltip || !onHover) return;\n\n const hoverLayer = root.append('g').attr('class', 'hover').attr('pointer-events', 'none');\n const guide = hoverLayer\n .append('line')\n .attr('stroke', FD.biasVarianceAxisStroke)\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', FD.domainLimitDash)\n .attr('opacity', 0);\n const dots = hoverLayer.append('g').attr('class', 'hover-dots');\n\n const xValues = biasVarianceXValues(series);\n\n const nearestX = (px: number): number => {\n let best = xValues[0];\n let bestDist = Infinity;\n for (const value of xValues) {\n const dist = Math.abs(xScale(value) - px);\n if (dist < bestDist) {\n bestDist = dist;\n best = value;\n }\n }\n return best;\n };\n\n root\n .append('rect')\n .attr('class', 'hover-target')\n .attr('x', plotLeft)\n .attr('y', plotTop)\n .attr('width', plotRight - plotLeft)\n .attr('height', plotBottom - plotTop)\n .attr('fill', 'transparent')\n .on('mousemove', (event: MouseEvent) => {\n const [px, py] = pointer(event, svg.node());\n const x = nearestX(px);\n if (x == null) return;\n const gx = xScale(x);\n\n guide\n .attr('x1', gx)\n .attr('x2', gx)\n .attr('y1', plotTop)\n .attr('y2', plotBottom)\n .attr('opacity', 1);\n\n // The curve closest to the cursor is the focused one; siblings fade.\n let focused = -1;\n let focusedDist = Infinity;\n series.forEach((s, i) => {\n const point = s.points.find((p) => p.x === x);\n if (!point) return;\n const dist = Math.abs(yScale(point.y) - py);\n if (dist < focusedDist) {\n focusedDist = dist;\n focused = i;\n }\n });\n focusSeries(focused);\n\n dots.selectAll('*').remove();\n const entries: BiasVarianceHoverEntry[] = [];\n series.forEach((s, i) => {\n const point = s.points.find((p) => p.x === x);\n if (!point) return;\n const color = resolveColor(s, i, theme);\n const isFocused = i === focused;\n entries.push({\n seriesId: s.id,\n seriesName: s.name ?? s.id,\n color,\n value: point.y,\n focused: isFocused,\n });\n dots\n .append('circle')\n .attr('class', isFocused ? 'hover-dot hover-dot--focused' : 'hover-dot')\n .attr('cx', gx)\n .attr('cy', yScale(point.y))\n .attr('r', FD.stepHoverDotRadius)\n .attr('fill', color)\n .attr('stroke', '#fff')\n .attr('stroke-width', 2)\n .attr('opacity', isFocused ? 1 : FD.biasVarianceLineOpacityDimmed);\n });\n\n onHover({ x, entries, event });\n })\n .on('mouseleave', () => {\n guide.attr('opacity', 0);\n dots.selectAll('*').remove();\n restoreSeries();\n onLeave?.();\n });\n}\n"],"names":["fdSeriesColor","positions","d3Line"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/bias-variance-tradeoff-chart/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -22,7 +22,7 @@ export declare class Ui9000BoxPlotChart extends Ui9000ChartElement {
|
|
|
22
22
|
private parseData;
|
|
23
23
|
private draw;
|
|
24
24
|
private renderLegend;
|
|
25
|
-
render(): import('lit').TemplateResult<1>;
|
|
25
|
+
render(): import('lit-html').TemplateResult<1>;
|
|
26
26
|
}
|
|
27
27
|
declare global {
|
|
28
28
|
interface HTMLElementTagNameMap {
|
|
@@ -18,7 +18,7 @@ export declare class Ui9000BubbleChart extends Ui9000ChartElement {
|
|
|
18
18
|
private parseData;
|
|
19
19
|
private renderLegend;
|
|
20
20
|
private draw;
|
|
21
|
-
render(): import('lit').TemplateResult<1>;
|
|
21
|
+
render(): import('lit-html').TemplateResult<1>;
|
|
22
22
|
}
|
|
23
23
|
declare global {
|
|
24
24
|
interface HTMLElementTagNameMap {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui9000-chart-renderer.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"names":[],"mappings":"AAsBA,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"ui9000-chart-renderer.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"names":[],"mappings":"AAsBA,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAaxC;IAED,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,WAAW,CAAK;IAExB,iBAAiB,IAAI,IAAI;IAqBzB,wBAAwB,IAAI,IAAI;IAIhC,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS;YAgBH,UAAU;CA0EzB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,uBAAuB,EAAE,mBAAmB,CAAC;KAC9C;CACF;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
|
|
@@ -29,7 +29,10 @@ class Ui9000ChartRenderer extends HTMLElement {
|
|
|
29
29
|
"show-grid",
|
|
30
30
|
"show-legend",
|
|
31
31
|
"show-tooltip",
|
|
32
|
-
"chart-title"
|
|
32
|
+
"chart-title",
|
|
33
|
+
"mapbox-token",
|
|
34
|
+
"geojson-base-url",
|
|
35
|
+
"pmtiles-base-url"
|
|
33
36
|
];
|
|
34
37
|
}
|
|
35
38
|
connectedCallback() {
|
|
@@ -61,6 +64,11 @@ class Ui9000ChartRenderer extends HTMLElement {
|
|
|
61
64
|
get scale() {
|
|
62
65
|
return this.getAttribute("scale") || "default";
|
|
63
66
|
}
|
|
67
|
+
copyHostAttr(el, name) {
|
|
68
|
+
const value = this.getAttribute(name);
|
|
69
|
+
if (value) el.setAttribute(name, value);
|
|
70
|
+
else el.removeAttribute(name);
|
|
71
|
+
}
|
|
64
72
|
boolAttr(name) {
|
|
65
73
|
if (!this.hasAttribute(name)) return void 0;
|
|
66
74
|
return this.getAttribute(name) !== "false";
|
|
@@ -133,6 +141,9 @@ class Ui9000ChartRenderer extends HTMLElement {
|
|
|
133
141
|
else el.setAttribute("show-tooltip", "false");
|
|
134
142
|
}
|
|
135
143
|
applyTargetAttrs(el, target.attrs);
|
|
144
|
+
this.copyHostAttr(el, "mapbox-token");
|
|
145
|
+
this.copyHostAttr(el, "geojson-base-url");
|
|
146
|
+
this.copyHostAttr(el, "pmtiles-base-url");
|
|
136
147
|
el.style.display = "block";
|
|
137
148
|
el.style.width = "100%";
|
|
138
149
|
el.style.height = "100%";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui9000-chart-renderer.js","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"sourcesContent":["import { loadChart } from '../../../lazy/index.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport {\n resolveChartTarget,\n resolveWidgetChartType,\n type ChartTargetAttrs,\n} from '../lib/index.js';\nimport { chartRendererStyles } from './styles.js';\n\nfunction applyTargetAttrs(el: HTMLElement, attrs?: ChartTargetAttrs): void {\n if (!attrs) return;\n for (const [key, value] of Object.entries(attrs)) {\n if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n }\n}\n\nexport class Ui9000ChartRenderer extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\n 'data',\n 'chart-type',\n 'scale',\n 'show-grid',\n 'show-legend',\n 'show-tooltip',\n 'chart-title',\n ];\n }\n\n private _host: HTMLDivElement | null = null;\n private _empty: HTMLDivElement | null = null;\n private _mountToken = 0;\n\n connectedCallback(): void {\n if (this._host) return;\n const root = this.attachShadow({ mode: 'open' });\n const style = document.createElement('style');\n style.textContent = chartRendererStyles.cssText;\n root.appendChild(style);\n\n this._host = document.createElement('div');\n this._host.className = 'host';\n this._host.part = 'chart';\n root.appendChild(this._host);\n\n this._empty = document.createElement('div');\n this._empty.className = 'empty';\n this._empty.part = 'empty';\n this._empty.hidden = true;\n root.appendChild(this._empty);\n\n void this.mountChart();\n }\n\n attributeChangedCallback(): void {\n if (this._host) void this.mountChart();\n }\n\n private get dataJson(): string {\n return this.getAttribute('data') ?? '{}';\n }\n\n private get chartTypeAttr(): string {\n return this.getAttribute('chart-type') ?? '';\n }\n\n private get scale(): WidgetScale {\n return (this.getAttribute('scale') as WidgetScale) || 'default';\n }\n\n private boolAttr(name: string): boolean | undefined {\n if (!this.hasAttribute(name)) return undefined;\n return this.getAttribute(name) !== 'false';\n }\n\n private showEmpty(message: string, detail?: string): void {\n if (!this._empty || !this._host) return;\n this._host.replaceChildren();\n this._host.hidden = true;\n this._empty.hidden = false;\n this._empty.replaceChildren();\n const strong = document.createElement('strong');\n strong.textContent = message;\n this._empty.appendChild(strong);\n if (detail) {\n const p = document.createElement('span');\n p.textContent = detail;\n this._empty.appendChild(p);\n }\n }\n\n private async mountChart(): Promise<void> {\n if (!this._host || !this._empty) return;\n const token = ++this._mountToken;\n\n const chartType = resolveWidgetChartType(this.dataJson, this.chartTypeAttr);\n if (!chartType) {\n this.showEmpty('No chart type', 'Pass chart-type or a widget payload with chartType.');\n return;\n }\n\n const target = resolveChartTarget(chartType);\n if (!target) {\n this.showEmpty(\n 'Unsupported chart type',\n `\"${chartType}\" is not available in @ui9000/widgets yet.`,\n );\n return;\n }\n\n try {\n await loadChart(target.kind);\n } catch {\n if (token !== this._mountToken) return;\n this.showEmpty('Failed to load chart', target.kind);\n return;\n }\n\n if (token !== this._mountToken) return;\n\n const widget = parseJsonAttr<{ name?: string } | null>(this.dataJson, null);\n const title =\n this.getAttribute('chart-title')?.trim() ||\n (widget && typeof widget === 'object' ? widget.name?.trim() : '') ||\n '';\n\n let el = this._host.firstElementChild as HTMLElement | null;\n if (!el || el.tagName.toLowerCase() !== target.tag) {\n this._host.replaceChildren();\n el = document.createElement(target.tag);\n this._host.appendChild(el);\n }\n\n el.setAttribute('data', this.dataJson);\n el.setAttribute('scale', this.scale);\n if (title) el.setAttribute('chart-title', title);\n else el.removeAttribute('chart-title');\n\n const showGrid = this.boolAttr('show-grid');\n const showLegend = this.boolAttr('show-legend');\n const showTooltip = this.boolAttr('show-tooltip');\n if (showGrid !== undefined) {\n if (showGrid) el.setAttribute('show-grid', '');\n else el.setAttribute('show-grid', 'false');\n }\n if (showLegend !== undefined) {\n if (showLegend) el.setAttribute('show-legend', '');\n else el.setAttribute('show-legend', 'false');\n }\n if (showTooltip !== undefined) {\n if (showTooltip) el.setAttribute('show-tooltip', '');\n else el.setAttribute('show-tooltip', 'false');\n }\n\n applyTargetAttrs(el, target.attrs);\n el.style.display = 'block';\n el.style.width = '100%';\n el.style.height = '100%';\n\n this._empty.hidden = true;\n this._host.hidden = false;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-chart-renderer': Ui9000ChartRenderer;\n }\n}\n\nexport function registerChartRenderer(): void {\n if (!customElements.get('ui9000-chart-renderer')) {\n customElements.define('ui9000-chart-renderer', Ui9000ChartRenderer);\n }\n}\n\nregisterChartRenderer();\n"],"names":[],"mappings":";;;;;AAUA,SAAS,iBAAiB,IAAiB,OAAgC;AACzE,MAAI,CAAC,MAAO;AACZ,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,OAAO,UAAU,WAAW;AAC9B,UAAI,MAAO,IAAG,aAAa,KAAK,EAAE;AAAA,UAC7B,IAAG,gBAAgB,GAAG;AAAA,IAC7B,OAAO;AACL,SAAG,aAAa,KAAK,OAAO,KAAK,CAAC;AAAA,IACpC;AAAA,EACF;AACF;AAEO,MAAM,4BAA4B,YAAY;AAAA,EAA9C,cAAA;AAAA,UAAA,GAAA,SAAA;
|
|
1
|
+
{"version":3,"file":"ui9000-chart-renderer.js","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"sourcesContent":["import { loadChart } from '../../../lazy/index.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport {\n resolveChartTarget,\n resolveWidgetChartType,\n type ChartTargetAttrs,\n} from '../lib/index.js';\nimport { chartRendererStyles } from './styles.js';\n\nfunction applyTargetAttrs(el: HTMLElement, attrs?: ChartTargetAttrs): void {\n if (!attrs) return;\n for (const [key, value] of Object.entries(attrs)) {\n if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n }\n}\n\nexport class Ui9000ChartRenderer extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\n 'data',\n 'chart-type',\n 'scale',\n 'show-grid',\n 'show-legend',\n 'show-tooltip',\n 'chart-title',\n 'mapbox-token',\n 'geojson-base-url',\n 'pmtiles-base-url',\n ];\n }\n\n private _host: HTMLDivElement | null = null;\n private _empty: HTMLDivElement | null = null;\n private _mountToken = 0;\n\n connectedCallback(): void {\n if (this._host) return;\n const root = this.attachShadow({ mode: 'open' });\n const style = document.createElement('style');\n style.textContent = chartRendererStyles.cssText;\n root.appendChild(style);\n\n this._host = document.createElement('div');\n this._host.className = 'host';\n this._host.part = 'chart';\n root.appendChild(this._host);\n\n this._empty = document.createElement('div');\n this._empty.className = 'empty';\n this._empty.part = 'empty';\n this._empty.hidden = true;\n root.appendChild(this._empty);\n\n void this.mountChart();\n }\n\n attributeChangedCallback(): void {\n if (this._host) void this.mountChart();\n }\n\n private get dataJson(): string {\n return this.getAttribute('data') ?? '{}';\n }\n\n private get chartTypeAttr(): string {\n return this.getAttribute('chart-type') ?? '';\n }\n\n private get scale(): WidgetScale {\n return (this.getAttribute('scale') as WidgetScale) || 'default';\n }\n\n private copyHostAttr(el: HTMLElement, name: string): void {\n const value = this.getAttribute(name);\n if (value) el.setAttribute(name, value);\n else el.removeAttribute(name);\n }\n\n private boolAttr(name: string): boolean | undefined {\n if (!this.hasAttribute(name)) return undefined;\n return this.getAttribute(name) !== 'false';\n }\n\n private showEmpty(message: string, detail?: string): void {\n if (!this._empty || !this._host) return;\n this._host.replaceChildren();\n this._host.hidden = true;\n this._empty.hidden = false;\n this._empty.replaceChildren();\n const strong = document.createElement('strong');\n strong.textContent = message;\n this._empty.appendChild(strong);\n if (detail) {\n const p = document.createElement('span');\n p.textContent = detail;\n this._empty.appendChild(p);\n }\n }\n\n private async mountChart(): Promise<void> {\n if (!this._host || !this._empty) return;\n const token = ++this._mountToken;\n\n const chartType = resolveWidgetChartType(this.dataJson, this.chartTypeAttr);\n if (!chartType) {\n this.showEmpty('No chart type', 'Pass chart-type or a widget payload with chartType.');\n return;\n }\n\n const target = resolveChartTarget(chartType);\n if (!target) {\n this.showEmpty(\n 'Unsupported chart type',\n `\"${chartType}\" is not available in @ui9000/widgets yet.`,\n );\n return;\n }\n\n try {\n await loadChart(target.kind);\n } catch {\n if (token !== this._mountToken) return;\n this.showEmpty('Failed to load chart', target.kind);\n return;\n }\n\n if (token !== this._mountToken) return;\n\n const widget = parseJsonAttr<{ name?: string } | null>(this.dataJson, null);\n const title =\n this.getAttribute('chart-title')?.trim() ||\n (widget && typeof widget === 'object' ? widget.name?.trim() : '') ||\n '';\n\n let el = this._host.firstElementChild as HTMLElement | null;\n if (!el || el.tagName.toLowerCase() !== target.tag) {\n this._host.replaceChildren();\n el = document.createElement(target.tag);\n this._host.appendChild(el);\n }\n\n el.setAttribute('data', this.dataJson);\n el.setAttribute('scale', this.scale);\n if (title) el.setAttribute('chart-title', title);\n else el.removeAttribute('chart-title');\n\n const showGrid = this.boolAttr('show-grid');\n const showLegend = this.boolAttr('show-legend');\n const showTooltip = this.boolAttr('show-tooltip');\n if (showGrid !== undefined) {\n if (showGrid) el.setAttribute('show-grid', '');\n else el.setAttribute('show-grid', 'false');\n }\n if (showLegend !== undefined) {\n if (showLegend) el.setAttribute('show-legend', '');\n else el.setAttribute('show-legend', 'false');\n }\n if (showTooltip !== undefined) {\n if (showTooltip) el.setAttribute('show-tooltip', '');\n else el.setAttribute('show-tooltip', 'false');\n }\n\n applyTargetAttrs(el, target.attrs);\n this.copyHostAttr(el, 'mapbox-token');\n this.copyHostAttr(el, 'geojson-base-url');\n this.copyHostAttr(el, 'pmtiles-base-url');\n el.style.display = 'block';\n el.style.width = '100%';\n el.style.height = '100%';\n\n this._empty.hidden = true;\n this._host.hidden = false;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-chart-renderer': Ui9000ChartRenderer;\n }\n}\n\nexport function registerChartRenderer(): void {\n if (!customElements.get('ui9000-chart-renderer')) {\n customElements.define('ui9000-chart-renderer', Ui9000ChartRenderer);\n }\n}\n\nregisterChartRenderer();\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAqB,WAAW,EAAoB,MAAM,YAAY,CAAC;AAEnF,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB/D,CAAC;AA8EF,eAAO,MAAM,qBAAqB,mBAA8C,CAAC;AAEjF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAI3F;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAI3F;AAMD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAIhF"}
|
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
import areaChartMeta from "../../area-chart/metadata.json.js";
|
|
2
2
|
import areaGroupedBarMeta from "../../area-grouped-bar-chart/metadata.json.js";
|
|
3
3
|
import barChartMeta from "../../bar-chart/metadata.json.js";
|
|
4
|
+
import biasVarianceTradeoffMeta from "../../bias-variance-tradeoff-chart/metadata.json.js";
|
|
4
5
|
import boxPlotMeta from "../../box-plot-chart/metadata.json.js";
|
|
5
6
|
import bubbleMeta from "../../bubble-chart/metadata.json.js";
|
|
6
7
|
import donutMeta from "../../donut-chart/metadata.json.js";
|
|
7
|
-
import
|
|
8
|
+
import giniImpurityEntropyMeta from "../../gini-impurity-entropy-chart/metadata.json.js";
|
|
8
9
|
import histogramMeta from "../../histogram-chart/metadata.json.js";
|
|
9
10
|
import kpiMeta from "../../kpi-widget/metadata.json.js";
|
|
10
11
|
import lineMeta from "../../line-chart/metadata.json.js";
|
|
11
12
|
import lollipopMeta from "../../lollipop/metadata.json.js";
|
|
13
|
+
import mapChartMeta from "../../map-chart/metadata.json.js";
|
|
14
|
+
import matrixMeta from "../../matrix-chart/metadata.json.js";
|
|
15
|
+
import networkGraphMeta from "../../network-graph/metadata.json.js";
|
|
16
|
+
import parallelCoordinatesMeta from "../../parallel-coordinates-chart/metadata.json.js";
|
|
12
17
|
import pieMeta from "../../pie-chart/metadata.json.js";
|
|
18
|
+
import polarAreaMeta from "../../polar-area-chart/metadata.json.js";
|
|
13
19
|
import punchcardMeta from "../../punchcard-chart/metadata.json.js";
|
|
14
20
|
import radarMeta from "../../radar-chart/metadata.json.js";
|
|
21
|
+
import radialBarMeta from "../../radial-bar-chart/metadata.json.js";
|
|
15
22
|
import sankeyMeta from "../../sankey-chart/metadata.json.js";
|
|
16
23
|
import scatterPlotMeta from "../../scatter-plot-chart/metadata.json.js";
|
|
17
24
|
import scatterSparklineMeta from "../../scatter-sparkline-chart/metadata.json.js";
|
|
18
25
|
import sparkAreaMeta from "../../spark-area-chart/metadata.json.js";
|
|
19
26
|
import sparkLineMeta from "../../spark-line-chart/metadata.json.js";
|
|
20
27
|
import stepLineMeta from "../../step-line-chart/metadata.json.js";
|
|
28
|
+
import treemapMeta from "../../treemap-chart/metadata.json.js";
|
|
21
29
|
import violinMeta from "../../violin-chart/metadata.json.js";
|
|
22
30
|
import waterfallMeta from "../../waterfall-chart/metadata.json.js";
|
|
23
31
|
const CHART_TYPE_ALIASES = {
|
|
@@ -34,29 +42,38 @@ const CHART_TYPE_ALIASES = {
|
|
|
34
42
|
qqPlot: "qqPlot",
|
|
35
43
|
radarChartGrouped: "radarGroupedChart",
|
|
36
44
|
/** Client charts mock / MCP spelling */
|
|
37
|
-
rocPlotChart: "rocCurveChart"
|
|
45
|
+
rocPlotChart: "rocCurveChart",
|
|
46
|
+
UniversalMap: "mapChart"
|
|
38
47
|
};
|
|
39
48
|
const METADATA = [
|
|
40
49
|
areaChartMeta,
|
|
41
50
|
areaGroupedBarMeta,
|
|
42
51
|
barChartMeta,
|
|
52
|
+
biasVarianceTradeoffMeta,
|
|
43
53
|
boxPlotMeta,
|
|
44
54
|
bubbleMeta,
|
|
45
55
|
donutMeta,
|
|
46
|
-
|
|
56
|
+
giniImpurityEntropyMeta,
|
|
47
57
|
histogramMeta,
|
|
48
58
|
kpiMeta,
|
|
49
59
|
lineMeta,
|
|
50
60
|
lollipopMeta,
|
|
61
|
+
mapChartMeta,
|
|
62
|
+
matrixMeta,
|
|
63
|
+
networkGraphMeta,
|
|
64
|
+
parallelCoordinatesMeta,
|
|
51
65
|
pieMeta,
|
|
66
|
+
polarAreaMeta,
|
|
52
67
|
punchcardMeta,
|
|
53
68
|
radarMeta,
|
|
69
|
+
radialBarMeta,
|
|
54
70
|
sankeyMeta,
|
|
55
71
|
scatterPlotMeta,
|
|
56
72
|
scatterSparklineMeta,
|
|
57
73
|
sparkAreaMeta,
|
|
58
74
|
sparkLineMeta,
|
|
59
75
|
stepLineMeta,
|
|
76
|
+
treemapMeta,
|
|
60
77
|
violinMeta,
|
|
61
78
|
waterfallMeta
|
|
62
79
|
];
|
|
@@ -109,8 +126,16 @@ function resolveChartTarget(chartType) {
|
|
|
109
126
|
if (!key) return null;
|
|
110
127
|
return REGISTRY[key] ?? null;
|
|
111
128
|
}
|
|
129
|
+
const HOST_NOT_READY = new Set(
|
|
130
|
+
METADATA.filter((meta) => {
|
|
131
|
+
var _a;
|
|
132
|
+
return ((_a = meta.usageConditions) == null ? void 0 : _a.hostReady) === false;
|
|
133
|
+
}).map((meta) => meta.id)
|
|
134
|
+
);
|
|
112
135
|
function canRenderChartType(chartType) {
|
|
113
|
-
|
|
136
|
+
const target = resolveChartTarget(chartType);
|
|
137
|
+
if (!target) return false;
|
|
138
|
+
return !HOST_NOT_READY.has(target.kind);
|
|
114
139
|
}
|
|
115
140
|
export {
|
|
116
141
|
CHART_TYPE_ALIASES,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"sourcesContent":["import type { ChartKind } from '../../../lazy/index.js';\nimport areaChartMeta from '../../area-chart/metadata.json';\nimport areaGroupedBarMeta from '../../area-grouped-bar-chart/metadata.json';\nimport barChartMeta from '../../bar-chart/metadata.json';\nimport boxPlotMeta from '../../box-plot-chart/metadata.json';\nimport bubbleMeta from '../../bubble-chart/metadata.json';\nimport donutMeta from '../../donut-chart/metadata.json';\nimport
|
|
1
|
+
{"version":3,"file":"registry.js","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"sourcesContent":["import type { ChartKind } from '../../../lazy/index.js';\nimport areaChartMeta from '../../area-chart/metadata.json';\nimport areaGroupedBarMeta from '../../area-grouped-bar-chart/metadata.json';\nimport barChartMeta from '../../bar-chart/metadata.json';\nimport biasVarianceTradeoffMeta from '../../bias-variance-tradeoff-chart/metadata.json';\nimport boxPlotMeta from '../../box-plot-chart/metadata.json';\nimport bubbleMeta from '../../bubble-chart/metadata.json';\nimport donutMeta from '../../donut-chart/metadata.json';\nimport giniImpurityEntropyMeta from '../../gini-impurity-entropy-chart/metadata.json';\nimport histogramMeta from '../../histogram-chart/metadata.json';\nimport kpiMeta from '../../kpi-widget/metadata.json';\nimport lineMeta from '../../line-chart/metadata.json';\nimport lollipopMeta from '../../lollipop/metadata.json';\nimport mapChartMeta from '../../map-chart/metadata.json';\nimport matrixMeta from '../../matrix-chart/metadata.json';\nimport networkGraphMeta from '../../network-graph/metadata.json';\nimport parallelCoordinatesMeta from '../../parallel-coordinates-chart/metadata.json';\nimport pieMeta from '../../pie-chart/metadata.json';\nimport polarAreaMeta from '../../polar-area-chart/metadata.json';\nimport punchcardMeta from '../../punchcard-chart/metadata.json';\nimport radarMeta from '../../radar-chart/metadata.json';\nimport radialBarMeta from '../../radial-bar-chart/metadata.json';\nimport sankeyMeta from '../../sankey-chart/metadata.json';\nimport scatterPlotMeta from '../../scatter-plot-chart/metadata.json';\nimport scatterSparklineMeta from '../../scatter-sparkline-chart/metadata.json';\nimport sparkAreaMeta from '../../spark-area-chart/metadata.json';\nimport sparkLineMeta from '../../spark-line-chart/metadata.json';\nimport stepLineMeta from '../../step-line-chart/metadata.json';\nimport treemapMeta from '../../treemap-chart/metadata.json';\nimport violinMeta from '../../violin-chart/metadata.json';\nimport waterfallMeta from '../../waterfall-chart/metadata.json';\nimport type { ChartMetadataLike, ChartTarget, ChartTargetAttrs } from './types.js';\n\n/** FuseDash variant / legacy chartType → registry key (mirrors client chartTypeRegistry). */\nexport const CHART_TYPE_ALIASES: Readonly<Record<string, string>> = {\n barGroupedChart: 'barGrouped',\n barStackedChart: 'barStacked',\n cumulativeBarChart: 'cumulativeBar',\n barHorizontalChart: 'barHorizontal',\n barHorizontalGroupedChart: 'barHorizontalGrouped',\n barHorizontalStackedChart: 'barHorizontalStacked',\n lollipopGroupedChart: 'lollipopGroupedChart',\n lollipopStackedChart: 'lollipopStackedChart',\n lineGroupedChart: 'lineGroupedChart',\n areaStackedChart: 'areaStackedChart',\n qqPlot: 'qqPlot',\n radarChartGrouped: 'radarGroupedChart',\n /** Client charts mock / MCP spelling */\n rocPlotChart: 'rocCurveChart',\n UniversalMap: 'mapChart',\n};\n\nconst METADATA: ChartMetadataLike[] = [\n areaChartMeta,\n areaGroupedBarMeta,\n barChartMeta,\n biasVarianceTradeoffMeta,\n boxPlotMeta,\n bubbleMeta,\n donutMeta,\n giniImpurityEntropyMeta,\n histogramMeta,\n kpiMeta,\n lineMeta,\n lollipopMeta,\n mapChartMeta,\n matrixMeta,\n networkGraphMeta,\n parallelCoordinatesMeta,\n pieMeta,\n polarAreaMeta,\n punchcardMeta,\n radarMeta,\n radialBarMeta,\n sankeyMeta,\n scatterPlotMeta,\n scatterSparklineMeta,\n sparkAreaMeta,\n sparkLineMeta,\n stepLineMeta,\n treemapMeta,\n violinMeta,\n waterfallMeta,\n];\n\nfunction toDomAttr(camelKey: string): string {\n return camelKey.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n}\n\nfunction attrsFromMap(raw?: Record<string, unknown>): ChartTargetAttrs | undefined {\n if (!raw) return undefined;\n const out: ChartTargetAttrs = {};\n for (const [key, value] of Object.entries(raw)) {\n if (typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number') {\n out[toDomAttr(key)] = value;\n }\n }\n return Object.keys(out).length ? out : undefined;\n}\n\nfunction entriesFromMeta(meta: ChartMetadataLike): Record<string, ChartTarget> {\n const kind = meta.id as ChartKind;\n const out: Record<string, ChartTarget> = {};\n for (const chartType of meta.chartTypeKeys ?? []) {\n out[chartType] = {\n kind,\n tag: meta.tag,\n attrs: attrsFromMap(meta.chartTypeMap?.[chartType]),\n };\n }\n return out;\n}\n\nconst REGISTRY: Record<string, ChartTarget> = METADATA.reduce(\n (acc, meta) => Object.assign(acc, entriesFromMeta(meta)),\n {} as Record<string, ChartTarget>,\n);\n\n/** KS / ROC overlays map to step-line `graf-type`. */\nREGISTRY.ksPlotChart = {\n ...REGISTRY.ksPlotChart,\n attrs: { 'graf-type': 'curve' },\n};\nREGISTRY.rocCurveChart = {\n ...REGISTRY.rocCurveChart,\n attrs: { 'graf-type': 'line' },\n};\n\nexport const SUPPORTED_CHART_TYPES = Object.freeze(Object.keys(REGISTRY).sort());\n\nexport function resolveRegistryKey(chartType: string | undefined | null): string | undefined {\n if (!chartType?.trim()) return undefined;\n const trimmed = chartType.trim();\n return CHART_TYPE_ALIASES[trimmed] ?? trimmed;\n}\n\n/** Resolve FuseDash chartType → lazy ChartKind + host tag + optional attrs. */\nexport function resolveChartTarget(chartType: string | undefined | null): ChartTarget | null {\n const key = resolveRegistryKey(chartType);\n if (!key) return null;\n return REGISTRY[key] ?? null;\n}\n\nconst HOST_NOT_READY = new Set(\n METADATA.filter((meta) => meta.usageConditions?.hostReady === false).map((meta) => meta.id),\n);\n\nexport function canRenderChartType(chartType: string | undefined | null): boolean {\n const target = resolveChartTarget(chartType);\n if (!target) return false;\n return !HOST_NOT_READY.has(target.kind);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCO,MAAM,qBAAuD;AAAA,EAClE,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,2BAA2B;AAAA,EAC3B,2BAA2B;AAAA,EAC3B,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EACR,mBAAmB;AAAA;AAAA,EAEnB,cAAc;AAAA,EACd,cAAc;AAChB;AAEA,MAAM,WAAgC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,UAAU,UAA0B;AAC3C,SAAO,SAAS,QAAQ,UAAU,CAAC,MAAM,IAAI,EAAE,YAAA,CAAa,EAAE;AAChE;AAEA,SAAS,aAAa,KAA6D;AACjF,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,MAAwB,CAAA;AAC9B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU,aAAa,OAAO,UAAU,UAAU;AACxF,UAAI,UAAU,GAAG,CAAC,IAAI;AAAA,IACxB;AAAA,EACF;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,SAAS,MAAM;AACzC;AAEA,SAAS,gBAAgB,MAAsD;;AAC7E,QAAM,OAAO,KAAK;AAClB,QAAM,MAAmC,CAAA;AACzC,aAAW,aAAa,KAAK,iBAAiB,CAAA,GAAI;AAChD,QAAI,SAAS,IAAI;AAAA,MACf;AAAA,MACA,KAAK,KAAK;AAAA,MACV,OAAO,cAAa,UAAK,iBAAL,mBAAoB,UAAU;AAAA,IAAA;AAAA,EAEtD;AACA,SAAO;AACT;AAEA,MAAM,WAAwC,SAAS;AAAA,EACrD,CAAC,KAAK,SAAS,OAAO,OAAO,KAAK,gBAAgB,IAAI,CAAC;AAAA,EACvD,CAAA;AACF;AAGA,SAAS,cAAc;AAAA,EACrB,GAAG,SAAS;AAAA,EACZ,OAAO,EAAE,aAAa,QAAA;AACxB;AACA,SAAS,gBAAgB;AAAA,EACvB,GAAG,SAAS;AAAA,EACZ,OAAO,EAAE,aAAa,OAAA;AACxB;AAEO,MAAM,wBAAwB,OAAO,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM;AAExE,SAAS,mBAAmB,WAA0D;AAC3F,MAAI,EAAC,uCAAW,QAAQ,QAAO;AAC/B,QAAM,UAAU,UAAU,KAAA;AAC1B,SAAO,mBAAmB,OAAO,KAAK;AACxC;AAGO,SAAS,mBAAmB,WAA0D;AAC3F,QAAM,MAAM,mBAAmB,SAAS;AACxC,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,SAAS,GAAG,KAAK;AAC1B;AAEA,MAAM,iBAAiB,IAAI;AAAA,EACzB,SAAS,OAAO,CAAC,SAAA;;AAAS,uBAAK,oBAAL,mBAAsB,eAAc;AAAA,GAAK,EAAE,IAAI,CAAC,SAAS,KAAK,EAAE;AAC5F;AAEO,SAAS,mBAAmB,WAA+C;AAChF,QAAM,SAAS,mBAAmB,SAAS;AAC3C,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,CAAC,eAAe,IAAI,OAAO,IAAI;AACxC;"}
|
|
@@ -10,5 +10,10 @@ export interface ChartMetadataLike {
|
|
|
10
10
|
tag: string;
|
|
11
11
|
chartTypeKeys?: string[];
|
|
12
12
|
chartTypeMap?: Record<string, Record<string, unknown>>;
|
|
13
|
+
/** When `hostReady` is false, `canRenderChartType` stays closed (hosts keep iframe / empty). */
|
|
14
|
+
usageConditions?: {
|
|
15
|
+
hostReady?: boolean;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
};
|
|
13
18
|
}
|
|
14
19
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAEzE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAEzE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,gGAAgG;IAChG,eAAe,CAAC,EAAE;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH"}
|
|
@@ -18,7 +18,7 @@ export declare class Ui9000DonutChart extends Ui9000ChartElement {
|
|
|
18
18
|
private parseData;
|
|
19
19
|
private renderLegend;
|
|
20
20
|
private draw;
|
|
21
|
-
render(): import('lit').TemplateResult<1>;
|
|
21
|
+
render(): import('lit-html').TemplateResult<1>;
|
|
22
22
|
}
|
|
23
23
|
declare global {
|
|
24
24
|
interface HTMLElementTagNameMap {
|
|
@@ -123,8 +123,8 @@ let Ui9000DonutChart = class extends Ui9000ChartElement {
|
|
|
123
123
|
<div class="widget-shell" part="shell">
|
|
124
124
|
${this.renderShellHeader(title)}
|
|
125
125
|
<div class="widget-body">
|
|
126
|
-
${this.renderLegend()}
|
|
127
126
|
<div class="chart-root" part="chart" ?hidden=${this._empty}></div>
|
|
127
|
+
${this.renderLegend()}
|
|
128
128
|
${this._empty ? html`<div class="empty" part="empty">No data</div>` : nothing}
|
|
129
129
|
${this._tooltip ? html`<div
|
|
130
130
|
class="tooltip"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui9000-donut-chart.js","sources":["../../../../src/components/donut-chart/element/ui9000-donut-chart.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport { renderChartLegend } from '../../../element/chart-legend-render.js';\nimport { readThemeFromElement } from '../../../context/widget-context.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { getPieDimensions, parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { swatchLegendEntries } from '../../../utils/chart-legend.js';\nimport { renderPieChart } from '../../pie-chart/render/draw.js';\nimport { chartPropsChanged } from '../../../utils/lit-draw.js';\nimport {\n computeDonutInnerRadius,\n formatDonutPercent,\n legendSlicesFromDonutOrder,\n normalizeDonutData,\n type DonutChartData,\n type DonutModel,\n type DonutChartSlice,\n} from '../lib/index.js';\nimport { donutChartStyles } from './styles.js';\n\n@customElement('ui9000-donut-chart')\nexport class Ui9000DonutChart extends Ui9000ChartElement {\n static override styles = [donutChartStyles, chartShellStyles];\n\n @property({ type: String, attribute: 'scale' })\n scale: WidgetScale = 'default';\n\n @property({ type: Boolean, attribute: 'show-legend' })\n showLegend = true;\n\n @property({ type: Boolean, attribute: 'show-tooltip' })\n showTooltip = true;\n\n @state()\n private _tooltip: {\n x: number;\n y: number;\n xLabel: string;\n yLabel: string;\n } | null = null;\n\n @state()\n private _empty = false;\n\n @state()\n private _legendSlices: DonutChartSlice[] = [];\n\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.scheduleDraw());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n cancelAnimationFrame(this._raf);\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (chartPropsChanged(changed)) this.scheduleDraw();\n }\n\n private scheduleDraw(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => this.draw());\n }\n\n private parseData(): DonutModel {\n const raw = parseJsonAttr<DonutChartData>(this.dataJson, null);\n return normalizeDonutData(raw);\n }\n\n private renderLegend() {\n if (!this.showLegend || !this._legendSlices.length) return nothing;\n const theme = readThemeFromElement(this);\n return renderChartLegend(\n swatchLegendEntries(\n this._legendSlices.map(\n (slice) => `${formatDonutPercent(slice.percentage)}% - ${slice.label}`,\n ),\n theme,\n (_label, index) => this._legendSlices[index]?.color ?? theme.primary,\n ),\n );\n }\n\n private draw(): void {\n const root = this.shadowRoot?.querySelector('.chart-root') as HTMLElement | null;\n if (!root) return;\n\n const model = this.parseData();\n this._empty = model.slices.length === 0;\n if (this._empty) {\n root.replaceChildren();\n this._legendSlices = [];\n return;\n }\n\n const theme = readThemeFromElement(this);\n const { width, height } = getPieDimensions(root);\n const plotSize = Math.min(width, height);\n const outerRadius = plotSize / 2;\n const innerRadius = computeDonutInnerRadius(outerRadius);\n\n renderPieChart(root, {\n slices: model.slices,\n width,\n height,\n theme,\n innerRadius,\n showTooltip: this.showTooltip,\n onLayout: (orderedKeys) => {\n this._legendSlices = legendSlicesFromDonutOrder(model, orderedKeys);\n },\n onHover: this.showTooltip\n ? ({ slice, event }) => {\n const rect = this.getBoundingClientRect();\n const xField = model.xField ?? 'Category';\n const yField = model.yField ?? 'Value';\n const xAxeLabel = model.axisDetails?.[xField]?.label ?? xField;\n const yAxeLabel = model.axisDetails?.[yField]?.label ?? yField;\n const symbol = model.axisDetails?.[yField]?.measure_unit_symbol ?? '';\n const valueText = symbol\n ? `${slice.value.toLocaleString()} ${symbol}`.trim()\n : slice.value.toLocaleString();\n this._tooltip = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n xLabel: `${xAxeLabel}: ${slice.label}`,\n yLabel: `${yAxeLabel}: ${valueText} (${formatDonutPercent(slice.percentage)}%)`,\n };\n }\n : undefined,\n onLeave: this.showTooltip ? () => { this._tooltip = null; } : undefined,\n });\n }\n\n override render() {\n const title = this.headerTitle();\n return html`\n <div class=\"widget-shell\" part=\"shell\">\n ${this.renderShellHeader(title)}\n <div class=\"widget-body\">\n
|
|
1
|
+
{"version":3,"file":"ui9000-donut-chart.js","sources":["../../../../src/components/donut-chart/element/ui9000-donut-chart.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport { renderChartLegend } from '../../../element/chart-legend-render.js';\nimport { readThemeFromElement } from '../../../context/widget-context.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { getPieDimensions, parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { swatchLegendEntries } from '../../../utils/chart-legend.js';\nimport { renderPieChart } from '../../pie-chart/render/draw.js';\nimport { chartPropsChanged } from '../../../utils/lit-draw.js';\nimport {\n computeDonutInnerRadius,\n formatDonutPercent,\n legendSlicesFromDonutOrder,\n normalizeDonutData,\n type DonutChartData,\n type DonutModel,\n type DonutChartSlice,\n} from '../lib/index.js';\nimport { donutChartStyles } from './styles.js';\n\n@customElement('ui9000-donut-chart')\nexport class Ui9000DonutChart extends Ui9000ChartElement {\n static override styles = [donutChartStyles, chartShellStyles];\n\n @property({ type: String, attribute: 'scale' })\n scale: WidgetScale = 'default';\n\n @property({ type: Boolean, attribute: 'show-legend' })\n showLegend = true;\n\n @property({ type: Boolean, attribute: 'show-tooltip' })\n showTooltip = true;\n\n @state()\n private _tooltip: {\n x: number;\n y: number;\n xLabel: string;\n yLabel: string;\n } | null = null;\n\n @state()\n private _empty = false;\n\n @state()\n private _legendSlices: DonutChartSlice[] = [];\n\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.scheduleDraw());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n cancelAnimationFrame(this._raf);\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (chartPropsChanged(changed)) this.scheduleDraw();\n }\n\n private scheduleDraw(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => this.draw());\n }\n\n private parseData(): DonutModel {\n const raw = parseJsonAttr<DonutChartData>(this.dataJson, null);\n return normalizeDonutData(raw);\n }\n\n private renderLegend() {\n if (!this.showLegend || !this._legendSlices.length) return nothing;\n const theme = readThemeFromElement(this);\n return renderChartLegend(\n swatchLegendEntries(\n this._legendSlices.map(\n (slice) => `${formatDonutPercent(slice.percentage)}% - ${slice.label}`,\n ),\n theme,\n (_label, index) => this._legendSlices[index]?.color ?? theme.primary,\n ),\n );\n }\n\n private draw(): void {\n const root = this.shadowRoot?.querySelector('.chart-root') as HTMLElement | null;\n if (!root) return;\n\n const model = this.parseData();\n this._empty = model.slices.length === 0;\n if (this._empty) {\n root.replaceChildren();\n this._legendSlices = [];\n return;\n }\n\n const theme = readThemeFromElement(this);\n const { width, height } = getPieDimensions(root);\n const plotSize = Math.min(width, height);\n const outerRadius = plotSize / 2;\n const innerRadius = computeDonutInnerRadius(outerRadius);\n\n renderPieChart(root, {\n slices: model.slices,\n width,\n height,\n theme,\n innerRadius,\n showTooltip: this.showTooltip,\n onLayout: (orderedKeys) => {\n this._legendSlices = legendSlicesFromDonutOrder(model, orderedKeys);\n },\n onHover: this.showTooltip\n ? ({ slice, event }) => {\n const rect = this.getBoundingClientRect();\n const xField = model.xField ?? 'Category';\n const yField = model.yField ?? 'Value';\n const xAxeLabel = model.axisDetails?.[xField]?.label ?? xField;\n const yAxeLabel = model.axisDetails?.[yField]?.label ?? yField;\n const symbol = model.axisDetails?.[yField]?.measure_unit_symbol ?? '';\n const valueText = symbol\n ? `${slice.value.toLocaleString()} ${symbol}`.trim()\n : slice.value.toLocaleString();\n this._tooltip = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n xLabel: `${xAxeLabel}: ${slice.label}`,\n yLabel: `${yAxeLabel}: ${valueText} (${formatDonutPercent(slice.percentage)}%)`,\n };\n }\n : undefined,\n onLeave: this.showTooltip ? () => { this._tooltip = null; } : undefined,\n });\n }\n\n override render() {\n const title = this.headerTitle();\n return html`\n <div class=\"widget-shell\" part=\"shell\">\n ${this.renderShellHeader(title)}\n <div class=\"widget-body\">\n <div class=\"chart-root\" part=\"chart\" ?hidden=${this._empty}></div>\n ${this.renderLegend()}\n ${this._empty\n ? html`<div class=\"empty\" part=\"empty\">No data</div>`\n : nothing}\n ${this._tooltip\n ? html`<div\n class=\"tooltip\"\n part=\"tooltip\"\n style=\"left:${this._tooltip.x}px;top:${this._tooltip.y}px\"\n >\n <div>${this._tooltip.xLabel}</div>\n <div>${this._tooltip.yLabel}</div>\n </div>`\n : nothing}\n ${this.renderShellLabelTooltip()}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-donut-chart': Ui9000DonutChart;\n }\n}\n\nexport function registerDonutChart(): void {\n if (!customElements.get('ui9000-donut-chart')) {\n customElements.define('ui9000-donut-chart', Ui9000DonutChart);\n }\n}\n\nregisterDonutChart();\n"],"names":["normalizeDonutData","formatDonutPercent","legendSlicesFromDonutOrder","_a","donutChartStyles"],"mappings":"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"}
|