@grafana/ui
Version:
Grafana Components Library
1 lines • 2.99 kB
Source Map (JSON)
{"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,MAAA,EAA0B;AACzE,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,IAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EACvC,CAAC,CAAA;AACD,EAAA,IAAI,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,EAAG;AACpB,IAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,EACnB;AACA,EAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,MAAM,MAAA,EAAQ;AAC1C,IAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,OAAA;AACT;AAEO,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAiB;AAClD,EAAA,IAAI,EAAE,cAAA,EAAgB,IAAA,EAAM,kBAAA,EAAmB,GAAI,KAAA;AAEnD,EAAA,IAAI,EAAC,iDAAgB,MAAA,CAAA,EAAQ;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAW,EAAC;AAChB,EAAA,IAAI,OAAA,GAAU,eAAA,CAAgB,cAAA,EAAgB,IAAA,CAAK,MAAM,CAAA;AACzD,EAAA,IAAI,WAAA,GAAc,cAAA,CAAe,CAAC,CAAA,CAAE,KAAA,KAAU,CAAA;AAE9C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,IAAI,KAAA,GAAQ,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA;AACzB,IAAA,IAAI,GAAA,GAAM,QAAQ,CAAC,CAAA;AAEnB,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,aAAA;AAAA,QACE,cAAc,MAAA,GAAS,MAAA;AAAA,QACvB;AAAA,UACE,KAAK,CAAA,GAAI,CAAA;AAAA,UACT,SAAA,EAAW,cAAc,kBAAA,GAAqB,KAAA;AAAA,SAChD;AAAA,QACA,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,GAAG;AAAA;AAC3B,KACF;AACA,IAAA,WAAA,GAAc,CAAC,WAAA;AAAA,EACjB;AAEA,EAAA,uBAAO,GAAA,CAAC,SAAK,QAAA,EAAS,CAAA;AACxB;;;;"}