{"version":3,"sources":["../../src/react/EmojiPlugin.tsx","../../src/lib/BaseEmojiPlugin.ts","../../src/lib/types.ts","../../src/lib/constants.ts","../../src/lib/transforms/insertEmoji.ts","../../src/lib/utils/EmojiLibrary/EmojiInlineLibrary.ts","../../src/lib/utils/Grid/Grid.ts","../../src/lib/utils/Grid/GridSection.ts","../../src/lib/utils/IndexSearch/IndexSearch.ts","../../src/lib/utils/IndexSearch/EmojiFloatingIndexSearch.ts","../../src/react/hooks/useEmojiDropdownMenuState.ts","../../src/react/storage/LocalStorage.ts","../../src/react/storage/FrequentEmojiStorage.ts","../../src/react/utils/EmojiObserver.ts","../../src/react/utils/EmojiPickerState.ts","../../src/react/utils/EmojiLibrary/EmojiFloatingGrid.ts","../../src/react/utils/EmojiLibrary/EmojiFloatingGridBuilder.ts","../../src/react/utils/EmojiLibrary/EmojiFloatingLibrary.ts","../../src/react/hooks/useEmojiPicker.ts"],"sourcesContent":["import { toPlatePlugin } from '@udecode/plate/react';\n\nimport { BaseEmojiInputPlugin, BaseEmojiPlugin } from '../lib';\n\nexport const EmojiInputPlugin = toPlatePlugin(BaseEmojiInputPlugin);\n\nexport const EmojiPlugin = toPlatePlugin(BaseEmojiPlugin, {\n  plugins: [EmojiInputPlugin],\n});\n","import type { Emoji, EmojiMartData } from '@emoji-mart/data';\n\nimport {\n  type Descendant,\n  type PluginConfig,\n  createSlatePlugin,\n  createTSlatePlugin,\n} from '@udecode/plate';\nimport {\n  type TriggerComboboxPluginOptions,\n  withTriggerCombobox,\n} from '@udecode/plate-combobox';\n\nimport { DEFAULT_EMOJI_LIBRARY } from './constants';\n\nexport type EmojiInputConfig = PluginConfig<\n  'emoji',\n  {\n    /**\n     * The emoji data.\n     *\n     * @example\n     *   import emojiMartData from '@emoji-mart/data';\n     */\n    data?: EmojiMartData;\n    createEmojiNode?: (emoji: Emoji) => Descendant;\n  } & TriggerComboboxPluginOptions\n>;\n\nexport const BaseEmojiInputPlugin = createSlatePlugin({\n  key: 'emoji_input',\n  node: { isElement: true, isInline: true, isVoid: true },\n});\n\nexport const BaseEmojiPlugin = createTSlatePlugin<EmojiInputConfig>({\n  key: 'emoji',\n  options: {\n    data: DEFAULT_EMOJI_LIBRARY,\n    trigger: ':',\n    triggerPreviousCharPattern: /^\\s?$/,\n    createComboboxInput: () => ({\n      children: [{ text: '' }],\n      type: BaseEmojiInputPlugin.key,\n    }),\n    createEmojiNode: ({ skins }) => ({ text: skins[0].native }),\n  },\n  plugins: [BaseEmojiInputPlugin],\n}).overrideEditor(withTriggerCombobox);\n","export type EmojiSettingsType = {\n  buttonSize: {\n    value: number;\n  };\n  categories: {\n    value?: EmojiCategoryList[];\n  };\n  perLine: {\n    value: number;\n  };\n  showFrequent: {\n    value: boolean;\n    key?: string;\n    limit?: number;\n    prefix?: string;\n  };\n};\n\ntype ReverseMap<T> = T[keyof T];\n\nexport const EmojiCategory = {\n  Activity: 'activity',\n  Custom: 'custom',\n  Flags: 'flags',\n  Foods: 'foods',\n  Frequent: 'frequent',\n  Nature: 'nature',\n  Objects: 'objects',\n  People: 'people',\n  Places: 'places',\n  Symbols: 'symbols',\n} as const;\n\nexport type EmojiCategoryList = ReverseMap<typeof EmojiCategory>;\n\nexport type EmojiIconList<T = string> = {\n  categories: Record<EmojiCategoryList, { outline: T; solid: T }>;\n  search: {\n    delete: T;\n    loupe: T;\n  };\n};\n\nexport type FrequentEmojis = Record<string, number>;\n\nexport type i18nProps = {\n  categories: Record<EmojiCategoryList, string>;\n  clear: string;\n  pick: string;\n  search: string;\n  searchNoResultsSubtitle: string;\n  searchNoResultsTitle: string;\n  searchResult: string;\n  skins: Record<'1' | '2' | '3' | '4' | '5' | '6' | 'choose', string>;\n};\n","import type { EmojiMartData } from '@emoji-mart/data';\n\nimport {\n  type EmojiCategoryList,\n  type EmojiSettingsType,\n  type FrequentEmojis,\n  type i18nProps,\n  EmojiCategory,\n} from './types';\n\nexport const EMOJI_MAX_SEARCH_RESULT = 60;\n\nexport const DEFAULT_EMOJI_LIBRARY: EmojiMartData = {\n  aliases: {},\n  categories: [\n    {\n      id: 'people',\n      emojis: ['+1'],\n    },\n  ],\n  emojis: {\n    '+1': {\n      id: '+1',\n      keywords: [],\n      name: 'Thumbs Up',\n      skins: [\n        {\n          native: '👍',\n          unified: '1f44d',\n        },\n        {\n          native: '👍🏻',\n          unified: '1f44d-1f3fb',\n        },\n        {\n          native: '👍🏼',\n          unified: '1f44d-1f3fc',\n        },\n        {\n          native: '👍🏽',\n          unified: '1f44d-1f3fd',\n        },\n        {\n          native: '👍🏾',\n          unified: '1f44d-1f3fe',\n        },\n        {\n          native: '👍🏿',\n          unified: '1f44d-1f3ff',\n        },\n      ],\n      version: 1,\n    },\n  },\n  sheet: {\n    cols: 1,\n    rows: 1,\n  },\n};\n\nexport const defaultCategories: EmojiCategoryList[] = [\n  EmojiCategory.People,\n  EmojiCategory.Nature,\n  EmojiCategory.Foods,\n  EmojiCategory.Activity,\n  EmojiCategory.Places,\n  EmojiCategory.Objects,\n  EmojiCategory.Symbols,\n  EmojiCategory.Flags,\n];\n\nexport const EmojiSettings: EmojiSettingsType = {\n  buttonSize: {\n    value: 36,\n  },\n  categories: {\n    value: undefined,\n  },\n  perLine: {\n    value: 8,\n  },\n  showFrequent: {\n    limit: 16,\n    value: true,\n  },\n};\n\nexport const DEFAULT_FREQUENTLY_USED_EMOJI: FrequentEmojis = {\n  '+1': 1,\n  clap: 1,\n  grinning: 1,\n  heart: 1,\n  heart_eyes: 1,\n  hugging_face: 1,\n  joy: 1,\n  kissing_heart: 1,\n  laughing: 1,\n  pray: 1,\n  rocket: 1,\n  scream: 1,\n  see_no_evil: 1,\n};\n\nexport const NUM_OF_CATEGORIES = Object.values(EmojiCategory).length;\n\nexport const i18n: i18nProps = {\n  categories: {\n    activity: 'Activity',\n    custom: 'Custom',\n    flags: 'Flags',\n    foods: 'Food & Drink',\n    frequent: 'Frequently used',\n    nature: 'Animals & Nature',\n    objects: 'Objects',\n    people: 'Smileys & People',\n    places: 'Travel & Places',\n    symbols: 'Symbols',\n  },\n  clear: 'Clear',\n  pick: 'Pick an emoji...',\n  search: 'Search all emoji',\n  searchNoResultsSubtitle: 'That emoji couldn’t be found',\n  searchNoResultsTitle: 'Oh no!',\n  searchResult: 'Search Results',\n  skins: {\n    '1': 'Default',\n    '2': 'Light',\n    '3': 'Medium-Light',\n    '4': 'Medium',\n    '5': 'Medium-Dark',\n    '6': 'Dark',\n    choose: 'Choose default skin tone',\n  },\n};\n","import type { Emoji } from '@emoji-mart/data';\nimport type { SlateEditor } from '@udecode/plate';\n\nimport { BaseEmojiPlugin } from '../BaseEmojiPlugin';\n\nexport const insertEmoji = <TEmoji extends Emoji = Emoji>(\n  editor: SlateEditor,\n  emoji: TEmoji\n) => {\n  const { createEmojiNode } = editor.getOptions(BaseEmojiPlugin);\n\n  const emojiNode = createEmojiNode!(emoji);\n  editor.tf.insertNodes(emojiNode);\n};\n","import type {\n  Emoji,\n  EmojiLibrary,\n  Emojis,\n  IEmojiLibrary,\n} from './EmojiLibrary.types';\n\nimport { DEFAULT_EMOJI_LIBRARY } from '../../constants';\n\nexport type THash = Record<string, string>;\n\nexport class EmojiInlineLibrary implements IEmojiLibrary {\n  protected _emojis: Emojis;\n  protected _hash: THash = {};\n  protected _keys: string[] = [];\n\n  constructor(library: EmojiLibrary = DEFAULT_EMOJI_LIBRARY) {\n    this._emojis = library.emojis;\n    this.init();\n  }\n\n  private createSearchableString(emoji: Emoji) {\n    const { id, keywords, name } = emoji;\n\n    return `${id},${this.getName(name)},${keywords.join(',')}`;\n  }\n\n  private getName(name: string) {\n    return name.toLowerCase().split(' ').join(',');\n  }\n\n  private init() {\n    Object.values(this._emojis).forEach((emoji) => {\n      const searchableString = this.createSearchableString(emoji);\n      this._keys.push(searchableString);\n      this._hash[searchableString] = emoji.id;\n    });\n  }\n\n  getEmoji(id: string) {\n    return this._emojis[id];\n  }\n\n  getEmojiId(key: string) {\n    return this._hash[key];\n  }\n\n  get keys(): string[] {\n    return this._keys;\n  }\n}\n","import type {\n  GridElements,\n  IGrid,\n  IGridSection,\n  SectionElements,\n  SectionId,\n} from './Grid.types';\n\nexport class Grid<R, T extends SectionId = SectionId> implements IGrid<R, T> {\n  protected grid = new Map<T, IGridSection<R, T>>();\n  protected rowsCount = 1;\n  protected sectionsIds: T[] = [];\n\n  public addSection(\n    sectionId: T,\n    section: IGridSection<R, T>,\n    elements: GridElements\n  ) {\n    section.setIndexRowStart(this.rowsCount).addElements(elements[sectionId]);\n    this.rowsCount += section.rowsNum;\n    this.grid.set(sectionId, section);\n    this.sectionsIds.push(sectionId);\n\n    return this;\n  }\n\n  public indexOf(sectionId: T) {\n    return this.sectionsIds.indexOf(sectionId);\n  }\n\n  public section(sectionId: T) {\n    return this.grid.get(sectionId)!;\n  }\n\n  public sections() {\n    return Array.from(this.grid.values());\n  }\n\n  public updateSection(sectionId: T, elements: SectionElements) {\n    if (this.grid.has(sectionId)) {\n      const section = this.grid.get(sectionId);\n      section!.updateElements(elements);\n    }\n\n    return this;\n  }\n\n  public get size() {\n    return this.grid.size;\n  }\n}\n","import type {\n  GridRows,\n  IGridSection,\n  SectionElements,\n  SectionId,\n  Unknown,\n} from './Grid.types';\n\nexport abstract class AGridSection<R extends Unknown, T = SectionId>\n  implements IGridSection<R, T>\n{\n  protected _indexRowStart = 0;\n  protected _root!: R;\n  protected _rowsNum = 0;\n  protected rows: GridRows = [];\n\n  constructor(\n    protected _id: T,\n    protected perLine = 8\n  ) {\n    this.createRootRef();\n  }\n\n  private addRow(elements: SectionElements, lastPosition: number) {\n    const start = lastPosition * this.perLine;\n    const end = start + this.perLine;\n    this.rows.push({\n      id: this._indexRowStart + lastPosition,\n      elements: elements.slice(start, end),\n    });\n  }\n\n  private initRows(elements: SectionElements) {\n    let i = 0;\n\n    while (i < this.rowsNum) {\n      this.addRow(elements, i++);\n    }\n  }\n\n  protected abstract createRootRef(): void;\n\n  public addElements(elements: SectionElements) {\n    this._rowsNum = Math.ceil(elements.length / this.perLine);\n    this.initRows(elements);\n\n    return this;\n  }\n\n  getRows() {\n    return this.rows;\n  }\n\n  public setIndexRowStart(start: number) {\n    this._indexRowStart = start;\n\n    return this;\n  }\n\n  public updateElements(elements: SectionElements) {\n    this.rows = [];\n    this.addElements(elements);\n\n    return this;\n  }\n\n  get id() {\n    return this._id;\n  }\n\n  get root(): R {\n    return this._root;\n  }\n\n  get rowsNum() {\n    return this._rowsNum;\n  }\n}\n","import type { Emoji } from '@emoji-mart/data';\n\nimport type { IEmojiLibrary } from '../EmojiLibrary';\n\nimport { EMOJI_MAX_SEARCH_RESULT } from '../../constants';\n\ninterface IIndexSearch {\n  get: () => Emoji[];\n  hasFound: () => boolean;\n  search: (input: string) => void;\n}\n\nexport abstract class AIndexSearch implements IIndexSearch {\n  protected input: string | undefined;\n  protected maxResult = EMOJI_MAX_SEARCH_RESULT;\n  protected result: string[] = [];\n  protected scores = {};\n\n  protected constructor(protected library: IEmojiLibrary) {}\n\n  private createSearchResult(value: string) {\n    this.scores = {};\n    this.result = [];\n\n    for (const key of this.library!.keys) {\n      const score = key.indexOf(`${value}`);\n\n      if (score === -1) continue;\n\n      const emojiId = this.library!.getEmojiId(key);\n      this.result.push(emojiId);\n\n      (this.scores as any)[emojiId] || ((this.scores as any)[emojiId] = 0);\n      (this.scores as any)[emojiId] += emojiId === value ? 0 : score + 1;\n    }\n  }\n\n  private sortResultByScores(result: string[], scores: {}) {\n    result.sort((a, b) => {\n      const aScore = (scores as any)[a];\n      const bScore = (scores as any)[b];\n\n      if (aScore === bScore) {\n        return a.localeCompare(b);\n      }\n\n      return aScore - bScore;\n    });\n  }\n\n  get() {\n    const emojis = [];\n\n    for (const key of this.result) {\n      const emoji = this.library?.getEmoji(key);\n      emojis.push(emoji);\n\n      if (emojis.length >= this.maxResult) break;\n    }\n\n    return emojis;\n  }\n\n  getEmoji(): Emoji | undefined {\n    return this.get()[0];\n  }\n\n  hasFound(exact = false) {\n    if (exact && this.input) {\n      return this.result.includes(this.input);\n    }\n\n    return this.result.length > 0;\n  }\n\n  search(input: string): this {\n    this.input = input.toLowerCase();\n    const value = this.input;\n\n    if (value) {\n      this.createSearchResult(value);\n      this.sortResultByScores(this.result, this.scores);\n    } else {\n      this.scores = {};\n      this.result = [];\n    }\n\n    return this;\n  }\n}\n","import type { IEmojiLibrary } from '../EmojiLibrary';\n\nimport { AIndexSearch } from './IndexSearch';\n\nexport class EmojiFloatingIndexSearch extends AIndexSearch {\n  protected static instance?: EmojiFloatingIndexSearch;\n\n  private constructor(protected library: IEmojiLibrary) {\n    super(library);\n  }\n\n  public static getInstance(library: IEmojiLibrary) {\n    if (!EmojiFloatingIndexSearch.instance) {\n      EmojiFloatingIndexSearch.instance = new EmojiFloatingIndexSearch(library);\n    }\n\n    return EmojiFloatingIndexSearch.instance;\n  }\n}\n","import { usePluginOption, useStableMemo } from '@udecode/plate/react';\n\nimport {\n  type EmojiSettingsType,\n  EmojiFloatingIndexSearch,\n  EmojiSettings,\n} from '../../lib';\nimport { EmojiPlugin } from '../EmojiPlugin';\nimport { FrequentEmojiStorage } from '../storage';\nimport { EmojiFloatingLibrary } from '../utils';\nimport { useEmojiPicker } from './useEmojiPicker';\n\nexport type EmojiDropdownMenuOptions = {\n  closeOnSelect?: boolean;\n  settings?: EmojiSettingsType;\n};\n\nexport function useEmojiDropdownMenuState({\n  closeOnSelect = true,\n  settings = EmojiSettings,\n}: EmojiDropdownMenuOptions = {}) {\n  const data = usePluginOption(EmojiPlugin, 'data')!;\n\n  const [emojiLibrary, indexSearch] = useStableMemo(() => {\n    const frequentEmojiStorage = new FrequentEmojiStorage({\n      limit: settings.showFrequent.limit,\n    });\n\n    const emojiLibrary = EmojiFloatingLibrary.getInstance(\n      settings,\n      frequentEmojiStorage,\n      data\n    );\n\n    const indexSearch = EmojiFloatingIndexSearch.getInstance(emojiLibrary);\n\n    return [emojiLibrary, indexSearch] as const;\n  }, [settings]);\n\n  const { isOpen, setIsOpen, ...emojiPickerState } = useEmojiPicker({\n    closeOnSelect,\n    emojiLibrary,\n    indexSearch,\n  });\n\n  return {\n    emojiPickerState,\n    isOpen,\n    setIsOpen,\n  };\n}\n","export interface ILocalStorage<T> {\n  get: () => T;\n  set: (value: T) => void;\n}\n\nexport class LocalStorage<T> implements ILocalStorage<T> {\n  constructor(\n    protected key: string,\n    protected defaultValue: T\n  ) {}\n\n  get(): T {\n    let value = this.defaultValue;\n\n    if (typeof window === 'undefined') return value;\n\n    const valueInLocalStorage = window.localStorage.getItem(this.key);\n\n    if (valueInLocalStorage) {\n      try {\n        value = JSON.parse(valueInLocalStorage);\n      } catch {\n        window.localStorage.removeItem(this.key);\n      }\n    }\n\n    return value;\n  }\n\n  set(value: any) {\n    window.localStorage.setItem(this.key, JSON.stringify(value));\n  }\n}\n","import type {\n  FrequentEmojiStorageProps,\n  IFrequentEmojiStorage,\n} from '../utils';\n\nimport { DEFAULT_FREQUENTLY_USED_EMOJI } from '../../lib/constants';\nimport { type FrequentEmojis, EmojiCategory } from '../../lib/types';\nimport { LocalStorage } from './LocalStorage';\n\nexport class FrequentEmojiStorage implements IFrequentEmojiStorage {\n  protected key = EmojiCategory.Frequent;\n  protected limit = 8;\n  protected localStorage;\n  protected prefix = 'emoji';\n\n  constructor(\n    props: FrequentEmojiStorageProps,\n    protected defaultValue = DEFAULT_FREQUENTLY_USED_EMOJI\n  ) {\n    this.limit = props.limit ?? this.limit;\n    const key = `${props.prefix ?? this.prefix}:${props.key ?? this.key}`;\n    this.localStorage = new LocalStorage(key, defaultValue);\n  }\n\n  get(): FrequentEmojis {\n    const data = this.localStorage.get();\n\n    return Object.fromEntries(\n      Object.keys(data)\n        .sort((a, b) => data[b] - data[a])\n        .map((key) => [key, data[key]])\n    );\n  }\n\n  getList(): string[] {\n    return Object.keys(this.get()).splice(0, this.limit);\n  }\n\n  set(value: any) {\n    this.localStorage.set(value);\n  }\n\n  update(emojiId: string) {\n    const prevEmojis = this.localStorage.get();\n    const count = prevEmojis![emojiId] ? prevEmojis[emojiId] + 1 : 1;\n\n    const emojis: FrequentEmojis = {\n      ...prevEmojis,\n      [emojiId]: count,\n    };\n\n    this.localStorage.set(emojis);\n\n    return emojis;\n  }\n}\n","import type React from 'react';\n\nimport type { EmojiCategoryList } from '../../lib';\nimport type { IEmojiFloatingLibrary } from './EmojiLibrary';\nimport type { MapEmojiCategoryList } from './EmojiPickerState';\n\nconst setVisibleSections = (\n  entries: IntersectionObserverEntry[],\n  visibleSections: MapEmojiCategoryList\n) => {\n  for (const entry of entries) {\n    const id = (entry.target as HTMLDivElement).dataset.id as EmojiCategoryList;\n    visibleSections.set(id, entry.isIntersecting);\n  }\n};\n\nconst getSectionInFocus = (\n  visibleSections: MapEmojiCategoryList\n): EmojiCategoryList | undefined => {\n  for (const [id, ratio] of visibleSections) {\n    if (ratio) {\n      return id;\n    }\n  }\n};\n\nexport type ObserverCategoriesType = {\n  ancestorRef: React.MutableRefObject<HTMLDivElement | null>;\n  emojiLibrary: IEmojiFloatingLibrary;\n  setFocusedAndVisibleSections: SetFocusedAndVisibleSectionsType;\n};\n\nexport type SetFocusedAndVisibleSectionsType = (\n  visibleSections: MapEmojiCategoryList,\n  categoryId?: EmojiCategoryList\n) => void;\n\nexport const observeCategories = ({\n  ancestorRef,\n  emojiLibrary,\n  setFocusedAndVisibleSections,\n}: ObserverCategoriesType) => {\n  const observerOptions = {\n    root: ancestorRef.current,\n    threshold: 0,\n  };\n\n  const visibleSections: MapEmojiCategoryList = new Map();\n\n  const observer = new IntersectionObserver((entries) => {\n    setVisibleSections(entries, visibleSections);\n    const focusedSectionId = getSectionInFocus(visibleSections);\n\n    focusedSectionId &&\n      setFocusedAndVisibleSections(visibleSections, focusedSectionId);\n  }, observerOptions);\n\n  for (const section of emojiLibrary.getGrid().sections()) {\n    if (section.root.current) observer.observe(section.root.current);\n  }\n\n  return observer;\n};\n","import React from 'react';\n\nimport type { Emoji } from '@emoji-mart/data';\n\nimport { type EmojiCategoryList, EmojiCategory } from '../../lib';\n\nexport type EmojiPickerStateDispatch = {\n  type: string;\n  payload?: Partial<EmojiPickerStateProps>;\n};\n\nexport type EmojiPickerStateProps = {\n  hasFound: boolean;\n  isOpen: boolean;\n  isSearching: boolean;\n  searchResult: Emoji[];\n  searchValue: string;\n  visibleCategories: MapEmojiCategoryList;\n  emoji?: Emoji;\n  focusedCategory?: EmojiCategoryList;\n  frequentEmoji?: string;\n};\n\nexport type MapEmojiCategoryList = Map<EmojiCategoryList, boolean>;\n\nconst initialState: EmojiPickerStateProps = {\n  emoji: undefined,\n  focusedCategory: undefined,\n  frequentEmoji: undefined,\n  hasFound: false,\n  isOpen: false,\n  isSearching: false,\n  searchResult: [],\n  searchValue: '',\n  visibleCategories: new Map(),\n};\n\nexport const EmojiPickerState = (): [\n  EmojiPickerStateProps,\n  React.Dispatch<EmojiPickerStateDispatch>,\n] => {\n  const [cache, dispatch] = React.useReducer(\n    (state: EmojiPickerStateProps, action: EmojiPickerStateDispatch) => {\n      const { payload, type } = action;\n\n      switch (type) {\n        case 'CLEAR_SEARCH': {\n          return {\n            ...state,\n            focusedCategory: EmojiCategory.Frequent,\n            hasFound: false,\n            isSearching: false,\n            searchValue: '',\n          };\n        }\n        case 'SET_CLOSE': {\n          return {\n            ...state,\n            emoji: undefined,\n            isOpen: false,\n          };\n        }\n        case 'SET_EMOJI':\n        case 'SET_FOCUSED_AND_VISIBLE_CATEGORIES':\n        case 'SET_SEARCH': {\n          return { ...state, ...payload };\n        }\n        case 'SET_FOCUSED_CATEGORY': {\n          return {\n            ...state,\n            ...payload,\n            hasFound: false,\n            isSearching: false,\n            searchValue: '',\n          };\n        }\n        case 'SET_OPEN': {\n          return {\n            ...state,\n            isOpen: true,\n          };\n        }\n        case 'UPDATE_FREQUENT_EMOJIS': {\n          return {\n            ...state,\n            ...payload,\n            emoji: undefined,\n          };\n        }\n        case 'UPDATE_SEARCH_RESULT': {\n          return {\n            ...state,\n            ...payload,\n            focusedCategory: undefined,\n            isSearching: true,\n          };\n        }\n        default: {\n          throw new Error(`Unhandled action type: ${type}`);\n        }\n      }\n    },\n    initialState\n  );\n\n  return [cache, dispatch];\n};\n","import React from 'react';\n\nimport {\n  type EmojiCategoryList,\n  type IGrid,\n  AGridSection,\n  Grid,\n} from '../../../lib';\n\nexport type EmojiFloatingGridType = IGrid<\n  React.RefObject<HTMLDivElement | null>,\n  EmojiCategoryList\n>;\n\nexport class EmojiFloatingGrid extends Grid<\n  React.RefObject<HTMLDivElement | null>,\n  EmojiCategoryList\n> {\n  public createRootRef() {\n    return React.createRef<HTMLDivElement>();\n  }\n}\n\nexport class EmojiGridSectionWithRoot extends AGridSection<\n  React.RefObject<HTMLDivElement | null>,\n  EmojiCategoryList\n> {\n  protected createRootRef() {\n    this._root = React.createRef<HTMLDivElement>();\n  }\n}\n","import type {\n  EmojiCategoryList,\n  EmojiSettingsType,\n  GridElements,\n} from '../../../lib';\nimport type { IFrequentEmojiStorage } from './EmojiFloatingLibrary.types';\n\nimport {\n  EmojiFloatingGrid,\n  EmojiGridSectionWithRoot,\n} from './EmojiFloatingGrid';\n\nexport class EmojiFloatingGridBuilder {\n  protected grid = new EmojiFloatingGrid();\n\n  constructor(\n    protected localStorage: IFrequentEmojiStorage,\n    protected sections: EmojiCategoryList[],\n    protected elements: GridElements,\n    protected settings: EmojiSettingsType\n  ) {}\n\n  private addFrequent() {\n    if (this.settings.showFrequent.value) {\n      const id = 'frequent';\n      this.grid.addSection(\n        id,\n        new EmojiGridSectionWithRoot(id, this.settings.perLine.value),\n        {\n          [id]: this.localStorage.getList(),\n        }\n      );\n    }\n  }\n\n  public build() {\n    if (this.elements.frequent) {\n      this.addFrequent();\n    }\n\n    this.sections.forEach((id) => {\n      if (this.elements[id]?.length) {\n        this.grid.addSection(\n          id,\n          new EmojiGridSectionWithRoot(id, this.settings.perLine.value),\n          this.elements\n        );\n      }\n    });\n\n    return this.grid;\n  }\n}\n","import type { EmojiFloatingGridType } from './EmojiFloatingGrid';\nimport type {\n  IEmojiFloatingLibrary,\n  IFrequentEmojiStorage,\n} from './EmojiFloatingLibrary.types';\n\nimport {\n  type EmojiCategoryList,\n  type EmojiLibrary,\n  type EmojiSettingsType,\n  DEFAULT_EMOJI_LIBRARY,\n  defaultCategories,\n  EmojiCategory,\n  EmojiInlineLibrary,\n} from '../../../lib';\nimport { EmojiFloatingGridBuilder } from './EmojiFloatingGridBuilder';\n\nexport class EmojiFloatingLibrary\n  extends EmojiInlineLibrary\n  implements IEmojiFloatingLibrary\n{\n  private static instance?: EmojiFloatingLibrary;\n\n  private categories: EmojiCategoryList[] = defaultCategories;\n  private emojis: Partial<Record<EmojiCategoryList, string[]>> = {};\n  private grid: EmojiFloatingGridType;\n\n  private constructor(\n    protected settings: EmojiSettingsType,\n    protected localStorage: IFrequentEmojiStorage,\n    protected library: EmojiLibrary = DEFAULT_EMOJI_LIBRARY\n  ) {\n    super(library);\n\n    this.categories = settings.categories.value ?? this.categories;\n\n    this.initEmojis(library.categories);\n\n    this.grid = new EmojiFloatingGridBuilder(\n      this.localStorage,\n      this.categories,\n      this.emojis,\n      settings\n    ).build();\n  }\n\n  public static getInstance(\n    settings: EmojiSettingsType,\n    localStorage: IFrequentEmojiStorage,\n    library = DEFAULT_EMOJI_LIBRARY\n  ) {\n    if (!EmojiFloatingLibrary.instance) {\n      EmojiFloatingLibrary.instance = new EmojiFloatingLibrary(\n        settings,\n        localStorage,\n        library\n      );\n    }\n\n    return EmojiFloatingLibrary.instance;\n  }\n\n  private initEmojis(categoriesLibrary: any) {\n    for (const category of categoriesLibrary) {\n      (this.emojis as any)[category.id] = category.emojis;\n    }\n  }\n\n  public getGrid() {\n    return this.grid;\n  }\n\n  public indexOf(focusedCategory: EmojiCategoryList) {\n    const index = this.grid.indexOf(focusedCategory);\n\n    return index < 1 ? 0 : index;\n  }\n\n  public updateFrequentCategory(emojiId: string) {\n    this.localStorage.update(emojiId);\n    this.grid.updateSection(\n      EmojiCategory.Frequent,\n      this.localStorage.getList()\n    );\n  }\n}\n","import React from 'react';\n\nimport type { Emoji } from '@emoji-mart/data';\n\nimport { useEditorRef } from '@udecode/plate/react';\n\nimport {\n  type AIndexSearch,\n  type EmojiCategoryList,\n  type EmojiIconList,\n  type EmojiSettingsType,\n  type i18nProps,\n  i18n,\n  insertEmoji,\n} from '../../lib';\nimport {\n  type IEmojiFloatingLibrary,\n  type MapEmojiCategoryList,\n  type SetFocusedAndVisibleSectionsType,\n  EmojiPickerState,\n  observeCategories,\n} from '../utils';\n\nexport type MutableRefs = React.MutableRefObject<{\n  content: React.RefObject<HTMLDivElement | null> | undefined;\n  contentRoot: React.RefObject<HTMLDivElement | null> | undefined;\n}>;\n\nexport type UseEmojiPickerProps = {\n  closeOnSelect: boolean;\n  emojiLibrary: IEmojiFloatingLibrary;\n  indexSearch: AIndexSearch;\n};\n\nexport type UseEmojiPickerType<\n  T extends React.ReactElement<any> = React.ReactElement<any>,\n> = {\n  emojiLibrary: IEmojiFloatingLibrary;\n  hasFound: boolean;\n  i18n: i18nProps;\n  icons: EmojiIconList<T>;\n  isOpen: boolean;\n  isSearching: boolean;\n  refs: MutableRefs;\n  searchResult: Emoji[];\n  searchValue: string;\n  visibleCategories: MapEmojiCategoryList;\n  clearSearch: () => void;\n  setIsOpen: (isOpen: boolean) => void;\n  setSearch: (value: string) => void;\n  handleCategoryClick: (id: EmojiCategoryList) => void;\n  onMouseOver: (emoji?: Emoji) => void;\n  onSelectEmoji: (emoji: Emoji) => void;\n  emoji?: Emoji;\n  focusedCategory?: EmojiCategoryList;\n  settings?: EmojiSettingsType;\n  styles?: any;\n};\n\nexport const useEmojiPicker = ({\n  closeOnSelect,\n  emojiLibrary,\n  indexSearch,\n}: UseEmojiPickerProps): Omit<UseEmojiPickerType, 'icons' | 'settings'> => {\n  const editor = useEditorRef();\n\n  const [state, dispatch] = EmojiPickerState();\n  const refs = React.useRef({\n    content: React.createRef<HTMLDivElement>(),\n    contentRoot: React.createRef<HTMLDivElement>(),\n  });\n\n  const setIsOpen = React.useCallback(\n    (isOpen: boolean) => {\n      dispatch({\n        type: isOpen ? 'SET_OPEN' : 'SET_CLOSE',\n      });\n    },\n    [dispatch]\n  );\n\n  const setFocusedAndVisibleSections =\n    React.useCallback<SetFocusedAndVisibleSectionsType>(\n      (visibleSections, categoryId) => {\n        dispatch({\n          payload: {\n            focusedCategory: categoryId,\n            visibleCategories: visibleSections,\n          },\n          type: 'SET_FOCUSED_AND_VISIBLE_CATEGORIES',\n        });\n      },\n      [dispatch]\n    );\n\n  const handleSearchInput = React.useCallback(\n    (input: string) => {\n      const value = String(input).replaceAll(/\\s/g, '');\n\n      if (!value && !input) {\n        dispatch({ type: 'CLEAR_SEARCH' });\n\n        return;\n      }\n\n      const hasFound = indexSearch.search(value).hasFound();\n\n      dispatch({\n        payload: {\n          hasFound,\n          searchResult: indexSearch.get(),\n          searchValue: value,\n        },\n        type: 'UPDATE_SEARCH_RESULT',\n      });\n    },\n    [dispatch, indexSearch]\n  );\n\n  const setSearch = React.useCallback(\n    (value: string) => {\n      value ? handleSearchInput(value) : dispatch({ type: 'CLEAR_SEARCH' });\n    },\n    [dispatch, handleSearchInput]\n  );\n\n  const clearSearch = React.useCallback(() => {\n    dispatch({ type: 'CLEAR_SEARCH' });\n  }, [dispatch]);\n\n  const onMouseOver = React.useCallback(\n    (emoji?: Emoji) => {\n      dispatch({ payload: { emoji }, type: 'SET_EMOJI' });\n    },\n    [dispatch]\n  );\n\n  const updateFrequentEmojis = React.useCallback(\n    (emojiId: string) => {\n      emojiLibrary.updateFrequentCategory(emojiId);\n\n      dispatch({\n        payload: {\n          frequentEmoji: emojiId,\n          isOpen: closeOnSelect ? false : state.isOpen,\n        },\n        type: 'UPDATE_FREQUENT_EMOJIS',\n      });\n    },\n    [closeOnSelect, dispatch, emojiLibrary, state.isOpen]\n  );\n\n  const onSelectEmoji = React.useCallback(\n    (emoji: Emoji) => {\n      insertEmoji(editor, emoji);\n      updateFrequentEmojis(emoji.id);\n    },\n    [editor, updateFrequentEmojis]\n  );\n\n  const handleCategoryClick = React.useCallback(\n    (categoryId: EmojiCategoryList) => {\n      dispatch({\n        payload: { focusedCategory: categoryId },\n        type: 'SET_FOCUSED_CATEGORY',\n      });\n\n      const getSectionPositionToScrollIntoView = () => {\n        const trashHold = 1;\n        const section = emojiLibrary.getGrid().section(categoryId);\n\n        const contentRootScrollTop =\n          refs.current.contentRoot.current?.scrollTop ?? 0;\n        const contentRootTopPosition =\n          refs.current.contentRoot.current?.getBoundingClientRect().top ?? 0;\n        const sectionTopPosition =\n          section?.root.current?.getBoundingClientRect().top ?? 0;\n\n        return (\n          trashHold +\n          contentRootScrollTop +\n          sectionTopPosition -\n          contentRootTopPosition\n        );\n      };\n\n      if (refs.current.contentRoot.current) {\n        refs.current.contentRoot.current.scrollTop =\n          getSectionPositionToScrollIntoView();\n      }\n    },\n    [dispatch, emojiLibrary]\n  );\n\n  React.useEffect(() => {\n    if (state.isOpen && !state.isSearching) {\n      // Timeout to allow the category element refs to populate\n      setTimeout(() => {\n        observeCategories({\n          ancestorRef: refs.current.contentRoot,\n          emojiLibrary,\n          setFocusedAndVisibleSections,\n        });\n      }, 0);\n    }\n  }, [\n    emojiLibrary,\n    state.isOpen,\n    state.isSearching,\n    setFocusedAndVisibleSections,\n  ]);\n\n  return {\n    clearSearch,\n    emoji: state.emoji,\n    emojiLibrary,\n    i18n,\n    refs,\n    setIsOpen,\n    setSearch,\n    handleCategoryClick,\n    onMouseOver,\n    onSelectEmoji,\n    ...state,\n  };\n};\n"],"mappings":"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","names":["React","React","React","React","emojiLibrary","indexSearch"]}