@serenis / ui
Serenis设计系统的主UI组件库。提供可重用的React组件,包括故事书文档、设计令牌集成和可访问性支持。组件的样式与CSS模块和 @serenis/design-tokens.
安装
npm install @serenis/ui
快速启动
# Build
yarn workspace @serenis/ui build
# Dev (watch mode)
yarn workspace @serenis/ui dev
# Test
yarn workspace @serenis/ui test
# Typecheck
yarn workspace @serenis/ui typecheck
# Lint
yarn workspace @serenis/ui lint
yarn workspace @serenis/ui lint:css
当从npm中使用已发布的包时,只需加载一次组件CSS模块 import '@serenis/ui/css'。这是单船 dist/index.css 用于所有css模块组件。Monorepo应用程序解决 @serenis/ui To source不能导入它(应用捆绑器处理) *.module.css). 每个组件的CSS加载可能会在以后取代它。
import '@serenis/ui/css'
import { cx } from '@serenis/design-tokens'
import { Button, Card } from '@serenis/ui'
;<Card>
<div className={cx('flex', 'flex-col', 'gap-sm')}>
<h2 className={cx('typography-h2')}>Session details</h2>
<p className={cx('typography-paragraph', 'text-neutral-80')}>Your next session is scheduled for tomorrow.</p>
<Button kind="primary">Confirm</Button>
</div>
</Card>
目录结构
libraries/ui/
├── src/
│ ├── {ComponentName}/
│ │ ├── index.tsx # Main component (or {ComponentName}.tsx)
│ │ ├── index.test.tsx # Tests
│ │ ├── Playground.stories.tsx # Primary Storybook story
│ │ ├── Overview.mdx # Component documentation
│ │ └── types.ts # Type definitions (if complex)
│ ├── Form/ # Composite form module
│ │ ├── TextField/
│ │ ├── TextAreaField/
│ │ ├── SelectField/
│ │ ├── PasswordField/
│ │ ├── PhoneNumberField/
│ │ ├── PinCodeField/
│ │ ├── Autocomplete/
│ │ ├── MultiSelect/
│ │ ├── Checkbox/
│ │ ├── CheckboxButton/
│ │ ├── Radio/
│ │ ├── RadioButton/
│ │ ├── SliderField/
│ │ ├── Switch/
│ │ ├── SwitchField/
│ │ ├── FileUploadField/
│ │ ├── internal/ # Shared internal chrome and styles
│ ├── utils/ # Shared utilities (shouldForwardProp)
│ └── index.ts # Public API barrel
├── dist/ # Built output (gitignored)
├── tsup.config.ts # Bundle config
└── package.json
组件目录
类别匹配故事书(*.stories.tsx / Overview.mdx <Meta title>): 一般, 数据显示, 反馈, 形式, 导航, 布局.
一般
| 组件 | 描述 |
| 按钮 | 主要的交互元素——动作、提交、导航 |
| 文本 | 弃用。 排版原始 |
数据显示
| 组件 | 描述 |
| 手风琴 | 具有触发器和可折叠内容的可扩展部分 |
| AccordionList | 呈现多个accordion的方便包装器 |
| 《阿凡达》 | 带有基于名称的首字母缩略词的圆形图像 |
| 徽章 | 用于计数和呈现的角指示器(数字或自定义内容) |
| 卡 | 具有标高、轮廓和背景变体的基础表面 |
| 芯片 | 紧凑的状态标签与图标和种类为基础的颜色 |
| 报价 | 带有左边框重音的语义blockquote |
| 建议 | 带有role="note"和特定类型背景的上下文注释 |
| 选项卡 | 带有WAI-ARIA选项卡模式和溢出的选项卡界面 |
| SegmentedControl中 | 分段式标签切换2-5个选项 |
| 瓷砖 | 带有图标、标题、描述和动作槽的卡片 |
| 模态 | 以拖放为中心的对话框,焦点陷阱,复合API |
| 抽屉里 | 滑入面板(手机底部,桌面右侧),复合API |
| BottomSheet | 具有多步高度的移动底板,可拖动调整大小 |
| 弹出窗口 | 锚定到参考元素的点击触发的浮动内容 |
| 工具提示 | 悬停/聚焦触发的浮动信息锚定到参考元素 |
反馈
| 组件 | 描述 |
| 警报 | 带有role="alert"、图标和动作槽的状态横幅 |
| 加载程序 | 支持preferences -reduce -motion的SVG旋转器 |
| 骨架 | 加载带有闪烁动画和排版对齐的占位符 |
该桶还输出低级原语(TextInput, TextArea, Select, Checkbox, Radio, Switch, Hint, Label)用于高级使用-首选产品代码中下面的字段组件。
| 组件 | 描述 |
| 文本框 | 文本输入与浮动标签,提示/错误,ARIA接线 |
| TextAreaField | TextField的多行变体 |
| SelectField | 带有浮动标签和提示/错误的本机选择 |
| PasswordField | 文本字段与可见性切换 |
| PhoneNumberField | 带有手机特定输入默认值的TextField (type, inputMode, autoComplete) |
| PinCodeField | 分段OTP输入 |
| 自动完成 | TextField与浮动建议下拉 |
| 多选 | 多选择组合框与芯片和复选框列表框 |
| CheckboxButton | 带有标签和提示的卡片式复选框 |
| RadioButton | 带有标签和提示的卡片式收音机 |
| SliderField | 在有序的比例上选择一个选项,用拇指画出一条轨迹 |
| SwitchField | 内联开关标签,提示,和标签位置 |
| FileUploadField | 使用react-dropzone上传拖放文件 |
导航
| 组件 | 描述 |
| 链接 | 内联文本链接的样式锚 |
| NavigationButton | 用于菜单和操作列表的列表项按钮 |
| BottomBar | 固定位置移动底部导航条 |
| 面包屑 | 带雪佛龙分隔符的导航面包屑路径 |
| 导航条 | 带有滑动活动指示器的主导航 |
| NavBarGroup | NavBar项目在NavBar中的胶囊 |
| NavBarItem | NavBarGroup的图标和标签项,通过as多态 |
| 侧边栏 | 可折叠的侧边栏导航 |
| SideBarItem | 侧边栏的导航项(包裹NavigationButton) |
| SideBarUser | 用户头像+姓名/电子邮件显示侧边栏底部槽 |
| TopBar | 带有徽标和背面导航的粘性页眉 |
| TopBarBack | 背面链接与雪佛龙图标的TopBar的背面槽 |
布局
依赖关系
| 依赖 | 角色 |
@serenis/cdk | 交互原语(可按压、可扩展) |
@serenis/design-tokens | 颜色,间距,排版,高度,边界半径 |
@serenis/icons | 按钮,警报,手风琴等图标组件。 |
@serenis/hooks | 共享React钩子 |
@serenis/numbers, @serenis/strings | 格式化工具 |
styled-components | CSS-in-JS(使用 @sanity/styled-components 叉) |
@floating-ui/react | 定位弹出窗口,工具提示,模态,抽屉,底部表,自动完成 |
framer-motion | 动画模式,底部表单 |
react-dropzone | FileUploadField的文件上传 |
样式约定
- CSS模块:每个组件在一个colocation中拥有自己的样式
index.module.css;组件源中没有实用程序类。看到 文档/代理/ styling.md.
- 设计令牌 对于所有视觉值-永远不要硬编码十六进制颜色,像素大小或字体值。
文档
- 故事书每个组件都有一个
Playground.stories.tsx 和一个 Overview.mdx 它的来源在 libraries/ui/src/{ComponentName}/
- Overview.mdx:包含道具、模式、做/不做和已知异常的全面文档
- AGENTS.md:面向代理的API参考-参见 AGENTS.md
消费者
- 应用程序:
apps/web (初级) apps/blog, apps/nutrition-blog, apps/website, apps/design-system (故事书主机)
- 库:
libraries/shared-components (@serenis/shared-components), libraries/ui-deprecated (遗产-首选) @serenis/ui)
构建
捆绑与 tsup 转化为ESM + CJS + TypeScript声明。工作空间依赖是外部化的。
许可证
PolyForm非商业1.0.0 -参见 许可证 查看全文。