feat: collapsible long assistant messages with show more/less toggle

Long assistant messages (>3000 chars) are now collapsed to 400px with a
gradient fade-out and a 'Show more' button. Clicking it reveals the full
message with a 'Show less' button to re-collapse. Streaming messages are
never collapsed. Fully i18n'd (8 languages).
This commit is contained in:
Nicolas Varrot
2026-02-15 06:03:38 +00:00
parent 9bedaba289
commit 578c0d2a47
2 changed files with 78 additions and 7 deletions

View File

@@ -91,6 +91,8 @@ const en = {
'message.copy': 'Copy message',
'message.copied': 'Copied!',
'message.retry': 'Resend message',
'message.showMore': 'Show more',
'message.showLess': 'Show less',
'message.metadata': 'Message details',
'message.rawJson': 'Raw JSON',
'message.hideRawJson': 'Hide raw JSON',
@@ -255,6 +257,8 @@ const fr: Record<keyof typeof en, string> = {
'message.copy': 'Copier le message',
'message.copied': 'Copié !',
'message.retry': 'Renvoyer le message',
'message.showMore': 'Afficher plus',
'message.showLess': 'Afficher moins',
'message.metadata': 'Détails du message',
'message.rawJson': 'JSON brut',
'message.hideRawJson': 'Masquer le JSON brut',
@@ -411,6 +415,8 @@ const es: Record<keyof typeof en, string> = {
'message.copy': 'Copiar mensaje',
'message.copied': '¡Copiado!',
'message.retry': 'Reenviar mensaje',
'message.showMore': 'Ver más',
'message.showLess': 'Ver menos',
'message.metadata': 'Detalles del mensaje',
'message.rawJson': 'JSON sin formato',
'message.hideRawJson': 'Ocultar JSON sin formato',
@@ -569,6 +575,8 @@ const de: Record<keyof typeof en, string> = {
'message.copy': 'Nachricht kopieren',
'message.copied': 'Kopiert!',
'message.retry': 'Nachricht erneut senden',
'message.showMore': 'Mehr anzeigen',
'message.showLess': 'Weniger anzeigen',
'message.metadata': 'Nachrichtendetails',
'message.rawJson': 'Roh-JSON',
'message.hideRawJson': 'Roh-JSON ausblenden',
@@ -725,6 +733,8 @@ const ja: Record<keyof typeof en, string> = {
'message.copy': 'メッセージをコピー',
'message.copied': 'コピーしました!',
'message.retry': 'メッセージを再送信',
'message.showMore': 'もっと見る',
'message.showLess': '折りたたむ',
'message.metadata': 'メッセージの詳細',
'message.rawJson': '生JSON',
'message.hideRawJson': '生JSONを非表示',
@@ -881,6 +891,8 @@ const pt: Record<keyof typeof en, string> = {
'message.copy': 'Copiar mensagem',
'message.copied': 'Copiado!',
'message.retry': 'Reenviar mensagem',
'message.showMore': 'Ver mais',
'message.showLess': 'Ver menos',
'message.metadata': 'Detalhes da mensagem',
'message.rawJson': 'JSON bruto',
'message.hideRawJson': 'Ocultar JSON bruto',
@@ -1037,6 +1049,8 @@ const zh: Record<keyof typeof en, string> = {
'message.copy': '复制消息',
'message.copied': '已复制!',
'message.retry': '重新发送',
'message.showMore': '展开更多',
'message.showLess': '收起',
'message.metadata': '消息详情',
'message.rawJson': '原始 JSON',
'message.hideRawJson': '隐藏原始 JSON',
@@ -1193,6 +1207,8 @@ const it: Record<keyof typeof en, string> = {
'message.copy': 'Copia messaggio',
'message.copied': 'Copiato!',
'message.retry': 'Reinvia messaggio',
'message.showMore': 'Mostra di più',
'message.showLess': 'Mostra meno',
'message.metadata': 'Dettagli messaggio',
'message.rawJson': 'JSON grezzo',
'message.hideRawJson': 'Nascondi JSON grezzo',