UNPKG

emoji-mart-native

Version:

Customizable Slack-like emoji picker for React Native

1 lines 6.8 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.getData=getData;exports.getEmojiDataFromNative=getEmojiDataFromNative;exports.getEmojiDataFromCustom=getEmojiDataFromCustom;exports.getSanitizedData=getSanitizedData;exports.uniq=uniq;exports.intersect=intersect;exports.deepMerge=deepMerge;exports.unifiedToNative=unifiedToNative;exports.slice=slice;exports.chunk=chunk;var _typeof2=_interopRequireDefault(require("@babel/runtime/helpers/typeof"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _data=require("./data");var _stringFromCodePoint=_interopRequireDefault(require("../polyfills/stringFromCodePoint"));var _nimbleEmojiIndex=_interopRequireDefault(require("./emoji-index/nimble-emoji-index"));function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;})),keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ownKeys(Object(source),!0).forEach(function(key){(0,_defineProperty2["default"])(target,key,source[key]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}return target;}var COLONS_REGEX=/^(?:\:([^\:]+)\:)(?:\:skin-tone-(\d)\:)?$/;var SKINS=['1F3FA','1F3FB','1F3FC','1F3FD','1F3FE','1F3FF'];function unifiedToNative(unified){var unicodes=unified.split('-'),codePoints=unicodes.map(function(u){return"0x".concat(u);});return _stringFromCodePoint["default"].apply(null,codePoints);}function sanitize(emoji){var name=emoji.name,short_names=emoji.short_names,skin_tone=emoji.skin_tone,skin_variations=emoji.skin_variations,emoticons=emoji.emoticons,unified=emoji.unified,custom=emoji.custom,customCategory=emoji.customCategory,image=emoji.image,id=emoji.id||short_names[0],colons=":".concat(id,":");if(custom){return{id:id,name:name,short_names:short_names,colons:colons,emoticons:emoticons,custom:custom,customCategory:customCategory,image:image};}if(skin_tone){colons+=":skin-tone-".concat(skin_tone,":");}return{id:id,name:name,short_names:short_names,colons:colons,emoticons:emoticons,unified:unified.toLowerCase(),skin:skin_tone||(skin_variations?1:null),"native":unifiedToNative(unified)};}function getSanitizedData(){return sanitize(getData.apply(void 0,arguments));}function getData(emoji,skin,set,data){var emojiData={};if(typeof emoji=='string'){var matches=emoji.match(COLONS_REGEX);if(matches){emoji=matches[1];if(matches[2]){skin=parseInt(matches[2],10);}}if(data.aliases.hasOwnProperty(emoji)){emoji=data.aliases[emoji];}if(data.emojis.hasOwnProperty(emoji)){emojiData=data.emojis[emoji];}else{return null;}}else if(emoji.id){if(data.aliases.hasOwnProperty(emoji.id)){emoji.id=data.aliases[emoji.id];}if(data.emojis.hasOwnProperty(emoji.id)){emojiData=data.emojis[emoji.id];skin||(skin=emoji.skin);}}if(!Object.keys(emojiData).length){emojiData=emoji;emojiData.custom=true;if(!emojiData.search){emojiData.search=(0,_data.buildSearch)(emoji);}}emojiData.emoticons||(emojiData.emoticons=[]);emojiData.variations||(emojiData.variations=[]);if(emojiData.skin_variations&&skin>1){emojiData=JSON.parse(JSON.stringify(emojiData));var skinKey=SKINS[skin-1],variationData=emojiData.skin_variations[skinKey];if(variationData){if(!variationData.variations&&emojiData.variations){delete emojiData.variations;}if(set&&(variationData["has_img_".concat(set)]==undefined||variationData["has_img_".concat(set)])||!set){emojiData.skin_tone=skin;for(var k in variationData){var v=variationData[k];emojiData[k]=v;}}}}if(emojiData.variations&&emojiData.variations.length){emojiData=JSON.parse(JSON.stringify(emojiData));emojiData.unified=emojiData.variations.shift();}return emojiData;}function getEmojiDataFromNative(nativeString,set,data){if(data.compressed){(0,_data.uncompress)(data);}var skinTones=['🏻','🏼','🏽','🏾','🏿'];var skinCodes=['1F3FB','1F3FC','1F3FD','1F3FE','1F3FF'];var skin;var skinCode;var baseNativeString=nativeString;skinTones.forEach(function(skinTone,skinToneIndex){if(nativeString.indexOf(skinTone)>0){skin=skinToneIndex+2;skinCode=skinCodes[skinToneIndex];}});var emojiData;for(var id in data.emojis){var emoji=data.emojis[id];var emojiUnified=emoji.unified;if(emoji.variations&&emoji.variations.length){emojiUnified=emoji.variations.shift();}if(skin&&emoji.skin_variations&&emoji.skin_variations[skinCode]){emojiUnified=emoji.skin_variations[skinCode].unified;}if(unifiedToNative(emojiUnified)===baseNativeString)emojiData=emoji;}if(!emojiData){return null;}emojiData.id=emojiData.short_names[0];return getSanitizedData(emojiData,skin,set,data);}function getEmojiDataFromCustom(emoji,custom,data){if(data.compressed){(0,_data.uncompress)(data);}var customEmojis=custom.map(function(emoji){return _objectSpread({},emoji,{id:emoji.short_names[0],custom:true});});var emojiIndex=new _nimbleEmojiIndex["default"](data);var _emojiIndex$search=emojiIndex.search(emoji,{maxResults:1,custom:customEmojis}),_emojiIndex$search2=(0,_slicedToArray2["default"])(_emojiIndex$search,1),customEmoji=_emojiIndex$search2[0];return customEmoji;}function uniq(arr){return arr.reduce(function(acc,item){if(acc.indexOf(item)===-1){acc.push(item);}return acc;},[]);}function intersect(a,b){var uniqA=uniq(a);var uniqB=uniq(b);return uniqA.filter(function(item){return uniqB.indexOf(item)>=0;});}function deepMerge(a,b){var o={};for(var key in a){var originalValue=a[key],value=originalValue;if(b.hasOwnProperty(key)){value=b[key];}if((0,_typeof2["default"])(value)==='object'){value=deepMerge(originalValue,value);}o[key]=value;}return o;}function slice(array,start,end){var length=array==null?0:array.length;if(!length){return[];}start=start==null?0:start;end=end===undefined?length:end;if(start<0){start=-start>length?0:length+start;}end=end>length?length:end;if(end<0){end+=length;}length=start>end?0:end-start>>>0;start>>>=0;var index=-1;var result=new Array(length);while(++index<length){result[index]=array[index+start];}return result;}function chunk(array,size){size=Math.max(size,0);var length=array==null?0:array.length;if(!length||size<1){return[];}var index=0;var resIndex=0;var result=new Array(Math.ceil(length/size));while(index<length){result[resIndex++]=slice(array,index,index+=size);}return result;}