@adminiumjs/charts 0.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/dist/components/AnomalyChart.d.ts +30 -0
- package/dist/components/AnomalyChart.d.ts.map +1 -0
- package/dist/components/AnomalyChart.js +32 -0
- package/dist/components/AnomalyChart.js.map +1 -0
- package/dist/components/BarChart.d.ts +33 -0
- package/dist/components/BarChart.d.ts.map +1 -0
- package/dist/components/BarChart.js +40 -0
- package/dist/components/BarChart.js.map +1 -0
- package/dist/components/BoxPlotChart.d.ts +23 -0
- package/dist/components/BoxPlotChart.d.ts.map +1 -0
- package/dist/components/BoxPlotChart.js +24 -0
- package/dist/components/BoxPlotChart.js.map +1 -0
- package/dist/components/BulletChart.d.ts +27 -0
- package/dist/components/BulletChart.d.ts.map +1 -0
- package/dist/components/BulletChart.js +24 -0
- package/dist/components/BulletChart.js.map +1 -0
- package/dist/components/BumpChart.d.ts +27 -0
- package/dist/components/BumpChart.d.ts.map +1 -0
- package/dist/components/BumpChart.js +17 -0
- package/dist/components/BumpChart.js.map +1 -0
- package/dist/components/CandlestickChart.d.ts +26 -0
- package/dist/components/CandlestickChart.d.ts.map +1 -0
- package/dist/components/CandlestickChart.js +22 -0
- package/dist/components/CandlestickChart.js.map +1 -0
- package/dist/components/ChartSurface.d.ts +52 -0
- package/dist/components/ChartSurface.d.ts.map +1 -0
- package/dist/components/ChartSurface.js +15 -0
- package/dist/components/ChartSurface.js.map +1 -0
- package/dist/components/Chord.d.ts +30 -0
- package/dist/components/Chord.d.ts.map +1 -0
- package/dist/components/Chord.js +14 -0
- package/dist/components/Chord.js.map +1 -0
- package/dist/components/ChoroplethGridChart.d.ts +32 -0
- package/dist/components/ChoroplethGridChart.d.ts.map +1 -0
- package/dist/components/ChoroplethGridChart.js +15 -0
- package/dist/components/ChoroplethGridChart.js.map +1 -0
- package/dist/components/CohortMatrixChart.d.ts +30 -0
- package/dist/components/CohortMatrixChart.d.ts.map +1 -0
- package/dist/components/CohortMatrixChart.js +13 -0
- package/dist/components/CohortMatrixChart.js.map +1 -0
- package/dist/components/CorrelationMatrixChart.d.ts +24 -0
- package/dist/components/CorrelationMatrixChart.d.ts.map +1 -0
- package/dist/components/CorrelationMatrixChart.js +29 -0
- package/dist/components/CorrelationMatrixChart.js.map +1 -0
- package/dist/components/DonutChart.d.ts +31 -0
- package/dist/components/DonutChart.d.ts.map +1 -0
- package/dist/components/DonutChart.js +19 -0
- package/dist/components/DonutChart.js.map +1 -0
- package/dist/components/ForecastChart.d.ts +37 -0
- package/dist/components/ForecastChart.d.ts.map +1 -0
- package/dist/components/ForecastChart.js +39 -0
- package/dist/components/ForecastChart.js.map +1 -0
- package/dist/components/Funnel.d.ts +27 -0
- package/dist/components/Funnel.d.ts.map +1 -0
- package/dist/components/Funnel.js +25 -0
- package/dist/components/Funnel.js.map +1 -0
- package/dist/components/HeatCalendarChart.d.ts +39 -0
- package/dist/components/HeatCalendarChart.d.ts.map +1 -0
- package/dist/components/HeatCalendarChart.js +37 -0
- package/dist/components/HeatCalendarChart.js.map +1 -0
- package/dist/components/HeatMonthChart.d.ts +30 -0
- package/dist/components/HeatMonthChart.d.ts.map +1 -0
- package/dist/components/HeatMonthChart.js +14 -0
- package/dist/components/HeatMonthChart.js.map +1 -0
- package/dist/components/HexbinChart.d.ts +22 -0
- package/dist/components/HexbinChart.d.ts.map +1 -0
- package/dist/components/HexbinChart.js +31 -0
- package/dist/components/HexbinChart.js.map +1 -0
- package/dist/components/LineAreaChart.d.ts +26 -0
- package/dist/components/LineAreaChart.d.ts.map +1 -0
- package/dist/components/LineAreaChart.js +62 -0
- package/dist/components/LineAreaChart.js.map +1 -0
- package/dist/components/MarimekkoChart.d.ts +24 -0
- package/dist/components/MarimekkoChart.d.ts.map +1 -0
- package/dist/components/MarimekkoChart.js +20 -0
- package/dist/components/MarimekkoChart.js.map +1 -0
- package/dist/components/MultiLineChart.d.ts +36 -0
- package/dist/components/MultiLineChart.d.ts.map +1 -0
- package/dist/components/MultiLineChart.js +62 -0
- package/dist/components/MultiLineChart.js.map +1 -0
- package/dist/components/ParallelCoordinatesChart.d.ts +22 -0
- package/dist/components/ParallelCoordinatesChart.d.ts.map +1 -0
- package/dist/components/ParallelCoordinatesChart.js +16 -0
- package/dist/components/ParallelCoordinatesChart.js.map +1 -0
- package/dist/components/ParetoChart.d.ts +26 -0
- package/dist/components/ParetoChart.d.ts.map +1 -0
- package/dist/components/ParetoChart.js +26 -0
- package/dist/components/ParetoChart.js.map +1 -0
- package/dist/components/Radar.d.ts +27 -0
- package/dist/components/Radar.d.ts.map +1 -0
- package/dist/components/Radar.js +19 -0
- package/dist/components/Radar.js.map +1 -0
- package/dist/components/RadialBar.d.ts +25 -0
- package/dist/components/RadialBar.d.ts.map +1 -0
- package/dist/components/RadialBar.js +12 -0
- package/dist/components/RadialBar.js.map +1 -0
- package/dist/components/RankingBars.d.ts +27 -0
- package/dist/components/RankingBars.d.ts.map +1 -0
- package/dist/components/RankingBars.js +25 -0
- package/dist/components/RankingBars.js.map +1 -0
- package/dist/components/RidgelineChart.d.ts +23 -0
- package/dist/components/RidgelineChart.d.ts.map +1 -0
- package/dist/components/RidgelineChart.js +20 -0
- package/dist/components/RidgelineChart.js.map +1 -0
- package/dist/components/SankeyChart.d.ts +29 -0
- package/dist/components/SankeyChart.d.ts.map +1 -0
- package/dist/components/SankeyChart.js +21 -0
- package/dist/components/SankeyChart.js.map +1 -0
- package/dist/components/ScatterBubbleChart.d.ts +26 -0
- package/dist/components/ScatterBubbleChart.d.ts.map +1 -0
- package/dist/components/ScatterBubbleChart.js +31 -0
- package/dist/components/ScatterBubbleChart.js.map +1 -0
- package/dist/components/SlopeChart.d.ts +28 -0
- package/dist/components/SlopeChart.d.ts.map +1 -0
- package/dist/components/SlopeChart.js +18 -0
- package/dist/components/SlopeChart.js.map +1 -0
- package/dist/components/Sparkline.d.ts +15 -0
- package/dist/components/Sparkline.d.ts.map +1 -0
- package/dist/components/Sparkline.js +27 -0
- package/dist/components/Sparkline.js.map +1 -0
- package/dist/components/StackedBar100.d.ts +30 -0
- package/dist/components/StackedBar100.d.ts.map +1 -0
- package/dist/components/StackedBar100.js +21 -0
- package/dist/components/StackedBar100.js.map +1 -0
- package/dist/components/StreamChart.d.ts +23 -0
- package/dist/components/StreamChart.d.ts.map +1 -0
- package/dist/components/StreamChart.js +56 -0
- package/dist/components/StreamChart.js.map +1 -0
- package/dist/components/Sunburst.d.ts +24 -0
- package/dist/components/Sunburst.d.ts.map +1 -0
- package/dist/components/Sunburst.js +13 -0
- package/dist/components/Sunburst.js.map +1 -0
- package/dist/components/TimelineLanesChart.d.ts +25 -0
- package/dist/components/TimelineLanesChart.d.ts.map +1 -0
- package/dist/components/TimelineLanesChart.js +41 -0
- package/dist/components/TimelineLanesChart.js.map +1 -0
- package/dist/components/Treemap.d.ts +28 -0
- package/dist/components/Treemap.d.ts.map +1 -0
- package/dist/components/Treemap.js +22 -0
- package/dist/components/Treemap.js.map +1 -0
- package/dist/components/ViolinChart.d.ts +22 -0
- package/dist/components/ViolinChart.d.ts.map +1 -0
- package/dist/components/ViolinChart.js +21 -0
- package/dist/components/ViolinChart.js.map +1 -0
- package/dist/components/WaterfallChart.d.ts +23 -0
- package/dist/components/WaterfallChart.d.ts.map +1 -0
- package/dist/components/WaterfallChart.js +29 -0
- package/dist/components/WaterfallChart.js.map +1 -0
- package/dist/components/WordCloud.d.ts +24 -0
- package/dist/components/WordCloud.d.ts.map +1 -0
- package/dist/components/WordCloud.js +22 -0
- package/dist/components/WordCloud.js.map +1 -0
- package/dist/demo/barsRanking.d.ts +26 -0
- package/dist/demo/barsRanking.d.ts.map +1 -0
- package/dist/demo/barsRanking.js +80 -0
- package/dist/demo/barsRanking.js.map +1 -0
- package/dist/demo/generators.d.ts +44 -0
- package/dist/demo/generators.d.ts.map +1 -0
- package/dist/demo/generators.js +72 -0
- package/dist/demo/generators.js.map +1 -0
- package/dist/demo/mulberry32.d.ts +10 -0
- package/dist/demo/mulberry32.d.ts.map +1 -0
- package/dist/demo/mulberry32.js +26 -0
- package/dist/demo/mulberry32.js.map +1 -0
- package/dist/geometry/anomaly.d.ts +22 -0
- package/dist/geometry/anomaly.d.ts.map +1 -0
- package/dist/geometry/anomaly.js +52 -0
- package/dist/geometry/anomaly.js.map +1 -0
- package/dist/geometry/bars.d.ts +46 -0
- package/dist/geometry/bars.d.ts.map +1 -0
- package/dist/geometry/bars.js +68 -0
- package/dist/geometry/bars.js.map +1 -0
- package/dist/geometry/bullet.d.ts +53 -0
- package/dist/geometry/bullet.d.ts.map +1 -0
- package/dist/geometry/bullet.js +67 -0
- package/dist/geometry/bullet.js.map +1 -0
- package/dist/geometry/bump.d.ts +42 -0
- package/dist/geometry/bump.d.ts.map +1 -0
- package/dist/geometry/bump.js +29 -0
- package/dist/geometry/bump.js.map +1 -0
- package/dist/geometry/candles.d.ts +39 -0
- package/dist/geometry/candles.d.ts.map +1 -0
- package/dist/geometry/candles.js +42 -0
- package/dist/geometry/candles.js.map +1 -0
- package/dist/geometry/chord.d.ts +53 -0
- package/dist/geometry/chord.d.ts.map +1 -0
- package/dist/geometry/chord.js +111 -0
- package/dist/geometry/chord.js.map +1 -0
- package/dist/geometry/choropleth.d.ts +58 -0
- package/dist/geometry/choropleth.d.ts.map +1 -0
- package/dist/geometry/choropleth.js +101 -0
- package/dist/geometry/choropleth.js.map +1 -0
- package/dist/geometry/cohort.d.ts +54 -0
- package/dist/geometry/cohort.d.ts.map +1 -0
- package/dist/geometry/cohort.js +70 -0
- package/dist/geometry/cohort.js.map +1 -0
- package/dist/geometry/correlation.d.ts +138 -0
- package/dist/geometry/correlation.d.ts.map +1 -0
- package/dist/geometry/correlation.js +161 -0
- package/dist/geometry/correlation.js.map +1 -0
- package/dist/geometry/distribution.d.ts +115 -0
- package/dist/geometry/distribution.d.ts.map +1 -0
- package/dist/geometry/distribution.js +131 -0
- package/dist/geometry/distribution.js.map +1 -0
- package/dist/geometry/donut.d.ts +37 -0
- package/dist/geometry/donut.d.ts.map +1 -0
- package/dist/geometry/donut.js +46 -0
- package/dist/geometry/donut.js.map +1 -0
- package/dist/geometry/forecast.d.ts +30 -0
- package/dist/geometry/forecast.d.ts.map +1 -0
- package/dist/geometry/forecast.js +75 -0
- package/dist/geometry/forecast.js.map +1 -0
- package/dist/geometry/funnel.d.ts +37 -0
- package/dist/geometry/funnel.d.ts.map +1 -0
- package/dist/geometry/funnel.js +42 -0
- package/dist/geometry/funnel.js.map +1 -0
- package/dist/geometry/heat.d.ts +34 -0
- package/dist/geometry/heat.d.ts.map +1 -0
- package/dist/geometry/heat.js +50 -0
- package/dist/geometry/heat.js.map +1 -0
- package/dist/geometry/heatCalendar.d.ts +43 -0
- package/dist/geometry/heatCalendar.d.ts.map +1 -0
- package/dist/geometry/heatCalendar.js +82 -0
- package/dist/geometry/heatCalendar.js.map +1 -0
- package/dist/geometry/heatMonth.d.ts +47 -0
- package/dist/geometry/heatMonth.d.ts.map +1 -0
- package/dist/geometry/heatMonth.js +72 -0
- package/dist/geometry/heatMonth.js.map +1 -0
- package/dist/geometry/lineArea.d.ts +17 -0
- package/dist/geometry/lineArea.d.ts.map +1 -0
- package/dist/geometry/lineArea.js +37 -0
- package/dist/geometry/lineArea.js.map +1 -0
- package/dist/geometry/marimekko.d.ts +43 -0
- package/dist/geometry/marimekko.d.ts.map +1 -0
- package/dist/geometry/marimekko.js +45 -0
- package/dist/geometry/marimekko.js.map +1 -0
- package/dist/geometry/multiLine.d.ts +19 -0
- package/dist/geometry/multiLine.d.ts.map +1 -0
- package/dist/geometry/multiLine.js +25 -0
- package/dist/geometry/multiLine.js.map +1 -0
- package/dist/geometry/pareto.d.ts +44 -0
- package/dist/geometry/pareto.d.ts.map +1 -0
- package/dist/geometry/pareto.js +65 -0
- package/dist/geometry/pareto.js.map +1 -0
- package/dist/geometry/radar.d.ts +60 -0
- package/dist/geometry/radar.d.ts.map +1 -0
- package/dist/geometry/radar.js +67 -0
- package/dist/geometry/radar.js.map +1 -0
- package/dist/geometry/radialBar.d.ts +31 -0
- package/dist/geometry/radialBar.d.ts.map +1 -0
- package/dist/geometry/radialBar.js +53 -0
- package/dist/geometry/radialBar.js.map +1 -0
- package/dist/geometry/ranking.d.ts +48 -0
- package/dist/geometry/ranking.d.ts.map +1 -0
- package/dist/geometry/ranking.js +42 -0
- package/dist/geometry/ranking.js.map +1 -0
- package/dist/geometry/sankey.d.ts +60 -0
- package/dist/geometry/sankey.d.ts.map +1 -0
- package/dist/geometry/sankey.js +130 -0
- package/dist/geometry/sankey.js.map +1 -0
- package/dist/geometry/scales.d.ts +14 -0
- package/dist/geometry/scales.d.ts.map +1 -0
- package/dist/geometry/scales.js +33 -0
- package/dist/geometry/scales.js.map +1 -0
- package/dist/geometry/slope.d.ts +34 -0
- package/dist/geometry/slope.d.ts.map +1 -0
- package/dist/geometry/slope.js +44 -0
- package/dist/geometry/slope.js.map +1 -0
- package/dist/geometry/sparkline.d.ts +20 -0
- package/dist/geometry/sparkline.d.ts.map +1 -0
- package/dist/geometry/sparkline.js +43 -0
- package/dist/geometry/sparkline.js.map +1 -0
- package/dist/geometry/stacked100.d.ts +33 -0
- package/dist/geometry/stacked100.d.ts.map +1 -0
- package/dist/geometry/stacked100.js +34 -0
- package/dist/geometry/stacked100.js.map +1 -0
- package/dist/geometry/streamStack.d.ts +32 -0
- package/dist/geometry/streamStack.d.ts.map +1 -0
- package/dist/geometry/streamStack.js +56 -0
- package/dist/geometry/streamStack.js.map +1 -0
- package/dist/geometry/sunburst.d.ts +37 -0
- package/dist/geometry/sunburst.d.ts.map +1 -0
- package/dist/geometry/sunburst.js +84 -0
- package/dist/geometry/sunburst.js.map +1 -0
- package/dist/geometry/timelineLanes.d.ts +46 -0
- package/dist/geometry/timelineLanes.d.ts.map +1 -0
- package/dist/geometry/timelineLanes.js +52 -0
- package/dist/geometry/timelineLanes.js.map +1 -0
- package/dist/geometry/treemap.d.ts +42 -0
- package/dist/geometry/treemap.d.ts.map +1 -0
- package/dist/geometry/treemap.js +134 -0
- package/dist/geometry/treemap.js.map +1 -0
- package/dist/geometry/waterfall.d.ts +40 -0
- package/dist/geometry/waterfall.d.ts.map +1 -0
- package/dist/geometry/waterfall.js +80 -0
- package/dist/geometry/waterfall.js.map +1 -0
- package/dist/geometry/wordcloud.d.ts +46 -0
- package/dist/geometry/wordcloud.d.ts.map +1 -0
- package/dist/geometry/wordcloud.js +79 -0
- package/dist/geometry/wordcloud.js.map +1 -0
- package/dist/hooks/useChartSize.d.ts +6 -0
- package/dist/hooks/useChartSize.d.ts.map +1 -0
- package/dist/hooks/useChartSize.js +32 -0
- package/dist/hooks/useChartSize.js.map +1 -0
- package/dist/hooks/useMountAnimation.d.ts +4 -0
- package/dist/hooks/useMountAnimation.d.ts.map +1 -0
- package/dist/hooks/useMountAnimation.js +40 -0
- package/dist/hooks/useMountAnimation.js.map +1 -0
- package/dist/hooks/useRtl.d.ts +7 -0
- package/dist/hooks/useRtl.d.ts.map +1 -0
- package/dist/hooks/useRtl.js +18 -0
- package/dist/hooks/useRtl.js.map +1 -0
- package/dist/index.d.ts +110 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/format.d.ts +5 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +24 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/stats.d.ts +23 -0
- package/dist/utils/stats.d.ts.map +1 -0
- package/dist/utils/stats.js +82 -0
- package/dist/utils/stats.js.map +1 -0
- package/package.json +36 -0
- package/src/styles.css +205 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { bandAreaPath, stackStream } from '../geometry/streamStack.js';
|
|
3
|
+
import { seriesColorVar } from '../geometry/multiLine.js';
|
|
4
|
+
import { categoricalPointScale, linearYScale, timeScale } from '../geometry/scales.js';
|
|
5
|
+
import { extent } from '../utils/stats.js';
|
|
6
|
+
import { ChartSurface } from './ChartSurface.js';
|
|
7
|
+
const LEGEND_H = 20;
|
|
8
|
+
export function StreamChart({ series, labels, height = 260, smooth = true, showLegend = true, dir, a11yFallback, className, }) {
|
|
9
|
+
const isTime = series[0]?.points[0]?.x instanceof Date;
|
|
10
|
+
return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: showLegend ? LEGEND_H + 6 : 8, bottom: 8, left: 6, right: 6 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
|
|
11
|
+
const drawable = series.filter((s) => s.points.length > 0);
|
|
12
|
+
if (drawable.length === 0 || innerWidth <= 0 || innerHeight <= 0)
|
|
13
|
+
return null;
|
|
14
|
+
// `stackStream` builds band arrays of length = MAX point-count across
|
|
15
|
+
// every series, so `xs` must span the same index range. Deriving it
|
|
16
|
+
// from only the first series collapses band indices past that series'
|
|
17
|
+
// length onto x=0; use the longest series as the x spine instead.
|
|
18
|
+
const spine = drawable.reduce((a, b) => (b.points.length > a.points.length ? b : a));
|
|
19
|
+
const xs = isTime
|
|
20
|
+
? (() => {
|
|
21
|
+
const times = drawable.flatMap((s) => s.points.map((p) => (p.x instanceof Date ? p.x.getTime() : 0)));
|
|
22
|
+
const [lo, hi] = extent(times) ?? [0, 1];
|
|
23
|
+
const scale = timeScale([new Date(lo), new Date(hi)], innerWidth);
|
|
24
|
+
return spine.points.map((p) => scale(p.x instanceof Date ? p.x : new Date(0)));
|
|
25
|
+
})()
|
|
26
|
+
: (() => {
|
|
27
|
+
const domain = spine.points.map((p) => String(p.x));
|
|
28
|
+
const scale = categoricalPointScale(domain, innerWidth, rtl);
|
|
29
|
+
return domain.map((d) => scale(d) ?? 0);
|
|
30
|
+
})();
|
|
31
|
+
const inputs = drawable.map((s) => ({
|
|
32
|
+
key: s.key,
|
|
33
|
+
label: s.label,
|
|
34
|
+
values: s.points.map((p) => p.y),
|
|
35
|
+
}));
|
|
36
|
+
const { bands, min, max } = stackStream(inputs, 'silhouette');
|
|
37
|
+
const yScale = linearYScale([min, max], innerHeight);
|
|
38
|
+
// Legend layout in reading order (RTL lays out from the inline-end).
|
|
39
|
+
let cursor = rtl ? innerWidth : 0;
|
|
40
|
+
return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: [bands.map((band, i) => {
|
|
41
|
+
const low = band.low.map((v) => yScale(v));
|
|
42
|
+
const high = band.high.map((v) => yScale(v));
|
|
43
|
+
const path = bandAreaPath(xs, low, high, smooth);
|
|
44
|
+
return path === null ? null : (_jsx("path", { d: path, fill: seriesColorVar(i), fillOpacity: 0.82, stroke: "var(--surface)", strokeWidth: 0.75, "data-series": band.key }, band.key));
|
|
45
|
+
}), showLegend &&
|
|
46
|
+
bands.map((band, i) => {
|
|
47
|
+
const width = band.label.length * 6.2 + 20;
|
|
48
|
+
const x = rtl ? cursor - width : cursor;
|
|
49
|
+
cursor = rtl ? cursor - width - 6 : cursor + width + 6;
|
|
50
|
+
const dotX = rtl ? x + width - 8 : x + 4;
|
|
51
|
+
const textX = rtl ? x + width - 18 : x + 14;
|
|
52
|
+
return (_jsxs("g", { "data-legend-item": band.key, children: [_jsx("circle", { cx: dotX, cy: -LEGEND_H + 8, r: 4, fill: seriesColorVar(i) }), _jsx("text", { x: textX, y: -LEGEND_H + 11, textAnchor: rtl ? 'end' : 'start', fontSize: 10.5, fontWeight: 600, fill: "var(--fg-muted)", children: band.label })] }, `${band.key}-legend`));
|
|
53
|
+
})] }));
|
|
54
|
+
} }));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=StreamChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamChart.js","sourceRoot":"","sources":["../../src/components/StreamChart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chart-sunburst` primitive (research/widget-registry.md §2): two nested rings
|
|
3
|
+
* from a 2-level hierarchy (inner = parents, outer = children), with a legend of
|
|
4
|
+
* the parent categories. Arcs sweep clockwise and do NOT mirror in RTL (§7.4).
|
|
5
|
+
* Colors are tokens only; geometry is pure (04 §7.1).
|
|
6
|
+
*/
|
|
7
|
+
import type { ReactNode } from 'react';
|
|
8
|
+
import type { SunburstParentInput } from '../geometry/sunburst.js';
|
|
9
|
+
import type { ChartDir } from '../hooks/useRtl.js';
|
|
10
|
+
import type { ChartLabels } from './ChartSurface.js';
|
|
11
|
+
export interface SunburstChartProps {
|
|
12
|
+
data: readonly SunburstParentInput[];
|
|
13
|
+
labels: ChartLabels;
|
|
14
|
+
/** Diameter in px (default 200). */
|
|
15
|
+
size?: number;
|
|
16
|
+
/** Radius of the empty center hole (default 0.28 × radius). */
|
|
17
|
+
innerRadiusRatio?: number;
|
|
18
|
+
showLegend?: boolean;
|
|
19
|
+
dir?: ChartDir;
|
|
20
|
+
a11yFallback?: ReactNode;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function Sunburst({ data, labels, size, innerRadiusRatio, showLegend, dir, a11yFallback, className, }: SunburstChartProps): import("react").JSX.Element;
|
|
24
|
+
//# sourceMappingURL=Sunburst.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sunburst.d.ts","sourceRoot":"","sources":["../../src/components/Sunburst.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,MAAM,EACN,IAAU,EACV,gBAAuB,EACvB,UAAiB,EACjB,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,kBAAkB,+BA+CpB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { sunburstArcs } from '../geometry/sunburst.js';
|
|
3
|
+
import { useChartDir } from '../hooks/useRtl.js';
|
|
4
|
+
import { useMountAnimation } from '../hooks/useMountAnimation.js';
|
|
5
|
+
export function Sunburst({ data, labels, size = 200, innerRadiusRatio = 0.28, showLegend = true, dir, a11yFallback, className, }) {
|
|
6
|
+
const resolvedDir = useChartDir(dir);
|
|
7
|
+
const mounted = useMountAnimation();
|
|
8
|
+
const innerRadius = (size / 2) * innerRadiusRatio;
|
|
9
|
+
const { arcs } = sunburstArcs(data, { size, innerRadius });
|
|
10
|
+
const parents = arcs.filter((a) => a.depth === 0);
|
|
11
|
+
return (_jsxs("div", { className: className === undefined ? 'adm-donut' : `adm-donut ${className}`, ...(dir !== undefined ? { dir: resolvedDir } : {}), "data-export-node": "", children: [_jsxs("svg", { role: "img", "aria-label": labels.label, width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [labels.description !== undefined && _jsx("desc", { children: labels.description }), _jsx("g", { transform: `translate(${size / 2}, ${size / 2})`, "data-sunburst": "", children: arcs.map((arc, i) => (_jsx("path", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0', '--adm-stagger': `${i * 55}ms` }, d: arc.path, fill: arc.colorVar, stroke: "var(--surface)", strokeWidth: 1, "data-arc": arc.label, "data-depth": arc.depth }, `${arc.parentLabel ?? 'root'}-${arc.label}-${arc.depth}`))) })] }), showLegend && (_jsx("ul", { className: "adm-donut-legend", children: parents.map((arc) => (_jsxs("li", { className: "adm-donut-legend-row", children: [_jsx("span", { className: "adm-donut-legend-dot", style: { '--adm-dot': arc.colorVar }, "aria-hidden": "true" }), _jsx("span", { children: arc.label }), _jsx("span", { className: "adm-donut-legend-value", children: `${Math.round(arc.share * 100)}%` })] }, arc.label))) })), a11yFallback !== undefined && _jsx("div", { className: "adm-chart-sr", children: a11yFallback })] }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Sunburst.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sunburst.js","sourceRoot":"","sources":["../../src/components/Sunburst.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chart-timeline-lanes` primitive (research/widget-registry.md §2): horizontal
|
|
3
|
+
* swimlanes with positioned pill events on a shared time axis (Deploys /
|
|
4
|
+
* Incidents / Releases). A time axis renders as an LTR island (04 §7.4 — time
|
|
5
|
+
* axes never mirror; gantt-like lanes stay LTR), so event positions and the
|
|
6
|
+
* lane-label gutter are LTR regardless of page direction. Colors from the viz
|
|
7
|
+
* palette and semantic tone tokens only.
|
|
8
|
+
*/
|
|
9
|
+
import type { ReactNode } from 'react';
|
|
10
|
+
import type { LaneEvent } from '../geometry/timelineLanes.js';
|
|
11
|
+
import type { ChartDir } from '../hooks/useRtl.js';
|
|
12
|
+
import type { ChartLabels } from './ChartSurface.js';
|
|
13
|
+
export interface TimelineLanesChartProps {
|
|
14
|
+
lanes: readonly string[];
|
|
15
|
+
events: readonly LaneEvent[];
|
|
16
|
+
labels: ChartLabels;
|
|
17
|
+
/** Time-axis tick captions along the bottom (e.g. week buckets). */
|
|
18
|
+
axisLabels?: readonly string[];
|
|
19
|
+
height?: number;
|
|
20
|
+
dir?: ChartDir;
|
|
21
|
+
a11yFallback?: ReactNode;
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function TimelineLanesChart({ lanes, events, labels, axisLabels, height, dir, a11yFallback, className, }: TimelineLanesChartProps): import("react").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=TimelineLanesChart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineLanesChart.d.ts","sourceRoot":"","sources":["../../src/components/TimelineLanesChart.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoBD,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,MAAY,EACZ,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,uBAAuB,+BAwEzB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { layoutLanes } from '../geometry/timelineLanes.js';
|
|
3
|
+
import { seriesColorVar } from '../geometry/multiLine.js';
|
|
4
|
+
import { ChartSurface } from './ChartSurface.js';
|
|
5
|
+
const GUTTER = 92;
|
|
6
|
+
/** Semantic tone → token color, else the lane's categorical viz color. */
|
|
7
|
+
function toneColor(tone, laneIndex) {
|
|
8
|
+
switch (tone) {
|
|
9
|
+
case 'pos':
|
|
10
|
+
return 'var(--pos)';
|
|
11
|
+
case 'danger':
|
|
12
|
+
return 'var(--danger)';
|
|
13
|
+
case 'warn':
|
|
14
|
+
return 'var(--warn)';
|
|
15
|
+
case 'info':
|
|
16
|
+
return 'var(--info)';
|
|
17
|
+
default:
|
|
18
|
+
return seriesColorVar(laneIndex);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function TimelineLanesChart({ lanes, events, labels, axisLabels, height = 200, dir, a11yFallback, className, }) {
|
|
22
|
+
return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}),
|
|
23
|
+
// Lane-label gutter at the inline-start; time axis fills the rest (LTR island).
|
|
24
|
+
padding: { top: 8, bottom: axisLabels && axisLabels.length > 0 ? 22 : 10, left: GUTTER, right: 14 }, children: ({ innerWidth, innerHeight, mounted }) => {
|
|
25
|
+
if (lanes.length === 0 || innerWidth <= 0 || innerHeight <= 0)
|
|
26
|
+
return null;
|
|
27
|
+
const rows = layoutLanes(lanes, events, innerWidth, innerHeight, { laneGap: 8 });
|
|
28
|
+
return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: [rows.map((row) => (_jsxs("g", { "data-lane": row.lane, children: [_jsx("rect", { x: 0, y: row.y, width: innerWidth, height: row.height, rx: 6, fill: "var(--surface-2)" }), _jsx("text", { x: -10, y: row.centerY + 3, textAnchor: "end", fontSize: 10.5, fontWeight: 600, fill: "var(--fg-muted)", "data-lane-label": row.lane, children: row.lane }), row.events.map((event, j) => {
|
|
29
|
+
const color = toneColor(event.tone, row.index);
|
|
30
|
+
const width = event.label.length * 5.6 + 22;
|
|
31
|
+
const pillX = Math.min(innerWidth - width, Math.max(0, event.x - width / 2));
|
|
32
|
+
return (_jsxs("g", { "data-event": event.label, transform: `translate(${pillX}, ${row.centerY - 9})`, children: [_jsx("rect", { x: 0, y: 0, width: width, height: 18, rx: 9, fill: "var(--surface-3)", stroke: color, strokeWidth: 1 }), _jsx("circle", { cx: 11, cy: 9, r: 3, fill: color }), _jsx("text", { x: 19, y: 12, fontSize: 9.5, fontWeight: 600, fill: "var(--fg)", children: event.label })] }, `${row.lane}-${j}`));
|
|
33
|
+
})] }, row.lane))), axisLabels?.map((label, i) => {
|
|
34
|
+
const count = axisLabels.length;
|
|
35
|
+
const x = count > 1 ? (innerWidth / (count - 1)) * i : innerWidth / 2;
|
|
36
|
+
const anchor = i === 0 ? 'start' : i === count - 1 ? 'end' : 'middle';
|
|
37
|
+
return (_jsx("text", { className: "adm-chart-axis-label", x: x, y: innerHeight + 15, textAnchor: anchor, children: label }, `axis-${i}`));
|
|
38
|
+
})] }));
|
|
39
|
+
} }));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=TimelineLanesChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineLanesChart.js","sourceRoot":"","sources":["../../src/components/TimelineLanesChart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chart-treemap` primitive (research/widget-registry.md §2): squarified
|
|
3
|
+
* slice-and-dice tiles, area/alpha by value, in-tile labels above a threshold.
|
|
4
|
+
* Tiles fill with the accent alpha ramp (theme-safe text contrast); the RTL x
|
|
5
|
+
* axis mirrors via `mirrorTiles`. Colors are tokens only; the geometry is pure
|
|
6
|
+
* so a report worker rasterizes the identical layout (04 §7.1/§7.6).
|
|
7
|
+
*/
|
|
8
|
+
import type { ReactNode } from 'react';
|
|
9
|
+
import type { TreemapInput } from '../geometry/treemap.js';
|
|
10
|
+
import type { ChartDir } from '../hooks/useRtl.js';
|
|
11
|
+
import type { ChartLabels } from './ChartSurface.js';
|
|
12
|
+
export interface TreemapChartProps {
|
|
13
|
+
data: readonly TreemapInput[];
|
|
14
|
+
labels: ChartLabels;
|
|
15
|
+
height?: number;
|
|
16
|
+
/** Slices beyond this fold into a trailing "Other" tile. */
|
|
17
|
+
maxTiles?: number;
|
|
18
|
+
otherLabel?: string;
|
|
19
|
+
/** Hide the in-tile label below this width/height in px (default 48/26). */
|
|
20
|
+
labelMinWidth?: number;
|
|
21
|
+
labelMinHeight?: number;
|
|
22
|
+
format?: (value: number) => string;
|
|
23
|
+
dir?: ChartDir;
|
|
24
|
+
a11yFallback?: ReactNode;
|
|
25
|
+
className?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function Treemap({ data, labels, height, maxTiles, otherLabel, labelMinWidth, labelMinHeight, format, dir, a11yFallback, className, }: TreemapChartProps): import("react").JSX.Element;
|
|
28
|
+
//# sourceMappingURL=Treemap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Treemap.d.ts","sourceRoot":"","sources":["../../src/components/Treemap.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,MAAM,EACN,MAAY,EACZ,QAAQ,EACR,UAAoB,EACpB,aAAkB,EAClB,cAAmB,EACnB,MAAsB,EACtB,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,iBAAiB,+BAqEnB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { mirrorTiles, treemapTiles } from '../geometry/treemap.js';
|
|
3
|
+
import { formatCompact } from '../utils/format.js';
|
|
4
|
+
import { ChartSurface } from './ChartSurface.js';
|
|
5
|
+
export function Treemap({ data, labels, height = 260, maxTiles, otherLabel = 'Other', labelMinWidth = 48, labelMinHeight = 26, format = formatCompact, dir, a11yFallback, className, }) {
|
|
6
|
+
return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 1, right: 1, bottom: 1, left: 1 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
|
|
7
|
+
if (innerWidth <= 0 || innerHeight <= 0)
|
|
8
|
+
return null;
|
|
9
|
+
const laidOut = treemapTiles(data, {
|
|
10
|
+
width: innerWidth,
|
|
11
|
+
height: innerHeight,
|
|
12
|
+
...(maxTiles !== undefined ? { maxTiles } : {}),
|
|
13
|
+
otherLabel,
|
|
14
|
+
});
|
|
15
|
+
const tiles = rtl ? mirrorTiles(laidOut, innerWidth) : laidOut;
|
|
16
|
+
return (_jsx("g", { "data-treemap": "", children: tiles.map((tile, i) => {
|
|
17
|
+
const showLabel = tile.width >= labelMinWidth && tile.height >= labelMinHeight;
|
|
18
|
+
return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0', '--adm-stagger': `${i * 45}ms` }, "data-tile": tile.label, children: [_jsx("rect", { x: tile.x, y: tile.y, width: Math.max(0, tile.width - 2), height: Math.max(0, tile.height - 2), rx: 4, fill: tile.rampVar, stroke: "var(--border)", strokeWidth: 1 }), showLabel && (_jsxs(_Fragment, { children: [_jsx("text", { x: tile.x + 8, y: tile.y + 16, className: "adm-chart-axis-label", textAnchor: "start", children: tile.label }), _jsx("text", { x: tile.x + 8, y: tile.y + 30, className: "adm-chart-axis-label adm-chart-num", textAnchor: "start", children: format(tile.value) })] }))] }, tile.label));
|
|
19
|
+
}) }));
|
|
20
|
+
} }));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=Treemap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Treemap.js","sourceRoot":"","sources":["../../src/components/Treemap.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAmBjD,MAAM,UAAU,OAAO,CAAC,EACtB,IAAI,EACJ,MAAM,EACN,MAAM,GAAG,GAAG,EACZ,QAAQ,EACR,UAAU,GAAG,OAAO,EACpB,aAAa,GAAG,EAAE,EAClB,cAAc,GAAG,EAAE,EACnB,MAAM,GAAG,aAAa,EACtB,GAAG,EACH,YAAY,EACZ,SAAS,GACS;IAClB,OAAO,CACL,KAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACV,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAClD,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,YAEhD,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7C,IAAI,UAAU,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE;gBACjC,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,WAAW;gBACnB,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,UAAU;aACX,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAE/D,OAAO,CACL,4BAAgB,EAAE,YACf,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;oBACrB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,IAAI,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC;oBAC/E,OAAO,CACL,aAEE,SAAS,EAAC,gBAAgB,EAC1B,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,eACjE,IAAI,CAAC,KAAK,aAErB,eACE,CAAC,EAAE,IAAI,CAAC,CAAC,EACT,CAAC,EAAE,IAAI,CAAC,CAAC,EACT,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EACpC,EAAE,EAAE,CAAC,EACL,IAAI,EAAE,IAAI,CAAC,OAAO,EAClB,MAAM,EAAC,eAAe,EACtB,WAAW,EAAE,CAAC,GACd,EACD,SAAS,IAAI,CACZ,8BACE,eACE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EACb,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EACd,SAAS,EAAC,sBAAsB,EAChC,UAAU,EAAC,OAAO,YAEjB,IAAI,CAAC,KAAK,GACN,EACP,eACE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EACb,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EACd,SAAS,EAAC,oCAAoC,EAC9C,UAAU,EAAC,OAAO,YAEjB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GACd,IACN,CACJ,KAlCI,IAAI,CAAC,KAAK,CAmCb,CACL,CAAC;gBACJ,CAAC,CAAC,GACA,CACL,CAAC;QACJ,CAAC,GACY,CAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chart-violin` primitive (research/widget-registry.md §2): mirrored density
|
|
3
|
+
* profiles with a median line, one violin per group. Categorical x mirrors in
|
|
4
|
+
* RTL; the value axis stays pixel-down. Token-only colors; fade-in on mount.
|
|
5
|
+
*/
|
|
6
|
+
import type { ReactNode } from 'react';
|
|
7
|
+
import type { ViolinGroupInput } from '../geometry/distribution.js';
|
|
8
|
+
import type { ChartDir } from '../hooks/useRtl.js';
|
|
9
|
+
import type { ChartLabels } from './ChartSurface.js';
|
|
10
|
+
export interface ViolinChartProps {
|
|
11
|
+
groups: readonly ViolinGroupInput[];
|
|
12
|
+
labels: ChartLabels;
|
|
13
|
+
height?: number;
|
|
14
|
+
showAxis?: boolean;
|
|
15
|
+
showCategoryLabels?: boolean;
|
|
16
|
+
formatY?: (y: number) => string;
|
|
17
|
+
dir?: ChartDir;
|
|
18
|
+
a11yFallback?: ReactNode;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function ViolinChart({ groups, labels, height, showAxis, showCategoryLabels, formatY, dir, a11yFallback, className, }: ViolinChartProps): import("react").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=ViolinChart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViolinChart.d.ts","sourceRoot":"","sources":["../../src/components/ViolinChart.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,MAAM,EACN,MAAY,EACZ,QAAe,EACf,kBAAyB,EACzB,OAAuB,EACvB,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,gBAAgB,+BAkFlB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { violinLayout } from '../geometry/distribution.js';
|
|
3
|
+
import { formatCompact } from '../utils/format.js';
|
|
4
|
+
import { ChartSurface } from './ChartSurface.js';
|
|
5
|
+
export function ViolinChart({ groups, labels, height = 260, showAxis = true, showCategoryLabels = true, formatY = formatCompact, dir, a11yFallback, className, }) {
|
|
6
|
+
const pad = {
|
|
7
|
+
top: 8,
|
|
8
|
+
bottom: showCategoryLabels ? 22 : 6,
|
|
9
|
+
near: showAxis ? 40 : 6,
|
|
10
|
+
far: 10,
|
|
11
|
+
};
|
|
12
|
+
return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: pad.top, bottom: pad.bottom, left: pad.near, right: pad.far }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
|
|
13
|
+
if (groups.length === 0 || innerWidth <= 0 || innerHeight <= 0)
|
|
14
|
+
return null;
|
|
15
|
+
const layout = violinLayout(groups, { width: innerWidth, height: innerHeight, rtl });
|
|
16
|
+
return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: [showAxis &&
|
|
17
|
+
layout.yTicks.map((tick) => (_jsxs("g", { children: [_jsx("line", { className: "adm-chart-gridline", x1: 0, x2: innerWidth, y1: layout.yFor(tick), y2: layout.yFor(tick) }), _jsx("text", { className: "adm-chart-axis-label adm-chart-num", x: rtl ? innerWidth + 6 : -6, y: layout.yFor(tick) + 3, textAnchor: rtl ? 'start' : 'end', children: formatY(tick) })] }, tick))), layout.violins.map((violin) => (_jsxs("g", { "data-violin": violin.label, children: [_jsx("path", { d: violin.path, fill: "var(--accent-area)", stroke: "var(--viz-1)", strokeWidth: 1.5, "data-violin-path": "" }), _jsx("line", { x1: violin.centerX - layout.bandwidth * 0.24, x2: violin.centerX + layout.bandwidth * 0.24, y1: violin.medY, y2: violin.medY, stroke: "var(--viz-1)", strokeWidth: 2, "data-median": "" })] }, violin.label))), showCategoryLabels &&
|
|
18
|
+
layout.violins.map((violin) => (_jsx("text", { className: "adm-chart-axis-label", x: violin.centerX, y: innerHeight + 15, textAnchor: "middle", children: violin.label }, violin.label)))] }));
|
|
19
|
+
} }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=ViolinChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViolinChart.js","sourceRoot":"","sources":["../../src/components/ViolinChart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chart-waterfall` primitive (research/widget-registry.md §2): a floating-bar
|
|
3
|
+
* bridge (Start / New / Expansion / Churn / Net) with +/− colored steps and
|
|
4
|
+
* total anchors, plus connector segments riding the running level. Composed
|
|
5
|
+
* from ChartSurface + pure `layoutWaterfall` geometry. Token-only colors
|
|
6
|
+
* (pos/danger/accent-ramp), categorical x mirrors in RTL, mount fade.
|
|
7
|
+
*/
|
|
8
|
+
import type { ReactNode } from 'react';
|
|
9
|
+
import type { WaterfallInput } from '../geometry/waterfall.js';
|
|
10
|
+
import type { ChartDir } from '../hooks/useRtl.js';
|
|
11
|
+
import type { ChartLabels } from './ChartSurface.js';
|
|
12
|
+
export interface WaterfallChartProps {
|
|
13
|
+
data: readonly WaterfallInput[];
|
|
14
|
+
labels: ChartLabels;
|
|
15
|
+
height?: number;
|
|
16
|
+
showAxis?: boolean;
|
|
17
|
+
formatValue?: (value: number) => string;
|
|
18
|
+
dir?: ChartDir;
|
|
19
|
+
a11yFallback?: ReactNode;
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function WaterfallChart({ data, labels, height, showAxis, formatValue, dir, a11yFallback, className, }: WaterfallChartProps): import("react").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=WaterfallChart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WaterfallChart.d.ts","sourceRoot":"","sources":["../../src/components/WaterfallChart.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,cAAc,EAAE,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAcD,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,MAAM,EACN,MAAY,EACZ,QAAe,EACf,WAA2B,EAC3B,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,mBAAmB,+BA4FrB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { layoutWaterfall } from '../geometry/waterfall.js';
|
|
3
|
+
import { formatCompact } from '../utils/format.js';
|
|
4
|
+
import { ChartSurface } from './ChartSurface.js';
|
|
5
|
+
function typeColor(type) {
|
|
6
|
+
if (type === 'up')
|
|
7
|
+
return 'var(--pos)';
|
|
8
|
+
if (type === 'down')
|
|
9
|
+
return 'var(--danger)';
|
|
10
|
+
return 'var(--viz-ramp-4)';
|
|
11
|
+
}
|
|
12
|
+
function signedText(type, value, format) {
|
|
13
|
+
if (type === 'up')
|
|
14
|
+
return `+${format(value)}`;
|
|
15
|
+
if (type === 'down')
|
|
16
|
+
return `−${format(value)}`;
|
|
17
|
+
return format(value);
|
|
18
|
+
}
|
|
19
|
+
export function WaterfallChart({ data, labels, height = 260, showAxis = true, formatValue = formatCompact, dir, a11yFallback, className, }) {
|
|
20
|
+
return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 18, bottom: 22, left: showAxis ? 36 : 6, right: 8 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
|
|
21
|
+
if (data.length === 0 || innerWidth <= 0 || innerHeight <= 0)
|
|
22
|
+
return null;
|
|
23
|
+
const layout = layoutWaterfall(data, { width: innerWidth, height: innerHeight, rtl });
|
|
24
|
+
const valueEdge = rtl ? innerWidth + 6 : -6;
|
|
25
|
+
return (_jsxs("g", { children: [showAxis &&
|
|
26
|
+
layout.yTicks.map((tick) => (_jsxs("g", { children: [_jsx("line", { className: "adm-chart-gridline", x1: 0, x2: innerWidth, y1: layout.yFor(tick), y2: layout.yFor(tick) }), _jsx("text", { className: "adm-chart-axis-label adm-chart-num", x: valueEdge, y: layout.yFor(tick) + 3, textAnchor: rtl ? 'start' : 'end', children: formatValue(tick) })] }, tick))), layout.connectors.map((connector) => (_jsx("line", { x1: connector.x1, x2: connector.x2, y1: connector.y, y2: connector.y, stroke: "var(--border-strong)", strokeWidth: 1, strokeDasharray: "3 3", "data-connector": connector.fromIndex }, connector.fromIndex))), _jsx("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.bars.map((bar) => (_jsxs("g", { "data-step": bar.index, "data-type": bar.type, children: [_jsx("rect", { x: bar.x, y: bar.y, width: bar.width, height: Math.max(1, bar.height), rx: 2, fill: typeColor(bar.type) }), _jsx("text", { className: "adm-chart-num", x: bar.centerX, y: bar.y - 5, textAnchor: "middle", fontSize: 10, fontWeight: 700, fill: "var(--fg-muted)", children: signedText(bar.type, bar.value, formatValue) }), _jsx("text", { className: "adm-chart-axis-label", x: bar.centerX, y: innerHeight + 15, textAnchor: "middle", children: bar.label })] }, bar.label))) })] }));
|
|
27
|
+
} }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=WaterfallChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WaterfallChart.js","sourceRoot":"","sources":["../../src/components/WaterfallChart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chart-wordcloud` primitive (research/widget-registry.md §2): terms sized by
|
|
3
|
+
* frequency, flowed into wrapped rows and rendered as SVG <text> (font size is
|
|
4
|
+
* an SVG presentation attribute, so no `style` prop and no DOM text metrics).
|
|
5
|
+
* Widths are estimated deterministically in geometry → identical layout in a
|
|
6
|
+
* report worker (04 §7.1). Rows mirror in RTL (§7.4); colors are tokens only.
|
|
7
|
+
*/
|
|
8
|
+
import type { ReactNode } from 'react';
|
|
9
|
+
import type { WordInput } from '../geometry/wordcloud.js';
|
|
10
|
+
import type { ChartDir } from '../hooks/useRtl.js';
|
|
11
|
+
import type { ChartLabels } from './ChartSurface.js';
|
|
12
|
+
export interface WordCloudChartProps {
|
|
13
|
+
data: readonly WordInput[];
|
|
14
|
+
labels: ChartLabels;
|
|
15
|
+
height?: number;
|
|
16
|
+
maxTerms?: number;
|
|
17
|
+
minFontSize?: number;
|
|
18
|
+
maxFontSize?: number;
|
|
19
|
+
dir?: ChartDir;
|
|
20
|
+
a11yFallback?: ReactNode;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function WordCloud({ data, labels, height, maxTerms, minFontSize, maxFontSize, dir, a11yFallback, className, }: WordCloudChartProps): import("react").JSX.Element;
|
|
24
|
+
//# sourceMappingURL=WordCloud.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WordCloud.d.ts","sourceRoot":"","sources":["../../src/components/WordCloud.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACN,MAAY,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,mBAAmB,+BAgDrB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { wordCloudLayout } from '../geometry/wordcloud.js';
|
|
3
|
+
import { ChartSurface } from './ChartSurface.js';
|
|
4
|
+
export function WordCloud({ data, labels, height = 200, maxTerms, minFontSize, maxFontSize, dir, a11yFallback, className, }) {
|
|
5
|
+
return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 6, right: 6, bottom: 6, left: 6 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
|
|
6
|
+
if (innerWidth <= 0)
|
|
7
|
+
return null;
|
|
8
|
+
// Geometry mirrors each row's start edge in RTL, so the text anchor
|
|
9
|
+
// stays "start" and the term boxes read end→start.
|
|
10
|
+
const { tokens, height: contentHeight } = wordCloudLayout(data, {
|
|
11
|
+
width: innerWidth,
|
|
12
|
+
rtl,
|
|
13
|
+
...(maxTerms !== undefined ? { maxTerms } : {}),
|
|
14
|
+
...(minFontSize !== undefined ? { minFontSize } : {}),
|
|
15
|
+
...(maxFontSize !== undefined ? { maxFontSize } : {}),
|
|
16
|
+
});
|
|
17
|
+
// Vertically center the cloud within the plot area.
|
|
18
|
+
const offsetY = Math.max(0, (innerHeight - contentHeight) / 2);
|
|
19
|
+
return (_jsx("g", { "data-wordcloud": "", transform: `translate(0, ${offsetY})`, children: tokens.map((token, i) => (_jsx("text", { x: token.x, y: token.y, fontSize: token.fontSize, fontWeight: 700, fill: token.colorVar, textAnchor: "start", dominantBaseline: "middle", className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0', '--adm-stagger': `${i * 40}ms` }, "data-term": token.term, children: token.term }, `${token.term}-${i}`))) }));
|
|
20
|
+
} }));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=WordCloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WordCloud.js","sourceRoot":"","sources":["../../src/components/WordCloud.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAejD,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACN,MAAM,GAAG,GAAG,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,GAAG,EACH,YAAY,EACZ,SAAS,GACW;IACpB,OAAO,CACL,KAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACV,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAClD,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,YAEhD,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7C,IAAI,UAAU,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACjC,oEAAoE;YACpE,mDAAmD;YACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE;gBAC9D,KAAK,EAAE,UAAU;gBACjB,GAAG;gBACH,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtD,CAAC,CAAC;YACH,oDAAoD;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAE/D,OAAO,CACL,8BAAkB,EAAE,EAAC,SAAS,EAAE,gBAAgB,OAAO,GAAG,YACvD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,eAEE,CAAC,EAAE,KAAK,CAAC,CAAC,EACV,CAAC,EAAE,KAAK,CAAC,CAAC,EACV,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,UAAU,EAAE,GAAG,EACf,IAAI,EAAE,KAAK,CAAC,QAAQ,EACpB,UAAU,EAAC,OAAO,EAClB,gBAAgB,EAAC,QAAQ,EACzB,SAAS,EAAC,gBAAgB,EAC1B,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,eACjE,KAAK,CAAC,IAAI,YAEpB,KAAK,CAAC,IAAI,IAZN,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,CAapB,CACR,CAAC,GACA,CACL,CAAC;QACJ,CAAC,GACY,CAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { RankingInput } from '../geometry/ranking.js';
|
|
2
|
+
import type { BulletInput } from '../geometry/bullet.js';
|
|
3
|
+
import type { ParetoInput } from '../geometry/pareto.js';
|
|
4
|
+
import type { WaterfallInput } from '../geometry/waterfall.js';
|
|
5
|
+
import type { StackedInput } from '../geometry/stacked100.js';
|
|
6
|
+
import type { SlopeInput } from '../geometry/slope.js';
|
|
7
|
+
/** Sorted-descending top-N ranking values (top countries / regions). */
|
|
8
|
+
export declare function demoRanking(seed: number, n?: number): RankingInput[];
|
|
9
|
+
/** Goal rows: measure vs target with three qualitative bands. */
|
|
10
|
+
export declare function demoBullet(seed: number, n?: number): BulletInput[];
|
|
11
|
+
/** Sorted-descending cause counts for the Pareto bars + cumulative line. */
|
|
12
|
+
export declare function demoPareto(seed: number): ParetoInput[];
|
|
13
|
+
/** MRR bridge: Start anchor, up/down movements, Net anchor. */
|
|
14
|
+
export declare function demoWaterfall(seed: number): WaterfallInput[];
|
|
15
|
+
export interface DemoMarimekko {
|
|
16
|
+
rowKeys: string[];
|
|
17
|
+
colKeys: string[];
|
|
18
|
+
cells: number[][];
|
|
19
|
+
}
|
|
20
|
+
/** Region (columns) × plan (rows) revenue matrix. */
|
|
21
|
+
export declare function demoMarimekko(seed: number): DemoMarimekko;
|
|
22
|
+
/** Traffic-by-source shares for the 100% bar. */
|
|
23
|
+
export declare function demoStacked100(seed: number): StackedInput[];
|
|
24
|
+
/** Plan-mix share shift A → B. */
|
|
25
|
+
export declare function demoSlope(seed: number): SlopeInput[];
|
|
26
|
+
//# sourceMappingURL=barsRanking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"barsRanking.d.ts","sourceRoot":"","sources":["../../src/demo/barsRanking.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAQvD,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,YAAY,EAAE,CAK/D;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,WAAW,EAAE,CAQ7D;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAKtD;AAED,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAgB5D;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;CACnB;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAMzD;AAED,iDAAiD;AACjD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAO3D;AAED,kCAAkC;AAClC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAOpD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic domain-shaped demo generators for the "bars & ranking" chart
|
|
3
|
+
* group (04-T09; workplan/04-widget-registry.md §7.7). Same seed → identical
|
|
4
|
+
* payload across runs and platforms — seeded PRNG only, never Date.now()/
|
|
5
|
+
* Math.random(). These feed the chart-primitive tests and stories; the
|
|
6
|
+
* @adminium/widgets defs wrap the same numbers into §3 envelopes.
|
|
7
|
+
*/
|
|
8
|
+
import { mulberry32 } from './mulberry32.js';
|
|
9
|
+
const REGIONS = ['United States', 'Germany', 'Japan', 'Brazil', 'India', 'Canada', 'France', 'Australia'];
|
|
10
|
+
const CAUSES = ['Timeout', 'Validation', 'Auth', 'Rate limit', 'Network', 'Unknown'];
|
|
11
|
+
const PLANS = ['Free', 'Pro', 'Business', 'Enterprise'];
|
|
12
|
+
const SOURCES = ['Organic', 'Paid', 'Referral', 'Social', 'Email'];
|
|
13
|
+
const GOALS = ['Revenue', 'Signups', 'Retention', 'NPS'];
|
|
14
|
+
/** Sorted-descending top-N ranking values (top countries / regions). */
|
|
15
|
+
export function demoRanking(seed, n = 6) {
|
|
16
|
+
const random = mulberry32(seed);
|
|
17
|
+
return REGIONS.slice(0, n)
|
|
18
|
+
.map((label) => ({ label, value: Math.round(200 + random() * 800) }))
|
|
19
|
+
.sort((a, b) => b.value - a.value);
|
|
20
|
+
}
|
|
21
|
+
/** Goal rows: measure vs target with three qualitative bands. */
|
|
22
|
+
export function demoBullet(seed, n = 4) {
|
|
23
|
+
const random = mulberry32(seed);
|
|
24
|
+
return GOALS.slice(0, n).map((label) => {
|
|
25
|
+
const max = 100;
|
|
26
|
+
const target = Math.round(60 + random() * 25);
|
|
27
|
+
const measure = Math.round(30 + random() * 65);
|
|
28
|
+
return { label, measure, target, max, bandCutoffs: [40, 75] };
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/** Sorted-descending cause counts for the Pareto bars + cumulative line. */
|
|
32
|
+
export function demoPareto(seed) {
|
|
33
|
+
const random = mulberry32(seed);
|
|
34
|
+
return CAUSES.map((label) => ({ label, value: Math.round(10 + random() * 240) })).sort((a, b) => b.value - a.value);
|
|
35
|
+
}
|
|
36
|
+
/** MRR bridge: Start anchor, up/down movements, Net anchor. */
|
|
37
|
+
export function demoWaterfall(seed) {
|
|
38
|
+
const random = mulberry32(seed);
|
|
39
|
+
const start = Math.round(180 + random() * 60);
|
|
40
|
+
const newBiz = Math.round(30 + random() * 40);
|
|
41
|
+
const expansion = Math.round(15 + random() * 25);
|
|
42
|
+
const contraction = Math.round(8 + random() * 16);
|
|
43
|
+
const churn = Math.round(12 + random() * 22);
|
|
44
|
+
const net = start + newBiz + expansion - contraction - churn;
|
|
45
|
+
return [
|
|
46
|
+
{ label: 'Start', value: start, type: 'total' },
|
|
47
|
+
{ label: 'New', value: newBiz, type: 'up' },
|
|
48
|
+
{ label: 'Expansion', value: expansion, type: 'up' },
|
|
49
|
+
{ label: 'Contraction', value: contraction, type: 'down' },
|
|
50
|
+
{ label: 'Churn', value: churn, type: 'down' },
|
|
51
|
+
{ label: 'Net', value: net, type: 'total' },
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
/** Region (columns) × plan (rows) revenue matrix. */
|
|
55
|
+
export function demoMarimekko(seed) {
|
|
56
|
+
const random = mulberry32(seed);
|
|
57
|
+
const colKeys = REGIONS.slice(0, 4);
|
|
58
|
+
const rowKeys = [...PLANS];
|
|
59
|
+
const cells = rowKeys.map(() => colKeys.map(() => Math.round(20 + random() * 180)));
|
|
60
|
+
return { rowKeys, colKeys, cells };
|
|
61
|
+
}
|
|
62
|
+
/** Traffic-by-source shares for the 100% bar. */
|
|
63
|
+
export function demoStacked100(seed) {
|
|
64
|
+
const random = mulberry32(seed);
|
|
65
|
+
return SOURCES.map((label) => ({
|
|
66
|
+
key: label.toLowerCase(),
|
|
67
|
+
label,
|
|
68
|
+
value: Math.round(20 + random() * 100),
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
/** Plan-mix share shift A → B. */
|
|
72
|
+
export function demoSlope(seed) {
|
|
73
|
+
const random = mulberry32(seed);
|
|
74
|
+
return PLANS.map((label) => {
|
|
75
|
+
const a = Math.round(10 + random() * 40);
|
|
76
|
+
const b = Math.max(2, Math.round(a + (random() - 0.5) * 26));
|
|
77
|
+
return { label, a, b };
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=barsRanking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"barsRanking.js","sourceRoot":"","sources":["../../src/demo/barsRanking.ts"],"names":[],"mappings":"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"}
|