@dialpad/dialtone 9.131.1 → 9.132.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/css/dialtone-default-theme.css +1783 -5185
  2. package/dist/css/dialtone-default-theme.min.css +1 -1
  3. package/dist/css/dialtone-docs.json +1 -1
  4. package/dist/css/dialtone.css +622 -1999
  5. package/dist/css/dialtone.min.css +1 -1
  6. package/dist/tokens/doc.json +46028 -46028
  7. package/dist/vue2/common/emoji/index.cjs +1 -1
  8. package/dist/vue2/common/emoji/index.cjs.map +1 -1
  9. package/dist/vue2/common/emoji/index.js +25 -17
  10. package/dist/vue2/common/emoji/index.js.map +1 -1
  11. package/dist/vue2/component-documentation.json +1 -1
  12. package/dist/vue2/lib/emoji/emoji.cjs +1 -1
  13. package/dist/vue2/lib/emoji/emoji.cjs.map +1 -1
  14. package/dist/vue2/lib/emoji/emoji.js +16 -16
  15. package/dist/vue2/lib/emoji/emoji.js.map +1 -1
  16. package/dist/vue2/lib/message-input/message-input.cjs +1 -1
  17. package/dist/vue2/lib/message-input/message-input.cjs.map +1 -1
  18. package/dist/vue2/lib/message-input/message-input.js +14 -7
  19. package/dist/vue2/lib/message-input/message-input.js.map +1 -1
  20. package/dist/vue2/lib/rich-text-editor/rich-text-editor.cjs +7 -7
  21. package/dist/vue2/lib/rich-text-editor/rich-text-editor.cjs.map +1 -1
  22. package/dist/vue2/lib/rich-text-editor/rich-text-editor.js +387 -402
  23. package/dist/vue2/lib/rich-text-editor/rich-text-editor.js.map +1 -1
  24. package/dist/vue2/types/common/emoji/index.d.ts.map +1 -1
  25. package/dist/vue2/types/components/rich_text_editor/extensions/emoji/emoji.d.ts.map +1 -1
  26. package/dist/vue2/types/components/rich_text_editor/extensions/emoji/suggestion.d.ts +1 -1
  27. package/dist/vue2/types/components/rich_text_editor/extensions/emoji/suggestion.d.ts.map +1 -1
  28. package/dist/vue2/types/recipes/conversation_view/message_input/message_input.vue.d.ts +1 -1
  29. package/dist/vue2/types/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  30. package/dist/vue3/common/emoji/index.cjs +1 -1
  31. package/dist/vue3/common/emoji/index.cjs.map +1 -1
  32. package/dist/vue3/common/emoji/index.js +39 -33
  33. package/dist/vue3/common/emoji/index.js.map +1 -1
  34. package/dist/vue3/component-documentation.json +1 -1
  35. package/dist/vue3/lib/emoji/emoji.cjs +1 -1
  36. package/dist/vue3/lib/emoji/emoji.cjs.map +1 -1
  37. package/dist/vue3/lib/emoji/emoji.js +17 -17
  38. package/dist/vue3/lib/emoji/emoji.js.map +1 -1
  39. package/dist/vue3/lib/message-input/message-input.cjs +1 -1
  40. package/dist/vue3/lib/message-input/message-input.cjs.map +1 -1
  41. package/dist/vue3/lib/message-input/message-input.js +59 -51
  42. package/dist/vue3/lib/message-input/message-input.js.map +1 -1
  43. package/dist/vue3/lib/rich-text-editor/rich-text-editor.cjs +3 -3
  44. package/dist/vue3/lib/rich-text-editor/rich-text-editor.cjs.map +1 -1
  45. package/dist/vue3/lib/rich-text-editor/rich-text-editor.js +125 -119
  46. package/dist/vue3/lib/rich-text-editor/rich-text-editor.js.map +1 -1
  47. package/dist/vue3/types/common/emoji/index.d.ts.map +1 -1
  48. package/dist/vue3/types/components/rich_text_editor/extensions/emoji/suggestion.d.ts +1 -1
  49. package/dist/vue3/types/components/rich_text_editor/extensions/emoji/suggestion.d.ts.map +1 -1
  50. package/dist/vue3/types/recipes/conversation_view/message_input/message_input.vue.d.ts +2 -1
  51. package/dist/vue3/types/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  52. package/package.json +3 -3
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("regex-combined-emojis"),y=require("emoji-toolkit/emoji_strategy.json"),f=new RegExp(C.emojiPattern,"g"),j="8.0",l="https://cdn.jsdelivr.net/joypixels/assets/"+j+"/png/unicode/32/";exports.customEmojiAssetUrl=null;exports.emojiImageUrlSmall=l;exports.emojiFileExtensionSmall=".png";exports.emojiImageUrlLarge=l;exports.emojiFileExtensionLarge=".png";const m=y,d=new RegExp("(^| |(?<=:))(:\\w+:)","g");function g(){return m}function x(e,t=".png"){e.endsWith("/")||(e=e+"/"),exports.emojiImageUrlSmall=e,exports.emojiFileExtensionSmall=t}function A(e,t=".svg"){e.endsWith("/")||(e=e+"/"),exports.emojiImageUrlLarge=e,exports.emojiFileExtensionLarge=t}function P(e){exports.customEmojiAssetUrl=e}function T(e){E(e)}function E(e){const t=["extension","custom"],o=["date_added","image","name"],n=(s,i,r)=>{if(s[i]===void 0){if(!t.includes(i))return;s[i]=r}else Array.isArray(s[i])?s[i]=s[i].concat(r):s[i]=r};Object.entries(e).forEach(s=>{const[i,r]=s;if(i in m){const a=m[i];for(const c in r){const U=r[c];n(a,c,U)}}else o.every(c=>r[c]!==void 0)?m[i]=r:console.error("The following custom emoji doesn't contain the required properties:",r)})}function u(e){function t(n,s){if(!(!n||typeof n!="object")){if("shortname"in n&&(n.shortname===e||n.shortname_alternates.includes(e)))return n.key=s,o=n,!0;Object.keys(n).some(function(i){return t(n[i],i)})}}let o;return t(g(),null),o}function h(e){let t="";for(const o of e){const n=o.codePointAt(0).toString(16).padStart(4,"0");["200d","fe0f"].includes(n)||(t!==""&&(t=t+"-"),t=t+n)}return t}function v(e){const t=e.split("-");let o="";return t.forEach(n=>{o=o+String.fromCodePoint(parseInt(n,16))}),o}function p(e){if(e=e==null?void 0:e.trim(),e.startsWith(":")&&e.endsWith(":"))return u(e);{const t=h(e),o=m[t];return o&&(o.key=t),o}}function R(e){const t=(e.match(d)||[]).map(o=>o.trim());return S(t)}function S(e){const t=e?e.filter(o=>u(o)):[];return new Set(t)}function J(e){const t=[...e.matchAll(f)],o=t.length?t.map(n=>n[0]):[];return new Set(o)}exports.codeToEmojiData=p;exports.defaultEmojiAssetUrl=l;exports.emojiJson=m;exports.emojiRegex=f;exports.emojiShortCodeRegex=d;exports.emojiVersion=j;exports.filterValidShortCodes=S;exports.findEmojis=J;exports.findShortCodes=R;exports.getEmojiData=g;exports.setCustomEmojiJson=T;exports.setCustomEmojiUrl=P;exports.setEmojiAssetUrlLarge=A;exports.setEmojiAssetUrlSmall=x;exports.shortcodeToEmojiData=u;exports.stringToUnicode=v;exports.unicodeToString=h;exports.validateCustomEmojiJson=E;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("regex-combined-emojis"),y=require("emoji-toolkit/emoji_strategy.json"),d=new RegExp(C.emojiPattern,"g"),f="8.0",u="https://cdn.jsdelivr.net/joypixels/assets/"+f+"/png/unicode/32/";exports.customEmojiAssetUrl=null;exports.emojiImageUrlSmall=u;exports.emojiFileExtensionSmall=".png";exports.emojiImageUrlLarge=u;exports.emojiFileExtensionLarge=".png";const m=y,j=new RegExp("(^| |(?<=:))(:\\w+:)","g");function g(){return m}function A(e,t=".png"){e.endsWith("/")||(e=e+"/"),exports.emojiImageUrlSmall=e,exports.emojiFileExtensionSmall=t}function x(e,t=".svg"){e.endsWith("/")||(e=e+"/"),exports.emojiImageUrlLarge=e,exports.emojiFileExtensionLarge=t}function P(e){exports.customEmojiAssetUrl=e}function T(e){E(e)}function E(e){const t=["custom","date_added","image"],o=["date_added","image","unicode_output","shortname","shortname_alternates","custom","name"],n=(s,i,r)=>{if(s[i]===void 0){if(!t.includes(i))return;s[i]=r}else Array.isArray(s[i])?s[i]=s[i].concat(r):s[i]=r};Object.entries(e).forEach(s=>{const[i,r]=s;if(i in m){const l=m[i];for(const c in r){const U=r[c];n(l,c,U)}}else o.every(c=>r[c]!==void 0)?m[i]=r:console.error("The following custom emoji doesn't contain the required properties:",r)})}function a(e){function t(n,s){if(!(!n||typeof n!="object")){if("shortname"in n&&(n.shortname===e||n.shortname_alternates.includes(e)))return n.key=s,o=n,!0;Object.keys(n).some(function(i){return t(n[i],i)})}}let o;return t(g(),null),o}function h(e){let t="";for(const o of e){const n=o.codePointAt(0).toString(16).padStart(4,"0");["200d","fe0f"].includes(n)||(t!==""&&(t=t+"-"),t=t+n)}return t}function p(e){const t=e.split("-");let o="";return t.forEach(n=>{o=o+String.fromCodePoint(parseInt(n,16))}),o}function v(e){if(e=e==null?void 0:e.trim(),e.startsWith(":")&&e.endsWith(":"))return a(e);{const t=h(e),o=m[t];return o&&(o.key=t),o}}function R(e){const t=(e.match(j)||[]).map(o=>o.trim());return S(t)}function S(e){const t=e?e.filter(o=>a(o)):[];return new Set(t)}function _(e){const t=[...e.matchAll(d)],o=t.length?t.map(n=>n[0]):[];return new Set(o)}exports.codeToEmojiData=v;exports.defaultEmojiAssetUrl=u;exports.emojiJson=m;exports.emojiRegex=d;exports.emojiShortCodeRegex=j;exports.emojiVersion=f;exports.filterValidShortCodes=S;exports.findEmojis=_;exports.findShortCodes=R;exports.getEmojiData=g;exports.setCustomEmojiJson=T;exports.setCustomEmojiUrl=P;exports.setEmojiAssetUrlLarge=x;exports.setEmojiAssetUrlSmall=A;exports.shortcodeToEmojiData=a;exports.stringToUnicode=p;exports.unicodeToString=h;exports.validateCustomEmojiJson=E;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../common/emoji/index.js"],"sourcesContent":["import { emojiPattern } from 'regex-combined-emojis';\nimport emojiJsonLocal from 'emoji-toolkit/emoji_strategy.json' with { type: 'json' };\n\nexport const emojiRegex = new RegExp(emojiPattern, 'g');\nexport const emojiVersion = '8.0';\nexport const defaultEmojiAssetUrl = 'https://cdn.jsdelivr.net/joypixels/assets/' + emojiVersion + '/png/unicode/32/';\nexport let customEmojiAssetUrl = null;\n\n// Used for emoji 16px and smaller\nexport let emojiImageUrlSmall = defaultEmojiAssetUrl;\nexport let emojiFileExtensionSmall = '.png';\n\n// Used for emoji larger than 16px\nexport let emojiImageUrlLarge = defaultEmojiAssetUrl;\nexport let emojiFileExtensionLarge = '.png';\n\nexport const emojiJson = emojiJsonLocal;\n\nexport const emojiShortCodeRegex = /(^| |(?<=:))(:\\w+:)/g;\n\nexport function getEmojiData () {\n return emojiJson;\n}\n\nexport function setEmojiAssetUrlSmall (url, fileExtension = '.png') {\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n emojiImageUrlSmall = url;\n emojiFileExtensionSmall = fileExtension;\n}\n\nexport function setEmojiAssetUrlLarge (url, fileExtension = '.svg') {\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n emojiImageUrlLarge = url;\n emojiFileExtensionLarge = fileExtension;\n}\n\nexport function setCustomEmojiUrl (url) {\n customEmojiAssetUrl = url;\n}\n\nexport function setCustomEmojiJson (json) {\n validateCustomEmojiJson(json);\n}\n\n/**\n * Validate custom emoji json\n */\nexport function validateCustomEmojiJson (json) {\n const customEmojiProps = ['extension', 'custom'];\n const customEmojiRequiredProps = [\n 'date_added',\n 'image',\n 'name',\n ];\n\n /**\n * Update single emoji properties.\n * If the property exists in emojiData, it'll add the values if the property is an array, otherwise will overwrite.\n * If not exists, will add the property to the emojiData object.\n */\n const _updateNativeEmojiData = (emojiData, propName, propValue) => {\n if (emojiData[propName] === undefined) {\n if (!customEmojiProps.includes(propName)) {\n return;\n }\n\n // new property to add\n emojiData[propName] = propValue;\n } else {\n if (Array.isArray(emojiData[propName])) {\n emojiData[propName] = emojiData[propName].concat(propValue);\n } else {\n emojiData[propName] = propValue;\n }\n }\n };\n\n Object.entries(json).forEach((item) => {\n const [customEmojiKey, customEmojiValue] = item;\n\n if (customEmojiKey in emojiJson) {\n // custom emoji exists in emoji json which means to update some data in the native emoji\n const emojiData = emojiJson[customEmojiKey];\n\n for (const customEmojiPropertyName in customEmojiValue) {\n const customEmojiPropertyValue = customEmojiValue[customEmojiPropertyName];\n\n _updateNativeEmojiData(emojiData, customEmojiPropertyName, customEmojiPropertyValue);\n }\n } else {\n // new custom emoji\n const _validateRequiredProps = () =>\n customEmojiRequiredProps.every((val) => {\n return customEmojiValue[val] !== undefined;\n });\n\n if (_validateRequiredProps()) {\n emojiJson[customEmojiKey] = customEmojiValue;\n } else {\n console.error(\n 'The following custom emoji doesn\\'t contain the required properties:',\n customEmojiValue,\n );\n }\n }\n });\n}\n\n// recursively searches the emoji data object containing data for all emojis\n// and returns the object with the specified shortcode.\nexport function shortcodeToEmojiData (shortcode) {\n // eslint-disable-next-line complexity\n function f (o, key) {\n if (!o || typeof o !== 'object') {\n return;\n }\n if ('shortname' in o) {\n if (o.shortname === shortcode || o.shortname_alternates.includes(shortcode)) {\n o.key = key;\n reference = o;\n return true;\n }\n }\n Object.keys(o).some(function (k) {\n return f(o[k], k);\n });\n }\n\n let reference;\n f(getEmojiData(), null);\n return reference;\n}\n\n// Takes in an emoji unicode character(s) and converts it to an emoji string in the format the emoji data object expects\n// as a key. There can be multiple unicode characters in an emoji to denote the emoji itself, skin tone, gender\n// and such. Note that this function does NOT return variation selectors (fe0f) or zero width joiners (200d), as these\n// are not included as part of the key in the emoji.json.\n//\n// Example:\n// return value for smile emoji (no skin tone): 1f600\n// return value for left facing fist (light skin tone): 1f91b-1f3fb\nexport function unicodeToString (emoji) {\n let key = '';\n for (const codePoint of emoji) {\n const codepoint = codePoint.codePointAt(0).toString(16).padStart(4, '0');\n\n // skip 200d and fe0f as these are not included in emoji_strategy.json keys\n if (['200d', 'fe0f'].includes(codepoint)) continue;\n if (key !== '') { key = key + '-'; }\n key = key + codepoint;\n }\n return key;\n}\n\n// Takes in unicode in string form ex: '1f91b-1f3fb' and converts it to an actual unicode character.\nexport function stringToUnicode (str) {\n const uChars = str.split('-');\n let result = '';\n uChars.forEach((uChar) => {\n result = result + String.fromCodePoint(parseInt(uChar, 16));\n });\n return result;\n}\n\n// Takes in a code (which could be unicode or shortcode) and returns the emoji data for it.\nexport function codeToEmojiData (code) {\n code = code?.trim();\n if (code.startsWith(':') && code.endsWith(':')) {\n return shortcodeToEmojiData(code);\n } else {\n const unicodeString = unicodeToString(code);\n const result = emojiJson[unicodeString];\n if (result) result.key = unicodeString;\n return result;\n }\n}\n\n// Finds every shortcode in slot text\n// filters only the existing codes in emojiJson\n// removes duplicates.\n// @returns {string[]}\nexport function findShortCodes (textContent) {\n const shortcodes = (\n textContent.match(emojiShortCodeRegex) || []\n ).map(code => code.trim());\n return filterValidShortCodes(shortcodes);\n}\n\nexport function filterValidShortCodes (shortcodes) {\n const filtered = shortcodes ? shortcodes.filter(code => shortcodeToEmojiData(code)) : [];\n return new Set(filtered);\n}\n\n// Finds every emoji in slot text\n// removes duplicates\n// @returns {string[]}\nexport function findEmojis (textContent) {\n const matches = [...textContent.matchAll(emojiRegex)];\n const emojis = matches.length ? matches.map(match => match[0]) : [];\n return new Set(emojis);\n}\n"],"names":["emojiRegex","emojiPattern","emojiVersion","defaultEmojiAssetUrl","customEmojiAssetUrl","emojiImageUrlSmall","emojiFileExtensionSmall","emojiImageUrlLarge","emojiFileExtensionLarge","emojiJson","emojiJsonLocal","emojiShortCodeRegex","getEmojiData","setEmojiAssetUrlSmall","url","fileExtension","setEmojiAssetUrlLarge","setCustomEmojiUrl","setCustomEmojiJson","json","validateCustomEmojiJson","customEmojiProps","customEmojiRequiredProps","_updateNativeEmojiData","emojiData","propName","propValue","item","customEmojiKey","customEmojiValue","customEmojiPropertyName","customEmojiPropertyValue","val","shortcodeToEmojiData","shortcode","f","o","key","reference","k","unicodeToString","emoji","codePoint","codepoint","stringToUnicode","str","uChars","result","uChar","codeToEmojiData","code","unicodeString","findShortCodes","textContent","shortcodes","filterValidShortCodes","filtered","findEmojis","matches","emojis","match"],"mappings":"wKAGaA,EAAa,IAAI,OAAOC,EAAAA,aAAc,GAAG,EACzCC,EAAe,MACfC,EAAuB,6CAA+CD,EAAe,mBACvFE,QAAAA,oBAAsB,KAGtBC,QAAAA,mBAAqBF,EACrBG,QAAAA,wBAA0B,OAG1BC,QAAAA,mBAAqBJ,EACrBK,QAAAA,wBAA0B,OAEzB,MAACC,EAAYC,EAEZC,EAAsB,WAAA,uBAAA,GAAA,EAE5B,SAASC,GAAgB,CAC9B,OAAOH,CACT,CAEO,SAASI,EAAuBC,EAAKC,EAAgB,OAAQ,CAC7DD,EAAI,SAAS,GAAG,IACnBA,EAAMA,EAAM,KAEdT,QAAAA,mBAAqBS,EACrBR,QAAAA,wBAA0BS,CAC5B,CAEO,SAASC,EAAuBF,EAAKC,EAAgB,OAAQ,CAC7DD,EAAI,SAAS,GAAG,IACnBA,EAAMA,EAAM,KAEdP,QAAAA,mBAAqBO,EACrBN,QAAAA,wBAA0BO,CAC5B,CAEO,SAASE,EAAmBH,EAAK,CACtCV,QAAAA,oBAAsBU,CACxB,CAEO,SAASI,EAAoBC,EAAM,CACxCC,EAAwBD,CAAI,CAC9B,CAKO,SAASC,EAAyBD,EAAM,CAC7C,MAAME,EAAmB,CAAC,YAAa,QAAQ,EACzCC,EAA2B,CAC/B,aACA,QACA,MACJ,EAOQC,EAAyB,CAACC,EAAWC,EAAUC,IAAc,CACjE,GAAIF,EAAUC,CAAQ,IAAM,OAAW,CACrC,GAAI,CAACJ,EAAiB,SAASI,CAAQ,EACrC,OAIFD,EAAUC,CAAQ,EAAIC,CACxB,MACM,MAAM,QAAQF,EAAUC,CAAQ,CAAC,EACnCD,EAAUC,CAAQ,EAAID,EAAUC,CAAQ,EAAE,OAAOC,CAAS,EAE1DF,EAAUC,CAAQ,EAAIC,CAG5B,EAEA,OAAO,QAAQP,CAAI,EAAE,QAASQ,GAAS,CACrC,KAAM,CAACC,EAAgBC,CAAgB,EAAIF,EAE3C,GAAIC,KAAkBnB,EAAW,CAE/B,MAAMe,EAAYf,EAAUmB,CAAc,EAE1C,UAAWE,KAA2BD,EAAkB,CACtD,MAAME,EAA2BF,EAAiBC,CAAuB,EAEzEP,EAAuBC,EAAWM,EAAyBC,CAAwB,CACrF,CACF,MAGIT,EAAyB,MAAOU,GACvBH,EAAiBG,CAAG,IAAM,MAClC,EAGDvB,EAAUmB,CAAc,EAAIC,EAE5B,QAAQ,MACN,sEACAA,CACV,CAGE,CAAC,CACH,CAIO,SAASI,EAAsBC,EAAW,CAE/C,SAASC,EAAGC,EAAGC,EAAK,CAClB,GAAI,GAACD,GAAK,OAAOA,GAAM,UAGvB,IAAI,cAAeA,IACbA,EAAE,YAAcF,GAAaE,EAAE,qBAAqB,SAASF,CAAS,GACxE,OAAAE,EAAE,IAAMC,EACRC,EAAYF,EACL,GAGX,OAAO,KAAKA,CAAC,EAAE,KAAK,SAAUG,EAAG,CAC/B,OAAOJ,EAAEC,EAAEG,CAAC,EAAGA,CAAC,CAClB,CAAC,EACH,CAEA,IAAID,EACJ,OAAAH,EAAEvB,EAAY,EAAI,IAAI,EACf0B,CACT,CAUO,SAASE,EAAiBC,EAAO,CACtC,IAAIJ,EAAM,GACV,UAAWK,KAAaD,EAAO,CAC7B,MAAME,EAAYD,EAAU,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,EAGnE,CAAC,OAAQ,MAAM,EAAE,SAASC,CAAS,IACnCN,IAAQ,KAAMA,EAAMA,EAAM,KAC9BA,EAAMA,EAAMM,EACd,CACA,OAAON,CACT,CAGO,SAASO,EAAiBC,EAAK,CACpC,MAAMC,EAASD,EAAI,MAAM,GAAG,EAC5B,IAAIE,EAAS,GACb,OAAAD,EAAO,QAASE,GAAU,CACxBD,EAASA,EAAS,OAAO,cAAc,SAASC,EAAO,EAAE,CAAC,CAC5D,CAAC,EACMD,CACT,CAGO,SAASE,EAAiBC,EAAM,CAErC,GADAA,EAAOA,GAAA,YAAAA,EAAM,OACTA,EAAK,WAAW,GAAG,GAAKA,EAAK,SAAS,GAAG,EAC3C,OAAOjB,EAAqBiB,CAAI,EAC3B,CACL,MAAMC,EAAgBX,EAAgBU,CAAI,EACpCH,EAAStC,EAAU0C,CAAa,EACtC,OAAIJ,IAAQA,EAAO,IAAMI,GAClBJ,CACT,CACF,CAMO,SAASK,EAAgBC,EAAa,CAC3C,MAAMC,GACJD,EAAY,MAAM1C,CAAmB,GAAK,CAAA,GAC1C,IAAIuC,GAAQA,EAAK,MAAM,EACzB,OAAOK,EAAsBD,CAAU,CACzC,CAEO,SAASC,EAAuBD,EAAY,CACjD,MAAME,EAAWF,EAAaA,EAAW,OAAOJ,GAAQjB,EAAqBiB,CAAI,CAAC,EAAI,CAAA,EACtF,OAAO,IAAI,IAAIM,CAAQ,CACzB,CAKO,SAASC,EAAYJ,EAAa,CACvC,MAAMK,EAAU,CAAC,GAAGL,EAAY,SAASrD,CAAU,CAAC,EAC9C2D,EAASD,EAAQ,OAASA,EAAQ,IAAIE,GAASA,EAAM,CAAC,CAAC,EAAI,CAAA,EACjE,OAAO,IAAI,IAAID,CAAM,CACvB"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../common/emoji/index.js"],"sourcesContent":["import { emojiPattern } from 'regex-combined-emojis';\nimport emojiJsonLocal from 'emoji-toolkit/emoji_strategy.json' with { type: 'json' };\n\nexport const emojiRegex = new RegExp(emojiPattern, 'g');\nexport const emojiVersion = '8.0';\nexport const defaultEmojiAssetUrl = 'https://cdn.jsdelivr.net/joypixels/assets/' + emojiVersion + '/png/unicode/32/';\nexport let customEmojiAssetUrl = null;\n\n// Used for emoji 16px and smaller\nexport let emojiImageUrlSmall = defaultEmojiAssetUrl;\nexport let emojiFileExtensionSmall = '.png';\n\n// Used for emoji larger than 16px\nexport let emojiImageUrlLarge = defaultEmojiAssetUrl;\nexport let emojiFileExtensionLarge = '.png';\n\nexport const emojiJson = emojiJsonLocal;\n\nexport const emojiShortCodeRegex = /(^| |(?<=:))(:\\w+:)/g;\n\nexport function getEmojiData () {\n return emojiJson;\n}\n\nexport function setEmojiAssetUrlSmall (url, fileExtension = '.png') {\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n emojiImageUrlSmall = url;\n emojiFileExtensionSmall = fileExtension;\n}\n\nexport function setEmojiAssetUrlLarge (url, fileExtension = '.svg') {\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n emojiImageUrlLarge = url;\n emojiFileExtensionLarge = fileExtension;\n}\n\nexport function setCustomEmojiUrl (url) {\n customEmojiAssetUrl = url;\n}\n\nexport function setCustomEmojiJson (json) {\n validateCustomEmojiJson(json);\n}\n\n/**\n * Validate custom emoji json\n */\nexport function validateCustomEmojiJson (json) {\n const customEmojiProps = [\n 'custom',\n 'date_added',\n 'image',\n ];\n const customEmojiRequiredProps = [\n 'date_added',\n 'image',\n 'unicode_output',\n 'shortname',\n 'shortname_alternates',\n 'custom',\n 'name',\n ];\n\n /**\n * Update single emoji properties.\n * If the property exists in emojiData, it'll add the values if the property is an array, otherwise will overwrite.\n * If not exists, will add the property to the emojiData object.\n */\n const _updateNativeEmojiData = (emojiData, propName, propValue) => {\n if (emojiData[propName] === undefined) {\n if (!customEmojiProps.includes(propName)) {\n return;\n }\n\n // new property to add\n emojiData[propName] = propValue;\n } else {\n if (Array.isArray(emojiData[propName])) {\n emojiData[propName] = emojiData[propName].concat(propValue);\n } else {\n emojiData[propName] = propValue;\n }\n }\n };\n\n Object.entries(json).forEach((item) => {\n const [customEmojiKey, customEmojiValue] = item;\n\n if (customEmojiKey in emojiJson) {\n // custom emoji exists in emoji json which means to update some data in the native emoji\n const emojiData = emojiJson[customEmojiKey];\n\n for (const customEmojiPropertyName in customEmojiValue) {\n const customEmojiPropertyValue = customEmojiValue[customEmojiPropertyName];\n\n _updateNativeEmojiData(emojiData, customEmojiPropertyName, customEmojiPropertyValue);\n }\n } else {\n // new custom emoji\n const _validateRequiredProps = () =>\n customEmojiRequiredProps.every((val) => {\n return customEmojiValue[val] !== undefined;\n });\n\n if (_validateRequiredProps()) {\n emojiJson[customEmojiKey] = customEmojiValue;\n } else {\n console.error(\n 'The following custom emoji doesn\\'t contain the required properties:',\n customEmojiValue,\n );\n }\n }\n });\n}\n\n// recursively searches the emoji data object containing data for all emojis\n// and returns the object with the specified shortcode.\nexport function shortcodeToEmojiData (shortcode) {\n // eslint-disable-next-line complexity\n function f (o, key) {\n if (!o || typeof o !== 'object') {\n return;\n }\n if ('shortname' in o) {\n if (o.shortname === shortcode || o.shortname_alternates.includes(shortcode)) {\n o.key = key;\n reference = o;\n return true;\n }\n }\n Object.keys(o).some(function (k) {\n return f(o[k], k);\n });\n }\n\n let reference;\n f(getEmojiData(), null);\n return reference;\n}\n\n// Takes in an emoji unicode character(s) and converts it to an emoji string in the format the emoji data object expects\n// as a key. There can be multiple unicode characters in an emoji to denote the emoji itself, skin tone, gender\n// and such. Note that this function does NOT return variation selectors (fe0f) or zero width joiners (200d), as these\n// are not included as part of the key in the emoji.json.\n//\n// Example:\n// return value for smile emoji (no skin tone): 1f600\n// return value for left facing fist (light skin tone): 1f91b-1f3fb\nexport function unicodeToString (emoji) {\n let key = '';\n for (const codePoint of emoji) {\n const codepoint = codePoint.codePointAt(0).toString(16).padStart(4, '0');\n\n // skip 200d and fe0f as these are not included in emoji_strategy.json keys\n if (['200d', 'fe0f'].includes(codepoint)) continue;\n if (key !== '') { key = key + '-'; }\n key = key + codepoint;\n }\n return key;\n}\n\n// Takes in unicode in string form ex: '1f91b-1f3fb' and converts it to an actual unicode character.\nexport function stringToUnicode (str) {\n const uChars = str.split('-');\n let result = '';\n uChars.forEach((uChar) => {\n result = result + String.fromCodePoint(parseInt(uChar, 16));\n });\n return result;\n}\n\n// Takes in a code (which could be unicode or shortcode) and returns the emoji data for it.\nexport function codeToEmojiData (code) {\n code = code?.trim();\n if (code.startsWith(':') && code.endsWith(':')) {\n return shortcodeToEmojiData(code);\n } else {\n const unicodeString = unicodeToString(code);\n const result = emojiJson[unicodeString];\n if (result) result.key = unicodeString;\n return result;\n }\n}\n\n// Finds every shortcode in slot text\n// filters only the existing codes in emojiJson\n// removes duplicates.\n// @returns {string[]}\nexport function findShortCodes (textContent) {\n const shortcodes = (\n textContent.match(emojiShortCodeRegex) || []\n ).map(code => code.trim());\n return filterValidShortCodes(shortcodes);\n}\n\nexport function filterValidShortCodes (shortcodes) {\n const filtered = shortcodes ? shortcodes.filter(code => shortcodeToEmojiData(code)) : [];\n return new Set(filtered);\n}\n\n// Finds every emoji in slot text\n// removes duplicates\n// @returns {string[]}\nexport function findEmojis (textContent) {\n const matches = [...textContent.matchAll(emojiRegex)];\n const emojis = matches.length ? matches.map(match => match[0]) : [];\n return new Set(emojis);\n}\n"],"names":["emojiRegex","emojiPattern","emojiVersion","defaultEmojiAssetUrl","customEmojiAssetUrl","emojiImageUrlSmall","emojiFileExtensionSmall","emojiImageUrlLarge","emojiFileExtensionLarge","emojiJson","emojiJsonLocal","emojiShortCodeRegex","getEmojiData","setEmojiAssetUrlSmall","url","fileExtension","setEmojiAssetUrlLarge","setCustomEmojiUrl","setCustomEmojiJson","json","validateCustomEmojiJson","customEmojiProps","customEmojiRequiredProps","_updateNativeEmojiData","emojiData","propName","propValue","item","customEmojiKey","customEmojiValue","customEmojiPropertyName","customEmojiPropertyValue","val","shortcodeToEmojiData","shortcode","f","o","key","reference","k","unicodeToString","emoji","codePoint","codepoint","stringToUnicode","str","uChars","result","uChar","codeToEmojiData","code","unicodeString","findShortCodes","textContent","shortcodes","filterValidShortCodes","filtered","findEmojis","matches","emojis","match"],"mappings":"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"}
@@ -2,26 +2,34 @@ import { emojiPattern as d } from "regex-combined-emojis";
2
2
  import j from "emoji-toolkit/emoji_strategy.json";
