wechat-emojis 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/API.md +228 -0
  2. package/REACT_USAGE.md +456 -0
  3. package/README.md +251 -0
  4. package/assets/animal//345/217/221/346/212/226.png +0 -0
  5. package/assets/animal//347/214/252/345/244/264.png +0 -0
  6. package/assets/animal//350/267/263/350/267/263.png +0 -0
  7. package/assets/animal//350/275/254/345/234/210.png +0 -0
  8. package/assets/blessing//345/272/206/347/245/235.png +0 -0
  9. package/assets/blessing//347/203/237/350/212/261.png +0 -0
  10. package/assets/blessing//347/210/206/347/253/271.png +0 -0
  11. package/assets/blessing//347/231/274.png +0 -0
  12. package/assets/blessing//347/244/274/347/211/251.png +0 -0
  13. package/assets/blessing//347/246/217.png +0 -0
  14. package/assets/blessing//347/272/242/345/214/205.png +0 -0
  15. package/assets/face/666.png +0 -0
  16. package/assets/face/Emm.png +0 -0
  17. package/assets/face//344/272/262/344/272/262.png +0 -0
  18. package/assets/face//345/201/267/347/254/221.png +0 -0
  19. package/assets/face//345/202/262/346/205/242.png +0 -0
  20. package/assets/face//345/206/215/350/247/201.png +0 -0
  21. package/assets/face//345/212/240/346/262/271.png +0 -0
  22. package/assets/face//345/217/221/345/221/206.png +0 -0
  23. package/assets/face//345/217/221/346/200/222.png +0 -0
  24. package/assets/face//345/217/257/346/200/234.png +0 -0
  25. package/assets/face//345/217/263/345/223/274/345/223/274.png +0 -0
  26. package/assets/face//345/217/271/346/260/224.png +0 -0
  27. package/assets/face//345/220/203/347/223/234.png +0 -0
  28. package/assets/face//345/220/220.png +0 -0
  29. package/assets/face//345/221/262/347/211/231.png +0 -0
  30. package/assets/face//345/222/222/351/252/202.png +0 -0
  31. package/assets/face//345/223/207.png +0 -0
  32. package/assets/face//345/230/230.png +0 -0
  33. package/assets/face//345/230/277/345/223/210.png +0 -0
  34. package/assets/face//345/233/247.png +0 -0
  35. package/assets/face//345/233/260.png +0 -0
  36. package/assets/face//345/235/217/347/254/221.png +0 -0
  37. package/assets/face//345/244/247/345/223/255.png +0 -0
  38. package/assets/face//345/244/251/345/225/212.png +0 -0
  39. package/assets/face//345/244/261/346/234/233.png +0 -0
  40. package/assets/face//345/245/270/347/254/221.png +0 -0
  41. package/assets/face//345/245/275/347/232/204.png +0 -0
  42. package/assets/face//345/247/224/345/261/210.png +0 -0
  43. package/assets/face//345/256/263/347/276/236.png +0 -0
  44. package/assets/face//345/260/264/345/260/254.png +0 -0
  45. package/assets/face//345/276/227/346/204/217.png +0 -0
  46. package/assets/face//345/276/256/347/254/221.png +0 -0
  47. package/assets/face//345/277/253/345/223/255/344/272/206.png +0 -0
  48. package/assets/face//346/201/220/346/203/247.png +0 -0
  49. package/assets/face//346/202/240/351/227/262.png +0 -0
  50. package/assets/face//346/203/212/346/201/220.png +0 -0
  51. package/assets/face//346/203/212/350/256/266.png +0 -0
  52. package/assets/face//346/204/211/345/277/253.png +0 -0
  53. package/assets/face//346/206/250/347/254/221.png +0 -0
  54. package/assets/face//346/211/223/350/204/270.png +0 -0
  55. package/assets/face//346/212/223/347/213/202.png +0 -0
  56. package/assets/face//346/212/240/351/274/273.png +0 -0
  57. package/assets/face//346/215/202/350/204/270.png +0 -0
  58. package/assets/face//346/222/207/345/230/264.png +0 -0
  59. package/assets/face//346/223/246/346/261/227.png +0 -0
  60. package/assets/face//346/225/262/346/211/223.png +0 -0
  61. package/assets/face//346/227/240/350/257/255.png +0 -0
  62. package/assets/face//346/227/272/346/237/264.png +0 -0
  63. package/assets/face//346/231/225.png +0 -0
  64. package/assets/face//346/234/272/346/231/272.png +0 -0
  65. package/assets/face//346/261/227.png +0 -0
  66. package/assets/face//346/265/201/346/263/252.png +0 -0
  67. package/assets/face//347/224/237/347/227/205.png +0 -0
  68. package/assets/face//347/226/221/351/227/256.png +0 -0
  69. package/assets/face//347/231/275/347/234/274.png +0 -0
  70. package/assets/face//347/232/261/347/234/211.png +0 -0
  71. package/assets/face//347/235/241.png +0 -0
  72. package/assets/face//347/240/264/346/266/225/344/270/272/347/254/221.png +0 -0
  73. package/assets/face//347/244/276/344/274/232.png +0 -0
  74. package/assets/face//347/254/221/350/204/270.png +0 -0
  75. package/assets/face//347/277/273/347/231/275/347/234/274.png +0 -0
  76. package/assets/face//350/200/266.png +0 -0
  77. package/assets/face//350/204/270/347/272/242.png +0 -0
  78. package/assets/face//350/211/262.png +0 -0
  79. package/assets/face//350/213/246/346/266/251.png +0 -0
  80. package/assets/face//350/241/260.png +0 -0
  81. package/assets/face//350/243/202/345/274/200.png +0 -0
  82. package/assets/face//350/256/251/346/210/221/347/234/213/347/234/213.png +0 -0
  83. package/assets/face//350/260/203/347/232/256.png +0 -0
  84. package/assets/face//351/204/231/350/247/206.png +0 -0
  85. package/assets/face//351/227/255/345/230/264.png +0 -0
  86. package/assets/face//351/230/264/351/231/251.png +0 -0
  87. package/assets/face//351/232/276/350/277/207.png +0 -0
  88. package/assets/face//351/252/267/351/253/205.png +0 -0
  89. package/assets/face//351/274/223/346/216/214.png +0 -0
  90. package/assets/gesture/OK.png +0 -0
  91. package/assets/gesture//345/213/276/345/274/225.png +0 -0
  92. package/assets/gesture//345/220/210/345/215/201.png +0 -0
  93. package/assets/gesture//345/274/261.png +0 -0
  94. package/assets/gesture//345/274/272.png +0 -0
  95. package/assets/gesture//345/276/227/346/204/217.png +0 -0
  96. package/assets/gesture//346/212/261/346/213/263.png +0 -0
  97. package/assets/gesture//346/213/245/346/212/261.png +0 -0
  98. package/assets/gesture//346/213/263/345/244/264.png +0 -0
  99. package/assets/gesture//346/217/241/346/211/213.png +0 -0
  100. package/assets/gesture//350/200/266.png +0 -0
  101. package/assets/gesture//350/203/234/345/210/251.png +0 -0
  102. package/assets/other//344/276/277/344/276/277.png +0 -0
  103. package/assets/other//345/207/213/350/260/242.png +0 -0
  104. package/assets/other//345/222/226/345/225/241.png +0 -0
  105. package/assets/other//345/225/244/351/205/222.png +0 -0
  106. package/assets/other//345/230/264/345/224/207.png +0 -0
  107. package/assets/other//345/244/252/351/230/263.png +0 -0
  108. package/assets/other//345/245/213/346/226/227.png +0 -0
  109. package/assets/other//345/277/203/347/242/216.png +0 -0
  110. package/assets/other//346/231/232/345/256/211.png +0 -0
  111. package/assets/other//347/202/270/345/274/271.png +0 -0
  112. package/assets/other//347/210/206/347/217/240.png +0 -0
  113. package/assets/other//347/210/206/347/253/271.png +0 -0
  114. package/assets/other//347/210/261/345/277/203.png +0 -0
  115. package/assets/other//350/217/234/345/210/200.png +0 -0
  116. package/assets/other//350/233/213/347/263/225.png +0 -0
  117. package/assets/other//351/262/234/350/212/261.png +0 -0
  118. package/package.json +49 -0
  119. package/wechatEmoji.js +314 -0
  120. package/wechatEmoji.ts +364 -0
