@fusedashlabs/widgets 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +1 -1
- package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts +2 -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 +23 -2
- 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 +20 -5
- 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.js +1 -1
- package/dist/components/donut-chart/element/ui9000-donut-chart.js.map +1 -1
- package/dist/components/kpi-widget/element/styles.d.ts.map +1 -1
- package/dist/components/kpi-widget/element/styles.js +268 -5
- package/dist/components/kpi-widget/element/styles.js.map +1 -1
- package/dist/components/kpi-widget/element/ui9000-kpi-widget.d.ts +10 -1
- package/dist/components/kpi-widget/element/ui9000-kpi-widget.d.ts.map +1 -1
- package/dist/components/kpi-widget/element/ui9000-kpi-widget.js +154 -27
- package/dist/components/kpi-widget/element/ui9000-kpi-widget.js.map +1 -1
- package/dist/components/kpi-widget/index.d.ts +1 -1
- package/dist/components/kpi-widget/index.d.ts.map +1 -1
- package/dist/components/kpi-widget/index.js +7 -4
- package/dist/components/kpi-widget/lib/extract.d.ts +5 -1
- package/dist/components/kpi-widget/lib/extract.d.ts.map +1 -1
- package/dist/components/kpi-widget/lib/extract.js +110 -34
- package/dist/components/kpi-widget/lib/extract.js.map +1 -1
- package/dist/components/kpi-widget/lib/format.d.ts +5 -0
- package/dist/components/kpi-widget/lib/format.d.ts.map +1 -1
- package/dist/components/kpi-widget/lib/format.js +10 -1
- package/dist/components/kpi-widget/lib/format.js.map +1 -1
- package/dist/components/kpi-widget/lib/grid.d.ts +5 -0
- package/dist/components/kpi-widget/lib/grid.d.ts.map +1 -1
- package/dist/components/kpi-widget/lib/grid.js +18 -0
- package/dist/components/kpi-widget/lib/grid.js.map +1 -1
- package/dist/components/kpi-widget/lib/index.d.ts +5 -5
- package/dist/components/kpi-widget/lib/index.d.ts.map +1 -1
- package/dist/components/kpi-widget/lib/normalize.d.ts +2 -0
- package/dist/components/kpi-widget/lib/normalize.d.ts.map +1 -1
- package/dist/components/kpi-widget/lib/normalize.js +73 -12
- package/dist/components/kpi-widget/lib/normalize.js.map +1 -1
- package/dist/components/kpi-widget/lib/types.d.ts +41 -0
- package/dist/components/kpi-widget/lib/types.d.ts.map +1 -1
- package/dist/components/kpi-widget/metadata.json.d.ts +1 -1
- package/dist/components/kpi-widget/metadata.json.js +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 +6 -1
- 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 +456 -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/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.map +1 -1
- package/dist/components/network-graph/element/styles.js +177 -57
- package/dist/components/network-graph/element/styles.js.map +1 -1
- package/dist/components/network-graph/element/ui9000-network-graph.d.ts +4 -0
- package/dist/components/network-graph/element/ui9000-network-graph.d.ts.map +1 -1
- package/dist/components/network-graph/element/ui9000-network-graph.js +116 -39
- package/dist/components/network-graph/element/ui9000-network-graph.js.map +1 -1
- package/dist/components/network-graph/lib/domain.d.ts +2 -2
- package/dist/components/network-graph/lib/domain.js.map +1 -1
- package/dist/components/network-graph/lib/index.d.ts +1 -0
- package/dist/components/network-graph/lib/index.d.ts.map +1 -1
- 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/render/draw.d.ts +4 -1
- package/dist/components/network-graph/render/draw.d.ts.map +1 -1
- package/dist/components/network-graph/render/draw.js +34 -9
- package/dist/components/network-graph/render/draw.js.map +1 -1
- package/dist/components/partial-dependence-chart/element/styles.d.ts +2 -0
- package/dist/components/partial-dependence-chart/element/styles.d.ts.map +1 -0
- package/dist/components/partial-dependence-chart/element/styles.js +48 -0
- package/dist/components/partial-dependence-chart/element/styles.js.map +1 -0
- package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.d.ts +30 -0
- package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.d.ts.map +1 -0
- package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.js +163 -0
- package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.js.map +1 -0
- package/dist/components/partial-dependence-chart/index.d.ts +5 -0
- package/dist/components/partial-dependence-chart/index.d.ts.map +1 -0
- package/dist/components/partial-dependence-chart/index.js +18 -0
- package/dist/components/partial-dependence-chart/index.js.map +1 -0
- package/dist/components/partial-dependence-chart/lib/domain.d.ts +6 -0
- package/dist/components/partial-dependence-chart/lib/domain.d.ts.map +1 -0
- package/dist/components/partial-dependence-chart/lib/domain.js +16 -0
- package/dist/components/partial-dependence-chart/lib/domain.js.map +1 -0
- package/dist/components/partial-dependence-chart/lib/index.d.ts +5 -0
- package/dist/components/partial-dependence-chart/lib/index.d.ts.map +1 -0
- package/dist/components/partial-dependence-chart/lib/normalize.d.ts +4 -0
- package/dist/components/partial-dependence-chart/lib/normalize.d.ts.map +1 -0
- package/dist/components/partial-dependence-chart/lib/normalize.js +167 -0
- package/dist/components/partial-dependence-chart/lib/normalize.js.map +1 -0
- package/dist/components/partial-dependence-chart/lib/series.d.ts +15 -0
- package/dist/components/partial-dependence-chart/lib/series.d.ts.map +1 -0
- package/dist/components/partial-dependence-chart/lib/series.js +63 -0
- package/dist/components/partial-dependence-chart/lib/series.js.map +1 -0
- package/dist/components/partial-dependence-chart/lib/types.d.ts +50 -0
- package/dist/components/partial-dependence-chart/lib/types.d.ts.map +1 -0
- package/dist/components/partial-dependence-chart/metadata.json.d.ts +80 -0
- package/dist/components/partial-dependence-chart/metadata.json.js +42 -0
- package/dist/components/partial-dependence-chart/metadata.json.js.map +1 -0
- package/dist/components/partial-dependence-chart/render/draw.d.ts +34 -0
- package/dist/components/partial-dependence-chart/render/draw.d.ts.map +1 -0
- package/dist/components/partial-dependence-chart/render/draw.js +95 -0
- package/dist/components/partial-dependence-chart/render/draw.js.map +1 -0
- package/dist/components/partial-dependence-chart/render/index.d.ts +2 -0
- package/dist/components/partial-dependence-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 +0 -2
- 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 +1 -1
- package/dist/components/polar-area-chart/element/styles.d.ts.map +1 -1
- package/dist/components/{donut-group-chart → polar-area-chart}/element/styles.js +9 -27
- 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.map +1 -1
- package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js +4 -3
- package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js.map +1 -1
- package/dist/components/polar-area-chart/index.d.ts +1 -1
- package/dist/components/polar-area-chart/index.d.ts.map +1 -1
- package/dist/components/polar-area-chart/index.js +2 -1
- package/dist/components/polar-area-chart/lib/domain.d.ts +8 -0
- package/dist/components/polar-area-chart/lib/domain.d.ts.map +1 -1
- package/dist/components/polar-area-chart/lib/domain.js +20 -0
- package/dist/components/polar-area-chart/lib/domain.js.map +1 -1
- package/dist/components/polar-area-chart/lib/index.d.ts +1 -1
- package/dist/components/polar-area-chart/lib/index.d.ts.map +1 -1
- package/dist/components/polar-area-chart/lib/normalize.d.ts.map +1 -1
- package/dist/components/polar-area-chart/lib/normalize.js +72 -6
- package/dist/components/polar-area-chart/lib/normalize.js.map +1 -1
- package/dist/components/polar-area-chart/lib/types.d.ts +6 -1
- package/dist/components/polar-area-chart/lib/types.d.ts.map +1 -1
- package/dist/components/polar-area-chart/metadata.json.d.ts +1 -1
- package/dist/components/polar-area-chart/metadata.json.js +1 -1
- package/dist/components/polar-area-chart/render/draw.d.ts.map +1 -1
- package/dist/components/polar-area-chart/render/draw.js +2 -2
- package/dist/components/polar-area-chart/render/draw.js.map +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/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 +5 -5
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts.map +1 -1
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.js +37 -35
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.js.map +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/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/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/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -42
- package/dist/index.js.map +1 -1
- package/dist/lazy/index.d.ts +5 -2
- package/dist/lazy/index.d.ts.map +1 -1
- package/dist/lazy/index.js +32 -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/partial-dependence-chart.d.ts +4 -0
- package/dist/lazy/partial-dependence-chart.d.ts.map +1 -0
- package/dist/lazy/partial-dependence-chart.js +5 -0
- package/dist/lazy/partial-dependence-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/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/chart-helpers.d.ts +6 -6
- package/dist/utils/chart-helpers.d.ts.map +1 -1
- package/dist/utils/chart-helpers.js +31 -15
- package/dist/utils/chart-helpers.js.map +1 -1
- package/dist/utils/format-text.d.ts +5 -0
- package/dist/utils/format-text.d.ts.map +1 -1
- package/dist/utils/format-text.js +7 -0
- package/dist/utils/format-text.js.map +1 -1
- 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 +77 -52
- package/dist/utils/fusedash-visual.d.ts.map +1 -1
- package/dist/utils/fusedash-visual.js +55 -29
- package/dist/utils/fusedash-visual.js.map +1 -1
- package/package.json +48 -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/components/{donut-group-chart → matrix-chart}/index.js.map +0 -0
- /package/dist/components/{donut-group-chart → treemap-chart}/metadata.json.js.map +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui9000-kpi-widget.js","sources":["../../../../src/components/kpi-widget/element/ui9000-kpi-widget.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport {\n getKpiGridColumns,\n getKpiGridScrollAxis,\n MIN_KPI_CELL_WIDTH,\n normalizeKpiData,\n type KpiCardModel,\n type KpiGridScrollAxis,\n type KpiWidgetData,\n} from '../lib/index.js';\nimport { kpiWidgetStyles } from './styles.js';\n\n@customElement('ui9000-kpi-widget')\nexport class Ui9000KpiWidget extends Ui9000ChartElement {\n static override styles = [kpiWidgetStyles, chartShellStyles];\n\n @property({ type: String, attribute: 'scale' })\n scale: WidgetScale = 'default';\n\n @state()\n private _cards: KpiCardModel[] = [];\n\n @state()\n private _gridColumns = 1;\n\n @state()\n private _scrollAxis: KpiGridScrollAxis = 'vertical';\n\n private _resizeObserver?: ResizeObserver;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.updateGridLayout());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (changed.has('dataJson')) {\n const model = normalizeKpiData(parseJsonAttr<KpiWidgetData>(this.dataJson, null));\n this._cards = model.cards;\n this.updateGridLayout();\n }\n }\n\n private updateGridLayout(): void {\n const count = this._cards.length;\n const columns = getKpiGridColumns(this.clientWidth, count);\n const scrollAxis = getKpiGridScrollAxis(columns, count);\n if (columns !== this._gridColumns) this._gridColumns = columns;\n if (scrollAxis !== this._scrollAxis) this._scrollAxis = scrollAxis;\n }\n\n private renderValue(card: KpiCardModel) {\n const label = card.label;\n const unitLeft = label?.position === 'left' && label.text;\n const unitRight = label?.position === 'right' && label.text;\n\n return html`\n <div class=\"kpi-value-row\">\n ${unitLeft ? html`<span class=\"kpi-unit\">${unitLeft}</span>` : nothing}\n <h2 class=\"kpi-value\">${card.value}</h2>\n ${unitRight ? html`<span class=\"kpi-unit\">${unitRight}</span>` : nothing}\n ${card.indicator ? html`<span class=\"kpi-indicator\">${card.indicator}</span>` : nothing}\n </div>\n `;\n }\n\n private renderCard(card: KpiCardModel) {\n return html`\n <article class=\"kpi-card\" aria-label=${card.name}>\n <p class=\"kpi-name\">${card.name}</p>\n ${this.renderValue(card)}\n ${card.subtitle ? html`<p class=\"kpi-subtitle\">${card.subtitle}</p>` : nothing}\n </article>\n `;\n }\n\n override render() {\n const title = this.headerTitle();\n const single = this._cards.length <= 1;\n\n const gridStyle = single\n ? nothing\n : styleMap({\n gridTemplateColumns: `repeat(${this._gridColumns}, minmax(${MIN_KPI_CELL_WIDTH}px, 1fr))`,\n });\n\n return html`\n <div class=\"kpi-root\" data-single=${single ? 'true' : 'false'}>\n ${this.renderShellHeader(title)}\n ${this._cards.length === 0\n ? html`<div class=\"empty\">No KPI data</div>`\n : html`\n <div\n class=\"kpi-grid\"\n data-layout=${single ? 'single' : 'grid'}\n data-scroll=${this._scrollAxis}\n ${gridStyle}\n >\n ${this._cards.map((card) => this.renderCard(card))}\n </div>\n `}\n ${this.renderShellLabelTooltip()}\n </div>\n `;\n }\n}\n\nexport function registerKpiWidget(): void {\n if (!customElements.get('ui9000-kpi-widget')) {\n customElements.define('ui9000-kpi-widget', Ui9000KpiWidget);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-kpi-widget': Ui9000KpiWidget;\n }\n}\n"],"names":["styleMap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui9000-kpi-widget.js","sources":["../../../../src/components/kpi-widget/element/ui9000-kpi-widget.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport {\n getAdvancedSplitLayout,\n getKpiGridColumns,\n getKpiGridScrollAxis,\n MIN_KPI_CELL_WIDTH,\n visualisationChartType,\n normalizeKpiData,\n type AdvancedSplitLayout,\n type KpiCardModel,\n type KpiCardRole,\n type KpiGridScrollAxis,\n type KpiWidgetData,\n type KpiWidgetModel,\n} from '../lib/index.js';\nimport { kpiWidgetStyles } from './styles.js';\n\n@customElement('ui9000-kpi-widget')\nexport class Ui9000KpiWidget extends Ui9000ChartElement {\n static override styles = [kpiWidgetStyles, chartShellStyles];\n\n @property({ type: String, attribute: 'scale' })\n scale: WidgetScale = 'default';\n\n @state()\n private _model: KpiWidgetModel = { layout: 'empty', cards: [], supporting: [] };\n\n @state()\n private _gridColumns = 1;\n\n @state()\n private _scrollAxis: KpiGridScrollAxis = 'vertical';\n\n @state()\n private _advancedSplit: AdvancedSplitLayout = 'horizontal';\n\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n private _rendererLoading = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.scheduleLayout());\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 (changed.has('dataJson')) {\n this._model = normalizeKpiData(parseJsonAttr<KpiWidgetData>(this.dataJson, null));\n this.updateGridLayout();\n this.ensureChartRenderer();\n }\n }\n\n /** Nested viz uses `<ui9000-chart-renderer>` — load it only for advanced KPIs. */\n private ensureChartRenderer(): void {\n if (\n this._rendererLoading ||\n this._model.layout !== 'advanced' ||\n !this._model.visualisation\n ) {\n return;\n }\n this._rendererLoading = true;\n void import('../../chart-renderer/index.js').then(() => this.requestUpdate());\n }\n\n private scheduleLayout(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => this.updateGridLayout());\n }\n\n private updateGridLayout(): void {\n const layout = this._model.layout;\n const count =\n layout === 'advanced' ? this._model.supporting.length : this._model.cards.length;\n const columns = getKpiGridColumns(this.clientWidth, Math.max(count, 1));\n const scrollAxis = getKpiGridScrollAxis(columns, count);\n const split = getAdvancedSplitLayout(\n this.clientWidth,\n this.clientHeight,\n this._advancedSplit,\n );\n if (columns !== this._gridColumns) this._gridColumns = columns;\n if (scrollAxis !== this._scrollAxis) this._scrollAxis = scrollAxis;\n if (split !== this._advancedSplit) this._advancedSplit = split;\n }\n\n private renderBadge(card: KpiCardModel) {\n if (!card.status) return nothing;\n return html`\n <span class=\"kpi-badge\" data-variant=${card.status.variant}>${card.status.text}</span>\n `;\n }\n\n private renderValue(card: KpiCardModel) {\n const label = card.label;\n const unitLeft = label?.position === 'left' && label.text;\n const unitRight = label?.position === 'right' && label.text;\n const showIndicator = Boolean(card.showPercentage && card.indicator);\n\n return html`\n <div class=\"kpi-value-row\">\n ${unitLeft ? html`<span class=\"kpi-unit\">${unitLeft}</span>` : nothing}\n <h2 class=\"kpi-value\">${card.value}</h2>\n ${card.suffix ? html`<span class=\"kpi-suffix\">${card.suffix}</span>` : nothing}\n ${unitRight ? html`<span class=\"kpi-unit\">${unitRight}</span>` : nothing}\n ${showIndicator\n ? html`\n <span class=\"kpi-indicator\">\n <span class=\"kpi-indicator-arrow\" aria-hidden=\"true\">›</span>\n ${card.indicator}\n </span>\n `\n : nothing}\n </div>\n `;\n }\n\n private renderCard(card: KpiCardModel, role: KpiCardRole) {\n const showName = !card.hideName;\n const showHeaderBadge = Boolean(card.status) && (role === 'single' || role === 'main');\n const showInlineBadge = Boolean(card.status) && !showHeaderBadge;\n\n return html`\n <article class=\"kpi-card\" data-role=${role} aria-label=${card.name}>\n ${showName || showHeaderBadge\n ? html`\n <div class=\"kpi-header\">\n ${showName ? html`<p class=\"kpi-name\">${card.name}</p>` : html`<span></span>`}\n ${showHeaderBadge ? this.renderBadge(card) : nothing}\n </div>\n `\n : nothing}\n ${this.renderValue(card)}\n ${showInlineBadge || card.subtitle\n ? html`\n <div class=\"kpi-subtitle-row\">\n ${showInlineBadge ? this.renderBadge(card) : nothing}\n ${card.subtitle ? html`<p class=\"kpi-subtitle\">${card.subtitle}</p>` : nothing}\n </div>\n `\n : nothing}\n </article>\n `;\n }\n\n private renderFooter() {\n const { target, showTimestamp, updatedAt } = this._model;\n const hasTarget = Boolean(target && String(target).length);\n const updated =\n showTimestamp && updatedAt\n ? new Date(updatedAt).toLocaleDateString('en-US')\n : '';\n if (!hasTarget && !updated) return nothing;\n\n return html`\n <div class=\"kpi-footer\">\n ${hasTarget\n ? html`\n <div class=\"kpi-footer-block\">\n <span class=\"kpi-footer-label\">Target</span>\n <span class=\"kpi-footer-value\">${target}</span>\n </div>\n `\n : html`<span></span>`}\n ${updated\n ? html`\n <div class=\"kpi-footer-block\">\n <span class=\"kpi-footer-label\">Updated</span>\n <span class=\"kpi-footer-value\">${updated}</span>\n </div>\n `\n : nothing}\n </div>\n `;\n }\n\n private renderAdvanced() {\n const main = this._model.main;\n if (!main) return nothing;\n const viz = this._model.visualisation;\n const chartType =\n viz && typeof viz === 'object'\n ? visualisationChartType({ visualisation: viz })\n : undefined;\n const supporting = this._model.supporting;\n const supportingStyle =\n supporting.length > 0\n ? styleMap({\n gridTemplateColumns: `repeat(${this._gridColumns}, minmax(${MIN_KPI_CELL_WIDTH}px, 1fr))`,\n })\n : nothing;\n\n return html`\n <div class=\"kpi-advanced\">\n <div class=\"kpi-advanced-main\">\n <article class=\"kpi-card\" data-role=\"main\" aria-label=${main.name}>\n <div class=\"kpi-header\">\n <p class=\"kpi-name\">${main.name}</p>\n ${this.renderBadge(main)}\n </div>\n <div class=\"kpi-advanced-split\" data-split=${this._advancedSplit}>\n <div class=\"kpi-advanced-value\">${this.renderValue(main)}</div>\n ${viz && chartType\n ? html`\n <div class=\"kpi-advanced-chart\">\n <ui9000-chart-renderer\n data=${JSON.stringify(viz)}\n chart-type=${chartType}\n scale=${this.scale}\n show-header=\"false\"\n show-legend=\"false\"\n show-grid\n show-tooltip\n ></ui9000-chart-renderer>\n </div>\n `\n : nothing}\n </div>\n </article>\n </div>\n ${supporting.length\n ? html`\n <div\n class=\"kpi-supporting\"\n data-scroll=${this._scrollAxis}\n style=${supportingStyle}\n >\n ${supporting.map((card) => this.renderCard(card, 'supporting'))}\n </div>\n `\n : nothing}\n </div>\n `;\n }\n\n override render() {\n const model = this._model;\n const layout = model.layout;\n const single = layout === 'single';\n const title = model.title;\n\n const gridStyle =\n layout === 'grid'\n ? styleMap({\n gridTemplateColumns: `repeat(${this._gridColumns}, minmax(${MIN_KPI_CELL_WIDTH}px, 1fr))`,\n })\n : nothing;\n\n return html`\n <div class=\"kpi-root\" data-layout=${layout} data-single=${single ? 'true' : 'false'}>\n ${title ? html`<div class=\"kpi-section-title\">${title}</div>` : nothing}\n ${layout === 'empty'\n ? html`<div class=\"empty\">No KPI data</div>`\n : layout === 'advanced'\n ? this.renderAdvanced()\n : html`\n <div\n class=\"kpi-grid\"\n data-layout=${single ? 'single' : 'grid'}\n data-scroll=${this._scrollAxis}\n style=${gridStyle}\n >\n ${model.cards.map((card) =>\n this.renderCard(card, single ? 'single' : 'grid'),\n )}\n </div>\n `}\n ${this.renderFooter()}\n ${this.renderShellLabelTooltip()}\n </div>\n `;\n }\n}\n\nexport function registerKpiWidget(): void {\n if (!customElements.get('ui9000-kpi-widget')) {\n customElements.define('ui9000-kpi-widget', Ui9000KpiWidget);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-kpi-widget': Ui9000KpiWidget;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { Ui9000KpiWidget, registerKpiWidget } from './element/ui9000-kpi-widget.js';
|
|
2
|
-
export { normalizeKpiData, extractCardsFromKpi, formatKpiValue, getKpiGridColumns, getKpiGridScrollAxis, MIN_KPI_CELL_WIDTH, type KpiCardModel, type KpiGridScrollAxis, type KpiValueLabel, type KpiWidgetData, type KpiWidgetModel, type RawKpiItem, } from './lib/index.js';
|
|
2
|
+
export { normalizeKpiData, extractCardsFromKpi, isAdvancedKpiItem, formatKpiValue, splitFormattedKpiValue, getKpiGridColumns, getKpiGridScrollAxis, getAdvancedSplitLayout, MIN_KPI_CELL_WIDTH, type AdvancedSplitLayout, type KpiCardModel, type KpiGridScrollAxis, type KpiStatusBadge, type KpiValueLabel, type KpiWidgetData, type KpiWidgetLayout, type KpiWidgetModel, type RawKpiItem, } from './lib/index.js';
|
|
3
3
|
export { default as kpiWidgetMetadata } from './metadata.json';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/kpi-widget/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/kpi-widget/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { registerKpiWidget } from "./element/ui9000-kpi-widget.js";
|
|
2
2
|
import { Ui9000KpiWidget } from "./element/ui9000-kpi-widget.js";
|
|
3
3
|
import { default as default2 } from "./metadata.json.js";
|
|
4
|
-
import { MIN_KPI_CELL_WIDTH, getKpiGridColumns, getKpiGridScrollAxis } from "./lib/grid.js";
|
|
5
|
-
import { extractCardsFromKpi } from "./lib/extract.js";
|
|
6
|
-
import { formatKpiValue } from "./lib/format.js";
|
|
4
|
+
import { MIN_KPI_CELL_WIDTH, getAdvancedSplitLayout, getKpiGridColumns, getKpiGridScrollAxis } from "./lib/grid.js";
|
|
5
|
+
import { extractCardsFromKpi, isAdvancedKpiItem } from "./lib/extract.js";
|
|
6
|
+
import { formatKpiValue, splitFormattedKpiValue } from "./lib/format.js";
|
|
7
7
|
import { normalizeKpiData } from "./lib/normalize.js";
|
|
8
8
|
export {
|
|
9
9
|
MIN_KPI_CELL_WIDTH,
|
|
10
10
|
Ui9000KpiWidget,
|
|
11
11
|
extractCardsFromKpi,
|
|
12
12
|
formatKpiValue,
|
|
13
|
+
getAdvancedSplitLayout,
|
|
13
14
|
getKpiGridColumns,
|
|
14
15
|
getKpiGridScrollAxis,
|
|
16
|
+
isAdvancedKpiItem,
|
|
15
17
|
default2 as kpiWidgetMetadata,
|
|
16
18
|
normalizeKpiData,
|
|
17
|
-
registerKpiWidget
|
|
19
|
+
registerKpiWidget,
|
|
20
|
+
splitFormattedKpiValue
|
|
18
21
|
};
|
|
19
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import { KpiCardModel, RawKpiItem } from './types.js';
|
|
1
|
+
import { KpiCardModel, RawKpiItem, RawKpiVisualisation } from './types.js';
|
|
2
|
+
export declare function isAdvancedKpiItem(kpi: RawKpiItem): boolean;
|
|
3
|
+
export declare function visualisationChartType(kpi: {
|
|
4
|
+
visualisation?: RawKpiVisualisation | null;
|
|
5
|
+
}): string | undefined;
|
|
2
6
|
/** Map one FuseDash / MCP KPI item to display cards (mirrors KPIComponentWrapper). */
|
|
3
7
|
export declare function extractCardsFromKpi(kpi: RawKpiItem): KpiCardModel[];
|
|
4
8
|
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/lib/extract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/lib/extract.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EAIZ,UAAU,EACV,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAuEpB,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAM1D;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE;IAC1C,aAAa,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC5C,GAAG,MAAM,GAAG,SAAS,CAKrB;AAED,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY,EAAE,CAyGnE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { formatKpiValue } from "./format.js";
|
|
1
|
+
import { formatKpiValue, splitFormattedKpiValue } from "./format.js";
|
|
2
|
+
const HIGH_LOW_TYPES = /* @__PURE__ */ new Set(["high/low", "high/low_overall", "high/low_trend"]);
|
|
2
3
|
function valueLabel(axisInfo) {
|
|
3
4
|
if (!axisInfo || typeof axisInfo !== "object") return void 0;
|
|
4
5
|
const info = axisInfo;
|
|
@@ -10,6 +11,51 @@ function valueLabel(axisInfo) {
|
|
|
10
11
|
function asRecord(value) {
|
|
11
12
|
return value != null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
12
13
|
}
|
|
14
|
+
function formatDisplay(raw) {
|
|
15
|
+
const formatted = formatKpiValue(raw);
|
|
16
|
+
const split = splitFormattedKpiValue(formatted);
|
|
17
|
+
return split.suffix ? split : { value: formatted };
|
|
18
|
+
}
|
|
19
|
+
function percentLabel(raw) {
|
|
20
|
+
const n = Number(raw);
|
|
21
|
+
if (!Number.isFinite(n) || n === 0) return void 0;
|
|
22
|
+
return `${n.toFixed(2)}%`;
|
|
23
|
+
}
|
|
24
|
+
function statusFromKpi(kpi) {
|
|
25
|
+
var _a, _b;
|
|
26
|
+
if (kpi.kpiKind === "mission") {
|
|
27
|
+
return { text: "Mission", variant: "Mission" };
|
|
28
|
+
}
|
|
29
|
+
if (kpi.kpiKind === "goal") {
|
|
30
|
+
return kpi.targetStatus === "on_target" ? { text: "On target", variant: "OnTarget" } : { text: "Off target", variant: "OffTarget" };
|
|
31
|
+
}
|
|
32
|
+
const raw = (_a = kpi.status) == null ? void 0 : _a.trim();
|
|
33
|
+
if (!raw) return void 0;
|
|
34
|
+
const text = ((_b = raw.split("=")[0]) == null ? void 0 : _b.trim()) || raw;
|
|
35
|
+
const lower = raw.toLowerCase();
|
|
36
|
+
const variant = lower.includes("good") ? "Good" : lower.includes("low") ? "Low" : "Normal";
|
|
37
|
+
return { text, variant };
|
|
38
|
+
}
|
|
39
|
+
function withMeta(card, kpi) {
|
|
40
|
+
const scoreValue = kpi.kpiKind && typeof kpi.score === "number" ? `${kpi.score.toFixed(1)}%` : void 0;
|
|
41
|
+
return {
|
|
42
|
+
...card,
|
|
43
|
+
...scoreValue ? { value: scoreValue, suffix: void 0 } : {},
|
|
44
|
+
status: statusFromKpi(kpi),
|
|
45
|
+
showPercentage: Boolean(kpi.showPercentage)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function isAdvancedKpiItem(kpi) {
|
|
49
|
+
return Boolean(
|
|
50
|
+
kpi.supportingKpis || kpi.showVisualisation || kpi.variant === "advanced" && kpi.visualisation
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
function visualisationChartType(kpi) {
|
|
54
|
+
const viz = kpi.visualisation;
|
|
55
|
+
if (!viz || typeof viz !== "object") return void 0;
|
|
56
|
+
const type = viz.chartType ?? viz.chart_type;
|
|
57
|
+
return typeof type === "string" && type.trim() ? type.trim() : void 0;
|
|
58
|
+
}
|
|
13
59
|
function extractCardsFromKpi(kpi) {
|
|
14
60
|
var _a;
|
|
15
61
|
const column = kpi.column ?? "value";
|
|
@@ -22,41 +68,62 @@ function extractCardsFromKpi(kpi) {
|
|
|
22
68
|
const type = kpi.type ?? "single_value";
|
|
23
69
|
const baseId = kpi.id ?? kpi.name ?? column;
|
|
24
70
|
const baseName = kpi.name ?? column;
|
|
71
|
+
const showPct = Boolean(kpi.showPercentage);
|
|
25
72
|
if (type === "trend" || type === "overall") {
|
|
26
|
-
const
|
|
73
|
+
const display = formatDisplay(dataRow[fieldKey] ?? dataRow[column]);
|
|
74
|
+
const subtitle = typeof dataRow.subtitle === "string" ? dataRow.subtitle : void 0;
|
|
27
75
|
return [
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
76
|
+
withMeta(
|
|
77
|
+
{
|
|
78
|
+
id: String(baseId),
|
|
79
|
+
name: baseName,
|
|
80
|
+
value: display.value,
|
|
81
|
+
suffix: display.suffix,
|
|
82
|
+
indicator: showPct ? percentLabel(dataRow.percentage) : void 0,
|
|
83
|
+
subtitle,
|
|
84
|
+
label
|
|
85
|
+
},
|
|
86
|
+
kpi
|
|
87
|
+
)
|
|
35
88
|
];
|
|
36
89
|
}
|
|
37
90
|
if (type === "comparison") {
|
|
38
91
|
const current = asRecord(dataRow.current);
|
|
39
|
-
const
|
|
92
|
+
const previous = asRecord(dataRow.previous);
|
|
93
|
+
const display = formatDisplay((current == null ? void 0 : current[fieldKey]) ?? (current == null ? void 0 : current[column]));
|
|
94
|
+
const prevRaw = (previous == null ? void 0 : previous[fieldKey]) ?? (previous == null ? void 0 : previous[column]);
|
|
95
|
+
const subtitle = prevRaw != null && prevRaw !== "" ? `vs ${formatKpiValue(prevRaw)}` : void 0;
|
|
40
96
|
return [
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
97
|
+
withMeta(
|
|
98
|
+
{
|
|
99
|
+
id: String(baseId),
|
|
100
|
+
name: baseName,
|
|
101
|
+
value: display.value,
|
|
102
|
+
suffix: display.suffix,
|
|
103
|
+
indicator: showPct ? percentLabel(dataRow.percentage) : void 0,
|
|
104
|
+
subtitle,
|
|
105
|
+
label
|
|
106
|
+
},
|
|
107
|
+
kpi
|
|
108
|
+
)
|
|
48
109
|
];
|
|
49
110
|
}
|
|
50
111
|
if (type === "single_value") {
|
|
51
112
|
const valueBucket = asRecord(dataRow.value) ?? dataRow;
|
|
52
113
|
const raw = valueBucket[fieldKey] ?? valueBucket[column] ?? Object.values(valueBucket)[0];
|
|
114
|
+
const display = formatDisplay(raw);
|
|
53
115
|
return [
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
116
|
+
withMeta(
|
|
117
|
+
{
|
|
118
|
+
id: String(baseId),
|
|
119
|
+
name: baseName,
|
|
120
|
+
value: display.value,
|
|
121
|
+
suffix: display.suffix,
|
|
122
|
+
indicator: showPct ? percentLabel(dataRow.percentage) : void 0,
|
|
123
|
+
label
|
|
124
|
+
},
|
|
125
|
+
kpi
|
|
126
|
+
)
|
|
60
127
|
];
|
|
61
128
|
}
|
|
62
129
|
const cards = [];
|
|
@@ -64,20 +131,29 @@ function extractCardsFromKpi(kpi) {
|
|
|
64
131
|
if (key === "percentage" || key === "value") continue;
|
|
65
132
|
const local = asRecord(dataRow[key]);
|
|
66
133
|
if (!local) continue;
|
|
67
|
-
const subtitle = kpi.groupBy ? String(local[kpi.groupBy] ?? key) : key;
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
134
|
+
const subtitle = kpi.groupBy ? String(local[kpi.groupBy] ?? key) : HIGH_LOW_TYPES.has(type) ? key : void 0;
|
|
135
|
+
const raw = local[fieldKey] ?? local[column];
|
|
136
|
+
const display = formatDisplay(raw);
|
|
137
|
+
cards.push(
|
|
138
|
+
withMeta(
|
|
139
|
+
{
|
|
140
|
+
id: `${baseId}-${key}`,
|
|
141
|
+
name: baseName,
|
|
142
|
+
value: display.value,
|
|
143
|
+
suffix: display.suffix,
|
|
144
|
+
indicator: showPct ? percentLabel(local.percentage) : void 0,
|
|
145
|
+
subtitle,
|
|
146
|
+
label
|
|
147
|
+
},
|
|
148
|
+
kpi
|
|
149
|
+
)
|
|
150
|
+
);
|
|
77
151
|
}
|
|
78
152
|
return cards;
|
|
79
153
|
}
|
|
80
154
|
export {
|
|
81
|
-
extractCardsFromKpi
|
|
155
|
+
extractCardsFromKpi,
|
|
156
|
+
isAdvancedKpiItem,
|
|
157
|
+
visualisationChartType
|
|
82
158
|
};
|
|
83
159
|
//# sourceMappingURL=extract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sources":["../../../../src/components/kpi-widget/lib/extract.ts"],"sourcesContent":["import { formatKpiValue } from './format.js';\nimport type { KpiCardModel, KpiValueLabel, RawKpiItem } from './types.js';\n\ntype AxisInfo = NonNullable<RawKpiItem['axisDetails']>[string];\n\nfunction valueLabel(axisInfo: AxisInfo | undefined): KpiValueLabel | undefined {\n if (!axisInfo || typeof axisInfo !== 'object') return undefined;\n const info = axisInfo;\n return {\n position: info.measure_unit_type === 'currency' ? 'left' : 'right',\n text:\n info.measure_unit_type === 'currency'\n ? (info.measure_unit_symbol ?? '')\n : (info.measure_unit ?? ''),\n };\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value != null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\n/** Map one FuseDash / MCP KPI item to display cards (mirrors KPIComponentWrapper). */\nexport function extractCardsFromKpi(kpi: RawKpiItem): KpiCardModel[] {\n const column = kpi.column ?? 'value';\n const aggregation = kpi.aggregations ?? 'sum';\n const fieldKey = `${aggregation}_${column}`;\n const dataRow = Array.isArray(kpi.data) ? asRecord(kpi.data[0]) : null;\n if (!dataRow) return [];\n\n const axisInfo = kpi.axisDetails?.[column];\n const label = valueLabel(axisInfo);\n const type = kpi.type ?? 'single_value';\n const baseId = kpi.id ?? kpi.name ?? column;\n const baseName = kpi.name ?? column;\n\n if (type === 'trend' || type === 'overall') {\n const pct = dataRow.percentage;\n return [\n {\n id: baseId,\n name: baseName,\n value: formatKpiValue(dataRow[fieldKey] as number | string),\n indicator: Number(pct) ? `${Number(pct).toFixed(2)}%` : undefined,\n label,\n },\n ];\n }\n\n if (type === 'comparison') {\n const current = asRecord(dataRow.current);\n const pct = dataRow.percentage;\n return [\n {\n id: baseId,\n name: baseName,\n value: formatKpiValue(current?.[fieldKey] as number | string),\n indicator: Number(pct) ? `${Number(pct).toFixed(2)}%` : undefined,\n label,\n },\n ];\n }\n\n if (type === 'single_value') {\n const valueBucket = asRecord(dataRow.value) ?? dataRow;\n const raw =\n valueBucket[fieldKey] ??\n valueBucket[column] ??\n Object.values(valueBucket)[0];\n return [\n {\n id: baseId,\n name: baseName,\n value: formatKpiValue(raw as number | string),\n label,\n },\n ];\n }\n\n const cards: KpiCardModel[] = [];\n for (const key of Object.keys(dataRow)) {\n if (key === 'percentage' || key === 'value') continue;\n const local = asRecord(dataRow[key]);\n if (!local) continue;\n const subtitle = kpi.groupBy ? String(local[kpi.groupBy] ?? key) : key;\n const indicator = Number(local.percentage)\n ? `${Number(local.percentage).toFixed(2)}%`\n : undefined;\n cards.push({\n id: `${baseId}-${key}`,\n name: baseName,\n value: formatKpiValue(local[fieldKey] as number | string),\n subtitle,\n indicator,\n label,\n });\n }\n\n return cards;\n}\n"],"names":[],"mappings":";AAKA,SAAS,WAAW,UAA2D;AAC7E,MAAI,CAAC,YAAY,OAAO,aAAa,SAAU,QAAO;AACtD,QAAM,OAAO;AACb,SAAO;AAAA,IACL,UAAU,KAAK,sBAAsB,aAAa,SAAS;AAAA,IAC3D,MACE,KAAK,sBAAsB,aACtB,KAAK,uBAAuB,KAC5B,KAAK,gBAAgB;AAAA,EAAA;AAEhC;AAEA,SAAS,SAAS,OAAgD;AAChE,SAAO,SAAS,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IACpE,QACD;AACN;AAGO,SAAS,oBAAoB,KAAiC;;AACnE,QAAM,SAAS,IAAI,UAAU;AAC7B,QAAM,cAAc,IAAI,gBAAgB;AACxC,QAAM,WAAW,GAAG,WAAW,IAAI,MAAM;AACzC,QAAM,UAAU,MAAM,QAAQ,IAAI,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC,CAAC,IAAI;AAClE,MAAI,CAAC,QAAS,QAAO,CAAA;AAErB,QAAM,YAAW,SAAI,gBAAJ,mBAAkB;AACnC,QAAM,QAAQ,WAAW,QAAQ;AACjC,QAAM,OAAO,IAAI,QAAQ;AACzB,QAAM,SAAS,IAAI,MAAM,IAAI,QAAQ;AACrC,QAAM,WAAW,IAAI,QAAQ;AAE7B,MAAI,SAAS,WAAW,SAAS,WAAW;AAC1C,UAAM,MAAM,QAAQ;AACpB,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,eAAe,QAAQ,QAAQ,CAAoB;AAAA,QAC1D,WAAW,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,MAAM;AAAA,QACxD;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,SAAS,cAAc;AACzB,UAAM,UAAU,SAAS,QAAQ,OAAO;AACxC,UAAM,MAAM,QAAQ;AACpB,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,eAAe,mCAAU,SAA4B;AAAA,QAC5D,WAAW,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,MAAM;AAAA,QACxD;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,SAAS,gBAAgB;AAC3B,UAAM,cAAc,SAAS,QAAQ,KAAK,KAAK;AAC/C,UAAM,MACJ,YAAY,QAAQ,KACpB,YAAY,MAAM,KAClB,OAAO,OAAO,WAAW,EAAE,CAAC;AAC9B,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,eAAe,GAAsB;AAAA,QAC5C;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,QAAwB,CAAA;AAC9B,aAAW,OAAO,OAAO,KAAK,OAAO,GAAG;AACtC,QAAI,QAAQ,gBAAgB,QAAQ,QAAS;AAC7C,UAAM,QAAQ,SAAS,QAAQ,GAAG,CAAC;AACnC,QAAI,CAAC,MAAO;AACZ,UAAM,WAAW,IAAI,UAAU,OAAO,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI;AACnE,UAAM,YAAY,OAAO,MAAM,UAAU,IACrC,GAAG,OAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,CAAC,MACtC;AACJ,UAAM,KAAK;AAAA,MACT,IAAI,GAAG,MAAM,IAAI,GAAG;AAAA,MACpB,MAAM;AAAA,MACN,OAAO,eAAe,MAAM,QAAQ,CAAoB;AAAA,MACxD;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;AAEA,SAAO;AACT;"}
|
|
1
|
+
{"version":3,"file":"extract.js","sources":["../../../../src/components/kpi-widget/lib/extract.ts"],"sourcesContent":["import {\n formatKpiValue,\n splitFormattedKpiValue,\n} from './format.js';\nimport type {\n KpiCardModel,\n KpiStatusBadge,\n KpiStatusVariant,\n KpiValueLabel,\n RawKpiItem,\n RawKpiVisualisation,\n} from './types.js';\n\ntype AxisInfo = NonNullable<RawKpiItem['axisDetails']>[string];\n\nconst HIGH_LOW_TYPES = new Set(['high/low', 'high/low_overall', 'high/low_trend']);\n\nfunction valueLabel(axisInfo: AxisInfo | undefined): KpiValueLabel | undefined {\n if (!axisInfo || typeof axisInfo !== 'object') return undefined;\n const info = axisInfo;\n return {\n position: info.measure_unit_type === 'currency' ? 'left' : 'right',\n text:\n info.measure_unit_type === 'currency'\n ? (info.measure_unit_symbol ?? '')\n : (info.measure_unit ?? ''),\n };\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value != null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction formatDisplay(raw: unknown): { value: string; suffix?: string } {\n const formatted = formatKpiValue(raw as number | string);\n const split = splitFormattedKpiValue(formatted);\n return split.suffix ? split : { value: formatted };\n}\n\nfunction percentLabel(raw: unknown): string | undefined {\n const n = Number(raw);\n if (!Number.isFinite(n) || n === 0) return undefined;\n return `${n.toFixed(2)}%`;\n}\n\nfunction statusFromKpi(kpi: RawKpiItem): KpiStatusBadge | undefined {\n if (kpi.kpiKind === 'mission') {\n return { text: 'Mission', variant: 'Mission' };\n }\n if (kpi.kpiKind === 'goal') {\n return kpi.targetStatus === 'on_target'\n ? { text: 'On target', variant: 'OnTarget' }\n : { text: 'Off target', variant: 'OffTarget' };\n }\n const raw = kpi.status?.trim();\n if (!raw) return undefined;\n const text = raw.split('=')[0]?.trim() || raw;\n const lower = raw.toLowerCase();\n const variant: KpiStatusVariant = lower.includes('good')\n ? 'Good'\n : lower.includes('low')\n ? 'Low'\n : 'Normal';\n return { text, variant };\n}\n\nfunction withMeta(\n card: Omit<KpiCardModel, 'status' | 'showPercentage'>,\n kpi: RawKpiItem,\n): KpiCardModel {\n const scoreValue =\n kpi.kpiKind && typeof kpi.score === 'number' ? `${kpi.score.toFixed(1)}%` : undefined;\n return {\n ...card,\n ...(scoreValue ? { value: scoreValue, suffix: undefined } : {}),\n status: statusFromKpi(kpi),\n showPercentage: Boolean(kpi.showPercentage),\n };\n}\n\nexport function isAdvancedKpiItem(kpi: RawKpiItem): boolean {\n return Boolean(\n kpi.supportingKpis ||\n kpi.showVisualisation ||\n (kpi.variant === 'advanced' && kpi.visualisation),\n );\n}\n\nexport function visualisationChartType(kpi: {\n visualisation?: RawKpiVisualisation | null;\n}): string | undefined {\n const viz = kpi.visualisation;\n if (!viz || typeof viz !== 'object') return undefined;\n const type = viz.chartType ?? viz.chart_type;\n return typeof type === 'string' && type.trim() ? type.trim() : undefined;\n}\n\n/** Map one FuseDash / MCP KPI item to display cards (mirrors KPIComponentWrapper). */\nexport function extractCardsFromKpi(kpi: RawKpiItem): KpiCardModel[] {\n const column = kpi.column ?? 'value';\n const aggregation = kpi.aggregations ?? 'sum';\n const fieldKey = `${aggregation}_${column}`;\n const dataRow = Array.isArray(kpi.data) ? asRecord(kpi.data[0]) : null;\n if (!dataRow) return [];\n\n const axisInfo = kpi.axisDetails?.[column];\n const label = valueLabel(axisInfo);\n const type = kpi.type ?? 'single_value';\n const baseId = kpi.id ?? kpi.name ?? column;\n const baseName = kpi.name ?? column;\n const showPct = Boolean(kpi.showPercentage);\n\n if (type === 'trend' || type === 'overall') {\n const display = formatDisplay(dataRow[fieldKey] ?? dataRow[column]);\n const subtitle = typeof dataRow.subtitle === 'string' ? dataRow.subtitle : undefined;\n return [\n withMeta(\n {\n id: String(baseId),\n name: baseName,\n value: display.value,\n suffix: display.suffix,\n indicator: showPct ? percentLabel(dataRow.percentage) : undefined,\n subtitle,\n label,\n },\n kpi,\n ),\n ];\n }\n\n if (type === 'comparison') {\n const current = asRecord(dataRow.current);\n const previous = asRecord(dataRow.previous);\n const display = formatDisplay(current?.[fieldKey] ?? current?.[column]);\n const prevRaw = previous?.[fieldKey] ?? previous?.[column];\n const subtitle =\n prevRaw != null && prevRaw !== '' ? `vs ${formatKpiValue(prevRaw as number | string)}` : undefined;\n return [\n withMeta(\n {\n id: String(baseId),\n name: baseName,\n value: display.value,\n suffix: display.suffix,\n indicator: showPct ? percentLabel(dataRow.percentage) : undefined,\n subtitle,\n label,\n },\n kpi,\n ),\n ];\n }\n\n if (type === 'single_value') {\n const valueBucket = asRecord(dataRow.value) ?? dataRow;\n const raw =\n valueBucket[fieldKey] ?? valueBucket[column] ?? Object.values(valueBucket)[0];\n const display = formatDisplay(raw);\n return [\n withMeta(\n {\n id: String(baseId),\n name: baseName,\n value: display.value,\n suffix: display.suffix,\n indicator: showPct ? percentLabel(dataRow.percentage) : undefined,\n label,\n },\n kpi,\n ),\n ];\n }\n\n const cards: KpiCardModel[] = [];\n for (const key of Object.keys(dataRow)) {\n if (key === 'percentage' || key === 'value') continue;\n const local = asRecord(dataRow[key]);\n if (!local) continue;\n const subtitle = kpi.groupBy\n ? String(local[kpi.groupBy] ?? key)\n : HIGH_LOW_TYPES.has(type)\n ? key\n : undefined;\n const raw = local[fieldKey] ?? local[column];\n const display = formatDisplay(raw);\n cards.push(\n withMeta(\n {\n id: `${baseId}-${key}`,\n name: baseName,\n value: display.value,\n suffix: display.suffix,\n indicator: showPct ? percentLabel(local.percentage) : undefined,\n subtitle,\n label,\n },\n kpi,\n ),\n );\n }\n\n return cards;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
/** Port of FuseDash `formatKpiValue` (client/libs/shared/utils/kpi.ts). */
|
|
2
2
|
export declare function formatKpiValue(value: number | string, decimals?: number): string;
|
|
3
|
+
/** Split compact scientific notation so the exponent can render as a suffix. */
|
|
4
|
+
export declare function splitFormattedKpiValue(formatted: string): {
|
|
5
|
+
value: string;
|
|
6
|
+
suffix: string;
|
|
7
|
+
};
|
|
3
8
|
//# sourceMappingURL=format.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/lib/format.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CA4B3E"}
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/lib/format.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CA4B3E;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAOA"}
|
|
@@ -18,7 +18,16 @@ function formatKpiValue(value, decimals = 2) {
|
|
|
18
18
|
const formattedModifiedValue = parseFloat(modifiedValue.toFixed(decimals)).toString();
|
|
19
19
|
return `${formattedModifiedValue}×10⁻${power}`;
|
|
20
20
|
}
|
|
21
|
+
function splitFormattedKpiValue(formatted) {
|
|
22
|
+
if (!formatted.includes("×10⁻")) return { value: formatted, suffix: "" };
|
|
23
|
+
const [valuePart, suffixPart] = formatted.split("×10⁻");
|
|
24
|
+
return {
|
|
25
|
+
value: valuePart ?? formatted,
|
|
26
|
+
suffix: suffixPart != null ? `×10⁻${suffixPart}` : ""
|
|
27
|
+
};
|
|
28
|
+
}
|
|
21
29
|
export {
|
|
22
|
-
formatKpiValue
|
|
30
|
+
formatKpiValue,
|
|
31
|
+
splitFormattedKpiValue
|
|
23
32
|
};
|
|
24
33
|
//# sourceMappingURL=format.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sources":["../../../../src/components/kpi-widget/lib/format.ts"],"sourcesContent":["/** Port of FuseDash `formatKpiValue` (client/libs/shared/utils/kpi.ts). */\nexport function formatKpiValue(value: number | string, decimals = 2): string {\n const numericValue = Number(value);\n if (\n Number.isNaN(numericValue) ||\n numericValue === null ||\n !Number.isFinite(numericValue)\n ) {\n return '—';\n }\n\n const absValue = Math.abs(numericValue);\n\n if (absValue === 0) {\n return '0';\n }\n\n if (absValue >= 0.1) {\n return new Intl.NumberFormat('en-US', {\n notation: 'compact',\n maximumFractionDigits: decimals,\n }).format(numericValue);\n }\n\n const power = Math.ceil(Math.abs(Math.log10(absValue) / 3)) * 3;\n const modifiedValue = numericValue * 10 ** power;\n const formattedModifiedValue = parseFloat(modifiedValue.toFixed(decimals)).toString();\n\n return `${formattedModifiedValue}×10⁻${power}`;\n}\n"],"names":[],"mappings":"AACO,SAAS,eAAe,OAAwB,WAAW,GAAW;AAC3E,QAAM,eAAe,OAAO,KAAK;AACjC,MACE,OAAO,MAAM,YAAY,KACzB,iBAAiB,QACjB,CAAC,OAAO,SAAS,YAAY,GAC7B;AACA,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,KAAK,IAAI,YAAY;AAEtC,MAAI,aAAa,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,KAAK;AACnB,WAAO,IAAI,KAAK,aAAa,SAAS;AAAA,MACpC,UAAU;AAAA,MACV,uBAAuB;AAAA,IAAA,CACxB,EAAE,OAAO,YAAY;AAAA,EACxB;AAEA,QAAM,QAAQ,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,QAAQ,IAAI,CAAC,CAAC,IAAI;AAC9D,QAAM,gBAAgB,eAAe,MAAM;AAC3C,QAAM,yBAAyB,WAAW,cAAc,QAAQ,QAAQ,CAAC,EAAE,SAAA;AAE3E,SAAO,GAAG,sBAAsB,OAAO,KAAK;AAC9C;"}
|
|
1
|
+
{"version":3,"file":"format.js","sources":["../../../../src/components/kpi-widget/lib/format.ts"],"sourcesContent":["/** Port of FuseDash `formatKpiValue` (client/libs/shared/utils/kpi.ts). */\nexport function formatKpiValue(value: number | string, decimals = 2): string {\n const numericValue = Number(value);\n if (\n Number.isNaN(numericValue) ||\n numericValue === null ||\n !Number.isFinite(numericValue)\n ) {\n return '—';\n }\n\n const absValue = Math.abs(numericValue);\n\n if (absValue === 0) {\n return '0';\n }\n\n if (absValue >= 0.1) {\n return new Intl.NumberFormat('en-US', {\n notation: 'compact',\n maximumFractionDigits: decimals,\n }).format(numericValue);\n }\n\n const power = Math.ceil(Math.abs(Math.log10(absValue) / 3)) * 3;\n const modifiedValue = numericValue * 10 ** power;\n const formattedModifiedValue = parseFloat(modifiedValue.toFixed(decimals)).toString();\n\n return `${formattedModifiedValue}×10⁻${power}`;\n}\n\n/** Split compact scientific notation so the exponent can render as a suffix. */\nexport function splitFormattedKpiValue(formatted: string): {\n value: string;\n suffix: string;\n} {\n if (!formatted.includes('×10⁻')) return { value: formatted, suffix: '' };\n const [valuePart, suffixPart] = formatted.split('×10⁻');\n return {\n value: valuePart ?? formatted,\n suffix: suffixPart != null ? `×10⁻${suffixPart}` : '',\n };\n}\n"],"names":[],"mappings":"AACO,SAAS,eAAe,OAAwB,WAAW,GAAW;AAC3E,QAAM,eAAe,OAAO,KAAK;AACjC,MACE,OAAO,MAAM,YAAY,KACzB,iBAAiB,QACjB,CAAC,OAAO,SAAS,YAAY,GAC7B;AACA,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,KAAK,IAAI,YAAY;AAEtC,MAAI,aAAa,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,KAAK;AACnB,WAAO,IAAI,KAAK,aAAa,SAAS;AAAA,MACpC,UAAU;AAAA,MACV,uBAAuB;AAAA,IAAA,CACxB,EAAE,OAAO,YAAY;AAAA,EACxB;AAEA,QAAM,QAAQ,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,QAAQ,IAAI,CAAC,CAAC,IAAI;AAC9D,QAAM,gBAAgB,eAAe,MAAM;AAC3C,QAAM,yBAAyB,WAAW,cAAc,QAAQ,QAAQ,CAAC,EAAE,SAAA;AAE3E,SAAO,GAAG,sBAAsB,OAAO,KAAK;AAC9C;AAGO,SAAS,uBAAuB,WAGrC;AACA,MAAI,CAAC,UAAU,SAAS,MAAM,UAAU,EAAE,OAAO,WAAW,QAAQ,GAAA;AACpE,QAAM,CAAC,WAAW,UAAU,IAAI,UAAU,MAAM,MAAM;AACtD,SAAO;AAAA,IACL,OAAO,aAAa;AAAA,IACpB,QAAQ,cAAc,OAAO,OAAO,UAAU,KAAK;AAAA,EAAA;AAEvD;"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export declare const MIN_KPI_CELL_WIDTH = 90;
|
|
2
|
+
export declare const ADVANCED_KPI_VALUE_PERCENT = 25;
|
|
3
|
+
export declare const ADVANCED_KPI_CHART_PERCENT = 75;
|
|
4
|
+
export type AdvancedSplitLayout = 'horizontal' | 'stacked';
|
|
5
|
+
/** Port of client `getAdvancedSplitLayout` (KpiFlexibleComponent/styles). */
|
|
6
|
+
export declare function getAdvancedSplitLayout(width: number, height: number, previousLayout?: AdvancedSplitLayout): AdvancedSplitLayout;
|
|
2
7
|
export declare const getPreferredKpiColumnCounts: (kpiCount: number) => number[];
|
|
3
8
|
export declare const getKpiGridColumns: (containerWidth: number, kpiCount: number, minCellWidth?: number) => number;
|
|
4
9
|
export type KpiGridScrollAxis = 'vertical' | 'horizontal' | 'both';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/lib/grid.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,eAAO,MAAM,2BAA2B,GAAI,UAAU,MAAM,KAAG,MAAM,EAcpE,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,gBAAgB,MAAM,EACtB,UAAU,MAAM,EAChB,eAAc,MAA2B,KACxC,MAWF,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAEnE,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,EACnB,UAAU,MAAM,KACf,iBAUF,CAAC"}
|
|
1
|
+
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/lib/grid.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,SAAS,CAAC;AAE3D,6EAA6E;AAC7E,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,mBAAkC,GACjD,mBAAmB,CAkBrB;AAED,eAAO,MAAM,2BAA2B,GAAI,UAAU,MAAM,KAAG,MAAM,EAcpE,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,gBAAgB,MAAM,EACtB,UAAU,MAAM,EAChB,eAAc,MAA2B,KACxC,MAWF,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAEnE,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,EACnB,UAAU,MAAM,KACf,iBAUF,CAAC"}
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
const MIN_KPI_CELL_WIDTH = 90;
|
|
2
|
+
const ADVANCED_KPI_VALUE_PERCENT = 25;
|
|
3
|
+
function getAdvancedSplitLayout(width, height, previousLayout = "horizontal") {
|
|
4
|
+
if (width <= 0 || height <= 0) return previousLayout;
|
|
5
|
+
const valueColWidth = width * (ADVANCED_KPI_VALUE_PERCENT / 100);
|
|
6
|
+
const aspectRatio = height / width;
|
|
7
|
+
if (previousLayout === "stacked") {
|
|
8
|
+
if (valueColWidth >= 64 && width >= 200 && aspectRatio <= 1.45) {
|
|
9
|
+
return "horizontal";
|
|
10
|
+
}
|
|
11
|
+
return "stacked";
|
|
12
|
+
}
|
|
13
|
+
if (valueColWidth < 52 || width < 170 || aspectRatio > 1.62) {
|
|
14
|
+
return "stacked";
|
|
15
|
+
}
|
|
16
|
+
return "horizontal";
|
|
17
|
+
}
|
|
2
18
|
const getPreferredKpiColumnCounts = (kpiCount) => {
|
|
3
19
|
if (kpiCount <= 1) return [1];
|
|
4
20
|
const divisors = [];
|
|
@@ -30,7 +46,9 @@ const getKpiGridScrollAxis = (gridColumns, kpiCount) => {
|
|
|
30
46
|
return "both";
|
|
31
47
|
};
|
|
32
48
|
export {
|
|
49
|
+
ADVANCED_KPI_VALUE_PERCENT,
|
|
33
50
|
MIN_KPI_CELL_WIDTH,
|
|
51
|
+
getAdvancedSplitLayout,
|
|
34
52
|
getKpiGridColumns,
|
|
35
53
|
getKpiGridScrollAxis,
|
|
36
54
|
getPreferredKpiColumnCounts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.js","sources":["../../../../src/components/kpi-widget/lib/grid.ts"],"sourcesContent":["export const MIN_KPI_CELL_WIDTH = 90;\n\nexport const getPreferredKpiColumnCounts = (kpiCount: number): number[] => {\n if (kpiCount <= 1) return [1];\n\n const divisors: number[] = [];\n for (let i = kpiCount; i >= 1; i -= 1) {\n if (kpiCount % i === 0) divisors.push(i);\n }\n\n if (kpiCount % 2 !== 0 && kpiCount > 2 && !divisors.includes(2)) {\n divisors.push(2);\n divisors.sort((a, b) => b - a);\n }\n\n return divisors;\n};\n\nexport const getKpiGridColumns = (\n containerWidth: number,\n kpiCount: number,\n minCellWidth: number = MIN_KPI_CELL_WIDTH,\n): number => {\n if (kpiCount <= 1) return 1;\n if (containerWidth <= 0) return 1;\n\n const maxColumns = Math.max(\n 1,\n Math.min(kpiCount, Math.floor(containerWidth / minCellWidth)),\n );\n\n const preferred = getPreferredKpiColumnCounts(kpiCount);\n return preferred.find((cols) => cols <= maxColumns) ?? 1;\n};\n\nexport type KpiGridScrollAxis = 'vertical' | 'horizontal' | 'both';\n\nexport const getKpiGridScrollAxis = (\n gridColumns: number,\n kpiCount: number,\n): KpiGridScrollAxis => {\n if (kpiCount <= 1) return 'vertical';\n\n const columns = Math.max(1, gridColumns);\n const gridRows = Math.ceil(kpiCount / columns);\n\n if (columns === 1) return 'vertical';\n if (gridRows === 1) return 'horizontal';\n\n return 'both';\n};\n"],"names":[],"mappings":"AAAO,MAAM,qBAAqB;AAE3B,MAAM,8BAA8B,CAAC,aAA+B;AACzE,MAAI,YAAY,EAAG,QAAO,CAAC,CAAC;AAE5B,QAAM,WAAqB,CAAA;AAC3B,WAAS,IAAI,UAAU,KAAK,GAAG,KAAK,GAAG;AACrC,QAAI,WAAW,MAAM,EAAG,UAAS,KAAK,CAAC;AAAA,EACzC;AAEA,MAAI,WAAW,MAAM,KAAK,WAAW,KAAK,CAAC,SAAS,SAAS,CAAC,GAAG;AAC/D,aAAS,KAAK,CAAC;AACf,aAAS,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,EAC/B;AAEA,SAAO;AACT;AAEO,MAAM,oBAAoB,CAC/B,gBACA,UACA,eAAuB,uBACZ;AACX,MAAI,YAAY,EAAG,QAAO;AAC1B,MAAI,kBAAkB,EAAG,QAAO;AAEhC,QAAM,aAAa,KAAK;AAAA,IACtB;AAAA,IACA,KAAK,IAAI,UAAU,KAAK,MAAM,iBAAiB,YAAY,CAAC;AAAA,EAAA;AAG9D,QAAM,YAAY,4BAA4B,QAAQ;AACtD,SAAO,UAAU,KAAK,CAAC,SAAS,QAAQ,UAAU,KAAK;AACzD;AAIO,MAAM,uBAAuB,CAClC,aACA,aACsB;AACtB,MAAI,YAAY,EAAG,QAAO;AAE1B,QAAM,UAAU,KAAK,IAAI,GAAG,WAAW;AACvC,QAAM,WAAW,KAAK,KAAK,WAAW,OAAO;AAE7C,MAAI,YAAY,EAAG,QAAO;AAC1B,MAAI,aAAa,EAAG,QAAO;AAE3B,SAAO;AACT;"}
|
|
1
|
+
{"version":3,"file":"grid.js","sources":["../../../../src/components/kpi-widget/lib/grid.ts"],"sourcesContent":["export const MIN_KPI_CELL_WIDTH = 90;\n\nexport const ADVANCED_KPI_VALUE_PERCENT = 25;\nexport const ADVANCED_KPI_CHART_PERCENT = 75;\n\nexport type AdvancedSplitLayout = 'horizontal' | 'stacked';\n\n/** Port of client `getAdvancedSplitLayout` (KpiFlexibleComponent/styles). */\nexport function getAdvancedSplitLayout(\n width: number,\n height: number,\n previousLayout: AdvancedSplitLayout = 'horizontal',\n): AdvancedSplitLayout {\n if (width <= 0 || height <= 0) return previousLayout;\n\n const valueColWidth = width * (ADVANCED_KPI_VALUE_PERCENT / 100);\n const aspectRatio = height / width;\n\n if (previousLayout === 'stacked') {\n if (valueColWidth >= 64 && width >= 200 && aspectRatio <= 1.45) {\n return 'horizontal';\n }\n return 'stacked';\n }\n\n if (valueColWidth < 52 || width < 170 || aspectRatio > 1.62) {\n return 'stacked';\n }\n\n return 'horizontal';\n}\n\nexport const getPreferredKpiColumnCounts = (kpiCount: number): number[] => {\n if (kpiCount <= 1) return [1];\n\n const divisors: number[] = [];\n for (let i = kpiCount; i >= 1; i -= 1) {\n if (kpiCount % i === 0) divisors.push(i);\n }\n\n if (kpiCount % 2 !== 0 && kpiCount > 2 && !divisors.includes(2)) {\n divisors.push(2);\n divisors.sort((a, b) => b - a);\n }\n\n return divisors;\n};\n\nexport const getKpiGridColumns = (\n containerWidth: number,\n kpiCount: number,\n minCellWidth: number = MIN_KPI_CELL_WIDTH,\n): number => {\n if (kpiCount <= 1) return 1;\n if (containerWidth <= 0) return 1;\n\n const maxColumns = Math.max(\n 1,\n Math.min(kpiCount, Math.floor(containerWidth / minCellWidth)),\n );\n\n const preferred = getPreferredKpiColumnCounts(kpiCount);\n return preferred.find((cols) => cols <= maxColumns) ?? 1;\n};\n\nexport type KpiGridScrollAxis = 'vertical' | 'horizontal' | 'both';\n\nexport const getKpiGridScrollAxis = (\n gridColumns: number,\n kpiCount: number,\n): KpiGridScrollAxis => {\n if (kpiCount <= 1) return 'vertical';\n\n const columns = Math.max(1, gridColumns);\n const gridRows = Math.ceil(kpiCount / columns);\n\n if (columns === 1) return 'vertical';\n if (gridRows === 1) return 'horizontal';\n\n return 'both';\n};\n"],"names":[],"mappings":"AAAO,MAAM,qBAAqB;AAE3B,MAAM,6BAA6B;AAMnC,SAAS,uBACd,OACA,QACA,iBAAsC,cACjB;AACrB,MAAI,SAAS,KAAK,UAAU,EAAG,QAAO;AAEtC,QAAM,gBAAgB,SAAS,6BAA6B;AAC5D,QAAM,cAAc,SAAS;AAE7B,MAAI,mBAAmB,WAAW;AAChC,QAAI,iBAAiB,MAAM,SAAS,OAAO,eAAe,MAAM;AAC9D,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,MAAM,QAAQ,OAAO,cAAc,MAAM;AAC3D,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,MAAM,8BAA8B,CAAC,aAA+B;AACzE,MAAI,YAAY,EAAG,QAAO,CAAC,CAAC;AAE5B,QAAM,WAAqB,CAAA;AAC3B,WAAS,IAAI,UAAU,KAAK,GAAG,KAAK,GAAG;AACrC,QAAI,WAAW,MAAM,EAAG,UAAS,KAAK,CAAC;AAAA,EACzC;AAEA,MAAI,WAAW,MAAM,KAAK,WAAW,KAAK,CAAC,SAAS,SAAS,CAAC,GAAG;AAC/D,aAAS,KAAK,CAAC;AACf,aAAS,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,EAC/B;AAEA,SAAO;AACT;AAEO,MAAM,oBAAoB,CAC/B,gBACA,UACA,eAAuB,uBACZ;AACX,MAAI,YAAY,EAAG,QAAO;AAC1B,MAAI,kBAAkB,EAAG,QAAO;AAEhC,QAAM,aAAa,KAAK;AAAA,IACtB;AAAA,IACA,KAAK,IAAI,UAAU,KAAK,MAAM,iBAAiB,YAAY,CAAC;AAAA,EAAA;AAG9D,QAAM,YAAY,4BAA4B,QAAQ;AACtD,SAAO,UAAU,KAAK,CAAC,SAAS,QAAQ,UAAU,KAAK;AACzD;AAIO,MAAM,uBAAuB,CAClC,aACA,aACsB;AACtB,MAAI,YAAY,EAAG,QAAO;AAE1B,QAAM,UAAU,KAAK,IAAI,GAAG,WAAW;AACvC,QAAM,WAAW,KAAK,KAAK,WAAW,OAAO;AAE7C,MAAI,YAAY,EAAG,QAAO;AAC1B,MAAI,aAAa,EAAG,QAAO;AAE3B,SAAO;AACT;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { normalizeKpiData } from './normalize.js';
|
|
2
|
-
export { extractCardsFromKpi } from './extract.js';
|
|
3
|
-
export { formatKpiValue } from './format.js';
|
|
4
|
-
export { getKpiGridColumns, getKpiGridScrollAxis, MIN_KPI_CELL_WIDTH, type KpiGridScrollAxis, } from './grid.js';
|
|
5
|
-
export type { KpiCardModel, KpiValueLabel, KpiWidgetData, KpiWidgetModel, RawKpiItem, } from './types.js';
|
|
1
|
+
export { normalizeKpiData, extractGroupId } from './normalize.js';
|
|
2
|
+
export { extractCardsFromKpi, isAdvancedKpiItem, visualisationChartType } from './extract.js';
|
|
3
|
+
export { formatKpiValue, splitFormattedKpiValue } from './format.js';
|
|
4
|
+
export { getKpiGridColumns, getKpiGridScrollAxis, getAdvancedSplitLayout, MIN_KPI_CELL_WIDTH, ADVANCED_KPI_VALUE_PERCENT, ADVANCED_KPI_CHART_PERCENT, type KpiGridScrollAxis, type AdvancedSplitLayout, } from './grid.js';
|
|
5
|
+
export type { KpiCardModel, KpiCardRole, KpiStatusBadge, KpiStatusVariant, KpiValueLabel, KpiWidgetData, KpiWidgetLayout, KpiWidgetModel, RawKpiItem, RawKpiVisualisation, } from './types.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,YAAY,EACZ,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,EACV,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { KpiWidgetData, KpiWidgetModel } from './types.js';
|
|
2
|
+
/** Client `extractGroupId` — groupName is `{label}-group-kpi-ids-{id}`. */
|
|
3
|
+
export declare function extractGroupId(value?: string | null): string;
|
|
2
4
|
/** Normalize chat / FuseDash KPI payloads into display cards. */
|
|
3
5
|
export declare function normalizeKpiData(input: KpiWidgetData): KpiWidgetModel;
|
|
4
6
|
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/lib/normalize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAc,MAAM,YAAY,CAAC;AAiB5E,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/lib/normalize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAc,MAAM,YAAY,CAAC;AAiB5E,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE5D;AAgFD,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAyBrE"}
|
|
@@ -1,34 +1,95 @@
|
|
|
1
|
-
import { extractCardsFromKpi } from "./extract.js";
|
|
2
|
-
const EMPTY = { cards: [] };
|
|
1
|
+
import { isAdvancedKpiItem, extractCardsFromKpi } from "./extract.js";
|
|
2
|
+
const EMPTY = { layout: "empty", cards: [], supporting: [] };
|
|
3
3
|
function isRawKpiItem(input) {
|
|
4
|
-
return input != null && typeof input === "object" && !Array.isArray(input) && ("data" in input || "column" in input);
|
|
4
|
+
return input != null && typeof input === "object" && !Array.isArray(input) && ("data" in input || "column" in input || "type" in input);
|
|
5
5
|
}
|
|
6
|
-
function
|
|
7
|
-
return
|
|
6
|
+
function isNormalizedModel(input) {
|
|
7
|
+
return Array.isArray(input.cards) && "layout" in input;
|
|
8
|
+
}
|
|
9
|
+
function extractGroupId(value) {
|
|
10
|
+
var _a;
|
|
11
|
+
return ((_a = value == null ? void 0 : value.split("-group-kpi-ids-")) == null ? void 0 : _a[0]) ?? "";
|
|
12
|
+
}
|
|
13
|
+
function sortItems(items) {
|
|
14
|
+
return [...items].sort((a, b) => {
|
|
15
|
+
if (isAdvancedKpiItem(a) && !isAdvancedKpiItem(b)) return -1;
|
|
16
|
+
if (!isAdvancedKpiItem(a) && isAdvancedKpiItem(b)) return 1;
|
|
17
|
+
return 0;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function footerFrom(items) {
|
|
21
|
+
const first = items[0];
|
|
22
|
+
return {
|
|
23
|
+
target: first == null ? void 0 : first.target,
|
|
24
|
+
showTimestamp: first == null ? void 0 : first.showTimestamp,
|
|
25
|
+
updatedAt: first == null ? void 0 : first.updatedAt
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function sectionTitle(items, advanced, topName) {
|
|
29
|
+
var _a, _b;
|
|
30
|
+
if (advanced) return void 0;
|
|
31
|
+
if (items.length === 1) return (_a = items[0]) == null ? void 0 : _a.name;
|
|
32
|
+
const grouped = extractGroupId((_b = items[0]) == null ? void 0 : _b.groupName);
|
|
33
|
+
if (grouped) return grouped;
|
|
34
|
+
return (topName == null ? void 0 : topName.trim()) || void 0;
|
|
35
|
+
}
|
|
36
|
+
function buildFromItems(items, topName) {
|
|
37
|
+
if (!items.length) return EMPTY;
|
|
38
|
+
const sorted = sortItems(items);
|
|
39
|
+
const advancedIndex = sorted.findIndex(isAdvancedKpiItem);
|
|
40
|
+
const advanced = advancedIndex >= 0;
|
|
41
|
+
const footer = footerFrom(sorted);
|
|
42
|
+
if (advanced) {
|
|
43
|
+
const mainItem = sorted[advancedIndex];
|
|
44
|
+
const mainCards = extractCardsFromKpi(mainItem);
|
|
45
|
+
const main = mainCards[0];
|
|
46
|
+
const supporting = sorted.filter((_, i) => i !== advancedIndex).flatMap((item) => extractCardsFromKpi(item));
|
|
47
|
+
const viz = mainItem.visualisation && typeof mainItem.visualisation === "object" ? mainItem.visualisation : null;
|
|
48
|
+
return {
|
|
49
|
+
layout: "advanced",
|
|
50
|
+
title: sectionTitle(sorted, true, topName),
|
|
51
|
+
cards: main ? [main, ...supporting] : supporting,
|
|
52
|
+
main,
|
|
53
|
+
supporting,
|
|
54
|
+
visualisation: viz,
|
|
55
|
+
...footer
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const cards = sorted.flatMap((item) => extractCardsFromKpi(item));
|
|
59
|
+
const hideNames = sorted.length === 1 && cards.length >= 1;
|
|
60
|
+
const titledCards = hideNames ? cards.map((card) => ({ ...card, hideName: true })) : cards;
|
|
61
|
+
const layout = titledCards.length === 0 ? "empty" : titledCards.length === 1 ? "single" : "grid";
|
|
62
|
+
return {
|
|
63
|
+
layout,
|
|
64
|
+
title: sectionTitle(sorted, false, topName),
|
|
65
|
+
cards: titledCards,
|
|
66
|
+
supporting: [],
|
|
67
|
+
...footer
|
|
68
|
+
};
|
|
8
69
|
}
|
|
9
70
|
function normalizeKpiData(input) {
|
|
10
71
|
if (!input) return EMPTY;
|
|
11
72
|
if (Array.isArray(input)) {
|
|
12
73
|
if (!input.length) return EMPTY;
|
|
13
|
-
return
|
|
74
|
+
return buildFromItems(input);
|
|
14
75
|
}
|
|
15
76
|
if (typeof input === "object") {
|
|
16
|
-
if (
|
|
17
|
-
|
|
18
|
-
}
|
|
77
|
+
if (isNormalizedModel(input)) return input;
|
|
78
|
+
const topName = typeof input.name === "string" ? input.name : void 0;
|
|
19
79
|
if (Array.isArray(input.items)) {
|
|
20
|
-
return
|
|
80
|
+
return buildFromItems(input.items, topName);
|
|
21
81
|
}
|
|
22
82
|
if (Array.isArray(input.kpis)) {
|
|
23
|
-
return
|
|
83
|
+
return buildFromItems(input.kpis, topName);
|
|
24
84
|
}
|
|
25
85
|
if (isRawKpiItem(input)) {
|
|
26
|
-
return
|
|
86
|
+
return buildFromItems([input], topName);
|
|
27
87
|
}
|
|
28
88
|
}
|
|
29
89
|
return EMPTY;
|
|
30
90
|
}
|
|
31
91
|
export {
|
|
92
|
+
extractGroupId,
|
|
32
93
|
normalizeKpiData
|
|
33
94
|
};
|
|
34
95
|
//# sourceMappingURL=normalize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sources":["../../../../src/components/kpi-widget/lib/normalize.ts"],"sourcesContent":["import { extractCardsFromKpi } from './extract.js';\nimport type { KpiWidgetData, KpiWidgetModel, RawKpiItem } from './types.js';\n\nconst EMPTY: KpiWidgetModel = { cards: [] };\n\nfunction isRawKpiItem(input: unknown): input is RawKpiItem {\n return (\n input != null &&\n typeof input === 'object' &&\n !Array.isArray(input) &&\n ('data' in (input as object) || 'column' in (input as object))\n );\n}\n\nfunction
|
|
1
|
+
{"version":3,"file":"normalize.js","sources":["../../../../src/components/kpi-widget/lib/normalize.ts"],"sourcesContent":["import { extractCardsFromKpi, isAdvancedKpiItem } from './extract.js';\nimport type { KpiWidgetData, KpiWidgetModel, RawKpiItem } from './types.js';\n\nconst EMPTY: KpiWidgetModel = { layout: 'empty', cards: [], supporting: [] };\n\nfunction isRawKpiItem(input: unknown): input is RawKpiItem {\n return (\n input != null &&\n typeof input === 'object' &&\n !Array.isArray(input) &&\n ('data' in (input as object) || 'column' in (input as object) || 'type' in (input as object))\n );\n}\n\nfunction isNormalizedModel(input: object): input is KpiWidgetModel {\n return Array.isArray((input as KpiWidgetModel).cards) && 'layout' in input;\n}\n\n/** Client `extractGroupId` — groupName is `{label}-group-kpi-ids-{id}`. */\nexport function extractGroupId(value?: string | null): string {\n return value?.split('-group-kpi-ids-')?.[0] ?? '';\n}\n\nfunction sortItems(items: RawKpiItem[]): RawKpiItem[] {\n return [...items].sort((a, b) => {\n if (isAdvancedKpiItem(a) && !isAdvancedKpiItem(b)) return -1;\n if (!isAdvancedKpiItem(a) && isAdvancedKpiItem(b)) return 1;\n return 0;\n });\n}\n\nfunction footerFrom(items: RawKpiItem[]): Pick<\n KpiWidgetModel,\n 'target' | 'showTimestamp' | 'updatedAt'\n> {\n const first = items[0];\n return {\n target: first?.target,\n showTimestamp: first?.showTimestamp,\n updatedAt: first?.updatedAt,\n };\n}\n\nfunction sectionTitle(\n items: RawKpiItem[],\n advanced: boolean,\n topName?: string,\n): string | undefined {\n if (advanced) return undefined;\n if (items.length === 1) return items[0]?.name;\n const grouped = extractGroupId(items[0]?.groupName);\n if (grouped) return grouped;\n return topName?.trim() || undefined;\n}\n\nfunction buildFromItems(items: RawKpiItem[], topName?: string): KpiWidgetModel {\n if (!items.length) return EMPTY;\n const sorted = sortItems(items);\n const advancedIndex = sorted.findIndex(isAdvancedKpiItem);\n const advanced = advancedIndex >= 0;\n const footer = footerFrom(sorted);\n\n if (advanced) {\n const mainItem = sorted[advancedIndex]!;\n const mainCards = extractCardsFromKpi(mainItem);\n const main = mainCards[0];\n const supporting = sorted\n .filter((_, i) => i !== advancedIndex)\n .flatMap((item) => extractCardsFromKpi(item));\n const viz =\n mainItem.visualisation && typeof mainItem.visualisation === 'object'\n ? (mainItem.visualisation as Record<string, unknown>)\n : null;\n return {\n layout: 'advanced',\n title: sectionTitle(sorted, true, topName),\n cards: main ? [main, ...supporting] : supporting,\n main,\n supporting,\n visualisation: viz,\n ...footer,\n };\n }\n\n const cards = sorted.flatMap((item) => extractCardsFromKpi(item));\n const hideNames = sorted.length === 1 && cards.length >= 1;\n const titledCards = hideNames\n ? cards.map((card) => ({ ...card, hideName: true }))\n : cards;\n const layout: KpiWidgetModel['layout'] =\n titledCards.length === 0 ? 'empty' : titledCards.length === 1 ? 'single' : 'grid';\n\n return {\n layout,\n title: sectionTitle(sorted, false, topName),\n cards: titledCards,\n supporting: [],\n ...footer,\n };\n}\n\n/** Normalize chat / FuseDash KPI payloads into display cards. */\nexport function normalizeKpiData(input: KpiWidgetData): KpiWidgetModel {\n if (!input) return EMPTY;\n\n if (Array.isArray(input)) {\n if (!input.length) return EMPTY;\n return buildFromItems(input);\n }\n\n if (typeof input === 'object') {\n if (isNormalizedModel(input)) return input;\n const topName = typeof (input as { name?: unknown }).name === 'string'\n ? (input as { name: string }).name\n : undefined;\n if (Array.isArray((input as { items?: RawKpiItem[] }).items)) {\n return buildFromItems((input as { items: RawKpiItem[] }).items, topName);\n }\n if (Array.isArray((input as { kpis?: RawKpiItem[] }).kpis)) {\n return buildFromItems((input as { kpis: RawKpiItem[] }).kpis, topName);\n }\n if (isRawKpiItem(input)) {\n return buildFromItems([input], topName);\n }\n }\n\n return EMPTY;\n}\n"],"names":[],"mappings":";AAGA,MAAM,QAAwB,EAAE,QAAQ,SAAS,OAAO,CAAA,GAAI,YAAY,GAAC;AAEzE,SAAS,aAAa,OAAqC;AACzD,SACE,SAAS,QACT,OAAO,UAAU,YACjB,CAAC,MAAM,QAAQ,KAAK,MACnB,UAAW,SAAoB,YAAa,SAAoB,UAAW;AAEhF;AAEA,SAAS,kBAAkB,OAAwC;AACjE,SAAO,MAAM,QAAS,MAAyB,KAAK,KAAK,YAAY;AACvE;AAGO,SAAS,eAAe,OAA+B;;AAC5D,WAAO,oCAAO,MAAM,uBAAb,mBAAkC,OAAM;AACjD;AAEA,SAAS,UAAU,OAAmC;AACpD,SAAO,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM;AAC/B,QAAI,kBAAkB,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAG,QAAO;AAC1D,QAAI,CAAC,kBAAkB,CAAC,KAAK,kBAAkB,CAAC,EAAG,QAAO;AAC1D,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,WAAW,OAGlB;AACA,QAAM,QAAQ,MAAM,CAAC;AACrB,SAAO;AAAA,IACL,QAAQ,+BAAO;AAAA,IACf,eAAe,+BAAO;AAAA,IACtB,WAAW,+BAAO;AAAA,EAAA;AAEtB;AAEA,SAAS,aACP,OACA,UACA,SACoB;;AACpB,MAAI,SAAU,QAAO;AACrB,MAAI,MAAM,WAAW,EAAG,SAAO,WAAM,CAAC,MAAP,mBAAU;AACzC,QAAM,UAAU,gBAAe,WAAM,CAAC,MAAP,mBAAU,SAAS;AAClD,MAAI,QAAS,QAAO;AACpB,UAAO,mCAAS,WAAU;AAC5B;AAEA,SAAS,eAAe,OAAqB,SAAkC;AAC7E,MAAI,CAAC,MAAM,OAAQ,QAAO;AAC1B,QAAM,SAAS,UAAU,KAAK;AAC9B,QAAM,gBAAgB,OAAO,UAAU,iBAAiB;AACxD,QAAM,WAAW,iBAAiB;AAClC,QAAM,SAAS,WAAW,MAAM;AAEhC,MAAI,UAAU;AACZ,UAAM,WAAW,OAAO,aAAa;AACrC,UAAM,YAAY,oBAAoB,QAAQ;AAC9C,UAAM,OAAO,UAAU,CAAC;AACxB,UAAM,aAAa,OAChB,OAAO,CAAC,GAAG,MAAM,MAAM,aAAa,EACpC,QAAQ,CAAC,SAAS,oBAAoB,IAAI,CAAC;AAC9C,UAAM,MACJ,SAAS,iBAAiB,OAAO,SAAS,kBAAkB,WACvD,SAAS,gBACV;AACN,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO,aAAa,QAAQ,MAAM,OAAO;AAAA,MACzC,OAAO,OAAO,CAAC,MAAM,GAAG,UAAU,IAAI;AAAA,MACtC;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf,GAAG;AAAA,IAAA;AAAA,EAEP;AAEA,QAAM,QAAQ,OAAO,QAAQ,CAAC,SAAS,oBAAoB,IAAI,CAAC;AAChE,QAAM,YAAY,OAAO,WAAW,KAAK,MAAM,UAAU;AACzD,QAAM,cAAc,YAChB,MAAM,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,UAAU,KAAA,EAAO,IACjD;AACJ,QAAM,SACJ,YAAY,WAAW,IAAI,UAAU,YAAY,WAAW,IAAI,WAAW;AAE7E,SAAO;AAAA,IACL;AAAA,IACA,OAAO,aAAa,QAAQ,OAAO,OAAO;AAAA,IAC1C,OAAO;AAAA,IACP,YAAY,CAAA;AAAA,IACZ,GAAG;AAAA,EAAA;AAEP;AAGO,SAAS,iBAAiB,OAAsC;AACrE,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,QAAI,CAAC,MAAM,OAAQ,QAAO;AAC1B,WAAO,eAAe,KAAK;AAAA,EAC7B;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,kBAAkB,KAAK,EAAG,QAAO;AACrC,UAAM,UAAU,OAAQ,MAA6B,SAAS,WACzD,MAA2B,OAC5B;AACJ,QAAI,MAAM,QAAS,MAAmC,KAAK,GAAG;AAC5D,aAAO,eAAgB,MAAkC,OAAO,OAAO;AAAA,IACzE;AACA,QAAI,MAAM,QAAS,MAAkC,IAAI,GAAG;AAC1D,aAAO,eAAgB,MAAiC,MAAM,OAAO;AAAA,IACvE;AACA,QAAI,aAAa,KAAK,GAAG;AACvB,aAAO,eAAe,CAAC,KAAK,GAAG,OAAO;AAAA,IACxC;AAAA,EACF;AAEA,SAAO;AACT;"}
|