输入
Password
带密码可见性切换能力的输入框组件
Password 用于输入密码、密钥等敏感文本。组件基于 Input 封装,保留输入框的尺寸、插槽、清空按钮和原生 input 属性,并额外提供密码明文/密文切换能力。
import { Password } from '@skyroc/web-ui';何时使用
- 需要输入密码、确认密码、访问令牌或密钥。
- 需要让用户临时查看输入内容,减少密码输入错误。
- 需要复用 Input 的尺寸、插槽、清空按钮和表单属性。
- 普通单行文本输入使用 Input;需要数值步进时使用 NumberInput。
基础用法
默认情况下,Password 使用密文输入,并在右侧显示可见性切换按钮。
Preview
Code
Loading...
<Password placeholder="Please input password" />受控可见性
通过 visible 和 onVisibleChange 控制密码是否明文显示;非受控模式使用 defaultVisible。
Preview
Code
Loading...
const [visible, setVisible] = useState(false);
<Password visible={visible} onVisibleChange={setVisible} />可清空
通过 clearable 显示清空按钮。清空按钮来自 Input,会清空当前 DOM value 并触发 input 事件。
Preview
Code
Loading...
<Password clearable defaultValue="abc123" />自定义图标
通过 hiddenIcon 和 visibleIcon 替换默认的 EyeOff / Eye 图标。hiddenIcon 在密码处于隐藏状态时显示,visibleIcon 在密码处于明文状态时显示。
Preview
Code
Loading...
<Password
hiddenIcon={<Lock />}
visibleIcon={<LockOpen />}
/>禁用
通过 disabled 禁用输入框。Password 继承 Input 的只读逻辑,readOnly 也会让底层 input 不可编辑。
Preview
Code
Loading...
<Password disabled defaultValue="abc123" />尺寸
通过 size 调整高度、字号、内边距和插槽间距,从 xs 到 2xl 共 6 个尺寸。
Preview
Code
Loading...
| 尺寸 | 高度 | 字号 | 适用场景 |
|---|---|---|---|
xs | 24px | 10px | 紧凑筛选、表格内嵌 |
sm | 28px | 12px | 辅助表单、侧边栏 |
md | 32px | 14px | 常规场景(默认) |
lg | 36px | 16px | 重点表单项 |
xl | 40px | 18px | 大号输入区域 |
2xl | 48px | 20px | 大幅表单或首屏输入 |
API
Password
通用属性参考:继承 Input 的常用属性和原生 input 属性,但底层 type 由可见性状态自动控制。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| value | 受控输入值 | string | number | readonly string[] | - |
| defaultValue | 非受控模式下的默认值 | string | number | readonly string[] | - |
| onChange | 输入值变化时触发 | (event) => void | - |
| placeholder | 占位文本 | string | - |
| visible | 受控模式下密码是否明文显示 | boolean | - |
| defaultVisible | 非受控模式下密码是否默认明文显示 | boolean | false |
| onVisibleChange | 可见性状态变化时触发 | (visible: boolean) => void | - |
| hiddenIcon | 密码隐藏时显示的切换图标 | ReactNode | <EyeOff /> |
| visibleIcon | 密码明文显示时显示的切换图标 | ReactNode | <Eye /> |
| clearable | 是否显示清空按钮 | boolean | false |
| disabled | 是否禁用输入框 | boolean | - |
| readOnly | 是否只读;当前实现会同时禁用底层 input 的编辑能力 | boolean | - |
| leading | 前置插槽,显示在输入框左侧 | ReactNode | - |
| trailing | 后置插槽,显示在清空按钮和可见性按钮之间 | ReactNode | - |
| size | 尺寸,影响高度、字号、内边距和插槽间距 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| className | 自定义 class;继承 Input 当前的兜底 class 行为 | ClassValue | - |
| classNames | Input 各 slot 的自定义 class(root / control / clearable / visible) | InputClassNames | - |
| name | 表单字段名称 | string | - |
| required | 是否必填 | boolean | - |
| autoComplete | 浏览器自动完成策略;默认值为 off,可通过 props 覆盖 | string | 'off' |
| autoFocus | 是否自动聚焦 | boolean | - |
类型
PasswordProps
Password 组件属性。继承 InputProps,并增加密码可见性控制相关字段。
| 字段 | 类型 | 说明 |
|---|---|---|
| value | string | number | readonly string[] | 受控输入值。 |
| defaultValue | string | number | readonly string[] | 非受控默认值。 |
| onChange | (event) => void | 输入值变化回调。 |
| placeholder | string | 占位文本。 |
| visible | boolean | 受控可见性状态。 |
| defaultVisible | boolean | 非受控默认可见性状态。 |
| onVisibleChange | (visible: boolean) => void | 可见性变化回调。 |
| hiddenIcon | ReactNode | 密码隐藏时显示的切换图标。 |
| visibleIcon | ReactNode | 密码明文显示时显示的切换图标。 |
| clearable | boolean | 是否显示清空按钮。 |
| disabled | boolean | 是否禁用。 |
| readOnly | boolean | 是否只读。 |
| leading | ReactNode | 前置插槽内容。 |
| trailing | ReactNode | 后置插槽内容,会显示在可见性按钮之前。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 组件尺寸。 |
| className | ClassValue | 自定义 class。 |
| classNames | InputClassNames | Input slot class 配置。 |
| name | string | 表单字段名称。 |
| required | boolean | 是否必填。 |
| autoComplete | string | 浏览器自动完成策略。 |
| autoFocus | boolean | 是否自动聚焦。 |
| ...inputProps | input element props without native size | 其他原生 input 属性;底层 type 由 Password 自动控制。 |
InputClassNames
Password 继承 Input 的 slot class 配置。
| 字段 | 类型 | 说明 |
|---|---|---|
| root | ClassValue | 外层容器的 class。 |
| control | ClassValue | 底层 input 的 class。 |
| clearable | ClassValue | 清空按钮图标的 class。 |
| visible | ClassValue | Input 变体中预留的可见状态 slot,Password 当前没有直接使用该 slot。 |