teqo-backup/src/components/campaign/speech/SpeechRefineSearchButton.tsx
Francisco Solla 45eef25b1a feat(C192): busca semântica no acervo de falas (Closes #1147)
Modo "Por tema" no acervo de falas: expansão determinística do tema via
DeepSeek (generateObject, timeout, fallback null) alimenta o motor lexical
existente (searchText/keywords OR), mantendo facetas AND, paginação por fala,
o OR de cortes do C174 e o access control intacto. Resultado de tema mostra
selo e "Por que apareceu" com trecho real (frase contínua), sem score;
degradação honesta para termo exato com aviso e vazio honesto com saídas.

- URL: mode=tema (default omitido; canonicaliza sem q), seletor otimista
- ai/expandSpeechSearchTheme + lib/speechThemeTerms (sanitiza saída do modelo)
- view model com themeMatchTerm + espelho speechMatchesSearchTerm
- UI do card de tema (selos, proveniência, ações) e aviso degradado
- sem migration/Consent/exposição pública; gate de leitura inalterado
- testes unit/int/e2e; design hi-fi estendido e certificado pelo designer
2026-09-18 17:48:28 -03:00

21 lines
573 B
TypeScript

'use client'
import { Button } from '@/components/ui/button'
import { SPEECH_OMNIBOX_ID } from '@/utilities/speech/speechOmnibox'
/** C192 — the honest empty state's "reformulate" exit: focuses the omnibox. */
export const SpeechRefineSearchButton = () => (
<Button
type="button"
className="min-h-11"
onClick={() => {
const input = document.getElementById(SPEECH_OMNIBOX_ID)
if (input instanceof HTMLInputElement) {
input.scrollIntoView({ block: 'nearest' })
input.focus()
}
}}
>
Reformular busca
</Button>
)