@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
27 lines (26 loc) • 1.12 kB
JavaScript
"use client";
//#region packages/@mantine/core/src/components/Highlight/highlighter/highlighter.ts
function escapeRegex(value) {
return value.replace(/[-[\]{}()*+?.,\\^$|#]/g, "\\$&");
}
function highlighter(value, _highlight, options = {}) {
if (_highlight == null) return [{
chunk: value,
highlighted: false
}];
const highlight = Array.isArray(_highlight) ? _highlight.map(escapeRegex) : escapeRegex(_highlight);
if (!(Array.isArray(highlight) ? highlight.filter((part) => part.trim().length > 0).length > 0 : highlight.trim() !== "")) return [{
chunk: value,
highlighted: false
}];
const matcher = typeof highlight === "string" ? highlight.trim() : highlight.filter((part) => part.trim().length !== 0).map((part) => part.trim()).sort((a, b) => b.length - a.length).join("|");
const pattern = options.wholeWord ? `\\b(${matcher})\\b` : `(${matcher})`;
const re = new RegExp(pattern, "gi");
return value.split(re).map((part, index) => ({
chunk: part,
highlighted: index % 2 === 1
})).filter(({ chunk }) => chunk);
}
//#endregion
export { highlighter };
//# sourceMappingURL=highlighter.mjs.map