Cameron Mcloughlina11y: Settings UI (#59429)83d48474 months agoHistory
61 lines · 1.7 KB · Rust
RawDownload
use gpui::{IntoElement, ParentElement, Role, Styled};use ui::{Divider, DividerColor, prelude::*}; #[derive(IntoElement)]pub struct SettingsSectionHeader {    icon: Option<IconName>,    label: SharedString,    no_padding: bool,} impl SettingsSectionHeader {    pub fn new(label: impl Into<SharedString>) -> Self {        Self {            label: label.into(),            icon: None,            no_padding: false,        }    }     pub fn icon(mut self, icon: IconName) -> Self {        self.icon = Some(icon);        self    }     pub fn no_padding(mut self, no_padding: bool) -> Self {        self.no_padding = no_padding;        self    }} impl RenderOnce for SettingsSectionHeader {    fn render(self, _: &mut Window, cx: &mut App) -> impl IntoElement {        let label_text = self.label.clone();        let label = Label::new(self.label)            .size(LabelSize::Small)            .color(Color::Muted)            .buffer_font(cx);         v_flex()            .id(label_text.clone())            .role(Role::Heading)            .aria_level(2)            .aria_label(label_text)            .w_full()            .when(!self.no_padding, |this| this.px_8())            .gap_1p5()            .map(|this| {                if let Some(icon) = self.icon {                    this.child(                        h_flex()                            .gap_1p5()                            .child(Icon::new(icon).color(Color::Muted))                            .child(label),                    )                } else {                    this.child(label)                }            })            .child(Divider::horizontal().color(DividerColor::BorderFaded))    }}