@goliapkg/gds 1.4.2 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/index.js +15 -15
  2. package/dist/l2-primitives/number-input.d.ts.map +1 -1
  3. package/dist/l2-primitives-Le0006ck.js.map +1 -1
  4. package/dist/l3-atoms/animated-border.d.ts +9 -0
  5. package/dist/l3-atoms/animated-border.d.ts.map +1 -0
  6. package/dist/l3-atoms/index.d.ts +12 -0
  7. package/dist/l3-atoms/index.d.ts.map +1 -1
  8. package/dist/l3-atoms/index.js +6 -6
  9. package/dist/l3-atoms/number-flow.d.ts +8 -0
  10. package/dist/l3-atoms/number-flow.d.ts.map +1 -0
  11. package/dist/l3-atoms/orbit.d.ts +10 -0
  12. package/dist/l3-atoms/orbit.d.ts.map +1 -0
  13. package/dist/l3-atoms/stagger.d.ts +10 -0
  14. package/dist/l3-atoms/stagger.d.ts.map +1 -0
  15. package/dist/l3-atoms/trend-indicator.d.ts +9 -0
  16. package/dist/l3-atoms/trend-indicator.d.ts.map +1 -0
  17. package/dist/l3-atoms/volume-slider.d.ts +8 -0
  18. package/dist/l3-atoms/volume-slider.d.ts.map +1 -0
  19. package/dist/{l3-atoms-BxDg3rXt.js → l3-atoms-LtIFAn9Y.js} +553 -421
  20. package/dist/l3-atoms-LtIFAn9Y.js.map +1 -0
  21. package/dist/l4-molecules/activity-log.d.ts +13 -0
  22. package/dist/l4-molecules/activity-log.d.ts.map +1 -0
  23. package/dist/l4-molecules/bottom-bar.d.ts +7 -0
  24. package/dist/l4-molecules/bottom-bar.d.ts.map +1 -0
  25. package/dist/l4-molecules/circular-menu.d.ts +14 -0
  26. package/dist/l4-molecules/circular-menu.d.ts.map +1 -0
  27. package/dist/l4-molecules/collapsible.d.ts +12 -2
  28. package/dist/l4-molecules/collapsible.d.ts.map +1 -1
  29. package/dist/l4-molecules/command-bar-float.d.ts +13 -0
  30. package/dist/l4-molecules/command-bar-float.d.ts.map +1 -0
  31. package/dist/l4-molecules/command-bar.d.ts +16 -0
  32. package/dist/l4-molecules/command-bar.d.ts.map +1 -0
  33. package/dist/l4-molecules/comparison-bar.d.ts +13 -0
  34. package/dist/l4-molecules/comparison-bar.d.ts.map +1 -0
  35. package/dist/l4-molecules/countdown-timer.d.ts +8 -0
  36. package/dist/l4-molecules/countdown-timer.d.ts.map +1 -0
  37. package/dist/l4-molecules/feature-flag.d.ts +8 -0
  38. package/dist/l4-molecules/feature-flag.d.ts.map +1 -0
  39. package/dist/l4-molecules/flip-card.d.ts +9 -0
  40. package/dist/l4-molecules/flip-card.d.ts.map +1 -0
  41. package/dist/l4-molecules/glitch-text.d.ts +8 -0
  42. package/dist/l4-molecules/glitch-text.d.ts.map +1 -0
  43. package/dist/l4-molecules/index.d.ts +54 -2
  44. package/dist/l4-molecules/index.d.ts.map +1 -1
  45. package/dist/l4-molecules/index.js +3 -3
  46. package/dist/l4-molecules/live-metric.d.ts +9 -0
  47. package/dist/l4-molecules/live-metric.d.ts.map +1 -0
  48. package/dist/l4-molecules/matrix-rain.d.ts +9 -0
  49. package/dist/l4-molecules/matrix-rain.d.ts.map +1 -0
  50. package/dist/l4-molecules/media-container.d.ts +11 -0
  51. package/dist/l4-molecules/media-container.d.ts.map +1 -0
  52. package/dist/l4-molecules/morphing-shape.d.ts +8 -0
  53. package/dist/l4-molecules/morphing-shape.d.ts.map +1 -0
  54. package/dist/l4-molecules/network-status.d.ts +7 -0
  55. package/dist/l4-molecules/network-status.d.ts.map +1 -0
  56. package/dist/l4-molecules/noise-overlay.d.ts +7 -0
  57. package/dist/l4-molecules/noise-overlay.d.ts.map +1 -0
  58. package/dist/l4-molecules/num-table.d.ts +19 -0
  59. package/dist/l4-molecules/num-table.d.ts.map +1 -0
  60. package/dist/l4-molecules/otp-input.d.ts +9 -0
  61. package/dist/l4-molecules/otp-input.d.ts.map +1 -0
  62. package/dist/l4-molecules/particle-field.d.ts +9 -0
  63. package/dist/l4-molecules/particle-field.d.ts.map +1 -0
  64. package/dist/l4-molecules/reveal.d.ts +9 -0
  65. package/dist/l4-molecules/reveal.d.ts.map +1 -0
  66. package/dist/l4-molecules/scoreboard.d.ts +8 -0
  67. package/dist/l4-molecules/scoreboard.d.ts.map +1 -0
  68. package/dist/l4-molecules/stat-trend.d.ts +9 -0
  69. package/dist/l4-molecules/stat-trend.d.ts.map +1 -0
  70. package/dist/l4-molecules/text-reveal.d.ts +8 -0
  71. package/dist/l4-molecules/text-reveal.d.ts.map +1 -0
  72. package/dist/l4-molecules/text-scramble.d.ts +8 -0
  73. package/dist/l4-molecules/text-scramble.d.ts.map +1 -0
  74. package/dist/l4-molecules/tilt-card.d.ts +9 -0
  75. package/dist/l4-molecules/tilt-card.d.ts.map +1 -0
  76. package/dist/l4-molecules/upload-progress.d.ts +14 -0
  77. package/dist/l4-molecules/upload-progress.d.ts.map +1 -0
  78. package/dist/{l4-molecules-DftsX-gO.js → l4-molecules-Bnt38HxY.js} +1077 -197
  79. package/dist/l4-molecules-Bnt38HxY.js.map +1 -0
  80. package/dist/l5-organisms/index.d.ts +4 -4
  81. package/dist/l5-organisms/index.d.ts.map +1 -1
  82. package/dist/l5-organisms/index.js +2 -2
  83. package/dist/l5-organisms/kanban.d.ts +13 -0
  84. package/dist/l5-organisms/kanban.d.ts.map +1 -1
  85. package/dist/l5-organisms/timeline.d.ts +16 -0
  86. package/dist/l5-organisms/timeline.d.ts.map +1 -1
  87. package/dist/{l5-organisms-Di1Bm_R6.js → l5-organisms-C7LXv0jT.js} +205 -125
  88. package/dist/l5-organisms-C7LXv0jT.js.map +1 -0
  89. package/dist/l6-charts/choropleth-map.d.ts +14 -0
  90. package/dist/l6-charts/choropleth-map.d.ts.map +1 -0
  91. package/dist/l6-charts/index.d.ts +6 -0
  92. package/dist/l6-charts/index.d.ts.map +1 -1
  93. package/dist/l6-charts/index.js +2 -2
  94. package/dist/l6-charts/polar-area-chart.d.ts +13 -0
  95. package/dist/l6-charts/polar-area-chart.d.ts.map +1 -0
  96. package/dist/l6-charts/stock-ticker.d.ts +12 -0
  97. package/dist/l6-charts/stock-ticker.d.ts.map +1 -0
  98. package/dist/{l6-charts-Bn9RQLbe.js → l6-charts-DPMj1m0E.js} +345 -148
  99. package/dist/l6-charts-DPMj1m0E.js.map +1 -0
  100. package/dist/l7-patterns/index.d.ts +2 -0
  101. package/dist/l7-patterns/index.d.ts.map +1 -1
  102. package/dist/l7-patterns/index.js +2 -2
  103. package/dist/l7-patterns/stat.d.ts +22 -0
  104. package/dist/l7-patterns/stat.d.ts.map +1 -0
  105. package/dist/{l7-patterns-BCpw0-CS.js → l7-patterns-8fc4b3eE.js} +605 -462
  106. package/dist/l7-patterns-8fc4b3eE.js.map +1 -0
  107. package/package.json +1 -1
  108. package/dist/l3-atoms-BxDg3rXt.js.map +0 -1
  109. package/dist/l4-molecules-DftsX-gO.js.map +0 -1
  110. package/dist/l5-organisms-Di1Bm_R6.js.map +0 -1
  111. package/dist/l6-charts-Bn9RQLbe.js.map +0 -1
  112. package/dist/l7-patterns-BCpw0-CS.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"l6-charts-Bn9RQLbe.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/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/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/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(data: { x: number; y: number }[], width: number, height: number): { 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({ annotations, className, data, height = 200 }: 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 className={cx('relative select-none', className)} data-component=\"annotated-chart\">\n <svg className=\"w-full\" viewBox={`0 0 ${width} ${height}`}>\n <polyline className=\"stroke-accent\" fill=\"none\" points={polylinePoints} strokeWidth={2} />\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) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setActiveIdx(activeIdx === i ? null : i) } }}\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 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=\"absolute z-10 rounded-lg border border-border bg-surface px-3 py-2 shadow-lg\"\n style={{ left: `${(pos.sx / width) * 100}%`, top: `${(pos.sy / height) * 100}%` }}\n >\n <div className=\"text-xs font-bold text-fg\">{ann.label}</div>\n <div className=\"text-xs text-fg-muted\">{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 { data, dataKey, xKey = 'name', className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\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 stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\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 { data, dataKey, xKey = 'name', className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"bar-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RBarChart data={data}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\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) => 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 && 'backdrop-blur-md bg-white/5',\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 x1={cx - boxW * 0.3} y1={yScale(stats.whiskerMin)} x2={cx + boxW * 0.3} y2={yScale(stats.whiskerMin)} stroke={color} strokeWidth={1.5} />\n <line x1={cx - boxW * 0.3} y1={yScale(stats.whiskerMax)} x2={cx + boxW * 0.3} y2={yScale(stats.whiskerMax)} stroke={color} strokeWidth={1.5} />\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 'w-full gds-radius-popover border border-[var(--gds-border,#e5e7eb)]',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"bubble-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <ScatterChart>\n <XAxis\n dataKey=\"x\"\n name={xLabel}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n />\n <YAxis\n dataKey=\"y\"\n name={yLabel}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n />\n <ZAxis dataKey=\"z\" range={[20, 400]} type=\"number\" />\n <Tooltip />\n <Scatter data={data} fill=\"var(--gds-accent)\" fillOpacity={0.6} />\n </ScatterChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","// bullet-chart — performance comparison (actual vs target with range bands)\nimport { useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype BulletChartProps = {\n actual: number\n className?: string\n label?: string\n max: number\n ranges?: [number, number, number]\n target: number\n}\n\nconst WIDTH = 400\nconst BAR_HEIGHT = 28\nconst TOTAL_HEIGHT = 50\n\nexport function BulletChart({\n actual,\n className,\n label,\n max,\n ranges,\n target,\n}: BulletChartProps) {\n const computed = useMemo(() => {\n const thresholds = ranges ?? [max * 0.33, max * 0.66, max]\n const scale = (v: number) => (v / max) * WIDTH\n return {\n actualWidth: scale(Math.min(actual, max)),\n rangeWidths: thresholds.map((t) => scale(Math.min(t, max))),\n targetX: scale(Math.min(target, max)),\n }\n }, [actual, max, target, ranges])\n\n const barY = (TOTAL_HEIGHT - BAR_HEIGHT) / 2\n\n return (\n <div className={cx('select-none', className)} data-component=\"bullet-chart\">\n {label !== undefined && (\n <div className=\"mb-1 text-xs font-medium text-fg-muted\">{label}</div>\n )}\n <svg height={TOTAL_HEIGHT} viewBox={`0 0 ${WIDTH} ${TOTAL_HEIGHT}`} width=\"100%\">\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({ data, series, xKey = 'name', height = 300, glass, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'w-full gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"bump-chart\"\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <LineChart data={data}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis reversed stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\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 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\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.map((d) => d.value).filter((v) => v > 0).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(Math.floor((i / 4) * values.length), values.length - 1)\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 = 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 = ['var(--gds-bg-tertiary)', 'var(--gds-accent-dim, rgba(99,179,163,0.3))', 'var(--gds-accent-muted, rgba(99,179,163,0.55))', 'var(--gds-accent-soft, rgba(99,179,163,0.75))', 'var(--gds-accent)'],\n cellSize = 12,\n glass,\n className,\n },\n ref,\n ) {\n const [tooltip, setTooltip] = useState<{ x: number; y: number; text: string } | 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 && 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 = (e.target as SVGRectElement).getBoundingClientRect()\n setTooltip({ x: rect.x, y: rect.y, text: `${c.date}: ${c.value}` })\n }}\n onMouseLeave={() => setTooltip(null)}\n />\n ))}\n </svg>\n {tooltip !== null && (\n <div\n className=\"pointer-events-none fixed z-50 rounded bg-surface px-2 py-1 text-[10px] text-fg shadow-md border border-border\"\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<HTMLDivElement, 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 'w-full gds-radius-popover border border-[var(--gds-border,#e5e7eb)]',\n glass && 'backdrop-blur-md bg-white/5',\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 stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"date\" stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis\n domain={domain}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n <Bar\n dataKey=\"bodyHeight\"\n shape={<CandleShape />}\n stackId=\"candle\"\n />\n </ComposedChart>\n </ResponsiveContainer>\n </div>\n )\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(cx: number, cy: number, r: number, angle: number) {\n return {\n x: cx + r * Math.cos(angle),\n y: cy + r * Math.sin(angle),\n }\n}\n\nexport function arcPath(cx: number, cy: number, r: number, startAngle: number, endAngle: number) {\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(totals: number[], grandTotal: number, n: number, gap: number): 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 { arcPath, CHORD_PALETTE, chordPath, computeArcs, computeChords, polarToCartesian } 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({ matrix, labels, width = 300, height = 300, glass, className }, ref) {\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 && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"chord-diagram\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} />\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 && 'backdrop-blur-md bg-white/5',\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 = midAngle > Math.PI / 2 && midAngle < (3 * Math.PI) / 2 ? 'end' : '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","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 'w-full gds-radius-popover 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 stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <Tooltip />\n <Legend />\n <Bar dataKey={barKey} fill={barColor} radius={[4, 4, 0, 0]} />\n <Line dataKey={lineKey} dot={false} stroke={lineColor} strokeWidth={2} type=\"monotone\" />\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 className=\"text-fg-muted/10\" cx={center} cy={center} fill=\"none\" r={r} stroke=\"currentColor\" strokeWidth={ringWidth} />\n <circle className=\"transition-all duration-500\" cx={center} cy={center} fill=\"none\" r={r} stroke={color} strokeDasharray={`${dashLen} ${circumference - dashLen}`} strokeDashoffset={circumference / 4} strokeLinecap=\"round\" strokeWidth={ringWidth} />\n </g>\n )\n })}\n </svg>\n <div className=\"mt-2 flex flex-wrap gap-3\">\n {rings.map((ring, i) => (\n <div className=\"flex items-center gap-1.5 text-xs text-fg-muted\" key={i}>\n <div className=\"h-2 w-2 rounded-full\" style={{ backgroundColor: ring.color ?? defaultColors[i % defaultColors.length] }} />\n <span>{ring.label}</span>\n <span className=\"font-medium text-fg tabular-nums\">{ring.value}/{ring.max}</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)', 'var(--gds-palette-1)', 'var(--gds-palette-2)', 'var(--gds-palette-3)',\n 'var(--gds-palette-4)', 'var(--gds-palette-5)', 'var(--gds-palette-6)', 'var(--gds-palette-7)',\n]\n\ntype FlatBar = { color: string; depth: number; name: string; width: number; x: number }\n\nfunction flattenNode(\n node: FlameNode, depth: number, x: number, totalWidth: number, parentValue: number, colorIndex: number,\n): FlatBar[] {\n const width = parentValue > 0 ? (node.value / parentValue) * totalWidth : 0\n const bars: FlatBar[] = [{ color: PALETTE[colorIndex % PALETTE.length], depth, name: node.name, width, x }]\n\n if (node.children !== undefined) {\n let childX = x\n node.children.forEach((child, i) => {\n bars.push(...flattenNode(child, depth + 1, childX, totalWidth, node.value, colorIndex + i + 1))\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(() => flattenNode(data, 0, 0, CHART_WIDTH, data.value, 0), [data])\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 className={cx('inline-block overflow-x-auto', className)} data-component=\"flame-chart\">\n <svg height={svgHeight} viewBox={`0 0 ${CHART_WIDTH} ${svgHeight}`} width={CHART_WIDTH}>\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 x={x} y={y + 4} textAnchor=\"middle\" fill=\"var(--gds-fg, #e5e7eb)\" fontSize={10}>\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 x={x} y={y + 4} textAnchor=\"middle\" fill=\"var(--gds-fg, #e5e7eb)\" fontSize={10}>\n {node.label}\n </text>\n </g>\n )\n}\n\nexport const FlowChart = forwardRef<HTMLDivElement, FlowChartProps>(\n function FlowChart({ nodes, edges, width = 600, height = 200, glass, className }, ref) {\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(nodes.map((n, i) => [n.id, { x: startX + i * spacing, y: centerY }]))\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"flow-chart\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n <defs>\n <marker id=\"gds-arrow\" markerWidth=\"8\" markerHeight=\"6\" refX=\"8\" refY=\"3\" orient=\"auto\">\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 x={midX} y={midY - 8} textAnchor=\"middle\" fill=\"var(--gds-fg-muted, #9ca3af)\" fontSize={9}>\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 { Cell, Funnel, FunnelChart as RFunnelChart, ResponsiveContainer, Tooltip } 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({ data, dataKey, className, height = 300, colors = PALETTE, glass, ...props }, ref) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\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>(\n 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('relative w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\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 className=\"absolute inset-0 flex flex-col items-center justify-center\" style={{ top: '20%' }}>\n <span className=\"text-2xl font-semibold\" style={{ color }}>\n {clamped}\n </span>\n {label !== undefined && <span className=\"gds-text-body text-[var(--gds-fg-muted,#6b7280)]\">{label}</span>}\n </div>\n </div>\n )\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 [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)]\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('inline-block', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"heatmap-chart\"\n ref={ref}\n {...props}\n >\n <div className=\"flex flex-col gap-px\">\n {xLabels !== undefined && (\n <div className=\"flex gap-px\" style={{ paddingLeft: yLabels !== undefined ? cellSize + 4 : 0 }}>\n {xLabels.map((l) => (\n <div\n className=\"flex items-center justify-center gds-text-caption 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=\"flex-shrink-0 text-right gds-text-caption text-[var(--gds-fg-muted,#6b7280)] pr-1\"\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(colorScale.min, colorScale.max, normalize(val)),\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) => (i === binCount - 1 ? v >= lo && v <= hi : v >= lo && v < hi)).length\n return { range: `${lo.toFixed(1)}–${hi.toFixed(1)}`, count }\n })\n}\n\nexport const Histogram = forwardRef<HTMLDivElement, HistogramProps>(\n function Histogram(\n { data, bins = 10, height = 300, color = 'var(--gds-accent)', glass, className, ...props },\n ref,\n ) {\n const binData = computeBins(data, bins)\n\n return (\n <div\n className={cx(\n 'w-full gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\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 stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"range\" stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 10 }} />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\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 { data, dataKey, xKey = 'name', className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"line-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RLineChart data={data}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <Tooltip />\n <Line dataKey={dataKey} dot={false} stroke={color} strokeWidth={2} type=\"monotone\" />\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(count: number, cx: number, cy: number, radius: number) {\n return Array.from({ length: count }, (_, i) => {\n const angle = (2 * Math.PI * i) / count - Math.PI / 2\n return { x: cx + radius * Math.cos(angle), y: cy + radius * Math.sin(angle) }\n })\n}\n\nexport const NetworkGraph = forwardRef<HTMLDivElement, NetworkGraphProps>(\n function NetworkGraph({ nodes, edges, width = 400, height = 300, glass, className }, ref) {\n const centerX = width / 2\n const centerY = height / 2\n const layoutRadius = Math.min(centerX, centerY) * 0.65\n const positions = computePositions(nodes.length, centerX, centerY, layoutRadius)\n\n const nodeMap = new Map(nodes.map((n, i) => [n.id, i]))\n const nodeRadius = Math.max(8, Math.min(16, 120 / Math.max(nodes.length, 1)))\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\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 cx={pos.x} cy={pos.y} r={nodeRadius} fill={color} fillOpacity={0.8} />\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) => ({ price: b.price, bidDepth: b.depth, askDepth: undefined }))\n const askPoints = asks.map((a) => ({ price: a.price, bidDepth: undefined, askDepth: a.depth }))\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 'w-full gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"order-book-chart\"\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <AreaChart data={combined}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis\n dataKey=\"price\"\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n domain={['dataMin', 'dataMax']}\n />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\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 { Cell, Pie, PieChart as RPieChart, ResponsiveContainer, Tooltip } 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 { data, dataKey, nameKey = 'name', className, height = 300, colors = PALETTE, innerRadius = 0, glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"pie-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RPieChart>\n <Tooltip />\n <Pie cx=\"50%\" cy=\"50%\" data={data} dataKey={dataKey} innerRadius={innerRadius} nameKey={nameKey}>\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","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 { data, dataKey, angleKey = 'name', className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\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 dataKey={angleKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <PolarRadiusAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 10 }} />\n <Tooltip />\n <Radar dataKey={dataKey} fill={color} fillOpacity={0.3} stroke={color} strokeWidth={2} />\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 'w-full gds-radius-popover 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 dataKey=\"value\" background={{ fill: 'rgba(255,255,255,0.05)' }} />\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 { className, color, data, height = 200, label, lineWidth = 2, maxPoints = 200, showGrid = true },\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 = color ?? (style.getPropertyValue('--gds-accent').trim() || '#2563eb')\n const gridColor = style.getPropertyValue('--gds-border').trim() || '#e5e7eb'\n const fgColor = style.getPropertyValue('--gds-fg').trim() || '#1f2937'\n const fgMutedColor = 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) { ctx.moveTo(x, y) } else { ctx.lineTo(x, y) }\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) { ctx.moveTo(x, y) } else { ctx.lineTo(x, y) }\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('block w-full rounded-lg border border-border bg-surface', className)}\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 { nodes, links, className, height = 300, nodePadding = 50, nodeWidth = 10, glass, ...props },\n ref,\n ) {\n const data = { nodes, links }\n\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\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 { data, xKey, yKey, className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"scatter-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RScatterChart>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} type=\"number\" />\n <YAxis dataKey={yKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} type=\"number\" />\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 { data, dataKey, className, height = 32, width = 120, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('inline-block', glass && 'rounded backdrop-blur-md bg-white/5', className)}\n data-component=\"sparkline\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width={width}>\n <LineChart data={data}>\n <Line dataKey={dataKey} dot={false} stroke={color} strokeWidth={1.5} type=\"monotone\" />\n </LineChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\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({ data, keys, xKey = 'name', height = 300, glass, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'w-full gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"stream-chart\"\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <AreaChart data={data}>\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\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({ depth, index: parentIndex * 10 + i, startAngle: angle, endAngle: childEnd })\n arcs.push(...collectArcs(child, depth + 1, angle, childEnd, parentIndex * 10 + i))\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({ data, width = 300, height = 300, glass, className, ...props }, ref) {\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 'inline-flex gds-radius-popover 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(cxVal, cyVal, innerR, outerR, arc.startAngle, arc.endAngle)}\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({ events, width = 600, height = 120, glass, className, ...props }, ref) {\n if (events.length === 0) {\n return (\n <div\n className={cx('inline-flex gds-radius-popover border border-white/[0.06]', glassClass(glass), className)}\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('inline-flex gds-radius-popover border border-white/[0.06]', glassClass(glass), className)}\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 { data, dataKey = 'value', className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"treemap-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <Treemap data={data} dataKey={dataKey} fill={color} stroke=\"var(--gds-bg, #fff)\" />\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(values: number[], bins: number, min: number, max: number): 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({ 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 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) => 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 && 'backdrop-blur-md bg-white/5',\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(group.values, bins, globalMin, globalMax)\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\n cx={centerX}\n cy={yScale(med)}\n r={3}\n fill={color}\n />\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('inline-flex flex-col gds-radius-popover border border-white/[0.06]', glassClass(glass), className)}\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 pb-2 pt-1\">\n {data.map((segment, i) => (\n <div key={segment.label} className=\"flex items-center gap-1.5 text-[10px] text-fg-muted\">\n <span\n className=\"inline-block h-2 w-2 rounded-full\"\n style={{ backgroundColor: segment.color ?? PALETTE[i % PALETTE.length] }}\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) return { bars: [] as { end: number; label: string; start: number; type: 'negative' | 'positive' | 'total'; value: number }[], maxY: 0, minY: 0 }\n\n const bars: { end: number; label: string; start: number; type: 'negative' | 'positive' | 'total'; value: number }[] = []\n let running = 0\n for (const item of data) {\n const start = running\n running = running + item.value\n bars.push({ end: running, label: item.label, start, type: item.value >= 0 ? 'positive' : 'negative', value: item.value })\n }\n bars.push({ end: running, label: 'Total', start: 0, type: 'total', value: running })\n\n const allValues = bars.flatMap((b) => [b.start, b.end])\n return { bars, maxY: Math.max(0, ...allValues), minY: Math.min(0, ...allValues) }\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) => 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 className={cx('inline-block', className)} data-component=\"waterfall-chart\" ref={ref}>\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 fill={fillColor(bar.type)} fillOpacity={0.8} height={barH} rx={2} width={barWidth} x={x} y={top} />\n {bar.type !== 'total' && i < computed.bars.length - 1 && (\n <line stroke=\"var(--gds-border)\" strokeDasharray=\"3,3\" strokeWidth={1} x1={x + barWidth} x2={padding.left + (i + 1) * gap + (gap - barWidth) / 2} y1={yToPixel(bar.end)} y2={yToPixel(bar.end)} />\n )}\n <text dominantBaseline=\"middle\" fill=\"var(--gds-fg)\" fontSize={10} fontWeight=\"600\" textAnchor=\"middle\" x={x + barWidth / 2} y={top - 8}>\n {bar.value >= 0 ? `+${bar.value}` : bar.value}\n </text>\n <text dominantBaseline=\"hanging\" fill=\"var(--gds-fg-muted)\" fontSize={10} textAnchor=\"middle\" x={x + barWidth / 2} y={height - padding.bottom + 8}>\n {bar.label}\n </text>\n </g>\n )\n })}\n <line stroke=\"var(--gds-border)\" strokeWidth={1} x1={padding.left} x2={width - padding.right} y1={yToPixel(0)} y2={yToPixel(0)} />\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 'inline-block gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\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 { words, maxFontSize = 48, minFontSize = 12, glass, height = 300, className, ...props },\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 'flex flex-wrap items-center justify-center gap-2 overflow-hidden gds-radius-popover border border-[var(--gds-border,#e5e7eb)]',\n glass && 'backdrop-blur-md bg-white/5',\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(minFontSize + t * (maxFontSize - minFontSize))\n return (\n <span\n className=\"inline-block select-none px-1\"\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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"}