RadixUI Primitives Cheatsheet
Table of Contents
- 1. Accordion
- 2. AlertDialog
- 3. AspectRatio
- 4. Avatar
- 5. Checkbox
- 6. Collapsible
- 7. ContextMenu
- 8. Dialog
- 9. DropdownMenu
- 10. HoverCard
- 11. Label
- 12. NavigationMenu
- 13. Popover
- 14. Progress
- 15. RadioGroup
- 16. ScrollArea
- 17. Select
- 18. Separator
- 19. Slider
- 20. Switch
- 21. Tabs
- 22. Toast
- 23. Toggle
- 24. ToggleGroup
- 25. Toolbar
- 26. Tooltip
Taken from: https://github.com/tone-row/radix-primitives-cheatsheet
1. Accordion
https://www.radix-ui.com/docs/primitives/components/accordion
A vertically stacked set of interactive headings that each reveal an associated section of content.
Features
- Full keyboard navigation.
- Can expand one or multiple items.
- Can be controlled or uncontrolled.
export default function App() {
return (
<Accordion.Root type="single" defaultValue="option-2">
<Accordion.Item value="option-1">
<Accordion.Header asChild>
<Accordion.Trigger>Option 1</Accordion.Trigger>
</Accordion.Header>
<Accordion.Content>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quod
voluptates ea aspernatur! Nesciunt culpa officiis, assumenda sequi,
odit debitis, eos natus minima doloremque nemo vel sunt iste id at
cupiditate.
</Accordion.Content>
</Accordion.Item>
<Accordion.Item value="option-2">
<Accordion.Header asChild>
<Accordion.Trigger>Option 2</Accordion.Trigger>
</Accordion.Header>
<Accordion.Content>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quod
voluptates ea aspernatur! Nesciunt culpa officiis, assumenda sequi,
odit debitis, eos natus minima doloremque nemo vel sunt iste id at
cupiditate.
</Accordion.Content>
</Accordion.Item>
</Accordion.Root>
);
}
2. AlertDialog
https://www.radix-ui.com/docs/primitives/components/alert-dialog
A modal dialog that interrupts the user with important content and expects a response.
Features
- Focus is automatically trapped.
- Can be controlled or uncontrolled.
- Manages screen reader announcements with Title and Description components.
- Esc closes the component automatically.
import * as AlertDialog from "@radix-ui/react-alert-dialog";
export default function App() {
return (
<AlertDialog.Root>
<AlertDialog.Trigger>Click Me</AlertDialog.Trigger>
<AlertDialog.Portal>
<AlertDialog.Overlay
style={{
position: "fixed",
top: 0,
left: 0,
right: 0,
bottom: 0,
background: "rgba(0, 0, 0, 0.5)",
}}
/>
<AlertDialog.Content
style={{
position: "fixed",
top: "50%",
left: "50%",
transform: "translate(-50%, -50%)",
background: "white",
}}
>
<AlertDialog.Title>Hello World</AlertDialog.Title>
<AlertDialog.Description>
Lorem ipsum dolor sit amet consectetur, adipisicing elit. In
exercitationem animi qui laudantium cum accusamus nulla nostrum.
Quisquam natus voluptatibus rem laudantium accusamus, magnam atque
quasi sunt officia quaerat ullam!
</AlertDialog.Description>
<AlertDialog.Cancel>Cancel</AlertDialog.Cancel>
<AlertDialog.Action>OK</AlertDialog.Action>
</AlertDialog.Content>
</AlertDialog.Portal>
</AlertDialog.Root>
);
}
3. AspectRatio
https://www.radix-ui.com/docs/primitives/components/aspect-ratio
Displays content within a desired ratio.
Features
- Accepts any custom ratio.
import * as AspectRatio from "@radix-ui/react-aspect-ratio";
export default function App() {
return (
<div style={{ width: "300px" }}>
<AspectRatio.Root ratio={4 / 3} asChild>
<img
src="http://placekitten.com/400/400"
alt="Kitten"
style={{ width: "100%", height: "100%", objectFit: "cover" }}
/>
</AspectRatio.Root>
</div>
);
}
4. Avatar
https://www.radix-ui.com/docs/primitives/components/avatar
An image element with a fallback for representing the user.
Features
- Automatic and manual control over when the image renders.
- Fallback part accepts any children.
- Optionally delay fallback rendering to avoid content flashing.
import * as Avatar from "@radix-ui/react-avatar";
export default function App() {
return (
<Avatar.Root>
<Avatar.Image
src="http://placekitten.com/100/100"
style={{ borderRadius: "50%" }}
/>
<Avatar.Fallback>Kitten</Avatar.Fallback>
</Avatar.Root>
);
}
5. Checkbox
https://www.radix-ui.com/docs/primitives/components/checkbox
A control that allows the user to toggle between checked and not checked.
Features
- Supports indeterminate state.
- Full keyboard navigation.
- Can be controlled or uncontrolled.
import * as Checkbox from "@radix-ui/react-checkbox";
export default function App() {
return (
<Checkbox.Root>
<Checkbox.Indicator
style={{
width: 10,
height: 10,
backgroundColor: "black",
display: "inline-block",
}}
/>
Checkbox Item
</Checkbox.Root>
);
}
6. Collapsible
https://www.radix-ui.com/docs/primitives/components/collapsible
An interactive component which expands/collapses a panel.
Features
- Full keyboard navigation.
- Can be controlled or uncontrolled.
import * as Collapsible from "@radix-ui/react-collapsible";
export default function App() {
return (
<Collapsible.Root>
<Collapsible.Trigger>Collapsible Trigger</Collapsible.Trigger>
<Collapsible.Content>
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Sequi
temporibus, magni enim aspernatur repudiandae consequatur recusandae
illo labore deleniti a necessitatibus aliquam ipsum. Molestias
consequatur ut maiores veritatis. Voluptatum, optio.
</Collapsible.Content>
</Collapsible.Root>
);
}
7. ContextMenu
https://www.radix-ui.com/docs/primitives/components/context-menu
Displays a menu located at the pointer, triggered by a right-click or a long-press.
Features
- Supports submenus with configurable reading direction.
- Supports items, labels, groups of items.
- Supports checkable items (single or multiple).
- Supports modal and non-modal modes.
- Customize side, alignment, offsets, collision handling.
- Focus is fully managed.
- Full keyboard navigation.
- Typeahead support.
- Dismissing and layering behavior is highly customizable.
- Triggers with a long-press on touch devices
import * as ContextMenu from "@radix-ui/react-context-menu";
export default function App() {
return (
<ContextMenu.Root>
<ContextMenu.Trigger>
Right-click this text to open a Context Menu
</ContextMenu.Trigger>
<ContextMenu.Content style={{ backgroundColor: "white" }}>
<ContextMenu.Label>Items Label</ContextMenu.Label>
<ContextMenu.Item>Item One</ContextMenu.Item>
<ContextMenu.Item>Item Two</ContextMenu.Item>
<ContextMenu.Item>Item Three</ContextMenu.Item>
<ContextMenu.Separator
style={{ height: "1px", backgroundColor: "black" }}
/>
<ContextMenu.Label>Items Label</ContextMenu.Label>
<ContextMenu.Item>Item Four</ContextMenu.Item>
<ContextMenu.Item>Item Five</ContextMenu.Item>
<ContextMenu.Item>Item Six</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Root>
);
}
8. Dialog
https://www.radix-ui.com/docs/primitives/components/dialog
A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.
Features
- Supports modal and non-modal modes.
- Focus is automatically trapped when modal.
- Can be controlled or uncontrolled.
- Manages screen reader announcements with Title and Description components.
- Esc closes the component automatically.
import * as Dialog from "@radix-ui/react-dialog";
export default function App() {
return (
<Dialog.Root>
<Dialog.Trigger>Open a Dialog</Dialog.Trigger>
<Dialog.Portal>
<Dialog.Overlay
style={{
position: "fixed",
top: 0,
left: 0,
right: 0,
bottom: 0,
background: "rgba(0, 0, 0, 0.5)",
}}
/>
<Dialog.Content
style={{
position: "fixed",
top: "50%",
left: "50%",
transform: "translate(-50%, -50%)",
background: "white",
}}
>
<Dialog.Title>Dialog Title</Dialog.Title>
<Dialog.Description>Dialog Description</Dialog.Description>
<Dialog.Close>Close</Dialog.Close>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
);
}
9. DropdownMenu
https://www.radix-ui.com/docs/primitives/components/dropdown-menu
Displays a menu to the user—such as a set of actions or functions—triggered by a button.
Features
- Can be controlled or uncontrolled.
- Supports submenus with configurable reading direction.
- Supports items, labels, groups of items.
- Supports checkable items (single or multiple).
- Supports modal and non-modal modes.
- Customize side, alignment, offsets, collision handling.
- Optionally render a pointing arrow.
- Focus is fully managed.
- Full keyboard navigation.
- Typeahead support.
- Dismissing and layering behavior is highly customizable.
import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
export default function App() {
return (
<DropdownMenu.Root>
<DropdownMenu.Trigger>Open Dropdown Menu</DropdownMenu.Trigger>
<DropdownMenu.Content>
<DropdownMenu.Item>Item 1</DropdownMenu.Item>
<DropdownMenu.Item>Item 2</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
);
}
10. HoverCard
https://www.radix-ui.com/docs/primitives/components/hover-card
For sighted users to preview content available behind a link.
Features
- Can be controlled or uncontrolled.
- Customize side, alignment, offsets, collision handling.
- Optionally render a pointing arrow.
- Supports custom open and close delays.
- Opens on hover only.
- Ignored by screen readers.
import * as HoverCard from "@radix-ui/react-hover-card";
const cardBackgroundColor = "#ddd";
export default function App() {
return (
<HoverCard.Root>
<HoverCard.Trigger>Trigger Hover Card</HoverCard.Trigger>
<HoverCard.Content style={{ backgroundColor: cardBackgroundColor }}>
Hover Card Content
<HoverCard.Arrow style={{ fill: cardBackgroundColor }} />
</HoverCard.Content>
</HoverCard.Root>
);
}
11. Label
https://www.radix-ui.com/docs/primitives/components/label
Renders an accessible label associated with controls.
Features
- Text selection is prevented when double clicking label.
- Supports nested controls.
- Supports custom controls.
import * as Label from "@radix-ui/react-label";
export default function App() {
return (
<Label.Root htmlFor="firstName">
First Name <input id="firstName" type="text" defaultValue="Robert" />
</Label.Root>
);
}
12. NavigationMenu
https://www.radix-ui.com/docs/primitives/components/navigation-menu
A collection of links for navigating websites.
Features
- Can be controlled or uncontrolled.
- Flexible layout structure with managed tab focus.
- Supports submenus.
- Optional active item indicator.
- Full keyboard navigation.
- Exposes CSS variables for advanced animation.
import * as NavigationMenu from "@radix-ui/react-navigation-menu";
export default function App() {
return (
<NavigationMenu.Root>
<NavigationMenu.List>
<NavigationMenu.Item>
<NavigationMenu.Trigger>Trigger</NavigationMenu.Trigger>
<NavigationMenu.Content>
<NavigationMenu.List>
<NavigationMenu.Item>
<NavigationMenu.Link>Item 1</NavigationMenu.Link>
</NavigationMenu.Item>
</NavigationMenu.List>
</NavigationMenu.Content>
</NavigationMenu.Item>
<NavigationMenu.Indicator />
</NavigationMenu.List>
<NavigationMenu.Viewport />
</NavigationMenu.Root>
);
}
13. Popover
https://www.radix-ui.com/docs/primitives/components/popover
Displays rich content in a portal, triggered by a button.
Features
- Can be controlled or uncontrolled.
- Customize side, alignment, offsets, collision handling.
- Optionally render a pointing arrow.
- Focus is fully managed and customizable.
- Supports modal and non-modal modes.
- Dismissing and layering behavior is highly customizable.
import * as Popover from "@radix-ui/react-popover";
const popoverBackgroundColor = "#ddd";
export default function App() {
return (
<Popover.Root modal>
<Popover.Trigger>Trigger</Popover.Trigger>
<Popover.Content style={{ backgroundColor: popoverBackgroundColor }}>
This is the content
<Popover.Close>Close</Popover.Close>
<Popover.Arrow style={{ fill: popoverBackgroundColor }} />
</Popover.Content>
</Popover.Root>
);
}
14. Progress
https://www.radix-ui.com/docs/primitives/components/progress
Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.
Features
- Provides context for assistive technology to read the progress of a task.
import * as Progress from "@radix-ui/react-progress";
const value = 75;
export default function App() {
return (
<Progress.Root
value={value}
max={100}
style={{
position: "relative",
width: 300,
height: 25,
backgroundColor: "lightgrey",
}}
>
<Progress.Indicator
style={{ height: "100%", backgroundColor: "grey", width: value + "%" }}
/>
</Progress.Root>
);
}
15. RadioGroup
https://www.radix-ui.com/docs/primitives/components/radio-group
A set of checkable buttons—known as radio buttons—where no more than one of the buttons can be checked at a time.
Features
- Full keyboard navigation.
- Supports horizontal/vertical orientation.
- Can be controlled or uncontrolled.
import * as RadioGroup from "@radix-ui/react-radio-group";
import { styled } from "@stitches/react";
const RadioGroupIndicator = styled(RadioGroup.Indicator, {
width: "10px",
height: "10px",
display: "inline-block",
backgroundColor: "black",
borderRadius: "50%",
});
export default function App() {
return (
<RadioGroup.Root defaultValue="one">
<RadioGroup.Item value="one">
<RadioGroupIndicator />
One
</RadioGroup.Item>
<RadioGroup.Item value="two">
<RadioGroupIndicator />
Two
</RadioGroup.Item>
</RadioGroup.Root>
);
}
16. ScrollArea
https://www.radix-ui.com/docs/primitives/components/scroll-area
Augments native scroll functionality for custom, cross-browser styling.
Features
- Scrollbar sits on top of the scrollable content, taking up no space.
- Scrolling is native; no underlying position movements via CSS transformations.
- Shims pointer behaviors only when interacting with the controls, so keyboard controls are unaffected.
- Supports RTL
import * as ScrollArea from "@radix-ui/react-scroll-area";
export default function App() {
return (
<ScrollArea.Root
style={{ width: "200px", height: "200px", overflow: "hidden" }}
>
<ScrollArea.Viewport style={{ width: "100%", height: "100%" }}>
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Amet aut
sapiente possimus quisquam. Obcaecati eaque reprehenderit, dolor culpa
recusandae delectus, inventore, libero voluptates sed a consequuntur
natus repudiandae praesentium est? Lorem ipsum dolor sit amet
consectetur, adipisicing elit. Amet aut sapiente possimus quisquam.
Obcaecati eaque reprehenderit, dolor culpa recusandae delectus,
inventore, libero voluptates sed a consequuntur natus repudiandae
praesentium est?
</ScrollArea.Viewport>
<ScrollArea.Scrollbar
orientation="vertical"
style={{
position: "absolute",
top: 0,
right: 0,
width: 10,
bottom: "var(--radix-scroll-area-corner-height)",
backgroundColor: "lightgrey",
}}
>
<ScrollArea.Thumb style={{ background: "darkgrey" }} />
</ScrollArea.Scrollbar>
<ScrollArea.Corner />
</ScrollArea.Root>
);
}
17. Select
https://www.radix-ui.com/docs/primitives/components/select
Displays a list of options for the user to pick from—triggered by a button.
Features
- Can be controlled or uncontrolled.
- Supports items, labels, groups of items.
- Focus is fully managed.
- Full keyboard navigation.
- Typeahead support.
- Supports Right to Left direction.
import * as Select from "@radix-ui/react-select";
export default function App() {
return (
<Select.Root defaultValue="Hello World">
<Select.Trigger aria-label="Options">
<Select.Value />
<Select.Icon style={{ fontFamily: "sans-serif" }} />
</Select.Trigger>
<Select.Content style={{ background: "white" }}>
<Select.ScrollUpButton />
<Select.Viewport>
<Select.Item value="Hello World">
<Select.ItemText>Hello World</Select.ItemText>
<Select.ItemIndicator />
</Select.Item>
<Select.Item value="Goodbye World">
<Select.ItemText>Goodbye World</Select.ItemText>
<Select.ItemIndicator />
</Select.Item>
<Select.Separator />
</Select.Viewport>
<Select.ScrollDownButton />
</Select.Content>
</Select.Root>
);
}
18. Separator
https://www.radix-ui.com/docs/primitives/components/separator
Visually or semantically separates content.
Features
- Supports horizontal and vertical orientations.
import * as Separator from "@radix-ui/react-separator";
export default function App() {
return (
<div>
<span>Thing One</span>
<Separator.Root asChild>
<span>-</span>
</Separator.Root>
<span>Thing Two</span>
</div>
);
}
19. Slider
https://www.radix-ui.com/docs/primitives/components/slider
An input where the user selects a value from within a given range.
Features
- Can be controlled or uncontrolled.
- Supports multiple thumbs.
- Supports a minimum value between thumbs.
- Supports touch or click on track to update value.
- Supports Right to Left direction.
- Full keyboard navigation.
import * as Slider from "@radix-ui/react-slider";
export default function App() {
return (
<Slider.Root
defaultValue={[50]}
max={100}
step={1}
aria-label="Volume"
style={{
position: "relative",
height: 10,
background: "lightgrey",
width: 300,
display: "block",
}}
>
<Slider.Track>
<Slider.Range
style={{
position: "absolute",
height: "100%",
backgroundColor: "#666",
}}
/>
</Slider.Track>
<Slider.Thumb
style={{
width: 10,
height: 10,
backgroundColor: "black",
display: "block",
}}
/>
</Slider.Root>
);
}
20. Switch
https://www.radix-ui.com/docs/primitives/components/switch
A control that allows the user to toggle between checked and not checked.
Features
- Full keyboard navigation.
- Can be controlled or uncontrolled.
import * as Switch from "@radix-ui/react-switch";
import { styled } from "@stitches/react";
const SwitchThumb = styled(Switch.Thumb, {
width: "50%",
background: "darkgrey",
height: "100%",
display: "block",
position: "absolute",
top: 0,
left: 0,
"&[data-state=checked]": {
left: "50%",
},
});
export default function App() {
return (
<Switch.Root style={{ width: 60, height: 30, position: "relative" }}>
<SwitchThumb />
</Switch.Root>
);
}
21. Tabs
https://www.radix-ui.com/docs/primitives/components/tabs
A set of layered sections of content—known as tab panels—that are displayed one at a time.
Features
- Can be controlled or uncontrolled.
- Supports horizontal/vertical orientation.
- Supports automatic/manual activation.
- Full keyboard navigation.
import * as Tabs from "@radix-ui/react-tabs";
export default function App() {
return (
<Tabs.Root defaultValue="One">
<Tabs.List>
<Tabs.Trigger value="One">One</Tabs.Trigger>
<Tabs.Trigger value="Two">Two</Tabs.Trigger>
</Tabs.List>
<Tabs.Content value="One">I am "One" content</Tabs.Content>
<Tabs.Content value="Two">I am "Two" content</Tabs.Content>
</Tabs.Root>
);
}
22. Toast
https://www.radix-ui.com/docs/primitives/components/toast
A succinct message that is displayed temporarily.
Features
- Automatically closes.
- Pauses closing on hover, focus and window blur.
- Supports hotkey to jump to toast viewport.
- Supports closing via swipe gesture.
- Exposes CSS variables for swipe gesture animations.
- Can be controlled or uncontrolled.
import * as Toast from "@radix-ui/react-toast";
import { useState } from "react";
export default function App() {
const [showToast, setShowToast] = useState(false);
return (
<Toast.Provider swipeDirection="right">
<button onClick={() => setShowToast(true)}>Show 5 Second Toast</button>
<Toast.Root open={showToast} onOpenChange={setShowToast}>
<Toast.Title>Toast Title</Toast.Title>
<Toast.Description>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quod saepe
porro eius harum, rem eos voluptatem? Labore ipsum sed cumque fuga,
veniam perferendis quo accusamus esse ab illo sint reiciendis!
</Toast.Description>
<Toast.Action>Action</Toast.Action>
<Toast.Close>Close</Toast.Close>
</Toast.Root>
<Toast.Viewport style={{ position: "fixed", bottom: 20, right: 20 }} />
</Toast.Provider>
);
}
23. Toggle
https://www.radix-ui.com/docs/primitives/components/toggle
A two-state button that can be either on or off.
Features
- Full keyboard navigation.
- Can be controlled or uncontrolled.
import * as Toggle from "@radix-ui/react-toggle";
import { styled } from "@stitches/react";
const ToggleRoot = styled(Toggle.Root, {
"&[aria-pressed=true]": {
fontWeight: "bold",
fontSize: "1.2em",
},
});
export default function App() {
return <ToggleRoot>This is a toggle</ToggleRoot>;
}
24. ToggleGroup
https://www.radix-ui.com/docs/primitives/components/toggle-group
A set of two-state buttons that can be toggled on or off.
Features
- Full keyboard navigation.
- Supports horizontal/vertical orientation.
- Support single and multiple pressed buttons.
- Can be controlled or uncontrolled.
import * as ToggleGroup from "@radix-ui/react-toggle-group";
import { styled } from "@stitches/react";
const ToggleGroupItem = styled(ToggleGroup.Item, {
"&[aria-pressed=true]": {
fontWeight: "bold",
fontSize: "1.2em",
},
});
export default function App() {
return (
<ToggleGroup.Root type="multiple" defaultValue={["a", "c"]}>
<ToggleGroupItem value="a">Item A</ToggleGroupItem>
<ToggleGroupItem value="b">Item B</ToggleGroupItem>
<ToggleGroupItem value="c">Item C</ToggleGroupItem>
</ToggleGroup.Root>
);
}
25. Toolbar
https://www.radix-ui.com/docs/primitives/components/toolbar
A container for grouping a set of controls, such as buttons, toggle groups or dropdown menus.
Features
- Full keyboard navigation.
import * as Toolbar from "@radix-ui/react-toolbar";
export default function App() {
return (
<Toolbar.Root style={{ display: "flex" }}>
<Toolbar.Button>Toolbar Button</Toolbar.Button>
<Toolbar.Separator />
<Toolbar.Link>Some Link</Toolbar.Link>
<Toolbar.ToggleGroup type="single">
<Toolbar.ToggleItem value="a">Item A</Toolbar.ToggleItem>
<Toolbar.ToggleItem value="b">Item B</Toolbar.ToggleItem>
<Toolbar.ToggleItem value="c">Item C</Toolbar.ToggleItem>
</Toolbar.ToggleGroup>
</Toolbar.Root>
);
}
26. Tooltip
https://www.radix-ui.com/docs/primitives/components/tooltip
A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.
Features
- Provider to control display delay globally.
- Opens when the trigger is focused or hovered.
- Closes when the trigger is activated or when pressing escape.
- Supports custom timings.
import * as Tooltip from "@radix-ui/react-tooltip";
const cardBackgroundColor = "#ddd";
export default function App() {
return (
<Tooltip.Provider>
<Tooltip.Root>
<Tooltip.Trigger>A Nice Tooltip</Tooltip.Trigger>
<Tooltip.Content style={{ backgroundColor: cardBackgroundColor }}>
<Tooltip.Arrow style={{ fill: cardBackgroundColor }} />
Good News!
</Tooltip.Content>
</Tooltip.Root>
</Tooltip.Provider>
);
}