{"version":3,"sources":["../src/utils/iterateMentionsMarkup.ts","../src/utils/getPlainText.ts","../src/utils/mapPlainTextIndex.ts","../src/utils/spliceString.ts","../src/utils/applyChangeToValue.ts","../src/utils/cn.ts","../src/utils/countSuggestions.ts","../src/utils/findStartOfMentionInPlainText.ts","../src/utils/flattenSuggestions.ts","../src/utils/getMentions.ts","../src/utils/getEndOfLastMention.ts","../src/utils/getMentionsAndPlainText.ts","../src/utils/getSubstringIndex.ts","../src/utils/getSuggestionHtmlId.ts","../src/utils/isNumber.ts","../src/utils/omit.ts","../src/MentionDefaultProps.ts","../src/utils/placeholders.ts","../src/utils/findPositionOfCapturingGroup.ts","../src/utils/makeMentionsMarkup.ts","../src/utils/escapeRegex.ts","../src/utils/markupToRegex.ts","../src/utils/createMarkupSerializer.ts","../src/types.ts","../src/utils/isMentionElement.ts","../src/utils/readConfigFromChildren.ts","../src/utils/useEffectEvent.ts","../src/Highlighter.tsx","../src/LoadingIndicator.tsx","../src/Suggestion.tsx","../src/SuggestionsOverlay.tsx","../src/utils/areMentionSelectionsEqual.ts","../src/utils/makeTriggerRegex.ts","../src/MentionsInput.tsx","../src/Mention.tsx"],"names":["twMerge","clsx","Children","map","isValidElement","React","useEffect","useLayoutEffect","useRef","useCallback","cva","useState","useMemo","jsx","jsxs","index","createPortal","suggestionsCount"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { MentionChildConfig } from '../types'\n\ntype MarkupIteratee = (\n  match: string,\n  index: number,\n  plainTextIndex: number,\n  id: string,\n  display: string,\n  childIndex: number,\n  lastMentionEndIndex: number\n) => void\n\ntype TextIteratee = (substring: string, index: number, substrPlainTextIndex: number) => void\n\nconst emptyFn: TextIteratee = () => {}\n\n// Finds all occurrences of the markup in the value and calls the `markupIteratee` callback for each of them.\n// The optional `textIteratee` callback is called for each plain text ranges in between these markup occurrences.\n// eslint-disable-next-line code-complete/low-function-cohesion\nconst iterateMentionsMarkup = <Extra extends Record<string, unknown> = Record<string, unknown>>(\n  value: string,\n  config: ReadonlyArray<MentionChildConfig<Extra>>,\n  markupIteratee: MarkupIteratee,\n  textIteratee: TextIteratee = emptyFn\n): void => {\n  const collectedMatches = config.flatMap((childConfig, childIndex) => {\n    return childConfig.serializer.findAll(value).map((match) => ({\n      match,\n      childIndex,\n    }))\n  })\n\n  // eslint-disable-next-line code-complete/enforce-meaningful-names\n  collectedMatches.sort((a, b) => {\n    if (a.match.index === b.match.index) {\n      if (a.match.markup.length === b.match.markup.length) {\n        return a.childIndex - b.childIndex\n      }\n      return b.match.markup.length - a.match.markup.length\n    }\n    return a.match.index - b.match.index\n  })\n\n  const seen = new Set<string>()\n  let start = 0\n  let currentPlainTextIndex = 0\n\n  for (const { match, childIndex } of collectedMatches) {\n    const key = `${match.index}:${match.markup}`\n    if (seen.has(key)) {\n      continue\n    }\n    seen.add(key)\n\n    if (match.index < start) {\n      continue\n    }\n\n    const { displayTransform } = config[childIndex]\n    const display = displayTransform(match.id, match.display ?? match.id)\n\n    const substr = value.slice(start, match.index)\n    textIteratee(substr, start, currentPlainTextIndex)\n    currentPlainTextIndex += substr.length\n\n    markupIteratee(\n      match.markup,\n      match.index,\n      currentPlainTextIndex,\n      match.id,\n      display,\n      childIndex,\n      start\n    )\n    currentPlainTextIndex += display.length\n    start = match.index + match.markup.length\n  }\n\n  if (start < value.length) {\n    textIteratee(value.slice(Math.max(0, start)), start, currentPlainTextIndex)\n  }\n}\n\nexport default iterateMentionsMarkup\n","import type { MentionChildConfig } from '../types'\nimport iterateMentionsMarkup from './iterateMentionsMarkup'\n\nconst getPlainText = <Extra extends Record<string, unknown> = Record<string, unknown>>(\n  value: string,\n  config: ReadonlyArray<MentionChildConfig<Extra>>\n): string => {\n  let result = ''\n  iterateMentionsMarkup(\n    value,\n    config,\n    (_match, _index, _plainTextIndex, _id, display) => {\n      result += display\n    },\n    (plainText) => {\n      result += plainText\n    }\n  )\n  return result\n}\n\nexport default getPlainText\n","import type { MentionChildConfig } from '../types'\nimport iterateMentionsMarkup from './iterateMentionsMarkup'\n\ntype InMarkupCorrection = 'START' | 'END' | 'NULL'\n\n// For the passed character index in the plain text string, returns the corresponding index\n// in the marked up value string.\n// If the passed character index lies inside a mention, the value of `inMarkupCorrection` defines the\n// correction to apply:\n//   - 'START' to return the index of the mention markup's first char (default)\n//   - 'END' to return the index after its last char\n//   - 'NULL' to return null\nconst mapPlainTextIndex = <Extra extends Record<string, unknown> = Record<string, unknown>>(\n  value: string,\n  config: ReadonlyArray<MentionChildConfig<Extra>>,\n  indexInPlainText: number | null | undefined,\n  inMarkupCorrection: InMarkupCorrection = 'START'\n): number | null | undefined => {\n  if (typeof indexInPlainText !== 'number') {\n    return indexInPlainText\n  }\n\n  let result: number | null | undefined\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  const textIteratee = (substr: string, index: number, substrPlainTextIndex: number): void => {\n    if (result !== undefined) {\n      return\n    }\n\n    if (substrPlainTextIndex + substr.length >= indexInPlainText) {\n      // found the corresponding position in the current plain text range\n      result = index + indexInPlainText - substrPlainTextIndex\n    }\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  const markupIteratee = (\n    markup: string,\n    index: number,\n    mentionPlainTextIndex: number,\n    _id: string,\n    display: string\n  ): void => {\n    if (result !== undefined) {\n      return\n    }\n\n    if (mentionPlainTextIndex + display.length > indexInPlainText) {\n      // found the corresponding position inside current match,\n      // return the index of the first or after the last char of the matching markup\n      // depending on whether the `inMarkupCorrection`\n      result =\n        inMarkupCorrection === 'NULL'\n          ? null\n          : index + (inMarkupCorrection === 'END' ? markup.length : 0)\n    }\n  }\n\n  iterateMentionsMarkup(value, config, markupIteratee, textIteratee)\n\n  // when a mention is at the end of the value and we want to get the caret position\n  // at the end of the string, result is undefined\n  return result === undefined ? value.length : result\n}\n\nexport default mapPlainTextIndex\n","// eslint-disable-next-line code-complete/enforce-meaningful-names\nconst spliceString = (str: string, start: number, end: number, insert: string): string =>\n  str.slice(0, Math.max(0, start)) + insert + str.slice(Math.max(0, end))\n\nexport default spliceString\n","import type { MentionChildConfig } from '../types'\nimport getPlainText from './getPlainText'\nimport mapPlainTextIndex from './mapPlainTextIndex'\nimport spliceString from './spliceString'\n\ninterface SelectionChange {\n  selectionStartBefore?: number | 'undefined'\n  selectionEndBefore?: number | 'undefined'\n  selectionEndAfter: number\n}\n\nconst normalizeSelectionPoint = (value: number | 'undefined' | undefined): number | undefined => {\n  if (value === 'undefined') {\n    return undefined\n  }\n  return value\n}\n\nconst ensureNumber = (value: number | null | undefined, fallback: number): number => {\n  if (typeof value === 'number') {\n    return value\n  }\n  return fallback\n}\n\n// Applies a change from the plain text textarea to the underlying marked up value\n// guided by the textarea text selection ranges before and after the change\n// eslint-disable-next-line code-complete/low-function-cohesion\nconst applyChangeToValue = <Extra extends Record<string, unknown> = Record<string, unknown>>(\n  value: string,\n  plainTextValue: string,\n  selection: SelectionChange,\n  config: ReadonlyArray<MentionChildConfig<Extra>>\n): string => {\n  let selectionStartBefore = normalizeSelectionPoint(selection.selectionStartBefore)\n  let selectionEndBefore = normalizeSelectionPoint(selection.selectionEndBefore)\n  const { selectionEndAfter } = selection\n\n  const oldPlainTextValue = getPlainText<Extra>(value, config)\n  const lengthDelta = oldPlainTextValue.length - plainTextValue.length\n  if (selectionStartBefore === undefined) {\n    selectionStartBefore = selectionEndAfter + lengthDelta\n  }\n\n  if (selectionEndBefore === undefined) {\n    selectionEndBefore = selectionStartBefore\n  }\n\n  if (\n    oldPlainTextValue === plainTextValue &&\n    selectionStartBefore === selectionEndBefore &&\n    selectionEndBefore === selectionEndAfter\n  ) {\n    return value\n  }\n\n  // Fixes an issue with replacing combined characters for complex input. Eg like accented letters on OSX\n  if (\n    selectionStartBefore === selectionEndBefore &&\n    selectionEndBefore === selectionEndAfter &&\n    oldPlainTextValue.length === plainTextValue.length &&\n    oldPlainTextValue !== plainTextValue\n  ) {\n    // TODO: write tests to determine if this should instead be:\n    selectionStartBefore = Math.max(0, selectionStartBefore - 1)\n    selectionEndBefore = Math.max(0, selectionEndBefore - 1)\n  }\n\n  // extract the insertion from the new plain text value\n  let insert = plainTextValue.slice(selectionStartBefore, selectionEndAfter)\n\n  // handling for Backspace key with no range selection\n  let spliceStart = Math.min(selectionStartBefore, selectionEndAfter)\n\n  let spliceEnd = selectionEndBefore\n  if (selectionStartBefore === selectionEndAfter) {\n    // handling for Delete key with no range selection\n    spliceEnd = Math.max(selectionEndBefore, selectionStartBefore + lengthDelta)\n  }\n\n  let mappedSpliceStart = ensureNumber(\n    mapPlainTextIndex<Extra>(value, config, spliceStart, 'START'),\n    value.length\n  )\n  let mappedSpliceEnd = ensureNumber(\n    mapPlainTextIndex<Extra>(value, config, spliceEnd, 'END'),\n    value.length\n  )\n\n  const controlSpliceStart = mapPlainTextIndex<Extra>(value, config, spliceStart, 'NULL')\n  const controlSpliceEnd = mapPlainTextIndex<Extra>(value, config, spliceEnd, 'NULL')\n  const willRemoveMention = controlSpliceStart === null || controlSpliceEnd === null\n\n  let newValue = spliceString(value, mappedSpliceStart, mappedSpliceEnd, insert)\n\n  if (!willRemoveMention) {\n    // test for auto-completion changes\n    let controlPlainTextValue = getPlainText<Extra>(newValue, config)\n    if (controlPlainTextValue !== plainTextValue) {\n      // some auto-correction is going on\n\n      // find start of diff\n      spliceStart = 0\n      while (plainTextValue[spliceStart] === controlPlainTextValue[spliceStart]) {\n        spliceStart++\n      }\n\n      // extract auto-corrected insertion\n      insert = plainTextValue.slice(spliceStart, selectionEndAfter)\n\n      // find index of the unchanged remainder\n      spliceEnd = oldPlainTextValue.lastIndexOf(\n        plainTextValue.slice(Math.max(0, selectionEndAfter))\n      )\n\n      // re-map the corrected indices\n      mappedSpliceStart = ensureNumber(\n        mapPlainTextIndex<Extra>(value, config, spliceStart, 'START'),\n        value.length\n      )\n      mappedSpliceEnd = ensureNumber(\n        mapPlainTextIndex<Extra>(value, config, spliceEnd, 'END'),\n        value.length\n      )\n      newValue = spliceString(value, mappedSpliceStart, mappedSpliceEnd, insert)\n      // eslint-disable-next-line sonarjs/no-dead-store\n      controlPlainTextValue = getPlainText<Extra>(newValue, config)\n      // After we perform the second splice, we want to make sure the “control” plain text we’re comparing against is actually in sync with the\n      // new markup. Even though we don’t currently use controlPlainTextValue again in this function, recomputing it right after the rewrite\n      // documents that the mismatch has been resolved and gives us an up-to-date value if we ever extend the logic (for example, adding a\n      // follow-up check or loop).\n    }\n  }\n\n  return newValue\n}\n\nexport default applyChangeToValue\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n// eslint-disable-next-line code-complete/enforce-meaningful-names\nexport default function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(...inputs))\n}\n","import type { SuggestionsMap } from '../types'\n\nconst countSuggestions = <Extra extends Record<string, unknown> = Record<string, unknown>>(\n  suggestions: SuggestionsMap<Extra>\n): number => Object.values(suggestions).reduce((acc, { results }) => acc + results.length, 0)\n\nexport default countSuggestions\n","import type { MentionChildConfig } from '../types'\nimport iterateMentionsMarkup from './iterateMentionsMarkup'\n\n// For a given indexInPlainText that lies inside a mention,\n// returns the index of the first char of the mention in the plain text.\n// If indexInPlainText does not lie inside a mention, returns undefined.\nconst findStartOfMentionInPlainText = <\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n>(\n  value: string,\n  config: ReadonlyArray<MentionChildConfig<Extra>>,\n  indexInPlainText: number\n): number | undefined => {\n  let result = indexInPlainText\n  let foundMention = false\n\n  const markupIteratee = (\n    _markup: string,\n    _index: number,\n    mentionPlainTextIndex: number,\n    _id: string,\n    display: string\n  ): void => {\n    if (\n      mentionPlainTextIndex <= indexInPlainText &&\n      mentionPlainTextIndex + display.length > indexInPlainText\n    ) {\n      result = mentionPlainTextIndex\n      foundMention = true\n    }\n  }\n\n  iterateMentionsMarkup(value, config, markupIteratee)\n\n  if (foundMention) {\n    return result\n  }\n\n  return undefined\n}\n\nexport default findStartOfMentionInPlainText\n","/* eslint-disable code-complete/enforce-meaningful-names */\nimport { Children } from 'react'\nimport type { ReactNode } from 'react'\nimport type { QueryInfo, SuggestionDataItem, SuggestionsMap } from '../types'\n\nexport interface FlattenedSuggestion<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> {\n  result: SuggestionDataItem<Extra>\n  queryInfo: QueryInfo\n}\n\n// eslint-disable-next-line code-complete/low-function-cohesion\nconst flattenSuggestions = <Extra extends Record<string, unknown> = Record<string, unknown>>(\n  children: ReactNode,\n  suggestions: SuggestionsMap<Extra> | undefined\n): FlattenedSuggestion<Extra>[] => {\n  const suggestionsMap = suggestions ?? {}\n  const flattened: FlattenedSuggestion<Extra>[] = []\n  const handledIndices = new Set<number>()\n\n  const childNodes = Children.toArray(children)\n\n  for (const [childIndex] of childNodes.entries()) {\n    const entry = suggestionsMap[childIndex]\n    if (!entry) {\n      continue\n    }\n\n    handledIndices.add(childIndex)\n    const { results, queryInfo } = entry\n    for (const result of results) {\n      flattened.push({ result, queryInfo })\n    }\n  }\n\n  const remainingIndices = Object.keys(suggestionsMap)\n    .map((key) => Number.parseInt(key, 10))\n    .filter((index) => !Number.isNaN(index) && !handledIndices.has(index))\n    .toSorted((a, b) => a - b)\n\n  for (const index of remainingIndices) {\n    const entry = suggestionsMap[index]\n    if (!entry) {\n      continue\n    }\n\n    const { results, queryInfo } = entry\n    for (const result of results) {\n      flattened.push({ result, queryInfo })\n    }\n  }\n\n  return flattened\n}\n\nexport default flattenSuggestions\n","import type { MentionChildConfig, MentionOccurrence } from '../types'\nimport iterateMentionsMarkup from './iterateMentionsMarkup'\n\nconst getMentions = <Extra extends Record<string, unknown> = Record<string, unknown>>(\n  value: string,\n  config: ReadonlyArray<MentionChildConfig<Extra>>\n): MentionOccurrence<Extra>[] => {\n  const mentions: MentionOccurrence<Extra>[] = []\n  iterateMentionsMarkup(value, config, (_match, index, plainTextIndex, id, display, childIndex) => {\n    mentions.push({\n      id,\n      display,\n      childIndex,\n      index,\n      plainTextIndex,\n    })\n  })\n  return mentions\n}\n\nexport default getMentions\n","import type { MentionChildConfig } from '../types'\nimport getMentions from './getMentions'\n\nconst getEndOfLastMention = <Extra extends Record<string, unknown> = Record<string, unknown>>(\n  value: string,\n  config: ReadonlyArray<MentionChildConfig<Extra>>\n): number => {\n  const mentions = getMentions<Extra>(value, config)\n  const lastMention = mentions.at(-1)\n  return lastMention ? lastMention.plainTextIndex + lastMention.display.length : 0\n}\n\nexport default getEndOfLastMention\n","import type { MentionChildConfig, MentionOccurrence } from '../types'\nimport iterateMentionsMarkup from './iterateMentionsMarkup'\n\nconst getMentionsAndPlainText = <Extra extends Record<string, unknown> = Record<string, unknown>>(\n  value: string,\n  config: ReadonlyArray<MentionChildConfig<Extra>>\n): { mentions: MentionOccurrence<Extra>[]; plainText: string; idValue: string } => {\n  const mentions: MentionOccurrence<Extra>[] = []\n  let plainText = ''\n  let idValue = ''\n\n  iterateMentionsMarkup(\n    value,\n    config,\n    (_match, index, plainTextIndex, id, display, childIndex, _lastMentionEndIndex) => {\n      mentions.push({\n        id,\n        display,\n        childIndex,\n        index,\n        plainTextIndex,\n      })\n      plainText += display\n      idValue += id\n    },\n    (text) => {\n      plainText += text\n      idValue += text\n    }\n  )\n\n  return { mentions, plainText, idValue }\n}\n\nexport default getMentionsAndPlainText\n","// eslint-disable-next-line code-complete/low-function-cohesion, code-complete/enforce-meaningful-names\nconst stripWithMap = (s: string) => {\n  let out = ''\n  const map: number[] = []\n  // Iterate by code point to preserve surrogate pairs\n  for (let i = 0; i < s.length; ) {\n    const codePoint = s.codePointAt(i)\n    if (codePoint === undefined) {\n      i++\n      continue\n    }\n    const char = String.fromCodePoint(codePoint)\n    // NFD: base + combining marks (if any)\n    const normalized = char.normalize('NFD')\n    // Remove combining marks\n    const base = normalized.replaceAll(/\\p{M}/gu, '')\n\n    // Track the starting position in `out` before adding `base`\n    const outStartPos = out.length\n    out += base\n\n    // For each UTF-16 code unit added to `out`, map it back to position i\n    // This ensures map[k] corresponds to indexOf results which operate on UTF-16 code units\n    // Without this, surrogate pairs (emojis) would cause off-by-one mapping errors\n    for (let j = outStartPos; j < out.length; j++) {\n      map.push(i)\n    }\n\n    i += char.length\n  }\n  return { text: out, map }\n}\n\nconst getSubstringIndex = (\n  haystack: string,\n  needle: string,\n  ignoreAccents?: boolean,\n  caseInsensitive?: boolean\n): number => {\n  if (ignoreAccents !== true) {\n    if (caseInsensitive === false) {\n      return haystack.indexOf(needle)\n    }\n    return haystack.toLowerCase().indexOf(needle.toLowerCase())\n  }\n\n  // eslint-disable-next-line code-complete/enforce-meaningful-names\n  const prep = (s: string) => {\n    const { text, map } = stripWithMap(s)\n    const transformedText = caseInsensitive === false ? text : text.toLowerCase()\n    return { text: transformedText, map }\n  }\n\n  const { text: H, map } = prep(haystack)\n  const { text: N } = prep(needle)\n\n  const k = H.indexOf(N)\n  return k === -1 ? -1 : map[k]\n}\n\nexport default getSubstringIndex\n","const getSuggestionHtmlId = (prefix: string, id: string | number): string => `${prefix}-${id}`\n\nexport default getSuggestionHtmlId\n","const isNumber = (val: unknown): val is number => typeof val === 'number'\n\nexport default isNumber\n","const omit = <T extends Record<string, unknown>, K extends PropertyKey>(\n  obj: T,\n  ...rest: Array<K | ReadonlyArray<K>>\n): Partial<T> => {\n  const keysToOmit = new Set(rest.flat() as PropertyKey[])\n  return Object.keys(obj).reduce<Partial<T>>((acc, key) => {\n    if (Object.hasOwn(obj, key) && !keysToOmit.has(key) && obj[key as keyof T] !== undefined) {\n      acc[key as keyof T] = obj[key as keyof T]\n    }\n    return acc\n  }, {})\n}\n\nexport default omit\n","import type { MentionComponentProps } from './types'\n\nconst DEFAULT_MARKUP = '@[__display__](__id__)'\n\nexport const DEFAULT_MENTION_PROPS = {\n  trigger: '@',\n  markup: DEFAULT_MARKUP,\n  onAdd: undefined,\n  onRemove: () => undefined,\n  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n  displayTransform: (id: string | number, display?: string | null) => display || String(id),\n  renderSuggestion: null,\n  isLoading: false,\n  appendSpaceOnAdd: false,\n} satisfies Partial<MentionComponentProps<any>> & {\n  onRemove: NonNullable<MentionComponentProps<any>['onRemove']>\n  displayTransform: NonNullable<MentionComponentProps<any>['displayTransform']>\n  renderSuggestion: MentionComponentProps<any>['renderSuggestion']\n  isLoading: boolean\n  appendSpaceOnAdd: boolean\n}\n","export default {\n  id: '__id__',\n  display: '__display__',\n}\n","import PLACEHOLDERS from './placeholders'\n\ntype PlaceholderName = 'id' | 'display'\n\n// eslint-disable-next-line code-complete/low-function-cohesion\nconst findPositionOfCapturingGroup = (markup: string, parameterName: PlaceholderName): number => {\n  // find positions of placeholders in the markup\n  let indexDisplay: number | null = markup.indexOf(PLACEHOLDERS.display)\n  let indexId: number | null = markup.indexOf(PLACEHOLDERS.id)\n\n  // set indices to null if not found\n  if (indexDisplay < 0) {\n    indexDisplay = null\n  }\n  if (indexId < 0) {\n    indexId = null\n  }\n\n  // markup must contain one of the mandatory placeholders\n  if (indexDisplay === null && indexId === null) {\n    throw new Error(\n      `The markup '${markup}' does not contain either of the placeholders '__id__' or '__display__'`\n    )\n  }\n\n  if (indexDisplay !== null && indexId !== null) {\n    // both placeholders are used, return 0 or 1 depending on the position of the requested parameter\n    return (parameterName === 'id' && indexId <= indexDisplay) ||\n      (parameterName === 'display' && indexDisplay <= indexId)\n      ? 0\n      : 1\n  }\n\n  // just one placeholder is being used, we'll use the captured string for both parameters\n  return 0\n}\n\nexport default findPositionOfCapturingGroup\n","import PLACEHOLDERS from './placeholders'\n\nconst makeMentionsMarkup = (markup: string, id: string | number, display: string): string => {\n  return markup.replace(PLACEHOLDERS.id, String(id)).replace(PLACEHOLDERS.display, display)\n}\n\nexport default makeMentionsMarkup\n","// escape RegExp special characters https://stackoverflow.com/a/9310752/5142490\n// eslint-disable-next-line code-complete/enforce-meaningful-names\nconst escapeRegex = (str: string): string => str.replaceAll(/[\\s#$()*+,.?[\\\\\\]^{|}-]/g, '\\\\$&')\n\nexport default escapeRegex\n","import escapeRegex from './escapeRegex'\nimport PLACEHOLDERS from './placeholders'\n\nconst markupToRegex = (markup: string): RegExp => {\n  const escapedMarkup = escapeRegex(markup)\n\n  const charAfterDisplay =\n    markup[markup.indexOf(PLACEHOLDERS.display) + PLACEHOLDERS.display.length]\n\n  const charAfterId = markup[markup.indexOf(PLACEHOLDERS.id) + PLACEHOLDERS.id.length]\n\n  return new RegExp(\n    escapedMarkup\n      .replace(PLACEHOLDERS.display, `([^${escapeRegex(charAfterDisplay || '')}]+?)`)\n      .replace(PLACEHOLDERS.id, `([^${escapeRegex(charAfterId || '')}]+?)`)\n  )\n}\n\nexport default markupToRegex\n","import type { MentionSerializer, MentionSerializerMatch } from '../types'\nimport findPositionOfCapturingGroup from '../utils/findPositionOfCapturingGroup'\nimport makeMentionsMarkup from '../utils/makeMentionsMarkup'\nimport markupToRegex from '../utils/markupToRegex'\nimport PLACEHOLDERS from '../utils/placeholders'\n\nconst createMarkupSerializer = (markup: string): MentionSerializer => {\n  const baseRegex = markupToRegex(markup)\n  const hasDisplayPlaceholder = markup.includes(PLACEHOLDERS.display)\n  const idGroupIndex = 1 + findPositionOfCapturingGroup(markup, 'id')\n  const displayGroupIndex = hasDisplayPlaceholder\n    ? 1 + findPositionOfCapturingGroup(markup, 'display')\n    : null\n\n  const insert: MentionSerializer['insert'] = ({ id, display }) => {\n    return makeMentionsMarkup(markup, id, display)\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  const findAll: MentionSerializer['findAll'] = (value) => {\n    const globalRegex = new RegExp(baseRegex.source, 'g')\n    const matches: MentionSerializerMatch[] = []\n    let match: RegExpExecArray | null\n\n    while ((match = globalRegex.exec(value)) !== null) {\n      const matchedMarkup = match[0]\n      const idMatch = match[idGroupIndex]\n\n      if (typeof idMatch !== 'string') {\n        continue\n      }\n\n      const displayMatch =\n        displayGroupIndex === null ? null : (match[displayGroupIndex] as string | undefined | null)\n\n      matches.push({\n        markup: matchedMarkup,\n        index: match.index,\n        id: idMatch,\n        display: displayMatch ?? null,\n      })\n    }\n\n    return matches\n  }\n\n  return {\n    id: markup,\n    insert,\n    findAll,\n  }\n}\n\nexport default createMarkupSerializer\n","import type React from 'react'\nimport type {\n  ChangeEvent,\n  KeyboardEvent,\n  MouseEvent,\n  ReactElement,\n  ReactNode,\n  RefObject,\n  FocusEvent as ReactFocusEvent,\n  SyntheticEvent,\n} from 'react'\n\nexport type MentionTrigger = string | RegExp\nexport type MentionIdentifier = string | number\n\nexport interface MentionSerializerMatch {\n  markup: string\n  index: number\n  id: string\n  display?: string | null\n}\n\nexport interface MentionSerializer {\n  id: string\n  insert: (input: { id: MentionIdentifier; display: string }) => string\n  findAll: (value: string) => MentionSerializerMatch[]\n}\n\nexport type MentionDataItem<Extra extends Record<string, unknown> = Record<string, unknown>> = {\n  id: MentionIdentifier\n  display?: string\n  highlights?: { start: number; end: number }[]\n} & Omit<Extra, 'id' | 'display' | 'highlights'>\n\nexport type SuggestionDataItem<Extra extends Record<string, unknown> = Record<string, unknown>> =\n  MentionDataItem<Extra>\n\ntype MaybePromise<T> = T | Promise<T>\n\nexport type DataSource<Extra extends Record<string, unknown> = Record<string, unknown>> =\n  | ReadonlyArray<MentionDataItem<Extra>>\n  | ((query: string) => MaybePromise<ReadonlyArray<MentionDataItem<Extra>>>)\n\nexport function isDataSource<Extra extends Record<string, unknown> = Record<string, unknown>>(\n  value: unknown\n): value is DataSource<Extra> {\n  return (\n    typeof value === 'function' ||\n    (Array.isArray(value) &&\n      value.every((item) => typeof item === 'object' && item !== null && 'id' in item))\n  )\n}\n\nexport interface QueryInfo {\n  childIndex: number\n  query: string\n  querySequenceStart: number\n  querySequenceEnd: number\n}\n\nexport type SuggestionsMap<Extra extends Record<string, unknown> = Record<string, unknown>> =\n  Record<\n    number,\n    {\n      queryInfo: QueryInfo\n      results: SuggestionDataItem<Extra>[]\n    }\n  >\n\nexport type MentionRenderSuggestion<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> = (\n  suggestion: SuggestionDataItem<Extra>,\n  query: string,\n  highlightedDisplay: ReactNode,\n  index: number,\n  focused: boolean\n) => ReactNode\n\nexport type DisplayTransform = (id: MentionIdentifier, display?: string | null) => string\n\nexport type MentionSelectionState = 'inside' | 'boundary' | 'partial' | 'full'\n\nexport interface MentionComponentProps<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> {\n  trigger?: MentionTrigger\n  markup?: string | MentionSerializer\n  displayTransform?: DisplayTransform\n  renderSuggestion?: MentionRenderSuggestion<Extra> | null\n  data: DataSource<Extra>\n  onAdd?: (params: {\n    id: MentionIdentifier\n    display: string\n    startPos: number\n    endPos: number\n    serializerId: string\n  }) => void\n  onRemove?: (id: MentionIdentifier) => void\n  isLoading?: boolean\n  appendSpaceOnAdd?: boolean\n  selectionState?: MentionSelectionState\n}\n\nexport type MentionsInputChangeTriggerType =\n  | 'input'\n  | 'paste'\n  | 'cut'\n  | 'mention-add'\n  | 'mention-remove'\n\nexport interface MentionsInputChangeTrigger {\n  type: MentionsInputChangeTriggerType\n  nativeEvent?: Event\n}\n\nexport interface MentionOccurrence<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> {\n  id: MentionIdentifier\n  display: string\n  childIndex: number\n  index: number\n  plainTextIndex: number\n  data?: MentionDataItem<Extra>\n}\n\nexport interface MentionSelection<Extra extends Record<string, unknown> = Record<string, unknown>>\n  extends MentionOccurrence<Extra> {\n  selection: MentionSelectionState\n  plainTextStart: number\n  plainTextEnd: number\n  serializerId: string\n}\n\nexport interface MentionSelectionChangeEvent<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> {\n  value: string\n  plainTextValue: string\n  idValue: string\n  mentions: MentionOccurrence<Extra>[]\n  mentionIds: MentionIdentifier[]\n  mentionId?: MentionIdentifier\n}\n\nexport interface MentionsInputChangeEvent<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> {\n  trigger: MentionsInputChangeTrigger\n  value: string\n  plainTextValue: string\n  idValue: string\n  mentionId?: MentionIdentifier\n  mentions: MentionOccurrence<Extra>[]\n  previousValue: string\n}\n\nexport type MentionsInputEventData<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> = MentionsInputChangeEvent<Extra>\n\nexport type MentionsInputChangeHandler<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> = (change: MentionsInputChangeEvent<Extra>) => void\n\nexport type MentionSelectionChangeHandler<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> = (selection: MentionSelection<Extra>[], context?: MentionSelectionChangeEvent<Extra>) => void\n\nexport type MentionsInputKeyDownHandler = (\n  event: KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>\n) => void\n\nexport type MentionsInputSelectHandler = (\n  event: MouseEvent<HTMLInputElement | HTMLTextAreaElement>\n) => void\n\nexport interface CaretCoordinates {\n  top: number\n  left: number\n}\n\nexport type MentionsInputAnchorMode = 'caret' | 'left'\n\nexport interface SuggestionsPosition {\n  position?: 'absolute' | 'fixed'\n  left?: number\n  right?: number\n  top?: number\n  width?: number\n}\n\nexport type InputComponentProps = React.ComponentPropsWithoutRef<'input'> &\n  React.ComponentPropsWithoutRef<'textarea'>\n\nexport type InputComponent =\n  | React.ComponentType<InputComponentProps>\n  | React.ForwardRefExoticComponent<\n      InputComponentProps & React.RefAttributes<HTMLInputElement | HTMLTextAreaElement>\n    >\n\nexport interface MentionsInputProps<Extra extends Record<string, unknown> = Record<string, unknown>>\n  extends Omit<\n    React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n    'children' | 'onChange' | 'value' | 'defaultValue' | 'style' | 'onBlur'\n  > {\n  a11ySuggestionsListLabel?: string\n  anchorMode?: MentionsInputAnchorMode\n  suggestionsPlacement?: 'auto' | 'above' | 'below'\n  customSuggestionsContainer?: (children: ReactElement) => ReactElement\n  disabled?: boolean\n  inputComponent?: InputComponent\n  inputRef?:\n    | RefObject<HTMLInputElement | HTMLTextAreaElement>\n    | ((el: HTMLInputElement | HTMLTextAreaElement | null) => void)\n  spellCheck?: boolean\n  onBlur?: (event: ReactFocusEvent<InputElement>) => void\n  onMentionBlur?: (event: ReactFocusEvent<InputElement>, clickedSuggestion: boolean) => void\n  onChange?: (event: ChangeEvent<InputElement>) => void\n  onMentionsChange?: MentionsInputChangeHandler<Extra>\n  onMentionSelectionChange?: MentionSelectionChangeHandler<Extra>\n  onKeyDown?: MentionsInputKeyDownHandler\n  onSelect?: (event: SyntheticEvent<InputElement>) => void\n  readOnly?: boolean\n  singleLine?: boolean\n  autoResize?: boolean\n  style?: React.CSSProperties\n  className?: string\n  classNames?: MentionsInputClassNames\n  suggestionsPortalHost?: Element | Document | null\n  suggestionsDisplay?: 'overlay' | 'inline'\n  value?: string\n  children:\n    | ReactElement<MentionComponentProps<Extra>>\n    | Array<ReactElement<MentionComponentProps<Extra>>>\n}\n\nexport interface MentionsInputState<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> {\n  focusIndex: number\n  selectionStart: number | null\n  selectionEnd: number | null\n  cachedMentions: MentionOccurrence<Extra>[]\n  cachedPlainText: string\n  cachedIdValue: string\n  suggestions: SuggestionsMap<Extra>\n  caretPosition: CaretCoordinates | null\n  suggestionsPosition: SuggestionsPosition\n  scrollFocusedIntoView?: boolean\n  pendingSelectionUpdate: boolean\n  highlighterRecomputeVersion: number\n  config: MentionChildConfig<Extra>[]\n}\n\nexport type MentionsInputClassNames = Partial<{\n  control: string\n  highlighter: string\n  highlighterSubstring: string\n  highlighterCaret: string\n  input: string\n  inlineSuggestion: string\n  inlineSuggestionText: string\n  inlineSuggestionPrefix: string\n  inlineSuggestionSuffix: string\n  suggestions: string\n  suggestionsList: string\n  suggestionItem: string\n  suggestionItemFocused: string\n  suggestionDisplay: string\n  suggestionHighlight: string\n  loadingIndicator: string\n  loadingSpinner: string\n  loadingSpinnerElement: string\n}>\n\nexport type MentionChildConfig<Extra extends Record<string, unknown> = Record<string, unknown>> =\n  MentionComponentProps<Extra> & {\n    displayTransform: DisplayTransform\n    serializer: MentionSerializer\n  }\n\nexport type InputElement = HTMLInputElement | HTMLTextAreaElement\n","import { isValidElement, type ReactElement } from 'react'\nimport { isDataSource, type MentionComponentProps } from '../types'\n\nexport const isMentionElement = <Extra extends Record<string, unknown>>(\n  child: unknown\n): child is ReactElement<MentionComponentProps<Extra>> =>\n  isValidElement(child) &&\n  typeof child.props === 'object' &&\n  child.props !== null &&\n  'data' in child.props &&\n  isDataSource(child.props.data)\n","import React, { Children } from 'react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { MentionChildConfig, MentionComponentProps, MentionSerializer } from '../types'\nimport { DEFAULT_MENTION_PROPS } from '../MentionDefaultProps'\nimport createMarkupSerializer from './createMarkupSerializer'\nimport { isMentionElement } from './isMentionElement'\nimport PLACEHOLDERS from './placeholders'\n\n/**\n * Generates a markup template based on the trigger character.\n * This ensures each trigger has a unique markup pattern to avoid collisions\n * when multiple Mentions use different triggers.\n */\nconst generateMarkupForTrigger = (trigger: string | RegExp | undefined): string => {\n  // For RegExp triggers or undefined, fall back to the default markup\n  if (!trigger || trigger instanceof RegExp) {\n    return DEFAULT_MENTION_PROPS.markup\n  }\n\n  // If the trigger string contains placeholder patterns, it's likely being misused\n  // as a markup template (legacy incorrect usage). Fall back to default markup.\n  if (trigger.includes(PLACEHOLDERS.id) || trigger.includes(PLACEHOLDERS.display)) {\n    return DEFAULT_MENTION_PROPS.markup\n  }\n\n  // Generate trigger-specific markup by using the trigger as a prefix\n  return `${trigger}[${PLACEHOLDERS.display}](${PLACEHOLDERS.id})`\n}\n\nconst isReactFragment = (child: unknown): child is ReactElement<{ children?: ReactNode }> =>\n  React.isValidElement(child) && child.type === React.Fragment\n\nconst collectMentionElements = <Extra extends Record<string, unknown>>(\n  children: ReactNode\n): ReactElement<MentionComponentProps<Extra>>[] =>\n  Children.toArray(children).flatMap((child) => {\n    if (isReactFragment(child)) {\n      return collectMentionElements<Extra>(child.props.children)\n    }\n\n    if (isMentionElement<Extra>(child)) {\n      return [child]\n    }\n\n    return []\n  })\n\nconst readConfigFromChildren = <Extra extends Record<string, unknown> = Record<string, unknown>>(\n  children: ReactNode\n): MentionChildConfig<Extra>[] =>\n  collectMentionElements<Extra>(children).map((child) => {\n    const props = child.props\n    const trigger = props.trigger ?? DEFAULT_MENTION_PROPS.trigger\n    const displayTransform = props.displayTransform ?? DEFAULT_MENTION_PROPS.displayTransform\n    const serializer: MentionSerializer =\n      props.markup !== undefined && typeof props.markup !== 'string'\n        ? props.markup\n        : createMarkupSerializer(props.markup ?? generateMarkupForTrigger(trigger))\n\n    return {\n      ...DEFAULT_MENTION_PROPS,\n      ...props,\n      displayTransform,\n      serializer,\n    } satisfies MentionChildConfig<Extra>\n  })\n\nexport default readConfigFromChildren\n","import { useCallback, useEffect, useLayoutEffect, useRef } from 'react'\n\n// eslint-disable-next-line unicorn/prefer-global-this\nconst useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect\n\n/**\n * Polyfill for the experimental React useEffectEvent hook.\n * Ensures a stable callback reference that always points to the latest handler.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useEffectEvent<T extends (...args: any[]) => any>(handler: T): T {\n  const handlerRef = useRef<T | null>(null)\n\n  useIsomorphicLayoutEffect(() => {\n    handlerRef.current = handler\n  })\n\n  return useCallback(\n    ((...args: Parameters<T>) => {\n      const current = handlerRef.current\n      if (current === null) {\n        throw new Error('useEffectEvent callback executed before the handler was assigned.')\n      }\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return current(...args)\n    }) as T,\n    []\n  )\n}\n","import React, { Children, useLayoutEffect, useMemo, useState } from 'react'\nimport type { CSSProperties } from 'react'\nimport { cva } from 'class-variance-authority'\nimport { iterateMentionsMarkup, mapPlainTextIndex, isNumber, cn } from './utils'\nimport readConfigFromChildren from './utils/readConfigFromChildren'\nimport { useEffectEvent } from './utils/useEffectEvent'\nimport type {\n  CaretCoordinates,\n  MentionChildConfig,\n  MentionComponentProps,\n  MentionSelectionState,\n} from './types'\n\nconst generateComponentKey = (usedKeys: Record<string, number>, id: string) => {\n  if (Object.hasOwn(usedKeys, id)) {\n    usedKeys[id] += 1\n  } else {\n    usedKeys[id] = 0\n  }\n  return `${id}_${usedKeys[id].toString()}`\n}\n\ninterface HighlighterProps {\n  readonly selectionStart: number | null\n  readonly selectionEnd: number | null\n  readonly value?: string\n  readonly onCaretPositionChange: (position: CaretCoordinates) => void\n  readonly containerRef?: (node: HTMLDivElement | null) => void\n  readonly children: React.ReactNode\n  readonly singleLine: boolean\n  readonly className?: string\n  readonly substringClassName?: string\n  readonly caretClassName?: string\n  readonly recomputeVersion?: number\n  readonly mentionSelectionMap?: Record<string, MentionSelectionState>\n}\n\n// Note: singleLine intentionally overrides whitespace/break behavior\nconst highlighterStyles = cva(\n  'box-border w-full overflow-hidden text-start text-transparent pointer-events-none [font-family:inherit] [font-size:inherit] [line-height:inherit]',\n  {\n    variants: {\n      singleLine: {\n        true: 'whitespace-pre break-normal',\n        false: 'whitespace-pre-wrap break-words',\n      },\n    },\n  }\n)\n\nconst substringStyles = 'text-transparent inline [white-space:inherit]'\nconst caretStyles = 'relative inline-block h-0 w-0 align-baseline'\nconst singleLineContentWrapperStyle: CSSProperties = {\n  display: 'inline-block',\n  whiteSpace: 'inherit',\n  width: 'max-content',\n  minWidth: '100%',\n}\n\n// eslint-disable-next-line code-complete/low-function-cohesion\nfunction Highlighter({\n  selectionStart,\n  selectionEnd,\n  value = '',\n  onCaretPositionChange,\n  containerRef,\n  children,\n  singleLine,\n  className,\n  substringClassName,\n  caretClassName,\n  recomputeVersion,\n  mentionSelectionMap,\n}: HighlighterProps) {\n  const [position, setPosition] = useState<CaretCoordinates | null>(null)\n  const [caretElement, setCaretElement] = useState<HTMLSpanElement | null>(null)\n\n  const updatePosition = useEffectEvent((offsetLeft: number, offsetTop: number) => {\n    if (position?.left === offsetLeft && position.top === offsetTop) {\n      return\n    }\n\n    const newPosition: CaretCoordinates = { left: offsetLeft, top: offsetTop }\n    setPosition(newPosition)\n    onCaretPositionChange(newPosition)\n  })\n\n  // Ensure caret position updates whenever content/selection affects layout.\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  useLayoutEffect(() => {\n    if (caretElement === null) {\n      return undefined\n    }\n\n    const measure = () => {\n      const offsetLeft = caretElement.offsetLeft\n      const offsetTop = caretElement.offsetTop\n\n      updatePosition(offsetLeft, offsetTop)\n    }\n\n    const rafId =\n      typeof globalThis.requestAnimationFrame === 'function'\n        ? globalThis.requestAnimationFrame(measure)\n        : undefined\n\n    if (rafId === undefined) {\n      measure()\n    }\n\n    return () => {\n      if (rafId !== undefined && typeof globalThis.cancelAnimationFrame === 'function') {\n        globalThis.cancelAnimationFrame(rafId)\n      }\n    }\n    // value/selection/singleLine impact layout/position\n  }, [caretElement, value, selectionStart, selectionEnd, singleLine, recomputeVersion])\n\n  const config: MentionChildConfig[] = useMemo(() => readConfigFromChildren(children), [children])\n  let caretPositionInMarkup: number | null | undefined\n\n  const rootClassName = cn(highlighterStyles({ singleLine }), className)\n  const substringClass = cn(substringStyles, substringClassName)\n  const caretClass = cn(caretStyles, caretClassName)\n\n  if (selectionEnd === selectionStart) {\n    caretPositionInMarkup = mapPlainTextIndex(value, config, selectionStart, 'START') as\n      | number\n      | undefined\n  }\n  const selectionMap = mentionSelectionMap ?? {}\n\n  const resultComponents: React.ReactNode[] = []\n  const componentKeys: Record<string, number> = {}\n  let components: React.ReactNode[] = resultComponents\n  let substringComponentKey = 0\n\n  const renderSubstring = (substringValue: string, key: number) => (\n    // set substring span to hidden, so that Emojis are not shown double in Mobile Safari\n    <span className={substringClass} key={key}>\n      {substringValue}\n    </span>\n  )\n\n  const getMentionComponentForMatch = (\n    id: string,\n    display: string,\n    mentionChildIndex: number,\n    key: string,\n    plainTextIndex: number\n  ) => {\n    const selectionKey = `${mentionChildIndex}:${plainTextIndex}`\n    const selectionState = selectionMap[selectionKey]\n    const props = { id, display, key, selectionState }\n    const child = Children.toArray(children)[\n      mentionChildIndex\n    ] as React.ReactElement<MentionComponentProps>\n    return React.cloneElement(child, props)\n  }\n\n  const renderCaretMarker = () => (\n    <span\n      className={caretClass}\n      data-mentions-caret\n      ref={setCaretElement}\n      key=\"caret\"\n      aria-hidden=\"true\"\n    >\n      {'\\u200B'}\n    </span>\n  )\n\n  const textIteratee = (substr: string, index: number, _substrPlainTextIndex: number) => {\n    if (\n      isNumber(caretPositionInMarkup) &&\n      caretPositionInMarkup >= index &&\n      caretPositionInMarkup <= index + substr.length\n    ) {\n      const splitIndex = caretPositionInMarkup - index\n      // Before the reassignment, components still points at resultComponents, so the push stores\n      // the substring that comes before the caret in the final output.\n      components.push(renderSubstring(substr.slice(0, splitIndex), substringComponentKey))\n      substringComponentKey += 1\n      // Reassigning component just switches the working array to a fresh list\n      // for the text after the caret; later we splice that array back in\n      //  Without the initial push, the prefix would not land in resultComponents.\n      components = [renderSubstring(substr.slice(splitIndex), substringComponentKey)]\n    } else {\n      components.push(renderSubstring(substr, substringComponentKey))\n    }\n    substringComponentKey += 1\n  }\n\n  const mentionIteratee = (\n    _markup: string,\n    _index: number,\n    plainTextIndex: number,\n    id: string,\n    display: string,\n    mentionChildIndex: number\n  ) => {\n    const key = generateComponentKey(componentKeys, id)\n    components.push(\n      getMentionComponentForMatch(id, display, mentionChildIndex, key, plainTextIndex)\n    )\n  }\n\n  iterateMentionsMarkup(value, config, mentionIteratee, textIteratee)\n\n  // append a span containing a space, to ensure the last text line has the correct height\n  components.push(' ')\n\n  if (components !== resultComponents) {\n    resultComponents.push(renderCaretMarker(), ...components)\n  }\n  const content = singleLine ? (\n    <div style={singleLineContentWrapperStyle}>{resultComponents}</div>\n  ) : (\n    resultComponents\n  )\n\n  return (\n    <div\n      className={rootClassName}\n      data-slot=\"highlighter\"\n      data-single-line={singleLine ? 'true' : undefined}\n      data-multi-line={singleLine ? undefined : 'true'}\n      style={HIGHLIGHTER_OVERLAY_STYLE}\n      ref={containerRef}\n    >\n      {content}\n    </div>\n  )\n}\n\nconst HIGHLIGHTER_OVERLAY_STYLE: CSSProperties = {\n  position: 'absolute',\n  top: 0,\n  left: 0,\n  right: 0,\n  bottom: 0,\n  pointerEvents: 'none',\n  zIndex: 0,\n}\n\nexport default Highlighter\n","import type { MouseEventHandler } from 'react'\nimport { cn } from './utils'\n\ninterface LoadingIndicatorProps {\n  readonly className?: string\n  readonly spinnerClassName?: string\n  readonly spinnerElementClassName?: string\n  readonly onMouseDown?: MouseEventHandler<HTMLDivElement>\n}\n\nconst containerStyles = 'flex justify-center py-4'\nconst spinnerStyles = 'flex items-center gap-2 text-primary'\nconst spinnerDotStyles = 'inline-block h-1.5 w-1.5 animate-bounce rounded-full bg-current'\n\nconst dotAnimationStyles = [0, 1, 2, 3, 4].map((delay) => ({\n  delay,\n  style: { animationDelay: `${String(delay * 0.1)}s` },\n}))\n\nfunction LoadingIndicator({\n  className,\n  spinnerClassName,\n  spinnerElementClassName,\n  onMouseDown,\n}: LoadingIndicatorProps) {\n  return (\n    <div\n      className={cn(containerStyles, className)}\n      data-testid=\"loading-indicator\"\n      role=\"status\"\n      aria-live=\"polite\"\n      aria-label=\"Loading suggestions\"\n      onMouseDown={onMouseDown}\n    >\n      <div className={cn(spinnerStyles, spinnerClassName)}>\n        {dotAnimationStyles.map(({ delay, style }) => (\n          <span\n            key={delay}\n            className={cn(spinnerDotStyles, spinnerElementClassName)}\n            style={style}\n          />\n        ))}\n      </div>\n    </div>\n  )\n}\n\nexport default LoadingIndicator\n","import React from 'react'\nimport { cn } from './utils'\nimport type { MentionRenderSuggestion, SuggestionDataItem } from './types'\n\ninterface SuggestionProps<Extra extends Record<string, unknown> = Record<string, unknown>> {\n  readonly id: string\n  readonly focused?: boolean\n  readonly index: number\n  readonly onClick: () => void\n  readonly onMouseEnter: () => void\n  readonly query: string\n  readonly renderSuggestion?: MentionRenderSuggestion<Extra> | null\n  readonly suggestion: SuggestionDataItem<Extra>\n  readonly className?: string\n  readonly focusedClassName?: string\n  readonly displayClassName?: string\n  readonly highlightClassName?: string\n}\n\nconst suggestionItemBase =\n  'cursor-pointer select-none text-sm text-muted-foreground transition-colors hover:bg-muted data-[focused=true]:bg-primary/10 data-[focused=true]:text-primary'\nconst suggestionDisplayStyles = 'inline-block'\nconst suggestionHighlightStyles = 'font-semibold text-primary'\n\nfunction Suggestion<Extra extends Record<string, unknown> = Record<string, unknown>>({\n  id,\n  focused,\n  index,\n  onClick,\n  onMouseEnter,\n  query,\n  renderSuggestion,\n  suggestion,\n  className,\n  focusedClassName,\n  displayClassName,\n  highlightClassName,\n}: SuggestionProps<Extra>) {\n  const rest = { onClick, onMouseEnter }\n  const itemClassName = cn(suggestionItemBase, className, focused ? focusedClassName : undefined)\n  const displayClassNameResolved = cn(suggestionDisplayStyles, displayClassName)\n  const highlightClassNameResolved = cn(suggestionHighlightStyles, highlightClassName)\n\n  const getDisplay = (): string => {\n    const { id: suggestionId, display } = suggestion\n\n    if (typeof display === 'string' && display.length > 0) {\n      return display\n    }\n\n    return String(suggestionId)\n  }\n\n  const renderHighlightedDisplay = (display: string) => {\n    return suggestion.highlights === undefined || suggestion.highlights.length === 0 ? (\n      <span className={displayClassNameResolved}>{display}</span>\n    ) : (\n      <span className={displayClassNameResolved} key={`highlighted-display-${id}`}>\n        {suggestion.highlights.map((highlight, index) => (\n          <React.Fragment key={`highlight-${highlight.start}-${highlight.end}`}>\n            {\n              // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n              display.slice(index > 0 ? suggestion.highlights![index - 1].end : 0, highlight.start)\n            }\n            <b className={highlightClassNameResolved}>\n              {display.slice(highlight.start, highlight.end)}\n            </b>\n          </React.Fragment>\n        ))}\n        {\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          display.slice(suggestion.highlights.at(-1)!.end)\n        }\n      </span>\n    )\n  }\n\n  const renderContent = () => {\n    const display = getDisplay()\n    const highlightedDisplay = renderHighlightedDisplay(display)\n\n    return renderSuggestion\n      ? renderSuggestion(suggestion, query, highlightedDisplay, index, Boolean(focused))\n      : highlightedDisplay\n  }\n\n  return (\n    <li\n      id={id}\n      role=\"option\"\n      aria-selected={focused}\n      className={itemClassName}\n      data-slot=\"suggestion-item\"\n      data-focused={focused ? 'true' : undefined}\n      {...rest}\n    >\n      {renderContent()}\n    </li>\n  )\n}\n\nexport default Suggestion\n","import React, { Children, useCallback, useLayoutEffect, useMemo, useState } from 'react'\nimport type { CSSProperties } from 'react'\nimport { cva } from 'class-variance-authority'\nimport LoadingIndicator from './LoadingIndicator'\nimport { DEFAULT_MENTION_PROPS } from './MentionDefaultProps'\nimport Suggestion from './Suggestion'\nimport { cn, flattenSuggestions, getSuggestionHtmlId } from './utils'\nimport type {\n  MentionComponentProps,\n  MentionRenderSuggestion,\n  QueryInfo,\n  SuggestionDataItem,\n  SuggestionsMap,\n} from './types'\nimport type { FlattenedSuggestion } from './utils/flattenSuggestions'\n\ninterface SuggestionsOverlayProps<Extra extends Record<string, unknown> = Record<string, unknown>> {\n  readonly id: string\n  readonly suggestions?: SuggestionsMap<Extra>\n  readonly a11ySuggestionsListLabel?: string\n  readonly focusIndex: number\n  readonly position?: 'absolute' | 'fixed'\n  readonly left?: number\n  readonly right?: number\n  readonly top?: number\n  readonly width?: number\n  readonly scrollFocusedIntoView?: boolean\n  readonly isLoading?: boolean\n  readonly isOpened: boolean\n  readonly onSelect?: (suggestion: SuggestionDataItem<Extra>, queryInfo: QueryInfo) => void\n  readonly containerRef?: (node: HTMLDivElement | null) => void\n  readonly children: React.ReactNode\n  readonly className?: string\n  readonly listClassName?: string\n  readonly itemClassName?: string\n  readonly focusedItemClassName?: string\n  readonly displayClassName?: string\n  readonly highlightClassName?: string\n  readonly loadingClassName?: string\n  readonly spinnerClassName?: string\n  readonly spinnerElementClassName?: string\n  readonly style?: CSSProperties\n  readonly customSuggestionsContainer?: (node: React.ReactElement) => React.ReactElement\n  readonly onMouseDown?: React.MouseEventHandler\n  readonly onMouseEnter?: (index: number) => void\n}\n\nconst overlayStyles = cva(\n  'z-[100] mt-3 w-full min-w-[16rem] border border-border bg-popover backdrop-blur supports-[backdrop-filter]:bg-popover/95'\n)\nconst listStyles =\n  'm-0 max-h-64 list-none divide-y divide-border overflow-y-auto scroll-py-1 p-0 focus:outline-none'\n\nfunction SuggestionsOverlay<Extra extends Record<string, unknown> = Record<string, unknown>>({\n  id,\n  suggestions = {},\n  a11ySuggestionsListLabel,\n  focusIndex,\n  position,\n  left,\n  right,\n  top,\n  width,\n  scrollFocusedIntoView = true,\n  isLoading,\n  isOpened,\n  onSelect,\n  containerRef,\n  children,\n  className,\n  listClassName,\n  itemClassName,\n  focusedItemClassName,\n  displayClassName,\n  highlightClassName,\n  loadingClassName,\n  spinnerClassName,\n  spinnerElementClassName,\n  style: styleProp,\n  customSuggestionsContainer,\n  onMouseDown,\n  onMouseEnter,\n}: SuggestionsOverlayProps<Extra>) {\n  const [ulElement, setUlElement] = useState<HTMLUListElement | null>(null)\n  const childRenderSuggestions: (MentionRenderSuggestion<Extra> | null)[] = useMemo(\n    () =>\n      Children.toArray(children).map((child) =>\n        React.isValidElement<MentionComponentProps<Extra>>(child) &&\n        typeof child.props.renderSuggestion === 'function'\n          ? child.props.renderSuggestion\n          : null\n      ),\n    [children]\n  )\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  useLayoutEffect(() => {\n    if (!ulElement || ulElement.offsetHeight >= ulElement.scrollHeight || !scrollFocusedIntoView) {\n      return\n    }\n\n    const focusedChild = ulElement.children.item(focusIndex)\n    if (!focusedChild) {\n      return\n    }\n\n    const { top: topContainer } = ulElement.getBoundingClientRect()\n    const childRect = focusedChild.getBoundingClientRect()\n    const scrollTop = ulElement.scrollTop\n    const childTop = childRect.top - topContainer + scrollTop\n    const childBottom = childRect.bottom - topContainer + scrollTop\n\n    if (childTop < scrollTop) {\n      ulElement.scrollTop = childTop\n    } else if (childBottom > scrollTop + ulElement.offsetHeight) {\n      ulElement.scrollTop = childBottom - ulElement.offsetHeight\n    }\n  }, [focusIndex, scrollFocusedIntoView, ulElement])\n\n  const overlayClassName = cn(overlayStyles(), className)\n  const listClassNameResolved = cn(listStyles, listClassName)\n\n  const selectSuggestion = useCallback(\n    (suggestionItem: SuggestionDataItem<Extra>, queryInfo: QueryInfo) => {\n      onSelect?.(suggestionItem, queryInfo)\n    },\n    [onSelect]\n  )\n\n  const handleMouseEnter = useCallback(\n    (index: number) => {\n      onMouseEnter?.(index)\n    },\n    [onMouseEnter]\n  )\n\n  const flattenedSuggestions = useMemo<FlattenedSuggestion<Extra>[]>(() => {\n    return flattenSuggestions(children, suggestions)\n  }, [children, suggestions])\n\n  const suggestionEntries = useMemo(() => {\n    return flattenedSuggestions.map(({ result: suggestionItem, queryInfo }, index) => {\n      const isFocused = index === focusIndex\n      const { childIndex, query } = queryInfo\n      const renderSuggestionFromChild =\n        childRenderSuggestions[childIndex] ?? DEFAULT_MENTION_PROPS.renderSuggestion\n\n      return {\n        key: `${childIndex.toString()}-${suggestionItem.id}`,\n        suggestionItem,\n        isFocused,\n        renderSuggestionFromChild,\n        onClick: () => selectSuggestion(suggestionItem, queryInfo),\n        onMouseEnterHandler: () => handleMouseEnter(index),\n        query,\n        index,\n      }\n    })\n  }, [childRenderSuggestions, focusIndex, flattenedSuggestions, handleMouseEnter, selectSuggestion])\n\n  const handleListMouseDown: React.MouseEventHandler<HTMLUListElement> = useCallback(\n    (event) => {\n      onMouseDown?.(event)\n    },\n    [onMouseDown]\n  )\n\n  const renderSuggestions = (): React.ReactElement => {\n    const suggestionsToRender = (\n      <ul\n        ref={setUlElement}\n        id={id}\n        role=\"listbox\"\n        aria-label={a11ySuggestionsListLabel}\n        className={listClassNameResolved}\n        data-slot=\"suggestions-list\"\n        onMouseDown={handleListMouseDown}\n      >\n        {suggestionEntries.map(\n          ({\n            key,\n            suggestionItem,\n            query,\n            index,\n            isFocused,\n            renderSuggestionFromChild,\n            onClick,\n            onMouseEnterHandler,\n          }) => (\n            <Suggestion<Extra>\n              className={itemClassName}\n              focusedClassName={focusedItemClassName}\n              displayClassName={displayClassName}\n              highlightClassName={highlightClassName}\n              key={key}\n              id={getSuggestionHtmlId(id, index)}\n              query={query}\n              index={index}\n              renderSuggestion={renderSuggestionFromChild}\n              suggestion={suggestionItem}\n              focused={isFocused}\n              onClick={onClick}\n              onMouseEnter={onMouseEnterHandler}\n            />\n          )\n        )}\n      </ul>\n    )\n\n    if (customSuggestionsContainer) {\n      return customSuggestionsContainer(suggestionsToRender)\n    }\n\n    return suggestionsToRender\n  }\n\n  const renderLoadingIndicator = () => {\n    if (isLoading !== true) {\n      return null\n    }\n\n    return (\n      <LoadingIndicator\n        className={loadingClassName}\n        spinnerClassName={spinnerClassName}\n        spinnerElementClassName={spinnerElementClassName}\n        onMouseDown={onMouseDown}\n      />\n    )\n  }\n\n  if (!isOpened) {\n    return null\n  }\n\n  const overlayStyle: CSSProperties = {\n    position: position ?? 'absolute',\n    ...(left === undefined ? {} : { left }),\n    ...(right === undefined ? {} : { right }),\n    ...(top === undefined ? {} : { top }),\n    ...(width === undefined ? {} : { width }),\n  }\n  const mergedStyle = styleProp ? { ...overlayStyle, ...styleProp } : overlayStyle\n\n  return (\n    <div\n      className={overlayClassName}\n      data-open={isOpened ? 'true' : 'false'}\n      data-slot=\"suggestions\"\n      aria-live=\"polite\"\n      aria-relevant=\"additions text\"\n      aria-busy={isLoading ? 'true' : 'false'}\n      ref={containerRef}\n      style={mergedStyle}\n    >\n      {renderSuggestions()}\n      {renderLoadingIndicator()}\n    </div>\n  )\n}\nexport default SuggestionsOverlay\n","import type { MentionSelection } from '../types'\n\nexport const areMentionSelectionsEqual = <Extra extends Record<string, unknown>>(\n  prevSelections: ReadonlyArray<MentionSelection<Extra>>,\n  nextSelections: ReadonlyArray<MentionSelection<Extra>>\n): boolean => {\n  if (prevSelections.length !== nextSelections.length) {\n    return false\n  }\n\n  return prevSelections.every((selection, index) => {\n    const other = nextSelections[index]\n\n    return (\n      selection.id === other.id &&\n      selection.childIndex === other.childIndex &&\n      selection.plainTextStart === other.plainTextStart &&\n      selection.plainTextEnd === other.plainTextEnd &&\n      selection.selection === other.selection &&\n      selection.serializerId === other.serializerId\n    )\n  })\n}\n","import escapeRegex from './escapeRegex'\n\ninterface TriggerOptions {\n  allowSpaceInQuery?: boolean\n  ignoreAccents?: boolean\n}\n\n// eslint-disable-next-line code-complete/low-function-cohesion\nexport const makeTriggerRegex = (\n  trigger: string | RegExp = '@',\n  options: TriggerOptions = {}\n): RegExp => {\n  if (trigger instanceof RegExp) {\n    return trigger\n  }\n\n  const { allowSpaceInQuery, ignoreAccents } = options\n  const escapedTriggerChar = escapeRegex(trigger)\n\n  if (ignoreAccents) {\n    // When ignoreAccents is true, use a Unicode-aware pattern.\n    // The 'u' flag enables Unicode mode, which makes the regex\n    // correctly handle astral symbols and complex characters.\n    const spacePattern = allowSpaceInQuery === true ? '' : '\\\\s'\n\n    // Match Unicode letters and combining marks, but exclude the trigger and optionally spaces\n    // The pattern allows letters followed by zero or more combining marks\n    return new RegExp(\n      `(?:^|\\\\s)(${escapedTriggerChar}((?:[^${spacePattern}${escapedTriggerChar}])*))$`,\n      'u' // Unicode flag enables \\p{} syntax\n    )\n  }\n\n  // Default behavior without accent support\n  // first capture group is the part to be replaced on completion\n  // second capture group is for extracting the search query\n  return new RegExp(\n    `(?:^|\\\\s)(${escapedTriggerChar}([^${allowSpaceInQuery === true ? '' : '\\\\s'}${escapedTriggerChar}]*))$`\n  )\n}\n","import type {\n  ChangeEvent,\n  CompositionEvent,\n  CSSProperties,\n  KeyboardEvent,\n  FocusEvent as ReactFocusEvent,\n  MouseEvent as ReactMouseEvent,\n  SyntheticEvent,\n} from 'react'\nimport React, { Children, useLayoutEffect } from 'react'\nimport { cva } from 'class-variance-authority'\nimport { createPortal } from 'react-dom'\nimport Highlighter from './Highlighter'\nimport { DEFAULT_MENTION_PROPS } from './MentionDefaultProps'\nimport SuggestionsOverlay from './SuggestionsOverlay'\nimport {\n  applyChangeToValue,\n  countSuggestions,\n  findStartOfMentionInPlainText,\n  getEndOfLastMention,\n  getPlainText,\n  getMentionsAndPlainText,\n  getSubstringIndex,\n  getSuggestionHtmlId,\n  isNumber,\n  flattenSuggestions,\n  mapPlainTextIndex,\n  omit,\n  spliceString,\n  cn,\n} from './utils'\nimport { areMentionSelectionsEqual } from './utils/areMentionSelectionsEqual'\nimport { isMentionElement } from './utils/isMentionElement'\nimport { makeTriggerRegex } from './utils/makeTriggerRegex'\nimport readConfigFromChildren from './utils/readConfigFromChildren'\nimport { useEffectEvent } from './utils/useEffectEvent'\nimport type {\n  CaretCoordinates,\n  DataSource,\n  InputComponentProps,\n  MentionComponentProps,\n  MentionDataItem,\n  MentionIdentifier,\n  MentionOccurrence,\n  MentionSelection,\n  MentionSelectionState,\n  MentionChildConfig,\n  MentionsInputProps,\n  MentionsInputAnchorMode,\n  MentionsInputState,\n  MentionsInputClassNames,\n  MentionsInputChangeTrigger,\n  QueryInfo,\n  SuggestionDataItem,\n  SuggestionsMap,\n  SuggestionsPosition,\n  InputElement,\n} from './types'\nimport type { FlattenedSuggestion } from './utils/flattenSuggestions'\n\nconst getDataProvider = <Extra extends Record<string, unknown>>(\n  data: DataSource<Extra>,\n  ignoreAccents: boolean\n): ((query: string) => Promise<MentionDataItem<Extra>[]>) => {\n  if (Array.isArray(data)) {\n    const items = data as ReadonlyArray<MentionDataItem<Extra>>\n    // eslint-disable-next-line @typescript-eslint/require-await\n    return async (query: string) =>\n      items.flatMap((item) => {\n        const index = getSubstringIndex(item.display || String(item.id), query, ignoreAccents)\n        return index >= 0\n          ? [\n              {\n                ...item,\n                highlights: [{ start: index, end: index + query.length }],\n              },\n            ]\n          : []\n      })\n  }\n\n  return async (query: string) => {\n    const provider = data as (\n      query: string\n    ) => Promise<ReadonlyArray<MentionDataItem<Extra>>> | ReadonlyArray<MentionDataItem<Extra>>\n    const result = await Promise.resolve(provider(query))\n    return [...result]\n  }\n}\n\nconst KEY = {\n  TAB: 'Tab',\n  RETURN: 'Enter',\n  ESC: 'Escape',\n  SPACE: ' ',\n  RIGHT: 'ArrowRight',\n  UP: 'ArrowUp',\n  DOWN: 'ArrowDown',\n} as const\n\nconst suggestionHandledKeys = new Set<string>([KEY.ESC, KEY.DOWN, KEY.UP, KEY.RETURN, KEY.TAB])\n\nconst rootStyles = cva('relative overflow-y-visible')\nconst controlStyles = cva('relative border border-border bg-card')\nconst inputStyles = cva(\n  'relative block w-full m-0 box-border bg-transparent text-foreground transition placeholder:text-muted-foreground [font-family:inherit] [font-size:inherit] [letter-spacing:inherit]',\n  {\n    variants: {\n      singleLine: {\n        true: '',\n        false: 'h-full overflow-hidden resize-none whitespace-pre-wrap break-words',\n      },\n    },\n  }\n)\nconst inlineSuggestionStyles = cva(\n  'absolute inline-block pointer-events-none [color:inherit] opacity-80 whitespace-pre z-[2] [font-family:inherit] [font-size:inherit] [letter-spacing:inherit]'\n)\nconst inlineSuggestionTextStyles = 'relative inline-block items-baseline text-muted-foreground'\nconst inlineSuggestionPrefixStyles = 'sr-only'\nconst inlineSuggestionSuffixStyles = 'whitespace-pre text-muted-foreground'\n\nconst resolveTriggerRegex = (trigger: string | RegExp): RegExp => {\n  // TODO move this into makeTriggerRegex\n  if (typeof trigger === 'string') {\n    return makeTriggerRegex(trigger)\n  }\n\n  const flags = trigger.flags.replaceAll('g', '')\n  // Reconstruct provided RegExp without global flag; whitelist flags to avoid surprises.\n  /* eslint-disable-next-line security/detect-non-literal-regexp -- reconstructing a vetted RegExp to strip 'g' */\n  return new RegExp(trigger.source, flags)\n}\n\nconst getMentionSelectionKey = (childIndex: number, plainTextIndex: number): string =>\n  `${childIndex}:${plainTextIndex}`\n\n// Separate from areMentionSelectionsEqual because here we are deduping the raw mentions\n// produced by getMentions. At this point we only care about the immutable identity of the\n// mention in the document (childIndex + plainText location + id/display). Selection-derived\n// metadata (serializerId, selection state) is computed later when we emit the payload, so\n// comparing the lighter-weight occurrences lets us skip work before we build those objects.\nconst areMentionOccurrencesEqual = <Extra extends Record<string, unknown>>(\n  prevMentions: ReadonlyArray<MentionOccurrence<Extra>>,\n  nextMentions: ReadonlyArray<MentionOccurrence<Extra>>\n): boolean => {\n  if (prevMentions.length !== nextMentions.length) {\n    return false\n  }\n\n  return prevMentions.every((mention, index) => {\n    const other = nextMentions[index]\n\n    return (\n      mention.id === other.id &&\n      mention.childIndex === other.childIndex &&\n      mention.plainTextIndex === other.plainTextIndex &&\n      mention.display === other.display\n    )\n  })\n}\n\ninterface MentionSelectionComputation<Extra extends Record<string, unknown>> {\n  selections: MentionSelection<Extra>[]\n  selectionMap: Record<string, MentionSelectionState>\n}\n\ninterface InlineSuggestionDetails<Extra extends Record<string, unknown> = Record<string, unknown>> {\n  hiddenPrefix: string\n  visibleText: string\n  queryInfo: QueryInfo\n  suggestion: SuggestionDataItem<Extra>\n  announcement: string\n}\n\nconst INLINE_AUTOCOMPLETE_FALLBACK_ANNOUNCEMENT = 'No inline suggestions available'\n\nconst visuallyHiddenStyles: CSSProperties = {\n  position: 'absolute',\n  width: 1,\n  height: 1,\n  padding: 0,\n  border: 0,\n  margin: -1,\n  clip: 'rect(0 0 0 0)',\n  clipPath: 'inset(50%)',\n  overflow: 'hidden',\n  whiteSpace: 'nowrap',\n}\n\nconst HANDLED_PROPS: Array<keyof MentionsInputProps<any>> = [\n  'singleLine',\n  'anchorMode',\n  'suggestionsPlacement',\n  'a11ySuggestionsListLabel',\n  'value',\n  'onKeyDown',\n  'customSuggestionsContainer',\n  'onSelect',\n  'onMentionBlur',\n  'onMentionsChange',\n  'onMentionSelectionChange',\n  'onBlur',\n  'onChange',\n  'suggestionsPortalHost',\n  'inputRef',\n  'inputComponent',\n  'children',\n  'style',\n  'className',\n  'classNames',\n  'suggestionsDisplay',\n  'autoResize',\n]\n\nclass MentionsInput<\n  Extra extends Record<string, unknown> = Record<string, unknown>,\n> extends React.Component<MentionsInputProps<Extra>, MentionsInputState<Extra>> {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  static readonly defaultProps: Partial<MentionsInputProps<any>> & {\n    singleLine: boolean\n  } = {\n    singleLine: false,\n    autoResize: false,\n    anchorMode: 'caret',\n    suggestionsPlacement: 'below',\n    onKeyDown: () => null,\n    onSelect: () => null,\n    suggestionsDisplay: 'overlay',\n    spellCheck: false,\n  }\n\n  private suggestions: SuggestionsMap<Extra> = {}\n  private readonly uuidSuggestionsOverlay: string\n  private readonly inlineAutocompleteLiveRegionId: string\n  private containerElement: HTMLDivElement | null = null\n  private inputElement: HTMLInputElement | HTMLTextAreaElement | null = null\n  private highlighterElement: HTMLDivElement | null = null\n  private suggestionsElement: HTMLDivElement | null = null\n  private _queryId = 0\n  private _suggestionsMouseDown = false\n  private _isComposing = false\n  private readonly defaultSuggestionsPortalHost: HTMLElement | null\n  private _isScrolling = false\n  private _pendingHighlighterRecompute = false\n  private _queuedHighlighterRecompute = false\n  private _didUnmount = false\n  private _scrollSyncFrame: number | null = null\n  private _autoResizeFrame: number | null = null\n  private _cachedMarkupValue = ''\n\n  private cancelScheduledFrame(frameKey: '_scrollSyncFrame' | '_autoResizeFrame'): void {\n    const frame = this[frameKey]\n    if (\n      frame !== null &&\n      globalThis.window !== undefined &&\n      typeof globalThis.cancelAnimationFrame === 'function'\n    ) {\n      globalThis.cancelAnimationFrame(frame)\n      this[frameKey] = null\n    }\n  }\n\n  private getSlotClassName(slot: keyof MentionsInputClassNames, baseClass: string) {\n    const { classNames } = this.props\n    const extra = classNames?.[slot]\n    return cn(baseClass, extra)\n  }\n\n  private resolvePortalHost(): Element | null {\n    const { suggestionsPortalHost } = this.props\n\n    if (suggestionsPortalHost === null) {\n      return null\n    }\n\n    if (typeof Document !== 'undefined' && suggestionsPortalHost instanceof Document) {\n      return suggestionsPortalHost.body\n    }\n\n    if (suggestionsPortalHost) {\n      return suggestionsPortalHost as Element\n    }\n\n    return this.defaultSuggestionsPortalHost\n  }\n\n  constructor(props: MentionsInputProps<Extra>) {\n    super(props)\n    this.uuidSuggestionsOverlay = Math.random().toString(16).slice(2)\n    this.inlineAutocompleteLiveRegionId = `${this.uuidSuggestionsOverlay}-inline-live`\n    this.defaultSuggestionsPortalHost = typeof document === 'undefined' ? null : document.body\n    const initialConfig = readConfigFromChildren<Extra>(props.children)\n    const initialValue = props.value ?? ''\n    const {\n      mentions: initialMentions,\n      plainText: initialPlainText,\n      idValue: initialIdValue,\n    } = getMentionsAndPlainText<Extra>(initialValue, initialConfig)\n    this._cachedMarkupValue = initialValue\n\n    this.handleCopy = this.handleCopy.bind(this)\n    this.handleCut = this.handleCut.bind(this)\n    this.handlePaste = this.handlePaste.bind(this)\n    this.handleDocumentScroll = this.handleDocumentScroll.bind(this)\n\n    this.state = {\n      focusIndex: 0,\n      selectionStart: null,\n      selectionEnd: null,\n      cachedMentions: initialMentions,\n      cachedPlainText: initialPlainText,\n      cachedIdValue: initialIdValue,\n      suggestions: {},\n      caretPosition: null,\n      suggestionsPosition: {},\n      pendingSelectionUpdate: false,\n      highlighterRecomputeVersion: 0,\n      config: initialConfig,\n    } satisfies MentionsInputState<Extra>\n  }\n\n  private validateChildren(): void {\n    const seenChildren = new Set<string>()\n\n    // eslint-disable-next-line code-complete/low-function-cohesion\n    React.Children.forEach(this.props.children, (child) => {\n      if (!isMentionElement(child)) {\n        throw new Error(\n          `MentionsInput only accepts Mention components as children. Found: ${\n            typeof child.type === 'string' ? child.type : child.type?.name || 'unknown component'\n          }`\n        )\n      }\n\n      const trigger =\n        child.props.trigger === undefined\n          ? DEFAULT_MENTION_PROPS.trigger\n          : typeof child.props.trigger === 'string'\n            ? child.props.trigger\n            : child.props.trigger.source\n      if (seenChildren.has(trigger)) {\n        throw new Error(\n          `MentionsInput does not support Mention children with duplicate triggers: ${trigger}.`\n        )\n      }\n      seenChildren.add(trigger)\n    })\n\n    // Compute new config and update state if changed\n    const newConfig = readConfigFromChildren<Extra>(this.props.children)\n    if (!this.configsEqual(this.state.config, newConfig)) {\n      const currentValue = this.props.value ?? ''\n      const { mentions: nextMentions, plainText: nextPlainText } = getMentionsAndPlainText<Extra>(\n        currentValue,\n        newConfig\n      )\n      this.setState({\n        config: newConfig,\n        cachedMentions: nextMentions,\n        cachedPlainText: nextPlainText,\n      })\n      this._cachedMarkupValue = currentValue\n    }\n  }\n\n  private configsEqual(\n    config1: ReadonlyArray<MentionChildConfig<Extra>>,\n    config2: ReadonlyArray<MentionChildConfig<Extra>>\n  ): boolean {\n    if (config1.length !== config2.length) {\n      return false\n    }\n\n    // eslint-disable-next-line code-complete/enforce-meaningful-names\n    return config1.every((cfg1, index) => {\n      // eslint-disable-next-line code-complete/enforce-meaningful-names\n      const cfg2 = config2[index]\n\n      // Compare key properties that determine config identity\n      return (\n        ((typeof cfg1.trigger === 'string' &&\n          typeof cfg2.trigger === 'string' &&\n          cfg1.trigger === cfg2.trigger) ||\n          (cfg1.trigger instanceof RegExp &&\n            cfg2.trigger instanceof RegExp &&\n            cfg1.trigger.source === cfg2.trigger.source)) &&\n        cfg1.serializer.id === cfg2.serializer.id\n      )\n    })\n  }\n\n  componentDidMount(): void {\n    this.validateChildren()\n\n    document.addEventListener('copy', this.handleCopy)\n    document.addEventListener('cut', this.handleCut)\n    document.addEventListener('paste', this.handlePaste)\n    document.addEventListener('scroll', this.handleDocumentScroll, true)\n    document.addEventListener('selectionchange', this.handleDocumentSelectionChange)\n\n    this.updateSuggestionsPosition()\n\n    this.resetTextareaHeight()\n\n    if (this.inputElement && this.highlighterElement) {\n      mirrorInputTypographicStyles(this.inputElement, this.highlighterElement)\n    }\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  componentDidUpdate(\n    prevProps: MentionsInputProps<Extra>,\n    prevState: MentionsInputState<Extra>\n  ): void {\n    // Validate children if they've changed\n    if (prevProps.children !== this.props.children) {\n      this.validateChildren()\n    }\n\n    // Update position of suggestions unless this componentDidUpdate was\n    // triggered by an update to suggestionsPosition.\n    if (prevState.suggestionsPosition === this.state.suggestionsPosition) {\n      this.updateSuggestionsPosition()\n    }\n\n    // maintain selection in case a mention is added/removed causing\n    // the cursor to jump to the end\n    if (this.state.pendingSelectionUpdate) {\n      this.setState({ pendingSelectionUpdate: false })\n      this.setSelection(this.state.selectionStart, this.state.selectionEnd)\n    }\n\n    const selectionPositionsChanged =\n      this.state.selectionStart !== prevState.selectionStart ||\n      this.state.selectionEnd !== prevState.selectionEnd\n\n    const previousValue = prevProps.value ?? ''\n    const currentValue = this.props.value ?? ''\n    const configChanged = this.state.config !== prevState.config\n    const valueChanged = currentValue !== previousValue || configChanged\n\n    if (valueChanged || prevProps.autoResize !== this.props.autoResize) {\n      this.resetTextareaHeight()\n    }\n\n    const recalculatedMentions = valueChanged\n      ? getMentionsAndPlainText<Extra>(currentValue, this.state.config)\n      : null\n    const mentionsForSelection = recalculatedMentions?.mentions ?? this.state.cachedMentions\n    const plainTextForSelection = recalculatedMentions?.plainText ?? this.state.cachedPlainText\n    const idValueForSelection = recalculatedMentions?.idValue ?? this.state.cachedIdValue\n\n    if (recalculatedMentions) {\n      const {\n        mentions: nextMentions,\n        plainText: nextPlainText,\n        idValue: nextIdValue,\n      } = recalculatedMentions\n\n      if (\n        !areMentionOccurrencesEqual(nextMentions, this.state.cachedMentions) ||\n        nextPlainText !== this.state.cachedPlainText ||\n        nextIdValue !== this.state.cachedIdValue\n      ) {\n        this.setState({\n          cachedMentions: nextMentions,\n          cachedPlainText: nextPlainText,\n          cachedIdValue: nextIdValue,\n        })\n      }\n    }\n\n    if (valueChanged) {\n      this._cachedMarkupValue = currentValue\n    }\n\n    if (selectionPositionsChanged || valueChanged) {\n      const currentSelection = this.computeMentionSelectionDetails(\n        mentionsForSelection,\n        this.state.config,\n        this.state.selectionStart,\n        this.state.selectionEnd\n      )\n      let shouldEmit = selectionPositionsChanged\n\n      if (!shouldEmit && valueChanged) {\n        const previousSelection = this.computeMentionSelectionDetails(\n          prevState.cachedMentions,\n          prevState.config,\n          prevState.selectionStart,\n          prevState.selectionEnd\n        )\n        shouldEmit = !areMentionSelectionsEqual(\n          previousSelection.selections,\n          currentSelection.selections\n        )\n      }\n\n      if (shouldEmit && this.props.onMentionSelectionChange) {\n        const selectionMentionIds = currentSelection.selections.map((selection) => selection.id)\n        const selectionContext = {\n          value: currentValue,\n          plainTextValue: plainTextForSelection,\n          idValue: idValueForSelection,\n          mentions: mentionsForSelection,\n          mentionIds: selectionMentionIds,\n          mentionId: selectionMentionIds.length === 1 ? selectionMentionIds[0] : undefined,\n        }\n\n        this.props.onMentionSelectionChange(currentSelection.selections, selectionContext)\n      }\n    }\n  }\n\n  componentWillUnmount(): void {\n    document.removeEventListener('copy', this.handleCopy)\n    document.removeEventListener('cut', this.handleCut)\n    document.removeEventListener('paste', this.handlePaste)\n    document.removeEventListener('scroll', this.handleDocumentScroll, true)\n    document.removeEventListener('selectionchange', this.handleDocumentSelectionChange)\n    this.cancelScheduledFrame('_scrollSyncFrame')\n    this.cancelScheduledFrame('_autoResizeFrame')\n    this._pendingHighlighterRecompute = false\n    this._queuedHighlighterRecompute = false\n    this._didUnmount = true\n  }\n\n  render(): React.ReactNode {\n    const { className, style, singleLine } = this.props\n    const rootClassName = cn(rootStyles(), className)\n    return (\n      <div\n        ref={this.setContainerElement}\n        className={rootClassName}\n        style={style}\n        data-single-line={\n          (singleLine ?? MentionsInput.defaultProps.singleLine) ? 'true' : undefined\n        }\n        data-multi-line={(singleLine ?? MentionsInput.defaultProps.singleLine) ? undefined : 'true'}\n      >\n        {this.renderControl()}\n        {this.renderSuggestionsOverlay()}\n        {this.renderMeasurementBridge()}\n      </div>\n    )\n  }\n\n  setContainerElement = (el: HTMLDivElement | null) => {\n    this.containerElement = el\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion, sonarjs/cognitive-complexity\n  getInputProps = (): InputComponentProps => {\n    const { readOnly, disabled, singleLine } = this.props\n\n    const passthroughProps = omit(\n      this.props,\n      HANDLED_PROPS as ReadonlyArray<keyof MentionsInputProps<any>>\n    ) as Partial<InputComponentProps>\n\n    const { ...restPassthrough } = passthroughProps\n\n    const baseClassName = this.getSlotClassName('input', inputStyles({ singleLine }))\n\n    const props: Record<string, unknown> = {\n      ...restPassthrough,\n      className: baseClassName,\n      value: getPlainText(this.props.value ?? '', this.state.config),\n      onScroll: this.updateHighlighterScroll,\n      'data-slot': 'input',\n      'data-single-line': singleLine ? 'true' : undefined,\n      'data-multi-line': singleLine ? undefined : 'true',\n    }\n\n    const inlineStyle: CSSProperties = {\n      background: 'transparent',\n    }\n\n    if (!singleLine && isMobileSafari()) {\n      inlineStyle.marginTop = 1\n      inlineStyle.marginLeft = -3\n    }\n\n    if (Object.keys(inlineStyle).length > 0) {\n      props.style = inlineStyle\n    }\n\n    if (!readOnly && !disabled) {\n      Object.assign(props, {\n        onChange: this.handleChange,\n        onSelect: this.handleSelect,\n        onKeyDown: this.handleKeyDown,\n        onBlur: this.handleBlur,\n        onCompositionStart: this.handleCompositionStart,\n        onCompositionEnd: this.handleCompositionEnd,\n      })\n    }\n\n    const isInlineAutocomplete = this.isInlineAutocomplete()\n    const inlineSuggestion = isInlineAutocomplete ? this.getInlineSuggestionDetails() : null\n    const isOverlayOpen = !isInlineAutocomplete && this.isOpened()\n\n    Object.assign(props, {\n      role: 'combobox',\n      'aria-autocomplete': isInlineAutocomplete ? 'inline' : 'list',\n      'aria-expanded': isInlineAutocomplete ? 'false' : this.isOpened() ? 'true' : 'false',\n      'aria-haspopup': isInlineAutocomplete ? undefined : 'listbox',\n      'aria-activedescendant': isOverlayOpen\n        ? getSuggestionHtmlId(this.uuidSuggestionsOverlay, this.state.focusIndex)\n        : undefined,\n    })\n\n    if (isInlineAutocomplete && inlineSuggestion) {\n      const existingDescribedBy =\n        typeof props['aria-describedby'] === 'string' ? props['aria-describedby'] : undefined\n      const describedBy = [existingDescribedBy, this.inlineAutocompleteLiveRegionId]\n        .filter((value): value is string => Boolean(value && value.trim().length > 0))\n        .join(' ')\n      props['aria-describedby'] = describedBy || undefined\n    }\n\n    return props as InputComponentProps\n  }\n\n  renderControl = (): React.ReactElement => {\n    const { singleLine, inputComponent: CustomInput } = this.props\n    const inputProps = this.getInputProps()\n    const controlClassName = this.getSlotClassName('control', controlStyles())\n\n    const control = CustomInput\n      ? React.createElement(\n          CustomInput as React.ComponentType<any>,\n          {\n            ref: this.setInputRef,\n            ...inputProps,\n          } as any\n        )\n      : singleLine\n        ? this.renderInput(inputProps)\n        : this.renderTextarea(inputProps)\n\n    return (\n      <div className={controlClassName} data-slot=\"control\">\n        {this.renderHighlighter()}\n        {control}\n        {this.renderInlineSuggestion()}\n        {this.renderInlineSuggestionLiveRegion()}\n      </div>\n    )\n  }\n\n  renderInput = (props: InputComponentProps): React.ReactElement => {\n    return <input type=\"text\" ref={this.setInputRef} {...props} />\n  }\n\n  renderTextarea = (props: InputComponentProps): React.ReactElement => {\n    return <textarea ref={this.setInputRef} {...props} />\n  }\n\n  setInputRef = (el: InputElement | null) => {\n    this.inputElement = el\n    const { inputRef } = this.props\n    if (typeof inputRef === 'function') {\n      inputRef(el)\n    } else if (inputRef) {\n      ;(inputRef as React.RefObject<InputElement | null>).current = el\n    }\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  private readonly resetTextareaHeight = (): void => {\n    const hasTextarea =\n      typeof HTMLTextAreaElement !== 'undefined' && this.inputElement instanceof HTMLTextAreaElement\n\n    // When disabled or in single-line mode, clear any previously applied inline sizing.\n    if (this.props.singleLine === true || this.props.autoResize !== true) {\n      if (hasTextarea) {\n        this.inputElement!.style.height = ''\n        this.inputElement!.style.overflowY = ''\n      }\n      if (this._autoResizeFrame !== null && typeof globalThis.cancelAnimationFrame === 'function') {\n        globalThis.cancelAnimationFrame(this._autoResizeFrame)\n        this._autoResizeFrame = null\n      }\n      return\n    }\n\n    // eslint-disable-next-line code-complete/low-function-cohesion\n    const measure = () => {\n      const element = this.inputElement\n      if (\n        !element ||\n        typeof HTMLTextAreaElement === 'undefined' ||\n        !(element instanceof HTMLTextAreaElement)\n      ) {\n        return\n      }\n\n      element.style.height = 'auto'\n      element.style.overflowY = 'hidden'\n\n      let borderAdjustment = 0\n      if (globalThis.window !== undefined && typeof globalThis.getComputedStyle === 'function') {\n        const computed = globalThis.getComputedStyle(element)\n        const parse = (value: string | null | undefined) =>\n          value ? Number.parseFloat(value) || 0 : 0\n        borderAdjustment = parse(computed.borderTopWidth) + parse(computed.borderBottomWidth)\n      }\n\n      const nextHeight = element.scrollHeight + borderAdjustment\n      element.style.height = `${nextHeight}px`\n    }\n\n    measure()\n\n    if (\n      !hasTextarea ||\n      globalThis.window === undefined ||\n      typeof globalThis.requestAnimationFrame !== 'function'\n    ) {\n      return\n    }\n\n    if (this._autoResizeFrame !== null && typeof globalThis.cancelAnimationFrame === 'function') {\n      globalThis.cancelAnimationFrame(this._autoResizeFrame)\n    }\n\n    this._autoResizeFrame = globalThis.requestAnimationFrame(() => {\n      this._autoResizeFrame = null\n      measure()\n    })\n  }\n\n  setSuggestionsElement = (el: HTMLDivElement | null) => {\n    this.suggestionsElement = el\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  renderSuggestionsOverlay = (): React.ReactNode | null => {\n    if (this.isInlineAutocomplete()) {\n      return null\n    }\n\n    if (!isNumber(this.state.selectionStart)) {\n      // do not show suggestions when the input does not have the focus\n      return null\n    }\n\n    const { position, left, top, right, width } = this.state.suggestionsPosition\n    const portalTarget = this.resolvePortalHost()\n\n    const suggestionsNode = (\n      <SuggestionsOverlay<Extra>\n        id={this.uuidSuggestionsOverlay}\n        className={this.props.classNames?.suggestions}\n        listClassName={this.props.classNames?.suggestionsList}\n        itemClassName={this.props.classNames?.suggestionItem}\n        focusedItemClassName={this.props.classNames?.suggestionItemFocused}\n        displayClassName={this.props.classNames?.suggestionDisplay}\n        highlightClassName={this.props.classNames?.suggestionHighlight}\n        loadingClassName={this.props.classNames?.loadingIndicator}\n        spinnerClassName={this.props.classNames?.loadingSpinner}\n        spinnerElementClassName={this.props.classNames?.loadingSpinnerElement}\n        position={position}\n        left={left}\n        top={top}\n        right={right}\n        width={width}\n        focusIndex={this.state.focusIndex}\n        scrollFocusedIntoView={this.state.scrollFocusedIntoView}\n        containerRef={this.setSuggestionsElement}\n        suggestions={this.state.suggestions}\n        customSuggestionsContainer={this.props.customSuggestionsContainer}\n        onSelect={this.addMention}\n        onMouseDown={this.handleSuggestionsMouseDown}\n        onMouseEnter={this.handleSuggestionsMouseEnter}\n        isLoading={this.isLoading()}\n        isOpened={this.isOpened()}\n        a11ySuggestionsListLabel={this.props.a11ySuggestionsListLabel}\n      >\n        {this.props.children}\n      </SuggestionsOverlay>\n    )\n    if (portalTarget) {\n      return createPortal(suggestionsNode, portalTarget)\n    }\n    return suggestionsNode\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  renderInlineSuggestion = (): React.ReactNode => {\n    if (!this.isInlineAutocomplete()) {\n      return null\n    }\n\n    if (!isNumber(this.state.selectionStart)) {\n      return null\n    }\n\n    const inlineSuggestion = this.getInlineSuggestionDetails()\n    if (!inlineSuggestion) {\n      return null\n    }\n\n    const { caretPosition } = this.state\n    const highlighter = this.highlighterElement\n    if (!caretPosition || !highlighter) {\n      return null\n    }\n\n    const caretElement = highlighter.querySelector<HTMLSpanElement>('[data-mentions-caret]')\n    const controlElement = highlighter.parentElement\n    const controlRect = controlElement?.getBoundingClientRect()\n    const caretRect = caretElement?.getBoundingClientRect()\n\n    if (!caretRect || !controlRect) {\n      return null\n    }\n\n    const left = caretRect.left - controlRect.left\n    const top = caretRect.top - controlRect.top\n\n    const wrapperClassName = this.getSlotClassName('inlineSuggestion', inlineSuggestionStyles())\n    const wrapperStyle: CSSProperties = { left, top }\n    const textWrapperClassName = this.getSlotClassName(\n      'inlineSuggestionText',\n      inlineSuggestionTextStyles\n    )\n    const prefixClassName = this.getSlotClassName(\n      'inlineSuggestionPrefix',\n      inlineSuggestionPrefixStyles\n    )\n    const suffixClassName = this.getSlotClassName(\n      'inlineSuggestionSuffix',\n      inlineSuggestionSuffixStyles\n    )\n\n    return (\n      <div\n        aria-hidden=\"true\"\n        className={wrapperClassName}\n        data-slot=\"inline-suggestion\"\n        style={wrapperStyle}\n      >\n        <span className={textWrapperClassName}>\n          {inlineSuggestion.hiddenPrefix ? (\n            <span className={prefixClassName} aria-hidden=\"true\">\n              {inlineSuggestion.hiddenPrefix}\n            </span>\n          ) : null}\n          <span className={suffixClassName}>{inlineSuggestion.visibleText}</span>\n        </span>\n      </div>\n    )\n  }\n\n  renderInlineSuggestionLiveRegion = (): React.ReactNode => {\n    if (!this.isInlineAutocomplete()) {\n      return null\n    }\n\n    const inlineSuggestion = this.getInlineSuggestionDetails()\n    const announcement = this.getInlineSuggestionAnnouncement(inlineSuggestion)\n\n    return (\n      <div\n        id={this.inlineAutocompleteLiveRegionId}\n        role=\"status\"\n        aria-live=\"polite\"\n        aria-atomic=\"true\"\n        style={visuallyHiddenStyles}\n        data-slot=\"inline-suggestion-live-region\"\n      >\n        {announcement}\n      </div>\n    )\n  }\n\n  private readonly getInlineSuggestionAnnouncement = (\n    inlineSuggestion: InlineSuggestionDetails<Extra> | null\n  ): string => {\n    if (!inlineSuggestion) {\n      return INLINE_AUTOCOMPLETE_FALLBACK_ANNOUNCEMENT\n    }\n\n    return inlineSuggestion.announcement\n  }\n\n  renderMeasurementBridge = (): React.ReactNode => {\n    return (\n      <MeasurementBridge\n        container={this.containerElement}\n        highlighter={this.highlighterElement}\n        input={this.inputElement}\n        suggestions={this.suggestionsElement}\n        onSyncScroll={this.updateHighlighterScroll}\n        onUpdateSuggestionsPosition={this.updateSuggestionsPosition}\n      />\n    )\n  }\n\n  renderHighlighter = (): React.ReactElement => {\n    const { selectionStart, selectionEnd, highlighterRecomputeVersion } = this.state\n    const { singleLine, children, value, classNames } = this.props\n    const mentionSelectionMap = this.getCurrentMentionSelectionMap()\n    return (\n      <Highlighter\n        containerRef={this.setHighlighterElement}\n        className={classNames?.highlighter}\n        substringClassName={classNames?.highlighterSubstring}\n        caretClassName={classNames?.highlighterCaret}\n        value={value}\n        singleLine={singleLine ?? MentionsInput.defaultProps.singleLine}\n        selectionStart={selectionStart}\n        selectionEnd={selectionEnd}\n        recomputeVersion={highlighterRecomputeVersion}\n        onCaretPositionChange={this.handleCaretPositionChange}\n        mentionSelectionMap={mentionSelectionMap}\n      >\n        {children}\n      </Highlighter>\n    )\n  }\n\n  setHighlighterElement = (el: HTMLDivElement | null) => {\n    this.highlighterElement = el\n  }\n\n  handleCaretPositionChange = (position: CaretCoordinates | null) => {\n    this.setState({ caretPosition: position }, () => {\n      if (position) {\n        this.updateSuggestionsPosition()\n      }\n    })\n    this.scheduleHighlighterRecompute()\n  }\n\n  scheduleHighlighterRecompute = (): void => {\n    if (this._didUnmount) {\n      return\n    }\n\n    if (this._pendingHighlighterRecompute) {\n      this._queuedHighlighterRecompute = true\n      return\n    }\n\n    this._pendingHighlighterRecompute = true\n    this.setState(\n      (prevState) => ({\n        highlighterRecomputeVersion: prevState.highlighterRecomputeVersion + 1,\n      }),\n      () => {\n        this._pendingHighlighterRecompute = false\n        if (this._queuedHighlighterRecompute) {\n          this._queuedHighlighterRecompute = false\n          this.scheduleHighlighterRecompute()\n        }\n      }\n    )\n  }\n\n  isInlineAutocomplete = (): boolean => this.props.suggestionsDisplay === 'inline'\n\n  getFlattenedSuggestions = (): FlattenedSuggestion<Extra>[] => {\n    return flattenSuggestions<Extra>(this.props.children, this.state.suggestions)\n  }\n\n  getFocusedSuggestionEntry = (): {\n    result: SuggestionDataItem<Extra>\n    queryInfo: QueryInfo\n  } | null => {\n    const flattened = this.getFlattenedSuggestions()\n    if (flattened.length === 0) {\n      return null\n    }\n    return flattened[this.state.focusIndex] ?? flattened[0]\n  }\n\n  getSuggestionData = (\n    suggestion: SuggestionDataItem<Extra>\n  ): {\n    id: MentionIdentifier\n    display: string\n  } => {\n    if (typeof suggestion === 'string') {\n      return { id: suggestion, display: suggestion }\n    }\n    return {\n      id: suggestion.id,\n      display: suggestion.display ?? String(suggestion.id),\n    }\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  getInlineSuggestionDetails = (): InlineSuggestionDetails<Extra> | null => {\n    if (!this.isInlineAutocomplete()) {\n      return null\n    }\n\n    const entry = this.getFocusedSuggestionEntry()\n    if (!entry) {\n      return null\n    }\n\n    const { queryInfo, result } = entry\n    const mentionChild = Children.toArray(this.props.children)[queryInfo.childIndex] as\n      | React.ReactElement<MentionComponentProps<Extra>>\n      | undefined\n\n    if (!mentionChild) {\n      return null\n    }\n\n    const {\n      displayTransform = DEFAULT_MENTION_PROPS.displayTransform,\n      appendSpaceOnAdd = DEFAULT_MENTION_PROPS.appendSpaceOnAdd,\n    } = mentionChild.props\n\n    const { id, display } = this.getSuggestionData(result)\n    let displayValue = displayTransform(id, display)\n    if (appendSpaceOnAdd) {\n      displayValue += ' '\n    }\n\n    const visibleText = this.getInlineSuggestionRemainder(displayValue, queryInfo)\n\n    if (!visibleText) {\n      return null\n    }\n\n    const hiddenPrefixLength = displayValue.length - visibleText.length\n    const hiddenPrefix = hiddenPrefixLength > 0 ? displayValue.slice(0, hiddenPrefixLength) : ''\n    const announcement = displayValue.trimEnd()\n\n    return {\n      hiddenPrefix,\n      visibleText,\n      queryInfo,\n      suggestion: result,\n      announcement: announcement.length > 0 ? announcement : displayValue,\n    }\n  }\n\n  getInlineSuggestionRemainder = (displayValue: string, queryInfo: QueryInfo): string => {\n    const query = queryInfo.query ?? ''\n    if (query.length === 0) {\n      return displayValue\n    }\n\n    const normalizedDisplay = displayValue.toLocaleLowerCase()\n    const normalizedQuery = query.toLocaleLowerCase()\n\n    if (normalizedDisplay.startsWith(normalizedQuery)) {\n      return displayValue.slice(query.length)\n    }\n\n    return displayValue\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  canApplyInlineSuggestion = (): boolean => {\n    if (!this.isInlineAutocomplete()) {\n      return false\n    }\n\n    const inlineSuggestion = this.getInlineSuggestionDetails()\n    if (!inlineSuggestion) {\n      return false\n    }\n\n    const { selectionStart, selectionEnd } = this.state\n    if (selectionStart === null || selectionEnd === null || selectionStart !== selectionEnd) {\n      return false\n    }\n\n    return selectionEnd === inlineSuggestion.queryInfo.querySequenceEnd\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  private readonly computeMentionSelectionDetails = (\n    mentions: ReadonlyArray<MentionOccurrence<Extra>>,\n    config: ReadonlyArray<MentionChildConfig<Extra>>,\n    selectionStart: number | null,\n    selectionEnd: number | null\n  ): MentionSelectionComputation<Extra> => {\n    if (selectionStart === null || selectionEnd === null) {\n      return { selections: [], selectionMap: {} }\n    }\n\n    const start = Math.min(selectionStart, selectionEnd)\n    const end = Math.max(selectionStart, selectionEnd)\n    const isCollapsed = start === end\n\n    if (mentions.length === 0) {\n      return { selections: [], selectionMap: {} }\n    }\n\n    const selections: MentionSelection<Extra>[] = []\n    const selectionMap: Record<string, MentionSelectionState> = {}\n\n    for (const mention of mentions) {\n      const mentionStart = mention.plainTextIndex\n      const mentionEnd = mentionStart + mention.display.length\n      let selectionState: MentionSelectionState | null = null\n\n      if (isCollapsed) {\n        if (start > mentionStart && start < mentionEnd) {\n          selectionState = 'inside'\n        } else if (start === mentionStart || start === mentionEnd) {\n          selectionState = 'boundary'\n        }\n      } else if (start < mentionEnd && end > mentionStart) {\n        selectionState = start <= mentionStart && end >= mentionEnd ? 'full' : 'partial'\n      }\n\n      if (selectionState === null) {\n        continue\n      }\n\n      const serializerId = config[mention.childIndex]?.serializer.id ?? ''\n      const entry: MentionSelection<Extra> = {\n        ...mention,\n        selection: selectionState,\n        plainTextStart: mentionStart,\n        plainTextEnd: mentionEnd,\n        serializerId,\n      }\n\n      selections.push(entry)\n      selectionMap[getMentionSelectionKey(mention.childIndex, mention.plainTextIndex)] =\n        selectionState\n    }\n\n    return { selections, selectionMap }\n  }\n\n  private readonly getCurrentMentionSelectionMap = (): Record<string, MentionSelectionState> => {\n    const { selectionStart, selectionEnd } = this.state\n    if (selectionStart === null || selectionEnd === null) {\n      return {}\n    }\n\n    const currentValue = this.props.value ?? ''\n    const mentions =\n      currentValue === this._cachedMarkupValue\n        ? this.state.cachedMentions\n        : getMentionsAndPlainText<Extra>(currentValue, this.state.config).mentions\n\n    const { selectionMap } = this.computeMentionSelectionDetails(\n      mentions,\n      this.state.config,\n      selectionStart,\n      selectionEnd\n    )\n    return selectionMap\n  }\n\n  executeOnChange = (\n    trigger: MentionsInputChangeTrigger,\n    newValue: string,\n    newPlainTextValue: string,\n    newIdValue: string,\n    mentions: MentionOccurrence<Extra>[],\n    previousValue: string,\n    mentionId?: MentionIdentifier\n  ): void => {\n    if (this.props.onMentionsChange) {\n      this.props.onMentionsChange({\n        trigger,\n        value: newValue,\n        plainTextValue: newPlainTextValue,\n        idValue: newIdValue,\n        mentions,\n        previousValue,\n        mentionId,\n      })\n    }\n  }\n\n  handlePaste = (event: ClipboardEvent): void => {\n    if (event.target !== this.inputElement) {\n      return\n    }\n    if (!this.supportsClipboardActions(event) || !event.clipboardData) {\n      return\n    }\n\n    event.preventDefault()\n\n    const { selectionStart, selectionEnd } = this.state\n    const { value } = this.props\n    const valueText = value ?? ''\n\n    const safeSelectionStart = selectionStart ?? 0\n    const safeSelectionEnd = selectionEnd ?? safeSelectionStart\n\n    const markupStartIndex = mapPlainTextIndex(\n      valueText,\n      this.state.config,\n      safeSelectionStart,\n      'START'\n    ) as number\n    const markupEndIndex = mapPlainTextIndex(\n      valueText,\n      this.state.config,\n      safeSelectionEnd,\n      'END'\n    ) as number\n\n    const clipboardData = event.clipboardData\n    const pastedMentions = clipboardData.getData('text/react-mentions')\n    const pastedData = clipboardData.getData('text/plain')\n\n    const newValue = spliceString(\n      valueText,\n      markupStartIndex,\n      markupEndIndex,\n      pastedMentions || pastedData\n    ).replaceAll('\\r', '')\n\n    const {\n      mentions,\n      plainText: newPlainTextValue,\n      idValue: newIdValue,\n    } = getMentionsAndPlainText<Extra>(newValue, this.state.config)\n\n    this.executeOnChange(\n      { type: 'paste', nativeEvent: event },\n      newValue,\n      newPlainTextValue,\n      newIdValue,\n      mentions,\n      valueText\n    )\n\n    // Move the cursor position to the end of the pasted data\n    const startOfMention =\n      selectionStart === null\n        ? undefined\n        : findStartOfMentionInPlainText(valueText, this.state.config, selectionStart)\n    const nextPos =\n      (startOfMention ?? safeSelectionStart) +\n      getPlainText(pastedMentions || pastedData, this.state.config).length\n    this.setState({\n      selectionStart: nextPos,\n      selectionEnd: nextPos,\n      pendingSelectionUpdate: true,\n    })\n  }\n\n  saveSelectionToClipboard(event: ClipboardEvent): void {\n    const input = this.inputElement\n    if (!input || !event.clipboardData) {\n      return\n    }\n    // use the actual selectionStart & selectionEnd instead of the one stored\n    // in state to ensure copy & paste also works on disabled inputs & textareas\n    const selectionStart = input.selectionStart ?? 0\n    const selectionEnd = input.selectionEnd ?? selectionStart\n    const { value } = this.props\n    const valueText = value ?? ''\n    const clipboardData = event.clipboardData\n\n    const markupStartIndex = mapPlainTextIndex(\n      valueText,\n      this.state.config,\n      selectionStart,\n      'START'\n    ) as number\n    const markupEndIndex = mapPlainTextIndex(\n      valueText,\n      this.state.config,\n      selectionEnd,\n      'END'\n    ) as number\n\n    clipboardData.setData('text/plain', input.value.slice(selectionStart, selectionEnd))\n    clipboardData.setData('text/react-mentions', valueText.slice(markupStartIndex, markupEndIndex))\n  }\n\n  supportsClipboardActions(event: ClipboardEvent): boolean {\n    return !!event.clipboardData\n  }\n\n  handleCopy = (event: ClipboardEvent): void => {\n    if (event.target !== this.inputElement) {\n      return\n    }\n    if (!this.supportsClipboardActions(event)) {\n      return\n    }\n\n    event.preventDefault()\n\n    this.saveSelectionToClipboard(event)\n  }\n\n  handleCut = (event: ClipboardEvent): void => {\n    if (event.target !== this.inputElement) {\n      return\n    }\n    if (!this.supportsClipboardActions(event) || !event.clipboardData) {\n      return\n    }\n\n    event.preventDefault()\n\n    this.saveSelectionToClipboard(event)\n\n    const { selectionStart, selectionEnd } = this.state\n    const { value } = this.props\n    const valueText = value ?? ''\n\n    const safeSelectionStart = selectionStart ?? 0\n    const safeSelectionEnd = selectionEnd ?? safeSelectionStart\n\n    const markupStartIndex = mapPlainTextIndex(\n      valueText,\n      this.state.config,\n      safeSelectionStart,\n      'START'\n    ) as number\n    const markupEndIndex = mapPlainTextIndex(\n      valueText,\n      this.state.config,\n      safeSelectionEnd,\n      'END'\n    ) as number\n\n    const newValue = [valueText.slice(0, markupStartIndex), valueText.slice(markupEndIndex)].join(\n      ''\n    )\n    const {\n      mentions,\n      plainText: newPlainTextValue,\n      idValue: newIdValue,\n    } = getMentionsAndPlainText<Extra>(newValue, this.state.config)\n\n    this.setState({\n      selectionStart: safeSelectionStart,\n      selectionEnd: safeSelectionStart,\n      pendingSelectionUpdate: true,\n    })\n\n    this.executeOnChange(\n      { type: 'cut', nativeEvent: event },\n      newValue,\n      newPlainTextValue,\n      newIdValue,\n      mentions,\n      valueText\n    )\n  }\n\n  // Handle input element's change event\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  handleChange = (ev: ChangeEvent<InputElement>) => {\n    const native = ev.nativeEvent\n    if ('isComposing' in native && typeof native.isComposing === 'boolean') {\n      this._isComposing = native.isComposing\n    }\n    const value = this.props.value || ''\n\n    let newPlainTextValue = ev.target.value\n\n    let selectionStartBefore = this.state.selectionStart\n    if (selectionStartBefore === null) {\n      selectionStartBefore = ev.target.selectionStart ?? 0\n    }\n\n    let selectionEndBefore = this.state.selectionEnd\n    if (selectionEndBefore === null) {\n      selectionEndBefore = ev.target.selectionEnd ?? selectionStartBefore\n    }\n\n    // Derive the new value to set by applying the local change in the textarea's plain text\n    const newValue = applyChangeToValue(\n      value,\n      newPlainTextValue,\n      {\n        selectionStartBefore,\n        selectionEndBefore,\n        selectionEndAfter: ev.target.selectionEnd ?? selectionEndBefore,\n      },\n      this.state.config\n    )\n\n    // Recalculate derived representations against the updated markup\n    const {\n      mentions,\n      plainText: recalculatedPlainTextValue,\n      idValue: newIdValue,\n    } = getMentionsAndPlainText<Extra>(newValue, this.state.config)\n    newPlainTextValue = recalculatedPlainTextValue\n\n    // Save current selection after change to be able to restore caret position after rerendering\n    let selectionStart = ev.target.selectionStart ?? selectionStartBefore\n    let selectionEnd = ev.target.selectionEnd ?? selectionEndBefore\n    let shouldRestoreSelection = false\n    const nativeEvent = ev.nativeEvent as unknown as CompositionEvent<InputElement> & {\n      data?: string | null\n      isComposing?: boolean\n    }\n\n    // Adjust selection range in case a mention will be deleted by the characters outside of the\n    // selection range that are automatically deleted\n    const startOfMention = findStartOfMentionInPlainText(value, this.state.config, selectionStart)\n\n    if (\n      startOfMention !== undefined &&\n      this.state.selectionEnd !== null &&\n      this.state.selectionEnd > startOfMention\n    ) {\n      // only if a deletion has taken place\n      selectionStart = startOfMention + (nativeEvent.data ? nativeEvent.data.length : 0)\n      selectionEnd = selectionStart\n      shouldRestoreSelection = true\n    }\n\n    this.setState((prevState) => ({\n      selectionStart,\n      selectionEnd,\n      pendingSelectionUpdate: prevState.pendingSelectionUpdate || shouldRestoreSelection,\n    }))\n\n    if (nativeEvent.isComposing && selectionStart === selectionEnd && this.inputElement) {\n      this.updateMentionsQueries(this.inputElement.value, selectionStart)\n    }\n\n    // Propagate change\n    this.executeOnChange(\n      { type: 'input', nativeEvent: ev.nativeEvent },\n      newValue,\n      newPlainTextValue,\n      newIdValue,\n      mentions,\n      value\n    )\n\n    this.props.onChange?.(ev)\n\n    this.requestHighlighterScrollSync()\n  }\n\n  handleSelect = (ev: SyntheticEvent<InputElement>) => {\n    this.syncSelectionFromInput('select')\n    this.props.onSelect?.(ev)\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  private readonly syncSelectionFromInput = (\n    reason: 'select' | 'selectionchange' = 'selectionchange'\n  ): void => {\n    const input = this.inputElement\n    if (!input) {\n      return\n    }\n\n    if (reason === 'selectionchange') {\n      const ownerDocument = input.ownerDocument ?? document\n      if (ownerDocument.activeElement !== input) {\n        return\n      }\n    }\n\n    const selectionStart = input.selectionStart ?? null\n    const selectionEnd = input.selectionEnd ?? null\n    const selectionChanged =\n      selectionStart !== this.state.selectionStart || selectionEnd !== this.state.selectionEnd\n\n    if (selectionChanged) {\n      this.setState({\n        selectionStart,\n        selectionEnd,\n      })\n    }\n\n    if (this._isComposing) {\n      return\n    }\n\n    if (selectionStart !== null && selectionStart === selectionEnd) {\n      this.updateMentionsQueries(input.value, selectionStart)\n    } else {\n      this.clearSuggestions()\n    }\n\n    this.requestHighlighterScrollSync()\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  handleKeyDown = (ev: KeyboardEvent<InputElement>) => {\n    const inlineAutocomplete = this.isInlineAutocomplete()\n\n    if (inlineAutocomplete) {\n      const inlineSuggestion = this.getInlineSuggestionDetails()\n      if (!inlineSuggestion) {\n        this.props.onKeyDown?.(ev)\n        return\n      }\n\n      switch (ev.key) {\n        case KEY.ESC: {\n          const suggestionsCount = countSuggestions(this.state.suggestions)\n          if (suggestionsCount > 0) {\n            ev.preventDefault()\n            ev.stopPropagation()\n            this.shiftFocus(+1)\n            return\n          }\n          break\n        }\n        case KEY.RETURN:\n        case KEY.TAB:\n        case KEY.RIGHT: {\n          if ((ev.key === KEY.TAB && ev.shiftKey) || !this.canApplyInlineSuggestion()) {\n            break\n          }\n          ev.preventDefault()\n          ev.stopPropagation()\n          this.selectFocused()\n          return\n        }\n        default:\n      }\n\n      this.props.onKeyDown?.(ev)\n      return\n    }\n\n    // do not intercept key events if the suggestions overlay is not shown\n    const suggestionsCount = countSuggestions(this.state.suggestions)\n\n    if (suggestionsCount === 0 || !this.suggestionsElement) {\n      this.props.onKeyDown?.(ev)\n\n      return\n    }\n\n    if (suggestionHandledKeys.has(ev.key)) {\n      ev.preventDefault()\n      ev.stopPropagation()\n    }\n\n    switch (ev.key) {\n      case KEY.ESC: {\n        this.clearSuggestions()\n        return\n      }\n      case KEY.DOWN: {\n        this.shiftFocus(+1)\n        return\n      }\n      case KEY.UP: {\n        this.shiftFocus(-1)\n        return\n      }\n      case KEY.RETURN:\n      case KEY.TAB: {\n        this.selectFocused()\n        break\n      }\n      default:\n    }\n  }\n\n  shiftFocus = (delta: number) => {\n    const suggestionsCount = countSuggestions(this.state.suggestions)\n\n    if (suggestionsCount === 0) {\n      return\n    }\n\n    this.setState({\n      focusIndex: (suggestionsCount + this.state.focusIndex + delta) % suggestionsCount,\n      scrollFocusedIntoView: true,\n    })\n  }\n\n  selectFocused = () => {\n    const entry = this.getFocusedSuggestionEntry()\n    if (!entry) {\n      return\n    }\n\n    this.addMention(entry.result, entry.queryInfo)\n\n    this.setState({\n      focusIndex: 0,\n    })\n  }\n\n  handleBlur = (ev: ReactFocusEvent<InputElement>) => {\n    const clickedSuggestion = this._suggestionsMouseDown\n    this._suggestionsMouseDown = false\n\n    // only reset selection if the mousedown happened on an element\n    // other than the suggestions overlay\n    if (!clickedSuggestion) {\n      this.setState({\n        selectionStart: null,\n        selectionEnd: null,\n      })\n    }\n\n    this.requestHighlighterScrollSync()\n\n    this.props.onMentionBlur?.(ev, clickedSuggestion)\n    this.props.onBlur?.(ev)\n  }\n\n  handleSuggestionsMouseDown = (_ev: ReactMouseEvent) => {\n    this._suggestionsMouseDown = true\n  }\n\n  handleSuggestionsMouseEnter = (focusIndex: number) => {\n    this.setState({\n      focusIndex,\n      scrollFocusedIntoView: false,\n    })\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion, sonarjs/cognitive-complexity\n  updateSuggestionsPosition = (): void => {\n    const { caretPosition } = this.state\n    const { suggestionsPlacement = 'below' } = this.props\n    const anchorMode: MentionsInputAnchorMode = this.props.anchorMode ?? 'caret'\n    const anchorToLeft = anchorMode === 'left'\n    const resolvedPortalHost = this.resolvePortalHost()\n\n    const suggestions = this.suggestionsElement\n    const highlighter = this.highlighterElement\n    const container = this.containerElement\n\n    if (!caretPosition || !suggestions || !highlighter || !container) {\n      return\n    }\n\n    // first get viewport-relative position (highlighter is offsetParent of caret):\n    const caretOffsetParentRect = highlighter.getBoundingClientRect()\n    const caretHeight = getComputedStyleLengthProp(highlighter, 'font-size')\n    const viewportRelative = {\n      left: caretOffsetParentRect.left + (anchorToLeft ? 0 : caretPosition.left),\n      top: caretOffsetParentRect.top + caretPosition.top + caretHeight,\n    }\n    const viewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\n    const desiredWidth = highlighter.offsetWidth\n\n    const position: SuggestionsPosition = {}\n\n    // if suggestions menu is in a portal, update position to be relative to its portal node\n    if (resolvedPortalHost) {\n      const viewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\n      const width = Math.min(desiredWidth, viewportWidth)\n      position.width = width\n      position.position = 'fixed'\n      let { left, top } = viewportRelative\n      // absolute/fixed positioned elements are positioned according to their entire box including margins; so we remove margins here:\n      left -= getComputedStyleLengthProp(suggestions, 'margin-left')\n      top -= getComputedStyleLengthProp(suggestions, 'margin-top')\n      // take into account highlighter/textinput scrolling:\n      if (!anchorToLeft) {\n        left -= highlighter.scrollLeft\n      }\n      top -= highlighter.scrollTop\n      // guard for mentions suggestions list clipped by window edges\n      const maxLeft = Math.max(0, viewportWidth - width)\n      position.left = Math.min(maxLeft, Math.max(0, left))\n      const shouldShowAboveCaret =\n        suggestionsPlacement === 'above' ||\n        (suggestionsPlacement === 'auto' &&\n          top + suggestions.offsetHeight > viewportHeight &&\n          suggestions.offsetHeight < top - caretHeight)\n\n      // guard for mentions suggestions list clipped by the bottom edge of the window when using automatic placement.\n      position.top = shouldShowAboveCaret\n        ? Math.max(0, top - suggestions.offsetHeight - caretHeight)\n        : top\n    } else {\n      const containerWidth = container.offsetWidth\n      const width = Math.min(desiredWidth, containerWidth)\n      position.width = width\n      const left = anchorToLeft ? 0 : caretPosition.left - highlighter.scrollLeft\n      const top = caretPosition.top - highlighter.scrollTop\n      // guard for mentions suggestions list clipped by right edge of window\n      if (anchorToLeft) {\n        position.left = 0\n      } else if (left + width > containerWidth) {\n        position.right = 0\n      } else {\n        position.left = left\n      }\n      const shouldShowAboveCaret =\n        suggestionsPlacement === 'above' ||\n        (suggestionsPlacement === 'auto' &&\n          viewportRelative.top - highlighter.scrollTop + suggestions.offsetHeight >\n            viewportHeight &&\n          suggestions.offsetHeight <\n            caretOffsetParentRect.top - caretHeight - highlighter.scrollTop)\n\n      // guard for mentions suggestions list clipped by the bottom edge of the container when using automatic placement.\n      position.top = shouldShowAboveCaret ? top - suggestions.offsetHeight - caretHeight : top\n    }\n\n    if (\n      position.left === this.state.suggestionsPosition.left &&\n      position.top === this.state.suggestionsPosition.top &&\n      position.position === this.state.suggestionsPosition.position &&\n      position.width === this.state.suggestionsPosition.width &&\n      position.right === this.state.suggestionsPosition.right\n    ) {\n      return\n    }\n    this.setState({\n      suggestionsPosition: position,\n    })\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  updateHighlighterScroll = (): void => {\n    const input = this.inputElement\n    const highlighter = this.highlighterElement\n    if (!input || !highlighter) {\n      // since the invocation of this function is deferred,\n      // the whole component may have been unmounted in the meanwhile\n      return\n    }\n\n    const nextScrollLeft = input.scrollLeft\n    const nextScrollTop = input.scrollTop\n    const prevScrollLeft = highlighter.scrollLeft\n    const prevScrollTop = highlighter.scrollTop\n\n    if (prevScrollLeft !== nextScrollLeft) {\n      highlighter.scrollLeft = nextScrollLeft\n    }\n    if (prevScrollTop !== nextScrollTop) {\n      highlighter.scrollTop = nextScrollTop\n    }\n    const inputHeight = input.clientHeight\n    let heightChanged = false\n    if (inputHeight) {\n      const nextHeight = `${inputHeight}px`\n      if (highlighter.style.height !== nextHeight) {\n        highlighter.style.height = nextHeight\n        heightChanged = true\n      }\n    }\n\n    const typographyUpdated = mirrorInputTypographicStyles(input, highlighter)\n\n    if (\n      prevScrollLeft !== nextScrollLeft ||\n      prevScrollTop !== nextScrollTop ||\n      heightChanged ||\n      typographyUpdated\n    ) {\n      this.scheduleHighlighterRecompute()\n    }\n  }\n\n  private readonly requestHighlighterScrollSync = (): void => {\n    // This first updateHighlighterScroll() call keeps the overlay in sync immediately,\n    // so any work done later in the same tick—like scheduleHighlighterRecompute() triggered by\n    // updateHighlighterScroll() or updateSuggestionsPosition() reads the up-to-date scroll and height.\n    this.updateHighlighterScroll()\n\n    if (globalThis.window === undefined) {\n      return\n    }\n\n    if (this._scrollSyncFrame !== null) {\n      globalThis.cancelAnimationFrame(this._scrollSyncFrame)\n      this._scrollSyncFrame = null\n    }\n\n    this._scrollSyncFrame = globalThis.requestAnimationFrame(() => {\n      this._scrollSyncFrame = null\n      // This second updateHighlighterScroll() call picks up any DOM adjustments that happen once\n      // the browser has painted (e.g., layout shifts from the just-updated input).\n      // Dropping either updateHighlighterScroll call introduces a one-frame visual lag (removing the first)\n      // or risks missing a final adjustment after the frame (removing the second)\n      this.updateHighlighterScroll()\n    })\n  }\n\n  handleDocumentScroll = (): void => {\n    if (this._isScrolling || !this.suggestionsElement) {\n      return\n    }\n\n    this._isScrolling = true\n    globalThis.requestAnimationFrame(() => {\n      this.updateSuggestionsPosition()\n      this._isScrolling = false\n    })\n  }\n\n  handleDocumentSelectionChange = (): void => {\n    this.syncSelectionFromInput('selectionchange')\n  }\n\n  handleCompositionStart = (): void => {\n    this._isComposing = true\n  }\n\n  handleCompositionEnd = (): void => {\n    this._isComposing = false\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  setSelection = (selectionStart: number | null, selectionEnd: number | null): void => {\n    if (selectionStart === null || selectionEnd === null) {\n      return\n    }\n\n    const el = this.inputElement\n    if (!el) {\n      return\n    }\n    let selectionApplied = false\n    if (el.setSelectionRange) {\n      el.setSelectionRange(selectionStart, selectionEnd)\n      selectionApplied = true\n    } else if ('createTextRange' in el) {\n      const range = (\n        el as unknown as {\n          createTextRange: () => {\n            collapse: (val: boolean) => void\n            moveEnd: (unit: string, value: number) => void\n            moveStart: (unit: string, value: number) => void\n            select: () => void\n          }\n        }\n      ).createTextRange()\n      range.collapse(true)\n      range.moveEnd('character', selectionEnd)\n      range.moveStart('character', selectionStart)\n      range.select()\n      selectionApplied = true\n    }\n    if (selectionApplied) {\n      this.requestHighlighterScrollSync()\n    }\n  }\n\n  updateMentionsQueries = (plainTextValue: string, caretPosition: number): void => {\n    // Invalidate previous queries. Async results for previous queries will be neglected.\n    this._queryId++\n    this.suggestions = {}\n    this.setState({\n      suggestions: {},\n    })\n\n    const value = this.props.value ?? ''\n    const { children } = this.props\n\n    const positionInValue = mapPlainTextIndex(value, this.state.config, caretPosition, 'NULL')\n\n    // If caret is inside of mention, do not query\n    if (positionInValue === null || positionInValue === undefined) {\n      return\n    }\n\n    // Extract substring in between the end of the previous mention and the caret\n    const substringStartIndex = getEndOfLastMention(\n      value.slice(0, Math.max(0, positionInValue)),\n      this.state.config\n    )\n    const substring = plainTextValue.slice(substringStartIndex, caretPosition)\n\n    // Check if suggestions have to be shown:\n    // Match the trigger patterns of all Mention children on the extracted substring\n    // eslint-disable-next-line code-complete/low-function-cohesion\n    React.Children.forEach(children, (child, childIndex) => {\n      if (!isMentionElement(child)) {\n        return\n      }\n      const triggerProp = child.props.trigger ?? '@'\n      const regex = resolveTriggerRegex(triggerProp)\n      const match = substring.match(regex)\n      if (match?.[1] !== undefined && match[2] !== undefined) {\n        const querySequenceStart = substringStartIndex + substring.indexOf(match[1], match.index)\n        const dataSource = child.props.data\n        const provideData = getDataProvider<Extra>(dataSource, regex.flags.includes('u'))\n        const resultPromise = provideData(match[2])\n        void this.updateSuggestions(\n          this._queryId,\n          childIndex,\n          match[2],\n          querySequenceStart,\n          querySequenceStart + match[1].length,\n          resultPromise\n        )\n      }\n    })\n  }\n\n  clearSuggestions = () => {\n    // Invalidate previous queries. Async results for previous queries will be neglected.\n    this._queryId++\n    this.suggestions = {}\n    this.setState({\n      suggestions: {},\n      focusIndex: 0,\n    })\n  }\n\n  updateSuggestions = async (\n    queryId: number,\n    childIndex: number,\n    query: string,\n    querySequenceStart: number,\n    querySequenceEnd: number,\n    results: MentionDataItem<Extra>[] | Promise<MentionDataItem<Extra>[]>\n  ): Promise<void> => {\n    if (queryId !== this._queryId) {\n      // neglect async results from previous queries\n      return\n    }\n    const data: MentionDataItem<Extra>[] = await Promise.resolve(results)\n    // save in property so that multiple sync state updates from different mentions sources\n    // won't overwrite each other\n    const queryInfo: QueryInfo = {\n      childIndex,\n      query,\n      querySequenceStart,\n      querySequenceEnd,\n    }\n\n    this.suggestions = {\n      ...this.suggestions,\n      [childIndex]: {\n        queryInfo,\n        results: data,\n      },\n    }\n\n    const { focusIndex } = this.state\n    const suggestionsCount = countSuggestions(this.suggestions)\n    const nextFocusIndex = this.isInlineAutocomplete()\n      ? 0\n      : focusIndex >= suggestionsCount\n        ? Math.max(suggestionsCount - 1, 0)\n        : focusIndex\n    this.setState({\n      suggestions: this.suggestions,\n      focusIndex: nextFocusIndex,\n    })\n  }\n\n  // eslint-disable-next-line code-complete/low-function-cohesion\n  addMention = (\n    suggestion: SuggestionDataItem<Extra>,\n    { childIndex, querySequenceStart, querySequenceEnd }: QueryInfo\n  ): void => {\n    const { id, display } = this.getSuggestionData(suggestion)\n    // Insert mention in the marked up value at the correct position\n    const value = this.props.value || ''\n    const mentionsChild = Children.toArray(this.props.children)[childIndex]\n    if (!React.isValidElement<MentionComponentProps<Extra>>(mentionsChild)) {\n      return\n    }\n    const {\n      serializer,\n      displayTransform = DEFAULT_MENTION_PROPS.displayTransform,\n      appendSpaceOnAdd = DEFAULT_MENTION_PROPS.appendSpaceOnAdd,\n      onAdd = DEFAULT_MENTION_PROPS.onAdd,\n    } = this.state.config[childIndex]\n\n    const start = mapPlainTextIndex(value, this.state.config, querySequenceStart, 'START') as number\n    const end = start + querySequenceEnd - querySequenceStart\n\n    const mentionDisplay = display\n    let insert = serializer.insert({ id, display: mentionDisplay })\n\n    if (appendSpaceOnAdd) {\n      insert += ' '\n    }\n    const newValue = spliceString(value, start, end, insert)\n\n    // Refocus input and set caret position to end of mention\n    this.inputElement?.focus()\n\n    let displayValue = displayTransform(id, mentionDisplay)\n    if (appendSpaceOnAdd) {\n      displayValue += ' '\n    }\n    const newCaretPosition = querySequenceStart + displayValue.length\n    this.setState({\n      selectionStart: newCaretPosition,\n      selectionEnd: newCaretPosition,\n      pendingSelectionUpdate: true,\n    })\n\n    // Propagate change\n    const {\n      mentions,\n      plainText: newPlainTextValue,\n      idValue: newIdValue,\n    } = getMentionsAndPlainText<Extra>(newValue, this.state.config)\n\n    this.executeOnChange(\n      { type: 'mention-add' },\n      newValue,\n      newPlainTextValue,\n      newIdValue,\n      mentions,\n      value,\n      id\n    )\n\n    if (onAdd !== undefined) {\n      onAdd({\n        id,\n        display: mentionDisplay,\n        startPos: start,\n        endPos: end,\n        serializerId: serializer.id,\n      })\n    }\n\n    // Make sure the suggestions overlay is closed\n    this.clearSuggestions()\n  }\n\n  isLoading = (): boolean => {\n    let loading = false\n    React.Children.forEach(this.props.children, (child) => {\n      if (!isMentionElement(child)) {\n        return\n      }\n      loading = loading || Boolean(child.props.isLoading)\n    })\n    return loading\n  }\n\n  isOpened = (): boolean =>\n    isNumber(this.state.selectionStart) &&\n    (countSuggestions(this.state.suggestions) !== 0 || this.isLoading())\n}\n\n/**\n * Returns the computed length property value for the provided element.\n * Note: According to spec and testing, can count on length values coming back in pixels. See https://developer.mozilla.org/en-US/docs/Web/CSS/used_value#Difference_from_computed_value\n */\nconst getComputedStyleLengthProp = (forElement: Element, propertyName: string): number => {\n  const view = forElement.ownerDocument.defaultView ?? globalThis\n  const length = Number.parseFloat(\n    view.getComputedStyle(forElement, null).getPropertyValue(propertyName)\n  )\n  return Number.isFinite(length) ? length : 0\n}\n\nconst isMobileSafari = (): boolean =>\n  typeof navigator !== 'undefined' && /iphone|ipad|ipod/i.test(navigator.userAgent)\n\ninterface MeasurementBridgeProps {\n  readonly container: HTMLDivElement | null\n  readonly highlighter: HTMLDivElement | null\n  readonly input: InputElement | null\n  readonly suggestions: HTMLDivElement | null\n  readonly onSyncScroll: () => void\n  readonly onUpdateSuggestionsPosition: () => void\n}\n\nconst MeasurementBridge = ({\n  container,\n  highlighter,\n  input,\n  suggestions,\n  onSyncScroll,\n  onUpdateSuggestionsPosition,\n}: MeasurementBridgeProps) => {\n  const updateSuggestions = useEffectEvent(() => {\n    onUpdateSuggestionsPosition()\n  })\n\n  const syncScroll = useEffectEvent(() => {\n    onSyncScroll()\n  })\n\n  const updateAll = useEffectEvent(() => {\n    updateSuggestions()\n    syncScroll()\n  })\n\n  const observe = useEffectEvent((element: Element | null, callback: () => void) => {\n    if (!element || typeof ResizeObserver === 'undefined') {\n      return undefined\n    }\n\n    const observer = new ResizeObserver(() => {\n      callback()\n    })\n    observer.observe(element)\n    return () => {\n      observer.disconnect()\n    }\n  })\n\n  useLayoutEffect(() => {\n    updateAll()\n  }, [])\n\n  useLayoutEffect(() => observe(container, updateAll), [container])\n  useLayoutEffect(() => observe(highlighter, updateAll), [highlighter])\n  useLayoutEffect(() => observe(input, updateAll), [input])\n  useLayoutEffect(() => observe(suggestions, updateSuggestions), [suggestions])\n\n  useLayoutEffect(() => {\n    if (globalThis.window === undefined) {\n      return undefined\n    }\n\n    const handleViewportChange = () => {\n      updateAll()\n    }\n\n    window.addEventListener('resize', handleViewportChange)\n    globalThis.addEventListener('orientationchange', handleViewportChange)\n\n    return () => {\n      window.removeEventListener('resize', handleViewportChange)\n      globalThis.removeEventListener('orientationchange', handleViewportChange)\n    }\n  }, [])\n\n  useLayoutEffect(() => {\n    if (!input) {\n      return undefined\n    }\n\n    const handleScroll = () => {\n      syncScroll()\n      updateSuggestions()\n    }\n\n    input.addEventListener('scroll', handleScroll, { passive: true })\n    return () => {\n      input.removeEventListener('scroll', handleScroll)\n    }\n  }, [input])\n\n  return null\n}\n\nconst TYPOGRAPHIC_STYLE_PROPS = [\n  'font-family',\n  'font-size',\n  'font-style',\n  'font-variant',\n  'font-weight',\n  'font-stretch',\n  'font-feature-settings',\n  'font-variation-settings',\n  'letter-spacing',\n  'line-height',\n  'text-transform',\n  'text-indent',\n  'text-align',\n  'word-spacing',\n] as const\n\n// eslint-disable-next-line code-complete/low-function-cohesion\nconst mirrorInputTypographicStyles = (\n  input: InputElement,\n  highlighter: HTMLDivElement\n): boolean => {\n  if (typeof globalThis.getComputedStyle !== 'function') {\n    return false\n  }\n\n  const computed = globalThis.getComputedStyle(input)\n  let didUpdate = false\n\n  for (const property of TYPOGRAPHIC_STYLE_PROPS) {\n    const nextValue =\n      typeof computed.getPropertyValue === 'function'\n        ? computed.getPropertyValue(property)\n        : // Older JSDOM mocks may not include getPropertyValue; best-effort fallback\n          ((computed as unknown as Record<string, string | undefined>)[property] ?? '')\n    if (nextValue && highlighter.style.getPropertyValue(property) !== nextValue) {\n      highlighter.style.setProperty(property, nextValue)\n      didUpdate = true\n    }\n  }\n\n  return didUpdate\n}\n\nexport default MentionsInput\n","import type { CSSProperties } from 'react'\nimport cn from './utils/cn'\nimport type { MentionComponentProps } from './types'\n\nexport interface MentionProps<Extra extends Record<string, unknown> = Record<string, unknown>>\n  extends MentionComponentProps<Extra> {\n  readonly display?: string\n  readonly className?: string\n  readonly style?: CSSProperties\n}\n\nconst mentionBaseClass = 'rounded-md bg-primary/20'\n\nconst mentionsRequiredClass =\n  'inline [font-family:inherit] [font-size:inherit] [letter-spacing:inherit] [font-weight:inherit] text-transparent p-0'\n\nexport default function Mention<Extra extends Record<string, unknown> = Record<string, unknown>>({\n  display,\n  className,\n  style,\n  selectionState,\n}: MentionProps<Extra>) {\n  return (\n    <span\n      className={cn(mentionBaseClass, className, mentionsRequiredClass)}\n      style={style}\n      data-mention-selection={selectionState ?? undefined}\n    >\n      {display}\n    </span>\n  )\n}\n"]}