@ edux 设计/ 按钮
无头按键原始人接通了Edux设计标志. 货包装有五个部件:
Button- 有大小 + 变体帮助器的主动作按钮.IconButton- 只有圆形图标的按钮表面.MenuButton- 语义菜单触发按钮.ButtonGroup- 带有滑动活性状态的分块控制,用于背景过滤.ButtonCounter- 可选择编辑值的增减控制.
所有东西都是通过分享来建造的 cx 帮助者如此造型与系统其他部分保持一致.
安装
pnpm add @edux-design/buttons @edux-design/utils
# or
npm install @edux-design/buttons @edux-design/utils
端点 : @edux-design/tokens@>=0.2.0 <0.3.0, (中文(简体) ), react@^19.1.0, (中文(简体) ), react-dom@^19.1.0。 。 。 .
使用量
import {
Button,
ButtonCounter,
ButtonGroup,
ButtonGroupItem,
IconButton,
MenuButton,
} from "@edux-design/buttons";
import { Close, Warning } from "@edux-design/icons";
export function Actions({ menuOpen, setMenuOpen }) {
return (
<div className="flex gap-4">
<Button size="small">Save</Button>
<Button isSecondary isStretched>
Cancel
</Button>
<Button isDanger disabled>
Delete
</Button>
<IconButton icon={<Close aria-hidden="true" />} aria-label="Close dialog" />
<MenuButton
aria-expanded={menuOpen}
aria-controls="actions-menu"
onClick={() => setMenuOpen((prev) => !prev)}
>
Options
</MenuButton>
<ButtonCounter defaultValue={2} min={1} aria-label="Quantity" />
</div>
);
}
export function SegmentedFilter() {
const [value, setValue] = React.useState("inbox");
return (
<ButtonGroup value={value} onChange={(nextValue) => setValue(nextValue)}>
<ButtonGroupItem value="inbox">Inbox (11)</ButtonGroupItem>
<ButtonGroupItem value="drafts">Drafts (11)</ButtonGroupItem>
<ButtonGroupItem
value="alerts"
endAdornment={<Warning className="h-4 w-4 text-warning-600" />}
>
Alerts
</ButtonGroupItem>
</ButtonGroup>
);
}
无障碍说明
IconButton需要通过aria-label或者说aria-labelledby。 。 。 .MenuButton成为本地人<button>默认aria-haspopup改为"menu"。 。 。 .ButtonGroup使用有旋转的无线电组语义tabIndex并支持箭头键加主/端.ButtonCounter通过显示模式的标签输出和原生输出来显示其值spinbutton在可编辑模式中.
关键道具
| 构成部分 | 重要道具 |
|---|---|
Button | “大小=”小 |
IconButton | icon, (中文(简体) ), size, (中文(简体) ), isBare, (中文(简体) ), isDanger, (中文(简体) ), disabled, (中文(简体) ), aria-label 编号 : aria-labelledby |
MenuButton | 本地按钮道具, size, (中文(简体) ), caret, (中文(简体) ), aria-expanded, (中文(简体) ), aria-controls |
ButtonGroup | value 编号 : defaultValue, (中文(简体) ), onChange, (中文(简体) ), size, (中文(简体) ), isStretched,每个选项 startAdornment 编号 : endAdornment, (中文(简体) ), disabled |
ButtonCounter | value 编号 : defaultValue, (中文(简体) ), min, (中文(简体) ), max, (中文(简体) ), step, (中文(简体) ), isEditable, (中文(简体) ), inputProps |
按钮在开发中警告,如果你通过相冲突的变体布林斯,那么你知道哪种风格获胜. IconButton 也警告它是否缺少一个无障碍的名称.
共享控制大小
按键组件将其公共大小名称映射到语义控制大小合同 @edux-design/tokens数字 :
| 公共规模 | 调试工具 | 计算大小 |
|---|---|---|
small | control-sm | 36px |
medium | control-md | 44px |
large | control-lg | 56px |
Button 使用共享高度, IconButton 按钮的控件使用共享平方大小,以及 MenuButton 使用共享最小高度。 具体组成部分的内容宽度仍为其组成部分所拥有.
发展
pnpm --filter @edux-design/buttons lint
pnpm --filter @edux-design/buttons check-types
pnpm --filter @edux-design/buttons build
故事就住在这下面 src/demo (例如 Button.stories.jsx 财务报告和审定财务报表 ButtonGroup.stories.jsx用于快速视觉验证.
其他构成部分
工具栏控件。 。 。 .
Button 合并 className 使用共享的默认值后 cx 合同,作为
IconButton 已经 主机公用事业遵循现有的共享合并规则. 使用 size 标准
控制高度; 故意的 Tailwind 重要工具, 如 h-32! 或一个
本地语言 style 能够覆盖语义几何。 键盘焦点保持正常语义阴影并获得2px系统
Highlight 带有2px被强制颜色所抵消的大纲。 保持明显的焦点
(b) 故意压倒重点公用事业的指标.