feat(desktop): gate traffic-lights behind window-controls style setting
Add a Window controls Style setting ('classic' | 'traffic-lights',
default 'classic') next to the existing Position setting. All four
position×style combinations render correctly with side-driven order
(close,min,max left; min,max,close right).
- Restore deleted left-classic branch (h-8 w-8 rounded-md buttons)
- Add right-traffic-lights branch (cluster with ml-1 container)
- Branch on style instead of side in WindowsWindowControls
- Store field + setter with 'classic' default (no migration needed;
Zustand persist shallow-merges over initial state)
- Settings UI: SettingsTwoColumn with Position chips + Style dropdown
- Sanitize on client (persistence.ts) and server (settings-helpers.js)
- 10 locale dictionaries updated (add-only, no existing keys changed)
- Traffic-light button spacing 8px→10px edge-to-edge
- Delete dead DESKTOP_WINDOW_CONTROLS_WIDTH_PX constant
This commit is contained in:
@@ -945,14 +945,14 @@ export const settingsDict = {
|
||||
'settings.openchamber.sessionRetention.toast.failedArchiveCount': 'Failed to archive {count} session(s)',
|
||||
'settings.openchamber.sessionRetention.toast.failedDeleteCount': 'Failed to delete {count} session(s)',
|
||||
'settings.openchamber.desktopNetwork.title': 'Desktop Network Access',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': 'Window controls',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsDescription': 'Choose where window controls appear and how they look.',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': 'Position',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': 'Window controls position',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionDescription': 'Choose where minimize, maximize, and close buttons appear. Defaults to the right.',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionAria': 'Window controls position',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': 'Style',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': 'Window controls style',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsLeft': 'Left',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsRight': 'Right',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': 'Window controls',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': 'Style',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': 'Window controls style',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsClassic': 'Classic',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsTrafficLights': 'Traffic lights',
|
||||
'settings.openchamber.desktopNetwork.field.launchAtLoginAria': 'Start OpenChamber at login',
|
||||
|
||||
@@ -912,14 +912,14 @@ export const settingsDict = {
|
||||
"settings.openchamber.sessionRetention.toast.failedArchiveCount": "No se pudo archivar {count} sesión(es)",
|
||||
"settings.openchamber.sessionRetention.toast.failedDeleteCount": "No se pudo eliminar {count} sesión(es)",
|
||||
"settings.openchamber.desktopNetwork.title": "Acceso de red de escritorio",
|
||||
"settings.openchamber.desktopNetwork.field.windowControls": "Controles de ventana",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsDescription": "Elige dónde aparecen los controles de ventana y su apariencia.",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPosition": "Posición",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPosition": "Posición de los controles de ventana",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPositionDescription": "Elige dónde aparecen los botones de minimizar, maximizar y cerrar. Por defecto a la derecha.",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPositionAria": "Posición de los controles de ventana",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyle": "Estilo",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyleAria": "Estilo de los controles de ventana",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsLeft": "Izquierda",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsRight": "Derecha",
|
||||
"settings.openchamber.desktopNetwork.field.windowControls": "Controles de ventana",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyle": "Estilo",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyleAria": "Estilo de los controles de ventana",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsClassic": "Clásico",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsTrafficLights": "Semáforo",
|
||||
"settings.openchamber.desktopNetwork.field.launchAtLoginAria": "Iniciar OpenChamber al iniciar sesión",
|
||||
|
||||
@@ -833,14 +833,14 @@ export const settingsDict = {
|
||||
'settings.openchamber.sessionRetention.toast.failedArchiveCount': 'Échec de l\'archivage des sessions {count}',
|
||||
'settings.openchamber.sessionRetention.toast.failedDeleteCount': 'Échec de la suppression des sessions {count}',
|
||||
'settings.openchamber.desktopNetwork.title': 'Accès au réseau de bureau',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': 'Contrôles de fenêtre',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsDescription': 'Choisissez où apparaissent les contrôles de fenêtre et leur apparence.',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': 'Position',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': 'Position des contrôles de fenêtre',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionDescription': 'Choisissez où apparaissent les boutons Réduire, Agrandir et Fermer. Par défaut à droite.',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionAria': 'Position des contrôles de fenêtre',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': 'Style',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': 'Style des contrôles de fenêtre',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsLeft': 'Gauche',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsRight': 'Droite',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': 'Contrôles de fenêtre',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': 'Style',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': 'Style des contrôles de fenêtre',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsClassic': 'Classique',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsTrafficLights': 'Feux de circulation',
|
||||
'settings.openchamber.desktopNetwork.field.launchAtLoginAria': 'Démarrez OpenChamber lors de la connexion',
|
||||
|
||||
@@ -945,14 +945,14 @@ export const settingsDict = {
|
||||
'settings.openchamber.sessionRetention.toast.failedArchiveCount': '{count} 個の Session のアーカイブに失敗しました',
|
||||
'settings.openchamber.sessionRetention.toast.failedDeleteCount': '{count} 個の Session の削除に失敗しました',
|
||||
'settings.openchamber.desktopNetwork.title': 'Desktop ネットワークアクセス',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': 'ウィンドウコントロール',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsDescription': 'ウィンドウコントロールの表示位置とスタイルを選びます。',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': '位置',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': 'ウィンドウコントロールの位置',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionDescription': '最小化・最大化・閉じるボタンの表示位置を選びます。デフォルトは右側です。',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionAria': 'ウィンドウコントロールの位置',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': 'スタイル',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': 'ウィンドウコントロールのスタイル',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsLeft': '左',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsRight': '右',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': 'ウィンドウコントロール',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': 'スタイル',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': 'ウィンドウコントロールのスタイル',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsClassic': 'クラシック',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsTrafficLights': 'トラフィックライト',
|
||||
'settings.openchamber.desktopNetwork.field.launchAtLoginAria': 'ログイン時に OpenChamber を起動',
|
||||
|
||||
@@ -912,14 +912,14 @@ export const settingsDict = {
|
||||
'settings.openchamber.sessionRetention.toast.failedArchiveCount': '세션 {count}개를 보관하지 못했습니다',
|
||||
'settings.openchamber.sessionRetention.toast.failedDeleteCount': '세션 {count}개를 삭제하지 못했습니다',
|
||||
'settings.openchamber.desktopNetwork.title': 'Desktop 네트워크 접속',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': '창 컨트롤',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsDescription': '창 컨트롤의 위치와 모양을 선택합니다.',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': '위치',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': '창 컨트롤 위치',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionDescription': '최소화, 최대화, 닫기 버튼이 표시될 위치를 선택합니다. 기본값은 오른쪽입니다.',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionAria': '창 컨트롤 위치',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': '스타일',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': '창 컨트롤 스타일',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsLeft': '왼쪽',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsRight': '오른쪽',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': '창 컨트롤',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': '스타일',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': '창 컨트롤 스타일',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsClassic': '클래식',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsTrafficLights': '트래픽 라이트',
|
||||
'settings.openchamber.desktopNetwork.field.launchAtLoginAria': '로그인 시 OpenChamber 시작',
|
||||
|
||||
@@ -780,14 +780,14 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.hint.openAfterRestart': 'Po restarcie otwórz z innego urządzenia: ',
|
||||
'settings.openchamber.desktopNetwork.hint.openNow': 'Otwórz z innego urządzenia: ',
|
||||
'settings.openchamber.desktopNetwork.title': 'Dostęp sieciowy pulpitu',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': 'Elementy sterujące oknem',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsDescription': 'Wybierz, gdzie mają się pojawiać elementy sterujące oknem i jak mają wyglądać.',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': 'Pozycja',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': 'Pozycja elementów sterujących oknem',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionDescription': 'Wybierz, gdzie mają się pojawiać przyciski minimalizacji, maksymalizacji i zamykania. Domyślnie po prawej.',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionAria': 'Pozycja elementów sterujących oknem',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': 'Styl',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': 'Styl elementów sterujących oknem',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsLeft': 'Lewo',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsRight': 'Prawo',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': 'Elementy sterujące oknem',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': 'Styl',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': 'Styl elementów sterujących oknem',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsClassic': 'Klasyczny',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsTrafficLights': 'Sygnalizacja świetlna',
|
||||
'settings.openchamber.git.changesViewAria': 'Tryb widoku zmian Git',
|
||||
|
||||
@@ -912,14 +912,14 @@ export const settingsDict = {
|
||||
"settings.openchamber.sessionRetention.toast.failedArchiveCount": "Não foi possível arquivar {count} sessão(es)",
|
||||
"settings.openchamber.sessionRetention.toast.failedDeleteCount": "Não foi possível excluir {count} sessão(es)",
|
||||
"settings.openchamber.desktopNetwork.title": "Acesso de rede do desktop",
|
||||
"settings.openchamber.desktopNetwork.field.windowControls": "Controles da janela",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsDescription": "Escolha onde os controles da janela aparecem e como eles são exibidos.",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPosition": "Posição",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPosition": "Posição dos controles da janela",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPositionDescription": "Escolha onde os botões de minimizar, maximizar e fechar aparecem. O padrão é à direita.",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPositionAria": "Posição dos controles da janela",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyle": "Estilo",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyleAria": "Estilo dos controles da janela",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsLeft": "Esquerda",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsRight": "Direita",
|
||||
"settings.openchamber.desktopNetwork.field.windowControls": "Controles da janela",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyle": "Estilo",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyleAria": "Estilo dos controles da janela",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsClassic": "Clássico",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsTrafficLights": "Semáforo",
|
||||
"settings.openchamber.desktopNetwork.field.launchAtLoginAria": "Iniciar o OpenChamber ao fazer login",
|
||||
|
||||
@@ -912,14 +912,14 @@ export const settingsDict = {
|
||||
"settings.openchamber.sessionRetention.toast.failedArchiveCount": "Не вдалося заархівувати сесій: {count}",
|
||||
"settings.openchamber.sessionRetention.toast.failedDeleteCount": "Не вдалося видалити сесій: {count}",
|
||||
"settings.openchamber.desktopNetwork.title": "Мережевий доступ десктопного застосунку",
|
||||
"settings.openchamber.desktopNetwork.field.windowControls": "Елементи керування вікном",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsDescription": "Виберіть, де з’являються елементи керування вікном і як вони виглядають.",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPosition": "Позиція",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPosition": "Позиція елементів керування вікном",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPositionDescription": "Виберіть, де з’являються кнопки згортання, розгортання та закриття. За замовчуванням справа.",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsPositionAria": "Позиція елементів керування вікном",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyle": "Стиль",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyleAria": "Стиль елементів керування вікном",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsLeft": "Зліва",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsRight": "Справа",
|
||||
"settings.openchamber.desktopNetwork.field.windowControls": "Елементи керування вікном",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyle": "Стиль",
|
||||
"settings.openchamber.desktopNetwork.field.windowControlsStyleAria": "Стиль елементів керування вікном",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsClassic": "Класичний",
|
||||
"settings.openchamber.desktopNetwork.option.windowControlsTrafficLights": "Світлофор",
|
||||
"settings.openchamber.desktopNetwork.field.launchAtLoginAria": "Запускати OpenChamber під час входу в систему",
|
||||
|
||||
@@ -912,14 +912,14 @@ export const settingsDict = {
|
||||
'settings.openchamber.sessionRetention.toast.failedArchiveCount': '归档 {count} 个会话失败',
|
||||
'settings.openchamber.sessionRetention.toast.failedDeleteCount': '删除 {count} 个会话失败',
|
||||
'settings.openchamber.desktopNetwork.title': '桌面端网络访问',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': '窗口控件',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsDescription': '选择窗口控件的位置和外观。',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': '位置',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': '窗口控件位置',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionDescription': '选择最小化、最大化和关闭按钮的显示位置。默认在右侧。',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionAria': '窗口控件位置',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': '样式',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': '窗口控件样式',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsLeft': '左侧',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsRight': '右侧',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': '窗口控件',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': '样式',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': '窗口控件样式',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsClassic': '经典',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsTrafficLights': '红绿灯',
|
||||
'settings.openchamber.desktopNetwork.field.launchAtLoginAria': '登录时启动 OpenChamber',
|
||||
|
||||
@@ -909,14 +909,14 @@
|
||||
'settings.openchamber.sessionRetention.toast.failedArchiveCount': '封存 {count} 個工作階段失敗',
|
||||
'settings.openchamber.sessionRetention.toast.failedDeleteCount': '刪除 {count} 個工作階段失敗',
|
||||
'settings.openchamber.desktopNetwork.title': '桌面端網路存取',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': '視窗控制項',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsDescription': '選擇視窗控制項的位置和外觀。',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': '位置',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': '視窗控制項位置',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionDescription': '選擇最小化、最大化和關閉按鈕的顯示位置。預設在右側。',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionAria': '視窗控制項位置',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': '樣式',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': '視窗控制項樣式',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsLeft': '左側',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsRight': '右側',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': '視窗控制項',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': '樣式',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': '視窗控制項樣式',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsClassic': '經典',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsTrafficLights': '紅綠燈',
|
||||
'settings.openchamber.desktopNetwork.field.allowLanAccessAria': '允許桌面 sidecar 區域網路存取',
|
||||
|
||||
Reference in New Issue
Block a user