UNPKG

@grafana/ui

Version:
1 lines 2.96 kB
{"version":3,"file":"PartialHighlighter.mjs","sources":["../../../../src/components/Typeahead/PartialHighlighter.tsx"],"sourcesContent":["import { createElement } from 'react';\n\nimport { HighlightPart } from '../../types/completion';\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;;;;"}