В CdsAutocomplete, CdsCombobox и CdsSelect подсветка совпадений уже встроена — отдельный
CdsHighlightтам не нужен. Для постоянной метки рядом с текстом возьмите CdsTag, для счётчика — CdsBadge.
Вариации
Поисковый запрос
Свойство text принимает исходную строку, query — то, что искал пользователь. Запрос может быть строкой или массивом терминов: подсветятся все из них.
Все вхождения
По умолчанию подсвечивается первое вхождение каждого термина. Свойство match-all подсвечивает все — в длинном тексте так видно полную картину.
Регистр
Свойство ignore-case ищет совпадения без учёта регистра. Оно нужно почти всегда, когда запрос набирает пользователь.
Готовые диапазоны
Когда совпадения ищет не браузер, а сервер, передайте их в matches — массив пар [start, end] по индексам исходной строки. Диапазоны имеют приоритет над query, пересекающиеся объединяются автоматически.
Цвет и плотность
Свойство color задаёт цвет подсветки — им же тонируется фон, поэтому достаточно одного значения. opacity меняет плотность фона.
Разметка
Свойство tag задаёт тег обёртки (по умолчанию span), mark-class добавляет свой класс каждому совпадению.
Рекомендации
Сценарии использования
Поиск по списку
Один и тот же запрос фильтрует список и подсвечивает совпадения в найденных строках. match-all и ignore-case держат подсветку и фильтр согласованными: раз строка попала в выдачу, совпадение в ней видно.
Запрос из нескольких слов
Разбейте введённую фразу на слова и передайте массивом в query — компонент подсветит каждое слово по отдельности, даже если в тексте они стоят далеко друг от друга.
Совпадения с сервера
Полнотекстовый поиск на бэкенде уже знает, какие фрагменты считать совпадениями: он учитывает морфологию, синонимы и опечатки. Отдайте эти диапазоны в matches — клиент ничего не будет искать заново.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
color | string | undefined | — | Цвет текста подсветки. |
ignoreCase | boolean | undefined | — | Игнорировать регистр при поиске по query. |
markClass | string | undefined | — | Дополнительный CSS-класс для элемента <mark>. |
matchAll | boolean | undefined | — | Подсвечивать все вхождения, а не только первое. |
matches | readonly MatchRange[] | undefined | — | Готовые диапазоны совпадений [start, end]. Имеют приоритет над query. |
opacity | string | number | undefined | — | Прозрачность фона подсветки (CSS-переменная --cds-highlight-opacity). |
query | string | string[] | undefined | — | Поисковый запрос: строка или массив строк-терминов. |
tag | string | JSXComponent<any> | undefined | 'span' | Пользовательский HTML-тег для отображения |
text | string | undefined | '' | Текст, в котором выполняется подсветка. |