@goliapkg/gds 2.0.1 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"l6-charts-DEA5DgMy.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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 11 }}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 11 }}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 11 }}\n type=\"number\"\n />\n <YAxis\n dataKey=\"y\"\n name={yLabel}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 11 }}\n />\n <YAxis\n reversed\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 11 }}\n />\n <YAxis\n domain={domain}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 11 }}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 10 }}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 11 }}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 11 }}\n type=\"number\"\n domain={['dataMin', 'dataMax']}\n />\n <YAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 11 }}\n />\n <PolarRadiusAxis\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', fontSize: 11 }}\n type=\"number\"\n />\n <YAxis\n dataKey={yKey}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fill: 'var(--gds-fg-muted, #6b7280)', 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={{ fill: 'var(--gds-fg-muted, #6b7280)', 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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"}