3
3
  const g = new RegExp(d, "g"), E = "8.0", f = "https://cdn.jsdelivr.net/joypixels/assets/" + E + "/png/unicode/32/";
4
4
  let h = null, S = f, y = ".png", p = f, P = ".png";
5
- const c = j, x = new RegExp("(^| |(?<=:))(:\\w+:)", "g");
6
- function A() {
5
+ const c = j, A = new RegExp("(^| |(?<=:))(:\\w+:)", "g");
6
+ function C() {
7
7
  return c;
8
8
  }
9
- function T(t, e = ".png") {
9
+ function w(t, e = ".png") {
10
10
  t.endsWith("/") || (t = t + "/"), S = t, y = e;
11
11
  }
12
- function _(t, e = ".svg") {
12
+ function T(t, e = ".svg") {
13
13
  t.endsWith("/") || (t = t + "/"), p = t, P = e;
14
14
  }
15
15
  function q(t) {
16
16
  h = t;
17
17
  }
18
18
  function J(t) {
19
- C(t);
19
+ U(t);
20
20
  }
21
- function C(t) {
22
- const e = ["extension", "custom"], n = [
21
+ function U(t) {
22
+ const e = [
23
+ "custom",
24
+ "date_added",
25
+ "image"
26
+ ], n = [
23
27
  "date_added",
24
28
  "image",
29
+ "unicode_output",
30
+ "shortname",
31
+ "shortname_alternates",
32
+ "custom",
25
33
  "name"
26
34
  ], o = (s, i, r) => {
27
35
  if (s[i] === void 0) {
@@ -57,9 +65,9 @@ function l(t) {
57
65
  }
58
66
  }
59
67
  let n;
60
- return e(A(), null), n;
68
+ return e(C(), null), n;
61
69
  }
62
- function U(t) {
70
+ function _(t) {
63
71
  let e = "";
64
72
  for (const n of t) {
65
73
  const o = n.codePointAt(0).toString(16).padStart(4, "0");
@@ -78,12 +86,12 @@ function W(t) {
78
86
  if (t = t == null ? void 0 : t.trim(), t.startsWith(":") && t.endsWith(":"))
79
87
  return l(t);
80
88
  {
81
- const e = U(t), n = c[e];
89
+ const e = _(t), n = c[e];
82
90
  return n && (n.key = e), n;
83
91
  }
84
92
  }
85
93
  function b(t) {
86
- const e = (t.match(x) || []).map((n) => n.trim());
94
+ const e = (t.match(A) || []).map((n) => n.trim());
87
95
  return v(e);
88
96
  }
89
97
  function v(t) {
@@ -104,19 +112,19 @@ export {
104
112
  S as emojiImageUrlSmall,
105
113
  c as emojiJson,
106
114
  g as emojiRegex,
107
- x as emojiShortCodeRegex,
115
+ A as emojiShortCodeRegex,
108
116
  E as emojiVersion,
109
117
  v as filterValidShortCodes,
110
118
  k as findEmojis,
111
119
  b as findShortCodes,
112
- A as getEmojiData,
120
+ C as getEmojiData,
113
121
  J as setCustomEmojiJson,
114
122
  q as setCustomEmojiUrl,
115
- _ as setEmojiAssetUrlLarge,
116
- T as setEmojiAssetUrlSmall,
123
+ T as setEmojiAssetUrlLarge,
124
+ w as setEmojiAssetUrlSmall,
117
125
  l as shortcodeToEmojiData,
118
126
  L as stringToUnicode,
119
- U as unicodeToString,
120
- C as validateCustomEmojiJson
127
+ _ as unicodeToString,
128
+ U as validateCustomEmojiJson
121
129
  };
122
130
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../common/emoji/index.js"],"sourcesContent":["import { emojiPattern } from 'regex-combined-emojis';\nimport emojiJsonLocal from 'emoji-toolkit/emoji_strategy.json' with { type: 'json' };\n\nexport const emojiRegex = new RegExp(emojiPattern, 'g');\nexport const emojiVersion = '8.0';\nexport const defaultEmojiAssetUrl = 'https://cdn.jsdelivr.net/joypixels/assets/' + emojiVersion + '/png/unicode/32/';\nexport let customEmojiAssetUrl = null;\n\n// Used for emoji 16px and smaller\nexport let emojiImageUrlSmall = defaultEmojiAssetUrl;\nexport let emojiFileExtensionSmall = '.png';\n\n// Used for emoji larger than 16px\nexport let emojiImageUrlLarge = defaultEmojiAssetUrl;\nexport let emojiFileExtensionLarge = '.png';\n\nexport const emojiJson = emojiJsonLocal;\n\nexport const emojiShortCodeRegex = /(^| |(?<=:))(:\\w+:)/g;\n\nexport function getEmojiData () {\n return emojiJson;\n}\n\nexport function setEmojiAssetUrlSmall (url, fileExtension = '.png') {\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n emojiImageUrlSmall = url;\n emojiFileExtensionSmall = fileExtension;\n}\n\nexport function setEmojiAssetUrlLarge (url, fileExtension = '.svg') {\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n emojiImageUrlLarge = url;\n emojiFileExtensionLarge = fileExtension;\n}\n\nexport function setCustomEmojiUrl (url) {\n customEmojiAssetUrl = url;\n}\n\nexport function setCustomEmojiJson (json) {\n validateCustomEmojiJson(json);\n}\n\n/**\n * Validate custom emoji json\n */\nexport function validateCustomEmojiJson (json) {\n const customEmojiProps = ['extension', 'custom'];\n const customEmojiRequiredProps = [\n 'date_added',\n 'image',\n 'name',\n ];\n\n /**\n * Update single emoji properties.\n * If the property exists in emojiData, it'll add the values if the property is an array, otherwise will overwrite.\n * If not exists, will add the property to the emojiData object.\n */\n const _updateNativeEmojiData = (emojiData, propName, propValue) => {\n if (emojiData[propName] === undefined) {\n if (!customEmojiProps.includes(propName)) {\n return;\n }\n\n // new property to add\n emojiData[propName] = propValue;\n } else {\n if (Array.isArray(emojiData[propName])) {\n emojiData[propName] = emojiData[propName].concat(propValue);\n } else {\n emojiData[propName] = propValue;\n }\n }\n };\n\n Object.entries(json).forEach((item) => {\n const [customEmojiKey, customEmojiValue] = item;\n\n if (customEmojiKey in emojiJson) {\n // custom emoji exists in emoji json which means to update some data in the native emoji\n const emojiData = emojiJson[customEmojiKey];\n\n for (const customEmojiPropertyName in customEmojiValue) {\n const customEmojiPropertyValue = customEmojiValue[customEmojiPropertyName];\n\n _updateNativeEmojiData(emojiData, customEmojiPropertyName, customEmojiPropertyValue);\n }\n } else {\n // new custom emoji\n const _validateRequiredProps = () =>\n customEmojiRequiredProps.every((val) => {\n return customEmojiValue[val] !== undefined;\n });\n\n if (_validateRequiredProps()) {\n emojiJson[customEmojiKey] = customEmojiValue;\n } else {\n console.error(\n 'The following custom emoji doesn\\'t contain the required properties:',\n customEmojiValue,\n );\n }\n }\n });\n}\n\n// recursively searches the emoji data object containing data for all emojis\n// and returns the object with the specified shortcode.\nexport function shortcodeToEmojiData (shortcode) {\n // eslint-disable-next-line complexity\n function f (o, key) {\n if (!o || typeof o !== 'object') {\n return;\n }\n if ('shortname' in o) {\n if (o.shortname === shortcode || o.shortname_alternates.includes(shortcode)) {\n o.key = key;\n reference = o;\n return true;\n }\n }\n Object.keys(o).some(function (k) {\n return f(o[k], k);\n });\n }\n\n let reference;\n f(getEmojiData(), null);\n return reference;\n}\n\n// Takes in an emoji unicode character(s) and converts it to an emoji string in the format the emoji data object expects\n// as a key. There can be multiple unicode characters in an emoji to denote the emoji itself, skin tone, gender\n// and such. Note that this function does NOT return variation selectors (fe0f) or zero width joiners (200d), as these\n// are not included as part of the key in the emoji.json.\n//\n// Example:\n// return value for smile emoji (no skin tone): 1f600\n// return value for left facing fist (light skin tone): 1f91b-1f3fb\nexport function unicodeToString (emoji) {\n let key = '';\n for (const codePoint of emoji) {\n const codepoint = codePoint.codePointAt(0).toString(16).padStart(4, '0');\n\n // skip 200d and fe0f as these are not included in emoji_strategy.json keys\n if (['200d', 'fe0f'].includes(codepoint)) continue;\n if (key !== '') { key = key + '-'; }\n key = key + codepoint;\n }\n return key;\n}\n\n// Takes in unicode in string form ex: '1f91b-1f3fb' and converts it to an actual unicode character.\nexport function stringToUnicode (str) {\n const uChars = str.split('-');\n let result = '';\n uChars.forEach((uChar) => {\n result = result + String.fromCodePoint(parseInt(uChar, 16));\n });\n return result;\n}\n\n// Takes in a code (which could be unicode or shortcode) and returns the emoji data for it.\nexport function codeToEmojiData (code) {\n code = code?.trim();\n if (code.startsWith(':') && code.endsWith(':')) {\n return shortcodeToEmojiData(code);\n } else {\n const unicodeString = unicodeToString(code);\n const result = emojiJson[unicodeString];\n if (result) result.key = unicodeString;\n return result;\n }\n}\n\n// Finds every shortcode in slot text\n// filters only the existing codes in emojiJson\n// removes duplicates.\n// @returns {string[]}\nexport function findShortCodes (textContent) {\n const shortcodes = (\n textContent.match(emojiShortCodeRegex) || []\n ).map(code => code.trim());\n return filterValidShortCodes(shortcodes);\n}\n\nexport function filterValidShortCodes (shortcodes) {\n const filtered = shortcodes ? shortcodes.filter(code => shortcodeToEmojiData(code)) : [];\n return new Set(filtered);\n}\n\n// Finds every emoji in slot text\n// removes duplicates\n// @returns {string[]}\nexport function findEmojis (textContent) {\n const matches = [...textContent.matchAll(emojiRegex)];\n const emojis = matches.length ? matches.map(match => match[0]) : [];\n return new Set(emojis);\n}\n"],"names":["emojiRegex","emojiPattern","emojiVersion","defaultEmojiAssetUrl","customEmojiAssetUrl","emojiImageUrlSmall","emojiFileExtensionSmall","emojiImageUrlLarge","emojiFileExtensionLarge","emojiJson","emojiJsonLocal","emojiShortCodeRegex","getEmojiData","setEmojiAssetUrlSmall","url","fileExtension","setEmojiAssetUrlLarge","setCustomEmojiUrl","setCustomEmojiJson","json","validateCustomEmojiJson","customEmojiProps","customEmojiRequiredProps","_updateNativeEmojiData","emojiData","propName","propValue","item","customEmojiKey","customEmojiValue","customEmojiPropertyName","customEmojiPropertyValue","val","shortcodeToEmojiData","shortcode","f","key","reference","k","unicodeToString","emoji","codePoint","codepoint","stringToUnicode","str","uChars","result","uChar","codeToEmojiData","code","unicodeString","findShortCodes","textContent","shortcodes","filterValidShortCodes","filtered","findEmojis","matches","emojis","match"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../common/emoji/index.js"],"sourcesContent":["import { emojiPattern } from 'regex-combined-emojis';\nimport emojiJsonLocal from 'emoji-toolkit/emoji_strategy.json' with { type: 'json' };\n\nexport const emojiRegex = new RegExp(emojiPattern, 'g');\nexport const emojiVersion = '8.0';\nexport const defaultEmojiAssetUrl = 'https://cdn.jsdelivr.net/joypixels/assets/' + emojiVersion + '/png/unicode/32/';\nexport let customEmojiAssetUrl = null;\n\n// Used for emoji 16px and smaller\nexport let emojiImageUrlSmall = defaultEmojiAssetUrl;\nexport let emojiFileExtensionSmall = '.png';\n\n// Used for emoji larger than 16px\nexport let emojiImageUrlLarge = defaultEmojiAssetUrl;\nexport let emojiFileExtensionLarge = '.png';\n\nexport const emojiJson = emojiJsonLocal;\n\nexport const emojiShortCodeRegex = /(^| |(?<=:))(:\\w+:)/g;\n\nexport function getEmojiData () {\n return emojiJson;\n}\n\nexport function setEmojiAssetUrlSmall (url, fileExtension = '.png') {\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n emojiImageUrlSmall = url;\n emojiFileExtensionSmall = fileExtension;\n}\n\nexport function setEmojiAssetUrlLarge (url, fileExtension = '.svg') {\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n emojiImageUrlLarge = url;\n emojiFileExtensionLarge = fileExtension;\n}\n\nexport function setCustomEmojiUrl (url) {\n customEmojiAssetUrl = url;\n}\n\nexport function setCustomEmojiJson (json) {\n validateCustomEmojiJson(json);\n}\n\n/**\n * Validate custom emoji json\n */\nexport function validateCustomEmojiJson (json) {\n const customEmojiProps = [\n 'custom',\n 'date_added',\n 'image',\n ];\n const customEmojiRequiredProps = [\n 'date_added',\n 'image',\n 'unicode_output',\n 'shortname',\n 'shortname_alternates',\n 'custom',\n 'name',\n ];\n\n /**\n * Update single emoji properties.\n * If the property exists in emojiData, it'll add the values if the property is an array, otherwise will overwrite.\n * If not exists, will add the property to the emojiData object.\n */\n const _updateNativeEmojiData = (emojiData, propName, propValue) => {\n if (emojiData[propName] === undefined) {\n if (!customEmojiProps.includes(propName)) {\n return;\n }\n\n // new property to add\n emojiData[propName] = propValue;\n } else {\n if (Array.isArray(emojiData[propName])) {\n emojiData[propName] = emojiData[propName].concat(propValue);\n } else {\n emojiData[propName] = propValue;\n }\n }\n };\n\n Object.entries(json).forEach((item) => {\n const [customEmojiKey, customEmojiValue] = item;\n\n if (customEmojiKey in emojiJson) {\n // custom emoji exists in emoji json which means to update some data in the native emoji\n const emojiData = emojiJson[customEmojiKey];\n\n for (const customEmojiPropertyName in customEmojiValue) {\n const customEmojiPropertyValue = customEmojiValue[customEmojiPropertyName];\n\n _updateNativeEmojiData(emojiData, customEmojiPropertyName, customEmojiPropertyValue);\n }\n } else {\n // new custom emoji\n const _validateRequiredProps = () =>\n customEmojiRequiredProps.every((val) => {\n return customEmojiValue[val] !== undefined;\n });\n\n if (_validateRequiredProps()) {\n emojiJson[customEmojiKey] = customEmojiValue;\n } else {\n console.error(\n 'The following custom emoji doesn\\'t contain the required properties:',\n customEmojiValue,\n );\n }\n }\n });\n}\n\n// recursively searches the emoji data object containing data for all emojis\n// and returns the object with the specified shortcode.\nexport function shortcodeToEmojiData (shortcode) {\n // eslint-disable-next-line complexity\n function f (o, key) {\n if (!o || typeof o !== 'object') {\n return;\n }\n if ('shortname' in o) {\n if (o.shortname === shortcode || o.shortname_alternates.includes(shortcode)) {\n o.key = key;\n reference = o;\n return true;\n }\n }\n Object.keys(o).some(function (k) {\n return f(o[k], k);\n });\n }\n\n let reference;\n f(getEmojiData(), null);\n return reference;\n}\n\n// Takes in an emoji unicode character(s) and converts it to an emoji string in the format the emoji data object expects\n// as a key. There can be multiple unicode characters in an emoji to denote the emoji itself, skin tone, gender\n// and such. Note that this function does NOT return variation selectors (fe0f) or zero width joiners (200d), as these\n// are not included as part of the key in the emoji.json.\n//\n// Example:\n// return value for smile emoji (no skin tone): 1f600\n// return value for left facing fist (light skin tone): 1f91b-1f3fb\nexport function unicodeToString (emoji) {\n let key = '';\n for (const codePoint of emoji) {\n const codepoint = codePoint.codePointAt(0).toString(16).padStart(4, '0');\n\n // skip 200d and fe0f as these are not included in emoji_strategy.json keys\n if (['200d', 'fe0f'].includes(codepoint)) continue;\n if (key !== '') { key = key + '-'; }\n key = key + codepoint;\n }\n return key;\n}\n\n// Takes in unicode in string form ex: '1f91b-1f3fb' and converts it to an actual unicode character.\nexport function stringToUnicode (str) {\n const uChars = str.split('-');\n let result = '';\n uChars.forEach((uChar) => {\n result = result + String.fromCodePoint(parseInt(uChar, 16));\n });\n return result;\n}\n\n// Takes in a code (which could be unicode or shortcode) and returns the emoji data for it.\nexport function codeToEmojiData (code) {\n code = code?.trim();\n if (code.startsWith(':') && code.endsWith(':')) {\n return shortcodeToEmojiData(code);\n } else {\n const unicodeString = unicodeToString(code);\n const result = emojiJson[unicodeString];\n if (result) result.key = unicodeString;\n return result;\n }\n}\n\n// Finds every shortcode in slot text\n// filters only the existing codes in emojiJson\n// removes duplicates.\n// @returns {string[]}\nexport function findShortCodes (textContent) {\n const shortcodes = (\n textContent.match(emojiShortCodeRegex) || []\n ).map(code => code.trim());\n return filterValidShortCodes(shortcodes);\n}\n\nexport function filterValidShortCodes (shortcodes) {\n const filtered = shortcodes ? shortcodes.filter(code => shortcodeToEmojiData(code)) : [];\n return new Set(filtered);\n}\n\n// Finds every emoji in slot text\n// removes duplicates\n// @returns {string[]}\nexport function findEmojis (textContent) {\n const matches = [...textContent.matchAll(emojiRegex)];\n const emojis = matches.length ? matches.map(match => match[0]) : [];\n return new Set(emojis);\n}\n"],"names":["emojiRegex","emojiPattern","emojiVersion","defaultEmojiAssetUrl","customEmojiAssetUrl","emojiImageUrlSmall","emojiFileExtensionSmall","emojiImageUrlLarge","emojiFileExtensionLarge","emojiJson","emojiJsonLocal","emojiShortCodeRegex","getEmojiData","setEmojiAssetUrlSmall","url","fileExtension","setEmojiAssetUrlLarge","setCustomEmojiUrl","setCustomEmojiJson","json","validateCustomEmojiJson","customEmojiProps","customEmojiRequiredProps","_updateNativeEmojiData","emojiData","propName","propValue","item","customEmojiKey","customEmojiValue","customEmojiPropertyName","customEmojiPropertyValue","val","shortcodeToEmojiData","shortcode","f","key","reference","k","unicodeToString","emoji","codePoint","codepoint","stringToUnicode","str","uChars","result","uChar","codeToEmojiData","code","unicodeString","findShortCodes","textContent","shortcodes","filterValidShortCodes","filtered","findEmojis","matches","emojis","match"],"mappings":"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"}