feat(composer): context chip previews with inline comment editing

Hovering (or tapping) a context chip opens a stacked preview of its
pending items above the composer: numbered entries with a muted header
band, the captured selection, and the user's comment, which can be
edited in place (save/cancel) or removed before sending. The chips
component now subscribes to the draft store itself; the per-kind count
plumbing in ChatInput is gone.
This commit is contained in:
Bohdan Triapitsyn
2026-08-24 00:16:26 +03:00
parent c3f89e0106
commit 538b532fb1
13 changed files with 388 additions and 190 deletions
+4
View File
@@ -2909,6 +2909,10 @@ export const dict = {
'chat.message.context.chatQuote': 'Zitat aus einer früheren Nachricht',
'chat.chatInput.chatQuoteContext': 'Chat-Zitate',
'chat.chatInput.chatQuoteContextRemove': 'Chat-Zitate entfernen',
'chat.chatInput.contextPreview.selectedLabel': 'Ausgewählter Text',
'chat.chatInput.contextPreview.commentLabel': 'Nutzerkommentar',
'chat.chatInput.contextPreview.edit': 'Kommentar bearbeiten',
'chat.chatInput.contextPreview.remove': 'Entfernen',
'chat.message.context.browserAnnotation': 'Browser-Anmerkung ({page})',
'chat.message.context.prComment': 'GitHub-PR-Kommentar ({label})',
'chat.message.context.prCheck': 'Fehlgeschlagener GitHub-PR-Check ({label})',
+4
View File
@@ -10,6 +10,10 @@ export const dict = {
'chat.message.context.chatQuote': 'Quoted from an earlier message',
'chat.chatInput.chatQuoteContext': 'Chat quotes',
'chat.chatInput.chatQuoteContextRemove': 'Remove chat quotes',
'chat.chatInput.contextPreview.selectedLabel': 'Selected text',
'chat.chatInput.contextPreview.commentLabel': 'User comment',
'chat.chatInput.contextPreview.edit': 'Edit comment',
'chat.chatInput.contextPreview.remove': 'Remove',
'chat.message.context.browserAnnotation': 'Browser annotation ({page})',
'chat.message.context.prComment': 'GitHub PR comment ({label})',
'chat.message.context.prCheck': 'Failed GitHub PR check ({label})',
+4
View File
@@ -11,6 +11,10 @@ export const dict: Record<I18nKey, string> = {
'chat.message.context.chatQuote': 'Cita de un mensaje anterior',
'chat.chatInput.chatQuoteContext': 'Citas del chat',
'chat.chatInput.chatQuoteContextRemove': 'Quitar citas del chat',
'chat.chatInput.contextPreview.selectedLabel': 'Texto seleccionado',
'chat.chatInput.contextPreview.commentLabel': 'Comentario del usuario',
'chat.chatInput.contextPreview.edit': 'Editar comentario',
'chat.chatInput.contextPreview.remove': 'Quitar',
'chat.message.context.browserAnnotation': 'Anotación del navegador ({page})',
'chat.message.context.prComment': 'Comentario de PR de GitHub ({label})',
'chat.message.context.prCheck': 'Verificación de PR de GitHub fallida ({label})',
+4
View File
@@ -10,6 +10,10 @@ export const dict = {
'chat.message.context.chatQuote': 'Citation dun message précédent',
'chat.chatInput.chatQuoteContext': 'Citations du chat',
'chat.chatInput.chatQuoteContextRemove': 'Supprimer les citations du chat',
'chat.chatInput.contextPreview.selectedLabel': 'Texte sélectionné',
'chat.chatInput.contextPreview.commentLabel': 'Commentaire de lutilisateur',
'chat.chatInput.contextPreview.edit': 'Modifier le commentaire',
'chat.chatInput.contextPreview.remove': 'Supprimer',
'chat.message.context.browserAnnotation': 'Annotation du navigateur ({page})',
'chat.message.context.prComment': 'Commentaire de PR GitHub ({label})',
'chat.message.context.prCheck': 'Vérification de PR GitHub échouée ({label})',
+4
View File
@@ -11,6 +11,10 @@ export const dict: Record<I18nKey, string> = {
'chat.message.context.chatQuote': '以前のメッセージからの引用',
'chat.chatInput.chatQuoteContext': 'チャット引用',
'chat.chatInput.chatQuoteContextRemove': 'チャット引用を削除',
'chat.chatInput.contextPreview.selectedLabel': '選択したテキスト',
'chat.chatInput.contextPreview.commentLabel': 'ユーザーのコメント',
'chat.chatInput.contextPreview.edit': 'コメントを編集',
'chat.chatInput.contextPreview.remove': '削除',
'chat.message.context.browserAnnotation': 'ブラウザ注釈({page}',
'chat.message.context.prComment': 'GitHub PR コメント({label}',
'chat.message.context.prCheck': '失敗した GitHub PR チェック({label}',
+4
View File
@@ -11,6 +11,10 @@ export const dict: Record<I18nKey, string> = {
'chat.message.context.chatQuote': '이전 메시지에서 인용',
'chat.chatInput.chatQuoteContext': '채팅 인용',
'chat.chatInput.chatQuoteContextRemove': '채팅 인용 제거',
'chat.chatInput.contextPreview.selectedLabel': '선택한 텍스트',
'chat.chatInput.contextPreview.commentLabel': '사용자 댓글',
'chat.chatInput.contextPreview.edit': '댓글 편집',
'chat.chatInput.contextPreview.remove': '제거',
'chat.message.context.browserAnnotation': '브라우저 주석 ({page})',
'chat.message.context.prComment': 'GitHub PR 댓글 ({label})',
'chat.message.context.prCheck': '실패한 GitHub PR 검사 ({label})',
+4
View File
@@ -11,6 +11,10 @@ export const dict: Record<I18nKey, string> = {
'chat.message.context.chatQuote': 'Cytat z wcześniejszej wiadomości',
'chat.chatInput.chatQuoteContext': 'Cytaty z czatu',
'chat.chatInput.chatQuoteContextRemove': 'Usuń cytaty z czatu',
'chat.chatInput.contextPreview.selectedLabel': 'Zaznaczony tekst',
'chat.chatInput.contextPreview.commentLabel': 'Komentarz użytkownika',
'chat.chatInput.contextPreview.edit': 'Edytuj komentarz',
'chat.chatInput.contextPreview.remove': 'Usuń',
'chat.message.context.browserAnnotation': 'Adnotacja przeglądarki ({page})',
'chat.message.context.prComment': 'Komentarz PR GitHub ({label})',
'chat.message.context.prCheck': 'Nieudane sprawdzenie PR GitHub ({label})',
@@ -11,6 +11,10 @@ export const dict: Record<I18nKey, string> = {
'chat.message.context.chatQuote': 'Citação de uma mensagem anterior',
'chat.chatInput.chatQuoteContext': 'Citações do chat',
'chat.chatInput.chatQuoteContextRemove': 'Remover citações do chat',
'chat.chatInput.contextPreview.selectedLabel': 'Texto selecionado',
'chat.chatInput.contextPreview.commentLabel': 'Comentário do usuário',
'chat.chatInput.contextPreview.edit': 'Editar comentário',
'chat.chatInput.contextPreview.remove': 'Remover',
'chat.message.context.browserAnnotation': 'Anotação do navegador ({page})',
'chat.message.context.prComment': 'Comentário de PR do GitHub ({label})',
'chat.message.context.prCheck': 'Verificação de PR do GitHub com falha ({label})',
+4
View File
@@ -11,6 +11,10 @@ export const dict: Record<I18nKey, string> = {
'chat.message.context.chatQuote': 'Цитата з попереднього повідомлення',
'chat.chatInput.chatQuoteContext': 'Цитати з чату',
'chat.chatInput.chatQuoteContextRemove': 'Прибрати цитати з чату',
'chat.chatInput.contextPreview.selectedLabel': 'Виділений текст',
'chat.chatInput.contextPreview.commentLabel': 'Коментар користувача',
'chat.chatInput.contextPreview.edit': 'Редагувати коментар',
'chat.chatInput.contextPreview.remove': 'Прибрати',
'chat.message.context.browserAnnotation': 'Анотація браузера ({page})',
'chat.message.context.prComment': 'Коментар PR GitHub ({label})',
'chat.message.context.prCheck': 'Невдала перевірка PR GitHub ({label})',
@@ -11,6 +11,10 @@ export const dict: Record<I18nKey, string> = {
'chat.message.context.chatQuote': '引用自先前的消息',
'chat.chatInput.chatQuoteContext': '聊天引用',
'chat.chatInput.chatQuoteContextRemove': '移除聊天引用',
'chat.chatInput.contextPreview.selectedLabel': '所选文本',
'chat.chatInput.contextPreview.commentLabel': '用户评论',
'chat.chatInput.contextPreview.edit': '编辑评论',
'chat.chatInput.contextPreview.remove': '移除',
'chat.message.context.browserAnnotation': '浏览器标注({page}',
'chat.message.context.prComment': 'GitHub PR 评论({label}',
'chat.message.context.prCheck': '失败的 GitHub PR 检查({label}',
@@ -11,6 +11,10 @@ export const dict: Record<I18nKey, string> = {
'chat.message.context.chatQuote': '引用自先前的訊息',
'chat.chatInput.chatQuoteContext': '聊天引用',
'chat.chatInput.chatQuoteContextRemove': '移除聊天引用',
'chat.chatInput.contextPreview.selectedLabel': '所選文字',
'chat.chatInput.contextPreview.commentLabel': '使用者留言',
'chat.chatInput.contextPreview.edit': '編輯留言',
'chat.chatInput.contextPreview.remove': '移除',
'chat.message.context.browserAnnotation': '瀏覽器標註({page}',
'chat.message.context.prComment': 'GitHub PR 留言({label}',
'chat.message.context.prCheck': '失敗的 GitHub PR 檢查({label}',