mcpField
R
radix-primitives

radix-primitives

github.com/yonatangross设计与 UI29946 次安装今天更新
代码仓库

关于 radix-primitives

radix-primitives 是一项介绍无样式、可访问 React 基础组件的技能,适用于构建自定义设计系统和复杂界面。内容涵盖多态组合、键盘与焦点行为,以及通过数据属性设置样式等模式。

主要功能

  1. 01可访问的 React UI 基础组件
  2. 02对话框、菜单和弹出层模式
  3. 03使用 asChild 进行多态组合
  4. 04键盘导航与焦点管理
  5. 05ARIA 与屏幕阅读器支持
  6. 06基于状态的数据属性

适用场景

  1. 01构建自定义样式的可访问组件
  2. 02创建对话框、菜单和工具提示
  3. 03组合元素且不添加包装 div
  4. 04通过数据属性设置组件状态样式

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yonatangross/orchestkit --skill radix-primitives

安装后在 Claude Code 中输入/radix-primitives确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

checklists/
accessibility-audit.md
references/
aschild-composition.md
dialog-modal-patterns.md
dropdown-menu-patterns.md
focus-management.md
popover-tooltip-patterns.md
scripts/
composed-trigger.tsx
custom-dialog.tsx
custom-dropdown.tsx

详细介绍

Radix Primitives

用于构建高品质设计系统的无样式、无障碍 React 组件。

概述

  • 构建具有完整无障碍支持的自定义样式组件
  • 了解 shadcn/ui 的底层工作原理
  • 需要无需包装 div 的多态组合
  • 实现复杂的 UI 模式(模态框、菜单、工具提示)

基础组件目录

覆盖层组件
基础组件用例
Dialog模态对话框、表单、确认操作
AlertDialog危险操作确认
Sheet侧边面板、移动端抽屉
弹出层组件
基础组件用例
Popover在触发器上显示丰富内容
Tooltip简短的文本提示
HoverCard悬停时显示预览卡片
ContextMenu右键菜单
菜单组件
基础组件用例
DropdownMenu操作菜单
Menubar应用菜单栏
NavigationMenu网站导航
表单组件
基础组件用例
Select自定义下拉选择框
RadioGroup单选组
Checkbox布尔值切换
Switch开/关切换
Slider范围选择
折叠组件
基础组件用例
Accordion可展开的区块
Collapsible单个切换内容
Tabs选项卡界面

核心模式:asChild

asChild 属性支持多态渲染,无需包装 div:

// 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>

工作原理:

  • 使用 Radix 内部的 Slot 组件
  • 将父组件的属性合并到子组件
  • 正确转发 refs
  • 合并事件处理器(两者都会触发)
  • 合并 classNames

内置无障碍支持

每个基础组件都包含:

  • 键盘导航:方向键、Escape、Enter、Tab
  • 焦点管理:焦点陷阱、焦点返回、可见的焦点环
  • ARIA 属性:角色、状态、属性
  • 屏幕阅读器:恰当的播报

使用数据属性设置样式

Radix 通过数据属性公开状态:

/* 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">

快速参考

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>

关键决策

决策建议
样式方案数据属性 + Tailwind 任意变体
组合方式使用 asChild 避免包装 div
动画仅使用 CSS,并通过 data-state 选择器控制
表单组件与 react-hook-form 结合使用

相关技能

  • shadcn-patterns - 带预设样式的 Radix 组件
  • focus-management - 无障碍模式
  • design-system-starter - 设计系统基础

参考

评论

支持 Markdown