简体中文
EmojiPicker
独立的表情面板:上面是搜索框,下面按分组列出全部表情,常用表情排在最前。可以内嵌,也可以放进弹出层。选中后发出 select。选择器自己不保留选中态。
这是 Meta Astryx 实验室 EmojiPicker 的 Vue 移植,不是把现有 ChatEmojiPicker 改个名。ChatEmojiPicker 仍然是聊天里那一组短而固定的回应表情弹出层;EmojiPicker 会加载内置的 CLDR 分组(或你传入的分组),支持常用表情、关键词搜索、预览栏,以及跨所有分组共用的一个 Tab 落脚点。后续的 CommentComposer 会复用这个面板。
这个组件属于 @astryx-vue/lab,只通过 canary 标签发布。
导入
ts
import { DEFAULT_FREQUENT_EMOJIS, EmojiPicker } from '@astryx-vue/lab'不传 categories 时,第一次挂载会加载内置集:Emoji 15 以内的全部表情,带英文 CLDR 名称,数据对齐 Meta Astryx v0.7.13(由 emojibase-data 17.0.0 生成)。要本地化或自定义时,传入自己的 categories 和 frequentEmojis。frequentEmojis 传空数组则不显示「常用」这一行。
属性
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
frequentEmojis | readonly EmojiOption[] | DEFAULT_FREQUENT_EMOJIS | 列在最前面、出现在「常用」下面的表情。空数组则不显示这一行。 |
categories | readonly EmojiCategory[] | 内置集 | 按组分好的表情。不传则加载内置集。 |
height | number | string | 'calc(var(--astryx-spacing-8, 32px) * 10)' | 可滚动表情列表的高度。 |
hasAutoFocus | boolean | false | 挂载时聚焦搜索框,适合内嵌或放在对话框里。放在弹出层里时应改用弹出层自己的自动聚焦。 |
label | string | 文案键 @astryx.emojiPicker.label | 表情列表的无障碍名称。没有悬停或聚焦的表情时,预览栏也用这句话。 |
searchLabel | string | 文案键 @astryx.emojiPicker.searchLabel | 搜索框的占位符和隐藏标签。 |
EmojiOption 是 { emoji: string; name: string; keywords?: readonly string[] }。EmojiCategory 是 { name: string; emojis: readonly EmojiOption[] }。
事件
| 名称 | 参数 | 说明 |
|---|---|---|
select | emoji: string, option: EmojiOption | 选中的表情字符和对应的选项。 |
键盘与文案
每个分组是以标题命名的 WAI-ARIA 网格,每行 8 个格子。整张选择器只有一个 Tab 落脚点:从搜索框按 Tab 落到它,再按一次 Tab 离开选择器。方向键按布局移动,Home / End 走到行首行尾,Ctrl+Home / Ctrl+End 跳到第一个和最后一个表情,Enter 选中当前表情。搜索框里按 Down 进入第一个表情,第一行再按 Up 回到搜索框。搜索框里按 Enter 选中第一条匹配。输入法正在组字时,Enter 和方向键留给候选框。
过滤框、分组标题、加载中、加载失败和没有匹配的句子走 @astryx.emojiPicker.*。内置分组标题会翻译;内置表情的名称本身仍是英文 CLDR,其他语言请传入本地化的 categories。