Customization
Customization ability of the surf-charts library
Customization
The surf-charts library provides the ability to customize any part of the charts. Below is an example of customization of VerticalChart component from the library.
This block is only necessary to understand the general concept of customization, for full information go to the specific chart page.
Подсказка
Styling of surf-charts components relies on the styling and className props of components. The className prop is always the outer wrapper of the component.
Each component has a styling prop, which is an object with fields representing different elements of the chart, for example, the VerticalChart has these:
labelClass, beforeClass, tooltipClass, barClass, titleClass, valuesLineOuter, valuesLineInner, valuesLineLabels, gridWrapper and gridLine.
So you have className and styling props for styling the VerticalChart component.
Either way, all components provide ample opportunities for customization, allowing you to easily adapt them to your needs. The main parameters and customization options for VerticalChart are listed below.
Component props
| Prop | Type | Default |
|---|---|---|
className | string | - |
colorScheme | light | dark | dark |
maxBars | NumericRange<3, 9> | 5 |
label | string | - |
tooltipPostfix | string | - |
noDataContent | ReactNode | No data provided |
noLabelContent | ReactNode | No label |
styling | DerivedBarStyling | - |
sort | 'asc' | 'desc | - |
data | DerivedBarChartData | - |
props | ComponentProps<'div'> | - |
Example of usage
import { VerticalChart } from '@surf/charts';
const data = [
{ label: 'January', value: 120 },
{ label: 'February', value: 80 },
{ label: 'March', value: 150 },
{ label: 'April', value: 110 },
{ label: 'May', value: 140 }
];
<VerticalChart
label='Sales'
tooltipPostfix='K'
maxBars={5}
data={data}
styling={{
labelClass: 'text-lg font-bold text-green-500',
beforeClass: 'before:bg-bar-hover'
}}
/>;Result
- January
- February
- March
- April
- May
Styling elements
The styling prop in the surf-charts components provides granular control over the appearance of various chart elements. Below is a breakdown of how you can utilize these properties to fine-tune the visual presentation of your charts.
labelClass
This controls the styling of the label text at the top of the chart. You can apply any TailwindCSS classes or custom CSS classes to adjust the font size, color, weight and other text properties.
Example
<VerticalChart
label='Monthly Sales'
styling={{
labelClass: 'text-xl font-semibold text-blue-700'
}}
/>beforeClass
This property allows you to apply styles to the before pseudo-element of the bars in the chart. This is useful for adding decorative effect, such as background colors or gradients, before the main bar content.
Don't forget
Don't forget to write TailwindCSS classes with before: for proper styles applying.
<VerticalChart
data={data}
styling={{
beforeClass: 'before:bg-gradient-to-r before:from-pink-400 before:to-red-600'
}}
/>tooltipClass
Customizes the appearance of tooltips that appear when hovering over the bars. This can include text formatting, background colors, borders and more.
<VerticalChart
data={data}
styling={{
tooltipClass: 'bg-black text-white p-2 rounded-lg shadow-lg'
}}
/>barClass
Customizes the appearance of each bar on the chart. This can include background colors, borders and more.
<VerticalChart
data={data}
styling={{
barClass: 'bg-black p-2 h-8'
}}
/>titleClass
Customizes the appearance each title of the bar on chart. This can include text formatting and more.
<VerticalChart
data={data}
styling={{
titleClass: 'text-green-500 text-lg font-semibold'
}}
/>valuesLineOuter, valuesLineInner and valuesLineLabels
Customizes the appearance of the values line and it's label. You can change font, paddings and so on. If you want to completely hide this line you can add display: none; via class to the valuesLineOuter.
<VerticalChart
data={data}
styling={{
valuesLineOuter: 'pr-4';
valuesLineInner: 'shrink';
valuesLineLabels: 'font-semibold max-w-24';
}}
/>gridWrapper and gridLine
Customizes the appearance and layout of the value lines grid.
Important
By default this grid is hidden. To show it you need to add visible Tailwind class to the gridWrapper or any other CSS class that applies visibility: visible; property.
<VerticalChart
data={data}
styling={{
gridWrapper: 'visible'
}}
/>Result
- June
- July
- August
- September
- October
Additional customization options
The surf-charts library offers powerful customization capabilities that allow you to create highly tailored visualizations. By leveraging the styling prop alongside other component props, you can adapt the appearance of your charts to fit your unique design needs.
For more specific customization details or advanced usage patterns, refer to the documentation of each individual component within the surf-charts library.
Tip
To dynamically change the number of columns, e.g. depending on the screen size, you can use the useMediaQuery hook from the useHooks.ts library or any other hook for tracking screen size.
Advanced example
import { VerticalChart } from '@surf/charts';
const salesData = [
{ label: 'June', value: 90 },
{ label: 'July', value: 130 },
{ label: 'August', value: 100 },
{ label: 'September', value: 115 },
{ label: 'October', value: 125 }
];
<VerticalChart
label='Quarterly Sales'
tooltipPostfix='K'
colorScheme='light'
maxBars={4}
sort='asc'
noDataContent='Sales data is unavailable'
noLabelContent='No Sales Label'
className='shadow-md rounded-lg border border-gray-300'
data={salesData}
styling={{
labelClass: 'text-2xl font-bold text-gray-800 mb-4',
beforeClass: 'before:bg-blue-500 before:opacity-75',
tooltipClass: 'bg-gray-900 text-white p-2 rounded-lg',
barClass: 'h-8 border border-white',
titleClass: 'font-semibold'
}}
/>;Last updated on 9/12/2024