Token导航 LogoToken导航TokenDH.com
研究检索external-servicegithub未标认证来源可访问许可证需确认审计通过

radix-ui基数用户界面

Agent Skill

用于辅助界面设计、视觉规范、排版、配色、布局和交互体验优化。它适合让 Agent 根据产品场景整理页面结构、生成 UI 方案、检查视觉一致性或改进组件层级。使用时需要结合现有品牌、设计系统和用户任务,不应只堆装饰元素;涉及真实页面改动时,应通过截图或浏览器预览检查文本溢出、对齐和响应式表现。

总安装

742

周安装

30

GitHub Stars

74

下载量

233
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:radix-ui(基数用户界面)
来源仓库:https://github.com/dralgorhythm/claude-agentic-framework
仓库路径:skills/radix-ui
安装命令:
npx skills add https://github.com/dralgorhythm/claude-agentic-framework --skill radix-ui
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/dralgorhythm/claude-agentic-framework --skill radix-ui

简介

radix-ui 提供无样式可访问 UI 原语与键盘导航支持,适合在 Codex、Claude、Cursor、Gemini CLI 中辅助高质量组件开发。

  • 适用于对话框、下拉菜单等复杂控件的原子化构建与 ARIA 属性集成。
  • 可通过 npx skills add 命令从指定 GitHub 仓库安装,具体用法需结合原始 README 进一步确认。
  • 安装前建议核实权限范围、维护状态,并注意是否涉及联网、命令执行或文件读写操作。
  • radix-ui 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

SKILL.md

Radix UI

Platform: Web only. For mobile modals/sheets, see the expo-sdk and react-native-patterns skills.
Use Context7 MCP (resolve-library-id then query-docs) for full API reference, all component props, and additional examples.

Overview

Unstyled, accessible UI primitives for React with built-in keyboard navigation, focus management, and ARIA attributes. Designed to be composed with Tailwind CSS and Framer Motion.

Version: Latest (individual packages) or radix-ui unified package

Install (individual packages):

pnpm add @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-select @radix-ui/react-tooltip @radix-ui/react-tabs

Install (unified package):

pnpm add radix-ui

The unified radix-ui package bundles all primitives - use this for simpler dependency management.

Workflows

Adding a Dialog:

  1. Install: pnpm add @radix-ui/react-dialog
  2. Import Dialog parts: Root, Trigger, Portal, Overlay, Content
  3. Wrap Overlay and Content in Portal for proper stacking
  4. Style with Tailwind and data-[state=] selectors
  5. Test keyboard navigation (Esc to close, Tab trap)
  6. Add Framer Motion animations if needed

Adding a Select:

  1. Install: pnpm add @radix-ui/react-select
  2. Import Select parts: Root, Trigger, Portal, Content, Item
  3. Add Icon and Value to Trigger for visual feedback
  4. Style open/closed states with data-[state=open]
  5. Test keyboard (Arrow keys, Enter, Type-ahead)
  6. Ensure proper z-index for Portal

Adding Tooltips:

  1. Install: pnpm add @radix-ui/react-tooltip
  2. Wrap app with TooltipProvider (once, at root)
  3. Compose Trigger and Content for each tooltip
  4. Set delayDuration for hover timing
  5. Verify screen reader announcements

Dialog (Modal)

import * as Dialog from '@radix-ui/react-dialog';
// OR: import { Dialog } from 'radix-ui';

function ModalExample() {
  const [open, setOpen] = useState(false);

  return (
    <Dialog.Root open={open} onOpenChange={setOpen}>
      <Dialog.Trigger asChild>
        <button className="px-4 py-2 bg-blue-600 text-white rounded">Open Dialog</button>
      </Dialog.Trigger>

      <Dialog.Portal>
        <Dialog.Overlay className="fixed inset-0 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0" />

        <Dialog.Content className="fixed left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] max-h-[85vh] w-[90vw] max-w-[500px] rounded-lg bg-white p-6 shadow-lg">
          {/* Title and Description are required for accessibility */}
          <Dialog.Title className="text-lg font-semibold mb-2">Dialog Title</Dialog.Title>
          <Dialog.Description className="text-sm text-gray-600 mb-4">
            Screen readers announce this description.
          </Dialog.Description>

          <div className="flex justify-end gap-2 mt-6">
            <Dialog.Close asChild>
              <button className="px-4 py-2 border rounded">Cancel</button>
            </Dialog.Close>
            <button className="px-4 py-2 bg-blue-600 text-white rounded">Save</button>
          </div>
        </Dialog.Content>
      </Dialog.Portal>
    </Dialog.Root>
  );
}

Framer Motion animations: Use forceMount on Portal and wrap with AnimatePresence. Pass asChild to Overlay/Content and use motion.div as the child.

Select (Dropdown)

import * as Select from '@radix-ui/react-select';
import { ChevronDownIcon, CheckIcon } from '@radix-ui/react-icons';

