{"version":3,"file":"suggestion.cjs","sources":["../../../../../components/rich_text_editor/extensions/emoji/suggestion.js"],"sourcesContent":["import { VueRenderer } from '@tiptap/vue-2';\nimport { emojisIndexed } from '@dialpad/dialtone-emojis';\n\nimport SuggestionList from '../suggestion/SuggestionList.vue';\nimport EmojiSuggestion from './EmojiSuggestion.vue';\n\nimport tippy from 'tippy.js';\nimport hideOnEsc from '../tippy_plugins/hide_on_esc';\n\nconst suggestionLimit = 20;\n\nexport default {\n  items: ({ query }) => {\n    if (query.length < 2) {\n      return [];\n    }\n    const emojiList = Object.values(emojisIndexed);\n    query = query.toLowerCase();\n\n    const filteredEmoji = emojiList\n      .filter(\n        item => [\n          item.name,\n          item.shortname.replaceAll(':', ''),\n          ...item.keywords,\n        ].some(text => text.startsWith(query)),\n      ).splice(0, suggestionLimit);\n    return filteredEmoji.map(item => ({ code: item.shortname }));\n  },\n\n  command: ({ editor, range, props }) => {\n    // increase range.to by one when the next node is of type \"text\"\n    // and starts with a space character\n    const nodeAfter = editor.view.state.selection.$to.nodeAfter;\n    const overrideSpace = nodeAfter?.text?.startsWith(' ');\n\n    if (overrideSpace) {\n      range.to += 1;\n    }\n\n    editor\n      .chain()\n      .focus()\n      .insertContentAt(range, [\n        {\n          type: 'emoji',\n          attrs: props,\n        },\n      ])\n      .run();\n\n    window.getSelection()?.collapseToEnd();\n  },\n\n  render: () => {\n    let component;\n    let popup;\n    let popupIsOpen = false;\n\n    return {\n      onStart: props => {\n        component = new VueRenderer(SuggestionList, {\n          parent: this,\n          propsData: {\n            itemComponent: EmojiSuggestion,\n            itemType: 'emoji',\n            ...props,\n          },\n          editor: props.editor,\n        });\n\n        if (!props.clientRect) {\n          return;\n        }\n\n        popup = tippy('body', {\n          getReferenceClientRect: props.clientRect,\n          appendTo: () => document.body,\n          content: component.element,\n          showOnCreate: false,\n          onShow: () => { popupIsOpen = true; },\n          onHidden: () => { popupIsOpen = false; },\n          interactive: true,\n          trigger: 'manual',\n          placement: 'top-start',\n          zIndex: 650,\n          plugins: [hideOnEsc],\n        });\n\n        if (props.items.length > 0) {\n          popup?.[0].show();\n        }\n      },\n\n      onUpdate (props) {\n        component?.updateProps(props);\n\n        if (props.items.length > 0) {\n          popup?.[0].show();\n        } else {\n          popup?.[0].hide();\n        }\n        popup?.[0].setProps({\n          getReferenceClientRect: props.clientRect,\n        });\n      },\n\n      onKeyDown (props) {\n        if (popupIsOpen) {\n          return component?.ref?.onKeyDown(props);\n        }\n      },\n\n      onExit () {\n        popup?.[0].destroy();\n        popup = null;\n        component?.destroy();\n        component = null;\n      },\n    };\n  },\n};\n"],"names":["emojisIndexed","VueRenderer","SuggestionList","this","EmojiSuggestion","hideOnEsc"],"mappings":";;;;;;;;AASA,MAAM,kBAAkB;AAExB,MAAe,oBAAA;AAAA,EACb,OAAO,CAAC,EAAE,YAAY;AACpB,QAAI,MAAM,SAAS,GAAG;AACpB,aAAO;IACR;AACD,UAAM,YAAY,OAAO,OAAOA,eAAa,aAAA;AAC7C,YAAQ,MAAM;AAEd,UAAM,gBAAgB,UACnB;AAAA,MACC,UAAQ;AAAA,QACN,KAAK;AAAA,QACL,KAAK,UAAU,WAAW,KAAK,EAAE;AAAA,QACjC,GAAG,KAAK;AAAA,MACT,EAAC,KAAK,UAAQ,KAAK,WAAW,KAAK,CAAC;AAAA,IAC7C,EAAQ,OAAO,GAAG,eAAe;AAC7B,WAAO,cAAc,IAAI,WAAS,EAAE,MAAM,KAAK,UAAW,EAAC;AAAA,EAC5D;AAAA,EAED,SAAS,CAAC,EAAE,QAAQ,OAAO,MAAK,MAAO;;AAGrC,UAAM,YAAY,OAAO,KAAK,MAAM,UAAU,IAAI;AAClD,UAAM,iBAAgB,4CAAW,SAAX,mBAAiB,WAAW;AAElD,QAAI,eAAe;AACjB,YAAM,MAAM;AAAA,IACb;AAED,WACG,MAAO,EACP,MAAO,EACP,gBAAgB,OAAO;AAAA,MACtB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,IACT,CAAO,EACA;AAEH,iBAAO,mBAAP,mBAAuB;AAAA,EACxB;AAAA,EAED,QAAQ,MAAM;AACZ,QAAI;AACJ,QAAI;AACJ,QAAI,cAAc;AAElB,WAAO;AAAA,MACL,SAAS,WAAS;AAChB,oBAAY,IAAIC,KAAW,YAACC,wBAAgB;AAAA,UAC1C,QAAQC;AAAAA,UACR,WAAW;AAAA,YACT,eAAeC,gBAAe;AAAA,YAC9B,UAAU;AAAA,YACV,GAAG;AAAA,UACJ;AAAA,UACD,QAAQ,MAAM;AAAA,QACxB,CAAS;AAED,YAAI,CAAC,MAAM,YAAY;AACrB;AAAA,QACD;AAED,gBAAQ,MAAM,QAAQ;AAAA,UACpB,wBAAwB,MAAM;AAAA,UAC9B,UAAU,MAAM,SAAS;AAAA,UACzB,SAAS,UAAU;AAAA,UACnB,cAAc;AAAA,UACd,QAAQ,MAAM;AAAE,0BAAc;AAAA,UAAO;AAAA,UACrC,UAAU,MAAM;AAAE,0BAAc;AAAA,UAAQ;AAAA,UACxC,aAAa;AAAA,UACb,SAAS;AAAA,UACT,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,SAAS,CAACC,YAAAA,OAAS;AAAA,QAC7B,CAAS;AAED,YAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,yCAAQ,GAAG;AAAA,QACZ;AAAA,MACF;AAAA,MAED,SAAU,OAAO;AACf,+CAAW,YAAY;AAEvB,YAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,yCAAQ,GAAG;AAAA,QACrB,OAAe;AACL,yCAAQ,GAAG;AAAA,QACZ;AACD,uCAAQ,GAAG,SAAS;AAAA,UAClB,wBAAwB,MAAM;AAAA,QACxC;AAAA,MACO;AAAA,MAED,UAAW,OAAO;;AAChB,YAAI,aAAa;AACf,kBAAO,4CAAW,QAAX,mBAAgB,UAAU;AAAA,QAClC;AAAA,MACF;AAAA,MAED,SAAU;AACR,uCAAQ,GAAG;AACX,gBAAQ;AACR,+CAAW;AACX,oBAAY;AAAA,MACb;AAAA,IACP;AAAA,EACG;AACH;;"}