Files
simple-react-app-kit/packages/ui/docs/zh-Hans/advanced/workspace-adaptations.mdx
T

68 lines
3.2 KiB
Plaintext
Raw Normal View History

2026-09-21 17:27:45 +08:00
---
title: 本仓库适配
description: 记录相对 shadcn/ui Base UI 源码必须保留的实现差异与升级步骤。
order: 22
toc:
- id: baseline
title: 上游基线
- id: icons-and-ripple
title: 图标与波纹
- id: localization
title: 本地化
- id: popover
title: Popover 扩展
- id: select
title: Select 修正
- id: upgrade-checklist
title: 升级清单
---
## 上游基线 {#baseline}
本地组件最初来自 shadcn/ui 的 Base UI registry,配置风格为 `base-vega`。上游可参考 [组件文档](https://ui.shadcn.com/docs/components/base)和 [GitHub 源码目录](https://github.com/shadcn-ui/ui/tree/main/apps/v4/registry/bases/base/ui),但上游当前版本不等于本仓库锁定的实现。
判断行为时按以下优先级:本地源码、本文档、本地 `components.json`,最后才是上游最新示例。
## 图标与波纹 {#icons-and-ripple}
`components/icon.tsx` 把 Lucide 图标名映射到 `@icones/react` 组件,并保留一批与上游同名的导出。已有组件已改为从该入口导入。CLI 新增或更新的源码如果出现 `lucide-react`,应转换到这个入口。
`Button` 合并传入 ref 与 `useRippleRef`。修改 Button 时必须保留 `relative` 定位、波纹 ref 合并和 disabled 行为。
## 本地化 {#localization}
Breadcrumb、Calendar、Carousel、Dialog、Pagination、Sheet、Sidebar、Spinner 与 Toast 等组件已移除部分硬编码英文,改用 `components/i18n.tsx` 中的消息描述符。更新这些文件时要检查 aria-label、sr-only 文本和默认说明,不能只比较可见 UI。
词典对外只发布 `en-US` 和 `zh-Hans`。新增消息时要同步:
1. `uiMessages` 描述符。
2. `uiMessageIds` 类型列表。
3. 两个 locale 的 `messages`。
4. 使用该消息的组件。
## Popover 扩展 {#popover}
本地 `PopoverContent` 比上游包装层多出:
- `anchor` 与 `positionMethod` 转发。
- `showArrow`,支持 `AnchoredSurface` 配置对象。
- `viewportClassName`,把可滚动内容与必须 overflow-visible 的外层表面分开。
- 按锚点尺寸计算的默认 side offset 与连续曲线尾巴。
- `createPopoverHandle` 与 `PopoverHandle` 导出。
不要用上游文件整体替换它。特别要测试长内容滚动、四个 side、碰撞翻转、窄触发器和 RTL。
## Select 修正 {#select}
`SelectTrigger` 把 `ChevronDownIcon` 作为 `SelectPrimitive.Icon` 的 child 渲染,而不是把图标组件交给 `render`。这是为当前 Base UI 与 Icones 组合保留的修正。升级 Select 时要确认 trigger 只出现一个图标,并验证 SSR 与 hydration。
## 升级清单 {#upgrade-checklist}
1. 先查看 shadcn 文档与对应 registry 源码的提交差异,不直接执行覆盖。
2. 通过 CLI 生成到临时分支或逐文件暂存,保留本地 public exports。
3. 将直接图标依赖迁回 `components/icon`。
4. 恢复翻译消息、逻辑方向 utility 与本地 theme class。
5. 对 Button、Popover、Select、Calendar、Toast 和 Sidebar 做重点回归。
6. 运行 UI typecheck、全仓 lint/format,再构建实际消费应用。
7. 在 light、dark、LTR、RTL、mobile、tablet、desktop 下手动检查交互。