{"version":3,"file":"PartialHighlighter.mjs","sources":["../../../../src/components/Typeahead/PartialHighlighter.tsx"],"sourcesContent":["import { createElement } from 'react';\n\nimport { HighlightPart } from '../../types';\n\ninterface Props {\n  text: string;\n  highlightParts: HighlightPart[];\n  highlightClassName: string;\n}\n\n/**\n * Flattens parts into a list of indices pointing to the index where a part\n * (highlighted or not highlighted) starts. Adds extra indices if needed\n * at the beginning or the end to ensure the entire text is covered.\n */\nfunction getStartIndices(parts: HighlightPart[], length: number): number[] {\n  const indices: number[] = [];\n  parts.forEach((part) => {\n    indices.push(part.start, part.end + 1);\n  });\n  if (indices[0] !== 0) {\n    indices.unshift(0);\n  }\n  if (indices[indices.length - 1] !== length) {\n    indices.push(length);\n  }\n  return indices;\n}\n\nexport const PartialHighlighter = (props: Props) => {\n  let { highlightParts, text, highlightClassName } = props;\n\n  if (!highlightParts?.length) {\n    return null;\n  }\n\n  let children = [];\n  let indices = getStartIndices(highlightParts, text.length);\n  let highlighted = highlightParts[0].start === 0;\n\n  for (let i = 1; i < indices.length; i++) {\n    let start = indices[i - 1];\n    let end = indices[i];\n\n    children.push(\n      createElement(\n        highlighted ? 'mark' : 'span',\n        {\n          key: i - 1,\n          className: highlighted ? highlightClassName : undefined,\n        },\n        text.substring(start, end)\n      )\n    );\n    highlighted = !highlighted;\n  }\n\n  return <div>{children}</div>;\n};\n"],"names":[],"mappings":";;;AAeA,SAAS,eAAA,CAAgB,OAAwB,MAA0B,EAAA;AACzE,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAM,KAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACtB,IAAA,OAAA,CAAQ,IAAK,CAAA,IAAA,CAAK,KAAO,EAAA,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,GACtC,CAAA;AACD,EAAI,IAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAG,EAAA;AACpB,IAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA;AAEnB,EAAA,IAAI,OAAQ,CAAA,OAAA,CAAQ,MAAS,GAAA,CAAC,MAAM,MAAQ,EAAA;AAC1C,IAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA;AAErB,EAAO,OAAA,OAAA;AACT;AAEa,MAAA,kBAAA,GAAqB,CAAC,KAAiB,KAAA;AAClD,EAAA,IAAI,EAAE,cAAA,EAAgB,IAAM,EAAA,kBAAA,EAAuB,GAAA,KAAA;AAEnD,EAAI,IAAA,EAAC,iDAAgB,MAAQ,CAAA,EAAA;AAC3B,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,IAAI,WAAW,EAAC;AAChB,EAAA,IAAI,OAAU,GAAA,eAAA,CAAgB,cAAgB,EAAA,IAAA,CAAK,MAAM,CAAA;AACzD,EAAA,IAAI,WAAc,GAAA,cAAA,CAAe,CAAC,CAAA,CAAE,KAAU,KAAA,CAAA;AAE9C,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AACvC,IAAI,IAAA,KAAA,GAAQ,OAAQ,CAAA,CAAA,GAAI,CAAC,CAAA;AACzB,IAAI,IAAA,GAAA,GAAM,QAAQ,CAAC,CAAA;AAEnB,IAAS,QAAA,CAAA,IAAA;AAAA,MACP,aAAA;AAAA,QACE,cAAc,MAAS,GAAA,MAAA;AAAA,QACvB;AAAA,UACE,KAAK,CAAI,GAAA,CAAA;AAAA,UACT,SAAA,EAAW,cAAc,kBAAqB,GAAA,KAAA;AAAA,SAChD;AAAA,QACA,IAAA,CAAK,SAAU,CAAA,KAAA,EAAO,GAAG;AAAA;AAC3B,KACF;AACA,IAAA,WAAA,GAAc,CAAC,WAAA;AAAA;AAGjB,EAAO,uBAAA,GAAA,CAAC,SAAK,QAAS,EAAA,CAAA;AACxB;;;;"}