{"version":3,"file":"util.cjs","sources":["../../../../../../packages/vue-components/vc-mentions/src/util.ts"],"sourcesContent":["import type { MentionsProps } from './Mentions';\nimport type { OptionProps } from './Option';\n\n/**\n * Cut input selection into 2 part and return text before selection start\n */\nexport function getBeforeSelectionText(input: HTMLTextAreaElement) {\n  const { selectionStart } = input;\n  return input.value.slice(0, selectionStart);\n}\n\ninterface MeasureIndex {\n  location: number;\n  prefix: string;\n}\n/**\n * Find the last match prefix index\n */\nexport function getLastMeasureIndex(text: string, prefix: string | string[] = ''): MeasureIndex {\n  const prefixList: string[] = Array.isArray(prefix) ? prefix : [prefix];\n  return prefixList.reduce(\n    (lastMatch: MeasureIndex, prefixStr): MeasureIndex => {\n      const lastIndex = text.lastIndexOf(prefixStr);\n      if (lastIndex > lastMatch.location) {\n        return {\n          location: lastIndex,\n          prefix: prefixStr,\n        };\n      }\n      return lastMatch;\n    },\n    { location: -1, prefix: '' },\n  );\n}\n\ninterface MeasureConfig {\n  measureLocation: number;\n  prefix: string;\n  targetText: string;\n  selectionStart: number;\n  split: string;\n}\n\nfunction lower(char: string | undefined): string {\n  return (char || '').toLowerCase();\n}\n\nfunction reduceText(text: string, targetText: string, split: string) {\n  const firstChar = text[0];\n  if (!firstChar || firstChar === split)\n    return text;\n\n  // Reuse rest text as it can\n  let restText = text;\n  const targetTextLen = targetText.length;\n  for (let i = 0; i < targetTextLen; i += 1) {\n    if (lower(restText[i]) !== lower(targetText[i])) {\n      restText = restText.slice(i);\n      break;\n    } else if (i === targetTextLen - 1) {\n      restText = restText.slice(targetTextLen);\n    }\n  }\n\n  return restText;\n}\n\n/**\n * Paint targetText into current text:\n *  text: little@litest\n *  targetText: light\n *  => little @light test\n */\nexport function replaceWithMeasure(text: string, measureConfig: MeasureConfig) {\n  const { measureLocation, prefix, targetText, selectionStart, split } = measureConfig;\n\n  // Before text will append one space if have other text\n  let beforeMeasureText = text.slice(0, measureLocation);\n  if (beforeMeasureText[beforeMeasureText.length - split.length] === split)\n    beforeMeasureText = beforeMeasureText.slice(0, beforeMeasureText.length - split.length);\n\n  if (beforeMeasureText)\n    beforeMeasureText = `${beforeMeasureText}${split}`;\n\n  // Cut duplicate string with current targetText\n  let restText = reduceText(\n    text.slice(selectionStart),\n    targetText.slice(selectionStart - measureLocation - prefix.length),\n    split,\n  );\n  if (restText.slice(0, split.length) === split)\n    restText = restText.slice(split.length);\n\n  const connectedStartText = `${beforeMeasureText}${prefix}${targetText}${split}`;\n\n  return {\n    text: `${connectedStartText}${restText}`,\n    selectionLocation: connectedStartText.length,\n  };\n}\n\nexport function setInputSelection(input: HTMLTextAreaElement, location: number) {\n  input.setSelectionRange(location, location);\n\n  /**\n   * Reset caret into view.\n   * Since this function always called by user control, it's safe to focus element.\n   */\n  input.blur();\n  input.focus();\n}\n\nexport function validateSearch(text: string, props: MentionsProps) {\n  const { split } = props;\n  return !split || !text.includes(split);\n}\n\nexport function filterOption(input: string, { value = '' }: OptionProps): boolean {\n  const lowerCase = input.toLowerCase();\n  return value.toLowerCase().includes(lowerCase);\n}\n"],"names":[],"mappings":"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"}