复杂组件是复杂的 UI 元素,它们集成了多个依赖项、管理大量内部状态或提供高级交互功能。这些组件通常由多个子组件协同工作组成,并且经常依赖外部库来实现专业行为,如数据可视化、日期处理或可访问性基础。
有关基本交互元素的说明,请参阅 核心组件。有关结构布局组件的说明,请参阅 布局组件。有关预构建组件组合的说明,请参阅 组件块。
shadcn/ui 中的复杂组件遵循分层架构模式,其中外部库基础通过自定义样式、主题集成和附加功能进行封装。
来源: apps/www/registry/new-york/ui/chart.tsx1-10 apps/www/content/docs/components/toast.mdx58-60 apps/www/content/docs/components/calendar.mdx40-43
Chart 系统是最复杂的组件,它提供了一个完整的、基于 Recharts 构建的数据可视化框架,并集成了主题和配置管理。
来源: apps/www/registry/new-york/ui/chart.tsx11-35 apps/www/registry/new-york/ui/chart.tsx37-68 apps/www/registry/new-york/ui/chart.tsx70-101
ChartConfig 类型为图表主题和标签提供了一个灵活的配置系统
| 属性 | 类型 | 描述 |
|---|---|---|
label | React.ReactNode | 数据系列的显示标签 |
icon | React.ComponentType | 可选图标组件 |
color | 字符串 | 静态颜色值 |
theme | Record<keyof typeof THEMES, string> | 主题特定的颜色映射 |
配置通过 ChartContainer 建立的 ChartContext.Provider 内的 useChart hook 访问。
来源: apps/www/registry/new-york/ui/chart.tsx11-19 apps/www/registry/new-york/ui/chart.tsx21-35
ChartStyle 组件根据图表配置生成动态 CSS
该系统支持静态颜色和主题感知的颜色映射,通过 data-chart 属性为特定的图表实例生成作用域的 CSS 自定义属性。
来源: apps/www/registry/new-york/ui/chart.tsx8-9 apps/www/registry/new-york/ui/chart.tsx70-101
| 组件 | 依赖项 | 注册表依赖项 |
|---|---|---|
chart | recharts, lucide-react | card |
来源: apps/www/public/registry/styles/new-york/chart.json3-9 apps/www/public/r/styles/new-york/chart.json6-12
Toast 系统提供了一个全面的通知框架,包含多个实现文件和状态管理。
Toast 系统需要安装和配置多个组件
toast.tsx, toaster.tsx, use-toast.tsxToaster 组件添加到根布局useToast hook 用于触发通知来源: apps/www/content/docs/components/toast.mdx64-74 apps/www/content/docs/components/toast.mdx32-46 apps/www/content/docs/components/toast.mdx104-108
| 变体 | 用途 | 描述 |
|---|---|---|
| 默认 | toast({ title, description }) | 标准通知 |
| 带标题 | toast({ title: "...", description: "..." }) | 结构化内容 |
| 带操作 | toast({ action: <ToastAction>... }) | 交互式通知 |
| 破坏性 | toast({ variant: "destructive" }) | 错误通知 |
来源: apps/www/content/docs/components/toast.mdx138-153
Calendar 组件基于 React DayPicker 提供复杂的日期选择功能。
| 依赖项 | 版本 | 目的 |
|---|---|---|
react-day-picker | 8.10.1 | 核心日期选择器功能 |
date-fns | 最新版 | 日期操作工具 |
button (组件) | 内部信息 | UI 一致性 |
Calendar 组件与 Button 组件集成用于导航控件,并通过 React DayPicker 的 API 支持广泛的自定义。
来源: apps/www/content/docs/components/calendar.mdx40-43 apps/www/content/docs/components/calendar.mdx45-47
一个复杂的输入组件,用于一次性密码输入,具有高级的可访问性和视觉反馈。
该组件使用 input-otp 库,并提供复杂的视觉反馈,包括插入符动画和单个输入槽的状态管理。
来源: apps/v4/registry/new-york-v4/ui/input-otp.tsx9-27 apps/v4/registry/new-york-v4/ui/input-otp.tsx39-67 apps/v4/registry/new-york-v4/ui/input-otp.tsx60-64
基于 Embla Carousel 构建,提供基于运动的内容导航,具有广泛的配置选项
embla-carousel-reactopts prop来源: apps/www/content/docs/components/carousel.mdx40-45 apps/www/content/docs/components/carousel.mdx177-194
响应式表格组件,专为与数据表格库集成而设计
@tanstack/react-table 一起使用而设计Table、TableBody、TableCaption、TableCell、TableHead、TableHeader、TableRow来源: apps/www/content/docs/components/table.mdx78-81
基于 Radix UI 原语构建的复杂导航组件
@radix-ui/react-navigation-menu 构建@radix-ui/react-menubar 构建@radix-ui/react-scroll-area 构建来源: apps/www/content/docs/components/navigation-menu.mdx34-36 apps/www/content/docs/components/menubar.mdx34-36 apps/www/content/docs/components/scroll-area.mdx36-39
shadcn/ui 中的复杂组件共享几个架构模式
来源: apps/www/lib/rehype-component.ts31-63 apps/www/registry/new-york/ui/chart.tsx25-35