Checkbox
A checkbox component for binary choices. Supports labels, disabled state, and different sizes.
Use on_change for requested values. The owner stores the value and calls cx.notify(). The existing on_click name remains a compatibility alias; setting either replaces the same handler, so the last call wins.
Import
use gpui_kit::component::checkbox::Checkbox;Usage
Basic Checkbox
Checkbox::new("my-checkbox")
.label("Accept terms and conditions")
.checked(false)
.on_change(|checked, _, _| {
println!("Checkbox is now: {}", checked);
})The on_change callback is triggered when the user toggles the checkbox, receiving the new checked state.
Controlled Checkbox
This complete Tested consumer recipe keeps the value on the rendering owner and applies the requested value from on_change before notifying:
use gpui_kit::component::checkbox::Checkbox;
use gpui_kit::{Context, IntoElement, Render, Window};
pub struct ControlledCheckbox {
checked: bool,
}
impl ControlledCheckbox {
pub fn new() -> Self {
Self { checked: false }
}
pub fn is_checked(&self) -> bool {
self.checked
}
}
impl Render for ControlledCheckbox {
fn render(&mut self, _: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
Checkbox::new("marketing-emails")
.label("Receive product updates")
.checked(self.checked)
.on_change(cx.listener(|this, checked, _, cx| {
this.checked = *checked;
cx.notify();
}))
}
}<!-- recipe:controlled-value:end -->Different Sizes
use gpui_kit::component::Sizable as _;
Checkbox::new("cb").text_xs().label("Extra Small")
Checkbox::new("cb").text_sm().label("Small")
Checkbox::new("cb").label("Medium") // default
Checkbox::new("cb").text_lg().label("Large")Disabled State
use gpui_kit::component::Disableable as _;
Checkbox::new("checkbox")
.label("Disabled checkbox")
.disabled(true)
.checked(false)Without Label
Checkbox::new("checkbox")
.checked(true)Custom Tab Order
Checkbox::new("checkbox")
.label("Custom tab order")
.tab_index(2)
.tab_stop(true)API Reference
Styling
Implements Sizable and Disableable traits:
text_xs()- Extra small texttext_sm()- Small texttext_base()- Base text (default)text_lg()- Large textdisabled(bool)- Disabled state
Examples
Checkbox List
v_flex()
.gap_2()
.child(Checkbox::new("cb1").label("Option 1").checked(true))
.child(Checkbox::new("cb2").label("Option 2").checked(false))
.child(Checkbox::new("cb3").label("Option 3").checked(false))Form Integration
struct FormView {
agree_terms: bool,
subscribe: bool,
}
v_flex()
.gap_3()
.child(
Checkbox::new("terms")
.label("I agree to the terms and conditions")
.checked(self.agree_terms)
.on_change(cx.listener(|view, checked, _, cx| {
view.agree_terms = *checked;
cx.notify();
}))
)
.child(
Checkbox::new("subscribe")
.label("Subscribe to newsletter")
.checked(self.subscribe)
.on_change(cx.listener(|view, checked, _, cx| {
view.subscribe = *checked;
cx.notify();
}))
)Documentation license: original prose and illustrations for which GPUI Kit holds licensing rights are also offered under CC BY 4.0. When copying or adapting, credit GPUI Kit, link the source (https://gpui-kit.com/component/checkbox) and https://creativecommons.org/licenses/by/4.0/, and indicate changes. Code examples and software source use Apache-2.0; third-party material retains its terms; existing Apache-2.0 permissions remain.
Bundled from GPUI Kit. Documentation prose: CC BY 4.0; code examples: Apache-2.0. Changes: documentation links localized, asset URLs made absolute, and this attribution added.