mdm-im-v3 2.0.3 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +69 -0
  3. package/dist/{FilePreview-CqsQCI87.js → FilePreview-Cz0KMA_m.js} +2 -2
  4. package/dist/assets/extracted/bc26358d.woff +0 -0
  5. package/dist/assets/extracted/be398edc.ttf +0 -0
  6. package/dist/assets/extracted/de12ee92.woff2 +0 -0
  7. package/dist/core.es.js +2 -2
  8. package/dist/{index-C4_SSULD.js → index-C8koozDu.js} +697 -47
  9. package/dist/{index-B3MeQmIL.js → index-GiaKeCU7.js} +1550 -3296
  10. package/dist/{index-D8yaC3ve.js → index-P9_HILzo.js} +3700 -480
  11. package/dist/index.es.js +1 -1
  12. package/dist/style/index.css +1 -1
  13. package/dist-h5/{ChatHistoryH5-Deqlnw3u.js → ChatHistoryH5-CKDqKPl-.js} +2 -2
  14. package/dist-h5/{ChatPageH5-wyLGmPhW.js → ChatPageH5-FXZxtcQr.js} +975 -164
  15. package/dist-h5/{ChatSettingsH5-DD3dnI-H.js → ChatSettingsH5-PackrlPt.js} +169 -27
  16. package/dist-h5/{CreateGroupH5-3LIujy3_.js → CreateGroupH5-CO_ZH36_.js} +2 -2
  17. package/dist-h5/{GroupAnnouncementH5-5EpXQs5V.js → GroupAnnouncementH5-yUDR5kYW.js} +1 -1
  18. package/dist-h5/{GroupInfoDialogH5-fgcrbRyp.js → GroupInfoDialogH5-BRk-_mEn.js} +1 -1
  19. package/dist-h5/{GroupMembersH5-DX2lxrLB.js → GroupMembersH5-BVHUF2mG.js} +1 -1
  20. package/dist-h5/{GroupNoticeH5-DVXrcmP9.js → GroupNoticeH5-KA-L2h9r.js} +1 -1
  21. package/dist-h5/{MemberDetailH5-DAVUVr30.js → MemberDetailH5-BfAE0nx-.js} +2 -2
  22. package/dist-h5/{SearchPageH5-BiGhJF4U.js → SearchPageH5-B6B_U4hW.js} +2 -2
  23. package/dist-h5/{SelectMembersH5-DbrSnTg3.js → SelectMembersH5-CrPoBnYp.js} +2 -2
  24. package/dist-h5/assets/extracted/bc26358d.woff +0 -0
  25. package/dist-h5/assets/extracted/be398edc.ttf +0 -0
  26. package/dist-h5/assets/extracted/de12ee92.woff2 +0 -0
  27. package/dist-h5/{imChat-Cz45JFEl.js → imChat-pGlpr8Vj.js} +40 -7
  28. package/dist-h5/index.es.js +2 -2
  29. package/dist-h5/{indexH5-Cx3l8YDq.js → indexH5-CCvF1MV7.js} +3591 -329
  30. package/dist-h5/{indexH5-BZ77bUNH.js → indexH5-sKvS7t3k.js} +101 -69
  31. package/dist-h5/style/index-h5.css +1 -1
  32. package/package.json +72 -70
  33. package/dist-h5/request-rky8JSGo.js +0 -44
@@ -1,9 +1,9 @@
1
- import { computed, reactive, ref, onBeforeMount, watch, resolveComponent, openBlock, createElementBlock, Fragment, renderList, unref, createBlock, withCtx, createElementVNode, createVNode, createSlots, toDisplayString, withModifiers, createCommentVNode, inject, shallowRef, onBeforeUnmount, renderSlot, normalizeClass, normalizeStyle, Teleport, nextTick } from "vue";
2
- import { _ as _export_sfc, u as uploadFiles, a as _imports_0 } from "./index-B3MeQmIL.js";
1
+ import { computed, reactive, ref, onBeforeMount, watch, resolveComponent, openBlock, createElementBlock, Fragment, renderList, unref, createBlock, withCtx, createElementVNode, createVNode, createSlots, toDisplayString, withModifiers, createCommentVNode, onBeforeUnmount, inject, normalizeClass, createTextVNode, shallowRef, renderSlot, normalizeStyle, Teleport, nextTick } from "vue";
2
+ import { _ as _export_sfc, u as uploadFiles, a as useAudioPlayer, b as _imports_0 } from "./index-GiaKeCU7.js";
3
3
  import { ElMessage } from "element-plus";
4
4
  import { Promotion } from "@element-plus/icons-vue";
5
5
  import { E as Editor } from "./wangeditor-3yO_BGRp.js";
