teksilo_core/styles/
text_input_style.rs1use std::rc::Rc;
7
8use serde::{Deserialize, Serialize};
9
10use crate::build_context::BuildContext;
11use crate::signal::Signal;
12use crate::widget_id::WidgetId;
13
14#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
15pub enum TextInputVariant {
16 #[default]
18 Outlined,
19 Filled,
21 Underline,
23 Bare,
26}
27
28#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
32pub enum TextInputValidationLevel {
33 #[default]
34 None,
35 Info,
36 Warning,
37 Error,
38 Corrected,
40}
41
42#[derive(Clone, Debug)]
43pub struct TextInputStyleConfig {
44 pub editor: WidgetId,
47 pub is_focused: Signal<bool>,
48 pub is_hovered: Signal<bool>,
49 pub is_disabled: Signal<bool>,
50 pub validation: Signal<TextInputValidationLevel>,
51 pub variant: TextInputVariant,
52}
53
54pub trait TextInputStyle: 'static {
55 fn make_body(&self, cfg: &TextInputStyleConfig, ctx: &mut BuildContext) -> WidgetId;
56}
57
58pub type SharedTextInputStyle = Rc<dyn TextInputStyle>;