rat_theme4/themes/
shell.rs

1#![allow(unused_imports)]
2use crate::RatWidgetColor;
3use crate::palette::{Colors, Palette};
4use crate::theme::SalsaTheme;
5use crate::{StyleName, WidgetStyle};
6#[cfg(feature = "rat-widget")]
7use rat_widget;
8#[cfg(feature = "color-input")]
9use rat_widget_extra::color_input::ColorInputStyle;
10use ratatui::layout::Alignment;
11use ratatui::style::{Color, Style, Stylize};
12use ratatui::symbols;
13use ratatui::symbols::border;
14use ratatui::widgets::{Block, Borders};
15use std::time::Duration;
16
17/// A 'shell'-theme.
18///
19/// It uses almost no background colors and lets your shell
20/// bleed through.
21pub fn create_shell(p: Palette) -> SalsaTheme {
22    let mut th = SalsaTheme::new(p);
23
24    th.define_style(Style::LABEL_FG, th.p.fg_style_alias(Color::LABEL_FG));
25    th.define_style(Style::INPUT, th.p.style_alias(Color::INPUT_BG));
26    th.define_style(Style::FOCUS, th.p.high_style_alias(Color::FOCUS_BG));
27    th.define_style(Style::SELECT, th.p.style_alias(Color::SELECT_BG));
28    th.define_style(Style::DISABLED, th.p.style_alias(Color::DISABLED_BG));
29    th.define_style(Style::INVALID, th.p.style_alias(Color::INVALID_BG));
30    th.define_style(Style::HOVER, th.p.style_alias(Color::HOVER_BG));
31    th.define_style(
32        Style::TITLE,
33        th.p.fg_bg_style_alias(Color::TITLE_FG, Color::TITLE_BG),
34    );
35    th.define_style(
36        Style::HEADER,
37        th.p.fg_bg_style_alias(Color::HEADER_FG, Color::HEADER_BG),
38    );
39    th.define_style(
40        Style::FOOTER,
41        th.p.fg_bg_style_alias(Color::FOOTER_FG, Color::HEADER_BG),
42    );
43    th.define_style(
44        Style::WEEK_HEADER_FG,
45        th.p.fg_style_alias(Color::WEEK_HEADER_FG),
46    );
47    th.define_style(
48        Style::MONTH_HEADER_FG,
49        th.p.fg_style_alias(Color::MONTH_HEADER_FG),
50    );
51    th.define_style(Style::SHADOWS, th.p.style_alias(Color::SHADOW_BG));
52    th.define_style(
53        Style::INPUT_FOCUS,
54        th.p.high_style_alias(Color::INPUT_FOCUS_BG),
55    );
56    th.define_style(Style::INPUT_SELECT, th.p.style_alias(Color::SELECT_BG));
57    th.define_style(Style::KEY_BINDING, th.p.style_alias(Color::KEY_BINDING_BG));
58
59    th.define_style(Style::BUTTON_BASE, th.p.style_alias(Color::BUTTON_BASE_BG));
60    th.define_style(Style::MENU_BASE, th.p.style_alias(Color::MENU_BASE_BG));
61    th.define_style(Style::STATUS_BASE, th.p.style_alias(Color::STATUS_BASE_BG));
62
63    th.define_style(
64        Style::CONTAINER_BASE,
65        th.p.style_alias(Color::CONTAINER_BASE_BG),
66    );
67    th.define_style(
68        Style::CONTAINER_BORDER_FG,
69        th.p.fg_style_alias(Color::CONTAINER_BORDER_FG),
70    );
71    th.define_style(
72        Style::CONTAINER_ARROW_FG,
73        th.p.fg_style_alias(Color::CONTAINER_ARROW_FG),
74    );
75
76    th.define_style(
77        Style::DOCUMENT_BASE,
78        th.p.style_alias(Color::DOCUMENT_BASE_BG),
79    );
80    th.define_style(
81        Style::DOCUMENT_BORDER_FG,
82        th.p.fg_style_alias(Color::DOCUMENT_BORDER_FG),
83    );
84    th.define_style(
85        Style::DOCUMENT_ARROW_FG,
86        th.p.fg_style_alias(Color::DOCUMENT_ARROW_FG),
87    );
88
89    th.define_style(Style::POPUP_BASE, th.p.style_alias(Color::POPUP_BASE_BG));
90    th.define_style(
91        Style::POPUP_BORDER_FG,
92        th.p.fg_style_alias(Color::POPUP_BORDER_FG),
93    );
94    th.define_style(
95        Style::POPUP_ARROW_FG,
96        th.p.fg_style_alias(Color::POPUP_ARROW_FG),
97    );
98
99    th.define_style(Style::DIALOG_BASE, th.p.style_alias(Color::DIALOG_BASE_BG));
100    th.define_style(
101        Style::DIALOG_BORDER_FG,
102        th.p.fg_style_alias(Color::DIALOG_BORDER_FG),
103    );
104    th.define_style(
105        Style::DIALOG_ARROW_FG,
106        th.p.fg_style_alias(Color::DIALOG_ARROW_FG),
107    );
108
109    #[cfg(feature = "rat-widget")]
110    th.define_fn(WidgetStyle::BUTTON, button);
111    #[cfg(feature = "rat-widget")]
112    th.define_fn(WidgetStyle::CALENDAR, month);
113    #[cfg(feature = "rat-widget")]
114    th.define_fn(WidgetStyle::CHECKBOX, checkbox);
115    #[cfg(feature = "rat-widget")]
116    th.define_fn(WidgetStyle::CHOICE, choice);
117    #[cfg(feature = "rat-widget")]
118    th.define_fn(WidgetStyle::CLIPPER, clipper);
119    #[cfg(feature = "rat-widget")]
120    th.define_fn(WidgetStyle::COMBOBOX, combobox);
121    #[cfg(feature = "rat-widget")]
122    #[cfg(feature = "color-input")]
123    th.define_fn(WidgetStyle::COLOR_INPUT, color_input);
124    #[cfg(feature = "rat-widget")]
125    th.define_fn(WidgetStyle::DIALOG_FRAME, dialog_frame);
126    #[cfg(feature = "rat-widget")]
127    th.define_fn(WidgetStyle::FILE_DIALOG, file_dialog);
128    #[cfg(feature = "rat-widget")]
129    th.define_fn(WidgetStyle::FORM, form);
130    #[cfg(feature = "rat-widget")]
131    th.define_fn(WidgetStyle::LINE_NR, line_nr);
132    #[cfg(feature = "rat-widget")]
133    th.define_fn(WidgetStyle::LIST, list);
134    #[cfg(feature = "rat-widget")]
135    th.define_fn(WidgetStyle::MENU, menu);
136    #[cfg(feature = "rat-widget")]
137    th.define_fn(WidgetStyle::MONTH, month);
138    #[cfg(feature = "rat-widget")]
139    th.define_fn(WidgetStyle::MSG_DIALOG, msg_dialog);
140    #[cfg(feature = "rat-widget")]
141    th.define_fn(WidgetStyle::PARAGRAPH, paragraph);
142    #[cfg(feature = "rat-widget")]
143    th.define_fn(WidgetStyle::RADIO, radio);
144    #[cfg(feature = "rat-widget")]
145    th.define_fn(WidgetStyle::SCROLL, scroll);
146    #[cfg(feature = "rat-widget")]
147    th.define_fn(WidgetStyle::SCROLL_DIALOG, dialog_scroll);
148    #[cfg(feature = "rat-widget")]
149    th.define_fn(WidgetStyle::SCROLL_POPUP, popup_scroll);
150    #[cfg(feature = "rat-widget")]
151    th.define_fn(WidgetStyle::SHADOW, shadow);
152    #[cfg(feature = "rat-widget")]
153    th.define_fn(WidgetStyle::SLIDER, slider);
154    #[cfg(feature = "rat-widget")]
155    th.define_fn(WidgetStyle::SPLIT, split);
156    #[cfg(feature = "rat-widget")]
157    th.define_fn(WidgetStyle::STATUSLINE, statusline);
158    #[cfg(feature = "rat-widget")]
159    th.define_fn(WidgetStyle::TABBED, tabbed);
160    #[cfg(feature = "rat-widget")]
161    th.define_fn(WidgetStyle::TABLE, table);
162    #[cfg(feature = "rat-widget")]
163    th.define_fn(WidgetStyle::TEXT, text);
164    #[cfg(feature = "rat-widget")]
165    th.define_fn(WidgetStyle::TEXTAREA, textarea);
166    #[cfg(feature = "rat-widget")]
167    th.define_fn(WidgetStyle::TEXTVIEW, textview);
168    #[cfg(feature = "rat-widget")]
169    th.define_fn(WidgetStyle::VIEW, view);
170
171    th
172}
173
174#[cfg(feature = "rat-widget")]
175fn button(th: &SalsaTheme) -> rat_widget::button::ButtonStyle {
176    rat_widget::button::ButtonStyle {
177        style: th.style(Style::BUTTON_BASE),
178        focus: Some(th.style(Style::FOCUS)),
179        armed: Some(th.style(Style::SELECT)),
180        hover: Some(th.p.style_alias(Color::HOVER_BG)),
181        armed_delay: Some(Duration::from_millis(50)),
182        ..Default::default()
183    }
184}
185
186#[cfg(feature = "rat-widget")]
187fn checkbox(th: &SalsaTheme) -> rat_widget::checkbox::CheckboxStyle {
188    rat_widget::checkbox::CheckboxStyle {
189        style: th.style(Style::INPUT),
190        focus: Some(th.style(Style::INPUT_FOCUS)),
191        ..Default::default()
192    }
193}
194
195#[cfg(feature = "rat-widget")]
196fn combobox(th: &SalsaTheme) -> rat_widget::combobox::ComboboxStyle {
197    rat_widget::combobox::ComboboxStyle {
198        choice: th.style(WidgetStyle::CHOICE),
199        text: th.style(WidgetStyle::TEXT),
200        ..Default::default()
201    }
202}
203
204#[cfg(feature = "rat-widget")]
205fn choice(th: &SalsaTheme) -> rat_widget::choice::ChoiceStyle {
206    rat_widget::choice::ChoiceStyle {
207        style: th.style(Style::INPUT),
208        select: Some(th.style(Style::INPUT_SELECT)),
209        focus: Some(th.style(Style::INPUT_FOCUS)),
210        popup_style: Some(th.style(Style::POPUP_BASE)),
211        popup_border: Some(th.style(Style::POPUP_BORDER_FG)),
212        popup_scroll: Some(th.style(WidgetStyle::SCROLL_POPUP)),
213        popup_block: Some(
214            Block::bordered()
215                .borders(Borders::LEFT | Borders::BOTTOM | Borders::RIGHT)
216                .border_set(border::Set {
217                    top_left: "X",
218                    top_right: "X",
219                    bottom_left: "▀",
220                    bottom_right: "▀",
221                    vertical_left: "▌",
222                    vertical_right: "▐",
223                    horizontal_top: "X",
224                    horizontal_bottom: "▀",
225                })
226                .border_style(th.style::<Style>(Style::POPUP_BORDER_FG)),
227        ),
228        ..Default::default()
229    }
230}
231
232#[cfg(feature = "rat-widget")]
233fn clipper(th: &SalsaTheme) -> rat_widget::clipper::ClipperStyle {
234    rat_widget::clipper::ClipperStyle {
235        style: th.style(Style::CONTAINER_BASE),
236        label_style: Some(th.style(Style::LABEL_FG)),
237        scroll: Some(th.style(WidgetStyle::SCROLL)),
238        ..Default::default()
239    }
240}
241
242#[cfg(feature = "rat-widget")]
243fn dialog_frame(th: &SalsaTheme) -> rat_widget::dialog_frame::DialogFrameStyle {
244    rat_widget::dialog_frame::DialogFrameStyle {
245        style: th.style(Style::DIALOG_BASE),
246        border_style: Some(th.style::<Style>(Style::DIALOG_BORDER_FG)),
247        button_style: Some(th.style(WidgetStyle::BUTTON)),
248        ..rat_widget::dialog_frame::DialogFrameStyle::default()
249    }
250}
251
252#[cfg(feature = "rat-widget")]
253fn file_dialog(th: &SalsaTheme) -> rat_widget::file_dialog::FileDialogStyle {
254    rat_widget::file_dialog::FileDialogStyle {
255        style: th.style(Style::DIALOG_BASE),
256        list: Some(th.style(WidgetStyle::LIST)),
257        roots: Some(rat_widget::list::ListStyle {
258            style: th.style(Style::DIALOG_BASE),
259            ..th.style(WidgetStyle::LIST)
260        }),
261        text: Some(th.style(WidgetStyle::TEXT)),
262        button: Some(th.style(WidgetStyle::BUTTON)),
263        block: Some(Block::bordered()),
264        ..Default::default()
265    }
266}
267
268#[cfg(feature = "rat-widget")]
269fn form(th: &SalsaTheme) -> rat_widget::form::FormStyle {
270    rat_widget::form::FormStyle {
271        style: th.style(Style::CONTAINER_BASE),
272        label_style: Some(th.style(Style::LABEL_FG)),
273        navigation: Some(th.style(Style::CONTAINER_ARROW_FG)),
274        navigation_hover: Some(th.style(Style::HOVER)),
275        block: Some(
276            Block::bordered()
277                .borders(Borders::TOP | Borders::BOTTOM)
278                .border_set(border::EMPTY)
279                .border_style(th.style::<Style>(Style::CONTAINER_BORDER_FG)),
280        ),
281        border_style: Some(th.style::<Style>(Style::CONTAINER_BORDER_FG)),
282        ..Default::default()
283    }
284}
285
286#[cfg(feature = "rat-widget")]
287fn line_nr(th: &SalsaTheme) -> rat_widget::line_number::LineNumberStyle {
288    rat_widget::line_number::LineNumberStyle {
289        style: th.style(Style::CONTAINER_BASE),
290        cursor: Some(th.style(Style::INPUT_SELECT)),
291        ..rat_widget::line_number::LineNumberStyle::default()
292    }
293}
294
295#[cfg(feature = "rat-widget")]
296fn list(th: &SalsaTheme) -> rat_widget::list::ListStyle {
297    rat_widget::list::ListStyle {
298        style: th.style(Style::CONTAINER_BASE),
299        select: Some(th.style(Style::SELECT)),
300        focus: Some(th.style(Style::FOCUS)),
301        scroll: Some(th.style(WidgetStyle::SCROLL)),
302        ..Default::default()
303    }
304}
305
306#[cfg(feature = "rat-widget")]
307fn menu(th: &SalsaTheme) -> rat_widget::menu::MenuStyle {
308    rat_widget::menu::MenuStyle {
309        style: th.style(Style::MENU_BASE),
310        title: Some(th.style(Style::TITLE)),
311        focus: Some(th.style(Style::FOCUS)),
312        right: Some(th.style(Style::KEY_BINDING)),
313        disabled: Some(th.style(Style::DISABLED)),
314        highlight: Some(Style::default().underlined()),
315        popup_block: Some(Block::bordered()),
316        popup: Default::default(),
317        popup_border: Some(th.style(Style::MENU_BASE)),
318        popup_style: Some(th.style(Style::MENU_BASE)),
319        popup_focus: Some(th.style(Style::FOCUS)),
320        popup_right: Some(th.style(Style::KEY_BINDING)),
321        popup_disabled: Some(th.style(Style::DISABLED)),
322        popup_highlight: Some(Style::default().underlined()),
323        ..Default::default()
324    }
325}
326
327#[cfg(feature = "rat-widget")]
328fn month(th: &SalsaTheme) -> rat_widget::calendar::CalendarStyle {
329    rat_widget::calendar::CalendarStyle {
330        style: th.style(Style::CONTAINER_BASE),
331        title: Some(th.style(Style::MONTH_HEADER_FG)),
332        weeknum: Some(th.style(Style::WEEK_HEADER_FG)),
333        weekday: Some(th.style(Style::WEEK_HEADER_FG)),
334        day: None,
335        select: Some(th.style(Style::SELECT)),
336        focus: Some(th.style(Style::FOCUS)),
337        ..rat_widget::calendar::CalendarStyle::default()
338    }
339}
340
341#[cfg(feature = "rat-widget")]
342fn msg_dialog(th: &SalsaTheme) -> rat_widget::msgdialog::MsgDialogStyle {
343    rat_widget::msgdialog::MsgDialogStyle {
344        style: th.style(Style::DIALOG_BASE),
345        button: Some(th.style(WidgetStyle::BUTTON)),
346        markdown_header_1: Some(th.style_style(Style::TITLE)),
347        markdown_header_n: Some(th.style_style(Style::HEADER)),
348        ..Default::default()
349    }
350}
351
352#[cfg(feature = "rat-widget")]
353fn paragraph(th: &SalsaTheme) -> rat_widget::paragraph::ParagraphStyle {
354    rat_widget::paragraph::ParagraphStyle {
355        style: th.style(Style::CONTAINER_BASE),
356        focus: Some(th.style(Style::FOCUS)),
357        scroll: Some(th.style(WidgetStyle::SCROLL)),
358        ..Default::default()
359    }
360}
361
362#[cfg(feature = "rat-widget")]
363fn radio(th: &SalsaTheme) -> rat_widget::radio::RadioStyle {
364    rat_widget::radio::RadioStyle {
365        layout: Some(rat_widget::radio::RadioLayout::Stacked),
366        style: th.style(Style::INPUT),
367        focus: Some(th.style(Style::INPUT_FOCUS)),
368        ..Default::default()
369    }
370}
371
372#[cfg(feature = "rat-widget")]
373/// Scroll style
374fn scroll(th: &SalsaTheme) -> rat_widget::scrolled::ScrollStyle {
375    rat_widget::scrolled::ScrollStyle {
376        thumb_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
377        track_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
378        min_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
379        begin_style: Some(th.style(Style::CONTAINER_ARROW_FG)),
380        end_style: Some(th.style(Style::CONTAINER_ARROW_FG)),
381        horizontal: Some(rat_widget::scrolled::ScrollSymbols {
382            track: "▒",
383            thumb: symbols::block::FULL,
384            begin: "←",
385            end: "→",
386            min: "░",
387        }),
388        vertical: Some(rat_widget::scrolled::ScrollSymbols {
389            track: "▒",
390            thumb: symbols::block::FULL,
391            begin: "↑",
392            end: "↓",
393            min: "░",
394        }),
395        ..Default::default()
396    }
397}
398
399#[cfg(feature = "rat-widget")]
400fn popup_scroll(th: &SalsaTheme) -> rat_widget::scrolled::ScrollStyle {
401    rat_widget::scrolled::ScrollStyle {
402        thumb_style: Some(th.style(Style::POPUP_BORDER_FG)),
403        track_style: Some(th.style(Style::POPUP_BORDER_FG)),
404        min_style: Some(th.style(Style::POPUP_BORDER_FG)),
405        begin_style: Some(th.style(Style::POPUP_ARROW_FG)),
406        end_style: Some(th.style(Style::POPUP_ARROW_FG)),
407        horizontal: Some(rat_widget::scrolled::ScrollSymbols {
408            track: "▒",
409            thumb: symbols::block::FULL,
410            begin: "←",
411            end: "→",
412            min: "░",
413        }),
414        vertical: Some(rat_widget::scrolled::ScrollSymbols {
415            track: "▒",
416            thumb: symbols::block::FULL,
417            begin: "↑",
418            end: "↓",
419            min: "░",
420        }),
421        ..Default::default()
422    }
423}
424
425#[cfg(feature = "rat-widget")]
426fn dialog_scroll(th: &SalsaTheme) -> rat_widget::scrolled::ScrollStyle {
427    rat_widget::scrolled::ScrollStyle {
428        thumb_style: Some(th.style(Style::DIALOG_BORDER_FG)),
429        track_style: Some(th.style(Style::DIALOG_BORDER_FG)),
430        min_style: Some(th.style(Style::DIALOG_BORDER_FG)),
431        begin_style: Some(th.style(Style::POPUP_ARROW_FG)),
432        end_style: Some(th.style(Style::POPUP_ARROW_FG)),
433        horizontal: Some(rat_widget::scrolled::ScrollSymbols {
434            track: "▒",
435            thumb: symbols::block::FULL,
436            begin: "←",
437            end: "→",
438            min: "░",
439        }),
440        vertical: Some(rat_widget::scrolled::ScrollSymbols {
441            track: "▒",
442            thumb: symbols::block::FULL,
443            begin: "↑",
444            end: "↓",
445            min: "░",
446        }),
447        ..Default::default()
448    }
449}
450
451#[cfg(feature = "rat-widget")]
452fn shadow(th: &SalsaTheme) -> rat_widget::shadow::ShadowStyle {
453    rat_widget::shadow::ShadowStyle {
454        style: th.style(Style::SHADOWS),
455        dir: rat_widget::shadow::ShadowDirection::BottomRight,
456        ..rat_widget::shadow::ShadowStyle::default()
457    }
458}
459
460#[cfg(feature = "rat-widget")]
461fn slider(th: &SalsaTheme) -> rat_widget::slider::SliderStyle {
462    rat_widget::slider::SliderStyle {
463        style: th.style(Style::INPUT),
464        bounds: Some(th.style(Style::INPUT)),
465        knob: Some(th.style(Style::INPUT_SELECT)),
466        focus: Some(th.style(Style::INPUT_FOCUS)),
467        text_align: Some(Alignment::Center),
468        ..Default::default()
469    }
470}
471
472#[cfg(feature = "rat-widget")]
473fn split(th: &SalsaTheme) -> rat_widget::splitter::SplitStyle {
474    rat_widget::splitter::SplitStyle {
475        style: th.style(Style::CONTAINER_BORDER_FG),
476        arrow_style: Some(th.style(Style::CONTAINER_ARROW_FG)),
477        drag_style: Some(th.style(Style::HOVER)),
478        ..Default::default()
479    }
480}
481
482#[cfg(feature = "rat-widget")]
483fn statusline(th: &SalsaTheme) -> rat_widget::statusline::StatusLineStyle {
484    rat_widget::statusline::StatusLineStyle {
485        styles: vec![
486            th.style(Style::STATUS_BASE),
487            th.p.style(Colors::Blue, 3),
488            th.p.style(Colors::Blue, 2),
489            th.p.style(Colors::Blue, 1),
490        ],
491        ..Default::default()
492    }
493}
494
495#[cfg(feature = "rat-widget")]
496fn tabbed(th: &SalsaTheme) -> rat_widget::tabbed::TabbedStyle {
497    rat_widget::tabbed::TabbedStyle {
498        style: th.style(Style::CONTAINER_BASE),
499        border_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
500        tab: Some(th.style(Style::CONTAINER_BASE)),
501        hover: Some(th.style(Style::HOVER)),
502        select: Some(th.style(Style::SELECT)),
503        focus: Some(th.style(Style::FOCUS)),
504        ..Default::default()
505    }
506}
507
508#[cfg(feature = "rat-widget")]
509fn table(th: &SalsaTheme) -> rat_widget::table::TableStyle {
510    rat_widget::table::TableStyle {
511        style: th.style(Style::CONTAINER_BASE),
512        select_row: Some(th.style(Style::SELECT)),
513        show_row_focus: true,
514        focus_style: Some(th.style(Style::FOCUS)),
515        border_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
516        scroll: Some(th.style(WidgetStyle::SCROLL)),
517        header: Some(th.style(Style::HEADER)),
518        footer: Some(th.style(Style::FOOTER)),
519        ..Default::default()
520    }
521}
522
523#[cfg(feature = "color-input")]
524fn color_input(th: &SalsaTheme) -> ColorInputStyle {
525    ColorInputStyle {
526        text: rat_widget::text::TextStyle {
527            style: th.style(Style::INPUT),
528            focus: Some(th.style(Style::INPUT_FOCUS)),
529            select: Some(th.style(Style::INPUT_SELECT)),
530            invalid: Some(th.style(Style::INVALID)),
531            ..rat_widget::text::TextStyle::default()
532        },
533        ..Default::default()
534    }
535}
536
537#[cfg(feature = "rat-widget")]
538fn text(th: &SalsaTheme) -> rat_widget::text::TextStyle {
539    rat_widget::text::TextStyle {
540        style: th.style(Style::INPUT),
541        focus: Some(th.style(Style::INPUT_FOCUS)),
542        select: Some(th.style(Style::INPUT_SELECT)),
543        invalid: Some(th.style(Style::INVALID)),
544        ..rat_widget::text::TextStyle::default()
545    }
546}
547
548#[cfg(feature = "rat-widget")]
549fn textarea(th: &SalsaTheme) -> rat_widget::text::TextStyle {
550    rat_widget::text::TextStyle {
551        style: th.style(Style::INPUT),
552        focus: Some(th.style(Style::INPUT)),
553        select: Some(th.style(Style::INPUT_SELECT)),
554        scroll: Some(th.style(WidgetStyle::SCROLL)),
555        border_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
556        ..rat_widget::text::TextStyle::default()
557    }
558}
559
560#[cfg(feature = "rat-widget")]
561fn textview(th: &SalsaTheme) -> rat_widget::text::TextStyle {
562    rat_widget::text::TextStyle {
563        style: th.style(Style::CONTAINER_BASE),
564        focus: Some(th.style(Style::CONTAINER_BASE)),
565        select: Some(th.style(Style::INPUT_SELECT)),
566        scroll: Some(th.style(WidgetStyle::SCROLL)),
567        border_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
568        ..rat_widget::text::TextStyle::default()
569    }
570}
571
572#[cfg(feature = "rat-widget")]
573fn view(th: &SalsaTheme) -> rat_widget::view::ViewStyle {
574    rat_widget::view::ViewStyle {
575        scroll: Some(th.style(WidgetStyle::SCROLL)),
576        ..Default::default()
577    }
578}