package/wechatEmoji.ts ADDED
@@ -0,0 +1,364 @@
1
+ /**
2
+ * 微信表情包 TypeScript 模块
3
+ * 提供类型安全的表情访问和图片路径获取功能
4
+ */
5
+
6
+ /**
7
+ * 表情类别枚举
8
+ */
9
+ export enum EmojiCategory {
10
+ /** 人脸表情 */
11
+ FACE = 'face',
12
+ /** 手势表情 */
13
+ GESTURE = 'gesture',
14
+ /** 动物表情 */
15
+ ANIMAL = 'animal',
16
+ /** 祝福表情 */
17
+ BLESSING = 'blessing',
18
+ /** 其他表情 */
19
+ OTHER = 'other'
20
+ }
21
+
22
+ /**
23
+ * 表情信息接口
24
+ */
25
+ export interface EmojiInfo {
26
+ /** 表情名称 */
27
+ name: string;
28
+ /** 表情类别 */
29
+ category: EmojiCategory;
30
+ /** 图片文件路径 */
31
+ path: string;
32
+ /** 英文名称(可选) */
33
+ englishName?: string;
34
+ }
35
+
36
+ /**
37
+ * 表情名称类型
38
+ */
39
+ export type EmojiName =
40
+ // 人脸表情
41
+ | '微笑' | '撇嘴' | '色' | '发呆' | '得意' | '流泪' | '害羞' | '闭嘴' | '睡' | '大哭'
42
+ | '尴尬' | '发怒' | '调皮' | '呲牙' | '惊讶' | '难过' | '囧' | '抓狂' | '吐' | '偷笑'
43
+ | '愉快' | '白眼' | '傲慢' | '困' | '惊恐' | '憨笑' | '悠闲' | '咒骂' | '疑问' | '嘘'
44
+ | '晕' | '衰' | '骷髅' | '敲打' | '再见' | '擦汗' | '抠鼻' | '鼓掌' | '坏笑' | '右哼哼'
45
+ | '鄙视' | '委屈' | '快哭了' | '阴险' | '亲亲' | '可怜' | '笑脸' | '生病' | '脸红' | '破涕为笑'
46
+ | '恐惧' | '失望' | '无语' | '嘿哈' | '捂脸' | '机智' | '皱眉' | '耶' | '吃瓜'
47
+ | '加油' | '汗' | '天啊' | 'Emm' | '社会' | '旺柴' | '好的' | '打脸' | '哇' | '翻白眼'
48
+ | '666' | '让我看看' | '叹气' | '苦涩' | '裂开' | '奸笑'
49
+ // 手势表情
50
+ | '握手' | '胜利' | '抱拳' | '勾引' | '拳头' | 'OK' | '合十' | '强' | '拥抱' | '弱'
51
+ // 动物表情
52
+ | '猪头' | '跳跳' | '发抖' | '转圈'
53
+ // 祝福表情
54
+ | '庆祝' | '礼物' | '红包' | '發' | '福' | '烟花' | '爆竹'
55
+ // 其他表情
56
+ | '嘴唇' | '爱心' | '心碎' | '啤酒' | '咖啡' | '蛋糕' | '凋谢' | '菜刀' | '炸弹' | '便便' | '太阳'
57
+ | '晚安' | '鲜花';
58
+
59
+ /**
60
+ * 表情数据映射
61
+ * 将表情名称映射到完整的表情信息
62
+ */
63
+ const EMOJI_DATA: Record<EmojiName, EmojiInfo> = {
64
+ // 人脸表情
65
+ '微笑': { name: '微笑', category: EmojiCategory.FACE, path: 'assets/face/微笑.png' },
66
+ '撇嘴': { name: '撇嘴', category: EmojiCategory.FACE, path: 'assets/face/撇嘴.png' },
67
+ '色': { name: '色', category: EmojiCategory.FACE, path: 'assets/face/色.png' },
68
+ '发呆': { name: '发呆', category: EmojiCategory.FACE, path: 'assets/face/发呆.png' },
69
+ '得意': { name: '得意', category: EmojiCategory.FACE, path: 'assets/face/得意.png' },
70
+ '流泪': { name: '流泪', category: EmojiCategory.FACE, path: 'assets/face/流泪.png' },
71
+ '害羞': { name: '害羞', category: EmojiCategory.FACE, path: 'assets/face/害羞.png' },
72
+ '闭嘴': { name: '闭嘴', category: EmojiCategory.FACE, path: 'assets/face/闭嘴.png' },
73
+ '睡': { name: '睡', category: EmojiCategory.FACE, path: 'assets/face/睡.png' },
74
+ '大哭': { name: '大哭', category: EmojiCategory.FACE, path: 'assets/face/大哭.png' },
75
+ '尴尬': { name: '尴尬', category: EmojiCategory.FACE, path: 'assets/face/尴尬.png' },
76
+ '发怒': { name: '发怒', category: EmojiCategory.FACE, path: 'assets/face/发怒.png' },
77
+ '调皮': { name: '调皮', category: EmojiCategory.FACE, path: 'assets/face/调皮.png' },
78
+ '呲牙': { name: '呲牙', category: EmojiCategory.FACE, path: 'assets/face/呲牙.png' },
79
+ '惊讶': { name: '惊讶', category: EmojiCategory.FACE, path: 'assets/face/惊讶.png' },
80
+ '难过': { name: '难过', category: EmojiCategory.FACE, path: 'assets/face/难过.png' },
81
+ '囧': { name: '囧', category: EmojiCategory.FACE, path: 'assets/face/囧.png' },
82
+ '抓狂': { name: '抓狂', category: EmojiCategory.FACE, path: 'assets/face/抓狂.png' },
83
+ '吐': { name: '吐', category: EmojiCategory.FACE, path: 'assets/face/吐.png' },
84
+ '偷笑': { name: '偷笑', category: EmojiCategory.FACE, path: 'assets/face/偷笑.png' },
85
+ '愉快': { name: '愉快', category: EmojiCategory.FACE, path: 'assets/face/愉快.png' },
86
+ '白眼': { name: '白眼', category: EmojiCategory.FACE, path: 'assets/face/白眼.png' },
87
+ '傲慢': { name: '傲慢', category: EmojiCategory.FACE, path: 'assets/face/傲慢.png' },
88
+ '困': { name: '困', category: EmojiCategory.FACE, path: 'assets/face/困.png' },
89
+ '惊恐': { name: '惊恐', category: EmojiCategory.FACE, path: 'assets/face/惊恐.png' },
90
+ '憨笑': { name: '憨笑', category: EmojiCategory.FACE, path: 'assets/face/憨笑.png' },
91
+ '悠闲': { name: '悠闲', category: EmojiCategory.FACE, path: 'assets/face/悠闲.png' },
92
+ '咒骂': { name: '咒骂', category: EmojiCategory.FACE, path: 'assets/face/咒骂.png' },
93
+ '疑问': { name: '疑问', category: EmojiCategory.FACE, path: 'assets/face/疑问.png' },
94
+ '嘘': { name: '嘘', category: EmojiCategory.FACE, path: 'assets/face/嘘.png' },
95
+ '晕': { name: '晕', category: EmojiCategory.FACE, path: 'assets/face/晕.png' },
96
+ '衰': { name: '衰', category: EmojiCategory.FACE, path: 'assets/face/衰.png' },
97
+ '骷髅': { name: '骷髅', category: EmojiCategory.FACE, path: 'assets/face/骷髅.png' },
98
+ '敲打': { name: '敲打', category: EmojiCategory.FACE, path: 'assets/face/敲打.png' },
99
+ '再见': { name: '再见', category: EmojiCategory.FACE, path: 'assets/face/再见.png' },
100
+ '擦汗': { name: '擦汗', category: EmojiCategory.FACE, path: 'assets/face/擦汗.png' },
101
+ '抠鼻': { name: '抠鼻', category: EmojiCategory.FACE, path: 'assets/face/抠鼻.png' },
102
+ '鼓掌': { name: '鼓掌', category: EmojiCategory.FACE, path: 'assets/face/鼓掌.png' },
103
+ '坏笑': { name: '坏笑', category: EmojiCategory.FACE, path: 'assets/face/坏笑.png' },
104
+ '右哼哼': { name: '右哼哼', category: EmojiCategory.FACE, path: 'assets/face/右哼哼.png' },
105
+ '鄙视': { name: '鄙视', category: EmojiCategory.FACE, path: 'assets/face/鄙视.png' },
106
+ '委屈': { name: '委屈', category: EmojiCategory.FACE, path: 'assets/face/委屈.png' },
107
+ '快哭了': { name: '快哭了', category: EmojiCategory.FACE, path: 'assets/face/快哭了.png' },
108
+ '阴险': { name: '阴险', category: EmojiCategory.FACE, path: 'assets/face/阴险.png' },
109
+ '亲亲': { name: '亲亲', category: EmojiCategory.FACE, path: 'assets/face/亲亲.png' },
110
+ '可怜': { name: '可怜', category: EmojiCategory.FACE, path: 'assets/face/可怜.png' },
111
+ '笑脸': { name: '笑脸', category: EmojiCategory.FACE, path: 'assets/face/笑脸.png' },
112
+ '生病': { name: '生病', category: EmojiCategory.FACE, path: 'assets/face/生病.png' },
113
+ '脸红': { name: '脸红', category: EmojiCategory.FACE, path: 'assets/face/脸红.png' },
114
+ '破涕为笑': { name: '破涕为笑', category: EmojiCategory.FACE, path: 'assets/face/破涕为笑.png' },
115
+ '恐惧': { name: '恐惧', category: EmojiCategory.FACE, path: 'assets/face/恐惧.png' },
116
+ '失望': { name: '失望', category: EmojiCategory.FACE, path: 'assets/face/失望.png' },
117
+ '无语': { name: '无语', category: EmojiCategory.FACE, path: 'assets/face/无语.png' },
118
+ '嘿哈': { name: '嘿哈', category: EmojiCategory.FACE, path: 'assets/face/嘿哈.png' },
119
+ '捂脸': { name: '捂脸', category: EmojiCategory.FACE, path: 'assets/face/捂脸.png' },
120
+
121
+ '机智': { name: '机智', category: EmojiCategory.FACE, path: 'assets/face/机智.png' },
122
+ '皱眉': { name: '皱眉', category: EmojiCategory.FACE, path: 'assets/face/皱眉.png' },
123
+ '耶': { name: '耶', category: EmojiCategory.FACE, path: 'assets/face/耶.png' },
124
+ '吃瓜': { name: '吃瓜', category: EmojiCategory.FACE, path: 'assets/face/吃瓜.png' },
125
+ '加油': { name: '加油', category: EmojiCategory.FACE, path: 'assets/face/加油.png' },
126
+
127
+ '汗': { name: '汗', category: EmojiCategory.FACE, path: 'assets/face/汗.png' },
128
+ '天啊': { name: '天啊', category: EmojiCategory.FACE, path: 'assets/face/天啊.png' },
129
+ 'Emm': { name: 'Emm', category: EmojiCategory.FACE, path: 'assets/face/Emm.png' },
130
+ '社会': { name: '社会', category: EmojiCategory.FACE, path: 'assets/face/社会.png' },
131
+ '旺柴': { name: '旺柴', category: EmojiCategory.FACE, path: 'assets/face/旺柴.png' },
132
+ '好的': { name: '好的', category: EmojiCategory.FACE, path: 'assets/face/好的.png' },
133
+ '打脸': { name: '打脸', category: EmojiCategory.FACE, path: 'assets/face/打脸.png' },
134
+ '哇': { name: '哇', category: EmojiCategory.FACE, path: 'assets/face/哇.png' },
135
+ '翻白眼': { name: '翻白眼', category: EmojiCategory.FACE, path: 'assets/face/翻白眼.png' },
136
+ '666': { name: '666', category: EmojiCategory.FACE, path: 'assets/face/666.png' },
137
+ '让我看看': { name: '让我看看', category: EmojiCategory.FACE, path: 'assets/face/让我看看.png' },
138
+ '叹气': { name: '叹气', category: EmojiCategory.FACE, path: 'assets/face/叹气.png' },
139
+ '苦涩': { name: '苦涩', category: EmojiCategory.FACE, path: 'assets/face/苦涩.png' },
140
+ '裂开': { name: '裂开', category: EmojiCategory.FACE, path: 'assets/face/裂开.png' },
141
+ '奸笑': { name: '奸笑', category: EmojiCategory.FACE, path: 'assets/face/奸笑.png' },
142
+
143
+ // 手势表情
144
+ '握手': { name: '握手', category: EmojiCategory.GESTURE, path: 'assets/gesture/握手.png' },
145
+ '胜利': { name: '胜利', category: EmojiCategory.GESTURE, path: 'assets/gesture/胜利.png' },
146
+ '抱拳': { name: '抱拳', category: EmojiCategory.GESTURE, path: 'assets/gesture/抱拳.png' },
147
+ '勾引': { name: '勾引', category: EmojiCategory.GESTURE, path: 'assets/gesture/勾引.png' },
148
+ '拳头': { name: '拳头', category: EmojiCategory.GESTURE, path: 'assets/gesture/拳头.png' },
149
+ 'OK': { name: 'OK', category: EmojiCategory.GESTURE, path: 'assets/gesture/OK.png' },
150
+ '合十': { name: '合十', category: EmojiCategory.GESTURE, path: 'assets/gesture/合十.png' },
151
+ '强': { name: '强', category: EmojiCategory.GESTURE, path: 'assets/gesture/强.png' },
152
+ '拥抱': { name: '拥抱', category: EmojiCategory.GESTURE, path: 'assets/gesture/拥抱.png' },
153
+ '弱': { name: '弱', category: EmojiCategory.GESTURE, path: 'assets/gesture/弱.png' },
154
+
155
+
156
+ // 动物表情
157
+ '猪头': { name: '猪头', category: EmojiCategory.ANIMAL, path: 'assets/animal/猪头.png' },
158
+ '跳跳': { name: '跳跳', category: EmojiCategory.ANIMAL, path: 'assets/animal/跳跳.png' },
159
+ '发抖': { name: '发抖', category: EmojiCategory.ANIMAL, path: 'assets/animal/发抖.png' },
160
+ '转圈': { name: '转圈', category: EmojiCategory.ANIMAL, path: 'assets/animal/转圈.png' },
161
+
162
+ // 祝福表情
163
+ '庆祝': { name: '庆祝', category: EmojiCategory.BLESSING, path: 'assets/blessing/庆祝.png' },
164
+ '礼物': { name: '礼物', category: EmojiCategory.BLESSING, path: 'assets/blessing/礼物.png' },
165
+ '红包': { name: '红包', category: EmojiCategory.BLESSING, path: 'assets/blessing/红包.png' },
166
+ '發': { name: '發', category: EmojiCategory.BLESSING, path: 'assets/blessing/發.png' },
167
+ '福': { name: '福', category: EmojiCategory.BLESSING, path: 'assets/blessing/福.png' },
168
+ '烟花': { name: '烟花', category: EmojiCategory.BLESSING, path: 'assets/blessing/烟花.png' },
169
+ '爆竹': { name: '爆竹', category: EmojiCategory.BLESSING, path: 'assets/blessing/爆竹.png' },
170
+
171
+ // 其他表情
172
+ '嘴唇': { name: '嘴唇', category: EmojiCategory.OTHER, path: 'assets/other/嘴唇.png' },
173
+ '爱心': { name: '爱心', category: EmojiCategory.OTHER, path: 'assets/other/爱心.png' },
174
+ '心碎': { name: '心碎', category: EmojiCategory.OTHER, path: 'assets/other/心碎.png' },
175
+ '啤酒': { name: '啤酒', category: EmojiCategory.OTHER, path: 'assets/other/啤酒.png' },
176
+ '咖啡': { name: '咖啡', category: EmojiCategory.OTHER, path: 'assets/other/咖啡.png' },
177
+ '蛋糕': { name: '蛋糕', category: EmojiCategory.OTHER, path: 'assets/other/蛋糕.png' },
178
+ '凋谢': { name: '凋谢', category: EmojiCategory.OTHER, path: 'assets/other/凋谢.png' },
179
+ '菜刀': { name: '菜刀', category: EmojiCategory.OTHER, path: 'assets/other/菜刀.png' },
180
+ '炸弹': { name: '炸弹', category: EmojiCategory.OTHER, path: 'assets/other/炸弹.png' },
181
+ '便便': { name: '便便', category: EmojiCategory.OTHER, path: 'assets/other/便便.png' },
182
+ '太阳': { name: '太阳', category: EmojiCategory.OTHER, path: 'assets/other/太阳.png' },
183
+ '晚安': { name: '晚安', category: EmojiCategory.OTHER, path: 'assets/other/晚安.png' },
184
+ '鲜花': { name: '鲜花', category: EmojiCategory.OTHER, path: 'assets/other/鲜花.png' }
185
+ };
186
+
187
+ /**
188
+ * 获取所有表情数据的辅助函数
189
+ */
190
+ function getAllEmojiData(): EmojiInfo[] {
191
+ const result: EmojiInfo[] = [];
192
+ for (const key in EMOJI_DATA) {
193
+ if (EMOJI_DATA.hasOwnProperty(key)) {
194
+ result.push(EMOJI_DATA[key as EmojiName]);
195
+ }
196
+ }
197
+ return result;
198
+ }
199
+
200
+ /**
201
+ * 按类别分组的表情数据
202
+ */
203
+ export const EMOJI_CATEGORIES = {
204
+ [EmojiCategory.FACE]: getAllEmojiData().filter(emoji => emoji.category === EmojiCategory.FACE),
205
+ [EmojiCategory.GESTURE]: getAllEmojiData().filter(emoji => emoji.category === EmojiCategory.GESTURE),
206
+ [EmojiCategory.ANIMAL]: getAllEmojiData().filter(emoji => emoji.category === EmojiCategory.ANIMAL),
207
+ [EmojiCategory.BLESSING]: getAllEmojiData().filter(emoji => emoji.category === EmojiCategory.BLESSING),
208
+ [EmojiCategory.OTHER]: getAllEmojiData().filter(emoji => emoji.category === EmojiCategory.OTHER)
209
+ } as const;
210
+
211
+ /**
212
+ * 获取表情图片路径
213
+ * @param name 表情名称
214
+ * @returns 图片路径,如果表情不存在则返回 null
215
+ *
216
+ * @example
217
+ * ```typescript
218
+ * const path = getEmojiPath('微笑'); // 'assets/face/微笑.png'
219
+ * const invalidPath = getEmojiPath('不存在'); // null
220
+ * ```
221
+ */
222
+ export function getEmojiPath(name: EmojiName): string | null {
223
+ const emoji = EMOJI_DATA[name];
224
+ return emoji ? emoji.path : null;
225
+ }
226
+
227
+ /**
228
+ * 获取表情信息
229
+ * @param name 表情名称
230
+ * @returns 表情信息对象,如果表情不存在则返回 null
231
+ *
232
+ * @example
233
+ * ```typescript
234
+ * const emoji = getEmojiInfo('微笑');
235
+ * // { name: '微笑', category: EmojiCategory.FACE, path: 'assets/face/微笑.png' }
236
+ * ```
237
+ */
238
+ export function getEmojiInfo(name: EmojiName): EmojiInfo | null {
239
+ return EMOJI_DATA[name] || null;
240
+ }
241
+
242
+ /**
243
+ * 根据类别获取表情列表
244
+ * @param category 表情类别
245
+ * @returns 该类别下的所有表情信息
246
+ *
247
+ * @example
248
+ * ```typescript
249
+ * const faceEmojis = getEmojisByCategory(EmojiCategory.FACE);
250
+ * ```
251
+ */
252
+ export function getEmojisByCategory(category: EmojiCategory): EmojiInfo[] {
253
+ return EMOJI_CATEGORIES[category];
254
+ }
255
+
256
+ /**
257
+ * 获取所有表情信息
258
+ * @returns 所有表情的信息数组
259
+ *
260
+ * @example
261
+ * ```typescript
262
+ * const allEmojis = getAllEmojis();
263
+ * console.log(`总共有 ${allEmojis.length} 个表情`);
264
+ * ```
265
+ */
266
+ export function getAllEmojis(): EmojiInfo[] {
267
+ return getAllEmojiData();
268
+ }
269
+
270
+ /**
271
+ * 搜索表情
272
+ * @param keyword 搜索关键词
273
+ * @returns 匹配的表情信息数组
274
+ *
275
+ * @example
276
+ * ```typescript
277
+ * const results = searchEmojis('笑');
278
+ * // 返回包含 '微笑', '偷笑', '坏笑' 等的表情
279
+ * ```
280
+ */
281
+ export function searchEmojis(keyword: string): EmojiInfo[] {
282
+ return getAllEmojiData().filter(emoji =>
283
+ emoji.name.indexOf(keyword) !== -1
284
+ );
285
+ }
286
+
287
+ /**
288
+ * 检查表情是否存在
289
+ * @param name 表情名称
290
+ * @returns 是否存在该表情
291
+ *
292
+ * @example
293
+ * ```typescript
294
+ * const exists = hasEmoji('微笑'); // true
295
+ * const notExists = hasEmoji('不存在的表情'); // false
296
+ * ```
297
+ */
298
+ export function hasEmoji(name: string): name is EmojiName {
299
+ return name in EMOJI_DATA;
300
+ }
301
+
302
+ /**
303
+ * 获取表情名称列表
304
+ * @param category 可选的类别筛选
305
+ * @returns 表情名称数组
306
+ *
307
+ * @example
308
+ * ```typescript
309
+ * const allNames = getEmojiNames();
310
+ * const faceNames = getEmojiNames(EmojiCategory.FACE);
311
+ * ```
312
+ */
313
+ export function getEmojiNames(category?: EmojiCategory): string[] {
314
+ if (category) {
315
+ return getEmojisByCategory(category).map(emoji => emoji.name);
316
+ }
317
+ const names: string[] = [];
318
+ for (const key in EMOJI_DATA) {
319
+ if (EMOJI_DATA.hasOwnProperty(key)) {
320
+ names.push(key);
321
+ }
322
+ }
323
+ return names;
324
+ }
325
+
326
+ /**
327
+ * 随机获取表情
328
+ * @param category 可选的类别筛选
329
+ * @returns 随机表情信息
330
+ *
331
+ * @example
332
+ * ```typescript
333
+ * const randomEmoji = getRandomEmoji();
334
+ * const randomFaceEmoji = getRandomEmoji(EmojiCategory.FACE);
335
+ * ```
336
+ */
337
+ export function getRandomEmoji(category?: EmojiCategory): EmojiInfo {
338
+ const emojis = category ? getEmojisByCategory(category) : getAllEmojis();
339
+ const randomIndex = Math.floor(Math.random() * emojis.length);
340
+ return emojis[randomIndex];
341
+ }
342
+
343
+ /**
344
+ * 默认导出对象,包含所有主要功能
345
+ */
346
+ const WeChatEmojis = {
347
+ // 枚举和类型
348
+ EmojiCategory,
349
+
350
+ // 数据
351
+ EMOJI_CATEGORIES,
352
+
353
+ // 工具函数
354
+ getEmojiPath,
355
+ getEmojiInfo,
356
+ getEmojisByCategory,
357
+ getAllEmojis,
358
+ searchEmojis,
359
+ hasEmoji,
360
+ getEmojiNames,
361
+ getRandomEmoji
362
+ } as const;
363
+
364
+ export default WeChatEmojis;