A button that toggles between selected and unselected states.
import { ToggleButton } from '@backstage/ui';
import { useState } from 'react';
const [isSelected, setIsSelected] = useState(false);
<ToggleButton isSelected={isSelected} onChange={setIsSelected}>
Toggle
</ToggleButton>| Prop | Type | Default | Description |
|---|---|---|---|
| isSelected | boolean | - | Whether the button is selected. Controls the visual pressed state. |
| defaultSelected | boolean | - | The default selected state (uncontrolled). |
| onChange | (isSelected: boolean) => void | - | Handler called when the button is pressed. |
| size | smallmedium | small | Visual weight. Use small for compact layouts, medium for emphasis. |
| iconStart | ReactElement | - | Icon displayed before the button text. Sized to match button. |
| iconEnd | ReactElement | - | Icon displayed after the button text. Sized to match button. |
| isDisabled | boolean | false | Prevents interaction and dims the button. |
| onSurface | Surface | - | Surface the button is placed on. Defaults to context surface. |
| children | ReactNode(renderProps) => ReactNode | - | Button label. Can be a function for dynamic content. |
| className | string | - | Additional CSS class name for custom styling. |
Inherits all React Aria ToggleButton props.
const [isSelected, setIsSelected] = useState(false);
<ToggleButton
isSelected={isSelected}
onChange={setIsSelected}
iconStart={<RiCheckLine />}
>
With Icon
</ToggleButton><Flex gap="2">
<ToggleButton isDisabled isSelected={false} onChange={() => {}}>
Disabled Off
</ToggleButton>
<ToggleButton isDisabled isSelected={true} onChange={() => {}}>
Disabled On
</ToggleButton>
</Flex>Our theming system is based on a mix between CSS classes, CSS variables and data attributes. If you want to customise this component, you can use one of these class names below.
bui-ToggleButtonbui-ToggleButtonContent