# BarChart A bar chart component for comparing values across categories. Supports horizontal and vertical orientations, stacked bars, and grouped series. ## Import ```tsx import { BarChart } from '@coinbase/cds-web-visualization' ``` ## Examples ### Basic Example Bar charts are a useful component for comparing discrete categories of data. They are helpful for highlighting trends to users or allowing them to compare proportions at a glance. To start, pass in a series of data to the chart. ```jsx live ``` ### Multiple Series You can also provide multiple series of data to the chart. Series will have their bars for each data point rendered side by side. ```jsx live function MonthlyGainsByAsset() { const ThinSolidLine = memo((props: SolidLineProps) => ); const tickFormatter = useCallback( (amount) => new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', }).format(amount), [], ); return ( ); } ``` ### Series Stacking You can also configure stacking for your chart using the `stacked` prop. ```jsx live function MonthlyGainsByAsset() { const ThinSolidLine = memo((props: SolidLineProps) => ); const tickFormatter = useCallback( (amount) => new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', }).format(amount), [], ); return ( ); } ``` You can also configure multiple stacks by setting the `stackId` prop on each series. ```jsx live function MonthlyGainsMultipleStacks() { const ThinSolidLine = memo((props: SolidLineProps) => ); const tickFormatter = useCallback( (amount) => new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', }).format(amount), [], ); return ( ); } ``` #### Stack Gap ```jsx live function MonthlyGainsByAsset() { const ThinSolidLine = memo((props: SolidLineProps) => ); const tickFormatter = useCallback( (amount) => new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', }).format(amount), [], ); return ( ); } ``` ### Border Radius Bars have a default border radius of `100`. You can change this by setting the `borderRadius` prop on the chart. Stacks will only round the top corners of touching bars. ```jsx live { if (value === 'D') { return {value}; } return value; }, }} style={{ margin: '0 auto' }} /> ``` #### Round Baseline You can also round the baseline of the bars by setting the `roundBaseline` prop on the chart. ```jsx live { if (value === 'D') { return {value}; } return value; }, }} style={{ margin: '0 auto' }} /> ``` ### Negative Data ```jsx live function PositiveAndNegativeCashFlow() { const ThinSolidLine = memo((props: SolidLineProps) => ); const categories = Array.from({ length: 31 }, (_, i) => `3/${i + 1}`); const gains = [ 5, 0, 6, 18, 0, 5, 12, 0, 12, 22, 28, 18, 0, 12, 6, 0, 0, 24, 0, 0, 4, 0, 18, 0, 0, 14, 10, 16, 0, 0, 0, ]; const losses = [ -4, 0, -8, -12, -6, 0, 0, 0, -18, 0, -12, 0, -9, -6, 0, 0, 0, 0, -22, -8, 0, 0, -10, -14, 0, 0, 0, 0, 0, -12, -10, ]; const series = [ { id: 'gains', data: gains, color: 'var(--color-fgPositive)' }, { id: 'losses', data: losses, color: 'var(--color-fgNegative)' }, ]; return ( `$${value}M`, }} /> ); } ``` ### Missing Bars You can pass in `null` or `0` values to not render a bar for that data point. ```jsx live `$${value}k`, showGrid: true, showTickMarks: true, showLine: true, tickMarkSize: 1.5, domain: { max: 50 }, }} /> ``` You can also use the `BarStackComponent` prop to render an empty circle for zero values. ```jsx live function MonthlyRewards() { const months = ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']; const currentMonth = 7; const purple = [null, 6, 8, 10, 7, 6, 6, 8, null, null, null, null]; const blue = [null, 10, 12, 11, 10, 9, 10, 11, null, null, null, null]; const cyan = [null, 7, 10, 12, 11, 10, 8, 11, null, null, null, null]; const green = [10, null, null, null, 1, null, null, 6, null, null, null, null]; const series = [ { id: 'purple', data: purple, color: '#b399ff' }, { id: 'blue', data: blue, color: '#4f7cff' }, { id: 'cyan', data: cyan, color: '#00c2df' }, { id: 'green', data: green, color: '#33c481' }, ]; const CustomBarStackComponent = ({ children, ...props }: BarStackComponentProps) => { if (props.height === 0) { const diameter = props.width; return ( ); } return {children}; }; return ( { if (index == currentMonth) { return {months[index]}; } return months[index]; }, categoryPadding: 0.27, }} /> ); }; ``` ### Customization #### Bar Spacing There are two ways to control the spacing between bars. You can set the `barPadding` prop to control the spacing between bars within a series. You can also set the `categoryPadding` prop to control the spacing between stacks of bars. ```jsx live ``` #### Minimum Size To better emphasize small values, you can set the `stackMinSize` or `barMinSize` prop to control the minimum size for entire stacks or individual bar. It is recommended to only use `stackMinSize` for stacked charts and `barMinSize` for non-stacked charts. ##### Minimum Stack Size You can set the `stackMinSize` prop to control the minimum size for entire stacks. This will only apply to stacks that have a value that is not `null` or `0`. It will proportionally scale the values of each bar in the stack to reach the minimum size. ```jsx live ``` ##### Minimum Bar Size You can also set the `barMinSize` prop to control the minimum size for individual bars. This will only apply to bars that have a value that is not `null` or `0`. ```jsx live `$${value}k`, showGrid: true, showTickMarks: true, showLine: true, tickMarkSize: 1.5, domain: { max: 50 }, }} barMinSize={4} /> ``` #### Multiple Y Axes You can render bars from separate y axes in one `BarPlot`, however they aren't able to be stack. ```jsx live `$${value}k`} /> `${value}%`} /> Revenue ($) Profit Margin (%) ``` #### Custom Components ##### Candlesticks You can set the `BarComponent` prop to render a custom component for bars. ```jsx live function Candlesticks() { const infoTextId = useId(); const infoTextRef = React.useRef(null); const selectedIndexRef = React.useRef(null); const stockData = btcCandles.slice(0, 90) .reverse(); const min = Math.min(...stockData.map((data) => parseFloat(data.low))); const ThinSolidLine = memo((props: SolidLineProps) => ); const candlesData = stockData.map((data) => [parseFloat(data.low), parseFloat(data.high)]) as [ number, number, ][]; const CandlestickBarComponent = memo( ({ x, y, width, height, originY, dataX, ...props }) => { const { getYScale } = useCartesianChartContext(); const yScale = getYScale(); const wickX = x + width / 2; const timePeriodValue = stockData[dataX as number]; const open = parseFloat(timePeriodValue.open); const close = parseFloat(timePeriodValue.close); const bullish = open < close; const color = bullish ? 'var(--color-fgPositive)' : 'var(--color-fgNegative)'; const openY = yScale?.(open) ?? 0; const closeY = yScale?.(close) ?? 0; const bodyHeight = Math.abs(openY - closeY); const bodyY = openY < closeY ? openY : closeY; return ( ); }, ); const formatPrice = React.useCallback((price: string) => { return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', }).format(parseFloat(price)); }, []); const formatVolume = React.useCallback((volume: string) => { const volumeInThousands = parseFloat(volume) / 1000; return ( new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 2, }).format(volumeInThousands) + 'k' ); }, []); const formatTime = React.useCallback( (index) => { if (index === null || index === undefined || index >= stockData.length) return ''; const ts = parseInt(stockData[index].start); return new Date(ts * 1000).toLocaleDateString('en-US', { month: 'short', day: 'numeric', }); }, [stockData], ); const updateInfoText = React.useCallback( (index) => { if (!infoTextRef.current) return; const text = index !== null && index !== undefined ? `Open: ${formatPrice(stockData[index].open)}, Close: ${formatPrice( stockData[index].close, )}, Volume: ${formatVolume(stockData[index].volume)}` : formatPrice(stockData[stockData.length - 1].close); infoTextRef.current.textContent = text; selectedIndexRef.current = index; }, [stockData, formatPrice, formatVolume], ); const initialInfo = formatPrice(stockData[stockData.length - 1].close); React.useEffect(() => { updateInfoText(selectedIndexRef.current); }, [stockData, updateInfoText]); return ( {initialInfo} {children}} animate={false} borderRadius={0} height={{ base: 150, tablet: 200, desktop: 250 }} inset={{ top: 8, bottom: 8, left: 0, right: 0 }} onScrubberPositionChange={updateInfoText} series={[ { id: 'stock-prices', data: candlesData, }, ]} xAxis={{ tickLabelFormatter: formatTime, }} yAxis={{ domain: { min }, tickLabelFormatter: formatPrice, width: 92, showGrid: true, GridLineComponent: ThinSolidLine, }} aria-labelledby={infoTextId} > ( )} seriesIds={[]} /> ); }; ``` ##### Outlined Stacks You can set the `BarStackComponent` prop to render a custom component for stacks. ```jsx live function MonthlyRewards() { const CustomBarStackComponent = ({ children, ...props }: BarStackComponentProps) => { return ( <> {children} ); }; return ( { if (value === 'D') { return {value}; } return value; }, }} yAxis={{ range: ({ min, max }) => ({ min, max: max - 4 }) }} style={{ margin: '0 auto' }} /> ); } ``` ## Props | Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | `BarComponent` | `BarComponent` | No | `-` | Component to render the bar. | | `BarStackComponent` | `BarStackComponent` | No | `DefaultBarStack` | Custom component to render the stack container. Can be used to add clip paths, outlines, or other custom styling. | | `accentHeight` | `string \| number` | No | `-` | - | | `accumulate` | `none \| sum` | No | `-` | - | | `additive` | `sum \| replace` | No | `-` | - | | `alignContent` | `ResponsiveProp
` | No | `-` | - | | `alignItems` | `ResponsiveProp
` | No | `-` | - | | `alignSelf` | `ResponsiveProp
` | No | `-` | - | | `alignmentBaseline` | `alphabetic \| hanging \| ideographic \| mathematical \| inherit \| auto \| baseline \| before-edge \| text-before-edge \| middle \| central \| after-edge \| text-after-edge` | No | `-` | - | | `allowReorder` | `no \| yes` | No | `-` | - | | `alphabetic` | `string \| number` | No | `-` | - | | `amplitude` | `string \| number` | No | `-` | - | | `animate` | `boolean` | No | `true` | Whether to animate the chart. | | `arabicForm` | `initial \| medial \| terminal \| isolated` | No | `-` | - | | `as` | `svg` | No | `-` | - | | `ascent` | `string \| number` | No | `-` | - | | `aspectRatio` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - | | `attributeName` | `string` | No | `-` | - | | `attributeType` | `string` | No | `-` | - | | `autoReverse` | `false \| true \| true \| false` | No | `-` | - | | `azimuth` | `string \| number` | 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 | `-` | - | | `barMinSize` | `number` | No | `-` | Minimum size for individual bars in the stack. | | `barPadding` | `number` | No | `0.1` | Padding between bar groups (0-1). | | `baseFrequency` | `string \| number` | No | `-` | - | | `baseProfile` | `string \| number` | No | `-` | - | | `baselineShift` | `string \| number` | No | `-` | - | | `bbox` | `string \| number` | No | `-` | - | | `begin` | `string \| number` | No | `-` | - | | `bias` | `string \| number` | 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` | `((BorderRadius \| { base?: BorderRadius; phone?: BorderRadius \| undefined; tablet?: BorderRadius \| undefined; desktop?: BorderRadius \| undefined; }) & number) \| undefined` | No | `4` | Border radius of the bar. Border radius for the bar. | | `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 | `-` | - | | `by` | `string \| number` | No | `-` | - | | `calcMode` | `string \| number` | No | `-` | - | | `capHeight` | `string \| number` | No | `-` | - | | `className` | `string` | No | `-` | - | | `clip` | `string \| number` | No | `-` | - | | `clipPath` | `string` | No | `-` | - | | `clipPathUnits` | `string \| number` | No | `-` | - | | `clipRule` | `string \| number` | No | `-` | - | | `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 | `-` | - | | `colorInterpolation` | `string \| number` | No | `-` | - | | `colorInterpolationFilters` | `inherit \| auto \| sRGB \| linearRGB` | No | `-` | - | | `colorProfile` | `string \| number` | No | `-` | - | | `colorRendering` | `string \| number` | No | `-` | - | | `columnGap` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - | | `contentScriptType` | `string \| number` | No | `-` | - | | `contentStyleType` | `string \| number` | No | `-` | - | | `crossOrigin` | ` \| anonymous \| use-credentials` | No | `-` | - | | `cursor` | `string \| number` | No | `-` | - | | `cx` | `string \| number` | No | `-` | - | | `cy` | `string \| number` | No | `-` | - | | `d` | `string` | No | `-` | - | | `dangerouslySetBackground` | `string` | No | `-` | - | | `decelerate` | `string \| number` | No | `-` | - | | `descent` | `string \| number` | No | `-` | - | | `diffuseConstant` | `string \| number` | No | `-` | - | | `direction` | `string \| number` | No | `-` | - | | `display` | `ResponsiveProp` | No | `-` | - | | `divisor` | `string \| number` | No | `-` | - | | `dominantBaseline` | `string \| number` | No | `-` | - | | `dur` | `string \| number` | No | `-` | - | | `dx` | `string \| number` | No | `-` | - | | `dy` | `string \| number` | No | `-` | - | | `edgeMode` | `string \| number` | No | `-` | - | | `elevation` | `0 \| 1 \| 2` | No | `-` | - | | `enableBackground` | `string \| number` | No | `-` | - | | `enableScrubbing` | `boolean` | No | `-` | Enables scrubbing interactions. When true, allows scrubbing and makes scrubber components interactive. | | `end` | `string \| number` | No | `-` | - | | `exponent` | `string \| number` | No | `-` | - | | `externalResourcesRequired` | `false \| true \| true \| false` | No | `-` | - | | `fill` | `string` | No | `-` | - | | `fillOpacity` | `number` | No | `-` | Fill opacity for the bar. | | `fillRule` | `inherit \| nonzero \| evenodd` | No | `-` | - | | `filter` | `string` | No | `-` | - | | `filterRes` | `string \| number` | No | `-` | - | | `filterUnits` | `string \| number` | No | `-` | - | | `flexBasis` | `ResponsiveProp>` | No | `-` | - | | `flexDirection` | `ResponsiveProp` | No | `-` | - | | `flexGrow` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset` | No | `-` | - | | `flexShrink` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset` | No | `-` | - | | `flexWrap` | `ResponsiveProp` | No | `-` | - | | `floodColor` | `string \| number` | No | `-` | - | | `floodOpacity` | `string \| number` | No | `-` | - | | `focusable` | `auto \| Booleanish` | No | `-` | - | | `font` | `ResponsiveProp` | No | `-` | - | | `fontFamily` | `ResponsiveProp` | No | `-` | - | | `fontSize` | `ResponsiveProp` | No | `-` | - | | `fontSizeAdjust` | `string \| number` | No | `-` | - | | `fontStretch` | `string \| number` | No | `-` | - | | `fontStyle` | `string \| number` | No | `-` | - | | `fontVariant` | `string \| number` | No | `-` | - | | `fontWeight` | `ResponsiveProp` | No | `-` | - | | `format` | `string \| number` | No | `-` | - | | `fr` | `string \| number` | No | `-` | - | | `from` | `string \| number` | No | `-` | - | | `fx` | `string \| number` | No | `-` | - | | `fy` | `string \| number` | No | `-` | - | | `g1` | `string \| number` | No | `-` | - | | `g2` | `string \| number` | No | `-` | - | | `gap` | `0 \| 5 \| 10 \| 0.25 \| 0.5 \| 0.75 \| 1 \| 1.5 \| 2 \| 3 \| 4 \| 6 \| 7 \| 8 \| 9` | No | `-` | - | | `glyphName` | `string \| number` | No | `-` | - | | `glyphOrientationHorizontal` | `string \| number` | No | `-` | - | | `glyphOrientationVertical` | `string \| number` | No | `-` | - | | `glyphRef` | `string \| number` | No | `-` | - | | `gradientTransform` | `string` | No | `-` | - | | `gradientUnits` | `string` | No | `-` | - | | `grid` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| none` | No | `-` | - | | `gridArea` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - | | `gridAutoColumns` | `ResponsiveProp>` | No | `-` | - | | `gridAutoFlow` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| row \| column \| dense` | No | `-` | - | | `gridAutoRows` | `ResponsiveProp>` | No | `-` | - | | `gridColumn` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - | | `gridColumnEnd` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - | | `gridColumnStart` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - | | `gridRow` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - | | `gridRowEnd` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - | | `gridRowStart` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| auto` | No | `-` | - | | `gridTemplate` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| none` | No | `-` | - | | `gridTemplateAreas` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset \| none` | No | `-` | - | | `gridTemplateColumns` | `ResponsiveProp>` | No | `-` | - | | `gridTemplateRows` | `ResponsiveProp>` | No | `-` | - | | `hanging` | `string \| number` | No | `-` | - | | `height` | `ResponsiveProp>` | No | `-` | - | | `horizAdvX` | `string \| number` | No | `-` | - | | `horizOriginX` | `string \| number` | No | `-` | - | | `href` | `string` | No | `-` | - | | `id` | `string` | No | `-` | - | | `ideographic` | `string \| number` | No | `-` | - | | `imageRendering` | `string \| number` | No | `-` | - | | `in` | `string` | No | `-` | - | | `in2` | `string \| number` | No | `-` | - | | `inset` | `number \| Partial` | No | `-` | Inset around the entire chart (outside the axes). | | `intercept` | `string \| number` | No | `-` | - | | `justifyContent` | `ResponsiveProp` | No | `-` | - | | `k` | `string \| number` | No | `-` | - | | `k1` | `string \| number` | No | `-` | - | | `k2` | `string \| number` | No | `-` | - | | `k3` | `string \| number` | No | `-` | - | | `k4` | `string \| number` | No | `-` | - | | `kernelMatrix` | `string \| number` | No | `-` | - | | `kernelUnitLength` | `string \| number` | No | `-` | - | | `kerning` | `string \| number` | No | `-` | - | | `key` | `Key \| null` | No | `-` | - | | `keyPoints` | `string \| number` | No | `-` | - | | `keySplines` | `string \| number` | No | `-` | - | | `keyTimes` | `string \| number` | No | `-` | - | | `lang` | `string` | No | `-` | - | | `left` | `ResponsiveProp>` | No | `-` | - | | `lengthAdjust` | `string \| number` | No | `-` | - | | `letterSpacing` | `string \| number` | No | `-` | - | | `lightingColor` | `string \| number` | No | `-` | - | | `limitingConeAngle` | `string \| number` | No | `-` | - | | `lineHeight` | `ResponsiveProp` | No | `-` | - | | `local` | `string \| number` | No | `-` | - | | `margin` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - | | `marginBottom` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - | | `marginEnd` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - | | `marginStart` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - | | `marginTop` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - | | `marginX` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - | | `marginY` | `ResponsiveProp<0 \| -5 \| -10 \| -0.25 \| -0.5 \| -0.75 \| -1 \| -1.5 \| -2 \| -3 \| -4 \| -6 \| -7 \| -8 \| -9>` | No | `-` | - | | `markerEnd` | `string` | No | `-` | - | | `markerHeight` | `string \| number` | No | `-` | - | | `markerMid` | `string` | No | `-` | - | | `markerStart` | `string` | No | `-` | - | | `markerUnits` | `string \| number` | No | `-` | - | | `markerWidth` | `string \| number` | No | `-` | - | | `mask` | `string` | No | `-` | - | | `maskContentUnits` | `string \| number` | No | `-` | - | | `maskUnits` | `string \| number` | No | `-` | - | | `mathematical` | `string \| number` | No | `-` | - | | `max` | `string \| number` | No | `-` | - | | `maxHeight` | `ResponsiveProp>` | No | `-` | - | | `maxWidth` | `ResponsiveProp>` | No | `-` | - | | `media` | `string` | No | `-` | - | | `method` | `string` | No | `-` | - | | `min` | `string \| number` | No | `-` | - | | `minHeight` | `ResponsiveProp>` | No | `-` | - | | `minWidth` | `ResponsiveProp>` | No | `-` | - | | `mode` | `string \| number` | No | `-` | - | | `name` | `string` | No | `-` | - | | `numOctaves` | `string \| number` | No | `-` | - | | `offset` | `string \| number` | No | `-` | - | | `onChange` | `FormEventHandler` | No | `-` | - | | `onScrubberPositionChange` | `((index: number) => void) \| undefined` | No | `-` | Callback fired when the scrubber position changes. Receives the dataIndex of the scrubber or undefined when not scrubbing. | | `opacity` | `-moz-initial \| inherit \| initial \| revert \| revert-layer \| unset` | No | `-` | - | | `operator` | `string \| number` | No | `-` | - | | `order` | `string \| number` | No | `-` | - | | `orient` | `string \| number` | No | `-` | - | | `orientation` | `string \| number` | No | `-` | - | | `origin` | `string \| number` | No | `-` | - | | `overflow` | `ResponsiveProp