Use shorter 'FAQ' prefix for search results instead of full
'Telegram FAQ' that's used for the main FAQ button label.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Now FAQ entries appear in filtered search results when the query
matches, not just when query is empty. Uses same button cache and
first-letter index for both settings and FAQ entries.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build search index once when the section is created instead
of recomputing on every query. Use first-letter lookup for
O(1) candidate filtering, following the pattern from theme
editor's searchByQuery implementation.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use the stepDataReference mechanism to save and restore the
search query when navigating from results to a section and back.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use TextUtilities::PrepareSearchWords() to normalize query and
entry text: split into words, remove accents, and lowercase.
Match by word prefix: each query word must match at least one
entry word by startsWith().
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
SearchEntry now has an optional `deeplink` field. When set, clicking
the search result activates the deeplink URL instead of navigating.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The custom build method in Main::setupContent() was missing the
HighlightRegistry setup, so widgets added via builder.add() with
search entries weren't being registered for highlighting.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
sectionPath() was starting with parentId instead of the section itself,
causing subtitles to skip the section name the entry belongs to.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>