{"version":3,"sources":["../src/lib/BaseMentionPlugin.ts","../src/lib/getMentionOnSelectItem.ts"],"sourcesContent":["import {\n  type PluginConfig,\n  type TMentionElement,\n  createSlatePlugin,\n  createTSlatePlugin,\n  KEYS,\n} from '@udecode/plate';\nimport {\n  type TriggerComboboxPluginOptions,\n  withTriggerCombobox,\n} from '@udecode/plate-combobox';\n\nexport type MentionConfig = PluginConfig<\n  'mention',\n  {\n    insertSpaceAfterMention?: boolean;\n  } & TriggerComboboxPluginOptions,\n  {},\n  {\n    insert: {\n      mention: (options: { search: string; value: any; key?: any }) => void;\n    };\n  }\n>;\n\nexport const BaseMentionInputPlugin = createSlatePlugin({\n  key: KEYS.mentionInput,\n  node: { isElement: true, isInline: true, isVoid: true },\n});\n\n/** Enables support for autocompleting @mentions. */\nexport const BaseMentionPlugin = createTSlatePlugin<MentionConfig>({\n  key: KEYS.mention,\n  node: { isElement: true, isInline: true, isMarkableVoid: true, isVoid: true },\n  options: {\n    trigger: '@',\n    triggerPreviousCharPattern: /^\\s?$/,\n    createComboboxInput: (trigger) => ({\n      children: [{ text: '' }],\n      trigger,\n      type: KEYS.mentionInput,\n    }),\n  },\n  plugins: [BaseMentionInputPlugin],\n})\n  .extendEditorTransforms<MentionConfig['transforms']>(({ editor, type }) => ({\n    insert: {\n      mention: ({ key, value }) => {\n        editor.tf.insertNodes<TMentionElement>({\n          key,\n          children: [{ text: '' }],\n          type,\n          value,\n        });\n      },\n    },\n  }))\n  .overrideEditor(withTriggerCombobox as any);\n","import { type SlateEditor, getEditorPlugin, KEYS } from '@udecode/plate';\n\nimport type { MentionConfig } from './BaseMentionPlugin';\nimport type { TMentionItemBase } from './types';\n\nexport type MentionOnSelectItem<\n  TItem extends TMentionItemBase = TMentionItemBase,\n> = (editor: SlateEditor, item: TItem, search?: string) => void;\n\nexport const getMentionOnSelectItem =\n  <TItem extends TMentionItemBase = TMentionItemBase>({\n    key = KEYS.mention,\n  }: { key?: string } = {}): MentionOnSelectItem<TItem> =>\n  (editor, item, search = '') => {\n    const { getOptions, tf } = getEditorPlugin<MentionConfig>(editor, {\n      key: key as any,\n    });\n    const { insertSpaceAfterMention } = getOptions();\n\n    tf.insert.mention({ key: item.key, search, value: item.text });\n\n    // move the selection after the element\n    editor.tf.move({ unit: 'offset' });\n\n    const pathAbove = editor.api.block()?.[1];\n\n    const isBlockEnd =\n      editor.selection &&\n      pathAbove &&\n      editor.api.isEnd(editor.selection.anchor, pathAbove);\n\n    if (isBlockEnd && insertSpaceAfterMention) {\n      editor.tf.insertText(' ');\n    }\n  };\n"],"mappings":";AAAA;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AAeA,IAAM,yBAAyB,kBAAkB;AAAA,EACtD,KAAK,KAAK;AAAA,EACV,MAAM,EAAE,WAAW,MAAM,UAAU,MAAM,QAAQ,KAAK;AACxD,CAAC;AAGM,IAAM,oBAAoB,mBAAkC;AAAA,EACjE,KAAK,KAAK;AAAA,EACV,MAAM,EAAE,WAAW,MAAM,UAAU,MAAM,gBAAgB,MAAM,QAAQ,KAAK;AAAA,EAC5E,SAAS;AAAA,IACP,SAAS;AAAA,IACT,4BAA4B;AAAA,IAC5B,qBAAqB,CAAC,aAAa;AAAA,MACjC,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,MACvB;AAAA,MACA,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AAAA,EACA,SAAS,CAAC,sBAAsB;AAClC,CAAC,EACE,uBAAoD,CAAC,EAAE,QAAQ,KAAK,OAAO;AAAA,EAC1E,QAAQ;AAAA,IACN,SAAS,CAAC,EAAE,KAAK,MAAM,MAAM;AAC3B,aAAO,GAAG,YAA6B;AAAA,QACrC;AAAA,QACA,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF,EAAE,EACD,eAAe,mBAA0B;;;ACzD5C,SAA2B,iBAAiB,QAAAA,aAAY;AASjD,IAAM,yBACX,CAAoD;AAAA,EAClD,MAAMA,MAAK;AACb,IAAsB,CAAC,MACvB,CAAC,QAAQ,MAAM,SAAS,OAAO;AAC7B,QAAM,EAAE,YAAY,GAAG,IAAI,gBAA+B,QAAQ;AAAA,IAChE;AAAA,EACF,CAAC;AACD,QAAM,EAAE,wBAAwB,IAAI,WAAW;AAE/C,KAAG,OAAO,QAAQ,EAAE,KAAK,KAAK,KAAK,QAAQ,OAAO,KAAK,KAAK,CAAC;AAG7D,SAAO,GAAG,KAAK,EAAE,MAAM,SAAS,CAAC;AAEjC,QAAM,YAAY,OAAO,IAAI,MAAM,IAAI,CAAC;AAExC,QAAM,aACJ,OAAO,aACP,aACA,OAAO,IAAI,MAAM,OAAO,UAAU,QAAQ,SAAS;AAErD,MAAI,cAAc,yBAAyB;AACzC,WAAO,GAAG,WAAW,GAAG;AAAA,EAC1B;AACF;","names":["KEYS"]}