@devchitchat/chat 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +313 -0
- package/index.js +148 -0
- package/migrate/001-drop-channel-invites.js +3 -0
- package/migrate/002-invite-initial-roles.js +5 -0
- package/migrate/003-dm-channels.js +35 -0
- package/migrate/004-notifications.js +15 -0
- package/migrate/005-uploads.js +21 -0
- package/migrate/006-mention-priority.js +3 -0
- package/migrate/007-push-subscriptions.js +14 -0
- package/migrate/008-messages-channel-seq-index.js +3 -0
- package/migrate/009-message-reactions.js +15 -0
- package/migrate/010-edit-messages.js +7 -0
- package/package.json +51 -0
- package/pages/_error.html +12 -0
- package/pages/_layout.html +31 -0
- package/pages/_layout.js +13 -0
- package/pages/admin/_layout.html +52 -0
- package/pages/admin/_layout.js +8 -0
- package/pages/admin/bots/[userId].js +88 -0
- package/pages/admin/bots/[userId].phtml +89 -0
- package/pages/admin/bots/index.js +41 -0
- package/pages/admin/bots/index.phtml +58 -0
- package/pages/admin/index.js +8 -0
- package/pages/admin/invites/index.js +72 -0
- package/pages/admin/invites/index.phtml +88 -0
- package/pages/admin/users/[userId].js +60 -0
- package/pages/admin/users/[userId].phtml +57 -0
- package/pages/admin/users/index.js +20 -0
- package/pages/admin/users/index.phtml +37 -0
- package/pages/api/uploads/index.js +66 -0
- package/pages/api/user/settings.js +26 -0
- package/pages/auth/signout.js +14 -0
- package/pages/channels/[channelId].js +99 -0
- package/pages/channels/[channelId].phtml +173 -0
- package/pages/index.js +33 -0
- package/pages/invite/[token].js +10 -0
- package/pages/login/index.js +57 -0
- package/pages/login/index.phtml +29 -0
- package/pages/public/client/action-sheet.js +77 -0
- package/pages/public/client/app.js +38 -0
- package/pages/public/client/auth-tabs.js +13 -0
- package/pages/public/client/emoji-data.js +197 -0
- package/pages/public/client/islands/call.js +1770 -0
- package/pages/public/client/islands/sidebar.js +1197 -0
- package/pages/public/client/long-press.js +59 -0
- package/pages/public/client/modal.js +50 -0
- package/pages/public/client/router.js +87 -0
- package/pages/public/client/rtc-peer-manager.js +344 -0
- package/pages/public/client/settings-sync.js +76 -0
- package/pages/public/client/shared/messages.js +147 -0
- package/pages/public/client/swipe-nav.js +98 -0
- package/pages/public/client/theme.js +27 -0
- package/pages/public/client/ws.js +71 -0
- package/pages/public/favicon.ico +0 -0
- package/pages/public/favicon.png +0 -0
- package/pages/public/icon.png +0 -0
- package/pages/public/manifest.json +11 -0
- package/pages/public/sw.js +38 -0
- package/pages/public/themes/base.css +1786 -0
- package/pages/public/themes/dark.css +22 -0
- package/pages/public/themes/forest.css +22 -0
- package/pages/public/themes/light.css +23 -0
- package/pages/public/themes/ocean.css +22 -0
- package/pages/public/themes/rose.css +22 -0
- package/pages/registration/index.js +35 -0
- package/pages/registration/index.phtml +38 -0
- package/pages/uploads/[uploadId]/[filename].js +45 -0
- package/src/adapters/InMemoryAuthRepository.js +74 -0
- package/src/adapters/InMemoryChannelRepository.js +138 -0
- package/src/adapters/InMemoryDeliveryRepository.js +52 -0
- package/src/adapters/InMemoryFileStore.js +53 -0
- package/src/adapters/InMemoryHubRepository.js +85 -0
- package/src/adapters/InMemoryMessageRepository.js +35 -0
- package/src/adapters/InMemoryReactionRepository.js +45 -0
- package/src/adapters/InMemorySearchRepository.js +37 -0
- package/src/adapters/InMemorySignalingRepository.js +35 -0
- package/src/adapters/InMemoryUploadRepository.js +36 -0
- package/src/adapters/InMemoryUserSettingsRepository.js +15 -0
- package/src/adapters/LocalFileStore.js +40 -0
- package/src/adapters/SqliteAuthRepository.js +184 -0
- package/src/adapters/SqliteChannelRepository.js +149 -0
- package/src/adapters/SqliteDeliveryRepository.js +53 -0
- package/src/adapters/SqliteHubRepository.js +99 -0
- package/src/adapters/SqliteMessageRepository.js +90 -0
- package/src/adapters/SqlitePushRepository.js +39 -0
- package/src/adapters/SqliteReactionRepository.js +50 -0
- package/src/adapters/SqliteSearchRepository.js +42 -0
- package/src/adapters/SqliteSignalingRepository.js +50 -0
- package/src/adapters/SqliteUploadRepository.js +34 -0
- package/src/adapters/SqliteUserSettingsRepository.js +23 -0
- package/src/adminAuth.js +25 -0
- package/src/config.js +11 -0
- package/src/context.js +77 -0
- package/src/core/dm.js +10 -0
- package/src/core/mentions.js +27 -0
- package/src/core/messages.js +21 -0
- package/src/core/reactions.js +6 -0
- package/src/core/roles.js +5 -0
- package/src/core/uploads.js +107 -0
- package/src/db/initDb.js +225 -0
- package/src/db/openDb.js +18 -0
- package/src/db/runMigrations.js +45 -0
- package/src/db/transaction.js +11 -0
- package/src/ports/IFileStore.js +34 -0
- package/src/services/AuthService.js +208 -0
- package/src/services/BotService.js +148 -0
- package/src/services/ChannelService.js +176 -0
- package/src/services/DeliveryService.js +28 -0
- package/src/services/HubService.js +133 -0
- package/src/services/MessageService.js +122 -0
- package/src/services/NotificationService.js +45 -0
- package/src/services/PresenceService.js +55 -0
- package/src/services/ReactionService.js +57 -0
- package/src/services/SearchService.js +21 -0
- package/src/services/SignalingService.js +177 -0
- package/src/services/UploadService.js +111 -0
- package/src/services/UserSettingsService.js +30 -0
- package/src/services/WebPushService.js +217 -0
- package/src/util/crypto.js +21 -0
- package/src/util/errors.js +14 -0
- package/src/util/ids.js +3 -0
- package/src/util/logger.js +21 -0
- package/src/ws/ChatServer.js +478 -0
- package/src/ws/handlers/authHandlers.js +152 -0
- package/src/ws/handlers/channelHandlers.js +166 -0
- package/src/ws/handlers/hubHandlers.js +82 -0
- package/src/ws/handlers/messageHandlers.js +88 -0
- package/src/ws/handlers/pushHandlers.js +25 -0
- package/src/ws/handlers/reactionHandlers.js +27 -0
- package/src/ws/handlers/rtcHandlers.js +126 -0
- package/styles.css +22 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* action-sheet.js โ singleton bottom sheet for mobile + iPad.
|
|
3
|
+
*
|
|
4
|
+
* Only one sheet can be open at a time. Dismisses on backdrop tap or swipe-down.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
let backdropEl = null
|
|
8
|
+
let sheetEl = null
|
|
9
|
+
|
|
10
|
+
function ensureDOM() {
|
|
11
|
+
if (backdropEl) return
|
|
12
|
+
|
|
13
|
+
backdropEl = document.createElement('div')
|
|
14
|
+
backdropEl.className = 'action-sheet-backdrop'
|
|
15
|
+
backdropEl.innerHTML = `
|
|
16
|
+
<div class="action-sheet" role="dialog" aria-modal="true">
|
|
17
|
+
<div class="action-sheet-handle"></div>
|
|
18
|
+
<div class="action-sheet-label"></div>
|
|
19
|
+
<div class="action-sheet-items"></div>
|
|
20
|
+
</div>
|
|
21
|
+
`
|
|
22
|
+
document.body.appendChild(backdropEl)
|
|
23
|
+
sheetEl = backdropEl.querySelector('.action-sheet')
|
|
24
|
+
|
|
25
|
+
// Tap backdrop (outside sheet) to dismiss
|
|
26
|
+
backdropEl.addEventListener('click', e => {
|
|
27
|
+
if (e.target === backdropEl) dismiss()
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
// Swipe down to dismiss
|
|
31
|
+
let startY = 0
|
|
32
|
+
sheetEl.addEventListener('touchstart', e => {
|
|
33
|
+
startY = e.touches[0].clientY
|
|
34
|
+
}, { passive: true })
|
|
35
|
+
sheetEl.addEventListener('touchend', e => {
|
|
36
|
+
if (e.changedTouches[0].clientY - startY > 60) dismiss()
|
|
37
|
+
}, { passive: true })
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @param {{ label?: string, items: Array<{ label: string, action?: () => void, danger?: boolean, disabled?: boolean }> }} opts
|
|
42
|
+
*/
|
|
43
|
+
export function showActionSheet({ label, items }) {
|
|
44
|
+
ensureDOM()
|
|
45
|
+
|
|
46
|
+
backdropEl.querySelector('.action-sheet-label').textContent = label ?? ''
|
|
47
|
+
const container = backdropEl.querySelector('.action-sheet-items')
|
|
48
|
+
container.innerHTML = ''
|
|
49
|
+
|
|
50
|
+
for (const item of items) {
|
|
51
|
+
const btn = document.createElement('button')
|
|
52
|
+
btn.className = 'action-sheet-item' + (item.danger ? ' danger' : '')
|
|
53
|
+
btn.textContent = item.label
|
|
54
|
+
btn.disabled = !!item.disabled
|
|
55
|
+
btn.addEventListener('click', () => {
|
|
56
|
+
dismiss()
|
|
57
|
+
item.action?.()
|
|
58
|
+
})
|
|
59
|
+
container.appendChild(btn)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
requestAnimationFrame(() => {
|
|
63
|
+
backdropEl.classList.add('open')
|
|
64
|
+
sheetEl.classList.add('open')
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function dismiss() {
|
|
69
|
+
backdropEl?.classList.remove('open')
|
|
70
|
+
sheetEl?.classList.remove('open')
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Returns the .action-sheet-items container, for callers that build forms inline. */
|
|
74
|
+
export function getItemsContainer() {
|
|
75
|
+
ensureDOM()
|
|
76
|
+
return backdropEl.querySelector('.action-sheet-items')
|
|
77
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* app.js โ boots rdbljs islands and page-level setup.
|
|
3
|
+
*
|
|
4
|
+
* Loaded as <script type="module" src="{{base}}/client/app.js"> from _layout.html.
|
|
5
|
+
* init(window) from rdbljs discovers all [island] elements, imports each
|
|
6
|
+
* module, calls the default export factory with (root, window), and wires
|
|
7
|
+
* up bind(root, scope) so all directives (model=, onclick=, each=, etc.) work.
|
|
8
|
+
*/
|
|
9
|
+
import { init } from '@devchitchat/rdbljs'
|
|
10
|
+
import { getSettings, syncFromServer, patchSettings } from './settings-sync.js'
|
|
11
|
+
import { initSwipeNav } from './swipe-nav.js'
|
|
12
|
+
import { initRouter } from './router.js'
|
|
13
|
+
|
|
14
|
+
const BASE_PATH = window.__BASE_PATH__ ?? ''
|
|
15
|
+
|
|
16
|
+
// On a channel page the intent is always to view the channel โ persist the
|
|
17
|
+
// current channel and ensure mobile shows the chat panel, not the hub panel.
|
|
18
|
+
if (location.pathname.startsWith(`${BASE_PATH}/channels/`)) {
|
|
19
|
+
const channelId = location.pathname.split('/').pop()
|
|
20
|
+
if (channelId) patchSettings({ last_channel_id: channelId, mobile_chat_open: true })
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Apply settings before islands mount (prevent layout flash)
|
|
24
|
+
const settings = getSettings()
|
|
25
|
+
if (window.matchMedia('(max-width: 1024px)').matches && settings.mobile_chat_open === false) {
|
|
26
|
+
document.body.classList.add('sidebar-open')
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
await init(window)
|
|
30
|
+
|
|
31
|
+
initRouter()
|
|
32
|
+
initSwipeNav()
|
|
33
|
+
|
|
34
|
+
// Reconcile with server in background after islands mount
|
|
35
|
+
syncFromServer().then(remoteSettings => {
|
|
36
|
+
if (!remoteSettings || !window.matchMedia('(max-width: 1024px)').matches) return
|
|
37
|
+
document.body.classList.toggle('sidebar-open', remoteSettings.mobile_chat_open === false)
|
|
38
|
+
})
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* auth-tabs.js โ tab switching on the login page (no framework needed).
|
|
3
|
+
*/
|
|
4
|
+
const tabs = document.querySelectorAll('[role="tab"]')
|
|
5
|
+
const panels = document.querySelectorAll('[role="tabpanel"]')
|
|
6
|
+
|
|
7
|
+
tabs.forEach(tab => {
|
|
8
|
+
tab.addEventListener('click', () => {
|
|
9
|
+
const target = tab.dataset.tab
|
|
10
|
+
tabs.forEach(t => t.setAttribute('aria-selected', t.dataset.tab === target ? 'true' : 'false'))
|
|
11
|
+
panels.forEach(p => { p.hidden = p.id !== `panel-${target}` })
|
|
12
|
+
})
|
|
13
|
+
})
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* emoji-data.js โ static emoji dataset (~500 emoji across 9 categories).
|
|
3
|
+
* "Recent" category starts empty and is populated from localStorage at runtime.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const CATEGORIES = [
|
|
7
|
+
{
|
|
8
|
+
id: 'recent',
|
|
9
|
+
label: '๐',
|
|
10
|
+
emoji: [], // populated from localStorage at runtime
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
id: 'smileys',
|
|
14
|
+
label: '๐',
|
|
15
|
+
emoji: [
|
|
16
|
+
'๐','๐','๐','๐','๐','๐
','๐','๐คฃ','โบ๏ธ','๐','๐','๐','๐','๐','๐',
|
|
17
|
+
'๐','๐ฅฐ','๐','๐','๐','๐','๐','๐','๐','๐','๐คช','๐คจ','๐ง','๐ค','๐',
|
|
18
|
+
'๐คฉ','๐ฅณ','๐','๐','๐','๐','๐','๐','๐','โน๏ธ','๐ฃ','๐','๐ซ','๐ฉ','๐ฅบ',
|
|
19
|
+
'๐ข','๐ญ','๐ค','๐ ','๐ก','๐คฌ','๐','๐ฟ','๐','โ ๏ธ','๐ฉ','๐คก','๐น','๐บ','๐ป',
|
|
20
|
+
'๐ฝ','๐พ','๐ค','๐บ','๐ธ','๐น','๐ป','๐ผ','๐ฝ','๐','๐ฟ','๐พ','๐ค','๐ค','๐คญ',
|
|
21
|
+
'๐คซ','๐คฅ','๐ถ','๐','๐','๐ฌ','๐','๐ฏ','๐ฆ','๐ง','๐ฎ','๐ฒ','๐ฅฑ','๐ด','๐คค',
|
|
22
|
+
'๐ช','๐ต','๐ค','๐ฅด','๐คข','๐คฎ','๐คง','๐ฅต','๐ฅถ','๐ฅด','๐ท','๐ค','๐ค','๐ค','๐ค ',
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'people',
|
|
27
|
+
label: '๐',
|
|
28
|
+
emoji: [
|
|
29
|
+
'๐','๐','๐','โ๏ธ','๐ค','๐ค','๐ค','๐ค','๐','๐','๐','๐','๐','โ๏ธ','๐',
|
|
30
|
+
'โ','๐ค','๐๏ธ','๐','๐','๐ค','๐ช','๐ฆพ','๐','โ๏ธ','๐ค','๐','๐','๐คฒ','๐',
|
|
31
|
+
'๐ค','๐ค','โ','๐','๐ค','๐ค','๐','๐
','๐คณ','๐','๐บ','๐ซ','๐ฌ','๐ญ','๐',
|
|
32
|
+
'๐','๐ช','๐จโ๐ฉโ๐ฆ','๐จโ๐ฉโ๐ง','๐ฉโ๐ฆ','๐ฉโ๐ง','๐จโ๐ฆ','๐จโ๐ง','๐ถ','๐ง','๐ฆ','๐ง','๐ง','๐ฑ','๐จ',
|
|
33
|
+
'๐ง','๐ฉ','๐ง','๐ด','๐ต','๐','๐','๐
','๐','๐','๐','๐ง','๐','๐คฆ','๐คท',
|
|
34
|
+
'๐ฎ','๐ต๏ธ','๐','๐ฅท','๐ท','๐คด','๐ธ','๐ณ','๐ฒ','๐ง','๐คต','๐ฐ','๐คฐ','๏ฟฝ๏ฟฝ','๐ผ',
|
|
35
|
+
'๐
','๐คถ','๐ฆธ','๐ฆน','๐ง','๐ง','๐ง','๐ง','๐ง','๐ง','๐ง','๐ง','๐','๐','๐ถ',
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'animals',
|
|
40
|
+
label: '๐พ',
|
|
41
|
+
emoji: [
|
|
42
|
+
'๐ถ','๐ฑ','๐ญ','๐น','๐ฐ','๐ฆ','๐ป','๐ผ','๐จ','๐ฏ','๐ฆ','๐ฎ','๐ท','๐ธ','๐ต',
|
|
43
|
+
'๐','๐','๐','๐','๐ง','๐ฆ','๐ค','๐ฆ','๐ฆ
','๐ฆ','๐ฆ','๐บ','๐','๐ด','๐ฆ',
|
|
44
|
+
'๐','๐','๐ฆ','๐','๐','๐','๐ฆ','๐ฆ','๐ฆ','๐ข','๐','๐ฆ','๐ฆ','๐ฆ','๐',
|
|
45
|
+
'๐ฆ','๐ฆ','๐ฆ','๐ฆ','๐ก','๐ ','๐','๐ฌ','๐ณ','๐','๐ฆ','๐','๐
','๐','๐ฆ',
|
|
46
|
+
'๐ฆ','๐ฆง','๐ฆฃ','๐','๐ฆ','๐ฆ','๐ช','๐ซ','๐ฆ','๐ฆ','๐ฆฌ','๐','๐','๐','๐',
|
|
47
|
+
'๐','๐','๐','๐ฆ','๐','๐ฆ','๐','๐ฉ','๐ฆฎ','๐','๐','๐ฆ','๐ฆค','๐ฆ','๐ฆ',
|
|
48
|
+
'๐ฆข','๐ฆฉ','๐๏ธ','๐','๐ฆ','๐ฆจ','๐ฆก','๐ฆซ','๐ฆฆ','๐ฆฅ','๐','๐','๐ฟ๏ธ','๐ฆ','๐พ',
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 'food',
|
|
53
|
+
label: '๐',
|
|
54
|
+
emoji: [
|
|
55
|
+
'๐','๐','๐ฎ','๐ฏ','๐ฅ','๐ง','๐ฅ','๐ณ','๐ฅ','๐ฒ','๐ฅ','๐ฅซ','๐ง','๐','๐ฅ',
|
|
56
|
+
'๐ฅ','๐ฅจ','๐ง','๐ฅช','๐ญ','๐ฅ','๐','๐','๐ฅฉ','๐ฑ','๐','๐','๐','๐','๐',
|
|
57
|
+
'๐','๐ ','๐ข','๐ฃ','๐ค','๐ฅ','๐ฅฎ','๐ก','๐ฅ','๐ฅ ','๐ฅก','๐ฆช','๐ฆ','๐ง','๐จ',
|
|
58
|
+
'๐ฉ','๐ช','๐','๐ฐ','๐ง','๐ฅง','๐ซ','๐ฌ','๐ญ','๐ฎ','๐ฏ','๐','๐','๐','๐',
|
|
59
|
+
'๐','๐','๐','๐','๐ซ','๐','๐','๐','๐','๐ฅญ','๐ฅฅ','๐ฅ','๐
','๐ซ','๐ง',
|
|
60
|
+
'๐ง
','๐ฅ','๐ฝ','๐ถ๏ธ','๐ฅ','๐ฅฌ','๐ฅฆ','๐ง','๐ฅ','๐ง','๐ฅฏ','๐ฅ','๐','๐ฅ','๐ซ',
|
|
61
|
+
'โ','๐ต','๐ง','๐ฅค','๐บ','๐ป','๐ฅ','๐ท','๐ฅ','๐ธ','๐น','๐ง','๐พ','๐ง','๐ถ',
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: 'activity',
|
|
66
|
+
label: 'โฝ',
|
|
67
|
+
emoji: [
|
|
68
|
+
'โฝ','๐','๐','โพ','๐ฅ','๐พ','๐','๐','๐ฅ','๐ฑ','๐','๐ธ','๐','๐','๐ฅ',
|
|
69
|
+
'๐','๐ช','๐ฅ
','โณ','๐ช','๐น','๐ฃ','๐คฟ','๐ฅ','๐ฅ','๐ฝ','๐น','๐ผ','๐ท','โธ๏ธ',
|
|
70
|
+
'๐ฅ','๐ฟ','โท๏ธ','๐','๐๏ธ','๐คธ','๐คบ','๐คผ','๐คพ','๐๏ธ','๐','๐ง','๐','๐','๐คฝ',
|
|
71
|
+
'๐ฃ','๐ง','๐ต','๐ด','๐','๐ฅ','๐ฅ','๐ฅ','๐
','๐๏ธ','๐ต๏ธ','๐๏ธ','๐ซ','๐๏ธ','๐ช',
|
|
72
|
+
'๐ญ','๐จ','๐ฌ','๐ค','๐ง','๐ผ','๐น','๐ฅ','๐ช','๐ท','๐บ','๐ธ','๐ช','๐ป','๐ฒ',
|
|
73
|
+
'โ๏ธ','๐ฏ','๐ณ','๐ฎ','๐น๏ธ','๐ฐ','๐งฉ','๐ช
','๐ช','๐ช','๐','๐','๐','๐','๐งจ',
|
|
74
|
+
'โจ','๐','๐','๐','๐','๐','๐','๐','๐','๐งง','๐','๐','๐','๐ ','๐ก',
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: 'travel',
|
|
79
|
+
label: '๐',
|
|
80
|
+
emoji: [
|
|
81
|
+
'๐','โ๏ธ','๐ธ','๐','๐ฉ๏ธ','๐ช','๐','๐','๐','๐
','๐','๐','๐','๐','๐',
|
|
82
|
+
'๐','๐','๐','๐','๐','๐','๐๏ธ','๐','๐','๐','๐','๐','๐','๐','๐',
|
|
83
|
+
'๐','๐ป','๐','๐','๐','๐๏ธ','๐ต','๐บ','๐ฒ','๐ด','๐น','๐','๐ฃ๏ธ','๐ค๏ธ','๐ณ๏ธ',
|
|
84
|
+
'๐ข','โด๏ธ','๐ฅ๏ธ','โต','๐ค','๐ถ','๐ฃ','โฝ','๐ฆ','๐ฅ','๐ง','โ','๐ช','โต','๐บ๏ธ',
|
|
85
|
+
'๐งญ','๐','๐','๐','๐','๐๏ธ','โฐ๏ธ','๐','๐ป','๐๏ธ','๐๏ธ','๐๏ธ','๐๏ธ','๐๏ธ','๐๏ธ',
|
|
86
|
+
'๐๏ธ','๐๏ธ','๐๏ธ','๐๏ธ','๐ ','๐ก','๐ข','๐ฃ','๐ค','๐ฅ','๐ฆ','๐จ','๐ฉ','๐ช','๐ซ',
|
|
87
|
+
'๐ฌ','๐ญ','๐ฏ','๐ฐ','๐','๐ผ','๐ฝ','โช','๐','๐','๐','โฉ๏ธ','๐','โฒ','โบ',
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: 'objects',
|
|
92
|
+
label: '๐ก',
|
|
93
|
+
emoji: [
|
|
94
|
+
'๐ฅ','โ
','โ','โ ๏ธ','๐','๐๏ธ','๐','๐','๐','๐','๐จ','๐ช','โ๏ธ','โ๏ธ','๐ ๏ธ',
|
|
95
|
+
'๐ก๏ธ','โ๏ธ','๐ซ','๐ช','๐น','๐ก๏ธ','๐ช','๐ง','๐ช','๐ฉ','โ๏ธ','๐๏ธ','โ๏ธ','๐ฆฏ','๐',
|
|
96
|
+
'โ๏ธ','๐ช','๐งฒ','๐','๐ชซ','๐','๐ก','๐ฆ','๐ฏ๏ธ','๐ช','๐งฏ','๐ข๏ธ','๐ฐ','๐ด','๐ต',
|
|
97
|
+
'๐ถ','๐ท','๐ธ','๐ณ','๐ช','๐น','๐','๐','๐','๐','๐','๐','โ๏ธ','๐๏ธ','๐๏ธ',
|
|
98
|
+
'๐','๐','๐๏ธ','๐๏ธ','๐','๐
','๐๏ธ','๐','๐','๐','๐','๐','๐','๐','๐',
|
|
99
|
+
'๐','๐','๐','๐ท๏ธ','๐ฌ','๐จ๏ธ','๐ญ','๐ฏ๏ธ','๐ข','๐ฃ','๐','๐','๐ฑ','โ๏ธ','๐',
|
|
100
|
+
'๐','๐ ','๐บ','๐ป','๐๏ธ','๐ก','๐ญ','๐ฌ','๐งฌ','๐งซ','๐งช','๐ก๏ธ','๐งฒ','๐','๐',
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: 'symbols',
|
|
105
|
+
label: '๐ฃ',
|
|
106
|
+
emoji: [
|
|
107
|
+
'โค๏ธ','๐งก','๐','๐','๐','๐','๐ค','๐ค','๐ค','๐','โค๏ธโ๐ฅ','โค๏ธโ๐ฉน','โฃ๏ธ','๐',
|
|
108
|
+
'๐','๐','๐','๐','๐','๐','๐','โฎ๏ธ','โ๏ธ','โช๏ธ','๐๏ธ','โธ๏ธ','โก๏ธ','๐ฏ','๐',
|
|
109
|
+
'โฏ๏ธ','โฆ๏ธ','๐','โ','โ','โ','โ','โ','โ','โ','โ','โ','โ','โ','โ','โ',
|
|
110
|
+
'๐','โ๏ธ','๐','โข๏ธ','โฃ๏ธ','๐ด','๐ณ','๐ถ','๐','๐ธ','๐บ','๐ท๏ธ','โด๏ธ','๐','๐ฎ',
|
|
111
|
+
'๐','ใ๏ธ','ใ๏ธ','๐ด','๐ต','๐น','๐ฒ','๐
ฐ๏ธ','๐
ฑ๏ธ','๐','๐','๐
พ๏ธ','๐','โ','โ',
|
|
112
|
+
'โ','โ','๐
','๐','ใฝ๏ธ','โ๏ธ','๐ฑ','๐','๐ฐ','โป๏ธ','โ
','๐ฏ','๐น','โ๏ธ','โณ๏ธ',
|
|
113
|
+
'โ','๐','๐ฏ','๐ ','โ๏ธ','๐','โฟ','๐','๐','๐','๐','๐','โธ๏ธ','โน๏ธ','โบ๏ธ',
|
|
114
|
+
],
|
|
115
|
+
},
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
export const EMOJI_NAMES = {
|
|
119
|
+
'๐': 'grinning face', '๐': 'grinning face with big eyes', '๐': 'grinning face with smiling eyes',
|
|
120
|
+
'๐': 'beaming face with smiling eyes', '๐': 'grinning squinting face', '๐
': 'grinning face with sweat',
|
|
121
|
+
'๐': 'face with tears of joy', '๐คฃ': 'rolling on the floor laughing', 'โบ๏ธ': 'smiling face',
|
|
122
|
+
'๐': 'smiling face with smiling eyes', '๐': 'smiling face with halo', '๐': 'slightly smiling face',
|
|
123
|
+
'๐': 'upside-down face', '๐': 'winking face', '๐': 'relieved face', '๐': 'smiling face with heart-eyes',
|
|
124
|
+
'๐ฅฐ': 'smiling face with hearts', '๐': 'face blowing a kiss', '๐': 'kissing face',
|
|
125
|
+
'๐': 'kissing face with smiling eyes', '๐': 'kissing face with closed eyes', '๐': 'face savoring food',
|
|
126
|
+
'๐': 'face with tongue', '๐': 'squinting face with tongue', '๐': 'winking face with tongue',
|
|
127
|
+
'๐คช': 'zany face', '๐คจ': 'face with raised eyebrow', '๐ง': 'face with monocle', '๐ค': 'nerd face',
|
|
128
|
+
'๐': 'smiling face with sunglasses', '๐คฉ': 'star-struck', '๐ฅณ': 'partying face', '๐': 'smirking face',
|
|
129
|
+
'๐': 'unamused face', '๐': 'disappointed face', '๐': 'pensive face', '๐': 'worried face',
|
|
130
|
+
'๐': 'confused face', '๐': 'slightly frowning face', 'โน๏ธ': 'frowning face', '๐ฃ': 'persevering face',
|
|
131
|
+
'๐': 'confounded face', '๐ซ': 'tired face', '๐ฉ': 'weary face', '๐ฅบ': 'pleading face',
|
|
132
|
+
'๐ข': 'crying face', '๐ญ': 'loudly crying face', '๐ค': 'face with steam from nose',
|
|
133
|
+
'๐ ': 'angry face', '๐ก': 'pouting face', '๐คฌ': 'face with symbols on mouth', '๐': 'smiling face with horns',
|
|
134
|
+
'๐ฟ': 'angry face with horns', '๐': 'skull', 'โ ๏ธ': 'skull and crossbones', '๐ฉ': 'pile of poo',
|
|
135
|
+
'๐คก': 'clown face', '๐น': 'ogre', '๐บ': 'goblin', '๐ป': 'ghost', '๐ฝ': 'alien', '๐พ': 'alien monster',
|
|
136
|
+
'๐ค': 'robot', '๐บ': 'grinning cat', '๐ธ': 'grinning cat with smiling eyes',
|
|
137
|
+
'๐น': 'cat with tears of joy', '๐ป': 'smiling cat with heart-eyes', '๐ผ': 'cat with wry smile',
|
|
138
|
+
'๐ฝ': 'kissing cat', '๐': 'weary cat', '๐ฟ': 'crying cat', '๐พ': 'pouting cat',
|
|
139
|
+
'๐ค': 'hugging face', '๐ค': 'thinking face', '๐คญ': 'face with hand over mouth',
|
|
140
|
+
'๐คซ': 'shushing face', '๐คฅ': 'lying face', '๐ถ': 'face without mouth', '๐': 'neutral face',
|
|
141
|
+
'๐': 'expressionless face', '๐ฌ': 'grimacing face', '๐': 'face with rolling eyes',
|
|
142
|
+
'๐ฏ': 'hushed face', '๐ฆ': 'frowning face with open mouth', '๐ง': 'anguished face',
|
|
143
|
+
'๐ฎ': 'face with open mouth', '๐ฒ': 'astonished face', '๐ฅฑ': 'yawning face', '๐ด': 'sleeping face',
|
|
144
|
+
'๐คค': 'drooling face', '๐ช': 'sleepy face', '๐ต': 'dizzy face', '๐ค': 'zipper-mouth face',
|
|
145
|
+
'๐ฅด': 'woozy face', '๐คข': 'nauseated face', '๐คฎ': 'face vomiting', '๐คง': 'sneezing face',
|
|
146
|
+
'๐ฅต': 'hot face', '๐ฅถ': 'cold face', '๐ท': 'face with medical mask', '๐ค': 'face with thermometer',
|
|
147
|
+
'๐ค': 'face with head-bandage', '๐ค': 'money-mouth face', '๐ค ': 'cowboy hat face',
|
|
148
|
+
'๐': 'thumbs up', '๐': 'thumbs down', '๐': 'ok hand', 'โ๏ธ': 'victory hand',
|
|
149
|
+
'๐ค': 'crossed fingers', '๐ค': 'love-you gesture', '๐ค': 'sign of the horns',
|
|
150
|
+
'๐ค': 'call me hand', '๐': 'backhand index pointing left', '๐': 'backhand index pointing right',
|
|
151
|
+
'๐': 'backhand index pointing up', '๐': 'backhand index pointing down',
|
|
152
|
+
'โ๏ธ': 'index pointing up', 'โ': 'raised hand', '๐ค': 'raised back of hand',
|
|
153
|
+
'๐๏ธ': 'hand with fingers splayed', '๐': 'vulcan salute', '๐': 'waving hand',
|
|
154
|
+
'๐ค': 'call me hand', '๐ช': 'flexed biceps', '๐ฆพ': 'mechanical arm', 'โ๏ธ': 'writing hand',
|
|
155
|
+
'๐ค': 'handshake', '๐': 'raising hands', '๐': 'clapping hands', '๐คฒ': 'palms up together',
|
|
156
|
+
'๐': 'folded hands', '๐ค': 'right-facing fist', '๐ค': 'left-facing fist', 'โ': 'oncoming fist',
|
|
157
|
+
'๐': 'oncoming fist', '๐
': 'nail polish', '๐คณ': 'selfie', '๐': 'woman dancing',
|
|
158
|
+
'๐บ': 'man dancing', '๐': 'trophy', '๐ฅ': 'first place medal', '๐ฅ': 'second place medal',
|
|
159
|
+
'๐ฅ': 'third place medal', '๐
': 'sports medal', '๐ฏ': 'direct hit', '๐': 'party popper',
|
|
160
|
+
'๐': 'confetti ball', '๐': 'balloon', '๐': 'wrapped gift', '๐': 'rocket',
|
|
161
|
+
'โ๏ธ': 'airplane', '๐': 'globe showing europe-africa', '๐': 'globe showing americas',
|
|
162
|
+
'๐': 'globe showing asia-australia', '๐ ': 'house', '๐ฅ': 'fire', 'โ
': 'check mark button',
|
|
163
|
+
'โ': 'cross mark', 'โ ๏ธ': 'warning', '๐': 'key', '๐ก': 'light bulb', '๐ฑ': 'mobile phone',
|
|
164
|
+
'๐ป': 'laptop', '๐ฅ๏ธ': 'desktop computer', '๐จ๏ธ': 'printer', 'โจ๏ธ': 'keyboard', '๐ฑ๏ธ': 'computer mouse',
|
|
165
|
+
'๐ท': 'camera', '๐ธ': 'camera with flash', '๐น': 'video camera', '๐ฅ': 'movie camera',
|
|
166
|
+
'๐': 'telephone receiver', 'โ๏ธ': 'telephone', '๐': 'pager', '๐ ': 'fax machine',
|
|
167
|
+
'๐บ': 'television', '๐ป': 'radio', '๐ญ': 'telescope', '๐ฌ': 'microscope',
|
|
168
|
+
'โค๏ธ': 'red heart', '๐งก': 'orange heart', '๐': 'yellow heart', '๐': 'green heart',
|
|
169
|
+
'๐': 'blue heart', '๐': 'purple heart', '๐ค': 'black heart', '๐ค': 'white heart',
|
|
170
|
+
'๐ค': 'brown heart', '๐': 'broken heart', '๐ฏ': 'hundred points', 'โจ': 'sparkles',
|
|
171
|
+
'โญ': 'star', '๐': 'glowing star', '๐ซ': 'dizzy', '๐': 'crescent moon', 'โ๏ธ': 'sun',
|
|
172
|
+
'โก': 'high voltage', '๐': 'rainbow', '๐': 'water wave', '๐ฅ': 'collision', '๐ถ': 'musical notes',
|
|
173
|
+
'๐ต': 'musical note', '๐': 'muted speaker', '๐': 'bell', '๐': 'bell with slash',
|
|
174
|
+
'๐': 'eyes', '๐ฌ': 'speech balloon', '๐ญ': 'thought balloon', '๐ฏ๏ธ': 'anger symbol',
|
|
175
|
+
'โ': 'exclamation mark', 'โ': 'question mark', 'โผ๏ธ': 'double exclamation mark',
|
|
176
|
+
'๐': 'new button', '๐': 'cool button', '๐': 'up button', '๐': 'on arrow',
|
|
177
|
+
'๐ธ': 'guitar', '๐น': 'musical keyboard', '๐ฅ': 'drum', '๐บ': 'trumpet', '๐ท': 'saxophone',
|
|
178
|
+
'๐๏ธ': 'beach with umbrella', '๐๏ธ': 'snow-capped mountain', '๐': 'volcano',
|
|
179
|
+
'๐ถ': 'dog face', '๐ฑ': 'cat face', '๐ญ': 'mouse face', '๐ฐ': 'rabbit face',
|
|
180
|
+
'๐ฆ': 'fox', '๐ป': 'bear', '๐ผ': 'panda', '๐จ': 'koala', '๐ฏ': 'tiger face',
|
|
181
|
+
'๐ฆ': 'lion', '๐ฎ': 'cow face', '๐ท': 'pig face', '๐ธ': 'frog', '๐ต': 'monkey face',
|
|
182
|
+
'๐': 'see-no-evil monkey', '๐': 'hear-no-evil monkey', '๐': 'speak-no-evil monkey',
|
|
183
|
+
'๐': 'chicken', '๐ง': 'penguin', '๐ฆ': 'bird', '๐ฆ': 'duck', '๐ฆ
': 'eagle',
|
|
184
|
+
'๐ฆ': 'owl', '๐ฆ': 'bat', '๐บ': 'wolf', '๐ด': 'horse face', '๐ฆ': 'unicorn',
|
|
185
|
+
'๐': 'pizza', '๐': 'hamburger', '๐ฎ': 'taco', '๐ฏ': 'burrito', '๐ฅ': 'stuffed flatbread',
|
|
186
|
+
'๐': 'french fries', '๐ญ': 'hot dog', '๐ฟ': 'popcorn', '๐ง': 'salt', '๐ฅ': 'bacon',
|
|
187
|
+
'๐ณ': 'cooking', '๐ฅ': 'egg', '๐ง': 'cheese wedge', '๐ฅ': 'pancakes', '๐ง': 'waffle',
|
|
188
|
+
'๐': 'bread', '๐ฅ': 'croissant', '๐ฅ': 'baguette bread', '๐ฅจ': 'pretzel',
|
|
189
|
+
'๐': 'red apple', '๐': 'tangerine', '๐': 'lemon', '๐': 'banana', '๐': 'watermelon',
|
|
190
|
+
'๐': 'grapes', '๐': 'strawberry', '๐': 'cherries', '๐': 'peach', '๐': 'pineapple',
|
|
191
|
+
'โ': 'hot beverage', '๐ต': 'teacup without handle', '๐ง': 'beverage box', '๐ฅค': 'cup with straw',
|
|
192
|
+
'๐บ': 'beer mug', '๐ป': 'clinking beer mugs', '๐ฅ': 'clinking glasses',
|
|
193
|
+
'๐ท': 'wine glass', '๐ธ': 'cocktail glass', '๐น': 'tropical drink',
|
|
194
|
+
'โฝ': 'soccer ball', '๐': 'basketball', '๐': 'american football', 'โพ': 'baseball',
|
|
195
|
+
'๐พ': 'tennis', '๐': 'volleyball', '๐': 'rugby football', '๐ฑ': 'pool 8 ball',
|
|
196
|
+
'๐': 'ping pong', '๐ธ': 'badminton', '๐ฅ': 'boxing glove', '๐ฅ': 'martial arts uniform',
|
|
197
|
+
}
|