function SelectExample() {
  return (
    <Select.Root defaultValue="apple">
      <Select.Trigger className="inline-flex items-center justify-between rounded px-4 py-2 text-sm bg-white border gap-2 data-[placeholder]:text-gray-400 min-w-[200px]">
        <Select.Value placeholder="Select a fruit..." />
        <Select.Icon><ChevronDownIcon /></Select.Icon>
      </Select.Trigger>

      <Select.Portal>
        <Select.Content className="overflow-hidden bg-white rounded-md shadow-lg border">
          <Select.Viewport className="p-1">
            <Select.Item value="apple" className="relative flex items-center px-8 py-2 rounded text-sm hover:bg-blue-50 outline-none cursor-pointer data-[disabled]:opacity-50">
              <Select.ItemIndicator className="absolute left-2"><CheckIcon /></Select.ItemIndicator>
              <Select.ItemText>Apple</Select.ItemText>
            </Select.Item>
            <Select.Item value="banana" className="relative flex items-center px-8 py-2 rounded text-sm hover:bg-blue-50 outline-none cursor-pointer">
              <Select.ItemIndicator className="absolute left-2"><CheckIcon /></Select.ItemIndicator>
              <Select.ItemText>Banana</Select.ItemText>
            </Select.Item>
          </Select.Viewport>
        </Select.Content>
      </Select.Portal>
    </Select.Root>
  );
}

Use Select.Group + Select.Label for grouped options, Select.Separator for dividers.

Styling with Tailwind

Key Data Attribute Selectors

// Open/closed state
className="data-[state=open]:bg-blue-50 data-[state=closed]:bg-gray-50"

// Disabled
className="data-[disabled]:opacity-50 data-[disabled]:pointer-events-none"

// Checked (checkboxes, radio items)
className="data-[state=checked]:bg-blue-600"

// Side-based positioning
className="data-[side=top]:animate-slide-down data-[side=bottom]:animate-slide-up"

Common Layout Patterns

// Focus ring (required for keyboard UX)
className="outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"

// Centered modal
className="fixed left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%]"

// Backdrop overlay
className="fixed inset-0 bg-black/50 backdrop-blur-sm"

Accessibility

Keyboard navigation (handled automatically):

  • Dialog: Esc to close, Tab trap inside modal
  • Select: Arrow keys, Enter to select, type-ahead search
  • DropdownMenu: Arrow keys, Enter to select
  • Tabs: Arrow keys, Home/End for first/last
  • Tooltip: Focus trigger shows tooltip

ARIA (added automatically):

  • Dialog: role="dialog", aria-labelledby (Title), aria-describedby (Description)
  • Select: role="combobox", aria-expanded, aria-controls

Always provide Dialog.Title and Dialog.Description — screen readers depend on them.

Custom focus management:

<Dialog.Content
  onOpenAutoFocus={(e) => { e.preventDefault(); customRef.current?.focus(); }}
  onCloseAutoFocus={(e) => { e.preventDefault(); triggerRef.current?.focus(); }}
>

Controlled vs Uncontrolled

// Uncontrolled — component manages its own state
<Dialog.Root defaultOpen={false}>

// Controlled — parent manages state (preferred for complex UIs)
const [open, setOpen] = useState(false);
<Dialog.Root open={open} onOpenChange={setOpen}>

Portal Usage

Always portal overlays and dropdowns to avoid z-index conflicts, overflow: hidden clipping, and CSS transform issues:

<Dialog.Portal>          {/* renders at document.body */}
  <Dialog.Overlay />
  <Dialog.Content />
</Dialog.Portal>

{/* Custom container */}
<Dialog.Portal container={customContainerRef.current}>

Best Practices

  • Use asChild prop to compose with custom elements without wrapper divs
  • Always Portal overlays and dropdowns to avoid z-index issues
  • Provide Title and Description for all Dialogs (accessibility requirement)
  • Use data-[state=] selectors for open/closed state styling
  • Prefer controlled for complex state management
  • One TooltipProvider at app root — not per tooltip
  • Test keyboard navigation for every interactive component

Anti-Patterns

  • ❌ Forgetting Dialog.Portal (causes z-index issues)
  • ❌ Missing Dialog.Title or Dialog.Description (fails a11y)
  • ❌ Not using asChild with custom triggers (creates wrapper divs)
  • ❌ Multiple TooltipProvider instances (unnecessary overhead)
  • ❌ Using controlled without onOpenChange/onValueChange
  • ❌ Mixing controlled and uncontrolled patterns
  • ❌ Forgetting focus:ring styles (poor keyboard UX)
  • ❌ Not testing with keyboard navigation

Feedback Loops

Accessibility testing:

# Test with keyboard only (no mouse)
# Tab through all interactive elements
# Esc should close Dialogs, Dropdowns, Selects
# Arrow keys should navigate menus and selects

Screen reader testing:

# macOS: VoiceOver (Cmd+F5)
# Verify Dialog.Title and Dialog.Description are announced
# Check for proper role attributes

Visual regression: Test all states: Closed vs Open, Hover vs Focus, Selected vs Unselected, Disabled, different viewport sizes.

Framer Motion: Use forceMount + AnimatePresence. Test that focus management still works with animations.

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

34.07%
按下载量换算79

Claude

30.67%
按下载量换算71

Cursor

20.49%
按下载量换算48

Gemini CLI

10.79%
按下载量换算25

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

external-service

该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills