Badge
Badges are used for showing a small amount of color-categorized metadata, ideal for getting a user's attention.
| install | yarn add @react-spectrum/badge |
|---|---|
| version | 3.0.0-alpha.1 |
| usage | import {Badge} from '@react-spectrum/badge' |
Example#
<Badge variant="positive">Licensed</Badge>
<Badge variant="positive">Licensed</Badge>
<Badge variant="positive">
Licensed
</Badge>
Content#
Badges can hav a label, an icon, or both. An icon is provided by passing an icon component as a child to the Badge. A visible label can be provided by passing a string or a Text component as a child, depending on whether the Badge has an accompanying icon.
import {Text} from '@react-spectrum/text';
import CheckmarkCircle from '@spectrum-icons/workflow/CheckmarkCircle';
<Badge variant="positive">
<CheckmarkCircle />
<Text>Icon + Label</Text>
</Badge>
import {Text} from '@react-spectrum/text';
import CheckmarkCircle from '@spectrum-icons/workflow/CheckmarkCircle';
<Badge variant="positive">
<CheckmarkCircle />
<Text>Icon + Label</Text>
</Badge>
import {Text} from '@react-spectrum/text';
import CheckmarkCircle from '@spectrum-icons/workflow/CheckmarkCircle';
<Badge variant="positive">
<CheckmarkCircle />
<Text>
Icon + Label
</Text>
</Badge>
Accessibility#
If a visible label isn't specified, an aria-label must be provided for accessibility.
Internationalization#
To internationalize a Badge, a localized string should be set as the child content of the Badge. For languages that are read right-to-left (e.g. Hebrew and Arabic), the Badge is automatically flipped.
Props#
| Name | Type | Default | Description |
children | ReactNode | — | The content to display in the badge. |
variant | 'neutral'
| 'info'
| 'positive'
| 'negative'
| 'indigo'
| 'yellow'
| 'magenta'
| 'fuchsia'
| 'purple'
| 'seafoam' | — | The variant changes the background color of the badge. When badge has a semantic meaning, they should use the variant for semantic colors. |
isDisabled | boolean | — | Whether the badge is disabled. |
Layout
| Name | Type | Default | Description |
flex | Responsive<string
| number
| boolean> | — | When used in a flex layout, specifies how the element will grow or shrink to fit the space available. See MDN. |
flexGrow | Responsive<number> | — | When used in a flex layout, specifies how the element will grow to fit the space available. See MDN. |
flexShrink | Responsive<number> | — | When used in a flex layout, specifies how the element will shrink to fit the space available. See MDN. |
flexBasis | Responsive<number | string> | — | When used in a flex layout, specifies the initial main size of the element. See MDN. |
alignSelf | Responsive<'auto'
| 'normal'
| 'start'
| 'end'
| 'center'
| 'flex-start'
| 'flex-end'
| 'self-start'
| 'self-end'
| 'stretch'> | — | Overrides the alignItems property of a flex or grid container. See MDN. |
justifySelf | Responsive<'auto'
| 'normal'
| 'start'
| 'end'
| 'flex-start'
| 'flex-end'
| 'self-start'
| 'self-end'
| 'center'
| 'left'
| 'right'
| 'stretch'> | — | Specifies how the element is justified inside a flex or grid container. See MDN. |
order | Responsive<number> | — | The layout order for the element within a flex or grid container. See MDN. |
gridArea | Responsive<string> | — | When used in a grid layout, specifies the named grid area that the element should be placed in within the grid. See MDN. |
gridColumn | Responsive<string> | — | When used in a grid layout, specifies the column the element should be placed in within the grid. See MDN. |
gridRow | Responsive<string> | — | When used in a grid layout, specifies the row the element should be placed in within the grid. See MDN. |
gridColumnStart | Responsive<string> | — | When used in a grid layout, specifies the starting column to span within the grid. See MDN. |
gridColumnEnd | Responsive<string> | — | When used in a grid layout, specifies the ending column to span within the grid. See MDN. |
gridRowStart | Responsive<string> | — | When used in a grid layout, specifies the starting row to span within the grid. See MDN. |
gridRowEnd | Responsive<string> | — | When used in a grid layout, specifies the ending row to span within the grid. See MDN. |
Spacing
| Name | Type | Default | Description |
margin | Responsive<DimensionValue> | — | The margin for all four sides of the element. See MDN. |
marginTop | Responsive<DimensionValue> | — | The margin for the top side of the element. See MDN. |
marginBottom | Responsive<DimensionValue> | — | The margin for the bottom side of the element. See MDN. |
marginStart | Responsive<DimensionValue> | — | The margin for the logical start side of the element, depending on layout direction. See MDN. |
marginEnd | Responsive<DimensionValue> | — | The margin for the logical end side of an element, depending on layout direction. See MDN. |
marginX | Responsive<DimensionValue> | — | The margin for both the left and right sides of the element. See MDN. |
marginY | Responsive<DimensionValue> | — | The margin for both the top and bottom sides of the element. See MDN. |
Sizing
| Name | Type | Default | Description |
width | Responsive<DimensionValue> | — | The width of the element. See MDN. |
minWidth | Responsive<DimensionValue> | — | The minimum width of the element. See MDN. |
maxWidth | Responsive<DimensionValue> | — | The maximum width of the element. See MDN. |
height | Responsive<DimensionValue> | — | The height of the element. See MDN. |
minHeight | Responsive<DimensionValue> | — | The minimum height of the element. See MDN. |
maxHeight | Responsive<DimensionValue> | — | The maximum height of the element. See MDN. |
Positioning
| Name | Type | Default | Description |
position | Responsive<'static'
| 'relative'
| 'absolute'
| 'fixed'
| 'sticky'> | — | Specifies how the element is positioned. See MDN. |
top | Responsive<DimensionValue> | — | The top position for the element. See MDN. |
bottom | Responsive<DimensionValue> | — | The bottom position for the element. See MDN. |
left | Responsive<DimensionValue> | — | The left position for the element. See MDN. Consider using start instead for RTL support. |
right | Responsive<DimensionValue> | — | The right position for the element. See MDN. Consider using start instead for RTL support. |
start | Responsive<DimensionValue> | — | The logical start position for the element, depending on layout direction. See MDN. |
end | Responsive<DimensionValue> | — | The logical end position for the element, depending on layout direction. See MDN. |
zIndex | Responsive<number> | — | The stacking order for the element. See MDN. |
isHidden | Responsive<boolean> | — | Hides the element. |
Accessibility
| Name | Type | Default | Description |
id | string | — | The element's unique identifier. See MDN. |
aria-label | string | — | Defines a string value that labels the current element. |
aria-labelledby | string | — | Identifies the element (or elements) that labels the current element. |
aria-describedby | string | — | Identifies the element (or elements) that describes the object. |
aria-details | string | — | Identifies the element (or elements) that provide a detailed, extended description for the object. |
Advanced
| Name | Type | Default | Description |
UNSAFE_className | string | — | Sets the CSS className for the element. Only use as a last resort. Use style props instead. |
UNSAFE_style | CSSProperties | — | Sets inline style for the element. Only use as a last resort. Use style props instead. |
Visual options#
Variant#
When badges have a semantic meaning, they should use semantic colors. Use the appropriate color to indicate status as follows.
<Badge variant="positive">
Green: Approved, Complete, Success, New, Purchased, Licensed
</Badge>
<Badge variant="info">Blue: Active, In Use, Live, Published</Badge>
<Badge variant="negative">Red: Error, Alert, Rejected, Failed</Badge>
<Badge variant="neutral">
Gray: Archived, Deleted, Paused, Draft, Not Started, Ended
</Badge>
<Badge variant="positive">
Green: Approved, Complete, Success, New, Purchased,
Licensed
</Badge>
<Badge variant="info">
Blue: Active, In Use, Live, Published
</Badge>
<Badge variant="negative">
Red: Error, Alert, Rejected, Failed
</Badge>
<Badge variant="neutral">
Gray: Archived, Deleted, Paused, Draft, Not Started,
Ended
</Badge>
<Badge variant="positive">
Green: Approved,
Complete, Success,
New, Purchased,
Licensed
</Badge>
<Badge variant="info">
Blue: Active, In Use,
Live, Published
</Badge>
<Badge variant="negative">
Red: Error, Alert,
Rejected, Failed
</Badge>
<Badge variant="neutral">
Gray: Archived,
Deleted, Paused,
Draft, Not Started,
Ended
</Badge>
When status lights are used to color code categories, they use label colors. The ideal usage for these is when there are 8 or fewer categories being color coded.
<Badge variant="seafoam">Seafoam</Badge>
<Badge variant="indigo">Indigo</Badge>
<Badge variant="purple">Purple</Badge>
<Badge variant="fuchsia">Fuchsia</Badge>
<Badge variant="magenta">Magenta</Badge>
<Badge variant="yellow">Yellow</Badge>
<Badge variant="seafoam">Seafoam</Badge>
<Badge variant="indigo">Indigo</Badge>
<Badge variant="purple">Purple</Badge>
<Badge variant="fuchsia">Fuchsia</Badge>
<Badge variant="magenta">Magenta</Badge>
<Badge variant="yellow">Yellow</Badge>
<Badge variant="seafoam">
Seafoam
</Badge>
<Badge variant="indigo">
Indigo
</Badge>
<Badge variant="purple">
Purple
</Badge>
<Badge variant="fuchsia">
Fuchsia
</Badge>
<Badge variant="magenta">
Magenta
</Badge>
<Badge variant="yellow">
Yellow
</Badge>
Disabled#
Use the isDisabled prop to match the state of a containing element.
Note that the isDisabled prop alters the visual style of the Badge,
but does not convey any state information to assistive technology.
<Badge variant="yellow" isDisabled>Yellow</Badge>
<Badge variant="yellow" isDisabled>Yellow</Badge>
<Badge
variant="yellow"
isDisabled
>
Yellow
</Badge>