Utilities
chartUtils
Collection of utitlities used in charts.
Project structure
If you are not sure how to structure your project or where to place the chartUtils.ts, we have a recommended project structure for Next.js, Vite, and Remix.
Components using chartUtils:
- AreaChart
- BarChart
- CategoryBar
- ComboChart
- DonutChart
- LineChart
- SparkChart
chartColors
You can use the chartColors utility to ensure that all chart components have the same colors. This approach lets you set the colors once. Note, that you could define different colors for dark mode too.
Because we use Tailwind CSS to define the colors, make sure the path to this file is inlcuded in the tailwind.config content section.
Installation
// Tremor chartColors [v0.1.0] export type ColorUtility = "bg" | "stroke" | "fill" | "text" export const chartColors = { blue: { bg: "bg-blue-500", stroke: "stroke-blue-500", fill: "fill-blue-500", text: "text-blue-500", }, emerald: { bg: "bg-emerald-500", stroke: "stroke-emerald-500", fill: "fill-emerald-500", text: "text-emerald-500", }, violet: { bg: "bg-violet-500", stroke: "stroke-violet-500", fill: "fill-violet-500", text: "text-violet-500", }, amber: { bg: "bg-amber-500", stroke: "stroke-amber-500", fill: "fill-amber-500", text: "text-amber-500", }, gray: { bg: "bg-gray-500", stroke: "stroke-gray-500", fill: "fill-gray-500", text: "text-gray-500", }, cyan: { bg: "bg-cyan-500", stroke: "stroke-cyan-500", fill: "fill-cyan-500", text: "text-cyan-500", }, pink: { bg: "bg-pink-500", stroke: "stroke-pink-500", fill: "fill-pink-500", text: "text-pink-500", }, lime: { bg: "bg-lime-500", stroke: "stroke-lime-500", fill: "fill-lime-500", text: "text-lime-500", }, fuchsia: { bg: "bg-fuchsia-500", stroke: "stroke-fuchsia-500", fill: "fill-fuchsia-500", text: "text-fuchsia-500", },} as const satisfies { [color: string]: { [key in ColorUtility]: string }} export type AvailableChartColorsKeys = keyof typeof chartColors export const AvailableChartColors: AvailableChartColorsKeys[] = Object.keys( chartColors,) as Array<AvailableChartColorsKeys> export const constructCategoryColors = ( categories: string[], colors: AvailableChartColorsKeys[],): Map<string, AvailableChartColorsKeys> => { const categoryColors = new Map<string, AvailableChartColorsKeys>() categories.forEach((category, index) => { categoryColors.set(category, colors[index % colors.length]) }) return categoryColors} export const getColorClassName = ( color: AvailableChartColorsKeys, type: ColorUtility,): string => { const fallbackColor = { bg: "bg-gray-500", stroke: "stroke-gray-500", fill: "fill-gray-500", text: "text-gray-500", } return chartColors[color]?.[type] ?? fallbackColor[type]}
getYAxisDomain
The getYAxisDomain utility is used to manage the y-axis formatting in charts, when minValue, maxValue, or autoMinValue are passed to the props.
Installation
// Tremor getYAxisDomain [v0.0.0] export const getYAxisDomain = ( autoMinValue: boolean, minValue: number | undefined, maxValue: number | undefined,) => { const minDomain = autoMinValue ? "auto" : minValue ?? 0 const maxDomain = maxValue ?? "auto" return [minDomain, maxDomain]}
hasOnlyOneValueForKey
The hasOnlyOneValueForKey utility checks if all objects in an array have the same value for a specified key. If all objects have the same value for the given key, it returns true; otherwise, it returns false.
Installation
// Tremor hasOnlyOneValueForKey [v0.1.0] export function hasOnlyOneValueForKey( array: any[], keyToCheck: string,): boolean { const val: any[] = [] for (const obj of array) { if (Object.prototype.hasOwnProperty.call(obj, keyToCheck)) { val.push(obj[keyToCheck]) if (val.length > 1) { return false } } } return true}