pub trait TabStyle {
fn radius(&self) -> f64;
fn padding_x(&self) -> f64;
fn padding_y(&self) -> f64;
fn font_size(&self) -> f64;
fn icon_size(&self) -> f64;
fn gap(&self) -> f64;
fn close_btn_size(&self) -> f64;
fn accent_bar(&self) -> f64;
}
pub struct DefaultTabStyle;
impl Default for DefaultTabStyle {
fn default() -> Self {
Self
}
}
impl TabStyle for DefaultTabStyle {
fn radius(&self) -> f64 { 4.0 }
fn padding_x(&self) -> f64 { 12.0 }
fn padding_y(&self) -> f64 { 6.0 }
fn font_size(&self) -> f64 { 13.0 }
fn icon_size(&self) -> f64 { 14.0 }
fn gap(&self) -> f64 { 6.0 }
fn close_btn_size(&self) -> f64 { 14.0 }
fn accent_bar(&self) -> f64 { 3.0 }
}
pub struct ChromeTabStyle {
pub height: f64,
pub padding_h: f64,
pub close_size: f64,
pub accent_bar_thickness: f64,
pub tab_gap: f64,
pub font_size: f64,
pub left_margin: f64,
}
impl Default for ChromeTabStyle {
fn default() -> Self {
Self {
height: 32.0,
padding_h: 12.0,
close_size: 16.0,
accent_bar_thickness: 2.0,
tab_gap: 1.0,
font_size: 12.0,
left_margin: 4.0,
}
}
}
impl TabStyle for ChromeTabStyle {
fn radius(&self) -> f64 { 0.0 }
fn padding_x(&self) -> f64 { self.padding_h }
fn padding_y(&self) -> f64 { 0.0 }
fn font_size(&self) -> f64 { self.font_size }
fn icon_size(&self) -> f64 { 14.0 }
fn gap(&self) -> f64 { self.tab_gap }
fn close_btn_size(&self) -> f64 { self.close_size }
fn accent_bar(&self) -> f64 { self.accent_bar_thickness }
}
pub struct ModalSidebarTabStyle {
pub width: f64,
pub button_height: f64,
pub icon_size: f64,
pub accent_bar_width: f64,
pub font_size: f64,
}
impl Default for ModalSidebarTabStyle {
fn default() -> Self {
Self {
width: 48.0,
button_height: 44.0,
icon_size: 20.0,
accent_bar_width: 3.0,
font_size: 11.0,
}
}
}
impl TabStyle for ModalSidebarTabStyle {
fn radius(&self) -> f64 { 0.0 }
fn padding_x(&self) -> f64 { 0.0 }
fn padding_y(&self) -> f64 { 0.0 }
fn font_size(&self) -> f64 { self.font_size }
fn icon_size(&self) -> f64 { self.icon_size }
fn gap(&self) -> f64 { 0.0 }
fn close_btn_size(&self) -> f64 { 0.0 }
fn accent_bar(&self) -> f64 { self.accent_bar_width }
}
pub struct ModalHorizontalTabStyle {
pub height: f64,
pub padding_h: f64,
pub tab_gap: f64,
pub font_size: f64,
}
impl Default for ModalHorizontalTabStyle {
fn default() -> Self {
Self {
height: 32.0,
padding_h: 12.0,
tab_gap: 2.0,
font_size: 13.0,
}
}
}
impl TabStyle for ModalHorizontalTabStyle {
fn radius(&self) -> f64 { 0.0 }
fn padding_x(&self) -> f64 { self.padding_h }
fn padding_y(&self) -> f64 { 0.0 }
fn font_size(&self) -> f64 { self.font_size }
fn icon_size(&self) -> f64 { 0.0 }
fn gap(&self) -> f64 { self.tab_gap }
fn close_btn_size(&self) -> f64 { 0.0 }
fn accent_bar(&self) -> f64 { 0.0 }
}
pub struct TagsTabsSidebarTabStyle {
pub width: f64,
pub item_height: f64,
pub pill_inset_x: f64,
pub pill_inset_y: f64,
pub pill_radius: f64,
pub font_size: f64,
pub active_pill_alpha: f64,
pub hover_pill_alpha: f64,
}
impl Default for TagsTabsSidebarTabStyle {
fn default() -> Self {
Self {
width: 80.0,
item_height: 40.0,
pill_inset_x: 4.0,
pill_inset_y: 2.0,
pill_radius: 4.0,
font_size: 11.0,
active_pill_alpha: 0.20,
hover_pill_alpha: 0.08,
}
}
}
impl TabStyle for TagsTabsSidebarTabStyle {
fn radius(&self) -> f64 { self.pill_radius }
fn padding_x(&self) -> f64 { self.pill_inset_x }
fn padding_y(&self) -> f64 { self.pill_inset_y }
fn font_size(&self) -> f64 { self.font_size }
fn icon_size(&self) -> f64 { 0.0 }
fn gap(&self) -> f64 { 0.0 }
fn close_btn_size(&self) -> f64 { 0.0 }
fn accent_bar(&self) -> f64 { 0.0 }
}