feat: add suggestion chips to empty chat state

Clickable example prompts appear when a session has no messages,
giving users quick-start ideas. 2x2 grid on desktop, stacked on mobile.
Fully i18n'd (EN/FR).
This commit is contained in:
Nicolas Varrot
2026-02-13 23:55:26 +00:00
parent f46d233553
commit 0bf25f40a9
2 changed files with 28 additions and 1 deletions

View File

@@ -3,7 +3,7 @@ import { ChatMessageComponent } from './ChatMessage';
import { ChatInput } from './ChatInput';
import { TypingIndicator } from './TypingIndicator';
import type { ChatMessage, ConnectionStatus } from '../types';
import { Bot, ArrowDown, Loader2, ChevronsDownUp, ChevronsUpDown } from 'lucide-react';
import { Bot, ArrowDown, Loader2, ChevronsDownUp, ChevronsUpDown, Sparkles } from 'lucide-react';
import { MessageSearch } from './MessageSearch';
import { useT } from '../hooks/useLocale';
import { getLocale, type TranslationKey } from '../lib/i18n';
@@ -248,6 +248,23 @@ export function Chat({ messages, isGenerating, isLoadingHistory, status, session
</div>
<div className="text-lg text-pc-text font-semibold">{t('chat.welcome')}</div>
<div className="text-sm mt-1 text-pc-text-muted">{t('chat.welcomeSub')}</div>
<div className="mt-8 flex flex-col items-center gap-3 max-w-md w-full">
<div className="flex items-center gap-1.5 text-xs text-pc-text-faint">
<Sparkles size={12} />
<span>{t('chat.suggestions')}</span>
</div>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-2 w-full">
{(['chat.suggestion1', 'chat.suggestion2', 'chat.suggestion3', 'chat.suggestion4'] as const).map((key) => (
<button
key={key}
onClick={() => onSend(t(key))}
className="text-left text-sm px-4 py-3 rounded-2xl border border-pc-border bg-pc-elevated/30 text-pc-text-secondary hover:bg-[var(--pc-hover)] hover:text-pc-text hover:border-[var(--pc-accent-dim)] transition-all duration-200 leading-snug"
>
{t(key)}
</button>
))}
</div>
</div>
</div>
)}
{visibleMessages.map(({ msg, showSep, isFirstInGroup }) => {

View File

@@ -34,6 +34,11 @@ const en = {
// Chat
'chat.welcome': 'PinchChat',
'chat.welcomeSub': 'Send a message to get started',
'chat.suggestions': 'Try asking...',
'chat.suggestion1': 'Summarize my recent emails',
'chat.suggestion2': "What's on my calendar today?",
'chat.suggestion3': 'Search the web for latest news',
'chat.suggestion4': 'Help me write a script',
'chat.loadingHistory': 'Loading messages…',
'chat.inputPlaceholder': 'Type a message…',
'chat.inputLabel': 'Message',
@@ -158,6 +163,11 @@ const fr: Record<keyof typeof en, string> = {
'chat.welcome': 'PinchChat',
'chat.welcomeSub': 'Envoyez un message pour commencer',
'chat.suggestions': 'Essayez par exemple...',
'chat.suggestion1': 'Résume mes derniers emails',
'chat.suggestion2': "Qu'est-ce que j'ai au calendrier aujourd'hui ?",
'chat.suggestion3': 'Cherche sur le web les dernières actus',
'chat.suggestion4': "Aide-moi à écrire un script",
'chat.loadingHistory': 'Chargement des messages…',
'chat.inputPlaceholder': 'Tapez un message…',
'chat.inputLabel': 'Message',