Skip to content

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 传空数组则不显示「常用」这一行。

属性 ​

名称类型默认值说明
frequentEmojisreadonly EmojiOption[]DEFAULT_FREQUENT_EMOJIS列在最前面、出现在「常用」下面的表情。空数组则不显示这一行。
categoriesreadonly EmojiCategory[]内置集按组分好的表情。不传则加载内置集。
heightnumber | string'calc(var(--astryx-spacing-8, 32px) * 10)'可滚动表情列表的高度。
hasAutoFocusbooleanfalse挂载时聚焦搜索框,适合内嵌或放在对话框里。放在弹出层里时应改用弹出层自己的自动聚焦。
labelstring文案键 @astryx.emojiPicker.label表情列表的无障碍名称。没有悬停或聚焦的表情时,预览栏也用这句话。
searchLabelstring文案键 @astryx.emojiPicker.searchLabel搜索框的占位符和隐藏标签。

EmojiOption 是 { emoji: string; name: string; keywords?: readonly string[] }。EmojiCategory 是 { name: string; emojis: readonly EmojiOption[] }。

事件 ​

名称参数说明
selectemoji: string, option: EmojiOption选中的表情字符和对应的选项。

键盘与文案 ​

每个分组是以标题命名的 WAI-ARIA 网格,每行 8 个格子。整张选择器只有一个 Tab 落脚点:从搜索框按 Tab 落到它,再按一次 Tab 离开选择器。方向键按布局移动,Home / End 走到行首行尾,Ctrl+Home / Ctrl+End 跳到第一个和最后一个表情,Enter 选中当前表情。搜索框里按 Down 进入第一个表情,第一行再按 Up 回到搜索框。搜索框里按 Enter 选中第一条匹配。输入法正在组字时,Enter 和方向键留给候选框。

过滤框、分组标题、加载中、加载失败和没有匹配的句子走 @astryx.emojiPicker.*。内置分组标题会翻译;内置表情的名称本身仍是英文 CLDR,其他语言请传入本地化的 categories。