Files
fn-design-system/components/bar_chart.tsx
T
Egutierrez 5a824c2eee initial: mirror of @fn_library from fn_registry
75 components + DESIGN_SYSTEM.md + sync script.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 19:06:49 +02:00

48 lines
1.5 KiB
TypeScript

import { BarChart as MantineBarChart } from '@mantine/charts'
import { Paper } from '@mantine/core'
import { type Series, getSeriesColor } from './chart_container'
interface BarChartProps {
data: Record<string, unknown>[]
xKey: string
yKey?: string
series?: Series[]
horizontal?: boolean
showGrid?: boolean
showLegend?: boolean
height?: number
xAxisFormatter?: (value: unknown) => string
yAxisFormatter?: (value: unknown) => string
valueFormatter?: (value: number) => string
}
function BarChartComponent({
data, xKey, yKey, series, horizontal = false, showGrid = true, showLegend = false,
height = 300, xAxisFormatter, yAxisFormatter, valueFormatter = (v) => v.toLocaleString(),
}: BarChartProps) {
const chartSeries = series
? series.map((s, i) => ({ name: s.key, label: s.name, color: getSeriesColor(i, s.color) }))
: yKey ? [{ name: yKey, label: yKey, color: getSeriesColor(0) }] : []
return (
<Paper p="md">
<MantineBarChart
h={height}
data={data}
dataKey={xKey}
series={chartSeries}
orientation={horizontal ? 'vertical' : 'horizontal'}
gridAxis={showGrid ? 'xy' : 'none'}
withLegend={showLegend}
withTooltip
valueFormatter={valueFormatter}
xAxisProps={xAxisFormatter ? { tickFormatter: xAxisFormatter } : undefined}
yAxisProps={yAxisFormatter ? { tickFormatter: yAxisFormatter } : undefined}
/>
</Paper>
)
}
export const BarChart = BarChartComponent
export type { BarChartProps }