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.
- package/CHANGELOG.md +22 -0
- package/README.md +69 -0
- package/dist/{FilePreview-CqsQCI87.js → FilePreview-Cz0KMA_m.js} +2 -2
- package/dist/assets/extracted/bc26358d.woff +0 -0
- package/dist/assets/extracted/be398edc.ttf +0 -0
- package/dist/assets/extracted/de12ee92.woff2 +0 -0
- package/dist/core.es.js +2 -2
- package/dist/{index-C4_SSULD.js → index-C8koozDu.js} +697 -47
- package/dist/{index-B3MeQmIL.js → index-GiaKeCU7.js} +1550 -3296
- package/dist/{index-D8yaC3ve.js → index-P9_HILzo.js} +3700 -480
- package/dist/index.es.js +1 -1
- package/dist/style/index.css +1 -1
- package/dist-h5/{ChatHistoryH5-Deqlnw3u.js → ChatHistoryH5-CKDqKPl-.js} +2 -2
- package/dist-h5/{ChatPageH5-wyLGmPhW.js → ChatPageH5-FXZxtcQr.js} +975 -164
- package/dist-h5/{ChatSettingsH5-DD3dnI-H.js → ChatSettingsH5-PackrlPt.js} +169 -27
- package/dist-h5/{CreateGroupH5-3LIujy3_.js → CreateGroupH5-CO_ZH36_.js} +2 -2
- package/dist-h5/{GroupAnnouncementH5-5EpXQs5V.js → GroupAnnouncementH5-yUDR5kYW.js} +1 -1
- package/dist-h5/{GroupInfoDialogH5-fgcrbRyp.js → GroupInfoDialogH5-BRk-_mEn.js} +1 -1
- package/dist-h5/{GroupMembersH5-DX2lxrLB.js → GroupMembersH5-BVHUF2mG.js} +1 -1
- package/dist-h5/{GroupNoticeH5-DVXrcmP9.js → GroupNoticeH5-KA-L2h9r.js} +1 -1
- package/dist-h5/{MemberDetailH5-DAVUVr30.js → MemberDetailH5-BfAE0nx-.js} +2 -2
- package/dist-h5/{SearchPageH5-BiGhJF4U.js → SearchPageH5-B6B_U4hW.js} +2 -2
- package/dist-h5/{SelectMembersH5-DbrSnTg3.js → SelectMembersH5-CrPoBnYp.js} +2 -2
- package/dist-h5/assets/extracted/bc26358d.woff +0 -0
- package/dist-h5/assets/extracted/be398edc.ttf +0 -0
- package/dist-h5/assets/extracted/de12ee92.woff2 +0 -0
- package/dist-h5/{imChat-Cz45JFEl.js → imChat-pGlpr8Vj.js} +40 -7
- package/dist-h5/index.es.js +2 -2
- package/dist-h5/{indexH5-Cx3l8YDq.js → indexH5-CCvF1MV7.js} +3591 -329
- package/dist-h5/{indexH5-BZ77bUNH.js → indexH5-sKvS7t3k.js} +101 -69
- package/dist-h5/style/index-h5.css +1 -1
- package/package.json +72 -70
- 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,
|
|
2
|
-
import { _ as _export_sfc, u as uploadFiles, a as _imports_0 } from "./index-
|
|
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,
|
|
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$
|
|
31
|
-
const _hoisted_2$
|
|
32
|
-
const _hoisted_3$
|
|
33
|
-
const _hoisted_4$
|
|
34
|
-
const _hoisted_5$
|
|
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$
|
|
46
|
+
const _sfc_main$2 = {
|
|
42
47
|
__name: "Toolbar",
|
|
43
|
-
emits: [
|
|
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$
|
|
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$
|
|
231
|
+
}, null, 8, _hoisted_2$2)
|
|
217
232
|
]),
|
|
218
233
|
default: withCtx(() => [
|
|
219
|
-
createElementVNode("div", _hoisted_3$
|
|
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$
|
|
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$
|
|
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 === "
|
|
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,
|
|
301
|
-
key:
|
|
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,
|
|
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$
|
|
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
|
-
//
|
|
1150
|
-
type: "
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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-
|
|
2266
|
+
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-9f356207"]]);
|
|
1617
2267
|
export {
|
|
1618
2268
|
index as default
|
|
1619
2269
|
};
|