Button 按钮
通过视觉权重和完整状态,让每个操作有清楚的位置。
按钮用于触发动作。一个任务区域通常只保留一个 primary;辅助操作使用 secondary 或 ghost,删除等不可逆操作使用危险样式并配合确认。
安装
pnpm dlx shadcn@4.22.1 add http://127.0.0.1:3040/r/v0.3.0/button.json首次使用请先完成 Registry 与主题接入。
变体与组合
primary、secondary、subtle、ghost 表达主次;danger 和 danger-ghost 表达风险。sm、md、lg 用于文字按钮,icon 和 icon-sm 用于纯图标。加载时组合 Spinner 与明确文案,由调用方禁用重复提交。
<Button variant="secondary" disabled={pending}>
{pending ? "正在保存…" : "保存修改"}
</Button>Props
| 属性 | 类型 / 可选值 | 默认值 | 说明 |
|---|---|---|---|
variant | primary / secondary / subtle / ghost / danger / danger-ghost | primary | 视觉权重 |
size | sm / md / lg / icon / icon-sm | md | 内容和尺寸 |
density | compact / comfortable | Provider 的 compact | 控件密度 |
tooltip | ReactNode | — | 补充提示 |
disabledReason | string | — | 应用给出的不可用原因 |
render | Base UI render 属性 | — | 合并到自定义元素 |
type | 原生 button 类型 | button | 原生按钮默认不提交表单 |
其余属性沿用原生按钮与 Base UI useRender。disabledReason 只解释原因,需要同时设置 disabled 或 aria-disabled。图标按钮必须有 aria-label;跳转页面时使用真实链接,并通过 render 合并样式和交互属性。
键盘与约束
原生按钮通过 Tab 聚焦、Enter 或 Space 激活。保留 focus-visible 样式;禁用由应用决定,组件不会查询产品权限。Tooltip 只补充信息,不能替代按钮名称。
避免这样使用
不要把整张可点击卡片内的更多按钮嵌套到主按钮中;不要仅用危险颜色而没有动作文案;不要将 aria-disabled 当作完整的业务权限校验。
来源与版本
0.1.0,提炼自 Subtic apps/web/components/ui/button.tsx。移除了只读窗口、平台判断和产品翻译依赖。
查看由当前源码生成的类型参考
只展示 Kitseed 自身定义的属性,原生 HTML 与 Base UI 透传属性请参阅对应上游说明。
Button
| 属性 | 类型 | 默认值 |
|---|---|---|
unstyled?Keep the behavior and render composition while supplying a consumer-owned appearance. | boolean | false |
density? | KitseedDensity | — |
tooltip? | React.ReactNode | — |
disabledReason? | string | undefined | — |