Renders a widget based on the WAI-ARIA composite
role, which provides a single tab stop on the page and arrow key navigation
through the focusable descendants.
@example
Import
import { Composite } from '@wordpress/components';
Props
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
focusLoop | unknown | false | ||
focusWrap | unknown | false | ||
focusShift | unknown | false | ||
virtualFocus | unknown | false | ||
orientation | unknown | 'both' | ||
rtl | unknown | isRTL() | ||
disabled | unknown | false |
Examples
Default
const Default = () => <Composite>(<>
<Composite.Item>Item one</Composite.Item>
<Composite.Item>Item two</Composite.Item>
<Composite.Item>Item three</Composite.Item>
</>)</Composite>;
Groups
const Groups = () => <Composite>(<>
<Composite.Group>
<Composite.GroupLabel>Group one</Composite.GroupLabel>
<Composite.Item>Item 1.1</Composite.Item>
<Composite.Item>Item 1.2</Composite.Item>
</Composite.Group>
<Composite.Group>
<Composite.GroupLabel>Group two</Composite.GroupLabel>
<Composite.Item>Item 2.1</Composite.Item>
<Composite.Item>Item 2.1</Composite.Item>
</Composite.Group>
</>)</Composite>;
Grid
const Grid = () => <Composite role="grid" aria-label="Composite">(<>
<Composite.Row role="row">
<Composite.Item role="gridcell">Item A1</Composite.Item>
<Composite.Item role="gridcell">Item A2</Composite.Item>
<Composite.Item role="gridcell">Item A3</Composite.Item>
</Composite.Row>
<Composite.Row role="row">
<Composite.Item role="gridcell">Item B1</Composite.Item>
<Composite.Item role="gridcell">Item B2</Composite.Item>
<Composite.Item role="gridcell">Item B3</Composite.Item>
</Composite.Row>
<Composite.Row role="row">
<Composite.Item role="gridcell">Item C1</Composite.Item>
<Composite.Item role="gridcell">Item C2</Composite.Item>
<Composite.Item role="gridcell">Item C3</Composite.Item>
</Composite.Row>
</>)</Composite>;
Hover
const Hover = () => <Composite>(<>
<Composite.Hover render={ <Composite.Item /> }>
Hover item one
</Composite.Hover>
<Composite.Hover render={ <Composite.Item /> }>
Hover item two
</Composite.Hover>
<Composite.Hover render={ <Composite.Item /> }>
Hover item three
</Composite.Hover>
</>)</Composite>;
Typeahead
const Typeahead = () => <Composite render={<Composite.Typeahead />}>(<>
<Composite.Item>Apple</Composite.Item>
<Composite.Item>Banana</Composite.Item>
<Composite.Item>Peach</Composite.Item>
</>)</Composite>;
With Slot Fill
const WithSlotFill = () => <Composite>(<>
<Composite.Item>Item one (direct child)</Composite.Item>
<Slot />
<Composite.Item>Item four (direct child)</Composite.Item>
</>)</Composite>;
With Tooltips
Combining the Tooltip and Composite component has a few caveats. And while there are a few ways to compose these two components, our recommendation is to render Composite.Item as a child of Tooltip. jsx // 🔴 Does not work </Tooltip>
const WithTooltips = () => <Composite>(<>
<Tooltip text="Tooltip one">
<Composite.Item>Item one</Composite.Item>
</Tooltip>
<Tooltip text="Tooltip two">
<Composite.Item>Item two</Composite.Item>
</Tooltip>
<Tooltip text="Tooltip three">
<Composite.Item>Item three</Composite.Item>
</Tooltip>
</>)</Composite>;