TagInput

标签输入框,支持回车 / 分隔符提交、退格删除、去重、上限与失焦提交。

设计文档

如何引入

import { TagInput } from '@chenzy-design/svelte';

基础标签输入

回车或逗号添加标签,退格删除末项

svelte vite
标签:svelte / vite

分隔符与数量上限

多分隔符批量添加,max 限制数量,onExceed 提示

react vue
标签(2/5):react / vue

不允许重复

allowDuplicates=false 时重复标签被忽略

frontend
标签(1):frontend 尝试重复输入 frontend,不会新增。

自定义标签渲染

renderTagItem 完全接管标签外观

#1 urgent #2 design
标签:urgent / design

尺寸 / 失焦添加 / 禁用

size、addOnBlur、showClear 与 disabled

small + 失焦自动添加
sm
标签:sm
large
blur add
标签:blur / add
disabled
readonly lib
标签:readonly / lib

前缀 / 后缀

prefix、suffix 展示前后缀

标签: svelte vite
前端 设计

限制展示数量

maxTagCount 超出折叠为 +N,hover 查看剩余,点击展开

svelte vite +3

拖拽排序

draggable 配合 allowDuplicates=false 拖拽重排标签

需求 设计 开发 测试 上线

受控

value + onChange 受控,外部展示当前标签数组

svelte vite
当前标签:svelte / vite

命令式聚焦

通过 bind:this 获取实例,调用 focus() / blur()

svelte vite

事件回调

onAdd、onRemove、onChange 回调记录到日志

svelte
暂无事件,试试添加或删除标签

截断提示

maxTagTextLength 截断,showContentTooltip 悬浮显示全文

前端工程化实… 设计系统与组… Svelte…
标签超过 6 个字符即截断,悬浮标签查看全文

自定义校验

validateTag 拒绝非法标签,onInvalid 上报原因

react svelte
试试输入包含数字或符号的标签

自定义删除图标

removeIcon 自定义默认标签的删除图标

svelte vite unocss

建议补全

renderSuggestions 输入时弹建议浮层,点击添加

Svelte
已选:Svelte

API 参考

TagInput

Props

属性说明类型默认值
valuestring[]undefined
defaultValuestring[][]
inputValuestringundefined
defaultInputValuestring''
placeholderstringundefined
size'small'|'default'|'large'default
status'default'|'warning'|'error'default
disabledbooleanfalse
readonlybooleanfalse
maxnumberundefined
maxLengthnumberundefined
maxTagTextLengthnumberundefined
separatorstring|string[]['Enter']
addOnBlurbooleanfalse
allowDuplicatesbooleanfalse
trimWhitespacebooleantrue
draggablebooleanfalse
split自定义分隔处理函数(对齐 Semi,优先于内置拆分)(value: string, separator: string) => string[]undefined
prefix输入框前缀(string/图标自动带间隔)string | Snippetundefined
suffix输入框后缀string | Snippetundefined
maxTagCount标签最大展示数量,超出折叠为 +Nnumberundefined
showRestTagsPopoverhover +N 是否用 Popover 展示剩余标签booleantrue
expandRestTagsOnClick点击 +N 是否展开剩余标签booleantrue
showClear显示清除全部按钮booleanfalse
clearIcon自定义清除图标Snippetundefined
preventScrollfocus 时阻止滚动booleanfalse
autoFocus挂载自动聚焦booleanfalse
inputProps透传给内部 input 的额外属性Record<string, unknown>undefined
renderTagItem完全自定义 tag 渲染Snippet<[{ value: string; index: number; onClose: () => void }]>undefined
onChange(tags: string[]) => voidundefined
onInputChange(value: string) => voidundefined
onAdd新增标签后触发,传当前完整数组(对齐 Semi)(addedValue: string[]) => voidundefined
onRemove移除单个标签时触发(对齐 Semi)(removedValue: string, index: number) => voidundefined
onKeyDown输入框 keydown 透传(对齐 Semi)(e: KeyboardEvent) => voidundefined
onExceed超出 max 时触发,传当前标签数组(对齐 Semi)(value: string[]) => voidundefined
onInputExceed单 tag 超出 maxLength 时触发(value: string) => voidundefined
onFocus输入框聚焦(e: FocusEvent) => voidundefined
onBlur输入框失焦(e: FocusEvent) => voidundefined
ariaLabelstringundefined

Methods

属性类型说明
focus()命令式聚焦输入框(尊重 preventScroll,对齐 Semi)
blur()命令式移除焦点(对齐 Semi)

Accessibility

ARIA rolegroup
  • 容器 role=group + aria-label
  • 每个标签删除按钮含 aria-label,文案取自 locale(TagInput.remove,默认中文「删除」)
  • 键盘:分隔符(默认 Enter)提交、输入为空时 Backspace 删除末尾标签
  • draggable 仅为鼠标增强(HTML5 DnD);键盘增删标签交互不受影响
  • error 状态时 aria-invalid 标注于内部输入

设计变量

变量默认值用法
--cd-color-tag-input-border-default transparent标签输入框描边颜色 - 默认
--cd-color-tag-input-border-focus var(--cd-color-focus-border)标签输入框描边颜色 - 选中态
--cd-color-tag-input-border-hover transparent标签输入框描边颜色 - 悬浮
--cd-color-tag-input-danger-bg-default var(--cd-color-danger-light-default)危险标签输入框背景颜色 - 默认
--cd-color-tag-input-danger-bg-focus var(--cd-color-danger-light-default)危险标签输入框背景颜色 - 选中
--cd-color-tag-input-danger-bg-hover var(--cd-color-danger-light-hover)危险标签输入框背景颜色 - 悬浮
--cd-color-tag-input-danger-border-default var(--cd-color-danger-light-default)危险标签输入框描边颜色 - 默认
--cd-color-tag-input-danger-border-focus var(--cd-color-danger)危险标签输入框描边颜色 - 选中
--cd-color-tag-input-danger-border-hover var(--cd-color-danger-light-hover)危险标签输入框描边颜色 - 悬浮
--cd-color-tag-input-default-bg-default var(--cd-color-fill-0)标签输入框背景颜色 - 默认