@fusedashlabs/widgets 0.3.1 → 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 +22 -0
- package/README.md +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 +17 -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.js +1 -1
- package/dist/components/donut-chart/element/ui9000-donut-chart.js.map +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 +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/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/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 +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +73 -39
- package/dist/index.js.map +1 -1
- package/dist/lazy/index.d.ts +4 -2
- package/dist/lazy/index.d.ts.map +1 -1
- package/dist/lazy/index.js +24 -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/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 +28 -0
- package/dist/node_modules/lit-html/directive.js.map +1 -0
- package/dist/node_modules/lit-html/directives/style-map.js +37 -0
- package/dist/node_modules/lit-html/directives/style-map.js.map +1 -0
- package/dist/node_modules/lit-html/lit-html.js +231 -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/chart-helpers.d.ts +4 -6
- package/dist/utils/chart-helpers.d.ts.map +1 -1
- package/dist/utils/chart-helpers.js +16 -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 +65 -52
- package/dist/utils/fusedash-visual.d.ts.map +1 -1
- package/dist/utils/fusedash-visual.js +48 -29
- package/dist/utils/fusedash-visual.js.map +1 -1
- package/package.json +38 -11
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui9000-matrix-chart.d.ts","sourceRoot":"","sources":["../../../../src/components/matrix-chart/element/ui9000-matrix-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAoB7F,qBACa,iBAAkB,SAAQ,kBAAkB;IACvD,OAAgB,MAAM,4BAAoC;IAG1D,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,OAAO,CAAC,QAAQ,CAMA;IAGhB,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,MAAM,CAOZ;IAEO,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAM5B,YAAY,IAAI,IAAI;IAOpB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,YAAY;IAKpB,+EAA+E;IAC/E,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,IAAI;IAoEZ;;;OAGG;IACH,OAAO,CAAC,WAAW;IAoBnB,4EAA4E;IAC5E,OAAO,CAAC,mBAAmB;IAsBlB,MAAM;CAsChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,qBAAqB,EAAE,iBAAiB,CAAC;KAC1C;CACF;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { nothing, html } from "lit";
|
|
2
|
+
import { property, state, customElement } from "lit/decorators.js";
|
|
3
|
+
import { Ui9000ChartElement } from "../../../element/ui9000-chart-base.js";
|
|
4
|
+
import { readCssVar, CSS_VARS, readThemeFromElement } from "../../../context/widget-context.js";
|
|
5
|
+
import { formatValueWithUnit, axisFieldLabel } from "../../../utils/axis-units.js";
|
|
6
|
+
import { parseJsonAttr, getMatrixDimensions } from "../../../utils/chart-helpers.js";
|
|
7
|
+
import { chartPropsChanged } from "../../../utils/lit-draw.js";
|
|
8
|
+
import { matrixLayout, renderMatrixChart, matrixColorRanges } from "../render/draw.js";
|
|
9
|
+
import { matrixStyles } from "./styles.js";
|
|
10
|
+
import { normalizeMatrixData } from "../lib/normalize.js";
|
|
11
|
+
import { formatCategoryLabel, formatMatrixValue } from "../lib/format.js";
|
|
12
|
+
import { chartShellStyles } from "../../../element/chart-shell-styles.js";
|
|
13
|
+
var __defProp = Object.defineProperty;
|
|
14
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
15
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
16
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
17
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
18
|
+
if (decorator = decorators[i])
|
|
19
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
20
|
+
if (kind && result) __defProp(target, key, result);
|
|
21
|
+
return result;
|
|
22
|
+
};
|
|
23
|
+
let Ui9000MatrixChart = class extends Ui9000ChartElement {
|
|
24
|
+
constructor() {
|
|
25
|
+
super(...arguments);
|
|
26
|
+
this.showLegend = true;
|
|
27
|
+
this.showTooltip = true;
|
|
28
|
+
this._tooltip = null;
|
|
29
|
+
this._empty = false;
|
|
30
|
+
this._pinnedTopAxis = false;
|
|
31
|
+
this._raf = 0;
|
|
32
|
+
this._drawnSignature = null;
|
|
33
|
+
this._drawnModel = null;
|
|
34
|
+
this._modelJson = null;
|
|
35
|
+
this._model = {
|
|
36
|
+
cells: [],
|
|
37
|
+
xDomain: [],
|
|
38
|
+
yDomain: [],
|
|
39
|
+
rawValues: [],
|
|
40
|
+
categoryKey: "",
|
|
41
|
+
valueKey: ""
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
connectedCallback() {
|
|
45
|
+
super.connectedCallback();
|
|
46
|
+
this._resizeObserver = new ResizeObserver(() => this.scheduleDraw());
|
|
47
|
+
this._resizeObserver.observe(this);
|
|
48
|
+
}
|
|
49
|
+
disconnectedCallback() {
|
|
50
|
+
var _a;
|
|
51
|
+
(_a = this._resizeObserver) == null ? void 0 : _a.disconnect();
|
|
52
|
+
cancelAnimationFrame(this._raf);
|
|
53
|
+
super.disconnectedCallback();
|
|
54
|
+
}
|
|
55
|
+
firstUpdated() {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
for (const selector of [".widget-body", ".chart-body", ".chart-scroll"]) {
|
|
58
|
+
const el = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector(selector);
|
|
59
|
+
if (el instanceof HTMLElement) (_b = this._resizeObserver) == null ? void 0 : _b.observe(el);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
updated(changed) {
|
|
63
|
+
if (chartPropsChanged(changed)) this.scheduleDraw();
|
|
64
|
+
}
|
|
65
|
+
scheduleDraw() {
|
|
66
|
+
cancelAnimationFrame(this._raf);
|
|
67
|
+
this._raf = requestAnimationFrame(() => this.draw());
|
|
68
|
+
}
|
|
69
|
+
/** Normalizing a dense grid is not free — only redo it when `data` changes. */
|
|
70
|
+
parseData() {
|
|
71
|
+
if (this._modelJson !== this.dataJson) {
|
|
72
|
+
this._modelJson = this.dataJson;
|
|
73
|
+
this._model = normalizeMatrixData(parseJsonAttr(this.dataJson, []));
|
|
74
|
+
}
|
|
75
|
+
return this._model;
|
|
76
|
+
}
|
|
77
|
+
draw() {
|
|
78
|
+
var _a, _b, _c, _d;
|
|
79
|
+
const chartBody = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector(".chart-body");
|
|
80
|
+
const scroll = (_b = this.shadowRoot) == null ? void 0 : _b.querySelector(".chart-scroll");
|
|
81
|
+
const root = (_c = this.shadowRoot) == null ? void 0 : _c.querySelector(".chart-root");
|
|
82
|
+
const topAxis = (_d = this.shadowRoot) == null ? void 0 : _d.querySelector(".chart-top-axis");
|
|
83
|
+
if (!chartBody || !scroll || !root) return;
|
|
84
|
+
const model = this.parseData();
|
|
85
|
+
this._empty = model.cells.length === 0;
|
|
86
|
+
if (this._empty) {
|
|
87
|
+
root.replaceChildren();
|
|
88
|
+
topAxis == null ? void 0 : topAxis.replaceChildren();
|
|
89
|
+
this._pinnedTopAxis = false;
|
|
90
|
+
this._drawnSignature = null;
|
|
91
|
+
this._drawnModel = null;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const { width, margin } = getMatrixDimensions(chartBody);
|
|
95
|
+
const bodyHeight = chartBody.clientHeight || 300;
|
|
96
|
+
const viewportHeight = scroll.clientHeight || 300;
|
|
97
|
+
const themeMode = readCssVar(this, CSS_VARS.mode, "light") === "dark" ? "dark" : "light";
|
|
98
|
+
const signature = [
|
|
99
|
+
width,
|
|
100
|
+
bodyHeight,
|
|
101
|
+
viewportHeight,
|
|
102
|
+
themeMode,
|
|
103
|
+
this.showTooltip
|
|
104
|
+
].join("|");
|
|
105
|
+
if (this._drawnSignature === signature && this._drawnModel === model) return;
|
|
106
|
+
this._drawnSignature = signature;
|
|
107
|
+
this._drawnModel = model;
|
|
108
|
+
this._pinnedTopAxis = matrixLayout(model, viewportHeight, margin).separateTopAxis;
|
|
109
|
+
renderMatrixChart(root, {
|
|
110
|
+
model,
|
|
111
|
+
width,
|
|
112
|
+
height: viewportHeight,
|
|
113
|
+
bodyHeight,
|
|
114
|
+
margin,
|
|
115
|
+
theme: readThemeFromElement(this),
|
|
116
|
+
themeMode,
|
|
117
|
+
topAxisContainer: topAxis,
|
|
118
|
+
...this.axisLabelHandlers(),
|
|
119
|
+
onCellHover: this.showTooltip ? ({ cell, event }) => {
|
|
120
|
+
const rect = this.getBoundingClientRect();
|
|
121
|
+
this._tooltip = {
|
|
122
|
+
x: event.clientX - rect.left,
|
|
123
|
+
y: event.clientY - rect.top,
|
|
124
|
+
...this.tooltipRows(model, cell)
|
|
125
|
+
};
|
|
126
|
+
} : void 0,
|
|
127
|
+
onCellLeave: this.showTooltip ? () => {
|
|
128
|
+
this._tooltip = null;
|
|
129
|
+
} : void 0
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Client tooltip: the row field and its value, then the measure — each
|
|
134
|
+
* carrying the unit declared for that field in `axisDetails`.
|
|
135
|
+
*/
|
|
136
|
+
tooltipRows(model, cell) {
|
|
137
|
+
var _a, _b;
|
|
138
|
+
const rowValue = formatValueWithUnit(
|
|
139
|
+
formatCategoryLabel(cell.y),
|
|
140
|
+
(_a = model.axisDetails) == null ? void 0 : _a[model.categoryKey]
|
|
141
|
+
);
|
|
142
|
+
const value = formatValueWithUnit(
|
|
143
|
+
formatMatrixValue(cell.value),
|
|
144
|
+
(_b = model.axisDetails) == null ? void 0 : _b[model.valueKey]
|
|
145
|
+
);
|
|
146
|
+
return {
|
|
147
|
+
category: model.categoryKey ? `${axisFieldLabel(model.categoryKey, model.axisDetails)}: ${rowValue}` : rowValue,
|
|
148
|
+
value
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** FuseDash `ChartLegend legendType="palette"` — Low → High swatch ramp. */
|
|
152
|
+
renderPaletteLegend(model) {
|
|
153
|
+
if (!this.showLegend) return nothing;
|
|
154
|
+
const ranges = matrixColorRanges(model);
|
|
155
|
+
if (!ranges.length) return nothing;
|
|
156
|
+
return html`
|
|
157
|
+
<div class="palette-legend" part="legend">
|
|
158
|
+
<span>Low</span>
|
|
159
|
+
<span class="palette-swatches">
|
|
160
|
+
${ranges.map(
|
|
161
|
+
(range) => html`<span
|
|
162
|
+
class="palette-swatch"
|
|
163
|
+
style="background:${range.color}"
|
|
164
|
+
title=${`${formatMatrixValue(range.start)} – ${formatMatrixValue(range.end)}`}
|
|
165
|
+
></span>`
|
|
166
|
+
)}
|
|
167
|
+
</span>
|
|
168
|
+
<span>High</span>
|
|
169
|
+
</div>
|
|
170
|
+
`;
|
|
171
|
+
}
|
|
172
|
+
render() {
|
|
173
|
+
const model = this.parseData();
|
|
174
|
+
return html`
|
|
175
|
+
<div class="widget-shell" part="shell">
|
|
176
|
+
${this.renderShellHeader(this.headerTitle())}
|
|
177
|
+
<div class="widget-body">
|
|
178
|
+
<div class="chart-body" part="chart-body">
|
|
179
|
+
${this._empty ? nothing : this.renderPaletteLegend(model)}
|
|
180
|
+
<div
|
|
181
|
+
class="chart-top-axis"
|
|
182
|
+
part="top-axis"
|
|
183
|
+
?hidden=${!this._pinnedTopAxis}
|
|
184
|
+
></div>
|
|
185
|
+
<div class="chart-scroll" part="scroll">
|
|
186
|
+
<div
|
|
187
|
+
class="chart-root"
|
|
188
|
+
part="chart"
|
|
189
|
+
?data-hoverable=${this.showTooltip}
|
|
190
|
+
?hidden=${this._empty}
|
|
191
|
+
></div>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
${this._empty ? html`<div class="empty" part="empty">No data</div>` : nothing}
|
|
195
|
+
${this._tooltip ? html`<div
|
|
196
|
+
class="tooltip"
|
|
197
|
+
part="tooltip"
|
|
198
|
+
style="left:${this._tooltip.x}px;top:${this._tooltip.y}px"
|
|
199
|
+
>
|
|
200
|
+
<div class="name">${this._tooltip.category}</div>
|
|
201
|
+
<div>Value: ${this._tooltip.value}</div>
|
|
202
|
+
</div>` : nothing}
|
|
203
|
+
${this.renderShellLabelTooltip()}
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
`;
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
Ui9000MatrixChart.styles = [matrixStyles, chartShellStyles];
|
|
210
|
+
__decorateClass([
|
|
211
|
+
property({ type: Boolean, attribute: "show-legend" })
|
|
212
|
+
], Ui9000MatrixChart.prototype, "showLegend", 2);
|
|
213
|
+
__decorateClass([
|
|
214
|
+
property({ type: Boolean, attribute: "show-tooltip" })
|
|
215
|
+
], Ui9000MatrixChart.prototype, "showTooltip", 2);
|
|
216
|
+
__decorateClass([
|
|
217
|
+
state()
|
|
218
|
+
], Ui9000MatrixChart.prototype, "_tooltip", 2);
|
|
219
|
+
__decorateClass([
|
|
220
|
+
state()
|
|
221
|
+
], Ui9000MatrixChart.prototype, "_empty", 2);
|
|
222
|
+
__decorateClass([
|
|
223
|
+
state()
|
|
224
|
+
], Ui9000MatrixChart.prototype, "_pinnedTopAxis", 2);
|
|
225
|
+
Ui9000MatrixChart = __decorateClass([
|
|
226
|
+
customElement("ui9000-matrix-chart")
|
|
227
|
+
], Ui9000MatrixChart);
|
|
228
|
+
function registerMatrixChart() {
|
|
229
|
+
if (!customElements.get("ui9000-matrix-chart")) {
|
|
230
|
+
customElements.define("ui9000-matrix-chart", Ui9000MatrixChart);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
registerMatrixChart();
|
|
234
|
+
export {
|
|
235
|
+
Ui9000MatrixChart,
|
|
236
|
+
registerMatrixChart
|
|
237
|
+
};
|
|
238
|
+
//# sourceMappingURL=ui9000-matrix-chart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui9000-matrix-chart.js","sources":["../../../../src/components/matrix-chart/element/ui9000-matrix-chart.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport { CSS_VARS, readCssVar, readThemeFromElement } from '../../../context/widget-context.js';\nimport { axisFieldLabel, formatValueWithUnit } from '../../../utils/axis-units.js';\nimport { getMatrixDimensions, parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { chartPropsChanged } from '../../../utils/lit-draw.js';\nimport {\n formatCategoryLabel,\n formatMatrixValue,\n normalizeMatrixData,\n type MatrixCell,\n type MatrixInput,\n type MatrixModel,\n} from '../lib/index.js';\nimport {\n matrixColorRanges,\n matrixLayout,\n renderMatrixChart,\n} from '../render/draw.js';\nimport { matrixStyles } from './styles.js';\n\n@customElement('ui9000-matrix-chart')\nexport class Ui9000MatrixChart extends Ui9000ChartElement {\n static override styles = [matrixStyles, chartShellStyles];\n\n @property({ type: Boolean, attribute: 'show-legend' })\n showLegend = true;\n\n @property({ type: Boolean, attribute: 'show-tooltip' })\n showTooltip = true;\n\n @state()\n private _tooltip: {\n x: number;\n y: number;\n /** Client rows: \"<row field>: <row value>\" then \"Value: <measure>\" */\n category: string;\n value: string;\n } | null = null;\n\n @state()\n private _empty = false;\n\n @state()\n private _pinnedTopAxis = false;\n\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n private _drawnSignature: string | null = null;\n private _drawnModel: MatrixModel | null = null;\n private _modelJson: string | null = null;\n private _model: MatrixModel = {\n cells: [],\n xDomain: [],\n yDomain: [],\n rawValues: [],\n categoryKey: '',\n valueKey: '',\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.scheduleDraw());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n cancelAnimationFrame(this._raf);\n super.disconnectedCallback();\n }\n\n override firstUpdated(): void {\n for (const selector of ['.widget-body', '.chart-body', '.chart-scroll']) {\n const el = this.shadowRoot?.querySelector(selector);\n if (el instanceof HTMLElement) this._resizeObserver?.observe(el);\n }\n }\n\n override updated(changed: PropertyValues): void {\n if (chartPropsChanged(changed)) this.scheduleDraw();\n }\n\n private scheduleDraw(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => this.draw());\n }\n\n /** Normalizing a dense grid is not free — only redo it when `data` changes. */\n private parseData(): MatrixModel {\n if (this._modelJson !== this.dataJson) {\n this._modelJson = this.dataJson;\n this._model = normalizeMatrixData(parseJsonAttr<MatrixInput>(this.dataJson, []));\n }\n return this._model;\n }\n\n private draw(): void {\n const chartBody = this.shadowRoot?.querySelector('.chart-body') as HTMLElement | null;\n const scroll = this.shadowRoot?.querySelector('.chart-scroll') as HTMLElement | null;\n const root = this.shadowRoot?.querySelector('.chart-root') as HTMLElement | null;\n const topAxis = this.shadowRoot?.querySelector('.chart-top-axis') as HTMLElement | null;\n if (!chartBody || !scroll || !root) return;\n\n const model = this.parseData();\n this._empty = model.cells.length === 0;\n if (this._empty) {\n root.replaceChildren();\n topAxis?.replaceChildren();\n this._pinnedTopAxis = false;\n this._drawnSignature = null;\n this._drawnModel = null;\n return;\n }\n\n const { width, margin } = getMatrixDimensions(chartBody);\n const bodyHeight = chartBody.clientHeight || 300;\n const viewportHeight = scroll.clientHeight || 300;\n const themeMode =\n readCssVar(this, CSS_VARS.mode, 'light') === 'dark' ? 'dark' : 'light';\n\n // Drawing the header changes the scroll viewport, which fires the resize\n // observer again — skip redraws whose inputs are unchanged so that\n // settling costs one extra pass instead of running forever.\n const signature = [\n width,\n bodyHeight,\n viewportHeight,\n themeMode,\n this.showTooltip,\n ].join('|');\n if (this._drawnSignature === signature && this._drawnModel === model) return;\n this._drawnSignature = signature;\n this._drawnModel = model;\n\n this._pinnedTopAxis = matrixLayout(model, viewportHeight, margin).separateTopAxis;\n\n renderMatrixChart(root, {\n model,\n width,\n height: viewportHeight,\n bodyHeight,\n margin,\n theme: readThemeFromElement(this),\n themeMode,\n topAxisContainer: topAxis,\n ...this.axisLabelHandlers(),\n onCellHover: this.showTooltip\n ? ({ cell, event }) => {\n const rect = this.getBoundingClientRect();\n this._tooltip = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n ...this.tooltipRows(model, cell),\n };\n }\n : undefined,\n onCellLeave: this.showTooltip\n ? () => {\n this._tooltip = null;\n }\n : undefined,\n });\n }\n\n /**\n * Client tooltip: the row field and its value, then the measure — each\n * carrying the unit declared for that field in `axisDetails`.\n */\n private tooltipRows(\n model: MatrixModel,\n cell: MatrixCell,\n ): { category: string; value: string } {\n const rowValue = formatValueWithUnit(\n formatCategoryLabel(cell.y),\n model.axisDetails?.[model.categoryKey],\n );\n const value = formatValueWithUnit(\n formatMatrixValue(cell.value),\n model.axisDetails?.[model.valueKey],\n );\n return {\n category: model.categoryKey\n ? `${axisFieldLabel(model.categoryKey, model.axisDetails)}: ${rowValue}`\n : rowValue,\n value,\n };\n }\n\n /** FuseDash `ChartLegend legendType=\"palette\"` — Low → High swatch ramp. */\n private renderPaletteLegend(model: MatrixModel) {\n if (!this.showLegend) return nothing;\n const ranges = matrixColorRanges(model);\n if (!ranges.length) return nothing;\n return html`\n <div class=\"palette-legend\" part=\"legend\">\n <span>Low</span>\n <span class=\"palette-swatches\">\n ${ranges.map(\n (range) =>\n html`<span\n class=\"palette-swatch\"\n style=\"background:${range.color}\"\n title=${`${formatMatrixValue(range.start)} – ${formatMatrixValue(range.end)}`}\n ></span>`,\n )}\n </span>\n <span>High</span>\n </div>\n `;\n }\n\n override render() {\n const model = this.parseData();\n return html`\n <div class=\"widget-shell\" part=\"shell\">\n ${this.renderShellHeader(this.headerTitle())}\n <div class=\"widget-body\">\n <div class=\"chart-body\" part=\"chart-body\">\n ${this._empty ? nothing : this.renderPaletteLegend(model)}\n <div\n class=\"chart-top-axis\"\n part=\"top-axis\"\n ?hidden=${!this._pinnedTopAxis}\n ></div>\n <div class=\"chart-scroll\" part=\"scroll\">\n <div\n class=\"chart-root\"\n part=\"chart\"\n ?data-hoverable=${this.showTooltip}\n ?hidden=${this._empty}\n ></div>\n </div>\n </div>\n ${this._empty ? html`<div class=\"empty\" part=\"empty\">No data</div>` : nothing}\n ${this._tooltip\n ? html`<div\n class=\"tooltip\"\n part=\"tooltip\"\n style=\"left:${this._tooltip.x}px;top:${this._tooltip.y}px\"\n >\n <div class=\"name\">${this._tooltip.category}</div>\n <div>Value: ${this._tooltip.value}</div>\n </div>`\n : nothing}\n ${this.renderShellLabelTooltip()}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-matrix-chart': Ui9000MatrixChart;\n }\n}\n\nexport function registerMatrixChart(): void {\n if (!customElements.get('ui9000-matrix-chart')) {\n customElements.define('ui9000-matrix-chart', Ui9000MatrixChart);\n }\n}\n\nregisterMatrixChart();\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { Ui9000MatrixChart, registerMatrixChart, } from './element/ui9000-matrix-chart.js';
|
|
2
|
+
export { matrixColorRanges, matrixLayout, renderMatrixChart, } from './render/index.js';
|
|
3
|
+
export { normalizeMatrixData, sortAxisDomain, formatCategoryLabel, formatMatrixValue, type MatrixCell, type MatrixCellsPayload, type MatrixInput, type MatrixModel, } from './lib/index.js';
|
|
4
|
+
export { default as matrixChartMetadata } from './metadata.json';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/matrix-chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { registerMatrixChart } from "./element/ui9000-matrix-chart.js";
|
|
2
|
+
import { Ui9000MatrixChart } from "./element/ui9000-matrix-chart.js";
|
|
3
|
+
import { default as default2 } from "./metadata.json.js";
|
|
4
|
+
import { formatCategoryLabel, formatMatrixValue } from "./lib/format.js";
|
|
5
|
+
import { matrixColorRanges, matrixLayout, renderMatrixChart } from "./render/draw.js";
|
|
6
|
+
import { normalizeMatrixData } from "./lib/normalize.js";
|
|
7
|
+
import { sortAxisDomain } from "./lib/domain.js";
|
|
8
|
+
export {
|
|
9
|
+
Ui9000MatrixChart,
|
|
10
|
+
formatCategoryLabel,
|
|
11
|
+
formatMatrixValue,
|
|
12
|
+
default2 as matrixChartMetadata,
|
|
13
|
+
matrixColorRanges,
|
|
14
|
+
matrixLayout,
|
|
15
|
+
normalizeMatrixData,
|
|
16
|
+
registerMatrixChart,
|
|
17
|
+
renderMatrixChart,
|
|
18
|
+
sortAxisDomain
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mirrors client `MatrixChart/utils/sortAxisDomain` — axis categories are
|
|
3
|
+
* ordered by detected type (numbers, dates, weekdays, then locale strings),
|
|
4
|
+
* not by `uniqueValues` order.
|
|
5
|
+
*/
|
|
6
|
+
export declare function sortAxisDomain(values: (string | number)[]): (string | number)[];
|
|
7
|
+
//# sourceMappingURL=domain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../../src/components/matrix-chart/lib/domain.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuCH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAC1B,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAsBrB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const WEEKDAY_ORDER = {
|
|
2
|
+
monday: 0,
|
|
3
|
+
mon: 0,
|
|
4
|
+
tuesday: 1,
|
|
5
|
+
tue: 1,
|
|
6
|
+
wednesday: 2,
|
|
7
|
+
wed: 2,
|
|
8
|
+
thursday: 3,
|
|
9
|
+
thu: 3,
|
|
10
|
+
friday: 4,
|
|
11
|
+
fri: 4,
|
|
12
|
+
saturday: 5,
|
|
13
|
+
sat: 5,
|
|
14
|
+
sunday: 6,
|
|
15
|
+
sun: 6
|
|
16
|
+
};
|
|
17
|
+
function weekdayIndex(value) {
|
|
18
|
+
const key = value.trim().toLowerCase();
|
|
19
|
+
return key in WEEKDAY_ORDER ? WEEKDAY_ORDER[key] : -1;
|
|
20
|
+
}
|
|
21
|
+
function isAllNumeric(values) {
|
|
22
|
+
return values.every((v) => {
|
|
23
|
+
const n = Number(v);
|
|
24
|
+
return String(v).trim() === "" || Number.isFinite(n);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function isAllDates(values) {
|
|
28
|
+
return values.every((v) => !Number.isNaN(new Date(v).getTime()));
|
|
29
|
+
}
|
|
30
|
+
function isAllWeekdays(values) {
|
|
31
|
+
return values.every((v) => weekdayIndex(String(v)) >= 0);
|
|
32
|
+
}
|
|
33
|
+
function sortAxisDomain(values) {
|
|
34
|
+
const normalized = values.map(
|
|
35
|
+
(v) => typeof v === "number" ? v : String(v ?? "")
|
|
36
|
+
);
|
|
37
|
+
if (!normalized.length) return [];
|
|
38
|
+
if (isAllNumeric(normalized)) {
|
|
39
|
+
return [...normalized].sort((a, b) => Number(a) - Number(b));
|
|
40
|
+
}
|
|
41
|
+
if (isAllDates(normalized)) {
|
|
42
|
+
return [...normalized].sort(
|
|
43
|
+
(a, b) => new Date(a).getTime() - new Date(b).getTime()
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
if (isAllWeekdays(normalized)) {
|
|
47
|
+
return [...normalized].sort(
|
|
48
|
+
(a, b) => weekdayIndex(String(a)) - weekdayIndex(String(b))
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
return [...normalized].sort(
|
|
52
|
+
(a, b) => String(a).localeCompare(String(b), void 0, { numeric: true })
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
sortAxisDomain
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=domain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.js","sources":["../../../../src/components/matrix-chart/lib/domain.ts"],"sourcesContent":["/**\n * Mirrors client `MatrixChart/utils/sortAxisDomain` — axis categories are\n * ordered by detected type (numbers, dates, weekdays, then locale strings),\n * not by `uniqueValues` order.\n */\n\nconst WEEKDAY_ORDER: Record<string, number> = {\n monday: 0,\n mon: 0,\n tuesday: 1,\n tue: 1,\n wednesday: 2,\n wed: 2,\n thursday: 3,\n thu: 3,\n friday: 4,\n fri: 4,\n saturday: 5,\n sat: 5,\n sunday: 6,\n sun: 6,\n};\n\nfunction weekdayIndex(value: string): number {\n const key = value.trim().toLowerCase();\n return key in WEEKDAY_ORDER ? WEEKDAY_ORDER[key] : -1;\n}\n\nfunction isAllNumeric(values: (string | number)[]): boolean {\n return values.every((v) => {\n const n = Number(v);\n return String(v).trim() === '' || Number.isFinite(n);\n });\n}\n\nfunction isAllDates(values: (string | number)[]): boolean {\n return values.every((v) => !Number.isNaN(new Date(v).getTime()));\n}\n\nfunction isAllWeekdays(values: (string | number)[]): boolean {\n return values.every((v) => weekdayIndex(String(v)) >= 0);\n}\n\nexport function sortAxisDomain(\n values: (string | number)[],\n): (string | number)[] {\n const normalized = values.map((v) =>\n typeof v === 'number' ? v : String(v ?? ''),\n );\n if (!normalized.length) return [];\n\n if (isAllNumeric(normalized)) {\n return [...normalized].sort((a, b) => Number(a) - Number(b));\n }\n if (isAllDates(normalized)) {\n return [...normalized].sort(\n (a, b) => new Date(a).getTime() - new Date(b).getTime(),\n );\n }\n if (isAllWeekdays(normalized)) {\n return [...normalized].sort(\n (a, b) => weekdayIndex(String(a)) - weekdayIndex(String(b)),\n );\n }\n return [...normalized].sort((a, b) =>\n String(a).localeCompare(String(b), undefined, { numeric: true }),\n );\n}\n"],"names":[],"mappings":"AAMA,MAAM,gBAAwC;AAAA,EAC5C,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,WAAW;AAAA,EACX,KAAK;AAAA,EACL,UAAU;AAAA,EACV,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AAAA,EACV,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AACP;AAEA,SAAS,aAAa,OAAuB;AAC3C,QAAM,MAAM,MAAM,KAAA,EAAO,YAAA;AACzB,SAAO,OAAO,gBAAgB,cAAc,GAAG,IAAI;AACrD;AAEA,SAAS,aAAa,QAAsC;AAC1D,SAAO,OAAO,MAAM,CAAC,MAAM;AACzB,UAAM,IAAI,OAAO,CAAC;AAClB,WAAO,OAAO,CAAC,EAAE,KAAA,MAAW,MAAM,OAAO,SAAS,CAAC;AAAA,EACrD,CAAC;AACH;AAEA,SAAS,WAAW,QAAsC;AACxD,SAAO,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,MAAM,IAAI,KAAK,CAAC,EAAE,QAAA,CAAS,CAAC;AACjE;AAEA,SAAS,cAAc,QAAsC;AAC3D,SAAO,OAAO,MAAM,CAAC,MAAM,aAAa,OAAO,CAAC,CAAC,KAAK,CAAC;AACzD;AAEO,SAAS,eACd,QACqB;AACrB,QAAM,aAAa,OAAO;AAAA,IAAI,CAAC,MAC7B,OAAO,MAAM,WAAW,IAAI,OAAO,KAAK,EAAE;AAAA,EAAA;AAE5C,MAAI,CAAC,WAAW,OAAQ,QAAO,CAAA;AAE/B,MAAI,aAAa,UAAU,GAAG;AAC5B,WAAO,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;AAAA,EAC7D;AACA,MAAI,WAAW,UAAU,GAAG;AAC1B,WAAO,CAAC,GAAG,UAAU,EAAE;AAAA,MACrB,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,EAAE,QAAA,IAAY,IAAI,KAAK,CAAC,EAAE,QAAA;AAAA,IAAQ;AAAA,EAE1D;AACA,MAAI,cAAc,UAAU,GAAG;AAC7B,WAAO,CAAC,GAAG,UAAU,EAAE;AAAA,MACrB,CAAC,GAAG,MAAM,aAAa,OAAO,CAAC,CAAC,IAAI,aAAa,OAAO,CAAC,CAAC;AAAA,IAAA;AAAA,EAE9D;AACA,SAAO,CAAC,GAAG,UAAU,EAAE;AAAA,IAAK,CAAC,GAAG,MAC9B,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,GAAG,QAAW,EAAE,SAAS,MAAM;AAAA,EAAA;AAEnE;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Mirrors client `formatNumber` — grouped, up to 3 decimals. */
|
|
2
|
+
export declare function formatMatrixValue(value: number): string;
|
|
3
|
+
/** Mirrors client `formatCapitalizedWordsText` for the tooltip category. */
|
|
4
|
+
export declare function formatCategoryLabel(text: string): string;
|
|
5
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/components/matrix-chart/lib/format.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQxD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
function formatMatrixValue(value) {
|
|
2
|
+
if (!Number.isFinite(value)) return "";
|
|
3
|
+
return new Intl.NumberFormat("en-US", { maximumFractionDigits: 3 }).format(
|
|
4
|
+
value
|
|
5
|
+
);
|
|
6
|
+
}
|
|
7
|
+
function formatCategoryLabel(text) {
|
|
8
|
+
if (!text) return "";
|
|
9
|
+
if (!Number.isNaN(Number(text))) return text;
|
|
10
|
+
return text.replace(/[_-]/g, " ").split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
formatCategoryLabel,
|
|
14
|
+
formatMatrixValue
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sources":["../../../../src/components/matrix-chart/lib/format.ts"],"sourcesContent":["/** Mirrors client `formatNumber` — grouped, up to 3 decimals. */\nexport function formatMatrixValue(value: number): string {\n if (!Number.isFinite(value)) return '';\n return new Intl.NumberFormat('en-US', { maximumFractionDigits: 3 }).format(\n value,\n );\n}\n\n/** Mirrors client `formatCapitalizedWordsText` for the tooltip category. */\nexport function formatCategoryLabel(text: string): string {\n if (!text) return '';\n if (!Number.isNaN(Number(text))) return text;\n return text\n .replace(/[_-]/g, ' ')\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n}\n"],"names":[],"mappings":"AACO,SAAS,kBAAkB,OAAuB;AACvD,MAAI,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACpC,SAAO,IAAI,KAAK,aAAa,SAAS,EAAE,uBAAuB,EAAA,CAAG,EAAE;AAAA,IAClE;AAAA,EAAA;AAEJ;AAGO,SAAS,oBAAoB,MAAsB;AACxD,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,CAAC,OAAO,MAAM,OAAO,IAAI,CAAC,EAAG,QAAO;AACxC,SAAO,KACJ,QAAQ,SAAS,GAAG,EACpB,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC,EAAE,YAAA,CAAa,EACxE,KAAK,GAAG;AACb;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { type MatrixCell, type MatrixCellsPayload, type MatrixInput, type MatrixModel, } from './types.js';
|
|
2
|
+
export { normalizeMatrixData } from './normalize.js';
|
|
3
|
+
export { sortAxisDomain } from './domain.js';
|
|
4
|
+
export { formatCategoryLabel, formatMatrixValue } from './format.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/matrix-chart/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { FuseWidgetLike } from '../../../utils/fuse-widget.js';
|
|
2
|
+
import { MatrixInput, MatrixModel } from './types.js';
|
|
3
|
+
/** Normalize chat cells or a FuseDash WidgetItem into a matrix model. */
|
|
4
|
+
export declare function normalizeMatrixData(input: MatrixInput | FuseWidgetLike | null | undefined): MatrixModel;
|
|
5
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/components/matrix-chart/lib/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAGV,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AAkOpB,yEAAyE;AACzE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,GACrD,WAAW,CAkBb"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { isFuseWidgetPayload, rowsOf, firstField } from "../../../utils/fuse-widget.js";
|
|
2
|
+
import { sortAxisDomain } from "./domain.js";
|
|
3
|
+
const MAX_FILLED_CELLS = 1e4;
|
|
4
|
+
const EMPTY = {
|
|
5
|
+
cells: [],
|
|
6
|
+
xDomain: [],
|
|
7
|
+
yDomain: [],
|
|
8
|
+
rawValues: [],
|
|
9
|
+
categoryKey: "",
|
|
10
|
+
valueKey: ""
|
|
11
|
+
};
|
|
12
|
+
function isCell(d) {
|
|
13
|
+
if (!d || typeof d !== "object") return false;
|
|
14
|
+
const o = d;
|
|
15
|
+
return "x" in o && "y" in o && "value" in o;
|
|
16
|
+
}
|
|
17
|
+
function toCell(raw) {
|
|
18
|
+
const x = String(raw.x ?? "");
|
|
19
|
+
const y = String(raw.y ?? "");
|
|
20
|
+
const value = Number(raw.value);
|
|
21
|
+
if (!x || !y) return null;
|
|
22
|
+
return { x, y, value: Number.isFinite(value) ? value : 0 };
|
|
23
|
+
}
|
|
24
|
+
function uniqueInOrder(values) {
|
|
25
|
+
const seen = /* @__PURE__ */ new Set();
|
|
26
|
+
const out = [];
|
|
27
|
+
for (const v of values) {
|
|
28
|
+
if (v && !seen.has(v)) {
|
|
29
|
+
seen.add(v);
|
|
30
|
+
out.push(v);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
function modelFromCells(cells, xDomain, yDomain) {
|
|
36
|
+
const cleaned = cells.map(toCell).filter((c) => c != null);
|
|
37
|
+
return {
|
|
38
|
+
cells: cleaned,
|
|
39
|
+
xDomain: (xDomain == null ? void 0 : xDomain.length) ? xDomain : uniqueInOrder(cleaned.map((c) => c.x)),
|
|
40
|
+
yDomain: (yDomain == null ? void 0 : yDomain.length) ? yDomain : uniqueInOrder(cleaned.map((c) => c.y)),
|
|
41
|
+
rawValues: cleaned.map((c) => c.value),
|
|
42
|
+
categoryKey: "",
|
|
43
|
+
valueKey: ""
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function additionalKeysOf(rows, xKey, valueKey) {
|
|
47
|
+
const reserved = /* @__PURE__ */ new Set([xKey, valueKey]);
|
|
48
|
+
const keys = /* @__PURE__ */ new Set();
|
|
49
|
+
for (const row of rows) {
|
|
50
|
+
for (const key of Object.keys(row)) {
|
|
51
|
+
if (!reserved.has(key)) keys.add(key);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return [...keys];
|
|
55
|
+
}
|
|
56
|
+
function joinValue(value) {
|
|
57
|
+
if (typeof value === "number") return value;
|
|
58
|
+
return String(value).replace(/\s+/g, "");
|
|
59
|
+
}
|
|
60
|
+
function normalizeLocationValue(value) {
|
|
61
|
+
if (value == null) return "";
|
|
62
|
+
if (typeof value === "number") return value;
|
|
63
|
+
if (typeof value !== "string") return String(value);
|
|
64
|
+
const trimmed = value.trim();
|
|
65
|
+
if (trimmed === "") return "";
|
|
66
|
+
const numValue = Number(trimmed);
|
|
67
|
+
if (Number.isFinite(numValue)) return numValue;
|
|
68
|
+
const commaIndex = trimmed.indexOf(", ");
|
|
69
|
+
if (commaIndex !== -1) return trimmed.substring(commaIndex + 2).trim();
|
|
70
|
+
return trimmed;
|
|
71
|
+
}
|
|
72
|
+
function fillWithZeroData(widget, rows, xKey, valueKey, fillKey) {
|
|
73
|
+
const uniqueValues = widget.uniqueValues ?? {};
|
|
74
|
+
const passthrough = () => rows.map((row) => ({
|
|
75
|
+
...row,
|
|
76
|
+
...fillKey ? { [fillKey]: normalizeLocationValue(row[fillKey]) } : {}
|
|
77
|
+
}));
|
|
78
|
+
const xValues = uniqueValues[xKey] ?? [];
|
|
79
|
+
const yValues = fillKey ? uniqueValues[fillKey] ?? [] : [];
|
|
80
|
+
const total = xValues.length * yValues.length;
|
|
81
|
+
if (!total || total === rows.length || total > MAX_FILLED_CELLS) {
|
|
82
|
+
return passthrough();
|
|
83
|
+
}
|
|
84
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
85
|
+
for (const row of rows) {
|
|
86
|
+
byKey.set(`${joinValue(row[xKey])}-${joinValue(row[fillKey])}`, row);
|
|
87
|
+
}
|
|
88
|
+
const filled = [];
|
|
89
|
+
for (const xValue of xValues) {
|
|
90
|
+
for (const yValue of yValues) {
|
|
91
|
+
const matched = byKey.get(`${joinValue(xValue)}-${joinValue(yValue)}`);
|
|
92
|
+
filled.push(
|
|
93
|
+
matched ?? { [xKey]: xValue, [fillKey]: yValue, [valueKey]: 0 }
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return filled;
|
|
98
|
+
}
|
|
99
|
+
function resolveCategoryKey(widget, additionalKeys) {
|
|
100
|
+
const uniqueValues = widget.uniqueValues ?? {};
|
|
101
|
+
const groupField = firstField(widget.groupBy);
|
|
102
|
+
if (groupField && additionalKeys.includes(groupField)) return groupField;
|
|
103
|
+
return additionalKeys.find((key) => uniqueValues[key]) ?? additionalKeys[0] ?? "y";
|
|
104
|
+
}
|
|
105
|
+
function fromFuseWidget(widget) {
|
|
106
|
+
const rows = rowsOf(widget);
|
|
107
|
+
if (!rows.length) return EMPTY;
|
|
108
|
+
const xKey = firstField(widget.xAxe) ?? "x";
|
|
109
|
+
const valueKey = firstField(widget.yAxe) ?? "y";
|
|
110
|
+
const rawValues = rows.map((row) => {
|
|
111
|
+
const value = Number(row.value ?? row[valueKey]);
|
|
112
|
+
return Number.isFinite(value) ? value : 0;
|
|
113
|
+
});
|
|
114
|
+
const additionalKeys = additionalKeysOf(rows, xKey, valueKey);
|
|
115
|
+
const categoryKey = resolveCategoryKey(widget, additionalKeys);
|
|
116
|
+
const uniqueValues = widget.uniqueValues ?? {};
|
|
117
|
+
const yValuesRaw = Array.isArray(uniqueValues[categoryKey]) ? uniqueValues[categoryKey] : rows.map((row) => row[categoryKey]);
|
|
118
|
+
const yDomain = sortAxisDomain(
|
|
119
|
+
[...new Set(yValuesRaw)].filter(Boolean)
|
|
120
|
+
).map(String);
|
|
121
|
+
const xDomain = sortAxisDomain(
|
|
122
|
+
[...new Set(rows.map((row) => row[xKey]))].filter(Boolean)
|
|
123
|
+
).map(String);
|
|
124
|
+
const filled = fillWithZeroData(widget, rows, xKey, valueKey, categoryKey);
|
|
125
|
+
const cells = [];
|
|
126
|
+
for (const row of filled) {
|
|
127
|
+
const x = row[xKey];
|
|
128
|
+
const y = row[categoryKey];
|
|
129
|
+
if (x == null || y == null) continue;
|
|
130
|
+
const value = Number(row.value ?? row[valueKey] ?? 0);
|
|
131
|
+
cells.push({
|
|
132
|
+
x: String(x),
|
|
133
|
+
y: String(y),
|
|
134
|
+
value: Number.isFinite(value) ? value : 0
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
cells,
|
|
139
|
+
xDomain,
|
|
140
|
+
yDomain,
|
|
141
|
+
rawValues,
|
|
142
|
+
categoryKey,
|
|
143
|
+
valueKey,
|
|
144
|
+
axisDetails: widget.axisDetails ?? void 0
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function normalizeMatrixData(input) {
|
|
148
|
+
if (!input) return EMPTY;
|
|
149
|
+
if (Array.isArray(input)) {
|
|
150
|
+
if (!input.length || !isCell(input[0])) return EMPTY;
|
|
151
|
+
return modelFromCells(input);
|
|
152
|
+
}
|
|
153
|
+
const payload = input;
|
|
154
|
+
if (Array.isArray(payload.cells)) {
|
|
155
|
+
return modelFromCells(payload.cells, payload.xDomain, payload.yDomain);
|
|
156
|
+
}
|
|
157
|
+
if (isFuseWidgetPayload(input)) {
|
|
158
|
+
return fromFuseWidget(input);
|
|
159
|
+
}
|
|
160
|
+
return EMPTY;
|
|
161
|
+
}
|
|
162
|
+
export {
|
|
163
|
+
normalizeMatrixData
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sources":["../../../../src/components/matrix-chart/lib/normalize.ts"],"sourcesContent":["import {\n firstField,\n isFuseWidgetPayload,\n rowsOf,\n type FuseWidgetLike,\n} from '../../../utils/fuse-widget.js';\nimport { sortAxisDomain } from './domain.js';\nimport type {\n MatrixCell,\n MatrixCellsPayload,\n MatrixInput,\n MatrixModel,\n} from './types.js';\n\n/**\n * Zero-filling a dense grid is quadratic in the two domains. Past this many\n * cells the chat host would be asked to paint more rects than it can afford,\n * so the grid stays sparse (real rows only) instead.\n */\nconst MAX_FILLED_CELLS = 10_000;\n\nconst EMPTY: MatrixModel = {\n cells: [],\n xDomain: [],\n yDomain: [],\n rawValues: [],\n categoryKey: '',\n valueKey: '',\n};\n\ntype Row = Record<string, unknown>;\n\nfunction isCell(d: unknown): d is MatrixCell {\n if (!d || typeof d !== 'object') return false;\n const o = d as Row;\n return 'x' in o && 'y' in o && 'value' in o;\n}\n\nfunction toCell(raw: MatrixCell): MatrixCell | null {\n const x = String(raw.x ?? '');\n const y = String(raw.y ?? '');\n const value = Number(raw.value);\n if (!x || !y) return null;\n return { x, y, value: Number.isFinite(value) ? value : 0 };\n}\n\nfunction uniqueInOrder(values: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const v of values) {\n if (v && !seen.has(v)) {\n seen.add(v);\n out.push(v);\n }\n }\n return out;\n}\n\nfunction modelFromCells(\n cells: MatrixCell[],\n xDomain?: string[],\n yDomain?: string[],\n): MatrixModel {\n const cleaned = cells.map(toCell).filter((c): c is MatrixCell => c != null);\n return {\n cells: cleaned,\n xDomain: xDomain?.length ? xDomain : uniqueInOrder(cleaned.map((c) => c.x)),\n yDomain: yDomain?.length ? yDomain : uniqueInOrder(cleaned.map((c) => c.y)),\n rawValues: cleaned.map((c) => c.value),\n categoryKey: '',\n valueKey: '',\n };\n}\n\n/** Mirrors client `getAdditionalKeys` — data keys that are not an axis. */\nfunction additionalKeysOf(rows: Row[], xKey: string, valueKey: string): string[] {\n const reserved = new Set([xKey, valueKey]);\n const keys = new Set<string>();\n for (const row of rows) {\n for (const key of Object.keys(row)) {\n if (!reserved.has(key)) keys.add(key);\n }\n }\n return [...keys];\n}\n\n/** Mirrors client `normalizeValue` — the zero-fill join key. */\nfunction joinValue(value: unknown): string | number {\n if (typeof value === 'number') return value;\n return String(value).replace(/\\s+/g, '');\n}\n\n/** Mirrors client `normalizeLocationValue` — \"State, County\" → \"County\". */\nfunction normalizeLocationValue(value: unknown): string | number {\n if (value == null) return '';\n if (typeof value === 'number') return value;\n if (typeof value !== 'string') return String(value);\n\n const trimmed = value.trim();\n if (trimmed === '') return '';\n\n const numValue = Number(trimmed);\n if (Number.isFinite(numValue)) return numValue;\n\n const commaIndex = trimmed.indexOf(', ');\n if (commaIndex !== -1) return trimmed.substring(commaIndex + 2).trim();\n\n return trimmed;\n}\n\n/**\n * Mirrors client `filledArrayWithZeroData`: every (column × row) combination\n * exists, missing ones carrying a zero so the grid paints a \"no data\" cell.\n */\nfunction fillWithZeroData(\n widget: FuseWidgetLike,\n rows: Row[],\n xKey: string,\n valueKey: string,\n fillKey: string,\n): Row[] {\n const uniqueValues = widget.uniqueValues ?? {};\n\n const passthrough = (): Row[] =>\n rows.map((row) => ({\n ...row,\n ...(fillKey ? { [fillKey]: normalizeLocationValue(row[fillKey]) } : {}),\n }));\n\n const xValues = uniqueValues[xKey] ?? [];\n const yValues = fillKey ? (uniqueValues[fillKey] ?? []) : [];\n const total = xValues.length * yValues.length;\n\n if (!total || total === rows.length || total > MAX_FILLED_CELLS) {\n return passthrough();\n }\n\n const byKey = new Map<string, Row>();\n for (const row of rows) {\n byKey.set(`${joinValue(row[xKey])}-${joinValue(row[fillKey])}`, row);\n }\n\n const filled: Row[] = [];\n for (const xValue of xValues) {\n for (const yValue of yValues) {\n const matched = byKey.get(`${joinValue(xValue)}-${joinValue(yValue)}`);\n filled.push(\n matched ?? { [xKey]: xValue, [fillKey]: yValue, [valueKey]: 0 },\n );\n }\n }\n return filled;\n}\n\n/**\n * Row-category field. `groupBy[0]` wins whenever the rows actually carry it —\n * the client instead takes the first non-axis key in `Object.keys` order,\n * which silently picks up a stray field (`datasetId`, a passthrough column)\n * and leaves every cell outside the `uniqueValues[groupBy]` domain, painting\n * an empty grid. Falling back to a key that has a `uniqueValues` entry keeps\n * the domain and the cells on the same field.\n */\nfunction resolveCategoryKey(\n widget: FuseWidgetLike,\n additionalKeys: string[],\n): string {\n const uniqueValues = widget.uniqueValues ?? {};\n const groupField = firstField(widget.groupBy);\n if (groupField && additionalKeys.includes(groupField)) return groupField;\n return (\n additionalKeys.find((key) => uniqueValues[key]) ?? additionalKeys[0] ?? 'y'\n );\n}\n\n/**\n * Mirrors client `MatrixChart` `processedData`:\n * - columns = `xAxe[0]`, ordered by `sortAxisDomain`\n * - rows = `uniqueValues[categoryKey]`, else the categoryKey values on the rows\n * - value = `row.value ?? row[yAxe[0]]`\n */\nfunction fromFuseWidget(widget: FuseWidgetLike): MatrixModel {\n const rows = rowsOf(widget);\n if (!rows.length) return EMPTY;\n\n const xKey = firstField(widget.xAxe) ?? 'x';\n const valueKey = firstField(widget.yAxe) ?? 'y';\n\n const rawValues = rows.map((row) => {\n const value = Number(row.value ?? row[valueKey]);\n return Number.isFinite(value) ? value : 0;\n });\n\n const additionalKeys = additionalKeysOf(rows, xKey, valueKey);\n const categoryKey = resolveCategoryKey(widget, additionalKeys);\n\n const uniqueValues = widget.uniqueValues ?? {};\n // Domain and cells must read the same field, or every cell misses the scale.\n const yValuesRaw = Array.isArray(uniqueValues[categoryKey])\n ? uniqueValues[categoryKey]\n : rows.map((row) => row[categoryKey]);\n\n const yDomain = sortAxisDomain(\n [...new Set(yValuesRaw)].filter(Boolean) as (string | number)[],\n ).map(String);\n\n const xDomain = sortAxisDomain(\n [...new Set(rows.map((row) => row[xKey]))].filter(Boolean) as (\n | string\n | number\n )[],\n ).map(String);\n\n const filled = fillWithZeroData(widget, rows, xKey, valueKey, categoryKey);\n\n const cells: MatrixCell[] = [];\n for (const row of filled) {\n const x = row[xKey];\n const y = row[categoryKey];\n if (x == null || y == null) continue;\n const value = Number(row.value ?? row[valueKey] ?? 0);\n cells.push({\n x: String(x),\n y: String(y),\n value: Number.isFinite(value) ? value : 0,\n });\n }\n\n return {\n cells,\n xDomain,\n yDomain,\n rawValues,\n categoryKey,\n valueKey,\n axisDetails: widget.axisDetails ?? undefined,\n };\n}\n\n/** Normalize chat cells or a FuseDash WidgetItem into a matrix model. */\nexport function normalizeMatrixData(\n input: MatrixInput | FuseWidgetLike | null | undefined,\n): MatrixModel {\n if (!input) return EMPTY;\n\n if (Array.isArray(input)) {\n if (!input.length || !isCell(input[0])) return EMPTY;\n return modelFromCells(input as MatrixCell[]);\n }\n\n const payload = input as MatrixCellsPayload;\n if (Array.isArray(payload.cells)) {\n return modelFromCells(payload.cells, payload.xDomain, payload.yDomain);\n }\n\n if (isFuseWidgetPayload(input)) {\n return fromFuseWidget(input);\n }\n\n return EMPTY;\n}\n"],"names":[],"mappings":"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"}
|