Skip to main content

teksilo_core/styles/
checkbox_style.rs

1// SPDX-License-Identifier: MPL-2.0
2// SPDX-FileCopyrightText: 2026 FernTech
3
4//! Tier-3 style protocol for `Checkbox`. See `docs/styling-system.md`.
5
6use 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 CheckboxVariant {
16    /// IntUI default: rounded square with a check glyph.
17    #[default]
18    Square,
19    /// Softer rounded variant.
20    Rounded,
21    /// Circular checkmark (Material-3 style).
22    Circle,
23}
24
25/// Tristate checkbox state. Mirrors `teksilo_data::CheckState` but lives
26/// in teksilo-core so the style trait stays inside the foundation crate.
27#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
28pub enum CheckboxState {
29    #[default]
30    Unchecked,
31    Checked,
32    Indeterminate,
33}
34
35#[derive(Clone, Debug)]
36pub struct CheckboxStyleConfig {
37    pub state: Signal<CheckboxState>,
38    pub is_hovered: Signal<bool>,
39    pub is_pressed: Signal<bool>,
40    pub is_focused: Signal<bool>,
41    pub is_disabled: Signal<bool>,
42    pub variant: CheckboxVariant,
43}
44
45pub trait CheckboxStyle: 'static {
46    fn make_body(&self, cfg: &CheckboxStyleConfig, ctx: &mut BuildContext) -> WidgetId;
47}
48
49pub type SharedCheckboxStyle = Rc<dyn CheckboxStyle>;