@nextcloud/vue
Version:
Nextcloud vue components
1 lines • 4.15 kB
Source Map (JSON)
{"version":3,"file":"emoji-BY_D0V5K.mjs","sources":["../../src/functions/emoji/emoji.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { EmojiIndex, frequently } from 'emoji-mart-vue-fast'\nimport data from 'emoji-mart-vue-fast/data/all.json'\n\nconst storage = getBuilder('nextcloud-vue').persist(true).build()\n\n// Shared emoji index and skinTone for all emojiSearch function calls\n// Will be initialized on the first call\nlet emojiIndex\n\n/**\n * Skin tones supported by Unicode Emojis (Fitzpatrick scale)\n * The numeric values align with `emoji-mart-vue`\n */\nexport enum EmojiSkinTone {\n\tNeutral = 1,\n\tLight = 2,\n\tMediumLight = 3,\n\tMedium = 4,\n\tMediumDark = 5,\n\tDark = 6,\n}\n\n/**\n * Get the list of emojis by search filter or the list of frequently used emojis\n *\n * @param query Emoji search filter string; if no string or empty string is given, the list of frequently used emojis is returned\n * @param maxResults Maximum of returned emojis\n * @return list of found emojis in the same format as the emoji-mart-vue-fast's EmojiIndex\n */\nexport function emojiSearch(query: string, maxResults: number = 10): object[] {\n\t// If this is the first call of function - initialize EmojiIndex\n\tif (!emojiIndex) {\n\t\temojiIndex = new EmojiIndex(data)\n\t}\n\tconst currentSkinTone = getCurrentSkinTone()\n\n\tlet results\n\tif (query) {\n\t\tresults = emojiIndex.search(`:${query}`, maxResults)\n\t\tif (results.length < maxResults) {\n\t\t\tresults = results.concat(emojiIndex.search(query, maxResults - results.length))\n\t\t}\n\t} else {\n\t\tresults = frequently.get(maxResults).map((id: number) => emojiIndex.emoji(id)) || []\n\t}\n\n\treturn results.map((emoji) => emoji.getSkin(currentSkinTone))\n}\n\n/**\n * Add emoji to the list of recent emojis.\n * This list can be got from emojiSearch function and it is used in NcEmojiPicker.\n *\n * @param emojiData object with `id` property\n * @param emojiData.id the emoji ID from emoji index\n */\nexport function emojiAddRecent(emojiData: { id: string }): void {\n\tfrequently.add(emojiData)\n}\n\n/**\n * Get the current skin tone index used for emojis\n *\n * @return The skin tone\n */\nexport function getCurrentSkinTone(): EmojiSkinTone {\n\tconst skinTone = Number.parseInt(storage.getItem('NcEmojiPicker::currentSkinTone') ?? '1')\n\t// Clamp skinTone to valid ranges\n\treturn Math.min(Math.max(skinTone, EmojiSkinTone.Neutral), EmojiSkinTone.Dark)\n}\n\n/**\n * Set the current active skin tone for emojis\n *\n * @param skinTone Skin tone\n */\nexport function setCurrentSkinTone(skinTone: EmojiSkinTone): void {\n\t// Clamp skinTone to valid ranges\n\tskinTone = Math.min(Math.max(skinTone, EmojiSkinTone.Neutral), EmojiSkinTone.Dark)\n\tstorage.setItem('NcEmojiPicker::currentSkinTone', skinTone.toString())\n}\n"],"names":["EmojiSkinTone"],"mappings":";;;AASA,MAAM,UAAU,WAAW,eAAe,EAAE,QAAQ,IAAI,EAAE,MAAA;AAI1D,IAAI;AAMG,IAAK,kCAAAA,mBAAL;AACNA,iBAAAA,eAAA,aAAU,CAAA,IAAV;AACAA,iBAAAA,eAAA,WAAQ,CAAA,IAAR;AACAA,iBAAAA,eAAA,iBAAc,CAAA,IAAd;AACAA,iBAAAA,eAAA,YAAS,CAAA,IAAT;AACAA,iBAAAA,eAAA,gBAAa,CAAA,IAAb;AACAA,iBAAAA,eAAA,UAAO,CAAA,IAAP;AANW,SAAAA;AAAA,GAAA,iBAAA,CAAA,CAAA;AAgBL,SAAS,YAAY,OAAe,aAAqB,IAAc;AAE7E,MAAI,CAAC,YAAY;AAChB,iBAAa,IAAI,WAAW,IAAI;AAAA,EACjC;AACA,QAAM,kBAAkB,mBAAA;AAExB,MAAI;AACJ,MAAI,OAAO;AACV,cAAU,WAAW,OAAO,IAAI,KAAK,IAAI,UAAU;AACnD,QAAI,QAAQ,SAAS,YAAY;AAChC,gBAAU,QAAQ,OAAO,WAAW,OAAO,OAAO,aAAa,QAAQ,MAAM,CAAC;AAAA,IAC/E;AAAA,EACD,OAAO;AACN,cAAU,WAAW,IAAI,UAAU,EAAE,IAAI,CAAC,OAAe,WAAW,MAAM,EAAE,CAAC,KAAK,CAAA;AAAA,EACnF;AAEA,SAAO,QAAQ,IAAI,CAAC,UAAU,MAAM,QAAQ,eAAe,CAAC;AAC7D;AASO,SAAS,eAAe,WAAiC;AAC/D,aAAW,IAAI,SAAS;AACzB;AAOO,SAAS,qBAAoC;AACnD,QAAM,WAAW,OAAO,SAAS,QAAQ,QAAQ,gCAAgC,KAAK,GAAG;AAEzF,SAAO,KAAK;AAAA,IAAI,KAAK;AAAA,MAAI;AAAA,MAAU;AAAA;AAAA,IAAA;AAAA,IAAwB;AAAA;AAAA,EAAA;AAC5D;AAOO,SAAS,mBAAmB,UAA+B;AAEjE,aAAW,KAAK;AAAA,IAAI,KAAK;AAAA,MAAI;AAAA,MAAU;AAAA;AAAA,IAAA;AAAA,IAAwB;AAAA;AAAA,EAAA;AAC/D,UAAQ,QAAQ,kCAAkC,SAAS,SAAA,CAAU;AACtE;"}