6
- import { u as useChatStore, I as IM_CVS_TYPE, t as throttle, j as debounce, L as IM_FONT_SIZE, M as IM_FONT_FAMILY, N as IM_FONT_STYLE, O as formatFileSize, P as getMediaDuration } from "./index-D8yaC3ve.js";
6
+ import { u as useChatStore, a1 as getDefaultExportFromCjs, a2 as getMediaDuration, a as IM_CVS_TYPE, D as throttle, m as debounce, a3 as IM_FONT_SIZE, a4 as IM_FONT_FAMILY, a5 as IM_FONT_STYLE, a6 as formatFileSize } from "./index-P9_HILzo.js";
7
7
  const icons = [
8
8
  {
9
9
  title: "表情",
@@ -17,6 +17,10 @@ const icons = [
17
17
  title: "文件",
18
18
  id: "file"
19
19
  },
20
+ {
21
+ title: "语音",
22
+ id: "voice"
23
+ },
20
24
  {
21
25
  title: "截图",
22
26
  id: "cut"
@@ -27,20 +31,28 @@ const icons = [
27
31
  }
28
32
  ];
29
33
  const emojis = /* @__PURE__ */ JSON.parse(`[{"annotation":"嘿嘿","name":"GRINNING FACE","hexcode":"1F600","shortcodes":["gleeful"],"tags":["笑脸","脸"],"emoji":"😀","text":"","type":1,"order":1,"group":0,"subgroup":0,"version":1,"emoticon":":D"},{"annotation":"哈哈","name":"SMILING FACE WITH OPEN MOUTH","hexcode":"1F603","shortcodes":["glad","smile"],"tags":["开口笑","笑脸","脸"],"emoji":"😃","text":"","type":1,"order":2,"group":0,"subgroup":0,"version":0.6},{"annotation":"大笑","name":"SMILING FACE WITH OPEN MOUTH AND SMILING EYES","hexcode":"1F604","shortcodes":["happy"],"tags":["哈哈","开心","笑","脸","高兴"],"emoji":"😄","text":"","type":1,"order":3,"group":0,"subgroup":0,"version":0.6},{"annotation":"嘻嘻","name":"GRINNING FACE WITH SMILING EYES","hexcode":"1F601","shortcodes":["blissful","grin"],"tags":["笑脸","脸"],"emoji":"😁","text":"","type":1,"order":4,"group":0,"subgroup":0,"version":0.6},{"annotation":"斜眼笑","name":"SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES","hexcode":"1F606","shortcodes":["amused","laugh","lol"],"tags":["开心","眯眼","笑","脸","高兴"],"emoji":"😆","text":"","type":1,"order":5,"group":0,"subgroup":0,"version":0.6,"emoticon":"xD"},{"annotation":"苦笑","name":"SMILING FACE WITH OPEN MOUTH AND COLD SWEAT","hexcode":"1F605","shortcodes":["embarassed","sweat_smile"],"tags":["冷汗","汗","脸"],"emoji":"😅","text":"","type":1,"order":6,"group":0,"subgroup":0,"version":0.6},{"annotation":"笑得满地打滚","name":"ROLLING ON THE FLOOR LAUGHING","hexcode":"1F923","shortcodes":["entertained","rofl"],"tags":["地板","打滚","笑","脸"],"emoji":"🤣","text":"","type":1,"order":7,"group":0,"subgroup":0,"version":3,"emoticon":":'D"},{"annotation":"笑哭了","name":"FACE WITH TEARS OF JOY","hexcode":"1F602","shortcodes":["joyful","haha"],"tags":["眼泪","笑","脸"],"emoji":"😂","text":"","type":1,"order":8,"group":0,"subgroup":0,"version":0.6,"emoticon":":')"},{"annotation":"呵呵","name":"SLIGHTLY SMILING FACE","hexcode":"1F642","shortcodes":["pleased","slight_smile"],"tags":["开心","笑","脸"],"emoji":"🙂","text":"","type":1,"order":9,"group":0,"subgroup":0,"version":1,"emoticon":":)"},{"annotation":"倒脸","name":"UPSIDE-DOWN FACE","hexcode":"1F643","shortcodes":["ecstatic","upside_down"],"tags":["脸","颠倒","颠倒的脸"],"emoji":"🙃","text":"","type":1,"order":10,"group":0,"subgroup":0,"version":1},{"annotation":"眨眼","name":"WINKING FACE","hexcode":"1F609","shortcodes":["coy","wink"],"tags":["媚眼","笑"],"emoji":"😉","text":"","type":1,"order":11,"group":0,"subgroup":0,"version":0.6,"emoticon":";)"},{"annotation":"羞涩微笑","name":"SMILING FACE WITH SMILING EYES","hexcode":"1F60A","shortcodes":["blush"],"tags":["害羞","微笑","羞涩","脸","脸红"],"emoji":"😊","text":"","type":1,"order":12,"group":0,"subgroup":0,"version":0.6,"emoticon":":>"},{"annotation":"微笑天使","name":"SMILING FACE WITH HALO","hexcode":"1F607","shortcodes":["innocent","halo"],"tags":["光环","天使","天真","幻想","微笑","脸"],"emoji":"😇","text":"","type":1,"order":13,"group":0,"subgroup":0,"version":1,"emoticon":"o:)"},{"annotation":"喜笑颜开","name":"SMILING FACE WITH SMILING EYES AND THREE HEARTS","hexcode":"1F970","shortcodes":["love"],"tags":["心","爱慕","迷恋","陷入爱河"],"emoji":"🥰","text":"","type":1,"order":14,"group":0,"subgroup":1,"version":11},{"annotation":"花痴","name":"SMILING FACE WITH HEART-SHAPED EYES","hexcode":"1F60D","shortcodes":["lovestruck"],"tags":["爱","红心","脸"],"emoji":"😍","text":"","type":1,"order":15,"group":0,"subgroup":1,"version":0.6},{"annotation":"好崇拜哦","name":"GRINNING FACE WITH STAR EYES","hexcode":"1F929","shortcodes":["starstruck"],"tags":["咧嘴笑","脸","露齿笑"],"emoji":"🤩","text":"","type":1,"order":16,"group":0,"subgroup":1,"version":5},{"annotation":"飞吻","name":"FACE THROWING A KISS","hexcode":"1F618","shortcodes":["flirty"],"tags":["亲亲","眨眼","脸"],"emoji":"😘","text":"","type":1,"order":17,"group":0,"subgroup":1,"version":0.6,"emoticon":":x"},{"annotation":"亲亲","name":"KISSING FACE","hexcode":"1F617","shortcodes":["kiss"],"tags":["吻","脸"],"emoji":"😗","text":"","type":1,"order":18,"group":0,"subgroup":1,"version":1},{"annotation":"微笑","name":"WHITE SMILING FACE","hexcode":"263A","shortcodes":["relaxed"],"tags":["呵呵","开心","放松","笑","脸"],"emoji":"☺️","text":"☺︎","type":0,"order":20,"group":0,"subgroup":1,"version":0.6},{"annotation":"羞涩亲亲","name":"KISSING FACE WITH CLOSED EYES","hexcode":"1F61A","shortcodes":["loving_kiss"],"tags":["亲亲","吻","羞涩","脸","闭眼"],"emoji":"😚","text":"","type":1,"order":21,"group":0,"subgroup":1,"version":0.6,"emoticon":":*"},{"annotation":"微笑亲亲","name":"KISSING FACE WITH SMILING EYES","hexcode":"1F619","shortcodes":["happy_kiss"],"tags":["亲亲","吻","微笑","脸"],"emoji":"😙","text":"","type":1,"order":22,"group":0,"subgroup":1,"version":1},{"annotation":"含泪的笑脸","name":"SMILING FACE WITH TEAR","hexcode":"1F972","shortcodes":["tear_smile"],"tags":["微笑的","感动的","感恩的","眼泪","释怀的","骄傲的"],"emoji":"🥲","text":"","type":1,"order":23,"group":0,"subgroup":1,"version":13},{"annotation":"好吃","name":"FACE SAVOURING DELICIOUS FOOD","hexcode":"1F60B","shortcodes":["yum","savour"],"tags":["津津有味","美味","脸"],"emoji":"😋","text":"","type":1,"order":24,"group":0,"subgroup":2,"version":0.6},{"annotation":"吐舌","name":"FACE WITH STUCK-OUT TONGUE","hexcode":"1F61B","shortcodes":["playful","tongue_out"],"tags":["脸","舌头","调皮"],"emoji":"😛","text":"","type":1,"order":25,"group":0,"subgroup":2,"version":1,"emoticon":":p"},{"annotation":"单眼吐舌","name":"FACE WITH STUCK-OUT TONGUE AND WINKING EYE","hexcode":"1F61C","shortcodes":["mischievous"],"tags":["单眼","吐舌","开玩笑","脸"],"emoji":"😜","text":"","type":1,"order":26,"group":0,"subgroup":2,"version":0.6,"emoticon":";p"},{"annotation":"滑稽","name":"GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE","hexcode":"1F92A","shortcodes":["crazy"],"tags":["大眼","小眼","滑稽的脸","疯狂的脸","脸"],"emoji":"🤪","text":"","type":1,"order":27,"group":0,"subgroup":2,"version":5},{"annotation":"眯眼吐舌","name":"FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES","hexcode":"1F61D","shortcodes":["facetious","lmao"],"tags":["可怕","吐舌","眯眼","眼睛","脸"],"emoji":"😝","text":"","type":1,"order":28,"group":0,"subgroup":2,"version":0.6,"emoticon":"xp"},{"annotation":"发财","name":"MONEY-MOUTH FACE","hexcode":"1F911","shortcodes":["pretentious","money_mouth"],"tags":["拜金","脸","见钱眼开","钱"],"emoji":"🤑","text":"","type":1,"order":29,"group":0,"subgroup":2,"version":1},{"annotation":"抱抱","name":"HUGGING FACE","hexcode":"1F917","shortcodes":["hugging"],"tags":["抱","拥抱","笑","脸"],"emoji":"🤗","text":"","type":1,"order":30,"group":0,"subgroup":3,"version":1},{"annotation":"不说","name":"SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH","hexcode":"1F92D","shortcodes":["gasp"],"tags":["哎呀","脸"],"emoji":"🤭","text":"","type":1,"order":31,"group":0,"subgroup":3,"version":5},{"annotation":"安静的脸","name":"FACE WITH FINGER COVERING CLOSED LIPS","hexcode":"1F92B","shortcodes":["shushing"],"tags":["嘘","安静"],"emoji":"🤫","text":"","type":1,"order":32,"group":0,"subgroup":3,"version":5},{"annotation":"想一想","name":"THINKING FACE","hexcode":"1F914","shortcodes":["curious","thinking"],"tags":["思考","想","脸"],"emoji":"🤔","text":"","type":1,"order":33,"group":0,"subgroup":3,"version":1,"emoticon":":l"},{"annotation":"闭嘴","name":"ZIPPER-MOUTH FACE","hexcode":"1F910","shortcodes":["silenced","zipper_mouth"],"tags":["嘴","脸"],"emoji":"🤐","text":"","type":1,"order":34,"group":0,"subgroup":4,"version":1,"emoticon":":z"},{"annotation":"挑眉","name":"FACE WITH ONE EYEBROW RAISED","hexcode":"1F928","shortcodes":["contempt"],"tags":["不信任","怀疑","眉毛上挑的脸","脸"],"emoji":"🤨","text":"","type":1,"order":35,"group":0,"subgroup":4,"version":5},{"annotation":"冷漠","name":"NEUTRAL FACE","hexcode":"1F610","shortcodes":["indifferent","neutral"],"tags":["脸","面无表情"],"emoji":"😐️","text":"😐︎","type":1,"order":36,"group":0,"subgroup":4,"version":0.7,"emoticon":":|"},{"annotation":"无语","name":"EXPRESSIONLESS FACE","hexcode":"1F611","shortcodes":["apathetic","expressionless"],"tags":["脸","茫然","面无表情"],"emoji":"😑","text":"","type":1,"order":37,"group":0,"subgroup":4,"version":1},{"annotation":"沉默","name":"FACE WITHOUT MOUTH","hexcode":"1F636","shortcodes":["vacant","no_mouth"],"tags":["嘴","安静","脸"],"emoji":"😶","text":"","type":1,"order":38,"group":0,"subgroup":4,"version":1,"emoticon":":#"},{"annotation":"得意","name":"SMIRKING FACE","hexcode":"1F60F","shortcodes":["cocky","smirk"],"tags":["假笑"],"emoji":"😏","text":"","type":1,"order":39,"group":0,"subgroup":4,"version":0.6,"emoticon":":j"},{"annotation":"不高兴","name":"UNAMUSED FACE","hexcode":"1F612","shortcodes":["unamused"],"tags":["不屑","不服","脸","郁闷","鄙视"],"emoji":"😒","text":"","type":1,"order":40,"group":0,"subgroup":4,"version":0.6,"emoticon":":?"},{"annotation":"翻白眼","name":"FACE WITH ROLLING EYES","hexcode":"1F644","shortcodes":["disbelief"],"tags":["无语","白眼","脸"],"emoji":"🙄","text":"","type":1,"order":41,"group":0,"subgroup":4,"version":1},{"annotation":"龇牙咧嘴","name":"GRIMACING FACE","hexcode":"1F62C","shortcodes":["grimaced"],"tags":["咬牙切齿","脸","露齿","鬼脸"],"emoji":"😬","text":"","type":1,"order":42,"group":0,"subgroup":4,"version":1,"emoticon":"8D"},{"annotation":"说谎","name":"LYING FACE","hexcode":"1F925","shortcodes":["lying"],"tags":["匹诺曹","脸","长鼻子"],"emoji":"🤥","text":"","type":1,"order":43,"group":0,"subgroup":4,"version":3},{"annotation":"松了口气","name":"RELIEVED FACE","hexcode":"1F60C","shortcodes":["relieved"],"tags":["如释重负","松口气","脸"],"emoji":"😌","text":"","type":1,"order":44,"group":0,"subgroup":5,"version":0.6},{"annotation":"沉思","name":"PENSIVE FACE","hexcode":"1F614","shortcodes":["pensive"],"tags":["心事重重","脸"],"emoji":"😔","text":"","type":1,"order":45,"group":0,"subgroup":5,"version":0.6},{"annotation":"困","name":"SLEEPY FACE","hexcode":"1F62A","shortcodes":["sleepy"],"tags":["睡觉","瞌睡","脸"],"emoji":"😪","text":"","type":1,"order":46,"group":0,"subgroup":5,"version":0.6},{"annotation":"流口水","name":"DROOLING FACE","hexcode":"1F924","shortcodes":["drooling"],"tags":["口水","垂涎三尺","脸"],"emoji":"🤤","text":"","type":1,"order":47,"group":0,"subgroup":5,"version":3},{"annotation":"睡着了","name":"SLEEPING FACE","hexcode":"1F634","shortcodes":["exhausted","sleeping"],"tags":["呼噜","打呼","脸"],"emoji":"😴","text":"","type":1,"order":48,"group":0,"subgroup":5,"version":1},{"annotation":"感冒","name":"FACE WITH MEDICAL MASK","hexcode":"1F637","shortcodes":["ill","mask"],"tags":["医生","口罩","生病","脸"],"emoji":"😷","text":"","type":1,"order":49,"group":0,"subgroup":6,"version":0.6},{"annotation":"发烧","name":"FACE WITH THERMOMETER","hexcode":"1F912","shortcodes":["sick"],"tags":["体温计","温度计","生病","脸"],"emoji":"🤒","text":"","type":1,"order":50,"group":0,"subgroup":6,"version":1},{"annotation":"受伤","name":"FACE WITH HEAD-BANDAGE","hexcode":"1F915","shortcodes":["injured"],"tags":["打绷带","脸"],"emoji":"🤕","text":"","type":1,"order":51,"group":0,"subgroup":6,"version":1},{"annotation":"恶心","name":"NAUSEATED FACE","hexcode":"1F922","shortcodes":["nauseated"],"tags":["吐","呕","脸"],"emoji":"🤢","text":"","type":1,"order":52,"group":0,"subgroup":6,"version":3,"emoticon":"%("},{"annotation":"呕吐","name":"FACE WITH OPEN MOUTH VOMITING","hexcode":"1F92E","shortcodes":["vomiting"],"tags":["不舒服","脸"],"emoji":"🤮","text":"","type":1,"order":53,"group":0,"subgroup":6,"version":5},{"annotation":"打喷嚏","name":"SNEEZING FACE","hexcode":"1F927","shortcodes":["sneezing"],"tags":["喷嚏","脸","鼻涕"],"emoji":"🤧","text":"","type":1,"order":54,"group":0,"subgroup":6,"version":3},{"annotation":"脸发烧","name":"OVERHEATED FACE","hexcode":"1F975","shortcodes":["overheating"],"tags":["出汗","发烧","发热","心狂跳","脸红"],"emoji":"🥵","text":"","type":1,"order":55,"group":0,"subgroup":6,"version":11},{"annotation":"冷脸","name":"FREEZING FACE","hexcode":"1F976","shortcodes":["freezing"],"tags":["冷","冷冰冰","冻僵","满面寒霜"],"emoji":"🥶","text":"","type":1,"order":56,"group":0,"subgroup":6,"version":11},{"annotation":"头昏眼花","name":"FACE WITH UNEVEN EYES AND WAVY MOUTH","hexcode":"1F974","shortcodes":["woozy"],"tags":["嘴唇颤抖","头晕眼花","微醺","眼花","醉醺醺"],"emoji":"🥴","text":"","type":1,"order":57,"group":0,"subgroup":6,"version":11,"emoticon":":&"},{"annotation":"晕头转向","name":"DIZZY FACE","hexcode":"1F635","shortcodes":["dizzy"],"tags":["头晕","头晕眼花","晕头","脸"],"emoji":"😵","text":"","type":1,"order":58,"group":0,"subgroup":6,"version":0.6,"emoticon":"xo"},{"annotation":"爆炸头","name":"SHOCKED FACE WITH EXPLODING HEAD","hexcode":"1F92F","shortcodes":["shocked","exploding_head"],"tags":["震惊"],"emoji":"🤯","text":"","type":1,"order":59,"group":0,"subgroup":6,"version":5},{"annotation":"牛仔帽脸","name":"FACE WITH COWBOY HAT","hexcode":"1F920","shortcodes":["cowboy"],"tags":["帽","牛仔","脸"],"emoji":"🤠","text":"","type":1,"order":60,"group":0,"subgroup":7,"version":3},{"annotation":"聚会笑脸","name":"FACE WITH PARTY HORN AND PARTY HAT","hexcode":"1F973","shortcodes":["partying","celebrating"],"tags":["号角","帽子","庆祝","聚会"],"emoji":"🥳","text":"","type":1,"order":61,"group":0,"subgroup":7,"version":11},{"annotation":"伪装的脸","name":"DISGUISED FACE","hexcode":"1F978","shortcodes":["disguised_face"],"tags":["伪装","眼镜","脸","隐瞒身份","鼻子"],"emoji":"🥸","text":"","type":1,"order":62,"group":0,"subgroup":7,"version":13},{"annotation":"墨镜笑脸","name":"SMILING FACE WITH SUNGLASSES","hexcode":"1F60E","shortcodes":["confident"],"tags":["墨镜","太阳镜","眼镜","酷"],"emoji":"😎","text":"","type":1,"order":63,"group":0,"subgroup":8,"version":1,"emoticon":"8)"},{"annotation":"书呆子脸","name":"NERD FACE","hexcode":"1F913","shortcodes":["nerd"],"tags":["奇葩","脸"],"emoji":"🤓","text":"","type":1,"order":64,"group":0,"subgroup":8,"version":1,"emoticon":":B"},{"annotation":"带单片眼镜的脸","name":"FACE WITH MONOCLE","hexcode":"1F9D0","shortcodes":["monocle"],"tags":["古板"],"emoji":"🧐","text":"","type":1,"order":65,"group":0,"subgroup":8,"version":5},{"annotation":"困扰","name":"CONFUSED FACE","hexcode":"1F615","shortcodes":["confused"],"tags":["不懂","困惑","疑惑","脸"],"emoji":"😕","text":"","type":1,"order":66,"group":0,"subgroup":9,"version":1,"emoticon":":/"},{"annotation":"担心","name":"WORRIED FACE","hexcode":"1F61F","shortcodes":["worried"],"tags":["不高兴","伤心","担忧","焦虑","脸"],"emoji":"😟","text":"","type":1,"order":67,"group":0,"subgroup":9,"version":1},{"annotation":"微微不满","name":"SLIGHTLY FROWNING FACE","hexcode":"1F641","shortcodes":["cheerless","slight_frown"],"tags":["不开心","不高兴","委屈","心情不好","脸"],"emoji":"🙁","text":"","type":1,"order":68,"group":0,"subgroup":9,"version":1},{"annotation":"不满","name":"WHITE FROWNING FACE","hexcode":"2639","shortcodes":["sad","frowning"],"tags":["不爽","不高兴","皱眉","脸"],"emoji":"☹️","text":"☹︎","type":0,"order":70,"group":0,"subgroup":9,"version":0.7,"emoticon":":("},{"annotation":"吃惊","name":"FACE WITH OPEN MOUTH","hexcode":"1F62E","shortcodes":["surprised"],"tags":["同情","啊","脸"],"emoji":"😮","text":"","type":1,"order":71,"group":0,"subgroup":9,"version":1},{"annotation":"缄默","name":"HUSHED FACE","hexcode":"1F62F","shortcodes":["hushed"],"tags":["吃惊","脸"],"emoji":"😯","text":"","type":1,"order":72,"group":0,"subgroup":9,"version":1},{"annotation":"震惊","name":"ASTONISHED FACE","hexcode":"1F632","shortcodes":["astonished"],"tags":["惊","惊讶","脸"],"emoji":"😲","text":"","type":1,"order":73,"group":0,"subgroup":9,"version":0.6,"emoticon":":o"},{"annotation":"脸红","name":"FLUSHED FACE","hexcode":"1F633","shortcodes":["flushed"],"tags":["困惑","害羞","羞涩","脸","茫然","迷茫"],"emoji":"😳","text":"","type":1,"order":74,"group":0,"subgroup":9,"version":0.6,"emoticon":":$"},{"annotation":"恳求的脸","name":"FACE WITH PLEADING EYES","hexcode":"1F97A","shortcodes":["pleading"],"tags":["可怜兮兮的眼神","怜悯","祈求"],"emoji":"🥺","text":"","type":1,"order":75,"group":0,"subgroup":9,"version":11},{"annotation":"啊","name":"FROWNING FACE WITH OPEN MOUTH","hexcode":"1F626","shortcodes":["bored"],"tags":["惊讶","目瞪口呆","脸"],"emoji":"😦","text":"","type":1,"order":76,"group":0,"subgroup":9,"version":1},{"annotation":"极度痛苦","name":"ANGUISHED FACE","hexcode":"1F627","shortcodes":["anguished","wtf"],"tags":["痛","脸","难受"],"emoji":"😧","text":"","type":1,"order":77,"group":0,"subgroup":9,"version":1,"emoticon":":s"},{"annotation":"害怕","name":"FEARFUL FACE","hexcode":"1F628","shortcodes":["fearful"],"tags":["怕","恐怖","恐惧","脸"],"emoji":"😨","text":"","type":1,"order":78,"group":0,"subgroup":9,"version":0.6},{"annotation":"冷汗","name":"FACE WITH OPEN MOUTH AND COLD SWEAT","hexcode":"1F630","shortcodes":["cold_sweat","anxious","frustrated"],"tags":["无语","汗","焦虑","紧张","脸"],"emoji":"😰","text":"","type":1,"order":79,"group":0,"subgroup":9,"version":0.6},{"annotation":"失望但如释重负","name":"DISAPPOINTED BUT RELIEVED FACE","hexcode":"1F625","shortcodes":["hopeful"],"tags":["失望","如释重负","脸"],"emoji":"😥","text":"","type":1,"order":80,"group":0,"subgroup":9,"version":0.6},{"annotation":"哭","name":"CRYING FACE","hexcode":"1F622","shortcodes":["upset","cry"],"tags":["伤心","泪","脸"],"emoji":"😢","text":"","type":1,"order":81,"group":0,"subgroup":9,"version":0.6,"emoticon":":'("},{"annotation":"放声大哭","name":"LOUDLY CRYING FACE","hexcode":"1F62D","shortcodes":["distressed","sob"],"tags":["哭","大哭","泪","痛哭","脸"],"emoji":"😭","text":"","type":1,"order":82,"group":0,"subgroup":9,"version":0.6,"emoticon":":'o"},{"annotation":"吓死了","name":"FACE SCREAMING IN FEAR","hexcode":"1F631","shortcodes":["frightened","scream"],"tags":["吓死","害怕","尖叫","恐怖","脸"],"emoji":"😱","text":"","type":1,"order":83,"group":0,"subgroup":9,"version":0.6,"emoticon":"Dx"},{"annotation":"困惑","name":"CONFOUNDED FACE","hexcode":"1F616","shortcodes":["confounded"],"tags":["焦头烂额","纠结","脸"],"emoji":"😖","text":"","type":1,"order":84,"group":0,"subgroup":9,"version":0.6,"emoticon":"x("},{"annotation":"痛苦","name":"PERSEVERING FACE","hexcode":"1F623","shortcodes":["persevered"],"tags":["忍耐","脸","难受"],"emoji":"😣","text":"","type":1,"order":85,"group":0,"subgroup":9,"version":0.6},{"annotation":"失望","name":"DISAPPOINTED FACE","hexcode":"1F61E","shortcodes":["disappointed"],"tags":["不高兴","脸","难过"],"emoji":"😞","text":"","type":1,"order":86,"group":0,"subgroup":9,"version":0.6},{"annotation":"汗","name":"FACE WITH COLD SWEAT","hexcode":"1F613","shortcodes":["shamed"],"tags":["冷","尴尬","脸"],"emoji":"😓","text":"","type":1,"order":87,"group":0,"subgroup":9,"version":0.6,"emoticon":":<"},{"annotation":"累死了","name":"WEARY FACE","hexcode":"1F629","shortcodes":["weary"],"tags":["疲倦","疲劳","疲惫","累","脸"],"emoji":"😩","text":"","type":1,"order":88,"group":0,"subgroup":9,"version":0.6,"emoticon":"D:"},{"annotation":"累","name":"TIRED FACE","hexcode":"1F62B","shortcodes":["tired"],"tags":["疲倦","疲劳","疲惫","脸"],"emoji":"😫","text":"","type":1,"order":89,"group":0,"subgroup":9,"version":0.6,"emoticon":":c"},{"annotation":"打呵欠","name":"YAWNING FACE","hexcode":"1F971","shortcodes":["yawn"],"tags":["呵欠","哈欠","困","无聊","累"],"emoji":"🥱","text":"","type":1,"order":90,"group":0,"subgroup":9,"version":12},{"annotation":"傲慢","name":"FACE WITH LOOK OF TRIUMPH","hexcode":"1F624","shortcodes":["annoyed","hrmph"],"tags":["胜利","自负","赢","趾高气昂"],"emoji":"😤","text":"","type":1,"order":91,"group":0,"subgroup":10,"version":0.6},{"annotation":"怒火中烧","name":"POUTING FACE","hexcode":"1F621","shortcodes":["enraged","pout"],"tags":["发火","发飙","怒","生气","脸"],"emoji":"😡","text":"","type":1,"order":92,"group":0,"subgroup":10,"version":0.6,"emoticon":">:/"},{"annotation":"生气","name":"ANGRY FACE","hexcode":"1F620","shortcodes":["angry"],"tags":["怒","愤怒","脸"],"emoji":"😠","text":"","type":1,"order":93,"group":0,"subgroup":10,"version":0.6},{"annotation":"嘴上有符号的脸","name":"SERIOUS FACE WITH SYMBOLS COVERING MOUTH","hexcode":"1F92C","shortcodes":["censored"],"tags":["发誓","咒骂","脸"],"emoji":"🤬","text":"","type":1,"order":94,"group":0,"subgroup":10,"version":5,"emoticon":":@"},{"annotation":"恶魔微笑","name":"SMILING FACE WITH HORNS","hexcode":"1F608","shortcodes":["imp"],"tags":["幻想","犄角","神话故事","脸"],"emoji":"😈","text":"","type":1,"order":95,"group":0,"subgroup":10,"version":1,"emoticon":">:)"},{"annotation":"生气的恶魔","name":"IMP","hexcode":"1F47F","shortcodes":["angry_imp"],"tags":["幻想","顽童"],"emoji":"👿","text":"","type":1,"order":96,"group":0,"subgroup":10,"version":0.6,"emoticon":">:("},{"annotation":"头骨","name":"SKULL","hexcode":"1F480","shortcodes":["skull"],"tags":["妖怪","死亡","神话故事","脸"],"emoji":"💀","text":"","type":1,"order":97,"group":0,"subgroup":10,"version":0.6},{"annotation":"骷髅","name":"SKULL AND CROSSBONES","hexcode":"2620","shortcodes":["crossbones"],"tags":["头骨","妖怪","死亡","脸","骨头"],"emoji":"☠️","text":"☠︎","type":0,"order":99,"group":0,"subgroup":10,"version":1},{"annotation":"大便","name":"PILE OF POO","hexcode":"1F4A9","shortcodes":["poop"],"tags":["屎","怪物","粑粑","脸"],"emoji":"💩","text":"","type":1,"order":100,"group":0,"subgroup":11,"version":0.6},{"annotation":"小丑脸","name":"CLOWN FACE","hexcode":"1F921","shortcodes":["clown"],"tags":["小丑","脸"],"emoji":"🤡","text":"","type":1,"order":101,"group":0,"subgroup":11,"version":3},{"annotation":"食人魔","name":"JAPANESE OGRE","hexcode":"1F479","shortcodes":["ogre"],"tags":["妖怪","幻想","神话故事","脸","鬼"],"emoji":"👹","text":"","type":1,"order":102,"group":0,"subgroup":11,"version":0.6,"emoticon":">0)"},{"annotation":"小妖精","name":"JAPANESE GOBLIN","hexcode":"1F47A","shortcodes":["goblin"],"tags":["妖怪","幻想","神话故事","脸"],"emoji":"👺","text":"","type":1,"order":103,"group":0,"subgroup":11,"version":0.6},{"annotation":"鬼","name":"GHOST","hexcode":"1F47B","shortcodes":["ghost"],"tags":["妖怪","幻想","幽灵","神话故事","脸"],"emoji":"👻","text":"","type":1,"order":104,"group":0,"subgroup":11,"version":0.6},{"annotation":"外星人","name":"EXTRATERRESTRIAL ALIEN","hexcode":"1F47D","shortcodes":["alien"],"tags":["ufo","外星","太空","幻想","星际","脸"],"emoji":"👽️","text":"👽︎","type":1,"order":105,"group":0,"subgroup":11,"version":0.6},{"annotation":"外星怪物","name":"ALIEN MONSTER","hexcode":"1F47E","shortcodes":["alien_monster","space_invader"],"tags":["ufo","外星","太空","怪物","星际","脸","飞碟"],"emoji":"👾","text":"","type":1,"order":106,"group":0,"subgroup":11,"version":0.6},{"annotation":"机器人","name":"ROBOT FACE","hexcode":"1F916","shortcodes":["robot"],"tags":["怪物"],"emoji":"🤖","text":"","type":1,"order":107,"group":0,"subgroup":11,"version":1},{"annotation":"大笑的猫","name":"SMILING CAT FACE WITH OPEN MOUTH","hexcode":"1F63A","shortcodes":["smiling_cat"],"tags":["哈哈","猫脸","笑","脸"],"emoji":"😺","text":"","type":1,"order":108,"group":0,"subgroup":12,"version":0.6},{"annotation":"微笑的猫","name":"GRINNING CAT FACE WITH SMILING EYES","hexcode":"1F638","shortcodes":["grinning_cat"],"tags":["呵呵","猫脸","笑","脸"],"emoji":"😸","text":"","type":1,"order":109,"group":0,"subgroup":12,"version":0.6},{"annotation":"笑出眼泪的猫","name":"CAT FACE WITH TEARS OF JOY","hexcode":"1F639","shortcodes":["joyful_cat"],"tags":["喜极而泣","快乐","猫脸","眼泪","脸"],"emoji":"😹","text":"","type":1,"order":110,"group":0,"subgroup":12,"version":0.6},{"annotation":"花痴的猫","name":"SMILING CAT FACE WITH HEART-SHAPED EYES","hexcode":"1F63B","shortcodes":["lovestruck_cat"],"tags":["喜欢","心","猫脸","脸","花痴"],"emoji":"😻","text":"","type":1,"order":111,"group":0,"subgroup":12,"version":0.6},{"annotation":"奸笑的猫","name":"CAT FACE WITH WRY SMILE","hexcode":"1F63C","shortcodes":["smirking_cat"],"tags":["奸笑","猫脸","脸","讽刺"],"emoji":"😼","text":"","type":1,"order":112,"group":0,"subgroup":12,"version":0.6},{"annotation":"亲亲猫","name":"KISSING CAT FACE WITH CLOSED EYES","hexcode":"1F63D","shortcodes":["kissing_cat"],"tags":["亲亲","吻","猫脸","脸"],"emoji":"😽","text":"","type":1,"order":113,"group":0,"subgroup":12,"version":0.6,"emoticon":":3"},{"annotation":"疲倦的猫","name":"WEARY CAT FACE","hexcode":"1F640","shortcodes":["weary_cat"],"tags":["惊讶","猫脸","疲倦","累","脸"],"emoji":"🙀","text":"","type":1,"order":114,"group":0,"subgroup":12,"version":0.6},{"annotation":"哭泣的猫","name":"CRYING CAT FACE","hexcode":"1F63F","shortcodes":["crying_cat"],"tags":["哭","猫脸","眼泪","脸","难过"],"emoji":"😿","text":"","type":1,"order":115,"group":0,"subgroup":12,"version":0.6},{"annotation":"生气的猫","name":"POUTING CAT FACE","hexcode":"1F63E","shortcodes":["pouting_cat"],"tags":["猫脸","生气","脸"],"emoji":"😾","text":"","type":1,"order":116,"group":0,"subgroup":12,"version":0.6},{"annotation":"非礼勿视","name":"SEE-NO-EVIL MONKEY","hexcode":"1F648","shortcodes":["see_no_evil"],"tags":["脸","蒙住眼睛","蒙眼"],"emoji":"🙈","text":"","type":1,"order":117,"group":0,"subgroup":13,"version":0.6},{"annotation":"非礼勿听","name":"HEAR-NO-EVIL MONKEY","hexcode":"1F649","shortcodes":["hear_no_evil"],"tags":["堵上耳朵","堵耳","脸"],"emoji":"🙉","text":"","type":1,"order":118,"group":0,"subgroup":13,"version":0.6},{"annotation":"非礼勿言","name":"SPEAK-NO-EVIL MONKEY","hexcode":"1F64A","shortcodes":["speak_no_evil"],"tags":["捂上嘴巴","捂嘴","脸"],"emoji":"🙊","text":"","type":1,"order":119,"group":0,"subgroup":13,"version":0.6},{"annotation":"唇印","name":"KISS MARK","hexcode":"1F48B","shortcodes":["kiss_lips"],"tags":["吻","唇","浪漫"],"emoji":"💋","text":"","type":1,"order":120,"group":0,"subgroup":14,"version":0.6},{"annotation":"情书","name":"LOVE LETTER","hexcode":"1F48C","shortcodes":["love_letter"],"tags":["信","邮件"],"emoji":"💌","text":"","type":1,"order":121,"group":0,"subgroup":14,"version":0.6},{"annotation":"心中箭了","name":"HEART WITH ARROW","hexcode":"1F498","shortcodes":["cupid"],"tags":["丘比特","浪漫","爱情","箭","红心"],"emoji":"💘","text":"","type":1,"order":122,"group":0,"subgroup":14,"version":0.6},{"annotation":"系有缎带的心","name":"HEART WITH RIBBON","hexcode":"1F49D","shortcodes":["heart_ribbon"],"tags":["爱的礼物","送你一颗心"],"emoji":"💝","text":"","type":1,"order":123,"group":0,"subgroup":14,"version":0.6},{"annotation":"闪亮的心","name":"SPARKLING HEART","hexcode":"1F496","shortcodes":["sparkling_heart"],"tags":["激动","红心","闪亮"],"emoji":"💖","text":"","type":1,"order":124,"group":0,"subgroup":14,"version":0.6},{"annotation":"搏动的心","name":"GROWING HEART","hexcode":"1F497","shortcodes":["heartpulse"],"tags":["搏动","激动","紧张","红心"],"emoji":"💗","text":"","type":1,"order":125,"group":0,"subgroup":14,"version":0.6},{"annotation":"心跳","name":"BEATING HEART","hexcode":"1F493","shortcodes":["heartbeat"],"tags":["心动","爱"],"emoji":"💓","text":"","type":1,"order":126,"group":0,"subgroup":14,"version":0.6},{"annotation":"舞动的心","name":"REVOLVING HEARTS","hexcode":"1F49E","shortcodes":["revolving_hearts"],"tags":["旋转","涌动","跃动"],"emoji":"💞","text":"","type":1,"order":127,"group":0,"subgroup":14,"version":0.6},{"annotation":"两颗心","name":"TWO HEARTS","hexcode":"1F495","shortcodes":["two_hearts"],"tags":["爱情"],"emoji":"💕","text":"","type":1,"order":128,"group":0,"subgroup":14,"version":0.6},{"annotation":"心型装饰","name":"HEART DECORATION","hexcode":"1F49F","shortcodes":["heart_decoration"],"tags":["装饰"],"emoji":"💟","text":"","type":1,"order":129,"group":0,"subgroup":14,"version":0.6},{"annotation":"心叹号","name":"HEAVY HEART EXCLAMATION MARK ORNAMENT","hexcode":"2763","shortcodes":["heart_exclamation"],"tags":["叹号","心动"],"emoji":"❣️","text":"❣︎","type":0,"order":131,"group":0,"subgroup":14,"version":1},{"annotation":"心碎","name":"BROKEN HEART","hexcode":"1F494","shortcodes":["broken_heart"],"tags":["伤心"],"emoji":"💔","text":"","type":1,"order":132,"group":0,"subgroup":14,"version":0.6,"emoticon":"</3"},{"annotation":"红心","name":"HEAVY BLACK HEART","hexcode":"2764","shortcodes":["heart"],"tags":["心","爱"],"emoji":"❤️","text":"❤︎","type":0,"order":134,"group":0,"subgroup":14,"version":0.6,"emoticon":"<3"},{"annotation":"橙心","name":"ORANGE HEART","hexcode":"1F9E1","shortcodes":["orange_heart"],"tags":["橙"],"emoji":"🧡","text":"","type":1,"order":135,"group":0,"subgroup":14,"version":5},{"annotation":"黄心","name":"YELLOW HEART","hexcode":"1F49B","shortcodes":["yellow_heart"],"tags":["黄"],"emoji":"💛","text":"","type":1,"order":136,"group":0,"subgroup":14,"version":0.6},{"annotation":"绿心","name":"GREEN HEART","hexcode":"1F49A","shortcodes":["green_heart"],"tags":["绿"],"emoji":"💚","text":"","type":1,"order":137,"group":0,"subgroup":14,"version":0.6},{"annotation":"蓝心","name":"BLUE HEART","hexcode":"1F499","shortcodes":["blue_heart"],"tags":["蓝"],"emoji":"💙","text":"","type":1,"order":138,"group":0,"subgroup":14,"version":0.6},{"annotation":"紫心","name":"PURPLE HEART","hexcode":"1F49C","shortcodes":["purple_heart"],"tags":["紫"],"emoji":"💜","text":"","type":1,"order":139,"group":0,"subgroup":14,"version":0.6},{"annotation":"棕心","name":"BROWN HEART","hexcode":"1F90E","shortcodes":["brown_heart"],"tags":["心","心形","棕"],"emoji":"🤎","text":"","type":1,"order":140,"group":0,"subgroup":14,"version":12},{"annotation":"黑心","name":"BLACK HEART","hexcode":"1F5A4","shortcodes":["black_heart"],"tags":["心","邪恶","黑色"],"emoji":"🖤","text":"","type":1,"order":141,"group":0,"subgroup":14,"version":3},{"annotation":"白心","name":"WHITE HEART","hexcode":"1F90D","shortcodes":["white_heart"],"tags":["心","心形","白"],"emoji":"🤍","text":"","type":1,"order":142,"group":0,"subgroup":14,"version":12},{"annotation":"一百分","name":"HUNDRED POINTS SYMBOL","hexcode":"1F4AF","shortcodes":["100"],"tags":["满分","考试"],"emoji":"💯","text":"","type":1,"order":143,"group":0,"subgroup":14,"version":0.6},{"annotation":"怒","name":"ANGER SYMBOL","hexcode":"1F4A2","shortcodes":["anger"],"tags":["火大","生气","青筋"],"emoji":"💢","text":"","type":1,"order":144,"group":0,"subgroup":14,"version":0.6},{"annotation":"爆炸","name":"COLLISION SYMBOL","hexcode":"1F4A5","shortcodes":["boom","collision"],"tags":["炸","爆"],"emoji":"💥","text":"","type":1,"order":145,"group":0,"subgroup":14,"version":0.6},{"annotation":"头晕","name":"DIZZY SYMBOL","hexcode":"1F4AB","shortcodes":["dizzy_star"],"tags":["头晕目眩"],"emoji":"💫","text":"","type":1,"order":146,"group":0,"subgroup":14,"version":0.6},{"annotation":"汗滴","name":"SPLASHING SWEAT SYMBOL","hexcode":"1F4A6","shortcodes":["sweat_drops"],"tags":["汗"],"emoji":"💦","text":"","type":1,"order":147,"group":0,"subgroup":14,"version":0.6},{"annotation":"尾气","name":"DASH SYMBOL","hexcode":"1F4A8","shortcodes":["dash"],"tags":["疾驰而去","飞奔而去"],"emoji":"💨","text":"","type":1,"order":148,"group":0,"subgroup":14,"version":0.6},{"annotation":"洞","name":"HOLE","hexcode":"1F573","shortcodes":["hole"],"tags":["坑","陷阱"],"emoji":"🕳️","text":"🕳︎","type":0,"order":150,"group":0,"subgroup":14,"version":0.7},{"annotation":"炸弹","name":"BOMB","hexcode":"1F4A3","shortcodes":["bomb"],"tags":["爆炸"],"emoji":"💣️","text":"💣︎","type":1,"order":151,"group":0,"subgroup":14,"version":0.6},{"annotation":"话语气泡","name":"SPEECH BALLOON","hexcode":"1F4AC","shortcodes":["speech"],"tags":["发言","对话框","气泡"],"emoji":"💬","text":"","type":1,"order":152,"group":0,"subgroup":14,"version":0.6},{"annotation":"眼睛对话框","name":"EYE, LEFT SPEECH BUBBLE","hexcode":"1F441-FE0F-200D-1F5E8-FE0F","shortcodes":["eye_bubble"],"tags":["对话框","眼睛"],"emoji":"👁️‍🗨️","text":"","type":1,"order":153,"group":0,"subgroup":14,"version":2},{"annotation":"朝左的话语气泡","name":"LEFT SPEECH BUBBLE","hexcode":"1F5E8","shortcodes":["left_speech"],"tags":["对话框","话语"],"emoji":"🗨️","text":"🗨︎","type":0,"order":158,"group":0,"subgroup":14,"version":2},{"annotation":"愤怒话语气泡","name":"RIGHT ANGER BUBBLE","hexcode":"1F5EF","shortcodes":["right_anger_speech"],"tags":["对话框","愤怒"],"emoji":"🗯️","text":"🗯︎","type":0,"order":160,"group":0,"subgroup":14,"version":0.7},{"annotation":"内心活动气泡","name":"THOUGHT BALLOON","hexcode":"1F4AD","shortcodes":["thought"],"tags":["对话框","思想活动","气泡"],"emoji":"💭","text":"","type":1,"order":161,"group":0,"subgroup":14,"version":1},{"annotation":"睡着","name":"SLEEPING SYMBOL","hexcode":"1F4A4","shortcodes":["zzz"],"tags":["呼噜","打呼"],"emoji":"💤","text":"","type":1,"order":162,"group":0,"subgroup":14,"version":0.6},{"annotation":"挥手","name":"WAVING HAND SIGN","hexcode":"1F44B","shortcodes":["wave"],"tags":["你好","再见"],"emoji":"👋","text":"","type":1,"order":163,"group":1,"subgroup":15,"version":0.6,"skins":[{"annotation":"挥手: 较浅肤色","name":"WAVING HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F44B-1F3FB","shortcodes":["wave_tone1"],"emoji":"👋🏻","text":"","type":1,"order":164,"group":1,"subgroup":15,"version":1,"tone":1},{"annotation":"挥手: 中等-浅肤色","name":"WAVING HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F44B-1F3FC","shortcodes":["wave_tone2"],"emoji":"👋🏼","text":"","type":1,"order":165,"group":1,"subgroup":15,"version":1,"tone":2},{"annotation":"挥手: 中等肤色","name":"WAVING HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F44B-1F3FD","shortcodes":["wave_tone3"],"emoji":"👋🏽","text":"","type":1,"order":166,"group":1,"subgroup":15,"version":1,"tone":3},{"annotation":"挥手: 中等-深肤色","name":"WAVING HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F44B-1F3FE","shortcodes":["wave_tone4"],"emoji":"👋🏾","text":"","type":1,"order":167,"group":1,"subgroup":15,"version":1,"tone":4},{"annotation":"挥手: 较深肤色","name":"WAVING HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F44B-1F3FF","shortcodes":["wave_tone5"],"emoji":"👋🏿","text":"","type":1,"order":168,"group":1,"subgroup":15,"version":1,"tone":5}]},{"annotation":"立起的手背","name":"RAISED BACK OF HAND","hexcode":"1F91A","shortcodes":["raised_backhand"],"tags":["手","手背","立起"],"emoji":"🤚","text":"","type":1,"order":169,"group":1,"subgroup":15,"version":3,"skins":[{"annotation":"立起的手背: 较浅肤色","name":"RAISED BACK OF HAND, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F91A-1F3FB","shortcodes":["raised_backhand_tone1"],"emoji":"🤚🏻","text":"","type":1,"order":170,"group":1,"subgroup":15,"version":3,"tone":1},{"annotation":"立起的手背: 中等-浅肤色","name":"RAISED BACK OF HAND, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F91A-1F3FC","shortcodes":["raised_backhand_tone2"],"emoji":"🤚🏼","text":"","type":1,"order":171,"group":1,"subgroup":15,"version":3,"tone":2},{"annotation":"立起的手背: 中等肤色","name":"RAISED BACK OF HAND, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F91A-1F3FD","shortcodes":["raised_backhand_tone3"],"emoji":"🤚🏽","text":"","type":1,"order":172,"group":1,"subgroup":15,"version":3,"tone":3},{"annotation":"立起的手背: 中等-深肤色","name":"RAISED BACK OF HAND, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F91A-1F3FE","shortcodes":["raised_backhand_tone4"],"emoji":"🤚🏾","text":"","type":1,"order":173,"group":1,"subgroup":15,"version":3,"tone":4},{"annotation":"立起的手背: 较深肤色","name":"RAISED BACK OF HAND, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F91A-1F3FF","shortcodes":["raised_backhand_tone5"],"emoji":"🤚🏿","text":"","type":1,"order":174,"group":1,"subgroup":15,"version":3,"tone":5}]},{"annotation":"手掌","name":"RAISED HAND WITH FINGERS SPLAYED","hexcode":"1F590","shortcodes":["splayed_hand"],"tags":["击掌","布","手","禁止"],"emoji":"🖐️","text":"🖐︎","type":0,"order":176,"group":1,"subgroup":15,"version":0.7,"skins":[{"annotation":"手掌: 较浅肤色","name":"RAISED HAND WITH FINGERS SPLAYED, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F590-1F3FB","shortcodes":["splayed_hand_tone1"],"emoji":"🖐🏻","text":"","type":1,"order":177,"group":1,"subgroup":15,"version":1,"tone":1},{"annotation":"手掌: 中等-浅肤色","name":"RAISED HAND WITH FINGERS SPLAYED, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F590-1F3FC","shortcodes":["splayed_hand_tone2"],"emoji":"🖐🏼","text":"","type":1,"order":178,"group":1,"subgroup":15,"version":1,"tone":2},{"annotation":"手掌: 中等肤色","name":"RAISED HAND WITH FINGERS SPLAYED, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F590-1F3FD","shortcodes":["splayed_hand_tone3"],"emoji":"🖐🏽","text":"","type":1,"order":179,"group":1,"subgroup":15,"version":1,"tone":3},{"annotation":"手掌: 中等-深肤色","name":"RAISED HAND WITH FINGERS SPLAYED, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F590-1F3FE","shortcodes":["splayed_hand_tone4"],"emoji":"🖐🏾","text":"","type":1,"order":180,"group":1,"subgroup":15,"version":1,"tone":4},{"annotation":"手掌: 较深肤色","name":"RAISED HAND WITH FINGERS SPLAYED, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F590-1F3FF","shortcodes":["splayed_hand_tone5"],"emoji":"🖐🏿","text":"","type":1,"order":181,"group":1,"subgroup":15,"version":1,"tone":5}]},{"annotation":"举起手","name":"RAISED HAND","hexcode":"270B","shortcodes":["raised_hand"],"tags":["举手","手"],"emoji":"✋","text":"","type":1,"order":182,"group":1,"subgroup":15,"version":0.6,"skins":[{"annotation":"举起手: 较浅肤色","name":"RAISED HAND, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"270B-1F3FB","shortcodes":["raised_hand_tone1"],"emoji":"✋🏻","text":"","type":1,"order":183,"group":1,"subgroup":15,"version":1,"tone":1},{"annotation":"举起手: 中等-浅肤色","name":"RAISED HAND, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"270B-1F3FC","shortcodes":["raised_hand_tone2"],"emoji":"✋🏼","text":"","type":1,"order":184,"group":1,"subgroup":15,"version":1,"tone":2},{"annotation":"举起手: 中等肤色","name":"RAISED HAND, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"270B-1F3FD","shortcodes":["raised_hand_tone3"],"emoji":"✋🏽","text":"","type":1,"order":185,"group":1,"subgroup":15,"version":1,"tone":3},{"annotation":"举起手: 中等-深肤色","name":"RAISED HAND, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"270B-1F3FE","shortcodes":["raised_hand_tone4"],"emoji":"✋🏾","text":"","type":1,"order":186,"group":1,"subgroup":15,"version":1,"tone":4},{"annotation":"举起手: 较深肤色","name":"RAISED HAND, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"270B-1F3FF","shortcodes":["raised_hand_tone5"],"emoji":"✋🏿","text":"","type":1,"order":187,"group":1,"subgroup":15,"version":1,"tone":5}]},{"annotation":"瓦肯举手礼","name":"RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS","hexcode":"1F596","shortcodes":["vulcan"],"tags":["手","敬礼","斯波克","星际迷航","瓦肯"],"emoji":"🖖","text":"","type":1,"order":188,"group":1,"subgroup":15,"version":1,"skins":[{"annotation":"瓦肯举手礼: 较浅肤色","name":"RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F596-1F3FB","shortcodes":["vulcan_tone1"],"emoji":"🖖🏻","text":"","type":1,"order":189,"group":1,"subgroup":15,"version":1,"tone":1},{"annotation":"瓦肯举手礼: 中等-浅肤色","name":"RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F596-1F3FC","shortcodes":["vulcan_tone2"],"emoji":"🖖🏼","text":"","type":1,"order":190,"group":1,"subgroup":15,"version":1,"tone":2},{"annotation":"瓦肯举手礼: 中等肤色","name":"RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F596-1F3FD","shortcodes":["vulcan_tone3"],"emoji":"🖖🏽","text":"","type":1,"order":191,"group":1,"subgroup":15,"version":1,"tone":3},{"annotation":"瓦肯举手礼: 中等-深肤色","name":"RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F596-1F3FE","shortcodes":["vulcan_tone4"],"emoji":"🖖🏾","text":"","type":1,"order":192,"group":1,"subgroup":15,"version":1,"tone":4},{"annotation":"瓦肯举手礼: 较深肤色","name":"RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F596-1F3FF","shortcodes":["vulcan_tone5"],"emoji":"🖖🏿","text":"","type":1,"order":193,"group":1,"subgroup":15,"version":1,"tone":5}]},{"annotation":"OK","name":"OK HAND SIGN","hexcode":"1F44C","shortcodes":["ok_hand"],"tags":["ok","手"],"emoji":"👌","text":"","type":1,"order":194,"group":1,"subgroup":16,"version":0.6,"skins":[{"annotation":"OK: 较浅肤色","name":"OK HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F44C-1F3FB","shortcodes":["ok_hand_tone1"],"emoji":"👌🏻","text":"","type":1,"order":195,"group":1,"subgroup":16,"version":1,"tone":1},{"annotation":"OK: 中等-浅肤色","name":"OK HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F44C-1F3FC","shortcodes":["ok_hand_tone2"],"emoji":"👌🏼","text":"","type":1,"order":196,"group":1,"subgroup":16,"version":1,"tone":2},{"annotation":"OK: 中等肤色","name":"OK HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F44C-1F3FD","shortcodes":["ok_hand_tone3"],"emoji":"👌🏽","text":"","type":1,"order":197,"group":1,"subgroup":16,"version":1,"tone":3},{"annotation":"OK: 中等-深肤色","name":"OK HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F44C-1F3FE","shortcodes":["ok_hand_tone4"],"emoji":"👌🏾","text":"","type":1,"order":198,"group":1,"subgroup":16,"version":1,"tone":4},{"annotation":"OK: 较深肤色","name":"OK HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F44C-1F3FF","shortcodes":["ok_hand_tone5"],"emoji":"👌🏿","text":"","type":1,"order":199,"group":1,"subgroup":16,"version":1,"tone":5}]},{"annotation":"捏手指","name":"PINCHED FINGERS","hexcode":"1F90C","shortcodes":["pinched_fingers"],"tags":["匮乏","审讯","手势","手指","挖苦"],"emoji":"🤌","text":"","type":1,"order":200,"group":1,"subgroup":16,"version":13,"skins":[{"annotation":"捏手指: 较浅肤色","name":"PINCHED FINGERS, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F90C-1F3FB","shortcodes":["pinched_fingers_tone1"],"emoji":"🤌🏻","text":"","type":1,"order":201,"group":1,"subgroup":16,"version":13,"tone":1},{"annotation":"捏手指: 中等-浅肤色","name":"PINCHED FINGERS, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F90C-1F3FC","shortcodes":["pinched_fingers_tone2"],"emoji":"🤌🏼","text":"","type":1,"order":202,"group":1,"subgroup":16,"version":13,"tone":2},{"annotation":"捏手指: 中等肤色","name":"PINCHED FINGERS, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F90C-1F3FD","shortcodes":["pinched_fingers_tone3"],"emoji":"🤌🏽","text":"","type":1,"order":203,"group":1,"subgroup":16,"version":13,"tone":3},{"annotation":"捏手指: 中等-深肤色","name":"PINCHED FINGERS, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F90C-1F3FE","shortcodes":["pinched_fingers_tone4"],"emoji":"🤌🏾","text":"","type":1,"order":204,"group":1,"subgroup":16,"version":13,"tone":4},{"annotation":"捏手指: 较深肤色","name":"PINCHED FINGERS, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F90C-1F3FF","shortcodes":["pinched_fingers_tone5"],"emoji":"🤌🏿","text":"","type":1,"order":205,"group":1,"subgroup":16,"version":13,"tone":5}]},{"annotation":"捏合的手势","name":"PINCHING HAND","hexcode":"1F90F","shortcodes":["pinch"],"tags":["一点","小","少量"],"emoji":"🤏","text":"","type":1,"order":206,"group":1,"subgroup":16,"version":12,"skins":[{"annotation":"捏合的手势: 较浅肤色","name":"PINCHING HAND, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F90F-1F3FB","shortcodes":["pinch_tone1"],"emoji":"🤏🏻","text":"","type":1,"order":207,"group":1,"subgroup":16,"version":12,"tone":1},{"annotation":"捏合的手势: 中等-浅肤色","name":"PINCHING HAND, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F90F-1F3FC","shortcodes":["pinch_tone2"],"emoji":"🤏🏼","text":"","type":1,"order":208,"group":1,"subgroup":16,"version":12,"tone":2},{"annotation":"捏合的手势: 中等肤色","name":"PINCHING HAND, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F90F-1F3FD","shortcodes":["pinch_tone3"],"emoji":"🤏🏽","text":"","type":1,"order":209,"group":1,"subgroup":16,"version":12,"tone":3},{"annotation":"捏合的手势: 中等-深肤色","name":"PINCHING HAND, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F90F-1F3FE","shortcodes":["pinch_tone4"],"emoji":"🤏🏾","text":"","type":1,"order":210,"group":1,"subgroup":16,"version":12,"tone":4},{"annotation":"捏合的手势: 较深肤色","name":"PINCHING HAND, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F90F-1F3FF","shortcodes":["pinch_tone5"],"emoji":"🤏🏿","text":"","type":1,"order":211,"group":1,"subgroup":16,"version":12,"tone":5}]},{"annotation":"胜利手势","name":"VICTORY HAND","hexcode":"270C","shortcodes":["victory"],"tags":["v","成功","手","胜利"],"emoji":"✌️","text":"✌︎","type":0,"order":213,"group":1,"subgroup":16,"version":0.6,"skins":[{"annotation":"胜利手势: 较浅肤色","name":"VICTORY HAND, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"270C-1F3FB","shortcodes":["victory_tone1"],"emoji":"✌🏻","text":"","type":1,"order":214,"group":1,"subgroup":16,"version":1,"tone":1},{"annotation":"胜利手势: 中等-浅肤色","name":"VICTORY HAND, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"270C-1F3FC","shortcodes":["victory_tone2"],"emoji":"✌🏼","text":"","type":1,"order":215,"group":1,"subgroup":16,"version":1,"tone":2},{"annotation":"胜利手势: 中等肤色","name":"VICTORY HAND, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"270C-1F3FD","shortcodes":["victory_tone3"],"emoji":"✌🏽","text":"","type":1,"order":216,"group":1,"subgroup":16,"version":1,"tone":3},{"annotation":"胜利手势: 中等-深肤色","name":"VICTORY HAND, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"270C-1F3FE","shortcodes":["victory_tone4"],"emoji":"✌🏾","text":"","type":1,"order":217,"group":1,"subgroup":16,"version":1,"tone":4},{"annotation":"胜利手势: 较深肤色","name":"VICTORY HAND, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"270C-1F3FF","shortcodes":["victory_tone5"],"emoji":"✌🏿","text":"","type":1,"order":218,"group":1,"subgroup":16,"version":1,"tone":5}]},{"annotation":"交叉的手指","name":"HAND WITH INDEX AND MIDDLE FINGERS CROSSED","hexcode":"1F91E","shortcodes":["fingers_crossed"],"tags":["交叉","幸运","手","手指"],"emoji":"🤞","text":"","type":1,"order":219,"group":1,"subgroup":16,"version":3,"skins":[{"annotation":"交叉的手指: 较浅肤色","name":"HAND WITH INDEX AND MIDDLE FINGERS CROSSED, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F91E-1F3FB","shortcodes":["fingers_crossed_tone1"],"emoji":"🤞🏻","text":"","type":1,"order":220,"group":1,"subgroup":16,"version":3,"tone":1},{"annotation":"交叉的手指: 中等-浅肤色","name":"HAND WITH INDEX AND MIDDLE FINGERS CROSSED, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F91E-1F3FC","shortcodes":["fingers_crossed_tone2"],"emoji":"🤞🏼","text":"","type":1,"order":221,"group":1,"subgroup":16,"version":3,"tone":2},{"annotation":"交叉的手指: 中等肤色","name":"HAND WITH INDEX AND MIDDLE FINGERS CROSSED, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F91E-1F3FD","shortcodes":["fingers_crossed_tone3"],"emoji":"🤞🏽","text":"","type":1,"order":222,"group":1,"subgroup":16,"version":3,"tone":3},{"annotation":"交叉的手指: 中等-深肤色","name":"HAND WITH INDEX AND MIDDLE FINGERS CROSSED, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F91E-1F3FE","shortcodes":["fingers_crossed_tone4"],"emoji":"🤞🏾","text":"","type":1,"order":223,"group":1,"subgroup":16,"version":3,"tone":4},{"annotation":"交叉的手指: 较深肤色","name":"HAND WITH INDEX AND MIDDLE FINGERS CROSSED, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F91E-1F3FF","shortcodes":["fingers_crossed_tone5"],"emoji":"🤞🏿","text":"","type":1,"order":224,"group":1,"subgroup":16,"version":3,"tone":5}]},{"annotation":"爱你的手势","name":"I LOVE YOU HAND SIGN","hexcode":"1F91F","shortcodes":["love_you_gesture"],"tags":["我爱你","手"],"emoji":"🤟","text":"","type":1,"order":225,"group":1,"subgroup":16,"version":5,"skins":[{"annotation":"爱你的手势: 较浅肤色","name":"I LOVE YOU HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F91F-1F3FB","shortcodes":["love_you_gesture_tone1"],"emoji":"🤟🏻","text":"","type":1,"order":226,"group":1,"subgroup":16,"version":5,"tone":1},{"annotation":"爱你的手势: 中等-浅肤色","name":"I LOVE YOU HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F91F-1F3FC","shortcodes":["love_you_gesture_tone2"],"emoji":"🤟🏼","text":"","type":1,"order":227,"group":1,"subgroup":16,"version":5,"tone":2},{"annotation":"爱你的手势: 中等肤色","name":"I LOVE YOU HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F91F-1F3FD","shortcodes":["love_you_gesture_tone3"],"emoji":"🤟🏽","text":"","type":1,"order":228,"group":1,"subgroup":16,"version":5,"tone":3},{"annotation":"爱你的手势: 中等-深肤色","name":"I LOVE YOU HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F91F-1F3FE","shortcodes":["love_you_gesture_tone4"],"emoji":"🤟🏾","text":"","type":1,"order":229,"group":1,"subgroup":16,"version":5,"tone":4},{"annotation":"爱你的手势: 较深肤色","name":"I LOVE YOU HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F91F-1F3FF","shortcodes":["love_you_gesture_tone5"],"emoji":"🤟🏿","text":"","type":1,"order":230,"group":1,"subgroup":16,"version":5,"tone":5}]},{"annotation":"摇滚","name":"SIGN OF THE HORNS","hexcode":"1F918","shortcodes":["metal"],"tags":["手","角","金属礼"],"emoji":"🤘","text":"","type":1,"order":231,"group":1,"subgroup":16,"version":1,"emoticon":"\\\\m/","skins":[{"annotation":"摇滚: 较浅肤色","name":"SIGN OF THE HORNS, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F918-1F3FB","shortcodes":["metal_tone1"],"emoji":"🤘🏻","text":"","type":1,"order":232,"group":1,"subgroup":16,"version":1,"tone":1},{"annotation":"摇滚: 中等-浅肤色","name":"SIGN OF THE HORNS, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F918-1F3FC","shortcodes":["metal_tone2"],"emoji":"🤘🏼","text":"","type":1,"order":233,"group":1,"subgroup":16,"version":1,"tone":2},{"annotation":"摇滚: 中等肤色","name":"SIGN OF THE HORNS, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F918-1F3FD","shortcodes":["metal_tone3"],"emoji":"🤘🏽","text":"","type":1,"order":234,"group":1,"subgroup":16,"version":1,"tone":3},{"annotation":"摇滚: 中等-深肤色","name":"SIGN OF THE HORNS, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F918-1F3FE","shortcodes":["metal_tone4"],"emoji":"🤘🏾","text":"","type":1,"order":235,"group":1,"subgroup":16,"version":1,"tone":4},{"annotation":"摇滚: 较深肤色","name":"SIGN OF THE HORNS, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F918-1F3FF","shortcodes":["metal_tone5"],"emoji":"🤘🏿","text":"","type":1,"order":236,"group":1,"subgroup":16,"version":1,"tone":5}]},{"annotation":"给我打电话","name":"CALL ME HAND","hexcode":"1F919","shortcodes":["call_me"],"tags":["手","电话"],"emoji":"🤙","text":"","type":1,"order":237,"group":1,"subgroup":16,"version":3,"skins":[{"annotation":"给我打电话: 较浅肤色","name":"CALL ME HAND, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F919-1F3FB","shortcodes":["call_me_tone1"],"emoji":"🤙🏻","text":"","type":1,"order":238,"group":1,"subgroup":16,"version":3,"tone":1},{"annotation":"给我打电话: 中等-浅肤色","name":"CALL ME HAND, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F919-1F3FC","shortcodes":["call_me_tone2"],"emoji":"🤙🏼","text":"","type":1,"order":239,"group":1,"subgroup":16,"version":3,"tone":2},{"annotation":"给我打电话: 中等肤色","name":"CALL ME HAND, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F919-1F3FD","shortcodes":["call_me_tone3"],"emoji":"🤙🏽","text":"","type":1,"order":240,"group":1,"subgroup":16,"version":3,"tone":3},{"annotation":"给我打电话: 中等-深肤色","name":"CALL ME HAND, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F919-1F3FE","shortcodes":["call_me_tone4"],"emoji":"🤙🏾","text":"","type":1,"order":241,"group":1,"subgroup":16,"version":3,"tone":4},{"annotation":"给我打电话: 较深肤色","name":"CALL ME HAND, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F919-1F3FF","shortcodes":["call_me_tone5"],"emoji":"🤙🏿","text":"","type":1,"order":242,"group":1,"subgroup":16,"version":3,"tone":5}]},{"annotation":"反手食指向左指","name":"WHITE LEFT POINTING BACKHAND INDEX","hexcode":"1F448","shortcodes":["point_left"],"tags":["反手","向左指","手","指左","食指"],"emoji":"👈️","text":"👈︎","type":1,"order":243,"group":1,"subgroup":17,"version":0.6,"skins":[{"annotation":"反手食指向左指: 较浅肤色","name":"WHITE LEFT POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F448-1F3FB","shortcodes":["point_left_tone1"],"emoji":"👈🏻","text":"","type":1,"order":244,"group":1,"subgroup":17,"version":1,"tone":1},{"annotation":"反手食指向左指: 中等-浅肤色","name":"WHITE LEFT POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F448-1F3FC","shortcodes":["point_left_tone2"],"emoji":"👈🏼","text":"","type":1,"order":245,"group":1,"subgroup":17,"version":1,"tone":2},{"annotation":"反手食指向左指: 中等肤色","name":"WHITE LEFT POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F448-1F3FD","shortcodes":["point_left_tone3"],"emoji":"👈🏽","text":"","type":1,"order":246,"group":1,"subgroup":17,"version":1,"tone":3},{"annotation":"反手食指向左指: 中等-深肤色","name":"WHITE LEFT POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F448-1F3FE","shortcodes":["point_left_tone4"],"emoji":"👈🏾","text":"","type":1,"order":247,"group":1,"subgroup":17,"version":1,"tone":4},{"annotation":"反手食指向左指: 较深肤色","name":"WHITE LEFT POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F448-1F3FF","shortcodes":["point_left_tone5"],"emoji":"👈🏿","text":"","type":1,"order":248,"group":1,"subgroup":17,"version":1,"tone":5}]},{"annotation":"反手食指向右指","name":"WHITE RIGHT POINTING BACKHAND INDEX","hexcode":"1F449","shortcodes":["point_right"],"tags":["反手","向右指","手","指右","食指"],"emoji":"👉️","text":"👉︎","type":1,"order":249,"group":1,"subgroup":17,"version":0.6,"skins":[{"annotation":"反手食指向右指: 较浅肤色","name":"WHITE RIGHT POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F449-1F3FB","shortcodes":["point_right_tone1"],"emoji":"👉🏻","text":"","type":1,"order":250,"group":1,"subgroup":17,"version":1,"tone":1},{"annotation":"反手食指向右指: 中等-浅肤色","name":"WHITE RIGHT POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F449-1F3FC","shortcodes":["point_right_tone2"],"emoji":"👉🏼","text":"","type":1,"order":251,"group":1,"subgroup":17,"version":1,"tone":2},{"annotation":"反手食指向右指: 中等肤色","name":"WHITE RIGHT POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F449-1F3FD","shortcodes":["point_right_tone3"],"emoji":"👉🏽","text":"","type":1,"order":252,"group":1,"subgroup":17,"version":1,"tone":3},{"annotation":"反手食指向右指: 中等-深肤色","name":"WHITE RIGHT POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F449-1F3FE","shortcodes":["point_right_tone4"],"emoji":"👉🏾","text":"","type":1,"order":253,"group":1,"subgroup":17,"version":1,"tone":4},{"annotation":"反手食指向右指: 较深肤色","name":"WHITE RIGHT POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F449-1F3FF","shortcodes":["point_right_tone5"],"emoji":"👉🏿","text":"","type":1,"order":254,"group":1,"subgroup":17,"version":1,"tone":5}]},{"annotation":"反手食指向上指","name":"WHITE UP POINTING BACKHAND INDEX","hexcode":"1F446","shortcodes":["backhand_point_up"],"tags":["反手","向上指","手","指上","食指"],"emoji":"👆️","text":"👆︎","type":1,"order":255,"group":1,"subgroup":17,"version":0.6,"skins":[{"annotation":"反手食指向上指: 较浅肤色","name":"WHITE UP POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F446-1F3FB","shortcodes":["backhand_point_up_tone1"],"emoji":"👆🏻","text":"","type":1,"order":256,"group":1,"subgroup":17,"version":1,"tone":1},{"annotation":"反手食指向上指: 中等-浅肤色","name":"WHITE UP POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F446-1F3FC","shortcodes":["backhand_point_up_tone2"],"emoji":"👆🏼","text":"","type":1,"order":257,"group":1,"subgroup":17,"version":1,"tone":2},{"annotation":"反手食指向上指: 中等肤色","name":"WHITE UP POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F446-1F3FD","shortcodes":["backhand_point_up_tone3"],"emoji":"👆🏽","text":"","type":1,"order":258,"group":1,"subgroup":17,"version":1,"tone":3},{"annotation":"反手食指向上指: 中等-深肤色","name":"WHITE UP POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F446-1F3FE","shortcodes":["backhand_point_up_tone4"],"emoji":"👆🏾","text":"","type":1,"order":259,"group":1,"subgroup":17,"version":1,"tone":4},{"annotation":"反手食指向上指: 较深肤色","name":"WHITE UP POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F446-1F3FF","shortcodes":["backhand_point_up_tone5"],"emoji":"👆🏿","text":"","type":1,"order":260,"group":1,"subgroup":17,"version":1,"tone":5}]},{"annotation":"竖中指","name":"REVERSED HAND WITH MIDDLE FINGER EXTENDED","hexcode":"1F595","shortcodes":["middle_finger"],"tags":["中指","反手","手"],"emoji":"🖕","text":"","type":1,"order":261,"group":1,"subgroup":17,"version":1,"skins":[{"annotation":"竖中指: 较浅肤色","name":"REVERSED HAND WITH MIDDLE FINGER EXTENDED, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F595-1F3FB","shortcodes":["middle_finger_tone1"],"emoji":"🖕🏻","text":"","type":1,"order":262,"group":1,"subgroup":17,"version":1,"tone":1},{"annotation":"竖中指: 中等-浅肤色","name":"REVERSED HAND WITH MIDDLE FINGER EXTENDED, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F595-1F3FC","shortcodes":["middle_finger_tone2"],"emoji":"🖕🏼","text":"","type":1,"order":263,"group":1,"subgroup":17,"version":1,"tone":2},{"annotation":"竖中指: 中等肤色","name":"REVERSED HAND WITH MIDDLE FINGER EXTENDED, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F595-1F3FD","shortcodes":["middle_finger_tone3"],"emoji":"🖕🏽","text":"","type":1,"order":264,"group":1,"subgroup":17,"version":1,"tone":3},{"annotation":"竖中指: 中等-深肤色","name":"REVERSED HAND WITH MIDDLE FINGER EXTENDED, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F595-1F3FE","shortcodes":["middle_finger_tone4"],"emoji":"🖕🏾","text":"","type":1,"order":265,"group":1,"subgroup":17,"version":1,"tone":4},{"annotation":"竖中指: 较深肤色","name":"REVERSED HAND WITH MIDDLE FINGER EXTENDED, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F595-1F3FF","shortcodes":["middle_finger_tone5"],"emoji":"🖕🏿","text":"","type":1,"order":266,"group":1,"subgroup":17,"version":1,"tone":5}]},{"annotation":"反手食指向下指","name":"WHITE DOWN POINTING BACKHAND INDEX","hexcode":"1F447","shortcodes":["point_down"],"tags":["反手","向下指","手","指下","食指"],"emoji":"👇️","text":"👇︎","type":1,"order":267,"group":1,"subgroup":17,"version":0.6,"skins":[{"annotation":"反手食指向下指: 较浅肤色","name":"WHITE DOWN POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F447-1F3FB","shortcodes":["point_down_tone1"],"emoji":"👇🏻","text":"","type":1,"order":268,"group":1,"subgroup":17,"version":1,"tone":1},{"annotation":"反手食指向下指: 中等-浅肤色","name":"WHITE DOWN POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F447-1F3FC","shortcodes":["point_down_tone2"],"emoji":"👇🏼","text":"","type":1,"order":269,"group":1,"subgroup":17,"version":1,"tone":2},{"annotation":"反手食指向下指: 中等肤色","name":"WHITE DOWN POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F447-1F3FD","shortcodes":["point_down_tone3"],"emoji":"👇🏽","text":"","type":1,"order":270,"group":1,"subgroup":17,"version":1,"tone":3},{"annotation":"反手食指向下指: 中等-深肤色","name":"WHITE DOWN POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F447-1F3FE","shortcodes":["point_down_tone4"],"emoji":"👇🏾","text":"","type":1,"order":271,"group":1,"subgroup":17,"version":1,"tone":4},{"annotation":"反手食指向下指: 较深肤色","name":"WHITE DOWN POINTING BACKHAND INDEX, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F447-1F3FF","shortcodes":["point_down_tone5"],"emoji":"👇🏿","text":"","type":1,"order":272,"group":1,"subgroup":17,"version":1,"tone":5}]},{"annotation":"食指向上指","name":"WHITE UP POINTING INDEX","hexcode":"261D","shortcodes":["point_up"],"tags":["向上指","手","指上","食指"],"emoji":"☝️","text":"☝︎","type":0,"order":274,"group":1,"subgroup":17,"version":0.6,"skins":[{"annotation":"食指向上指: 较浅肤色","name":"WHITE UP POINTING INDEX, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"261D-1F3FB","shortcodes":["point_up_tone1"],"emoji":"☝🏻","text":"","type":1,"order":275,"group":1,"subgroup":17,"version":1,"tone":1},{"annotation":"食指向上指: 中等-浅肤色","name":"WHITE UP POINTING INDEX, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"261D-1F3FC","shortcodes":["point_up_tone2"],"emoji":"☝🏼","text":"","type":1,"order":276,"group":1,"subgroup":17,"version":1,"tone":2},{"annotation":"食指向上指: 中等肤色","name":"WHITE UP POINTING INDEX, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"261D-1F3FD","shortcodes":["point_up_tone3"],"emoji":"☝🏽","text":"","type":1,"order":277,"group":1,"subgroup":17,"version":1,"tone":3},{"annotation":"食指向上指: 中等-深肤色","name":"WHITE UP POINTING INDEX, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"261D-1F3FE","shortcodes":["point_up_tone4"],"emoji":"☝🏾","text":"","type":1,"order":278,"group":1,"subgroup":17,"version":1,"tone":4},{"annotation":"食指向上指: 较深肤色","name":"WHITE UP POINTING INDEX, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"261D-1F3FF","shortcodes":["point_up_tone5"],"emoji":"☝🏿","text":"","type":1,"order":279,"group":1,"subgroup":17,"version":1,"tone":5}]},{"annotation":"拇指向上","name":"THUMBS UP SIGN","hexcode":"1F44D","shortcodes":["thumbsup","+1","yes"],"tags":["同意","手","真棒","赞成","顶一下"],"emoji":"👍️","text":"👍︎","type":1,"order":280,"group":1,"subgroup":18,"version":0.6,"skins":[{"annotation":"拇指向上: 较浅肤色","name":"THUMBS UP SIGN, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F44D-1F3FB","shortcodes":["thumbsup_tone1","+1_tone1","yes_tone1"],"emoji":"👍🏻","text":"","type":1,"order":281,"group":1,"subgroup":18,"version":1,"tone":1},{"annotation":"拇指向上: 中等-浅肤色","name":"THUMBS UP SIGN, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F44D-1F3FC","shortcodes":["thumbsup_tone2","+1_tone2","yes_tone2"],"emoji":"👍🏼","text":"","type":1,"order":282,"group":1,"subgroup":18,"version":1,"tone":2},{"annotation":"拇指向上: 中等肤色","name":"THUMBS UP SIGN, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F44D-1F3FD","shortcodes":["thumbsup_tone3","+1_tone3","yes_tone3"],"emoji":"👍🏽","text":"","type":1,"order":283,"group":1,"subgroup":18,"version":1,"tone":3},{"annotation":"拇指向上: 中等-深肤色","name":"THUMBS UP SIGN, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F44D-1F3FE","shortcodes":["thumbsup_tone4","+1_tone4","yes_tone4"],"emoji":"👍🏾","text":"","type":1,"order":284,"group":1,"subgroup":18,"version":1,"tone":4},{"annotation":"拇指向上: 较深肤色","name":"THUMBS UP SIGN, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F44D-1F3FF","shortcodes":["thumbsup_tone5","+1_tone5","yes_tone5"],"emoji":"👍🏿","text":"","type":1,"order":285,"group":1,"subgroup":18,"version":1,"tone":5}]},{"annotation":"拇指向下","name":"THUMBS DOWN SIGN","hexcode":"1F44E","shortcodes":["thumbsdown","-1","no"],"tags":["不赞成","反对","手","责备"],"emoji":"👎️","text":"👎︎","type":1,"order":286,"group":1,"subgroup":18,"version":0.6,"skins":[{"annotation":"拇指向下: 较浅肤色","name":"THUMBS DOWN SIGN, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F44E-1F3FB","shortcodes":["thumbsdown_tone1","-1_tone1","no_tone1"],"emoji":"👎🏻","text":"","type":1,"order":287,"group":1,"subgroup":18,"version":1,"tone":1},{"annotation":"拇指向下: 中等-浅肤色","name":"THUMBS DOWN SIGN, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F44E-1F3FC","shortcodes":["thumbsdown_tone2","-1_tone2","no_tone2"],"emoji":"👎🏼","text":"","type":1,"order":288,"group":1,"subgroup":18,"version":1,"tone":2},{"annotation":"拇指向下: 中等肤色","name":"THUMBS DOWN SIGN, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F44E-1F3FD","shortcodes":["thumbsdown_tone3","-1_tone3","no_tone3"],"emoji":"👎🏽","text":"","type":1,"order":289,"group":1,"subgroup":18,"version":1,"tone":3},{"annotation":"拇指向下: 中等-深肤色","name":"THUMBS DOWN SIGN, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F44E-1F3FE","shortcodes":["thumbsdown_tone4","-1_tone4","no_tone4"],"emoji":"👎🏾","text":"","type":1,"order":290,"group":1,"subgroup":18,"version":1,"tone":4},{"annotation":"拇指向下: 较深肤色","name":"THUMBS DOWN SIGN, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F44E-1F3FF","shortcodes":["thumbsdown_tone5","-1_tone5","no_tone5"],"emoji":"👎🏿","text":"","type":1,"order":291,"group":1,"subgroup":18,"version":1,"tone":5}]},{"annotation":"举起拳头","name":"RAISED FIST","hexcode":"270A","shortcodes":["fist"],"tags":["手","拳头","握拳"],"emoji":"✊","text":"","type":1,"order":292,"group":1,"subgroup":18,"version":0.6,"skins":[{"annotation":"举起拳头: 较浅肤色","name":"RAISED FIST, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"270A-1F3FB","shortcodes":["fist_tone1"],"emoji":"✊🏻","text":"","type":1,"order":293,"group":1,"subgroup":18,"version":1,"tone":1},{"annotation":"举起拳头: 中等-浅肤色","name":"RAISED FIST, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"270A-1F3FC","shortcodes":["fist_tone2"],"emoji":"✊🏼","text":"","type":1,"order":294,"group":1,"subgroup":18,"version":1,"tone":2},{"annotation":"举起拳头: 中等肤色","name":"RAISED FIST, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"270A-1F3FD","shortcodes":["fist_tone3"],"emoji":"✊🏽","text":"","type":1,"order":295,"group":1,"subgroup":18,"version":1,"tone":3},{"annotation":"举起拳头: 中等-深肤色","name":"RAISED FIST, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"270A-1F3FE","shortcodes":["fist_tone4"],"emoji":"✊🏾","text":"","type":1,"order":296,"group":1,"subgroup":18,"version":1,"tone":4},{"annotation":"举起拳头: 较深肤色","name":"RAISED FIST, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"270A-1F3FF","shortcodes":["fist_tone5"],"emoji":"✊🏿","text":"","type":1,"order":297,"group":1,"subgroup":18,"version":1,"tone":5}]},{"annotation":"出拳","name":"FISTED HAND SIGN","hexcode":"1F44A","shortcodes":["punch"],"tags":["手","打","拳"],"emoji":"👊","text":"","type":1,"order":298,"group":1,"subgroup":18,"version":0.6,"skins":[{"annotation":"出拳: 较浅肤色","name":"FISTED HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F44A-1F3FB","shortcodes":["punch_tone1"],"emoji":"👊🏻","text":"","type":1,"order":299,"group":1,"subgroup":18,"version":1,"tone":1},{"annotation":"出拳: 中等-浅肤色","name":"FISTED HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F44A-1F3FC","shortcodes":["punch_tone2"],"emoji":"👊🏼","text":"","type":1,"order":300,"group":1,"subgroup":18,"version":1,"tone":2},{"annotation":"出拳: 中等肤色","name":"FISTED HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F44A-1F3FD","shortcodes":["punch_tone3"],"emoji":"👊🏽","text":"","type":1,"order":301,"group":1,"subgroup":18,"version":1,"tone":3},{"annotation":"出拳: 中等-深肤色","name":"FISTED HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F44A-1F3FE","shortcodes":["punch_tone4"],"emoji":"👊🏾","text":"","type":1,"order":302,"group":1,"subgroup":18,"version":1,"tone":4},{"annotation":"出拳: 较深肤色","name":"FISTED HAND SIGN, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F44A-1F3FF","shortcodes":["punch_tone5"],"emoji":"👊🏿","text":"","type":1,"order":303,"group":1,"subgroup":18,"version":1,"tone":5}]},{"annotation":"朝左的拳头","name":"LEFT-FACING FIST","hexcode":"1F91B","shortcodes":["left_facing_fist"],"tags":["拳头","朝左"],"emoji":"🤛","text":"","type":1,"order":304,"group":1,"subgroup":18,"version":3,"skins":[{"annotation":"朝左的拳头: 较浅肤色","name":"LEFT-FACING FIST, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F91B-1F3FB","shortcodes":["left_facing_fist_tone1"],"emoji":"🤛🏻","text":"","type":1,"order":305,"group":1,"subgroup":18,"version":3,"tone":1},{"annotation":"朝左的拳头: 中等-浅肤色","name":"LEFT-FACING FIST, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F91B-1F3FC","shortcodes":["left_facing_fist_tone2"],"emoji":"🤛🏼","text":"","type":1,"order":306,"group":1,"subgroup":18,"version":3,"tone":2},{"annotation":"朝左的拳头: 中等肤色","name":"LEFT-FACING FIST, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F91B-1F3FD","shortcodes":["left_facing_fist_tone3"],"emoji":"🤛🏽","text":"","type":1,"order":307,"group":1,"subgroup":18,"version":3,"tone":3},{"annotation":"朝左的拳头: 中等-深肤色","name":"LEFT-FACING FIST, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F91B-1F3FE","shortcodes":["left_facing_fist_tone4"],"emoji":"🤛🏾","text":"","type":1,"order":308,"group":1,"subgroup":18,"version":3,"tone":4},{"annotation":"朝左的拳头: 较深肤色","name":"LEFT-FACING FIST, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F91B-1F3FF","shortcodes":["left_facing_fist_tone5"],"emoji":"🤛🏿","text":"","type":1,"order":309,"group":1,"subgroup":18,"version":3,"tone":5}]},{"annotation":"朝右的拳头","name":"RIGHT-FACING FIST","hexcode":"1F91C","shortcodes":["right_facing_fist"],"tags":["手","拳头","朝右"],"emoji":"🤜","text":"","type":1,"order":310,"group":1,"subgroup":18,"version":3,"skins":[{"annotation":"朝右的拳头: 较浅肤色","name":"RIGHT-FACING FIST, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F91C-1F3FB","shortcodes":["right_facing_fist_tone1"],"emoji":"🤜🏻","text":"","type":1,"order":311,"group":1,"subgroup":18,"version":3,"tone":1},{"annotation":"朝右的拳头: 中等-浅肤色","name":"RIGHT-FACING FIST, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F91C-1F3FC","shortcodes":["right_facing_fist_tone2"],"emoji":"🤜🏼","text":"","type":1,"order":312,"group":1,"subgroup":18,"version":3,"tone":2},{"annotation":"朝右的拳头: 中等肤色","name":"RIGHT-FACING FIST, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F91C-1F3FD","shortcodes":["right_facing_fist_tone3"],"emoji":"🤜🏽","text":"","type":1,"order":313,"group":1,"subgroup":18,"version":3,"tone":3},{"annotation":"朝右的拳头: 中等-深肤色","name":"RIGHT-FACING FIST, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F91C-1F3FE","shortcodes":["right_facing_fist_tone4"],"emoji":"🤜🏾","text":"","type":1,"order":314,"group":1,"subgroup":18,"version":3,"tone":4},{"annotation":"朝右的拳头: 较深肤色","name":"RIGHT-FACING FIST, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F91C-1F3FF","shortcodes":["right_facing_fist_tone5"],"emoji":"🤜🏿","text":"","type":1,"order":315,"group":1,"subgroup":18,"version":3,"tone":5}]},{"annotation":"鼓掌","name":"CLAPPING HANDS SIGN","hexcode":"1F44F","shortcodes":["clap"],"tags":["拍手"],"emoji":"👏","text":"","type":1,"order":316,"group":1,"subgroup":19,"version":0.6,"skins":[{"annotation":"鼓掌: 较浅肤色","name":"CLAPPING HANDS SIGN, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F44F-1F3FB","shortcodes":["clap_tone1"],"emoji":"👏🏻","text":"","type":1,"order":317,"group":1,"subgroup":19,"version":1,"tone":1},{"annotation":"鼓掌: 中等-浅肤色","name":"CLAPPING HANDS SIGN, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F44F-1F3FC","shortcodes":["clap_tone2"],"emoji":"👏🏼","text":"","type":1,"order":318,"group":1,"subgroup":19,"version":1,"tone":2},{"annotation":"鼓掌: 中等肤色","name":"CLAPPING HANDS SIGN, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F44F-1F3FD","shortcodes":["clap_tone3"],"emoji":"👏🏽","text":"","type":1,"order":319,"group":1,"subgroup":19,"version":1,"tone":3},{"annotation":"鼓掌: 中等-深肤色","name":"CLAPPING HANDS SIGN, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F44F-1F3FE","shortcodes":["clap_tone4"],"emoji":"👏🏾","text":"","type":1,"order":320,"group":1,"subgroup":19,"version":1,"tone":4},{"annotation":"鼓掌: 较深肤色","name":"CLAPPING HANDS SIGN, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F44F-1F3FF","shortcodes":["clap_tone5"],"emoji":"👏🏿","text":"","type":1,"order":321,"group":1,"subgroup":19,"version":1,"tone":5}]},{"annotation":"举双手","name":"PERSON RAISING BOTH HANDS IN CELEBRATION","hexcode":"1F64C","shortcodes":["raised_hands"],"tags":["击掌","双手","庆祝"],"emoji":"🙌","text":"","type":1,"order":322,"group":1,"subgroup":19,"version":0.6,"skins":[{"annotation":"举双手: 较浅肤色","name":"PERSON RAISING BOTH HANDS IN CELEBRATION, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F64C-1F3FB","shortcodes":["raised_hands_tone1"],"emoji":"🙌🏻","text":"","type":1,"order":323,"group":1,"subgroup":19,"version":1,"tone":1},{"annotation":"举双手: 中等-浅肤色","name":"PERSON RAISING BOTH HANDS IN CELEBRATION, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F64C-1F3FC","shortcodes":["raised_hands_tone2"],"emoji":"🙌🏼","text":"","type":1,"order":324,"group":1,"subgroup":19,"version":1,"tone":2},{"annotation":"举双手: 中等肤色","name":"PERSON RAISING BOTH HANDS IN CELEBRATION, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F64C-1F3FD","shortcodes":["raised_hands_tone3"],"emoji":"🙌🏽","text":"","type":1,"order":325,"group":1,"subgroup":19,"version":1,"tone":3},{"annotation":"举双手: 中等-深肤色","name":"PERSON RAISING BOTH HANDS IN CELEBRATION, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F64C-1F3FE","shortcodes":["raised_hands_tone4"],"emoji":"🙌🏾","text":"","type":1,"order":326,"group":1,"subgroup":19,"version":1,"tone":4},{"annotation":"举双手: 较深肤色","name":"PERSON RAISING BOTH HANDS IN CELEBRATION, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F64C-1F3FF","shortcodes":["raised_hands_tone5"],"emoji":"🙌🏿","text":"","type":1,"order":327,"group":1,"subgroup":19,"version":1,"tone":5}]},{"annotation":"张开双手","name":"OPEN HANDS SIGN","hexcode":"1F450","shortcodes":["open_hands"],"tags":["双手","摊手"],"emoji":"👐","text":"","type":1,"order":328,"group":1,"subgroup":19,"version":0.6,"skins":[{"annotation":"张开双手: 较浅肤色","name":"OPEN HANDS SIGN, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F450-1F3FB","shortcodes":["open_hands_tone1"],"emoji":"👐🏻","text":"","type":1,"order":329,"group":1,"subgroup":19,"version":1,"tone":1},{"annotation":"张开双手: 中等-浅肤色","name":"OPEN HANDS SIGN, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F450-1F3FC","shortcodes":["open_hands_tone2"],"emoji":"👐🏼","text":"","type":1,"order":330,"group":1,"subgroup":19,"version":1,"tone":2},{"annotation":"张开双手: 中等肤色","name":"OPEN HANDS SIGN, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F450-1F3FD","shortcodes":["open_hands_tone3"],"emoji":"👐🏽","text":"","type":1,"order":331,"group":1,"subgroup":19,"version":1,"tone":3},{"annotation":"张开双手: 中等-深肤色","name":"OPEN HANDS SIGN, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F450-1F3FE","shortcodes":["open_hands_tone4"],"emoji":"👐🏾","text":"","type":1,"order":332,"group":1,"subgroup":19,"version":1,"tone":4},{"annotation":"张开双手: 较深肤色","name":"OPEN HANDS SIGN, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F450-1F3FF","shortcodes":["open_hands_tone5"],"emoji":"👐🏿","text":"","type":1,"order":333,"group":1,"subgroup":19,"version":1,"tone":5}]},{"annotation":"掌心向上托起","name":"PALMS UP TOGETHER","hexcode":"1F932","shortcodes":["palms_up"],"tags":["祷告"],"emoji":"🤲","text":"","type":1,"order":334,"group":1,"subgroup":19,"version":5,"skins":[{"annotation":"掌心向上托起: 较浅肤色","name":"PALMS UP TOGETHER, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F932-1F3FB","shortcodes":["palms_up_tone1"],"emoji":"🤲🏻","text":"","type":1,"order":335,"group":1,"subgroup":19,"version":5,"tone":1},{"annotation":"掌心向上托起: 中等-浅肤色","name":"PALMS UP TOGETHER, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F932-1F3FC","shortcodes":["palms_up_tone2"],"emoji":"🤲🏼","text":"","type":1,"order":336,"group":1,"subgroup":19,"version":5,"tone":2},{"annotation":"掌心向上托起: 中等肤色","name":"PALMS UP TOGETHER, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F932-1F3FD","shortcodes":["palms_up_tone3"],"emoji":"🤲🏽","text":"","type":1,"order":337,"group":1,"subgroup":19,"version":5,"tone":3},{"annotation":"掌心向上托起: 中等-深肤色","name":"PALMS UP TOGETHER, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F932-1F3FE","shortcodes":["palms_up_tone4"],"emoji":"🤲🏾","text":"","type":1,"order":338,"group":1,"subgroup":19,"version":5,"tone":4},{"annotation":"掌心向上托起: 较深肤色","name":"PALMS UP TOGETHER, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F932-1F3FF","shortcodes":["palms_up_tone5"],"emoji":"🤲🏿","text":"","type":1,"order":339,"group":1,"subgroup":19,"version":5,"tone":5}]},{"annotation":"握手","name":"HANDSHAKE","hexcode":"1F91D","shortcodes":["handshake"],"tags":["会面","协议"],"emoji":"🤝","text":"","type":1,"order":340,"group":1,"subgroup":19,"version":3},{"annotation":"双手合十","name":"PERSON WITH FOLDED HANDS","hexcode":"1F64F","shortcodes":["pray"],"tags":["拜托","祈求","祈祷","祝福"],"emoji":"🙏","text":"","type":1,"order":341,"group":1,"subgroup":19,"version":0.6,"skins":[{"annotation":"双手合十: 较浅肤色","name":"PERSON WITH FOLDED HANDS, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"1F64F-1F3FB","shortcodes":["pray_tone1"],"emoji":"🙏🏻","text":"","type":1,"order":342,"group":1,"subgroup":19,"version":1,"tone":1},{"annotation":"双手合十: 中等-浅肤色","name":"PERSON WITH FOLDED HANDS, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"1F64F-1F3FC","shortcodes":["pray_tone2"],"emoji":"🙏🏼","text":"","type":1,"order":343,"group":1,"subgroup":19,"version":1,"tone":2},{"annotation":"双手合十: 中等肤色","name":"PERSON WITH FOLDED HANDS, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"1F64F-1F3FD","shortcodes":["pray_tone3"],"emoji":"🙏🏽","text":"","type":1,"order":344,"group":1,"subgroup":19,"version":1,"tone":3},{"annotation":"双手合十: 中等-深肤色","name":"PERSON WITH FOLDED HANDS, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"1F64F-1F3FE","shortcodes":["pray_tone4"],"emoji":"🙏🏾","text":"","type":1,"order":345,"group":1,"subgroup":19,"version":1,"tone":4},{"annotation":"双手合十: 较深肤色","name":"PERSON WITH FOLDED HANDS, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"1F64F-1F3FF","shortcodes":["pray_tone5"],"emoji":"🙏🏿","text":"","type":1,"order":346,"group":1,"subgroup":19,"version":1,"tone":5}]},{"annotation":"写字","name":"WRITING HAND","hexcode":"270D","shortcodes":["writing_hand"],"tags":["写","笔"],"emoji":"✍️","text":"✍︎","type":0,"order":348,"group":1,"subgroup":20,"version":0.7,"skins":[{"annotation":"写字: 较浅肤色","name":"WRITING HAND, EMOJI MODIFIER FITZPATRICK TYPE-1-2","hexcode":"270D-1F3FB","shortcodes":["writing_hand_tone1"],"emoji":"✍🏻","text":"","type":1,"order":349,"group":1,"subgroup":20,"version":1,"tone":1},{"annotation":"写字: 中等-浅肤色","name":"WRITING HAND, EMOJI MODIFIER FITZPATRICK TYPE-3","hexcode":"270D-1F3FC","shortcodes":["writing_hand_tone2"],"emoji":"✍🏼","text":"","type":1,"order":350,"group":1,"subgroup":20,"version":1,"tone":2},{"annotation":"写字: 中等肤色","name":"WRITING HAND, EMOJI MODIFIER FITZPATRICK TYPE-4","hexcode":"270D-1F3FD","shortcodes":["writing_hand_tone3"],"emoji":"✍🏽","text":"","type":1,"order":351,"group":1,"subgroup":20,"version":1,"tone":3},{"annotation":"写字: 中等-深肤色","name":"WRITING HAND, EMOJI MODIFIER FITZPATRICK TYPE-5","hexcode":"270D-1F3FE","shortcodes":["writing_hand_tone4"],"emoji":"✍🏾","text":"","type":1,"order":352,"group":1,"subgroup":20,"version":1,"tone":4},{"annotation":"写字: 较深肤色","name":"WRITING HAND, EMOJI MODIFIER FITZPATRICK TYPE-6","hexcode":"270D-1F3FF","shortcodes":["writing_hand_tone5"],"emoji":"✍🏿","text":"","type":1,"order":353,"group":1,"subgroup":20,"version":1,"tone":5}]}]`);
30
- const _hoisted_1$1 = { class: "editor-tool-bar" };
31
- const _hoisted_2$1 = ["title"];
32
- const _hoisted_3$1 = { class: "emoji-box" };
33
- const _hoisted_4$1 = { style: { "font-size": "px2vw(18)", "padding-bottom": "px2vw(4)" } };
34
- const _hoisted_5$1 = { class: "emoji-item-box" };
34
+ const _hoisted_1$2 = { class: "editor-tool-bar" };
35
+ const _hoisted_2$2 = ["title"];
36
+ const _hoisted_3$2 = { class: "emoji-box" };
37
+ const _hoisted_4$2 = { style: { "font-size": "px2vw(18)", "padding-bottom": "px2vw(4)" } };
38
+ const _hoisted_5$2 = { class: "emoji-item-box" };
35
39
  const _hoisted_6$1 = ["title", "onClick"];
36
40
  const _hoisted_7$1 = ["title"];
37
41
  const _hoisted_8$1 = ["title"];
38
42
  const _hoisted_9$1 = ["title"];
39
43
  const _hoisted_10$1 = ["title"];
44
+ const _hoisted_11$1 = ["title"];
40
45
  const maxFileSize = 2 * 1024 * 1024 * 1024;
41
- const _sfc_main$1 = {
46
+ const _sfc_main$2 = {
42
47
  __name: "Toolbar",
43
- emits: ["pick-emoji", "upload-success", "open-screenshot", "open-setting", "open-font-setting"],
48
+ emits: [
49
+ "pick-emoji",
50
+ "upload-success",
51
+ "open-screenshot",
52
+ "open-setting",
53
+ "open-font-setting",
54
+ "open-voice"
55
+ ],
44
56
  setup(__props, { emit: __emit }) {
45
57
  const emits = __emit;
46
58
  const chatMessage = useChatStore();
@@ -179,6 +191,9 @@ const _sfc_main$1 = {
179
191
  const openFont = () => {
180
192
  emits("open-setting");
181
193
  };
194
+ const openVoice = () => {
195
+ emits("open-voice");
196
+ };
182
197
  onBeforeMount(() => {
183
198
  initEmoji();
184
199
  });
@@ -196,7 +211,7 @@ const _sfc_main$1 = {
196
211
  const _component_el_tabs = resolveComponent("el-tabs");
197
212
  const _component_el_popover = resolveComponent("el-popover");
198
213
  const _component_el_upload = resolveComponent("el-upload");
199
- return openBlock(), createElementBlock("div", _hoisted_1$1, [
214
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
200
215
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(icons), (icon) => {
201
216
  return openBlock(), createElementBlock("div", {
202
217
  key: icon.id,
@@ -213,10 +228,10 @@ const _sfc_main$1 = {
213
228
  createElementVNode("i", {
214
229
  class: "iconfont mdm-icon-emjo",
215
230
  title: icon.title
216
- }, null, 8, _hoisted_2$1)
231
+ }, null, 8, _hoisted_2$2)
217
232
  ]),
218
233
  default: withCtx(() => [
219
- createElementVNode("div", _hoisted_3$1, [
234
+ createElementVNode("div", _hoisted_3$2, [
220
235
  createVNode(_component_el_tabs, {
221
236
  modelValue: activeName.value,
222
237
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => activeName.value = $event),
@@ -233,7 +248,7 @@ const _sfc_main$1 = {
233
248
  fn: withCtx(() => {
234
249
  var _a;
235
250
  return [
236
- createElementVNode("span", _hoisted_4$1, toDisplayString((_a = list[0]) == null ? void 0 : _a.emoji), 1)
251
+ createElementVNode("span", _hoisted_4$2, toDisplayString((_a = list[0]) == null ? void 0 : _a.emoji), 1)
237
252
  ];
238
253
  }),
239
254
  key: "0"
@@ -243,7 +258,7 @@ const _sfc_main$1 = {
243
258
  ]),
244
259
  _: 1
245
260
  }, 8, ["modelValue"]),
246
- createElementVNode("div", _hoisted_5$1, [
261
+ createElementVNode("div", _hoisted_5$2, [
247
262
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(emojiList), (emoji) => {
248
263
  return openBlock(), createElementBlock("span", {
249
264
  class: "emoji-item",
@@ -292,24 +307,649 @@ const _sfc_main$1 = {
292
307
  }, null, 8, _hoisted_8$1)
293
308
  ]),
294
309
  _: 2
295
- }, 1032, ["on-change"])) : icon.id === "cut" ? (openBlock(), createElementBlock("i", {
310
+ }, 1032, ["on-change"])) : icon.id === "voice" ? (openBlock(), createElementBlock("i", {
296
311
  key: 3,
312
+ class: "iconfont mdm-icon-set_audio",
313
+ title: icon.title,
314
+ onClick: withModifiers(openVoice, ["stop"])
315
+ }, null, 8, _hoisted_9$1)) : icon.id === "cut" ? (openBlock(), createElementBlock("i", {
316
+ key: 4,
297
317
  class: "iconfont mdm-icon-clipper",
298
318
  title: icon.title,
299
319
  onClick: withModifiers(openScreenshot, ["stop"])
300
- }, null, 8, _hoisted_9$1)) : icon.id === "font" ? (openBlock(), createElementBlock("i", {
301
- key: 4,
320
+ }, null, 8, _hoisted_10$1)) : icon.id === "font" ? (openBlock(), createElementBlock("i", {
321
+ key: 5,
302
322
  class: "iconfont mdm-icon-ziti",
303
323
  title: icon.title,
304
324
  onClick: withModifiers(openFont, ["stop"])
305
- }, null, 8, _hoisted_10$1)) : createCommentVNode("", true)
325
+ }, null, 8, _hoisted_11$1)) : createCommentVNode("", true)
306
326
  ]);
307
327
  }), 128))
308
328
  ]);
309
329
  };
310
330
  }
311
331
  };
312
- const SelfToolbar = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-28c15720"]]);
332
+ const SelfToolbar = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-14fefbe3"]]);
333
+ var recorder$1 = { exports: {} };
334
+ /*!
335
+ *
336
+ * js-audio-recorder - js audio recorder plugin
337
+ *
338
+ * @version v1.0.7
339
+ * @homepage https://github.com/2fps/recorder
340
+ * @author 2fps <echoweb@126.com> (https://www.zhuyuntao.cn)
341
+ * @license MIT
342
+ *
343
+ */
344
+ var recorder = recorder$1.exports;
345
+ var hasRequiredRecorder;
346
+ function requireRecorder() {
347
+ if (hasRequiredRecorder) return recorder$1.exports;
348
+ hasRequiredRecorder = 1;
349
+ (function(module, exports) {
350
+ !(function(t, e) {
351
+ module.exports = e();
352
+ })(recorder, function() {
353
+ return (function(t) {
354
+ var e = {};
355
+ function n(i) {
356
+ if (e[i]) return e[i].exports;
357
+ var o = e[i] = { i, l: false, exports: {} };
358
+ return t[i].call(o.exports, o, o.exports, n), o.l = true, o.exports;
359
+ }
360
+ return n.m = t, n.c = e, n.d = function(t2, e2, i) {
361
+ n.o(t2, e2) || Object.defineProperty(t2, e2, { enumerable: true, get: i });
362
+ }, n.r = function(t2) {
363
+ "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t2, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t2, "__esModule", { value: true });
364
+ }, n.t = function(t2, e2) {
365
+ if (1 & e2 && (t2 = n(t2)), 8 & e2) return t2;
366
+ if (4 & e2 && "object" == typeof t2 && t2 && t2.__esModule) return t2;
367
+ var i = /* @__PURE__ */ Object.create(null);
368
+ if (n.r(i), Object.defineProperty(i, "default", { enumerable: true, value: t2 }), 2 & e2 && "string" != typeof t2) for (var o in t2) n.d(i, o, (function(e3) {
369
+ return t2[e3];
370
+ }).bind(null, o));
371
+ return i;
372
+ }, n.n = function(t2) {
373
+ var e2 = t2 && t2.__esModule ? function() {
374
+ return t2.default;
375
+ } : function() {
376
+ return t2;
377
+ };
378
+ return n.d(e2, "a", e2), e2;
379
+ }, n.o = function(t2, e2) {
380
+ return Object.prototype.hasOwnProperty.call(t2, e2);
381
+ }, n.p = "", n(n.s = 1);
382
+ })([function(t, e, n) {
383
+ function i(t2, e2, n2) {
384
+ for (var i2 = 0; i2 < n2.length; i2++) t2.setUint8(e2 + i2, n2.charCodeAt(i2));
385
+ }
386
+ Object.defineProperty(e, "__esModule", { value: true }), e.compress = function(t2, e2, n2) {
387
+ for (var i2 = e2 / n2, o = Math.max(i2, 1), r = t2.left, a = t2.right, s = Math.floor((r.length + a.length) / i2), u = new Float32Array(s), c = 0, l = 0; c < s; ) {
388
+ var f = Math.floor(l);
389
+ u[c] = r[f], c++, a.length && (u[c] = a[f], c++), l += o;
390
+ }
391
+ return u;
392
+ }, e.encodePCM = function(t2, e2, n2) {
393
+ void 0 === n2 && (n2 = true);
394
+ var i2 = 0, o = t2.length * (e2 / 8), r = new ArrayBuffer(o), a = new DataView(r);
395
+ if (8 === e2) for (var s = 0; s < t2.length; s++, i2++) {
396
+ var u = (c = Math.max(-1, Math.min(1, t2[s]))) < 0 ? 128 * c : 127 * c;
397
+ u = +u + 128, a.setInt8(i2, u);
398
+ }
399
+ else for (s = 0; s < t2.length; s++, i2 += 2) {
400
+ var c = Math.max(-1, Math.min(1, t2[s]));
401
+ a.setInt16(i2, c < 0 ? 32768 * c : 32767 * c, n2);
402
+ }
403
+ return a;
404
+ }, e.encodeWAV = function(t2, e2, n2, o, r, a) {
405
+ void 0 === a && (a = true);
406
+ var s = n2 > e2 ? e2 : n2, u = r, c = new ArrayBuffer(44 + t2.byteLength), l = new DataView(c), f = o, p = 0;
407
+ i(l, p, "RIFF"), p += 4, l.setUint32(p, 36 + t2.byteLength, a), i(l, p += 4, "WAVE"), i(l, p += 4, "fmt "), p += 4, l.setUint32(p, 16, a), p += 4, l.setUint16(p, 1, a), p += 2, l.setUint16(p, f, a), p += 2, l.setUint32(p, s, a), p += 4, l.setUint32(p, f * s * (u / 8), a), p += 4, l.setUint16(p, f * (u / 8), a), p += 2, l.setUint16(p, u, a), i(l, p += 2, "data"), p += 4, l.setUint32(p, t2.byteLength, a), p += 4;
408
+ for (var d = 0; d < t2.byteLength; ) l.setUint8(p, t2.getUint8(d)), p++, d++;
409
+ return l;
410
+ };
411
+ }, function(t, e, n) {
412
+ var i, o = this && this.__extends || (i = function(t2, e2) {
413
+ return (i = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t3, e3) {
414
+ t3.__proto__ = e3;
415
+ } || function(t3, e3) {
416
+ for (var n2 in e3) e3.hasOwnProperty(n2) && (t3[n2] = e3[n2]);
417
+ })(t2, e2);
418
+ }, function(t2, e2) {
419
+ function n2() {
420
+ this.constructor = t2;
421
+ }
422
+ i(t2, e2), t2.prototype = null === e2 ? Object.create(e2) : (n2.prototype = e2.prototype, new n2());
423
+ });
424
+ Object.defineProperty(e, "__esModule", { value: true });
425
+ var r = n(2), a = n(0), s = n(3), u = (function(t2) {
426
+ function e2(e3) {
427
+ void 0 === e3 && (e3 = {});
428
+ var n2 = t2.call(this, e3) || this;
429
+ return n2.isrecording = false, n2.ispause = false, n2.isplaying = false, n2;
430
+ }
431
+ return o(e2, t2), e2.prototype.setOption = function(t3) {
432
+ void 0 === t3 && (t3 = {}), this.setNewOption(t3);
433
+ }, e2.prototype.start = function() {
434
+ return this.isrecording ? Promise.reject() : (this.isrecording = true, this.startRecord());
435
+ }, e2.prototype.pause = function() {
436
+ this.isrecording && !this.ispause && (this.ispause = true, this.pauseRecord());
437
+ }, e2.prototype.resume = function() {
438
+ this.isrecording && this.ispause && (this.ispause = false, this.resumeRecord());
439
+ }, e2.prototype.stop = function() {
440
+ this.isrecording && (this.isrecording = false, this.ispause = false, this.stopRecord());
441
+ }, e2.prototype.play = function() {
442
+ this.stop(), this.isplaying = true, this.onplay && this.onplay(), s.default.addPlayEnd(this.onplayend);
443
+ var t3 = this.getWAV();
444
+ t3.byteLength > 44 && s.default.play(t3.buffer);
445
+ }, e2.prototype.getPlayTime = function() {
446
+ return s.default.getPlayTime();
447
+ }, e2.prototype.pausePlay = function() {
448
+ !this.isrecording && this.isplaying && (this.isplaying = false, this.onpauseplay && this.onpauseplay(), s.default.pausePlay());
449
+ }, e2.prototype.resumePlay = function() {
450
+ this.isrecording || this.isplaying || (this.isplaying = true, this.onresumeplay && this.onresumeplay(), s.default.resumePlay());
451
+ }, e2.prototype.stopPlay = function() {
452
+ this.isrecording || (this.isplaying = false, this.onstopplay && this.onstopplay(), s.default.stopPlay());
453
+ }, e2.prototype.destroy = function() {
454
+ return s.default.destroyPlay(), this.destroyRecord();
455
+ }, e2.prototype.getRecordAnalyseData = function() {
456
+ return this.getAnalyseData();
457
+ }, e2.prototype.getPlayAnalyseData = function() {
458
+ return s.default.getAnalyseData();
459
+ }, e2.prototype.getPCM = function() {
460
+ this.stop();
461
+ var t3 = this.getData();
462
+ return t3 = a.compress(t3, this.inputSampleRate, this.outputSampleRate), a.encodePCM(t3, this.oututSampleBits, this.littleEdian);
463
+ }, e2.prototype.getPCMBlob = function() {
464
+ return new Blob([this.getPCM()]);
465
+ }, e2.prototype.downloadPCM = function(t3) {
466
+ void 0 === t3 && (t3 = "recorder");
467
+ var e3 = this.getPCMBlob();
468
+ r.downloadPCM(e3, t3);
469
+ }, e2.prototype.getWAV = function() {
470
+ var t3 = this.getPCM();
471
+ return a.encodeWAV(t3, this.inputSampleRate, this.outputSampleRate, this.config.numChannels, this.oututSampleBits, this.littleEdian);
472
+ }, e2.prototype.getWAVBlob = function() {
473
+ return new Blob([this.getWAV()], { type: "audio/wav" });
474
+ }, e2.prototype.downloadWAV = function(t3) {
475
+ void 0 === t3 && (t3 = "recorder");
476
+ var e3 = this.getWAVBlob();
477
+ r.downloadWAV(e3, t3);
478
+ }, e2.prototype.download = function(t3, e3, n2) {
479
+ r.download(t3, e3, n2);
480
+ }, e2.prototype.getChannelData = function() {
481
+ var t3 = this.getPCM(), e3 = t3.byteLength, n2 = this.littleEdian, i2 = { left: null, right: null };
482
+ if (2 === this.config.numChannels) {
483
+ var o2 = new DataView(new ArrayBuffer(e3 / 2)), r2 = new DataView(new ArrayBuffer(e3 / 2));
484
+ if (16 === this.config.sampleBits) for (var a2 = 0; a2 < e3 / 2; a2 += 2) o2.setInt16(a2, t3.getInt16(2 * a2, n2), n2), r2.setInt16(a2, t3.getInt16(2 * a2 + 2, n2), n2);
485
+ else for (a2 = 0; a2 < e3 / 2; a2 += 2) o2.setInt8(a2, t3.getInt8(2 * a2)), r2.setInt8(a2, t3.getInt8(2 * a2 + 1));
486
+ i2.left = o2, i2.right = r2;
487
+ } else i2.left = t3;
488
+ return i2;
489
+ }, e2;
490
+ })(n(5).default);
491
+ e.default = u;
492
+ }, function(t, e, n) {
493
+ function i(t2, e2, n2) {
494
+ var i2 = document.createElement("a");
495
+ i2.href = window.URL.createObjectURL(t2), i2.download = e2 + "." + n2, i2.click();
496
+ }
497
+ Object.defineProperty(e, "__esModule", { value: true }), e.downloadWAV = function(t2, e2) {
498
+ void 0 === e2 && (e2 = "recorder"), i(t2, e2, "wav");
499
+ }, e.downloadPCM = function(t2, e2) {
500
+ void 0 === e2 && (e2 = "recorder"), i(t2, e2, "pcm");
501
+ }, e.download = function(t2, e2, n2) {
502
+ return i(t2, e2, n2);
503
+ };
504
+ }, function(t, e, n) {
505
+ Object.defineProperty(e, "__esModule", { value: true });
506
+ var i = n(4), o = null, r = 0, a = 0, s = null, u = null, c = null, l = false, f = 0, p = function() {
507
+ };
508
+ function d() {
509
+ return l = false, s.decodeAudioData(c.slice(0), function(t2) {
510
+ (o = s.createBufferSource()).onended = function() {
511
+ l || (f = s.currentTime - a + r, p());
512
+ }, o.buffer = t2, o.connect(u), u.connect(s.destination), o.start(0, r), a = s.currentTime;
513
+ }, function(t2) {
514
+ i.throwError(t2);
515
+ });
516
+ }
517
+ function h() {
518
+ o && (o.stop(), o = null);
519
+ }
520
+ var y = (function() {
521
+ function t2() {
522
+ }
523
+ return t2.play = function(t3) {
524
+ return s || (s = new (window.AudioContext || window.webkitAudioContext)(), (u = s.createAnalyser()).fftSize = 2048), this.stopPlay(), c = t3, f = 0, d();
525
+ }, t2.pausePlay = function() {
526
+ h(), r += s.currentTime - a, l = true;
527
+ }, t2.resumePlay = function() {
528
+ return d();
529
+ }, t2.stopPlay = function() {
530
+ r = 0, c = null, h();
531
+ }, t2.destroyPlay = function() {
532
+ this.stopPlay();
533
+ }, t2.getAnalyseData = function() {
534
+ var t3 = new Uint8Array(u.frequencyBinCount);
535
+ return u.getByteTimeDomainData(t3), t3;
536
+ }, t2.addPlayEnd = function(t3) {
537
+ void 0 === t3 && (t3 = function() {
538
+ }), p = t3;
539
+ }, t2.getPlayTime = function() {
540
+ var t3 = l ? r : s.currentTime - a + r;
541
+ return f || t3;
542
+ }, t2;
543
+ })();
544
+ e.default = y;
545
+ }, function(t, e, n) {
546
+ Object.defineProperty(e, "__esModule", { value: true }), e.throwError = function(t2) {
547
+ throw new Error(t2);
548
+ };
549
+ }, function(t, e, n) {
550
+ Object.defineProperty(e, "__esModule", { value: true });
551
+ var i = n(0), o = (function() {
552
+ function t2(e2) {
553
+ void 0 === e2 && (e2 = {}), this.size = 0, this.lBuffer = [], this.rBuffer = [], this.tempPCM = [], this.inputSampleBits = 16, this.fileSize = 0, this.duration = 0, this.needRecord = true;
554
+ var n2, i2 = new (window.AudioContext || window.webkitAudioContext)();
555
+ this.inputSampleRate = i2.sampleRate, this.setNewOption(e2), this.littleEdian = (n2 = new ArrayBuffer(2), new DataView(n2).setInt16(0, 256, true), 256 === new Int16Array(n2)[0]), t2.initUserMedia();
556
+ }
557
+ return t2.prototype.setNewOption = function(t3) {
558
+ void 0 === t3 && (t3 = {}), this.config = { sampleBits: ~[8, 16].indexOf(t3.sampleBits) ? t3.sampleBits : 16, sampleRate: ~[8e3, 11025, 16e3, 22050, 24e3, 44100, 48e3].indexOf(t3.sampleRate) ? t3.sampleRate : this.inputSampleRate, numChannels: ~[1, 2].indexOf(t3.numChannels) ? t3.numChannels : 1 }, this.outputSampleRate = this.config.sampleRate, this.oututSampleBits = this.config.sampleBits;
559
+ }, t2.prototype.startRecord = function() {
560
+ var t3 = this;
561
+ return this.context && this.destroyRecord(), this.initRecorder(), navigator.mediaDevices.getUserMedia({ audio: true }).then(function(e2) {
562
+ t3.audioInput = t3.context.createMediaStreamSource(e2), t3.stream = e2;
563
+ }).then(function() {
564
+ t3.audioInput.connect(t3.analyser), t3.analyser.connect(t3.recorder), t3.recorder.connect(t3.context.destination);
565
+ });
566
+ }, t2.prototype.pauseRecord = function() {
567
+ this.needRecord = false;
568
+ }, t2.prototype.resumeRecord = function() {
569
+ this.needRecord = true;
570
+ }, t2.prototype.stopRecord = function() {
571
+ this.audioInput && this.audioInput.disconnect(), this.source && this.source.stop(), this.recorder.disconnect(), this.analyser.disconnect(), this.needRecord = true;
572
+ }, t2.prototype.destroyRecord = function() {
573
+ return this.clearRecordStatus(), this.stopStream(), this.closeAudioContext();
574
+ }, t2.prototype.getAnalyseData = function() {
575
+ var t3 = new Uint8Array(this.analyser.frequencyBinCount);
576
+ return this.analyser.getByteTimeDomainData(t3), t3;
577
+ }, t2.prototype.getData = function() {
578
+ return this.flat();
579
+ }, t2.prototype.clearRecordStatus = function() {
580
+ this.lBuffer.length = 0, this.rBuffer.length = 0, this.size = 0, this.fileSize = 0, this.PCM = null, this.audioInput = null, this.duration = 0;
581
+ }, t2.prototype.flat = function() {
582
+ var t3 = null, e2 = new Float32Array(0);
583
+ 1 === this.config.numChannels ? t3 = new Float32Array(this.size) : (t3 = new Float32Array(this.size / 2), e2 = new Float32Array(this.size / 2));
584
+ for (var n2 = 0, i2 = 0; i2 < this.lBuffer.length; i2++) t3.set(this.lBuffer[i2], n2), n2 += this.lBuffer[i2].length;
585
+ n2 = 0;
586
+ for (i2 = 0; i2 < this.rBuffer.length; i2++) e2.set(this.rBuffer[i2], n2), n2 += this.rBuffer[i2].length;
587
+ return { left: t3, right: e2 };
588
+ }, t2.prototype.initRecorder = function() {
589
+ var t3 = this;
590
+ this.clearRecordStatus(), this.context = new (window.AudioContext || window.webkitAudioContext)(), this.analyser = this.context.createAnalyser(), this.analyser.fftSize = 2048;
591
+ var e2 = this.context.createScriptProcessor || this.context.createJavaScriptNode;
592
+ this.recorder = e2.apply(this.context, [4096, this.config.numChannels, this.config.numChannels]), this.recorder.onaudioprocess = function(e3) {
593
+ if (t3.needRecord) {
594
+ var n2, i2 = e3.inputBuffer.getChannelData(0), o2 = null;
595
+ t3.lBuffer.push(new Float32Array(i2)), t3.size += i2.length, 2 === t3.config.numChannels && (o2 = e3.inputBuffer.getChannelData(1), t3.rBuffer.push(new Float32Array(o2)), t3.size += o2.length), t3.fileSize = Math.floor(t3.size / Math.max(t3.inputSampleRate / t3.outputSampleRate, 1)) * (t3.oututSampleBits / 8), n2 = 100 * Math.max.apply(Math, i2), t3.duration += 4096 / t3.inputSampleRate, t3.onprocess && t3.onprocess(t3.duration), t3.onprogress && t3.onprogress({ duration: t3.duration, fileSize: t3.fileSize, vol: n2 });
596
+ }
597
+ };
598
+ }, t2.prototype.stopStream = function() {
599
+ this.stream && this.stream.getTracks && (this.stream.getTracks().forEach(function(t3) {
600
+ return t3.stop();
601
+ }), this.stream = null);
602
+ }, t2.prototype.closeAudioContext = function() {
603
+ return this.context && this.context.close && "closed" !== this.context.state ? this.context.close() : new Promise(function(t3) {
604
+ t3();
605
+ });
606
+ }, t2.initUserMedia = function() {
607
+ void 0 === navigator.mediaDevices && (navigator.mediaDevices = {}), void 0 === navigator.mediaDevices.getUserMedia && (navigator.mediaDevices.getUserMedia = function(t3) {
608
+ var e2 = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
609
+ return e2 ? new Promise(function(n2, i2) {
610
+ e2.call(navigator, t3, n2, i2);
611
+ }) : Promise.reject(new Error("浏览器不支持 getUserMedia !"));
612
+ });
613
+ }, t2.prototype.transformIntoPCM = function(t3, e2) {
614
+ var n2 = new Float32Array(t3), o2 = new Float32Array(e2), r = i.compress({ left: n2, right: o2 }, this.inputSampleRate, this.outputSampleRate);
615
+ return i.encodePCM(r, this.oututSampleBits, this.littleEdian);
616
+ }, t2.getPermission = function() {
617
+ return this.initUserMedia(), navigator.mediaDevices.getUserMedia({ audio: true }).then(function(t3) {
618
+ t3 && t3.getTracks().forEach(function(t4) {
619
+ return t4.stop();
620
+ });
621
+ });
622
+ }, t2;
623
+ })();
624
+ e.default = o;
625
+ }]).default;
626
+ });
627
+ })(recorder$1);
628
+ return recorder$1.exports;
629
+ }
630
+ var jsAudioRecorder;
631
+ var hasRequiredJsAudioRecorder;
632
+ function requireJsAudioRecorder() {
633
+ if (hasRequiredJsAudioRecorder) return jsAudioRecorder;
634
+ hasRequiredJsAudioRecorder = 1;
635
+ jsAudioRecorder = requireRecorder();
636
+ return jsAudioRecorder;
637
+ }
638
+ var jsAudioRecorderExports = requireJsAudioRecorder();
639
+ const Recorder = /* @__PURE__ */ getDefaultExportFromCjs(jsAudioRecorderExports);
640
+ const VOICE_SAMPLE_BITS = 16;
641
+ const VOICE_SAMPLE_RATE = 16e3;
642
+ const VOICE_CHANNELS = 1;
643
+ const VOICE_MIN_DURATION = 1;
644
+ const VOICE_MAX_DURATION = 60;
645
+ let activeRecorder = null;
646
+ const now = () => Date.now();
647
+ const useVoiceRecorder = () => {
648
+ const instanceId = Symbol("voice-recorder");
649
+ const isRecording = ref(false);
650
+ const canceling = ref(false);
651
+ const elapsed = ref(0);
652
+ let recorder2 = null;
653
+ let tickTimer = null;
654
+ let startAt = 0;
655
+ let onTimeoutCb = null;
656
+ let starting = false;
657
+ let canceledDuringStart = false;
658
+ const remaining = computed(() => Math.max(0, VOICE_MAX_DURATION - elapsed.value));
659
+ const countdown = computed(() => remaining.value <= 10 ? remaining.value : 0);
660
+ const clearTick = () => {
661
+ if (tickTimer) {
662
+ clearInterval(tickTimer);
663
+ tickTimer = null;
664
+ }
665
+ };
666
+ const removeVisibilityListener = () => {
667
+ var _a;
668
+ (_a = document.removeEventListener) == null ? void 0 : _a.call(document, "visibilitychange", handleVisibilityChange);
669
+ };
670
+ const handleVisibilityChange = () => {
671
+ if (document.visibilityState === "hidden" && isRecording.value) {
672
+ cancel();
673
+ }
674
+ };
675
+ const cleanup = () => {
676
+ var _a;
677
+ clearTick();
678
+ removeVisibilityListener();
679
+ canceledDuringStart = true;
680
+ isRecording.value = false;
681
+ canceling.value = false;
682
+ elapsed.value = 0;
683
+ if (recorder2) {
684
+ try {
685
+ recorder2.stop();
686
+ } catch (error) {
687
+ }
688
+ const destroying = recorder2;
689
+ recorder2 = null;
690
+ try {
691
+ (_a = destroying.destroy) == null ? void 0 : _a.call(destroying);
692
+ } catch (error) {
693
+ }
694
+ }
695
+ if (activeRecorder === instanceId) activeRecorder = null;
696
+ };
697
+ const start = async ({ onTimeout } = {}) => {
698
+ var _a, _b;
699
+ if (starting) return false;
700
+ if (activeRecorder && activeRecorder !== instanceId) return false;
701
+ if (isRecording.value) return false;
702
+ if (typeof navigator === "undefined" || !((_a = navigator.mediaDevices) == null ? void 0 : _a.getUserMedia)) {
703
+ throw new Error("当前环境不支持录音");
704
+ }
705
+ starting = true;
706
+ canceledDuringStart = false;
707
+ try {
708
+ await Recorder.getPermission();
709
+ if (canceledDuringStart) return false;
710
+ recorder2 = new Recorder({
711
+ sampleBits: VOICE_SAMPLE_BITS,
712
+ sampleRate: VOICE_SAMPLE_RATE,
713
+ numChannels: VOICE_CHANNELS
714
+ });
715
+ const startResult = recorder2.start();
716
+ if (startResult == null ? void 0 : startResult.catch) {
717
+ startResult.catch((error) => {
718
+ console.error("[Voice] 录音启动失败:", error);
719
+ cleanup();
720
+ });
721
+ }
722
+ activeRecorder = instanceId;
723
+ onTimeoutCb = onTimeout || null;
724
+ isRecording.value = true;
725
+ canceling.value = false;
726
+ elapsed.value = 0;
727
+ startAt = now();
728
+ (_b = document.addEventListener) == null ? void 0 : _b.call(document, "visibilitychange", handleVisibilityChange);
729
+ tickTimer = setInterval(async () => {
730
+ elapsed.value = Math.floor((now() - startAt) / 1e3);
731
+ if (elapsed.value >= VOICE_MAX_DURATION) {
732
+ const cb = onTimeoutCb;
733
+ onTimeoutCb = null;
734
+ const result = await stop();
735
+ cb == null ? void 0 : cb(result);
736
+ }
737
+ }, 250);
738
+ return true;
739
+ } finally {
740
+ starting = false;
741
+ }
742
+ };
743
+ const setCanceling = (value) => {
744
+ canceling.value = !!value;
745
+ };
746
+ const stop = async () => {
747
+ var _a;
748
+ if (!recorder2 || !isRecording.value) return null;
749
+ const recordedSeconds = (now() - startAt) / 1e3;
750
+ const current = recorder2;
751
+ const wasCanceling = canceling.value;
752
+ clearTick();
753
+ removeVisibilityListener();
754
+ isRecording.value = false;
755
+ onTimeoutCb = null;
756
+ let blob = null;
757
+ try {
758
+ current.stop();
759
+ blob = current.getWAVBlob();
760
+ } catch (error) {
761
+ console.warn("录音结束失败:", error);
762
+ } finally {
763
+ recorder2 = null;
764
+ if (activeRecorder === instanceId) activeRecorder = null;
765
+ try {
766
+ (_a = current.destroy) == null ? void 0 : _a.call(current);
767
+ } catch (error) {
768
+ }
769
+ }
770
+ canceling.value = false;
771
+ if (wasCanceling || !blob) return null;
772
+ if (recordedSeconds < VOICE_MIN_DURATION) return { tooShort: true };
773
+ const file = new File([blob], `voice_${Date.now()}.wav`, { type: "audio/wav" });
774
+ let duration = 0;
775
+ try {
776
+ duration = await getMediaDuration(file);
777
+ } catch (error) {
778
+ duration = 0;
779
+ }
780
+ if (!duration) duration = Number(current.duration) || 0;
781
+ if (!duration) duration = recordedSeconds;
782
+ return {
783
+ file,
784
+ size: file.size,
785
+ duration: Math.max(VOICE_MIN_DURATION, Math.round(duration))
786
+ };
787
+ };
788
+ const cancel = () => {
789
+ canceledDuringStart = true;
790
+ canceling.value = true;
791
+ return stop();
792
+ };
793
+ onBeforeUnmount(() => cleanup());
794
+ return {
795
+ isRecording,
796
+ canceling,
797
+ elapsed,
798
+ remaining,
799
+ countdown,
800
+ start,
801
+ stop,
802
+ cancel,
803
+ setCanceling,
804
+ cleanup
805
+ };
806
+ };
807
+ const _hoisted_1$1 = { class: "voice-recorder-body" };
808
+ const _hoisted_2$1 = { class: "voice-status" };
809
+ const _hoisted_3$1 = {
810
+ key: 0,
811
+ class: "voice-time"
812
+ };
813
+ const _hoisted_4$1 = {
814
+ key: 0,
815
+ class: "voice-countdown"
816
+ };
817
+ const _hoisted_5$1 = { class: "voice-dialog-footer" };
818
+ const _sfc_main$1 = {
819
+ __name: "VoiceRecorderPc",
820
+ props: {
821
+ modelValue: {
822
+ type: Boolean,
823
+ default: false
824
+ }
825
+ },
826
+ emits: ["update:modelValue", "complete", "cancel"],
827
+ setup(__props, { emit: __emit }) {
828
+ const props = __props;
829
+ const emit = __emit;
830
+ const theme = inject("chatTheme");
831
+ const { stopAllAudio } = useAudioPlayer();
832
+ const { isRecording, elapsed, countdown, start, stop, cancel, cleanup } = useVoiceRecorder();
833
+ const statusText = computed(() => isRecording.value ? "正在录音,点击按钮可结束" : "点击麦克风开始录音");
834
+ const closeDialog = () => {
835
+ emit("update:modelValue", false);
836
+ };
837
+ const onVisibleChange = (visible) => {
838
+ if (!visible && isRecording.value) {
839
+ cancel();
840
+ }
841
+ if (!visible) cleanup();
842
+ emit("update:modelValue", visible);
843
+ };
844
+ const beginRecord = async () => {
845
+ try {
846
+ stopAllAudio();
847
+ await start({
848
+ onTimeout: (result) => finishRecord(result)
849
+ });
850
+ } catch (error) {
851
+ console.error("[Voice] 录音启动失败:", error);
852
+ ElMessage.error((error == null ? void 0 : error.message) || "无法录音,请检查麦克风权限");
853
+ }
854
+ };
855
+ const finishRecord = async (result) => {
856
+ if (!result) {
857
+ emit("cancel");
858
+ closeDialog();
859
+ return;
860
+ }
861
+ if (result.tooShort) {
862
+ ElMessage.warning("录音时间太短");
863
+ return;
864
+ }
865
+ emit("complete", result);
866
+ closeDialog();
867
+ };
868
+ const toggleRecord = () => {
869
+ if (!isRecording.value) beginRecord();
870
+ };
871
+ const onStopAndSend = async () => {
872
+ if (!isRecording.value) return;
873
+ await finishRecord(await stop());
874
+ };
875
+ const onCancel = async () => {
876
+ if (isRecording.value) await cancel();
877
+ emit("cancel");
878
+ closeDialog();
879
+ };
880
+ watch(
881
+ () => props.modelValue,
882
+ (visible) => {
883
+ if (!visible && isRecording.value) cancel();
884
+ }
885
+ );
886
+ return (_ctx, _cache) => {
887
+ const _component_el_button = resolveComponent("el-button");
888
+ const _component_el_dialog = resolveComponent("el-dialog");
889
+ return openBlock(), createBlock(_component_el_dialog, {
890
+ "model-value": props.modelValue,
891
+ class: normalizeClass(["voice-recorder-dialog", unref(theme)]),
892
+ width: "360px",
893
+ "show-close": false,
894
+ "close-on-click-modal": !unref(isRecording),
895
+ "close-on-press-escape": !unref(isRecording),
896
+ "append-to-body": "",
897
+ "onUpdate:modelValue": onVisibleChange
898
+ }, {
899
+ header: withCtx(() => [
900
+ createElementVNode("div", { class: "voice-dialog-title" }, [
901
+ _cache[0] || (_cache[0] = createElementVNode("span", null, "发送语音消息", -1)),
902
+ createElementVNode("i", {
903
+ class: "voice-dialog-close iconfont mdm-icon-close",
904
+ onClick: closeDialog
905
+ })
906
+ ])
907
+ ]),
908
+ footer: withCtx(() => [
909
+ createElementVNode("div", _hoisted_5$1, [
910
+ createVNode(_component_el_button, {
911
+ size: "large",
912
+ onClick: onCancel
913
+ }, {
914
+ default: withCtx(() => [
915
+ createTextVNode(toDisplayString(unref(isRecording) ? "取消录音" : "取消"), 1)
916
+ ]),
917
+ _: 1
918
+ }),
919
+ createVNode(_component_el_button, {
920
+ size: "large",
921
+ type: "primary",
922
+ disabled: !unref(isRecording),
923
+ onClick: onStopAndSend
924
+ }, {
925
+ default: withCtx(() => [..._cache[3] || (_cache[3] = [
926
+ createTextVNode(" 停止并发送 ", -1)
927
+ ])]),
928
+ _: 1
929
+ }, 8, ["disabled"])
930
+ ])
931
+ ]),
932
+ default: withCtx(() => [
933
+ createElementVNode("div", _hoisted_1$1, [
934
+ createElementVNode("div", {
935
+ class: normalizeClass(["voice-mic", { recording: unref(isRecording) }]),
936
+ onClick: toggleRecord
937
+ }, [..._cache[1] || (_cache[1] = [
938
+ createElementVNode("i", { class: "iconfont mdm-icon-set_audio" }, null, -1)
939
+ ])], 2),
940
+ createElementVNode("div", _hoisted_2$1, toDisplayString(statusText.value), 1),
941
+ unref(isRecording) ? (openBlock(), createElementBlock("div", _hoisted_3$1, [
942
+ createTextVNode(toDisplayString(unref(elapsed)) + "s ", 1),
943
+ unref(countdown) > 0 ? (openBlock(), createElementBlock("span", _hoisted_4$1, "(" + toDisplayString(unref(countdown)) + " 秒后自动发送)", 1)) : createCommentVNode("", true)
944
+ ])) : createCommentVNode("", true),
945
+ _cache[2] || (_cache[2] = createElementVNode("div", { class: "voice-tip" }, "最长 60 秒,录音格式为 WAV", -1))
946
+ ])
947
+ ]),
948
+ _: 1
949
+ }, 8, ["model-value", "class", "close-on-click-modal", "close-on-press-escape"]);
950
+ };
951
+ }
952
+ };
313
953
  const _hoisted_1 = { class: "self-editor" };
