# Coverage

Every component against every value that works on it, built from the manifest rather than counted by hand.

168 combinations across 32 components. Every one of them is on the
component's own page behind the value switcher, and this is the shape of the whole set: which
presets reach which hosts, and where a pair composes.

A filled cell means the value is offered on that component, and every filled cell is a link to
it running there. Two things have to hold: the manifest's `hosts` list has to allow the preset
on that host, and a layout preset has to be one the component was built for. See
[collapse](/docs/presets/collapse) for the second half of that.

| Component | Host | fade | scale-fade | slide-up | collapse | fade collapse | fade slide-up | scale-fade slide-up |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [Dialog](/radix/dialog.md) | Radix UI | yes | **yes** | yes |  |  | yes | yes |
| [Alert dialog](/radix/alert-dialog.md) | Radix UI | yes | **yes** | yes |  |  | yes | yes |
| [Popover](/radix/popover.md) | Radix UI | yes | **yes** | yes |  |  | yes | yes |
| [Dropdown menu](/radix/dropdown-menu.md) | Radix UI | yes | **yes** | yes |  |  | yes | yes |
| [Context menu](/radix/context-menu.md) | Radix UI | yes | **yes** | yes |  |  | yes | yes |
| [Menubar](/radix/menubar.md) | Radix UI | yes | **yes** | yes |  |  | yes | yes |
| [Hover card](/radix/hover-card.md) | Radix UI | yes | **yes** | yes |  |  | yes | yes |
| [Tooltip](/radix/tooltip.md) | Radix UI | yes | **yes** | yes |  |  | yes | yes |
| [Select](/radix/select.md) | Radix UI | yes | **yes** | yes |  |  | yes | yes |
| [Navigation menu](/radix/navigation-menu.md) | Radix UI | **yes** | yes | yes |  |  | yes | yes |
| [Toast](/radix/toast.md) | Radix UI | yes | yes | **yes** |  |  | yes | yes |
| [Collapsible](/radix/collapsible.md) | Radix UI | yes | yes | yes | **yes** | yes | yes | yes |
| [Accordion](/radix/accordion.md) | Radix UI | yes | yes | yes | **yes** | yes | yes | yes |
| [Tabs](/radix/tabs.md) | Radix UI | **yes** | yes | yes |  |  | yes | yes |
| [Scroll area](/radix/scroll-area.md) | Radix UI | **yes** | yes | yes |  |  | yes | yes |
| [Dialog](/base-ui/dialog.md) | Base UI | yes | **yes** | yes |  |  | yes | yes |
| [Alert dialog](/base-ui/alert-dialog.md) | Base UI | yes | **yes** | yes |  |  | yes | yes |
| [Popover](/base-ui/popover.md) | Base UI | yes | **yes** | yes |  |  | yes | yes |
| [Menu](/base-ui/menu.md) | Base UI | yes | **yes** | yes |  |  | yes | yes |
| [Context menu](/base-ui/context-menu.md) | Base UI | yes | **yes** | yes |  |  | yes | yes |
| [Preview card](/base-ui/preview-card.md) | Base UI | yes | **yes** | yes |  |  | yes | yes |
| [Tooltip](/base-ui/tooltip.md) | Base UI | yes | **yes** | yes |  |  | yes | yes |
| [Select](/base-ui/select.md) | Base UI | yes | **yes** | yes |  |  | yes | yes |
| [Navigation menu](/base-ui/navigation-menu.md) | Base UI | **yes** | yes | yes |  |  | yes | yes |
| [Toast](/base-ui/toast.md) | Base UI | yes | yes | **yes** |  |  | yes | yes |
| [Collapsible](/base-ui/collapsible.md) | Base UI | yes | yes | yes | **yes** | yes | yes | yes |
| [Accordion](/base-ui/accordion.md) | Base UI | yes | yes | yes | **yes** | yes | yes | yes |
| [Tabs](/base-ui/tabs.md) | Base UI | **yes** | yes | yes |  |  | yes | yes |
| [Scroll area](/base-ui/scroll-area.md) | Base UI | **yes** | yes | yes |  |  | yes | yes |
| [Native dialog](/native/dialog.md) | No library | yes | **yes** | yes |  |  | yes | yes |
| [Native popover](/native/popover.md) | No library | yes | **yes** | yes |  |  | yes | yes |
| [Plain [hidden]](/native/hidden.md) | No library | yes | **yes** | yes |  |  | yes | yes |

## What the empty cells are

56 of the 224 cells are empty, and every one of them sits in a `collapse` column.
That preset animates a panel between zero and its natural height, which is a claim about the
component rather than about the host, so it is offered on the four components built for it and
nowhere else. Nothing else in the vocabulary is restricted at all.

Being valid on a host is not the same as being right on a component, and the manifest's
`hosts` list only knows the first. `collapse` on a dialog passes that test and still looks
broken: the preset takes a single element child, a dialog has three plus its own padding, so
the grid collapses the title and leaves the description and the buttons at full height.

A conflicting pair cannot show up as an empty cell, because it never becomes a column. The
columns are the 7 values the manifest declares, which is every preset plus only the
pairs it says compose, so `collapse scale-fade` is absent from the table rather than present
and blank.

The two overlay presets and the slide reach everything. That is the honest shape of this
library: what limits it is the size of its vocabulary rather than how far the vocabulary
reaches.
