|  |  |  | // @ts-ignore
 | 
					
						
							|  |  |  | import EmojiConvertor from 'emoji-js'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const instance = new EmojiConvertor(); | 
					
						
							|  |  |  | instance.init_unified(); | 
					
						
							|  |  |  | instance.init_colons(); | 
					
						
							|  |  |  | instance.img_sets.apple.path = | 
					
						
							|  |  |  |   'node_modules/emoji-datasource-apple/img/apple/64/'; | 
					
						
							|  |  |  | instance.include_title = true; | 
					
						
							|  |  |  | instance.replace_mode = 'img'; | 
					
						
							|  |  |  | instance.supports_css = false; // needed to avoid spans with background-image
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export type SizeClassType = '' | 'small' | 'medium' | 'large' | 'jumbo'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function getRegex(): RegExp { | 
					
						
							|  |  |  |   return instance.rx_unified; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function getTitle(value: string): string | undefined { | 
					
						
							|  |  |  |   return instance.data[value][3][0]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function findImage(value: string, variation?: string) { | 
					
						
							|  |  |  |   return instance.find_image(value, variation); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function replaceColons(str: string) { | 
					
						
							|  |  |  |   return str.replace(instance.rx_colons, m => { | 
					
						
							|  |  |  |     const name = m.substr(1, m.length - 2).toLowerCase(); | 
					
						
							|  |  |  |     const code = instance.map.colons[name]; | 
					
						
							|  |  |  |     if (code) { | 
					
						
							|  |  |  |       return instance.data[code][0][0]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return m; | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getCountOfAllMatches(str: string, regex: RegExp) { | 
					
						
							|  |  |  |   let match = regex.exec(str); | 
					
						
							|  |  |  |   let count = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!regex.global) { | 
					
						
							|  |  |  |     return match ? 1 : 0; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   while (match) { | 
					
						
							|  |  |  |     count += 1; | 
					
						
							|  |  |  |     match = regex.exec(str); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return count; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function hasNormalCharacters(str: string) { | 
					
						
							|  |  |  |   const noEmoji = str.replace(instance.rx_unified, '').trim(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return noEmoji.length > 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function getSizeClass(str: string): SizeClassType { | 
					
						
							|  |  |  |   if (hasNormalCharacters(str)) { | 
					
						
							|  |  |  |     return ''; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const emojiCount = getCountOfAllMatches(str, instance.rx_unified); | 
					
						
							|  |  |  |   if (emojiCount > 8) { | 
					
						
							|  |  |  |     return ''; | 
					
						
							|  |  |  |   } else if (emojiCount > 6) { | 
					
						
							|  |  |  |     return 'small'; | 
					
						
							|  |  |  |   } else if (emojiCount > 4) { | 
					
						
							|  |  |  |     return 'medium'; | 
					
						
							|  |  |  |   } else if (emojiCount > 2) { | 
					
						
							|  |  |  |     return 'large'; | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     return 'jumbo'; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const VARIATION_LOOKUP: { [index: string]: string } = { | 
					
						
							|  |  |  |   '\uD83C\uDFFB': '1f3fb', | 
					
						
							|  |  |  |   '\uD83C\uDFFC': '1f3fc', | 
					
						
							|  |  |  |   '\uD83C\uDFFD': '1f3fd', | 
					
						
							|  |  |  |   '\uD83C\uDFFE': '1f3fe', | 
					
						
							|  |  |  |   '\uD83C\uDFFF': '1f3ff', | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Taken from emoji-js/replace_unified
 | 
					
						
							|  |  |  | export function getReplacementData( | 
					
						
							|  |  |  |   m: string, | 
					
						
							|  |  |  |   p1: string | undefined, | 
					
						
							|  |  |  |   p2: string | undefined | 
					
						
							|  |  |  | ): string | { value: string; variation?: string } { | 
					
						
							|  |  |  |   const unified = instance.map.unified[p1]; | 
					
						
							|  |  |  |   if (unified) { | 
					
						
							|  |  |  |     const variation = VARIATION_LOOKUP[p2 || '']; | 
					
						
							|  |  |  |     if (variation) { | 
					
						
							|  |  |  |       return { | 
					
						
							|  |  |  |         value: unified, | 
					
						
							|  |  |  |         variation, | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       value: unified, | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const unifiedVars = instance.map.unified_vars[p1]; | 
					
						
							|  |  |  |   if (unifiedVars) { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       value: unifiedVars[0], | 
					
						
							|  |  |  |       variation: unifiedVars[1], | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return m; | 
					
						
							|  |  |  | } |