314
954
  const _hoisted_2 = { class: "dialog-title" };
315
955
  const _hoisted_3 = { class: "dialog-title-text" };
@@ -344,7 +984,7 @@ const _sfc_main = {
344
984
  default: () => ({})
345
985
  }
346
986
  },
347
- emits: ["send-message", "del-reply-msg", "input-at", "change"],
987
+ emits: ["send-message", "del-reply-msg", "input-at", "change", "send-sound"],
348
988
  setup(__props, { expose: __expose, emit: __emit }) {
349
989
  const props = __props;
350
990
  const theme = inject("chatTheme");
@@ -353,6 +993,10 @@ const _sfc_main = {
353
993
  return ((_a = unref(theme)) == null ? void 0 : _a.indexOf("dark")) > -1;
354
994
  });
355
995
  const emits = __emit;
996
+ const voiceVisible = ref(false);
997
+ const onVoiceComplete = (payload) => {
998
+ emits("send-sound", payload);
999
+ };
356
1000
  const chatMessage = useChatStore();
357
1001
  const baseUrl = computed(() => {
358
1002
  return chatMessage.getBaseUrl;
@@ -1146,8 +1790,8 @@ const _sfc_main = {
1146
1790
  } else if (((_e = fileInfo == null ? void 0 : fileInfo.type) == null ? void 0 : _e.indexOf("audio/")) > -1) {
1147
1791
  const duration = await getMediaDuration(fileInfo) || 0;
1148
1792
  messages.push({
1149
- // type: 'audio',
1150
- type: "file",
1793
+ // 音频文件按语音消息发送(气泡展示时长,而不是文件卡片)
1794
+ type: "audio",
1151
1795
  info: {
1152
1796
  uuid: fileInfo.uid + "",
1153
1797
  path,
@@ -1363,9 +2007,10 @@ const _sfc_main = {
1363
2007
  onPickEmoji: pickEmoji,
1364
2008
  onUploadSuccess,
1365
2009
  onOpenScreenshot: openScreenshot,
1366
- onOpenSetting: openSetting
2010
+ onOpenSetting: openSetting,
2011
+ onOpenVoice: _cache[1] || (_cache[1] = ($event) => voiceVisible.value = true)
1367
2012
  }),
1368
- _cache[13] || (_cache[13] = createElementVNode("span", { class: "toolbar-divider" }, null, -1)),
2013
+ _cache[15] || (_cache[15] = createElementVNode("span", { class: "toolbar-divider" }, null, -1)),
1369
2014
  createElementVNode("div", {
1370
2015
  class: "send-btn",
1371
2016
  onClick: sendMessage
@@ -1379,7 +2024,7 @@ const _sfc_main = {
1379
2024
  ]),
1380
2025
  _: 1
1381
2026
  }),
1382
- _cache[12] || (_cache[12] = createElementVNode("span", { class: "send-txt" }, "发送", -1))
2027
+ _cache[14] || (_cache[14] = createElementVNode("span", { class: "send-txt" }, "发送", -1))
1383
2028
  ])
1384
2029
  ], 2),
