diff --git a/README.md b/README.md index 51c049b0fcfee..8178682debbb0 100644 --- a/README.md +++ b/README.md @@ -120,3 +120,5 @@ We're hiring developers, technical support, and product managers all the time. C # 🗒️ Credits - Emoji provided graciously by [JoyPixels](https://www.joypixels.com). + + \ No newline at end of file diff --git a/apps/meteor/app/emoji-emojione/README.md b/apps/meteor/app/emoji-emojione/README.md index d16237b6fc085..20f49d2b1b083 100644 --- a/apps/meteor/app/emoji-emojione/README.md +++ b/apps/meteor/app/emoji-emojione/README.md @@ -1,18 +1,18 @@ -# Updating emojione +# Updating emojis (now using emoji-toolkit) ## Generate new category map variable for emojipicker -Run +Run the generator script which now pulls metadata from `emoji-toolkit` + ``` node --experimental-modules generateEmojiIndex.mjs ``` -## Generate new percentage sprite -Clone the repository https://github.com/Ranks/emojione/ and replace the file `assets/sprites/emojione.sprites.mustache` with the content -of [emojione.sprites.mustache](emojione.sprites.mustache), then run at `emojione` folder: +The script will download 64px PNGs from the JoyPixels CDN into `.emoji-cache` +and build updated sprite sheets under `public/packages/emojione/`. -``` -grunt sprite -sass --sourcemap=none assets/sprites/emojione.sprites.scss sprites.css -``` +## Sprite generation notes +The old manual `grunt`/`sass` workflow is no longer required. If you need to +rebuild sprites offline you can cache the PNG files yourself by running the +script once with internet access; subsequent runs will reuse the cached images. -And replace the file `sprites.css` at Rocket.Chat's `/packages/rocketchat-emoji-emojione/sprites.css`. +The generated CSS is written to `apps/meteor/app/emoji-emojione/client/emojione-sprites.css`. diff --git a/apps/meteor/app/emoji-emojione/lib/generateEmojiIndex.mjs b/apps/meteor/app/emoji-emojione/lib/generateEmojiIndex.mjs index 009ef3dcc8f47..ff295685bf37c 100644 Binary files a/apps/meteor/app/emoji-emojione/lib/generateEmojiIndex.mjs and b/apps/meteor/app/emoji-emojione/lib/generateEmojiIndex.mjs differ diff --git a/apps/meteor/app/emoji-emojione/lib/getEmojiConfig.ts b/apps/meteor/app/emoji-emojione/lib/getEmojiConfig.ts index 51d2fbc1c4efc..c07fcb6aef79b 100644 --- a/apps/meteor/app/emoji-emojione/lib/getEmojiConfig.ts +++ b/apps/meteor/app/emoji-emojione/lib/getEmojiConfig.ts @@ -1,281 +1,27 @@ -import emojione from 'emojione'; -import mem from 'mem'; +import emojiToolkit from 'emoji-toolkit'; import { emojisByCategory, emojiCategories, toneList } from './emojiPicker'; -// TODO remove fix below when issue is solved: https://github.com/joypixels/emojione/issues/617 - -// add missing emojis not provided by JS object, but included on emoji.json -emojione.shortnames += - '|:tm:|:copyright:|:registered:|:digit_zero:|:digit_one:|:digit_two:|:digit_three:|:digit_four:|:digit_five:|:digit_six:|:digit_seven:|:digit_eight:|:digit_nine:|:pound_symbol:|:asterisk_symbol:'; -emojione.regShortNames = new RegExp( - `]*>.*?<\/object>|]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(${emojione.shortnames})`, - 'gi', -); - -emojione.emojioneList[':tm:'] = { - uc_base: '2122', - uc_output: '2122-fe0f', - uc_match: '2122-fe0f', - uc_greedy: '2122-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':copyright:'] = { - uc_base: '00a9', - uc_output: '00a9-f0ef', - uc_match: '00a9-fe0f', - uc_greedy: '00a9-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':registered:'] = { - uc_base: '00ae', - uc_output: '00ae-fe0f', - uc_match: '00ae-fe0f', - uc_greedy: '00ae-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':digit_zero:'] = { - uc_base: '0030', - uc_output: '0030-fe0f', - uc_match: '0030-fe0f', - uc_greedy: '0030-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':digit_one:'] = { - uc_base: '0031', - uc_output: '0031-fe0f', - uc_match: '0031-fe0f', - uc_greedy: '0031-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':digit_two:'] = { - uc_base: '0032', - uc_output: '0032-fe0f', - uc_match: '0032-fe0f', - uc_greedy: '0032-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':digit_three:'] = { - uc_base: '0033', - uc_output: '0033-fe0f', - uc_match: '0033-fe0f', - uc_greedy: '0033-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':digit_four:'] = { - uc_base: '0034', - uc_output: '0034-fe0f', - uc_match: '0034-fe0f', - uc_greedy: '0034-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':digit_five:'] = { - uc_base: '0035', - uc_output: '0035-fe0f', - uc_match: '0035-fe0f', - uc_greedy: '0035-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':digit_six:'] = { - uc_base: '0036', - uc_output: '0036-fe0f', - uc_match: '0036-fe0f', - uc_greedy: '0036-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':digit_seven:'] = { - uc_base: '0037', - uc_output: '0037-fe0f', - uc_match: '0037-fe0f', - uc_greedy: '0037-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':digit_eight:'] = { - uc_base: '0038', - uc_output: '0038-fe0f', - uc_match: '0038-fe0f', - uc_greedy: '0038-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':digit_nine:'] = { - uc_base: '0039', - uc_output: '0039-fe0f', - uc_match: '0039-fe0f', - uc_greedy: '0039-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':pound_symbol:'] = { - uc_base: '0023', - uc_output: '0023-fe0f', - uc_match: '0023-fe0f', - uc_greedy: '0023-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; - -emojione.emojioneList[':asterisk_symbol:'] = { - uc_base: '002a', - uc_output: '002a-fe0f', - uc_match: '002a-fe0f', - uc_greedy: '002a-fe0f', - shortnames: [], - category: 'symbols', - emojiPackage: 'emojione', -}; -// end fix - -// fix for :+1: - had to replace all function that does its conversion: https://github.com/joypixels/emojione/blob/4.5.0/lib/js/emojione.js#L249 - -emojione.shortnameConversionMap = mem(emojione.shortnameConversionMap, { maxAge: 1000 }); - -emojione.unicodeCharRegex = mem(emojione.unicodeCharRegex, { maxAge: 1000 }); - -const convertShortName = mem( - (shortname) => { - // the fix is basically adding this .replace(/[+]/g, '\\$&') - if (typeof shortname === 'undefined' || shortname === '' || emojione.shortnames.indexOf(shortname.replace(/[+]/g, '\\$&')) === -1) { - // if the shortname doesnt exist just return the entire match - return shortname; - } - - // map shortname to parent - if (!emojione.emojioneList[shortname]) { - for (const emoji in emojione.emojioneList) { - if (!emojione.emojioneList.hasOwnProperty(emoji) || emoji === '') { - continue; - } - if (emojione.emojioneList[emoji].shortnames.indexOf(shortname) === -1) { - continue; - } - shortname = emoji; - break; - } - } - - const unicode = emojione.emojioneList[shortname].uc_output; - const fname = emojione.emojioneList[shortname].uc_base; - const category = fname.indexOf('-1f3f') >= 0 ? 'diversity' : emojione.emojioneList[shortname].category; - const title = emojione.imageTitleTag ? `title="${shortname}"` : ''; - // const size = ns.spriteSize === '32' || ns.spriteSize === '64' ? ns.spriteSize : '32'; - // if the emoji path has been set, we'll use the provided path, otherwise we'll use the default path - const ePath = - emojione.defaultPathPNG !== emojione.imagePathPNG ? emojione.imagePathPNG : `${emojione.defaultPathPNG + emojione.emojiSize}/`; - - // depending on the settings, we'll either add the native unicode as the alt tag, otherwise the shortname - const alt = emojione.unicodeAlt ? emojione.convert(unicode.toUpperCase()) : shortname; - - if (emojione.sprites) { - return `${alt}`; - } - return `${alt}`; - }, - { maxAge: 1000 }, -); - -const convertUnicode = mem( - (entire, _m1, m2, m3) => { - const mappedUnicode = emojione.mapUnicodeToShort(); - - if (typeof m3 === 'undefined' || m3 === '' || !(emojione.unescapeHTML(m3) in emojione.asciiList)) { - // if the ascii doesnt exist just return the entire match - return entire; - } - - m3 = emojione.unescapeHTML(m3); - const unicode = emojione.asciiList[m3]; - const shortname = mappedUnicode[unicode]; - const category = unicode.indexOf('-1f3f') >= 0 ? 'diversity' : emojione.emojioneList[shortname].category; - const title = emojione.imageTitleTag ? `title="${emojione.escapeHTML(m3)}"` : ''; - // const size = ns.spriteSize === '32' || ns.spriteSize === '64' ? ns.spriteSize : '32'; - // if the emoji path has been set, we'll use the provided path, otherwise we'll use the default path - const ePath = - emojione.defaultPathPNG !== emojione.imagePathPNG ? emojione.imagePathPNG : `${emojione.defaultPathPNG + emojione.emojiSize}/`; - - // depending on the settings, we'll either add the native unicode as the alt tag, otherwise the shortname - const alt = emojione.unicodeAlt ? emojione.convert(unicode.toUpperCase()) : emojione.escapeHTML(m3); - - if (emojione.sprites) { - return `${m2}${alt}`; - } - return `${m2}${alt}`; - }, - { maxAge: 1000, cacheKey: JSON.stringify }, -); - -emojione.shortnameToImage = (str) => { - // replace regular shortnames first - str = str.replace(emojione.regShortNames, convertShortName); - - // if ascii smileys are turned on, then we'll replace them! - if (emojione.ascii) { - const asciiRX = emojione.riskyMatchAscii ? emojione.regAsciiRisky : emojione.regAscii; - - return str.replace(asciiRX, convertUnicode); - } - - return str; -}; - -const isEmojiSupported = (str: string) => { - str = str.replace(emojione.regShortNames, convertShortName); - - // if ascii smileys are turned on, then we'll replace them! - if (emojione.ascii) { - const asciiRX = emojione.riskyMatchAscii ? emojione.regAsciiRisky : emojione.regAscii; - - return str.replace(asciiRX, convertUnicode); - } - - return str; -}; - -export const getEmojiConfig = () => ({ - emojione, - emojisByCategory, - emojiCategories, - toneList, - render: emojione.toImage, - renderPicker: emojione.shortnameToImage, - sprites: true, - isEmojiSupported, -}); +// The old file contained a large number of fixes for the outdated emojione +// library. The new toolkit is much more well behaved; we simply expose the +// functions we care about and keep the same configuration shape so the +// rest of the system (which references `emoji.packages.emojione`) continues +// working without modification. + +export const getEmojiConfig = () => { + // emojiToolkit already includes a structured list on `emojiToolkit.emoji` or + // regardless we can re-export the raw JSON for compatibility. + const base = emojiToolkit; + + return { + emojione: base, + sprites: true, + emojisByCategory, + emojiCategories, + toneList, + render: base.toImage, + renderPicker: base.toImage, + }; +}; + +// legacy helper removed; this file now only exports the simple config diff --git a/apps/meteor/app/emoji-emojione/server/callbacks.ts b/apps/meteor/app/emoji-emojione/server/callbacks.ts index 081e115a152a5..84925c8fb1915 100644 --- a/apps/meteor/app/emoji-emojione/server/callbacks.ts +++ b/apps/meteor/app/emoji-emojione/server/callbacks.ts @@ -1,4 +1,4 @@ -import emojione from 'emojione'; +import emojiToolkit from 'emoji-toolkit'; import { Meteor } from 'meteor/meteor'; import { callbacks } from '../../../server/lib/callbacks'; @@ -6,7 +6,7 @@ import { callbacks } from '../../../server/lib/callbacks'; Meteor.startup(() => { callbacks.add( 'beforeSendMessageNotifications', - (message) => emojione.shortnameToUnicode(message), + (message) => emojiToolkit.shortnameToUnicode(message), callbacks.priority.MEDIUM, 'emojione-shortnameToUnicode', ); diff --git a/apps/meteor/app/emoji-emojione/server/lib.ts b/apps/meteor/app/emoji-emojione/server/lib.ts index 57d366529526a..5749baf0c7b85 100644 --- a/apps/meteor/app/emoji-emojione/server/lib.ts +++ b/apps/meteor/app/emoji-emojione/server/lib.ts @@ -18,9 +18,11 @@ if (emoji.packages.emojione) { emoji.packages.emojione.renderPicker = config.renderPicker; // TODO: check types // RocketChat.emoji.list is the collection of emojis from all emoji packages - for (const key in config.emojione.emojioneList) { - if (config.emojione.emojioneList.hasOwnProperty(key)) { - const currentEmoji = config.emojione.emojioneList[key]; + // toolkit exports its data under "emojiList", keep the old name for + // backwards compatibility when setting the package key. + for (const key in config.emojione.emojiList) { + if (Object.prototype.hasOwnProperty.call(config.emojione.emojiList, key)) { + const currentEmoji = config.emojione.emojiList[key]; currentEmoji.emojiPackage = 'emojione'; emoji.list[key] = currentEmoji; diff --git a/apps/meteor/app/emoji/client/lib.ts b/apps/meteor/app/emoji/client/lib.ts index 462e86cc34a91..ac27e90c1eeca 100644 --- a/apps/meteor/app/emoji/client/lib.ts +++ b/apps/meteor/app/emoji/client/lib.ts @@ -1,5 +1,5 @@ import { Emitter } from '@rocket.chat/emitter'; -import emojione from 'emojione'; +import emojiToolkit from 'emoji-toolkit'; import type { EmojiPackages } from '../lib/rocketchat'; @@ -14,7 +14,7 @@ export const emoji: EmojiPackages & { dispatchUpdate: () => void } = { recent: [], }, toneList: {}, - render: emojione.toImage, + render: emojiToolkit.toImage, renderPicker(emojiToRender) { const correctPackage = emoji.list[emojiToRender].emojiPackage; if (!correctPackage) { diff --git a/apps/meteor/app/lib/server/lib/sendNotificationsOnMessage.ts b/apps/meteor/app/lib/server/lib/sendNotificationsOnMessage.ts index 0a347c7526abc..29df1b958c6c9 100644 --- a/apps/meteor/app/lib/server/lib/sendNotificationsOnMessage.ts +++ b/apps/meteor/app/lib/server/lib/sendNotificationsOnMessage.ts @@ -8,7 +8,7 @@ import { type AtLeast, } from '@rocket.chat/core-typings'; import { Subscriptions, Users } from '@rocket.chat/models'; -import emojione from 'emojione'; +import emojiToolkit from 'emoji-toolkit'; import moment from 'moment'; import type { RootFilterOperators } from 'mongodb'; @@ -191,13 +191,13 @@ export const sendNotification = async ({ isThread, }) ) { - const messageWithUnicode = message.msg ? emojione.shortnameToUnicode(message.msg) : message.msg; + const messageWithUnicode = message.msg ? emojiToolkit.shortnameToUnicode(message.msg) : message.msg; const firstAttachment = message.attachments?.length && message.attachments.shift(); if (firstAttachment) { firstAttachment.description = - typeof firstAttachment.description === 'string' ? emojione.shortnameToUnicode(firstAttachment.description) : undefined; - firstAttachment.text = typeof firstAttachment.text === 'string' ? emojione.shortnameToUnicode(firstAttachment.text) : undefined; + typeof firstAttachment.description === 'string' ? emojiToolkit.shortnameToUnicode(firstAttachment.description) : undefined; + firstAttachment.text = typeof firstAttachment.text === 'string' ? emojiToolkit.shortnameToUnicode(firstAttachment.text) : undefined; } const attachments = firstAttachment ? [firstAttachment, ...(message.attachments ?? [])].filter(Boolean) : []; diff --git a/apps/meteor/client/lib/utils/normalizeMessagePreview/normalizeMessagePreview.ts b/apps/meteor/client/lib/utils/normalizeMessagePreview/normalizeMessagePreview.ts index 53bf5bf2d4056..4cc3607fdcdea 100644 --- a/apps/meteor/client/lib/utils/normalizeMessagePreview/normalizeMessagePreview.ts +++ b/apps/meteor/client/lib/utils/normalizeMessagePreview/normalizeMessagePreview.ts @@ -1,13 +1,13 @@ import type { IMessage } from '@rocket.chat/core-typings'; import { escapeHTML } from '@rocket.chat/string-helpers'; -import emojione from 'emojione'; +import emojiToolkit from 'emoji-toolkit'; import type { TFunction } from 'i18next'; import { filterMarkdown } from '../../../../app/markdown/lib/markdown'; export const normalizeMessagePreview = (message: IMessage, t: TFunction): string | undefined => { if (message.msg) { - return escapeHTML(filterMarkdown(emojione.shortnameToUnicode(message.msg))); + return escapeHTML(filterMarkdown(emojiToolkit.shortnameToUnicode(message.msg))); } if (message.attachments) { diff --git a/apps/meteor/definition/externals/emoji-toolkit.d.ts b/apps/meteor/definition/externals/emoji-toolkit.d.ts new file mode 100644 index 0000000000000..4c7bedae47a09 --- /dev/null +++ b/apps/meteor/definition/externals/emoji-toolkit.d.ts @@ -0,0 +1,9 @@ +declare module 'emoji-toolkit' { + export function toShort(input: string): string; + export function toImage(input: string): string; + export function shortnameToUnicode(input: string): string; + export function shortnameToImage(input: string): string; + export function unicodeToImage(input: string): string; + export function convert(input: string): string; + export const emojiList: Record; +} diff --git a/apps/meteor/package.json b/apps/meteor/package.json index 815932d3d7af3..86ddd146f9633 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -193,7 +193,7 @@ "drachtio-srf": "patch:drachtio-srf@npm%3A5.0.12#~/.yarn/patches/drachtio-srf-npm-5.0.12-b0b1afaad6.patch", "ejson": "^2.2.3", "emailreplyparser": "^0.0.5", - "emoji-toolkit": "^7.0.1", + "emoji-toolkit": "^10.0.0", "emojione": "^4.5.0", "esl": "^11.2.1", "eventemitter3": "^5.0.4", @@ -374,6 +374,7 @@ "@types/mocha": "github:whitecolor/mocha-types", "@types/node": "~22.16.5", "@types/node-rsa": "^1.1.4", + "@types/node-sprite-generator": "^0", "@types/nodemailer": "~6.4.22", "@types/oauth2-server": "^3.0.18", "@types/object-path": "^0.11.4", @@ -417,6 +418,7 @@ "jest": "~30.2.0", "jsdom-global": "^3.0.2", "mocha": "^9.2.2", + "node-sprite-generator": "^0.10.2", "nyc": "^17.1.0", "outdent": "~0.8.0", "pino-pretty": "^7.6.1", diff --git a/ee/packages/federation-matrix/package.json b/ee/packages/federation-matrix/package.json index 99ab6c1e4786c..79e0b15e44baf 100644 --- a/ee/packages/federation-matrix/package.json +++ b/ee/packages/federation-matrix/package.json @@ -28,7 +28,6 @@ "@rocket.chat/models": "workspace:^", "@rocket.chat/network-broker": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", - "emojione": "^4.5.0", "marked": "^16.1.2", "mongodb": "6.16.0", "pino": "^8.21.0", @@ -39,7 +38,6 @@ }, "devDependencies": { "@rocket.chat/ddp-client": "workspace:^", - "@types/emojione": "^2.2.9", "@types/node": "~22.16.5", "@types/sanitize-html": "~2.16.0", "eslint": "~9.39.3", diff --git a/ee/packages/federation-matrix/src/FederationMatrix.ts b/ee/packages/federation-matrix/src/FederationMatrix.ts index bc52db7c12ab8..3273aee27587b 100644 --- a/ee/packages/federation-matrix/src/FederationMatrix.ts +++ b/ee/packages/federation-matrix/src/FederationMatrix.ts @@ -12,7 +12,7 @@ import { eventIdSchema, roomIdSchema, userIdSchema, federationSDK, FederationReq import type { EventID, FileMessageType, PresenceState } from '@rocket.chat/federation-sdk'; import { Logger } from '@rocket.chat/logger'; import { Users, Subscriptions, Messages, Rooms } from '@rocket.chat/models'; -import emojione from 'emojione'; +import emojiToolkit from 'emoji-toolkit'; import { createOrUpdateFederatedUser } from './helpers/createOrUpdateFederatedUser'; import { extractDomainFromMatrixUserId } from './helpers/extractDomainFromMatrixUserId'; @@ -464,12 +464,7 @@ export class FederationMatrix extends ServiceClass implements IFederationMatrixS throw new Error(`No Matrix event ID mapping found for message ${messageId}`); } - const reactionKey = emojione.shortnameToUnicode(reaction); - - const userMui = isUserNativeFederated(user) ? user.federation.mui : `@${user.username}:${this.serverName}`; - - const eventId = await federationSDK.sendReaction( - roomIdSchema.parse(room.federation.mrid), + const reactionKey = emojiToolkit.shortnameToUnicode(reaction); eventIdSchema.parse(matrixEventId), reactionKey, userIdSchema.parse(userMui), @@ -504,7 +499,7 @@ export class FederationMatrix extends ServiceClass implements IFederationMatrixS return; } - const reactionKey = emojione.shortnameToUnicode(reaction); + const reactionKey = emojiToolkit.shortnameToUnicode(reaction); const userMui = isUserNativeFederated(user) ? user.federation.mui : `@${user.username}:${this.serverName}`; diff --git a/ee/packages/federation-matrix/src/events/reaction.ts b/ee/packages/federation-matrix/src/events/reaction.ts index 2871f0d9f5409..4035fc50a845f 100644 --- a/ee/packages/federation-matrix/src/events/reaction.ts +++ b/ee/packages/federation-matrix/src/events/reaction.ts @@ -2,7 +2,7 @@ import { Message, FederationMatrix } from '@rocket.chat/core-services'; import { federationSDK } from '@rocket.chat/federation-sdk'; import { Logger } from '@rocket.chat/logger'; import { Users, Messages } from '@rocket.chat/models'; // Rooms -import emojione from 'emojione'; +import emojiToolkit from 'emoji-toolkit'; const logger = new Logger('federation-matrix:reaction'); @@ -38,7 +38,7 @@ export function reaction() { return; } - const reactionEmoji = emojione.toShort(reactionKey); + const reactionEmoji = emojiToolkit.toShort(reactionKey); await Message.reactToMessage(user._id, reactionEmoji, rcMessage._id, true); await Messages.setFederationReactionEventId(internalUsername, rcMessage._id, reactionEmoji, eventId); } catch (err) { @@ -82,7 +82,7 @@ export function reaction() { return; } - const reactionEmoji = emojione.toShort(reactionKey); + const reactionEmoji = emojiToolkit.toShort(reactionKey); await Message.reactToMessage(user._id, reactionEmoji, rcMessage._id, false); await Messages.unsetFederationReactionEventId(redactedEventId, rcMessage._id, reactionEmoji); } catch (err) { diff --git a/ee/packages/pdf-worker/package.json b/ee/packages/pdf-worker/package.json index 7bf8e85451288..e61fb8dcc8df3 100644 --- a/ee/packages/pdf-worker/package.json +++ b/ee/packages/pdf-worker/package.json @@ -37,7 +37,6 @@ "@storybook/react-webpack5": "^8.6.17", "@testing-library/dom": "~10.4.1", "@testing-library/react": "~16.3.2", - "@types/emojione": "^2.2.9", "@types/jest": "~30.0.0", "@types/react": "~18.3.27", "@types/react-dom": "~18.3.7", diff --git a/emojiPicker.js b/emojiPicker.js new file mode 100644 index 0000000000000..915a471ae8b33 --- /dev/null +++ b/emojiPicker.js @@ -0,0 +1,2314 @@ +/* + * This file is automatically generated from generateEmojiIndex.mjs + * Last generated Sun Mar 01 2026 10:39:56 GMT+0000 (Coordinated Universal Time) + * + * Mapping category hashes into human readable and translated names + */ + +export const emojiCategories = [ + { key: 'people', i18n: 'Smileys_and_People' }, + { key: 'nature', i18n: 'Animals_and_Nature' }, + { key: 'food', i18n: 'Food_and_Drink' }, + { key: 'activity', i18n: 'Activity' }, + { key: 'travel', i18n: 'Travel_and_Places' }, + { key: 'objects', i18n: 'Objects' }, + { key: 'symbols', i18n: 'Symbols' }, + { key: 'flags', i18n: 'Flags' }, +]; +export const toneList = { + heart_hands: 1, + palms_up_together: 1, + open_hands: 1, + raised_hands: 1, + clap: 1, + handshake: 1, + thumbsup: 1, + thumbsdown: 1, + punch: 1, + fist: 1, + left_facing_fist: 1, + right_facing_fist: 1, + leftwards_pushing_hand: 1, + rightwards_pushing_hand: 1, + fingers_crossed: 1, + v: 1, + hand_with_index_finger_and_thumb_crossed: 1, + love_you_gesture: 1, + metal: 1, + ok_hand: 1, + pinched_fingers: 1, + pinching_hand: 1, + palm_down_hand: 1, + palm_up_hand: 1, + point_left: 1, + point_right: 1, + point_up_2: 1, + point_down: 1, + point_up: 1, + raised_hand: 1, + raised_back_of_hand: 1, + hand_splayed: 1, + vulcan: 1, + wave: 1, + call_me: 1, + leftwards_hand: 1, + rightwards_hand: 1, + muscle: 1, + middle_finger: 1, + writing_hand: 1, + pray: 1, + index_pointing_at_the_viewer: 1, + foot: 1, + leg: 1, + ear: 1, + ear_with_hearing_aid: 1, + nose: 1, + baby: 1, + child: 1, + girl: 1, + boy: 1, + adult: 1, + woman: 1, + man: 1, + person: 1, + woman_curly_haired: 1, + man_curly_haired: 1, + woman_red_haired: 1, + man_red_haired: 1, + blond_haired_person: 1, + 'blond-haired_woman': 1, + 'blond-haired_man': 1, + woman_white_haired: 1, + man_white_haired: 1, + woman_bald: 1, + man_bald: 1, + bearded_person: 1, + older_adult: 1, + older_woman: 1, + older_man: 1, + man_with_chinese_cap: 1, + person_wearing_turban: 1, + woman_wearing_turban: 1, + man_wearing_turban: 1, + woman_with_headscarf: 1, + police_officer: 1, + woman_police_officer: 1, + man_police_officer: 1, + construction_worker: 1, + woman_construction_worker: 1, + man_construction_worker: 1, + guard: 1, + woman_guard: 1, + man_guard: 1, + detective: 1, + woman_detective: 1, + man_detective: 1, + health_worker: 1, + woman_health_worker: 1, + man_health_worker: 1, + farmer: 1, + woman_farmer: 1, + man_farmer: 1, + cook: 1, + woman_cook: 1, + man_cook: 1, + student: 1, + woman_student: 1, + man_student: 1, + singer: 1, + woman_singer: 1, + man_singer: 1, + teacher: 1, + woman_teacher: 1, + man_teacher: 1, + factory_worker: 1, + woman_factory_worker: 1, + man_factory_worker: 1, + technologist: 1, + woman_technologist: 1, + man_technologist: 1, + office_worker: 1, + woman_office_worker: 1, + man_office_worker: 1, + mechanic: 1, + woman_mechanic: 1, + man_mechanic: 1, + scientist: 1, + woman_scientist: 1, + man_scientist: 1, + artist: 1, + woman_artist: 1, + man_artist: 1, + firefighter: 1, + woman_firefighter: 1, + man_firefighter: 1, + pilot: 1, + woman_pilot: 1, + man_pilot: 1, + astronaut: 1, + woman_astronaut: 1, + man_astronaut: 1, + judge: 1, + woman_judge: 1, + man_judge: 1, + person_with_veil: 1, + woman_with_veil: 1, + man_with_veil: 1, + person_in_tuxedo: 1, + woman_in_tuxedo: 1, + man_in_tuxedo: 1, + person_with_crown: 1, + princess: 1, + prince: 1, + superhero: 1, + woman_superhero: 1, + man_superhero: 1, + supervillain: 1, + woman_supervillain: 1, + man_supervillain: 1, + ninja: 1, + mx_claus: 1, + mrs_claus: 1, + santa: 1, + mage: 1, + woman_mage: 1, + man_mage: 1, + elf: 1, + woman_elf: 1, + man_elf: 1, + vampire: 1, + woman_vampire: 1, + man_vampire: 1, + merperson: 1, + mermaid: 1, + merman: 1, + fairy: 1, + woman_fairy: 1, + man_fairy: 1, + angel: 1, + pregnant_person: 1, + pregnant_woman: 1, + pregnant_man: 1, + breast_feeding: 1, + person_feeding_baby: 1, + woman_feeding_baby: 1, + man_feeding_baby: 1, + person_bowing: 1, + woman_bowing: 1, + man_bowing: 1, + person_tipping_hand: 1, + woman_tipping_hand: 1, + man_tipping_hand: 1, + person_gesturing_no: 1, + woman_gesturing_no: 1, + man_gesturing_no: 1, + person_gesturing_ok: 1, + woman_gesturing_ok: 1, + man_gesturing_ok: 1, + person_raising_hand: 1, + woman_raising_hand: 1, + man_raising_hand: 1, + deaf_person: 1, + deaf_woman: 1, + deaf_man: 1, + person_facepalming: 1, + woman_facepalming: 1, + man_facepalming: 1, + person_shrugging: 1, + woman_shrugging: 1, + man_shrugging: 1, + person_pouting: 1, + woman_pouting: 1, + man_pouting: 1, + person_frowning: 1, + woman_frowning: 1, + man_frowning: 1, + person_getting_haircut: 1, + woman_getting_haircut: 1, + man_getting_haircut: 1, + person_getting_massage: 1, + woman_getting_face_massage: 1, + man_getting_face_massage: 1, + person_in_steamy_room: 1, + woman_in_steamy_room: 1, + man_in_steamy_room: 1, + nail_care: 1, + selfie: 1, + dancer: 1, + man_dancing: 1, + levitate: 1, + person_in_manual_wheelchair: 1, + woman_in_manual_wheelchair: 1, + man_in_manual_wheelchair: 1, + person_in_manual_wheelchair_facing_right: 1, + woman_in_manual_wheelchair_facing_right: 1, + man_in_manual_wheelchair_facing_right: 1, + person_in_motorized_wheelchair: 1, + woman_in_motorized_wheelchair: 1, + man_in_motorized_wheelchair: 1, + person_in_motorized_wheelchair_facing_right: 1, + woman_in_motorized_wheelchair_facing_right: 1, + man_in_motorized_wheelchair_facing_right: 1, + person_walking: 1, + woman_walking: 1, + man_walking: 1, + person_walking_facing_right: 1, + woman_walking_facing_right: 1, + man_walking_facing_right: 1, + person_with_probing_cane: 1, + woman_with_probing_cane: 1, + man_with_probing_cane: 1, + person_with_white_cane_facing_right: 1, + woman_with_white_cane_facing_right: 1, + man_with_white_cane_facing_right: 1, + person_kneeling: 1, + woman_kneeling: 1, + man_kneeling: 1, + person_kneeling_facing_right: 1, + woman_kneeling_facing_right: 1, + man_kneeling_facing_right: 1, + person_running: 1, + woman_running: 1, + man_running: 1, + person_running_facing_right: 1, + woman_running_facing_right: 1, + man_running_facing_right: 1, + person_standing: 1, + woman_standing: 1, + man_standing: 1, + people_holding_hands: 1, + woman_and_man_holding_hands: 1, + women_holding_hands: 1, + men_holding_hands: 1, + couple_with_heart: 1, + couple_with_heart_person_person: 1, + couple_with_heart_woman_man: 1, + couple_with_heart_woman_woman: 1, + couple_with_heart_man_man: 1, + kiss: 1, + kiss_person_person: 1, + kiss_woman_man: 1, + kiss_woman_woman: 1, + kiss_man_man: 1, + snowboarder: 1, + person_lifting_weights: 1, + woman_lifting_weights: 1, + man_lifting_weights: 1, + person_doing_cartwheel: 1, + woman_cartwheeling: 1, + man_cartwheeling: 1, + person_bouncing_ball: 1, + woman_bouncing_ball: 1, + man_bouncing_ball: 1, + person_playing_handball: 1, + woman_playing_handball: 1, + man_playing_handball: 1, + person_golfing: 1, + woman_golfing: 1, + man_golfing: 1, + horse_racing: 1, + person_in_lotus_position: 1, + woman_in_lotus_position: 1, + man_in_lotus_position: 1, + person_surfing: 1, + woman_surfing: 1, + man_surfing: 1, + person_swimming: 1, + woman_swimming: 1, + man_swimming: 1, + person_playing_water_polo: 1, + woman_playing_water_polo: 1, + man_playing_water_polo: 1, + person_rowing_boat: 1, + woman_rowing_boat: 1, + man_rowing_boat: 1, + person_climbing: 1, + woman_climbing: 1, + man_climbing: 1, + person_mountain_biking: 1, + woman_mountain_biking: 1, + man_mountain_biking: 1, + person_biking: 1, + woman_biking: 1, + man_biking: 1, + person_juggling: 1, + woman_juggling: 1, + man_juggling: 1, + bath: 1, + person_in_bed: 1, +}; +export const emojisByCategory = { + people: [ + 'grinning', + 'smiley', + 'smile', + 'grin', + 'laughing', + 'face_holding_back_tears', + 'sweat_smile', + 'joy', + 'rofl', + 'smiling_face_with_tear', + 'relaxed', + 'blush', + 'innocent', + 'slight_smile', + 'upside_down', + 'wink', + 'relieved', + 'heart_eyes', + 'smiling_face_with_3_hearts', + 'kissing_heart', + 'kissing', + 'kissing_smiling_eyes', + 'kissing_closed_eyes', + 'yum', + 'stuck_out_tongue', + 'stuck_out_tongue_closed_eyes', + 'stuck_out_tongue_winking_eye', + 'zany_face', + 'face_with_raised_eyebrow', + 'face_with_monocle', + 'nerd', + 'sunglasses', + 'disguised_face', + 'star_struck', + 'partying_face', + 'head_shaking_vertically', + 'smirk', + 'unamused', + 'head_shaking_horizontally', + 'disappointed', + 'pensive', + 'worried', + 'confused', + 'slight_frown', + 'frowning2', + 'persevere', + 'confounded', + 'tired_face', + 'weary', + 'pleading_face', + 'cry', + 'sob', + 'triumph', + 'angry', + 'rage', + 'face_with_symbols_over_mouth', + 'exploding_head', + 'flushed', + 'hot_face', + 'cold_face', + 'face_in_clouds', + 'scream', + 'fearful', + 'cold_sweat', + 'disappointed_relieved', + 'sweat', + 'hugging', + 'thinking', + 'face_with_peeking_eye', + 'face_with_hand_over_mouth', + 'face_with_open_eyes_and_hand_over_mouth', + 'saluting_face', + 'shushing_face', + 'melting_face', + 'lying_face', + 'no_mouth', + 'dotted_line_face', + 'neutral_face', + 'face_with_diagonal_mouth', + 'expressionless', + 'shaking_face', + 'grimacing', + 'rolling_eyes', + 'hushed', + 'frowning', + 'anguished', + 'open_mouth', + 'astonished', + 'yawning_face', + 'face_with_bags_under_eyes', + 'sleeping', + 'drooling_face', + 'sleepy', + 'face_exhaling', + 'dizzy_face', + 'face_with_spiral_eyes', + 'zipper_mouth', + 'woozy_face', + 'nauseated_face', + 'face_vomiting', + 'sneezing_face', + 'mask', + 'thermometer_face', + 'head_bandage', + 'money_mouth', + 'cowboy', + 'smiling_imp', + 'imp', + 'japanese_ogre', + 'japanese_goblin', + 'clown', + 'poop', + 'ghost', + 'skull', + 'skull_crossbones', + 'alien', + 'space_invader', + 'robot', + 'jack_o_lantern', + 'smiley_cat', + 'smile_cat', + 'joy_cat', + 'heart_eyes_cat', + 'smirk_cat', + 'kissing_cat', + 'scream_cat', + 'crying_cat_face', + 'pouting_cat', + 'heart_hands', + 'palms_up_together', + 'open_hands', + 'raised_hands', + 'clap', + 'handshake', + 'thumbsup', + 'thumbsdown', + 'punch', + 'fist', + 'left_facing_fist', + 'right_facing_fist', + 'leftwards_pushing_hand', + 'rightwards_pushing_hand', + 'fingers_crossed', + 'v', + 'hand_with_index_finger_and_thumb_crossed', + 'love_you_gesture', + 'metal', + 'ok_hand', + 'pinched_fingers', + 'pinching_hand', + 'palm_down_hand', + 'palm_up_hand', + 'point_left', + 'point_right', + 'point_up_2', + 'point_down', + 'point_up', + 'raised_hand', + 'raised_back_of_hand', + 'hand_splayed', + 'vulcan', + 'wave', + 'call_me', + 'leftwards_hand', + 'rightwards_hand', + 'muscle', + 'mechanical_arm', + 'middle_finger', + 'writing_hand', + 'pray', + 'index_pointing_at_the_viewer', + 'foot', + 'leg', + 'mechanical_leg', + 'lipstick', + 'kiss', + 'lips', + 'biting_lip', + 'tooth', + 'tongue', + 'ear', + 'ear_with_hearing_aid', + 'nose', + 'fingerprint', + 'footprints', + 'eye', + 'eyes', + 'anatomical_heart', + 'lungs', + 'brain', + 'speaking_head', + 'bust_in_silhouette', + 'busts_in_silhouette', + 'people_hugging', + 'baby', + 'child', + 'girl', + 'boy', + 'adult', + 'woman', + 'man', + 'person_curly_hair', + 'woman_curly_haired', + 'man_curly_haired', + 'person_red_hair', + 'woman_red_haired', + 'man_red_haired', + 'blond_haired_person', + 'blond-haired_woman', + 'blond-haired_man', + 'person_white_hair', + 'woman_white_haired', + 'man_white_haired', + 'person_bald', + 'woman_bald', + 'man_bald', + 'bearded_person', + 'woman_beard', + 'man_beard', + 'older_adult', + 'older_woman', + 'older_man', + 'man_with_chinese_cap', + 'person_wearing_turban', + 'woman_wearing_turban', + 'man_wearing_turban', + 'woman_with_headscarf', + 'police_officer', + 'woman_police_officer', + 'man_police_officer', + 'construction_worker', + 'woman_construction_worker', + 'man_construction_worker', + 'guard', + 'woman_guard', + 'man_guard', + 'detective', + 'woman_detective', + 'man_detective', + 'health_worker', + 'woman_health_worker', + 'man_health_worker', + 'farmer', + 'woman_farmer', + 'man_farmer', + 'cook', + 'woman_cook', + 'man_cook', + 'student', + 'woman_student', + 'man_student', + 'singer', + 'woman_singer', + 'man_singer', + 'teacher', + 'woman_teacher', + 'man_teacher', + 'factory_worker', + 'woman_factory_worker', + 'man_factory_worker', + 'technologist', + 'woman_technologist', + 'man_technologist', + 'office_worker', + 'woman_office_worker', + 'man_office_worker', + 'mechanic', + 'woman_mechanic', + 'man_mechanic', + 'scientist', + 'woman_scientist', + 'man_scientist', + 'artist', + 'woman_artist', + 'man_artist', + 'firefighter', + 'woman_firefighter', + 'man_firefighter', + 'pilot', + 'woman_pilot', + 'man_pilot', + 'astronaut', + 'woman_astronaut', + 'man_astronaut', + 'judge', + 'woman_judge', + 'man_judge', + 'person_with_veil', + 'woman_with_veil', + 'man_with_veil', + 'person_in_tuxedo', + 'woman_in_tuxedo', + 'man_in_tuxedo', + 'person_with_crown', + 'princess', + 'prince', + 'superhero', + 'woman_superhero', + 'man_superhero', + 'supervillain', + 'woman_supervillain', + 'man_supervillain', + 'ninja', + 'mx_claus', + 'mrs_claus', + 'santa', + 'mage', + 'woman_mage', + 'man_mage', + 'elf', + 'woman_elf', + 'man_elf', + 'troll', + 'vampire', + 'woman_vampire', + 'man_vampire', + 'zombie', + 'woman_zombie', + 'man_zombie', + 'genie', + 'woman_genie', + 'man_genie', + 'merperson', + 'mermaid', + 'merman', + 'fairy', + 'woman_fairy', + 'man_fairy', + 'angel', + 'pregnant_person', + 'pregnant_woman', + 'pregnant_man', + 'breast_feeding', + 'person_feeding_baby', + 'woman_feeding_baby', + 'man_feeding_baby', + 'person_bowing', + 'woman_bowing', + 'man_bowing', + 'person_tipping_hand', + 'woman_tipping_hand', + 'man_tipping_hand', + 'person_gesturing_no', + 'woman_gesturing_no', + 'man_gesturing_no', + 'person_gesturing_ok', + 'woman_gesturing_ok', + 'man_gesturing_ok', + 'person_raising_hand', + 'woman_raising_hand', + 'man_raising_hand', + 'deaf_person', + 'deaf_woman', + 'deaf_man', + 'person_facepalming', + 'woman_facepalming', + 'man_facepalming', + 'person_shrugging', + 'woman_shrugging', + 'man_shrugging', + 'person_pouting', + 'woman_pouting', + 'man_pouting', + 'person_frowning', + 'woman_frowning', + 'man_frowning', + 'person_getting_haircut', + 'woman_getting_haircut', + 'man_getting_haircut', + 'person_getting_massage', + 'woman_getting_face_massage', + 'man_getting_face_massage', + 'person_in_steamy_room', + 'woman_in_steamy_room', + 'man_in_steamy_room', + 'nail_care', + 'selfie', + 'dancer', + 'man_dancing', + 'people_with_bunny_ears_partying', + 'women_with_bunny_ears_partying', + 'men_with_bunny_ears_partying', + 'levitate', + 'person_in_manual_wheelchair', + 'woman_in_manual_wheelchair', + 'man_in_manual_wheelchair', + 'person_in_manual_wheelchair_facing_right', + 'woman_in_manual_wheelchair_facing_right', + 'man_in_manual_wheelchair_facing_right', + 'person_in_motorized_wheelchair', + 'woman_in_motorized_wheelchair', + 'man_in_motorized_wheelchair', + 'person_in_motorized_wheelchair_facing_right', + 'woman_in_motorized_wheelchair_facing_right', + 'man_in_motorized_wheelchair_facing_right', + 'person_walking', + 'woman_walking', + 'man_walking', + 'person_walking_facing_right', + 'woman_walking_facing_right', + 'man_walking_facing_right', + 'person_with_probing_cane', + 'woman_with_probing_cane', + 'man_with_probing_cane', + 'person_with_white_cane_facing_right', + 'woman_with_white_cane_facing_right', + 'man_with_white_cane_facing_right', + 'person_kneeling', + 'woman_kneeling', + 'man_kneeling', + 'person_kneeling_facing_right', + 'woman_kneeling_facing_right', + 'man_kneeling_facing_right', + 'person_running', + 'woman_running', + 'man_running', + 'person_running_facing_right', + 'woman_running_facing_right', + 'man_running_facing_right', + 'person_standing', + 'woman_standing', + 'man_standing', + 'people_holding_hands', + 'couple', + 'two_women_holding_hands', + 'two_men_holding_hands', + 'couple_with_heart', + 'couple_with_heart_woman_man', + 'couple_ww', + 'couple_mm', + 'couplekiss', + 'kiss_woman_man', + 'kiss_ww', + 'kiss_mm', + 'family_adult_adult_child', + 'family_adult_adult_child_child', + 'family_adult_child_child', + 'family_adult_child', + 'family', + 'family_man_woman_boy', + 'family_mwg', + 'family_mwgb', + 'family_mwbb', + 'family_mwgg', + 'family_wwb', + 'family_wwg', + 'family_wwgb', + 'family_wwbb', + 'family_wwgg', + 'family_mmb', + 'family_mmg', + 'family_mmgb', + 'family_mmbb', + 'family_mmgg', + 'family_woman_boy', + 'family_woman_girl', + 'family_woman_girl_boy', + 'family_woman_boy_boy', + 'family_woman_girl_girl', + 'family_man_boy', + 'family_man_girl', + 'family_man_girl_boy', + 'family_man_boy_boy', + 'family_man_girl_girl', + 'knot', + 'yarn', + 'thread', + 'sewing_needle', + 'coat', + 'lab_coat', + 'safety_vest', + 'womans_clothes', + 'shirt', + 'jeans', + 'briefs', + 'shorts', + 'necktie', + 'dress', + 'bikini', + 'one_piece_swimsuit', + 'kimono', + 'sari', + 'thong_sandal', + 'womans_flat_shoe', + 'high_heel', + 'sandal', + 'boot', + 'mans_shoe', + 'athletic_shoe', + 'hiking_boot', + 'socks', + 'gloves', + 'scarf', + 'tophat', + 'billed_cap', + 'womans_hat', + 'mortar_board', + 'helmet_with_cross', + 'military_helmet', + 'crown', + 'ring', + 'pouch', + 'purse', + 'handbag', + 'briefcase', + 'school_satchel', + 'luggage', + 'eyeglasses', + 'dark_sunglasses', + 'goggles', + 'closed_umbrella', + 'curly_haired', + 'red_haired', + 'white_haired', + 'bald', + ], + nature: [ + 'dog', + 'cat', + 'mouse', + 'hamster', + 'rabbit', + 'fox', + 'bear', + 'panda_face', + 'polar_bear', + 'koala', + 'tiger', + 'lion_face', + 'cow', + 'pig', + 'pig_nose', + 'frog', + 'monkey_face', + 'see_no_evil', + 'hear_no_evil', + 'speak_no_evil', + 'monkey', + 'chicken', + 'penguin', + 'bird', + 'baby_chick', + 'hatching_chick', + 'hatched_chick', + 'goose', + 'duck', + 'black_bird', + 'eagle', + 'owl', + 'bat', + 'wolf', + 'boar', + 'horse', + 'unicorn', + 'moose', + 'bee', + 'worm', + 'bug', + 'butterfly', + 'snail', + 'lady_beetle', + 'ant', + 'fly', + 'beetle', + 'cockroach', + 'mosquito', + 'cricket', + 'spider', + 'spider_web', + 'scorpion', + 'turtle', + 'snake', + 'lizard', + 't_rex', + 'sauropod', + 'octopus', + 'squid', + 'jellyfish', + 'shrimp', + 'lobster', + 'crab', + 'blowfish', + 'tropical_fish', + 'fish', + 'dolphin', + 'whale', + 'whale2', + 'shark', + 'seal', + 'crocodile', + 'tiger2', + 'leopard', + 'zebra', + 'gorilla', + 'orangutan', + 'mammoth', + 'elephant', + 'hippopotamus', + 'rhino', + 'dromedary_camel', + 'camel', + 'giraffe', + 'kangaroo', + 'bison', + 'water_buffalo', + 'ox', + 'cow2', + 'donkey', + 'racehorse', + 'pig2', + 'ram', + 'sheep', + 'llama', + 'goat', + 'deer', + 'dog2', + 'poodle', + 'guide_dog', + 'service_dog', + 'cat2', + 'black_cat', + 'feather', + 'wing', + 'rooster', + 'turkey', + 'dodo', + 'peacock', + 'parrot', + 'swan', + 'flamingo', + 'dove', + 'rabbit2', + 'raccoon', + 'skunk', + 'badger', + 'beaver', + 'otter', + 'sloth', + 'mouse2', + 'rat', + 'chipmunk', + 'hedgehog', + 'feet', + 'dragon', + 'dragon_face', + 'phoenix', + 'cactus', + 'christmas_tree', + 'evergreen_tree', + 'deciduous_tree', + 'palm_tree', + 'leafless_tree', + 'wood', + 'seedling', + 'herb', + 'shamrock', + 'four_leaf_clover', + 'bamboo', + 'potted_plant', + 'tanabata_tree', + 'leaves', + 'fallen_leaf', + 'maple_leaf', + 'nest_with_eggs', + 'empty_nest', + 'mushroom', + 'brown_mushroom', + 'shell', + 'coral', + 'rock', + 'ear_of_rice', + 'bouquet', + 'tulip', + 'rose', + 'wilted_rose', + 'hyacinth', + 'lotus', + 'hibiscus', + 'cherry_blossom', + 'blossom', + 'sunflower', + 'sun_with_face', + 'full_moon_with_face', + 'first_quarter_moon_with_face', + 'last_quarter_moon_with_face', + 'new_moon_with_face', + 'full_moon', + 'waning_gibbous_moon', + 'last_quarter_moon', + 'waning_crescent_moon', + 'new_moon', + 'waxing_crescent_moon', + 'first_quarter_moon', + 'waxing_gibbous_moon', + 'crescent_moon', + 'earth_americas', + 'earth_africa', + 'earth_asia', + 'ringed_planet', + 'dizzy', + 'star', + 'star2', + 'sparkles', + 'zap', + 'comet', + 'boom', + 'fire', + 'cloud_tornado', + 'rainbow', + 'sunny', + 'white_sun_small_cloud', + 'partly_sunny', + 'white_sun_cloud', + 'cloud', + 'white_sun_rain_cloud', + 'cloud_rain', + 'thunder_cloud_rain', + 'cloud_lightning', + 'cloud_snow', + 'snowflake', + 'snowman2', + 'snowman', + 'wind_blowing_face', + 'dash', + 'droplet', + 'sweat_drops', + 'bubbles', + 'umbrella', + 'umbrella2', + 'ocean', + 'fog', + ], + food: [ + 'green_apple', + 'apple', + 'pear', + 'tangerine', + 'lemon', + 'lime', + 'banana', + 'watermelon', + 'grapes', + 'strawberry', + 'blueberries', + 'melon', + 'cherries', + 'peach', + 'mango', + 'pineapple', + 'coconut', + 'kiwi', + 'tomato', + 'eggplant', + 'avocado', + 'pea_pod', + 'broccoli', + 'leafy_green', + 'cucumber', + 'hot_pepper', + 'bell_pepper', + 'corn', + 'carrot', + 'olive', + 'garlic', + 'onion', + 'potato', + 'root_vegetable', + 'sweet_potato', + 'ginger_root', + 'croissant', + 'bagel', + 'bread', + 'french_bread', + 'pretzel', + 'cheese', + 'egg', + 'cooking', + 'butter', + 'pancakes', + 'waffle', + 'bacon', + 'cut_of_meat', + 'poultry_leg', + 'meat_on_bone', + 'bone', + 'hotdog', + 'hamburger', + 'fries', + 'pizza', + 'flatbread', + 'sandwich', + 'stuffed_flatbread', + 'falafel', + 'taco', + 'burrito', + 'tamale', + 'salad', + 'shallow_pan_of_food', + 'fondue', + 'canned_food', + 'jar', + 'spaghetti', + 'ramen', + 'stew', + 'curry', + 'sushi', + 'bento', + 'dumpling', + 'oyster', + 'fried_shrimp', + 'rice_ball', + 'rice', + 'rice_cracker', + 'fish_cake', + 'fortune_cookie', + 'moon_cake', + 'oden', + 'dango', + 'shaved_ice', + 'ice_cream', + 'icecream', + 'pie', + 'cupcake', + 'cake', + 'birthday', + 'custard', + 'lollipop', + 'candy', + 'chocolate_bar', + 'popcorn', + 'doughnut', + 'cookie', + 'chestnut', + 'peanuts', + 'beans', + 'honey_pot', + 'milk', + 'pouring_liquid', + 'baby_bottle', + 'teapot', + 'coffee', + 'tea', + 'mate', + 'beverage_box', + 'cup_with_straw', + 'bubble_tea', + 'sake', + 'beer', + 'beers', + 'champagne_glass', + 'wine_glass', + 'tumbler_glass', + 'cocktail', + 'tropical_drink', + 'champagne', + 'ice_cube', + 'spoon', + 'fork_and_knife', + 'fork_knife_plate', + 'bowl_with_spoon', + 'takeout_box', + 'chopsticks', + 'salt', + ], + activity: [ + 'soccer', + 'basketball', + 'football', + 'baseball', + 'softball', + 'tennis', + 'volleyball', + 'rugby_football', + 'flying_disc', + '8ball', + 'yo_yo', + 'ping_pong', + 'badminton', + 'hockey', + 'field_hockey', + 'lacrosse', + 'cricket_game', + 'boomerang', + 'goal', + 'golf', + 'kite', + 'playground_slide', + 'bow_and_arrow', + 'fishing_pole_and_fish', + 'diving_mask', + 'boxing_glove', + 'martial_arts_uniform', + 'running_shirt_with_sash', + 'skateboard', + 'roller_skate', + 'sled', + 'ice_skate', + 'curling_stone', + 'ski', + 'skier', + 'snowboarder', + 'parachute', + 'person_lifting_weights', + 'woman_lifting_weights', + 'man_lifting_weights', + 'people_wrestling', + 'women_wrestling', + 'men_wrestling', + 'person_doing_cartwheel', + 'woman_cartwheeling', + 'man_cartwheeling', + 'person_bouncing_ball', + 'woman_bouncing_ball', + 'man_bouncing_ball', + 'person_fencing', + 'person_playing_handball', + 'woman_playing_handball', + 'man_playing_handball', + 'person_golfing', + 'woman_golfing', + 'man_golfing', + 'horse_racing', + 'person_in_lotus_position', + 'woman_in_lotus_position', + 'man_in_lotus_position', + 'person_surfing', + 'woman_surfing', + 'man_surfing', + 'person_swimming', + 'woman_swimming', + 'man_swimming', + 'person_playing_water_polo', + 'woman_playing_water_polo', + 'man_playing_water_polo', + 'person_rowing_boat', + 'woman_rowing_boat', + 'man_rowing_boat', + 'person_climbing', + 'woman_climbing', + 'man_climbing', + 'person_mountain_biking', + 'woman_mountain_biking', + 'man_mountain_biking', + 'person_biking', + 'woman_biking', + 'man_biking', + 'trophy', + 'first_place', + 'second_place', + 'third_place', + 'medal', + 'military_medal', + 'rosette', + 'reminder_ribbon', + 'ticket', + 'tickets', + 'circus_tent', + 'person_juggling', + 'woman_juggling', + 'man_juggling', + 'performing_arts', + 'ballet_shoes', + 'art', + 'splatter', + 'clapper', + 'microphone', + 'headphones', + 'musical_score', + 'musical_keyboard', + 'maracas', + 'drum', + 'long_drum', + 'saxophone', + 'trumpet', + 'accordion', + 'guitar', + 'banjo', + 'harp', + 'violin', + 'flute', + 'game_die', + 'chess_pawn', + 'dart', + 'bowling', + 'video_game', + 'slot_machine', + 'jigsaw', + ], + travel: [ + 'red_car', + 'taxi', + 'blue_car', + 'pickup_truck', + 'minibus', + 'bus', + 'trolleybus', + 'race_car', + 'police_car', + 'ambulance', + 'fire_engine', + 'truck', + 'articulated_lorry', + 'tractor', + 'probing_cane', + 'manual_wheelchair', + 'motorized_wheelchair', + 'crutch', + 'scooter', + 'bike', + 'motor_scooter', + 'motorcycle', + 'auto_rickshaw', + 'wheel', + 'rotating_light', + 'oncoming_police_car', + 'oncoming_bus', + 'oncoming_automobile', + 'oncoming_taxi', + 'aerial_tramway', + 'mountain_cableway', + 'suspension_railway', + 'railway_car', + 'train', + 'mountain_railway', + 'monorail', + 'bullettrain_side', + 'bullettrain_front', + 'light_rail', + 'steam_locomotive', + 'train2', + 'metro', + 'tram', + 'station', + 'airplane', + 'airplane_departure', + 'airplane_arriving', + 'airplane_small', + 'seat', + 'satellite_orbital', + 'rocket', + 'flying_saucer', + 'helicopter', + 'canoe', + 'sailboat', + 'speedboat', + 'motorboat', + 'cruise_ship', + 'ferry', + 'ship', + 'ring_buoy', + 'anchor', + 'hook', + 'fuelpump', + 'construction', + 'vertical_traffic_light', + 'traffic_light', + 'busstop', + 'map', + 'moyai', + 'statue_of_liberty', + 'tokyo_tower', + 'european_castle', + 'japanese_castle', + 'stadium', + 'ferris_wheel', + 'roller_coaster', + 'carousel_horse', + 'fountain', + 'beach_umbrella', + 'beach', + 'island', + 'desert', + 'volcano', + 'mountain', + 'mountain_snow', + 'mount_fuji', + 'camping', + 'tent', + 'house', + 'house_with_garden', + 'homes', + 'house_abandoned', + 'hut', + 'construction_site', + 'factory', + 'office', + 'department_store', + 'post_office', + 'european_post_office', + 'hospital', + 'bank', + 'hotel', + 'convenience_store', + 'school', + 'love_hotel', + 'wedding', + 'classical_building', + 'church', + 'mosque', + 'synagogue', + 'hindu_temple', + 'kaaba', + 'shinto_shrine', + 'railway_track', + 'motorway', + 'japan', + 'rice_scene', + 'park', + 'sunrise', + 'sunrise_over_mountains', + 'stars', + 'sparkler', + 'fireworks', + 'city_sunset', + 'city_dusk', + 'cityscape', + 'night_with_stars', + 'milky_way', + 'bridge_at_night', + 'foggy', + ], + objects: [ + 'watch', + 'mobile_phone', + 'calling', + 'computer', + 'keyboard', + 'desktop', + 'printer', + 'mouse_three_button', + 'trackball', + 'joystick', + 'compression', + 'minidisc', + 'floppy_disk', + 'cd', + 'dvd', + 'vhs', + 'camera', + 'camera_with_flash', + 'video_camera', + 'movie_camera', + 'projector', + 'film_frames', + 'telephone_receiver', + 'telephone', + 'pager', + 'fax', + 'tv', + 'radio', + 'microphone2', + 'level_slider', + 'control_knobs', + 'compass', + 'stopwatch', + 'timer', + 'alarm_clock', + 'clock', + 'hourglass', + 'hourglass_flowing_sand', + 'satellite', + 'battery', + 'low_battery', + 'electric_plug', + 'bulb', + 'flashlight', + 'candle', + 'diya_lamp', + 'fire_extinguisher', + 'oil', + 'money_with_wings', + 'dollar', + 'yen', + 'euro', + 'pound', + 'coin', + 'moneybag', + 'credit_card', + 'identification_card', + 'gem', + 'scales', + 'ladder', + 'toolbox', + 'screwdriver', + 'wrench', + 'hammer', + 'hammer_pick', + 'tools', + 'pick', + 'shovel', + 'carpentry_saw', + 'nut_and_bolt', + 'gear', + 'mouse_trap', + 'bricks', + 'chains', + 'broken_chain', + 'magnet', + 'gun', + 'bomb', + 'firecracker', + 'axe', + 'knife', + 'dagger', + 'crossed_swords', + 'shield', + 'smoking', + 'coffin', + 'headstone', + 'urn', + 'amphora', + 'crystal_ball', + 'prayer_beads', + 'nazar_amulet', + 'hamsa', + 'barber', + 'alembic', + 'telescope', + 'microscope', + 'hole', + 'x_ray', + 'adhesive_bandage', + 'stethoscope', + 'pill', + 'syringe', + 'drop_of_blood', + 'dna', + 'microbe', + 'petri_dish', + 'test_tube', + 'thermometer', + 'broom', + 'plunger', + 'basket', + 'roll_of_paper', + 'toilet', + 'potable_water', + 'shower', + 'bathtub', + 'bath', + 'soap', + 'toothbrush', + 'razor', + 'hair_pick', + 'sponge', + 'bucket', + 'squeeze_bottle', + 'bellhop', + 'key', + 'key2', + 'door', + 'chair', + 'couch', + 'bed', + 'sleeping_accommodation', + 'teddy_bear', + 'nesting_dolls', + 'frame_photo', + 'mirror', + 'window', + 'shopping_bags', + 'shopping_cart', + 'gift', + 'balloon', + 'flags', + 'ribbon', + 'magic_wand', + 'piñata', + 'confetti_ball', + 'tada', + 'dolls', + 'folding_hand_fan', + 'izakaya_lantern', + 'wind_chime', + 'mirror_ball', + 'red_envelope', + 'envelope', + 'envelope_with_arrow', + 'incoming_envelope', + 'e-mail', + 'love_letter', + 'inbox_tray', + 'outbox_tray', + 'package', + 'label', + 'placard', + 'mailbox_closed', + 'mailbox', + 'mailbox_with_mail', + 'mailbox_with_no_mail', + 'postbox', + 'postal_horn', + 'scroll', + 'page_with_curl', + 'page_facing_up', + 'bookmark_tabs', + 'receipt', + 'bar_chart', + 'chart_with_upwards_trend', + 'chart_with_downwards_trend', + 'notepad_spiral', + 'calendar_spiral', + 'calendar', + 'date', + 'wastebasket', + 'card_index', + 'card_box', + 'ballot_box', + 'file_cabinet', + 'clipboard', + 'file_folder', + 'open_file_folder', + 'dividers', + 'newspaper2', + 'newspaper', + 'notebook', + 'notebook_with_decorative_cover', + 'ledger', + 'closed_book', + 'green_book', + 'blue_book', + 'orange_book', + 'books', + 'book', + 'bookmark', + 'safety_pin', + 'link', + 'paperclip', + 'paperclips', + 'triangular_ruler', + 'straight_ruler', + 'abacus', + 'pushpin', + 'round_pushpin', + 'scissors', + 'pen_ballpoint', + 'pen_fountain', + 'black_nib', + 'paintbrush', + 'crayon', + 'pencil', + 'pencil2', + 'mag', + 'mag_right', + 'lock_with_ink_pen', + 'closed_lock_with_key', + 'lock', + 'unlock', + ], + symbols: [ + 'pink_heart', + 'heart', + 'orange_heart', + 'yellow_heart', + 'green_heart', + 'light_blue_heart', + 'blue_heart', + 'purple_heart', + 'black_heart', + 'grey_heart', + 'white_heart', + 'brown_heart', + 'broken_heart', + 'heart_exclamation', + 'two_hearts', + 'revolving_hearts', + 'heartbeat', + 'heartpulse', + 'sparkling_heart', + 'cupid', + 'gift_heart', + 'mending_heart', + 'heart_on_fire', + 'heart_decoration', + 'peace', + 'cross', + 'star_and_crescent', + 'om_symbol', + 'wheel_of_dharma', + 'khanda', + 'star_of_david', + 'six_pointed_star', + 'menorah', + 'yin_yang', + 'orthodox_cross', + 'place_of_worship', + 'ophiuchus', + 'aries', + 'taurus', + 'gemini', + 'cancer', + 'leo', + 'virgo', + 'libra', + 'scorpius', + 'sagittarius', + 'capricorn', + 'aquarius', + 'pisces', + 'id', + 'atom', + 'accept', + 'radioactive', + 'biohazard', + 'mobile_phone_off', + 'vibration_mode', + 'u6709', + 'u7121', + 'u7533', + 'u55b6', + 'u6708', + 'eight_pointed_black_star', + 'vs', + 'white_flower', + 'ideograph_advantage', + 'secret', + 'congratulations', + 'u5408', + 'u6e80', + 'u5272', + 'u7981', + 'a', + 'b', + 'ab', + 'cl', + 'o2', + 'sos', + 'x', + 'o', + 'octagonal_sign', + 'no_entry', + 'name_badge', + 'no_entry_sign', + '100', + 'anger', + 'hotsprings', + 'no_pedestrians', + 'do_not_litter', + 'no_bicycles', + 'non-potable_water', + 'underage', + 'no_mobile_phones', + 'no_smoking', + 'exclamation', + 'grey_exclamation', + 'question', + 'grey_question', + 'bangbang', + 'interrobang', + 'low_brightness', + 'high_brightness', + 'part_alternation_mark', + 'warning', + 'children_crossing', + 'trident', + 'fleur-de-lis', + 'beginner', + 'recycle', + 'white_check_mark', + 'u6307', + 'chart', + 'sparkle', + 'eight_spoked_asterisk', + 'negative_squared_cross_mark', + 'globe_with_meridians', + 'diamond_shape_with_a_dot_inside', + 'm', + 'cyclone', + 'zzz', + 'atm', + 'wc', + 'wheelchair', + 'parking', + 'elevator', + 'u7a7a', + 'sa', + 'passport_control', + 'customs', + 'baggage_claim', + 'left_luggage', + 'wireless', + 'mens', + 'womens', + 'baby_symbol', + 'restroom', + 'put_litter_in_its_place', + 'cinema', + 'signal_strength', + 'koko', + 'symbols', + 'information_source', + 'abc', + 'abcd', + 'capital_abcd', + 'ng', + 'ok', + 'up', + 'cool', + 'new', + 'free', + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'keycap_ten', + '1234', + 'hash', + 'asterisk', + 'eject', + 'arrow_forward', + 'pause_button', + 'play_pause', + 'stop_button', + 'record_button', + 'track_next', + 'track_previous', + 'fast_forward', + 'rewind', + 'arrow_double_up', + 'arrow_double_down', + 'arrow_backward', + 'arrow_up_small', + 'arrow_down_small', + 'arrow_right', + 'arrow_left', + 'arrow_up', + 'arrow_down', + 'arrow_upper_right', + 'arrow_lower_right', + 'arrow_lower_left', + 'arrow_upper_left', + 'arrow_up_down', + 'left_right_arrow', + 'arrow_right_hook', + 'leftwards_arrow_with_hook', + 'arrow_heading_up', + 'arrow_heading_down', + 'twisted_rightwards_arrows', + 'repeat', + 'repeat_one', + 'arrows_counterclockwise', + 'arrows_clockwise', + 'musical_note', + 'notes', + 'heavy_plus_sign', + 'heavy_minus_sign', + 'heavy_division_sign', + 'heavy_multiplication_x', + 'heavy_equals_sign', + 'infinity', + 'heavy_dollar_sign', + 'currency_exchange', + 'tm', + 'copyright', + 'registered', + 'wavy_dash', + 'curly_loop', + 'loop', + 'end', + 'back', + 'on', + 'top', + 'soon', + 'heavy_check_mark', + 'ballot_box_with_check', + 'radio_button', + 'white_circle', + 'black_circle', + 'red_circle', + 'blue_circle', + 'brown_circle', + 'purple_circle', + 'green_circle', + 'yellow_circle', + 'orange_circle', + 'small_red_triangle', + 'small_red_triangle_down', + 'small_orange_diamond', + 'small_blue_diamond', + 'large_orange_diamond', + 'large_blue_diamond', + 'white_square_button', + 'black_square_button', + 'black_small_square', + 'white_small_square', + 'black_medium_small_square', + 'white_medium_small_square', + 'black_medium_square', + 'white_medium_square', + 'black_large_square', + 'white_large_square', + 'orange_square', + 'blue_square', + 'red_square', + 'brown_square', + 'purple_square', + 'green_square', + 'yellow_square', + 'speaker', + 'mute', + 'sound', + 'loud_sound', + 'bell', + 'no_bell', + 'mega', + 'loudspeaker', + 'speech_left', + 'eye_in_speech_bubble', + 'speech_balloon', + 'thought_balloon', + 'anger_right', + 'spades', + 'clubs', + 'hearts', + 'diamonds', + 'black_joker', + 'flower_playing_cards', + 'mahjong', + 'clock1', + 'clock2', + 'clock3', + 'clock4', + 'clock5', + 'clock6', + 'clock7', + 'clock8', + 'clock9', + 'clock10', + 'clock11', + 'clock12', + 'clock130', + 'clock230', + 'clock330', + 'clock430', + 'clock530', + 'clock630', + 'clock730', + 'clock830', + 'clock930', + 'clock1030', + 'clock1130', + 'clock1230', + 'digit_zero', + 'digit_one', + 'digit_two', + 'digit_three', + 'digit_four', + 'digit_five', + 'digit_six', + 'digit_seven', + 'digit_eight', + 'digit_nine', + 'pound_symbol', + 'asterisk_symbol', + 'female_sign', + 'male_sign', + 'transgender_symbol', + 'medical_symbol', + ], + flags: [ + 'flag_white', + 'flag_black', + 'pirate_flag', + 'checkered_flag', + 'triangular_flag_on_post', + 'rainbow_flag', + 'transgender_flag', + 'united_nations', + 'flag_af', + 'flag_ax', + 'flag_al', + 'flag_dz', + 'flag_as', + 'flag_ad', + 'flag_ao', + 'flag_ai', + 'flag_aq', + 'flag_ag', + 'flag_ar', + 'flag_am', + 'flag_aw', + 'flag_au', + 'flag_at', + 'flag_az', + 'flag_bs', + 'flag_bh', + 'flag_bd', + 'flag_bb', + 'flag_by', + 'flag_be', + 'flag_bz', + 'flag_bj', + 'flag_bm', + 'flag_bt', + 'flag_bo', + 'flag_ba', + 'flag_bw', + 'flag_br', + 'flag_io', + 'flag_vg', + 'flag_bn', + 'flag_bg', + 'flag_bf', + 'flag_bi', + 'flag_kh', + 'flag_cm', + 'flag_ca', + 'flag_ic', + 'flag_cv', + 'flag_bq', + 'flag_ky', + 'flag_cf', + 'flag_td', + 'flag_cl', + 'flag_cn', + 'flag_cx', + 'flag_cc', + 'flag_co', + 'flag_km', + 'flag_cg', + 'flag_cd', + 'flag_ck', + 'flag_cr', + 'flag_ci', + 'flag_hr', + 'flag_cu', + 'flag_cw', + 'flag_cy', + 'flag_cz', + 'flag_dk', + 'flag_dj', + 'flag_dm', + 'flag_do', + 'flag_ec', + 'flag_eg', + 'flag_sv', + 'flag_gq', + 'flag_er', + 'flag_ee', + 'flag_et', + 'flag_eu', + 'flag_fk', + 'flag_fo', + 'flag_fj', + 'flag_fi', + 'flag_fr', + 'flag_gf', + 'flag_pf', + 'flag_tf', + 'flag_ga', + 'flag_gm', + 'flag_ge', + 'flag_de', + 'flag_gh', + 'flag_gi', + 'flag_gr', + 'flag_gl', + 'flag_gd', + 'flag_gp', + 'flag_gu', + 'flag_gt', + 'flag_gg', + 'flag_gn', + 'flag_gw', + 'flag_gy', + 'flag_ht', + 'flag_hn', + 'flag_hk', + 'flag_hu', + 'flag_is', + 'flag_in', + 'flag_id', + 'flag_ir', + 'flag_iq', + 'flag_ie', + 'flag_im', + 'flag_il', + 'flag_it', + 'flag_jm', + 'flag_jp', + 'crossed_flags', + 'flag_je', + 'flag_jo', + 'flag_kz', + 'flag_ke', + 'flag_ki', + 'flag_xk', + 'flag_kw', + 'flag_kg', + 'flag_la', + 'flag_lv', + 'flag_lb', + 'flag_ls', + 'flag_lr', + 'flag_ly', + 'flag_li', + 'flag_lt', + 'flag_lu', + 'flag_mo', + 'flag_mk', + 'flag_mg', + 'flag_mw', + 'flag_my', + 'flag_mv', + 'flag_ml', + 'flag_mt', + 'flag_mh', + 'flag_mq', + 'flag_mr', + 'flag_mu', + 'flag_yt', + 'flag_mx', + 'flag_fm', + 'flag_md', + 'flag_mc', + 'flag_mn', + 'flag_me', + 'flag_ms', + 'flag_ma', + 'flag_mz', + 'flag_mm', + 'flag_na', + 'flag_nr', + 'flag_np', + 'flag_nl', + 'flag_nc', + 'flag_nz', + 'flag_ni', + 'flag_ne', + 'flag_ng', + 'flag_nu', + 'flag_nf', + 'flag_kp', + 'flag_mp', + 'flag_no', + 'flag_om', + 'flag_pk', + 'flag_pw', + 'flag_ps', + 'flag_pa', + 'flag_pg', + 'flag_py', + 'flag_pe', + 'flag_ph', + 'flag_pn', + 'flag_pl', + 'flag_pt', + 'flag_pr', + 'flag_qa', + 'flag_re', + 'flag_ro', + 'flag_ru', + 'flag_rw', + 'flag_ws', + 'flag_sm', + 'flag_st', + 'flag_sark', + 'flag_sa', + 'flag_sn', + 'flag_rs', + 'flag_sc', + 'flag_sl', + 'flag_sg', + 'flag_sx', + 'flag_sk', + 'flag_si', + 'flag_gs', + 'flag_sb', + 'flag_so', + 'flag_za', + 'flag_kr', + 'flag_ss', + 'flag_es', + 'flag_lk', + 'flag_bl', + 'flag_sh', + 'flag_kn', + 'flag_lc', + 'flag_pm', + 'flag_vc', + 'flag_sd', + 'flag_sr', + 'flag_sz', + 'flag_se', + 'flag_ch', + 'flag_sy', + 'flag_tw', + 'flag_tj', + 'flag_tz', + 'flag_th', + 'flag_tl', + 'flag_tg', + 'flag_tk', + 'flag_to', + 'flag_tt', + 'flag_tn', + 'flag_tr', + 'flag_tm', + 'flag_tc', + 'flag_vi', + 'flag_tv', + 'flag_ug', + 'flag_ua', + 'flag_ae', + 'flag_gb', + 'england', + 'scotland', + 'wales', + 'flag_us', + 'flag_uy', + 'flag_uz', + 'flag_vu', + 'flag_va', + 'flag_ve', + 'flag_vn', + 'flag_wf', + 'flag_eh', + 'flag_ye', + 'flag_zm', + 'flag_zw', + 'flag_ac', + 'flag_bv', + 'flag_cp', + 'flag_ea', + 'flag_dg', + 'flag_hm', + 'flag_mf', + 'flag_sj', + 'flag_ta', + 'flag_um', + ], + modifier: [ + 'tone1', + 'tone2', + 'tone3', + 'tone4', + 'tone5', + ], + regional: [ + 'regional_indicator_z', + 'regional_indicator_y', + 'regional_indicator_x', + 'regional_indicator_w', + 'regional_indicator_v', + 'regional_indicator_u', + 'regional_indicator_t', + 'regional_indicator_s', + 'regional_indicator_r', + 'regional_indicator_q', + 'regional_indicator_p', + 'regional_indicator_o', + 'regional_indicator_n', + 'regional_indicator_m', + 'regional_indicator_l', + 'regional_indicator_k', + 'regional_indicator_j', + 'regional_indicator_i', + 'regional_indicator_h', + 'regional_indicator_g', + 'regional_indicator_f', + 'regional_indicator_e', + 'regional_indicator_d', + 'regional_indicator_c', + 'regional_indicator_b', + 'regional_indicator_a', + ], +}; diff --git a/yarn.lock b/yarn.lock index 991df6d92922e..c282a98f8eebe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8474,10 +8474,8 @@ __metadata: "@rocket.chat/models": "workspace:^" "@rocket.chat/network-broker": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" - "@types/emojione": "npm:^2.2.9" "@types/node": "npm:~22.16.5" "@types/sanitize-html": "npm:~2.16.0" - emojione: "npm:^4.5.0" eslint: "npm:~9.39.3" jest: "npm:~30.2.0" jest-qase-reporter: "npm:^2.1.4" @@ -9218,6 +9216,7 @@ __metadata: "@types/mocha": "github:whitecolor/mocha-types" "@types/node": "npm:~22.16.5" "@types/node-rsa": "npm:^1.1.4" + "@types/node-sprite-generator": "npm:^0" "@types/nodemailer": "npm:~6.4.22" "@types/oauth2-server": "npm:^3.0.18" "@types/object-path": "npm:^0.11.4" @@ -9288,7 +9287,7 @@ __metadata: drachtio-srf: "patch:drachtio-srf@npm%3A5.0.12#~/.yarn/patches/drachtio-srf-npm-5.0.12-b0b1afaad6.patch" ejson: "npm:^2.2.3" emailreplyparser: "npm:^0.0.5" - emoji-toolkit: "npm:^7.0.1" + emoji-toolkit: "npm:^10.0.0" emojione: "npm:^4.5.0" emojione-assets: "npm:^4.5.0" esl: "npm:^11.2.1" @@ -9354,6 +9353,7 @@ __metadata: node-dogstatsd: "npm:^0.0.7" node-fetch: "npm:2.7.0" node-rsa: "npm:^1.1.1" + node-sprite-generator: "npm:^0.10.2" nodemailer: "npm:^7.0.13" nyc: "npm:^17.1.0" object-path: "npm:^0.11.8" @@ -9729,7 +9729,6 @@ __metadata: "@storybook/react-webpack5": "npm:^8.6.17" "@testing-library/dom": "npm:~10.4.1" "@testing-library/react": "npm:~16.3.2" - "@types/emojione": "npm:^2.2.9" "@types/jest": "npm:~30.0.0" "@types/react": "npm:~18.3.27" "@types/react-dom": "npm:~18.3.7" @@ -12755,13 +12754,6 @@ __metadata: languageName: node linkType: hard -"@types/emojione@npm:^2.2.9": - version: 2.2.9 - resolution: "@types/emojione@npm:2.2.9" - checksum: 10/ec16f96f8d9886dc3f82bd8aa3ee34f320069771d9a82d01c3c20da9c0c13c7b07347eff2912b914caf3416e3cedea4b963ecc3331c23d743270c975a91ff4d4 - languageName: node - linkType: hard - "@types/eslint-scope@npm:^3.7.7": version: 3.7.7 resolution: "@types/eslint-scope@npm:3.7.7" @@ -13310,6 +13302,15 @@ __metadata: languageName: node linkType: hard +"@types/node-sprite-generator@npm:^0": + version: 0.10.6 + resolution: "@types/node-sprite-generator@npm:0.10.6" + dependencies: + "@types/express": "npm:*" + checksum: 10/a8d316033737fcd7e59fd6bb7c530f87436148163a6186534cf2227eeced35a7e0641f0c353b8427cf0aee6d7562e94aa799795ab6806b11b5c5821ba7e2b89a + languageName: node + linkType: hard + "@types/node@npm:*, @types/node@npm:>=0.0.2, @types/node@npm:>=12, @types/node@npm:>=12.0.0, @types/node@npm:>=13.7.0, @types/node@npm:>=18, @types/node@npm:>=18.0.0, @types/node@npm:>=4.0.0": version: 22.16.1 resolution: "@types/node@npm:22.16.1" @@ -15175,6 +15176,20 @@ __metadata: languageName: node linkType: hard +"array-parallel@npm:~0.1.3": + version: 0.1.3 + resolution: "array-parallel@npm:0.1.3" + checksum: 10/0d7e26ad68d073e1ba9f70bfd8403b4f8d810e32fbca616c422e06fdeb0e96a5589ae5816a0ac17707a1b499efd72ded9c6c5b796a8c1d92e743892ad62dcb15 + languageName: node + linkType: hard + +"array-series@npm:~0.1.5": + version: 0.1.5 + resolution: "array-series@npm:0.1.5" + checksum: 10/09f500cfd71b27e39ecb2a5fb4f141cd879283f9afb3b9145012b6ff3b3897323ef9a5edfea546963f92ec810cf58737473f0550004c3f8125a47875b1af458b + languageName: node + linkType: hard + "array-timsort@npm:^1.0.3": version: 1.0.3 resolution: "array-timsort@npm:1.0.3" @@ -15464,6 +15479,13 @@ __metadata: languageName: node linkType: hard +"async@npm:1.2.0": + version: 1.2.0 + resolution: "async@npm:1.2.0" + checksum: 10/1bdeec1da96eb9073ad67ae0c54b41cd1803a598a3a3b635de3a693e5c6c491c59085896b08711f2c53a9aa46b9ccc2aaf4d8258881b2a1ad47b3cb27a494fb3 + languageName: node + linkType: hard + "async@npm:^3.2.4": version: 3.2.6 resolution: "async@npm:3.2.6" @@ -16131,6 +16153,13 @@ __metadata: languageName: node linkType: hard +"bignumber.js@npm:^2.1.0": + version: 2.4.0 + resolution: "bignumber.js@npm:2.4.0" + checksum: 10/c43dd8f0ace26d6a07ab3c2a127e9b0c8428592e7ea79d2569ffc3e73d274e52c213b19e1759d74a27384b4ace34ffb3c440e396fbf68a2917b58a8376eeeb99 + languageName: node + linkType: hard + "bignumber.js@npm:^9.0.0": version: 9.0.2 resolution: "bignumber.js@npm:9.0.2" @@ -16138,6 +16167,13 @@ __metadata: languageName: node linkType: hard +"bin-pack@npm:1.0.1": + version: 1.0.1 + resolution: "bin-pack@npm:1.0.1" + checksum: 10/fb8451b9189a5e4299e66189cdd3dfb78f65756f0ff21a84b728931068ad15a24167f3030a54c17234d104d2789d619394a9cfc2d834e34f340183a7c9f9f4fb + languageName: node + linkType: hard + "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -16177,6 +16213,13 @@ __metadata: languageName: node linkType: hard +"bmp-js@npm:0.0.1": + version: 0.0.1 + resolution: "bmp-js@npm:0.0.1" + checksum: 10/285c610738d616f6afbc42edac0d7da124ed4c0305f7075ee2bafb7d86aaa3e264030cbafd06c69f53d78700c881badfb4634a24804629e0de1b8f30fc0f321f + languageName: node + linkType: hard + "bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" @@ -16255,6 +16298,16 @@ __metadata: languageName: node linkType: hard +"brace-expansion@npm:^1.0.0": + version: 1.1.12 + resolution: "brace-expansion@npm:1.1.12" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10/12cb6d6310629e3048cadb003e1aca4d8c9bb5c67c3c321bafdd7e7a50155de081f78ea3e0ed92ecc75a9015e784f301efc8132383132f4f7904ad1ac529c562 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -16889,6 +16942,16 @@ __metadata: languageName: node linkType: hard +"canvas@npm:1.3.12": + version: 1.3.12 + resolution: "canvas@npm:1.3.12" + dependencies: + nan: "npm:^2.1.0" + node-gyp: "npm:latest" + checksum: 10/d2e3835bf5924f2450b82cac906a4dc0e2efbd526ce5e45f4369719342d69e683dddec366d47c9e95bfcc0634aad2ecb008f75fad544107c3359a422218004ea + languageName: node + linkType: hard + "capital-case@npm:^1.0.4": version: 1.0.4 resolution: "capital-case@npm:1.0.4" @@ -18756,6 +18819,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:~2.2.0": + version: 2.2.0 + resolution: "debug@npm:2.2.0" + dependencies: + ms: "npm:0.7.1" + checksum: 10/19387e1b6da7757297c2ea835f16f0df2d325687a311fdd57e43851190492fe770b991fc5ca1b8b53b007bf3126acd14ed75f2f1eef864ceb49a6bb8177988f7 + languageName: node + linkType: hard + "debug@npm:~3.1.0": version: 3.1.0 resolution: "debug@npm:3.1.0" @@ -19682,6 +19754,13 @@ __metadata: languageName: node linkType: hard +"emoji-toolkit@npm:^10.0.0": + version: 10.0.0 + resolution: "emoji-toolkit@npm:10.0.0" + checksum: 10/836b7b9f071e59092ffcd0916aeba88b041096c81c58d4677bf28bd0a23ad0d5ddf3feff98867fb479a10768693a9751db00ef4fea9837548395f6b89ed56bcb + languageName: node + linkType: hard + "emoji-toolkit@npm:^7.0.1": version: 7.0.1 resolution: "emoji-toolkit@npm:7.0.1" @@ -20129,6 +20208,13 @@ __metadata: languageName: node linkType: hard +"es6-promise@npm:^3.0.2": + version: 3.3.1 + resolution: "es6-promise@npm:3.3.1" + checksum: 10/14f46a0a20164d4d6f8a39133c7220688bb9ee2d89a78f2345694b8ac9b6ea7b94f73488e289a083dce732831f4040013b25222d1820580c7b10b698c50c8267 + languageName: node + linkType: hard + "esbuild-register@npm:^3.5.0": version: 3.6.0 resolution: "esbuild-register@npm:3.6.0" @@ -21015,6 +21101,13 @@ __metadata: languageName: node linkType: hard +"exif-parser@npm:^0.1.9": + version: 0.1.12 + resolution: "exif-parser@npm:0.1.12" + checksum: 10/72bffba154fd33b270908ea1f9f63a6c5dffadf4eb427c85ab82d6006204ed762dfeb76969e1577614b8d18dadd411b11583569e54ed2beea0af8b61c8f4de29 + languageName: node + linkType: hard + "exit-x@npm:^0.2.2": version: 0.2.2 resolution: "exit-x@npm:0.2.2" @@ -21446,6 +21539,13 @@ __metadata: languageName: node linkType: hard +"file-type@npm:^3.1.0": + version: 3.9.0 + resolution: "file-type@npm:3.9.0" + checksum: 10/1c8bc99bbb9cfcf13d3489e0c0250188dde622658b5a990f2ba09e6c784f183556b37b7de22104b4b0fd87f478ce12f8dc199b988616ce7cdcb41248dc0a79f9 + languageName: node + linkType: hard + "filename-reserved-regex@npm:^2.0.0": version: 2.0.0 resolution: "filename-reserved-regex@npm:2.0.0" @@ -22228,6 +22328,19 @@ __metadata: languageName: node linkType: hard +"glob@npm:5.0.10": + version: 5.0.10 + resolution: "glob@npm:5.0.10" + dependencies: + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^2.0.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10/2eee0498c8fe6e130bebf4537f873345968420d0d8802104e9da5e0a1bd40868de170e432589b7cb95040b50280f49be6424df0244dc112779ca7cce68fe807e + languageName: node + linkType: hard + "glob@npm:7.2.0": version: 7.2.0 resolution: "glob@npm:7.2.0" @@ -22444,6 +22557,17 @@ __metadata: languageName: node linkType: hard +"gm@npm:1.22.0": + version: 1.22.0 + resolution: "gm@npm:1.22.0" + dependencies: + array-parallel: "npm:~0.1.3" + array-series: "npm:~0.1.5" + debug: "npm:~2.2.0" + checksum: 10/209f334bf01a642f0947e62d5dd4d60c4ea08f52052a0bfed8a6a0cc4dce965bfcf82dc8edc1baae312fcf5105bc4cbd35405cd1730150ee927a452185fe7326 + languageName: node + linkType: hard + "google-auth-library@npm:^9.6.3": version: 9.15.0 resolution: "google-auth-library@npm:9.15.0" @@ -23635,6 +23759,13 @@ __metadata: languageName: node linkType: hard +"ip-regex@npm:^1.0.1": + version: 1.0.3 + resolution: "ip-regex@npm:1.0.3" + checksum: 10/9ce02e567949be9cf4d16c5c314cd241ce1edf78b2619e94b276cdff97eefe198970a224f9d1f0c22a92c4655997ad68fd34d82e41e7d19fafa47fe15108f22a + languageName: node + linkType: hard + "ipaddr.js@npm:1.9.1, ipaddr.js@npm:^1.0.1": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" @@ -25552,6 +25683,28 @@ __metadata: languageName: node linkType: hard +"jimp@npm:0.2.21": + version: 0.2.21 + resolution: "jimp@npm:0.2.21" + dependencies: + bignumber.js: "npm:^2.1.0" + bmp-js: "npm:0.0.1" + es6-promise: "npm:^3.0.2" + exif-parser: "npm:^0.1.9" + file-type: "npm:^3.1.0" + jpeg-js: "npm:^0.1.1" + mime: "npm:^1.3.4" + pixelmatch: "npm:^4.0.0" + pngjs: "npm:^2.1.0" + read-chunk: "npm:^1.0.1" + request: "npm:^2.65.0" + stream-to-buffer: "npm:^0.1.0" + tinycolor2: "npm:^1.1.2" + url-regex: "npm:^3.0.0" + checksum: 10/8e3cca1bf6c9bda4b517f03af68c84e093cf323ba2d9ad33173291c1ce43942573bd08d35880a0cadd72cfcf2b968151735f3faf9cbe5f7ef10374277aa5b46f + languageName: node + linkType: hard + "jiti@npm:^1.20.0": version: 1.21.6 resolution: "jiti@npm:1.21.6" @@ -25595,6 +25748,13 @@ __metadata: languageName: node linkType: hard +"jpeg-js@npm:^0.1.1": + version: 0.1.2 + resolution: "jpeg-js@npm:0.1.2" + checksum: 10/2a9bc46be8082f0104e1d39e5a18f9cdbb18886c69b445e368059b7bbc495ea43976bf88e9aa380db823acd88bb88b29bbf9a9d9660a199986ed48f3005cd19a + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -27365,6 +27525,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^2.0.1": + version: 2.0.10 + resolution: "minimatch@npm:2.0.10" + dependencies: + brace-expansion: "npm:^1.0.0" + checksum: 10/5e078b6740dbf7f64d635fbdd86213ed4be50fe6d94c1f5eff63490349704f053580c339b03bfe3f9356f977bdfdeb22eba7d9bab0bbd0eb373c527e330fc81b + languageName: node + linkType: hard + "minimatch@npm:^3.0.0, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -27562,6 +27731,17 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:0.5.1": + version: 0.5.1 + resolution: "mkdirp@npm:0.5.1" + dependencies: + minimist: "npm:0.0.8" + bin: + mkdirp: bin/cmd.js + checksum: 10/8651af2facdfa53f39e68fd93cf1653c11f7c1d49c6d1b4e53bcedc52e669cc64f1b5e95c49cfde7e99dbbcad26d3e61f4f2b4812f18c871c6455d9592f02806 + languageName: node + linkType: hard + "mkdirp@npm:^0.5.1": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" @@ -27876,6 +28056,13 @@ __metadata: languageName: node linkType: hard +"ms@npm:0.7.1": + version: 0.7.1 + resolution: "ms@npm:0.7.1" + checksum: 10/73b453879f26fe14ae41388cb3fb7483aa81e478950b3feff8433959a8e693b20797b0ed85e20fbe86ec65f094b283360987e05817979721513e7ec622dcde96 + languageName: node + linkType: hard + "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -27929,6 +28116,15 @@ __metadata: languageName: node linkType: hard +"nan@npm:^2.1.0": + version: 2.25.0 + resolution: "nan@npm:2.25.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10/eb3ac555512ec865be3c6e5d65aa94fe13ef6fc36254854687db950adbce61119839ff2217913c1798033f760cda354e3f50c812bb94fd19f7995b84df1a4b57 + languageName: node + linkType: hard + "nan@npm:^2.17.0": version: 2.23.0 resolution: "nan@npm:2.23.0" @@ -28240,6 +28436,27 @@ __metadata: languageName: node linkType: hard +"node-sprite-generator@npm:^0.10.2": + version: 0.10.2 + resolution: "node-sprite-generator@npm:0.10.2" + dependencies: + async: "npm:1.2.0" + bin-pack: "npm:1.0.1" + canvas: "npm:1.3.12" + glob: "npm:5.0.10" + gm: "npm:1.22.0" + jimp: "npm:0.2.21" + mkdirp: "npm:0.5.1" + underscore: "npm:1.8.3" + dependenciesMeta: + canvas: + optional: true + gm: + optional: true + checksum: 10/7d158ebb4ce3a708d6e59d1c5387ea1d2c23aad7450aa9343c4dc9bb23c3eeb629fbb4cf88014b6b259f072a6e8e0b1c70714c72b198690c59e0d6855cc8ccbd + languageName: node + linkType: hard + "nodemailer@npm:7.0.9": version: 7.0.9 resolution: "nodemailer@npm:7.0.9" @@ -29602,6 +29819,17 @@ __metadata: languageName: node linkType: hard +"pixelmatch@npm:^4.0.0": + version: 4.0.2 + resolution: "pixelmatch@npm:4.0.2" + dependencies: + pngjs: "npm:^3.0.0" + bin: + pixelmatch: bin/pixelmatch + checksum: 10/3dfb1c0bc6d333a5ad34e78737c3ea33ac3743b52db73b5e8bebbbfd87376afacfec5d3c268d9fdb6e77b07c5ecd6b01f98657087457107f9e03ad1a872545e1 + languageName: node + linkType: hard + "pkg-dir@npm:^3.0.0": version: 3.0.0 resolution: "pkg-dir@npm:3.0.0" @@ -29680,6 +29908,20 @@ __metadata: languageName: node linkType: hard +"pngjs@npm:^2.1.0": + version: 2.3.1 + resolution: "pngjs@npm:2.3.1" + checksum: 10/f53b492c9c5a0586de34f8df501381013c175be0f2c04a659aca30dce08105b59d20927f2209c3fb563908180dee73082be3f5bbbfa760eee98c064baa51fe7c + languageName: node + linkType: hard + +"pngjs@npm:^3.0.0": + version: 3.4.0 + resolution: "pngjs@npm:3.4.0" + checksum: 10/0e9227a413ce4b4f5ebae4465b366efc9ca545c74304f3cc30ba2075159eb12f01a6a821c4f61f2b048bd85356abbe6d2109df7052a9030ef4d7a42d99760af6 + languageName: node + linkType: hard + "polished@npm:^4.2.2": version: 4.2.2 resolution: "polished@npm:4.2.2" @@ -31593,6 +31835,13 @@ __metadata: languageName: node linkType: hard +"read-chunk@npm:^1.0.1": + version: 1.0.1 + resolution: "read-chunk@npm:1.0.1" + checksum: 10/9240d6a7dbef26d611f5e816dde890bbda99a4547c3edc2be60f8beab757023dfaaa6486004a20bc6d3f5fce90ff31da64eff131554e4250fc5182ed1e6b2a80 + languageName: node + linkType: hard + "read-only-stream@npm:^2.0.0": version: 2.0.0 resolution: "read-only-stream@npm:2.0.0" @@ -32042,7 +32291,7 @@ __metadata: languageName: node linkType: hard -"request@npm:^2.68.0": +"request@npm:^2.65.0, request@npm:^2.68.0": version: 2.88.2 resolution: "request@npm:2.88.2" dependencies: @@ -33969,6 +34218,22 @@ __metadata: languageName: node linkType: hard +"stream-to-buffer@npm:^0.1.0": + version: 0.1.0 + resolution: "stream-to-buffer@npm:0.1.0" + dependencies: + stream-to: "npm:~0.2.0" + checksum: 10/9adf4eadf245ac4bd2ce1b4cd879170714221d185798637b1b5e4f53aef304d5dccbbd180380932d6f3618f7e1972a0529732618ae5c8e33beb0ca51d6907aec + languageName: node + linkType: hard + +"stream-to@npm:~0.2.0": + version: 0.2.2 + resolution: "stream-to@npm:0.2.2" + checksum: 10/06a3f163cfc609a7dc6952f0d953e67f5dabf68c75a7349cc0656ed4e211806e58c69ba1270263ec33c288aaf1468386c3055d592e18b76bc0f13e322ab78068 + languageName: node + linkType: hard + "streamsearch@npm:^1.1.0": version: 1.1.0 resolution: "streamsearch@npm:1.1.0" @@ -34979,6 +35244,13 @@ __metadata: languageName: node linkType: hard +"tinycolor2@npm:^1.1.2": + version: 1.6.0 + resolution: "tinycolor2@npm:1.6.0" + checksum: 10/066c3acf4f82b81c58a0d3ab85f49407efe95ba87afc3c7a16b1d77625193dfbe10dd46c26d0a263c1137361dd5a6a68bff2fb71def5fb9b9aec940fb030bcd4 + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15": version: 0.2.15 resolution: "tinyglobby@npm:0.2.15" @@ -36261,6 +36533,15 @@ __metadata: languageName: node linkType: hard +"url-regex@npm:^3.0.0": + version: 3.2.0 + resolution: "url-regex@npm:3.2.0" + dependencies: + ip-regex: "npm:^1.0.1" + checksum: 10/06c9b619c8d09debd9a721e45a5b23f5af1cb56e9ef9083242a9cc5ae5c09ac9fea35e72a7cddd840b3db09790aeaf26332ba7dfea86a1b239a1d0103e8ddfe3 + languageName: node + linkType: hard + "url@npm:0.10.3": version: 0.10.3 resolution: "url@npm:0.10.3"