{"version":3,"sources":["../src/lib/withTriggerCombobox.ts","../src/lib/utils/filterWords.ts"],"sourcesContent":["import type {\n  OverrideEditor,\n  PluginConfig,\n  SlateEditor,\n  TElement,\n} from '@udecode/plate';\n\nimport type { TriggerComboboxPluginOptions } from './types';\n\nexport const withTriggerCombobox: OverrideEditor<\n  PluginConfig<any, TriggerComboboxPluginOptions>\n> = ({ editor, getOptions, tf: { insertText }, type }) => {\n  const matchesTrigger = (text: string) => {\n    const { trigger } = getOptions();\n\n    if (trigger instanceof RegExp) {\n      return trigger.test(text);\n    }\n    if (Array.isArray(trigger)) {\n      return trigger.includes(text);\n    }\n\n    return text === trigger;\n  };\n\n  return {\n    transforms: {\n      insertText(text, options) {\n        const {\n          createComboboxInput,\n          triggerPreviousCharPattern,\n          triggerQuery,\n        } = getOptions();\n\n        if (\n          options?.at ||\n          !editor.selection ||\n          !matchesTrigger(text) ||\n          (triggerQuery && !triggerQuery(editor as SlateEditor))\n        ) {\n          return insertText(text, options);\n        }\n\n        // Make sure an input is created at the beginning of line or after a whitespace\n        const previousChar = editor.api.string(\n          editor.api.range('before', editor.selection)\n        );\n\n        const matchesPreviousCharPattern =\n          triggerPreviousCharPattern?.test(previousChar);\n\n        if (matchesPreviousCharPattern) {\n          const inputNode: TElement = createComboboxInput\n            ? createComboboxInput(text)\n            : { children: [{ text: '' }], type };\n\n          return editor.tf.insertNodes(inputNode, options);\n        }\n\n        return insertText(text, options);\n      },\n    },\n  };\n};\n","export interface FilterWordsOptions {\n  prefixMode?: 'all-words' | 'last-word' | 'none';\n  wordBoundary?: RegExp;\n  wordQuantifier?: 'match-all' | 'match-any';\n}\n\nexport const filterWords = (\n  haystack: string,\n  needle: string,\n  {\n    prefixMode = 'last-word',\n    wordBoundary = /\\s+/,\n    wordQuantifier = 'match-all',\n  }: FilterWordsOptions = {}\n): boolean => {\n  const haystackWords = haystack.trim().split(wordBoundary);\n  const needleWords = needle.trim().split(wordBoundary);\n\n  const quantifier = wordQuantifier === 'match-all' ? 'every' : 'some';\n\n  return needleWords[quantifier]((needleWord, i) => {\n    const allowPrefix = (() => {\n      switch (prefixMode) {\n        case 'all-words': {\n          return true;\n        }\n        case 'last-word': {\n          return i === needleWords.length - 1;\n        }\n        case 'none': {\n          return false;\n        }\n      }\n    })();\n\n    return haystackWords.some((unslicedHaystackWord) => {\n      const haystackWord = allowPrefix\n        ? unslicedHaystackWord.slice(0, needleWord.length)\n        : unslicedHaystackWord;\n\n      return (\n        haystackWord.localeCompare(needleWord, undefined, {\n          sensitivity: 'base',\n          usage: 'search',\n        }) === 0\n      );\n    });\n  });\n};\n"],"mappings":";AASO,IAAM,sBAET,CAAC,EAAE,QAAQ,YAAY,IAAI,EAAE,WAAW,GAAG,KAAK,MAAM;AACxD,QAAM,iBAAiB,CAAC,SAAiB;AACvC,UAAM,EAAE,QAAQ,IAAI,WAAW;AAE/B,QAAI,mBAAmB,QAAQ;AAC7B,aAAO,QAAQ,KAAK,IAAI;AAAA,IAC1B;AACA,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,aAAO,QAAQ,SAAS,IAAI;AAAA,IAC9B;AAEA,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO;AAAA,IACL,YAAY;AAAA,MACV,WAAW,MAAM,SAAS;AACxB,cAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,QACF,IAAI,WAAW;AAEf,YACE,SAAS,MACT,CAAC,OAAO,aACR,CAAC,eAAe,IAAI,KACnB,gBAAgB,CAAC,aAAa,MAAqB,GACpD;AACA,iBAAO,WAAW,MAAM,OAAO;AAAA,QACjC;AAGA,cAAM,eAAe,OAAO,IAAI;AAAA,UAC9B,OAAO,IAAI,MAAM,UAAU,OAAO,SAAS;AAAA,QAC7C;AAEA,cAAM,6BACJ,4BAA4B,KAAK,YAAY;AAE/C,YAAI,4BAA4B;AAC9B,gBAAM,YAAsB,sBACxB,oBAAoB,IAAI,IACxB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,KAAK;AAErC,iBAAO,OAAO,GAAG,YAAY,WAAW,OAAO;AAAA,QACjD;AAEA,eAAO,WAAW,MAAM,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AACF;;;ACzDO,IAAM,cAAc,CACzB,UACA,QACA;AAAA,EACE,aAAa;AAAA,EACb,eAAe;AAAA,EACf,iBAAiB;AACnB,IAAwB,CAAC,MACb;AACZ,QAAM,gBAAgB,SAAS,KAAK,EAAE,MAAM,YAAY;AACxD,QAAM,cAAc,OAAO,KAAK,EAAE,MAAM,YAAY;AAEpD,QAAM,aAAa,mBAAmB,cAAc,UAAU;AAE9D,SAAO,YAAY,UAAU,EAAE,CAAC,YAAY,MAAM;AAChD,UAAM,eAAe,MAAM;AACzB,cAAQ,YAAY;AAAA,QAClB,KAAK,aAAa;AAChB,iBAAO;AAAA,QACT;AAAA,QACA,KAAK,aAAa;AAChB,iBAAO,MAAM,YAAY,SAAS;AAAA,QACpC;AAAA,QACA,KAAK,QAAQ;AACX,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,GAAG;AAEH,WAAO,cAAc,KAAK,CAAC,yBAAyB;AAClD,YAAM,eAAe,cACjB,qBAAqB,MAAM,GAAG,WAAW,MAAM,IAC/C;AAEJ,aACE,aAAa,cAAc,YAAY,QAAW;AAAA,QAChD,aAAa;AAAA,QACb,OAAO;AAAA,MACT,CAAC,MAAM;AAAA,IAEX,CAAC;AAAA,EACH,CAAC;AACH;","names":[]}