1385
2030
  createElementVNode("div", {
@@ -1394,13 +2039,13 @@ const _sfc_main = {
1394
2039
  createElementVNode("div", {
1395
2040
  class: "menu-item",
1396
2041
  onClick: handlePasteFromMenu
1397
- }, [..._cache[14] || (_cache[14] = [
2042
+ }, [..._cache[16] || (_cache[16] = [
1398
2043
  createElementVNode("span", { class: "menu-item-txt" }, "粘贴", -1)
1399
2044
  ])])
1400
2045
  ], 4),
1401
2046
  createVNode(_component_el_dialog, {
1402
2047
  modelValue: fileDialogVisible.value,
1403
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => fileDialogVisible.value = $event),
2048
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => fileDialogVisible.value = $event),
1404
2049
  "show-close": false,
1405
2050
  "close-on-click-modal": false,
1406
2051
  "close-on-press-escape": false,
@@ -1426,7 +2071,7 @@ const _sfc_main = {
1426
2071
  text: "",
1427
2072
  class: "btn btn-primary",
1428
2073
  loading: submitLoading.value,
1429
- onClick: _cache[1] || (_cache[1] = (...args) => unref(throttledSubmitFiles) && unref(throttledSubmitFiles)(...args))
2074
+ onClick: _cache[2] || (_cache[2] = (...args) => unref(throttledSubmitFiles) && unref(throttledSubmitFiles)(...args))
1430
2075
  }, "确定", 8, _hoisted_9)
1431
2076
  ])
