feat: custom terminal background image + theme editor hardening

- settings: backgroundImage/backgroundImageOpacity (10..100, default 60)
- main: otimg:// protocol serves only the configured background file
  (path-allowlisted, 403 otherwise); dev http origin cannot load file:
- TerminalView: allowTransparency + transparent theme background while an
  image is set; .term-bg-image layer behind the xterm surface
- terminal.css: .has-bg-image keeps .xterm-viewport transparent — the old
  chrome-bg pin covered the image layer (root cause of image not showing)
- ThemeSettingsTab: image picker + opacity slider
- ThemeEditor: duplicate-name hint now covers builtin names too; seed
  colors normalized to #rrggbb
- settingsStore: sanitize theme colors, reject non-hex values
This commit is contained in:
Bill committed 2026-09-20 23:24:43 +08:00
1 parent c94e0fbac7
commit 481f54ed59
13 files changed
+187 -17

No files matched your search

+6
View File
@@ -136,12 +136,18 @@ const settings: Record<string, string> = {
'settings.highlight.builtin.url': 'ウェブリンク',
'settings.theme.accent': 'タブのアクセントカラー',
'settings.theme.accentDesc': 'アクティブなタブの枠線、サイドバーのインジケーター、SSH バッジのアクセントカラー',
'settings.theme.backgroundImage': '背景画像',
'settings.theme.backgroundImageDesc': 'ターミナルの背後に画像を表示します。削除すると無地の背景に戻ります',
'settings.theme.chooseImage': '画像を選択',
'settings.theme.clearImage': '削除',
'settings.theme.imageOpacity': '画像の不透明度',
'settings.theme.customBadge': 'カスタム',
'settings.theme.deleteTitle': 'カスタムテーマを削除',
'settings.theme.create': '新しいテーマ',
'settings.theme.editTitle': 'テーマを編集',
'settings.themeEditor.name': '名前',
'settings.themeEditor.namePlaceholder': 'テーマ名',
'settings.themeEditor.duplicateName': '他のテーマと同名です(保存は可能)',
'settings.themeEditor.copySuffix': '(コピー)',
'settings.about.currentVersion': '現在のバージョン',
'settings.about.statusIdle': 'クリックして更新を確認',