Data retention
Records are kept for the retention period set by each workspace and deleted when it ends.
Marks what was typed inside a search result, so the eye lands on why each row matched. The search lists use it on their own; reach for it directly in custom rows and find-in-text.
# One-time setup (tokens + lib helpers)
npx koalaui-cli@latest init
# Add this component (its dependencies come along)
npx koalaui-cli@latest add highlight-matchimport { HighlightMatch } from "@/components/ui/highlight-match"
export function Example() {
return <HighlightMatch query="head">Page header</HighlightMatch>
}import { HighlightMatch } from "@/components/ui/highlight-match"
<HighlightMatch query="…">Text to search in</HighlightMatch>Command, Combobox, Autocomplete and Select Search mark the plain text of every row as you type. Icons, shortcuts and badges pass through untouched. Matching folds accents and case the way the filters do, so co finds Córdoba and zu finds Zürich. Turn it off with highlightMatches={false}.
Only a row's top-level text is marked for you. When the label sits inside its own markup, wrap it in a bare <HighlightMatch>: it reads the query from the list around it, secondary lines included.
The same layer works over prose and over headings that are already bold, and keeps its rounding when a match wraps onto the next line. Pass the query yourself when there is no search list around it.
Records are kept for the retention period set by each workspace and deleted when it ends.
Members can request a copy of the records held about them at any time, free of charge.
Deleting a workspace removes its records after a thirty day grace period.
Splits its text around every match and wraps each one in a native <mark>. Accepts className, merged last onto each mark.
| Prop | Type | Default | Description |
|---|---|---|---|
| children | string | number | - | The text to search in. Anything else renders untouched. |
| query | string | - | What was typed. Defaults to the query of the Command, Combobox or Select Search around it. Each word is matched on its own; accents and case are ignored. |
| variant | "fill" | "weight" | "fill" | fill lays a faint ink layer behind the match and keeps the weight, so nothing reflows as you type. weight sets it in semibold full ink with no layer, for a surface that can't take another fill. |
The search lists mark their rows' text with no extra code.
| Prop | Type | Default | Description |
|---|---|---|---|
| highlightMatches | boolean | true | Marks the query in each row's top-level text. A row that nests its label marks it with a bare <HighlightMatch>. |
(text, query) => [start, end][]. The merged ranges HighlightMatch draws, for a renderer of your own (a canvas, a virtualized grid cell).