输入
Input
支持插槽、清空按钮和尺寸变体的文本输入框
Input 用于收集单行文本、邮箱、搜索、文件等原生 input 输入。组件在原生 <input> 外包了一层可聚焦样式容器,并提供前置插槽、后置插槽、清空按钮和统一尺寸。
import { Input } from '@skyroc/web-ui';何时使用
- 需要收集单行文本、邮箱、搜索关键字、文件等原生 input 数据。
- 输入框需要前后图标或自定义操作区。
- 需要和项目主题尺寸、边框、聚焦态保持一致。
- 需要数字步进交互时使用 NumberInput;需要验证码分段输入时使用 InputOTP。
基础用法
Input 支持受控和非受控用法,常见原生 input 属性会透传到底层 <input>。
Preview
Code
Loading...
禁用
通过 disabled 禁用输入框。readOnly 也会让底层 input 进入不可编辑状态。
Preview
Code
Loading...
插槽
通过 leading 和 trailing 放置前置、后置内容,常用于搜索图标、单位、快捷操作等。
Preview
Code
Loading...
可清空
通过 clearable 显示清空按钮。清空按钮会在 hover 输入框容器时显示,并在点击后清空当前 DOM value。
Preview
Code
Loading...
尺寸
通过 size 调整输入框高度、字号、横向内边距和插槽间距,从 xs 到 2xl 共 6 个尺寸。
| 尺寸 | 高度 | 字号 | 适用场景 |
|---|---|---|---|
xs | 24px | 10px | 紧凑筛选、表格内嵌 |
sm | 28px | 12px | 辅助表单、侧边栏 |
md | 32px | 14px | 常规场景(默认) |
lg | 36px | 16px | 重点表单项 |
xl | 40px | 18px | 大号输入区域 |
2xl | 48px | 20px | 大幅表单或首屏输入 |
自定义样式
通过 classNames 控制不同 slot:root、control、clearable 和 visible。如果只需要调整整体容器,优先使用 classNames.root;当前实现中 className 会作为多个 slot 的兜底 class 使用,不适合做精细化样式控制。
API
Input
通用属性参考:继承原生 input 属性,但移除了原生 size 属性,改用项目统一尺寸。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| value | 受控输入值 | string | number | readonly string[] | - |
| defaultValue | 非受控模式下的默认值 | string | number | readonly string[] | - |
| onChange | 输入值变化时触发 | (event) => void | - |
| placeholder | 占位文本 | string | - |
| type | 原生 input 类型 | string | 'text' |
| disabled | 是否禁用输入框 | boolean | - |
| readOnly | 是否只读;当前实现会同时禁用底层 input 的编辑能力 | boolean | - |
| clearable | 是否显示清空按钮 | boolean | false |
| leading | 前置插槽,显示在输入框左侧 | ReactNode | - |
| trailing | 后置插槽,显示在输入框右侧 | ReactNode | - |
| size | 尺寸,影响高度、字号、内边距和插槽间距 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| className | 自定义 class;当前会作为多个 slot 的兜底 class 使用 | ClassValue | - |
| classNames | 各 slot 的自定义 class(root / control / clearable / visible) | InputClassNames | - |
| name | 表单字段名称 | string | - |
| required | 是否必填 | boolean | - |
| autoComplete | 浏览器自动完成策略 | string | - |
| autoFocus | 是否自动聚焦 | boolean | - |
类型
InputProps
Input 组件属性。继承原生 input 属性,移除原生 size,并增加项目尺寸、插槽、清空按钮和 slot class 配置。
| 字段 | 类型 | 说明 |
|---|---|---|
| autoComplete | string | 浏览器自动完成策略。 |
| autoFocus | boolean | 是否自动聚焦。 |
| className | ClassValue | 自定义 class。当前会作为多个 slot 的兜底 class 使用。 |
| classNames | InputClassNames | 各 slot 的自定义 class。 |
| clearable | boolean | 是否显示清空按钮。 |
| defaultValue | string | number | readonly string[] | 非受控默认值。 |
| disabled | boolean | 是否禁用。 |
| leading | ReactNode | 前置插槽内容。 |
| name | string | 表单字段名称。 |
| onChange | (event) => void | 输入值变化回调。 |
| placeholder | string | 占位文本。 |
| readOnly | boolean | 是否只读。 |
| required | boolean | 是否必填。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 组件尺寸。来自 StyledComponentProps。 |
| trailing | ReactNode | 后置插槽内容。 |
| type | string | 原生 input 类型。 |
| value | string | number | readonly string[] | 受控输入值。 |
| ...inputProps | input element props without native size | 其他原生 input 属性。 |
InputClassNames
各 slot 的自定义 class,用于精细化控制 Input 各部分的样式。
| 字段 | 类型 | 说明 |
|---|---|---|
| root | ClassValue | 外层容器的 class。 |
| control | ClassValue | 底层 input 的 class。 |
| clearable | ClassValue | 清空按钮图标的 class。 |
| visible | ClassValue | 变体中预留的可见状态 slot,当前主组件没有直接使用。 |
StyledComponentProps<T>
项目内用于包装组件 props 的通用类型。
| 字段 | 类型 | 说明 |
|---|---|---|
| ...sourceProps | inherited props without className | 继承原始组件属性,但重新定义 className。 |
| className | ClassValue | 组件 class。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 项目统一尺寸类型。 |
SlotProps
前后插槽属性。
| 字段 | 类型 | 说明 |
|---|---|---|
| leading | ReactNode | 前置插槽内容。 |
| trailing | ReactNode | 后置插槽内容。 |
InputSlots
Input 可配置 classNames 的内置 slot
'root' | 'control' | 'clearable' | 'visible'