feat: layar Pengaturan (PRD §5.1.5) + tombol Setting beranda + toggle suara
CI / test (push) Successful in 39s

- Layar Pengaturan (',' atau klik chip Pengaturan beranda): bahasa, mode tema,
  efek suara, volume, animasi, timestamp — semua berlaku langsung & tersimpan
  ke config (config.Save), plus path config + catatan.
- Audio live: Engine.SetEnabled/SetVolume/Enabled/Volume; init idempoten
  (readyOnce/started) sehingga engine yang lahir mati bisa dinyalakan tanpa
  restart — komentar 'shortcut' F-024 lama dihapus.
- Beranda: kolom tengah kini CTA + hint '[m] suara: …' (klik = toggle) +
  chip Pengaturan — draf dashboard lengkap.
- Tombol lama 'T'/'a'/'S' kini lewat applySetting yang sama (DRY + persist).
- TIA_LANG dihapus (tak perlu lagi): e2e memakai XDG_CONFIG_HOME temp
  (config bersih per tes) → tes tidak tergantung config pengguna.
- Toast: klik di luar kotak toast tidak lagi menutupnya (hanya klik pada toast)
  — tombol lain tetap bisa diklik saat notifikasi tampil.
- Tes: unit settings (apply/persist/jepit volume, baris plain==styled tanpa
  ANSI) + e2e TestSettingsScreen (klik chip, toggle, bahasa→Inggris,
  verifikasi config.yaml).
This commit is contained in:
oxpoe committed 2026-10-16 04:07:33 +07:00
1 parent e903912029
commit 2d07935f83
10 files changed
+663 -62

No files matched your search

+18
View File
@@ -23,8 +23,20 @@ section:
home:
enterWorkspace: "enter workspace"
soundHint: "sound"
disclaimer: "Destructive actions (bring a stack down, delete resources) cannot be undone — double-check."
settings:
title: "Settings"
language: "Language"
theme: "Theme mode"
sound: "Sound effects"
volume: "Volume"
animation: "Animation"
timestamps: "Log timestamps"
config: "Config"
applyNote: "Changes apply immediately and are saved automatically."
toolbar:
search: "Search"
addStack: "+ stack"
@@ -150,6 +162,7 @@ hint:
footerHome: "[1/enter] stacks · [t] toast · [T] theme · [c] convert · [a] reduced-motion · [q] quit"
footerStacks: "[u] start · [s] stop · [R] restart · [p] update · [D] down · [j/k] select · [/] search · [0] home · [q] quit"
footerContainers: "[1-5] sections · [j/k] select · [/] search · [Tab] focus · [h/l] tab · [T] theme · [r] reload · [0] home · [q] quit"
footerSettings: "[j/k] select · [enter] change · [h/l] adjust · [esc] close · [q] quit"
footer:
statusShort: "anim %s fps · audio: %s"
@@ -161,6 +174,11 @@ toast:
configError: "⚠ [ WARNING ] Config problem — using defaults"
themeMode: "Theme mode: %s"
timestamps: "Log timestamps: %s"
language: "Language: %s"
sound: "Sound effects: %s"
volume: "Volume: %d%%"
animation: "Animation: %s"
configSave: "Failed to save config"
stackOk: "Stack '%s': %s done"
stackFail: "Stack '%s' failed"
stackSaved: "Stack '%s' saved"
+18
View File
@@ -23,8 +23,20 @@ section:
home:
enterWorkspace: "masuk workspace"
soundHint: "suara"
disclaimer: "Aksi destruktif (turunkan stack, hapus resource) tidak bisa dibatalkan — periksa dua kali."
settings:
title: "Pengaturan"
language: "Bahasa"
theme: "Mode tema"
sound: "Efek suara"
volume: "Volume"
animation: "Animasi"
timestamps: "Timestamp log"
config: "Konfigurasi"
applyNote: "Perubahan berlaku langsung dan tersimpan otomatis."
toolbar:
search: "Cari"
addStack: "+ stack"
@@ -150,6 +162,7 @@ hint:
footerHome: "[1/enter] stack · [t] toast · [T] tema · [c] konversi · [a] reduced-motion · [q] keluar"
footerStacks: "[u] jalankan · [s] henti · [R] ulang · [p] perbarui · [D] turunkan · [j/k] pilih · [/] cari · [0] beranda · [q] keluar"
footerContainers: "[1-5] bagian · [j/k] pilih · [/] cari · [Tab] fokus · [h/l] tab · [T] tema · [r] muat ulang · [0] beranda · [q] keluar"
footerSettings: "[j/k] pilih · [enter] ubah · [h/l] geser · [esc] tutup · [q] keluar"
footer:
statusShort: "animasi %s fps · audio: %s"
@@ -161,6 +174,11 @@ toast:
configError: "⚠ [ PERINGATAN ] Config bermasalah — memakai default"
themeMode: "Mode tema: %s"
timestamps: "Timestamp log: %s"
language: "Bahasa: %s"
sound: "Efek suara: %s"
volume: "Volume: %d%%"
animation: "Animasi: %s"
configSave: "Gagal menyimpan config"
stackOk: "Stack '%s': %s selesai"
stackFail: "Stack '%s' gagal"
stackSaved: "Stack '%s' tersimpan"