diff --git a/.ua/index.json b/.ua/index.json index 31fccae..d96ecc1 100644 --- a/.ua/index.json +++ b/.ua/index.json @@ -1,6 +1,6 @@ { "$schema": "ui-arch-registry-index/0.1", - "generatedAt": "2026-10-26T14:23:51.644Z", + "generatedAt": "2026-10-26T14:25:29.547Z", "repoRoot": ".", "packages": [ { @@ -4102,6 +4102,7 @@ "传一个 signal 作为 value:回车或逗号把当前输入转成 chip,写回信号后立即重画", "点 chip 上的 × 删除单个标签,删完焦点交回输入框(chip 一删按钮就消失,不接住焦点键盘用户要从头 Tab);输入框为空时按退格键删掉最后一个(手不离键盘也能改)", "输入后直接失焦也会成标签,不必强行回车;max 满额后输入框禁用,占位文案变成「最多 N 个标签」", + "整段粘贴「上海,北京,深圳」这类带分隔符的文字会自动拆成多个标签(半角/全角逗号、换行、制表符都认),单个值仍走浏览器默认粘贴", "要区分大小写重复判断就传 allowDuplicate: true;默认按原样去重", "样式复用输入组与标签:外框聚焦光环、chip 圆角与语义色都跟既有组件一致,无新增视觉字面量" ] diff --git a/llms-full.txt b/llms-full.txt index 5082f74..4fc25fc 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -1,6 +1,6 @@ # @ui-arch 组件库 Agent 文档(无图形版) -> 自动生成于 2026-10-26T14:23:51.644Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。 +> 自动生成于 2026-10-26T14:25:29.547Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。 > 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。 ## 快速上手 @@ -2172,8 +2172,9 @@ inputTag({ value: tags, max: 5, onChange: (list) => console.log(list.length) }) 1. 传一个 signal 作为 value:回车或逗号把当前输入转成 chip,写回信号后立即重画 2. 点 chip 上的 × 删除单个标签,删完焦点交回输入框(chip 一删按钮就消失,不接住焦点键盘用户要从头 Tab);输入框为空时按退格键删掉最后一个(手不离键盘也能改) 3. 输入后直接失焦也会成标签,不必强行回车;max 满额后输入框禁用,占位文案变成「最多 N 个标签」 -4. 要区分大小写重复判断就传 allowDuplicate: true;默认按原样去重 -5. 样式复用输入组与标签:外框聚焦光环、chip 圆角与语义色都跟既有组件一致,无新增视觉字面量 +4. 整段粘贴「上海,北京,深圳」这类带分隔符的文字会自动拆成多个标签(半角/全角逗号、换行、制表符都认),单个值仍走浏览器默认粘贴 +5. 要区分大小写重复判断就传 allowDuplicate: true;默认按原样去重 +6. 样式复用输入组与标签:外框聚焦光环、chip 圆角与语义色都跟既有组件一致,无新增视觉字面量 现场演示:apps/docs/demo.html#sec-inputtag diff --git a/packages/skin/ui/src/inputTag.ts b/packages/skin/ui/src/inputTag.ts index 46499a2..aafe550 100644 --- a/packages/skin/ui/src/inputTag.ts +++ b/packages/skin/ui/src/inputTag.ts @@ -12,6 +12,7 @@ export function inputTag(props: InputTagProps): HTMLElement { const limit = props.max ?? 0; // 0 = 不限条数 const maxLength = props.maxLength ?? 24; // 单个标签超长直接截断,防止一个标签撑爆整行 const allowDuplicate = props.allowDuplicate ?? false; + const SEP = /[,,\n\t]+/; // 多值粘贴的分隔符:半角 / 全角逗号、换行、制表符(从表格或列表里整段粘来最常见) root.append(input); /*** 作用:写回标签集合(单一出口:信号与 onChange 永远同源,避免两处各写一次) ***/ @@ -63,6 +64,12 @@ export function inputTag(props: InputTagProps): HTMLElement { if (list.length) put(list.slice(0, -1)); // 空框退格:删掉最后一个 chip } }); + input.addEventListener('paste', (event) => { + const text = event.clipboardData?.getData('text') ?? ''; + if (!SEP.test(text)) return; // 单值粘贴交给浏览器默认行为,不打断普通输入 + event.preventDefault(); + text.split(SEP).forEach((piece) => commit(piece)); // 多值粘贴:拆成多个 chip,逐个过截断 / 去重 / 上限 + }); input.addEventListener('blur', () => commit(input.value)); // 失焦即入列:手输后忘了回车也不会丢 root.addEventListener('click', () => input.focus()); // 点外框任意位置都聚焦输入框 diff --git a/packages/skin/ui/ua.manifest.json b/packages/skin/ui/ua.manifest.json index e9291f6..99897b3 100644 --- a/packages/skin/ui/ua.manifest.json +++ b/packages/skin/ui/ua.manifest.json @@ -3973,6 +3973,7 @@ "传一个 signal 作为 value:回车或逗号把当前输入转成 chip,写回信号后立即重画", "点 chip 上的 × 删除单个标签,删完焦点交回输入框(chip 一删按钮就消失,不接住焦点键盘用户要从头 Tab);输入框为空时按退格键删掉最后一个(手不离键盘也能改)", "输入后直接失焦也会成标签,不必强行回车;max 满额后输入框禁用,占位文案变成「最多 N 个标签」", + "整段粘贴「上海,北京,深圳」这类带分隔符的文字会自动拆成多个标签(半角/全角逗号、换行、制表符都认),单个值仍走浏览器默认粘贴", "要区分大小写重复判断就传 allowDuplicate: true;默认按原样去重", "样式复用输入组与标签:外框聚焦光环、chip 圆角与语义色都跟既有组件一致,无新增视觉字面量" ]