From e786feb165d5278d428aa2270621c84e6b27b740 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Fri, 13 Jun 2025 12:59:50 +0800 Subject: [PATCH] refactor(i18n, settings): update localization and UI elements for improved consistency - Removed redundant settings entries in multiple language files. - Updated various settings titles for clarity, including "Code Settings" to "Code Block Settings". - Added new localization keys for assistant and topic settings. - Enhanced the layout of the ChatNavbar and MainSidebar components for better user experience. - Adjusted the MessageMenubar to reflect updated settings terminology. --- src/renderer/src/Routes.tsx | 2 +- src/renderer/src/i18n/locales/en-us.json | 13 ++- src/renderer/src/i18n/locales/ja-jp.json | 11 +- src/renderer/src/i18n/locales/ru-ru.json | 11 +- src/renderer/src/i18n/locales/zh-cn.json | 13 ++- src/renderer/src/i18n/locales/zh-tw.json | 13 ++- src/renderer/src/i18n/translate/el-gr.json | 7 ++ src/renderer/src/i18n/translate/es-es.json | 7 ++ src/renderer/src/i18n/translate/fr-fr.json | 7 ++ src/renderer/src/i18n/translate/pt-pt.json | 7 ++ src/renderer/src/pages/home/ChatNavbar.tsx | 13 +-- src/renderer/src/pages/home/HomePage.tsx | 3 + .../src/pages/home/MainSidebar/MainNavbar.tsx | 14 ++- .../pages/home/MainSidebar/MainSidebar.tsx | 106 +++++++++++++----- .../home/MainSidebar/MainSidebarStyles.tsx | 2 +- .../pages/home/Messages/MessageMenubar.tsx | 4 +- .../src/pages/home/Tabs/AssistantsTab.tsx | 31 ++--- .../src/pages/home/Tabs/TopicsTab.tsx | 34 ++++-- .../home/Tabs/components/AssistantItem.tsx | 13 ++- src/renderer/src/pages/home/Tabs/index.tsx | 78 ------------- .../DisplaySettings/DisplaySettings.tsx | 91 +++++++++++++-- 21 files changed, 309 insertions(+), 171 deletions(-) delete mode 100644 src/renderer/src/pages/home/Tabs/index.tsx diff --git a/src/renderer/src/Routes.tsx b/src/renderer/src/Routes.tsx index 71b1c163ec..e0b2740446 100644 --- a/src/renderer/src/Routes.tsx +++ b/src/renderer/src/Routes.tsx @@ -95,7 +95,7 @@ const PageContainer = styled(motion.div)` const pageTransition = { type: 'tween', - duration: 0.2, + duration: 0.25, ease: [0.4, 0.0, 0.2, 1] } diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 4a246547ad..16b4ec5694 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -201,7 +201,6 @@ "message.quote": "Quote", "message.regenerate.model": "Switch Model", "message.useful": "Helpful", - "message.settings": "Settings", "multiple.select": "Multiple Select", "multiple.select.empty": "No Messages Selected", "navigation": { @@ -216,7 +215,7 @@ }, "resend": "Resend", "save": "Save", - "settings.code.title": "Code Settings", + "settings.code.title": "Code Block Settings", "settings.code_editor": { "title": "Code Editor", "highlight_active_line": "Highlight active line", @@ -424,7 +423,8 @@ "pinyin.desc": "Sort by Pinyin (Z-A)" }, "no_results": "No results", - "apps": "Apps" + "apps": "Apps", + "settings": "Settings" }, "docs": { "title": "Docs" @@ -1062,6 +1062,7 @@ "about.updateNotAvailable": "You are using the latest version", "about.website.button": "Website", "about.website.title": "Official Website", + "advanced.auto_switch_to_topics": "Auto switch to topic", "advanced.title": "Advanced Settings", "assistant": "Default Assistant", "assistant.model_params": "Model Parameters", @@ -1275,6 +1276,7 @@ "message_title.use_topic_naming.title": "Use topic naming model to create titles for exported messages", "message_title.use_topic_naming.help": "When enabled, use topic naming model to create titles for exported messages. This will also affect all Markdown export methods." }, + "display.assistant.title": "Assistant Settings", "display.custom.css": "Custom CSS", "display.custom.css.cherrycss": "Get from cherrycss.com", "display.custom.css.placeholder": "/* Put custom CSS here */", @@ -1517,7 +1519,9 @@ "advancedSettings": "Advanced Settings" }, "messages.prompt": "Show prompt", + "messages.tokens": "Show token usage", "messages.divider": "Show divider between messages", + "messages.divider.tooltip": "Not applicable to bubble-style message", "messages.grid_columns": "Message grid display columns", "messages.grid_popover_trigger": "Grid detail trigger", "messages.grid_popover_trigger.click": "Click to display", @@ -1730,6 +1734,9 @@ "theme.window.style.title": "Window Style", "theme.window.style.transparent": "Transparent Window", "title": "Settings", + "topic.position": "Topic position", + "topic.position.left": "Left", + "topic.position.right": "Right", "topic.show.time": "Show topic time", "topic.pin_to_top": "Pin Topics to Top", "tray.onclose": "Minimize to Tray on Close", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 45bae14e71..b3e61ad0c2 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -201,7 +201,6 @@ "message.quote": "引用", "message.regenerate.model": "モデルを切り替え", "message.useful": "役立つ", - "message.settings": "設定", "multiple.select": "選択", "multiple.select.empty": "メッセージが選択されていません", "navigation": { @@ -424,7 +423,8 @@ "pinyin.desc": "ピンインで降順ソート" }, "no_results": "検索結果なし", - "apps": "アプリ" + "apps": "アプリ", + "settings": "設定" }, "docs": { "title": "ドキュメント" @@ -1060,6 +1060,7 @@ "about.updateNotAvailable": "最新バージョンを使用しています", "about.website.button": "ウェブサイト", "about.website.title": "公式ウェブサイト", + "advanced.auto_switch_to_topics": "トピックに自動的に切り替える", "advanced.title": "詳細設定", "assistant": "デフォルトアシスタント", "assistant.model_params": "モデルパラメータ", @@ -1273,6 +1274,7 @@ "notion.export_reasoning.title": "エクスポート時に思考チェーンを含める", "notion.export_reasoning.help": "有効にすると、Notionにエクスポートする際に思考チェーンの内容が含まれます。" }, + "display.assistant.title": "アシスタント設定", "display.custom.css": "カスタムCSS", "display.custom.css.cherrycss": "cherrycss.comから取得", "display.custom.css.placeholder": "/* ここにカスタムCSSを入力 */", @@ -1511,7 +1513,9 @@ "advancedSettings": "詳細設定" }, "messages.prompt": "プロンプト表示", + "messages.tokens": "トークン使用量を表示", "messages.divider": "メッセージ間に区切り線を表示", + "messages.divider.tooltip": "バブルスタイルのメッセージには適用されません", "messages.grid_columns": "メッセージグリッドの表示列数", "messages.grid_popover_trigger": "グリッド詳細トリガー", "messages.grid_popover_trigger.click": "クリックで表示", @@ -1718,6 +1722,9 @@ "theme.window.style.title": "ウィンドウスタイル", "theme.window.style.transparent": "透明ウィンドウ", "title": "設定", + "topic.position": "トピックの位置", + "topic.position.left": "左", + "topic.position.right": "右", "topic.show.time": "トピックの時間を表示", "topic.pin_to_top": "固定トピックを上部に表示", "tray.onclose": "閉じるときにトレイに最小化", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 19caafa5b8..615df64789 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -201,7 +201,6 @@ "message.quote": "Цитата", "message.regenerate.model": "Переключить модель", "message.useful": "Полезно", - "message.settings": "Настройки", "multiple.select": "Множественный выбор", "multiple.select.empty": "Ничего не выбрано", "navigation": { @@ -424,7 +423,8 @@ "pinyin.desc": "Сортировать по пиньинь (Я-А)" }, "no_results": "Результатов не найдено", - "apps": "Приложения" + "apps": "Приложения", + "settings": "Настройки" }, "docs": { "title": "Документация" @@ -1060,6 +1060,7 @@ "about.updateNotAvailable": "Вы используете последнюю версию", "about.website.button": "Сайт", "about.website.title": "Официальный сайт", + "advanced.auto_switch_to_topics": "Автоматически переключаться на топик", "advanced.title": "Расширенные настройки", "assistant": "Ассистент по умолчанию", "assistant.model_params": "Параметры модели", @@ -1273,6 +1274,7 @@ "message_title.use_topic_naming.title": "Использовать модель именования тем для создания заголовков сообщений", "message_title.use_topic_naming.help": "Этот параметр влияет на все методы экспорта в Markdown, такие как Notion, Yuque и т.д." }, + "display.assistant.title": "Настройки ассистентов", "display.custom.css": "Пользовательский CSS", "display.custom.css.cherrycss": "Получить из cherrycss.com", "display.custom.css.placeholder": "/* Здесь введите пользовательский CSS */", @@ -1511,7 +1513,9 @@ "advancedSettings": "Расширенные настройки" }, "messages.prompt": "Показывать подсказки", + "messages.tokens": "Показать использование токенов", "messages.divider": "Показывать разделитель между сообщениями", + "messages.divider.tooltip": "Не применимо к сообщениям в стиле пузырей", "messages.grid_columns": "Количество столбцов сетки сообщений", "messages.grid_popover_trigger": "Триггер для отображения подробной информации в сетке", "messages.grid_popover_trigger.click": "Нажатие для отображения", @@ -1718,6 +1722,9 @@ "theme.window.style.title": "Стиль окна", "theme.window.style.transparent": "Прозрачное окно", "title": "Настройки", + "topic.position": "Позиция топиков", + "topic.position.left": "Слева", + "topic.position.right": "Справа", "topic.show.time": "Показывать время топика", "topic.pin_to_top": "Закрепленные топики сверху", "tray.onclose": "Свернуть в трей при закрытии", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 64dd191d04..f7e0248dd4 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -218,7 +218,6 @@ "message.new.context": "清除上下文", "message.quote": "引用", "message.regenerate.model": "切换模型", - "message.settings": "设置", "message.useful": "有用", "multiple.select": "多选", "multiple.select.empty": "未选中任何消息", @@ -234,7 +233,7 @@ }, "resend": "重新发送", "save": "保存", - "settings.code.title": "代码设置", + "settings.code.title": "代码块设置", "settings.code_editor": { "title": "代码编辑器", "highlight_active_line": "高亮当前行", @@ -424,7 +423,8 @@ "pinyin.desc": "按拼音降序" }, "no_results": "无结果", - "apps": "应用" + "apps": "应用", + "settings": "设置" }, "docs": { "title": "帮助文档" @@ -1062,6 +1062,7 @@ "about.updateNotAvailable": "你的软件已是最新版本", "about.website.button": "查看", "about.website.title": "官方网站", + "advanced.auto_switch_to_topics": "自动切换到话题", "advanced.title": "高级设置", "assistant": "默认助手", "assistant.model_params": "模型参数", @@ -1275,6 +1276,7 @@ "new_folder.button": "新建文件夹" } }, + "display.assistant.title": "助手设置", "display.custom.css": "自定义 CSS", "display.custom.css.cherrycss": "从 cherrycss.com 获取", "display.custom.css.placeholder": "/* 这里写自定义CSS */", @@ -1517,7 +1519,9 @@ "advancedSettings": "高级设置" }, "messages.prompt": "显示提示词", + "messages.tokens": "显示Token用量", "messages.divider": "消息分割线", + "messages.divider.tooltip": "不适用于气泡样式消息", "messages.grid_columns": "消息网格展示列数", "messages.grid_popover_trigger": "网格详情触发", "messages.grid_popover_trigger.click": "点击显示", @@ -1730,6 +1734,9 @@ "theme.window.style.title": "窗口样式", "theme.window.style.transparent": "透明窗口", "title": "设置", + "topic.position": "话题位置", + "topic.position.left": "左侧", + "topic.position.right": "右侧", "topic.show.time": "显示话题时间", "topic.pin_to_top": "固定话题置顶", "tray.onclose": "关闭时最小化到托盘", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 42cb03ebb4..4b8b027677 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -201,7 +201,6 @@ "message.quote": "引用", "message.regenerate.model": "切換模型", "message.useful": "有用", - "message.settings": "設定", "multiple.select": "多選", "multiple.select.empty": "未選中任何訊息", "navigation": { @@ -216,7 +215,7 @@ }, "resend": "重新傳送", "save": "儲存", - "settings.code.title": "程式碼設定", + "settings.code.title": "程式碼區塊", "settings.code_editor": { "title": "程式碼編輯器", "highlight_active_line": "高亮當前行", @@ -424,7 +423,8 @@ "pinyin.desc": "按拼音降序" }, "no_results": "沒有結果", - "apps": "應用" + "apps": "應用", + "settings": "設定" }, "docs": { "title": "說明文件" @@ -1062,6 +1062,7 @@ "about.updateNotAvailable": "您正在使用最新版本", "about.website.button": "網站", "about.website.title": "官方網站", + "advanced.auto_switch_to_topics": "自動切換到話題", "advanced.title": "進階設定", "assistant": "預設助手", "assistant.model_params": "模型參數", @@ -1275,6 +1276,7 @@ "message_title.use_topic_naming.title": "使用話題命名模型為導出的消息創建標題", "message_title.use_topic_naming.help": "此設定會影響所有通過Markdown導出的方式,如Notion、語雀等" }, + "display.assistant.title": "助手設定", "display.custom.css": "自訂 CSS", "display.custom.css.cherrycss": "從 cherrycss.com 取得", "display.custom.css.placeholder": "/* 這裡寫自訂 CSS */", @@ -1514,7 +1516,9 @@ "advancedSettings": "高級設定" }, "messages.prompt": "提示詞顯示", + "messages.tokens": "Token用量顯示", "messages.divider": "訊息間顯示分隔線", + "messages.divider.tooltip": "不適用於氣泡樣式消息", "messages.grid_columns": "訊息網格展示列數", "messages.grid_popover_trigger": "網格詳細資訊觸發", "messages.grid_popover_trigger.click": "點選顯示", @@ -1721,6 +1725,9 @@ "theme.window.style.title": "視窗樣式", "theme.window.style.transparent": "透明視窗", "title": "設定", + "topic.position": "話題位置", + "topic.position.left": "左側", + "topic.position.right": "右側", "topic.show.time": "顯示話題時間", "topic.pin_to_top": "固定話題置頂", "tray.onclose": "關閉時最小化到系统匣", diff --git a/src/renderer/src/i18n/translate/el-gr.json b/src/renderer/src/i18n/translate/el-gr.json index 4362777ee7..7d60a58e3f 100644 --- a/src/renderer/src/i18n/translate/el-gr.json +++ b/src/renderer/src/i18n/translate/el-gr.json @@ -918,6 +918,7 @@ "about.updateNotAvailable": "Το λογισμικό σας είναι ήδη στην πιο πρόσφατη έκδοση", "about.website.button": "Προβολή", "about.website.title": "Ιστοσελίδα", + "advanced.auto_switch_to_topics": "Αυτόματη μετάβαση σε θέματα", "advanced.title": "Ρυθμίσεις Ανώτερου Νiveau", "assistant": "Πρόεδρος Υπηρεσίας", "assistant.model_params": "Παράμετροι Μοντέλου", @@ -1124,6 +1125,7 @@ "message_title.use_topic_naming.title": "Δημιουργία τίτλων μηνυμάτων χρησιμοποιώντας μοντέλο ονομασίας θεμάτων", "message_title.use_topic_naming.help": "Όταν είναι ενεργό, δημιουργεί τίτλους για τα μηνύματα που εξάγονται χρησιμοποιώντας μοντέλο ονομασίας θεμάτων. Αυτό επηρεάζει επίσης όλες τις μεθόδους εξαγωγής μέσω Markdown." }, + "display.assistant.title": "Ρυθμίσεις Υπηρεσίας", "display.custom.css": "Προσαρμοστική CSS", "display.custom.css.cherrycss": "Λήψη από cherrycss.com", "display.custom.css.placeholder": "/* Γράψτε εδώ την προσαρμοστική CSS */", @@ -1303,6 +1305,7 @@ "advancedSettings": "Προχωρημένες Ρυθμίσεις" }, "messages.divider": "Διαχωριστική γραμμή μηνυμάτων", + "messages.divider.tooltip": "Δεν ισχύει για μηνύματα με στυλ φυσαλίδας", "messages.grid_columns": "Αριθμός στήλων γριλ μηνυμάτων", "messages.grid_popover_trigger": "Καταγραφή στοιχείων στο grid", "messages.grid_popover_trigger.click": "Εμφάνιση κλικ", @@ -1484,6 +1487,9 @@ "theme.window.style.title": "Στυλ παραθύρων", "theme.window.style.transparent": "Διαφανή παράθυρα", "title": "Ρυθμίσεις", + "topic.position": "Θέση θεμάτων", + "topic.position.left": "Αριστερά", + "topic.position.right": "Δεξιά", "topic.show.time": "Εμφάνιση ώρας θέματος", "tray.onclose": "Μειωμένο στη συνδρομή κατά την κλεισιά", "tray.show": "Εμφάνιση εικονιδίου συνδρομής", @@ -1606,6 +1612,7 @@ "assistant.icon.type.none": "Κανένα", "general.auto_check_update.title": "Αυτόματη ενημέρωση", "input.show_translate_confirm": "Εμφάνιση παραθύρου επιβεβαίωσης μετάφρασης", + "messages.prompt": "Λήμμα προτροπής", "messages.input.enable_quick_triggers": "Ενεργοποίηση των '/' και '@' για γρήγορη πρόσβαση σε μενού", "messages.input.enable_delete_model": "Ενεργοποίηση διαγραφής μοντέλων/επισυναπτόμενων αρχείων με το πλήκτρο διαγραφής", "messages.math_engine.none": "Κανένα", diff --git a/src/renderer/src/i18n/translate/es-es.json b/src/renderer/src/i18n/translate/es-es.json index f6323c7490..b3083a93ba 100644 --- a/src/renderer/src/i18n/translate/es-es.json +++ b/src/renderer/src/i18n/translate/es-es.json @@ -919,6 +919,7 @@ "about.updateNotAvailable": "Tu software ya está actualizado", "about.website.button": "Ver", "about.website.title": "Sitio web oficial", + "advanced.auto_switch_to_topics": "Cambiar automáticamente a temas", "advanced.title": "Configuración avanzada", "assistant": "Asistente predeterminado", "assistant.model_params": "Parámetros del modelo", @@ -1123,6 +1124,7 @@ "message_title.use_topic_naming.title": "Usar el modelo de nombramiento temático para crear títulos de mensajes exportados", "message_title.use_topic_naming.help": "Al activarlo, se utilizará el modelo de nombramiento temático para generar títulos de mensajes exportados. Esta opción también afectará a todos los métodos de exportación mediante Markdown." }, + "display.assistant.title": "Configuración del asistente", "display.custom.css": "CSS personalizado", "display.custom.css.cherrycss": "Obtener desde cherrycss.com", "display.custom.css.placeholder": "/* Escribe tu CSS personalizado aquí */", @@ -1302,6 +1304,7 @@ "advancedSettings": "Configuración avanzada" }, "messages.divider": "Separador de mensajes", + "messages.divider.tooltip": "No aplicable para mensajes de estilo burbuja", "messages.grid_columns": "Número de columnas en la cuadrícula de mensajes", "messages.grid_popover_trigger": "Desencadenante de detalles de cuadrícula", "messages.grid_popover_trigger.click": "Mostrar al hacer clic", @@ -1483,6 +1486,9 @@ "theme.window.style.title": "Estilo de ventana", "theme.window.style.transparent": "Ventana transparente", "title": "Configuración", + "topic.position": "Posición del tema", + "topic.position.left": "Izquierda", + "topic.position.right": "Derecha", "topic.show.time": "Mostrar tiempo del tema", "tray.onclose": "Minimizar a la bandeja al cerrar", "tray.show": "Mostrar bandera del sistema", @@ -1605,6 +1611,7 @@ "assistant.icon.type.none": "No mostrar", "general.auto_check_update.title": "Actualización automática", "input.show_translate_confirm": "Mostrar diálogo de confirmación de traducción", + "messages.prompt": "Palabra de indicación", "messages.input.enable_quick_triggers": "Habilitar menú rápido con '/' y '@'", "messages.input.enable_delete_model": "Habilitar la eliminación con la tecla de borrado para modelos/archivos adjuntos introducidos", "messages.math_engine.none": "Ninguno", diff --git a/src/renderer/src/i18n/translate/fr-fr.json b/src/renderer/src/i18n/translate/fr-fr.json index 0289043f5c..0718050d06 100644 --- a/src/renderer/src/i18n/translate/fr-fr.json +++ b/src/renderer/src/i18n/translate/fr-fr.json @@ -918,6 +918,7 @@ "about.updateNotAvailable": "Votre logiciel est déjà à jour", "about.website.button": "Visiter le site web", "about.website.title": "Site web officiel", + "advanced.auto_switch_to_topics": "Basculer automatiquement vers les sujets", "advanced.title": "Paramètres avancés", "assistant": "Assistant par défaut", "assistant.model_params": "Paramètres du modèle", @@ -1124,6 +1125,7 @@ "message_title.use_topic_naming.title": "Utiliser le modèle de dénomination thématique pour créer les titres des messages exportés", "message_title.use_topic_naming.help": "Lorsque cette option est activée, le modèle de dénomination thématique sera utilisé pour créer les titres des messages exportés. Cette option affectera également toutes les méthodes d'exportation au format Markdown." }, + "display.assistant.title": "Paramètres de l'assistant", "display.custom.css": "CSS personnalisé", "display.custom.css.cherrycss": "Obtenir depuis cherrycss.com", "display.custom.css.placeholder": "/* Écrire votre CSS personnalisé ici */", @@ -1303,6 +1305,7 @@ "advancedSettings": "Расширенные настройки" }, "messages.divider": "Séparateur de messages", + "messages.divider.tooltip": "Non applicable aux messages de style bulle", "messages.grid_columns": "Nombre de colonnes de la grille de messages", "messages.grid_popover_trigger": "Déclencheur de popover de la grille", "messages.grid_popover_trigger.click": "Afficher au clic", @@ -1484,6 +1487,9 @@ "theme.window.style.title": "Style de fenêtre", "theme.window.style.transparent": "Fenêtre transparente", "title": "Paramètres", + "topic.position": "Position du sujet", + "topic.position.left": "Gauche", + "topic.position.right": "Droite", "topic.show.time": "Afficher l'heure du sujet", "tray.onclose": "Minimiser dans la barre d'état système lors de la fermeture", "tray.show": "Afficher l'icône dans la barre d'état système", @@ -1606,6 +1612,7 @@ "assistant.icon.type.none": "Ne pas afficher", "general.auto_check_update.title": "Mise à jour automatique", "input.show_translate_confirm": "Afficher la boîte de dialogue de confirmation de traduction", + "messages.prompt": "Mot-clé d'affichage", "messages.input.enable_quick_triggers": "Activer les menus rapides avec '/' et '@'", "messages.input.enable_delete_model": "Activer la touche Supprimer pour effacer le modèle/pièce jointe saisie", "messages.math_engine.none": "Aucun", diff --git a/src/renderer/src/i18n/translate/pt-pt.json b/src/renderer/src/i18n/translate/pt-pt.json index bf491168d2..146e8d305b 100644 --- a/src/renderer/src/i18n/translate/pt-pt.json +++ b/src/renderer/src/i18n/translate/pt-pt.json @@ -919,6 +919,7 @@ "about.updateNotAvailable": "Seu software já está atualizado", "about.website.button": "Ver", "about.website.title": "Site oficial", + "advanced.auto_switch_to_topics": "Alternar automaticamente para tópicos", "advanced.title": "Configurações avançadas", "assistant": "Assistente padrão", "assistant.model_params": "Parâmetros do modelo", @@ -1125,6 +1126,7 @@ "message_title.use_topic_naming.title": "Usar modelo de nomeação por tópico para criar títulos das mensagens exportadas", "message_title.use_topic_naming.help": "Ativando esta opção, será usado um modelo de nomeação por tópico para criar os títulos das mensagens exportadas. Esta configuração também afetará todas as formas de exportação feitas por meio de Markdown." }, + "display.assistant.title": "Configurações do assistente", "display.custom.css": "CSS personalizado", "display.custom.css.cherrycss": "Obter do cherrycss.com", "display.custom.css.placeholder": "/* Escreva seu CSS personalizado aqui */", @@ -1304,6 +1306,7 @@ "advancedSettings": "Configurações Avançadas" }, "messages.divider": "Divisor de mensagens", + "messages.divider.tooltip": "Não aplicável a mensagens de estilo bolha", "messages.grid_columns": "Número de colunas da grade de mensagens", "messages.grid_popover_trigger": "Disparador de detalhes da grade", "messages.grid_popover_trigger.click": "Clique para mostrar", @@ -1485,6 +1488,9 @@ "theme.window.style.title": "Estilo de janela", "theme.window.style.transparent": "Janela transparente", "title": "Configurações", + "topic.position": "Posição do tópico", + "topic.position.left": "Esquerda", + "topic.position.right": "Direita", "topic.show.time": "Mostrar tempo do tópico", "tray.onclose": "Minimizar para bandeja ao fechar", "tray.show": "Mostrar ícone de bandeja", @@ -1607,6 +1613,7 @@ "assistant.icon.type.none": "Não mostrar", "general.auto_check_update.title": "Atualização automática", "input.show_translate_confirm": "Mostrar diálogo de confirmação de tradução", + "messages.prompt": "Exibir palavra-chave", "messages.input.enable_quick_triggers": "Ativar menu rápido com '/' e '@'", "messages.input.enable_delete_model": "Ativar tecla de exclusão para remover modelos/anexos inseridos", "messages.math_engine.none": "Nenhum", diff --git a/src/renderer/src/pages/home/ChatNavbar.tsx b/src/renderer/src/pages/home/ChatNavbar.tsx index 169881b2f5..0abba62d7b 100644 --- a/src/renderer/src/pages/home/ChatNavbar.tsx +++ b/src/renderer/src/pages/home/ChatNavbar.tsx @@ -10,12 +10,11 @@ import { modelGenerating } from '@renderer/hooks/useRuntime' import { useSettings } from '@renderer/hooks/useSettings' import { useShortcut } from '@renderer/hooks/useShortcuts' import { useShowAssistants } from '@renderer/hooks/useStore' -import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { useAppDispatch } from '@renderer/store' import { setNarrowMode } from '@renderer/store/settings' import { Tooltip } from 'antd' import { t } from 'i18next' -import { LayoutGrid, MessageSquareDiff, PanelLeft, PanelRight, Search } from 'lucide-react' +import { LayoutGrid, PanelLeft, PanelRight, Search } from 'lucide-react' import { FC } from 'react' import { useNavigate } from 'react-router' import styled from 'styled-components' @@ -43,11 +42,6 @@ const ChatNavbar: FC = () => { - - EventEmitter.emit(EVENT_NAMES.ADD_NEW_TOPIC)}> - - - toggleShowAssistants()}> {showAssistants ? : } @@ -89,12 +83,11 @@ const NavbarContainer = styled.div<{ $isFullscreen: boolean; $showSidebar: boole max-height: var(--navbar-height); min-height: var(--navbar-height); justify-content: space-between; - margin-left: ${({ $showSidebar }) => ($showSidebar ? '-37px' : isMac ? '75px' : '10px')}; + margin-left: ${({ $showSidebar }) => ($showSidebar ? '15px' : isMac ? '75px' : '15px')}; font-weight: bold; color: var(--color-text-1); - padding-right: ${({ $isFullscreen }) => ($isFullscreen ? '12px' : isWindows ? '140px' : isLinux ? '120px' : '12px')}; + padding-right: ${({ $isFullscreen }) => ($isFullscreen ? '15px' : isWindows ? '140px' : isLinux ? '120px' : '15px')}; -webkit-app-region: drag; - transition: margin-left 0.3s; ` export const NavbarIcon = styled.div` diff --git a/src/renderer/src/pages/home/HomePage.tsx b/src/renderer/src/pages/home/HomePage.tsx index 146898b740..5ca3b07f0e 100644 --- a/src/renderer/src/pages/home/HomePage.tsx +++ b/src/renderer/src/pages/home/HomePage.tsx @@ -40,6 +40,9 @@ const Container = styled.div` const ContentContainer = styled.div` overflow: hidden; + display: flex; + flex: 1; + flex-direction: row; ` export default HomePage diff --git a/src/renderer/src/pages/home/MainSidebar/MainNavbar.tsx b/src/renderer/src/pages/home/MainSidebar/MainNavbar.tsx index 693e813df4..68797d5805 100644 --- a/src/renderer/src/pages/home/MainSidebar/MainNavbar.tsx +++ b/src/renderer/src/pages/home/MainSidebar/MainNavbar.tsx @@ -1,8 +1,9 @@ import SearchPopup from '@renderer/components/Popups/SearchPopup' import { isMac } from '@renderer/config/constant' +import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { Tooltip } from 'antd' import { t } from 'i18next' -import { Search } from 'lucide-react' +import { MessageSquareDiff, Search } from 'lucide-react' import { FC } from 'react' import styled from 'styled-components' @@ -20,6 +21,11 @@ const HeaderNavbar: FC = () => { )} + + EventEmitter.emit(EVENT_NAMES.ADD_NEW_TOPIC)}> + + + ) } @@ -35,8 +41,8 @@ const Container = styled.div` min-height: var(--navbar-height); background-color: transparent; -webkit-app-region: drag; - padding: 0 8px; - padding-left: ${isMac ? '75px' : '10px'}; + padding: 0 15px; + padding-left: ${isMac ? '75px' : '15px'}; ` export const NavbarIcon = styled.div` @@ -52,7 +58,7 @@ export const NavbarIcon = styled.div` -webkit-app-region: no-drag; cursor: pointer; &:hover { - background-color: var(--color-background-mute); + background-color: var(--color-list-item); color: var(--color-icon-white); } ` diff --git a/src/renderer/src/pages/home/MainSidebar/MainSidebar.tsx b/src/renderer/src/pages/home/MainSidebar/MainSidebar.tsx index 4fd201cc61..9e737d7a9d 100644 --- a/src/renderer/src/pages/home/MainSidebar/MainSidebar.tsx +++ b/src/renderer/src/pages/home/MainSidebar/MainSidebar.tsx @@ -9,13 +9,12 @@ import { useSettings } from '@renderer/hooks/useSettings' import { useShortcut } from '@renderer/hooks/useShortcuts' import { useShowAssistants } from '@renderer/hooks/useStore' import i18n from '@renderer/i18n' -import AssistantItem from '@renderer/pages/home/Tabs/components/AssistantItem' import { getAssistantById } from '@renderer/services/AssistantService' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { ThemeMode } from '@renderer/types' import { isEmoji } from '@renderer/utils' import { Avatar, Dropdown } from 'antd' -import { AnimatePresence, motion } from 'framer-motion' +import { AnimatePresence } from 'framer-motion' import { Blocks, ChevronDown, @@ -39,7 +38,9 @@ import { useTranslation } from 'react-i18next' import { useLocation, useNavigate } from 'react-router-dom' import styled from 'styled-components' -import Tabs from '../../../pages/home/Tabs' +import AssistantsTab from '../Tabs/AssistantsTab' +import AssistantItem from '../Tabs/components/AssistantItem' +import TopicsTab from '../Tabs/TopicsTab' import MainNavbar from './MainNavbar' import { Container, @@ -69,7 +70,7 @@ const MainSidebar: FC = () => { const location = useLocation() const { pathname } = location - const { activeAssistant, activeTopic, setActiveAssistant, setActiveTopic } = useChat() + const { activeAssistant, activeTopic, setActiveAssistant } = useChat() const { showTopics } = useSettings() const { openMinapp } = useMinappPopup() @@ -145,6 +146,10 @@ const MainSidebar: FC = () => { }) } + if (!showAssistants) { + return null + } + return ( { {isAppMenuExpanded && ( - - - {appMenuItems.map((item) => ( - navigate(item.path)}> - - {item.icon} - {item.text} - - - ))} - - - + + {appMenuItems.map((item) => ( + navigate(item.path)}> + + {item.icon} + {item.text} + + + ))} + + )} @@ -211,13 +210,22 @@ const MainSidebar: FC = () => { )} - + + {/* + setTab('assistants')}> + {t('assistants.title')} + + setTab('topic')}> + {t('common.topics')} + + */} + {tab === 'assistants' && } + {tab === 'topic' && } + + UserPopup.show()}> {isEmoji(avatar) ? ( @@ -283,11 +291,53 @@ const ThemeIcon = () => { ) } +const MainContainer = styled.div` + display: flex; + flex: 1; + flex-direction: column; + overflow: hidden; + height: 0; + min-height: 0; +` + const AssistantContainer = styled.div` margin: 0 10px; margin-top: 4px; + margin-bottom: 4px; + display: flex; ` +// const TabContainer = styled.div` +// display: flex; +// flex: 1; +// flex-direction: row; +// height: 32px; +// max-height: 32px; +// min-height: 32px; +// border-radius: 8px; +// border: 0.5px solid var(--color-border); +// margin: 5px 10px 8px 10px; +// overflow: hidden; +// ` + +// const TabItem = styled.div<{ active: boolean }>` +// display: flex; +// flex: 1; +// flex-direction: column; +// justify-content: center; +// align-items: center; +// cursor: pointer; +// background-color: ${({ active }) => (active ? 'var(--color-list-item)' : 'transparent')}; +// &:hover { +// background-color: var(--color-list-item); +// } +// ` + +// const TabItemText = styled.div` +// font-size: 14px; +// font-weight: 500; +// ` + const UserMenu = styled.div` display: flex; flex-direction: row; diff --git a/src/renderer/src/pages/home/MainSidebar/MainSidebarStyles.tsx b/src/renderer/src/pages/home/MainSidebar/MainSidebarStyles.tsx index 7bc38f32d9..2c8e97e42f 100644 --- a/src/renderer/src/pages/home/MainSidebar/MainSidebarStyles.tsx +++ b/src/renderer/src/pages/home/MainSidebar/MainSidebarStyles.tsx @@ -48,11 +48,11 @@ export const MainMenuItemText = styled.div` export const Container = styled.div` display: flex; flex-direction: column; + flex: 1; width: var(--assistants-width); max-width: var(--assistants-width); border-right: 0.5px solid var(--color-border); height: 100vh; - transition: all 0.3s; ` export const MainMenu = styled.div` diff --git a/src/renderer/src/pages/home/Messages/MessageMenubar.tsx b/src/renderer/src/pages/home/Messages/MessageMenubar.tsx index 4512a7bb38..e27193912d 100644 --- a/src/renderer/src/pages/home/Messages/MessageMenubar.tsx +++ b/src/renderer/src/pages/home/Messages/MessageMenubar.tsx @@ -195,10 +195,10 @@ const MessageMenubar: FC = (props) => { } }, { - label: t('chat.message.settings'), + label: t('common.settings'), key: 'message-settings', icon: , - onClick: () => MessageSettingsPopup.show({ title: t('chat.message.settings') }) + onClick: () => MessageSettingsPopup.show({ title: t('common.settings') }) }, { label: t('chat.topics.export.title'), diff --git a/src/renderer/src/pages/home/Tabs/AssistantsTab.tsx b/src/renderer/src/pages/home/Tabs/AssistantsTab.tsx index 812acfab6a..9c7aa42f06 100644 --- a/src/renderer/src/pages/home/Tabs/AssistantsTab.tsx +++ b/src/renderer/src/pages/home/Tabs/AssistantsTab.tsx @@ -1,11 +1,14 @@ import { DownOutlined, PlusOutlined, RightOutlined } from '@ant-design/icons' import { Draggable, Droppable, DropResult } from '@hello-pangea/dnd' import DragableList from '@renderer/components/DragableList' +import AddAssistantPopup from '@renderer/components/Popups/AddAssistantPopup' import Scrollbar from '@renderer/components/Scrollbar' -import { useAssistants } from '@renderer/hooks/useAssistant' +import { useAssistants, useDefaultAssistant } from '@renderer/hooks/useAssistant' +import { useChat } from '@renderer/hooks/useChat' import { useAssistantsTabSortType } from '@renderer/hooks/useStore' import { useTags } from '@renderer/hooks/useTags' import { Assistant, AssistantsSortType } from '@renderer/types' +import { uuid } from '@renderer/utils' import { Tooltip } from 'antd' import { FC, useCallback, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' @@ -13,18 +16,8 @@ import styled from 'styled-components' import AssistantItem from './components/AssistantItem' -interface AssistantsTabProps { - activeAssistant: Assistant - setActiveAssistant: (assistant: Assistant) => void - onCreateAssistant: () => void - onCreateDefaultAssistant: () => void -} -const Assistants: FC = ({ - activeAssistant, - setActiveAssistant, - onCreateAssistant, - onCreateDefaultAssistant -}) => { +const Assistants: FC = () => { + const { activeAssistant, setActiveAssistant } = useChat() const { assistants, removeAssistant, addAssistant, updateAssistants } = useAssistants() const [dragging, setDragging] = useState(false) const [collapsedTags, setCollapsedTags] = useState>({}) @@ -32,6 +25,18 @@ const Assistants: FC = ({ const { getGroupedAssistants, allTags, updateTagsOrder } = useTags() const { assistantsTabSortType = 'list', setAssistantsTabSortType } = useAssistantsTabSortType() const containerRef = useRef(null) + const { defaultAssistant } = useDefaultAssistant() + + const onCreateAssistant = async () => { + const assistant = await AddAssistantPopup.show() + assistant && setActiveAssistant(assistant) + } + + const onCreateDefaultAssistant = useCallback(() => { + const assistant = { ...defaultAssistant, id: uuid() } + addAssistant(assistant) + setActiveAssistant(assistant) + }, [addAssistant, defaultAssistant, setActiveAssistant]) const onDelete = useCallback( (assistant: Assistant) => { diff --git a/src/renderer/src/pages/home/Tabs/TopicsTab.tsx b/src/renderer/src/pages/home/Tabs/TopicsTab.tsx index f39b834b0b..2a95d3090e 100644 --- a/src/renderer/src/pages/home/Tabs/TopicsTab.tsx +++ b/src/renderer/src/pages/home/Tabs/TopicsTab.tsx @@ -15,6 +15,7 @@ import PromptPopup from '@renderer/components/Popups/PromptPopup' import Scrollbar from '@renderer/components/Scrollbar' import { isMac } from '@renderer/config/constant' import { useAssistant, useAssistants, useTopicsForAssistant } from '@renderer/hooks/useAssistant' +import { useChat } from '@renderer/hooks/useChat' import { modelGenerating } from '@renderer/hooks/useRuntime' import { useSettings } from '@renderer/hooks/useSettings' import { finishTopicRenaming, startTopicRenaming, TopicManager } from '@renderer/hooks/useTopic' @@ -24,7 +25,7 @@ import store from '@renderer/store' import { RootState } from '@renderer/store' import { setGenerating } from '@renderer/store/runtime' import { Assistant, Topic } from '@renderer/types' -import { removeSpecialCharactersForFileName } from '@renderer/utils' +import { classNames, removeSpecialCharactersForFileName } from '@renderer/utils' import { copyTopicAsMarkdown, copyTopicAsPlainText } from '@renderer/utils/copy' import { exportMarkdownToJoplin, @@ -44,19 +45,18 @@ import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import styled from 'styled-components' -interface Props { - assistant: Assistant - activeTopic: Topic - setActiveTopic: (topic: Topic) => void +interface TopicsTabProps { + style?: React.CSSProperties } -const Topics: FC = ({ assistant: _assistant, activeTopic, setActiveTopic }) => { +const Topics: FC = ({ style }) => { + const { activeAssistant, activeTopic, setActiveTopic } = useChat() const { assistants } = useAssistants() - const { assistant, removeTopic, moveTopic, updateTopic, updateTopics } = useAssistant(_assistant.id) + const { assistant, removeTopic, moveTopic, updateTopic, updateTopics } = useAssistant(activeAssistant.id) const { t } = useTranslation() - const { showTopicTime, pinTopicsToTop } = useSettings() + const { showTopicTime, pinTopicsToTop, topicPosition } = useSettings() - const topics = useTopicsForAssistant(_assistant.id) + const topics = useTopicsForAssistant(activeAssistant.id) const renamingTopics = useSelector((state: RootState) => state.runtime.chat.renamingTopics) const newlyRenamedTopics = useSelector((state: RootState) => state.runtime.chat.newlyRenamedTopics) @@ -69,6 +69,7 @@ const Topics: FC = ({ assistant: _assistant, activeTopic, setActiveTopic const pendingTopics = useMemo(() => { return new Set() }, []) + const isPending = useCallback( (topicId: string) => { const hasPending = hasTopicPendingRequests(topicId) @@ -432,7 +433,7 @@ const Topics: FC = ({ assistant: _assistant, activeTopic, setActiveTopic return ( - + {(topic) => { const isActive = topic.id === activeTopic?.id @@ -449,7 +450,7 @@ const Topics: FC = ({ assistant: _assistant, activeTopic, setActiveTopic return ( setTargetTopic(topic)} - className={isActive ? 'active' : ''} + className={classNames('topic-item', { active: isActive })} onClick={() => onSwitchTopic(topic)} style={{ borderRadius }}> {isPending(topic.id) && !isActive && } @@ -513,6 +514,17 @@ const Container = styled(Scrollbar)` display: flex; flex-direction: column; padding: 10px; + max-height: calc(100vh - var(--navbar-height)); + min-width: var(--assistant-width); + &.right { + border-right: 0.5px solid var(--color-border); + .topic-item:hover { + background-color: var(--color-background-soft); + } + .topic-item.active { + background-color: var(--color-background-mute); + } + } ` const TopicListItem = styled.div` diff --git a/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx b/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx index 512f8e0924..0d22443f10 100644 --- a/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx +++ b/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx @@ -60,7 +60,7 @@ const AssistantItem: FC = ({ const { t } = useTranslation() const { allTags } = useTags() const { removeAllTopics } = useAssistant(assistant.id) - const { assistantIconType, setAssistantIconType } = useSettings() + const { assistantIconType, setAssistantIconType, topicPosition } = useSettings() const defaultModel = getDefaultModel() const { assistants, updateAssistants } = useAssistants() @@ -128,9 +128,16 @@ const AssistantItem: FC = ({ return } - EventEmitter.emit(EVENT_NAMES.SWITCH_TOPIC_SIDEBAR) + if (topicPosition === 'left') { + EventEmitter.emit(EVENT_NAMES.SHOW_TOPIC_SIDEBAR) + } + + if (singleLine) { + EventEmitter.emit(EVENT_NAMES.SWITCH_TOPIC_SIDEBAR) + } + onSwitch(assistant) - }, [isMenuOpen, onSwitch, assistant]) + }, [isMenuOpen, topicPosition, singleLine, onSwitch, assistant]) const assistantName = useMemo(() => assistant.name || t('chat.default.name'), [assistant.name, t]) const fullAssistantName = useMemo( diff --git a/src/renderer/src/pages/home/Tabs/index.tsx b/src/renderer/src/pages/home/Tabs/index.tsx deleted file mode 100644 index 3eef509816..0000000000 --- a/src/renderer/src/pages/home/Tabs/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import AddAssistantPopup from '@renderer/components/Popups/AddAssistantPopup' -import { useAssistants, useDefaultAssistant } from '@renderer/hooks/useAssistant' -import { Assistant, Topic } from '@renderer/types' -import { uuid } from '@renderer/utils' -import { FC } from 'react' -import styled from 'styled-components' - -import Assistants from './AssistantsTab' -import Topics from './TopicsTab' - -interface Props { - tab: Tab - activeAssistant: Assistant - activeTopic: Topic - setActiveAssistant: (assistant: Assistant) => void - setActiveTopic: (topic: Topic) => void - style?: React.CSSProperties -} - -type Tab = 'assistants' | 'topic' - -const HomeTabs: FC = ({ tab, activeAssistant, activeTopic, setActiveAssistant, setActiveTopic, style }) => { - const { addAssistant } = useAssistants() - const { defaultAssistant } = useDefaultAssistant() - - const onCreateAssistant = async () => { - const assistant = await AddAssistantPopup.show() - assistant && setActiveAssistant(assistant) - } - - const onCreateDefaultAssistant = () => { - const assistant = { ...defaultAssistant, id: uuid() } - addAssistant(assistant) - setActiveAssistant(assistant) - } - - return ( - - - {tab === 'assistants' && ( - - )} - {tab === 'topic' && ( - - )} - - - ) -} - -const Container = styled.div` - display: flex; - flex: 1; - flex-direction: column; - max-width: var(--assistants-width); - min-width: var(--assistants-width); - background-color: transparent; - overflow: hidden; - .collapsed { - width: 0; - border-left: none; - } -` - -const TabContent = styled.div` - display: flex; - flex: 1; - flex-direction: column; - overflow-y: auto; - overflow-x: hidden; -` - -export default HomeTabs diff --git a/src/renderer/src/pages/settings/DisplaySettings/DisplaySettings.tsx b/src/renderer/src/pages/settings/DisplaySettings/DisplaySettings.tsx index 0a26c03c19..48c8dcbe92 100644 --- a/src/renderer/src/pages/settings/DisplaySettings/DisplaySettings.tsx +++ b/src/renderer/src/pages/settings/DisplaySettings/DisplaySettings.tsx @@ -1,13 +1,16 @@ import { SyncOutlined } from '@ant-design/icons' import CodeEditor from '@renderer/components/CodeEditor' import { HStack } from '@renderer/components/Layout' -import { THEME_COLOR_PRESETS } from '@renderer/config/constant' +import { isMac, THEME_COLOR_PRESETS } from '@renderer/config/constant' import { useTheme } from '@renderer/context/ThemeProvider' import { useSettings } from '@renderer/hooks/useSettings' import useUserTheme from '@renderer/hooks/useUserTheme' import { useAppDispatch } from '@renderer/store' import { + AssistantIconType, DEFAULT_SIDEBAR_ICONS, + setAssistantIconType, + setClickAssistantToShowTopic, setCustomCss, setPinTopicsToTop, setShowTopicTime, @@ -51,7 +54,20 @@ const ColorCircle = styled.div<{ color: string; isActive?: boolean }>` ` const DisplaySettings: FC = () => { - const { showTopicTime, pinTopicsToTop, customCss, sidebarIcons, setTheme, userTheme } = useSettings() + const { + windowStyle, + setWindowStyle, + topicPosition, + setTopicPosition, + clickAssistantToShowTopic, + showTopicTime, + pinTopicsToTop, + customCss, + sidebarIcons, + setTheme, + assistantIconType, + userTheme + } = useSettings() const { theme, settedTheme } = useTheme() const { t } = useTranslation() const dispatch = useAppDispatch() @@ -61,6 +77,13 @@ const DisplaySettings: FC = () => { const [visibleIcons, setVisibleIcons] = useState(sidebarIcons?.visible || DEFAULT_SIDEBAR_ICONS) const [disabledIcons, setDisabledIcons] = useState(sidebarIcons?.disabled || []) + const handleWindowStyleChange = useCallback( + (checked: boolean) => { + setWindowStyle(checked ? 'transparent' : 'opaque') + }, + [setWindowStyle] + ) + const handleColorPrimaryChange = useCallback( (colorHex: string) => { setUserTheme({ @@ -135,6 +158,15 @@ const DisplaySettings: FC = () => { setCurrentZoom(zoomFactor) } + const assistantIconTypeOptions = useMemo( + () => [ + { value: 'model', label: t('settings.assistant.icon.type.model') }, + { value: 'emoji', label: t('settings.assistant.icon.type.emoji') }, + { value: 'none', label: t('settings.assistant.icon.type.none') } + ], + [t] + ) + return ( @@ -164,7 +196,7 @@ const DisplaySettings: FC = () => { value={userTheme.colorPrimary} onChange={(color) => handleColorPrimaryChange(color.toHexString())} showText - size="small" + style={{ width: '110px' }} presets={[ { label: 'Presets', @@ -174,6 +206,15 @@ const DisplaySettings: FC = () => { /> + {isMac && ( + <> + + + {t('settings.theme.window.style.transparent')} + + + + )} {t('settings.display.zoom.title')} @@ -181,15 +222,13 @@ const DisplaySettings: FC = () => { {t('settings.zoom.title')} -