# Legend
A legend component for displaying series information in charts. Supports customizable shapes, layouts, and custom item components.
## Import
```tsx
import { Legend } from '@coinbase/cds-web-visualization'
```
## Examples
Legend displays series information for charts, showing labels and color indicators for each data series. It can be positioned around the chart and supports custom shapes and item components.
### Basics
Use the `legend` prop on chart components to enable a default legend, or pass a `Legend` component for customization. Legend's `flexDirection` is automatically set to `row` for top/bottom `legendPosition` and `column` otherwise.
```jsx live
function BasicLegend() {
const pages = useMemo(
() => ['Page A', 'Page B', 'Page C', 'Page D', 'Page E', 'Page F', 'Page G'],
[],
);
const pageViews = useMemo(() => [2400, 1398, 9800, 3908, 4800, 3800, 4300], []);
const uniqueVisitors = useMemo(() => [4000, 3000, 2000, 2780, 1890, 2390, 3490], []);
const numberFormatter = useCallback(
(value) => new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 }).format(value),
[],
);
const chartAccessibilityLabel = `Website traffic across ${pages.length} pages showing page views and unique visitors.`;
const scrubberAccessibilityLabel = useCallback(
(index) => {
return `${pages[index]}: ${numberFormatter(pageViews[index])} page views, ${numberFormatter(uniqueVisitors[index])} unique visitors.`;
},
[pages, pageViews, uniqueVisitors, numberFormatter],
);
return (
);
}
```
Legend will automatically wrap when there are too many items to fit on one line.
```jsx live
function WrappedLegend() {
const precipitationData = [
{
id: 'northeast',
label: 'Northeast',
data: [5.14, 1.53, 5.73, 4.29, 3.78, 3.92, 4.19, 5.54, 2.03, 1.42, 2.95, 3.89],
color: 'rgb(var(--blue40))',
},
{
id: 'upperMidwest',
label: 'Upper Midwest',
data: [1.44, 0.49, 2.16, 3.67, 5.44, 6.21, 4.02, 3.67, 0.92, 1.47, 3.05, 1.48],
color: 'rgb(var(--green40))',
},
{
id: 'ohioValley',
label: 'Ohio Valley',
data: [4.74, 1.83, 3.1, 5.42, 5.69, 3.29, 5.02, 2.57, 4.13, 0.79, 4.31, 3.67],
color: 'rgb(var(--orange40))',
},
{
id: 'southeast',
label: 'Southeast',
data: [5.48, 3.11, 5.73, 2.97, 5.45, 3.28, 7.18, 5.67, 7.93, 1.33, 2.69, 3.21],
color: 'rgb(var(--yellow40))',
},
{
id: 'northernRockiesAndPlains',
label: 'Northern Rockies and Plains',
data: [0.64, 1.01, 1.06, 2.12, 3.34, 2.65, 1.54, 1.89, 0.95, 0.57, 1.23, 0.67],
color: 'rgb(var(--indigo40))',
},
{
id: 'south',
label: 'South',
data: [4.19, 1.79, 2.93, 3.84, 5.25, 3.4, 4.27, 1.84, 3.08, 0.52, 4.5, 2.62],
color: 'rgb(var(--pink40))',
},
{
id: 'southwest',
label: 'Southwest',
data: [1.12, 1.5, 1.52, 0.75, 0.76, 1.27, 1.44, 2.01, 0.62, 1.08, 1.23, 0.25],
color: 'rgb(var(--purple40))',
},
{
id: 'northwest',
label: 'Northwest',
data: [5.69, 3.67, 3.32, 1.95, 2.08, 1.31, 0.28, 0.81, 0.95, 2.03, 5.45, 5.8],
color: 'rgb(var(--red40))',
},
{
id: 'west',
label: 'West',
data: [3.39, 4.7, 3.09, 1.07, 0.55, 0.12, 0.23, 0.26, 0.22, 0.4, 2.7, 2.54],
color: 'rgb(var(--teal40))',
},
];
const xAxisData = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
];
const chartAccessibilityLabel = `Regional precipitation data across ${precipitationData.length} US regions over 12 months.`;
const scrubberAccessibilityLabel = useCallback(
(index) => {
const month = xAxisData[index];
const regionValues = precipitationData
.map((region) => `${region.label}: ${region.data[index]} inches`)
.join(', ');
return `${month} precipitation: ${regionValues}`;
},
[xAxisData, precipitationData],
);
return (
);
}
```
#### Position
Use `legendPosition` to place the legend at different positions around the chart. You can also customize alignment using the `justifyContent` prop on Legend.
```jsx live
function LegendPosition() {
return (
}
legendPosition="bottom"
series={[
{
id: 'revenue',
label: 'Revenue',
data: [455, 520, 380, 455, 285, 235],
yAxisId: 'revenue',
color: 'rgb(var(--yellow40))',
legendShape: 'squircle',
},
{
id: 'profitMargin',
label: 'Profit Margin',
data: [23, 20, 16, 38, 12, 9],
yAxisId: 'profitMargin',
color: 'var(--color-fgPositive)',
legendShape: 'squircle',
},
]}
xAxis={{
data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
scaleType: 'band',
}}
yAxis={[
{
id: 'revenue',
domain: { min: 0 },
},
{
id: 'profitMargin',
domain: { max: 100, min: 0 },
},
]}
>
`$${value}k`}
width={60}
/>
`${value}%`}
/>
);
}
```
#### Shape Variants
Legend supports different shape variants: `pill`, `circle`, `square`, and `squircle`. Set the shape on each series using `legendShape`.
```jsx live
function ShapeVariants() {
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'];
return (
);
}
```
### Styling
#### Custom Shape
You can pass a custom ReactNode as `legendShape` for fully custom indicators.
```jsx live
function CustomLegendShapes() {
const months = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
];
// Actual revenue (first 9 months)
const actualRevenue = [320, 380, 420, 390, 450, 480, 520, 490, 540, null, null, null];
// Forecasted revenue (last 3 months)
const forecastRevenue = [null, null, null, null, null, null, null, null, null, 580, 620, 680];
const numberFormatter = useCallback(
(value) => `$${new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 }).format(value)}k`,
[],
);
// Pattern settings for dotted fill
const patternSize = 4;
const dotSize = 1;
const patternId = useId();
const maskId = useId();
const legendPatternId = useId();
// Custom legend indicator that matches the dotted bar pattern
const DottedLegendIndicator = (
);
// Custom bar component that renders bars with dotted pattern fill
const DottedBarComponent = memo((props) => {
const { dataX, x, y } = props;
// Create unique IDs per bar so patterns are scoped to each bar
const uniqueMaskId = `${maskId}-${dataX}`;
const uniquePatternId = `${patternId}-${dataX}`;
return (
<>
{/* Pattern positioned relative to this bar's origin */}
>
);
});
return (
);
}
```
### Accessibility
Use `legendAccessibilityLabel` on chart components to provide a descriptive label for the legend group. This helps screen reader users understand what the legend represents.
```jsx live
function AccessibleLegend() {
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'];
const chartAccessibilityLabel =
'Monthly financial performance chart showing revenue and expenses over 6 months.';
return (
);
}
```
You can also set `accessibilityLabel` directly on the `Legend` component for more control:
```jsx live
function CustomAccessibleLegend() {
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'];
return (
}
legendPosition="top"
series={[
{
id: 'online',
label: 'Online Sales',
data: [45, 52, 48, 61, 55, 67],
color: 'rgb(var(--blue40))',
},
{
id: 'instore',
label: 'In-Store Sales',
data: [38, 41, 44, 39, 47, 51],
color: 'rgb(var(--purple40))',
},
]}
xAxis={{ data: months }}
yAxis={{ domain: { min: 0 }, showGrid: true }}
/>
);
}
```
### Composed Examples
#### Dynamic Label
You can use `EntryComponent` to display a label that updates as a user interacts with the chart.
```jsx live
function CustomLegendEntry() {
const timeLabels = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
];
const series = [
{
id: 'candidate-a',
label: 'Candidate A',
data: [48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 38],
color: 'rgb(var(--blue40))',
legendShape: 'circle',
},
{
id: 'candidate-b',
label: 'Candidate B',
data: [null, null, null, 6, 10, 14, 18, 22, 26, 29, 32, 35],
color: 'rgb(var(--orange40))',
legendShape: 'circle',
},
{
id: 'candidate-c',
label: 'Candidate C',
data: [52, 53, 54, 49, 46, 43, 40, 37, 34, 32, 30, 27],
color: 'rgb(var(--gray40))',
legendShape: 'circle',
},
];
const chartAccessibilityLabel = `Candidate polling data over ${timeLabels.length} months showing support percentages for 3 candidates.`;
const scrubberAccessibilityLabel = useCallback(
(index) => {
const month = timeLabels[index];
const candidateValues = series
.map((s) => {
const value = s.data[index];
return `${s.label}: ${value === null ? 'no data' : `${value}%`}`;
})
.join(', ');
return `${month}: ${candidateValues}`;
},
[timeLabels, series],
);
const ValueLegendEntry = memo(function ValueLegendEntry({ seriesId, label, color, shape }) {
const { scrubberPosition } = useScrubberContext();
const { series: chartSeries, dataLength } = useCartesianChartContext();
const dataIndex = scrubberPosition ?? dataLength - 1;
const seriesData = chartSeries.find((s) => s.id === seriesId);
const rawValue = seriesData?.data?.[dataIndex];
const formattedValue =
rawValue === null || rawValue === undefined ? '--' : `${Math.round(rawValue)}%`;
return (
{label}
{formattedValue}
);
});
return (
}
legendPosition="top"
series={series}
xAxis={{
data: timeLabels,
}}
yAxis={{
domain: { max: 100, min: 0 },
showGrid: true,
tickLabelFormatter: (value) => `${value}%`,
}}
>
);
}
```
#### Interactive Legend
You can create an interactive legend that the user can use to toggle to emphasize a specific series.
```jsx live
function InteractiveLegend() {
const [emphasizedId, setEmphasizedId] = useState(null);
const months = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
];
const seriesConfig = useMemo(
() => [
{
id: 'revenue',
label: 'Revenue',
data: [120, 150, 180, 165, 190, 210, 240, 220, 260, 280, 310, 350],
baseColor: '--blue',
},
{
id: 'expenses',
label: 'Expenses',
data: [80, 95, 110, 105, 120, 130, 145, 140, 155, 165, 180, 195],
baseColor: '--orange',
},
{
id: 'profit',
label: 'Profit',
data: [40, 55, 70, 60, 70, 80, 95, 80, 105, 115, 130, 155],
baseColor: '--green',
},
],
[],
);
const handleToggle = useCallback((seriesId) => {
setEmphasizedId((prev) => (prev === seriesId ? null : seriesId));
}, []);
const ChipLegendEntry = memo(function ChipLegendEntry({ seriesId, label }) {
const isEmphasized = emphasizedId === seriesId;
const config = seriesConfig.find((s) => s.id === seriesId);
const baseColor = config?.baseColor ?? '--gray';
return (
handleToggle(seriesId)}
style={{
backgroundColor: `rgb(var(${baseColor}10))`,
borderWidth: 0,
color: 'var(--color-fg)',
outlineColor: `rgb(var(${baseColor}50))`,
}}
>
{label}
);
});
const series = useMemo(() => {
return seriesConfig.map((config) => {
const isEmphasized = emphasizedId === config.id;
const isDimmed = emphasizedId !== null && !isEmphasized;
return {
id: config.id,
label: config.label,
data: config.data,
color: `rgb(var(${config.baseColor}40))`,
opacity: isDimmed ? 0.3 : 1,
};
});
}, [emphasizedId, seriesConfig]);
return (
}
legendPosition="top"
series={series}
xAxis={{
data: months,
}}
yAxis={{
domain: { min: 0 },
showGrid: true,
tickLabelFormatter: (value) => `$${value}k`,
}}
/>
);
}
```
## Props
| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `EntryComponent` | `LegendEntryComponent` | No | `DefaultLegendEntry` | Custom component to render each legend entry. |
| `ShapeComponent` | `LegendShapeComponent` | No | `DefaultLegendShape` | Custom component to render the legend shape within each entry. Only used when EntryComponent is not provided or is DefaultLegendEntry. |
| `alignContent` | `ResponsiveProp` | No | `-` | - |
| `alignItems` | `ResponsiveProp` | No | `-` | - |
| `alignSelf` | `ResponsiveProp` | No | `-` | - |
| `as` | `div` | No | `-` | The underlying element or component the polymorphic component will render. Changing as also changes the inherited native props (e.g. href for as=a) and the expected ref type. |
| `aspectRatio` | `inherit \| auto \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `background` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `-` | - |
| `borderBottomLeftRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
| `borderBottomRightRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
| `borderBottomWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
| `borderColor` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `-` | - |
| `borderEndWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
| `borderRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
| `borderStartWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
| `borderTopLeftRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
| `borderTopRightRadius` | `0 \| 100 \| 200 \| 300 \| 400 \| 500 \| 600 \| 700 \| 800 \| 900 \| 1000` | No | `-` | - |
| `borderTopWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
| `borderWidth` | `0 \| 100 \| 200 \| 300 \| 400 \| 500` | No | `-` | - |
| `bordered` | `boolean` | No | `-` | Add a border around all sides of the box. |
| `borderedBottom` | `boolean` | No | `-` | Add a border to the bottom side of the box. |
| `borderedEnd` | `boolean` | No | `-` | Add a border to the trailing side of the box. |
| `borderedHorizontal` | `boolean` | No | `-` | Add a border to the leading and trailing sides of the box. |
| `borderedStart` | `boolean` | No | `-` | Add a border to the leading side of the box. |
| `borderedTop` | `boolean` | No | `-` | Add a border to the top side of the box. |
| `borderedVertical` | `boolean` | No | `-` | Add a border to the top and bottom sides of the box. |
| `bottom` | `ResponsiveProp>` | No | `-` | - |
| `classNames` | `{ root?: string; entry?: string \| undefined; entryShape?: string \| undefined; entryLabel?: string \| undefined; } \| undefined` | No | `-` | Custom class names for the component parts. |
| `color` | `currentColor \| fg \| fgMuted \| fgInverse \| fgPrimary \| fgWarning \| fgPositive \| fgNegative \| bg \| bgAlternate \| bgInverse \| bgOverlay \| bgElevation1 \| bgElevation2 \| bgPrimary \| bgPrimaryWash \| bgSecondary \| bgTertiary \| bgSecondaryWash \| bgNegative \| bgNegativeWash \| bgPositive \| bgPositiveWash \| bgWarning \| bgWarningWash \| bgLine \| bgLineHeavy \| bgLineInverse \| bgLinePrimary \| bgLinePrimarySubtle \| accentSubtleRed \| accentBoldRed \| accentSubtleGreen \| accentBoldGreen \| accentSubtleBlue \| accentBoldBlue \| accentSubtlePurple \| accentBoldPurple \| accentSubtleYellow \| accentBoldYellow \| accentSubtleGray \| accentBoldGray \| transparent` | No | `-` | - |
| `columnGap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
| `dangerouslySetBackground` | `string` | No | `-` | - |
| `display` | `ResponsiveProp` | No | `-` | - |
| `elevation` | `0 \| 1 \| 2` | No | `-` | - |
| `flexBasis` | `ResponsiveProp>` | No | `-` | - |
| `flexDirection` | `ResponsiveProp` | No | `-` | - |
| `flexGrow` | `inherit \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `flexShrink` | `inherit \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `flexWrap` | `ResponsiveProp` | No | `-` | - |
| `font` | `ResponsiveProp` | No | `-` | - |
| `fontFamily` | `ResponsiveProp` | No | `-` | - |
| `fontSize` | `ResponsiveProp` | No | `-` | - |
| `fontWeight` | `ResponsiveProp` | No | `-` | - |
| `gap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
| `grid` | `inherit \| none \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `gridArea` | `inherit \| auto \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `gridAutoColumns` | `ResponsiveProp>` | No | `-` | - |
| `gridAutoFlow` | `inherit \| revert \| row \| column \| -moz-initial \| initial \| revert-layer \| unset \| dense` | No | `-` | - |
| `gridAutoRows` | `ResponsiveProp>` | No | `-` | - |
| `gridColumn` | `inherit \| auto \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `gridColumnEnd` | `inherit \| auto \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `gridColumnStart` | `inherit \| auto \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `gridRow` | `inherit \| auto \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `gridRowEnd` | `inherit \| auto \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `gridRowStart` | `inherit \| auto \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `gridTemplate` | `inherit \| none \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `gridTemplateAreas` | `inherit \| none \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `gridTemplateColumns` | `ResponsiveProp>` | No | `-` | - |
| `gridTemplateRows` | `ResponsiveProp>` | No | `-` | - |
| `height` | `ResponsiveProp>` | No | `-` | - |
| `justifyContent` | `ResponsiveProp` | No | `-` | - |
| `key` | `Key \| null` | No | `-` | - |
| `left` | `ResponsiveProp>` | No | `-` | - |
| `lineHeight` | `ResponsiveProp` | No | `-` | - |
| `margin` | `ResponsiveProp<0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10>` | No | `-` | - |
| `marginBottom` | `ResponsiveProp<0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10>` | No | `-` | - |
| `marginEnd` | `ResponsiveProp<0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10>` | No | `-` | - |
| `marginStart` | `ResponsiveProp<0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10>` | No | `-` | - |
| `marginTop` | `ResponsiveProp<0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10>` | No | `-` | - |
| `marginX` | `ResponsiveProp<0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10>` | No | `-` | - |
| `marginY` | `ResponsiveProp<0 \| -1 \| -2 \| -0.25 \| -0.5 \| -0.75 \| -1.5 \| -3 \| -4 \| -5 \| -6 \| -7 \| -8 \| -9 \| -10>` | No | `-` | - |
| `maxHeight` | `ResponsiveProp>` | No | `-` | - |
| `maxWidth` | `ResponsiveProp>` | No | `-` | - |
| `minHeight` | `ResponsiveProp>` | No | `-` | - |
| `minWidth` | `ResponsiveProp>` | No | `-` | - |
| `onChange` | `FormEventHandler` | No | `-` | - |
| `opacity` | `inherit \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `overflow` | `ResponsiveProp` | No | `-` | - |
| `padding` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
| `paddingBottom` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
| `paddingEnd` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
| `paddingStart` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
| `paddingTop` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
| `paddingX` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
| `paddingY` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
| `pin` | `top \| bottom \| left \| right \| all` | No | `-` | Direction in which to absolutely pin the box. |
| `position` | `ResponsiveProp` | No | `-` | - |
| `ref` | `((instance: HTMLDivElement \| null) => void) \| RefObject \| null` | No | `-` | - |
| `right` | `ResponsiveProp>` | No | `-` | - |
| `rowGap` | `0 \| 1 \| 2 \| 0.25 \| 0.5 \| 0.75 \| 1.5 \| 3 \| 4 \| 5 \| 6 \| 7 \| 8 \| 9 \| 10` | No | `-` | - |
| `seriesIds` | `string[]` | No | `-` | Array of series IDs to display in the legend. By default, all series will be displayed. |
| `style` | `CSSProperties` | No | `-` | - |
| `styles` | `{ root?: CSSProperties; entry?: CSSProperties \| undefined; entryShape?: CSSProperties \| undefined; entryLabel?: CSSProperties \| undefined; } \| undefined` | No | `-` | Custom styles for the component parts. |
| `testID` | `string` | No | `-` | Used to locate this element in unit and end-to-end tests. Under the hood, testID translates to data-testid on Web. On Mobile, testID stays the same - testID |
| `textAlign` | `ResponsiveProp` | No | `-` | - |
| `textDecoration` | `ResponsiveProp` | No | `-` | - |
| `textTransform` | `ResponsiveProp` | No | `-` | - |
| `top` | `ResponsiveProp>` | No | `-` | - |
| `transform` | `inherit \| none \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |
| `userSelect` | `ResponsiveProp` | No | `-` | - |
| `visibility` | `ResponsiveProp` | No | `-` | - |
| `width` | `ResponsiveProp>` | No | `-` | - |
| `zIndex` | `inherit \| auto \| revert \| -moz-initial \| initial \| revert-layer \| unset` | No | `-` | - |