@@ -13,7 +13,7 @@ use ratatui::{
1313use shai_core:: { agent:: { events:: PermissionRequest , output:: PrettyFormatter , PermissionResponse } , tools:: { ToolCall , ToolResult } } ;
1414// Removed tui_textarea dependency for colored preview
1515
16- use super :: theme:: SHAI_YELLOW ;
16+ use super :: theme:: { SHAI_YELLOW , ThemePalette } ;
1717
1818pub enum PermissionModalAction {
1919 Nope ,
@@ -33,11 +33,12 @@ pub struct PermissionWidget<'a> {
3333 formatted_request : String ,
3434 preview_text : Text < ' a > ,
3535 scroll_offset : usize ,
36- scroll_state : ScrollbarState
36+ scroll_state : ScrollbarState ,
37+ palette : ThemePalette ,
3738}
3839
3940impl PermissionWidget < ' _ > {
40- pub fn new ( request_id : String , request : PermissionRequest , total : usize ) -> Self {
41+ pub fn new ( request_id : String , request : PermissionRequest , total : usize , palette : ThemePalette ) -> Self {
4142 let formatter = PrettyFormatter :: new ( ) ;
4243 let formatted_request = formatter. format_toolcall ( & request. call , request. preview . as_ref ( ) ) ;
4344 let preview_text = formatted_request. into_text ( ) . unwrap ( ) ;
@@ -51,7 +52,8 @@ impl PermissionWidget<'_> {
5152 formatted_request,
5253 preview_text,
5354 scroll_offset : 0 ,
54- scroll_state : ScrollbarState :: new ( content_length)
55+ scroll_state : ScrollbarState :: new ( content_length) ,
56+ palette,
5557 }
5658 }
5759
@@ -150,7 +152,7 @@ impl PermissionWidget<'_> {
150152 . borders ( Borders :: ALL )
151153 . border_set ( border:: ROUNDED )
152154 . padding ( Padding { left : 1 , right : 1 , top : 1 , bottom : 1 } )
153- . border_style ( Style :: default ( ) . fg ( Color :: Cyan ) )
155+ . border_style ( Style :: default ( ) . fg ( self . palette . status ) )
154156 . title ( if self . remaining_perms > 1 {
155157 format ! ( " 🔐 Permission Required ({}/{}) " , 1 , self . remaining_perms)
156158 } else {
@@ -166,20 +168,20 @@ impl PermissionWidget<'_> {
166168 let tool_name = PrettyFormatter :: capitalize_first ( & call. tool_name ) ;
167169 let context = PrettyFormatter :: extract_primary_param ( & call. parameters , & call. tool_name ) ;
168170 let mut title = Line :: from ( vec ! [
169- Span :: styled( "🔧 " , Color :: White ) ,
170- Span :: styled( tool_name, Style :: new ( ) . white ( ) . bold( ) )
171+ Span :: styled( "🔧 " , self . palette . input_text ) ,
172+ Span :: styled( tool_name, Style :: default ( ) . fg ( self . palette . input_text ) . bold( ) )
171173 ] ) ;
172174 if let Some ( ( _, ctx) ) = context {
173- title. push_span ( Span :: styled ( format ! ( "({})" , ctx) , Style :: new ( ) . white ( ) ) ) ;
175+ title. push_span ( Span :: styled ( format ! ( "({})" , ctx) , Style :: default ( ) . fg ( self . palette . input_text ) ) ) ;
174176 } ;
175177
176178 let block = Block :: default ( )
177179 . borders ( Borders :: ALL )
178180 . border_set ( border:: ROUNDED )
179181 . padding ( Padding { left : 1 , right : 1 , top : 0 , bottom : 0 } )
180182 . title ( title)
181- . title_style ( Style :: default ( ) . fg ( Color :: White ) )
182- . border_style ( Style :: default ( ) . fg ( Color :: DarkGray ) ) ;
183+ . title_style ( Style :: default ( ) . fg ( self . palette . input_text ) )
184+ . border_style ( Style :: default ( ) . fg ( self . palette . border ) ) ;
183185
184186 let inner = block. inner ( tool) ;
185187 f. render_widget ( block, tool) ;
@@ -192,7 +194,7 @@ impl PermissionWidget<'_> {
192194 // Render scrollbar if content is longer than area
193195 if self . preview_text . lines . len ( ) > inner. height as usize {
194196 let scrollbar = Scrollbar :: new ( ScrollbarOrientation :: VerticalRight )
195- . style ( Style :: default ( ) . fg ( Color :: DarkGray ) ) ;
197+ . style ( Style :: default ( ) . fg ( self . palette . border ) ) ;
196198 f. render_stateful_widget ( scrollbar, inner, & mut self . scroll_state . clone ( ) ) ;
197199 }
198200
@@ -201,13 +203,13 @@ impl PermissionWidget<'_> {
201203 for ( i, s) in items. into_iter ( ) . enumerate ( ) {
202204 if i == self . selected_index {
203205 lines. push ( Line :: from ( vec ! [
204- Span :: styled( "❯ " , Color :: White ) ,
205- Span :: styled( s, Color :: White )
206+ Span :: styled( "❯ " , self . palette . suggestion_selected_fg ) ,
207+ Span :: styled( s, self . palette . suggestion_selected_fg )
206208 ] ) ) ;
207209 } else {
208210 lines. push ( Line :: from ( vec ! [
209- Span :: styled( " " , Color :: DarkGray ) ,
210- Span :: styled( s, Color :: DarkGray )
211+ Span :: styled( " " , self . palette . placeholder ) ,
212+ Span :: styled( s, self . palette . placeholder )
211213 ] ) ) ;
212214 } ;
213215 }
0 commit comments