import  {  EmojiSet ,  PartialI18n  }  from  'emoji-mart' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  const  reactionLimit : number  =  6 ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  class  RecentReactions  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  public  items : Array < string >  =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( items : Array < string > )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . items  =  items ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  public  size ( ) :  number  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  this . items . length ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  public  push ( item : string ) :  void  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( this . size ( )  ===  reactionLimit )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this . items . pop ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . items . unshift ( item ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  public  pop ( ) :  string  |  undefined  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  this . items . pop ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  public  swap ( index : number ) :  void  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  temp  =  this . items . splice ( index ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . push ( temp [ 0 ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								type  BaseEmojiSkin  =  {  unified : string ;  native : string  } ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  interface  FixedBaseEmoji  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  id : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  name : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  keywords : Array < string > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  skins : Array < BaseEmojiSkin > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  version : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  search? : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // props from emoji panel click event
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  native? : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  aliases? : Array < string > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  shortcodes? : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  unified? : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  interface  NativeEmojiData  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  categories : Array < {  id : string ;  emojis : Array < string >  } > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  emojis : Record < string ,  FixedBaseEmoji > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  aliases : Record < string ,  string > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  sheet :  {  cols : number ;  rows : number  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ariaLabels? : Record < string ,  string > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Types for EmojiMart 5 are currently broken these are a temporary fixes
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  interface  FixedPickerProps  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  autoFocus? : boolean  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  title? : string  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  theme ? :  'auto'  |  'light'  |  'dark'  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  perLine? : number  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  stickySearch? : boolean  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  searchPosition ? :  'sticky'  |  'static'  |  'none'  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  emojiButtonSize? : number  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  emojiButtonRadius? : number  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  emojiButtonColors? : string  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  maxFrequentRows? : number  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  icons ? :  'auto'  |  'outline'  |  'solid' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ? :  EmojiSet  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  emoji? : string  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  navPosition ? :  'bottom'  |  'top'  |  'none'  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  showPreview? : boolean  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  previewEmoji? : boolean  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  noResultsEmoji? : string  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  previewPosition ? :  'bottom'  |  'top'  |  'none'  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  skinTonePosition ? :  'preview'  |  'search'  |  'none' ; 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  i18n? : PartialI18n  |  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  onEmojiSelect ? :  ( emoji : FixedBaseEmoji )  = >  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  onClickOutside ? :  ( )  = >  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  onKeyDown ? :  ( event : any )  = >  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  onAddCustomEmoji ? :  ( )  = >  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  getImageURL ? :  ( )  = >  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  getSpritesheetURL ? :  ( )  = >  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // Below here I'm currently unsure of usage
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // style?: React.CSSProperties | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // color?: string | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // skin?: EmojiSkin | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // defaultSkin?: EmojiSkin | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // backgroundImageFn?: BackgroundImageFn | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // sheetSize?: EmojiSheetSize | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // emojisToShowFilter?(emoji: EmojiData): boolean;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // showSkinTones?: boolean | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // emojiTooltip?: boolean | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // include?: CategoryName[] | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // exclude?: CategoryName[] | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // recent?: string[] | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // /** NOTE: custom emoji are copied into a singleton object on every new mount */
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // custom?: CustomEmoji[] | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // skinEmoji?: string | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // notFound?(): React.Component;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // notFoundEmoji?: string | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // enableFrequentEmojiSort?: boolean | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // useButton?: boolean | undefined;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  enum  Action  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  REACT  =  0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  REMOVE  =  1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  interface  Reaction  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // this is in fact a uint64 so we will have an issue
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  id : number ;  // original message timestamp
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  author : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  emoji : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  action : Action ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								// used for logic operations with reactions i.e responses, db, etc.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  type  ReactionList  =  Record <  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  string , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    count : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    index : number ;  // relies on reactsIndex in the message model
 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    senders : Array < string > ; 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    you : boolean ;  // whether we are in the senders list, used within 1-1 and closed groups for ignoring duplicate data messages, used within opengroups since we dont always have the full list of senders.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								> ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// used when rendering reactions to guarantee sorted order using the index
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  type  SortedReactionList  =  Array <  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  [ string ,  {  count : number ;  index : number ;  senders : Array < string > ;  you? : boolean  } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								> ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  interface  OpenGroupReaction  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  index : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  count : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  you : boolean ; 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  reactors : Array < string > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  type  OpenGroupReactionList  =  Record < string ,  OpenGroupReaction > ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  interface  OpenGroupReactionResponse  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  added? : boolean ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  removed? : boolean ; 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  seqno : number ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}