├── .eslintrc.json
├── .gitignore
├── .prettierrc
├── LICENSE
├── README.md
├── git-commit-template.txt
├── manifest.json
├── package-lock.json
├── package.json
├── src
├── assets
│ ├── css
│ │ ├── fonts.css
│ │ └── index.css
│ ├── emojis
│ │ ├── activity.js
│ │ ├── flags.js
│ │ ├── foodAndDrink.js
│ │ ├── index.js
│ │ ├── nature.js
│ │ ├── objects.js
│ │ ├── people.js
│ │ ├── places.js
│ │ ├── skintone.js
│ │ └── symbols.js
│ ├── fonts
│ │ ├── fa-brands-400.eot
│ │ ├── fa-brands-400.ttf
│ │ ├── fa-brands-400.woff
│ │ ├── fa-brands-400.woff2
│ │ ├── fa-regular-400.eot
│ │ ├── fa-regular-400.ttf
│ │ ├── fa-regular-400.woff
│ │ ├── fa-regular-400.woff2
│ │ ├── fa-solid-900.eot
│ │ ├── fa-solid-900.ttf
│ │ ├── fa-solid-900.woff
│ │ └── fa-solid-900.woff2
│ └── images
│ │ ├── icon.png
│ │ └── reset.png
├── index.html
├── js
│ ├── components
│ │ ├── index.js
│ │ ├── nav.js
│ │ ├── recent
│ │ │ ├── removeDuplicate.js
│ │ │ ├── renderRecent.js
│ │ │ └── updateRecent.js
│ │ └── skintoneButtons.js
│ ├── dist
│ │ └── twemoji.min.js
│ ├── events
│ │ ├── buttonEvent
│ │ │ ├── copy.js
│ │ │ ├── copySetting.js
│ │ │ ├── github.js
│ │ │ ├── goback.js
│ │ │ ├── index.js
│ │ │ ├── panel.js
│ │ │ ├── recentSetting.js
│ │ │ ├── reset.js
│ │ │ ├── setting.js
│ │ │ ├── sizeSetting.js
│ │ │ └── skintone.js
│ │ ├── emojiEvent
│ │ │ ├── autoCopyOff.js
│ │ │ ├── autoCopyOn.js
│ │ │ └── index.js
│ │ └── inputEvent
│ │ │ └── search.js
│ ├── pages
│ │ ├── main
│ │ │ ├── event
│ │ │ │ ├── copy.js
│ │ │ │ └── getEmoji.js
│ │ │ └── view
│ │ │ │ └── emojiContainers.js
│ │ └── settings
│ │ │ └── view
│ │ │ └── init.js
│ └── utils
│ │ ├── const.js
│ │ └── doc.js
├── main.js
└── worker.js
└── webpack.config.js
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "airbnb-base",
4 | "prettier",
5 | "plugin:import/errors",
6 | "plugin:import/warnings",
7 | "eslint:recommended"
8 | ],
9 | "parser": "babel-eslint",
10 | "plugins": ["prettier", "import"],
11 | "rules": {
12 | "indent": ["error", 2, { "SwitchCase": 1 }],
13 | "semi": ["error", "always"],
14 | "quotes": ["error", "single"],
15 | "no-console": ["error", { "allow": ["warn", "error"] }],
16 | "default-case": 0,
17 | "no-array-constructor": 0,
18 | "import/extensions": ["error", "always"],
19 | "keyword-spacing": ["error", { "before": true }],
20 | "eqeqeq": ["error", "always"],
21 | "comma-spacing": ["error", { "before": false, "after": true }],
22 | "block-spacing": ["error", "always"]
23 | },
24 | "env": {
25 | "browser": true,
26 | "es6": true
27 | },
28 | "globals": {
29 | "Atomics": "readonly",
30 | "SharedArrayBuffer": "readonly"
31 | },
32 | "parserOptions": {
33 | "ecmaVersion": 2018,
34 | "sourceType": "module"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.ai
2 | *.zip
3 |
4 | # JPEG
5 | *.jpg
6 | *.jpeg
7 | *.jpe
8 | *.jif
9 | *.jfif
10 | *.jfi
11 |
12 | # JPEG 2000
13 | *.jp2
14 | *.j2k
15 | *.jpf
16 | *.jpx
17 | *.jpm
18 | *.mj2
19 |
20 | # JPEG XR
21 | *.jxr
22 | *.hdp
23 | *.wdp
24 |
25 | # Graphics Interchange Format
26 | *.gif
27 |
28 | # RAW
29 | *.raw
30 |
31 | # Web P
32 | *.webp
33 |
34 | # Animated Portable Network Graphics
35 | *.apng
36 |
37 | # Multiple-image Network Graphics
38 | *.mng
39 |
40 | # Tagged Image File Format
41 | *.tiff
42 | *.tif
43 |
44 | # Scalable Vector Graphics
45 | *.svg
46 | *.svgz
47 |
48 | # Portable Document Format
49 | *.pdf
50 |
51 | # X BitMap
52 | *.xbm
53 |
54 | # BMP
55 | *.bmp
56 | *.dib
57 |
58 | # ICO
59 | *.ico
60 |
61 | # 3D Images
62 | *.3dm
63 | *.max
64 |
65 | #node_modules
66 | node_modules
67 |
68 | .vscode/
69 |
70 | .quokka
71 |
72 | build/
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "es5",
3 | "tabWidth": 2,
4 | "singleQuote": true,
5 | "bracketSpacing": true,
6 | "jsxBracketSameLine": false,
7 | "arrowParens": "always"
8 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 soyoungjeong
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 모지모지 이모지(MojiMoji Emoji)
2 |
3 |   
4 |
5 |
6 | 
7 |
8 | Extension application for whale browser.
9 | 클릭 한 번으로 간편하게 이모티콘을 복사+붙여넣기 할 수 있는 확장앱입니다.
10 |
11 | 웨일 스토어에서 다운로드📥
12 |
13 |
14 |
15 |
16 |
17 |
18 | ## 🆕Update
19 |
20 |
21 |
22 | ### v1.0.2 Update
23 |
24 | - 프로젝트 구조 변경
25 | - jquery, clipboard 라이브러리 제거
26 | - copy, recent 동작 개선
27 |
28 |
29 | ### v1.0.1 Update
30 |
31 | - 누락된 이모티콘 추가 (표정, 동물-어류, 도구)
32 | - 오타 수정
33 |
34 |
35 |
36 |
37 | ## 👾Getting Started
38 |
39 | ### Prerequisites
40 |
41 | Whale Browser [설치](https://whale.naver.com/ko/download)가 필요합니다.
42 |
43 | ### Installing
44 |
45 | ```
46 | npm install
47 | ```
48 |
49 |
50 |
51 |
52 | ## 🔌Running the tests
53 |
54 | 로컬에 프로젝트 저장 후, 웨일 브라우저 [개발자 모드](whale://extensions/)에서 프로젝트를 설치하면 테스트 가능합니다.
55 |
56 |
57 |
58 |
59 | ## 🔨Built With
60 |
61 | - [Whale developers](https://developers.whale.naver.com/)
62 | - [Font Awesome](https://fontawesome.com/)
63 | - [Twemoji](https://twemoji.twitter.com)
64 | - [Clipboard.js](https://github.com/zenorocha/clipboard.js)
65 |
66 |
67 |
68 |
69 | ## 📁File Structure
70 |
71 | ```
72 | /app
73 | index.html 👉 project html 구조
74 | /css
75 | index.css
76 | /js
77 | /utils
78 | doc.js 👉 document methods
79 | const.js 👉 const bundle
80 | /pages
81 | /main
82 | emojiContainers.js 👉 emoji 불러올 html 구조 생성
83 | copy.js 👉 copy button click 후 기능
84 | /settings
85 | init.js 👉 setting page 초기 값 설정
86 | /components
87 | index.js
88 | nav.js 👉 nav bar에 버튼 추가
89 | skintoneButtons.js 👉 피부색 버튼 추가
90 | /recent
91 | renderRecent.js 👉 recent 요소 render
92 | updateRecent.js 👉 update recent data
93 | removeDuplicate.js 👉 중복 요소 제거
94 | /events
95 | /buttonEvent(button click 관련 event listener 등록)
96 | /emojiEvent(emoji button click 관련 event listener 등록)
97 | /inputEvent(input 관련 event listener 등록)
98 | ```
99 |
100 | js 관련 폴더는 크게 utils / pages / components / events 로 나뉩니다.
101 | events 폴더 내의 파일은 단순 eventlistener 등록 관련 파일입니다.
102 |
103 |
104 |
105 |
106 | ## 👥Contributing
107 |
108 | 언제든 참여해주세요! 건의나 제안사항은 issue에 남겨주시면 답변드리겠습니다.
109 |
110 | Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
111 | Please make sure to update tests as appropriate.
112 |
113 | ## 📢Versioning
114 |
115 | We use [SemVer](http://semver.org/) for versioning.
116 |
117 | ## 😎Authors
118 |
119 | See the list of [contributors](https://github.com/soyoungjeong/EmojiByEternal/graphs/contributors) who participated in this project.
120 |
121 | ## 📄License
122 |
123 | This project is licensed under the MIT License - see the [LICENSE.md](https://github.com/soyoungjeong/EmojiByEternal/blob/master/LICENSE) file for details
124 |
--------------------------------------------------------------------------------
/git-commit-template.txt:
--------------------------------------------------------------------------------
1 | [Prefix] #issue_number 커밋메세지
2 |
3 | # 제목의 길이는 최대 40글자까지 한글로 간단 명료하게 작성
4 | # 제목을 작성하고 반드시 빈 줄 한 줄을 만들어야 함
5 | # 제목에 .(마침표) 금지
6 | # [Prefix] 리스트
7 | # Feat : 새로운 기능
8 | # Fix : 버그 수정
9 | # Refact : 리팩토링
10 | # Docs : 문서 (문서 추가, 수정, 삭제)
11 | # Add : 이미지 등 리소스, 셋팅 파일 추가, 수정
12 | # Chore : 기타 변경사항
13 | # 내용의 길이는 한 줄당 60글자 내외에서 줄 바꿈. 한글로 간단 명료하게 작성
14 | # 어떻게 보다는 무엇을, 왜 변경했는지를 작성할 것 (필수)
15 | # 연관된 이슈 첨부, 여러 개 추가 가능
16 |
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 2,
3 | "name": "모지모지 이모지",
4 | "version": "1.0.4",
5 |
6 | "description": "모지모지 이모지로 컴퓨터에서도 쉽게 이모티콘을 입력해보세요!",
7 |
8 | "browser_action": {
9 | "default_popup": "./src/index.html",
10 | "default_icon": {
11 | "16": "./src/assets/images/icon.png",
12 | "32": "./src/assets/images/icon.png"
13 | }
14 | },
15 | "permissions": ["tabs"]
16 | }
17 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "emojibyeternal",
3 | "version": "1.0.4",
4 | "description": "Emoji keyboard extension for Whale",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "build": "webpack --mode=production"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/soyoungjeong/EmojiByEternal.git"
13 | },
14 | "author": "",
15 | "license": "MIT",
16 | "bugs": {
17 | "url": "https://github.com/soyoungjeong/EmojiByEternal/issues"
18 | },
19 | "homepage": "https://github.com/soyoungjeong/EmojiByEternal#readme",
20 | "dependencies": {
21 | "twemoji": "^12.1.2"
22 | },
23 | "devDependencies": {
24 | "babel-eslint": "^10.1.0",
25 | "copy-webpack-plugin": "^9.0.1",
26 | "css-loader": "^6.2.0",
27 | "eslint": "^6.8.0",
28 | "eslint-config-airbnb-base": "^14.0.0",
29 | "eslint-config-prettier": "^6.11.0",
30 | "eslint-plugin-import": "^2.21.1",
31 | "eslint-plugin-prettier": "^3.1.3",
32 | "html-webpack-plugin": "^5.3.2",
33 | "prettier": "^2.0.5",
34 | "webpack": "^5.50.0",
35 | "webpack-cli": "^4.8.0"
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/assets/css/index.css:
--------------------------------------------------------------------------------
1 | body,
2 | p {
3 | margin: 0px;
4 | }
5 |
6 | .container {
7 | width: 400px;
8 | height: 500px;
9 | display: flex;
10 | flex-direction: column;
11 | }
12 |
13 | .container .header {
14 | background-color: #f1c40f;
15 | height: 45px;
16 | margin: 0px;
17 | display: grid;
18 | grid-template-columns: 300px 1fr 1fr;
19 | justify-content: center;
20 | align-items: center;
21 | color: white;
22 | }
23 |
24 | .grid-logo {
25 | font-size: 20px;
26 | font-weight: 600;
27 | padding-left: 20px;
28 | }
29 |
30 | .grid-panel,
31 | .grid-setting {
32 | padding-left: 10px;
33 | }
34 |
35 | .panel {
36 | cursor: pointer;
37 | }
38 |
39 | .container .emoji-container {
40 | height: 455px;
41 | overflow: hidden;
42 | }
43 |
44 | .emoji-nav {
45 | background-color: #bdc3c7;
46 | height: 45px;
47 | display: grid;
48 | grid-template-columns: repeat(9, 1fr);
49 | justify-items: center;
50 | align-items: center;
51 | }
52 |
53 | .emoji-nav a:link,
54 | .emoji-nav a:visited {
55 | color: #8b8e91;
56 | }
57 |
58 | .emoji-search {
59 | height: 45px;
60 | display: grid;
61 | grid-template-columns: 1fr 1fr;
62 | align-items: center;
63 | }
64 | .search-container {
65 | width: 25px;
66 | white-space: nowrap;
67 | position: relative;
68 | }
69 | .search-container input#searchInput {
70 | width: 210px;
71 | height: 30px;
72 | border: #8b8e91 solid 1px;
73 | font-size: 11pt;
74 | float: left;
75 | color: #8b8e91;
76 | margin-left: 8px;
77 | padding-left: 30px;
78 | -webkit-border-radius: 5px;
79 | -moz-border-radius: 5px;
80 | border-radius: 5px;
81 | }
82 | .search-container input#searchInput::-webkit-input-placeholder,
83 | .search-container input#searchInput:-moz-placeholder,
84 | .search-container input#searchInput::-moz-placeholder,
85 | .search-container input#searchInput:-ms-input-placeholder {
86 | color: #8b8e91;
87 | }
88 |
89 | .search-container .icon {
90 | position: absolute;
91 | top: -10px;
92 | left: 0px;
93 | margin-left: 17px;
94 | margin-top: 17px;
95 | z-index: 1;
96 | color: #8b8e91;
97 | }
98 |
99 | .color {
100 | width: 150px;
101 | margin-left: 40px;
102 | display: grid;
103 | grid-template-columns: repeat(5, 1fr);
104 | }
105 |
106 | .color span,
107 | .color span img {
108 | width: 25px;
109 | height: 25px;
110 | align-items: center;
111 | justify-content: center;
112 | }
113 |
114 | .color span img {
115 | cursor: pointer;
116 | }
117 |
118 | .emoji-list {
119 | height: 310px;
120 | overflow: scroll;
121 | display: flex;
122 | flex-direction: column;
123 | }
124 |
125 | .emoji-span-container {
126 | width: 100%;
127 | display: flex;
128 | flex-wrap: wrap;
129 | cursor: pointer;
130 | }
131 |
132 | .group-title {
133 | font-size: 16px;
134 | font-weight: 600;
135 | color: #bdc3c7;
136 | padding-left: 10px;
137 | margin-bottom: 15px;
138 | }
139 | .group-title i {
140 | margin-left: 5px;
141 | font-size: 14px;
142 | }
143 |
144 | .container .footer {
145 | background-color: #bdc3c7;
146 | height: 55px;
147 | display: grid;
148 | }
149 |
150 | #copy_group {
151 | width: 230px;
152 | height: 40px;
153 | padding-left: 10px;
154 | margin-left: 10px;
155 | margin-top: 5px;
156 | border: none;
157 | border-radius: 5px 0px 0px 5px;
158 | font-size: 16px;
159 | background-color: white;
160 | outline: none;
161 | }
162 |
163 | #reset_btn {
164 | position: absolute;
165 | margin-left: -8px;
166 | margin-top: 5px;
167 | background-color: white;
168 | width: 35px;
169 | height: 42px;
170 | border: none;
171 | border-radius: 0px 5px 5px 0px;
172 | outline: none;
173 | cursor: pointer;
174 | }
175 |
176 | #reset_img {
177 | width: 20px;
178 | height: 20px;
179 | margin-left: -5px;
180 | border-radius: 0px 5px 5px 0px;
181 | }
182 |
183 | #copy_btn {
184 | background-color: #f1c40f;
185 | color: white;
186 | display: inline;
187 | border: none;
188 | margin-left: 35px;
189 | border-radius: 5px;
190 | height: 40px;
191 | width: 90px;
192 | font-size: 15px;
193 | font-weight: 600;
194 | cursor: pointer;
195 | opacity: 1;
196 | }
197 |
198 | .setting {
199 | cursor: pointer;
200 | }
201 | .setting-container {
202 | display: none;
203 | width: 100%;
204 | padding: 20px;
205 | font-size: 15px;
206 | font-weight: 600;
207 | }
208 |
209 | .goback {
210 | cursor: pointer;
211 | }
212 |
213 | .settingBtns {
214 | margin-top: 30px;
215 | padding-left: 20px;
216 | font-size: 17px;
217 | }
218 | .settingBtns span {
219 | margin-left: -8px;
220 | cursor: default;
221 | }
222 |
223 | .btn-container {
224 | margin-top: 15px;
225 | margin-bottom: 40px;
226 | }
227 |
228 | .btn-container button {
229 | background-color: white;
230 | color: #bdc3c7;
231 | font-weight: 600;
232 | border: 1px solid #bdc3c7;
233 | border-radius: 2px;
234 | width: 80px;
235 | height: 40px;
236 | margin-left: -6px;
237 | cursor: pointer;
238 | }
239 |
240 | .btn-container .active {
241 | background-color: #f1c40f;
242 | color: black;
243 | font-weight: 600;
244 | border: 1px solid #f1c40f;
245 | }
246 |
247 | .settingBtn:focus {
248 | outline: 0;
249 | }
250 | .settingBtn:hover {
251 | background-color: #f1c40fab;
252 | color: black;
253 | border: 1px solid #f1c40f;
254 | -webkit-transition: width 0.5s;
255 | }
256 |
257 | .github hr {
258 | width: 360px;
259 | margin-bottom: 20px;
260 | margin-left: 0px;
261 | }
262 |
263 | .github i {
264 | cursor: pointer;
265 | margin-left: 30px;
266 | margin-right: 20px;
267 | vertical-align: middle;
268 | }
269 |
270 | .github span {
271 | font-size: 15px;
272 | font-weight: 500;
273 | }
274 |
275 | .big {
276 | height: 60px;
277 | padding: 10px;
278 | }
279 |
280 | .big img {
281 | height: 60px;
282 | }
283 |
284 | .normal {
285 | height: 30px;
286 | padding: 5px;
287 | }
288 |
289 | .normal img {
290 | height: 30px;
291 | }
292 |
293 | .small {
294 | height: 15px;
295 | padding: 5px;
296 | }
297 |
298 | .small img {
299 | height: 15px;
300 | }
301 |
--------------------------------------------------------------------------------
/src/assets/emojis/activity.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | codes: '1F383',
4 | char: '🎃',
5 | name: 'jack-o-lantern',
6 | category: 'activity',
7 | },
8 | {
9 | codes: '1F384',
10 | char: '🎄',
11 | name: 'Christmas tree',
12 | category: 'activity',
13 | },
14 | {
15 | codes: '1F386',
16 | char: '🎆',
17 | name: 'fireworks',
18 | category: 'activity',
19 | },
20 | {
21 | codes: '1F387',
22 | char: '🎇',
23 | name: 'sparkler',
24 | category: 'activity',
25 | },
26 | { codes: '2728', char: '✨', name: 'sparkles', category: 'activity' },
27 | { codes: '1F388', char: '🎈', name: 'balloon', category: 'activity' },
28 | {
29 | codes: '1F389',
30 | char: '🎉',
31 | name: 'party popper',
32 | category: 'activity',
33 | },
34 | {
35 | codes: '1F38A',
36 | char: '🎊',
37 | name: 'confetti ball',
38 | category: 'activity',
39 | },
40 | {
41 | codes: '1F38B',
42 | char: '🎋',
43 | name: 'tanabata tree',
44 | category: 'activity',
45 | },
46 | {
47 | codes: '1F38D',
48 | char: '🎍',
49 | name: 'pine decoration',
50 | category: 'activity',
51 | },
52 | {
53 | codes: '1F38E',
54 | char: '🎎',
55 | name: 'Japanese dolls',
56 | category: 'activity',
57 | },
58 | {
59 | codes: '1F38F',
60 | char: '🎏',
61 | name: 'carp streamer',
62 | category: 'activity',
63 | },
64 | { codes: '1F380', char: '🎀', name: 'ribbon', category: 'activity' },
65 | {
66 | codes: '1F381',
67 | char: '🎁',
68 | name: 'wrapped gift',
69 | category: 'activity',
70 | },
71 | { codes: '1F3C6', char: '🏆', name: 'trophy', category: 'activity' },
72 | {
73 | codes: '26BD',
74 | char: '⚽',
75 | name: 'soccer ball',
76 | category: 'activity',
77 | },
78 | { codes: '26BE', char: '⚾', name: 'baseball', category: 'activity' },
79 | {
80 | codes: '1F3C0',
81 | char: '🏀',
82 | name: 'basketball',
83 | category: 'activity',
84 | },
85 | {
86 | codes: '1F3C8',
87 | char: '🏈',
88 | name: 'american football',
89 | category: 'activity',
90 | },
91 | {
92 | codes: '1F3C9',
93 | char: '🏉',
94 | name: 'rugby football',
95 | category: 'activity',
96 | },
97 | { codes: '1F3BE', char: '🎾', name: 'tennis', category: 'activity' },
98 | { codes: '1F3B3', char: '🎳', name: 'bowling', category: 'activity' },
99 | {
100 | codes: '26F3',
101 | char: '⛳',
102 | name: 'flag in hole',
103 | category: 'activity',
104 | },
105 | {
106 | codes: '1F3A3',
107 | char: '🎣',
108 | name: 'fishing pole',
109 | category: 'activity',
110 | },
111 | {
112 | codes: '1F3BD',
113 | char: '🎽',
114 | name: 'running shirt',
115 | category: 'activity',
116 | },
117 | { codes: '1F3BF', char: '🎿', name: 'skis', category: 'activity' },
118 |
119 | {
120 | codes: '1F3AF',
121 | char: '🎯',
122 | name: 'direct hit',
123 | category: 'activity',
124 | },
125 |
126 | {
127 | codes: '1F3B1',
128 | char: '🎱',
129 | name: 'pool 8 ball',
130 | category: 'activity',
131 | },
132 | {
133 | codes: '1F52E',
134 | char: '🔮',
135 | name: 'crystal ball',
136 | category: 'activity',
137 | },
138 | {
139 | codes: '1F3AE',
140 | char: '🎮',
141 | name: 'video game',
142 | category: 'activity',
143 | },
144 | {
145 | codes: '1F3B0',
146 | char: '🎰',
147 | name: 'slot machine',
148 | category: 'activity',
149 | },
150 | {
151 | codes: '1F3B2',
152 | char: '🎲',
153 | name: 'game die',
154 | category: 'activity',
155 | },
156 | {
157 | codes: '2666 FE0F',
158 | char: '♦️',
159 | name: 'diamond suit',
160 | category: 'activity',
161 | },
162 | {
163 | codes: '2663 FE0F',
164 | char: '♣️',
165 | name: 'club suit',
166 | category: 'activity',
167 | },
168 | {
169 | codes: '265F FE0F',
170 | char: '♟️',
171 | name: 'chess pawn',
172 | category: 'activity',
173 | },
174 | {
175 | codes: '1F5BC FE0F',
176 | char: '🖼️',
177 | name: 'framed picture',
178 | category: 'activity',
179 | },
180 | {
181 | codes: '1F9F5',
182 | char: '🧵',
183 | name: 'thread',
184 | category: 'activity',
185 | },
186 | {
187 | codes: '1F9F6',
188 | char: '🧶',
189 | name: 'yarn',
190 | category: 'activity',
191 | },
192 |
193 | {
194 | codes: '1F004',
195 | char: '🀄',
196 | name: 'mahjong red dragon',
197 | category: 'activity',
198 | },
199 | {
200 | codes: '1F3B4',
201 | char: '🎴',
202 | name: 'flower playing cards',
203 | category: 'activity',
204 | },
205 | {
206 | codes: '1F3AD',
207 | char: '🎭',
208 | name: 'performing arts',
209 | category: 'activity',
210 | },
211 | {
212 | codes: '1F3A8',
213 | char: '🎨',
214 | name: 'artist palette',
215 | category: 'activity',
216 | },
217 | ];
218 |
--------------------------------------------------------------------------------
/src/assets/emojis/flags.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | codes: '1F3C1',
4 | char: '🏁',
5 | name: 'chequered flag',
6 | category: 'flags',
7 | },
8 | {
9 | codes: '1F6A9',
10 | char: '🚩',
11 | name: 'triangular flag',
12 | category: 'flags',
13 | },
14 | {
15 | codes: '1F38C',
16 | char: '🎌',
17 | name: 'crossed flags',
18 | category: 'flags',
19 | },
20 | {
21 | codes: '1F1E6 1F1E8',
22 | char: '🇦🇨',
23 | name: 'flag: Ascension Island',
24 | category: 'flags',
25 | },
26 | {
27 | codes: '1F1E6 1F1E9',
28 | char: '🇦🇩',
29 | name: 'flag: Andorra',
30 | category: 'flags',
31 | },
32 | {
33 | codes: '1F1E6 1F1EA',
34 | char: '🇦🇪',
35 | name: 'flag: United Arab Emirates',
36 | category: 'flags',
37 | },
38 | {
39 | codes: '1F1E6 1F1EB',
40 | char: '🇦🇫',
41 | name: 'flag: Afghanistan',
42 | category: 'flags',
43 | },
44 | {
45 | codes: '1F1E6 1F1EC',
46 | char: '🇦🇬',
47 | name: 'flag: Antigua & Barbuda',
48 | category: 'flags',
49 | },
50 | {
51 | codes: '1F1E6 1F1EE',
52 | char: '🇦🇮',
53 | name: 'flag: Anguilla',
54 | category: 'flags',
55 | },
56 | {
57 | codes: '1F1E6 1F1F1',
58 | char: '🇦🇱',
59 | name: 'flag: Albania',
60 | category: 'flags',
61 | },
62 | {
63 | codes: '1F1E6 1F1F2',
64 | char: '🇦🇲',
65 | name: 'flag: Armenia',
66 | category: 'flags',
67 | },
68 | {
69 | codes: '1F1E6 1F1F4',
70 | char: '🇦🇴',
71 | name: 'flag: Angola',
72 | category: 'flags',
73 | },
74 | {
75 | codes: '1F1E6 1F1F6',
76 | char: '🇦🇶',
77 | name: 'flag: Antarctica',
78 | category: 'flags',
79 | },
80 | {
81 | codes: '1F1E6 1F1F7',
82 | char: '🇦🇷',
83 | name: 'flag: Argentina',
84 | category: 'flags',
85 | },
86 | {
87 | codes: '1F1E6 1F1F8',
88 | char: '🇦🇸',
89 | name: 'flag: American Samoa',
90 | category: 'flags',
91 | },
92 | {
93 | codes: '1F1E6 1F1F9',
94 | char: '🇦🇹',
95 | name: 'flag: Austria',
96 | category: 'flags',
97 | },
98 | {
99 | codes: '1F1E6 1F1FA',
100 | char: '🇦🇺',
101 | name: 'flag: Australia',
102 | category: 'flags',
103 | },
104 | {
105 | codes: '1F1E6 1F1FC',
106 | char: '🇦🇼',
107 | name: 'flag: Aruba',
108 | category: 'flags',
109 | },
110 | {
111 | codes: '1F1E6 1F1FD',
112 | char: '🇦🇽',
113 | name: 'flag: Åland Islands',
114 | category: 'flags',
115 | },
116 | {
117 | codes: '1F1E6 1F1FF',
118 | char: '🇦🇿',
119 | name: 'flag: Azerbaijan',
120 | category: 'flags',
121 | },
122 | {
123 | codes: '1F1E7 1F1E6',
124 | char: '🇧🇦',
125 | name: 'flag: Bosnia & Herzegovina',
126 | category: 'flags',
127 | },
128 | {
129 | codes: '1F1E7 1F1E7',
130 | char: '🇧🇧',
131 | name: 'flag: Barbados',
132 | category: 'flags',
133 | },
134 | {
135 | codes: '1F1E7 1F1E9',
136 | char: '🇧🇩',
137 | name: 'flag: Bangladesh',
138 | category: 'flags',
139 | },
140 | {
141 | codes: '1F1E7 1F1EA',
142 | char: '🇧🇪',
143 | name: 'flag: Belgium',
144 | category: 'flags',
145 | },
146 | {
147 | codes: '1F1E7 1F1EB',
148 | char: '🇧🇫',
149 | name: 'flag: Burkina Faso',
150 | category: 'flags',
151 | },
152 | {
153 | codes: '1F1E7 1F1EC',
154 | char: '🇧🇬',
155 | name: 'flag: Bulgaria',
156 | category: 'flags',
157 | },
158 | {
159 | codes: '1F1E7 1F1ED',
160 | char: '🇧🇭',
161 | name: 'flag: Bahrain',
162 | category: 'flags',
163 | },
164 | {
165 | codes: '1F1E7 1F1EE',
166 | char: '🇧🇮',
167 | name: 'flag: Burundi',
168 | category: 'flags',
169 | },
170 | {
171 | codes: '1F1E7 1F1EF',
172 | char: '🇧🇯',
173 | name: 'flag: Benin',
174 | category: 'flags',
175 | },
176 | {
177 | codes: '1F1E7 1F1F1',
178 | char: '🇧🇱',
179 | name: 'flag: St. Barthélemy',
180 | category: 'flags',
181 | },
182 | {
183 | codes: '1F1E7 1F1F2',
184 | char: '🇧🇲',
185 | name: 'flag: Bermuda',
186 | category: 'flags',
187 | },
188 | {
189 | codes: '1F1E7 1F1F3',
190 | char: '🇧🇳',
191 | name: 'flag: Brunei',
192 | category: 'flags',
193 | },
194 | {
195 | codes: '1F1E7 1F1F4',
196 | char: '🇧🇴',
197 | name: 'flag: Bolivia',
198 | category: 'flags',
199 | },
200 | {
201 | codes: '1F1E7 1F1F6',
202 | char: '🇧🇶',
203 | name: 'flag: Caribbean Netherlands',
204 | category: 'flags',
205 | },
206 | {
207 | codes: '1F1E7 1F1F7',
208 | char: '🇧🇷',
209 | name: 'flag: Brazil',
210 | category: 'flags',
211 | },
212 | {
213 | codes: '1F1E7 1F1F8',
214 | char: '🇧🇸',
215 | name: 'flag: Bahamas',
216 | category: 'flags',
217 | },
218 | {
219 | codes: '1F1E7 1F1F9',
220 | char: '🇧🇹',
221 | name: 'flag: Bhutan',
222 | category: 'flags',
223 | },
224 | {
225 | codes: '1F1E7 1F1FB',
226 | char: '🇧🇻',
227 | name: 'flag: Bouvet Island',
228 | category: 'flags',
229 | },
230 | {
231 | codes: '1F1E7 1F1FC',
232 | char: '🇧🇼',
233 | name: 'flag: Botswana',
234 | category: 'flags',
235 | },
236 | {
237 | codes: '1F1E7 1F1FE',
238 | char: '🇧🇾',
239 | name: 'flag: Belarus',
240 | category: 'flags',
241 | },
242 | {
243 | codes: '1F1E7 1F1FF',
244 | char: '🇧🇿',
245 | name: 'flag: Belize',
246 | category: 'flags',
247 | },
248 | {
249 | codes: '1F1E8 1F1E6',
250 | char: '🇨🇦',
251 | name: 'flag: Canada',
252 | category: 'flags',
253 | },
254 | {
255 | codes: '1F1E8 1F1E8',
256 | char: '🇨🇨',
257 | name: 'flag: Cocos (Keeling) Islands',
258 | category: 'flags',
259 | },
260 | {
261 | codes: '1F1E8 1F1E9',
262 | char: '🇨🇩',
263 | name: 'flag: Congo - Kinshasa',
264 | category: 'flags',
265 | },
266 | {
267 | codes: '1F1E8 1F1EB',
268 | char: '🇨🇫',
269 | name: 'flag: Central African Republic',
270 | category: 'flags',
271 | },
272 | {
273 | codes: '1F1E8 1F1EC',
274 | char: '🇨🇬',
275 | name: 'flag: Congo - Brazzaville',
276 | category: 'flags',
277 | },
278 | {
279 | codes: '1F1E8 1F1ED',
280 | char: '🇨🇭',
281 | name: 'flag: Switzerland',
282 | category: 'flags',
283 | },
284 | {
285 | codes: '1F1E8 1F1EE',
286 | char: '🇨🇮',
287 | name: 'flag: Côte d’Ivoire',
288 | category: 'flags',
289 | },
290 | {
291 | codes: '1F1E8 1F1F0',
292 | char: '🇨🇰',
293 | name: 'flag: Cook Islands',
294 | category: 'flags',
295 | },
296 | {
297 | codes: '1F1E8 1F1F1',
298 | char: '🇨🇱',
299 | name: 'flag: Chile',
300 | category: 'flags',
301 | },
302 | {
303 | codes: '1F1E8 1F1F2',
304 | char: '🇨🇲',
305 | name: 'flag: Cameroon',
306 | category: 'flags',
307 | },
308 | {
309 | codes: '1F1E8 1F1F3',
310 | char: '🇨🇳',
311 | name: 'flag: China',
312 | category: 'flags',
313 | },
314 | {
315 | codes: '1F1E8 1F1F4',
316 | char: '🇨🇴',
317 | name: 'flag: Colombia',
318 | category: 'flags',
319 | },
320 | {
321 | codes: '1F1E8 1F1F5',
322 | char: '🇨🇵',
323 | name: 'flag: Clipperton Island',
324 | category: 'flags',
325 | },
326 | {
327 | codes: '1F1E8 1F1F7',
328 | char: '🇨🇷',
329 | name: 'flag: Costa Rica',
330 | category: 'flags',
331 | },
332 | {
333 | codes: '1F1E8 1F1FA',
334 | char: '🇨🇺',
335 | name: 'flag: Cuba',
336 | category: 'flags',
337 | },
338 | {
339 | codes: '1F1E8 1F1FB',
340 | char: '🇨🇻',
341 | name: 'flag: Cape Verde',
342 | category: 'flags',
343 | },
344 | {
345 | codes: '1F1E8 1F1FC',
346 | char: '🇨🇼',
347 | name: 'flag: Curaçao',
348 | category: 'flags',
349 | },
350 | {
351 | codes: '1F1E8 1F1FD',
352 | char: '🇨🇽',
353 | name: 'flag: Christmas Island',
354 | category: 'flags',
355 | },
356 | {
357 | codes: '1F1E8 1F1FE',
358 | char: '🇨🇾',
359 | name: 'flag: Cyprus',
360 | category: 'flags',
361 | },
362 | {
363 | codes: '1F1E8 1F1FF',
364 | char: '🇨🇿',
365 | name: 'flag: Czechia',
366 | category: 'flags',
367 | },
368 | {
369 | codes: '1F1E9 1F1EA',
370 | char: '🇩🇪',
371 | name: 'flag: Germany',
372 | category: 'flags',
373 | },
374 | {
375 | codes: '1F1E9 1F1EC',
376 | char: '🇩🇬',
377 | name: 'flag: Diego Garcia',
378 | category: 'flags',
379 | },
380 | {
381 | codes: '1F1E9 1F1EF',
382 | char: '🇩🇯',
383 | name: 'flag: Djibouti',
384 | category: 'flags',
385 | },
386 | {
387 | codes: '1F1E9 1F1F0',
388 | char: '🇩🇰',
389 | name: 'flag: Denmark',
390 | category: 'flags',
391 | },
392 | {
393 | codes: '1F1E9 1F1F2',
394 | char: '🇩🇲',
395 | name: 'flag: Dominica',
396 | category: 'flags',
397 | },
398 | {
399 | codes: '1F1E9 1F1F4',
400 | char: '🇩🇴',
401 | name: 'flag: Dominican Republic',
402 | category: 'flags',
403 | },
404 | {
405 | codes: '1F1E9 1F1FF',
406 | char: '🇩🇿',
407 | name: 'flag: Algeria',
408 | category: 'flags',
409 | },
410 | {
411 | codes: '1F1EA 1F1E6',
412 | char: '🇪🇦',
413 | name: 'flag: Ceuta & Melilla',
414 | category: 'flags',
415 | },
416 | {
417 | codes: '1F1EA 1F1E8',
418 | char: '🇪🇨',
419 | name: 'flag: Ecuador',
420 | category: 'flags',
421 | },
422 | {
423 | codes: '1F1EA 1F1EA',
424 | char: '🇪🇪',
425 | name: 'flag: Estonia',
426 | category: 'flags',
427 | },
428 | {
429 | codes: '1F1EA 1F1EC',
430 | char: '🇪🇬',
431 | name: 'flag: Egypt',
432 | category: 'flags',
433 | },
434 | {
435 | codes: '1F1EA 1F1ED',
436 | char: '🇪🇭',
437 | name: 'flag: Western Sahara',
438 | category: 'flags',
439 | },
440 | {
441 | codes: '1F1EA 1F1F7',
442 | char: '🇪🇷',
443 | name: 'flag: Eritrea',
444 | category: 'flags',
445 | },
446 | {
447 | codes: '1F1EA 1F1F8',
448 | char: '🇪🇸',
449 | name: 'flag: Spain',
450 | category: 'flags',
451 | },
452 | {
453 | codes: '1F1EA 1F1F9',
454 | char: '🇪🇹',
455 | name: 'flag: Ethiopia',
456 | category: 'flags',
457 | },
458 | {
459 | codes: '1F1EA 1F1FA',
460 | char: '🇪🇺',
461 | name: 'flag: European Union',
462 | category: 'flags',
463 | },
464 | {
465 | codes: '1F1EB 1F1EE',
466 | char: '🇫🇮',
467 | name: 'flag: Finland',
468 | category: 'flags',
469 | },
470 | {
471 | codes: '1F1EB 1F1EF',
472 | char: '🇫🇯',
473 | name: 'flag: Fiji',
474 | category: 'flags',
475 | },
476 | {
477 | codes: '1F1EB 1F1F0',
478 | char: '🇫🇰',
479 | name: 'flag: Falkland Islands',
480 | category: 'flags',
481 | },
482 | {
483 | codes: '1F1EB 1F1F2',
484 | char: '🇫🇲',
485 | name: 'flag: Micronesia',
486 | category: 'flags',
487 | },
488 | {
489 | codes: '1F1EB 1F1F4',
490 | char: '🇫🇴',
491 | name: 'flag: Faroe Islands',
492 | category: 'flags',
493 | },
494 | {
495 | codes: '1F1EB 1F1F7',
496 | char: '🇫🇷',
497 | name: 'flag: France',
498 | category: 'flags',
499 | },
500 | {
501 | codes: '1F1EC 1F1E6',
502 | char: '🇬🇦',
503 | name: 'flag: Gabon',
504 | category: 'flags',
505 | },
506 | {
507 | codes: '1F1EC 1F1E7',
508 | char: '🇬🇧',
509 | name: 'flag: United Kingdom',
510 | category: 'flags',
511 | },
512 | {
513 | codes: '1F1EC 1F1E9',
514 | char: '🇬🇩',
515 | name: 'flag: Grenada',
516 | category: 'flags',
517 | },
518 | {
519 | codes: '1F1EC 1F1EA',
520 | char: '🇬🇪',
521 | name: 'flag: Georgia',
522 | category: 'flags',
523 | },
524 | {
525 | codes: '1F1EC 1F1EB',
526 | char: '🇬🇫',
527 | name: 'flag: French Guiana',
528 | category: 'flags',
529 | },
530 | {
531 | codes: '1F1EC 1F1EC',
532 | char: '🇬🇬',
533 | name: 'flag: Guernsey',
534 | category: 'flags',
535 | },
536 | {
537 | codes: '1F1EC 1F1ED',
538 | char: '🇬🇭',
539 | name: 'flag: Ghana',
540 | category: 'flags',
541 | },
542 | {
543 | codes: '1F1EC 1F1EE',
544 | char: '🇬🇮',
545 | name: 'flag: Gibraltar',
546 | category: 'flags',
547 | },
548 | {
549 | codes: '1F1EC 1F1F1',
550 | char: '🇬🇱',
551 | name: 'flag: Greenland',
552 | category: 'flags',
553 | },
554 | {
555 | codes: '1F1EC 1F1F2',
556 | char: '🇬🇲',
557 | name: 'flag: Gambia',
558 | category: 'flags',
559 | },
560 | {
561 | codes: '1F1EC 1F1F3',
562 | char: '🇬🇳',
563 | name: 'flag: Guinea',
564 | category: 'flags',
565 | },
566 | {
567 | codes: '1F1EC 1F1F5',
568 | char: '🇬🇵',
569 | name: 'flag: Guadeloupe',
570 | category: 'flags',
571 | },
572 | {
573 | codes: '1F1EC 1F1F6',
574 | char: '🇬🇶',
575 | name: 'flag: Equatorial Guinea',
576 | category: 'flags',
577 | },
578 | {
579 | codes: '1F1EC 1F1F7',
580 | char: '🇬🇷',
581 | name: 'flag: Greece',
582 | category: 'flags',
583 | },
584 | {
585 | codes: '1F1EC 1F1F8',
586 | char: '🇬🇸',
587 | name: 'flag: South Georgia & South Sandwich Islands',
588 | category: 'flags',
589 | },
590 | {
591 | codes: '1F1EC 1F1F9',
592 | char: '🇬🇹',
593 | name: 'flag: Guatemala',
594 | category: 'flags',
595 | },
596 | {
597 | codes: '1F1EC 1F1FA',
598 | char: '🇬🇺',
599 | name: 'flag: Guam',
600 | category: 'flags',
601 | },
602 | {
603 | codes: '1F1EC 1F1FC',
604 | char: '🇬🇼',
605 | name: 'flag: Guinea-Bissau',
606 | category: 'flags',
607 | },
608 | {
609 | codes: '1F1EC 1F1FE',
610 | char: '🇬🇾',
611 | name: 'flag: Guyana',
612 | category: 'flags',
613 | },
614 | {
615 | codes: '1F1ED 1F1F0',
616 | char: '🇭🇰',
617 | name: 'flag: Hong Kong SAR China',
618 | category: 'flags',
619 | },
620 | {
621 | codes: '1F1ED 1F1F2',
622 | char: '🇭🇲',
623 | name: 'flag: Heard & McDonald Islands',
624 | category: 'flags',
625 | },
626 | {
627 | codes: '1F1ED 1F1F3',
628 | char: '🇭🇳',
629 | name: 'flag: Honduras',
630 | category: 'flags',
631 | },
632 | {
633 | codes: '1F1ED 1F1F7',
634 | char: '🇭🇷',
635 | name: 'flag: Croatia',
636 | category: 'flags',
637 | },
638 | {
639 | codes: '1F1ED 1F1F9',
640 | char: '🇭🇹',
641 | name: 'flag: Haiti',
642 | category: 'flags',
643 | },
644 | {
645 | codes: '1F1ED 1F1FA',
646 | char: '🇭🇺',
647 | name: 'flag: Hungary',
648 | category: 'flags',
649 | },
650 | {
651 | codes: '1F1EE 1F1E8',
652 | char: '🇮🇨',
653 | name: 'flag: Canary Islands',
654 | category: 'flags',
655 | },
656 | {
657 | codes: '1F1EE 1F1E9',
658 | char: '🇮🇩',
659 | name: 'flag: Indonesia',
660 | category: 'flags',
661 | },
662 | {
663 | codes: '1F1EE 1F1EA',
664 | char: '🇮🇪',
665 | name: 'flag: Ireland',
666 | category: 'flags',
667 | },
668 | {
669 | codes: '1F1EE 1F1F1',
670 | char: '🇮🇱',
671 | name: 'flag: Israel',
672 | category: 'flags',
673 | },
674 | {
675 | codes: '1F1EE 1F1F2',
676 | char: '🇮🇲',
677 | name: 'flag: Isle of Man',
678 | category: 'flags',
679 | },
680 | {
681 | codes: '1F1EE 1F1F3',
682 | char: '🇮🇳',
683 | name: 'flag: India',
684 | category: 'flags',
685 | },
686 | {
687 | codes: '1F1EE 1F1F4',
688 | char: '🇮🇴',
689 | name: 'flag: British Indian Ocean Territory',
690 | category: 'flags',
691 | },
692 | {
693 | codes: '1F1EE 1F1F6',
694 | char: '🇮🇶',
695 | name: 'flag: Iraq',
696 | category: 'flags',
697 | },
698 | {
699 | codes: '1F1EE 1F1F7',
700 | char: '🇮🇷',
701 | name: 'flag: Iran',
702 | category: 'flags',
703 | },
704 | {
705 | codes: '1F1EE 1F1F8',
706 | char: '🇮🇸',
707 | name: 'flag: Iceland',
708 | category: 'flags',
709 | },
710 | {
711 | codes: '1F1EE 1F1F9',
712 | char: '🇮🇹',
713 | name: 'flag: Italy',
714 | category: 'flags',
715 | },
716 | {
717 | codes: '1F1EF 1F1EA',
718 | char: '🇯🇪',
719 | name: 'flag: Jersey',
720 | category: 'flags',
721 | },
722 | {
723 | codes: '1F1EF 1F1F2',
724 | char: '🇯🇲',
725 | name: 'flag: Jamaica',
726 | category: 'flags',
727 | },
728 | {
729 | codes: '1F1EF 1F1F4',
730 | char: '🇯🇴',
731 | name: 'flag: Jordan',
732 | category: 'flags',
733 | },
734 | {
735 | codes: '1F1EF 1F1F5',
736 | char: '🇯🇵',
737 | name: 'flag: Japan',
738 | category: 'flags',
739 | },
740 | {
741 | codes: '1F1F0 1F1EA',
742 | char: '🇰🇪',
743 | name: 'flag: Kenya',
744 | category: 'flags',
745 | },
746 | {
747 | codes: '1F1F0 1F1EC',
748 | char: '🇰🇬',
749 | name: 'flag: Kyrgyzstan',
750 | category: 'flags',
751 | },
752 | {
753 | codes: '1F1F0 1F1ED',
754 | char: '🇰🇭',
755 | name: 'flag: Cambodia',
756 | category: 'flags',
757 | },
758 | {
759 | codes: '1F1F0 1F1EE',
760 | char: '🇰🇮',
761 | name: 'flag: Kiribati',
762 | category: 'flags',
763 | },
764 | {
765 | codes: '1F1F0 1F1F2',
766 | char: '🇰🇲',
767 | name: 'flag: Comoros',
768 | category: 'flags',
769 | },
770 | {
771 | codes: '1F1F0 1F1F3',
772 | char: '🇰🇳',
773 | name: 'flag: St. Kitts & Nevis',
774 | category: 'flags',
775 | },
776 | {
777 | codes: '1F1F0 1F1F5',
778 | char: '🇰🇵',
779 | name: 'flag: North Korea',
780 | category: 'flags',
781 | },
782 | {
783 | codes: '1F1F0 1F1F7',
784 | char: '🇰🇷',
785 | name: 'flag: South Korea',
786 | category: 'flags',
787 | },
788 | {
789 | codes: '1F1F0 1F1FC',
790 | char: '🇰🇼',
791 | name: 'flag: Kuwait',
792 | category: 'flags',
793 | },
794 | {
795 | codes: '1F1F0 1F1FE',
796 | char: '🇰🇾',
797 | name: 'flag: Cayman Islands',
798 | category: 'flags',
799 | },
800 | {
801 | codes: '1F1F0 1F1FF',
802 | char: '🇰🇿',
803 | name: 'flag: Kazakhstan',
804 | category: 'flags',
805 | },
806 | {
807 | codes: '1F1F1 1F1E6',
808 | char: '🇱🇦',
809 | name: 'flag: Laos',
810 | category: 'flags',
811 | },
812 | {
813 | codes: '1F1F1 1F1E7',
814 | char: '🇱🇧',
815 | name: 'flag: Lebanon',
816 | category: 'flags',
817 | },
818 | {
819 | codes: '1F1F1 1F1E8',
820 | char: '🇱🇨',
821 | name: 'flag: St. Lucia',
822 | category: 'flags',
823 | },
824 | {
825 | codes: '1F1F1 1F1EE',
826 | char: '🇱🇮',
827 | name: 'flag: Liechtenstein',
828 | category: 'flags',
829 | },
830 | {
831 | codes: '1F1F1 1F1F0',
832 | char: '🇱🇰',
833 | name: 'flag: Sri Lanka',
834 | category: 'flags',
835 | },
836 | {
837 | codes: '1F1F1 1F1F7',
838 | char: '🇱🇷',
839 | name: 'flag: Liberia',
840 | category: 'flags',
841 | },
842 | {
843 | codes: '1F1F1 1F1F8',
844 | char: '🇱🇸',
845 | name: 'flag: Lesotho',
846 | category: 'flags',
847 | },
848 | {
849 | codes: '1F1F1 1F1F9',
850 | char: '🇱🇹',
851 | name: 'flag: Lithuania',
852 | category: 'flags',
853 | },
854 | {
855 | codes: '1F1F1 1F1FA',
856 | char: '🇱🇺',
857 | name: 'flag: Luxembourg',
858 | category: 'flags',
859 | },
860 | {
861 | codes: '1F1F1 1F1FB',
862 | char: '🇱🇻',
863 | name: 'flag: Latvia',
864 | category: 'flags',
865 | },
866 | {
867 | codes: '1F1F1 1F1FE',
868 | char: '🇱🇾',
869 | name: 'flag: Libya',
870 | category: 'flags',
871 | },
872 | {
873 | codes: '1F1F2 1F1E6',
874 | char: '🇲🇦',
875 | name: 'flag: Morocco',
876 | category: 'flags',
877 | },
878 | {
879 | codes: '1F1F2 1F1E8',
880 | char: '🇲🇨',
881 | name: 'flag: Monaco',
882 | category: 'flags',
883 | },
884 | {
885 | codes: '1F1F2 1F1E9',
886 | char: '🇲🇩',
887 | name: 'flag: Moldova',
888 | category: 'flags',
889 | },
890 | {
891 | codes: '1F1F2 1F1EA',
892 | char: '🇲🇪',
893 | name: 'flag: Montenegro',
894 | category: 'flags',
895 | },
896 | {
897 | codes: '1F1F2 1F1EB',
898 | char: '🇲🇫',
899 | name: 'flag: St. Martin',
900 | category: 'flags',
901 | },
902 | {
903 | codes: '1F1F2 1F1EC',
904 | char: '🇲🇬',
905 | name: 'flag: Madagascar',
906 | category: 'flags',
907 | },
908 | {
909 | codes: '1F1F2 1F1ED',
910 | char: '🇲🇭',
911 | name: 'flag: Marshall Islands',
912 | category: 'flags',
913 | },
914 | {
915 | codes: '1F1F2 1F1F0',
916 | char: '🇲🇰',
917 | name: 'flag: Macedonia',
918 | category: 'flags',
919 | },
920 | {
921 | codes: '1F1F2 1F1F1',
922 | char: '🇲🇱',
923 | name: 'flag: Mali',
924 | category: 'flags',
925 | },
926 | {
927 | codes: '1F1F2 1F1F2',
928 | char: '🇲🇲',
929 | name: 'flag: Myanmar (Burma)',
930 | category: 'flags',
931 | },
932 | {
933 | codes: '1F1F2 1F1F3',
934 | char: '🇲🇳',
935 | name: 'flag: Mongolia',
936 | category: 'flags',
937 | },
938 | {
939 | codes: '1F1F2 1F1F4',
940 | char: '🇲🇴',
941 | name: 'flag: Macao SAR China',
942 | category: 'flags',
943 | },
944 | {
945 | codes: '1F1F2 1F1F5',
946 | char: '🇲🇵',
947 | name: 'flag: Northern Mariana Islands',
948 | category: 'flags',
949 | },
950 | {
951 | codes: '1F1F2 1F1F6',
952 | char: '🇲🇶',
953 | name: 'flag: Martinique',
954 | category: 'flags',
955 | },
956 | {
957 | codes: '1F1F2 1F1F7',
958 | char: '🇲🇷',
959 | name: 'flag: Mauritania',
960 | category: 'flags',
961 | },
962 | {
963 | codes: '1F1F2 1F1F8',
964 | char: '🇲🇸',
965 | name: 'flag: Montserrat',
966 | category: 'flags',
967 | },
968 | {
969 | codes: '1F1F2 1F1F9',
970 | char: '🇲🇹',
971 | name: 'flag: Malta',
972 | category: 'flags',
973 | },
974 | {
975 | codes: '1F1F2 1F1FA',
976 | char: '🇲🇺',
977 | name: 'flag: Mauritius',
978 | category: 'flags',
979 | },
980 | {
981 | codes: '1F1F2 1F1FB',
982 | char: '🇲🇻',
983 | name: 'flag: Maldives',
984 | category: 'flags',
985 | },
986 | {
987 | codes: '1F1F2 1F1FC',
988 | char: '🇲🇼',
989 | name: 'flag: Malawi',
990 | category: 'flags',
991 | },
992 | {
993 | codes: '1F1F2 1F1FD',
994 | char: '🇲🇽',
995 | name: 'flag: Mexico',
996 | category: 'flags',
997 | },
998 | {
999 | codes: '1F1F2 1F1FE',
1000 | char: '🇲🇾',
1001 | name: 'flag: Malaysia',
1002 | category: 'flags',
1003 | },
1004 | {
1005 | codes: '1F1F2 1F1FF',
1006 | char: '🇲🇿',
1007 | name: 'flag: Mozambique',
1008 | category: 'flags',
1009 | },
1010 | {
1011 | codes: '1F1F3 1F1E6',
1012 | char: '🇳🇦',
1013 | name: 'flag: Namibia',
1014 | category: 'flags',
1015 | },
1016 | {
1017 | codes: '1F1F3 1F1E8',
1018 | char: '🇳🇨',
1019 | name: 'flag: New Caledonia',
1020 | category: 'flags',
1021 | },
1022 | {
1023 | codes: '1F1F3 1F1EA',
1024 | char: '🇳🇪',
1025 | name: 'flag: Niger',
1026 | category: 'flags',
1027 | },
1028 | {
1029 | codes: '1F1F3 1F1EB',
1030 | char: '🇳🇫',
1031 | name: 'flag: Norfolk Island',
1032 | category: 'flags',
1033 | },
1034 | {
1035 | codes: '1F1F3 1F1EC',
1036 | char: '🇳🇬',
1037 | name: 'flag: Nigeria',
1038 | category: 'flags',
1039 | },
1040 | {
1041 | codes: '1F1F3 1F1EE',
1042 | char: '🇳🇮',
1043 | name: 'flag: Nicaragua',
1044 | category: 'flags',
1045 | },
1046 | {
1047 | codes: '1F1F3 1F1F1',
1048 | char: '🇳🇱',
1049 | name: 'flag: Netherlands',
1050 | category: 'flags',
1051 | },
1052 | {
1053 | codes: '1F1F3 1F1F4',
1054 | char: '🇳🇴',
1055 | name: 'flag: Norway',
1056 | category: 'flags',
1057 | },
1058 | {
1059 | codes: '1F1F3 1F1F5',
1060 | char: '🇳🇵',
1061 | name: 'flag: Nepal',
1062 | category: 'flags',
1063 | },
1064 | {
1065 | codes: '1F1F3 1F1F7',
1066 | char: '🇳🇷',
1067 | name: 'flag: Nauru',
1068 | category: 'flags',
1069 | },
1070 | {
1071 | codes: '1F1F3 1F1FA',
1072 | char: '🇳🇺',
1073 | name: 'flag: Niue',
1074 | category: 'flags',
1075 | },
1076 | {
1077 | codes: '1F1F3 1F1FF',
1078 | char: '🇳🇿',
1079 | name: 'flag: New Zealand',
1080 | category: 'flags',
1081 | },
1082 | {
1083 | codes: '1F1F4 1F1F2',
1084 | char: '🇴🇲',
1085 | name: 'flag: Oman',
1086 | category: 'flags',
1087 | },
1088 | {
1089 | codes: '1F1F5 1F1E6',
1090 | char: '🇵🇦',
1091 | name: 'flag: Panama',
1092 | category: 'flags',
1093 | },
1094 | {
1095 | codes: '1F1F5 1F1EA',
1096 | char: '🇵🇪',
1097 | name: 'flag: Peru',
1098 | category: 'flags',
1099 | },
1100 | {
1101 | codes: '1F1F5 1F1EB',
1102 | char: '🇵🇫',
1103 | name: 'flag: French Polynesia',
1104 | category: 'flags',
1105 | },
1106 | {
1107 | codes: '1F1F5 1F1EC',
1108 | char: '🇵🇬',
1109 | name: 'flag: Papua New Guinea',
1110 | category: 'flags',
1111 | },
1112 | {
1113 | codes: '1F1F5 1F1ED',
1114 | char: '🇵🇭',
1115 | name: 'flag: Philippines',
1116 | category: 'flags',
1117 | },
1118 | {
1119 | codes: '1F1F5 1F1F0',
1120 | char: '🇵🇰',
1121 | name: 'flag: Pakistan',
1122 | category: 'flags',
1123 | },
1124 | {
1125 | codes: '1F1F5 1F1F1',
1126 | char: '🇵🇱',
1127 | name: 'flag: Poland',
1128 | category: 'flags',
1129 | },
1130 | {
1131 | codes: '1F1F5 1F1F2',
1132 | char: '🇵🇲',
1133 | name: 'flag: St. Pierre & Miquelon',
1134 | category: 'flags',
1135 | },
1136 | {
1137 | codes: '1F1F5 1F1F3',
1138 | char: '🇵🇳',
1139 | name: 'flag: Pitcairn Islands',
1140 | category: 'flags',
1141 | },
1142 | {
1143 | codes: '1F1F5 1F1F7',
1144 | char: '🇵🇷',
1145 | name: 'flag: Puerto Rico',
1146 | category: 'flags',
1147 | },
1148 | {
1149 | codes: '1F1F5 1F1F8',
1150 | char: '🇵🇸',
1151 | name: 'flag: Palestinian Territories',
1152 | category: 'flags',
1153 | },
1154 | {
1155 | codes: '1F1F5 1F1F9',
1156 | char: '🇵🇹',
1157 | name: 'flag: Portugal',
1158 | category: 'flags',
1159 | },
1160 | {
1161 | codes: '1F1F5 1F1FC',
1162 | char: '🇵🇼',
1163 | name: 'flag: Palau',
1164 | category: 'flags',
1165 | },
1166 | {
1167 | codes: '1F1F5 1F1FE',
1168 | char: '🇵🇾',
1169 | name: 'flag: Paraguay',
1170 | category: 'flags',
1171 | },
1172 | {
1173 | codes: '1F1F6 1F1E6',
1174 | char: '🇶🇦',
1175 | name: 'flag: Qatar',
1176 | category: 'flags',
1177 | },
1178 | {
1179 | codes: '1F1F7 1F1EA',
1180 | char: '🇷🇪',
1181 | name: 'flag: Réunion',
1182 | category: 'flags',
1183 | },
1184 | {
1185 | codes: '1F1F7 1F1F4',
1186 | char: '🇷🇴',
1187 | name: 'flag: Romania',
1188 | category: 'flags',
1189 | },
1190 | {
1191 | codes: '1F1F7 1F1F8',
1192 | char: '🇷🇸',
1193 | name: 'flag: Serbia',
1194 | category: 'flags',
1195 | },
1196 | {
1197 | codes: '1F1F7 1F1FA',
1198 | char: '🇷🇺',
1199 | name: 'flag: Russia',
1200 | category: 'flags',
1201 | },
1202 | {
1203 | codes: '1F1F7 1F1FC',
1204 | char: '🇷🇼',
1205 | name: 'flag: Rwanda',
1206 | category: 'flags',
1207 | },
1208 | {
1209 | codes: '1F1F8 1F1E6',
1210 | char: '🇸🇦',
1211 | name: 'flag: Saudi Arabia',
1212 | category: 'flags',
1213 | },
1214 | {
1215 | codes: '1F1F8 1F1E7',
1216 | char: '🇸🇧',
1217 | name: 'flag: Solomon Islands',
1218 | category: 'flags',
1219 | },
1220 | {
1221 | codes: '1F1F8 1F1E8',
1222 | char: '🇸🇨',
1223 | name: 'flag: Seychelles',
1224 | category: 'flags',
1225 | },
1226 | {
1227 | codes: '1F1F8 1F1E9',
1228 | char: '🇸🇩',
1229 | name: 'flag: Sudan',
1230 | category: 'flags',
1231 | },
1232 | {
1233 | codes: '1F1F8 1F1EA',
1234 | char: '🇸🇪',
1235 | name: 'flag: Sweden',
1236 | category: 'flags',
1237 | },
1238 | {
1239 | codes: '1F1F8 1F1EC',
1240 | char: '🇸🇬',
1241 | name: 'flag: Singapore',
1242 | category: 'flags',
1243 | },
1244 | {
1245 | codes: '1F1F8 1F1ED',
1246 | char: '🇸🇭',
1247 | name: 'flag: St. Helena',
1248 | category: 'flags',
1249 | },
1250 | {
1251 | codes: '1F1F8 1F1EE',
1252 | char: '🇸🇮',
1253 | name: 'flag: Slovenia',
1254 | category: 'flags',
1255 | },
1256 | {
1257 | codes: '1F1F8 1F1EF',
1258 | char: '🇸🇯',
1259 | name: 'flag: Svalbard & Jan Mayen',
1260 | category: 'flags',
1261 | },
1262 | {
1263 | codes: '1F1F8 1F1F0',
1264 | char: '🇸🇰',
1265 | name: 'flag: Slovakia',
1266 | category: 'flags',
1267 | },
1268 | {
1269 | codes: '1F1F8 1F1F1',
1270 | char: '🇸🇱',
1271 | name: 'flag: Sierra Leone',
1272 | category: 'flags',
1273 | },
1274 | {
1275 | codes: '1F1F8 1F1F2',
1276 | char: '🇸🇲',
1277 | name: 'flag: San Marino',
1278 | category: 'flags',
1279 | },
1280 | {
1281 | codes: '1F1F8 1F1F3',
1282 | char: '🇸🇳',
1283 | name: 'flag: Senegal',
1284 | category: 'flags',
1285 | },
1286 | {
1287 | codes: '1F1F8 1F1F4',
1288 | char: '🇸🇴',
1289 | name: 'flag: Somalia',
1290 | category: 'flags',
1291 | },
1292 | {
1293 | codes: '1F1F8 1F1F7',
1294 | char: '🇸🇷',
1295 | name: 'flag: Suriname',
1296 | category: 'flags',
1297 | },
1298 | {
1299 | codes: '1F1F8 1F1F8',
1300 | char: '🇸🇸',
1301 | name: 'flag: South Sudan',
1302 | category: 'flags',
1303 | },
1304 | {
1305 | codes: '1F1F8 1F1F9',
1306 | char: '🇸🇹',
1307 | name: 'flag: São Tomé & Príncipe',
1308 | category: 'flags',
1309 | },
1310 | {
1311 | codes: '1F1F8 1F1FB',
1312 | char: '🇸🇻',
1313 | name: 'flag: El Salvador',
1314 | category: 'flags',
1315 | },
1316 | {
1317 | codes: '1F1F8 1F1FD',
1318 | char: '🇸🇽',
1319 | name: 'flag: Sint Maarten',
1320 | category: 'flags',
1321 | },
1322 | {
1323 | codes: '1F1F8 1F1FE',
1324 | char: '🇸🇾',
1325 | name: 'flag: Syria',
1326 | category: 'flags',
1327 | },
1328 | {
1329 | codes: '1F1F8 1F1FF',
1330 | char: '🇸🇿',
1331 | name: 'flag: Eswatini',
1332 | category: 'flags',
1333 | },
1334 | {
1335 | codes: '1F1F9 1F1E6',
1336 | char: '🇹🇦',
1337 | name: 'flag: Tristan da Cunha',
1338 | category: 'flags',
1339 | },
1340 | {
1341 | codes: '1F1F9 1F1E8',
1342 | char: '🇹🇨',
1343 | name: 'flag: Turks & Caicos Islands',
1344 | category: 'flags',
1345 | },
1346 | {
1347 | codes: '1F1F9 1F1E9',
1348 | char: '🇹🇩',
1349 | name: 'flag: Chad',
1350 | category: 'flags',
1351 | },
1352 | {
1353 | codes: '1F1F9 1F1EB',
1354 | char: '🇹🇫',
1355 | name: 'flag: French Southern Territories',
1356 | category: 'flags',
1357 | },
1358 | {
1359 | codes: '1F1F9 1F1EC',
1360 | char: '🇹🇬',
1361 | name: 'flag: Togo',
1362 | category: 'flags',
1363 | },
1364 | {
1365 | codes: '1F1F9 1F1ED',
1366 | char: '🇹🇭',
1367 | name: 'flag: Thailand',
1368 | category: 'flags',
1369 | },
1370 | {
1371 | codes: '1F1F9 1F1EF',
1372 | char: '🇹🇯',
1373 | name: 'flag: Tajikistan',
1374 | category: 'flags',
1375 | },
1376 | {
1377 | codes: '1F1F9 1F1F0',
1378 | char: '🇹🇰',
1379 | name: 'flag: Tokelau',
1380 | category: 'flags',
1381 | },
1382 | {
1383 | codes: '1F1F9 1F1F1',
1384 | char: '🇹🇱',
1385 | name: 'flag: Timor-Leste',
1386 | category: 'flags',
1387 | },
1388 | {
1389 | codes: '1F1F9 1F1F2',
1390 | char: '🇹🇲',
1391 | name: 'flag: Turkmenistan',
1392 | category: 'flags',
1393 | },
1394 | {
1395 | codes: '1F1F9 1F1F3',
1396 | char: '🇹🇳',
1397 | name: 'flag: Tunisia',
1398 | category: 'flags',
1399 | },
1400 | {
1401 | codes: '1F1F9 1F1F4',
1402 | char: '🇹🇴',
1403 | name: 'flag: Tonga',
1404 | category: 'flags',
1405 | },
1406 | {
1407 | codes: '1F1F9 1F1F7',
1408 | char: '🇹🇷',
1409 | name: 'flag: Turkey',
1410 | category: 'flags',
1411 | },
1412 | {
1413 | codes: '1F1F9 1F1F9',
1414 | char: '🇹🇹',
1415 | name: 'flag: Trinidad & Tobago',
1416 | category: 'flags',
1417 | },
1418 | {
1419 | codes: '1F1F9 1F1FB',
1420 | char: '🇹🇻',
1421 | name: 'flag: Tuvalu',
1422 | category: 'flags',
1423 | },
1424 | {
1425 | codes: '1F1F9 1F1FC',
1426 | char: '🇹🇼',
1427 | name: 'flag: Taiwan',
1428 | category: 'flags',
1429 | },
1430 | {
1431 | codes: '1F1F9 1F1FF',
1432 | char: '🇹🇿',
1433 | name: 'flag: Tanzania',
1434 | category: 'flags',
1435 | },
1436 | {
1437 | codes: '1F1FA 1F1E6',
1438 | char: '🇺🇦',
1439 | name: 'flag: Ukraine',
1440 | category: 'flags',
1441 | },
1442 | {
1443 | codes: '1F1FA 1F1EC',
1444 | char: '🇺🇬',
1445 | name: 'flag: Uganda',
1446 | category: 'flags',
1447 | },
1448 | {
1449 | codes: '1F1FA 1F1F2',
1450 | char: '🇺🇲',
1451 | name: 'flag: U.S. Outlying Islands',
1452 | category: 'flags',
1453 | },
1454 | {
1455 | codes: '1F1FA 1F1F3',
1456 | char: '🇺🇳',
1457 | name: 'flag: United Nations',
1458 | category: 'flags',
1459 | },
1460 | {
1461 | codes: '1F1FA 1F1F8',
1462 | char: '🇺🇸',
1463 | name: 'flag: United States',
1464 | category: 'flags',
1465 | },
1466 | {
1467 | codes: '1F1FA 1F1FE',
1468 | char: '🇺🇾',
1469 | name: 'flag: Uruguay',
1470 | category: 'flags',
1471 | },
1472 | {
1473 | codes: '1F1FA 1F1FF',
1474 | char: '🇺🇿',
1475 | name: 'flag: Uzbekistan',
1476 | category: 'flags',
1477 | },
1478 | {
1479 | codes: '1F1FB 1F1E6',
1480 | char: '🇻🇦',
1481 | name: 'flag: Vatican City',
1482 | category: 'flags',
1483 | },
1484 | {
1485 | codes: '1F1FB 1F1E8',
1486 | char: '🇻🇨',
1487 | name: 'flag: St. Vincent & Grenadines',
1488 | category: 'flags',
1489 | },
1490 | {
1491 | codes: '1F1FB 1F1EA',
1492 | char: '🇻🇪',
1493 | name: 'flag: Venezuela',
1494 | category: 'flags',
1495 | },
1496 | {
1497 | codes: '1F1FB 1F1EC',
1498 | char: '🇻🇬',
1499 | name: 'flag: British Virgin Islands',
1500 | category: 'flags',
1501 | },
1502 | {
1503 | codes: '1F1FB 1F1EE',
1504 | char: '🇻🇮',
1505 | name: 'flag: U.S. Virgin Islands',
1506 | category: 'flags',
1507 | },
1508 | {
1509 | codes: '1F1FB 1F1F3',
1510 | char: '🇻🇳',
1511 | name: 'flag: Vietnam',
1512 | category: 'flags',
1513 | },
1514 | {
1515 | codes: '1F1FB 1F1FA',
1516 | char: '🇻🇺',
1517 | name: 'flag: Vanuatu',
1518 | category: 'flags',
1519 | },
1520 | {
1521 | codes: '1F1FC 1F1EB',
1522 | char: '🇼🇫',
1523 | name: 'flag: Wallis & Futuna',
1524 | category: 'flags',
1525 | },
1526 | {
1527 | codes: '1F1FC 1F1F8',
1528 | char: '🇼🇸',
1529 | name: 'flag: Samoa',
1530 | category: 'flags',
1531 | },
1532 | {
1533 | codes: '1F1FD 1F1F0',
1534 | char: '🇽🇰',
1535 | name: 'flag: Kosovo',
1536 | category: 'flags',
1537 | },
1538 | {
1539 | codes: '1F1FE 1F1EA',
1540 | char: '🇾🇪',
1541 | name: 'flag: Yemen',
1542 | category: 'flags',
1543 | },
1544 | {
1545 | codes: '1F1FE 1F1F9',
1546 | char: '🇾🇹',
1547 | name: 'flag: Mayotte',
1548 | category: 'flags',
1549 | },
1550 | {
1551 | codes: '1F1FF 1F1E6',
1552 | char: '🇿🇦',
1553 | name: 'flag: South Africa',
1554 | category: 'flags',
1555 | },
1556 | {
1557 | codes: '1F1FF 1F1F2',
1558 | char: '🇿🇲',
1559 | name: 'flag: Zambia',
1560 | category: 'flags',
1561 | },
1562 | {
1563 | codes: '1F1FF 1F1FC',
1564 | char: '🇿🇼',
1565 | name: 'flag: Zimbabwe',
1566 | category: 'flags',
1567 | },
1568 | ];
1569 |
--------------------------------------------------------------------------------
/src/assets/emojis/foodAndDrink.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | codes: '1F347',
4 | char: '🍇',
5 | name: 'grapes',
6 | category: 'foodAndDrink',
7 | },
8 | {
9 | codes: '1F348',
10 | char: '🍈',
11 | name: 'melon',
12 | category: 'foodAndDrink',
13 | },
14 | {
15 | codes: '1F349',
16 | char: '🍉',
17 | name: 'watermelon',
18 | category: 'foodAndDrink',
19 | },
20 | {
21 | codes: '1F34A',
22 | char: '🍊',
23 | name: 'tangerine',
24 | category: 'foodAndDrink',
25 | },
26 | {
27 | codes: '1F34B',
28 | char: '🍋',
29 | name: 'lemon',
30 | category: 'foodAndDrink',
31 | },
32 | {
33 | codes: '1F34C',
34 | char: '🍌',
35 | name: 'banana',
36 | category: 'foodAndDrink',
37 | },
38 | {
39 | codes: '1F34D',
40 | char: '🍍',
41 | name: 'pineapple',
42 | category: 'foodAndDrink',
43 | },
44 | {
45 | codes: '1F34E',
46 | char: '🍎',
47 | name: 'red apple',
48 | category: 'foodAndDrink',
49 | },
50 | {
51 | codes: '1F34F',
52 | char: '🍏',
53 | name: 'green apple',
54 | category: 'foodAndDrink',
55 | },
56 | {
57 | codes: '1F350',
58 | char: '🍐',
59 | name: 'pear',
60 | category: 'foodAndDrink',
61 | },
62 | {
63 | codes: '1F351',
64 | char: '🍑',
65 | name: 'peach',
66 | category: 'foodAndDrink',
67 | },
68 | {
69 | codes: '1F352',
70 | char: '🍒',
71 | name: 'cherries',
72 | category: 'foodAndDrink',
73 | },
74 | {
75 | codes: '1F353',
76 | char: '🍓',
77 | name: 'strawberry',
78 | category: 'foodAndDrink',
79 | },
80 | {
81 | codes: '1F345',
82 | char: '🍅',
83 | name: 'tomato',
84 | category: 'foodAndDrink',
85 | },
86 | {
87 | codes: '1F346',
88 | char: '🍆',
89 | name: 'eggplant',
90 | category: 'foodAndDrink',
91 | },
92 | {
93 | codes: '1F33D',
94 | char: '🌽',
95 | name: 'ear of corn',
96 | category: 'foodAndDrink',
97 | },
98 | {
99 | codes: '1F965',
100 | char: '🥥',
101 | name: 'coconut',
102 | category: 'foodAndDrink',
103 | },
104 | {
105 | codes: '1F951',
106 | char: '🥑',
107 | name: 'avocado',
108 | category: 'foodAndDrink',
109 | },
110 | {
111 | codes: '1F954',
112 | char: '🥔',
113 | name: 'potato',
114 | category: 'foodAndDrink',
115 | },
116 | {
117 | codes: '1F955',
118 | char: '🥕',
119 | name: 'carrot',
120 | category: 'foodAndDrink',
121 | },
122 | {
123 | codes: '1F336 FE0F',
124 | char: '🌶️',
125 | name: 'hot pepper',
126 | category: 'foodAndDrink',
127 | },
128 | {
129 | codes: '1F952',
130 | char: '🥒',
131 | name: 'cucumber',
132 | category: 'foodAndDrink',
133 | },
134 | {
135 | codes: '1F96C',
136 | char: '🥬',
137 | name: 'leafy green',
138 | category: 'foodAndDrink',
139 | },
140 | {
141 | codes: '1F966',
142 | char: '🥦',
143 | name: 'broccoli',
144 | category: 'foodAndDrink',
145 | },
146 | {
147 | codes: '1F9C4',
148 | char: '🧄',
149 | name: 'garlic',
150 | category: 'foodAndDrink',
151 | },
152 | {
153 | codes: '1F9C5',
154 | char: '🧅',
155 | name: 'onion',
156 | category: 'foodAndDrink',
157 | },
158 | {
159 | codes: '1F344',
160 | char: '🍄',
161 | name: 'mushroom',
162 | category: 'foodAndDrink',
163 | },
164 | {
165 | codes: '1F330',
166 | char: '🌰',
167 | name: 'chestnut',
168 | category: 'foodAndDrink',
169 | },
170 | {
171 | codes: '1F35E',
172 | char: '🍞',
173 | name: 'bread',
174 | category: 'foodAndDrink',
175 | },
176 | {
177 | codes: '1F356',
178 | char: '🍖',
179 | name: 'meat on bone',
180 | category: 'foodAndDrink',
181 | },
182 | {
183 | codes: '1F357',
184 | char: '🍗',
185 | name: 'poultry leg',
186 | category: 'foodAndDrink',
187 | },
188 | {
189 | codes: '1F354',
190 | char: '🍔',
191 | name: 'hamburger',
192 | category: 'foodAndDrink',
193 | },
194 | {
195 | codes: '1F35F',
196 | char: '🍟',
197 | name: 'french fries',
198 | category: 'foodAndDrink',
199 | },
200 | {
201 | codes: '1F355',
202 | char: '🍕',
203 | name: 'pizza',
204 | category: 'foodAndDrink',
205 | },
206 | {
207 | codes: '1F373',
208 | char: '🍳',
209 | name: 'cooking',
210 | category: 'foodAndDrink',
211 | },
212 | {
213 | codes: '1F958',
214 | char: '🥘',
215 | name: 'shallow pan of food',
216 | category: 'foodAndDrink',
217 | },
218 | {
219 | codes: '1F372',
220 | char: '🍲',
221 | name: 'pot of food',
222 | category: 'foodAndDrink',
223 | },
224 | {
225 | codes: '1F371',
226 | char: '🍱',
227 | name: 'bento box',
228 | category: 'foodAndDrink',
229 | },
230 | {
231 | codes: '1F358',
232 | char: '🍘',
233 | name: 'rice cracker',
234 | category: 'foodAndDrink',
235 | },
236 | {
237 | codes: '1F359',
238 | char: '🍙',
239 | name: 'rice ball',
240 | category: 'foodAndDrink',
241 | },
242 | {
243 | codes: '1F35A',
244 | char: '🍚',
245 | name: 'cooked rice',
246 | category: 'foodAndDrink',
247 | },
248 | {
249 | codes: '1F35B',
250 | char: '🍛',
251 | name: 'curry rice',
252 | category: 'foodAndDrink',
253 | },
254 | {
255 | codes: '1F35C',
256 | char: '🍜',
257 | name: 'steaming bowl',
258 | category: 'foodAndDrink',
259 | },
260 | {
261 | codes: '1F35D',
262 | char: '🍝',
263 | name: 'spaghetti',
264 | category: 'foodAndDrink',
265 | },
266 | {
267 | codes: '1F360',
268 | char: '🍠',
269 | name: 'roasted sweet potato',
270 | category: 'foodAndDrink',
271 | },
272 | {
273 | codes: '1F362',
274 | char: '🍢',
275 | name: 'oden',
276 | category: 'foodAndDrink',
277 | },
278 | {
279 | codes: '1F363',
280 | char: '🍣',
281 | name: 'sushi',
282 | category: 'foodAndDrink',
283 | },
284 | {
285 | codes: '1F364',
286 | char: '🍤',
287 | name: 'fried shrimp',
288 | category: 'foodAndDrink',
289 | },
290 | {
291 | codes: '1F365',
292 | char: '🍥',
293 | name: 'fish cake with swirl',
294 | category: 'foodAndDrink',
295 | },
296 | {
297 | codes: '1F980',
298 | char: '🦀',
299 | name: 'crab',
300 | category: 'foodAndDrink',
301 | },
302 | {
303 | codes: '1F99E',
304 | char: '🦞',
305 | name: 'lobster',
306 | category: 'foodAndDrink',
307 | },
308 | {
309 | codes: '1F990',
310 | char: '🦐',
311 | name: 'shrimp',
312 | category: 'foodAndDrink',
313 | },
314 | {
315 | codes: '1F991',
316 | char: '🦑',
317 | name: 'squid',
318 | category: 'foodAndDrink',
319 | },
320 | {
321 | codes: '1F9AA',
322 | char: '🦪',
323 | name: 'oyster',
324 | category: 'foodAndDrink',
325 | },
326 | {
327 | codes: '1F361',
328 | char: '🍡',
329 | name: 'dango',
330 | category: 'foodAndDrink',
331 | },
332 | {
333 | codes: '1F366',
334 | char: '🍦',
335 | name: 'soft ice cream',
336 | category: 'foodAndDrink',
337 | },
338 | {
339 | codes: '1F367',
340 | char: '🍧',
341 | name: 'shaved ice',
342 | category: 'foodAndDrink',
343 | },
344 | {
345 | codes: '1F368',
346 | char: '🍨',
347 | name: 'ice cream',
348 | category: 'foodAndDrink',
349 | },
350 | {
351 | codes: '1F9C1',
352 | char: '🧁',
353 | name: 'cupcake',
354 | category: 'foodAndDrink',
355 | },
356 | { codes: '1F967', char: '🥧', name: 'pie', category: 'foodAndDrink' },
357 | {
358 | codes: '1F369',
359 | char: '🍩',
360 | name: 'doughnut',
361 | category: 'foodAndDrink',
362 | },
363 | {
364 | codes: '1F36A',
365 | char: '🍪',
366 | name: 'cookie',
367 | category: 'foodAndDrink',
368 | },
369 | {
370 | codes: '1F382',
371 | char: '🎂',
372 | name: 'birthday cake',
373 | category: 'foodAndDrink',
374 | },
375 | {
376 | codes: '1F370',
377 | char: '🍰',
378 | name: 'shortcake',
379 | category: 'foodAndDrink',
380 | },
381 | {
382 | codes: '1F36B',
383 | char: '🍫',
384 | name: 'chocolate bar',
385 | category: 'foodAndDrink',
386 | },
387 | {
388 | codes: '1F36C',
389 | char: '🍬',
390 | name: 'candy',
391 | category: 'foodAndDrink',
392 | },
393 | {
394 | codes: '1F36D',
395 | char: '🍭',
396 | name: 'lollipop',
397 | category: 'foodAndDrink',
398 | },
399 | {
400 | codes: '1F36E',
401 | char: '🍮',
402 | name: 'custard',
403 | category: 'foodAndDrink',
404 | },
405 | {
406 | codes: '1F36F',
407 | char: '🍯',
408 | name: 'honey pot',
409 | category: 'foodAndDrink',
410 | },
411 | {
412 | codes: '1F37C',
413 | char: '🍼',
414 | name: 'baby bottle',
415 | category: 'foodAndDrink',
416 | },
417 | {
418 | codes: '2615',
419 | char: '☕',
420 | name: 'hot beverage',
421 | category: 'foodAndDrink',
422 | },
423 | {
424 | codes: '1F375',
425 | char: '🍵',
426 | name: 'teacup without handle',
427 | category: 'foodAndDrink',
428 | },
429 | {
430 | codes: '1F376',
431 | char: '🍶',
432 | name: 'sake',
433 | category: 'foodAndDrink',
434 | },
435 | {
436 | codes: '1F377',
437 | char: '🍷',
438 | name: 'wine glass',
439 | category: 'foodAndDrink',
440 | },
441 | {
442 | codes: '1F378',
443 | char: '🍸',
444 | name: 'cocktail glass',
445 | category: 'foodAndDrink',
446 | },
447 | {
448 | codes: '1F379',
449 | char: '🍹',
450 | name: 'tropical drink',
451 | category: 'foodAndDrink',
452 | },
453 | {
454 | codes: '1F37A',
455 | char: '🍺',
456 | name: 'beer mug',
457 | category: 'foodAndDrink',
458 | },
459 | {
460 | codes: '1F37B',
461 | char: '🍻',
462 | name: 'clinking beer mugs',
463 | category: 'foodAndDrink',
464 | },
465 | {
466 | codes: '1F95B',
467 | char: '🥛',
468 | name: 'glass of milk',
469 | category: 'foodAndDrink',
470 | },
471 | {
472 | codes: '1F37E',
473 | char: '🍾',
474 | name: 'bottle with popping cork',
475 | category: 'foodAndDrink',
476 | },
477 | {
478 | codes: '1F942',
479 | char: '🥂',
480 | name: 'clinking glasses',
481 | category: 'foodAndDrink',
482 | },
483 | {
484 | codes: '1F943',
485 | char: '🥃',
486 | name: 'tumbler glass',
487 | category: 'foodAndDrink',
488 | },
489 | {
490 | codes: '1F964',
491 | char: '🥤',
492 | name: 'cup with straw',
493 | category: 'foodAndDrink',
494 | },
495 | {
496 | codes: '1F9C3',
497 | char: '🧃',
498 | name: 'beverage box',
499 | category: 'foodAndDrink',
500 | },
501 | {
502 | codes: '1F9C9',
503 | char: '🧉',
504 | name: 'mate',
505 | category: 'foodAndDrink',
506 | },
507 | {
508 | codes: '1F9CA',
509 | char: '🧊',
510 | name: 'ice cube',
511 | category: 'foodAndDrink',
512 | },
513 | {
514 | codes: '1F962',
515 | char: '🥢',
516 | name: 'chopsticks',
517 | category: 'foodAndDrink',
518 | },
519 | {
520 | codes: '1F37D FE0F',
521 | char: '🍽️',
522 | name: 'fork and knife with plate',
523 | category: 'foodAndDrink',
524 | },
525 | {
526 | codes: '1F944',
527 | char: '🥄',
528 | name: 'spoon',
529 | category: 'foodAndDrink',
530 | },
531 | {
532 | codes: '1F374',
533 | char: '🍴',
534 | name: 'fork and knife',
535 | category: 'foodAndDrink',
536 | },
537 | {
538 | codes: '1F52A',
539 | char: '🔪',
540 | name: 'kitchen knife',
541 | category: 'foodAndDrink',
542 | },
543 | ];
544 |
--------------------------------------------------------------------------------
/src/assets/emojis/index.js:
--------------------------------------------------------------------------------
1 | import skintone from './skintone.js';
2 | import people from './people.js';
3 | import nature from './nature.js';
4 | import foodAndDrink from './foodAndDrink.js';
5 | import activity from './activity.js';
6 | import places from './places.js';
7 | import objects from './objects.js';
8 | import symbols from './symbols.js';
9 | import flags from './flags.js';
10 |
11 | const emojis = [
12 | skintone,
13 | people,
14 | nature,
15 | foodAndDrink,
16 | activity,
17 | places,
18 | objects,
19 | symbols,
20 | flags,
21 | ];
22 |
23 | export default emojis;
24 |
--------------------------------------------------------------------------------
/src/assets/emojis/nature.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | codes: '1F435',
4 | char: '🐵',
5 | name: 'monkey face',
6 | category: 'nature',
7 | },
8 | { codes: '1F412', char: '🐒', name: 'monkey', category: 'nature' },
9 | { codes: '1F436', char: '🐶', name: 'dog face', category: 'nature' },
10 | { codes: '1F415', char: '🐕', name: 'dog', category: 'nature' },
11 | { codes: '1F429', char: '🐩', name: 'poodle', category: 'nature' },
12 | { codes: '1F43A', char: '🐺', name: 'wolf', category: 'nature' },
13 | { codes: '1F431', char: '🐱', name: 'cat face', category: 'nature' },
14 | { codes: '1F408', char: '🐈', name: 'cat', category: 'nature' },
15 | {
16 | codes: '1F42F',
17 | char: '🐯',
18 | name: 'tiger face',
19 | category: 'nature',
20 | },
21 | { codes: '1F405', char: '🐅', name: 'tiger', category: 'nature' },
22 | { codes: '1F406', char: '🐆', name: 'leopard', category: 'nature' },
23 | {
24 | codes: '1F434',
25 | char: '🐴',
26 | name: 'horse face',
27 | category: 'nature',
28 | },
29 | { codes: '1F40E', char: '🐎', name: 'horse', category: 'nature' },
30 | { codes: '1F42E', char: '🐮', name: 'cow face', category: 'nature' },
31 | { codes: '1F402', char: '🐂', name: 'ox', category: 'nature' },
32 | {
33 | codes: '1F403',
34 | char: '🐃',
35 | name: 'water buffalo',
36 | category: 'nature',
37 | },
38 | { codes: '1F404', char: '🐄', name: 'cow', category: 'nature' },
39 | { codes: '1F437', char: '🐷', name: 'pig face', category: 'nature' },
40 | { codes: '1F416', char: '🐖', name: 'pig', category: 'nature' },
41 | { codes: '1F417', char: '🐗', name: 'boar', category: 'nature' },
42 | { codes: '1F43D', char: '🐽', name: 'pig nose', category: 'nature' },
43 | { codes: '1F40F', char: '🐏', name: 'ram', category: 'nature' },
44 | { codes: '1F411', char: '🐑', name: 'ewe', category: 'nature' },
45 | { codes: '1F410', char: '🐐', name: 'goat', category: 'nature' },
46 | { codes: '1F42A', char: '🐪', name: 'camel', category: 'nature' },
47 | { codes: '1F418', char: '🐘', name: 'elephant', category: 'nature' },
48 | {
49 | codes: '1F42D',
50 | char: '🐭',
51 | name: 'mouse face',
52 | category: 'nature',
53 | },
54 | { codes: '1F401', char: '🐁', name: 'mouse', category: 'nature' },
55 | { codes: '1F439', char: '🐹', name: 'hamster', category: 'nature' },
56 | {
57 | codes: '1F430',
58 | char: '🐰',
59 | name: 'rabbit face',
60 | category: 'nature',
61 | },
62 | { codes: '1F407', char: '🐇', name: 'rabbit', category: 'nature' },
63 | { codes: '1F43B', char: '🐻', name: 'bear', category: 'nature' },
64 | { codes: '1F428', char: '🐨', name: 'koala', category: 'nature' },
65 | { codes: '1F43C', char: '🐼', name: 'panda', category: 'nature' },
66 | {
67 | codes: '1F43E',
68 | char: '🐾',
69 | name: 'paw prints',
70 | category: 'nature',
71 | },
72 | { codes: '1F414', char: '🐔', name: 'chicken', category: 'nature' },
73 | { codes: '1F413', char: '🐓', name: 'rooster', category: 'nature' },
74 | {
75 | codes: '1F423',
76 | char: '🐣',
77 | name: 'hatching chick',
78 | category: 'nature',
79 | },
80 | {
81 | codes: '1F424',
82 | char: '🐤',
83 | name: 'baby chick',
84 | category: 'nature',
85 | },
86 | {
87 | codes: '1F425',
88 | char: '🐥',
89 | name: 'front-facing baby chick',
90 | category: 'nature',
91 | },
92 | { codes: '1F426', char: '🐦', name: 'bird', category: 'nature' },
93 | { codes: '1F427', char: '🐧', name: 'penguin', category: 'nature' },
94 | { codes: '1F438', char: '🐸', name: 'frog', category: 'nature' },
95 | { codes: '1F40A', char: '🐊', name: 'crocodile', category: 'nature' },
96 | { codes: '1F422', char: '🐢', name: 'turtle', category: 'nature' },
97 | { codes: '1F40D', char: '🐍', name: 'snake', category: 'nature' },
98 | {
99 | codes: '1F432',
100 | char: '🐲',
101 | name: 'dragon face',
102 | category: 'nature',
103 | },
104 | { codes: '1F409', char: '🐉', name: 'dragon', category: 'nature' },
105 | {
106 | codes: '1F433',
107 | char: '🐳',
108 | name: 'spouting whale',
109 | category: 'nature',
110 | },
111 | { codes: '1F40B', char: '🐋', name: 'whale', category: 'nature' },
112 | { codes: '1F42C', char: '🐬', name: 'dolphin', category: 'nature' },
113 | { codes: '1F41F', char: '🐟', name: 'fish', category: 'nature' },
114 | {
115 | codes: '1F420',
116 | char: '🐠',
117 | name: 'tropical fish',
118 | category: 'nature',
119 | },
120 | { codes: '1F421', char: '🐡', name: 'blowfish', category: 'nature' },
121 | { codes: '1F988', char: '🦈', name: 'shark', category: 'nature' },
122 | { codes: '1F419', char: '🐙', name: 'octopus', category: 'nature' },
123 | { codes: '1F40C', char: '🐌', name: 'snail', category: 'nature' },
124 | { codes: '1F98B', char: '🦋', name: 'butterfly', category: 'nature' },
125 | { codes: '1F41B', char: '🐛', name: 'bug', category: 'nature' },
126 | { codes: '1F41C', char: '🐜', name: 'ant', category: 'nature' },
127 | { codes: '1F41D', char: '🐝', name: 'honeybee', category: 'nature' },
128 | {
129 | codes: '1F41E',
130 | char: '🐞',
131 | name: 'lady beetle',
132 | category: 'nature',
133 | },
134 |
135 | { codes: '1F490', char: '💐', name: 'bouquet', category: 'nature' },
136 | {
137 | codes: '1F338',
138 | char: '🌸',
139 | name: 'cherry blossom',
140 | category: 'nature',
141 | },
142 | {
143 | codes: '1F4AE',
144 | char: '💮',
145 | name: 'white flower',
146 | category: 'nature',
147 | },
148 | { codes: '1F339', char: '🌹', name: 'rose', category: 'nature' },
149 | { codes: '1F33A', char: '🌺', name: 'hibiscus', category: 'nature' },
150 | { codes: '1F33B', char: '🌻', name: 'sunflower', category: 'nature' },
151 | { codes: '1F33C', char: '🌼', name: 'blossom', category: 'nature' },
152 | { codes: '1F337', char: '🌷', name: 'tulip', category: 'nature' },
153 | { codes: '1F331', char: '🌱', name: 'seedling', category: 'nature' },
154 | {
155 | codes: '1F332',
156 | char: '🌲',
157 | name: 'evergreen tree',
158 | category: 'nature',
159 | },
160 | {
161 | codes: '1F333',
162 | char: '🌳',
163 | name: 'deciduous tree',
164 | category: 'nature',
165 | },
166 | { codes: '1F334', char: '🌴', name: 'palm tree', category: 'nature' },
167 | { codes: '1F335', char: '🌵', name: 'cactus', category: 'nature' },
168 | {
169 | codes: '1F33E',
170 | char: '🌾',
171 | name: 'sheaf of rice',
172 | category: 'nature',
173 | },
174 | { codes: '1F33F', char: '🌿', name: 'herb', category: 'nature' },
175 | {
176 | codes: '2618 FE0F',
177 | char: '☘️',
178 | name: 'shamrock',
179 | category: 'nature',
180 | },
181 | {
182 | codes: '1F340',
183 | char: '🍀',
184 | name: 'four leaf clover',
185 | category: 'nature',
186 | },
187 | {
188 | codes: '1F341',
189 | char: '🍁',
190 | name: 'maple leaf',
191 | category: 'nature',
192 | },
193 | {
194 | codes: '1F342',
195 | char: '🍂',
196 | name: 'fallen leaf',
197 | category: 'nature',
198 | },
199 | {
200 | codes: '1F343',
201 | char: '🍃',
202 | name: 'leaf fluttering in wind',
203 | category: 'nature',
204 | },
205 | { codes: '1F311', char: '🌑', name: 'new moon', category: 'nature' },
206 | {
207 | codes: '1F312',
208 | char: '🌒',
209 | name: 'waxing crescent moon',
210 | category: 'nature',
211 | },
212 | {
213 | codes: '1F313',
214 | char: '🌓',
215 | name: 'first quarter moon',
216 | category: 'nature',
217 | },
218 | {
219 | codes: '1F314',
220 | char: '🌔',
221 | name: 'waxing gibbous moon',
222 | category: 'nature',
223 | },
224 | { codes: '1F315', char: '🌕', name: 'full moon', category: 'nature' },
225 | {
226 | codes: '1F316',
227 | char: '🌖',
228 | name: 'waning gibbous moon',
229 | category: 'nature',
230 | },
231 | {
232 | codes: '1F317',
233 | char: '🌗',
234 | name: 'last quarter moon',
235 | category: 'nature',
236 | },
237 | {
238 | codes: '1F318',
239 | char: '🌘',
240 | name: 'waning crescent moon',
241 | category: 'nature',
242 | },
243 | {
244 | codes: '1F319',
245 | char: '🌙',
246 | name: 'crescent moon',
247 | category: 'nature',
248 | },
249 | {
250 | codes: '1F31A',
251 | char: '🌚',
252 | name: 'new moon face',
253 | category: 'nature',
254 | },
255 | {
256 | codes: '1F31B',
257 | char: '🌛',
258 | name: 'first quarter moon face',
259 | category: 'nature',
260 | },
261 | {
262 | codes: '1F31C',
263 | char: '🌜',
264 | name: 'last quarter moon face',
265 | category: 'nature',
266 | },
267 | {
268 | codes: '1F31D',
269 | char: '🌝',
270 | name: 'full moon face',
271 | category: 'nature',
272 | },
273 | {
274 | codes: '1F31E',
275 | char: '🌞',
276 | name: 'sun with face',
277 | category: 'nature',
278 | },
279 | { codes: '2600 FE0F', char: '☀️', name: 'sun', category: 'nature' },
280 | { codes: '2B50', char: '⭐', name: 'star', category: 'nature' },
281 | {
282 | codes: '1F31F',
283 | char: '🌟',
284 | name: 'glowing star',
285 | category: 'nature',
286 | },
287 | {
288 | codes: '1F320',
289 | char: '🌠',
290 | name: 'shooting star',
291 | category: 'nature',
292 | },
293 | { codes: '1F30C', char: '🌌', name: 'milky way', category: 'nature' },
294 | { codes: '2601 FE0F', char: '☁️', name: 'cloud', category: 'nature' },
295 | {
296 | codes: '26C5',
297 | char: '⛅',
298 | name: 'sun behind cloud',
299 | category: 'nature',
300 | },
301 | { codes: '1F300', char: '🌀', name: 'cyclone', category: 'nature' },
302 | { codes: '1F308', char: '🌈', name: 'rainbow', category: 'nature' },
303 | {
304 | codes: '1F302',
305 | char: '🌂',
306 | name: 'closed umbrella',
307 | category: 'nature',
308 | },
309 | {
310 | codes: '2614',
311 | char: '☔',
312 | name: 'umbrella with rain drops',
313 | category: 'nature',
314 | },
315 | {
316 | codes: '26A1',
317 | char: '⚡',
318 | name: 'high voltage',
319 | category: 'nature',
320 | },
321 | {
322 | codes: '2744 FE0F',
323 | char: '❄️',
324 | name: 'snowflake',
325 | category: 'nature',
326 | },
327 | {
328 | codes: '26C4',
329 | char: '⛄',
330 | name: 'snowman without snow',
331 | category: 'nature',
332 | },
333 | { codes: '1F525', char: '🔥', name: 'fire', category: 'nature' },
334 | { codes: '1F4A7', char: '💧', name: 'droplet', category: 'nature' },
335 | {
336 | codes: '1F30A',
337 | char: '🌊',
338 | name: 'water wave',
339 | category: 'nature',
340 | },
341 | ];
342 |
--------------------------------------------------------------------------------
/src/assets/emojis/objects.js:
--------------------------------------------------------------------------------
1 | export default [
2 | { codes: '1F453', char: '👓', name: 'glasses', category: 'objects' },
3 | { codes: '1F454', char: '👔', name: 'necktie', category: 'objects' },
4 | { codes: '1F455', char: '👕', name: 't-shirt', category: 'objects' },
5 | { codes: '1F456', char: '👖', name: 'jeans', category: 'objects' },
6 | { codes: '1F457', char: '👗', name: 'dress', category: 'objects' },
7 | { codes: '1F459', char: '👙', name: 'bikini', category: 'objects' },
8 | {
9 | codes: '1F45A',
10 | char: '👚',
11 | name: 'woman’s clothes',
12 | category: 'objects',
13 | },
14 | { codes: '1F45B', char: '👛', name: 'purse', category: 'objects' },
15 | { codes: '1F45C', char: '👜', name: 'handbag', category: 'objects' },
16 | {
17 | codes: '1F45D',
18 | char: '👝',
19 | name: 'clutch bag',
20 | category: 'objects',
21 | },
22 | { codes: '1F392', char: '🎒', name: 'backpack', category: 'objects' },
23 | {
24 | codes: '1F45E',
25 | char: '👞',
26 | name: 'man’s shoe',
27 | category: 'objects',
28 | },
29 | {
30 | codes: '1F45F',
31 | char: '👟',
32 | name: 'running shoe',
33 | category: 'objects',
34 | },
35 | {
36 | codes: '1F460',
37 | char: '👠',
38 | name: 'high-heeled shoe',
39 | category: 'objects',
40 | },
41 | {
42 | codes: '1F461',
43 | char: '👡',
44 | name: 'woman’s sandal',
45 | category: 'objects',
46 | },
47 | {
48 | codes: '1F462',
49 | char: '👢',
50 | name: 'woman’s boot',
51 | category: 'objects',
52 | },
53 | { codes: '1F451', char: '👑', name: 'crown', category: 'objects' },
54 | {
55 | codes: '1F452',
56 | char: '👒',
57 | name: 'woman’s hat',
58 | category: 'objects',
59 | },
60 | { codes: '1F3A9', char: '🎩', name: 'top hat', category: 'objects' },
61 | {
62 | codes: '1F393',
63 | char: '🎓',
64 | name: 'graduation cap',
65 | category: 'objects',
66 | },
67 | { codes: '1F484', char: '💄', name: 'lipstick', category: 'objects' },
68 | { codes: '1F48D', char: '💍', name: 'ring', category: 'objects' },
69 | {
70 | codes: '1F48E',
71 | char: '💎',
72 | name: 'gem stone',
73 | category: 'objects',
74 | },
75 | {
76 | codes: '1F507',
77 | char: '🔇',
78 | name: 'muted speaker',
79 | category: 'objects',
80 | },
81 | {
82 | codes: '1F508',
83 | char: '🔈',
84 | name: 'speaker low volume',
85 | category: 'objects',
86 | },
87 | {
88 | codes: '1F509',
89 | char: '🔉',
90 | name: 'speaker medium volume',
91 | category: 'objects',
92 | },
93 | {
94 | codes: '1F50A',
95 | char: '🔊',
96 | name: 'speaker high volume',
97 | category: 'objects',
98 | },
99 | {
100 | codes: '1F4E2',
101 | char: '📢',
102 | name: 'loudspeaker',
103 | category: 'objects',
104 | },
105 | {
106 | codes: '1F4E3',
107 | char: '📣',
108 | name: 'megaphone',
109 | category: 'objects',
110 | },
111 | {
112 | codes: '1F4EF',
113 | char: '📯',
114 | name: 'postal horn',
115 | category: 'objects',
116 | },
117 | { codes: '1F514', char: '🔔', name: 'bell', category: 'objects' },
118 | {
119 | codes: '1F515',
120 | char: '🔕',
121 | name: 'bell with slash',
122 | category: 'objects',
123 | },
124 | {
125 | codes: '1F3BC',
126 | char: '🎼',
127 | name: 'musical score',
128 | category: 'objects',
129 | },
130 | {
131 | codes: '1F3B5',
132 | char: '🎵',
133 | name: 'musical note',
134 | category: 'objects',
135 | },
136 | {
137 | codes: '1F3B6',
138 | char: '🎶',
139 | name: 'musical notes',
140 | category: 'objects',
141 | },
142 | {
143 | codes: '1F3A4',
144 | char: '🎤',
145 | name: 'microphone',
146 | category: 'objects',
147 | },
148 | {
149 | codes: '1F3A7',
150 | char: '🎧',
151 | name: 'headphone',
152 | category: 'objects',
153 | },
154 | { codes: '1F4FB', char: '📻', name: 'radio', category: 'objects' },
155 | {
156 | codes: '1F3B7',
157 | char: '🎷',
158 | name: 'saxophone',
159 | category: 'objects',
160 | },
161 | { codes: '1F3B8', char: '🎸', name: 'guitar', category: 'objects' },
162 | {
163 | codes: '1F3B9',
164 | char: '🎹',
165 | name: 'musical keyboard',
166 | category: 'objects',
167 | },
168 | { codes: '1F3BA', char: '🎺', name: 'trumpet', category: 'objects' },
169 | { codes: '1F3BB', char: '🎻', name: 'violin', category: 'objects' },
170 | {
171 | codes: '1F4F1',
172 | char: '📱',
173 | name: 'mobile phone',
174 | category: 'objects',
175 | },
176 | {
177 | codes: '1F4F2',
178 | char: '📲',
179 | name: 'mobile phone with arrow',
180 | category: 'objects',
181 | },
182 | {
183 | codes: '260E FE0F',
184 | char: '☎️',
185 | name: 'telephone',
186 | category: 'objects',
187 | },
188 | {
189 | codes: '1F4DE',
190 | char: '📞',
191 | name: 'telephone receiver',
192 | category: 'objects',
193 | },
194 | { codes: '1F4DF', char: '📟', name: 'pager', category: 'objects' },
195 | {
196 | codes: '1F4E0',
197 | char: '📠',
198 | name: 'fax machine',
199 | category: 'objects',
200 | },
201 | { codes: '1F50B', char: '🔋', name: 'battery', category: 'objects' },
202 | {
203 | codes: '1F50C',
204 | char: '🔌',
205 | name: 'electric plug',
206 | category: 'objects',
207 | },
208 | {
209 | codes: '1F4BB',
210 | char: '💻',
211 | name: 'laptop computer',
212 | category: 'objects',
213 | },
214 | {
215 | codes: '1F4BD',
216 | char: '💽',
217 | name: 'computer disk',
218 | category: 'objects',
219 | },
220 | {
221 | codes: '1F4BE',
222 | char: '💾',
223 | name: 'floppy disk',
224 | category: 'objects',
225 | },
226 | {
227 | codes: '1F4BF',
228 | char: '💿',
229 | name: 'optical disk',
230 | category: 'objects',
231 | },
232 | { codes: '1F4C0', char: '📀', name: 'dvd', category: 'objects' },
233 | { codes: '1F9EE', char: '🧮', name: 'abacus', category: 'objects' },
234 | {
235 | codes: '1F3A5',
236 | char: '🎥',
237 | name: 'movie camera',
238 | category: 'objects',
239 | },
240 | {
241 | codes: '1F39E FE0F',
242 | char: '🎞️',
243 | name: 'film frames',
244 | category: 'objects',
245 | },
246 | {
247 | codes: '1F4FD FE0F',
248 | char: '📽️',
249 | name: 'film projector',
250 | category: 'objects',
251 | },
252 | {
253 | codes: '1F3AC',
254 | char: '🎬',
255 | name: 'clapper board',
256 | category: 'objects',
257 | },
258 | {
259 | codes: '1F4FA',
260 | char: '📺',
261 | name: 'television',
262 | category: 'objects',
263 | },
264 | { codes: '1F4F7', char: '📷', name: 'camera', category: 'objects' },
265 | {
266 | codes: '1F4F9',
267 | char: '📹',
268 | name: 'video camera',
269 | category: 'objects',
270 | },
271 | {
272 | codes: '1F4FC',
273 | char: '📼',
274 | name: 'videocassette',
275 | category: 'objects',
276 | },
277 | {
278 | codes: '1F50D',
279 | char: '🔍',
280 | name: 'magnifying glass tilted left',
281 | category: 'objects',
282 | },
283 | {
284 | codes: '1F50E',
285 | char: '🔎',
286 | name: 'magnifying glass tilted right',
287 | category: 'objects',
288 | },
289 | {
290 | codes: '1F4A1',
291 | char: '💡',
292 | name: 'light bulb',
293 | category: 'objects',
294 | },
295 | {
296 | codes: '1F526',
297 | char: '🔦',
298 | name: 'flashlight',
299 | category: 'objects',
300 | },
301 | {
302 | codes: '1F3EE',
303 | char: '🏮',
304 | name: 'red paper lantern',
305 | category: 'objects',
306 | },
307 | {
308 | codes: '1F4D4',
309 | char: '📔',
310 | name: 'notebook with decorative cover',
311 | category: 'objects',
312 | },
313 | {
314 | codes: '1F4D5',
315 | char: '📕',
316 | name: 'closed book',
317 | category: 'objects',
318 | },
319 | {
320 | codes: '1F4D6',
321 | char: '📖',
322 | name: 'open book',
323 | category: 'objects',
324 | },
325 | {
326 | codes: '1F4D7',
327 | char: '📗',
328 | name: 'green book',
329 | category: 'objects',
330 | },
331 | {
332 | codes: '1F4D8',
333 | char: '📘',
334 | name: 'blue book',
335 | category: 'objects',
336 | },
337 | {
338 | codes: '1F4D9',
339 | char: '📙',
340 | name: 'orange book',
341 | category: 'objects',
342 | },
343 | { codes: '1F4DA', char: '📚', name: 'books', category: 'objects' },
344 | { codes: '1F4D3', char: '📓', name: 'notebook', category: 'objects' },
345 | { codes: '1F4D2', char: '📒', name: 'ledger', category: 'objects' },
346 | {
347 | codes: '1F4C3',
348 | char: '📃',
349 | name: 'page with curl',
350 | category: 'objects',
351 | },
352 | { codes: '1F4DC', char: '📜', name: 'scroll', category: 'objects' },
353 | {
354 | codes: '1F4C4',
355 | char: '📄',
356 | name: 'page facing up',
357 | category: 'objects',
358 | },
359 | {
360 | codes: '1F4F0',
361 | char: '📰',
362 | name: 'newspaper',
363 | category: 'objects',
364 | },
365 | {
366 | codes: '1F4D1',
367 | char: '📑',
368 | name: 'bookmark tabs',
369 | category: 'objects',
370 | },
371 | { codes: '1F516', char: '🔖', name: 'bookmark', category: 'objects' },
372 | {
373 | codes: '1F4B0',
374 | char: '💰',
375 | name: 'money bag',
376 | category: 'objects',
377 | },
378 | {
379 | codes: '1F4B4',
380 | char: '💴',
381 | name: 'yen banknote',
382 | category: 'objects',
383 | },
384 | {
385 | codes: '1F4B5',
386 | char: '💵',
387 | name: 'dollar banknote',
388 | category: 'objects',
389 | },
390 | {
391 | codes: '1F4B6',
392 | char: '💶',
393 | name: 'euro banknote',
394 | category: 'objects',
395 | },
396 | {
397 | codes: '1F4B7',
398 | char: '💷',
399 | name: 'pound banknote',
400 | category: 'objects',
401 | },
402 | {
403 | codes: '1F4B8',
404 | char: '💸',
405 | name: 'money with wings',
406 | category: 'objects',
407 | },
408 | {
409 | codes: '1F4B3',
410 | char: '💳',
411 | name: 'credit card',
412 | category: 'objects',
413 | },
414 | {
415 | codes: '1F4B9',
416 | char: '💹',
417 | name: 'chart increasing with yen',
418 | category: 'objects',
419 | },
420 | {
421 | codes: '1F4B1',
422 | char: '💱',
423 | name: 'currency exchange',
424 | category: 'objects',
425 | },
426 | {
427 | codes: '1F4B2',
428 | char: '💲',
429 | name: 'heavy dollar sign',
430 | category: 'objects',
431 | },
432 | {
433 | codes: '2709 FE0F',
434 | char: '✉️',
435 | name: 'envelope',
436 | category: 'objects',
437 | },
438 | { codes: '1F4E7', char: '📧', name: 'e-mail', category: 'objects' },
439 | {
440 | codes: '1F4E8',
441 | char: '📨',
442 | name: 'incoming envelope',
443 | category: 'objects',
444 | },
445 | {
446 | codes: '1F4E9',
447 | char: '📩',
448 | name: 'envelope with arrow',
449 | category: 'objects',
450 | },
451 | {
452 | codes: '1F4E4',
453 | char: '📤',
454 | name: 'outbox tray',
455 | category: 'objects',
456 | },
457 | {
458 | codes: '1F4E5',
459 | char: '📥',
460 | name: 'inbox tray',
461 | category: 'objects',
462 | },
463 | { codes: '1F4E6', char: '📦', name: 'package', category: 'objects' },
464 | {
465 | codes: '1F4EB',
466 | char: '📫',
467 | name: 'closed mailbox with raised flag',
468 | category: 'objects',
469 | },
470 | {
471 | codes: '1F4EA',
472 | char: '📪',
473 | name: 'closed mailbox with lowered flag',
474 | category: 'objects',
475 | },
476 | {
477 | codes: '1F4EC',
478 | char: '📬',
479 | name: 'open mailbox with raised flag',
480 | category: 'objects',
481 | },
482 | {
483 | codes: '1F4ED',
484 | char: '📭',
485 | name: 'open mailbox with lowered flag',
486 | category: 'objects',
487 | },
488 | { codes: '1F4EE', char: '📮', name: 'postbox', category: 'objects' },
489 | {
490 | codes: '270F FE0F',
491 | char: '✏️',
492 | name: 'pencil',
493 | category: 'objects',
494 | },
495 | {
496 | codes: '2712 FE0F',
497 | char: '✒️',
498 | name: 'black nib',
499 | category: 'objects',
500 | },
501 | { codes: '1F4DD', char: '📝', name: 'memo', category: 'objects' },
502 | {
503 | codes: '1F4BC',
504 | char: '💼',
505 | name: 'briefcase',
506 | category: 'objects',
507 | },
508 | {
509 | codes: '1F4C1',
510 | char: '📁',
511 | name: 'file folder',
512 | category: 'objects',
513 | },
514 | {
515 | codes: '1F4C2',
516 | char: '📂',
517 | name: 'open file folder',
518 | category: 'objects',
519 | },
520 | { codes: '1F4C5', char: '📅', name: 'calendar', category: 'objects' },
521 | {
522 | codes: '1F4C7',
523 | char: '📇',
524 | name: 'card index',
525 | category: 'objects',
526 | },
527 | {
528 | codes: '1F4C8',
529 | char: '📈',
530 | name: 'chart increasing',
531 | category: 'objects',
532 | },
533 | {
534 | codes: '1F4C9',
535 | char: '📉',
536 | name: 'chart decreasing',
537 | category: 'objects',
538 | },
539 | {
540 | codes: '1F4CA',
541 | char: '📊',
542 | name: 'bar chart',
543 | category: 'objects',
544 | },
545 | {
546 | codes: '1F4CB',
547 | char: '📋',
548 | name: 'clipboard',
549 | category: 'objects',
550 | },
551 | { codes: '1F4CC', char: '📌', name: 'pushpin', category: 'objects' },
552 | {
553 | codes: '1F4CD',
554 | char: '📍',
555 | name: 'round pushpin',
556 | category: 'objects',
557 | },
558 | {
559 | codes: '1F4CE',
560 | char: '📎',
561 | name: 'paperclip',
562 | category: 'objects',
563 | },
564 | {
565 | codes: '1F4CF',
566 | char: '📏',
567 | name: 'straight ruler',
568 | category: 'objects',
569 | },
570 | {
571 | codes: '1F4D0',
572 | char: '📐',
573 | name: 'triangular ruler',
574 | category: 'objects',
575 | },
576 | {
577 | codes: '2702 FE0F',
578 | char: '✂️',
579 | name: 'scissors',
580 | category: 'objects',
581 | },
582 | { codes: '1F512', char: '🔒', name: 'locked', category: 'objects' },
583 | { codes: '1F513', char: '🔓', name: 'unlocked', category: 'objects' },
584 | {
585 | codes: '1F50F',
586 | char: '🔏',
587 | name: 'locked with pen',
588 | category: 'objects',
589 | },
590 | {
591 | codes: '1F510',
592 | char: '🔐',
593 | name: 'locked with key',
594 | category: 'objects',
595 | },
596 | { codes: '1F511', char: '🔑', name: 'key', category: 'objects' },
597 | { codes: '1F528', char: '🔨', name: 'hammer', category: 'objects' },
598 | { codes: '1F52B', char: '🔫', name: 'pistol', category: 'objects' },
599 | { codes: '1F517', char: '🔗', name: 'link', category: 'objects' },
600 | {
601 | codes: '1F52C',
602 | char: '🔬',
603 | name: 'microscope',
604 | category: 'objects',
605 | },
606 | {
607 | codes: '1F52D',
608 | char: '🔭',
609 | name: 'telescope',
610 | category: 'objects',
611 | },
612 | {
613 | codes: '1F4E1',
614 | char: '📡',
615 | name: 'satellite antenna',
616 | category: 'objects',
617 | },
618 | { codes: '1F489', char: '💉', name: 'syringe', category: 'objects' },
619 | { codes: '1F48A', char: '💊', name: 'pill', category: 'objects' },
620 | { codes: '1F6AA', char: '🚪', name: 'door', category: 'objects' },
621 | { codes: '1F6BD', char: '🚽', name: 'toilet', category: 'objects' },
622 | { codes: '1F6BF', char: '🚿', name: 'shower', category: 'objects' },
623 | { codes: '1F6C1', char: '🛁', name: 'bathtub', category: 'objects' },
624 | {
625 | codes: '1F6AC',
626 | char: '🚬',
627 | name: 'cigarette',
628 | category: 'objects',
629 | },
630 | { codes: '1F5FF', char: '🗿', name: 'moai', category: 'objects' },
631 | ];
632 |
--------------------------------------------------------------------------------
/src/assets/emojis/places.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | codes: '1F30F',
4 | char: '🌏',
5 | name: 'globe showing Asia-Australia',
6 | category: 'places',
7 | },
8 | {
9 | codes: '1F310',
10 | char: '🌐',
11 | name: 'globe with meridians',
12 | category: 'places',
13 | },
14 | { codes: '1F30B', char: '🌋', name: 'volcano', category: 'places' },
15 | {
16 | codes: '1F5FB',
17 | char: '🗻',
18 | name: 'mount fuji',
19 | category: 'places',
20 | },
21 | { codes: '1F3E0', char: '🏠', name: 'house', category: 'places' },
22 | {
23 | codes: '1F3E1',
24 | char: '🏡',
25 | name: 'house with garden',
26 | category: 'places',
27 | },
28 | {
29 | codes: '1F3E2',
30 | char: '🏢',
31 | name: 'office building',
32 | category: 'places',
33 | },
34 | {
35 | codes: '1F3E3',
36 | char: '🏣',
37 | name: 'Japanese post office',
38 | category: 'places',
39 | },
40 | {
41 | codes: '1F3E4',
42 | char: '🏤',
43 | name: 'post office',
44 | category: 'places',
45 | },
46 | { codes: '1F3E5', char: '🏥', name: 'hospital', category: 'places' },
47 | { codes: '1F3E6', char: '🏦', name: 'bank', category: 'places' },
48 | { codes: '1F3E8', char: '🏨', name: 'hotel', category: 'places' },
49 | {
50 | codes: '1F3E9',
51 | char: '🏩',
52 | name: 'love hotel',
53 | category: 'places',
54 | },
55 | {
56 | codes: '1F3EA',
57 | char: '🏪',
58 | name: 'convenience store',
59 | category: 'places',
60 | },
61 | { codes: '1F3EB', char: '🏫', name: 'school', category: 'places' },
62 | {
63 | codes: '1F3EC',
64 | char: '🏬',
65 | name: 'department store',
66 | category: 'places',
67 | },
68 | { codes: '1F3ED', char: '🏭', name: 'factory', category: 'places' },
69 | {
70 | codes: '1F3EF',
71 | char: '🏯',
72 | name: 'Japanese castle',
73 | category: 'places',
74 | },
75 | { codes: '1F3F0', char: '🏰', name: 'castle', category: 'places' },
76 | { codes: '1F492', char: '💒', name: 'wedding', category: 'places' },
77 | {
78 | codes: '1F5FD',
79 | char: '🗽',
80 | name: 'Statue of Liberty',
81 | category: 'places',
82 | },
83 | { codes: '26EA', char: '⛪', name: 'church', category: 'places' },
84 | { codes: '26F2', char: '⛲', name: 'fountain', category: 'places' },
85 | { codes: '26FA', char: '⛺', name: 'tent', category: 'places' },
86 | { codes: '1F301', char: '🌁', name: 'foggy', category: 'places' },
87 | {
88 | codes: '1F303',
89 | char: '🌃',
90 | name: 'night with stars',
91 | category: 'places',
92 | },
93 | {
94 | codes: '1F304',
95 | char: '🌄',
96 | name: 'sunrise over mountains',
97 | category: 'places',
98 | },
99 | { codes: '1F305', char: '🌅', name: 'sunrise', category: 'places' },
100 | {
101 | codes: '1F306',
102 | char: '🌆',
103 | name: 'cityscape at dusk',
104 | category: 'places',
105 | },
106 | { codes: '1F307', char: '🌇', name: 'sunset', category: 'places' },
107 | {
108 | codes: '1F309',
109 | char: '🌉',
110 | name: 'bridge at night',
111 | category: 'places',
112 | },
113 | {
114 | codes: '2668 FE0F',
115 | char: '♨️',
116 | name: 'hot springs',
117 | category: 'places',
118 | },
119 | {
120 | codes: '1F3A0',
121 | char: '🎠',
122 | name: 'carousel horse',
123 | category: 'places',
124 | },
125 | {
126 | codes: '1F3A1',
127 | char: '🎡',
128 | name: 'ferris wheel',
129 | category: 'places',
130 | },
131 | {
132 | codes: '1F3A2',
133 | char: '🎢',
134 | name: 'roller coaster',
135 | category: 'places',
136 | },
137 | {
138 | codes: '1F488',
139 | char: '💈',
140 | name: 'barber pole',
141 | category: 'places',
142 | },
143 | {
144 | codes: '1F3AA',
145 | char: '🎪',
146 | name: 'circus tent',
147 | category: 'places',
148 | },
149 | {
150 | codes: '1F682',
151 | char: '🚂',
152 | name: 'locomotive',
153 | category: 'places',
154 | },
155 | {
156 | codes: '1F683',
157 | char: '🚃',
158 | name: 'railway car',
159 | category: 'places',
160 | },
161 | {
162 | codes: '1F684',
163 | char: '🚄',
164 | name: 'high-speed train',
165 | category: 'places',
166 | },
167 | {
168 | codes: '1F685',
169 | char: '🚅',
170 | name: 'bullet train',
171 | category: 'places',
172 | },
173 | { codes: '1F686', char: '🚆', name: 'train', category: 'places' },
174 | { codes: '1F687', char: '🚇', name: 'metro', category: 'places' },
175 | {
176 | codes: '1F688',
177 | char: '🚈',
178 | name: 'light rail',
179 | category: 'places',
180 | },
181 | { codes: '1F689', char: '🚉', name: 'station', category: 'places' },
182 | { codes: '1F68A', char: '🚊', name: 'tram', category: 'places' },
183 | { codes: '1F69D', char: '🚝', name: 'monorail', category: 'places' },
184 | {
185 | codes: '1F69E',
186 | char: '🚞',
187 | name: 'mountain railway',
188 | category: 'places',
189 | },
190 | { codes: '1F68B', char: '🚋', name: 'tram car', category: 'places' },
191 | { codes: '1F68C', char: '🚌', name: 'bus', category: 'places' },
192 | {
193 | codes: '1F68D',
194 | char: '🚍',
195 | name: 'oncoming bus',
196 | category: 'places',
197 | },
198 | {
199 | codes: '1F68E',
200 | char: '🚎',
201 | name: 'trolleybus',
202 | category: 'places',
203 | },
204 | { codes: '1F690', char: '🚐', name: 'minibus', category: 'places' },
205 | { codes: '1F691', char: '🚑', name: 'ambulance', category: 'places' },
206 | {
207 | codes: '1F692',
208 | char: '🚒',
209 | name: 'fire engine',
210 | category: 'places',
211 | },
212 | {
213 | codes: '1F693',
214 | char: '🚓',
215 | name: 'police car',
216 | category: 'places',
217 | },
218 | { codes: '1F695', char: '🚕', name: 'taxi', category: 'places' },
219 | {
220 | codes: '1F697',
221 | char: '🚗',
222 | name: 'automobile',
223 | category: 'places',
224 | },
225 | {
226 | codes: '1F698',
227 | char: '🚘',
228 | name: 'oncoming automobile',
229 | category: 'places',
230 | },
231 | {
232 | codes: '1F699',
233 | char: '🚙',
234 | name: 'sport utility vehicle',
235 | category: 'places',
236 | },
237 | {
238 | codes: '1F69A',
239 | char: '🚚',
240 | name: 'delivery truck',
241 | category: 'places',
242 | },
243 | {
244 | codes: '1F69B',
245 | char: '🚛',
246 | name: 'articulated lorry',
247 | category: 'places',
248 | },
249 | { codes: '1F6B2', char: '🚲', name: 'bicycle', category: 'places' },
250 | { codes: '26FD', char: '⛽', name: 'fuel pump', category: 'places' },
251 | {
252 | codes: '1F6A8',
253 | char: '🚨',
254 | name: 'police car light',
255 | category: 'places',
256 | },
257 | {
258 | codes: '1F6A5',
259 | char: '🚥',
260 | name: 'horizontal traffic light',
261 | category: 'places',
262 | },
263 | {
264 | codes: '1F6A6',
265 | char: '🚦',
266 | name: 'vertical traffic light',
267 | category: 'places',
268 | },
269 | {
270 | codes: '1F6A7',
271 | char: '🚧',
272 | name: 'construction',
273 | category: 'places',
274 | },
275 | { codes: '2693', char: '⚓', name: 'anchor', category: 'places' },
276 | { codes: '26F5', char: '⛵', name: 'sailboat', category: 'places' },
277 | { codes: '1F6A4', char: '🚤', name: 'speedboat', category: 'places' },
278 | { codes: '1F6A2', char: '🚢', name: 'ship', category: 'places' },
279 | {
280 | codes: '2708 FE0F',
281 | char: '✈️',
282 | name: 'airplane',
283 | category: 'places',
284 | },
285 | {
286 | codes: '1F681',
287 | char: '🚁',
288 | name: 'helicopter',
289 | category: 'places',
290 | },
291 | {
292 | codes: '1F69F',
293 | char: '🚟',
294 | name: 'suspension railway',
295 | category: 'places',
296 | },
297 | {
298 | codes: '1F6A0',
299 | char: '🚠',
300 | name: 'mountain cableway',
301 | category: 'places',
302 | },
303 | {
304 | codes: '1F6A1',
305 | char: '🚡',
306 | name: 'aerial tramway',
307 | category: 'places',
308 | },
309 | {
310 | codes: '1F6F0 FE0F',
311 | char: '🛰️',
312 | name: 'satellite',
313 | category: 'places',
314 | },
315 | { codes: '1F680', char: '🚀', name: 'rocket', category: 'places' },
316 | {
317 | codes: '231B',
318 | char: '⌛',
319 | name: 'hourglass done',
320 | category: 'places',
321 | },
322 | {
323 | codes: '23F3',
324 | char: '⏳',
325 | name: 'hourglass not done',
326 | category: 'places',
327 | },
328 | { codes: '231A', char: '⌚', name: 'watch', category: 'places' },
329 | {
330 | codes: '23F0',
331 | char: '⏰',
332 | name: 'alarm clock',
333 | category: 'places',
334 | },
335 | {
336 | codes: '1F55B',
337 | char: '🕛',
338 | name: 'twelve o’clock',
339 | category: 'places',
340 | },
341 | {
342 | codes: '1F567',
343 | char: '🕧',
344 | name: 'twelve-thirty',
345 | category: 'places',
346 | },
347 | {
348 | codes: '1F550',
349 | char: '🕐',
350 | name: 'one o’clock',
351 | category: 'places',
352 | },
353 | {
354 | codes: '1F55C',
355 | char: '🕜',
356 | name: 'one-thirty',
357 | category: 'places',
358 | },
359 | {
360 | codes: '1F551',
361 | char: '🕑',
362 | name: 'two o’clock',
363 | category: 'places',
364 | },
365 | {
366 | codes: '1F55D',
367 | char: '🕝',
368 | name: 'two-thirty',
369 | category: 'places',
370 | },
371 | {
372 | codes: '1F552',
373 | char: '🕒',
374 | name: 'three o’clock',
375 | category: 'places',
376 | },
377 | {
378 | codes: '1F55E',
379 | char: '🕞',
380 | name: 'three-thirty',
381 | category: 'places',
382 | },
383 | {
384 | codes: '1F553',
385 | char: '🕓',
386 | name: 'four o’clock',
387 | category: 'places',
388 | },
389 | {
390 | codes: '1F55F',
391 | char: '🕟',
392 | name: 'four-thirty',
393 | category: 'places',
394 | },
395 | {
396 | codes: '1F554',
397 | char: '🕔',
398 | name: 'five o’clock',
399 | category: 'places',
400 | },
401 | {
402 | codes: '1F560',
403 | char: '🕠',
404 | name: 'five-thirty',
405 | category: 'places',
406 | },
407 | {
408 | codes: '1F555',
409 | char: '🕕',
410 | name: 'six o’clock',
411 | category: 'places',
412 | },
413 | {
414 | codes: '1F561',
415 | char: '🕡',
416 | name: 'six-thirty',
417 | category: 'places',
418 | },
419 | {
420 | codes: '1F556',
421 | char: '🕖',
422 | name: 'seven o’clock',
423 | category: 'places',
424 | },
425 | {
426 | codes: '1F562',
427 | char: '🕢',
428 | name: 'seven-thirty',
429 | category: 'places',
430 | },
431 | {
432 | codes: '1F557',
433 | char: '🕗',
434 | name: 'eight o’clock',
435 | category: 'places',
436 | },
437 | {
438 | codes: '1F563',
439 | char: '🕣',
440 | name: 'eight-thirty',
441 | category: 'places',
442 | },
443 | {
444 | codes: '1F558',
445 | char: '🕘',
446 | name: 'nine o’clock',
447 | category: 'places',
448 | },
449 | {
450 | codes: '1F564',
451 | char: '🕤',
452 | name: 'nine-thirty',
453 | category: 'places',
454 | },
455 | {
456 | codes: '1F559',
457 | char: '🕙',
458 | name: 'ten o’clock',
459 | category: 'places',
460 | },
461 | {
462 | codes: '1F565',
463 | char: '🕥',
464 | name: 'ten-thirty',
465 | category: 'places',
466 | },
467 | {
468 | codes: '1F55A',
469 | char: '🕚',
470 | name: 'eleven o’clock',
471 | category: 'places',
472 | },
473 | {
474 | codes: '1F566',
475 | char: '🕦',
476 | name: 'eleven-thirty',
477 | category: 'places',
478 | },
479 | ];
480 |
--------------------------------------------------------------------------------
/src/assets/emojis/skintone.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | codes: '1F3FB',
4 | char: '🏻',
5 | name: 'light-skin-tone',
6 | category: 'skin-tone',
7 | },
8 | {
9 | codes: '1F3FC',
10 | char: '🏼',
11 | name: 'medium-light-skin-tone',
12 | category: 'skin-tone',
13 | },
14 | {
15 | codes: '1F3FD',
16 | char: '🏽',
17 | name: 'medium-skin-tone',
18 | category: 'skin-tone',
19 | },
20 | {
21 | codes: '1F3FE',
22 | char: '🏾',
23 | name: 'medium-dark-skin-tone',
24 | category: 'skin-tone',
25 | },
26 | {
27 | codes: '1F3FF',
28 | char: '🏿',
29 | name: 'dark-skin-tone',
30 | category: 'skin-tone',
31 | }
32 | ];
33 |
--------------------------------------------------------------------------------
/src/assets/emojis/symbols.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | codes: '2764 FE0F',
4 | char: '❤️',
5 | name: 'red heart',
6 | category: 'symbols',
7 | },
8 | {
9 | codes: '1F49B',
10 | char: '💛',
11 | name: 'yellow heart',
12 | category: 'symbols',
13 | },
14 | {
15 | codes: '1F49A',
16 | char: '💚',
17 | name: 'green heart',
18 | category: 'symbols',
19 | },
20 | {
21 | codes: '1F499',
22 | char: '💙',
23 | name: 'blue heart',
24 | category: 'symbols',
25 | },
26 | {
27 | codes: '1F49C',
28 | char: '💜',
29 | name: 'purple heart',
30 | category: 'symbols',
31 | },
32 | {
33 | codes: '1F48B',
34 | char: '💋',
35 | name: 'kiss mark',
36 | category: 'symbols',
37 | },
38 | {
39 | codes: '1F48C',
40 | char: '💌',
41 | name: 'love letter',
42 | category: 'symbols',
43 | },
44 | {
45 | codes: '1F498',
46 | char: '💘',
47 | name: 'heart with arrow',
48 | category: 'symbols',
49 | },
50 | {
51 | codes: '1F49D',
52 | char: '💝',
53 | name: 'heart with ribbon',
54 | category: 'symbols',
55 | },
56 | {
57 | codes: '1F496',
58 | char: '💖',
59 | name: 'sparkling heart',
60 | category: 'symbols',
61 | },
62 | {
63 | codes: '1F497',
64 | char: '💗',
65 | name: 'growing heart',
66 | category: 'symbols',
67 | },
68 | {
69 | codes: '1F493',
70 | char: '💓',
71 | name: 'beating heart',
72 | category: 'symbols',
73 | },
74 | {
75 | codes: '1F49E',
76 | char: '💞',
77 | name: 'revolving hearts',
78 | category: 'symbols',
79 | },
80 | {
81 | codes: '1F495',
82 | char: '💕',
83 | name: 'two hearts',
84 | category: 'symbols',
85 | },
86 | {
87 | codes: '1F49F',
88 | char: '💟',
89 | name: 'heart decoration',
90 | category: 'symbols',
91 | },
92 | {
93 | codes: '1F494',
94 | char: '💔',
95 | name: 'broken heart',
96 | category: 'symbols',
97 | },
98 | {
99 | codes: '1F4AF',
100 | char: '💯',
101 | name: 'hundred points',
102 | category: 'symbols',
103 | },
104 | {
105 | codes: '1F4A2',
106 | char: '💢',
107 | name: 'anger symbol',
108 | category: 'symbols',
109 | },
110 | {
111 | codes: '1F4A5',
112 | char: '💥',
113 | name: 'collision',
114 | category: 'symbols',
115 | },
116 | { codes: '1F4AB', char: '💫', name: 'dizzy', category: 'symbols' },
117 | {
118 | codes: '1F4A6',
119 | char: '💦',
120 | name: 'sweat droplets',
121 | category: 'symbols',
122 | },
123 | {
124 | codes: '1F4A8',
125 | char: '💨',
126 | name: 'dashing away',
127 | category: 'symbols',
128 | },
129 | { codes: '1F4A3', char: '💣', name: 'bomb', category: 'symbols' },
130 | {
131 | codes: '1F4AC',
132 | char: '💬',
133 | name: 'speech balloon',
134 | category: 'symbols',
135 | },
136 | {
137 | codes: '1F4AD',
138 | char: '💭',
139 | name: 'thought balloon',
140 | category: 'symbols',
141 | },
142 | { codes: '1F4A4', char: '💤', name: 'zzz', category: 'symbols' },
143 | {
144 | codes: '1F6AE',
145 | char: '🚮',
146 | name: 'litter in bin sign',
147 | category: 'symbols',
148 | },
149 | {
150 | codes: '1F6B0',
151 | char: '🚰',
152 | name: 'potable water',
153 | category: 'symbols',
154 | },
155 | {
156 | codes: '267F',
157 | char: '♿',
158 | name: 'wheelchair symbol',
159 | category: 'symbols',
160 | },
161 | {
162 | codes: '1F6B9',
163 | char: '🚹',
164 | name: 'men’s room',
165 | category: 'symbols',
166 | },
167 | {
168 | codes: '1F6BA',
169 | char: '🚺',
170 | name: 'women’s room',
171 | category: 'symbols',
172 | },
173 | { codes: '1F6BB', char: '🚻', name: 'restroom', category: 'symbols' },
174 | {
175 | codes: '1F6BC',
176 | char: '🚼',
177 | name: 'baby symbol',
178 | category: 'symbols',
179 | },
180 | {
181 | codes: '1F6BE',
182 | char: '🚾',
183 | name: 'water closet',
184 | category: 'symbols',
185 | },
186 | {
187 | codes: '1F6C2',
188 | char: '🛂',
189 | name: 'passport control',
190 | category: 'symbols',
191 | },
192 | { codes: '1F6C3', char: '🛃', name: 'customs', category: 'symbols' },
193 | {
194 | codes: '1F6C4',
195 | char: '🛄',
196 | name: 'baggage claim',
197 | category: 'symbols',
198 | },
199 | {
200 | codes: '1F6C5',
201 | char: '🛅',
202 | name: 'left luggage',
203 | category: 'symbols',
204 | },
205 | {
206 | codes: '26A0 FE0F',
207 | char: '⚠️',
208 | name: 'warning',
209 | category: 'symbols',
210 | },
211 | {
212 | codes: '1F6B8',
213 | char: '🚸',
214 | name: 'children crossing',
215 | category: 'symbols',
216 | },
217 | { codes: '26D4', char: '⛔', name: 'no entry', category: 'symbols' },
218 | {
219 | codes: '1F6AB',
220 | char: '🚫',
221 | name: 'prohibited',
222 | category: 'symbols',
223 | },
224 | {
225 | codes: '1F6B3',
226 | char: '🚳',
227 | name: 'no bicycles',
228 | category: 'symbols',
229 | },
230 | {
231 | codes: '1F6AD',
232 | char: '🚭',
233 | name: 'no smoking',
234 | category: 'symbols',
235 | },
236 | {
237 | codes: '1F6AF',
238 | char: '🚯',
239 | name: 'no littering',
240 | category: 'symbols',
241 | },
242 | {
243 | codes: '1F6B1',
244 | char: '🚱',
245 | name: 'non-potable water',
246 | category: 'symbols',
247 | },
248 | {
249 | codes: '1F6B7',
250 | char: '🚷',
251 | name: 'no pedestrians',
252 | category: 'symbols',
253 | },
254 | {
255 | codes: '1F4F5',
256 | char: '📵',
257 | name: 'no mobile phones',
258 | category: 'symbols',
259 | },
260 | {
261 | codes: '1F51E',
262 | char: '🔞',
263 | name: 'no one under eighteen',
264 | category: 'symbols',
265 | },
266 | {
267 | codes: '2622 FE0F',
268 | char: '☢️',
269 | name: 'radioactive',
270 | category: 'symbols',
271 | },
272 | {
273 | codes: '2623 FE0F',
274 | char: '☣️',
275 | name: 'biohazard',
276 | category: 'symbols',
277 | },
278 | {
279 | codes: '2B06 FE0F',
280 | char: '⬆️',
281 | name: 'up arrow',
282 | category: 'symbols',
283 | },
284 | {
285 | codes: '27A1 FE0F',
286 | char: '➡️',
287 | name: 'right arrow',
288 | category: 'symbols',
289 | },
290 | {
291 | codes: '2B07 FE0F',
292 | char: '⬇️',
293 | name: 'down arrow',
294 | category: 'symbols',
295 | },
296 | {
297 | codes: '2B05 FE0F',
298 | char: '⬅️',
299 | name: 'left arrow',
300 | category: 'symbols',
301 | },
302 | {
303 | codes: '21A9 FE0F',
304 | char: '↩️',
305 | name: 'right arrow curving left',
306 | category: 'symbols',
307 | },
308 | {
309 | codes: '21AA FE0F',
310 | char: '↪️',
311 | name: 'left arrow curving right',
312 | category: 'symbols',
313 | },
314 | {
315 | codes: '2934 FE0F',
316 | char: '⤴️',
317 | name: 'right arrow curving up',
318 | category: 'symbols',
319 | },
320 | {
321 | codes: '2935 FE0F',
322 | char: '⤵️',
323 | name: 'right arrow curving down',
324 | category: 'symbols',
325 | },
326 | {
327 | codes: '1F503',
328 | char: '🔃',
329 | name: 'clockwise vertical arrows',
330 | category: 'symbols',
331 | },
332 | {
333 | codes: '1F504',
334 | char: '🔄',
335 | name: 'counterclockwise arrows button',
336 | category: 'symbols',
337 | },
338 | {
339 | codes: '1F519',
340 | char: '🔙',
341 | name: 'BACK arrow',
342 | category: 'symbols',
343 | },
344 | {
345 | codes: '1F51A',
346 | char: '🔚',
347 | name: 'END arrow',
348 | category: 'symbols',
349 | },
350 | {
351 | codes: '1F51B',
352 | char: '🔛',
353 | name: 'ON! arrow',
354 | category: 'symbols',
355 | },
356 | {
357 | codes: '1F51C',
358 | char: '🔜',
359 | name: 'SOON arrow',
360 | category: 'symbols',
361 | },
362 | {
363 | codes: '1F51D',
364 | char: '🔝',
365 | name: 'TOP arrow',
366 | category: 'symbols',
367 | },
368 | { codes: '2648', char: '♈', name: 'Aries', category: 'symbols' },
369 | { codes: '2649', char: '♉', name: 'Taurus', category: 'symbols' },
370 | { codes: '264A', char: '♊', name: 'Gemini', category: 'symbols' },
371 | { codes: '264B', char: '♋', name: 'Cancer', category: 'symbols' },
372 | { codes: '264C', char: '♌', name: 'Leo', category: 'symbols' },
373 | { codes: '264D', char: '♍', name: 'Virgo', category: 'symbols' },
374 | { codes: '264E', char: '♎', name: 'Libra', category: 'symbols' },
375 | { codes: '264F', char: '♏', name: 'Scorpio', category: 'symbols' },
376 | {
377 | codes: '2650',
378 | char: '♐',
379 | name: 'Sagittarius',
380 | category: 'symbols',
381 | },
382 | { codes: '2651', char: '♑', name: 'Capricorn', category: 'symbols' },
383 | { codes: '2652', char: '♒', name: 'Aquarius', category: 'symbols' },
384 | { codes: '2653', char: '♓', name: 'Pisces', category: 'symbols' },
385 | { codes: '26CE', char: '⛎', name: 'Ophiuchus', category: 'symbols' },
386 | {
387 | codes: '1F500',
388 | char: '🔀',
389 | name: 'shuffle tracks button',
390 | category: 'symbols',
391 | },
392 | {
393 | codes: '1F501',
394 | char: '🔁',
395 | name: 'repeat button',
396 | category: 'symbols',
397 | },
398 | {
399 | codes: '1F502',
400 | char: '🔂',
401 | name: 'repeat single button',
402 | category: 'symbols',
403 | },
404 | {
405 | codes: '23E9',
406 | char: '⏩',
407 | name: 'fast-forward button',
408 | category: 'symbols',
409 | },
410 | {
411 | codes: '23EA',
412 | char: '⏪',
413 | name: 'fast reverse button',
414 | category: 'symbols',
415 | },
416 | {
417 | codes: '1F53C',
418 | char: '🔼',
419 | name: 'upwards button',
420 | category: 'symbols',
421 | },
422 | {
423 | codes: '23EB',
424 | char: '⏫',
425 | name: 'fast up button',
426 | category: 'symbols',
427 | },
428 | {
429 | codes: '1F53D',
430 | char: '🔽',
431 | name: 'downwards button',
432 | category: 'symbols',
433 | },
434 | {
435 | codes: '23EC',
436 | char: '⏬',
437 | name: 'fast down button',
438 | category: 'symbols',
439 | },
440 | { codes: '1F3A6', char: '🎦', name: 'cinema', category: 'symbols' },
441 | {
442 | codes: '1F505',
443 | char: '🔅',
444 | name: 'dim button',
445 | category: 'symbols',
446 | },
447 | {
448 | codes: '1F506',
449 | char: '🔆',
450 | name: 'bright button',
451 | category: 'symbols',
452 | },
453 | {
454 | codes: '1F4F6',
455 | char: '📶',
456 | name: 'antenna bars',
457 | category: 'symbols',
458 | },
459 | {
460 | codes: '1F4F3',
461 | char: '📳',
462 | name: 'vibration mode',
463 | category: 'symbols',
464 | },
465 | {
466 | codes: '1F4F4',
467 | char: '📴',
468 | name: 'mobile phone off',
469 | category: 'symbols',
470 | },
471 | {
472 | codes: '267B FE0F',
473 | char: '♻️',
474 | name: 'recycling symbol',
475 | category: 'symbols',
476 | },
477 | {
478 | codes: '1F531',
479 | char: '🔱',
480 | name: 'trident emblem',
481 | category: 'symbols',
482 | },
483 | {
484 | codes: '1F4DB',
485 | char: '📛',
486 | name: 'name badge',
487 | category: 'symbols',
488 | },
489 | {
490 | codes: '1F530',
491 | char: '🔰',
492 | name: 'Japanese symbol for beginner',
493 | category: 'symbols',
494 | },
495 | {
496 | codes: '2B55',
497 | char: '⭕',
498 | name: 'hollow red circle',
499 | category: 'symbols',
500 | },
501 | {
502 | codes: '2705',
503 | char: '✅',
504 | name: 'check mark button',
505 | category: 'symbols',
506 | },
507 | {
508 | codes: '2611 FE0F',
509 | char: '☑️',
510 | name: 'check box with check',
511 | category: 'symbols',
512 | },
513 | {
514 | codes: '2714 FE0F',
515 | char: '✔️',
516 | name: 'check mark',
517 | category: 'symbols',
518 | },
519 | {
520 | codes: '274C',
521 | char: '❌',
522 | name: 'cross mark',
523 | category: 'symbols',
524 | },
525 | {
526 | codes: '274E',
527 | char: '❎',
528 | name: 'cross mark button',
529 | category: 'symbols',
530 | },
531 | {
532 | codes: '27B0',
533 | char: '➰',
534 | name: 'curly loop',
535 | category: 'symbols',
536 | },
537 | {
538 | codes: '27BF',
539 | char: '➿',
540 | name: 'double curly loop',
541 | category: 'symbols',
542 | },
543 | {
544 | codes: '303D FE0F',
545 | char: '〽️',
546 | name: 'part alternation mark',
547 | category: 'symbols',
548 | },
549 | {
550 | codes: '303D',
551 | char: '〽',
552 | name: 'part alternation mark',
553 | category: 'symbols',
554 | },
555 | {
556 | codes: '2733 FE0F',
557 | char: '✳️',
558 | name: 'eight-spoked asterisk',
559 | category: 'symbols',
560 | },
561 | {
562 | codes: '2734 FE0F',
563 | char: '✴️',
564 | name: 'eight-pointed star',
565 | category: 'symbols',
566 | },
567 | {
568 | codes: '2747 FE0F',
569 | char: '❇️',
570 | name: 'sparkle',
571 | category: 'symbols',
572 | },
573 | {
574 | codes: '2753',
575 | char: '❓',
576 | name: 'question mark',
577 | category: 'symbols',
578 | },
579 | {
580 | codes: '2757',
581 | char: '❗',
582 | name: 'exclamation mark',
583 | category: 'symbols',
584 | },
585 | {
586 | codes: '1F534',
587 | char: '🔴',
588 | name: 'red circle',
589 | category: 'symbols',
590 | },
591 | {
592 | codes: '1F535',
593 | char: '🔵',
594 | name: 'blue circle',
595 | category: 'symbols',
596 | },
597 | {
598 | codes: '26AB',
599 | char: '⚫',
600 | name: 'black circle',
601 | category: 'symbols',
602 | },
603 | {
604 | codes: '26AA',
605 | char: '⚪',
606 | name: 'white circle',
607 | category: 'symbols',
608 | },
609 | {
610 | codes: '2B1B',
611 | char: '⬛',
612 | name: 'black large square',
613 | category: 'symbols',
614 | },
615 | {
616 | codes: '2B1C',
617 | char: '⬜',
618 | name: 'white large square',
619 | category: 'symbols',
620 | },
621 | {
622 | codes: '25FC FE0F',
623 | char: '◼️',
624 | name: 'black medium square',
625 | category: 'symbols',
626 | },
627 | {
628 | codes: '25FB FE0F',
629 | char: '◻️',
630 | name: 'white medium square',
631 | category: 'symbols',
632 | },
633 | {
634 | codes: '25FE',
635 | char: '◾',
636 | name: 'black medium-small square',
637 | category: 'symbols',
638 | },
639 | {
640 | codes: '25FD',
641 | char: '◽',
642 | name: 'white medium-small square',
643 | category: 'symbols',
644 | },
645 | {
646 | codes: '1F536',
647 | char: '🔶',
648 | name: 'large orange diamond',
649 | category: 'symbols',
650 | },
651 | {
652 | codes: '1F537',
653 | char: '🔷',
654 | name: 'large blue diamond',
655 | category: 'symbols',
656 | },
657 | {
658 | codes: '1F538',
659 | char: '🔸',
660 | name: 'small orange diamond',
661 | category: 'symbols',
662 | },
663 | {
664 | codes: '1F539',
665 | char: '🔹',
666 | name: 'small blue diamond',
667 | category: 'symbols',
668 | },
669 | {
670 | codes: '1F53A',
671 | char: '🔺',
672 | name: 'red triangle pointed up',
673 | category: 'symbols',
674 | },
675 | {
676 | codes: '1F53B',
677 | char: '🔻',
678 | name: 'red triangle pointed down',
679 | category: 'symbols',
680 | },
681 | {
682 | codes: '1F4A0',
683 | char: '💠',
684 | name: 'diamond with a dot',
685 | category: 'symbols',
686 | },
687 | {
688 | codes: '1F518',
689 | char: '🔘',
690 | name: 'radio button',
691 | category: 'symbols',
692 | },
693 | {
694 | codes: '1F533',
695 | char: '🔳',
696 | name: 'white square button',
697 | category: 'symbols',
698 | },
699 | {
700 | codes: '1F532',
701 | char: '🔲',
702 | name: 'black square button',
703 | category: 'symbols',
704 | },
705 | ];
706 |
--------------------------------------------------------------------------------
/src/assets/fonts/fa-brands-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-brands-400.eot
--------------------------------------------------------------------------------
/src/assets/fonts/fa-brands-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-brands-400.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/fa-brands-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-brands-400.woff
--------------------------------------------------------------------------------
/src/assets/fonts/fa-brands-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-brands-400.woff2
--------------------------------------------------------------------------------
/src/assets/fonts/fa-regular-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-regular-400.eot
--------------------------------------------------------------------------------
/src/assets/fonts/fa-regular-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-regular-400.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/fa-regular-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-regular-400.woff
--------------------------------------------------------------------------------
/src/assets/fonts/fa-regular-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-regular-400.woff2
--------------------------------------------------------------------------------
/src/assets/fonts/fa-solid-900.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-solid-900.eot
--------------------------------------------------------------------------------
/src/assets/fonts/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-solid-900.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/fa-solid-900.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-solid-900.woff
--------------------------------------------------------------------------------
/src/assets/fonts/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/fonts/fa-solid-900.woff2
--------------------------------------------------------------------------------
/src/assets/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/images/icon.png
--------------------------------------------------------------------------------
/src/assets/images/reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mojimojicorp/MojimojiEmoji/f3cc57108b1bd7d89df7a09b4d013bf33275af85/src/assets/images/reset.png
--------------------------------------------------------------------------------
/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | MojiMoji Emoji
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
45 |
46 |
47 |
48 |
59 |
60 |
61 |
62 |
63 |
64 | go back
65 |
66 |
67 |
68 |
69 |
Auto copy
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
Panel emoji size
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
Recent
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | MojiMoji Emoji by Eternal
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
--------------------------------------------------------------------------------
/src/js/components/index.js:
--------------------------------------------------------------------------------
1 | import makeNav from './nav.js';
2 | import makeSkintoneButtons from './skintoneButtons.js';
3 |
4 | const makeInitialView = () => {
5 | makeNav();
6 | makeSkintoneButtons();
7 | };
8 |
9 | export default makeInitialView;
10 |
--------------------------------------------------------------------------------
/src/js/components/nav.js:
--------------------------------------------------------------------------------
1 | import Doc from '../utils/doc.js';
2 | import Cons from '../utils/const.js';
3 |
4 | export default function makeNav() {
5 | const nav = Doc.find('.emoji-nav');
6 | const navDivs = document.createDocumentFragment();
7 |
8 | Cons.NAV_NAME_LIST.forEach((name, index) => {
9 | const navDiv = Doc.create('div');
10 |
11 | navDiv.className = index === 0 ? 'nav-recent' : `nav${index}`;
12 |
13 | const btnOfLink = Doc.create('a');
14 | btnOfLink.className = 'btn';
15 | btnOfLink.href = `#${name}`;
16 |
17 | const icon = Doc.create('i');
18 | icon.className = `fas ${Cons.NAV_ICON_LIST[index]} fa-2x`;
19 | btnOfLink.appendChild(icon);
20 |
21 | navDiv.appendChild(btnOfLink);
22 | navDivs.appendChild(navDiv);
23 | });
24 |
25 | nav.appendChild(navDivs);
26 | }
27 |
--------------------------------------------------------------------------------
/src/js/components/recent/removeDuplicate.js:
--------------------------------------------------------------------------------
1 | export default function removeDuplicate(array) {
2 | return array.reduce((acc, current) => {
3 | const isDuplicated = acc.find((item) => item.name === current.name);
4 | if (!isDuplicated) {
5 | return acc.concat([current]);
6 | }
7 | return acc;
8 | }, []);
9 | }
10 |
--------------------------------------------------------------------------------
/src/js/components/recent/renderRecent.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-undef */
2 | import Doc from '../../utils/doc.js';
3 |
4 | function renderRecent() {
5 | const recentGroup = Doc.find('.recent-group .emoji-span-container');
6 | const recent = JSON.parse(localStorage.getItem('recent'));
7 | const recentNum = localStorage.getItem('recentNum');
8 | const sizeSetting = localStorage.getItem('emojiSize');
9 |
10 | recentGroup.textContent = '';
11 |
12 | if (!recent) return;
13 |
14 | // recentNum보다 길이가 길면 잘라서 localstorage에 저장
15 | if (recent.length > recentNum) {
16 | recent.splice(recentNum);
17 | localStorage.setItem('recent', JSON.stringify(recent));
18 | }
19 |
20 | // localstorage에 있는 recent를 html에 붙여주기
21 | recent.forEach((data) => {
22 | const span = Doc.create('span');
23 | span.setAttribute('class', `emoji-span ${sizeSetting}`);
24 | span.setAttribute('title', data.name);
25 | span.textContent = data.char;
26 | twemoji.parse(span);
27 | recentGroup.appendChild(span);
28 | });
29 |
30 | }
31 |
32 | export default renderRecent;
33 |
--------------------------------------------------------------------------------
/src/js/components/recent/updateRecent.js:
--------------------------------------------------------------------------------
1 | import removeDuplicate from './removeDuplicate.js';
2 | import renderRecent from './renderRecent.js';
3 |
4 | function updateRecent(name, char) {
5 | const recentStorage = localStorage.getItem('recent');
6 |
7 | if (!recentStorage) {
8 | localStorage.setItem('recent', JSON.stringify([{ name, char }]));
9 | } else {
10 | let charArr = [];
11 | const parsedStorage = JSON.parse(recentStorage);
12 | parsedStorage.forEach((data) => {
13 | charArr.push(data);
14 | });
15 |
16 | charArr.unshift({ name, char });
17 | charArr = removeDuplicate(charArr);
18 | localStorage.setItem('recent', JSON.stringify(charArr));
19 | }
20 |
21 | renderRecent();
22 | }
23 |
24 | export default updateRecent;
25 |
--------------------------------------------------------------------------------
/src/js/components/skintoneButtons.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-undef */
2 | import Doc from '../utils/doc.js';
3 |
4 | const skintones = [
5 | { code: '1F3FB', name: 'light-skin-tone' },
6 | { code: '1F3FC', name: 'medium-light-skin-tone' },
7 | { code: '1F3FD', name: 'medium-skin-tone' },
8 | { code: '1F3FE', name: 'medium-dark-skin-tone' },
9 | { code: '1F3FF', name: 'dark-skin-tone' },
10 | ];
11 |
12 | export default function makeSkintoneButtons() {
13 | const skintoneButtonsContainer = Doc.find('.color');
14 |
15 | skintones.forEach((skintone) => {
16 | const emojiCode = twemoji.convert.fromCodePoint(skintone.code);
17 | const span = Doc.create('span');
18 |
19 | span.setAttribute('class', `skin-tone ${skintone.name}`);
20 | span.innerHTML = twemoji.parse(emojiCode);
21 |
22 | const img = span.querySelector('img');
23 | img.className = 'emoji-color';
24 |
25 | skintoneButtonsContainer.appendChild(span);
26 | });
27 | }
28 |
--------------------------------------------------------------------------------
/src/js/dist/twemoji.min.js:
--------------------------------------------------------------------------------
1 | /*! Copyright Twitter Inc. and other contributors. Licensed under MIT */
2 | var twemoji=function(){"use strict";var twemoji={base:"https://twemoji.maxcdn.com/v/12.1.2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:fromCodePoint,toCodePoint:toCodePoint},onerror:function onerror(){if(this.parentNode){this.parentNode.replaceChild(createText(this.alt,false),this)}},parse:parse,replace:replace,test:test},escaper={"&":"&","<":"<",">":">","'":"'",'"':"""},re=/(?:\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c\udffb|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c\udffb|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c\udffb|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb\udffc]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udffd]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69])(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5\udeeb\udeec\udef4-\udefa\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd71\udd73-\udd76\udd7a-\udda2\udda5-\uddaa\uddae-\uddb4\uddb7\uddba\uddbc-\uddca\uddd0\uddde-\uddff\ude70-\ude73\ude78-\ude7a\ude80-\ude82\ude90-\ude95]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,UFE0Fg=/\uFE0F/g,U200D=String.fromCharCode(8205),rescaper=/[&<>'"]/g,shouldntBeParsed=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,fromCharCode=String.fromCharCode;return twemoji;function createText(text,clean){return document.createTextNode(clean?text.replace(UFE0Fg,""):text)}function escapeHTML(s){return s.replace(rescaper,replacer)}function defaultImageSrcGenerator(icon,options){return"".concat(options.base,options.size,"/",icon,options.ext)}function grabAllTextNodes(node,allText){var childNodes=node.childNodes,length=childNodes.length,subnode,nodeType;while(length--){subnode=childNodes[length];nodeType=subnode.nodeType;if(nodeType===3){allText.push(subnode)}else if(nodeType===1&&!("ownerSVGElement"in subnode)&&!shouldntBeParsed.test(subnode.nodeName.toLowerCase())){grabAllTextNodes(subnode,allText)}}return allText}function grabTheRightIcon(rawText){return toCodePoint(rawText.indexOf(U200D)<0?rawText.replace(UFE0Fg,""):rawText)}function parseNode(node,options){var allText=grabAllTextNodes(node,[]),length=allText.length,attrib,attrname,modified,fragment,subnode,text,match,i,index,img,rawText,iconId,src;while(length--){modified=false;fragment=document.createDocumentFragment();subnode=allText[length];text=subnode.nodeValue;i=0;while(match=re.exec(text)){index=match.index;if(index!==i){fragment.appendChild(createText(text.slice(i,index),true))}rawText=match[0];iconId=grabTheRightIcon(rawText);i=index+rawText.length;src=options.callback(iconId,options);if(iconId&&src){img=new Image;img.onerror=options.onerror;img.setAttribute("draggable","false");attrib=options.attributes(rawText,iconId);for(attrname in attrib){if(attrib.hasOwnProperty(attrname)&&attrname.indexOf("on")!==0&&!img.hasAttribute(attrname)){img.setAttribute(attrname,attrib[attrname])}}img.className=options.className;img.alt=rawText;img.src=src;modified=true;fragment.appendChild(img)}if(!img)fragment.appendChild(createText(rawText,false));img=null}if(modified){if(i")}return ret})}function replacer(m){return escaper[m]}function returnNull(){return null}function toSizeSquaredAsset(value){return typeof value==="number"?value+"x"+value:value}function fromCodePoint(codepoint){var code=typeof codepoint==="string"?parseInt(codepoint,16):codepoint;if(code<65536){return fromCharCode(code)}code-=65536;return fromCharCode(55296+(code>>10),56320+(code&1023))}function parse(what,how){if(!how||typeof how==="function"){how={callback:how}}return(typeof what==="string"?parseString:parseNode)(what,{callback:how.callback||defaultImageSrcGenerator,attributes:typeof how.attributes==="function"?how.attributes:returnNull,base:typeof how.base==="string"?how.base:twemoji.base,ext:how.ext||twemoji.ext,size:how.folder||toSizeSquaredAsset(how.size||twemoji.size),className:how.className||twemoji.className,onerror:how.onerror||twemoji.onerror})}function replace(text,callback){return String(text).replace(re,callback)}function test(text){re.lastIndex=0;var result=re.test(text);re.lastIndex=0;return result}function toCodePoint(unicodeSurrogates,sep){var r=[],c=0,p=0,i=0;while(i {
20 | localStorage.setItem('copy', 'auto');
21 |
22 | copybtn[0].classList.add('active');
23 | copybtn[1].classList.remove('active');
24 | btnReset();
25 | removeAutoCopyOffEvent();
26 | addAutoCopyOnEvent();
27 | });
28 |
29 | copybtn[1].addEventListener('click', () => {
30 | localStorage.setItem('copy', 'manual');
31 |
32 | copybtn[0].classList.remove('active');
33 | copybtn[1].classList.add('active');
34 | btnReset();
35 | removeAutoCopyOnEvent();
36 | addAutoCopyOffEvent();
37 | });
38 | }
39 |
40 | export default addCopySettingButtonEvent;
41 |
--------------------------------------------------------------------------------
/src/js/events/buttonEvent/github.js:
--------------------------------------------------------------------------------
1 | export default function addGithubBtnEvent() {
2 | const githubIcon = document.querySelector('.fa-github');
3 | githubIcon.addEventListener('click', () => {
4 | // eslint-disable-next-line no-undef
5 | whale.tabs.create({
6 | url: 'https://github.com/mojimojicorp/EmojiByEternal',
7 | });
8 | });
9 | }
10 |
--------------------------------------------------------------------------------
/src/js/events/buttonEvent/goback.js:
--------------------------------------------------------------------------------
1 | export default function addGobackBtnEvent() {
2 | const goback = document.querySelector('.goback');
3 | goback.addEventListener('click', () => {
4 | const emojiContainer = document.querySelector('.emoji-container');
5 | const footer = document.querySelector('.footer');
6 | emojiContainer.setAttribute('style', 'display: block;');
7 | footer.setAttribute('style', 'display: block;');
8 |
9 | const div = document.querySelector('.setting-container');
10 | div.setAttribute('style', 'display: none;');
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/src/js/events/buttonEvent/index.js:
--------------------------------------------------------------------------------
1 | import addResetBtnEvent from './reset.js';
2 | import addCopyBtnEvent from './copy.js';
3 | import addGoSettingBtnEvent from './setting.js';
4 | import addGithubBtnEvent from './github.js';
5 | import addGobackBtnEvent from './goback.js';
6 | import addCopySettingButtonEvent from './copySetting.js';
7 | import addRecentSettingButtonEvent from './recentSetting.js';
8 | import addSizeSettingButtonEvent from './sizeSetting.js';
9 | import addPanelButtonEvent from './panel.js';
10 |
11 | const addButtonEvents = () => {
12 | addResetBtnEvent();
13 | addCopyBtnEvent();
14 | addGoSettingBtnEvent();
15 | addGithubBtnEvent();
16 | addGobackBtnEvent();
17 | addCopySettingButtonEvent();
18 | addRecentSettingButtonEvent();
19 | addSizeSettingButtonEvent();
20 | addPanelButtonEvent();
21 | };
22 |
23 | export default addButtonEvents;
24 |
--------------------------------------------------------------------------------
/src/js/events/buttonEvent/panel.js:
--------------------------------------------------------------------------------
1 | import Doc from '../../utils/doc.js';
2 |
3 | const panelBtn = Doc.findAll('.panel');
4 |
5 | function toPanel() {
6 | whale.windows.create({
7 | url: 'app/index.html',
8 | width: 405,
9 | height: 545,
10 | top: 150,
11 | left: 1250,
12 | type: 'panel',
13 | });
14 |
15 | window.close();
16 | }
17 |
18 | export default function addPanelButtonEvent() {
19 | const windowState = localStorage.getItem('windowState');
20 |
21 | panelBtn[0].addEventListener('click', () => {
22 | if (windowState === 'popup') {
23 | localStorage.setItem('windowState', 'panel');
24 | toPanel();
25 | } else {
26 | localStorage.setItem('windowState', 'popup');
27 | window.close();
28 | }
29 | });
30 | }
--------------------------------------------------------------------------------
/src/js/events/buttonEvent/recentSetting.js:
--------------------------------------------------------------------------------
1 | import Doc from '../../utils/doc.js';
2 | import renderRecent from '../../components/recent/renderRecent.js';
3 |
4 | const recentBtns = Doc.findAll('.recentBtn');
5 |
6 | function addRecentSettingButtonEvent() {
7 | recentBtns[0].addEventListener('click', () => {
8 | localStorage.setItem('recentNum', 0);
9 |
10 | recentBtns[0].classList.add('active');
11 | recentBtns[1].classList.remove('active');
12 | recentBtns[2].classList.remove('active');
13 | recentBtns[3].classList.remove('active');
14 |
15 | localStorage.removeItem('recent');
16 | renderRecent();
17 | });
18 |
19 | recentBtns[1].addEventListener('click', () => {
20 | localStorage.setItem('recentNum', 10);
21 |
22 | recentBtns[0].classList.remove('active');
23 | recentBtns[1].classList.add('active');
24 | recentBtns[2].classList.remove('active');
25 | recentBtns[3].classList.remove('active');
26 |
27 | renderRecent();
28 | });
29 |
30 | recentBtns[2].addEventListener('click', () => {
31 | localStorage.setItem('recentNum', 20);
32 |
33 | recentBtns[0].classList.remove('active');
34 | recentBtns[1].classList.remove('active');
35 | recentBtns[2].classList.add('active');
36 | recentBtns[3].classList.remove('active');
37 |
38 | renderRecent();
39 | });
40 |
41 | recentBtns[3].addEventListener('click', () => {
42 | localStorage.setItem('recentNum', 30);
43 |
44 | recentBtns[0].classList.remove('active');
45 | recentBtns[1].classList.remove('active');
46 | recentBtns[2].classList.remove('active');
47 | recentBtns[3].classList.add('active');
48 |
49 | renderRecent();
50 | });
51 | }
52 |
53 | export default addRecentSettingButtonEvent;
54 |
--------------------------------------------------------------------------------
/src/js/events/buttonEvent/reset.js:
--------------------------------------------------------------------------------
1 | import Doc from '../../utils/doc.js';
2 |
3 | const group = Doc.find('#copy_group');
4 | const resetBtn = Doc.find('#reset_btn');
5 |
6 | export default function addResetBtnEvent() {
7 | resetBtn.addEventListener(
8 | 'click',
9 | () => {
10 | group.value = '';
11 | },
12 | false
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/src/js/events/buttonEvent/setting.js:
--------------------------------------------------------------------------------
1 | import Doc from '../../utils/doc.js';
2 |
3 | export default function addGoSettingButtonEvent() {
4 | const settingButton = Doc.find('.setting');
5 | settingButton.addEventListener('click', () => {
6 | const emojiContainer = Doc.find('.emoji-container');
7 | emojiContainer.setAttribute('style', 'display: none;');
8 |
9 | const footer = Doc.find('.footer');
10 | footer.setAttribute('style', 'display: none;');
11 |
12 | const settingContainer = Doc.find('.setting-container');
13 | settingContainer.setAttribute('style', 'display: block;');
14 | });
15 | }
16 |
--------------------------------------------------------------------------------
/src/js/events/buttonEvent/sizeSetting.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-param-reassign */
2 | import Doc from '../../utils/doc.js';
3 |
4 | const sizeBtns = Doc.findAll('.sizeBtn');
5 |
6 | function setEmojiSize(newSize, emojiSpans) {
7 | emojiSpans.forEach((emoji) => {
8 | const size = emoji.classList.item(1);
9 | if (size !== null) {
10 | emoji.classList.remove(size);
11 | emoji.classList.add(newSize);
12 | }
13 | });
14 | }
15 |
16 | function addSizeSettingButtonEvent() {
17 | const emojiSpans = Doc.findAll('.emoji-span');
18 |
19 | sizeBtns[0].addEventListener('click', () => {
20 | localStorage.setItem('emojiSize', 'small');
21 |
22 | // 버튼 css 변경
23 | sizeBtns[0].classList.add('active');
24 | sizeBtns[1].classList.remove('active');
25 | sizeBtns[2].classList.remove('active');
26 |
27 | // emoji size 조정
28 | setEmojiSize('small', emojiSpans);
29 | });
30 |
31 | sizeBtns[1].addEventListener('click', () => {
32 | localStorage.setItem('emojiSize', 'normal');
33 |
34 | // 버튼 css 변경
35 | sizeBtns[0].classList.remove('active');
36 | sizeBtns[1].classList.add('active');
37 | sizeBtns[2].classList.remove('active');
38 |
39 | // emoji size 조정
40 | setEmojiSize('normal', emojiSpans);
41 | });
42 |
43 | sizeBtns[2].addEventListener('click', () => {
44 | localStorage.setItem('emojiSize', 'big');
45 |
46 | // 버튼 css 변경
47 | sizeBtns[0].classList.remove('active');
48 | sizeBtns[1].classList.remove('active');
49 | sizeBtns[2].classList.add('active');
50 |
51 | // emoji size 조정
52 | setEmojiSize('big', emojiSpans);
53 | });
54 | }
55 |
56 | export default addSizeSettingButtonEvent;
57 |
--------------------------------------------------------------------------------
/src/js/events/buttonEvent/skintone.js:
--------------------------------------------------------------------------------
1 | import Doc from '../../utils/doc.js';
2 |
3 | export default function addSkintoneButtonEvent() {
4 | const skintoneButtonsContainer = Doc.find('.color');
5 |
6 | skintoneButtonsContainer.addEventListener('click', (e) => {
7 | const emojiSpans = Doc.findAll('.emoji-span');
8 |
9 | if (e.target.tagName !== 'IMG') return;
10 |
11 | const color = e.target.parentNode.classList[1];
12 |
13 | emojiSpans.forEach((emoji) => {
14 | const separator = emoji.title.indexOf(':');
15 | if (separator === -1) return;
16 |
17 | if (emoji.title.slice(separator) === `: ${color}`) {
18 | emoji.style.display = '';
19 | } else emoji.style.display = 'none';
20 | });
21 | });
22 | }
23 |
--------------------------------------------------------------------------------
/src/js/events/emojiEvent/autoCopyOff.js:
--------------------------------------------------------------------------------
1 | import Doc from '../../utils/doc.js';
2 | import updateRecent from '../../components/recent/updateRecent.js';
3 |
4 | const groups = Doc.find('.groups');
5 |
6 | function autoCopyOff(e) {
7 | if (e.target.tagName !== 'IMG') return;
8 | const copyGroup = Doc.find('#copy_group');
9 | const content = copyGroup.value;
10 |
11 | copyGroup.value = content.concat(e.target.alt);
12 | updateRecent(e.target.parentElement.title, e.target.alt);
13 | }
14 |
15 | function addAutoCopyOffEvent() {
16 | groups.addEventListener('click', autoCopyOff);
17 | }
18 |
19 | function removeAutoCopyOffEvent() {
20 | groups.removeEventListener('click', autoCopyOff);
21 | }
22 |
23 | export { addAutoCopyOffEvent, removeAutoCopyOffEvent };
24 |
--------------------------------------------------------------------------------
/src/js/events/emojiEvent/autoCopyOn.js:
--------------------------------------------------------------------------------
1 | import Doc from '../../utils/doc.js';
2 | import copy from '../../pages/main/event/copy.js';
3 | import updateRecent from '../../components/recent/updateRecent.js';
4 |
5 | const groups = Doc.find('.groups');
6 |
7 | function autoCopyOn(e) {
8 | if (e.target.tagName !== 'IMG') return;
9 | const copyGroup = Doc.find('#copy_group');
10 | const content = copyGroup.value;
11 |
12 | copyGroup.value = content.concat(e.target.alt);
13 | copy();
14 | updateRecent(e.target.parentElement.title, e.target.alt);
15 | }
16 |
17 | function addAutoCopyOnEvent() {
18 | groups.addEventListener('click', autoCopyOn);
19 | }
20 |
21 | function removeAutoCopyOnEvent() {
22 | groups.removeEventListener('click', autoCopyOn);
23 | }
24 |
25 | export { addAutoCopyOnEvent, removeAutoCopyOnEvent };
26 |
--------------------------------------------------------------------------------
/src/js/events/emojiEvent/index.js:
--------------------------------------------------------------------------------
1 | import { addAutoCopyOnEvent } from './autoCopyOn.js';
2 | import { addAutoCopyOffEvent } from './autoCopyOff.js';
3 |
4 | const emojiEvent = {
5 | addAutoCopyOnEvent,
6 | addAutoCopyOffEvent,
7 | };
8 |
9 | export default emojiEvent;
10 |
--------------------------------------------------------------------------------
/src/js/events/inputEvent/search.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-param-reassign */
2 | import Doc from '../../utils/doc.js';
3 |
4 | export default function addSearchInputEvent() {
5 |
6 | Doc.find('#searchInput').addEventListener('change', (e) => {
7 | const searchInput = e.target.value.toUpperCase();
8 |
9 | const emojiElements = Doc.findAll('.emoji-span');
10 | emojiElements.forEach((emoji) => {
11 | const title = emoji.getAttribute('title');
12 | if (title.toUpperCase().includes(searchInput)) {
13 | emoji.style.display = '';
14 | } else {
15 | emoji.style.display = 'none';
16 | }
17 | });
18 | });
19 | }
20 |
--------------------------------------------------------------------------------
/src/js/pages/main/event/copy.js:
--------------------------------------------------------------------------------
1 | import Doc from '../../../utils/doc.js';
2 |
3 | const group = Doc.find('#copy_group');
4 | const copyBtn = Doc.find('#copy_btn');
5 |
6 | const setCopyBtnComplete = () => {
7 | copyBtn.style.opacity = '0.5';
8 |
9 | setTimeout(() => {
10 | copyBtn.style.opacity = '1.0';
11 | copyBtn.value = 'copied!';
12 | }, 200);
13 | };
14 |
15 | const copy = () => {
16 | navigator.clipboard
17 | .writeText(group.value)
18 | .then(() => {
19 | setCopyBtnComplete();
20 | })
21 | .catch(() => {});
22 | };
23 |
24 | export default copy;
25 |
--------------------------------------------------------------------------------
/src/js/pages/main/event/getEmoji.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-undef */
2 | import Doc from '../../../utils/doc.js';
3 | import renderRecent from '../../../components/recent/renderRecent.js';
4 | import emojis from '../../../../assets/emojis/index.js';
5 |
6 | const attachEmoji = () => {
7 | const containers = Doc.findAll('.emoji-span-container');
8 | const size = localStorage.getItem('emojiSize');
9 | emojis.forEach((emoji) => {
10 | if (window.Worker) {
11 | const worker = new Worker(new URL('../../../../worker.js', import.meta.url));
12 |
13 | worker.postMessage(emoji);
14 |
15 | worker.onmessage = (e) => {
16 |
17 | let category = 0;
18 | switch (e.data[0].category){
19 | case 'skin-tone' :
20 | category = 0; break;
21 | case 'people':
22 | category = 1; break;
23 | case 'nature' :
24 | category = 2; break;
25 | case 'activity' :
26 | category = 3; break;
27 | case 'foodAndDrink' :
28 | category = 4; break;
29 | case 'places' :
30 | category = 5; break;
31 | case 'objects' :
32 | category = 6; break;
33 | case 'symbols' :
34 | category = 7; break;
35 | case 'flags' :
36 | category = 8; break;
37 | }
38 |
39 | e.data.forEach((data) => {
40 | const span = Doc.create('span');
41 | span.setAttribute('class', `emoji-span ${size}`);
42 | span.setAttribute('title', data.name);
43 | span.innerHTML = data.char;
44 |
45 | if (category === 0){
46 | span.setAttribute('style', 'display:none;');
47 | }
48 |
49 | if (category === 1 && data.name.includes('skin-tone')){
50 | span.setAttribute('style', 'display:none;');
51 | }
52 | containers[category].appendChild(span);
53 | });
54 | };
55 | } else {
56 | // console.log('Your browser doesn\'t support web workers.');
57 | }
58 | });
59 | };
60 |
61 | export default function getEmoji() {
62 | return new Promise((resolve) => {
63 |
64 |
65 | attachEmoji();
66 | renderRecent();
67 |
68 | resolve();
69 | });
70 | }
71 |
--------------------------------------------------------------------------------
/src/js/pages/main/view/emojiContainers.js:
--------------------------------------------------------------------------------
1 | import Doc from '../../../utils/doc.js';
2 | import Cons from '../../../utils/const.js';
3 |
4 | export default function makeEmojiContainers() {
5 | const emojiGroup = Doc.find('.emoji-list .groups');
6 | const groupDivs = document.createDocumentFragment();
7 |
8 | Cons.NAV_ICON_LIST.forEach((icon, index) => {
9 | const groupDiv = Doc.create('div');
10 | groupDiv.className = index === 0 ? 'recent-group' : 'group';
11 |
12 | const groupTitle = Doc.create('div');
13 | groupTitle.className = 'group-title';
14 | groupDiv.appendChild(groupTitle);
15 |
16 | const a = Doc.create('a');
17 | a.name = Cons.NAV_NAME_LIST[index];
18 | a.innerHTML = Cons.NAV_TEXT_LIST[index];
19 | groupTitle.appendChild(a);
20 |
21 | const i = Doc.create('i');
22 | i.className = `fas ${icon}`;
23 | a.appendChild(i);
24 |
25 | const emojiContainer = Doc.create('div');
26 | emojiContainer.className = 'emoji-span-container';
27 | if (index !== 1) {
28 | emojiContainer.style.display = 'flex';
29 | emojiContainer.style.width = '100%';
30 | emojiContainer.style.cursor = 'pointer';
31 | }
32 | groupDiv.appendChild(emojiContainer);
33 |
34 | if (index === 1) {
35 | const expression = Doc.create('div');
36 | expression.className = 'expression';
37 | emojiContainer.appendChild(expression);
38 |
39 | const skintone = Doc.create('div');
40 | skintone.className = 'skintone';
41 | emojiContainer.appendChild(skintone);
42 | }
43 |
44 | groupDivs.appendChild(groupDiv);
45 | });
46 |
47 | emojiGroup.appendChild(groupDivs);
48 | }
49 |
--------------------------------------------------------------------------------
/src/js/pages/settings/view/init.js:
--------------------------------------------------------------------------------
1 | import Doc from '../../../utils/doc.js';
2 |
3 | function setSettingButtonsCss() {
4 | const copybtns = Doc.findAll('.autocopyBtn');
5 | const recentBtns = Doc.findAll('.recentBtn');
6 | const sizeBtns = Doc.findAll('.sizeBtn');
7 |
8 | const copySetting = localStorage.getItem('copy');
9 | const recentSetting = localStorage.getItem('recentNum');
10 | const sizeSetting = localStorage.getItem('emojiSize');
11 |
12 | switch (copySetting) {
13 | case 'auto':
14 | copybtns[0].classList.add('active');
15 | break;
16 | case 'manual':
17 | copybtns[1].classList.add('active');
18 | break;
19 | }
20 |
21 | switch (recentSetting) {
22 | case '0':
23 | recentBtns[0].classList.add('active');
24 | break;
25 | case '10':
26 | recentBtns[1].classList.add('active');
27 | break;
28 | case '20':
29 | recentBtns[2].classList.add('active');
30 | break;
31 | case '30':
32 | recentBtns[3].classList.add('active');
33 | break;
34 | }
35 |
36 | switch (sizeSetting) {
37 | case 'small':
38 | sizeBtns[0].classList.add('active');
39 | break;
40 | case 'normal':
41 | sizeBtns[1].classList.add('active');
42 | break;
43 | case 'big':
44 | sizeBtns[2].classList.add('active');
45 | break;
46 | }
47 | }
48 |
49 | export default function initialSetting() {
50 | return new Promise((resolve) => {
51 | // 프로그램 첫 로드 시 Localstorage setting
52 | if (!localStorage.getItem('hasInitialSetting')) {
53 | localStorage.setItem('hasInitialSetting', true);
54 | localStorage.setItem('copy', 'auto');
55 | localStorage.setItem('emojiSize', 'normal');
56 | localStorage.setItem('recentNum', 20);
57 | localStorage.setItem('windowState', 'popup');
58 | }
59 | setSettingButtonsCss();
60 |
61 | resolve();
62 | });
63 | }
64 |
--------------------------------------------------------------------------------
/src/js/utils/const.js:
--------------------------------------------------------------------------------
1 | const Cons = {
2 | NAV_NAME_LIST: [
3 | 'recents',
4 | 'people',
5 | 'nature',
6 | 'foodAndDrink',
7 | 'activity',
8 | 'places',
9 | 'objects',
10 | 'symbols',
11 | 'flags',
12 | ],
13 | NAV_ICON_LIST: [
14 | 'fa-history',
15 | 'fa-smile',
16 | 'fa-paw',
17 | 'fa-utensils',
18 | 'fa-basketball-ball',
19 | 'fa-car',
20 | 'fa-lightbulb',
21 | 'fa-icons',
22 | 'fa-flag',
23 | ],
24 |
25 | NAV_TEXT_LIST: [
26 | 'Recents',
27 | 'People',
28 | 'Nature',
29 | 'Food & Drink',
30 | 'Activity',
31 | 'Places',
32 | 'Objects',
33 | 'Symbols',
34 | 'Flags',
35 | ],
36 | };
37 |
38 | export default Cons;
39 |
--------------------------------------------------------------------------------
/src/js/utils/doc.js:
--------------------------------------------------------------------------------
1 | const Doc = {
2 | find: (selector) => document.querySelector(selector),
3 | findAll: (selector) => document.querySelectorAll(selector),
4 | create: (type) => document.createElement(type),
5 | };
6 |
7 | export default Doc;
8 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import initialSetting from './js/pages/settings/view/init.js';
2 | import makeEmojiContainers from './js/pages/main/view/emojiContainers.js';
3 | import getEmoji from './js/pages/main/event/getEmoji.js';
4 | import makeInitialView from './js/components/index.js';
5 | import addButtonEvents from './js/events/buttonEvent/index.js';
6 | import addSkintoneButtonEvent from './js/events/buttonEvent/skintone.js';
7 | import emojiEvent from './js/events/emojiEvent/index.js';
8 | import addSearchInputEvents from './js/events/inputEvent/search.js';
9 |
10 | function setInit() {
11 | makeInitialView();
12 | initialSetting();
13 | }
14 |
15 | function addEventsRelatedEmoji() {
16 | addSkintoneButtonEvent();
17 | addSearchInputEvents();
18 |
19 | const copySetting = localStorage.getItem('copy');
20 | if (copySetting === 'auto') {
21 | emojiEvent.addAutoCopyOnEvent();
22 | } else if (copySetting === 'manual') {
23 | emojiEvent.addAutoCopyOffEvent();
24 | }
25 | }
26 |
27 | async function setEmoji() {
28 | makeEmojiContainers();
29 | await getEmoji();
30 | addEventsRelatedEmoji();
31 | }
32 |
33 | async function main() {
34 | await setInit();
35 | await setEmoji();
36 | addButtonEvents();
37 | }
38 |
39 | main();
40 |
--------------------------------------------------------------------------------
/src/worker.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-undef
2 | importScripts('./js/dist/twemoji.min.js');
3 |
4 | onmessage = (e) => {
5 | e.data.forEach((emoji) => {
6 | emoji.char = twemoji.parse(emoji.char);
7 | });
8 |
9 | postMessage(e.data);
10 | };
11 |
12 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const HtmlWebpackPlugin = require('html-webpack-plugin');
3 | const CopyPlugin = require('copy-webpack-plugin');
4 |
5 | module.exports = {
6 | entry: {
7 | main: './src/main.js',
8 | },
9 | output: {
10 | filename: './src/[name].js',
11 | path: path.resolve(__dirname, 'build'),
12 | clean: true,
13 | },
14 | module: {
15 | rules: [
16 | {
17 | test: /\.css$/i,
18 | use: ['css-loader'],
19 | },
20 | {
21 | test: /\.(png|svg|jpg|jpeg|gif)$/i,
22 | type: 'asset/resource',
23 | },
24 | {
25 | test: /\.(woff|woff2|eot|ttf|otf)$/i,
26 | type: 'asset/resource',
27 | },
28 | ],
29 | },
30 | plugins: [
31 | new HtmlWebpackPlugin({ template: './src/index.html', filename: 'src/index.html' }),
32 | new CopyPlugin({
33 | patterns: [
34 | { from: './manifest.json' },
35 | { from: './src/js/dist/twemoji.min.js', to: './src/js/dist/twemoji.min.js' },
36 | { from: './src/assets', to: './src/assets' },
37 | ],
38 | }),
39 | ],
40 | };
--------------------------------------------------------------------------------