@fusedashlabs/widgets 0.5.0 → 0.6.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 +21 -1
- package/README.md +10 -13
- package/dist/catalog/load.js +86 -82
- package/dist/catalog/load.js.map +1 -1
- package/dist/components/area-chart/element/ui9000-area-chart.d.ts +0 -1
- package/dist/components/area-chart/element/ui9000-area-chart.d.ts.map +1 -1
- package/dist/components/area-chart/element/ui9000-area-chart.js +10 -27
- package/dist/components/area-chart/element/ui9000-area-chart.js.map +1 -1
- package/dist/components/area-chart/index.js +1 -1
- package/dist/components/area-grouped-bar-chart/element/ui9000-area-grouped-bar-chart.d.ts +1 -2
- package/dist/components/area-grouped-bar-chart/element/ui9000-area-grouped-bar-chart.d.ts.map +1 -1
- package/dist/components/area-grouped-bar-chart/element/ui9000-area-grouped-bar-chart.js +11 -27
- package/dist/components/area-grouped-bar-chart/element/ui9000-area-grouped-bar-chart.js.map +1 -1
- package/dist/components/area-grouped-bar-chart/index.js +1 -1
- package/dist/components/bar-chart/element/styles.js +1 -1
- package/dist/components/bar-chart/element/styles.js.map +1 -1
- package/dist/components/bar-chart/element/ui9000-bar-chart.d.ts +0 -1
- package/dist/components/bar-chart/element/ui9000-bar-chart.d.ts.map +1 -1
- package/dist/components/bar-chart/element/ui9000-bar-chart.js +10 -30
- package/dist/components/bar-chart/element/ui9000-bar-chart.js.map +1 -1
- package/dist/components/bar-chart/index.js +3 -3
- package/dist/components/bar-chart/metadata.json.d.ts +6 -0
- package/dist/components/bar-chart/metadata.json.js +1 -1
- package/dist/components/bias-variance-tradeoff-chart/element/styles.js +3 -1
- package/dist/components/bias-variance-tradeoff-chart/element/styles.js.map +1 -1
- package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.d.ts +0 -1
- package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.d.ts.map +1 -1
- package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.js +13 -36
- package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.js.map +1 -1
- package/dist/components/bias-variance-tradeoff-chart/index.js +3 -3
- package/dist/components/box-plot-chart/element/ui9000-box-plot-chart.d.ts +0 -1
- package/dist/components/box-plot-chart/element/ui9000-box-plot-chart.d.ts.map +1 -1
- package/dist/components/box-plot-chart/element/ui9000-box-plot-chart.js +13 -35
- package/dist/components/box-plot-chart/element/ui9000-box-plot-chart.js.map +1 -1
- package/dist/components/box-plot-chart/index.js +2 -2
- package/dist/components/box-plot-chart/render/draw.js +1 -1
- package/dist/components/bubble-chart/element/ui9000-bubble-chart.d.ts +0 -1
- package/dist/components/bubble-chart/element/ui9000-bubble-chart.d.ts.map +1 -1
- package/dist/components/bubble-chart/element/ui9000-bubble-chart.js +7 -25
- package/dist/components/bubble-chart/element/ui9000-bubble-chart.js.map +1 -1
- package/dist/components/bubble-chart/index.js +1 -1
- package/dist/components/chart-renderer/element/styles.d.ts.map +1 -1
- package/dist/components/chart-renderer/element/styles.js +4 -0
- package/dist/components/chart-renderer/element/styles.js.map +1 -1
- package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts +10 -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 +40 -4
- package/dist/components/chart-renderer/element/ui9000-chart-renderer.js.map +1 -1
- package/dist/components/chart-renderer/index.js +1 -1
- package/dist/components/chart-renderer/lib/registry.d.ts.map +1 -1
- package/dist/components/chart-renderer/lib/registry.js +2 -0
- package/dist/components/chart-renderer/lib/registry.js.map +1 -1
- package/dist/components/custom-widget/element/ui9000-custom-widget.js +2 -2
- package/dist/components/custom-widget/index.js +1 -1
- package/dist/components/donut-chart/element/ui9000-donut-chart.d.ts +0 -1
- package/dist/components/donut-chart/element/ui9000-donut-chart.d.ts.map +1 -1
- package/dist/components/donut-chart/element/ui9000-donut-chart.js +11 -23
- package/dist/components/donut-chart/element/ui9000-donut-chart.js.map +1 -1
- package/dist/components/donut-chart/index.js +2 -2
- package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.d.ts +0 -2
- package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.d.ts.map +1 -1
- package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.js +12 -35
- package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.js.map +1 -1
- package/dist/components/gini-impurity-entropy-chart/index.js +5 -5
- package/dist/components/gini-impurity-entropy-chart/render/draw.js +1 -1
- package/dist/components/histogram-chart/element/ui9000-histogram-chart.d.ts +0 -1
- package/dist/components/histogram-chart/element/ui9000-histogram-chart.d.ts.map +1 -1
- package/dist/components/histogram-chart/element/ui9000-histogram-chart.js +10 -26
- package/dist/components/histogram-chart/element/ui9000-histogram-chart.js.map +1 -1
- package/dist/components/histogram-chart/index.js +2 -2
- package/dist/components/histogram-chart/lib/normalize.d.ts.map +1 -1
- package/dist/components/histogram-chart/lib/normalize.js +1 -3
- package/dist/components/histogram-chart/lib/normalize.js.map +1 -1
- package/dist/components/inspector/element/styles.d.ts +2 -0
- package/dist/components/inspector/element/styles.d.ts.map +1 -0
- package/dist/components/inspector/element/styles.js +98 -0
- package/dist/components/inspector/element/styles.js.map +1 -0
- package/dist/components/inspector/element/ui9000-inspector.d.ts +26 -0
- package/dist/components/inspector/element/ui9000-inspector.d.ts.map +1 -0
- package/dist/components/inspector/element/ui9000-inspector.js +142 -0
- package/dist/components/inspector/element/ui9000-inspector.js.map +1 -0
- package/dist/components/inspector/index.d.ts +4 -0
- package/dist/components/inspector/index.d.ts.map +1 -0
- package/dist/components/inspector/index.js +13 -0
- package/dist/components/inspector/index.js.map +1 -0
- package/dist/components/inspector/lib/index.d.ts +3 -0
- package/dist/components/inspector/lib/index.d.ts.map +1 -0
- package/dist/components/inspector/lib/normalize.d.ts +4 -0
- package/dist/components/inspector/lib/normalize.d.ts.map +1 -0
- package/dist/components/inspector/lib/normalize.js +95 -0
- package/dist/components/inspector/lib/normalize.js.map +1 -0
- package/dist/components/inspector/lib/types.d.ts +44 -0
- package/dist/components/inspector/lib/types.d.ts.map +1 -0
- package/dist/components/inspector/lib/types.js +5 -0
- package/dist/components/inspector/lib/types.js.map +1 -0
- package/dist/components/inspector/metadata.json.d.ts +43 -0
- package/dist/components/inspector/metadata.json.js +45 -0
- package/dist/components/inspector/metadata.json.js.map +1 -0
- package/dist/components/kpi-widget/element/ui9000-kpi-widget.js +2 -2
- package/dist/components/kpi-widget/index.js +3 -3
- package/dist/components/line-chart/element/ui9000-line-chart.d.ts +0 -1
- package/dist/components/line-chart/element/ui9000-line-chart.d.ts.map +1 -1
- package/dist/components/line-chart/element/ui9000-line-chart.js +6 -24
- package/dist/components/line-chart/element/ui9000-line-chart.js.map +1 -1
- package/dist/components/line-chart/index.js +2 -2
- package/dist/components/line-chart/render/draw.d.ts.map +1 -1
- package/dist/components/line-chart/render/draw.js +1 -1
- package/dist/components/line-chart/render/draw.js.map +1 -1
- package/dist/components/lollipop/element/ui9000-lollipop.d.ts +0 -1
- package/dist/components/lollipop/element/ui9000-lollipop.d.ts.map +1 -1
- package/dist/components/lollipop/element/ui9000-lollipop.js +7 -25
- package/dist/components/lollipop/element/ui9000-lollipop.js.map +1 -1
- package/dist/components/lollipop/index.js +2 -2
- package/dist/components/map-chart/element/ui9000-map-chart.d.ts +0 -1
- package/dist/components/map-chart/element/ui9000-map-chart.d.ts.map +1 -1
- package/dist/components/map-chart/element/ui9000-map-chart.js +16 -25
- package/dist/components/map-chart/element/ui9000-map-chart.js.map +1 -1
- package/dist/components/map-chart/index.js +4 -4
- package/dist/components/map-chart/lib/domain.js +1 -1
- package/dist/components/map-chart/lib/geo-index.d.ts.map +1 -1
- package/dist/components/map-chart/lib/geo-index.js +5 -0
- package/dist/components/map-chart/lib/geo-index.js.map +1 -1
- package/dist/components/matrix-chart/element/ui9000-matrix-chart.d.ts +1 -2
- package/dist/components/matrix-chart/element/ui9000-matrix-chart.d.ts.map +1 -1
- package/dist/components/matrix-chart/element/ui9000-matrix-chart.js +16 -26
- package/dist/components/matrix-chart/element/ui9000-matrix-chart.js.map +1 -1
- package/dist/components/matrix-chart/index.js +2 -2
- package/dist/components/network-graph/element/ui9000-network-graph.d.ts.map +1 -1
- package/dist/components/network-graph/element/ui9000-network-graph.js +5 -4
- package/dist/components/network-graph/element/ui9000-network-graph.js.map +1 -1
- package/dist/components/network-graph/index.js +3 -3
- package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.d.ts +0 -1
- package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.d.ts.map +1 -1
- package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.js +7 -30
- package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.js.map +1 -1
- package/dist/components/parallel-coordinates-chart/index.js +3 -3
- package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.d.ts +0 -1
- package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.d.ts.map +1 -1
- package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.js +7 -23
- package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.js.map +1 -1
- package/dist/components/partial-dependence-chart/index.js +2 -2
- package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts +0 -1
- package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts.map +1 -1
- package/dist/components/pie-chart/element/ui9000-pie-chart.js +11 -23
- package/dist/components/pie-chart/element/ui9000-pie-chart.js.map +1 -1
- package/dist/components/pie-chart/index.js +2 -2
- package/dist/components/pie-chart/lib/normalize.js +1 -1
- package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.d.ts +0 -1
- 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 +14 -23
- package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js.map +1 -1
- package/dist/components/polar-area-chart/index.js +1 -1
- package/dist/components/punchcard-chart/element/ui9000-punchcard-chart.d.ts +0 -1
- package/dist/components/punchcard-chart/element/ui9000-punchcard-chart.d.ts.map +1 -1
- package/dist/components/punchcard-chart/element/ui9000-punchcard-chart.js +6 -24
- package/dist/components/punchcard-chart/element/ui9000-punchcard-chart.js.map +1 -1
- package/dist/components/punchcard-chart/index.js +2 -2
- package/dist/components/punchcard-chart/render/draw.js +1 -1
- package/dist/components/radar-chart/element/ui9000-radar-chart.d.ts +0 -1
- package/dist/components/radar-chart/element/ui9000-radar-chart.d.ts.map +1 -1
- package/dist/components/radar-chart/element/ui9000-radar-chart.js +8 -25
- package/dist/components/radar-chart/element/ui9000-radar-chart.js.map +1 -1
- package/dist/components/radar-chart/index.js +2 -2
- package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.d.ts +0 -1
- package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.d.ts.map +1 -1
- package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.js +14 -25
- package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.js.map +1 -1
- package/dist/components/radial-bar-chart/index.js +3 -3
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts +0 -3
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts.map +1 -1
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.js +19 -37
- package/dist/components/sankey-chart/element/ui9000-sankey-chart.js.map +1 -1
- package/dist/components/sankey-chart/index.js +3 -3
- package/dist/components/scatter-plot-chart/element/ui9000-scatter-plot.d.ts +0 -1
- package/dist/components/scatter-plot-chart/element/ui9000-scatter-plot.d.ts.map +1 -1
- package/dist/components/scatter-plot-chart/element/ui9000-scatter-plot.js +8 -23
- package/dist/components/scatter-plot-chart/element/ui9000-scatter-plot.js.map +1 -1
- package/dist/components/scatter-plot-chart/index.js +1 -1
- package/dist/components/scatter-sparkline-chart/element/ui9000-scatter-sparkline-chart.d.ts +0 -1
- package/dist/components/scatter-sparkline-chart/element/ui9000-scatter-sparkline-chart.d.ts.map +1 -1
- package/dist/components/scatter-sparkline-chart/element/ui9000-scatter-sparkline-chart.js +12 -50
- package/dist/components/scatter-sparkline-chart/element/ui9000-scatter-sparkline-chart.js.map +1 -1
- package/dist/components/scatter-sparkline-chart/index.js +3 -3
- package/dist/components/scatter-sparkline-chart/render/draw.js +1 -1
- package/dist/components/spark-area-chart/element/ui9000-spark-area-chart.d.ts +0 -1
- package/dist/components/spark-area-chart/element/ui9000-spark-area-chart.d.ts.map +1 -1
- package/dist/components/spark-area-chart/element/ui9000-spark-area-chart.js +10 -30
- package/dist/components/spark-area-chart/element/ui9000-spark-area-chart.js.map +1 -1
- package/dist/components/spark-area-chart/index.js +2 -2
- package/dist/components/spark-line-chart/element/ui9000-spark-line-chart.d.ts +0 -1
- package/dist/components/spark-line-chart/element/ui9000-spark-line-chart.d.ts.map +1 -1
- package/dist/components/spark-line-chart/element/ui9000-spark-line-chart.js +10 -30
- package/dist/components/spark-line-chart/element/ui9000-spark-line-chart.js.map +1 -1
- package/dist/components/spark-line-chart/index.js +2 -2
- package/dist/components/status-gauge-widget/element/styles.d.ts +7 -0
- package/dist/components/status-gauge-widget/element/styles.d.ts.map +1 -0
- package/dist/components/status-gauge-widget/element/styles.js +266 -0
- package/dist/components/status-gauge-widget/element/styles.js.map +1 -0
- package/dist/components/status-gauge-widget/element/ui9000-status-gauge-widget.d.ts +29 -0
- package/dist/components/status-gauge-widget/element/ui9000-status-gauge-widget.d.ts.map +1 -0
- package/dist/components/status-gauge-widget/element/ui9000-status-gauge-widget.js +154 -0
- package/dist/components/status-gauge-widget/element/ui9000-status-gauge-widget.js.map +1 -0
- package/dist/components/status-gauge-widget/index.d.ts +4 -0
- package/dist/components/status-gauge-widget/index.d.ts.map +1 -0
- package/dist/components/status-gauge-widget/index.js +12 -0
- package/dist/components/status-gauge-widget/index.js.map +1 -0
- package/dist/components/status-gauge-widget/lib/index.d.ts +3 -0
- package/dist/components/status-gauge-widget/lib/index.d.ts.map +1 -0
- package/dist/components/status-gauge-widget/lib/normalize.d.ts +8 -0
- package/dist/components/status-gauge-widget/lib/normalize.d.ts.map +1 -0
- package/dist/components/status-gauge-widget/lib/normalize.js +111 -0
- package/dist/components/status-gauge-widget/lib/normalize.js.map +1 -0
- package/dist/components/status-gauge-widget/lib/types.d.ts +56 -0
- package/dist/components/status-gauge-widget/lib/types.d.ts.map +1 -0
- package/dist/components/status-gauge-widget/metadata.json.d.ts +20 -0
- package/dist/components/status-gauge-widget/metadata.json.js +39 -0
- package/dist/components/status-gauge-widget/metadata.json.js.map +1 -0
- package/dist/components/status-gauge-widget/render/draw.d.ts +4 -0
- package/dist/components/status-gauge-widget/render/draw.d.ts.map +1 -0
- package/dist/components/status-gauge-widget/render/draw.js +60 -0
- package/dist/components/status-gauge-widget/render/draw.js.map +1 -0
- package/dist/components/step-line-chart/element/ui9000-step-line-chart.d.ts +0 -1
- package/dist/components/step-line-chart/element/ui9000-step-line-chart.d.ts.map +1 -1
- package/dist/components/step-line-chart/element/ui9000-step-line-chart.js +10 -30
- package/dist/components/step-line-chart/element/ui9000-step-line-chart.js.map +1 -1
- package/dist/components/step-line-chart/index.js +2 -2
- package/dist/components/treemap-chart/element/ui9000-treemap-chart.d.ts +0 -1
- package/dist/components/treemap-chart/element/ui9000-treemap-chart.d.ts.map +1 -1
- package/dist/components/treemap-chart/element/ui9000-treemap-chart.js +5 -24
- package/dist/components/treemap-chart/element/ui9000-treemap-chart.js.map +1 -1
- package/dist/components/treemap-chart/index.js +4 -4
- package/dist/components/violin-chart/element/ui9000-violin-chart.js +1 -1
- package/dist/components/violin-chart/index.js +2 -2
- package/dist/components/violin-chart/render/draw.js +1 -1
- package/dist/components/waterfall-chart/element/ui9000-waterfall-chart.d.ts +0 -1
- package/dist/components/waterfall-chart/element/ui9000-waterfall-chart.d.ts.map +1 -1
- package/dist/components/waterfall-chart/element/ui9000-waterfall-chart.js +11 -29
- package/dist/components/waterfall-chart/element/ui9000-waterfall-chart.js.map +1 -1
- package/dist/components/waterfall-chart/index.js +2 -2
- package/dist/element/chart-shell-render.d.ts +3 -0
- package/dist/element/chart-shell-render.d.ts.map +1 -1
- package/dist/element/chart-shell-render.js +80 -19
- package/dist/element/chart-shell-render.js.map +1 -1
- package/dist/element/chart-shell-styles.d.ts +5 -1
- package/dist/element/chart-shell-styles.d.ts.map +1 -1
- package/dist/element/chart-shell-styles.js +126 -7
- package/dist/element/chart-shell-styles.js.map +1 -1
- package/dist/element/chart-tooltip-portal.d.ts +29 -0
- package/dist/element/chart-tooltip-portal.d.ts.map +1 -0
- package/dist/element/chart-tooltip-portal.js +278 -0
- package/dist/element/chart-tooltip-portal.js.map +1 -0
- package/dist/element/header-icons.d.ts +18 -0
- package/dist/element/header-icons.d.ts.map +1 -0
- package/dist/element/header-icons.js +44 -0
- package/dist/element/header-icons.js.map +1 -0
- package/dist/element/ui9000-chart-base.d.ts +19 -0
- package/dist/element/ui9000-chart-base.d.ts.map +1 -1
- package/dist/element/ui9000-chart-base.js +34 -0
- package/dist/element/ui9000-chart-base.js.map +1 -1
- package/dist/element/widget-header.d.ts +35 -0
- package/dist/element/widget-header.d.ts.map +1 -0
- package/dist/element/widget-header.js +59 -0
- package/dist/element/widget-header.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +74 -64
- package/dist/index.js.map +1 -1
- package/dist/lazy/index.d.ts +2 -1
- package/dist/lazy/index.d.ts.map +1 -1
- package/dist/lazy/index.js +8 -0
- package/dist/lazy/index.js.map +1 -1
- package/dist/lazy/status-gauge-widget.d.ts +4 -0
- package/dist/lazy/status-gauge-widget.d.ts.map +1 -0
- package/dist/lazy/status-gauge-widget.js +5 -0
- package/dist/lazy/status-gauge-widget.js.map +1 -0
- package/dist/utils/chart-shell.d.ts +1 -1
- package/dist/utils/chart-shell.d.ts.map +1 -1
- package/dist/utils/chart-shell.js +4 -6
- package/dist/utils/chart-shell.js.map +1 -1
- package/dist/utils/lit-draw.d.ts +1 -0
- package/dist/utils/lit-draw.d.ts.map +1 -1
- package/dist/utils/lit-draw.js +4 -1
- package/dist/utils/lit-draw.js.map +1 -1
- package/package.json +19 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui9000-box-plot-chart.js","sources":["../../../../src/components/box-plot-chart/element/ui9000-box-plot-chart.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport { renderChartLegend } from '../../../element/chart-legend-render.js';\nimport { readThemeFromElement } from '../../../context/widget-context.js';\nimport { getBoxPlotDimensions, parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { swatchLegendEntries } from '../../../utils/chart-legend.js';\nimport { chartPropsChanged } from '../../../utils/lit-draw.js';\nimport { seriesColor as fdSeriesColor } from '../../../utils/fusedash-visual.js';\nimport {\n boxPlotMinCategorySpan,\n normalizeBoxPlotData,\n type BoxPlotBox,\n type BoxPlotBoxesPayload,\n type BoxPlotModel,\n type BoxPlotOrientation,\n type FuseDashBoxPlotPayload,\n} from '../lib/index.js';\nimport { renderBoxPlotChart } from '../render/draw.js';\nimport { boxPlotStyles } from './styles.js';\n\n@customElement('ui9000-box-plot-chart')\nexport class Ui9000BoxPlotChart extends Ui9000ChartElement {\n static override styles = [boxPlotStyles, chartShellStyles];\n\n @property({ type: String })\n orientation: BoxPlotOrientation = 'vertical';\n\n @property({ type: Boolean, attribute: 'show-grid' })\n showGrid = true;\n\n @property({ type: Boolean, attribute: 'show-legend' })\n showLegend = true;\n\n @property({ type: Boolean, attribute: 'show-tooltip' })\n showTooltip = true;\n\n @property({ type: String, attribute: 'x-label' })\n xLabel = '';\n\n @property({ type: String, attribute: 'y-label' })\n yLabel = '';\n\n @state()\n private _tooltip: {\n x: number;\n y: number;\n label: string;\n group?: string;\n q1: number;\n median: number;\n q3: number;\n min: number;\n max: number;\n } | null = null;\n\n @state()\n private _empty = false;\n\n @state()\n private _fixedXAxis = false;\n\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.scheduleDraw());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n cancelAnimationFrame(this._raf);\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (chartPropsChanged(changed)) this.scheduleDraw();\n if (changed.has('_fixedXAxis')) {\n const body = this.shadowRoot?.querySelector('.chart-body');\n const scroll = this.shadowRoot?.querySelector('.chart-scroll');\n if (body instanceof HTMLElement) this._resizeObserver?.observe(body);\n if (scroll instanceof HTMLElement) this._resizeObserver?.observe(scroll);\n }\n }\n\n override firstUpdated(): void {\n const body = this.shadowRoot?.querySelector('.widget-body');\n const chartBody = this.shadowRoot?.querySelector('.chart-body');\n const scroll = this.shadowRoot?.querySelector('.chart-scroll');\n if (body instanceof HTMLElement) this._resizeObserver?.observe(body);\n if (chartBody instanceof HTMLElement) this._resizeObserver?.observe(chartBody);\n if (scroll instanceof HTMLElement) this._resizeObserver?.observe(scroll);\n }\n\n private scheduleDraw(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => this.draw());\n }\n\n private parseData(): BoxPlotModel {\n const raw = parseJsonAttr<\n BoxPlotBox[] | BoxPlotBoxesPayload | FuseDashBoxPlotPayload\n >(this.dataJson, []);\n const model = normalizeBoxPlotData(raw);\n if (this.orientation === 'horizontal' || this.orientation === 'vertical') {\n return { ...model, orientation: this.orientation };\n }\n return model;\n }\n\n private draw(): void {\n const chartBody = this.shadowRoot?.querySelector('.chart-body') as\n | HTMLElement\n | null;\n const scroll = this.shadowRoot?.querySelector('.chart-scroll') as\n | HTMLElement\n | null;\n const root = this.shadowRoot?.querySelector('.chart-root') as\n | HTMLElement\n | null;\n const xAxisRoot = this.shadowRoot?.querySelector('.chart-x-axis') as\n | HTMLElement\n | null;\n if (!chartBody || !scroll || !root) return;\n\n const model = this.parseData();\n this._empty = model.boxes.length === 0;\n if (this._empty) {\n root.replaceChildren();\n xAxisRoot?.replaceChildren();\n this._fixedXAxis = false;\n return;\n }\n\n const labels =\n model.categoryLabels?.length\n ? model.categoryLabels\n : [...new Set(model.boxes.map((b) => b.label))];\n const groupCount = model.groups.length || 1;\n const minPlotSpan = boxPlotMinCategorySpan(labels.length, groupCount);\n const { width, margin } = getBoxPlotDimensions(chartBody);\n const scrollViewportH = scroll.clientHeight || 300;\n const availPlotH = scrollViewportH - margin.top;\n const needsFixedXAxis =\n model.orientation === 'horizontal' && minPlotSpan > availPlotH + 1;\n this._fixedXAxis = needsFixedXAxis;\n\n const theme = readThemeFromElement(this);\n\n renderBoxPlotChart(root, {\n model,\n width,\n height: scrollViewportH,\n margin,\n theme,\n orientation: this.orientation,\n showGrid: this.showGrid,\n xAxisContainer: needsFixedXAxis ? xAxisRoot : null,\n xLabel: this.xLabel || undefined,\n yLabel: this.yLabel || undefined,\n ...this.axisLabelHandlers(),\n onBoxHover: this.showTooltip\n ? ({ box, event }) => {\n const rect = this.getBoundingClientRect();\n this._tooltip = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n label: box.label,\n group: box.group,\n q1: box.q1,\n median: box.median,\n q3: box.q3,\n min: box.smallestNonOutlier,\n max: box.biggestNonOutlier,\n };\n }\n : undefined,\n onBoxLeave: this.showTooltip ? () => { this._tooltip = null; } : undefined,\n });\n\n if (xAxisRoot && !needsFixedXAxis) {\n xAxisRoot.replaceChildren();\n }\n }\n\n private renderLegend(model: BoxPlotModel) {\n if (!this.showLegend || model.groups.length <= 1) return nothing;\n const theme = readThemeFromElement(this);\n return renderChartLegend(\n swatchLegendEntries(model.groups, theme, (group, i) => {\n const sample = model.boxes.find((b) => (b.group ?? 'default') === group);\n return sample?.color ?? fdSeriesColor(i);\n }),\n );\n }\n\n override render() {\n const title = this.headerTitle();\n const model = this.parseData();\n return html`\n <div class=\"widget-shell\" part=\"shell\">\n ${this.renderShellHeader(title)}\n <div class=\"widget-body\">\n <div class=\"chart-body\" part=\"chart-body\">\n ${this.renderLegend(model)}\n <div class=\"chart-scroll\" part=\"scroll\">\n <div class=\"chart-root\" part=\"chart\" ?hidden=${this._empty}></div>\n </div>\n <div\n class=\"chart-x-axis\"\n part=\"x-axis\"\n ?hidden=${!this._fixedXAxis}\n ></div>\n </div>\n ${this._empty\n ? html`<div class=\"empty\" part=\"empty\">No data</div>`\n : nothing}\n ${this._tooltip\n ? html`<div\n class=\"tooltip\"\n part=\"tooltip\"\n style=\"left:${this._tooltip.x}px;top:${this._tooltip.y}px\"\n >\n <div class=\"name\">\n ${this._tooltip.group\n ? `${this._tooltip.group} · ${this._tooltip.label}`\n : this._tooltip.label}\n </div>\n <div>min: ${this._tooltip.min}</div>\n <div>25%: ${this._tooltip.q1}</div>\n <div>median: ${this._tooltip.median}</div>\n <div>75%: ${this._tooltip.q3}</div>\n <div>max: ${this._tooltip.max}</div>\n </div>`\n : nothing}\n ${this.renderShellLabelTooltip()}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-box-plot-chart': Ui9000BoxPlotChart;\n }\n}\n\nexport function registerBoxPlotChart(): void {\n if (!customElements.get('ui9000-box-plot-chart')) {\n customElements.define('ui9000-box-plot-chart', Ui9000BoxPlotChart);\n }\n}\n\nregisterBoxPlotChart();\n"],"names":["fdSeriesColor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui9000-box-plot-chart.js","sources":["../../../../src/components/box-plot-chart/element/ui9000-box-plot-chart.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport { renderChartLegend } from '../../../element/chart-legend-render.js';\nimport { readThemeFromElement } from '../../../context/widget-context.js';\nimport { getBoxPlotDimensions, parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { swatchLegendEntries } from '../../../utils/chart-legend.js';\nimport { chartPropsChanged } from '../../../utils/lit-draw.js';\nimport { seriesColor as fdSeriesColor } from '../../../utils/fusedash-visual.js';\nimport {\n boxPlotMinCategorySpan,\n normalizeBoxPlotData,\n type BoxPlotBox,\n type BoxPlotBoxesPayload,\n type BoxPlotModel,\n type BoxPlotOrientation,\n type FuseDashBoxPlotPayload,\n} from '../lib/index.js';\nimport { renderBoxPlotChart } from '../render/draw.js';\nimport { boxPlotStyles } from './styles.js';\n\n@customElement('ui9000-box-plot-chart')\nexport class Ui9000BoxPlotChart extends Ui9000ChartElement {\n static override styles = [boxPlotStyles, chartShellStyles];\n\n @property({ type: String })\n orientation: BoxPlotOrientation = 'vertical';\n\n @property({ type: Boolean, attribute: 'show-grid' })\n showGrid = true;\n\n @property({ type: Boolean, attribute: 'show-legend' })\n showLegend = true;\n\n @property({ type: Boolean, attribute: 'show-tooltip' })\n showTooltip = true;\n\n @property({ type: String, attribute: 'x-label' })\n xLabel = '';\n\n @property({ type: String, attribute: 'y-label' })\n yLabel = '';\n\n @state()\n private _empty = false;\n\n @state()\n private _fixedXAxis = false;\n\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.scheduleDraw());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n cancelAnimationFrame(this._raf);\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (chartPropsChanged(changed)) this.scheduleDraw();\n if (changed.has('_fixedXAxis')) {\n const body = this.shadowRoot?.querySelector('.chart-body');\n const scroll = this.shadowRoot?.querySelector('.chart-scroll');\n if (body instanceof HTMLElement) this._resizeObserver?.observe(body);\n if (scroll instanceof HTMLElement) this._resizeObserver?.observe(scroll);\n }\n }\n\n override firstUpdated(): void {\n const body = this.shadowRoot?.querySelector('.widget-body');\n const chartBody = this.shadowRoot?.querySelector('.chart-body');\n const scroll = this.shadowRoot?.querySelector('.chart-scroll');\n if (body instanceof HTMLElement) this._resizeObserver?.observe(body);\n if (chartBody instanceof HTMLElement) this._resizeObserver?.observe(chartBody);\n if (scroll instanceof HTMLElement) this._resizeObserver?.observe(scroll);\n }\n\n private scheduleDraw(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => this.draw());\n }\n\n private parseData(): BoxPlotModel {\n const raw = parseJsonAttr<\n BoxPlotBox[] | BoxPlotBoxesPayload | FuseDashBoxPlotPayload\n >(this.dataJson, []);\n const model = normalizeBoxPlotData(raw);\n if (this.orientation === 'horizontal' || this.orientation === 'vertical') {\n return { ...model, orientation: this.orientation };\n }\n return model;\n }\n\n private draw(): void {\n const chartBody = this.shadowRoot?.querySelector('.chart-body') as\n | HTMLElement\n | null;\n const scroll = this.shadowRoot?.querySelector('.chart-scroll') as\n | HTMLElement\n | null;\n const root = this.shadowRoot?.querySelector('.chart-root') as\n | HTMLElement\n | null;\n const xAxisRoot = this.shadowRoot?.querySelector('.chart-x-axis') as\n | HTMLElement\n | null;\n if (!chartBody || !scroll || !root) return;\n\n const model = this.parseData();\n this._empty = model.boxes.length === 0;\n if (this._empty) {\n root.replaceChildren();\n xAxisRoot?.replaceChildren();\n this._fixedXAxis = false;\n return;\n }\n\n const labels =\n model.categoryLabels?.length\n ? model.categoryLabels\n : [...new Set(model.boxes.map((b) => b.label))];\n const groupCount = model.groups.length || 1;\n const minPlotSpan = boxPlotMinCategorySpan(labels.length, groupCount);\n const { width, margin } = getBoxPlotDimensions(chartBody);\n const scrollViewportH = scroll.clientHeight || 300;\n const availPlotH = scrollViewportH - margin.top;\n const needsFixedXAxis =\n model.orientation === 'horizontal' && minPlotSpan > availPlotH + 1;\n this._fixedXAxis = needsFixedXAxis;\n\n const theme = readThemeFromElement(this);\n\n renderBoxPlotChart(root, {\n model,\n width,\n height: scrollViewportH,\n margin,\n theme,\n orientation: this.orientation,\n showGrid: this.showGrid,\n xAxisContainer: needsFixedXAxis ? xAxisRoot : null,\n xLabel: this.xLabel || undefined,\n yLabel: this.yLabel || undefined,\n ...this.axisLabelHandlers(),\n onBoxHover: this.showTooltip\n ? ({ box, event }) => {\n this.openTooltip(event, {\n title: box.group ? `${box.group} · ${box.label}` : box.label,\n rows: [\n { label: 'min', value: String(box.smallestNonOutlier) },\n { label: '25%', value: String(box.q1) },\n { label: 'median', value: String(box.median) },\n { label: '75%', value: String(box.q3) },\n { label: 'max', value: String(box.biggestNonOutlier) },\n ],\n });\n }\n : undefined,\n onBoxLeave: this.showTooltip ? () => this.closeTooltip() : undefined,\n });\n\n if (xAxisRoot && !needsFixedXAxis) {\n xAxisRoot.replaceChildren();\n }\n }\n\n private renderLegend(model: BoxPlotModel) {\n if (!this.showLegend || model.groups.length <= 1) return nothing;\n const theme = readThemeFromElement(this);\n return renderChartLegend(\n swatchLegendEntries(model.groups, theme, (group, i) => {\n const sample = model.boxes.find((b) => (b.group ?? 'default') === group);\n return sample?.color ?? fdSeriesColor(i);\n }),\n );\n }\n\n override render() {\n const title = this.headerTitle();\n const model = this.parseData();\n return html`\n <div class=\"widget-shell\" part=\"shell\">\n ${this.renderShellHeader(title)}\n <div class=\"widget-body\">\n <div class=\"chart-body\" part=\"chart-body\">\n ${this.renderLegend(model)}\n <div class=\"chart-scroll\" part=\"scroll\">\n <div class=\"chart-root\" part=\"chart\" ?hidden=${this._empty}></div>\n </div>\n <div\n class=\"chart-x-axis\"\n part=\"x-axis\"\n ?hidden=${!this._fixedXAxis}\n ></div>\n </div>\n ${this._empty\n ? html`<div class=\"empty\" part=\"empty\">No data</div>`\n : nothing}\n ${this.renderShellLabelTooltip()}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-box-plot-chart': Ui9000BoxPlotChart;\n }\n}\n\nexport function registerBoxPlotChart(): void {\n if (!customElements.get('ui9000-box-plot-chart')) {\n customElements.define('ui9000-box-plot-chart', Ui9000BoxPlotChart);\n }\n}\n\nregisterBoxPlotChart();\n"],"names":["fdSeriesColor"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { registerBoxPlotChart } from "./element/ui9000-box-plot-chart.js";
|
|
2
2
|
import { Ui9000BoxPlotChart } from "./element/ui9000-box-plot-chart.js";
|
|
3
3
|
import { renderBoxPlotChart } from "./render/draw.js";
|
|
4
|
-
import {
|
|
4
|
+
import { normalizeBoxPlotData } from "./lib/normalize.js";
|
|
5
5
|
import { boxPlotLinearDomain, collectLabels, collectValueExtent } from "./lib/domain.js";
|
|
6
6
|
import { formatCompact } from "./lib/format.js";
|
|
7
|
-
import {
|
|
7
|
+
import { default as default2 } from "./metadata.json.js";
|
|
8
8
|
export {
|
|
9
9
|
Ui9000BoxPlotChart,
|
|
10
10
|
default2 as boxPlotChartMetadata,
|
|
@@ -3,8 +3,8 @@ import { scaleBand, scaleLinear } from "d3-scale";
|
|
|
3
3
|
import { select } from "d3-selection";
|
|
4
4
|
import { resolvePlotLeftMargin, decorateAxisLabels, applyLeftGutterYAxisLabels } from "../../../utils/axis-labels.js";
|
|
5
5
|
import { FD, formatCompactNumber, calculateNumTicks, seriesColor } from "../../../utils/fusedash-visual.js";
|
|
6
|
-
import { boxPlotMinCategorySpan, BIN_SIZE, boxPlotGroupSpan, BIN_BORDER_RADIUS } from "../lib/layout.js";
|
|
7
6
|
import { collectLabels, boxPlotLinearDomain } from "../lib/domain.js";
|
|
7
|
+
import { boxPlotMinCategorySpan, BIN_SIZE, boxPlotGroupSpan, BIN_BORDER_RADIUS } from "../lib/layout.js";
|
|
8
8
|
const OUTLIER_RADIUS = 3;
|
|
9
9
|
const MEDIAN_STROKE = FD.axisLabelFill;
|
|
10
10
|
const WHISKER_STROKE = FD.axisLabelFill;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui9000-bubble-chart.d.ts","sourceRoot":"","sources":["../../../../src/components/bubble-chart/element/ui9000-bubble-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAa3D,qBACa,iBAAkB,SAAQ,kBAAkB;IACvD,OAAgB,MAAM,4BAAyC;IAG/D,KAAK,EAAE,WAAW,CAAa;IAG/B,QAAQ,UAAQ;IAGhB,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ui9000-bubble-chart.d.ts","sourceRoot":"","sources":["../../../../src/components/bubble-chart/element/ui9000-bubble-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAa3D,qBACa,iBAAkB,SAAQ,kBAAkB;IACvD,OAAgB,MAAM,4BAAyC;IAG/D,KAAK,EAAE,WAAW,CAAa;IAG/B,QAAQ,UAAQ;IAGhB,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,IAAI,CAAK;IAER,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAM5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,IAAI;IA0CH,MAAM;CAmBhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,qBAAqB,EAAE,iBAAiB,CAAC;KAC1C;CACF;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C"}
|
|
@@ -7,9 +7,9 @@ import { parseJsonAttr, getBubbleChartDimensions } from "../../../utils/chart-he
|
|
|
7
7
|
import { swatchLegendEntries } from "../../../utils/chart-legend.js";
|
|
8
8
|
import { formatCompactNumber } from "../../../utils/fusedash-visual.js";
|
|
9
9
|
import { chartPropsChanged } from "../../../utils/lit-draw.js";
|
|
10
|
+
import { normalizeBubbleData } from "../lib/normalize.js";
|
|
10
11
|
import { renderBubbleChart } from "../render/draw.js";
|
|
11
12
|
import { bubbleChartStyles } from "./styles.js";
|
|
12
|
-
import { normalizeBubbleData } from "../lib/normalize.js";
|
|
13
13
|
import { chartShellStyles } from "../../../element/chart-shell-styles.js";
|
|
14
14
|
var __defProp = Object.defineProperty;
|
|
15
15
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -28,7 +28,6 @@ let Ui9000BubbleChart = class extends Ui9000ChartElement {
|
|
|
28
28
|
this.showGrid = true;
|
|
29
29
|
this.showLegend = true;
|
|
30
30
|
this.showTooltip = true;
|
|
31
|
-
this._tooltip = null;
|
|
32
31
|
this._empty = false;
|
|
33
32
|
this._raf = 0;
|
|
34
33
|
}
|
|
@@ -89,26 +88,19 @@ let Ui9000BubbleChart = class extends Ui9000ChartElement {
|
|
|
89
88
|
showTooltip: this.showTooltip,
|
|
90
89
|
onHover: this.showTooltip ? ({ point, event }) => {
|
|
91
90
|
var _a2, _b, _c, _d, _e, _f;
|
|
92
|
-
const rect = this.getBoundingClientRect();
|
|
93
91
|
const xLabel = ((_b = (_a2 = model.axisDetails) == null ? void 0 : _a2[model.xField]) == null ? void 0 : _b.label) ?? model.xField;
|
|
94
92
|
const yLabel = ((_d = (_c = model.axisDetails) == null ? void 0 : _c[model.yField]) == null ? void 0 : _d.label) ?? model.yField;
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
const rows = [
|
|
94
|
+
{ label: xLabel, value: formatCompactNumber(point.x) },
|
|
95
|
+
{ label: yLabel, value: formatCompactNumber(point.y) }
|
|
98
96
|
];
|
|
99
97
|
if (model.groupField) {
|
|
100
98
|
const groupLabel = ((_f = (_e = model.axisDetails) == null ? void 0 : _e[model.groupField]) == null ? void 0 : _f.label) ?? model.groupField;
|
|
101
|
-
|
|
99
|
+
rows.push({ label: groupLabel, value: String(point.groupKey) });
|
|
102
100
|
}
|
|
103
|
-
this.
|
|
104
|
-
x: event.clientX - rect.left,
|
|
105
|
-
y: event.clientY - rect.top,
|
|
106
|
-
lines
|
|
107
|
-
};
|
|
101
|
+
this.openTooltip(event, { rows });
|
|
108
102
|
} : void 0,
|
|
109
|
-
onLeave: this.showTooltip ? () =>
|
|
110
|
-
this._tooltip = null;
|
|
111
|
-
} : void 0
|
|
103
|
+
onLeave: this.showTooltip ? () => this.closeTooltip() : void 0
|
|
112
104
|
});
|
|
113
105
|
}
|
|
114
106
|
render() {
|
|
@@ -123,13 +115,6 @@ let Ui9000BubbleChart = class extends Ui9000ChartElement {
|
|
|
123
115
|
${this._empty ? html`<div class="empty" part="empty">
|
|
124
116
|
Bubble chart requires two numeric fields. Pick numeric X and Y axes.
|
|
125
117
|
</div>` : nothing}
|
|
126
|
-
${this._tooltip ? html`<div
|
|
127
|
-
class="tooltip"
|
|
128
|
-
part="tooltip"
|
|
129
|
-
style="left:${this._tooltip.x}px;top:${this._tooltip.y}px"
|
|
130
|
-
>
|
|
131
|
-
${this._tooltip.lines.map((line) => html`<div>${line}</div>`)}
|
|
132
|
-
</div>` : nothing}
|
|
133
118
|
${this.renderShellLabelTooltip()}
|
|
134
119
|
</div>
|
|
135
120
|
</div>
|
|
@@ -149,9 +134,6 @@ __decorateClass([
|
|
|
149
134
|
__decorateClass([
|
|
150
135
|
property({ type: Boolean, attribute: "show-tooltip" })
|
|
151
136
|
], Ui9000BubbleChart.prototype, "showTooltip", 2);
|
|
152
|
-
__decorateClass([
|
|
153
|
-
state()
|
|
154
|
-
], Ui9000BubbleChart.prototype, "_tooltip", 2);
|
|
155
137
|
__decorateClass([
|
|
156
138
|
state()
|
|
157
139
|
], Ui9000BubbleChart.prototype, "_empty", 2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui9000-bubble-chart.js","sources":["../../../../src/components/bubble-chart/element/ui9000-bubble-chart.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport { renderChartLegend } from '../../../element/chart-legend-render.js';\nimport { readThemeFromElement } from '../../../context/widget-context.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { getBubbleChartDimensions, parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { swatchLegendEntries } from '../../../utils/chart-legend.js';\nimport { formatCompactNumber } from '../../../utils/fusedash-visual.js';\nimport { chartPropsChanged } from '../../../utils/lit-draw.js';\nimport {\n normalizeBubbleData,\n type BubbleChartData,\n type BubbleModel,\n} from '../lib/index.js';\nimport { renderBubbleChart } from '../render/draw.js';\nimport { bubbleChartStyles } from './styles.js';\n\n@customElement('ui9000-bubble-chart')\nexport class Ui9000BubbleChart extends Ui9000ChartElement {\n static override styles = [bubbleChartStyles, chartShellStyles];\n\n @property({ type: String, attribute: 'scale' })\n scale: WidgetScale = 'default';\n\n @property({ type: Boolean, attribute: 'show-grid' })\n showGrid = true;\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
|
|
1
|
+
{"version":3,"file":"ui9000-bubble-chart.js","sources":["../../../../src/components/bubble-chart/element/ui9000-bubble-chart.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport { renderChartLegend } from '../../../element/chart-legend-render.js';\nimport { readThemeFromElement } from '../../../context/widget-context.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { getBubbleChartDimensions, parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { swatchLegendEntries } from '../../../utils/chart-legend.js';\nimport { formatCompactNumber } from '../../../utils/fusedash-visual.js';\nimport { chartPropsChanged } from '../../../utils/lit-draw.js';\nimport {\n normalizeBubbleData,\n type BubbleChartData,\n type BubbleModel,\n} from '../lib/index.js';\nimport { renderBubbleChart } from '../render/draw.js';\nimport { bubbleChartStyles } from './styles.js';\n\n@customElement('ui9000-bubble-chart')\nexport class Ui9000BubbleChart extends Ui9000ChartElement {\n static override styles = [bubbleChartStyles, chartShellStyles];\n\n @property({ type: String, attribute: 'scale' })\n scale: WidgetScale = 'default';\n\n @property({ type: Boolean, attribute: 'show-grid' })\n showGrid = true;\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 _empty = false;\n\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.scheduleDraw());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n cancelAnimationFrame(this._raf);\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (chartPropsChanged(changed)) this.scheduleDraw();\n }\n\n private scheduleDraw(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => this.draw());\n }\n\n private parseData(): BubbleModel {\n const raw = parseJsonAttr<BubbleChartData>(this.dataJson, null);\n return normalizeBubbleData(raw);\n }\n\n private renderLegend(model: BubbleModel) {\n if (!this.showLegend || model.groups.length <= 1) return nothing;\n const theme = readThemeFromElement(this);\n return renderChartLegend(\n swatchLegendEntries(\n model.groups.map((g) => g.label),\n theme,\n (_label, index) => model.groups[index]?.color ?? theme.primary,\n ),\n );\n }\n\n private draw(): void {\n const root = this.shadowRoot?.querySelector('.chart-root') as HTMLElement | null;\n if (!root) return;\n\n const model = this.parseData();\n this._empty = model.points.length === 0;\n if (this._empty) {\n root.replaceChildren();\n return;\n }\n\n const theme = readThemeFromElement(this);\n const { width, height, margin } = getBubbleChartDimensions(root);\n\n renderBubbleChart(root, {\n model,\n width,\n height,\n margin,\n theme,\n showGrid: this.showGrid,\n showTooltip: this.showTooltip,\n onHover: this.showTooltip\n ? ({ point, event }) => {\n const xLabel = model.axisDetails?.[model.xField]?.label ?? model.xField;\n const yLabel = model.axisDetails?.[model.yField]?.label ?? model.yField;\n const rows = [\n { label: xLabel, value: formatCompactNumber(point.x) },\n { label: yLabel, value: formatCompactNumber(point.y) },\n ];\n if (model.groupField) {\n const groupLabel =\n model.axisDetails?.[model.groupField]?.label ?? model.groupField;\n rows.push({ label: groupLabel, value: String(point.groupKey) });\n }\n this.openTooltip(event, { rows });\n }\n : undefined,\n onLeave: this.showTooltip ? () => this.closeTooltip() : undefined,\n });\n }\n\n override render() {\n const title = this.headerTitle();\n const model = this._empty ? null : this.parseData();\n return html`\n <div class=\"widget-shell\" part=\"shell\">\n ${this.renderShellHeader(title)}\n <div class=\"widget-body\">\n ${model ? this.renderLegend(model) : nothing}\n <div class=\"chart-root\" part=\"chart\" ?hidden=${this._empty}></div>\n ${this._empty\n ? html`<div class=\"empty\" part=\"empty\">\n Bubble chart requires two numeric fields. Pick numeric X and Y axes.\n </div>`\n : nothing}\n ${this.renderShellLabelTooltip()}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-bubble-chart': Ui9000BubbleChart;\n }\n}\n\nexport function registerBubbleChart(): void {\n if (!customElements.get('ui9000-bubble-chart')) {\n customElements.define('ui9000-bubble-chart', Ui9000BubbleChart);\n }\n}\n\nregisterBubbleChart();\n"],"names":["_a"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoBO,IAAM,oBAAN,cAAgC,mBAAmB;AAAA,EAAnD,cAAA;AAAA,UAAA,GAAA,SAAA;AAIL,SAAA,QAAqB;AAGrB,SAAA,WAAW;AAGX,SAAA,aAAa;AAGb,SAAA,cAAc;AAGd,SAAQ,SAAS;AAGjB,SAAQ,OAAO;AAAA,EAAA;AAAA,EAEN,oBAA0B;AACjC,UAAM,kBAAA;AACN,SAAK,kBAAkB,IAAI,eAAe,MAAM,KAAK,cAAc;AACnE,SAAK,gBAAgB,QAAQ,IAAI;AAAA,EACnC;AAAA,EAES,uBAA6B;;AACpC,eAAK,oBAAL,mBAAsB;AACtB,yBAAqB,KAAK,IAAI;AAC9B,UAAM,qBAAA;AAAA,EACR;AAAA,EAES,QAAQ,SAA+B;AAC9C,QAAI,kBAAkB,OAAO,EAAG,MAAK,aAAA;AAAA,EACvC;AAAA,EAEQ,eAAqB;AAC3B,yBAAqB,KAAK,IAAI;AAC9B,SAAK,OAAO,sBAAsB,MAAM,KAAK,MAAM;AAAA,EACrD;AAAA,EAEQ,YAAyB;AAC/B,UAAM,MAAM,cAA+B,KAAK,UAAU,IAAI;AAC9D,WAAO,oBAAoB,GAAG;AAAA,EAChC;AAAA,EAEQ,aAAa,OAAoB;AACvC,QAAI,CAAC,KAAK,cAAc,MAAM,OAAO,UAAU,EAAG,QAAO;AACzD,UAAM,QAAQ,qBAAqB,IAAI;AACvC,WAAO;AAAA,MACL;AAAA,QACE,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,QAC/B;AAAA,QACA,CAAC,QAAQ;;AAAU,8BAAM,OAAO,KAAK,MAAlB,mBAAqB,UAAS,MAAM;AAAA;AAAA,MAAA;AAAA,IACzD;AAAA,EAEJ;AAAA,EAEQ,OAAa;;AACnB,UAAM,QAAO,UAAK,eAAL,mBAAiB,cAAc;AAC5C,QAAI,CAAC,KAAM;AAEX,UAAM,QAAQ,KAAK,UAAA;AACnB,SAAK,SAAS,MAAM,OAAO,WAAW;AACtC,QAAI,KAAK,QAAQ;AACf,WAAK,gBAAA;AACL;AAAA,IACF;AAEc,yBAAqB,IAAI;AACvC,UAAM,EAAE,OAAO,QAAQ,OAAA,IAAW,yBAAyB,IAAI;AAE/D,sBAAkB,MAAM;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA,UAAU,KAAK;AAAA,MACf,aAAa,KAAK;AAAA,MAClB,SAAS,KAAK,cACV,CAAC,EAAE,OAAO,YAAY;;AACpB,cAAM,WAAS,MAAAA,MAAA,MAAM,gBAAN,gBAAAA,IAAoB,MAAM,YAA1B,mBAAmC,UAAS,MAAM;AACjE,cAAM,WAAS,iBAAM,gBAAN,mBAAoB,MAAM,YAA1B,mBAAmC,UAAS,MAAM;AACjE,cAAM,OAAO;AAAA,UACX,EAAE,OAAO,QAAQ,OAAO,oBAAoB,MAAM,CAAC,EAAA;AAAA,UACnD,EAAE,OAAO,QAAQ,OAAO,oBAAoB,MAAM,CAAC,EAAA;AAAA,QAAE;AAEvD,YAAI,MAAM,YAAY;AACpB,gBAAM,eACJ,iBAAM,gBAAN,mBAAoB,MAAM,gBAA1B,mBAAuC,UAAS,MAAM;AACxD,eAAK,KAAK,EAAE,OAAO,YAAY,OAAO,OAAO,MAAM,QAAQ,GAAG;AAAA,QAChE;AACA,aAAK,YAAY,OAAO,EAAE,KAAA,CAAM;AAAA,MAClC,IACA;AAAA,MACJ,SAAS,KAAK,cAAc,MAAM,KAAK,iBAAiB;AAAA,IAAA,CACzD;AAAA,EACH;AAAA,EAES,SAAS;AAChB,UAAM,QAAQ,KAAK,YAAA;AACnB,UAAM,QAAQ,KAAK,SAAS,OAAO,KAAK,UAAA;AACxC,WAAO;AAAA;AAAA,UAED,KAAK,kBAAkB,KAAK,CAAC;AAAA;AAAA,YAE3B,QAAQ,KAAK,aAAa,KAAK,IAAI,OAAO;AAAA,yDACG,KAAK,MAAM;AAAA,YACxD,KAAK,SACH;AAAA;AAAA,wBAGA,OAAO;AAAA,YACT,KAAK,yBAAyB;AAAA;AAAA;AAAA;AAAA,EAIxC;AACF;AAxHa,kBACK,SAAS,CAAC,mBAAmB,gBAAgB;AAG7D,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,SAAS;AAAA,GAHnC,kBAIX,WAAA,SAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,WAAW,aAAa;AAAA,GANxC,kBAOX,WAAA,YAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,WAAW,eAAe;AAAA,GAT1C,kBAUX,WAAA,cAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,WAAW,gBAAgB;AAAA,GAZ3C,kBAaX,WAAA,eAAA,CAAA;AAGQ,gBAAA;AAAA,EADP,MAAA;AAAM,GAfI,kBAgBH,WAAA,UAAA,CAAA;AAhBG,oBAAN,gBAAA;AAAA,EADN,cAAc,qBAAqB;AAAA,GACvB,iBAAA;AAgIN,SAAS,sBAA4B;AAC1C,MAAI,CAAC,eAAe,IAAI,qBAAqB,GAAG;AAC9C,mBAAe,OAAO,uBAAuB,iBAAiB;AAAA,EAChE;AACF;AAEA,oBAAA;"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { registerBubbleChart } from "./element/ui9000-bubble-chart.js";
|
|
2
2
|
import { Ui9000BubbleChart } from "./element/ui9000-bubble-chart.js";
|
|
3
3
|
import { renderBubbleChart } from "./render/draw.js";
|
|
4
|
+
import { normalizeBubbleData } from "./lib/normalize.js";
|
|
4
5
|
import { default as default2 } from "./metadata.json.js";
|
|
5
6
|
import { bubbleRadiusForValue } from "../../utils/fuse-palette.js";
|
|
6
7
|
import { bubbleXDomain, bubbleYDomain } from "./lib/domain.js";
|
|
7
|
-
import { normalizeBubbleData } from "./lib/normalize.js";
|
|
8
8
|
export {
|
|
9
9
|
Ui9000BubbleChart,
|
|
10
10
|
default2 as bubbleChartMetadata,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/element/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/element/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,yBAwC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sources":["../../../../src/components/chart-renderer/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const chartRendererStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: var(--ui9000-host-min-height, 220px);\n box-sizing: border-box;\n }\n :host([embedded]) {\n min-height: 0;\n }\n .host {\n display: block;\n width: 100%;\n height: 100%;\n min-height: inherit;\n }\n .empty {\n display: grid;\n place-items: center;\n height: 100%;\n min-height: inherit;\n padding: 1rem;\n text-align: center;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-family: var(--ui9000-font-family, system-ui, sans-serif);\n font-size: 0.875rem;\n line-height: 1.4;\n }\n .empty strong {\n display: block;\n margin-bottom: 0.25rem;\n color: var(--ui9000-color-text, #111827);\n font-weight: 600;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
|
1
|
+
{"version":3,"file":"styles.js","sources":["../../../../src/components/chart-renderer/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const chartRendererStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: var(--ui9000-host-min-height, 220px);\n box-sizing: border-box;\n }\n :host([embedded]) {\n min-height: 0;\n }\n .host {\n display: block;\n width: 100%;\n height: 100%;\n min-height: inherit;\n }\n .host[hidden],\n .empty[hidden] {\n display: none !important;\n }\n .empty {\n display: grid;\n place-items: center;\n height: 100%;\n min-height: inherit;\n padding: 1rem;\n text-align: center;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-family: var(--ui9000-font-family, system-ui, sans-serif);\n font-size: 0.875rem;\n line-height: 1.4;\n }\n .empty strong {\n display: block;\n margin-bottom: 0.25rem;\n color: var(--ui9000-color-text, #111827);\n font-weight: 600;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
|
@@ -1,14 +1,24 @@
|
|
|
1
|
+
import { WidgetHeaderHandlers } from '../../../element/widget-header.js';
|
|
1
2
|
export declare class Ui9000ChartRenderer extends HTMLElement {
|
|
2
3
|
static get observedAttributes(): string[];
|
|
3
4
|
private _host;
|
|
4
5
|
private _empty;
|
|
5
6
|
private _mountToken;
|
|
7
|
+
private _headerHandlers;
|
|
8
|
+
get headerHandlers(): WidgetHeaderHandlers;
|
|
9
|
+
set headerHandlers(value: WidgetHeaderHandlers);
|
|
6
10
|
connectedCallback(): void;
|
|
7
11
|
attributeChangedCallback(): void;
|
|
12
|
+
/** In-memory payload. Not mirrored to the `data` attribute — Storybook's HTML source pass splits quotes there and JSON.parse then fails at column 2. */
|
|
13
|
+
private _widgetJson;
|
|
8
14
|
private get dataJson();
|
|
15
|
+
get widgetJson(): string;
|
|
16
|
+
set widgetJson(value: string);
|
|
9
17
|
private get chartTypeAttr();
|
|
10
18
|
private get scale();
|
|
11
19
|
private applyBoolProp;
|
|
20
|
+
private applyHeaderVariant;
|
|
21
|
+
private applyHeaderHandlers;
|
|
12
22
|
private copyHostAttr;
|
|
13
23
|
private boolAttr;
|
|
14
24
|
private showEmpty;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui9000-chart-renderer.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ui9000-chart-renderer.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAuB9E,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAgBxC;IAED,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,eAAe,CAA4B;IAEnD,IAAI,cAAc,IAAI,oBAAoB,CAEzC;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,oBAAoB,EAI7C;IAED,iBAAiB,IAAI,IAAI;IAqBzB,wBAAwB,IAAI,IAAI;IAIhC,wJAAwJ;IACxJ,OAAO,CAAC,WAAW,CAAuB;IAE1C,OAAO,KAAK,QAAQ,GAEnB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAK3B;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS;YAgBH,UAAU;CAsGzB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,uBAAuB,EAAE,mBAAmB,CAAC;KAC9C;CACF;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { loadChart } from "../../../lazy/index.js";
|
|
2
2
|
import { parseJsonAttr } from "../../../utils/chart-helpers.js";
|
|
3
|
-
import { chartRendererStyles } from "./styles.js";
|
|
4
|
-
import { resolveWidgetChartType } from "../lib/resolve-chart-type.js";
|
|
5
3
|
import { resolveChartTarget } from "../lib/registry.js";
|
|
4
|
+
import { resolveWidgetChartType } from "../lib/resolve-chart-type.js";
|
|
5
|
+
import { chartRendererStyles } from "./styles.js";
|
|
6
6
|
function applyTargetAttrs(el, attrs) {
|
|
7
7
|
if (!attrs) return;
|
|
8
8
|
for (const [key, value] of Object.entries(attrs)) {
|
|
@@ -20,6 +20,8 @@ class Ui9000ChartRenderer extends HTMLElement {
|
|
|
20
20
|
this._host = null;
|
|
21
21
|
this._empty = null;
|
|
22
22
|
this._mountToken = 0;
|
|
23
|
+
this._headerHandlers = {};
|
|
24
|
+
this._widgetJson = null;
|
|
23
25
|
}
|
|
24
26
|
static get observedAttributes() {
|
|
25
27
|
return [
|
|
@@ -30,6 +32,7 @@ class Ui9000ChartRenderer extends HTMLElement {
|
|
|
30
32
|
"show-legend",
|
|
31
33
|
"show-tooltip",
|
|
32
34
|
"show-header",
|
|
35
|
+
"header-variant",
|
|
33
36
|
"embedded",
|
|
34
37
|
"chart-title",
|
|
35
38
|
"mapbox-token",
|
|
@@ -37,6 +40,15 @@ class Ui9000ChartRenderer extends HTMLElement {
|
|
|
37
40
|
"pmtiles-base-url"
|
|
38
41
|
];
|
|
39
42
|
}
|
|
43
|
+
get headerHandlers() {
|
|
44
|
+
return this._headerHandlers;
|
|
45
|
+
}
|
|
46
|
+
set headerHandlers(value) {
|
|
47
|
+
var _a;
|
|
48
|
+
this._headerHandlers = value ?? {};
|
|
49
|
+
const chart = (_a = this._host) == null ? void 0 : _a.firstElementChild;
|
|
50
|
+
if (chart instanceof HTMLElement) this.applyHeaderHandlers(chart);
|
|
51
|
+
}
|
|
40
52
|
connectedCallback() {
|
|
41
53
|
if (this._host) return;
|
|
42
54
|
const root = this.attachShadow({ mode: "open" });
|
|
@@ -58,7 +70,16 @@ class Ui9000ChartRenderer extends HTMLElement {
|
|
|
58
70
|
if (this._host) void this.mountChart();
|
|
59
71
|
}
|
|
60
72
|
get dataJson() {
|
|
61
|
-
return this.getAttribute("data") ?? "{}";
|
|
73
|
+
return this._widgetJson ?? this.getAttribute("data") ?? "{}";
|
|
74
|
+
}
|
|
75
|
+
get widgetJson() {
|
|
76
|
+
return this.dataJson;
|
|
77
|
+
}
|
|
78
|
+
set widgetJson(value) {
|
|
79
|
+
const next = value && value.trim() ? value : "{}";
|
|
80
|
+
if (next === this._widgetJson) return;
|
|
81
|
+
this._widgetJson = next;
|
|
82
|
+
if (this._host) void this.mountChart();
|
|
62
83
|
}
|
|
63
84
|
get chartTypeAttr() {
|
|
64
85
|
return this.getAttribute("chart-type") ?? "";
|
|
@@ -71,6 +92,15 @@ class Ui9000ChartRenderer extends HTMLElement {
|
|
|
71
92
|
const on = this.getAttribute(attr) !== "false";
|
|
72
93
|
el[prop] = on;
|
|
73
94
|
}
|
|
95
|
+
applyHeaderVariant(el) {
|
|
96
|
+
const variant = this.getAttribute("header-variant");
|
|
97
|
+
if (variant === "dash" || variant === "chat") el.setAttribute("header-variant", variant);
|
|
98
|
+
else el.removeAttribute("header-variant");
|
|
99
|
+
}
|
|
100
|
+
applyHeaderHandlers(el) {
|
|
101
|
+
if (!("headerHandlers" in el)) return;
|
|
102
|
+
el.headerHandlers = this._headerHandlers;
|
|
103
|
+
}
|
|
74
104
|
copyHostAttr(el, name) {
|
|
75
105
|
const value = this.getAttribute(name);
|
|
76
106
|
if (value) el.setAttribute(name, value);
|
|
@@ -128,13 +158,18 @@ class Ui9000ChartRenderer extends HTMLElement {
|
|
|
128
158
|
el = document.createElement(target.tag);
|
|
129
159
|
}
|
|
130
160
|
if (!el) return;
|
|
131
|
-
|
|
161
|
+
const payload = this.dataJson;
|
|
162
|
+
const dataProp = el;
|
|
163
|
+
if ("dataJson" in el) dataProp.dataJson = payload;
|
|
164
|
+
else el.setAttribute("data", payload);
|
|
132
165
|
el.setAttribute("scale", this.scale);
|
|
133
166
|
if (title) el.setAttribute("chart-title", title);
|
|
134
167
|
else el.removeAttribute("chart-title");
|
|
135
168
|
if (this.getAttribute("show-header") === "false")
|
|
136
169
|
el.setAttribute("show-header", "false");
|
|
137
170
|
else el.removeAttribute("show-header");
|
|
171
|
+
this.applyHeaderVariant(el);
|
|
172
|
+
this.applyHeaderHandlers(el);
|
|
138
173
|
const showGrid = this.boolAttr("show-grid");
|
|
139
174
|
const showLegend = this.boolAttr("show-legend");
|
|
140
175
|
const showTooltip = this.boolAttr("show-tooltip");
|
|
@@ -173,6 +208,7 @@ class Ui9000ChartRenderer extends HTMLElement {
|
|
|
173
208
|
this._host.replaceChildren();
|
|
174
209
|
this._host.appendChild(el);
|
|
175
210
|
}
|
|
211
|
+
this._empty.replaceChildren();
|
|
176
212
|
this._empty.hidden = true;
|
|
177
213
|
this._host.hidden = false;
|
|
178
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui9000-chart-renderer.js","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"sourcesContent":["import { loadChart } from '../../../lazy/index.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport {\n resolveChartTarget,\n resolveWidgetChartType,\n type ChartTargetAttrs,\n} from '../lib/index.js';\nimport { chartRendererStyles } from './styles.js';\n\nfunction applyTargetAttrs(el: HTMLElement, attrs?: ChartTargetAttrs): void {\n if (!attrs) return;\n for (const [key, value] of Object.entries(attrs)) {\n if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n }\n}\n\nexport class Ui9000ChartRenderer extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\n 'data',\n 'chart-type',\n 'scale',\n 'show-grid',\n 'show-legend',\n 'show-tooltip',\n 'show-header',\n 'embedded',\n 'chart-title',\n 'mapbox-token',\n 'geojson-base-url',\n 'pmtiles-base-url',\n ];\n }\n\n private _host: HTMLDivElement | null = null;\n private _empty: HTMLDivElement | null = null;\n private _mountToken = 0;\n\n connectedCallback(): void {\n if (this._host) return;\n const root = this.attachShadow({ mode: 'open' });\n const style = document.createElement('style');\n style.textContent = chartRendererStyles.cssText;\n root.appendChild(style);\n\n this._host = document.createElement('div');\n this._host.className = 'host';\n this._host.part = 'chart';\n root.appendChild(this._host);\n\n this._empty = document.createElement('div');\n this._empty.className = 'empty';\n this._empty.part = 'empty';\n this._empty.hidden = true;\n root.appendChild(this._empty);\n\n void this.mountChart();\n }\n\n attributeChangedCallback(): void {\n if (this._host) void this.mountChart();\n }\n\n private get dataJson(): string {\n return this.getAttribute('data') ?? '{}';\n }\n\n private get chartTypeAttr(): string {\n return this.getAttribute('chart-type') ?? '';\n }\n\n private get scale(): WidgetScale {\n return (this.getAttribute('scale') as WidgetScale) || 'default';\n }\n\n private applyBoolProp(el: HTMLElement, attr: string, prop: string): void {\n if (!this.hasAttribute(attr)) return;\n const on = this.getAttribute(attr) !== 'false';\n (el as unknown as Record<string, unknown>)[prop] = on;\n }\n\n private copyHostAttr(el: HTMLElement, name: string): void {\n const value = this.getAttribute(name);\n if (value) el.setAttribute(name, value);\n else el.removeAttribute(name);\n }\n\n private boolAttr(name: string): boolean | undefined {\n if (!this.hasAttribute(name)) return undefined;\n return this.getAttribute(name) !== 'false';\n }\n\n private showEmpty(message: string, detail?: string): void {\n if (!this._empty || !this._host) return;\n this._host.replaceChildren();\n this._host.hidden = true;\n this._empty.hidden = false;\n this._empty.replaceChildren();\n const strong = document.createElement('strong');\n strong.textContent = message;\n this._empty.appendChild(strong);\n if (detail) {\n const p = document.createElement('span');\n p.textContent = detail;\n this._empty.appendChild(p);\n }\n }\n\n private async mountChart(): Promise<void> {\n if (!this._host || !this._empty) return;\n const token = ++this._mountToken;\n\n const chartType = resolveWidgetChartType(this.dataJson, this.chartTypeAttr);\n if (!chartType) {\n this.showEmpty('No chart type', 'Pass chart-type or a widget payload with chartType.');\n return;\n }\n\n const target = resolveChartTarget(chartType);\n if (!target) {\n this.showEmpty(\n 'Unsupported chart type',\n `\"${chartType}\" is not available in @ui9000/widgets yet.`,\n );\n return;\n }\n\n try {\n await loadChart(target.kind);\n } catch {\n if (token !== this._mountToken) return;\n this.showEmpty('Failed to load chart', target.kind);\n return;\n }\n\n if (token !== this._mountToken) return;\n\n const widget = parseJsonAttr<{ name?: string } | null>(this.dataJson, null);\n const title =\n this.getAttribute('show-header') === 'false'\n ? ''\n : this.getAttribute('chart-title')?.trim() ||\n (widget && typeof widget === 'object' ? widget.name?.trim() : '') ||\n '';\n\n let el = this._host.firstElementChild as HTMLElement | null;\n const reuse = !!el && el.tagName.toLowerCase() === target.tag;\n if (!reuse) {\n el = document.createElement(target.tag);\n }\n if (!el) return;\n\n el.setAttribute('data', this.dataJson);\n el.setAttribute('scale', this.scale);\n if (title) el.setAttribute('chart-title', title);\n else el.removeAttribute('chart-title');\n if (this.getAttribute('show-header') === 'false')\n el.setAttribute('show-header', 'false');\n else el.removeAttribute('show-header');\n\n const showGrid = this.boolAttr('show-grid');\n const showLegend = this.boolAttr('show-legend');\n const showTooltip = this.boolAttr('show-tooltip');\n if (showGrid !== undefined) {\n if (showGrid) el.setAttribute('show-grid', '');\n else el.setAttribute('show-grid', 'false');\n }\n if (showLegend !== undefined) {\n if (showLegend) el.setAttribute('show-legend', '');\n else el.setAttribute('show-legend', 'false');\n }\n if (showTooltip !== undefined) {\n if (showTooltip) el.setAttribute('show-tooltip', '');\n else el.setAttribute('show-tooltip', 'false');\n }\n this.applyBoolProp(el, 'show-header', 'showHeader');\n this.applyBoolProp(el, 'show-grid', 'showGrid');\n this.applyBoolProp(el, 'show-legend', 'showLegend');\n this.applyBoolProp(el, 'show-tooltip', 'showTooltip');\n\n applyTargetAttrs(el, target.attrs);\n this.copyHostAttr(el, 'mapbox-token');\n this.copyHostAttr(el, 'geojson-base-url');\n this.copyHostAttr(el, 'pmtiles-base-url');\n el.style.display = 'block';\n el.style.width = '100%';\n el.style.height = '100%';\n if (this.hasAttribute('embedded')) {\n el.setAttribute('embedded', '');\n el.style.minHeight = '0';\n el.style.setProperty('--ui9000-host-min-height', '0');\n el.style.setProperty('--ui9000-plot-min-height', '0');\n } else {\n el.removeAttribute('embedded');\n }\n\n if (!reuse) {\n this._host.replaceChildren();\n this._host.appendChild(el);\n }\n\n this._empty.hidden = true;\n this._host.hidden = false;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-chart-renderer': Ui9000ChartRenderer;\n }\n}\n\nexport function registerChartRenderer(): void {\n if (!customElements.get('ui9000-chart-renderer')) {\n customElements.define('ui9000-chart-renderer', Ui9000ChartRenderer);\n }\n}\n\nregisterChartRenderer();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui9000-chart-renderer.js","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"sourcesContent":["import type { WidgetHeaderHandlers } from '../../../element/widget-header.js';\nimport { loadChart } from '../../../lazy/index.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport {\n resolveChartTarget,\n resolveWidgetChartType,\n type ChartTargetAttrs,\n} from '../lib/index.js';\nimport { chartRendererStyles } from './styles.js';\n\nfunction applyTargetAttrs(el: HTMLElement, attrs?: ChartTargetAttrs): void {\n if (!attrs) return;\n for (const [key, value] of Object.entries(attrs)) {\n if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n }\n}\n\nexport class Ui9000ChartRenderer extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\n 'data',\n 'chart-type',\n 'scale',\n 'show-grid',\n 'show-legend',\n 'show-tooltip',\n 'show-header',\n 'header-variant',\n 'embedded',\n 'chart-title',\n 'mapbox-token',\n 'geojson-base-url',\n 'pmtiles-base-url',\n ];\n }\n\n private _host: HTMLDivElement | null = null;\n private _empty: HTMLDivElement | null = null;\n private _mountToken = 0;\n private _headerHandlers: WidgetHeaderHandlers = {};\n\n get headerHandlers(): WidgetHeaderHandlers {\n return this._headerHandlers;\n }\n\n set headerHandlers(value: WidgetHeaderHandlers) {\n this._headerHandlers = value ?? {};\n const chart = this._host?.firstElementChild;\n if (chart instanceof HTMLElement) this.applyHeaderHandlers(chart);\n }\n\n connectedCallback(): void {\n if (this._host) return;\n const root = this.attachShadow({ mode: 'open' });\n const style = document.createElement('style');\n style.textContent = chartRendererStyles.cssText;\n root.appendChild(style);\n\n this._host = document.createElement('div');\n this._host.className = 'host';\n this._host.part = 'chart';\n root.appendChild(this._host);\n\n this._empty = document.createElement('div');\n this._empty.className = 'empty';\n this._empty.part = 'empty';\n this._empty.hidden = true;\n root.appendChild(this._empty);\n\n void this.mountChart();\n }\n\n attributeChangedCallback(): void {\n if (this._host) void this.mountChart();\n }\n\n /** In-memory payload. Not mirrored to the `data` attribute — Storybook's HTML source pass splits quotes there and JSON.parse then fails at column 2. */\n private _widgetJson: string | null = null;\n\n private get dataJson(): string {\n return this._widgetJson ?? this.getAttribute('data') ?? '{}';\n }\n\n get widgetJson(): string {\n return this.dataJson;\n }\n\n set widgetJson(value: string) {\n const next = value && value.trim() ? value : '{}';\n if (next === this._widgetJson) return;\n this._widgetJson = next;\n if (this._host) void this.mountChart();\n }\n\n private get chartTypeAttr(): string {\n return this.getAttribute('chart-type') ?? '';\n }\n\n private get scale(): WidgetScale {\n return (this.getAttribute('scale') as WidgetScale) || 'default';\n }\n\n private applyBoolProp(el: HTMLElement, attr: string, prop: string): void {\n if (!this.hasAttribute(attr)) return;\n const on = this.getAttribute(attr) !== 'false';\n (el as unknown as Record<string, unknown>)[prop] = on;\n }\n\n private applyHeaderVariant(el: HTMLElement): void {\n const variant = this.getAttribute('header-variant');\n if (variant === 'dash' || variant === 'chat') el.setAttribute('header-variant', variant);\n else el.removeAttribute('header-variant');\n }\n\n private applyHeaderHandlers(el: HTMLElement): void {\n if (!('headerHandlers' in el)) return;\n (el as HTMLElement & { headerHandlers: WidgetHeaderHandlers }).headerHandlers =\n this._headerHandlers;\n }\n\n private copyHostAttr(el: HTMLElement, name: string): void {\n const value = this.getAttribute(name);\n if (value) el.setAttribute(name, value);\n else el.removeAttribute(name);\n }\n\n private boolAttr(name: string): boolean | undefined {\n if (!this.hasAttribute(name)) return undefined;\n return this.getAttribute(name) !== 'false';\n }\n\n private showEmpty(message: string, detail?: string): void {\n if (!this._empty || !this._host) return;\n this._host.replaceChildren();\n this._host.hidden = true;\n this._empty.hidden = false;\n this._empty.replaceChildren();\n const strong = document.createElement('strong');\n strong.textContent = message;\n this._empty.appendChild(strong);\n if (detail) {\n const p = document.createElement('span');\n p.textContent = detail;\n this._empty.appendChild(p);\n }\n }\n\n private async mountChart(): Promise<void> {\n if (!this._host || !this._empty) return;\n const token = ++this._mountToken;\n\n const chartType = resolveWidgetChartType(this.dataJson, this.chartTypeAttr);\n if (!chartType) {\n this.showEmpty('No chart type', 'Pass chart-type or a widget payload with chartType.');\n return;\n }\n\n const target = resolveChartTarget(chartType);\n if (!target) {\n this.showEmpty(\n 'Unsupported chart type',\n `\"${chartType}\" is not available in @ui9000/widgets yet.`,\n );\n return;\n }\n\n try {\n await loadChart(target.kind);\n } catch {\n if (token !== this._mountToken) return;\n this.showEmpty('Failed to load chart', target.kind);\n return;\n }\n\n if (token !== this._mountToken) return;\n\n const widget = parseJsonAttr<{ name?: string } | null>(this.dataJson, null);\n const title =\n this.getAttribute('show-header') === 'false'\n ? ''\n : this.getAttribute('chart-title')?.trim() ||\n (widget && typeof widget === 'object' ? widget.name?.trim() : '') ||\n '';\n\n let el = this._host.firstElementChild as HTMLElement | null;\n const reuse = !!el && el.tagName.toLowerCase() === target.tag;\n if (!reuse) {\n el = document.createElement(target.tag);\n }\n if (!el) return;\n\n const payload = this.dataJson;\n const dataProp = el as HTMLElement & { dataJson?: string };\n if ('dataJson' in el) dataProp.dataJson = payload;\n else el.setAttribute('data', payload);\n el.setAttribute('scale', this.scale);\n if (title) el.setAttribute('chart-title', title);\n else el.removeAttribute('chart-title');\n if (this.getAttribute('show-header') === 'false')\n el.setAttribute('show-header', 'false');\n else el.removeAttribute('show-header');\n this.applyHeaderVariant(el);\n this.applyHeaderHandlers(el);\n\n const showGrid = this.boolAttr('show-grid');\n const showLegend = this.boolAttr('show-legend');\n const showTooltip = this.boolAttr('show-tooltip');\n if (showGrid !== undefined) {\n if (showGrid) el.setAttribute('show-grid', '');\n else el.setAttribute('show-grid', 'false');\n }\n if (showLegend !== undefined) {\n if (showLegend) el.setAttribute('show-legend', '');\n else el.setAttribute('show-legend', 'false');\n }\n if (showTooltip !== undefined) {\n if (showTooltip) el.setAttribute('show-tooltip', '');\n else el.setAttribute('show-tooltip', 'false');\n }\n this.applyBoolProp(el, 'show-header', 'showHeader');\n this.applyBoolProp(el, 'show-grid', 'showGrid');\n this.applyBoolProp(el, 'show-legend', 'showLegend');\n this.applyBoolProp(el, 'show-tooltip', 'showTooltip');\n\n applyTargetAttrs(el, target.attrs);\n this.copyHostAttr(el, 'mapbox-token');\n this.copyHostAttr(el, 'geojson-base-url');\n this.copyHostAttr(el, 'pmtiles-base-url');\n el.style.display = 'block';\n el.style.width = '100%';\n el.style.height = '100%';\n if (this.hasAttribute('embedded')) {\n el.setAttribute('embedded', '');\n el.style.minHeight = '0';\n el.style.setProperty('--ui9000-host-min-height', '0');\n el.style.setProperty('--ui9000-plot-min-height', '0');\n } else {\n el.removeAttribute('embedded');\n }\n\n if (!reuse) {\n this._host.replaceChildren();\n this._host.appendChild(el);\n }\n\n this._empty.replaceChildren();\n this._empty.hidden = true;\n this._host.hidden = false;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-chart-renderer': Ui9000ChartRenderer;\n }\n}\n\nexport function registerChartRenderer(): void {\n if (!customElements.get('ui9000-chart-renderer')) {\n customElements.define('ui9000-chart-renderer', Ui9000ChartRenderer);\n }\n}\n\nregisterChartRenderer();\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { registerChartRenderer } from "./element/ui9000-chart-renderer.js";
|
|
2
2
|
import { Ui9000ChartRenderer } from "./element/ui9000-chart-renderer.js";
|
|
3
|
-
import { default as default2 } from "./metadata.json.js";
|
|
4
3
|
import { CHART_TYPE_ALIASES, SUPPORTED_CHART_TYPES, canRenderChartType, resolveChartTarget, resolveRegistryKey } from "./lib/registry.js";
|
|
5
4
|
import { resolveWidgetChartType } from "./lib/resolve-chart-type.js";
|
|
5
|
+
import { default as default2 } from "./metadata.json.js";
|
|
6
6
|
export {
|
|
7
7
|
CHART_TYPE_ALIASES,
|
|
8
8
|
SUPPORTED_CHART_TYPES,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAqB,WAAW,EAAoB,MAAM,YAAY,CAAC;AAEnF,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB/D,CAAC;AAgFF,eAAO,MAAM,qBAAqB,mBAA8C,CAAC;AAEjF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAI3F;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAI3F;AAMD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAIhF"}
|
|
@@ -8,6 +8,7 @@ import donutMeta from "../../donut-chart/metadata.json.js";
|
|
|
8
8
|
import giniImpurityEntropyMeta from "../../gini-impurity-entropy-chart/metadata.json.js";
|
|
9
9
|
import histogramMeta from "../../histogram-chart/metadata.json.js";
|
|
10
10
|
import kpiMeta from "../../kpi-widget/metadata.json.js";
|
|
11
|
+
import statusGaugeMeta from "../../status-gauge-widget/metadata.json.js";
|
|
11
12
|
import lineMeta from "../../line-chart/metadata.json.js";
|
|
12
13
|
import lollipopMeta from "../../lollipop/metadata.json.js";
|
|
13
14
|
import mapChartMeta from "../../map-chart/metadata.json.js";
|
|
@@ -57,6 +58,7 @@ const METADATA = [
|
|
|
57
58
|
giniImpurityEntropyMeta,
|
|
58
59
|
histogramMeta,
|
|
59
60
|
kpiMeta,
|
|
61
|
+
statusGaugeMeta,
|
|
60
62
|
lineMeta,
|
|
61
63
|
lollipopMeta,
|
|
62
64
|
mapChartMeta,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"sourcesContent":["import type { ChartKind } from '../../../lazy/index.js';\nimport areaChartMeta from '../../area-chart/metadata.json';\nimport areaGroupedBarMeta from '../../area-grouped-bar-chart/metadata.json';\nimport barChartMeta from '../../bar-chart/metadata.json';\nimport biasVarianceTradeoffMeta from '../../bias-variance-tradeoff-chart/metadata.json';\nimport boxPlotMeta from '../../box-plot-chart/metadata.json';\nimport bubbleMeta from '../../bubble-chart/metadata.json';\nimport donutMeta from '../../donut-chart/metadata.json';\nimport giniImpurityEntropyMeta from '../../gini-impurity-entropy-chart/metadata.json';\nimport histogramMeta from '../../histogram-chart/metadata.json';\nimport kpiMeta from '../../kpi-widget/metadata.json';\nimport lineMeta from '../../line-chart/metadata.json';\nimport lollipopMeta from '../../lollipop/metadata.json';\nimport mapChartMeta from '../../map-chart/metadata.json';\nimport matrixMeta from '../../matrix-chart/metadata.json';\nimport networkGraphMeta from '../../network-graph/metadata.json';\nimport parallelCoordinatesMeta from '../../parallel-coordinates-chart/metadata.json';\nimport pieMeta from '../../pie-chart/metadata.json';\nimport polarAreaMeta from '../../polar-area-chart/metadata.json';\nimport punchcardMeta from '../../punchcard-chart/metadata.json';\nimport radarMeta from '../../radar-chart/metadata.json';\nimport radialBarMeta from '../../radial-bar-chart/metadata.json';\nimport sankeyMeta from '../../sankey-chart/metadata.json';\nimport scatterPlotMeta from '../../scatter-plot-chart/metadata.json';\nimport scatterSparklineMeta from '../../scatter-sparkline-chart/metadata.json';\nimport sparkAreaMeta from '../../spark-area-chart/metadata.json';\nimport sparkLineMeta from '../../spark-line-chart/metadata.json';\nimport stepLineMeta from '../../step-line-chart/metadata.json';\nimport treemapMeta from '../../treemap-chart/metadata.json';\nimport violinMeta from '../../violin-chart/metadata.json';\nimport waterfallMeta from '../../waterfall-chart/metadata.json';\nimport partialDependenceMeta from '../../partial-dependence-chart/metadata.json';\nimport type { ChartMetadataLike, ChartTarget, ChartTargetAttrs } from './types.js';\n\n/** FuseDash variant / legacy chartType → registry key (mirrors client chartTypeRegistry). */\nexport const CHART_TYPE_ALIASES: Readonly<Record<string, string>> = {\n barGroupedChart: 'barGrouped',\n barStackedChart: 'barStacked',\n cumulativeBarChart: 'cumulativeBar',\n barHorizontalChart: 'barHorizontal',\n barHorizontalGroupedChart: 'barHorizontalGrouped',\n barHorizontalStackedChart: 'barHorizontalStacked',\n lollipopGroupedChart: 'lollipopGroupedChart',\n lollipopStackedChart: 'lollipopStackedChart',\n lineGroupedChart: 'lineGroupedChart',\n areaStackedChart: 'areaStackedChart',\n qqPlot: 'qqPlot',\n radarChartGrouped: 'radarGroupedChart',\n /** Client charts mock / MCP spelling */\n rocPlotChart: 'rocCurveChart',\n UniversalMap: 'mapChart',\n};\n\nconst METADATA: ChartMetadataLike[] = [\n areaChartMeta,\n areaGroupedBarMeta,\n barChartMeta,\n biasVarianceTradeoffMeta,\n boxPlotMeta,\n bubbleMeta,\n donutMeta,\n giniImpurityEntropyMeta,\n histogramMeta,\n kpiMeta,\n lineMeta,\n lollipopMeta,\n mapChartMeta,\n matrixMeta,\n networkGraphMeta,\n parallelCoordinatesMeta,\n pieMeta,\n polarAreaMeta,\n punchcardMeta,\n radarMeta,\n radialBarMeta,\n sankeyMeta,\n scatterPlotMeta,\n scatterSparklineMeta,\n sparkAreaMeta,\n sparkLineMeta,\n stepLineMeta,\n treemapMeta,\n violinMeta,\n waterfallMeta,\n partialDependenceMeta,\n];\n\nfunction toDomAttr(camelKey: string): string {\n return camelKey.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n}\n\nfunction attrsFromMap(raw?: Record<string, unknown>): ChartTargetAttrs | undefined {\n if (!raw) return undefined;\n const out: ChartTargetAttrs = {};\n for (const [key, value] of Object.entries(raw)) {\n if (typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number') {\n out[toDomAttr(key)] = value;\n }\n }\n return Object.keys(out).length ? out : undefined;\n}\n\nfunction entriesFromMeta(meta: ChartMetadataLike): Record<string, ChartTarget> {\n const kind = meta.id as ChartKind;\n const out: Record<string, ChartTarget> = {};\n for (const chartType of meta.chartTypeKeys ?? []) {\n out[chartType] = {\n kind,\n tag: meta.tag,\n attrs: attrsFromMap(meta.chartTypeMap?.[chartType]),\n };\n }\n return out;\n}\n\nconst REGISTRY: Record<string, ChartTarget> = METADATA.reduce(\n (acc, meta) => Object.assign(acc, entriesFromMeta(meta)),\n {} as Record<string, ChartTarget>,\n);\n\n/** KS / ROC overlays map to step-line `graf-type`. */\nREGISTRY.ksPlotChart = {\n ...REGISTRY.ksPlotChart,\n attrs: { 'graf-type': 'curve' },\n};\nREGISTRY.rocCurveChart = {\n ...REGISTRY.rocCurveChart,\n attrs: { 'graf-type': 'line' },\n};\n\nexport const SUPPORTED_CHART_TYPES = Object.freeze(Object.keys(REGISTRY).sort());\n\nexport function resolveRegistryKey(chartType: string | undefined | null): string | undefined {\n if (!chartType?.trim()) return undefined;\n const trimmed = chartType.trim();\n return CHART_TYPE_ALIASES[trimmed] ?? trimmed;\n}\n\n/** Resolve FuseDash chartType → lazy ChartKind + host tag + optional attrs. */\nexport function resolveChartTarget(chartType: string | undefined | null): ChartTarget | null {\n const key = resolveRegistryKey(chartType);\n if (!key) return null;\n return REGISTRY[key] ?? null;\n}\n\nconst HOST_NOT_READY = new Set(\n METADATA.filter((meta) => meta.usageConditions?.hostReady === false).map((meta) => meta.id),\n);\n\nexport function canRenderChartType(chartType: string | undefined | null): boolean {\n const target = resolveChartTarget(chartType);\n if (!target) return false;\n return !HOST_NOT_READY.has(target.kind);\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"sourcesContent":["import type { ChartKind } from '../../../lazy/index.js';\nimport areaChartMeta from '../../area-chart/metadata.json';\nimport areaGroupedBarMeta from '../../area-grouped-bar-chart/metadata.json';\nimport barChartMeta from '../../bar-chart/metadata.json';\nimport biasVarianceTradeoffMeta from '../../bias-variance-tradeoff-chart/metadata.json';\nimport boxPlotMeta from '../../box-plot-chart/metadata.json';\nimport bubbleMeta from '../../bubble-chart/metadata.json';\nimport donutMeta from '../../donut-chart/metadata.json';\nimport giniImpurityEntropyMeta from '../../gini-impurity-entropy-chart/metadata.json';\nimport histogramMeta from '../../histogram-chart/metadata.json';\nimport kpiMeta from '../../kpi-widget/metadata.json';\nimport statusGaugeMeta from '../../status-gauge-widget/metadata.json';\nimport lineMeta from '../../line-chart/metadata.json';\nimport lollipopMeta from '../../lollipop/metadata.json';\nimport mapChartMeta from '../../map-chart/metadata.json';\nimport matrixMeta from '../../matrix-chart/metadata.json';\nimport networkGraphMeta from '../../network-graph/metadata.json';\nimport parallelCoordinatesMeta from '../../parallel-coordinates-chart/metadata.json';\nimport pieMeta from '../../pie-chart/metadata.json';\nimport polarAreaMeta from '../../polar-area-chart/metadata.json';\nimport punchcardMeta from '../../punchcard-chart/metadata.json';\nimport radarMeta from '../../radar-chart/metadata.json';\nimport radialBarMeta from '../../radial-bar-chart/metadata.json';\nimport sankeyMeta from '../../sankey-chart/metadata.json';\nimport scatterPlotMeta from '../../scatter-plot-chart/metadata.json';\nimport scatterSparklineMeta from '../../scatter-sparkline-chart/metadata.json';\nimport sparkAreaMeta from '../../spark-area-chart/metadata.json';\nimport sparkLineMeta from '../../spark-line-chart/metadata.json';\nimport stepLineMeta from '../../step-line-chart/metadata.json';\nimport treemapMeta from '../../treemap-chart/metadata.json';\nimport violinMeta from '../../violin-chart/metadata.json';\nimport waterfallMeta from '../../waterfall-chart/metadata.json';\nimport partialDependenceMeta from '../../partial-dependence-chart/metadata.json';\nimport type { ChartMetadataLike, ChartTarget, ChartTargetAttrs } from './types.js';\n\n/** FuseDash variant / legacy chartType → registry key (mirrors client chartTypeRegistry). */\nexport const CHART_TYPE_ALIASES: Readonly<Record<string, string>> = {\n barGroupedChart: 'barGrouped',\n barStackedChart: 'barStacked',\n cumulativeBarChart: 'cumulativeBar',\n barHorizontalChart: 'barHorizontal',\n barHorizontalGroupedChart: 'barHorizontalGrouped',\n barHorizontalStackedChart: 'barHorizontalStacked',\n lollipopGroupedChart: 'lollipopGroupedChart',\n lollipopStackedChart: 'lollipopStackedChart',\n lineGroupedChart: 'lineGroupedChart',\n areaStackedChart: 'areaStackedChart',\n qqPlot: 'qqPlot',\n radarChartGrouped: 'radarGroupedChart',\n /** Client charts mock / MCP spelling */\n rocPlotChart: 'rocCurveChart',\n UniversalMap: 'mapChart',\n};\n\nconst METADATA: ChartMetadataLike[] = [\n areaChartMeta,\n areaGroupedBarMeta,\n barChartMeta,\n biasVarianceTradeoffMeta,\n boxPlotMeta,\n bubbleMeta,\n donutMeta,\n giniImpurityEntropyMeta,\n histogramMeta,\n kpiMeta,\n statusGaugeMeta,\n lineMeta,\n lollipopMeta,\n mapChartMeta,\n matrixMeta,\n networkGraphMeta,\n parallelCoordinatesMeta,\n pieMeta,\n polarAreaMeta,\n punchcardMeta,\n radarMeta,\n radialBarMeta,\n sankeyMeta,\n scatterPlotMeta,\n scatterSparklineMeta,\n sparkAreaMeta,\n sparkLineMeta,\n stepLineMeta,\n treemapMeta,\n violinMeta,\n waterfallMeta,\n partialDependenceMeta,\n];\n\nfunction toDomAttr(camelKey: string): string {\n return camelKey.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n}\n\nfunction attrsFromMap(raw?: Record<string, unknown>): ChartTargetAttrs | undefined {\n if (!raw) return undefined;\n const out: ChartTargetAttrs = {};\n for (const [key, value] of Object.entries(raw)) {\n if (typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number') {\n out[toDomAttr(key)] = value;\n }\n }\n return Object.keys(out).length ? out : undefined;\n}\n\nfunction entriesFromMeta(meta: ChartMetadataLike): Record<string, ChartTarget> {\n const kind = meta.id as ChartKind;\n const out: Record<string, ChartTarget> = {};\n for (const chartType of meta.chartTypeKeys ?? []) {\n out[chartType] = {\n kind,\n tag: meta.tag,\n attrs: attrsFromMap(meta.chartTypeMap?.[chartType]),\n };\n }\n return out;\n}\n\nconst REGISTRY: Record<string, ChartTarget> = METADATA.reduce(\n (acc, meta) => Object.assign(acc, entriesFromMeta(meta)),\n {} as Record<string, ChartTarget>,\n);\n\n/** KS / ROC overlays map to step-line `graf-type`. */\nREGISTRY.ksPlotChart = {\n ...REGISTRY.ksPlotChart,\n attrs: { 'graf-type': 'curve' },\n};\nREGISTRY.rocCurveChart = {\n ...REGISTRY.rocCurveChart,\n attrs: { 'graf-type': 'line' },\n};\n\nexport const SUPPORTED_CHART_TYPES = Object.freeze(Object.keys(REGISTRY).sort());\n\nexport function resolveRegistryKey(chartType: string | undefined | null): string | undefined {\n if (!chartType?.trim()) return undefined;\n const trimmed = chartType.trim();\n return CHART_TYPE_ALIASES[trimmed] ?? trimmed;\n}\n\n/** Resolve FuseDash chartType → lazy ChartKind + host tag + optional attrs. */\nexport function resolveChartTarget(chartType: string | undefined | null): ChartTarget | null {\n const key = resolveRegistryKey(chartType);\n if (!key) return null;\n return REGISTRY[key] ?? null;\n}\n\nconst HOST_NOT_READY = new Set(\n METADATA.filter((meta) => meta.usageConditions?.hostReady === false).map((meta) => meta.id),\n);\n\nexport function canRenderChartType(chartType: string | undefined | null): boolean {\n const target = resolveChartTarget(chartType);\n if (!target) return false;\n return !HOST_NOT_READY.has(target.kind);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@ import { styleMap } from "lit/directives/style-map.js";
|
|
|
4
4
|
import { Ui9000ChartElement } from "../../../element/ui9000-chart-base.js";
|
|
5
5
|
import { loadChart } from "../../../lazy/index.js";
|
|
6
6
|
import { parseJsonAttr } from "../../../utils/chart-helpers.js";
|
|
7
|
-
import { customWidgetStyles } from "./styles.js";
|
|
8
|
-
import { normalizeCustomWidget } from "../lib/normalize.js";
|
|
9
7
|
import { paneFlexDirection } from "../lib/layout.js";
|
|
8
|
+
import { normalizeCustomWidget } from "../lib/normalize.js";
|
|
9
|
+
import { customWidgetStyles } from "./styles.js";
|
|
10
10
|
import { chartShellStyles } from "../../../element/chart-shell-styles.js";
|
|
11
11
|
var __defProp = Object.defineProperty;
|
|
12
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { registerCustomWidget } from "./element/ui9000-custom-widget.js";
|
|
2
2
|
import { Ui9000CustomWidget } from "./element/ui9000-custom-widget.js";
|
|
3
|
-
import { default as default2 } from "./metadata.json.js";
|
|
4
3
|
import { KPI_ROW_HEIGHT, MAX_PANES, PANE_GAP, paneFlexDirection } from "./lib/layout.js";
|
|
5
4
|
import { isContentChartType, normalizeCustomWidget } from "./lib/normalize.js";
|
|
5
|
+
import { default as default2 } from "./metadata.json.js";
|
|
6
6
|
import { normalizeTableModel } from "../table/lib/table.js";
|
|
7
7
|
export {
|
|
8
8
|
KPI_ROW_HEIGHT,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui9000-donut-chart.d.ts","sourceRoot":"","sources":["../../../../src/components/donut-chart/element/ui9000-donut-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAgB3D,qBACa,gBAAiB,SAAQ,kBAAkB;IACtD,OAAgB,MAAM,4BAAwC;IAG9D,KAAK,EAAE,WAAW,CAAa;IAG/B,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ui9000-donut-chart.d.ts","sourceRoot":"","sources":["../../../../src/components/donut-chart/element/ui9000-donut-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAgB3D,qBACa,gBAAiB,SAAQ,kBAAkB;IACtD,OAAgB,MAAM,4BAAwC;IAG9D,KAAK,EAAE,WAAW,CAAa;IAG/B,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,aAAa,CAAyB;IAE9C,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,IAAI,CAAK;IAER,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAM5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,IAAI;IAqDH,MAAM;CAgBhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,gBAAgB,CAAC;KACxC;CACF;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC"}
|