# theme.py — Registrasi color pair curses. # Satu-satunya tempat definisi warna untuk seluruh TUI, # agar render.py dan menubar.py memakai skema yang konsisten. import curses # -- Color pair IDs (id 1-9, id 0 = default curses) -- C_HEADER = 1 # header bar: biru C_USER = 2 # user message: cyan C_AI = 3 # AI response: hijau C_SYSTEM = 4 # system log: kuning C_INPUT = 5 # text input: putih C_STATUS = 6 # status bar: hitam di atas kuning C_STATUS_READY = 10 # status READY: hijau C_STATUS_PROC = 11 # status PROCESSING: kuning C_SEP = 7 # separator line: magenta C_ERROR = 8 # error message: merah C_INPUT_BORDER = 9 # border input box: biru C_STATUS_INFO = 12 # status info (workspace/hints): putih C_HINT_DISABLED = 13 # hint disabled (abu-abu) C_WELCOME = 14 # welcome art: light blue C_TOOL_CALL = 15 # tool call: kuning terang C_TOOL_RESULT = 16 # tool result: magenta muda # -- Menu bar colors (id 17+) -- C_MENU = 17 # background menubar (sama dengan header) C_MENU_ACTIVE = 18 # item menu yang sedang aktif (highlight) C_MENU_DROPDOWN = 19 # item dropdown normal C_MENU_SEL = 20 # item dropdown terseleksi C_MENU_DISABLED = 21 # item non-aktif / separator def init_colors(): # Daftarkan semua color pair sekali di awal. # -1 = foreground/background default terminal. curses.init_pair(C_HEADER, curses.COLOR_BLACK, curses.COLOR_BLUE) curses.init_pair(C_USER, curses.COLOR_CYAN, -1) curses.init_pair(C_AI, curses.COLOR_GREEN, -1) curses.init_pair(C_SYSTEM, curses.COLOR_YELLOW, -1) curses.init_pair(C_INPUT, curses.COLOR_WHITE, -1) curses.init_pair(C_STATUS, curses.COLOR_BLACK, curses.COLOR_YELLOW) curses.init_pair(C_STATUS_READY, curses.COLOR_BLACK, curses.COLOR_GREEN + 8) curses.init_pair(C_STATUS_PROC, curses.COLOR_BLACK, curses.COLOR_YELLOW) curses.init_pair(C_STATUS_INFO, curses.COLOR_BLACK, curses.COLOR_WHITE) curses.init_pair(C_SEP, curses.COLOR_MAGENTA, -1) curses.init_pair(C_ERROR, curses.COLOR_RED, -1) curses.init_pair(C_INPUT_BORDER, curses.COLOR_BLUE, -1) curses.init_pair(C_HINT_DISABLED, 8, -1) # abu-abu di atas bg default curses.init_pair(C_WELCOME, curses.COLOR_BLUE + 8, -1) # light blue curses.init_pair(C_TOOL_CALL, curses.COLOR_YELLOW + 8, -1) # bright yellow curses.init_pair(C_TOOL_RESULT, curses.COLOR_MAGENTA + 8, -1) # bright magenta # Menu bar curses.init_pair(C_MENU, curses.COLOR_BLACK, curses.COLOR_BLUE) curses.init_pair(C_MENU_ACTIVE, curses.COLOR_WHITE, curses.COLOR_BLUE + 8) curses.init_pair(C_MENU_DROPDOWN, curses.COLOR_WHITE, -1) curses.init_pair(C_MENU_SEL, curses.COLOR_BLACK, curses.COLOR_CYAN) curses.init_pair(C_MENU_DISABLED, 8, -1) # abu-abu