SHA256
WIP: эмодзи-пикер (Telegram-набор) — чекпоинт незавершённой работы
- Эмодзи-пикер: js/components/emoji-picker.js + каталог telegram-emoji-*.js (smileys/people/animals_nature/food_drink/travel_places/activity/objects/ symbols/flags) + 631 ассет в assets/emoji (7.2 МБ). - Интеграция пикера: chat-view.js, app.js, index.html, styles/components.css. - Дев-скрипты генерации превью + THIRD_PARTY_NOTICES. - Работа НЕ завершена (WIP), сохранено как чекпоинт. С origin (+56) пока НЕ мержится — большой мерж будет после завершения, отдельным шагом. - VERSION: client 1.2.263. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -69,7 +69,7 @@ import * as pwaDiagnosticsView from './pages/pwa-diagnostics-view.js';
|
||||
import * as solanaUsersInitView from './pages/solana-users-init-view.js';
|
||||
import * as messagesList from './pages/messages-list.js';
|
||||
import * as contactSearchView from './pages/contact-search-view.js';
|
||||
import * as chatView from './pages/chat-view.js';
|
||||
import * as chatView from './pages/chat-view.js?v=202607152130';
|
||||
import * as userProfileView from './pages/user-profile-view.js';
|
||||
import * as channelsList from './pages/channels-list.js';
|
||||
import * as channelView from './pages/channel-view.js';
|
||||
|
||||
@@ -0,0 +1,263 @@
|
||||
import {
|
||||
TELEGRAM_EMOJI_GROUPS,
|
||||
getTelegramEmojiAssetUrl,
|
||||
getTelegramEmojiPreviewUrl,
|
||||
} from './telegram-emoji-catalog.js?v=202607151545';
|
||||
|
||||
const RECENT_STORAGE_KEY = 'shine-ui-recent-emojis-v1';
|
||||
const MAX_RECENT = 28;
|
||||
const ALL_EMOJI_ITEMS = TELEGRAM_EMOJI_GROUPS.flatMap((group) => group.items);
|
||||
const EMOJI_ASSET_BY_CHAR = new Map(ALL_EMOJI_ITEMS.map((item) => [item.emoji, item]));
|
||||
const TELEGRAM_EMOJI_MATCHER = new RegExp(
|
||||
[...EMOJI_ASSET_BY_CHAR.keys()]
|
||||
.sort((left, right) => right.length - left.length)
|
||||
.map((emoji) => emoji.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&'))
|
||||
.join('|'),
|
||||
'gu',
|
||||
);
|
||||
const DEFAULT_RECENT = ALL_EMOJI_ITEMS.slice(0, 7).map((item) => item.emoji);
|
||||
let activeAnimation = null;
|
||||
|
||||
function loadRecent() {
|
||||
try {
|
||||
const parsed = JSON.parse(localStorage.getItem(RECENT_STORAGE_KEY) || '[]');
|
||||
return Array.isArray(parsed)
|
||||
? parsed.filter((item) => typeof item === 'string' && item).slice(0, MAX_RECENT)
|
||||
: [];
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
function saveRecent(items) {
|
||||
try {
|
||||
localStorage.setItem(RECENT_STORAGE_KEY, JSON.stringify(items.slice(0, MAX_RECENT)));
|
||||
} catch {
|
||||
// Selection remains usable when browser storage is unavailable.
|
||||
}
|
||||
}
|
||||
|
||||
function appendAnimatedAsset(root, item) {
|
||||
const previewUrl = item.previewUrl || getTelegramEmojiPreviewUrl(item.file);
|
||||
const animatedUrl = item.animatedUrl || getTelegramEmojiAssetUrl(item.file);
|
||||
const image = document.createElement('img');
|
||||
image.className = 'telegram-emoji-image';
|
||||
image.alt = '';
|
||||
image.decoding = 'async';
|
||||
image.setAttribute('aria-hidden', 'true');
|
||||
|
||||
let isActive = false;
|
||||
let sourceVersion = 0;
|
||||
|
||||
const setSource = (source) => {
|
||||
const requestedVersion = sourceVersion + 1;
|
||||
sourceVersion = requestedVersion;
|
||||
root.classList.remove('is-error');
|
||||
image.onload = () => {
|
||||
if (requestedVersion !== sourceVersion) return;
|
||||
if (isActive) root.classList.remove('is-loading');
|
||||
};
|
||||
image.onerror = () => {
|
||||
if (requestedVersion !== sourceVersion) return;
|
||||
if (isActive) {
|
||||
isActive = false;
|
||||
root.classList.remove('is-active', 'is-loading');
|
||||
if (activeAnimation?.root === root) activeAnimation = null;
|
||||
setSource(previewUrl);
|
||||
return;
|
||||
}
|
||||
root.classList.add('is-error');
|
||||
image.removeAttribute('src');
|
||||
};
|
||||
image.src = source;
|
||||
};
|
||||
|
||||
const deactivate = () => {
|
||||
isActive = false;
|
||||
root.classList.remove('is-active', 'is-loading', 'is-error');
|
||||
if (activeAnimation?.root === root) activeAnimation = null;
|
||||
setSource(previewUrl);
|
||||
};
|
||||
|
||||
const activate = () => {
|
||||
if (activeAnimation?.root && activeAnimation.root !== root) {
|
||||
activeAnimation.deactivate();
|
||||
}
|
||||
activeAnimation = { root, deactivate };
|
||||
isActive = true;
|
||||
root.classList.add('is-active', 'is-loading');
|
||||
setSource(animatedUrl);
|
||||
};
|
||||
|
||||
const onPointerOver = (event) => {
|
||||
if (event.relatedTarget && root.contains(event.relatedTarget)) return;
|
||||
if (event.pointerType === 'mouse') activate();
|
||||
};
|
||||
|
||||
const onPointerOut = (event) => {
|
||||
if (event.relatedTarget && root.contains(event.relatedTarget)) return;
|
||||
if (event.pointerType === 'mouse') deactivate();
|
||||
};
|
||||
|
||||
const onPointerDown = (event) => {
|
||||
if (event.pointerType === 'mouse') return;
|
||||
root.setPointerCapture?.(event.pointerId);
|
||||
activate();
|
||||
};
|
||||
|
||||
const onPointerEnd = (event) => {
|
||||
if (event.pointerType === 'mouse') return;
|
||||
if (root.hasPointerCapture?.(event.pointerId)) root.releasePointerCapture?.(event.pointerId);
|
||||
deactivate();
|
||||
};
|
||||
|
||||
root.addEventListener('pointerover', onPointerOver);
|
||||
root.addEventListener('pointerout', onPointerOut);
|
||||
root.addEventListener('pointerdown', onPointerDown);
|
||||
root.addEventListener('pointerup', onPointerEnd);
|
||||
root.addEventListener('pointercancel', onPointerEnd);
|
||||
root.addEventListener('lostpointercapture', deactivate);
|
||||
setSource(previewUrl);
|
||||
root.append(image);
|
||||
}
|
||||
|
||||
export function stopAllTelegramEmojiAnimations() {
|
||||
activeAnimation?.deactivate();
|
||||
activeAnimation = null;
|
||||
}
|
||||
|
||||
function createEmojiButton(item, onSelect) {
|
||||
const button = document.createElement('button');
|
||||
button.type = 'button';
|
||||
button.className = 'emoji-picker-item';
|
||||
button.setAttribute('aria-label', `Add ${item.emoji}`);
|
||||
button.title = item.emoji;
|
||||
button.addEventListener('pointerdown', (event) => event.preventDefault());
|
||||
button.addEventListener('click', () => onSelect(item.emoji));
|
||||
|
||||
const preview = document.createElement('span');
|
||||
preview.className = 'emoji-picker-preview';
|
||||
appendAnimatedAsset(preview, item);
|
||||
button.append(preview);
|
||||
return button;
|
||||
}
|
||||
|
||||
export function isTelegramAnimatedEmoji(emoji) {
|
||||
return EMOJI_ASSET_BY_CHAR.has(emoji);
|
||||
}
|
||||
|
||||
export function createTelegramAnimatedEmoji(emoji, { className = '' } = {}) {
|
||||
const item = EMOJI_ASSET_BY_CHAR.get(emoji);
|
||||
const root = document.createElement('span');
|
||||
root.className = `telegram-emoji ${className}`.trim();
|
||||
root.setAttribute('aria-label', emoji);
|
||||
root.setAttribute('role', 'img');
|
||||
|
||||
if (!item) {
|
||||
root.textContent = emoji;
|
||||
return root;
|
||||
}
|
||||
|
||||
appendAnimatedAsset(root, item);
|
||||
return root;
|
||||
}
|
||||
|
||||
export function appendTelegramAnimatedText(root, text, { className = '' } = {}) {
|
||||
const source = String(text || '');
|
||||
let cursor = 0;
|
||||
let found = false;
|
||||
|
||||
TELEGRAM_EMOJI_MATCHER.lastIndex = 0;
|
||||
for (const match of source.matchAll(TELEGRAM_EMOJI_MATCHER)) {
|
||||
const index = Number(match.index || 0);
|
||||
if (index > cursor) root.append(document.createTextNode(source.slice(cursor, index)));
|
||||
root.append(createTelegramAnimatedEmoji(match[0], { className }));
|
||||
cursor = index + match[0].length;
|
||||
found = true;
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
root.textContent = source;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cursor < source.length) root.append(document.createTextNode(source.slice(cursor)));
|
||||
return true;
|
||||
}
|
||||
|
||||
export function createEmojiPicker({ onSelect }) {
|
||||
const root = document.createElement('section');
|
||||
root.className = 'emoji-picker';
|
||||
root.setAttribute('aria-label', 'Emoji picker');
|
||||
|
||||
const recentSection = document.createElement('section');
|
||||
recentSection.className = 'emoji-picker-section emoji-picker-recent';
|
||||
const recentTitle = document.createElement('strong');
|
||||
recentTitle.className = 'emoji-picker-section-title';
|
||||
recentTitle.textContent = 'Recent';
|
||||
const recentGrid = document.createElement('div');
|
||||
recentGrid.className = 'emoji-picker-grid';
|
||||
recentSection.append(recentTitle, recentGrid);
|
||||
|
||||
const categoryTabs = document.createElement('div');
|
||||
categoryTabs.className = 'emoji-picker-tabs';
|
||||
categoryTabs.setAttribute('role', 'tablist');
|
||||
|
||||
const categorySection = document.createElement('section');
|
||||
categorySection.className = 'emoji-picker-section';
|
||||
const categoryTitle = document.createElement('strong');
|
||||
categoryTitle.className = 'emoji-picker-section-title';
|
||||
const categoryGrid = document.createElement('div');
|
||||
categoryGrid.className = 'emoji-picker-grid';
|
||||
categorySection.append(categoryTitle, categoryGrid);
|
||||
|
||||
let activeGroup = TELEGRAM_EMOJI_GROUPS[0];
|
||||
const tabs = new Map();
|
||||
|
||||
const rememberAndSelect = (emoji) => {
|
||||
const recent = [emoji, ...loadRecent().filter((item) => item !== emoji)];
|
||||
saveRecent(recent);
|
||||
renderRecent();
|
||||
onSelect?.(emoji);
|
||||
};
|
||||
|
||||
const renderRecent = () => {
|
||||
const recentItems = (loadRecent().length ? loadRecent() : DEFAULT_RECENT)
|
||||
.map((emoji) => EMOJI_ASSET_BY_CHAR.get(emoji))
|
||||
.filter(Boolean);
|
||||
stopAllTelegramEmojiAnimations();
|
||||
recentGrid.replaceChildren(...recentItems.map((item) => createEmojiButton(item, rememberAndSelect)));
|
||||
};
|
||||
|
||||
const renderGroup = () => {
|
||||
categoryTitle.textContent = activeGroup.label;
|
||||
stopAllTelegramEmojiAnimations();
|
||||
categoryGrid.replaceChildren(...activeGroup.items.map((item) => createEmojiButton(item, rememberAndSelect)));
|
||||
tabs.forEach((tab, groupId) => {
|
||||
const active = groupId === activeGroup.id;
|
||||
tab.classList.toggle('is-active', active);
|
||||
tab.setAttribute('aria-selected', String(active));
|
||||
});
|
||||
};
|
||||
|
||||
TELEGRAM_EMOJI_GROUPS.forEach((group) => {
|
||||
const tab = document.createElement('button');
|
||||
tab.type = 'button';
|
||||
tab.className = 'emoji-picker-tab';
|
||||
tab.textContent = group.icon;
|
||||
tab.title = group.label;
|
||||
tab.setAttribute('aria-label', group.label);
|
||||
tab.setAttribute('role', 'tab');
|
||||
tab.addEventListener('click', () => {
|
||||
activeGroup = group;
|
||||
renderGroup();
|
||||
});
|
||||
tabs.set(group.id, tab);
|
||||
categoryTabs.append(tab);
|
||||
});
|
||||
|
||||
root.append(recentSection, categoryTabs, categorySection);
|
||||
renderRecent();
|
||||
renderGroup();
|
||||
return root;
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
export const TELEGRAM_EMOJI_GROUP_ACTIVITY = {
|
||||
"id": "activity",
|
||||
"label": "Активности",
|
||||
"icon": "🎉",
|
||||
"items": [
|
||||
{
|
||||
"file": "Activity/1st Place Medal.webp",
|
||||
"emoji": "🥇"
|
||||
},
|
||||
{
|
||||
"file": "Activity/2nd Place Medal.webp",
|
||||
"emoji": "🥈"
|
||||
},
|
||||
{
|
||||
"file": "Activity/3rd Place Medal.webp",
|
||||
"emoji": "🥉"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Admission Tickets.webp",
|
||||
"emoji": "🎟️"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Artist Palette.webp",
|
||||
"emoji": "🎨"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Balloon.webp",
|
||||
"emoji": "🎈"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Basketball.webp",
|
||||
"emoji": "🏀"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Christmas Tree.webp",
|
||||
"emoji": "🎄"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Confetti Ball.webp",
|
||||
"emoji": "🎊"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Crystal Ball.webp",
|
||||
"emoji": "🔮"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Firecracker.webp",
|
||||
"emoji": "🧨"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Fireworks.webp",
|
||||
"emoji": "🎆"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Jack O Lantern.webp",
|
||||
"emoji": "🎃"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Magic Wand.webp",
|
||||
"emoji": "🪄"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Military Medal.webp",
|
||||
"emoji": "🎖️"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Mirror Ball.webp",
|
||||
"emoji": "🪩"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Party Popper.webp",
|
||||
"emoji": "🎉"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Performing Arts.webp",
|
||||
"emoji": "🎭"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Soccer Ball.webp",
|
||||
"emoji": "⚽"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Sparkler.webp",
|
||||
"emoji": "🎇"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Sparkles.webp",
|
||||
"emoji": "✨"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Sports Medal.webp",
|
||||
"emoji": "🏅"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Ticket.webp",
|
||||
"emoji": "🎫"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Trophy.webp",
|
||||
"emoji": "🏆"
|
||||
},
|
||||
{
|
||||
"file": "Activity/Video Game.webp",
|
||||
"emoji": "🎮"
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@@ -0,0 +1,488 @@
|
||||
export const TELEGRAM_EMOJI_GROUP_ANIMALS_NATURE = {
|
||||
"id": "animals-and-nature",
|
||||
"label": "Природа и животные",
|
||||
"icon": "🌿",
|
||||
"items": [
|
||||
{
|
||||
"file": "Animals and Nature/Ant.webp",
|
||||
"emoji": "🐜"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Baby Chick.webp",
|
||||
"emoji": "🐤"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Bat.webp",
|
||||
"emoji": "🦇"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Bear.webp",
|
||||
"emoji": "🐻"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Beetle.webp",
|
||||
"emoji": "🪲"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Bird.webp",
|
||||
"emoji": "🐦"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Bison.webp",
|
||||
"emoji": "🦬"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Black Cat.webp",
|
||||
"emoji": "🐈⬛"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Blossom.webp",
|
||||
"emoji": "🌼"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Bouquet.webp",
|
||||
"emoji": "💐"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Bug.webp",
|
||||
"emoji": "🐛"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Butterfly.webp",
|
||||
"emoji": "🦋"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cactus.webp",
|
||||
"emoji": "🌵"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cat Face.webp",
|
||||
"emoji": "🐱"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cat.webp",
|
||||
"emoji": "🐈"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cherry Blossom.webp",
|
||||
"emoji": "🌸"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Chicken.webp",
|
||||
"emoji": "🐔"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cloud With Lightning And Rain.webp",
|
||||
"emoji": "⛈️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cloud With Lightning.webp",
|
||||
"emoji": "🌩️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cloud With Rain.webp",
|
||||
"emoji": "🌧️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cloud With Snow.webp",
|
||||
"emoji": "🌨️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cloud.webp",
|
||||
"emoji": "☁️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cockroach.webp",
|
||||
"emoji": "🪳"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cow.webp",
|
||||
"emoji": "🐄"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Cricket.webp",
|
||||
"emoji": "🦗"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Deciduous Tree.webp",
|
||||
"emoji": "🌳"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Deer.webp",
|
||||
"emoji": "🦌"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Dog Face.webp",
|
||||
"emoji": "🐶"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Dove.webp",
|
||||
"emoji": "🕊️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Duck.webp",
|
||||
"emoji": "🦆"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Evergreen Tree.webp",
|
||||
"emoji": "🌲"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Fire.webp",
|
||||
"emoji": "🔥"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/First Quarter Moon Face.webp",
|
||||
"emoji": "🌛"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/First Quarter Moon.webp",
|
||||
"emoji": "🌓"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Fish.webp",
|
||||
"emoji": "🐟"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Flamingo.webp",
|
||||
"emoji": "🦩"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Four Leaf Clover.webp",
|
||||
"emoji": "🍀"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Fox.webp",
|
||||
"emoji": "🦊"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Frog.webp",
|
||||
"emoji": "🐸"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Front Facing Baby Chick.webp",
|
||||
"emoji": "🐥"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Full Moon Face.webp",
|
||||
"emoji": "🌝"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Full Moon.webp",
|
||||
"emoji": "🌕"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Giraffe.webp",
|
||||
"emoji": "🦒"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Glowing Star.webp",
|
||||
"emoji": "🌟"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Gorilla.webp",
|
||||
"emoji": "🦍"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Hamster.webp",
|
||||
"emoji": "🐹"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Hatching Chick.webp",
|
||||
"emoji": "🐣"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Hedgehog.webp",
|
||||
"emoji": "🦔"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Herb.webp",
|
||||
"emoji": "🌿"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Hibiscus.webp",
|
||||
"emoji": "🌺"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/High Voltage.webp",
|
||||
"emoji": "⚡"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Honeybee.webp",
|
||||
"emoji": "🐝"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Horse Face.webp",
|
||||
"emoji": "🐴"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Horse.webp",
|
||||
"emoji": "🐎"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Kangaroo.webp",
|
||||
"emoji": "🦘"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Koala.webp",
|
||||
"emoji": "🐨"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Lady Beetle.webp",
|
||||
"emoji": "🐞"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Last Quarter Moon Face.webp",
|
||||
"emoji": "🌜"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Last Quarter Moon.webp",
|
||||
"emoji": "🌗"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Leopard.webp",
|
||||
"emoji": "🐆"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Lion.webp",
|
||||
"emoji": "🦁"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Llama.webp",
|
||||
"emoji": "🦙"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Lobster.webp",
|
||||
"emoji": "🦞"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Microbe.webp",
|
||||
"emoji": "🦠"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Monkey Face.webp",
|
||||
"emoji": "🐵"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Mosquito.webp",
|
||||
"emoji": "🦟"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Mouse Face.webp",
|
||||
"emoji": "🐭"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/New Moon Face.webp",
|
||||
"emoji": "🌚"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/New Moon.webp",
|
||||
"emoji": "🌑"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Octopus.webp",
|
||||
"emoji": "🐙"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Owl.webp",
|
||||
"emoji": "🦉"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Ox.webp",
|
||||
"emoji": "🐂"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Palm Tree.webp",
|
||||
"emoji": "🌴"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Panda.webp",
|
||||
"emoji": "🐼"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Parrot.webp",
|
||||
"emoji": "🦜"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Paw Prints.webp",
|
||||
"emoji": "🐾"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Penguin.webp",
|
||||
"emoji": "🐧"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Pig Face.webp",
|
||||
"emoji": "🐷"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Pig Nose.webp",
|
||||
"emoji": "🐽"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Polar Bear.webp",
|
||||
"emoji": "🐻❄️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Rabbit Face.webp",
|
||||
"emoji": "🐰"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Rabbit.webp",
|
||||
"emoji": "🐇"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Raccoon.webp",
|
||||
"emoji": "🦝"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Rainbow.webp",
|
||||
"emoji": "🌈"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Rose.webp",
|
||||
"emoji": "🌹"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Rosette.webp",
|
||||
"emoji": "🏵️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Sauropod.webp",
|
||||
"emoji": "🦕"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Seal.webp",
|
||||
"emoji": "🦭"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Seedling.webp",
|
||||
"emoji": "🌱"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Shamrock.webp",
|
||||
"emoji": "☘️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Shrimp.webp",
|
||||
"emoji": "🦐"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Snail.webp",
|
||||
"emoji": "🐌"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Snake.webp",
|
||||
"emoji": "🐍"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Snowflake.webp",
|
||||
"emoji": "❄️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Snowman Without Snow.webp",
|
||||
"emoji": "⛄"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Snowman.webp",
|
||||
"emoji": "☃️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Spider Web.webp",
|
||||
"emoji": "🕸️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Spider.webp",
|
||||
"emoji": "🕷️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Spouting Whale.webp",
|
||||
"emoji": "🐳"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Squid.webp",
|
||||
"emoji": "🦑"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Star.webp",
|
||||
"emoji": "⭐"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Sun Behind Cloud.webp",
|
||||
"emoji": "⛅"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Sun Behind Large Cloud.webp",
|
||||
"emoji": "🌥️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Sun Behind Rain Cloud.webp",
|
||||
"emoji": "🌦️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Sun Behind Small Cloud.webp",
|
||||
"emoji": "🌤️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Sun With Face.webp",
|
||||
"emoji": "🌞"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Sun.webp",
|
||||
"emoji": "☀️"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Swan.webp",
|
||||
"emoji": "🦢"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/T Rex.webp",
|
||||
"emoji": "🦖"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Tiger Face.webp",
|
||||
"emoji": "🐯"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Tiger.webp",
|
||||
"emoji": "🐅"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Tropical Fish.webp",
|
||||
"emoji": "🐠"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Tulip.webp",
|
||||
"emoji": "🌷"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Turkey.webp",
|
||||
"emoji": "🦃"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Turtle.webp",
|
||||
"emoji": "🐢"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Unicorn.webp",
|
||||
"emoji": "🦄"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Waning Crescent Moon.webp",
|
||||
"emoji": "🌘"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Waxing Crescent Moon.webp",
|
||||
"emoji": "🌒"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Waxing Gibbous Moon.webp",
|
||||
"emoji": "🌔"
|
||||
},
|
||||
{
|
||||
"file": "Animals and Nature/Zebra.webp",
|
||||
"emoji": "🦓"
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
import { TELEGRAM_EMOJI_GROUP_ACTIVITY } from './telegram-emoji-activity.js?v=202607151545';
|
||||
import { TELEGRAM_EMOJI_GROUP_ANIMALS_NATURE } from './telegram-emoji-animals_nature.js?v=202607151545';
|
||||
import { TELEGRAM_EMOJI_GROUP_FLAGS } from './telegram-emoji-flags.js?v=202607151545';
|
||||
import { TELEGRAM_EMOJI_GROUP_FOOD_DRINK } from './telegram-emoji-food_drink.js?v=202607151545';
|
||||
import { TELEGRAM_EMOJI_GROUP_OBJECTS } from './telegram-emoji-objects.js?v=202607151545';
|
||||
import { TELEGRAM_EMOJI_GROUP_PEOPLE } from './telegram-emoji-people.js?v=202607151545';
|
||||
import { TELEGRAM_EMOJI_GROUP_SMILEYS } from './telegram-emoji-smileys.js?v=202607151545';
|
||||
import { TELEGRAM_EMOJI_GROUP_SYMBOLS } from './telegram-emoji-symbols.js?v=202607151545';
|
||||
import { TELEGRAM_EMOJI_GROUP_TRAVEL_PLACES } from './telegram-emoji-travel_places.js?v=202607151545';
|
||||
|
||||
const TELEGRAM_EMOJI_ASSET_BASE_URL = 'https://raw.githubusercontent.com/Tarikul-Islam-Anik/Telegram-Animated-Emojis/main/';
|
||||
const TELEGRAM_EMOJI_PREVIEW_BASE_URL = '/assets/emoji/telegram-previews/';
|
||||
|
||||
function getTelegramEmojiName(file) {
|
||||
return String(file || '').split('/').pop()?.replace(/\.webp$/i, '') || '';
|
||||
}
|
||||
|
||||
function withPreviewUrls(group) {
|
||||
return {
|
||||
...group,
|
||||
items: group.items.map((item) => ({
|
||||
...item,
|
||||
name: item.name || getTelegramEmojiName(item.file),
|
||||
previewUrl: getTelegramEmojiPreviewUrl(item.file),
|
||||
animatedUrl: getTelegramEmojiAssetUrl(item.file),
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
export const TELEGRAM_EMOJI_GROUPS = [
|
||||
TELEGRAM_EMOJI_GROUP_SMILEYS,
|
||||
TELEGRAM_EMOJI_GROUP_PEOPLE,
|
||||
TELEGRAM_EMOJI_GROUP_ANIMALS_NATURE,
|
||||
TELEGRAM_EMOJI_GROUP_FOOD_DRINK,
|
||||
TELEGRAM_EMOJI_GROUP_TRAVEL_PLACES,
|
||||
TELEGRAM_EMOJI_GROUP_ACTIVITY,
|
||||
TELEGRAM_EMOJI_GROUP_OBJECTS,
|
||||
TELEGRAM_EMOJI_GROUP_SYMBOLS,
|
||||
TELEGRAM_EMOJI_GROUP_FLAGS,
|
||||
].map(withPreviewUrls);
|
||||
|
||||
export function getTelegramEmojiAssetUrl(file) {
|
||||
return `${TELEGRAM_EMOJI_ASSET_BASE_URL}${file.split('/').map((part) => encodeURIComponent(part)).join('/')}`;
|
||||
}
|
||||
|
||||
export function getTelegramEmojiPreviewUrl(file) {
|
||||
return `${TELEGRAM_EMOJI_PREVIEW_BASE_URL}${String(file || '').replace(/\.webp$/i, '.png').split('/').map((part) => encodeURIComponent(part)).join('/')}`;
|
||||
}
|
||||
|
||||
export { TELEGRAM_EMOJI_ASSET_BASE_URL };
|
||||
@@ -0,0 +1,295 @@
|
||||
export const TELEGRAM_EMOJI_GROUP_FLAGS = {
|
||||
"id": "flags",
|
||||
"label": "Флаги",
|
||||
"icon": "🏳️",
|
||||
"items": [
|
||||
{
|
||||
"file": "Flags/Black Flag.webp",
|
||||
"emoji": "🏴"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Chequered Flag.webp",
|
||||
"emoji": "🏁"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Argentina.webp",
|
||||
"emoji": "🇦🇷"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Armenia.webp",
|
||||
"emoji": "🇦🇲"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Austria.webp",
|
||||
"emoji": "🇦🇹"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Bahamas.webp",
|
||||
"emoji": "🇧🇸"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Belarus.webp",
|
||||
"emoji": "🇧🇾"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Belgium.webp",
|
||||
"emoji": "🇧🇪"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Benin.webp",
|
||||
"emoji": "🇧🇯"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Brazil.webp",
|
||||
"emoji": "🇧🇷"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Bulgaria.webp",
|
||||
"emoji": "🇧🇬"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Burkina Faso.webp",
|
||||
"emoji": "🇧🇫"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Cameroon.webp",
|
||||
"emoji": "🇨🇲"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Chad.webp",
|
||||
"emoji": "🇹🇩"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag China.webp",
|
||||
"emoji": "🇨🇳"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Cote Divoire.webp",
|
||||
"emoji": "🇨🇮"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Croatia.webp",
|
||||
"emoji": "🇭🇷"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Czechia.webp",
|
||||
"emoji": "🇨🇿"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Djibouti.webp",
|
||||
"emoji": "🇩🇯"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Equatorial Guinea.webp",
|
||||
"emoji": "🇬🇶"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Estonia.webp",
|
||||
"emoji": "🇪🇪"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag France.webp",
|
||||
"emoji": "🇫🇷"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Gabon.webp",
|
||||
"emoji": "🇬🇦"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Germany.webp",
|
||||
"emoji": "🇩🇪"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Ghana.webp",
|
||||
"emoji": "🇬🇭"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Guinea Bissau.webp",
|
||||
"emoji": "🇬🇼"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Guinea.webp",
|
||||
"emoji": "🇬🇳"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Hungary.webp",
|
||||
"emoji": "🇭🇺"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag India.webp",
|
||||
"emoji": "🇮🇳"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Indonesia.webp",
|
||||
"emoji": "🇮🇩"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Ireland.webp",
|
||||
"emoji": "🇮🇪"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Italy.webp",
|
||||
"emoji": "🇮🇹"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Japan.webp",
|
||||
"emoji": "🇯🇵"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Jordan.webp",
|
||||
"emoji": "🇯🇴"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Lithuania.webp",
|
||||
"emoji": "🇱🇹"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Luxembourg.webp",
|
||||
"emoji": "🇱🇺"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Madagascar.webp",
|
||||
"emoji": "🇲🇬"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Mali.webp",
|
||||
"emoji": "🇲🇱"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Monaco.webp",
|
||||
"emoji": "🇲🇨"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Morocco.webp",
|
||||
"emoji": "🇲🇦"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Mozambique.webp",
|
||||
"emoji": "🇲🇿"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Myanmar Burma.webp",
|
||||
"emoji": "🇲🇲"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Netherlands.webp",
|
||||
"emoji": "🇳🇱"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Nigeria.webp",
|
||||
"emoji": "🇳🇬"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Palestinian Territories.webp",
|
||||
"emoji": "🇵🇸"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Peru.webp",
|
||||
"emoji": "🇵🇪"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Philippines.webp",
|
||||
"emoji": "🇵🇭"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Poland.webp",
|
||||
"emoji": "🇵🇱"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Romania.webp",
|
||||
"emoji": "🇷🇴"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Russia.webp",
|
||||
"emoji": "🇷🇺"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Sao Tome Principe.webp",
|
||||
"emoji": "🇸🇹"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Saudi Arabia.webp",
|
||||
"emoji": "🇸🇦"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Senegal.webp",
|
||||
"emoji": "🇸🇳"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Sierra Leone.webp",
|
||||
"emoji": "🇸🇱"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Singapore.webp",
|
||||
"emoji": "🇸🇬"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Sint Maarten.webp",
|
||||
"emoji": "🇸🇽"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Somalia.webp",
|
||||
"emoji": "🇸🇴"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag South Korea.webp",
|
||||
"emoji": "🇰🇷"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag South Sudan.webp",
|
||||
"emoji": "🇸🇸"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Spain.webp",
|
||||
"emoji": "🇪🇸"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Sudan.webp",
|
||||
"emoji": "🇸🇩"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Ukraine.webp",
|
||||
"emoji": "🇺🇦"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag United Arab Emirates.webp",
|
||||
"emoji": "🇦🇪"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag United Kingdom.webp",
|
||||
"emoji": "🇬🇧"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag United States.webp",
|
||||
"emoji": "🇺🇸"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Uzbekistan.webp",
|
||||
"emoji": "🇺🇿"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Vietnam.webp",
|
||||
"emoji": "🇻🇳"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Western Sahara.webp",
|
||||
"emoji": "🇪🇭"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Flag Yemen.webp",
|
||||
"emoji": "🇾🇪"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Pirate Flag.webp",
|
||||
"emoji": "🏴☠️"
|
||||
},
|
||||
{
|
||||
"file": "Flags/Triangular Flag.webp",
|
||||
"emoji": "🚩"
|
||||
},
|
||||
{
|
||||
"file": "Flags/White Flag.webp",
|
||||
"emoji": "🏳️"
|
||||
}
|
||||
]
|
||||
};
|
||||
@@ -0,0 +1,200 @@
|
||||
export const TELEGRAM_EMOJI_GROUP_FOOD_DRINK = {
|
||||
"id": "food-and-drink",
|
||||
"label": "Еда и напитки",
|
||||
"icon": "🍓",
|
||||
"items": [
|
||||
{
|
||||
"file": "Food and Drink/Baby Bottle.webp",
|
||||
"emoji": "🍼"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Banana.webp",
|
||||
"emoji": "🍌"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Bento Box.webp",
|
||||
"emoji": "🍱"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Beverage Box.webp",
|
||||
"emoji": "🧃"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Birthday Cake.webp",
|
||||
"emoji": "🎂"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Bottle With Popping Cork.webp",
|
||||
"emoji": "🍾"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Bubble Tea.webp",
|
||||
"emoji": "🧋"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Canned Food.webp",
|
||||
"emoji": "🥫"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Chocolate Bar.webp",
|
||||
"emoji": "🍫"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Clinking Glasses.webp",
|
||||
"emoji": "🥂"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Cocktail Glass.webp",
|
||||
"emoji": "🍸"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Cookie.webp",
|
||||
"emoji": "🍪"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Cooking.webp",
|
||||
"emoji": "🍳"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Cup With Straw.webp",
|
||||
"emoji": "🥤"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Cupcake.webp",
|
||||
"emoji": "🧁"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Custard.webp",
|
||||
"emoji": "🍮"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Dango.webp",
|
||||
"emoji": "🍡"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Doughnut.webp",
|
||||
"emoji": "🍩"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Fish Cake With Swirl.webp",
|
||||
"emoji": "🍥"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Fork And Knife With Plate.webp",
|
||||
"emoji": "🍽️"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/French Fries.webp",
|
||||
"emoji": "🍟"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Glass Of Milk.webp",
|
||||
"emoji": "🥛"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Hamburger.webp",
|
||||
"emoji": "🍔"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Hot Beverage.webp",
|
||||
"emoji": "☕"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Hot Dog.webp",
|
||||
"emoji": "🌭"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Lollipop.webp",
|
||||
"emoji": "🍭"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Mate.webp",
|
||||
"emoji": "🧉"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Meat On Bone.webp",
|
||||
"emoji": "🍖"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Oden.webp",
|
||||
"emoji": "🍢"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Pancakes.webp",
|
||||
"emoji": "🥞"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Pie.webp",
|
||||
"emoji": "🥧"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Pizza.webp",
|
||||
"emoji": "🍕"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Popcorn.webp",
|
||||
"emoji": "🍿"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Poultry Leg.webp",
|
||||
"emoji": "🍗"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Pouring Liquid.webp",
|
||||
"emoji": "🫗"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Pretzel.webp",
|
||||
"emoji": "🥨"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Rice Ball.webp",
|
||||
"emoji": "🍙"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Rice Cracker.webp",
|
||||
"emoji": "🍘"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Sandwich.webp",
|
||||
"emoji": "🥪"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Shortcake.webp",
|
||||
"emoji": "🍰"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Soft Ice Cream.webp",
|
||||
"emoji": "🍦"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Strawberry.webp",
|
||||
"emoji": "🍓"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Stuffed Flatbread.webp",
|
||||
"emoji": "🥙"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Sushi.webp",
|
||||
"emoji": "🍣"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Taco.webp",
|
||||
"emoji": "🌮"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Tropical Drink.webp",
|
||||
"emoji": "🍹"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Tumbler Glass.webp",
|
||||
"emoji": "🥃"
|
||||
},
|
||||
{
|
||||
"file": "Food and Drink/Wine Glass.webp",
|
||||
"emoji": "🍷"
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@@ -0,0 +1,280 @@
|
||||
export const TELEGRAM_EMOJI_GROUP_OBJECTS = {
|
||||
"id": "objects",
|
||||
"label": "Предметы",
|
||||
"icon": "💡",
|
||||
"items": [
|
||||
{
|
||||
"file": "Objects/Abacus.webp",
|
||||
"emoji": "🧮"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Ballot Box With Ballot.webp",
|
||||
"emoji": "🗳️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Bar Chart.webp",
|
||||
"emoji": "📊"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Bomb.webp",
|
||||
"emoji": "💣"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Books.webp",
|
||||
"emoji": "📚"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Briefcase.webp",
|
||||
"emoji": "💼"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Card Index Dividers.webp",
|
||||
"emoji": "🗂️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Chart Decreasing.webp",
|
||||
"emoji": "📉"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Chart Increasing.webp",
|
||||
"emoji": "📈"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Clapper Board.webp",
|
||||
"emoji": "🎬"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Coffin.webp",
|
||||
"emoji": "⚰️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Coin.webp",
|
||||
"emoji": "🪙"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Crown.webp",
|
||||
"emoji": "👑"
|
||||
},
|
||||
{
|
||||
"file": "Objects/File Folder.webp",
|
||||
"emoji": "📁"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Gem Stone.webp",
|
||||
"emoji": "💎"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Graduation Cap.webp",
|
||||
"emoji": "🎓"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Handbag.webp",
|
||||
"emoji": "👜"
|
||||
},
|
||||
{
|
||||
"file": "Objects/High Heeled Shoe.webp",
|
||||
"emoji": "👠"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Hourglass Done.webp",
|
||||
"emoji": "⌛"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Hourglass Not Done.webp",
|
||||
"emoji": "⏳"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Identification Card.webp",
|
||||
"emoji": "🪪"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Inbox Tray.webp",
|
||||
"emoji": "📥"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Incoming Envelope.webp",
|
||||
"emoji": "📨"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Key.webp",
|
||||
"emoji": "🔑"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Keyboard.webp",
|
||||
"emoji": "⌨️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Laptop.webp",
|
||||
"emoji": "💻"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Light Bulb.webp",
|
||||
"emoji": "💡"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Locked With Key.webp",
|
||||
"emoji": "🔐"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Luggage.webp",
|
||||
"emoji": "🧳"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Magnifying Glass Tilted Left.webp",
|
||||
"emoji": "🔍"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Magnifying Glass Tilted Right.webp",
|
||||
"emoji": "🔎"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Megaphone.webp",
|
||||
"emoji": "📣"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Memo.webp",
|
||||
"emoji": "📝"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Microphone.webp",
|
||||
"emoji": "🎤"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Microscope.webp",
|
||||
"emoji": "🔬"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Military Helmet.webp",
|
||||
"emoji": "🪖"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Mobile Phone With Arrow.webp",
|
||||
"emoji": "📲"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Mobile Phone.webp",
|
||||
"emoji": "📱"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Money Bag.webp",
|
||||
"emoji": "💰"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Money With Wings.webp",
|
||||
"emoji": "💸"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Musical Note.webp",
|
||||
"emoji": "🎵"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Musical Notes.webp",
|
||||
"emoji": "🎶"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Newspaper.webp",
|
||||
"emoji": "📰"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Old Key.webp",
|
||||
"emoji": "🗝️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Open Book.webp",
|
||||
"emoji": "📖"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Outbox Tray.webp",
|
||||
"emoji": "📤"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Pencil.webp",
|
||||
"emoji": "✏️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Pill.webp",
|
||||
"emoji": "💊"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Printer.webp",
|
||||
"emoji": "🖨️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Purse.webp",
|
||||
"emoji": "👛"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Reminder Ribbon.webp",
|
||||
"emoji": "🎗️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Roll Of Paper.webp",
|
||||
"emoji": "🧻"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Shopping Bags.webp",
|
||||
"emoji": "🛍️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Shopping Cart.webp",
|
||||
"emoji": "🛒"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Soap.webp",
|
||||
"emoji": "🧼"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Sponge.webp",
|
||||
"emoji": "🧽"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Stethoscope.webp",
|
||||
"emoji": "🩺"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Studio Microphone.webp",
|
||||
"emoji": "🎙️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Syringe.webp",
|
||||
"emoji": "💉"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Tear Off Calendar.webp",
|
||||
"emoji": "📆"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Telephone Receiver.webp",
|
||||
"emoji": "📞"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Telephone.webp",
|
||||
"emoji": "☎️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Telescope.webp",
|
||||
"emoji": "🔭"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Television.webp",
|
||||
"emoji": "📺"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Test Tube.webp",
|
||||
"emoji": "🧪"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Thermometer.webp",
|
||||
"emoji": "🌡️"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Toolbox.webp",
|
||||
"emoji": "🧰"
|
||||
},
|
||||
{
|
||||
"file": "Objects/Top Hat.webp",
|
||||
"emoji": "🎩"
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@@ -0,0 +1,360 @@
|
||||
export const TELEGRAM_EMOJI_GROUP_PEOPLE = {
|
||||
"id": "people",
|
||||
"label": "Люди",
|
||||
"icon": "🧑",
|
||||
"items": [
|
||||
{
|
||||
"file": "People/Baby.webp",
|
||||
"emoji": "👶"
|
||||
},
|
||||
{
|
||||
"file": "People/Backhand Index Pointing Down.webp",
|
||||
"emoji": "👇"
|
||||
},
|
||||
{
|
||||
"file": "People/Backhand Index Pointing Left.webp",
|
||||
"emoji": "👈"
|
||||
},
|
||||
{
|
||||
"file": "People/Backhand Index Pointing Right.webp",
|
||||
"emoji": "👉"
|
||||
},
|
||||
{
|
||||
"file": "People/Backhand Index Pointing Up.webp",
|
||||
"emoji": "👆"
|
||||
},
|
||||
{
|
||||
"file": "People/Biting Lip.webp",
|
||||
"emoji": "🫦"
|
||||
},
|
||||
{
|
||||
"file": "People/Bone.webp",
|
||||
"emoji": "🦴"
|
||||
},
|
||||
{
|
||||
"file": "People/Bust In Silhouette.webp",
|
||||
"emoji": "👤"
|
||||
},
|
||||
{
|
||||
"file": "People/Busts In Silhouette.webp",
|
||||
"emoji": "👥"
|
||||
},
|
||||
{
|
||||
"file": "People/Call Me Hand.webp",
|
||||
"emoji": "🤙"
|
||||
},
|
||||
{
|
||||
"file": "People/Clapping Hands.webp",
|
||||
"emoji": "👏"
|
||||
},
|
||||
{
|
||||
"file": "People/Crossed Fingers.webp",
|
||||
"emoji": "🤞"
|
||||
},
|
||||
{
|
||||
"file": "People/Ear With Hearing Aid.webp",
|
||||
"emoji": "🦻"
|
||||
},
|
||||
{
|
||||
"file": "People/Ear.webp",
|
||||
"emoji": "👂"
|
||||
},
|
||||
{
|
||||
"file": "People/Eyes.webp",
|
||||
"emoji": "👀"
|
||||
},
|
||||
{
|
||||
"file": "People/Family Man Woman Girl Boy.webp",
|
||||
"emoji": "👨👩👧👦"
|
||||
},
|
||||
{
|
||||
"file": "People/Flexed Biceps.webp",
|
||||
"emoji": "💪"
|
||||
},
|
||||
{
|
||||
"file": "People/Folded Hands.webp",
|
||||
"emoji": "🙏"
|
||||
},
|
||||
{
|
||||
"file": "People/Foot.webp",
|
||||
"emoji": "🦶"
|
||||
},
|
||||
{
|
||||
"file": "People/Footprints.webp",
|
||||
"emoji": "👣"
|
||||
},
|
||||
{
|
||||
"file": "People/Hand With Fingers Splayed.webp",
|
||||
"emoji": "🖐️"
|
||||
},
|
||||
{
|
||||
"file": "People/Hand With Index Finger And Thumb Crossed.webp",
|
||||
"emoji": "🫰"
|
||||
},
|
||||
{
|
||||
"file": "People/Handshake.webp",
|
||||
"emoji": "🤝"
|
||||
},
|
||||
{
|
||||
"file": "People/Heart Hands.webp",
|
||||
"emoji": "🫶"
|
||||
},
|
||||
{
|
||||
"file": "People/Index Pointing At The Viewer.webp",
|
||||
"emoji": "🫵"
|
||||
},
|
||||
{
|
||||
"file": "People/Index Pointing Up.webp",
|
||||
"emoji": "☝️"
|
||||
},
|
||||
{
|
||||
"file": "People/Left Facing Fist.webp",
|
||||
"emoji": "🤛"
|
||||
},
|
||||
{
|
||||
"file": "People/Leftwards Hand.webp",
|
||||
"emoji": "🫲"
|
||||
},
|
||||
{
|
||||
"file": "People/Leg.webp",
|
||||
"emoji": "🦵"
|
||||
},
|
||||
{
|
||||
"file": "People/Love You Gesture.webp",
|
||||
"emoji": "🤟"
|
||||
},
|
||||
{
|
||||
"file": "People/Man Dancing.webp",
|
||||
"emoji": "🕺"
|
||||
},
|
||||
{
|
||||
"file": "People/Man Facepalming.webp",
|
||||
"emoji": "🤦♂️"
|
||||
},
|
||||
{
|
||||
"file": "People/Man Health Worker.webp",
|
||||
"emoji": "👨⚕️"
|
||||
},
|
||||
{
|
||||
"file": "People/Man Police Officer.webp",
|
||||
"emoji": "👮♂️"
|
||||
},
|
||||
{
|
||||
"file": "People/Man Shrugging.webp",
|
||||
"emoji": "🤷♂️"
|
||||
},
|
||||
{
|
||||
"file": "People/Man Teacher.webp",
|
||||
"emoji": "👨🏫"
|
||||
},
|
||||
{
|
||||
"file": "People/Man Technologist.webp",
|
||||
"emoji": "👨💻"
|
||||
},
|
||||
{
|
||||
"file": "People/Man Vampire.webp",
|
||||
"emoji": "🧛♂️"
|
||||
},
|
||||
{
|
||||
"file": "People/Man Zombie.webp",
|
||||
"emoji": "🧟♂️"
|
||||
},
|
||||
{
|
||||
"file": "People/Mechanical Arm.webp",
|
||||
"emoji": "🦾"
|
||||
},
|
||||
{
|
||||
"file": "People/Mechanical Leg.webp",
|
||||
"emoji": "🦿"
|
||||
},
|
||||
{
|
||||
"file": "People/Middle Finger.webp",
|
||||
"emoji": "🖕"
|
||||
},
|
||||
{
|
||||
"file": "People/Mouth.webp",
|
||||
"emoji": "👄"
|
||||
},
|
||||
{
|
||||
"file": "People/Mrs Claus.webp",
|
||||
"emoji": "🤶"
|
||||
},
|
||||
{
|
||||
"file": "People/Mx Claus.webp",
|
||||
"emoji": "🧑🎄"
|
||||
},
|
||||
{
|
||||
"file": "People/Nail Polish.webp",
|
||||
"emoji": "💅"
|
||||
},
|
||||
{
|
||||
"file": "People/Nose.webp",
|
||||
"emoji": "👃"
|
||||
},
|
||||
{
|
||||
"file": "People/Ok Hand.webp",
|
||||
"emoji": "👌"
|
||||
},
|
||||
{
|
||||
"file": "People/Old Woman.webp",
|
||||
"emoji": "👵"
|
||||
},
|
||||
{
|
||||
"file": "People/Oncoming Fist.webp",
|
||||
"emoji": "👊"
|
||||
},
|
||||
{
|
||||
"file": "People/Open Hands.webp",
|
||||
"emoji": "👐"
|
||||
},
|
||||
{
|
||||
"file": "People/Palm Down Hand.webp",
|
||||
"emoji": "🫳"
|
||||
},
|
||||
{
|
||||
"file": "People/Palm Up Hand.webp",
|
||||
"emoji": "🫴"
|
||||
},
|
||||
{
|
||||
"file": "People/Palms Up Together.webp",
|
||||
"emoji": "🤲"
|
||||
},
|
||||
{
|
||||
"file": "People/People Hugging.webp",
|
||||
"emoji": "🫂"
|
||||
},
|
||||
{
|
||||
"file": "People/Person Facepalming.webp",
|
||||
"emoji": "🤦"
|
||||
},
|
||||
{
|
||||
"file": "People/Person Shrugging.webp",
|
||||
"emoji": "🤷"
|
||||
},
|
||||
{
|
||||
"file": "People/Pinched Fingers.webp",
|
||||
"emoji": "🤌"
|
||||
},
|
||||
{
|
||||
"file": "People/Pinching Hand.webp",
|
||||
"emoji": "🤏"
|
||||
},
|
||||
{
|
||||
"file": "People/Pregnant Woman.webp",
|
||||
"emoji": "🤰"
|
||||
},
|
||||
{
|
||||
"file": "People/Raised Back Of Hand.webp",
|
||||
"emoji": "🤚"
|
||||
},
|
||||
{
|
||||
"file": "People/Raised Fist.webp",
|
||||
"emoji": "✊"
|
||||
},
|
||||
{
|
||||
"file": "People/Raised Hand.webp",
|
||||
"emoji": "✋"
|
||||
},
|
||||
{
|
||||
"file": "People/Raising Hands.webp",
|
||||
"emoji": "🙌"
|
||||
},
|
||||
{
|
||||
"file": "People/Right Facing Fist.webp",
|
||||
"emoji": "🤜"
|
||||
},
|
||||
{
|
||||
"file": "People/Rightwards Hand.webp",
|
||||
"emoji": "🫱"
|
||||
},
|
||||
{
|
||||
"file": "People/Santa Claus.webp",
|
||||
"emoji": "🎅"
|
||||
},
|
||||
{
|
||||
"file": "People/Sign Of The Horns.webp",
|
||||
"emoji": "🤘"
|
||||
},
|
||||
{
|
||||
"file": "People/Speaking Head.webp",
|
||||
"emoji": "🗣️"
|
||||
},
|
||||
{
|
||||
"file": "People/Technologist.webp",
|
||||
"emoji": "🧑💻"
|
||||
},
|
||||
{
|
||||
"file": "People/Thumbs Down.webp",
|
||||
"emoji": "👎"
|
||||
},
|
||||
{
|
||||
"file": "People/Thumbs Up.webp",
|
||||
"emoji": "👍"
|
||||
},
|
||||
{
|
||||
"file": "People/Tongue.webp",
|
||||
"emoji": "👅"
|
||||
},
|
||||
{
|
||||
"file": "People/Tooth.webp",
|
||||
"emoji": "🦷"
|
||||
},
|
||||
{
|
||||
"file": "People/Vampire.webp",
|
||||
"emoji": "🧛"
|
||||
},
|
||||
{
|
||||
"file": "People/Victory Hand.webp",
|
||||
"emoji": "✌️"
|
||||
},
|
||||
{
|
||||
"file": "People/Vulcan Salute.webp",
|
||||
"emoji": "🖖"
|
||||
},
|
||||
{
|
||||
"file": "People/Waving Hand.webp",
|
||||
"emoji": "👋"
|
||||
},
|
||||
{
|
||||
"file": "People/Woman Dancing.webp",
|
||||
"emoji": "💃"
|
||||
},
|
||||
{
|
||||
"file": "People/Woman Facepalming.webp",
|
||||
"emoji": "🤦♀️"
|
||||
},
|
||||
{
|
||||
"file": "People/Woman Health Worker.webp",
|
||||
"emoji": "👩⚕️"
|
||||
},
|
||||
{
|
||||
"file": "People/Woman Police Officer.webp",
|
||||
"emoji": "👮♀️"
|
||||
},
|
||||
{
|
||||
"file": "People/Woman Shrugging.webp",
|
||||
"emoji": "🤷♀️"
|
||||
},
|
||||
{
|
||||
"file": "People/Woman Technologist.webp",
|
||||
"emoji": "👩💻"
|
||||
},
|
||||
{
|
||||
"file": "People/Woman Vampire.webp",
|
||||
"emoji": "🧛♀️"
|
||||
},
|
||||
{
|
||||
"file": "People/Woman Zombie.webp",
|
||||
"emoji": "🧟♀️"
|
||||
},
|
||||
{
|
||||
"file": "People/Writing Hand.webp",
|
||||
"emoji": "✍️"
|
||||
},
|
||||
{
|
||||
"file": "People/Zombie.webp",
|
||||
"emoji": "🧟"
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@@ -0,0 +1,503 @@
|
||||
export const TELEGRAM_EMOJI_GROUP_SMILEYS = {
|
||||
"id": "smileys",
|
||||
"label": "Смайлы",
|
||||
"icon": "🙂",
|
||||
"items": [
|
||||
{
|
||||
"file": "Smileys/Alien Monster.webp",
|
||||
"emoji": "👾"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Alien.webp",
|
||||
"emoji": "👽"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Angry Face With Horns.webp",
|
||||
"emoji": "👿"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Angry Face.webp",
|
||||
"emoji": "😠"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Anguished Face.webp",
|
||||
"emoji": "😧"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Anxious Face With Sweat.webp",
|
||||
"emoji": "😰"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Astonished Face.webp",
|
||||
"emoji": "😲"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Beaming Face With Smiling Eyes.webp",
|
||||
"emoji": "😁"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Cat With Tears Of Joy.webp",
|
||||
"emoji": "😹"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Cat With Wry Smile.webp",
|
||||
"emoji": "😼"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Clown Face.webp",
|
||||
"emoji": "🤡"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Cold Face.webp",
|
||||
"emoji": "🥶"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Confounded Face.webp",
|
||||
"emoji": "😖"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Confused Face.webp",
|
||||
"emoji": "😕"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Cowboy Hat Face.webp",
|
||||
"emoji": "🤠"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Crying Cat.webp",
|
||||
"emoji": "😿"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Crying Face.webp",
|
||||
"emoji": "😢"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Disappointed Face.webp",
|
||||
"emoji": "😞"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Disguised Face.webp",
|
||||
"emoji": "🥸"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Dizzy Face.webp",
|
||||
"emoji": "😵"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Dotted Line Face.webp",
|
||||
"emoji": "🫥"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Downcast Face With Sweat.webp",
|
||||
"emoji": "😓"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Drooling Face.webp",
|
||||
"emoji": "🤤"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Exploding Head.webp",
|
||||
"emoji": "🤯"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Expressionless Face.webp",
|
||||
"emoji": "😑"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face Blowing A Kiss.webp",
|
||||
"emoji": "😘"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face Exhaling.webp",
|
||||
"emoji": "😮💨"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face Holding Back Tears.webp",
|
||||
"emoji": "🥹"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face In Clouds.webp",
|
||||
"emoji": "😶🌫️"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face Savoring Food.webp",
|
||||
"emoji": "😋"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face Screaming In Fear.webp",
|
||||
"emoji": "😱"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face Vomiting.webp",
|
||||
"emoji": "🤮"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Diagonal Mouth.webp",
|
||||
"emoji": "🫤"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Hand Over Mouth.webp",
|
||||
"emoji": "🤭"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Head Bandage.webp",
|
||||
"emoji": "🤕"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Medical Mask.webp",
|
||||
"emoji": "😷"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Monocle.webp",
|
||||
"emoji": "🧐"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Open Eyes And Hand Over Mouth.webp",
|
||||
"emoji": "🫢"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Open Mouth.webp",
|
||||
"emoji": "😮"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Peeking Eye.webp",
|
||||
"emoji": "🫣"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Raised Eyebrow.webp",
|
||||
"emoji": "🤨"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Rolling Eyes.webp",
|
||||
"emoji": "🙄"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Spiral Eyes.webp",
|
||||
"emoji": "😵💫"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Steam From Nose.webp",
|
||||
"emoji": "😤"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Symbols On Mouth.webp",
|
||||
"emoji": "🤬"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Tears Of Joy.webp",
|
||||
"emoji": "😂"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Thermometer.webp",
|
||||
"emoji": "🤒"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face With Tongue.webp",
|
||||
"emoji": "😛"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Face Without Mouth.webp",
|
||||
"emoji": "😶"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Fearful Face.webp",
|
||||
"emoji": "😨"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Flushed Face.webp",
|
||||
"emoji": "😳"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Frowning Face With Open Mouth.webp",
|
||||
"emoji": "😦"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Frowning Face.webp",
|
||||
"emoji": "☹️"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Ghost.webp",
|
||||
"emoji": "👻"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Goblin.webp",
|
||||
"emoji": "👺"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Grimacing Face.webp",
|
||||
"emoji": "😬"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Grinning Cat With Smiling Eyes.webp",
|
||||
"emoji": "😸"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Grinning Cat.webp",
|
||||
"emoji": "😺"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Grinning Face With Big Eyes.webp",
|
||||
"emoji": "😃"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Grinning Face With Smiling Eyes.webp",
|
||||
"emoji": "😄"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Grinning Face With Sweat.webp",
|
||||
"emoji": "😅"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Grinning Face.webp",
|
||||
"emoji": "😀"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Grinning Squinting Face.webp",
|
||||
"emoji": "😆"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Hear No Evil Monkey.webp",
|
||||
"emoji": "🙉"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Hot Face.webp",
|
||||
"emoji": "🥵"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Hugging Face.webp",
|
||||
"emoji": "🤗"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Hushed Face.webp",
|
||||
"emoji": "😯"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Kissing Cat.webp",
|
||||
"emoji": "😽"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Kissing Face With Closed Eyes.webp",
|
||||
"emoji": "😚"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Kissing Face.webp",
|
||||
"emoji": "😗"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Loudly Crying Face.webp",
|
||||
"emoji": "😭"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Lying Face.webp",
|
||||
"emoji": "🤥"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Melting Face.webp",
|
||||
"emoji": "🫠"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Money Mouth Face.webp",
|
||||
"emoji": "🤑"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Nauseated Face.webp",
|
||||
"emoji": "🤢"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Nerd Face.webp",
|
||||
"emoji": "🤓"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Neutral Face.webp",
|
||||
"emoji": "😐"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Ogre.webp",
|
||||
"emoji": "👹"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Partying Face.webp",
|
||||
"emoji": "🥳"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Pensive Face.webp",
|
||||
"emoji": "😔"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Persevering Face.webp",
|
||||
"emoji": "😣"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Pile Of Poo.webp",
|
||||
"emoji": "💩"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Pleading Face.webp",
|
||||
"emoji": "🥺"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Pouting Cat.webp",
|
||||
"emoji": "😾"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Pouting Face.webp",
|
||||
"emoji": "😡"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Relieved Face.webp",
|
||||
"emoji": "😌"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Robot.webp",
|
||||
"emoji": "🤖"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Rolling On The Floor Laughing.webp",
|
||||
"emoji": "🤣"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Sad But Relieved Face.webp",
|
||||
"emoji": "😥"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Saluting Face.webp",
|
||||
"emoji": "🫡"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/See No Evil Monkey.webp",
|
||||
"emoji": "🙈"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Shushing Face.webp",
|
||||
"emoji": "🤫"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Skull And Crossbones.webp",
|
||||
"emoji": "☠️"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Skull.webp",
|
||||
"emoji": "💀"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Sleeping Face.webp",
|
||||
"emoji": "😴"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Sleepy Face.webp",
|
||||
"emoji": "😪"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Slightly Frowning Face.webp",
|
||||
"emoji": "🙁"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Slightly Smiling Face.webp",
|
||||
"emoji": "🙂"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Smiling Cat With Heart Eyes.webp",
|
||||
"emoji": "😻"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Smiling Face With Halo.webp",
|
||||
"emoji": "😇"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Smiling Face With Hearts.webp",
|
||||
"emoji": "🥰"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Smiling Face With Horns.webp",
|
||||
"emoji": "😈"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Smiling Face With Smiling Eyes.webp",
|
||||
"emoji": "😊"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Smiling Face With Sunglasses.webp",
|
||||
"emoji": "😎"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Smiling Face With Tear.webp",
|
||||
"emoji": "🥲"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Smiling Face.webp",
|
||||
"emoji": "☺️"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Smirking Face.webp",
|
||||
"emoji": "😏"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Sneezing Face.webp",
|
||||
"emoji": "🤧"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Speak No Evil Monkey.webp",
|
||||
"emoji": "🙊"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Squinting Face With Tongue.webp",
|
||||
"emoji": "😝"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Star Struck.webp",
|
||||
"emoji": "🤩"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Thinking Face.webp",
|
||||
"emoji": "🤔"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Tired Face.webp",
|
||||
"emoji": "😫"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Unamused Face.webp",
|
||||
"emoji": "😒"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Upside Down Face.webp",
|
||||
"emoji": "🙃"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Weary Cat.webp",
|
||||
"emoji": "🙀"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Weary Face.webp",
|
||||
"emoji": "😩"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Winking Face With Tongue.webp",
|
||||
"emoji": "😜"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Winking Face.webp",
|
||||
"emoji": "😉"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Woozy Face.webp",
|
||||
"emoji": "🥴"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Worried Face.webp",
|
||||
"emoji": "😟"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Yawning Face.webp",
|
||||
"emoji": "🥱"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Zany Face.webp",
|
||||
"emoji": "🤪"
|
||||
},
|
||||
{
|
||||
"file": "Smileys/Zipper Mouth Face.webp",
|
||||
"emoji": "🤐"
|
||||
}
|
||||
]
|
||||
};
|
||||
@@ -0,0 +1,283 @@
|
||||
export const TELEGRAM_EMOJI_GROUP_SYMBOLS = {
|
||||
"id": "symbols",
|
||||
"label": "Символы",
|
||||
"icon": "❤️",
|
||||
"items": [
|
||||
{
|
||||
"file": "Symbols/Anger Symbol.webp",
|
||||
"emoji": "💢"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Aquarius.webp",
|
||||
"emoji": "♒"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Aries.webp",
|
||||
"emoji": "♈"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Baby Symbol.webp",
|
||||
"emoji": "🚼"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Baggage Claim.webp",
|
||||
"emoji": "🛄"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Beating Heart.webp",
|
||||
"emoji": "💓"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Black Heart.webp",
|
||||
"emoji": "🖤"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Blue Heart.webp",
|
||||
"emoji": "💙"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Broken Heart.webp",
|
||||
"emoji": "💔"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Brown Heart.webp",
|
||||
"emoji": "🤎"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Cancer.webp",
|
||||
"emoji": "♋"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Capricorn.webp",
|
||||
"emoji": "♑"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Check Box With Check.webp",
|
||||
"emoji": "☑️"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Check Mark Button.webp",
|
||||
"emoji": "✅"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Check Mark.webp",
|
||||
"emoji": "✔️"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Collision.webp",
|
||||
"emoji": "💥"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Cool Button.webp",
|
||||
"emoji": "🆒"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Cross Mark.webp",
|
||||
"emoji": "❌"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Currency Exchange.webp",
|
||||
"emoji": "💱"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Customs.webp",
|
||||
"emoji": "🛃"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Dizzy.webp",
|
||||
"emoji": "💫"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Double Exclamation Mark.webp",
|
||||
"emoji": "‼️"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Exclamation Mark.webp",
|
||||
"emoji": "❗"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Exclamation Question Mark.webp",
|
||||
"emoji": "⁉️"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Free Button.webp",
|
||||
"emoji": "🆓"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Gemini.webp",
|
||||
"emoji": "♊"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Green Heart.webp",
|
||||
"emoji": "💚"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Growing Heart.webp",
|
||||
"emoji": "💗"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Heart Decoration.webp",
|
||||
"emoji": "💟"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Heart Exclamation.webp",
|
||||
"emoji": "❣️"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Heart On Fire.webp",
|
||||
"emoji": "❤️🔥"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Heart With Arrow.webp",
|
||||
"emoji": "💘"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Heart With Ribbon.webp",
|
||||
"emoji": "💝"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Hundred Points.webp",
|
||||
"emoji": "💯"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Kiss Mark.webp",
|
||||
"emoji": "💋"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Left Luggage.webp",
|
||||
"emoji": "🛅"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Leo.webp",
|
||||
"emoji": "♌"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Libra.webp",
|
||||
"emoji": "♎"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Love Letter.webp",
|
||||
"emoji": "💌"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Mending Heart.webp",
|
||||
"emoji": "❤️🩹"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Mens Room.webp",
|
||||
"emoji": "🚹"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/New Button.webp",
|
||||
"emoji": "🆕"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/No One Under Eighteen.webp",
|
||||
"emoji": "🔞"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Ok Button.webp",
|
||||
"emoji": "🆗"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Ophiuchus.webp",
|
||||
"emoji": "⛎"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Orange Heart.webp",
|
||||
"emoji": "🧡"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Passport Control.webp",
|
||||
"emoji": "🛂"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Pisces.webp",
|
||||
"emoji": "♓"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Purple Heart.webp",
|
||||
"emoji": "💜"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Question Mark.webp",
|
||||
"emoji": "❓"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Red Heart.webp",
|
||||
"emoji": "❤️"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Revolving Hearts.webp",
|
||||
"emoji": "💞"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Right Anger Bubble.webp",
|
||||
"emoji": "🗯️"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Sagittarius.webp",
|
||||
"emoji": "♐"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Scorpio.webp",
|
||||
"emoji": "♏"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Sparkling Heart.webp",
|
||||
"emoji": "💖"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Speech Balloon.webp",
|
||||
"emoji": "💬"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Taurus.webp",
|
||||
"emoji": "♉"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Thought Balloon.webp",
|
||||
"emoji": "💭"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Top Arrow.webp",
|
||||
"emoji": "🔝"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Two Hearts.webp",
|
||||
"emoji": "💕"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Up Button.webp",
|
||||
"emoji": "🆙"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Virgo.webp",
|
||||
"emoji": "♍"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/White Exclamation Mark.webp",
|
||||
"emoji": "❕"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/White Heart.webp",
|
||||
"emoji": "🤍"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/White Question Mark.webp",
|
||||
"emoji": "❔"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Womens Room.webp",
|
||||
"emoji": "🚺"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Yellow Heart.webp",
|
||||
"emoji": "💛"
|
||||
},
|
||||
{
|
||||
"file": "Symbols/Zzz.webp",
|
||||
"emoji": "💤"
|
||||
}
|
||||
]
|
||||
};
|
||||
@@ -0,0 +1,76 @@
|
||||
export const TELEGRAM_EMOJI_GROUP_TRAVEL_PLACES = {
|
||||
"id": "travel-and-places",
|
||||
"label": "Путешествия",
|
||||
"icon": "✈️",
|
||||
"items": [
|
||||
{
|
||||
"file": "Travel and Places/Airplane.webp",
|
||||
"emoji": "✈️"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Ambulance.webp",
|
||||
"emoji": "🚑"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Automobile.webp",
|
||||
"emoji": "🚗"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Beach With Umbrella.webp",
|
||||
"emoji": "🏖️"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Camping.webp",
|
||||
"emoji": "🏕️"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Classical Building.webp",
|
||||
"emoji": "🏛️"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Compass.webp",
|
||||
"emoji": "🧭"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Desert Island.webp",
|
||||
"emoji": "🏝️"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Hot Springs.webp",
|
||||
"emoji": "♨️"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/House.webp",
|
||||
"emoji": "🏠"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Locomotive.webp",
|
||||
"emoji": "🚂"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Moai.webp",
|
||||
"emoji": "🗿"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Motor Boat.webp",
|
||||
"emoji": "🛥️"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Police Car.webp",
|
||||
"emoji": "🚓"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Rocket.webp",
|
||||
"emoji": "🚀"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Roller Coaster.webp",
|
||||
"emoji": "🎢"
|
||||
},
|
||||
{
|
||||
"file": "Travel and Places/Taxi.webp",
|
||||
"emoji": "🚕"
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@@ -17,6 +17,13 @@ import {
|
||||
} from '../state.js';
|
||||
import { startOutgoingCall } from '../services/call-service.js';
|
||||
import { openSpeechInputModal } from '../components/speech-input-modal.js';
|
||||
import {
|
||||
createEmojiPicker,
|
||||
createTelegramAnimatedEmoji,
|
||||
appendTelegramAnimatedText,
|
||||
isTelegramAnimatedEmoji,
|
||||
stopAllTelegramEmojiAnimations,
|
||||
} from '../components/emoji-picker.js?v=202607152130';
|
||||
import { isTextToSpeechConfigured, speakTextBySettings } from '../services/speech-tools-service.js';
|
||||
import { showToast } from '../services/channels-ux.js';
|
||||
|
||||
@@ -275,6 +282,19 @@ function scrollToLatestMessage(list) {
|
||||
window.setTimeout(apply, 260);
|
||||
}
|
||||
|
||||
function renderMessageText(textNode, messageText) {
|
||||
const text = String(messageText || '');
|
||||
const emoji = text.trim();
|
||||
if (text === emoji && isTelegramAnimatedEmoji(emoji)) {
|
||||
textNode.classList.add('bubble-text--animated-emoji');
|
||||
textNode.append(createTelegramAnimatedEmoji(emoji, { className: 'chat-telegram-emoji' }));
|
||||
return;
|
||||
}
|
||||
if (appendTelegramAnimatedText(textNode, text, { className: 'chat-telegram-emoji chat-telegram-emoji--inline' })) {
|
||||
textNode.classList.add('bubble-text--telegram-emoji-inline');
|
||||
}
|
||||
}
|
||||
|
||||
function renderLog(list, chatId, { onOpenActions } = {}) {
|
||||
list.innerHTML = '';
|
||||
const messages = getChatMessages(chatId);
|
||||
@@ -296,7 +316,7 @@ function renderLog(list, chatId, { onOpenActions } = {}) {
|
||||
|
||||
const textNode = document.createElement('div');
|
||||
textNode.className = 'bubble-text';
|
||||
textNode.textContent = msg.text || '';
|
||||
renderMessageText(textNode, msg.text);
|
||||
bubble.append(textNode);
|
||||
|
||||
const metaNode = document.createElement('div');
|
||||
@@ -429,18 +449,61 @@ export function render({ navigate, route }) {
|
||||
<div class="dm-edit-banner__text" id="chat-edit-banner-text"></div>
|
||||
<button class="ghost-btn dm-edit-banner__close" type="button" id="chat-edit-cancel" title="Отменить редактирование">✕</button>
|
||||
</div>
|
||||
<div class="emoji-picker-slot" id="chat-emoji-picker-slot" hidden></div>
|
||||
<textarea class="input dm-input" name="message" rows="1" placeholder="Введите сообщение" maxlength="12000"></textarea>
|
||||
<div class="dm-actions-col">
|
||||
<button class="ghost-btn dm-emoji-btn" type="button" id="chat-emoji-toggle" aria-label="Эмодзи" title="Эмодзи">☺</button>
|
||||
<button class="ghost-btn dm-voice-btn" type="button" id="chat-voice-input" title="Голосовой ввод">🎤</button>
|
||||
<button class="primary-btn dm-send-btn dm-send-icon-btn" type="submit" title="Отправить">➤</button>
|
||||
</div>
|
||||
`;
|
||||
|
||||
const input = form.elements.message;
|
||||
const emojiSlot = form.querySelector('#chat-emoji-picker-slot');
|
||||
const emojiToggle = form.querySelector('#chat-emoji-toggle');
|
||||
const editBanner = form.querySelector('#chat-edit-banner');
|
||||
const editBannerText = form.querySelector('#chat-edit-banner-text');
|
||||
const editCancelBtn = form.querySelector('#chat-edit-cancel');
|
||||
let activeEdit = null;
|
||||
let emojiPickerOpen = false;
|
||||
let emojiSelection = null;
|
||||
|
||||
const rememberEmojiSelection = () => {
|
||||
if (!input) return;
|
||||
const valueLength = String(input.value || '').length;
|
||||
const start = Math.max(0, Math.min(valueLength, Number(input.selectionStart ?? valueLength)));
|
||||
const end = Math.max(start, Math.min(valueLength, Number(input.selectionEnd ?? start)));
|
||||
emojiSelection = { start, end };
|
||||
};
|
||||
|
||||
const closeEmojiPicker = () => {
|
||||
if (!emojiPickerOpen) return;
|
||||
emojiPickerOpen = false;
|
||||
stopAllTelegramEmojiAnimations();
|
||||
emojiSlot.hidden = true;
|
||||
emojiToggle?.setAttribute('aria-expanded', 'false');
|
||||
};
|
||||
|
||||
const insertEmoji = (emoji) => {
|
||||
if (!input) return;
|
||||
const value = String(input.value || '');
|
||||
const start = emojiSelection?.start ?? Number(input.selectionStart ?? value.length);
|
||||
const end = emojiSelection?.end ?? Number(input.selectionEnd ?? value.length);
|
||||
input.value = `${value.slice(0, start)}${emoji}${value.slice(end)}`;
|
||||
const nextPosition = start + emoji.length;
|
||||
emojiSelection = { start: nextPosition, end: nextPosition };
|
||||
input.focus();
|
||||
try {
|
||||
input.setSelectionRange(nextPosition, nextPosition);
|
||||
} catch {
|
||||
// Ignore browsers that do not expose textarea selection during focus changes.
|
||||
}
|
||||
autoResizeComposer(input);
|
||||
};
|
||||
|
||||
if (emojiSlot) {
|
||||
emojiSlot.append(createEmojiPicker({ onSelect: insertEmoji }));
|
||||
}
|
||||
|
||||
const syncEditBanner = () => {
|
||||
if (!editBanner || !editBannerText) return;
|
||||
@@ -646,10 +709,31 @@ export function render({ navigate, route }) {
|
||||
});
|
||||
|
||||
autoResizeComposer(input);
|
||||
input?.addEventListener('input', () => autoResizeComposer(input));
|
||||
input?.addEventListener('input', () => {
|
||||
rememberEmojiSelection();
|
||||
autoResizeComposer(input);
|
||||
});
|
||||
input?.addEventListener('select', rememberEmojiSelection);
|
||||
input?.addEventListener('keyup', rememberEmojiSelection);
|
||||
input?.addEventListener('click', rememberEmojiSelection);
|
||||
input?.addEventListener('focus', () => {
|
||||
rememberEmojiSelection();
|
||||
scrollToLatestMessage(log);
|
||||
});
|
||||
emojiToggle?.setAttribute('aria-expanded', 'false');
|
||||
emojiToggle?.addEventListener('pointerdown', (event) => {
|
||||
rememberEmojiSelection();
|
||||
event.preventDefault();
|
||||
});
|
||||
emojiToggle?.addEventListener('click', () => {
|
||||
emojiPickerOpen = !emojiPickerOpen;
|
||||
emojiSlot.hidden = !emojiPickerOpen;
|
||||
emojiToggle.setAttribute('aria-expanded', String(emojiPickerOpen));
|
||||
});
|
||||
screen.addEventListener('pointerdown', (event) => {
|
||||
if (!emojiPickerOpen || form.contains(event.target)) return;
|
||||
closeEmojiPicker();
|
||||
});
|
||||
input?.addEventListener('keydown', async (event) => {
|
||||
if (event.key !== 'Enter') return;
|
||||
if (event.ctrlKey) {
|
||||
@@ -672,10 +756,12 @@ export function render({ navigate, route }) {
|
||||
if (!text) return;
|
||||
input.value = '';
|
||||
autoResizeComposer(input);
|
||||
closeEmojiPicker();
|
||||
await sendTextMessage(text);
|
||||
});
|
||||
|
||||
form.querySelector('#chat-voice-input')?.addEventListener('click', async () => {
|
||||
closeEmojiPicker();
|
||||
await openSpeechInputModal({
|
||||
navigate,
|
||||
onTextReady: (text) => {
|
||||
@@ -696,6 +782,7 @@ export function render({ navigate, route }) {
|
||||
if (!text) return;
|
||||
input.value = '';
|
||||
autoResizeComposer(input);
|
||||
closeEmojiPicker();
|
||||
await sendTextMessage(text);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user