1432
2077
  ]),
@@ -1437,7 +2082,7 @@ const _sfc_main = {
1437
2082
  class: "file-item",
1438
2083
  key: file.uid
1439
2084
  }, [
1440
- _cache[15] || (_cache[15] = createElementVNode("img", {
2085
+ _cache[17] || (_cache[17] = createElementVNode("img", {
1441
2086
  src: _imports_0,
1442
2087
  width: "38px",
1443
2088
  height: "44px",
@@ -1456,7 +2101,7 @@ const _sfc_main = {
1456
2101
  }, 8, ["modelValue", "class"]),
1457
2102
  createVNode(_component_el_dialog, {
1458
2103
  modelValue: settingDialogVisible.value,
1459
- "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => settingDialogVisible.value = $event),
2104
+ "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => settingDialogVisible.value = $event),
1460
2105
  "show-close": false,
1461
2106
  "close-on-click-modal": false,
1462
2107
  "close-on-press-escape": false,
@@ -1466,7 +2111,7 @@ const _sfc_main = {
1466
2111
  }, {
1467
2112
  header: withCtx(() => [
1468
2113
  createElementVNode("div", { class: "dialog-title" }, [
1469
- _cache[16] || (_cache[16] = createElementVNode("span", { class: "dialog-title-text" }, "字体设置", -1)),
2114
+ _cache[18] || (_cache[18] = createElementVNode("span", { class: "dialog-title-text" }, "字体设置", -1)),
1470
2115
  createElementVNode("i", {
1471
2116
  class: "close-icon iconfont mdm-icon-close",
1472
2117
  onClick: closeSettingDialog
@@ -1484,13 +2129,13 @@ const _sfc_main = {
1484
2129
  text: "",
1485
2130
  class: "btn btn-primary",
1486
2131
  loading: saveSettingLoading.value,
1487
- onClick: _cache[8] || (_cache[8] = (...args) => unref(throttledResetSetting) && unref(throttledResetSetting)(...args))
2132
+ onClick: _cache[9] || (_cache[9] = (...args) => unref(throttledResetSetting) && unref(throttledResetSetting)(...args))
1488
2133
  }, " 重置 ", 8, _hoisted_24)) : createCommentVNode("", true),
1489
2134
  createElementVNode("div", {
1490
2135
  text: "",
1491
2136
  class: "btn btn-primary",
1492
2137
  loading: saveSettingLoading.value,
1493
- onClick: _cache[9] || (_cache[9] = (...args) => unref(throttledSaveSetting) && unref(throttledSaveSetting)(...args))
2138
+ onClick: _cache[10] || (_cache[10] = (...args) => unref(throttledSaveSetting) && unref(throttledSaveSetting)(...args))
1494
2139
  }, "确定", 8, _hoisted_25)
1495
2140
  ])
1496
2141
  ]),
@@ -1498,11 +2143,11 @@ const _sfc_main = {
1498
2143
  createElementVNode("div", _hoisted_10, [
1499
2144
  createElementVNode("div", _hoisted_11, [
1500
2145
  createElementVNode("div", _hoisted_12, [
1501
- _cache[17] || (_cache[17] = createElementVNode("div", { class: "setting-item-label" }, "字体", -1)),
2146
+ _cache[19] || (_cache[19] = createElementVNode("div", { class: "setting-item-label" }, "字体", -1)),
1502
2147
  createElementVNode("div", _hoisted_13, [
1503
2148
  createVNode(_component_el_select, {
1504
2149
  modelValue: fontForm.value.f,
1505
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => fontForm.value.f = $event),
2150
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => fontForm.value.f = $event),
1506
2151
  class: "font-select"
1507
2152
  }, {
1508
2153
  default: withCtx(() => [
@@ -1519,11 +2164,11 @@ const _sfc_main = {
1519
2164
  ])
1520
2165
  ]),
1521
2166
  createElementVNode("div", _hoisted_14, [
1522
- _cache[18] || (_cache[18] = createElementVNode("div", { class: "setting-item-label" }, "字体大小", -1)),
2167
+ _cache[20] || (_cache[20] = createElementVNode("div", { class: "setting-item-label" }, "字体大小", -1)),
1523
2168
  createElementVNode("div", _hoisted_15, [
1524
2169
  createVNode(_component_el_select, {
1525
2170
  modelValue: fontForm.value.s,
1526
- "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => fontForm.value.s = $event),
2171
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => fontForm.value.s = $event),
1527
2172
  class: "font-select"
1528
2173
  }, {
1529
2174
  default: withCtx(() => [
@@ -1540,31 +2185,31 @@ const _sfc_main = {
1540
2185
  ])
1541
2186
  ]),
1542
2187
  createElementVNode("div", _hoisted_16, [
1543
- _cache[19] || (_cache[19] = createElementVNode("div", { class: "setting-item-label" }, "字体颜色", -1)),
2188
+ _cache[21] || (_cache[21] = createElementVNode("div", { class: "setting-item-label" }, "字体颜色", -1)),
1544
2189
  createElementVNode("div", _hoisted_17, [
1545
2190
  createVNode(_component_el_color_picker, {
1546
2191
  modelValue: fontForm.value.c,
1547
- "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => fontForm.value.c = $event),
2192
+ "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => fontForm.value.c = $event),
1548
2193
  class: "font-select"
1549
2194
  }, null, 8, ["modelValue"])
1550
2195
  ])
1551
2196
  ]),
1552
2197
  createElementVNode("div", _hoisted_18, [
1553
- _cache[20] || (_cache[20] = createElementVNode("div", { class: "setting-item-label" }, "字体背景色", -1)),
2198
+ _cache[22] || (_cache[22] = createElementVNode("div", { class: "setting-item-label" }, "字体背景色", -1)),
1554
2199
  createElementVNode("div", _hoisted_19, [
1555
2200
  createVNode(_component_el_color_picker, {
1556
2201
  modelValue: fontForm.value.bc,
1557
- "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => fontForm.value.bc = $event),
2202
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => fontForm.value.bc = $event),
1558
2203
  class: "font-select"
1559
2204
  }, null, 8, ["modelValue"])
1560
2205
  ])
1561
2206
  ]),
1562
2207
  createElementVNode("div", _hoisted_20, [
1563
- _cache[21] || (_cache[21] = createElementVNode("div", { class: "setting-item-label" }, "字形", -1)),
2208
+ _cache[23] || (_cache[23] = createElementVNode("div", { class: "setting-item-label" }, "字形", -1)),
1564
2209
  createElementVNode("div", _hoisted_21, [
1565
2210
  createVNode(_component_el_select, {
1566
2211
  modelValue: fontForm.value.y,
1567
- "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => fontForm.value.y = $event),
2212
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => fontForm.value.y = $event),
1568
2213
  class: "font-select"
1569
2214
  }, {
1570
2215
  default: withCtx(() => [
@@ -1597,7 +2242,12 @@ const _sfc_main = {
1597
2242
  ])
1598
2243
  ]),
1599
2244
  _: 1
1600
- }, 8, ["modelValue"])
2245
+ }, 8, ["modelValue"]),
2246
+ createVNode(_sfc_main$1, {
2247
+ modelValue: voiceVisible.value,
2248
+ "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => voiceVisible.value = $event),
2249
+ onComplete: onVoiceComplete
2250
+ }, null, 8, ["modelValue"])
1601
2251
  ]),
1602
2252
  (openBlock(), createBlock(Teleport, { to: "body" }, [
1603
2253
  previewImageSrc.value ? (openBlock(), createBlock(_component_el_image, {
@@ -1606,14 +2256,14 @@ const _sfc_main = {
1606
2256
  ref: imagePreviewRef,
1607
2257
  src: previewImageSrc.value,
1608
2258
  "preview-src-list": [previewImageSrc.value],
1609
- onClose: _cache[11] || (_cache[11] = ($event) => previewImageSrc.value = "")
2259
+ onClose: _cache[13] || (_cache[13] = ($event) => previewImageSrc.value = "")
1610
2260
  }, null, 8, ["src", "preview-src-list"])) : createCommentVNode("", true)
1611
2261
  ]))
1612
2262
  ], 64);
1613
2263
  };
1614
2264
  }
1615
2265
  };
1616
- const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-6ed68e0e"]]);
2266
+ const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-9f356207"]]);
1617
2267
  export {
1618
2268
  index as default
1619
2269
  };