Input
单行文本输入基础件,v-model 双向绑定,自带校验失败态(invalid + aria-invalid)与原生 blur 事件透传。
Input、Select、Radio、Button 是 @toimc/vue 的四个基础表单原语——构建表单与设置类界面的原子件。视觉语言对齐原子 CSS 体系的设计(subtle 边框、focus ring、统一控件高度、快速 transition),但全部以本库 --ai-chat-* 设计令牌实现,未引入任何原子 CSS 框架,暗色主题随语义令牌自动适配。
代码演示
v-model 双向绑定,输入即更新。Best for:设置页表单、命名新建会话等单行文本录入。
name = (空)
密码输入
type="password" 渲染密码框,autocomplete 透传原生属性(注册新密钥场景建议 new-password,避免浏览器误回填)。Best for:API Key、访问令牌等敏感凭据录入。
校验失败态与失焦事件
invalid 会同时渲染 error 色边框和 aria-invalid="true"(未设置时不输出该属性);blur 透传原生失焦事件,适合「失焦后 touched 才显示错误」的校验模式。Best for:必填校验、失焦后延迟报错的表单:
校验失败态与失焦事件
invalid 会同时渲染 error 色边框和 aria-invalid="true"(未设置时不输出该属性);blur 透传原生失焦事件,适合「失焦后 touched 才显示错误」的校验模式:
尺寸与禁用
size="sm"(32px)用于工具栏等紧凑区,默认 md(36px);disabled 降低透明度且输入不更新 v-model。Best for:工具栏 / 窄侧栏用 sm,只读展示或权限不足时用 disabled:
在宿主应用中
vue
<script setup lang="ts">
import { ref } from 'vue'
import { Input } from '@toimc/vue'
const name = ref('')
</script>
<template>
<Input v-model="name" placeholder="请输入模型名称" />
</template>视觉要点
- 统一控件高度:
--ai-chat-control-height-md(36px)/--ai-chat-control-height-sm(32px),与 Select、Button 同一高度体系 - focus ring:聚焦(
:focus-visible)时 accent 边框 +--ai-chat-control-ring(3px 低透明度 accent 阴影);hover 时边框加深 - invalid 态:
--ai-chat-color-status-error边框,聚焦时 ring 同步变 error 色 - 暗色自动适配:背景/边框/文字/placeholder 全部引用语义令牌,
[data-theme='dark']翻转语义层即生效 - 样式为 scoped(抗宿主 reset):宿主未分层表单元素 reset(Tailwind preflight / modern-normalize 的
border: 0+padding: 0)会压过@layer内的库样式,scoped 属性选择器凭特异性免疫 - transition:边框/阴影/透明度统一走
--ai-chat-duration-fast(0.12s),prefers-reduced-motion时关闭
API
Props
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| v-model | string | '' | 输入值,双向绑定 |
| type | 'text' | 'password' | 'text' | 原生输入类型 |
| placeholder | string | — | 占位文案 |
| disabled | boolean | false | 禁用(输入不更新 v-model) |
| invalid | boolean | false | 校验失败态:error 边框 + aria-invalid="true" |
| size | 'sm' | 'md' | 'md' | 控件高度 |
| autocomplete | string | — | 透传原生 autocomplete(如 new-password) |
Events
| 事件名 | 参数 | 说明 |
|---|---|---|
| update:modelValue | (value: string) | v-model 更新事件 |
| blur | (event: Event) | 原生失焦事件透传,适合 touched 校验时机 |