@goliapkg/gds 2.1.0 → 2.1.2
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.
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"l6-charts-ngP5gbBh.js","names":[],"sources":["../src/l6-charts/annotated-chart.tsx","../src/l6-charts/area-chart.tsx","../src/l6-charts/bar-chart.tsx","../src/l6-charts/box-plot-stats.ts","../src/l6-charts/box-plot.tsx","../src/l6-charts/bubble-chart.tsx","../src/l6-charts/bullet-chart.tsx","../src/l6-charts/bump-chart.tsx","../src/l6-charts/heatmap-utils.ts","../src/l6-charts/calendar-heatmap.tsx","../src/l6-charts/candlestick-chart.tsx","../src/l6-charts/chord-math.ts","../src/l6-charts/chord-diagram.tsx","../src/l6-charts/choropleth-map.tsx","../src/l6-charts/combo-chart.tsx","../src/l6-charts/donut-gauge.tsx","../src/l6-charts/flame-chart.tsx","../src/l6-charts/flow-chart.tsx","../src/l6-charts/funnel-chart.tsx","../src/l6-charts/gauge.tsx","../src/l6-charts/heatmap-chart.tsx","../src/l6-charts/histogram.tsx","../src/l6-charts/line-chart.tsx","../src/l6-charts/network-graph.tsx","../src/l6-charts/order-book-chart.tsx","../src/l6-charts/pie-chart.tsx","../src/l6-charts/polar-area-chart.tsx","../src/l6-charts/radar-chart.tsx","../src/l6-charts/radial-bar-chart.tsx","../src/l6-charts/realtime-chart.tsx","../src/l6-charts/sankey-chart.tsx","../src/l6-charts/scatter-chart.tsx","../src/l6-charts/sparkline.tsx","../src/l6-charts/stock-ticker.tsx","../src/l6-charts/stream-chart.tsx","../src/l6-charts/sunburst-math.ts","../src/l6-charts/sunburst-chart.tsx","../src/l6-charts/timeline-chart.tsx","../src/l6-charts/treemap-chart.tsx","../src/l6-charts/violin-plot.tsx","../src/l6-charts/waffle-chart.tsx","../src/l6-charts/waterfall-chart.tsx","../src/l6-charts/waveform-display.tsx","../src/l6-charts/word-cloud.tsx"],"sourcesContent":["// annotated-chart — line chart with interactive annotation markers\nimport { useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype Annotation = {\n color?: string\n description: string\n label: string\n x: number\n}\n\ntype AnnotatedChartProps = {\n annotations: Annotation[]\n className?: string\n data: { x: number; y: number }[]\n height?: number\n}\n\nconst PADDING = 32\n\nfunction scalePoints(\n data: { x: number; y: number }[],\n width: number,\n height: number\n): { sx: number; sy: number }[] {\n if (data.length === 0) return []\n const xMin = Math.min(...data.map((d) => d.x))\n const xMax = Math.max(...data.map((d) => d.x))\n const yMin = Math.min(...data.map((d) => d.y))\n const yMax = Math.max(...data.map((d) => d.y))\n const xRange = xMax - xMin || 1\n const yRange = yMax - yMin || 1\n return data.map((d) => ({\n sx: PADDING + ((d.x - xMin) / xRange) * (width - PADDING * 2),\n sy: PADDING + (1 - (d.y - yMin) / yRange) * (height - PADDING * 2),\n }))\n}\n\nexport function AnnotatedChart({\n annotations,\n className,\n data,\n height = 200,\n}: AnnotatedChartProps) {\n const [activeIdx, setActiveIdx] = useState<null | number>(null)\n const width = 400\n const scaled = scalePoints(data, width, height)\n const polylinePoints = scaled.map((p) => `${p.sx},${p.sy}`).join(' ')\n\n return (\n <div\n className={cx('relative select-none', className)}\n data-component=\"annotated-chart\"\n >\n <svg className=\"w-full\" viewBox={`0 0 ${width} ${height}`}>\n <polyline\n className=\"stroke-accent\"\n fill=\"none\"\n points={polylinePoints}\n strokeWidth={2}\n />\n {annotations.map((ann, i) => {\n const idx = data.findIndex((d) => d.x === ann.x)\n if (idx < 0) return null\n const pos = scaled[idx]\n return (\n <g\n className=\"cursor-pointer outline-none\"\n key={i}\n onClick={() => setActiveIdx(activeIdx === i ? null : i)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setActiveIdx(activeIdx === i ? null : i)\n }\n }}\n role=\"button\"\n tabIndex={0}\n >\n <rect\n fill={ann.color ?? 'currentColor'}\n height={8}\n rx={1}\n transform={`translate(${pos.sx}, ${pos.sy}) rotate(45) translate(-4, -4)`}\n width={8}\n />\n </g>\n )\n })}\n </svg>\n {activeIdx !== null &&\n (() => {\n const ann = annotations[activeIdx]\n const idx = data.findIndex((d) => d.x === ann.x)\n if (idx < 0) return null\n const pos = scaled[idx]\n return (\n <div\n className=\"border-border bg-surface absolute z-10 rounded-lg border px-3 py-2 shadow-lg\"\n style={{\n left: `${(pos.sx / width) * 100}%`,\n top: `${(pos.sy / height) * 100}%`,\n }}\n >\n <div className=\"text-fg text-xs font-bold\">{ann.label}</div>\n <div className=\"text-fg-muted text-xs\">{ann.description}</div>\n </div>\n )\n })()}\n </div>\n )\n}\n\nexport type { AnnotatedChartProps, Annotation }\n","import { forwardRef } from 'react'\nimport {\n Area,\n AreaChart as RAreaChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type AreaChartProps = {\n data: ChartData[]\n dataKey: string\n xKey?: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nconst GRADIENT_ID = 'gds-area-gradient'\n\nexport const AreaChart = forwardRef<HTMLDivElement, AreaChartProps>(\n function AreaChart(\n {\n data,\n dataKey,\n xKey = 'name',\n className,\n height = 300,\n color = 'var(--gds-accent)',\n glass,\n ...props\n },\n ref\n ) {\n return (\n <div\n className={cx(\n 'w-full',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"area-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RAreaChart data={data}>\n <defs>\n <linearGradient id={GRADIENT_ID} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={color} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={color} stopOpacity={0} />\n </linearGradient>\n </defs>\n <CartesianGrid\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeDasharray=\"3 3\"\n />\n <XAxis\n dataKey={xKey}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n <Area\n dataKey={dataKey}\n fill={`url(#${GRADIENT_ID})`}\n fillOpacity={1}\n stroke={color}\n strokeWidth={2}\n type=\"monotone\"\n />\n </RAreaChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\nimport {\n Bar,\n BarChart as RBarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type BarChartProps = {\n data: ChartData[]\n dataKey: string\n xKey?: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nexport const BarChart = forwardRef<HTMLDivElement, BarChartProps>(\n function BarChart(\n {\n data,\n dataKey,\n xKey = 'name',\n className,\n height = 300,\n color = 'var(--gds-accent)',\n glass,\n ...props\n },\n ref\n ) {\n return (\n <div\n className={cx(\n 'w-full',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"bar-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RBarChart data={data}>\n <CartesianGrid\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeDasharray=\"3 3\"\n />\n <XAxis\n dataKey={xKey}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n <Bar dataKey={dataKey} fill={color} radius={[4, 4, 0, 0]} />\n </RBarChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","// box-plot-stats — quartile and whisker computation\n\nfunction quantile(sorted: number[], q: number): number {\n const pos = (sorted.length - 1) * q\n const lo = Math.floor(pos)\n const hi = Math.ceil(pos)\n if (lo === hi) return sorted[lo]\n return sorted[lo] + (sorted[hi] - sorted[lo]) * (pos - lo)\n}\n\nexport type BoxStats = {\n q1: number\n median: number\n q3: number\n whiskerMin: number\n whiskerMax: number\n}\n\nexport function computeStats(values: number[]): BoxStats {\n const sorted = [...values].sort((a, b) => a - b)\n const q1 = quantile(sorted, 0.25)\n const median = quantile(sorted, 0.5)\n const q3 = quantile(sorted, 0.75)\n const iqr = q3 - q1\n const whiskerMin = Math.max(sorted[0], q1 - 1.5 * iqr)\n const whiskerMax = Math.min(sorted[sorted.length - 1], q3 + 1.5 * iqr)\n return { q1, median, q3, whiskerMin, whiskerMax }\n}\n","// box-plot — box and whisker plot using pure SVG\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { computeStats } from './box-plot-stats'\n\ntype BoxPlotGroup = {\n label: string\n values: number[]\n}\n\nexport type BoxPlotProps = {\n data: BoxPlotGroup[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n]\n\nexport const BoxPlot = forwardRef<HTMLDivElement, BoxPlotProps>(\n function BoxPlot({ data, width = 400, height = 300, glass, className }, ref) {\n const padding = { top: 20, right: 20, bottom: 40, left: 50 }\n const chartW = width - padding.left - padding.right\n const chartH = height - padding.top - padding.bottom\n\n const allValues = data.flatMap((g) => g.values)\n const globalMin = allValues.length > 0 ? Math.min(...allValues) : 0\n const globalMax = allValues.length > 0 ? Math.max(...allValues) : 1\n const range = globalMax - globalMin\n const yMin = globalMin - range * 0.1\n const yMax = globalMax + range * 0.1\n const yScale = (v: number) =>\n padding.top + chartH * (1 - (v - yMin) / (yMax - yMin))\n\n const groupW = data.length > 0 ? chartW / data.length : chartW\n const boxW = Math.min(groupW * 0.6, 60)\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border-border border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"box-plot\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {/* y-axis */}\n <line\n x1={padding.left}\n y1={padding.top}\n x2={padding.left}\n y2={padding.top + chartH}\n stroke=\"var(--gds-border, #374151)\"\n strokeWidth={1}\n />\n {/* x-axis */}\n <line\n x1={padding.left}\n y1={padding.top + chartH}\n x2={padding.left + chartW}\n y2={padding.top + chartH}\n stroke=\"var(--gds-border, #374151)\"\n strokeWidth={1}\n />\n\n {data.map((group, i) => {\n if (group.values.length === 0) return null\n const stats = computeStats(group.values)\n const cx = padding.left + groupW * (i + 0.5)\n const color = PALETTE[i % PALETTE.length]\n\n return (\n <g key={group.label} data-box={group.label}>\n {/* whisker line */}\n <line\n x1={cx}\n y1={yScale(stats.whiskerMax)}\n x2={cx}\n y2={yScale(stats.whiskerMin)}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* whisker caps */}\n <line\n x1={cx - boxW * 0.3}\n y1={yScale(stats.whiskerMin)}\n x2={cx + boxW * 0.3}\n y2={yScale(stats.whiskerMin)}\n stroke={color}\n strokeWidth={1.5}\n />\n <line\n x1={cx - boxW * 0.3}\n y1={yScale(stats.whiskerMax)}\n x2={cx + boxW * 0.3}\n y2={yScale(stats.whiskerMax)}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* box */}\n <rect\n x={cx - boxW / 2}\n y={yScale(stats.q3)}\n width={boxW}\n height={yScale(stats.q1) - yScale(stats.q3)}\n fill={color}\n fillOpacity={0.2}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* median line */}\n <line\n x1={cx - boxW / 2}\n y1={yScale(stats.median)}\n x2={cx + boxW / 2}\n y2={yScale(stats.median)}\n stroke={color}\n strokeWidth={2}\n />\n {/* label */}\n <text\n x={cx}\n y={padding.top + chartH + 20}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg-muted, #9ca3af)\"\n fontSize={10}\n >\n {group.label}\n </text>\n </g>\n )\n })}\n </svg>\n </div>\n )\n }\n)\n\nexport { computeStats } from './box-plot-stats'\nexport type { BoxPlotGroup }\n","import { forwardRef } from 'react'\nimport {\n ResponsiveContainer,\n Scatter,\n ScatterChart,\n Tooltip,\n XAxis,\n YAxis,\n ZAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\nexport type BubbleChartProps = {\n data: { x: number; y: number; z: number; name?: string }[]\n xLabel?: string\n yLabel?: string\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const BubbleChart = forwardRef<HTMLDivElement, BubbleChartProps>(\n function BubbleChart(\n { data, xLabel, yLabel, height = 300, glass, className, ...props },\n ref\n ) {\n return (\n <div\n className={cx(\n 'gds-radius-popover w-full border border-[var(--gds-border,#e5e7eb)]',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"bubble-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <ScatterChart>\n <XAxis\n dataKey=\"x\"\n name={xLabel}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n />\n <YAxis\n dataKey=\"y\"\n name={yLabel}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n />\n <ZAxis dataKey=\"z\" range={[20, 400]} type=\"number\" />\n <Tooltip />\n <Scatter data={data} fill=\"var(--gds-accent)\" fillOpacity={0.6} />\n </ScatterChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","// bullet-chart — performance comparison (actual vs target with range bands)\nimport { useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype BulletChartProps = {\n actual: number\n className?: string\n label?: string\n max: number\n ranges?: [number, number, number]\n target: number\n}\n\nconst WIDTH = 400\nconst BAR_HEIGHT = 28\nconst TOTAL_HEIGHT = 50\n\nexport function BulletChart({\n actual,\n className,\n label,\n max,\n ranges,\n target,\n}: BulletChartProps) {\n const computed = useMemo(() => {\n const thresholds = ranges ?? [max * 0.33, max * 0.66, max]\n const scale = (v: number) => (v / max) * WIDTH\n return {\n actualWidth: scale(Math.min(actual, max)),\n rangeWidths: thresholds.map((t) => scale(Math.min(t, max))),\n targetX: scale(Math.min(target, max)),\n }\n }, [actual, max, target, ranges])\n\n const barY = (TOTAL_HEIGHT - BAR_HEIGHT) / 2\n\n return (\n <div className={cx('select-none', className)} data-component=\"bullet-chart\">\n {label !== undefined && (\n <div className=\"text-fg-muted mb-1 text-xs font-medium\">{label}</div>\n )}\n <svg\n height={TOTAL_HEIGHT}\n viewBox={`0 0 ${WIDTH} ${TOTAL_HEIGHT}`}\n width=\"100%\"\n >\n {computed.rangeWidths.map((w, i) => (\n <rect\n fill={`var(--gds-palette-${7 - i})`}\n height={BAR_HEIGHT}\n key={i}\n opacity={0.15 + i * 0.08}\n rx={4}\n width={w}\n x={0}\n y={barY}\n />\n ))}\n <rect\n fill=\"var(--gds-accent)\"\n height={BAR_HEIGHT * 0.5}\n rx={3}\n width={computed.actualWidth}\n x={0}\n y={barY + BAR_HEIGHT * 0.25}\n />\n <line\n stroke=\"var(--gds-fg)\"\n strokeWidth={2.5}\n x1={computed.targetX}\n x2={computed.targetX}\n y1={barY - 2}\n y2={barY + BAR_HEIGHT + 2}\n />\n </svg>\n </div>\n )\n}\n\nexport type { BulletChartProps }\n","import { forwardRef } from 'react'\nimport {\n CartesianGrid,\n Line,\n LineChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n 'var(--gds-palette-5, #ef4444)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #a855f7)',\n]\n\nexport type BumpChartProps = {\n data: Record<string, unknown>[]\n series: string[]\n xKey?: string\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const BumpChart = forwardRef<HTMLDivElement, BumpChartProps>(\n function BumpChart(\n { data, series, xKey = 'name', height = 300, glass, className, ...props },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border-border w-full border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"bump-chart\"\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <LineChart data={data}>\n <CartesianGrid\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeDasharray=\"3 3\"\n />\n <XAxis\n dataKey={xKey}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <YAxis\n reversed\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n {series.map((key, i) => (\n <Line\n key={key}\n dataKey={key}\n dot={{ r: 4, fill: PALETTE[i % PALETTE.length] }}\n stroke={PALETTE[i % PALETTE.length]}\n strokeWidth={2}\n type=\"monotone\"\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","// heatmap-utils — pure date computation for calendar heatmap\n\nexport type HeatmapDatum = { date: string; value: number }\n\nexport type HeatmapCell = {\n x: number\n y: number\n date: string\n value: number\n level: number\n}\n\nexport type MonthLabel = { label: string; x: number }\n\nexport type HeatmapGrid = {\n cells: HeatmapCell[]\n monthLabels: MonthLabel[]\n weeks: number\n}\n\nexport const DAY_LABELS = ['Mon', '', 'Wed', '', 'Fri', '', '']\nconst MONTH_NAMES = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n]\n\nfunction getWeekday(d: Date): number {\n // 0=Mon ... 6=Sun\n return (d.getDay() + 6) % 7\n}\n\nfunction computeThresholds(data: HeatmapDatum[]): number[] {\n const values = data\n .map((d) => d.value)\n .filter((v) => v > 0)\n .sort((a, b) => a - b)\n const thresholds: number[] = []\n if (values.length > 0) {\n for (let i = 1; i <= 4; i++) {\n const idx = Math.min(\n Math.floor((i / 4) * values.length),\n values.length - 1\n )\n thresholds.push(values[idx])\n }\n }\n return thresholds\n}\n\nfunction getLevel(value: number, thresholds: number[]): number {\n if (value <= 0) return 0\n for (let i = 0; i < thresholds.length; i++) {\n if (value <= thresholds[i]) return i + 1\n }\n return 4\n}\n\nexport function computeHeatmapGrid(\n data: HeatmapDatum[],\n startDate: string | undefined,\n endDate: string | undefined,\n step: number\n): HeatmapGrid {\n const end = endDate !== undefined ? new Date(endDate) : new Date()\n const start =\n startDate !== undefined\n ? new Date(startDate)\n : new Date(end.getFullYear() - 1, end.getMonth(), end.getDate() + 1)\n\n const lookup = new Map<string, number>()\n for (const d of data) {\n lookup.set(d.date, d.value)\n }\n\n const thresholds = computeThresholds(data)\n\n const cells: HeatmapCell[] = []\n const months: MonthLabel[] = []\n let weekIdx = 0\n let lastMonth = -1\n const cur = new Date(start)\n\n // align to start of week (Monday)\n const startWeekday = getWeekday(cur)\n if (startWeekday > 0) {\n cur.setDate(cur.getDate() - startWeekday)\n }\n\n while (cur <= end) {\n const day = getWeekday(cur)\n const dateStr = cur.toISOString().slice(0, 10)\n const value = lookup.get(dateStr) ?? 0\n\n if (cur.getMonth() !== lastMonth && day <= 3) {\n months.push({ label: MONTH_NAMES[cur.getMonth()], x: weekIdx * step })\n lastMonth = cur.getMonth()\n }\n\n cells.push({\n x: weekIdx * step,\n y: day * step,\n date: dateStr,\n value,\n level: getLevel(value, thresholds),\n })\n\n if (day === 6) {\n weekIdx++\n }\n cur.setDate(cur.getDate() + 1)\n }\n\n return { cells, monthLabels: months, weeks: weekIdx + 1 }\n}\n","// calendar-heatmap — GitHub-style contribution heatmap\nimport { forwardRef, useMemo, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { computeHeatmapGrid, DAY_LABELS } from './heatmap-utils'\n\ntype HeatmapDatum = { date: string; value: number }\n\nexport type CalendarHeatmapProps = {\n data: HeatmapDatum[]\n startDate?: string\n endDate?: string\n colorScale?: string[]\n cellSize?: number\n glass?: boolean\n className?: string\n}\n\nexport const CalendarHeatmap = forwardRef<SVGSVGElement, CalendarHeatmapProps>(\n function CalendarHeatmap(\n {\n data,\n startDate,\n endDate,\n colorScale = [\n 'var(--gds-bg-tertiary)',\n 'var(--gds-accent-dim, rgba(99,179,163,0.3))',\n 'var(--gds-accent-muted, rgba(99,179,163,0.55))',\n 'var(--gds-accent-soft, rgba(99,179,163,0.75))',\n 'var(--gds-accent)',\n ],\n cellSize = 12,\n glass,\n className,\n },\n ref\n ) {\n const [tooltip, setTooltip] = useState<{\n x: number\n y: number\n text: string\n } | null>(null)\n const gap = 2\n const step = cellSize + gap\n\n const { cells, monthLabels, weeks } = useMemo(\n () => computeHeatmapGrid(data, startDate, endDate, step),\n [data, startDate, endDate, step]\n )\n\n const labelWidth = 28\n const headerHeight = 14\n const svgWidth = labelWidth + weeks * step\n const svgHeight = headerHeight + 7 * step\n\n return (\n <div\n className={cx(\n 'relative inline-block',\n glass === true &&\n cx(glassClass(glass), 'rounded-lg border border-white/10 p-3'),\n className\n )}\n data-component=\"calendar-heatmap\"\n >\n <svg ref={ref} height={svgHeight} width={svgWidth}>\n {monthLabels.map((m) => (\n <text\n key={`${m.label}-${m.x}`}\n fill=\"var(--gds-fg-muted, #888)\"\n fontSize={9}\n x={labelWidth + m.x}\n y={10}\n >\n {m.label}\n </text>\n ))}\n {DAY_LABELS.map((label, i) =>\n label !== '' ? (\n <text\n key={label}\n fill=\"var(--gds-fg-muted, #888)\"\n fontSize={9}\n textAnchor=\"end\"\n x={labelWidth - 4}\n y={headerHeight + i * step + cellSize - 2}\n >\n {label}\n </text>\n ) : null\n )}\n {cells.map((c) => (\n <rect\n key={c.date}\n fill={colorScale[c.level] ?? colorScale[colorScale.length - 1]}\n height={cellSize}\n rx={2}\n ry={2}\n width={cellSize}\n x={labelWidth + c.x}\n y={headerHeight + c.y}\n onMouseEnter={(e) => {\n const rect = (\n e.target as SVGRectElement\n ).getBoundingClientRect()\n setTooltip({\n x: rect.x,\n y: rect.y,\n text: `${c.date}: ${c.value}`,\n })\n }}\n onMouseLeave={() => setTooltip(null)}\n />\n ))}\n </svg>\n {tooltip !== null && (\n <div\n className=\"bg-surface text-fg border-border pointer-events-none fixed z-50 rounded border px-2 py-1 text-[10px] shadow-md\"\n style={{ left: tooltip.x, top: tooltip.y - 28 }}\n >\n {tooltip.text}\n </div>\n )}\n </div>\n )\n }\n)\n","import { forwardRef, useMemo } from 'react'\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype CandleData = {\n date: string\n open: number\n high: number\n low: number\n close: number\n}\n\nexport type CandlestickChartProps = {\n data: CandleData[]\n height?: number\n upColor?: string\n downColor?: string\n glass?: boolean\n className?: string\n}\n\nexport type PreparedCandle = {\n date: string\n bodyBottom: number\n bodyHeight: number\n fill: string\n high: number\n low: number\n}\n\nexport type CandleShapeProps = {\n x?: number\n y?: number\n width?: number\n height?: number\n payload?: PreparedCandle\n}\n\n// exported for testing\nexport function CandleShape(shapeProps: CandleShapeProps) {\n const { x = 0, y = 0, width = 0, height: h = 0, payload } = shapeProps\n if (payload === undefined) return null\n if (h === 0 && payload.bodyHeight === 0) return null\n const centerX = x + width / 2\n // wick: from high to low in chart coordinates\n // y corresponds to bodyBottom + bodyHeight (top of body), we need to compute wick positions\n const bodyTop = y\n const bodyBottom = y + h\n return (\n <g>\n <line\n stroke={payload.fill}\n strokeWidth={1}\n x1={centerX}\n x2={centerX}\n y1={bodyTop - 2}\n y2={bodyBottom + 2}\n />\n <rect\n fill={payload.fill}\n height={Math.max(h, 1)}\n rx={1}\n width={Math.max(width - 2, 2)}\n x={x + 1}\n y={y}\n />\n </g>\n )\n}\n\nexport const CandlestickChart = forwardRef<\n HTMLDivElement,\n CandlestickChartProps\n>(function CandlestickChart(\n {\n data,\n height = 300,\n upColor = 'var(--gds-success, #22c55e)',\n downColor = 'var(--gds-danger, #ef4444)',\n glass,\n className,\n ...props\n },\n ref\n) {\n const prepared = useMemo(\n () =>\n data.map((d) => ({\n date: d.date,\n bodyBottom: Math.min(d.open, d.close),\n bodyHeight: Math.abs(d.close - d.open),\n fill: d.close >= d.open ? upColor : downColor,\n high: d.high,\n low: d.low,\n })),\n [data, upColor, downColor]\n )\n\n const domain = useMemo(() => {\n const lows = data.map((d) => d.low)\n const highs = data.map((d) => d.high)\n return [Math.min(...lows), Math.max(...highs)]\n }, [data])\n\n return (\n <div\n className={cx(\n 'gds-radius-popover w-full border border-[var(--gds-border,#e5e7eb)]',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"candlestick-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <ComposedChart data={prepared}>\n <CartesianGrid\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeDasharray=\"3 3\"\n />\n <XAxis\n dataKey=\"date\"\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <YAxis\n domain={domain}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n <Bar dataKey=\"bodyHeight\" shape={<CandleShape />} stackId=\"candle\" />\n </ComposedChart>\n </ResponsiveContainer>\n </div>\n )\n})\n","// chord-math — pure math functions for chord diagram arc/chord geometry\n\nexport const CHORD_PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n 'var(--gds-palette-5, #ef4444)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #a855f7)',\n]\n\nexport type ArcSpan = { start: number; end: number }\n\nexport type ChordSpan = {\n source: number\n target: number\n sourceStart: number\n sourceEnd: number\n targetStart: number\n targetEnd: number\n}\n\nexport function polarToCartesian(\n cx: number,\n cy: number,\n r: number,\n angle: number\n) {\n return {\n x: cx + r * Math.cos(angle),\n y: cy + r * Math.sin(angle),\n }\n}\n\nexport function arcPath(\n cx: number,\n cy: number,\n r: number,\n startAngle: number,\n endAngle: number\n) {\n const start = polarToCartesian(cx, cy, r, endAngle)\n const end = polarToCartesian(cx, cy, r, startAngle)\n const largeArc = endAngle - startAngle > Math.PI ? 1 : 0\n return `M ${start.x} ${start.y} A ${r} ${r} 0 ${largeArc} 0 ${end.x} ${end.y}`\n}\n\nexport function computeArcs(\n totals: number[],\n grandTotal: number,\n n: number,\n gap: number\n): ArcSpan[] {\n const totalAngle = 2 * Math.PI - n * gap\n const arcs: ArcSpan[] = []\n let currentAngle = -Math.PI / 2\n\n for (let i = 0; i < n; i++) {\n const sweep = (totals[i] / grandTotal) * totalAngle\n arcs.push({ start: currentAngle, end: currentAngle + sweep })\n currentAngle += sweep + gap\n }\n\n return arcs\n}\n\nexport function computeChords(\n matrix: number[][],\n arcs: ArcSpan[],\n grandTotal: number,\n n: number,\n gap: number\n): ChordSpan[] {\n const totalAngle = 2 * Math.PI - n * gap\n const chords: ChordSpan[] = []\n const arcOffsets = arcs.map((a) => a.start)\n\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const val = matrix[i][j] + matrix[j][i]\n if (val <= 0) continue\n\n const iSweep = (matrix[i][j] / grandTotal) * totalAngle\n const jSweep = (matrix[j][i] / grandTotal) * totalAngle\n\n chords.push({\n source: i,\n target: j,\n sourceStart: arcOffsets[i],\n sourceEnd: arcOffsets[i] + iSweep,\n targetStart: arcOffsets[j],\n targetEnd: arcOffsets[j] + jSweep,\n })\n arcOffsets[i] += iSweep\n arcOffsets[j] += jSweep\n }\n }\n\n return chords\n}\n\nexport function chordPath(\n chord: ChordSpan,\n centerX: number,\n centerY: number,\n innerR: number\n): string {\n const s0 = polarToCartesian(centerX, centerY, innerR, chord.sourceStart)\n const s1 = polarToCartesian(centerX, centerY, innerR, chord.sourceEnd)\n const t0 = polarToCartesian(centerX, centerY, innerR, chord.targetStart)\n const t1 = polarToCartesian(centerX, centerY, innerR, chord.targetEnd)\n\n return [\n `M ${s0.x} ${s0.y}`,\n `A ${innerR} ${innerR} 0 0 1 ${s1.x} ${s1.y}`,\n `Q ${centerX} ${centerY} ${t0.x} ${t0.y}`,\n `A ${innerR} ${innerR} 0 0 1 ${t1.x} ${t1.y}`,\n `Q ${centerX} ${centerY} ${s0.x} ${s0.y}`,\n 'Z',\n ].join(' ')\n}\n","// chord-diagram — chord diagram showing relationships between entities\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport {\n arcPath,\n CHORD_PALETTE,\n chordPath,\n computeArcs,\n computeChords,\n polarToCartesian,\n} from './chord-math'\n\nexport type ChordDiagramProps = {\n matrix: number[][]\n labels: string[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const ChordDiagram = forwardRef<HTMLDivElement, ChordDiagramProps>(\n function ChordDiagram(\n { matrix, labels, width = 300, height = 300, glass, className },\n ref\n ) {\n const n = labels.length\n const centerX = width / 2\n const centerY = height / 2\n const outerR = Math.min(width, height) / 2 - 30\n const innerR = outerR - 12\n const gap = 0.04\n\n // compute totals per entity\n const totals = matrix.map((row) => row.reduce((sum, v) => sum + v, 0))\n const grandTotal = totals.reduce((sum, v) => sum + v, 0)\n\n if (grandTotal === 0 || n === 0) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border-border border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"chord-diagram\"\n >\n <svg\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n />\n </div>\n )\n }\n\n const arcs = computeArcs(totals, grandTotal, n, gap)\n const chords = computeChords(matrix, arcs, grandTotal, n, gap)\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border-border border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"chord-diagram\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {arcs.map((arc, i) => (\n <path\n key={`arc-${labels[i]}`}\n d={arcPath(centerX, centerY, outerR, arc.start, arc.end)}\n data-arc={labels[i]}\n fill=\"none\"\n stroke={CHORD_PALETTE[i % CHORD_PALETTE.length]}\n strokeWidth={12}\n strokeLinecap=\"round\"\n />\n ))}\n\n {chords.map((chord, i) => (\n <path\n key={`chord-${i}`}\n d={chordPath(chord, centerX, centerY, innerR)}\n fill={CHORD_PALETTE[chord.source % CHORD_PALETTE.length]}\n fillOpacity={0.25}\n stroke={CHORD_PALETTE[chord.source % CHORD_PALETTE.length]}\n strokeOpacity={0.4}\n strokeWidth={0.5}\n />\n ))}\n\n {arcs.map((arc, i) => {\n const midAngle = (arc.start + arc.end) / 2\n const labelR = outerR + 16\n const pos = polarToCartesian(centerX, centerY, labelR, midAngle)\n const anchor =\n midAngle > Math.PI / 2 && midAngle < (3 * Math.PI) / 2\n ? 'end'\n : 'start'\n\n return (\n <text\n key={`label-${labels[i]}`}\n x={pos.x}\n y={pos.y}\n textAnchor={anchor}\n dominantBaseline=\"middle\"\n fill=\"var(--gds-fg-muted, #9ca3af)\"\n fontSize={10}\n >\n {labels[i]}\n </text>\n )\n })}\n </svg>\n </div>\n )\n }\n)\n","// choropleth-map — geographic heatmap (Japan regions)\nimport { useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ChoroplethData = { id: string; label?: string; value: number }\ntype ChoroplethMapProps = {\n className?: string\n colorScale?: string[]\n data: ChoroplethData[]\n height?: number\n}\n\nconst REGIONS: { id: string; label: string; path: string }[] = [\n {\n id: 'hokkaido',\n label: 'Hokkaido',\n path: 'M 320,20 L 380,15 L 420,35 L 430,70 L 410,95 L 370,100 L 330,85 L 310,55 Z',\n },\n {\n id: 'tohoku',\n label: 'Tohoku',\n path: 'M 330,110 L 370,105 L 395,120 L 400,160 L 390,200 L 355,210 L 325,195 L 315,155 Z',\n },\n {\n id: 'kanto',\n label: 'Kanto',\n path: 'M 310,215 L 365,212 L 390,230 L 385,265 L 355,280 L 315,275 L 300,250 Z',\n },\n {\n id: 'chubu',\n label: 'Chubu',\n path: 'M 255,210 L 305,205 L 310,245 L 300,280 L 270,295 L 240,280 L 235,245 Z',\n },\n {\n id: 'kansai',\n label: 'Kansai',\n path: 'M 220,280 L 268,275 L 285,300 L 275,335 L 245,345 L 215,330 L 205,305 Z',\n },\n {\n id: 'chugoku',\n label: 'Chugoku',\n path: 'M 140,275 L 210,270 L 218,300 L 210,335 L 175,345 L 140,330 L 130,305 Z',\n },\n {\n id: 'shikoku',\n label: 'Shikoku',\n path: 'M 170,350 L 230,348 L 250,365 L 245,395 L 215,405 L 180,395 L 165,375 Z',\n },\n {\n id: 'kyushu',\n label: 'Kyushu',\n path: 'M 70,310 L 130,305 L 145,330 L 140,375 L 120,400 L 85,395 L 65,365 Z',\n },\n]\n\nexport function ChoroplethMap({\n className,\n colorScale = ['var(--gds-palette-0)'],\n data,\n height = 400,\n}: ChoroplethMapProps) {\n const [hoveredId, setHoveredId] = useState<null | string>(null)\n const dataMap = new Map(data.map((d) => [d.id, d]))\n const values = data.map((d) => d.value)\n const minVal = Math.min(...values)\n const maxVal = Math.max(...values)\n const valRange = maxVal - minVal || 1\n const color = colorScale[0] ?? 'var(--gds-palette-0)'\n\n const getColor = (id: string) => {\n const d = dataMap.get(id)\n if (d === undefined) return 'var(--gds-border)'\n const t = (d.value - minVal) / valRange\n const opacity = 0.15 + t * 0.85\n return `color-mix(in srgb, ${color} ${Math.round(opacity * 100)}%, transparent)`\n }\n\n return (\n <div\n className={cx('relative select-none', className)}\n data-component=\"choropleth-map\"\n >\n <svg className=\"w-full\" viewBox={`0 0 500 ${height}`}>\n {REGIONS.map((r) => (\n <path\n d={r.path}\n fill={getColor(r.id)}\n key={r.id}\n onMouseEnter={() => setHoveredId(r.id)}\n onMouseLeave={() => setHoveredId(null)}\n stroke=\"var(--gds-border)\"\n strokeWidth={hoveredId === r.id ? 2 : 1}\n style={{ transition: 'fill 0.2s' }}\n />\n ))}\n {REGIONS.map((r) => {\n const nums = r.path.match(/[\\d.]+/g)?.map(Number) ?? []\n let cxVal = 0,\n cyVal = 0,\n count = 0\n for (let i = 0; i < nums.length; i += 2) {\n if (nums[i] !== undefined && nums[i + 1] !== undefined) {\n cxVal += nums[i]\n cyVal += nums[i + 1]\n count++\n }\n }\n if (count > 0) {\n cxVal /= count\n cyVal /= count\n }\n return (\n <text\n fill=\"var(--gds-fg-muted)\"\n fontSize={9}\n key={r.id}\n pointerEvents=\"none\"\n textAnchor=\"middle\"\n x={cxVal}\n y={cyVal + 3}\n >\n {r.label}\n </text>\n )\n })}\n </svg>\n {hoveredId !== null &&\n (() => {\n const region = REGIONS.find((r) => r.id === hoveredId)\n const d = dataMap.get(hoveredId)\n const name = d?.label ?? region?.label ?? ''\n const val = d !== undefined ? `: ${d.value}` : ''\n return (\n <div className=\"bg-surface text-fg ring-border pointer-events-none absolute top-2 left-1/2 -translate-x-1/2 rounded px-2 py-1 text-xs shadow-sm ring-1\">\n {name}\n {val}\n </div>\n )\n })()}\n </div>\n )\n}\n\nexport type { ChoroplethData, ChoroplethMapProps }\n","import { forwardRef } from 'react'\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n Legend,\n Line,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type ComboChartProps = {\n data: Record<string, unknown>[]\n barKey: string\n lineKey: string\n xKey?: string\n barColor?: string\n lineColor?: string\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const ComboChart = forwardRef<HTMLDivElement, ComboChartProps>(\n function ComboChart(\n {\n data,\n barKey,\n lineKey,\n xKey = 'name',\n barColor = 'var(--gds-accent)',\n lineColor = 'var(--gds-success)',\n height = 300,\n glass,\n className,\n ...props\n },\n ref\n ) {\n return (\n <div\n className={cx(\n 'gds-radius-popover w-full border border-white/[0.06]',\n glassClass(glass),\n className\n )}\n data-component=\"combo-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <ComposedChart data={data}>\n <CartesianGrid\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeDasharray=\"3 3\"\n />\n <XAxis\n dataKey={xKey}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n <Legend />\n <Bar dataKey={barKey} fill={barColor} radius={[4, 4, 0, 0]} />\n <Line\n dataKey={lineKey}\n dot={false}\n stroke={lineColor}\n strokeWidth={2}\n type=\"monotone\"\n />\n </ComposedChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","// donut-gauge — multi-ring concentric gauge for KPI comparison\nimport { cx } from '../utils/cx'\n\ntype DonutRing = {\n color?: string\n label: string\n max: number\n value: number\n}\n\ntype DonutGaugeProps = {\n className?: string\n rings: DonutRing[]\n size?: number\n}\n\nconst defaultColors = [\n 'var(--gds-accent)',\n 'var(--gds-success)',\n 'var(--gds-warning)',\n 'var(--gds-danger)',\n]\n\nexport function DonutGauge({ className, rings, size = 160 }: DonutGaugeProps) {\n const center = size / 2\n const ringWidth = 12\n const ringGap = 6\n\n return (\n <div className={cx('select-none', className)} data-component=\"donut-gauge\">\n <svg height={size} viewBox={`0 0 ${size} ${size}`} width={size}>\n {rings.map((ring, i) => {\n const r = center - ringWidth / 2 - i * (ringWidth + ringGap)\n if (r <= 0) return null\n const circumference = 2 * Math.PI * r\n const ratio = ring.max > 0 ? Math.min(ring.value / ring.max, 1) : 0\n const dashLen = circumference * ratio\n const color = ring.color ?? defaultColors[i % defaultColors.length]\n return (\n <g key={i}>\n <circle\n className=\"text-fg-muted/10\"\n cx={center}\n cy={center}\n fill=\"none\"\n r={r}\n stroke=\"currentColor\"\n strokeWidth={ringWidth}\n />\n <circle\n className=\"transition-all duration-500\"\n cx={center}\n cy={center}\n fill=\"none\"\n r={r}\n stroke={color}\n strokeDasharray={`${dashLen} ${circumference - dashLen}`}\n strokeDashoffset={circumference / 4}\n strokeLinecap=\"round\"\n strokeWidth={ringWidth}\n />\n </g>\n )\n })}\n </svg>\n <div className=\"mt-2 flex flex-wrap gap-3\">\n {rings.map((ring, i) => (\n <div\n className=\"text-fg-muted flex items-center gap-1.5 text-xs\"\n key={i}\n >\n <div\n className=\"h-2 w-2 rounded-full\"\n style={{\n backgroundColor:\n ring.color ?? defaultColors[i % defaultColors.length],\n }}\n />\n <span>{ring.label}</span>\n <span className=\"text-fg font-medium tabular-nums\">\n {ring.value}/{ring.max}\n </span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport type { DonutGaugeProps, DonutRing }\n","// flame-chart — hierarchical flame graph for performance profiling\nimport { useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype FlameNode = {\n children?: FlameNode[]\n name: string\n value: number\n}\n\ntype FlameChartProps = {\n className?: string\n data: FlameNode\n height?: number\n}\n\nconst PALETTE = [\n 'var(--gds-palette-0)',\n 'var(--gds-palette-1)',\n 'var(--gds-palette-2)',\n 'var(--gds-palette-3)',\n 'var(--gds-palette-4)',\n 'var(--gds-palette-5)',\n 'var(--gds-palette-6)',\n 'var(--gds-palette-7)',\n]\n\ntype FlatBar = {\n color: string\n depth: number\n name: string\n width: number\n x: number\n}\n\nfunction flattenNode(\n node: FlameNode,\n depth: number,\n x: number,\n totalWidth: number,\n parentValue: number,\n colorIndex: number\n): FlatBar[] {\n const width = parentValue > 0 ? (node.value / parentValue) * totalWidth : 0\n const bars: FlatBar[] = [\n {\n color: PALETTE[colorIndex % PALETTE.length],\n depth,\n name: node.name,\n width,\n x,\n },\n ]\n\n if (node.children !== undefined) {\n let childX = x\n node.children.forEach((child, i) => {\n bars.push(\n ...flattenNode(\n child,\n depth + 1,\n childX,\n totalWidth,\n node.value,\n colorIndex + i + 1\n )\n )\n childX += node.value > 0 ? (child.value / node.value) * totalWidth : 0\n })\n }\n return bars\n}\n\nconst BAR_HEIGHT = 24\nconst CHART_WIDTH = 600\n\nexport function FlameChart({ className, data, height = 200 }: FlameChartProps) {\n const bars = useMemo(\n () => flattenNode(data, 0, 0, CHART_WIDTH, data.value, 0),\n [data]\n )\n const maxDepth = bars.reduce((max, b) => Math.max(max, b.depth), 0)\n const svgHeight = Math.max(height, (maxDepth + 1) * BAR_HEIGHT)\n\n return (\n <div\n className={cx('inline-block overflow-x-auto', className)}\n data-component=\"flame-chart\"\n >\n <svg\n height={svgHeight}\n viewBox={`0 0 ${CHART_WIDTH} ${svgHeight}`}\n width={CHART_WIDTH}\n >\n {bars.map((bar, i) => (\n <g key={i}>\n <rect\n fill={bar.color}\n fillOpacity={0.8}\n height={BAR_HEIGHT - 2}\n rx={2}\n width={Math.max(bar.width - 1, 0)}\n x={bar.x}\n y={bar.depth * BAR_HEIGHT}\n />\n {bar.width > 40 && (\n <text\n dominantBaseline=\"middle\"\n fill=\"var(--gds-fg)\"\n fontSize={10}\n x={bar.x + 4}\n y={bar.depth * BAR_HEIGHT + BAR_HEIGHT / 2 - 1}\n >\n {bar.name}\n </text>\n )}\n </g>\n ))}\n </svg>\n </div>\n )\n}\n\nexport type { FlameChartProps, FlameNode }\n","// flow-chart — simple left-to-right flow diagram using pure SVG\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype FlowNode = {\n id: string\n label: string\n type?: 'start' | 'end' | 'process' | 'decision'\n}\n\ntype FlowEdge = {\n from: string\n to: string\n label?: string\n}\n\nexport type FlowChartProps = {\n nodes: FlowNode[]\n edges: FlowEdge[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nconst NODE_COLORS: Record<string, string> = {\n start: 'var(--gds-palette-3, #10b981)',\n end: 'var(--gds-palette-5, #ef4444)',\n process: 'var(--gds-palette-0, #6366f1)',\n decision: 'var(--gds-palette-4, #f59e0b)',\n}\n\nconst NODE_W = 100\nconst NODE_H = 40\n\nfunction renderNode(node: FlowNode, x: number, y: number) {\n const color = NODE_COLORS[node.type ?? 'process']\n const nodeType = node.type ?? 'process'\n\n if (nodeType === 'decision') {\n const half = NODE_H * 0.7\n return (\n <g key={node.id} data-node={node.id}>\n <polygon\n points={`${x},${y - half} ${x + half},${y} ${x},${y + half} ${x - half},${y}`}\n fill={color}\n fillOpacity={0.15}\n stroke={color}\n strokeWidth={1.5}\n />\n <text\n x={x}\n y={y + 4}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg, #e5e7eb)\"\n fontSize={10}\n >\n {node.label}\n </text>\n </g>\n )\n }\n\n const rx = nodeType === 'start' || nodeType === 'end' ? NODE_H / 2 : 4\n return (\n <g key={node.id} data-node={node.id}>\n <rect\n x={x - NODE_W / 2}\n y={y - NODE_H / 2}\n width={NODE_W}\n height={NODE_H}\n rx={rx}\n fill={color}\n fillOpacity={0.15}\n stroke={color}\n strokeWidth={1.5}\n />\n <text\n x={x}\n y={y + 4}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg, #e5e7eb)\"\n fontSize={10}\n >\n {node.label}\n </text>\n </g>\n )\n}\n\nexport const FlowChart = forwardRef<HTMLDivElement, FlowChartProps>(\n function FlowChart(\n { nodes, edges, width = 600, height = 200, glass, className },\n ref\n ) {\n const spacing = nodes.length > 1 ? (width - 80) / (nodes.length - 1) : 0\n const startX = nodes.length === 1 ? width / 2 : 40\n const centerY = height / 2\n\n const posMap = new Map(\n nodes.map((n, i) => [n.id, { x: startX + i * spacing, y: centerY }])\n )\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border-border border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"flow-chart\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n <defs>\n <marker\n id=\"gds-arrow\"\n markerWidth=\"8\"\n markerHeight=\"6\"\n refX=\"8\"\n refY=\"3\"\n orient=\"auto\"\n >\n <path d=\"M0,0 L8,3 L0,6\" fill=\"var(--gds-fg-muted, #6b7280)\" />\n </marker>\n </defs>\n\n {/* edges */}\n {edges.map((edge, i) => {\n const from = posMap.get(edge.from)\n const to = posMap.get(edge.to)\n if (from === undefined || to === undefined) return null\n const x1 = from.x + NODE_W / 2\n const x2 = to.x - NODE_W / 2\n const midX = (x1 + x2) / 2\n const midY = (from.y + to.y) / 2\n return (\n <g key={i}>\n <line\n x1={x1}\n y1={from.y}\n x2={x2}\n y2={to.y}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n strokeWidth={1.5}\n markerEnd=\"url(#gds-arrow)\"\n />\n {edge.label !== undefined && (\n <text\n x={midX}\n y={midY - 8}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg-muted, #9ca3af)\"\n fontSize={9}\n >\n {edge.label}\n </text>\n )}\n </g>\n )\n })}\n\n {/* nodes */}\n {nodes.map((node, _i) => {\n const pos = posMap.get(node.id)\n if (pos === undefined) return null\n return renderNode(node, pos.x, pos.y)\n })}\n </svg>\n </div>\n )\n }\n)\n\nexport type { FlowEdge, FlowNode }\n","import { forwardRef } from 'react'\nimport {\n Cell,\n Funnel,\n FunnelChart as RFunnelChart,\n ResponsiveContainer,\n Tooltip,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #3b82f6)',\n]\n\nexport type FunnelChartProps = {\n data: ChartData[]\n dataKey: string\n className?: string\n height?: number\n colors?: string[]\n glass?: boolean\n}\n\nexport const FunnelChart = forwardRef<HTMLDivElement, FunnelChartProps>(\n function FunnelChart(\n {\n data,\n dataKey,\n className,\n height = 300,\n colors = PALETTE,\n glass,\n ...props\n },\n ref\n ) {\n return (\n <div\n className={cx(\n 'w-full',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"funnel-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RFunnelChart>\n <Tooltip />\n <Funnel dataKey={dataKey} data={data} isAnimationActive={false}>\n {data.map((_, i) => (\n <Cell fill={colors[i % colors.length]} key={i} />\n ))}\n </Funnel>\n </RFunnelChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\nimport { Cell, Pie, PieChart, ResponsiveContainer } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\nexport type GaugeProps = {\n value: number\n max?: number\n className?: string\n height?: number\n color?: string\n trackColor?: string\n label?: string\n glass?: boolean\n}\n\nexport const Gauge = forwardRef<HTMLDivElement, GaugeProps>(function Gauge(\n {\n value,\n max = 100,\n className,\n height = 200,\n color = 'var(--gds-accent)',\n trackColor = 'var(--gds-border, #e5e7eb)',\n label,\n glass,\n ...props\n },\n ref\n) {\n const clamped = Math.min(Math.max(value, 0), max)\n const remaining = max - clamped\n const data = [\n { name: 'value', value: clamped },\n { name: 'remaining', value: remaining },\n ]\n\n return (\n <div\n className={cx(\n 'relative w-full',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"gauge\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <PieChart>\n <Pie\n cx=\"50%\"\n cy=\"70%\"\n data={data}\n dataKey=\"value\"\n endAngle={0}\n innerRadius=\"60%\"\n outerRadius=\"80%\"\n startAngle={180}\n stroke=\"none\"\n >\n <Cell fill={color} />\n <Cell fill={trackColor} />\n </Pie>\n </PieChart>\n </ResponsiveContainer>\n <div\n className=\"absolute inset-0 flex flex-col items-center justify-center\"\n style={{ top: '20%' }}\n >\n <span className=\"text-2xl font-semibold\" style={{ color }}>\n {clamped}\n </span>\n {label !== undefined && (\n <span className=\"gds-text-body text-[var(--gds-fg-muted,#6b7280)]\">\n {label}\n </span>\n )}\n </div>\n </div>\n )\n})\n","import { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type HeatmapChartProps = {\n data: number[][]\n xLabels?: string[]\n yLabels?: string[]\n colorScale?: { min: string; max: string }\n className?: string\n cellSize?: number\n glass?: boolean\n}\n\nfunction interpolateColor(min: string, max: string, t: number): string {\n const parse = (hex: string) => {\n const h = hex.replace('#', '')\n return [\n parseInt(h.slice(0, 2), 16),\n parseInt(h.slice(2, 4), 16),\n parseInt(h.slice(4, 6), 16),\n ]\n }\n const [r1, g1, b1] = parse(min)\n const [r2, g2, b2] = parse(max)\n const r = Math.round(r1 + (r2 - r1) * t)\n const g = Math.round(g1 + (g2 - g1) * t)\n const b = Math.round(b1 + (b2 - b1) * t)\n return `rgb(${r},${g},${b})`\n}\n\nexport const HeatmapChart = forwardRef<HTMLDivElement, HeatmapChartProps>(\n function HeatmapChart(\n {\n data,\n xLabels,\n yLabels,\n colorScale = { min: '#1e293b', max: '#6366f1' },\n className,\n cellSize = 32,\n glass,\n ...props\n },\n ref\n ) {\n const { dataMin, dataMax } = useMemo(() => {\n const flat = data.flat()\n return { dataMin: Math.min(...flat), dataMax: Math.max(...flat) }\n }, [data])\n\n const normalize = (v: number) => {\n if (dataMax === dataMin) return 0.5\n return (v - dataMin) / (dataMax - dataMin)\n }\n\n return (\n <div\n className={cx(\n 'inline-block',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"heatmap-chart\"\n ref={ref}\n {...props}\n >\n <div className=\"flex flex-col gap-px\">\n {xLabels !== undefined && (\n <div\n className=\"flex gap-px\"\n style={{ paddingLeft: yLabels !== undefined ? cellSize + 4 : 0 }}\n >\n {xLabels.map((l) => (\n <div\n className=\"gds-text-caption flex items-center justify-center text-[var(--gds-fg-muted,#6b7280)]\"\n key={l}\n style={{ width: cellSize, height: 16 }}\n >\n {l}\n </div>\n ))}\n </div>\n )}\n {data.map((row, ri) => (\n <div className=\"flex items-center gap-px\" key={ri}>\n {yLabels !== undefined && yLabels[ri] !== undefined && (\n <div\n className=\"gds-text-caption flex-shrink-0 pr-1 text-right text-[var(--gds-fg-muted,#6b7280)]\"\n style={{ width: cellSize }}\n >\n {yLabels[ri]}\n </div>\n )}\n {row.map((val, ci) => (\n <div\n className=\"rounded-sm\"\n key={ci}\n style={{\n width: cellSize,\n height: cellSize,\n backgroundColor: interpolateColor(\n colorScale.min,\n colorScale.max,\n normalize(val)\n ),\n }}\n title={String(val)}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n }\n)\n","// histogram — frequency distribution of continuous data\nimport { forwardRef } from 'react'\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\nexport type HistogramProps = {\n data: number[]\n bins?: number\n height?: number\n color?: string\n glass?: boolean\n className?: string\n}\n\nfunction computeBins(data: number[], binCount: number) {\n if (data.length === 0) return []\n const min = Math.min(...data)\n const max = Math.max(...data)\n const range = max - min\n const binWidth = range === 0 ? 1 : range / binCount\n\n return Array.from({ length: binCount }, (_, i) => {\n const lo = min + i * binWidth\n const hi = lo + binWidth\n const count = data.filter((v) =>\n i === binCount - 1 ? v >= lo && v <= hi : v >= lo && v < hi\n ).length\n return { range: `${lo.toFixed(1)}–${hi.toFixed(1)}`, count }\n })\n}\n\nexport const Histogram = forwardRef<HTMLDivElement, HistogramProps>(\n function Histogram(\n {\n data,\n bins = 10,\n height = 300,\n color = 'var(--gds-accent)',\n glass,\n className,\n ...props\n },\n ref\n ) {\n const binData = computeBins(data, bins)\n\n return (\n <div\n className={cx(\n 'gds-radius-popover border-border w-full border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"histogram\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <BarChart data={binData}>\n <CartesianGrid\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeDasharray=\"3 3\"\n />\n <XAxis\n dataKey=\"range\"\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 10 }}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n <Bar dataKey=\"count\" fill={color} radius={[4, 4, 0, 0]} />\n </BarChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n\nexport { computeBins }\n","import { forwardRef } from 'react'\nimport {\n CartesianGrid,\n Line,\n LineChart as RLineChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type LineChartProps = {\n data: ChartData[]\n dataKey: string\n xKey?: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nexport const LineChart = forwardRef<HTMLDivElement, LineChartProps>(\n function LineChart(\n {\n data,\n dataKey,\n xKey = 'name',\n className,\n height = 300,\n color = 'var(--gds-accent)',\n glass,\n ...props\n },\n ref\n ) {\n return (\n <div\n className={cx(\n 'w-full',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"line-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RLineChart data={data}>\n <CartesianGrid\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeDasharray=\"3 3\"\n />\n <XAxis\n dataKey={xKey}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n <Line\n dataKey={dataKey}\n dot={false}\n stroke={color}\n strokeWidth={2}\n type=\"monotone\"\n />\n </RLineChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","// network-graph — simple circle-layout network graph using SVG\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype NetworkNode = {\n id: string\n label: string\n group?: number\n}\n\ntype NetworkEdge = {\n source: string\n target: string\n}\n\nexport type NetworkGraphProps = {\n nodes: NetworkNode[]\n edges: NetworkEdge[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n 'var(--gds-palette-5, #ef4444)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #84cc16)',\n]\n\nfunction computePositions(\n count: number,\n cx: number,\n cy: number,\n radius: number\n) {\n return Array.from({ length: count }, (_, i) => {\n const angle = (2 * Math.PI * i) / count - Math.PI / 2\n return {\n x: cx + radius * Math.cos(angle),\n y: cy + radius * Math.sin(angle),\n }\n })\n}\n\nexport const NetworkGraph = forwardRef<HTMLDivElement, NetworkGraphProps>(\n function NetworkGraph(\n { nodes, edges, width = 400, height = 300, glass, className },\n ref\n ) {\n const centerX = width / 2\n const centerY = height / 2\n const layoutRadius = Math.min(centerX, centerY) * 0.65\n const positions = computePositions(\n nodes.length,\n centerX,\n centerY,\n layoutRadius\n )\n\n const nodeMap = new Map(nodes.map((n, i) => [n.id, i]))\n const nodeRadius = Math.max(\n 8,\n Math.min(16, 120 / Math.max(nodes.length, 1))\n )\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border-border border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"network-graph\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {edges.map((edge, i) => {\n const si = nodeMap.get(edge.source)\n const ti = nodeMap.get(edge.target)\n if (si === undefined || ti === undefined) return null\n const s = positions[si]\n const t = positions[ti]\n return (\n <line\n key={i}\n x1={s.x}\n y1={s.y}\n x2={t.x}\n y2={t.y}\n stroke=\"var(--gds-border, #374151)\"\n strokeWidth={1.5}\n strokeOpacity={0.5}\n />\n )\n })}\n {nodes.map((node, i) => {\n const pos = positions[i]\n const color = PALETTE[(node.group ?? i) % PALETTE.length]\n return (\n <g key={node.id}>\n <circle\n cx={pos.x}\n cy={pos.y}\n r={nodeRadius}\n fill={color}\n fillOpacity={0.8}\n />\n <text\n x={pos.x}\n y={pos.y + nodeRadius + 14}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg-muted, #9ca3af)\"\n fontSize={10}\n >\n {node.label}\n </text>\n </g>\n )\n })}\n </svg>\n </div>\n )\n }\n)\n\nexport type { NetworkEdge, NetworkNode }\n","import { forwardRef, useMemo } from 'react'\nimport {\n Area,\n AreaChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype OrderEntry = {\n price: number\n depth: number\n}\n\nexport type OrderBookChartProps = {\n bids: OrderEntry[]\n asks: OrderEntry[]\n height?: number\n bidColor?: string\n askColor?: string\n glass?: boolean\n className?: string\n}\n\nexport const OrderBookChart = forwardRef<HTMLDivElement, OrderBookChartProps>(\n function OrderBookChart(\n {\n bids,\n asks,\n height = 300,\n bidColor = 'var(--gds-success, #22c55e)',\n askColor = 'var(--gds-danger, #ef4444)',\n glass,\n className,\n ...props\n },\n ref\n ) {\n const combined = useMemo(() => {\n const bidPoints = bids.map((b) => ({\n price: b.price,\n bidDepth: b.depth,\n askDepth: undefined,\n }))\n const askPoints = asks.map((a) => ({\n price: a.price,\n bidDepth: undefined,\n askDepth: a.depth,\n }))\n return [...bidPoints, ...askPoints].sort((a, b) => a.price - b.price)\n }, [bids, asks])\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border-border w-full border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"order-book-chart\"\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <AreaChart data={combined}>\n <CartesianGrid\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeDasharray=\"3 3\"\n />\n <XAxis\n dataKey=\"price\"\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n domain={['dataMin', 'dataMax']}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n <Area\n dataKey=\"bidDepth\"\n fill={bidColor}\n fillOpacity={0.3}\n stroke={bidColor}\n strokeWidth={2}\n type=\"stepAfter\"\n connectNulls={false}\n />\n <Area\n dataKey=\"askDepth\"\n fill={askColor}\n fillOpacity={0.3}\n stroke={askColor}\n strokeWidth={2}\n type=\"stepBefore\"\n connectNulls={false}\n />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\nimport {\n Cell,\n Pie,\n PieChart as RPieChart,\n ResponsiveContainer,\n Tooltip,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #3b82f6)',\n]\n\nexport type PieChartProps = {\n data: ChartData[]\n dataKey: string\n nameKey?: string\n className?: string\n height?: number\n colors?: string[]\n innerRadius?: number\n glass?: boolean\n}\n\nexport const PieChart = forwardRef<HTMLDivElement, PieChartProps>(\n function PieChart(\n {\n data,\n dataKey,\n nameKey = 'name',\n className,\n height = 300,\n colors = PALETTE,\n innerRadius = 0,\n glass,\n ...props\n },\n ref\n ) {\n return (\n <div\n className={cx(\n 'w-full',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"pie-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RPieChart>\n <Tooltip />\n <Pie\n cx=\"50%\"\n cy=\"50%\"\n data={data}\n dataKey={dataKey}\n innerRadius={innerRadius}\n nameKey={nameKey}\n >\n {data.map((_, i) => (\n <Cell fill={colors[i % colors.length]} key={i} />\n ))}\n </Pie>\n </RPieChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","// polar-area-chart — radial area chart with proportional sectors\nimport { useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PolarData = { color?: string; label: string; value: number }\ntype PolarAreaChartProps = {\n className?: string\n data: PolarData[]\n size?: number\n}\n\nconst PALETTE = [\n 'var(--gds-palette-0)',\n 'var(--gds-palette-1)',\n 'var(--gds-palette-2)',\n 'var(--gds-palette-3)',\n 'var(--gds-palette-4)',\n 'var(--gds-palette-5)',\n 'var(--gds-palette-6)',\n 'var(--gds-palette-7)',\n]\n\nfunction describeArc(\n cx: number,\n cy: number,\n radius: number,\n startAngle: number,\n endAngle: number\n): string {\n const start = {\n x: cx + radius * Math.cos(startAngle),\n y: cy + radius * Math.sin(startAngle),\n }\n const end = {\n x: cx + radius * Math.cos(endAngle),\n y: cy + radius * Math.sin(endAngle),\n }\n const largeArc = endAngle - startAngle > Math.PI ? 1 : 0\n return `M ${cx} ${cy} L ${start.x} ${start.y} A ${radius} ${radius} 0 ${largeArc} 1 ${end.x} ${end.y} Z`\n}\n\nexport function PolarAreaChart({\n className,\n data,\n size = 300,\n}: PolarAreaChartProps) {\n const center = size / 2\n const maxRadius = size * 0.4\n\n const segments = useMemo(() => {\n if (data.length === 0) return []\n const maxValue = Math.max(...data.map((d) => d.value))\n const angleStep = (2 * Math.PI) / data.length\n return data.map((d, i) => {\n const radius = maxValue > 0 ? (d.value / maxValue) * maxRadius : 0\n const startAngle = i * angleStep - Math.PI / 2\n const endAngle = (i + 1) * angleStep - Math.PI / 2\n const midAngle = (startAngle + endAngle) / 2\n const labelRadius = maxRadius + 16\n return {\n color: d.color ?? PALETTE[i % PALETTE.length],\n label: d.label,\n labelX: center + labelRadius * Math.cos(midAngle),\n labelY: center + labelRadius * Math.sin(midAngle),\n path: describeArc(center, center, radius, startAngle, endAngle),\n }\n })\n }, [data, center, maxRadius])\n\n return (\n <div\n className={cx('inline-block', className)}\n data-component=\"polar-area-chart\"\n >\n <svg height={size} viewBox={`0 0 ${size} ${size}`} width={size}>\n {segments.map((seg, i) => (\n <path\n d={seg.path}\n fill={seg.color}\n fillOpacity={0.7}\n key={i}\n stroke={seg.color}\n strokeWidth={1}\n />\n ))}\n {segments.map((seg, i) => (\n <text\n dominantBaseline=\"middle\"\n fill=\"var(--gds-fg-muted)\"\n fontSize={11}\n key={i}\n textAnchor=\"middle\"\n x={seg.labelX}\n y={seg.labelY}\n >\n {seg.label}\n </text>\n ))}\n </svg>\n </div>\n )\n}\n\nexport type { PolarAreaChartProps, PolarData }\n","import { forwardRef } from 'react'\nimport {\n PolarAngleAxis,\n PolarGrid,\n PolarRadiusAxis,\n Radar,\n RadarChart as RRadarChart,\n ResponsiveContainer,\n Tooltip,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type RadarChartProps = {\n data: ChartData[]\n dataKey: string\n angleKey?: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nexport const RadarChart = forwardRef<HTMLDivElement, RadarChartProps>(\n function RadarChart(\n {\n data,\n dataKey,\n angleKey = 'name',\n className,\n height = 300,\n color = 'var(--gds-accent)',\n glass,\n ...props\n },\n ref\n ) {\n return (\n <div\n className={cx(\n 'w-full',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"radar-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RRadarChart cx=\"50%\" cy=\"50%\" data={data} outerRadius=\"80%\">\n <PolarGrid stroke=\"var(--gds-border, #e5e7eb)\" />\n <PolarAngleAxis\n dataKey={angleKey}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <PolarRadiusAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 10 }}\n />\n <Tooltip />\n <Radar\n dataKey={dataKey}\n fill={color}\n fillOpacity={0.3}\n stroke={color}\n strokeWidth={2}\n />\n </RRadarChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\nimport {\n Legend,\n RadialBar,\n RadialBarChart as RRadialBarChart,\n ResponsiveContainer,\n Tooltip,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #3b82f6)',\n]\n\ntype RadialBarDatum = {\n name: string\n value: number\n fill?: string\n}\n\nexport type RadialBarChartProps = {\n data: RadialBarDatum[]\n height?: number\n innerRadius?: string\n glass?: boolean\n className?: string\n}\n\nexport const RadialBarChart = forwardRef<HTMLDivElement, RadialBarChartProps>(\n function RadialBarChart(\n { data, height = 300, innerRadius = '20%', glass, className, ...props },\n ref\n ) {\n // assign palette colors to items without explicit fill\n const coloredData = data.map((d, i) => ({\n ...d,\n fill: d.fill ?? PALETTE[i % PALETTE.length],\n }))\n\n return (\n <div\n className={cx(\n 'gds-radius-popover w-full border border-white/[0.06]',\n glassClass(glass),\n className\n )}\n data-component=\"radial-bar-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RRadialBarChart\n cx=\"50%\"\n cy=\"50%\"\n data={coloredData}\n innerRadius={innerRadius}\n outerRadius=\"90%\"\n >\n <RadialBar\n dataKey=\"value\"\n background={{ fill: 'rgba(255,255,255,0.05)' }}\n />\n <Tooltip />\n <Legend iconSize={8} />\n </RRadialBarChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","// realtime-chart — canvas-based streaming chart for high-frequency data\nimport { forwardRef, useCallback, useEffect, useRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype RealtimeChartProps = {\n className?: string\n color?: string\n data: number[]\n height?: number\n label?: string\n lineWidth?: number\n maxPoints?: number\n showGrid?: boolean\n}\n\nexport const RealtimeChart = forwardRef<HTMLCanvasElement, RealtimeChartProps>(\n function RealtimeChart(\n {\n className,\n color,\n data,\n height = 200,\n label,\n lineWidth = 2,\n maxPoints = 200,\n showGrid = true,\n },\n ref\n ) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rafRef = useRef<number>(0)\n const prevDataLenRef = useRef(0)\n\n const setRef = useCallback(\n (el: HTMLCanvasElement | null) => {\n ;(canvasRef as { current: HTMLCanvasElement | null }).current = el\n if (typeof ref === 'function') {\n ref(el)\n } else if (ref !== null && ref !== undefined) {\n ;(ref as { current: HTMLCanvasElement | null }).current = el\n }\n },\n [ref]\n )\n\n useEffect(() => {\n const canvas = canvasRef.current\n if (canvas === null) return\n\n const ctx = canvas.getContext('2d')\n if (ctx === null) return\n\n const draw = () => {\n const dpr = window.devicePixelRatio ?? 1\n const rect = canvas.getBoundingClientRect()\n const w = rect.width\n const h = rect.height\n\n if (canvas.width !== w * dpr || canvas.height !== h * dpr) {\n canvas.width = w * dpr\n canvas.height = h * dpr\n }\n\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0)\n ctx.clearRect(0, 0, w, h)\n\n const style = getComputedStyle(canvas)\n const lineColor =\n color ?? (style.getPropertyValue('--gds-accent').trim() || '#2563eb')\n const gridColor =\n style.getPropertyValue('--gds-border').trim() || '#e5e7eb'\n const fgColor = style.getPropertyValue('--gds-fg').trim() || '#1f2937'\n const fgMutedColor =\n style.getPropertyValue('--gds-fg-muted').trim() || '#6b7280'\n\n const points = data.slice(-maxPoints)\n if (points.length === 0) return\n\n const minVal = Math.min(...points)\n const maxVal = Math.max(...points)\n const range = maxVal - minVal || 1\n const pad = 8\n\n if (showGrid) {\n ctx.strokeStyle = gridColor\n ctx.lineWidth = 0.5\n for (let i = 0; i <= 4; i++) {\n const y = pad + ((h - pad * 2) * i) / 4\n ctx.beginPath()\n ctx.moveTo(0, y)\n ctx.lineTo(w, y)\n ctx.stroke()\n }\n }\n\n ctx.strokeStyle = lineColor\n ctx.lineWidth = lineWidth\n ctx.lineJoin = 'round'\n ctx.lineCap = 'round'\n ctx.beginPath()\n for (let i = 0; i < points.length; i++) {\n const x = (i / (maxPoints - 1)) * w\n const y = pad + (1 - (points[i] - minVal) / range) * (h - pad * 2)\n if (i === 0) {\n ctx.moveTo(x, y)\n } else {\n ctx.lineTo(x, y)\n }\n }\n ctx.stroke()\n\n const gradient = ctx.createLinearGradient(0, 0, 0, h)\n gradient.addColorStop(0, lineColor + '40')\n gradient.addColorStop(1, lineColor + '00')\n ctx.fillStyle = gradient\n ctx.beginPath()\n for (let i = 0; i < points.length; i++) {\n const x = (i / (maxPoints - 1)) * w\n const y = pad + (1 - (points[i] - minVal) / range) * (h - pad * 2)\n if (i === 0) {\n ctx.moveTo(x, y)\n } else {\n ctx.lineTo(x, y)\n }\n }\n if (points.length > 0) {\n const lastX = ((points.length - 1) / (maxPoints - 1)) * w\n ctx.lineTo(lastX, h)\n ctx.lineTo(0, h)\n }\n ctx.closePath()\n ctx.fill()\n\n const current = points[points.length - 1]\n ctx.font = 'bold 12px ui-monospace, monospace'\n ctx.fillStyle = fgColor\n ctx.textAlign = 'right'\n ctx.fillText(current.toFixed(1), w - 8, 16)\n\n if (label !== undefined) {\n ctx.font = '10px system-ui, sans-serif'\n ctx.fillStyle = fgMutedColor\n ctx.textAlign = 'left'\n ctx.fillText(label, 8, 14)\n }\n\n ctx.font = '9px ui-monospace, monospace'\n ctx.fillStyle = fgMutedColor\n ctx.textAlign = 'right'\n ctx.fillText(maxVal.toFixed(0), w - 8, pad + 10)\n ctx.fillText(minVal.toFixed(0), w - 8, h - pad)\n }\n\n if (data.length !== prevDataLenRef.current || data.length > 0) {\n prevDataLenRef.current = data.length\n rafRef.current = requestAnimationFrame(draw)\n }\n\n return () => {\n if (rafRef.current !== 0) {\n cancelAnimationFrame(rafRef.current)\n }\n }\n }, [data, maxPoints, color, lineWidth, showGrid, label, height])\n\n return (\n <canvas\n className={cx(\n 'border-border bg-surface block w-full rounded-lg border',\n className\n )}\n data-component=\"realtime-chart\"\n ref={setRef}\n style={{ height }}\n />\n )\n }\n)\n\nexport type { RealtimeChartProps }\n","import { forwardRef } from 'react'\nimport { ResponsiveContainer, Sankey, Tooltip } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype SankeyNode = {\n name: string\n [key: string]: unknown\n}\n\ntype SankeyLink = {\n source: number\n target: number\n value: number\n [key: string]: unknown\n}\n\nexport type SankeyChartProps = {\n nodes: SankeyNode[]\n links: SankeyLink[]\n className?: string\n height?: number\n nodePadding?: number\n nodeWidth?: number\n glass?: boolean\n}\n\nexport const SankeyChart = forwardRef<HTMLDivElement, SankeyChartProps>(\n function SankeyChart(\n {\n nodes,\n links,\n className,\n height = 300,\n nodePadding = 50,\n nodeWidth = 10,\n glass,\n ...props\n },\n ref\n ) {\n const data = { nodes, links }\n\n return (\n <div\n className={cx(\n 'w-full',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"sankey-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <Sankey data={data} nodePadding={nodePadding} nodeWidth={nodeWidth}>\n <Tooltip />\n </Sankey>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\nimport {\n CartesianGrid,\n ResponsiveContainer,\n Scatter,\n ScatterChart as RScatterChart,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type ScatterChartProps = {\n data: ChartData[]\n xKey: string\n yKey: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nexport const ScatterChart = forwardRef<HTMLDivElement, ScatterChartProps>(\n function ScatterChart(\n {\n data,\n xKey,\n yKey,\n className,\n height = 300,\n color = 'var(--gds-accent)',\n glass,\n ...props\n },\n ref\n ) {\n return (\n <div\n className={cx(\n 'w-full',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"scatter-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RScatterChart>\n <CartesianGrid\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeDasharray=\"3 3\"\n />\n <XAxis\n dataKey={xKey}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n />\n <YAxis\n dataKey={yKey}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n />\n <Tooltip />\n <Scatter data={data} fill={color} />\n </RScatterChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\nimport { Line, LineChart, ResponsiveContainer } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type SparklineProps = {\n data: ChartData[]\n dataKey: string\n className?: string\n height?: number\n width?: number | `${number}%`\n color?: string\n glass?: boolean\n}\n\nexport const Sparkline = forwardRef<HTMLDivElement, SparklineProps>(\n function Sparkline(\n {\n data,\n dataKey,\n className,\n height = 32,\n width = 120,\n color = 'var(--gds-accent)',\n glass,\n ...props\n },\n ref\n ) {\n return (\n <div\n className={cx(\n 'inline-block',\n glass && 'rounded bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"sparkline\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width={width}>\n <LineChart data={data}>\n <Line\n dataKey={dataKey}\n dot={false}\n stroke={color}\n strokeWidth={1.5}\n type=\"monotone\"\n />\n </LineChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","// stock-ticker — scrolling ticker tape with price and change indicators\nimport { cx } from '../utils/cx'\n\ntype TickerItem = { change: number; price: number; symbol: string }\ntype StockTickerProps = { className?: string; items: TickerItem[] }\n\nfunction TickerEntry({ item }: { item: TickerItem }) {\n const isPositive = item.change > 0\n const isNegative = item.change < 0\n const arrow = isPositive ? '\\u25B2' : isNegative ? '\\u25BC' : ''\n const sign = isPositive ? '+' : ''\n\n return (\n <span className=\"inline-flex shrink-0 items-center gap-1.5 px-3 text-sm select-none\">\n <span className=\"text-fg font-bold\">{item.symbol}</span>\n <span className=\"text-fg-muted tabular-nums\">\n {'\\u00A5'}\n {item.price.toLocaleString()}\n </span>\n <span\n className={cx(\n 'text-xs font-medium tabular-nums',\n isPositive && 'text-success',\n isNegative && 'text-danger',\n !isPositive && !isNegative && 'text-fg-muted'\n )}\n >\n {arrow}\n {sign}\n {item.change}%\n </span>\n </span>\n )\n}\n\nexport function StockTicker({ className, items }: StockTickerProps) {\n return (\n <div\n className={cx(\n 'border-border bg-bg-secondary flex overflow-hidden border-y select-none',\n className\n )}\n data-component=\"stock-ticker\"\n >\n <div className=\"animate-marquee flex shrink-0 items-center gap-2 py-1.5\">\n {items.map((item) => (\n <TickerEntry item={item} key={item.symbol} />\n ))}\n </div>\n <div\n aria-hidden\n className=\"animate-marquee flex shrink-0 items-center gap-2 py-1.5\"\n >\n {items.map((item) => (\n <TickerEntry item={item} key={item.symbol} />\n ))}\n </div>\n </div>\n )\n}\n\nexport type { StockTickerProps, TickerItem }\n","// stream-chart — stacked area chart with organic curves\nimport { forwardRef } from 'react'\nimport { Area, AreaChart, ResponsiveContainer, Tooltip, XAxis } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n 'var(--gds-palette-5, #ef4444)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #a855f7)',\n]\n\nexport type StreamChartProps = {\n data: Record<string, unknown>[]\n keys: string[]\n xKey?: string\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const StreamChart = forwardRef<HTMLDivElement, StreamChartProps>(\n function StreamChart(\n { data, keys, xKey = 'name', height = 300, glass, className, ...props },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border-border w-full border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"stream-chart\"\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <AreaChart data={data}>\n <XAxis\n dataKey={xKey}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n {keys.map((key, i) => (\n <Area\n key={key}\n dataKey={key}\n fill={PALETTE[i % PALETTE.length]}\n fillOpacity={0.6}\n stackId=\"1\"\n stroke={PALETTE[i % PALETTE.length]}\n strokeWidth={1.5}\n type=\"monotone\"\n />\n ))}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","// sunburst-math — pure math helpers for sunburst chart arc computation\n\nimport type { SunburstNode } from './sunburst-chart'\n\nexport type ArcSegment = {\n depth: number\n index: number\n startAngle: number\n endAngle: number\n}\n\n// compute total value for a node (sum of children or own value)\nexport function nodeTotal(node: SunburstNode): number {\n if (node.children !== undefined && node.children.length > 0) {\n return node.children.reduce((sum, c) => sum + nodeTotal(c), 0)\n }\n return node.value ?? 0\n}\n\n// describe an arc path\nexport function arcPath(\n cx: number,\n cy: number,\n innerR: number,\n outerR: number,\n startAngle: number,\n endAngle: number\n): string {\n // clamp to avoid full-circle issues\n const sweep = Math.min(endAngle - startAngle, 2 * Math.PI - 0.001)\n const largeArc = sweep > Math.PI ? 1 : 0\n\n const x1 = cx + outerR * Math.cos(startAngle)\n const y1 = cy + outerR * Math.sin(startAngle)\n const x2 = cx + outerR * Math.cos(startAngle + sweep)\n const y2 = cy + outerR * Math.sin(startAngle + sweep)\n const x3 = cx + innerR * Math.cos(startAngle + sweep)\n const y3 = cy + innerR * Math.sin(startAngle + sweep)\n const x4 = cx + innerR * Math.cos(startAngle)\n const y4 = cy + innerR * Math.sin(startAngle)\n\n return [\n `M ${x1} ${y1}`,\n `A ${outerR} ${outerR} 0 ${largeArc} 1 ${x2} ${y2}`,\n `L ${x3} ${y3}`,\n `A ${innerR} ${innerR} 0 ${largeArc} 0 ${x4} ${y4}`,\n 'Z',\n ].join(' ')\n}\n\n// collect all arcs recursively\nexport function collectArcs(\n node: SunburstNode,\n depth: number,\n startAngle: number,\n endAngle: number,\n parentIndex: number\n): ArcSegment[] {\n if (node.children === undefined || node.children.length === 0) return []\n\n const arcs: ArcSegment[] = []\n const total = nodeTotal(node)\n if (total === 0) return []\n\n let angle = startAngle\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i]\n const childTotal = nodeTotal(child)\n const sweep = (childTotal / total) * (endAngle - startAngle)\n const childEnd = angle + sweep\n\n arcs.push({\n depth,\n index: parentIndex * 10 + i,\n startAngle: angle,\n endAngle: childEnd,\n })\n arcs.push(\n ...collectArcs(child, depth + 1, angle, childEnd, parentIndex * 10 + i)\n )\n angle = childEnd\n }\n\n return arcs\n}\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { arcPath, collectArcs } from './sunburst-math'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #3b82f6)',\n]\n\nexport type SunburstNode = {\n name: string\n value?: number\n children?: SunburstNode[]\n}\n\nexport type SunburstChartProps = {\n data: SunburstNode\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const SunburstChart = forwardRef<HTMLDivElement, SunburstChartProps>(\n function SunburstChart(\n { data, width = 300, height = 300, glass, className, ...props },\n ref\n ) {\n const cxVal = width / 2\n const cyVal = height / 2\n const maxRadius = Math.min(cxVal, cyVal) - 10\n const arcs = collectArcs(data, 0, -Math.PI / 2, 1.5 * Math.PI, 0)\n\n // find max depth for ring sizing\n const maxDepth = arcs.reduce((m, a) => Math.max(m, a.depth), 0)\n const centerR = maxRadius * 0.25\n const ringWidth = (maxRadius - centerR) / (maxDepth + 1)\n\n return (\n <div\n className={cx(\n 'gds-radius-popover inline-flex border border-white/[0.06]',\n glassClass(glass),\n className\n )}\n data-component=\"sunburst-chart\"\n ref={ref}\n {...props}\n >\n <svg height={height} width={width} viewBox={`0 0 ${width} ${height}`}>\n {arcs.map((arc, i) => {\n const innerR = centerR + arc.depth * ringWidth\n const outerR = innerR + ringWidth - 1\n const color = PALETTE[(arc.index + arc.depth) % PALETTE.length]\n return (\n <path\n key={i}\n d={arcPath(\n cxVal,\n cyVal,\n innerR,\n outerR,\n arc.startAngle,\n arc.endAngle\n )}\n fill={color}\n opacity={1 - arc.depth * 0.15}\n stroke=\"var(--gds-bg, #000)\"\n strokeWidth={1}\n data-arc\n />\n )\n })}\n <text\n x={cxVal}\n y={cyVal}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill=\"var(--gds-fg, #fff)\"\n fontSize={12}\n fontWeight={600}\n data-center-label\n >\n {data.name}\n </text>\n </svg>\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n]\n\nexport type TimelineEvent = {\n date: string | Date\n label: string\n color?: string\n}\n\nexport type TimelineChartProps = {\n events: TimelineEvent[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const TimelineChart = forwardRef<HTMLDivElement, TimelineChartProps>(\n function TimelineChart(\n { events, width = 600, height = 120, glass, className, ...props },\n ref\n ) {\n if (events.length === 0) {\n return (\n <div\n className={cx(\n 'gds-radius-popover inline-flex border border-white/[0.06]',\n glassClass(glass),\n className\n )}\n data-component=\"timeline-chart\"\n ref={ref}\n {...props}\n >\n <svg height={height} width={width} />\n </div>\n )\n }\n\n const padX = 40\n const lineY = height / 2\n const timestamps = events.map((e) => new Date(e.date).getTime())\n const minT = Math.min(...timestamps)\n const maxT = Math.max(...timestamps)\n const range = maxT - minT\n\n function xPos(t: number): number {\n if (range === 0) return width / 2\n return padX + ((t - minT) / range) * (width - padX * 2)\n }\n\n return (\n <div\n className={cx(\n 'gds-radius-popover inline-flex border border-white/[0.06]',\n glassClass(glass),\n className\n )}\n data-component=\"timeline-chart\"\n ref={ref}\n {...props}\n >\n <svg height={height} width={width} viewBox={`0 0 ${width} ${height}`}>\n {/* axis line */}\n <line\n x1={padX}\n y1={lineY}\n x2={width - padX}\n y2={lineY}\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeWidth={2}\n />\n {events.map((event, i) => {\n const t = timestamps[i]\n const x = xPos(t)\n const above = i % 2 === 0\n const labelY = above ? lineY - 24 : lineY + 32\n const dotColor = event.color ?? PALETTE[i % PALETTE.length]\n const dateStr = new Date(event.date).toLocaleDateString()\n\n return (\n <g key={i} data-event>\n <circle cx={x} cy={lineY} r={5} fill={dotColor} />\n <line\n x1={x}\n y1={lineY + (above ? -6 : 6)}\n x2={x}\n y2={labelY + (above ? 10 : -10)}\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeWidth={1}\n />\n <text\n x={x}\n y={labelY}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg, #fff)\"\n fontSize={10}\n fontWeight={500}\n data-label={above ? 'above' : 'below'}\n >\n {event.label}\n </text>\n <text\n x={x}\n y={labelY + (above ? -10 : 12)}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg-muted, #6b7280)\"\n fontSize={8}\n >\n {dateStr}\n </text>\n </g>\n )\n })}\n </svg>\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\nimport { ResponsiveContainer, Treemap } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype TreemapNode = {\n name: string\n value?: number\n children?: TreemapNode[]\n [key: string]: unknown\n}\n\nexport type TreemapChartProps = {\n data: TreemapNode[]\n dataKey?: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nexport const TreemapChart = forwardRef<HTMLDivElement, TreemapChartProps>(\n function TreemapChart(\n {\n data,\n dataKey = 'value',\n className,\n height = 300,\n color = 'var(--gds-accent)',\n glass,\n ...props\n },\n ref\n ) {\n return (\n <div\n className={cx(\n 'w-full',\n glass && 'gds-radius-popover bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"treemap-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <Treemap\n data={data}\n dataKey={dataKey}\n fill={color}\n stroke=\"var(--gds-bg, #fff)\"\n />\n </ResponsiveContainer>\n </div>\n )\n }\n)\n","// violin-plot — distribution shape visualization using pure SVG\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n]\n\nexport type ViolinPlotProps = {\n data: { label: string; values: number[] }[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nfunction computeDensity(\n values: number[],\n bins: number,\n min: number,\n max: number\n): number[] {\n const range = max - min\n if (range === 0) return Array(bins).fill(1 / bins) as number[]\n\n const density = Array(bins).fill(0) as number[]\n const binWidth = range / bins\n\n for (const v of values) {\n const idx = Math.min(Math.floor((v - min) / binWidth), bins - 1)\n density[idx]++\n }\n\n const maxDensity = Math.max(...density)\n if (maxDensity === 0) return density\n return density.map((d) => d / maxDensity)\n}\n\nfunction median(values: number[]): number {\n const sorted = [...values].sort((a, b) => a - b)\n const mid = Math.floor(sorted.length / 2)\n if (sorted.length % 2 !== 0) return sorted[mid]\n return (sorted[mid - 1] + sorted[mid]) / 2\n}\n\nexport const ViolinPlot = forwardRef<HTMLDivElement, ViolinPlotProps>(\n function ViolinPlot(\n { data, width = 400, height = 300, glass, className },\n ref\n ) {\n const padding = { top: 20, right: 20, bottom: 40, left: 50 }\n const chartW = width - padding.left - padding.right\n const chartH = height - padding.top - padding.bottom\n const bins = 20\n\n const allValues = data.flatMap((g) => g.values)\n const globalMin = allValues.length > 0 ? Math.min(...allValues) : 0\n const globalMax = allValues.length > 0 ? Math.max(...allValues) : 1\n const range = globalMax - globalMin\n const yMin = globalMin - range * 0.1\n const yMax = globalMax + range * 0.1\n const yScale = (v: number) =>\n padding.top + chartH * (1 - (v - yMin) / (yMax - yMin))\n\n const groupW = data.length > 0 ? chartW / data.length : chartW\n const violinMaxW = Math.min(groupW * 0.7, 80) / 2\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border-border border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"violin-plot\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {/* y-axis */}\n <line\n x1={padding.left}\n y1={padding.top}\n x2={padding.left}\n y2={padding.top + chartH}\n stroke=\"var(--gds-border, #374151)\"\n strokeWidth={1}\n />\n {/* x-axis */}\n <line\n x1={padding.left}\n y1={padding.top + chartH}\n x2={padding.left + chartW}\n y2={padding.top + chartH}\n stroke=\"var(--gds-border, #374151)\"\n strokeWidth={1}\n />\n\n {data.map((group, i) => {\n if (group.values.length === 0) return null\n const centerX = padding.left + groupW * (i + 0.5)\n const color = PALETTE[i % PALETTE.length]\n const density = computeDensity(\n group.values,\n bins,\n globalMin,\n globalMax\n )\n const binHeight = (yMax - yMin) / bins\n const med = median(group.values)\n\n // build violin path (right side then left side mirrored)\n const rightPoints = density.map((d, bi) => {\n const y = yScale(yMin + binHeight * (bi + 0.5))\n const x = centerX + d * violinMaxW\n return `${x},${y}`\n })\n const leftPoints = [...density].reverse().map((d, bi) => {\n const y = yScale(yMin + binHeight * (bins - 1 - bi + 0.5))\n const x = centerX - d * violinMaxW\n return `${x},${y}`\n })\n\n const pathD = `M ${rightPoints[0]} ${rightPoints.map((p) => `L ${p}`).join(' ')} ${leftPoints.map((p) => `L ${p}`).join(' ')} Z`\n\n return (\n <g key={group.label} data-violin={group.label}>\n <path\n d={pathD}\n fill={color}\n fillOpacity={0.25}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* median dot */}\n <circle cx={centerX} cy={yScale(med)} r={3} fill={color} />\n {/* label */}\n <text\n x={centerX}\n y={padding.top + chartH + 20}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg-muted, #9ca3af)\"\n fontSize={10}\n >\n {group.label}\n </text>\n </g>\n )\n })}\n </svg>\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #3b82f6)',\n]\n\ntype WaffleSegment = {\n label: string\n value: number\n color?: string\n}\n\nexport type WaffleChartProps = {\n data: WaffleSegment[]\n size?: number\n glass?: boolean\n className?: string\n}\n\nexport const WaffleChart = forwardRef<HTMLDivElement, WaffleChartProps>(\n function WaffleChart({ data, size = 200, glass, className, ...props }, ref) {\n // build cell color map (100 cells)\n const cells: string[] = []\n let cellIndex = 0\n for (let i = 0; i < data.length; i++) {\n const segment = data[i]\n const count = Math.round(segment.value)\n const color = segment.color ?? PALETTE[i % PALETTE.length]\n for (let j = 0; j < count && cellIndex < 100; j++) {\n cells[cellIndex] = color\n cellIndex++\n }\n }\n // fill remaining cells with transparent\n while (cellIndex < 100) {\n cells[cellIndex] = 'transparent'\n cellIndex++\n }\n\n const cellSize = size / 10\n const gap = Math.max(1, cellSize * 0.1)\n\n return (\n <div\n className={cx(\n 'gds-radius-popover inline-flex flex-col border border-white/[0.06]',\n glassClass(glass),\n className\n )}\n data-component=\"waffle-chart\"\n ref={ref}\n {...props}\n >\n <svg height={size} width={size} viewBox={`0 0 ${size} ${size}`}>\n {cells.map((color, i) => {\n const row = Math.floor(i / 10)\n const col = i % 10\n return (\n <rect\n key={i}\n x={col * cellSize + gap}\n y={row * cellSize + gap}\n width={cellSize - gap * 2}\n height={cellSize - gap * 2}\n rx={2}\n fill={color}\n data-cell={i}\n />\n )\n })}\n </svg>\n <div className=\"flex flex-wrap gap-3 px-2 pt-1 pb-2\">\n {data.map((segment, i) => (\n <div\n key={segment.label}\n className=\"text-fg-muted flex items-center gap-1.5 text-[10px]\"\n >\n <span\n className=\"inline-block h-2 w-2 rounded-full\"\n style={{\n backgroundColor: segment.color ?? PALETTE[i % PALETTE.length],\n }}\n />\n <span>{segment.label}</span>\n <span className=\"text-fg-muted/50\">{segment.value}%</span>\n </div>\n ))}\n </div>\n </div>\n )\n }\n)\n","// waterfall-chart — cumulative bridge chart for financial analysis\nimport { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype WaterfallItem = { label: string; value: number }\n\ntype WaterfallChartProps = {\n className?: string\n data: WaterfallItem[]\n height?: number\n}\n\nexport const WaterfallChart = forwardRef<HTMLDivElement, WaterfallChartProps>(\n function WaterfallChart({ className, data, height = 300 }, ref) {\n const width = 500\n const padding = { bottom: 40, left: 12, right: 12, top: 20 }\n\n const computed = useMemo(() => {\n if (data.length === 0)\n return {\n bars: [] as {\n end: number\n label: string\n start: number\n type: 'negative' | 'positive' | 'total'\n value: number\n }[],\n maxY: 0,\n minY: 0,\n }\n\n const bars: {\n end: number\n label: string\n start: number\n type: 'negative' | 'positive' | 'total'\n value: number\n }[] = []\n let running = 0\n for (const item of data) {\n const start = running\n running = running + item.value\n bars.push({\n end: running,\n label: item.label,\n start,\n type: item.value >= 0 ? 'positive' : 'negative',\n value: item.value,\n })\n }\n bars.push({\n end: running,\n label: 'Total',\n start: 0,\n type: 'total',\n value: running,\n })\n\n const allValues = bars.flatMap((b) => [b.start, b.end])\n return {\n bars,\n maxY: Math.max(0, ...allValues),\n minY: Math.min(0, ...allValues),\n }\n }, [data])\n\n const chartW = width - padding.left - padding.right\n const chartH = height - padding.top - padding.bottom\n const yRange = computed.maxY - computed.minY || 1\n const barCount = computed.bars.length\n const barWidth = Math.min(40, (chartW / barCount) * 0.6)\n const gap = chartW / barCount\n\n const yToPixel = (v: number) =>\n padding.top + (1 - (v - computed.minY) / yRange) * chartH\n\n const fillColor = (type: 'negative' | 'positive' | 'total') => {\n if (type === 'positive') return 'var(--gds-success)'\n if (type === 'negative') return 'var(--gds-danger)'\n return 'var(--gds-accent)'\n }\n\n return (\n <div\n className={cx('inline-block', className)}\n data-component=\"waterfall-chart\"\n ref={ref}\n >\n <svg height={height} viewBox={`0 0 ${width} ${height}`} width={width}>\n {computed.bars.map((bar, i) => {\n const x = padding.left + i * gap + (gap - barWidth) / 2\n const top = yToPixel(Math.max(bar.start, bar.end))\n const bottom = yToPixel(Math.min(bar.start, bar.end))\n const barH = Math.max(1, bottom - top)\n return (\n <g key={i}>\n <rect\n fill={fillColor(bar.type)}\n fillOpacity={0.8}\n height={barH}\n rx={2}\n width={barWidth}\n x={x}\n y={top}\n />\n {bar.type !== 'total' && i < computed.bars.length - 1 && (\n <line\n stroke=\"var(--gds-border)\"\n strokeDasharray=\"3,3\"\n strokeWidth={1}\n x1={x + barWidth}\n x2={padding.left + (i + 1) * gap + (gap - barWidth) / 2}\n y1={yToPixel(bar.end)}\n y2={yToPixel(bar.end)}\n />\n )}\n <text\n dominantBaseline=\"middle\"\n fill=\"var(--gds-fg)\"\n fontSize={10}\n fontWeight=\"600\"\n textAnchor=\"middle\"\n x={x + barWidth / 2}\n y={top - 8}\n >\n {bar.value >= 0 ? `+${bar.value}` : bar.value}\n </text>\n <text\n dominantBaseline=\"hanging\"\n fill=\"var(--gds-fg-muted)\"\n fontSize={10}\n textAnchor=\"middle\"\n x={x + barWidth / 2}\n y={height - padding.bottom + 8}\n >\n {bar.label}\n </text>\n </g>\n )\n })}\n <line\n stroke=\"var(--gds-border)\"\n strokeWidth={1}\n x1={padding.left}\n x2={width - padding.right}\n y1={yToPixel(0)}\n y2={yToPixel(0)}\n />\n </svg>\n </div>\n )\n }\n)\n\nexport type { WaterfallChartProps, WaterfallItem }\n","import { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type WaveformDisplayProps = {\n data: number[]\n width?: number\n height?: number\n progress?: number\n color?: string\n playedColor?: string\n glass?: boolean\n className?: string\n}\n\nexport const WaveformDisplay = forwardRef<HTMLDivElement, WaveformDisplayProps>(\n function WaveformDisplay(\n {\n data,\n width = 400,\n height = 100,\n progress = 0,\n color = 'var(--gds-accent, #6366f1)',\n playedColor,\n glass,\n className,\n ...props\n },\n ref\n ) {\n const resolvedPlayedColor = playedColor ?? color\n const progressIndex = Math.floor(progress * data.length)\n const centerY = height / 2\n\n const bars = useMemo(() => {\n if (data.length === 0) return []\n const barWidth = width / data.length\n return data.map((amp, i) => {\n const barHeight = Math.max(amp * centerY, 1)\n return {\n x: i * barWidth,\n y: centerY - barHeight,\n w: Math.max(barWidth - 1, 1),\n h: barHeight * 2,\n played: i < progressIndex,\n }\n })\n }, [data, width, centerY, progressIndex])\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border-border inline-block border',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"waveform-display\"\n {...props}\n >\n <svg height={height} width={width} viewBox={`0 0 ${width} ${height}`}>\n {bars.map((bar, i) => (\n <rect\n key={i}\n x={bar.x}\n y={bar.y}\n width={bar.w}\n height={bar.h}\n fill={bar.played ? resolvedPlayedColor : color}\n opacity={bar.played ? 1 : 0.3}\n rx={1}\n />\n ))}\n </svg>\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst PALETTE = Array.from({ length: 10 }, (_, i) => `var(--gds-palette-${i})`)\n\nexport type WordCloudProps = {\n words: { text: string; weight: number }[]\n maxFontSize?: number\n minFontSize?: number\n glass?: boolean\n height?: number\n className?: string\n}\n\nexport const WordCloud = forwardRef<HTMLDivElement, WordCloudProps>(\n function WordCloud(\n {\n words,\n maxFontSize = 48,\n minFontSize = 12,\n glass,\n height = 300,\n className,\n ...props\n },\n ref\n ) {\n const weights = words.map((w) => w.weight)\n const minW = Math.min(...weights)\n const maxW = Math.max(...weights)\n const range = maxW - minW\n\n return (\n <div\n className={cx(\n 'gds-radius-popover flex flex-wrap items-center justify-center gap-2 overflow-hidden border border-[var(--gds-border,#e5e7eb)]',\n glass && 'bg-white/5 backdrop-blur-md',\n className\n )}\n data-component=\"word-cloud\"\n ref={ref}\n style={{ height }}\n {...props}\n >\n {words.map((w, i) => {\n const t = range === 0 ? 0.5 : (w.weight - minW) / range\n const fontSize = Math.round(\n minFontSize + t * (maxFontSize - minFontSize)\n )\n return (\n <span\n className=\"inline-block px-1 select-none\"\n key={`${w.text}-${i}`}\n style={{ fontSize, color: PALETTE[i % PALETTE.length] }}\n >\n {w.text}\n </span>\n )\n })}\n </div>\n )\n }\n)\n"],"mappings":"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"}
|