import * as d3 from 'd3'; export function ChartSSR({ data, dots = false, }: { dots?: boolean; data: { value: number; date: Date }[]; }) { if (data.length === 0) { return null; } const xScale = d3 .scaleTime() .domain([data[0]!.date, data[data.length - 1]!.date]) .range([0, 100]); const yScale = d3 .scaleLinear() .domain([0, d3.max(data.map((d) => d.value)) ?? 0]) .range([100, 0]); const line = d3 .line<(typeof data)[number]>() .curve(d3.curveMonotoneX) .x((d) => xScale(d.date)) .y((d) => yScale(d.value)); const area = d3 .area<(typeof data)[number]>() .curve(d3.curveMonotoneX) .x((d) => xScale(d.date)) .y0(yScale(0)) .y1((d) => yScale(d.value)); const pathLine = line(data); const pathArea = area(data); if (!pathLine) { return null; } return (
{/* Chart area */} {/* Gradient area */} {pathArea && ( )} {/* Line */} {/* Circles */} {dots && data.map((d) => ( ))}
); }