@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,67 @@
|
|
|
1
|
+
import { FD } from "../../../utils/fusedash-visual.js";
|
|
2
|
+
function polarLabelAnchor(labelAngle) {
|
|
3
|
+
if (Math.abs(labelAngle) === Math.PI / 2) return "middle";
|
|
4
|
+
return labelAngle < Math.PI / 2 && labelAngle > -Math.PI / 2 ? "start" : "end";
|
|
5
|
+
}
|
|
6
|
+
function polarSectorAngles(count) {
|
|
7
|
+
if (count <= 0) return [];
|
|
8
|
+
const slice = Math.PI * 2 / count;
|
|
9
|
+
return Array.from({ length: count }, (_v, i) => ({
|
|
10
|
+
startAngle: i * slice,
|
|
11
|
+
endAngle: (i + 1) * slice
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
function polarGroupedSectorAngles(categories, sectors) {
|
|
15
|
+
if (!categories.length || !sectors.length) return [];
|
|
16
|
+
const slice = Math.PI * 2 / categories.length;
|
|
17
|
+
const countByCategory = /* @__PURE__ */ new Map();
|
|
18
|
+
const indexInCategory = /* @__PURE__ */ new Map();
|
|
19
|
+
for (const sector of sectors) {
|
|
20
|
+
const next = countByCategory.get(sector.key) ?? 0;
|
|
21
|
+
indexInCategory.set(sector, next);
|
|
22
|
+
countByCategory.set(sector.key, next + 1);
|
|
23
|
+
}
|
|
24
|
+
return sectors.map((sector) => {
|
|
25
|
+
const categoryIndex = Math.max(0, categories.indexOf(sector.key));
|
|
26
|
+
const members = countByCategory.get(sector.key) ?? 1;
|
|
27
|
+
const offset = indexInCategory.get(sector) ?? 0;
|
|
28
|
+
const inner = slice / members;
|
|
29
|
+
const base = categoryIndex * slice;
|
|
30
|
+
return { startAngle: base + offset * inner, endAngle: base + (offset + 1) * inner };
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function polarRadialTicks(maxValue, steps) {
|
|
34
|
+
if (!Number.isFinite(maxValue) || maxValue <= 0 || steps <= 0) return [];
|
|
35
|
+
return Array.from({ length: steps }, (_v, i) => (i + 1) * maxValue / steps);
|
|
36
|
+
}
|
|
37
|
+
function polarMaxValue(sectors) {
|
|
38
|
+
let max = 0;
|
|
39
|
+
for (const sector of sectors) {
|
|
40
|
+
if (sector.value > max) max = sector.value;
|
|
41
|
+
}
|
|
42
|
+
return max;
|
|
43
|
+
}
|
|
44
|
+
function polarLabelGutter(categories, plotWidth) {
|
|
45
|
+
const longest = categories.reduce((max, c) => Math.max(max, String(c).length), 0);
|
|
46
|
+
const estimated = longest * FD.polarCategoryLabelSize * FD.polarLabelCharWidth;
|
|
47
|
+
const ceiling = Math.min(
|
|
48
|
+
FD.polarLabelGutterMax,
|
|
49
|
+
Math.max(0, plotWidth) * FD.polarLabelGutterMaxFraction
|
|
50
|
+
);
|
|
51
|
+
return Math.max(FD.polarLabelGutterMin, Math.min(estimated, ceiling));
|
|
52
|
+
}
|
|
53
|
+
function polarOuterRadius(plotWidth, plotHeight, labelGutter) {
|
|
54
|
+
const byWidth = plotWidth / 2 - labelGutter - FD.polarCategoryLabelOffset;
|
|
55
|
+
const byHeight = plotHeight / 2 - FD.polarCategoryLabelOffset - FD.polarCategoryLabelSize / 2;
|
|
56
|
+
return Math.max(0, Math.min(byWidth, byHeight));
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
polarGroupedSectorAngles,
|
|
60
|
+
polarLabelAnchor,
|
|
61
|
+
polarLabelGutter,
|
|
62
|
+
polarMaxValue,
|
|
63
|
+
polarOuterRadius,
|
|
64
|
+
polarRadialTicks,
|
|
65
|
+
polarSectorAngles
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=domain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.js","sources":["../../../../src/components/polar-area-chart/lib/domain.ts"],"sourcesContent":["import { FD } from '../../../utils/fusedash-visual.js';\nimport type { PolarAreaSector } from './types.js';\n\n/** Text anchor for a category label, mirroring the client's angle test. */\nexport function polarLabelAnchor(labelAngle: number): 'start' | 'middle' | 'end' {\n if (Math.abs(labelAngle) === Math.PI / 2) return 'middle';\n return labelAngle < Math.PI / 2 && labelAngle > -Math.PI / 2 ? 'start' : 'end';\n}\n\n/**\n * Sector angles — client `xScale = scaleLinear([0, n] → [0, 2π])` evaluated at\n * `i` and `i + 1`. Angle 0 is 12 o'clock (d3 `arc` convention).\n */\nexport function polarSectorAngles(\n count: number,\n): Array<{ startAngle: number; endAngle: number }> {\n if (count <= 0) return [];\n const slice = (Math.PI * 2) / count;\n return Array.from({ length: count }, (_v, i) => ({\n startAngle: i * slice,\n endAngle: (i + 1) * slice,\n }));\n}\n\n/**\n * Split each category's equal slice among the groups that have a value there.\n * Sector order must match `sectors` (category-major, then group order).\n */\nexport function polarGroupedSectorAngles(\n categories: string[],\n sectors: PolarAreaSector[],\n): Array<{ startAngle: number; endAngle: number }> {\n if (!categories.length || !sectors.length) return [];\n const slice = (Math.PI * 2) / categories.length;\n const countByCategory = new Map<string, number>();\n const indexInCategory = new Map<PolarAreaSector, number>();\n for (const sector of sectors) {\n const next = countByCategory.get(sector.key) ?? 0;\n indexInCategory.set(sector, next);\n countByCategory.set(sector.key, next + 1);\n }\n return sectors.map((sector) => {\n const categoryIndex = Math.max(0, categories.indexOf(sector.key));\n const members = countByCategory.get(sector.key) ?? 1;\n const offset = indexInCategory.get(sector) ?? 0;\n const inner = slice / members;\n const base = categoryIndex * slice;\n return { startAngle: base + offset * inner, endAngle: base + (offset + 1) * inner };\n });\n}\n\n/** Radial grid / tick values: `maxValue * step / steps` for step 1…steps. */\nexport function polarRadialTicks(maxValue: number, steps: number): number[] {\n if (!Number.isFinite(maxValue) || maxValue <= 0 || steps <= 0) return [];\n return Array.from({ length: steps }, (_v, i) => ((i + 1) * maxValue) / steps);\n}\n\nexport function polarMaxValue(sectors: PolarAreaSector[]): number {\n let max = 0;\n for (const sector of sectors) {\n if (sector.value > max) max = sector.value;\n }\n return max;\n}\n\n/**\n * Side room reserved for the category labels, measured off the longest one.\n * FuseDash sizes the disc from the raw box and lets long names run past the\n * SVG edge; chat widgets are far narrower, so — as with `punchcardLeftGutter`\n * and the bar-chart label gutter — the gutter is derived from the labels and\n * the disc shrinks into what is left.\n */\nexport function polarLabelGutter(categories: string[], plotWidth: number): number {\n const longest = categories.reduce((max, c) => Math.max(max, String(c).length), 0);\n const estimated = longest * FD.polarCategoryLabelSize * FD.polarLabelCharWidth;\n const ceiling = Math.min(\n FD.polarLabelGutterMax,\n Math.max(0, plotWidth) * FD.polarLabelGutterMaxFraction,\n );\n return Math.max(FD.polarLabelGutterMin, Math.min(estimated, ceiling));\n}\n\n/** Disc radius that leaves room for the labels ring on all four sides. */\nexport function polarOuterRadius(\n plotWidth: number,\n plotHeight: number,\n labelGutter: number,\n): number {\n const byWidth = plotWidth / 2 - labelGutter - FD.polarCategoryLabelOffset;\n const byHeight =\n plotHeight / 2 - FD.polarCategoryLabelOffset - FD.polarCategoryLabelSize / 2;\n return Math.max(0, Math.min(byWidth, byHeight));\n}\n"],"names":[],"mappings":";AAIO,SAAS,iBAAiB,YAAgD;AAC/E,MAAI,KAAK,IAAI,UAAU,MAAM,KAAK,KAAK,EAAG,QAAO;AACjD,SAAO,aAAa,KAAK,KAAK,KAAK,aAAa,CAAC,KAAK,KAAK,IAAI,UAAU;AAC3E;AAMO,SAAS,kBACd,OACiD;AACjD,MAAI,SAAS,EAAG,QAAO,CAAA;AACvB,QAAM,QAAS,KAAK,KAAK,IAAK;AAC9B,SAAO,MAAM,KAAK,EAAE,QAAQ,SAAS,CAAC,IAAI,OAAO;AAAA,IAC/C,YAAY,IAAI;AAAA,IAChB,WAAW,IAAI,KAAK;AAAA,EAAA,EACpB;AACJ;AAMO,SAAS,yBACd,YACA,SACiD;AACjD,MAAI,CAAC,WAAW,UAAU,CAAC,QAAQ,eAAe,CAAA;AAClD,QAAM,QAAS,KAAK,KAAK,IAAK,WAAW;AACzC,QAAM,sCAAsB,IAAA;AAC5B,QAAM,sCAAsB,IAAA;AAC5B,aAAW,UAAU,SAAS;AAC5B,UAAM,OAAO,gBAAgB,IAAI,OAAO,GAAG,KAAK;AAChD,oBAAgB,IAAI,QAAQ,IAAI;AAChC,oBAAgB,IAAI,OAAO,KAAK,OAAO,CAAC;AAAA,EAC1C;AACA,SAAO,QAAQ,IAAI,CAAC,WAAW;AAC7B,UAAM,gBAAgB,KAAK,IAAI,GAAG,WAAW,QAAQ,OAAO,GAAG,CAAC;AAChE,UAAM,UAAU,gBAAgB,IAAI,OAAO,GAAG,KAAK;AACnD,UAAM,SAAS,gBAAgB,IAAI,MAAM,KAAK;AAC9C,UAAM,QAAQ,QAAQ;AACtB,UAAM,OAAO,gBAAgB;AAC7B,WAAO,EAAE,YAAY,OAAO,SAAS,OAAO,UAAU,QAAQ,SAAS,KAAK,MAAA;AAAA,EAC9E,CAAC;AACH;AAGO,SAAS,iBAAiB,UAAkB,OAAyB;AAC1E,MAAI,CAAC,OAAO,SAAS,QAAQ,KAAK,YAAY,KAAK,SAAS,EAAG,QAAO,CAAA;AACtE,SAAO,MAAM,KAAK,EAAE,QAAQ,MAAA,GAAS,CAAC,IAAI,OAAQ,IAAI,KAAK,WAAY,KAAK;AAC9E;AAEO,SAAS,cAAc,SAAoC;AAChE,MAAI,MAAM;AACV,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAO,QAAQ,IAAK,OAAM,OAAO;AAAA,EACvC;AACA,SAAO;AACT;AASO,SAAS,iBAAiB,YAAsB,WAA2B;AAChF,QAAM,UAAU,WAAW,OAAO,CAAC,KAAK,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC;AAChF,QAAM,YAAY,UAAU,GAAG,yBAAyB,GAAG;AAC3D,QAAM,UAAU,KAAK;AAAA,IACnB,GAAG;AAAA,IACH,KAAK,IAAI,GAAG,SAAS,IAAI,GAAG;AAAA,EAAA;AAE9B,SAAO,KAAK,IAAI,GAAG,qBAAqB,KAAK,IAAI,WAAW,OAAO,CAAC;AACtE;AAGO,SAAS,iBACd,WACA,YACA,aACQ;AACR,QAAM,UAAU,YAAY,IAAI,cAAc,GAAG;AACjD,QAAM,WACJ,aAAa,IAAI,GAAG,2BAA2B,GAAG,yBAAyB;AAC7E,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,SAAS,QAAQ,CAAC;AAChD;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { normalizePolarAreaData } from './normalize.js';
|
|
2
|
+
export { polarLabelAnchor, polarLabelGutter, polarOuterRadius, polarMaxValue, polarRadialTicks, polarSectorAngles, polarGroupedSectorAngles, } from './domain.js';
|
|
3
|
+
export type { PolarAreaChartData, PolarAreaLabelValue, PolarAreaLegendEntry, PolarAreaModel, PolarAreaPoint, PolarAreaSector, } from './types.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/polar-area-chart/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { PolarAreaChartData, PolarAreaModel } from './types.js';
|
|
2
|
+
/** Normalize chat / FuseDash WidgetItem payloads into polar-area sectors. */
|
|
3
|
+
export declare function normalizePolarAreaData(input: PolarAreaChartData): PolarAreaModel;
|
|
4
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/components/polar-area-chart/lib/normalize.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,kBAAkB,EAGlB,cAAc,EAGf,MAAM,YAAY,CAAC;AAgOpB,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,cAAc,CAkBhF"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { pickQualitativePalette, resolveFormattingColor } from "../../../utils/fuse-palette.js";
|
|
2
|
+
import { isFuseWidgetPayload, firstField, rowsOf, resolveUniqueValuesOrder, filterTruthyValues } from "../../../utils/fuse-widget.js";
|
|
3
|
+
import { polarMaxValue } from "./domain.js";
|
|
4
|
+
import { resolveWidgetFormatting } from "../../../utils/chart-formatting/from-fuse-widget.js";
|
|
5
|
+
const EMPTY = { sectors: [], categories: [], legend: [], maxValue: 0 };
|
|
6
|
+
function isLabelValueArray(input) {
|
|
7
|
+
if (!Array.isArray(input) || input.length === 0) return false;
|
|
8
|
+
const first = input[0];
|
|
9
|
+
return first != null && typeof first === "object" && "label" in first && "value" in first;
|
|
10
|
+
}
|
|
11
|
+
function isPointsPayload(input) {
|
|
12
|
+
return !!input && typeof input === "object" && Array.isArray(input.points);
|
|
13
|
+
}
|
|
14
|
+
function legendKeysOf(widget) {
|
|
15
|
+
const uniqueValues = widget.uniqueValues ?? {};
|
|
16
|
+
const firstKey = Object.keys(uniqueValues)[0];
|
|
17
|
+
if (!firstKey) return [];
|
|
18
|
+
return filterTruthyValues((uniqueValues[firstKey] ?? []).map(String));
|
|
19
|
+
}
|
|
20
|
+
function buildLegend(keys, formatting) {
|
|
21
|
+
return keys.map((key) => ({
|
|
22
|
+
key,
|
|
23
|
+
label: key,
|
|
24
|
+
color: resolveFormattingColor(formatting, key, keys.length)
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
function modelFromRows(rows, categories, legend, formatting) {
|
|
28
|
+
const colorByKey = new Map(legend.map((entry) => [entry.key, entry.color]));
|
|
29
|
+
const fallbackColor = resolveFormattingColor(formatting, "default", legend.length || 1);
|
|
30
|
+
const sectors = rows.map((row) => ({
|
|
31
|
+
key: row.key,
|
|
32
|
+
label: row.key,
|
|
33
|
+
value: row.value,
|
|
34
|
+
color: colorByKey.get(row.key) ?? fallbackColor
|
|
35
|
+
}));
|
|
36
|
+
return { sectors, categories, legend, maxValue: polarMaxValue(sectors) };
|
|
37
|
+
}
|
|
38
|
+
function categoriesOf(widget, xKey, dataKeys) {
|
|
39
|
+
var _a;
|
|
40
|
+
const fromUniqueValues = (((_a = widget.uniqueValues) == null ? void 0 : _a[xKey]) ?? []).map(String).filter((v) => dataKeys.includes(v));
|
|
41
|
+
return fromUniqueValues.length ? fromUniqueValues : dataKeys;
|
|
42
|
+
}
|
|
43
|
+
function fromGroupedFuseWidget(widget, xKey, yKey, groupBy) {
|
|
44
|
+
const parsed = [];
|
|
45
|
+
for (const row of rowsOf(widget)) {
|
|
46
|
+
const x = row[xKey];
|
|
47
|
+
const y = Number(row[yKey]);
|
|
48
|
+
const group = row[groupBy];
|
|
49
|
+
if (x == null || x === "" || group == null || group === "" || !Number.isFinite(y)) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
parsed.push({ key: String(x), group: String(group), value: y });
|
|
53
|
+
}
|
|
54
|
+
if (!parsed.length) return EMPTY;
|
|
55
|
+
const categories = categoriesOf(
|
|
56
|
+
widget,
|
|
57
|
+
xKey,
|
|
58
|
+
Array.from(new Set(parsed.map((row) => row.key)))
|
|
59
|
+
);
|
|
60
|
+
const groupKeys = resolveUniqueValuesOrder(
|
|
61
|
+
parsed.map((row) => row.group),
|
|
62
|
+
widget.uniqueValues,
|
|
63
|
+
groupBy
|
|
64
|
+
);
|
|
65
|
+
const formatting = resolveWidgetFormatting(widget);
|
|
66
|
+
const colorByGroup = new Map(
|
|
67
|
+
groupKeys.map((key) => [key, resolveFormattingColor(formatting, key, groupKeys.length)])
|
|
68
|
+
);
|
|
69
|
+
const totals = /* @__PURE__ */ new Map();
|
|
70
|
+
for (const row of parsed) {
|
|
71
|
+
const id = `${row.key}\0${row.group}`;
|
|
72
|
+
totals.set(id, (totals.get(id) ?? 0) + row.value);
|
|
73
|
+
}
|
|
74
|
+
const sectors = [];
|
|
75
|
+
for (const category of categories) {
|
|
76
|
+
for (const group of groupKeys) {
|
|
77
|
+
const value = totals.get(`${category}\0${group}`);
|
|
78
|
+
if (value == null) continue;
|
|
79
|
+
sectors.push({
|
|
80
|
+
key: category,
|
|
81
|
+
group,
|
|
82
|
+
label: category,
|
|
83
|
+
value,
|
|
84
|
+
color: colorByGroup.get(group) ?? resolveFormattingColor(formatting, group, groupKeys.length)
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
sectors,
|
|
90
|
+
categories,
|
|
91
|
+
legend: buildLegend(groupKeys, formatting),
|
|
92
|
+
maxValue: polarMaxValue(sectors),
|
|
93
|
+
grouped: true,
|
|
94
|
+
xField: xKey,
|
|
95
|
+
yField: yKey,
|
|
96
|
+
groupField: groupBy,
|
|
97
|
+
axisDetails: widget.axisDetails ?? void 0
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function fromFuseWidget(widget) {
|
|
101
|
+
var _a;
|
|
102
|
+
const xKey = firstField(widget.xAxe);
|
|
103
|
+
const yKey = firstField(widget.yAxe);
|
|
104
|
+
if (!xKey || !yKey) return EMPTY;
|
|
105
|
+
const groupBy = firstField(widget.groupBy);
|
|
106
|
+
if (groupBy) return fromGroupedFuseWidget(widget, xKey, yKey, groupBy);
|
|
107
|
+
const parsed = [];
|
|
108
|
+
for (const row of rowsOf(widget)) {
|
|
109
|
+
const x = row[xKey];
|
|
110
|
+
const y = Number(row[yKey]);
|
|
111
|
+
if (x == null || x === "" || !Number.isFinite(y)) continue;
|
|
112
|
+
parsed.push({ key: String(x), value: y });
|
|
113
|
+
}
|
|
114
|
+
if (!parsed.length) return EMPTY;
|
|
115
|
+
const categories = categoriesOf(
|
|
116
|
+
widget,
|
|
117
|
+
xKey,
|
|
118
|
+
Array.from(new Set(parsed.map((row) => row.key)))
|
|
119
|
+
);
|
|
120
|
+
const formatting = resolveWidgetFormatting(widget);
|
|
121
|
+
let rows = parsed;
|
|
122
|
+
if ((((_a = widget.formatting) == null ? void 0 : _a.length) ?? 0) > 1) {
|
|
123
|
+
const totals = /* @__PURE__ */ new Map();
|
|
124
|
+
for (const row of parsed) {
|
|
125
|
+
totals.set(row.key, (totals.get(row.key) ?? 0) + row.value);
|
|
126
|
+
}
|
|
127
|
+
rows = Array.from(totals, ([key, value]) => ({ key, value }));
|
|
128
|
+
}
|
|
129
|
+
const sorted = categories.flatMap(
|
|
130
|
+
(category) => rows.filter((row) => row.key === category)
|
|
131
|
+
);
|
|
132
|
+
const model = modelFromRows(
|
|
133
|
+
sorted,
|
|
134
|
+
categories,
|
|
135
|
+
buildLegend(legendKeysOf(widget), formatting),
|
|
136
|
+
formatting
|
|
137
|
+
);
|
|
138
|
+
return {
|
|
139
|
+
...model,
|
|
140
|
+
xField: xKey,
|
|
141
|
+
yField: yKey,
|
|
142
|
+
axisDetails: widget.axisDetails ?? void 0
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
function fromLabelValue(input) {
|
|
146
|
+
const rows = input.map((row) => ({
|
|
147
|
+
key: String(row.label),
|
|
148
|
+
value: Number(row.value),
|
|
149
|
+
color: row.color
|
|
150
|
+
})).filter((row) => row.key && Number.isFinite(row.value));
|
|
151
|
+
if (!rows.length) return EMPTY;
|
|
152
|
+
const palette = pickQualitativePalette(0, rows.length);
|
|
153
|
+
const sectors = rows.map((row, index) => ({
|
|
154
|
+
key: row.key,
|
|
155
|
+
label: row.key,
|
|
156
|
+
value: row.value,
|
|
157
|
+
color: row.color ?? palette[index % palette.length]
|
|
158
|
+
}));
|
|
159
|
+
return {
|
|
160
|
+
sectors,
|
|
161
|
+
categories: sectors.map((sector) => sector.key),
|
|
162
|
+
legend: sectors.map(({ key, label, color }) => ({ key, label, color })),
|
|
163
|
+
maxValue: polarMaxValue(sectors)
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function normalizePolarAreaData(input) {
|
|
167
|
+
if (!input) return EMPTY;
|
|
168
|
+
if (Array.isArray(input)) {
|
|
169
|
+
return isLabelValueArray(input) ? fromLabelValue(input) : EMPTY;
|
|
170
|
+
}
|
|
171
|
+
if (isFuseWidgetPayload(input)) return fromFuseWidget(input);
|
|
172
|
+
if (isPointsPayload(input)) {
|
|
173
|
+
return fromLabelValue(
|
|
174
|
+
input.points.map((point) => ({ label: String(point.x), value: Number(point.y) }))
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
if (Array.isArray(input.sectors)) return input;
|
|
178
|
+
return EMPTY;
|
|
179
|
+
}
|
|
180
|
+
export {
|
|
181
|
+
normalizePolarAreaData
|
|
182
|
+
};
|
|
183
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sources":["../../../../src/components/polar-area-chart/lib/normalize.ts"],"sourcesContent":["import { resolveWidgetFormatting } from '../../../utils/chart-formatting/index.js';\nimport {\n pickQualitativePalette,\n resolveFormattingColor,\n} from '../../../utils/fuse-palette.js';\nimport {\n filterTruthyValues,\n firstField,\n isFuseWidgetPayload,\n resolveUniqueValuesOrder,\n rowsOf,\n type FuseWidgetLike,\n} from '../../../utils/fuse-widget.js';\nimport { polarMaxValue } from './domain.js';\nimport type {\n PolarAreaChartData,\n PolarAreaLabelValue,\n PolarAreaLegendEntry,\n PolarAreaModel,\n PolarAreaPoint,\n PolarAreaSector,\n} from './types.js';\n\nconst EMPTY: PolarAreaModel = { sectors: [], categories: [], legend: [], maxValue: 0 };\n\nfunction isLabelValueArray(input: unknown): input is PolarAreaLabelValue[] {\n if (!Array.isArray(input) || input.length === 0) return false;\n const first = input[0] as Record<string, unknown>;\n return first != null && typeof first === 'object' && 'label' in first && 'value' in first;\n}\n\nfunction isPointsPayload(input: unknown): input is { points: PolarAreaPoint[] } {\n return (\n !!input &&\n typeof input === 'object' &&\n Array.isArray((input as { points?: unknown }).points)\n );\n}\n\n/**\n * Legend keys — client reads `uniqueValues[Object.keys(uniqueValues)[0]]` and\n * drops null-ish entries. On the polar mock that first key is the x-axis field,\n * so legend keys and sector keys line up.\n */\nfunction legendKeysOf(widget: FuseWidgetLike): string[] {\n const uniqueValues = widget.uniqueValues ?? {};\n const firstKey = Object.keys(uniqueValues)[0];\n if (!firstKey) return [];\n return filterTruthyValues((uniqueValues[firstKey] ?? []).map(String));\n}\n\nfunction buildLegend(\n keys: string[],\n formatting: FuseWidgetLike['formatting'],\n): PolarAreaLegendEntry[] {\n return keys.map((key) => ({\n key,\n label: key,\n color: resolveFormattingColor(formatting, key, keys.length),\n }));\n}\n\nfunction modelFromRows(\n rows: Array<{ key: string; value: number }>,\n categories: string[],\n legend: PolarAreaLegendEntry[],\n formatting: FuseWidgetLike['formatting'],\n): PolarAreaModel {\n const colorByKey = new Map(legend.map((entry) => [entry.key, entry.color]));\n const fallbackColor = resolveFormattingColor(formatting, 'default', legend.length || 1);\n\n const sectors: PolarAreaSector[] = rows.map((row) => ({\n key: row.key,\n label: row.key,\n value: row.value,\n color: colorByKey.get(row.key) ?? fallbackColor,\n }));\n\n return { sectors, categories, legend, maxValue: polarMaxValue(sectors) };\n}\n\nfunction categoriesOf(\n widget: FuseWidgetLike,\n xKey: string,\n dataKeys: string[],\n): string[] {\n const fromUniqueValues = (widget.uniqueValues?.[xKey] ?? [])\n .map(String)\n .filter((v) => dataKeys.includes(v));\n return fromUniqueValues.length ? fromUniqueValues : dataKeys;\n}\n\nfunction fromGroupedFuseWidget(\n widget: FuseWidgetLike,\n xKey: string,\n yKey: string,\n groupBy: string,\n): PolarAreaModel {\n const parsed: Array<{ key: string; group: string; value: number }> = [];\n for (const row of rowsOf(widget)) {\n const x = row[xKey];\n const y = Number(row[yKey]);\n const group = row[groupBy];\n if (x == null || x === '' || group == null || group === '' || !Number.isFinite(y)) {\n continue;\n }\n parsed.push({ key: String(x), group: String(group), value: y });\n }\n if (!parsed.length) return EMPTY;\n\n const categories = categoriesOf(\n widget,\n xKey,\n Array.from(new Set(parsed.map((row) => row.key))),\n );\n const groupKeys = resolveUniqueValuesOrder(\n parsed.map((row) => row.group),\n widget.uniqueValues,\n groupBy,\n );\n const formatting = resolveWidgetFormatting(widget);\n const colorByGroup = new Map(\n groupKeys.map((key) => [key, resolveFormattingColor(formatting, key, groupKeys.length)]),\n );\n\n const totals = new Map<string, number>();\n for (const row of parsed) {\n const id = `${row.key}\\0${row.group}`;\n totals.set(id, (totals.get(id) ?? 0) + row.value);\n }\n\n const sectors: PolarAreaSector[] = [];\n for (const category of categories) {\n for (const group of groupKeys) {\n const value = totals.get(`${category}\\0${group}`);\n if (value == null) continue;\n sectors.push({\n key: category,\n group,\n label: category,\n value,\n color: colorByGroup.get(group) ?? resolveFormattingColor(formatting, group, groupKeys.length),\n });\n }\n }\n\n return {\n sectors,\n categories,\n legend: buildLegend(groupKeys, formatting),\n maxValue: polarMaxValue(sectors),\n grouped: true,\n xField: xKey,\n yField: yKey,\n groupField: groupBy,\n axisDetails: widget.axisDetails ?? undefined,\n };\n}\n\nfunction fromFuseWidget(widget: FuseWidgetLike): PolarAreaModel {\n const xKey = firstField(widget.xAxe);\n const yKey = firstField(widget.yAxe);\n if (!xKey || !yKey) return EMPTY;\n\n const groupBy = firstField(widget.groupBy);\n if (groupBy) return fromGroupedFuseWidget(widget, xKey, yKey, groupBy);\n\n const parsed: Array<{ key: string; value: number }> = [];\n for (const row of rowsOf(widget)) {\n const x = row[xKey];\n const y = Number(row[yKey]);\n if (x == null || x === '' || !Number.isFinite(y)) continue;\n parsed.push({ key: String(x), value: y });\n }\n if (!parsed.length) return EMPTY;\n\n const categories = categoriesOf(\n widget,\n xKey,\n Array.from(new Set(parsed.map((row) => row.key))),\n );\n\n // Colors come from resolved formatting so a widget that ships without a\n // `formatting` array still gets the shared default palette (as scatter does).\n const formatting = resolveWidgetFormatting(widget);\n\n // Client aggregates the rows per category once the widget carries more than\n // one formatting entry — otherwise every row keeps its own wedge. This gate\n // reads the widget's own formatting, not the resolved one: generated entries\n // would flip a formatting-less widget into aggregated mode.\n let rows = parsed;\n if ((widget.formatting?.length ?? 0) > 1) {\n const totals = new Map<string, number>();\n for (const row of parsed) {\n totals.set(row.key, (totals.get(row.key) ?? 0) + row.value);\n }\n rows = Array.from(totals, ([key, value]) => ({ key, value }));\n }\n\n // Client `categories.flatMap(...)`: category order first, extras dropped.\n const sorted = categories.flatMap((category) =>\n rows.filter((row) => row.key === category),\n );\n\n const model = modelFromRows(\n sorted,\n categories,\n buildLegend(legendKeysOf(widget), formatting),\n formatting,\n );\n\n return {\n ...model,\n xField: xKey,\n yField: yKey,\n axisDetails: widget.axisDetails ?? undefined,\n };\n}\n\nfunction fromLabelValue(input: PolarAreaLabelValue[]): PolarAreaModel {\n const rows = input\n .map((row) => ({\n key: String(row.label),\n value: Number(row.value),\n color: row.color,\n }))\n .filter((row) => row.key && Number.isFinite(row.value));\n if (!rows.length) return EMPTY;\n\n const palette = pickQualitativePalette(0, rows.length);\n const sectors: PolarAreaSector[] = rows.map((row, index) => ({\n key: row.key,\n label: row.key,\n value: row.value,\n color: row.color ?? palette[index % palette.length],\n }));\n\n return {\n sectors,\n categories: sectors.map((sector) => sector.key),\n legend: sectors.map(({ key, label, color }) => ({ key, label, color })),\n maxValue: polarMaxValue(sectors),\n };\n}\n\n/** Normalize chat / FuseDash WidgetItem payloads into polar-area sectors. */\nexport function normalizePolarAreaData(input: PolarAreaChartData): PolarAreaModel {\n if (!input) return EMPTY;\n\n if (Array.isArray(input)) {\n return isLabelValueArray(input) ? fromLabelValue(input) : EMPTY;\n }\n\n if (isFuseWidgetPayload(input)) return fromFuseWidget(input);\n\n if (isPointsPayload(input)) {\n return fromLabelValue(\n input.points.map((point) => ({ label: String(point.x), value: Number(point.y) })),\n );\n }\n\n if (Array.isArray((input as PolarAreaModel).sectors)) return input as PolarAreaModel;\n\n return EMPTY;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { FuseWidgetLike } from '../../../utils/fuse-widget.js';
|
|
2
|
+
/** One filled wedge of the disc — a single row of the (sorted) chart data. */
|
|
3
|
+
export interface PolarAreaSector {
|
|
4
|
+
/** Category value (`widget.xAxe[0]`). */
|
|
5
|
+
key: string;
|
|
6
|
+
/** Group key when `groupBy` is set — also the color / legend key. */
|
|
7
|
+
group?: string;
|
|
8
|
+
label: string;
|
|
9
|
+
value: number;
|
|
10
|
+
color: string;
|
|
11
|
+
}
|
|
12
|
+
export interface PolarAreaLegendEntry {
|
|
13
|
+
key: string;
|
|
14
|
+
label: string;
|
|
15
|
+
color: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PolarAreaModel {
|
|
18
|
+
sectors: PolarAreaSector[];
|
|
19
|
+
/**
|
|
20
|
+
* Radial spoke order — client `categories`: `uniqueValues[xAxe]` filtered to
|
|
21
|
+
* values present in the data, falling back to first-seen data order.
|
|
22
|
+
*/
|
|
23
|
+
categories: string[];
|
|
24
|
+
legend: PolarAreaLegendEntry[];
|
|
25
|
+
maxValue: number;
|
|
26
|
+
/** True when wedges are split by `groupBy` inside each category. */
|
|
27
|
+
grouped?: boolean;
|
|
28
|
+
xField?: string;
|
|
29
|
+
yField?: string;
|
|
30
|
+
groupField?: string;
|
|
31
|
+
axisDetails?: Record<string, {
|
|
32
|
+
label?: string;
|
|
33
|
+
measure_unit_symbol?: string;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
export type PolarAreaLabelValue = {
|
|
37
|
+
label: string;
|
|
38
|
+
value: number;
|
|
39
|
+
color?: string;
|
|
40
|
+
};
|
|
41
|
+
export type PolarAreaPoint = {
|
|
42
|
+
x: string | number;
|
|
43
|
+
y: number;
|
|
44
|
+
};
|
|
45
|
+
export type PolarAreaChartData = PolarAreaLabelValue[] | {
|
|
46
|
+
points: PolarAreaPoint[];
|
|
47
|
+
} | PolarAreaModel | FuseWidgetLike | null | undefined;
|
|
48
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/polar-area-chart/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B;;;OAGG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChF;AAED,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,cAAc,GAAG;IAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,MAAM,MAAM,kBAAkB,GAC1B,mBAAmB,EAAE,GACrB;IAAE,MAAM,EAAE,cAAc,EAAE,CAAA;CAAE,GAC5B,cAAc,GACd,cAAc,GACd,IAAI,GACJ,SAAS,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
"id": "polar-area-chart",
|
|
3
|
+
"tag": "ui9000-polar-area-chart",
|
|
4
|
+
"title": "Polar Area Chart",
|
|
5
|
+
"description": "Chat-optimized polar area (coxcomb) chart rewritten in D3. Single (client aggregated) or grouped by groupBy. Legend above the plot.",
|
|
6
|
+
"chartTypeKeys": ["polarAreaChart"],
|
|
7
|
+
"source": "client/libs/shared/components/src/Widgets/PolarAreaChart/",
|
|
8
|
+
"stack": "d3",
|
|
9
|
+
"lazyImport": "@fusedashlabs/widgets/lazy/polar-area-chart",
|
|
10
|
+
"entry": "@fusedashlabs/widgets/polar-area-chart",
|
|
11
|
+
"usageConditions": {
|
|
12
|
+
"host": "mcp-chat",
|
|
13
|
+
"notFor": "fusedash-editor",
|
|
14
|
+
"mapsExcluded": true
|
|
15
|
+
},
|
|
16
|
+
"allowedActions": ["hover", "resize"],
|
|
17
|
+
"propsSchema": {
|
|
18
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
19
|
+
"type": "object",
|
|
20
|
+
"properties": {
|
|
21
|
+
"data": {
|
|
22
|
+
"oneOf": [
|
|
23
|
+
{
|
|
24
|
+
"type": "array",
|
|
25
|
+
"items": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"required": ["label", "value"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"label": { "type": "string" },
|
|
30
|
+
"value": { "type": "number" },
|
|
31
|
+
"color": { "type": "string" }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"type": "object",
|
|
37
|
+
"description": "Chat points payload",
|
|
38
|
+
"required": ["points"],
|
|
39
|
+
"properties": {
|
|
40
|
+
"points": {
|
|
41
|
+
"type": "array",
|
|
42
|
+
"items": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"required": ["x", "y"],
|
|
45
|
+
"properties": {
|
|
46
|
+
"x": { "type": ["string", "number"] },
|
|
47
|
+
"y": { "type": "number" }
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"type": "object",
|
|
55
|
+
"description": "FuseDash WidgetItem-shaped payload",
|
|
56
|
+
"properties": {
|
|
57
|
+
"chartType": { "type": "string" },
|
|
58
|
+
"xAxe": { "type": "array", "items": { "type": "string" } },
|
|
59
|
+
"yAxe": { "type": "array", "items": { "type": "string" } },
|
|
60
|
+
"uniqueValues": { "type": "object" },
|
|
61
|
+
"formatting": { "type": "array" },
|
|
62
|
+
"data": { "type": "array" }
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"show-grid": { "type": "boolean" },
|
|
68
|
+
"show-legend": { "type": "boolean" },
|
|
69
|
+
"show-tooltip": { "type": "boolean" },
|
|
70
|
+
"scale": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"enum": ["compact", "default", "comfortable"]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
;
|
|
78
|
+
|
|
79
|
+
export default _default;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const id = "polar-area-chart";
|
|
2
|
+
const tag = "ui9000-polar-area-chart";
|
|
3
|
+
const title = "Polar Area Chart";
|
|
4
|
+
const description = "Chat-optimized polar area (coxcomb) chart rewritten in D3. Single (client aggregated) or grouped by groupBy. Legend above the plot.";
|
|
5
|
+
const chartTypeKeys = ["polarAreaChart"];
|
|
6
|
+
const source = "client/libs/shared/components/src/Widgets/PolarAreaChart/";
|
|
7
|
+
const stack = "d3";
|
|
8
|
+
const lazyImport = "@fusedashlabs/widgets/lazy/polar-area-chart";
|
|
9
|
+
const entry = "@fusedashlabs/widgets/polar-area-chart";
|
|
10
|
+
const usageConditions = { "host": "mcp-chat", "notFor": "fusedash-editor", "mapsExcluded": true };
|
|
11
|
+
const allowedActions = ["hover", "resize"];
|
|
12
|
+
const propsSchema = { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "data": { "oneOf": [{ "type": "array", "items": { "type": "object", "required": ["label", "value"], "properties": { "label": { "type": "string" }, "value": { "type": "number" }, "color": { "type": "string" } } } }, { "type": "object", "description": "Chat points payload", "required": ["points"], "properties": { "points": { "type": "array", "items": { "type": "object", "required": ["x", "y"], "properties": { "x": { "type": ["string", "number"] }, "y": { "type": "number" } } } } } }, { "type": "object", "description": "FuseDash WidgetItem-shaped payload", "properties": { "chartType": { "type": "string" }, "xAxe": { "type": "array", "items": { "type": "string" } }, "yAxe": { "type": "array", "items": { "type": "string" } }, "uniqueValues": { "type": "object" }, "formatting": { "type": "array" }, "data": { "type": "array" } } }] }, "show-grid": { "type": "boolean" }, "show-legend": { "type": "boolean" }, "show-tooltip": { "type": "boolean" }, "scale": { "type": "string", "enum": ["compact", "default", "comfortable"] } } };
|
|
13
|
+
const polarAreaMeta = {
|
|
14
|
+
id,
|
|
15
|
+
tag,
|
|
16
|
+
title,
|
|
17
|
+
description,
|
|
18
|
+
chartTypeKeys,
|
|
19
|
+
source,
|
|
20
|
+
stack,
|
|
21
|
+
lazyImport,
|
|
22
|
+
entry,
|
|
23
|
+
usageConditions,
|
|
24
|
+
allowedActions,
|
|
25
|
+
propsSchema
|
|
26
|
+
};
|
|
27
|
+
export {
|
|
28
|
+
allowedActions,
|
|
29
|
+
chartTypeKeys,
|
|
30
|
+
polarAreaMeta as default,
|
|
31
|
+
description,
|
|
32
|
+
entry,
|
|
33
|
+
id,
|
|
34
|
+
lazyImport,
|
|
35
|
+
propsSchema,
|
|
36
|
+
source,
|
|
37
|
+
stack,
|
|
38
|
+
tag,
|
|
39
|
+
title,
|
|
40
|
+
usageConditions
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=metadata.json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ChartDimensions, WidgetTheme } from '../../../types/index.js';
|
|
2
|
+
import { AxisLabelTooltipHandlers } from '../../../utils/axis-labels.js';
|
|
3
|
+
import { PolarAreaModel, PolarAreaSector } from '../lib/types.js';
|
|
4
|
+
export interface RenderPolarAreaChartOptions extends AxisLabelTooltipHandlers {
|
|
5
|
+
model: PolarAreaModel;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
margin: ChartDimensions['margin'];
|
|
9
|
+
theme: WidgetTheme;
|
|
10
|
+
themeMode?: 'light' | 'dark';
|
|
11
|
+
showGrid?: boolean;
|
|
12
|
+
showTooltip?: boolean;
|
|
13
|
+
onHover?: (payload: {
|
|
14
|
+
sector: PolarAreaSector;
|
|
15
|
+
event: MouseEvent;
|
|
16
|
+
}) => void;
|
|
17
|
+
onLeave?: () => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* FuseDash PolarAreaChart — D3 rewrite.
|
|
21
|
+
* One wedge per category, each reaching the radius of its value; the legend
|
|
22
|
+
* lives in the Lit shell.
|
|
23
|
+
*/
|
|
24
|
+
export declare function renderPolarAreaChart(container: HTMLElement, options: RenderPolarAreaChartOptions): void;
|
|
25
|
+
//# sourceMappingURL=draw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../../../src/components/polar-area-chart/render/draw.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,+BAA+B,CAAC;AAUvC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,WAAW,2BAA4B,SAAQ,wBAAwB;IAC3E,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,eAAe,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AA8JD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,2BAA2B,GACnC,IAAI,CAiHN"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { scaleLinear } from "d3-scale";
|
|
2
|
+
import { select } from "d3-selection";
|
|
3
|
+
import { arc } from "d3-shape";
|
|
4
|
+
import { decorateManualAxisLabel } from "../../../utils/axis-labels.js";
|
|
5
|
+
import { FD, formatCompactNumber } from "../../../utils/fusedash-visual.js";
|
|
6
|
+
import { polarLabelGutter, polarRadialTicks, polarGroupedSectorAngles, polarSectorAngles, polarOuterRadius, polarLabelAnchor } from "../lib/domain.js";
|
|
7
|
+
const SECTOR_CLASS = "polar-area-path";
|
|
8
|
+
const TICK_CLASS = "polar-tick-group";
|
|
9
|
+
function measureText(node, text, fontSize, cx, cy) {
|
|
10
|
+
var _a;
|
|
11
|
+
const box = (_a = node == null ? void 0 : node.getBBox) == null ? void 0 : _a.call(node);
|
|
12
|
+
if (box && box.width > 0) return box;
|
|
13
|
+
const width = text.length * fontSize * 0.6;
|
|
14
|
+
return { x: cx - width / 2, y: cy - fontSize / 2, width, height: fontSize };
|
|
15
|
+
}
|
|
16
|
+
function drawGridRings(parent, ticks, radial) {
|
|
17
|
+
parent.selectAll("circle").data(ticks).enter().append("circle").attr("r", (d) => radial(d)).attr("fill", "none").attr("stroke", FD.polarGridStroke).attr("stroke-opacity", (_d, i) => (i + 1) * FD.polarGridStepOpacity);
|
|
18
|
+
}
|
|
19
|
+
function drawSpokes(parent, categories, outer) {
|
|
20
|
+
const slice = Math.PI * 2 / categories.length;
|
|
21
|
+
for (let i = 0; i < categories.length; i += 1) {
|
|
22
|
+
const angle = slice * i - Math.PI / 2;
|
|
23
|
+
const x = outer * Math.cos(angle);
|
|
24
|
+
const y = outer * Math.sin(angle);
|
|
25
|
+
parent.append("line").attr("x1", 0).attr("y1", 0).attr("x2", x).attr("y2", y).attr("stroke", FD.polarGridStroke).attr("stroke-linejoin", "round").attr("stroke-linecap", "round").attr("stroke-dasharray", FD.polarSpokeDash);
|
|
26
|
+
parent.append("circle").attr("cx", x).attr("cy", y).attr("r", FD.polarSpokeCapRadius).attr("fill", FD.polarGridStroke);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function drawCategoryLabels(parent, categories, outer, halfWidth, handlers) {
|
|
30
|
+
const slice = Math.PI * 2 / categories.length;
|
|
31
|
+
const radius = outer + FD.polarCategoryLabelOffset;
|
|
32
|
+
categories.forEach((category, i) => {
|
|
33
|
+
const labelAngle = slice * i - Math.PI / 2 + slice / 2;
|
|
34
|
+
const x = radius * Math.cos(labelAngle);
|
|
35
|
+
const anchor = polarLabelAnchor(labelAngle);
|
|
36
|
+
const slotWidth = anchor === "start" ? halfWidth - x : anchor === "end" ? halfWidth + x : 2 * Math.min(halfWidth - x, halfWidth + x);
|
|
37
|
+
const text = parent.append("text").attr("x", x).attr("y", radius * Math.sin(labelAngle)).attr("text-anchor", anchor).attr("font-size", FD.polarCategoryLabelSize).attr("dominant-baseline", "central").attr("fill", FD.polarCategoryLabelFill);
|
|
38
|
+
decorateManualAxisLabel(text, category, {
|
|
39
|
+
...handlers,
|
|
40
|
+
slotWidth,
|
|
41
|
+
fontSize: FD.polarCategoryLabelSize
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function drawRadialTicks(parent, ticks, radial, theme, themeMode) {
|
|
46
|
+
const pillFill = theme.background && theme.background !== "transparent" ? theme.background : themeMode === "dark" ? FD.polarTickPillDark : FD.polarTickPill;
|
|
47
|
+
parent.selectAll("g").data(ticks).enter().append("g").attr("class", TICK_CLASS).each(function(value) {
|
|
48
|
+
const group = select(this);
|
|
49
|
+
const label = formatCompactNumber(value, 2);
|
|
50
|
+
const cy = -radial(value);
|
|
51
|
+
const text = group.append("text").attr("x", 0).attr("y", cy).attr("font-size", FD.polarCategoryLabelSize).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", theme.text).text(label);
|
|
52
|
+
const box = measureText(text.node(), label, FD.polarCategoryLabelSize, 0, cy);
|
|
53
|
+
group.insert("rect", "text").attr("x", box.x - FD.polarTickPillPadX).attr("y", box.y - FD.polarTickPillPadY).attr("width", box.width + FD.polarTickPillPadX * 2).attr("height", box.height + FD.polarTickPillPadY * 2).attr("rx", FD.polarTickPillRadius).attr("ry", FD.polarTickPillRadius).attr("fill", pillFill);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function renderPolarAreaChart(container, options) {
|
|
57
|
+
const {
|
|
58
|
+
model,
|
|
59
|
+
width,
|
|
60
|
+
height,
|
|
61
|
+
margin,
|
|
62
|
+
theme,
|
|
63
|
+
themeMode = "light",
|
|
64
|
+
showGrid = true,
|
|
65
|
+
showTooltip = true,
|
|
66
|
+
onHover,
|
|
67
|
+
onLeave,
|
|
68
|
+
onAxisLabelHover,
|
|
69
|
+
onAxisLabelLeave
|
|
70
|
+
} = options;
|
|
71
|
+
container.replaceChildren();
|
|
72
|
+
const plotWidth = width - margin.left - margin.right;
|
|
73
|
+
const plotHeight = height - margin.top - margin.bottom;
|
|
74
|
+
const labelGutter = polarLabelGutter(model.categories, plotWidth);
|
|
75
|
+
const outerRadius = polarOuterRadius(plotWidth, plotHeight, labelGutter);
|
|
76
|
+
if (!model.sectors.length || outerRadius <= 0 || !model.maxValue) return;
|
|
77
|
+
const radial = scaleLinear().domain([0, model.maxValue]).rangeRound([0, outerRadius]).nice();
|
|
78
|
+
const gridOuter = radial(model.maxValue);
|
|
79
|
+
const ticks = polarRadialTicks(model.maxValue, FD.polarRadialSteps);
|
|
80
|
+
const svg = select(container).append("svg").attr("width", width).attr("height", height).attr("viewBox", `0 0 ${width} ${height}`);
|
|
81
|
+
const root = svg.append("g").attr("transform", `translate(${width / 2}, ${height / 2})`);
|
|
82
|
+
if (showGrid) {
|
|
83
|
+
const gridGroup = root.append("g").attr("class", "polar-grid").attr("pointer-events", "none");
|
|
84
|
+
drawGridRings(gridGroup, ticks, radial);
|
|
85
|
+
drawSpokes(gridGroup, model.categories, gridOuter);
|
|
86
|
+
}
|
|
87
|
+
if (outerRadius >= FD.polarMinLabelRadius) {
|
|
88
|
+
drawCategoryLabels(
|
|
89
|
+
root.append("g").attr("class", "polar-category-labels"),
|
|
90
|
+
model.categories,
|
|
91
|
+
gridOuter,
|
|
92
|
+
width / 2,
|
|
93
|
+
{ onAxisLabelHover, onAxisLabelLeave }
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
const angles = model.grouped ? polarGroupedSectorAngles(model.categories, model.sectors) : polarSectorAngles(model.sectors.length);
|
|
97
|
+
const arcGen = arc().innerRadius(0).outerRadius((d) => radial(d.sector.value)).startAngle((d) => d.startAngle).endAngle((d) => d.endAngle);
|
|
98
|
+
const stroke = themeMode === "dark" ? FD.donutSliceStrokeDark : FD.donutSliceStroke;
|
|
99
|
+
const sectors = root.append("g").attr("class", "polar-sectors").selectAll("path").data(model.sectors.map((sector, i) => ({ sector, ...angles[i] }))).enter().append("path").attr("class", SECTOR_CLASS).attr("d", arcGen).attr("fill", (d) => d.sector.color).attr("opacity", FD.polarSectorOpacity).attr("stroke", stroke).attr("stroke-width", FD.donutSliceStrokeWidth);
|
|
100
|
+
const fitsTicks = outerRadius >= FD.polarRadialSteps * FD.polarTickPillRowHeight;
|
|
101
|
+
if (showGrid && fitsTicks) {
|
|
102
|
+
drawRadialTicks(
|
|
103
|
+
root.append("g").attr("class", "polar-ticks").attr("pointer-events", "none"),
|
|
104
|
+
ticks,
|
|
105
|
+
radial,
|
|
106
|
+
theme,
|
|
107
|
+
themeMode
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
if (!showTooltip || !onHover) return;
|
|
111
|
+
const dimmable = root.selectAll(`.${SECTOR_CLASS}, .${TICK_CLASS}`);
|
|
112
|
+
sectors.style("cursor", "pointer").on("mouseenter", function(event, datum) {
|
|
113
|
+
dimmable.attr("opacity", FD.polarSectorOpacityDimmed);
|
|
114
|
+
select(this).attr("opacity", 1);
|
|
115
|
+
onHover({ sector: datum.sector, event });
|
|
116
|
+
}).on("mousemove", (event, datum) => {
|
|
117
|
+
onHover({ sector: datum.sector, event });
|
|
118
|
+
}).on("mouseleave", () => {
|
|
119
|
+
sectors.attr("opacity", FD.polarSectorOpacity);
|
|
120
|
+
root.selectAll(`.${TICK_CLASS}`).attr("opacity", 1);
|
|
121
|
+
onLeave == null ? void 0 : onLeave();
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
export {
|
|
125
|
+
renderPolarAreaChart
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=draw.js.map
|