Loading...
Loading...
Guide for building UI with Base UI React (@base-ui/react), a headless, accessible component library using compound component patterns. Use this skill whenever the user is building or modifying any user interface in React, including forms and validation, navigation and menus, modals and overlays, selection controls, toast notifications, accordions, tabs, or any interactive UI component. Also trigger when the user mentions @base-ui/react, Base UI, headless components, migrating from Radix UI, or asks about accessible component patterns. Even if the user does not explicitly mention Base UI, use this skill whenever they are creating React UI components, building a design system, or working on frontend user experience.
npx skill4agent add kaotypr/skills kao-base-ui@base-ui/reactpnpm add @base-ui/react#root {
isolation: isolate;
}import { Select } from '@base-ui/react/select';
import { Dialog } from '@base-ui/react/dialog';
import { Tooltip } from '@base-ui/react/tooltip';<Dialog.Trigger>Open</Dialog.Trigger>render<Dialog.Trigger render={<a href="#">Open</a>} />(props, state)<Dialog.Trigger render={(props, state) => <MyButton {...props} active={state.open} />} />Important: Base UI uses theprop. Never userender— that is a Radix UI concept and does not exist in Base UI.asChild
<Component.Portal> {/* Renders into document.body */}
<Component.Positioner> {/* Handles positioning relative to anchor */}
<Component.Popup> {/* The visible floating element */}
{/* content */}
</Component.Popup>
</Component.Positioner>
</Component.Portal>PortalPositionersidealignsideOffsetalignOffsetcollisionAvoidancecollisionPadding--anchor-width--anchor-height--available-width--available-height--transform-origin| Attribute | Meaning |
|---|---|
| Floating element is visible |
| Tab/item is active |
| Item has keyboard/mouse focus |
| Checkbox/radio/switch is checked |
| Checkbox/radio/switch is unchecked |
| Component is disabled |
| Field is required |
| Field passes validation |
| Field fails validation |
| Field value has changed |
| Field has been focused and blurred |
| `[data-side="top | right |
| `[data-align="start | center |
[data-starting-style][data-ending-style].popup {
opacity: 1;
transform: translateY(0);
transition: opacity 200ms, transform 200ms;
}
.popup[data-starting-style],
.popup[data-ending-style] {
opacity: 0;
transform: translateY(-8px);
}references/floating-components.mdreferences/overlay-components.mdreferences/form-components.mdreferences/display-components.mdreferences/utilities.mdPortal > Positioner > Popupisolation: isolatealignalignmentSelect.ItemSelect.ItemTextOption[data-active][data-selected]mergeProps'@base-ui/react/component-name'delaycloseDelayTooltip.TriggerTooltip.RootTooltip.ProviderasChildrenderPortalPositionermultiplefalse