Back to list
yonatangross

radix-primitives

by yonatangross

The Complete AI Development Toolkit for Claude Code — 159 skills, 34 agents, 20 commands, 144 hooks. Production-ready patterns for FastAPI, React 19, LangGraph, security, and testing.

29🍴 4📅 Jan 23, 2026

SKILL.md


name: radix-primitives description: Radix UI unstyled accessible primitives for dialogs, popovers, dropdowns, and more. Use when building custom accessible components, understanding shadcn internals, or needing polymorphic composition. context: fork agent: frontend-ui-developer version: 1.0.0 tags: [radix, ui, primitives, accessibility, dialog, popover, dropdown, aschild, a11y] user-invocable: false

Radix Primitives

Unstyled, accessible React components for building high-quality design systems.

Overview

  • Building custom styled components with full accessibility
  • Understanding how shadcn/ui works under the hood
  • Need polymorphic composition without wrapper divs
  • Implementing complex UI patterns (modals, menus, tooltips)

Primitives Catalog

Overlay Components

PrimitiveUse Case
DialogModal dialogs, forms, confirmations
AlertDialogDestructive action confirmations
SheetSide panels, mobile drawers

Popover Components

PrimitiveUse Case
PopoverRich content on trigger
TooltipSimple text hints
HoverCardPreview cards on hover
ContextMenuRight-click menus
PrimitiveUse Case
DropdownMenuAction menus
MenubarApplication menubars
NavigationMenuSite navigation

Form Components

PrimitiveUse Case
SelectCustom select dropdowns
RadioGroupSingle selection groups
CheckboxBoolean toggles
SwitchOn/off toggles
SliderRange selection

Disclosure Components

PrimitiveUse Case
AccordionExpandable sections
CollapsibleSingle toggle content
TabsTabbed interfaces

Core Pattern: asChild

The asChild prop enables polymorphic rendering without wrapper divs:

// Without asChild - creates nested elements
<Button>
  <Link href="/about">About</Link>
</Button>

// With asChild - merges into single element
<Button asChild>
  <Link href="/about">About</Link>
</Button>

How it works:

  • Uses Radix's internal Slot component
  • Merges props from parent to child
  • Forwards refs correctly
  • Combines event handlers (both fire)
  • Merges classNames

Built-in Accessibility

Every primitive includes:

  • Keyboard navigation: Arrow keys, Escape, Enter, Tab
  • Focus management: Trap, return, visible focus rings
  • ARIA attributes: Roles, states, properties
  • Screen reader: Proper announcements

Styling with Data Attributes

Radix exposes state via data attributes:

/* Style based on state */
[data-state="open"] { /* open styles */ }
[data-state="closed"] { /* closed styles */ }
[data-disabled] { /* disabled styles */ }
[data-highlighted] { /* keyboard focus */ }
// Tailwind arbitrary variants
<Dialog.Content className="data-[state=open]:animate-in data-[state=closed]:animate-out">

Quick Reference

import { Dialog, DropdownMenu, Tooltip } from 'radix-ui'

// Basic Dialog
<Dialog.Root>
  <Dialog.Trigger>Open</Dialog.Trigger>
  <Dialog.Portal>
    <Dialog.Overlay />
    <Dialog.Content>
      <Dialog.Title>Title</Dialog.Title>
      <Dialog.Description>Description</Dialog.Description>
      <Dialog.Close>Close</Dialog.Close>
    </Dialog.Content>
  </Dialog.Portal>
</Dialog.Root>

Key Decisions

DecisionRecommendation
Styling approachData attributes + Tailwind arbitrary variants
CompositionUse asChild to avoid wrapper divs
AnimationCSS-only with data-state selectors
Form componentsCombine with react-hook-form
  • shadcn-patterns - Pre-styled Radix components
  • focus-management - Accessibility patterns
  • design-system-starter - Design system foundation

References

Score

Total Score

75/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon