From 0d8c743dfe0817a161e9bc1d3e1a3c9de5ff5ba7 Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Wed, 11 Oct 2023 12:22:24 -0400 Subject: [PATCH] Refine project panel, list --- crates/ui2/src/components/context_menu.rs | 6 +- crates/ui2/src/components/list.rs | 69 +++--- crates/ui2/src/components/project_panel.rs | 6 +- crates/ui2/src/lib.rs | 2 - crates/ui2/src/prelude.rs | 29 ++- crates/ui2/src/static_data.rs | 246 ++++++++++----------- crates/ui2/src/tokens.rs | 24 -- 7 files changed, 198 insertions(+), 184 deletions(-) delete mode 100644 crates/ui2/src/tokens.rs diff --git a/crates/ui2/src/components/context_menu.rs b/crates/ui2/src/components/context_menu.rs index ab02628816d6ecee0622b415bec309681e250b03..3d9f963d97c31492732d29dd3b1d0136a8a25aec 100644 --- a/crates/ui2/src/components/context_menu.rs +++ b/crates/ui2/src/components/context_menu.rs @@ -14,9 +14,9 @@ impl ContextMenuItem { fn to_list_item(self) -> ListItem { match self { ContextMenuItem::Header(label) => ListSubHeader::new(label).into(), - ContextMenuItem::Entry(label) => { - ListEntry::new(label).variant(ListItemVariant::Inset).into() - } + ContextMenuItem::Entry(label) => ListEntry::new(label) + .set_variant(ListItemVariant::Inset) + .into(), ContextMenuItem::Separator => ListSeparator::new().into(), } } diff --git a/crates/ui2/src/components/list.rs b/crates/ui2/src/components/list.rs index b51e14a4e1d7c932f5359aa20ebd75b8820fbe31..e2a8497a1f70b8ec487e79de88f5cf04ff783f2a 100644 --- a/crates/ui2/src/components/list.rs +++ b/crates/ui2/src/components/list.rs @@ -12,8 +12,8 @@ use crate::{ #[derive(Clone, Copy, Default, Debug, PartialEq)] pub enum ListItemVariant { /// The list item extends to the far left and right of the list. - #[default] FullWidth, + #[default] Inset, } @@ -35,7 +35,7 @@ impl ListHeader { left_icon: None, variant: ListItemVariant::default(), state: InteractionState::default(), - toggleable: Toggleable::default(), + toggleable: Toggleable::Toggleable(ToggleState::Toggled), } } @@ -65,8 +65,16 @@ impl ListHeader { match (is_toggleable, is_toggled) { (false, _) => div(), - (_, true) => div().child(IconElement::new(Icon::ChevronRight).color(IconColor::Muted)), - (_, false) => div().child(IconElement::new(Icon::ChevronDown).size(IconSize::Small)), + (_, true) => div().child( + IconElement::new(Icon::ChevronDown) + .color(IconColor::Muted) + .size(IconSize::Small), + ), + (_, false) => div().child( + IconElement::new(Icon::ChevronRight) + .color(IconColor::Muted) + .size(IconSize::Small), + ), } } @@ -116,10 +124,9 @@ impl ListHeader { .border_color(theme.lowest.accent.default.border) }) .relative() - .py_1() .child( div() - .h_6() + .h_5() .when(self.variant == ListItemVariant::Inset, |this| this.px_2()) .flex() .flex_1() @@ -287,14 +294,16 @@ impl ListEntry { left_content: None, size: ListEntrySize::default(), state: InteractionState::default(), + // TODO: Should use Toggleable::NotToggleable + // or remove Toggleable::NotToggleable from the system toggle: None, } } - pub fn variant(mut self, variant: ListItemVariant) -> Self { + pub fn set_variant(mut self, variant: ListItemVariant) -> Self { self.variant = variant; self } - pub fn indent_level(mut self, indent_level: u32) -> Self { + pub fn set_indent_level(mut self, indent_level: u32) -> Self { self.indent_level = indent_level; self } @@ -304,32 +313,32 @@ impl ListEntry { self } - pub fn left_content(mut self, left_content: LeftContent) -> Self { + pub fn set_left_content(mut self, left_content: LeftContent) -> Self { self.left_content = Some(left_content); self } - pub fn left_icon(mut self, left_icon: Icon) -> Self { + pub fn set_left_icon(mut self, left_icon: Icon) -> Self { self.left_content = Some(LeftContent::Icon(left_icon)); self } - pub fn left_avatar(mut self, left_avatar: &'static str) -> Self { + pub fn set_left_avatar(mut self, left_avatar: &'static str) -> Self { self.left_content = Some(LeftContent::Avatar(left_avatar)); self } - pub fn state(mut self, state: InteractionState) -> Self { + pub fn set_state(mut self, state: InteractionState) -> Self { self.state = state; self } - pub fn size(mut self, size: ListEntrySize) -> Self { + pub fn set_size(mut self, size: ListEntrySize) -> Self { self.size = size; self } - pub fn disclosure_control_style( + pub fn set_disclosure_control_style( mut self, disclosure_control_style: DisclosureControlVisibility, ) -> Self { @@ -390,12 +399,16 @@ impl ListEntry { let theme = theme(cx); let token = token(); let system_color = SystemColor::new(); - let background_color = self.background_color(cx); + let color = ThemeColor::new(cx); let left_content = match self.left_content { - Some(LeftContent::Icon(i)) => { - Some(h_stack().child(IconElement::new(i).size(IconSize::Small))) - } + Some(LeftContent::Icon(i)) => Some( + h_stack().child( + IconElement::new(i) + .size(IconSize::Small) + .color(IconColor::Muted), + ), + ), Some(LeftContent::Avatar(src)) => Some(h_stack().child(Avatar::new(src))), None => None, }; @@ -406,13 +419,11 @@ impl ListEntry { }; div() - .fill(background_color) + .relative() + .fill(self.background_color(cx)) .when(self.state == InteractionState::Focused, |this| { - this.border() - .border_color(theme.lowest.accent.default.border) + this.border().border_color(color.border_focused) }) - .relative() - .py_1() .child( sized_item .when(self.variant == ListItemVariant::Inset, |this| this.px_2()) @@ -423,9 +434,11 @@ impl ListEntry { .h_full() .flex() .justify_center() - .child(h_stack().child(div().w_px().h_full()).child( - div().w_px().h_full().fill(theme.middle.base.default.border), - )) + .child( + h_stack() + .child(div().w_px().h_full()) + .child(div().w_px().h_full().fill(color.border)), + ) })) .flex() .gap_1() @@ -451,9 +464,9 @@ impl ListSeparator { } fn render(&mut self, cx: &mut ViewContext) -> impl Element { - let theme = theme(cx); + let color = ThemeColor::new(cx); - div().h_px().w_full().fill(theme.lowest.base.default.border) + div().h_px().w_full().fill(color.border) } } diff --git a/crates/ui2/src/components/project_panel.rs b/crates/ui2/src/components/project_panel.rs index cdc658ab3c07d0493b14f65834f53f705e423809..11c99a35be645f9a3760f135edbedb384074c273 100644 --- a/crates/ui2/src/components/project_panel.rs +++ b/crates/ui2/src/components/project_panel.rs @@ -22,17 +22,17 @@ impl ProjectPanel { fn render(&mut self, cx: &mut ViewContext) -> impl Element { let theme = theme(cx); + let color = ThemeColor::new(cx); div() .flex() .flex_col() .w_full() .h_full() - .px_2() - .fill(theme.middle.base.default.background) + .fill(color.panel_surface) .child( div() - .w_56() + .w_full() .flex() .flex_col() .overflow_y_scroll(ScrollState::default()) diff --git a/crates/ui2/src/lib.rs b/crates/ui2/src/lib.rs index a3ca3746836389229b7dea1473e5efb231da8fe2..1aa09cd1ced00e2fb4e0e31c5640b6c0904c16cd 100644 --- a/crates/ui2/src/lib.rs +++ b/crates/ui2/src/lib.rs @@ -7,7 +7,6 @@ mod elements; pub mod prelude; mod static_data; mod theme; -mod tokens; pub use children::*; pub use components::*; @@ -15,7 +14,6 @@ pub use element_ext::*; pub use elements::*; pub use prelude::*; pub use static_data::*; -pub use tokens::*; pub use crate::theme::*; diff --git a/crates/ui2/src/prelude.rs b/crates/ui2/src/prelude.rs index cca62bb58c3c7395290415eb654fa0146c632ed2..9c26d4889e7a17bb7d2c452c6add4a00d91e84ca 100644 --- a/crates/ui2/src/prelude.rs +++ b/crates/ui2/src/prelude.rs @@ -5,9 +5,32 @@ pub use gpui3::{ pub use crate::{theme, ButtonVariant, ElementExt, HackyChildren, HackyChildrenPayload, Theme}; -use gpui3::{hsla, rgb, Hsla}; +use gpui3::{hsla, rems, rgb, AbsoluteLength, Hsla}; use strum::EnumIter; +#[derive(Clone, Copy)] +pub struct Token { + pub list_indent_depth: AbsoluteLength, + pub default_panel_size: AbsoluteLength, + pub state_hover_background: Hsla, + pub state_active_background: Hsla, +} + +impl Default for Token { + fn default() -> Self { + Self { + list_indent_depth: AbsoluteLength::Rems(rems(0.3)), + default_panel_size: AbsoluteLength::Rems(rems(16.)), + state_hover_background: hsla(0.0, 0.0, 0.0, 0.08), + state_active_background: hsla(0.0, 0.0, 0.0, 0.16), + } + } +} + +pub fn token() -> Token { + Token::default() +} + #[derive(Default)] pub struct SystemColor { pub transparent: Hsla, @@ -34,8 +57,10 @@ impl SystemColor { pub struct ThemeColor { pub border: Hsla, pub border_variant: Hsla, + pub border_focused: Hsla, /// The background color of an elevated surface, like a modal, tooltip or toast. pub elevated_surface: Hsla, + pub panel_surface: Hsla, } impl ThemeColor { @@ -45,7 +70,9 @@ impl ThemeColor { Self { border: theme.lowest.base.default.border, border_variant: theme.lowest.variant.default.border, + border_focused: theme.lowest.accent.default.border, elevated_surface: theme.middle.base.default.background, + panel_surface: theme.middle.base.default.background, } } } diff --git a/crates/ui2/src/static_data.rs b/crates/ui2/src/static_data.rs index e0781e4498a3882d6a1424d9e4a478b8956ebfca..6a43999bf62b192a9ecd44dcd5d17dc48de1f7dc 100644 --- a/crates/ui2/src/static_data.rs +++ b/crates/ui2/src/static_data.rs @@ -324,124 +324,124 @@ pub fn static_players_with_call_status() -> Vec { pub fn static_project_panel_project_items() -> Vec> { vec![ ListEntry::new(Label::new("zed")) - .left_icon(Icon::FolderOpen.into()) - .indent_level(0) + .set_left_icon(Icon::FolderOpen.into()) + .set_indent_level(0) .set_toggle(ToggleState::Toggled), ListEntry::new(Label::new(".cargo")) - .left_icon(Icon::Folder.into()) - .indent_level(1), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(1), ListEntry::new(Label::new(".config")) - .left_icon(Icon::Folder.into()) - .indent_level(1), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(1), ListEntry::new(Label::new(".git").color(LabelColor::Hidden)) - .left_icon(Icon::Folder.into()) - .indent_level(1), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(1), ListEntry::new(Label::new(".cargo")) - .left_icon(Icon::Folder.into()) - .indent_level(1), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(1), ListEntry::new(Label::new(".idea").color(LabelColor::Hidden)) - .left_icon(Icon::Folder.into()) - .indent_level(1), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(1), ListEntry::new(Label::new("assets")) - .left_icon(Icon::Folder.into()) - .indent_level(1) + .set_left_icon(Icon::Folder.into()) + .set_indent_level(1) .set_toggle(ToggleState::Toggled), ListEntry::new(Label::new("cargo-target").color(LabelColor::Hidden)) - .left_icon(Icon::Folder.into()) - .indent_level(1), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(1), ListEntry::new(Label::new("crates")) - .left_icon(Icon::FolderOpen.into()) - .indent_level(1) + .set_left_icon(Icon::FolderOpen.into()) + .set_indent_level(1) .set_toggle(ToggleState::Toggled), ListEntry::new(Label::new("activity_indicator")) - .left_icon(Icon::Folder.into()) - .indent_level(2), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(2), ListEntry::new(Label::new("ai")) - .left_icon(Icon::Folder.into()) - .indent_level(2), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(2), ListEntry::new(Label::new("audio")) - .left_icon(Icon::Folder.into()) - .indent_level(2), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(2), ListEntry::new(Label::new("auto_update")) - .left_icon(Icon::Folder.into()) - .indent_level(2), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(2), ListEntry::new(Label::new("breadcrumbs")) - .left_icon(Icon::Folder.into()) - .indent_level(2), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(2), ListEntry::new(Label::new("call")) - .left_icon(Icon::Folder.into()) - .indent_level(2), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(2), ListEntry::new(Label::new("sqlez").color(LabelColor::Modified)) - .left_icon(Icon::Folder.into()) - .indent_level(2) + .set_left_icon(Icon::Folder.into()) + .set_indent_level(2) .set_toggle(ToggleState::NotToggled), ListEntry::new(Label::new("gpui2")) - .left_icon(Icon::FolderOpen.into()) - .indent_level(2) + .set_left_icon(Icon::FolderOpen.into()) + .set_indent_level(2) .set_toggle(ToggleState::Toggled), ListEntry::new(Label::new("src")) - .left_icon(Icon::FolderOpen.into()) - .indent_level(3) + .set_left_icon(Icon::FolderOpen.into()) + .set_indent_level(3) .set_toggle(ToggleState::Toggled), ListEntry::new(Label::new("derive_element.rs")) - .left_icon(Icon::FileRust.into()) - .indent_level(4), + .set_left_icon(Icon::FileRust.into()) + .set_indent_level(4), ListEntry::new(Label::new("storybook").color(LabelColor::Modified)) - .left_icon(Icon::FolderOpen.into()) - .indent_level(1) + .set_left_icon(Icon::FolderOpen.into()) + .set_indent_level(1) .set_toggle(ToggleState::Toggled), ListEntry::new(Label::new("docs").color(LabelColor::Default)) - .left_icon(Icon::Folder.into()) - .indent_level(2) + .set_left_icon(Icon::Folder.into()) + .set_indent_level(2) .set_toggle(ToggleState::Toggled), ListEntry::new(Label::new("src").color(LabelColor::Modified)) - .left_icon(Icon::FolderOpen.into()) - .indent_level(3) + .set_left_icon(Icon::FolderOpen.into()) + .set_indent_level(3) .set_toggle(ToggleState::Toggled), ListEntry::new(Label::new("ui").color(LabelColor::Modified)) - .left_icon(Icon::FolderOpen.into()) - .indent_level(4) + .set_left_icon(Icon::FolderOpen.into()) + .set_indent_level(4) .set_toggle(ToggleState::Toggled), ListEntry::new(Label::new("component").color(LabelColor::Created)) - .left_icon(Icon::FolderOpen.into()) - .indent_level(5) + .set_left_icon(Icon::FolderOpen.into()) + .set_indent_level(5) .set_toggle(ToggleState::Toggled), ListEntry::new(Label::new("facepile.rs").color(LabelColor::Default)) - .left_icon(Icon::FileRust.into()) - .indent_level(6), + .set_left_icon(Icon::FileRust.into()) + .set_indent_level(6), ListEntry::new(Label::new("follow_group.rs").color(LabelColor::Default)) - .left_icon(Icon::FileRust.into()) - .indent_level(6), + .set_left_icon(Icon::FileRust.into()) + .set_indent_level(6), ListEntry::new(Label::new("list_item.rs").color(LabelColor::Created)) - .left_icon(Icon::FileRust.into()) - .indent_level(6), + .set_left_icon(Icon::FileRust.into()) + .set_indent_level(6), ListEntry::new(Label::new("tab.rs").color(LabelColor::Default)) - .left_icon(Icon::FileRust.into()) - .indent_level(6), + .set_left_icon(Icon::FileRust.into()) + .set_indent_level(6), ListEntry::new(Label::new("target").color(LabelColor::Hidden)) - .left_icon(Icon::Folder.into()) - .indent_level(1), + .set_left_icon(Icon::Folder.into()) + .set_indent_level(1), ListEntry::new(Label::new(".dockerignore")) - .left_icon(Icon::FileGeneric.into()) - .indent_level(1), + .set_left_icon(Icon::FileGeneric.into()) + .set_indent_level(1), ListEntry::new(Label::new(".DS_Store").color(LabelColor::Hidden)) - .left_icon(Icon::FileGeneric.into()) - .indent_level(1), + .set_left_icon(Icon::FileGeneric.into()) + .set_indent_level(1), ListEntry::new(Label::new("Cargo.lock")) - .left_icon(Icon::FileLock.into()) - .indent_level(1), + .set_left_icon(Icon::FileLock.into()) + .set_indent_level(1), ListEntry::new(Label::new("Cargo.toml")) - .left_icon(Icon::FileToml.into()) - .indent_level(1), + .set_left_icon(Icon::FileToml.into()) + .set_indent_level(1), ListEntry::new(Label::new("Dockerfile")) - .left_icon(Icon::FileGeneric.into()) - .indent_level(1), + .set_left_icon(Icon::FileGeneric.into()) + .set_indent_level(1), ListEntry::new(Label::new("Procfile")) - .left_icon(Icon::FileGeneric.into()) - .indent_level(1), + .set_left_icon(Icon::FileGeneric.into()) + .set_indent_level(1), ListEntry::new(Label::new("README.md")) - .left_icon(Icon::FileDoc.into()) - .indent_level(1), + .set_left_icon(Icon::FileDoc.into()) + .set_indent_level(1), ] .into_iter() .map(From::from) @@ -451,14 +451,14 @@ pub fn static_project_panel_project_items() -> pub fn static_project_panel_single_items() -> Vec> { vec![ ListEntry::new(Label::new("todo.md")) - .left_icon(Icon::FileDoc.into()) - .indent_level(0), + .set_left_icon(Icon::FileDoc.into()) + .set_indent_level(0), ListEntry::new(Label::new("README.md")) - .left_icon(Icon::FileDoc.into()) - .indent_level(0), + .set_left_icon(Icon::FileDoc.into()) + .set_indent_level(0), ListEntry::new(Label::new("config.json")) - .left_icon(Icon::FileGeneric.into()) - .indent_level(0), + .set_left_icon(Icon::FileGeneric.into()) + .set_indent_level(0), ] .into_iter() .map(From::from) @@ -467,11 +467,11 @@ pub fn static_project_panel_single_items() -> pub fn static_collab_panel_current_call() -> Vec> { vec![ - ListEntry::new(Label::new("as-cii")).left_avatar("http://github.com/as-cii.png?s=50"), + ListEntry::new(Label::new("as-cii")).set_left_avatar("http://github.com/as-cii.png?s=50"), ListEntry::new(Label::new("nathansobo")) - .left_avatar("http://github.com/nathansobo.png?s=50"), + .set_left_avatar("http://github.com/nathansobo.png?s=50"), ListEntry::new(Label::new("maxbrunsfeld")) - .left_avatar("http://github.com/maxbrunsfeld.png?s=50"), + .set_left_avatar("http://github.com/maxbrunsfeld.png?s=50"), ] .into_iter() .map(From::from) @@ -481,61 +481,61 @@ pub fn static_collab_panel_current_call() -> V pub fn static_collab_panel_channels() -> Vec> { vec![ ListEntry::new(Label::new("zed")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(0), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(0), ListEntry::new(Label::new("community")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(1), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(1), ListEntry::new(Label::new("dashboards")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ListEntry::new(Label::new("feedback")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ListEntry::new(Label::new("teams-in-channels-alpha")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ListEntry::new(Label::new("current-projects")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(1), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(1), ListEntry::new(Label::new("codegen")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ListEntry::new(Label::new("gpui2")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ListEntry::new(Label::new("livestreaming")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ListEntry::new(Label::new("open-source")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ListEntry::new(Label::new("replace")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ListEntry::new(Label::new("semantic-index")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ListEntry::new(Label::new("vim")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ListEntry::new(Label::new("web-tech")) - .left_icon(Icon::Hash.into()) - .size(ListEntrySize::Medium) - .indent_level(2), + .set_left_icon(Icon::Hash.into()) + .set_size(ListEntrySize::Medium) + .set_indent_level(2), ] .into_iter() .map(From::from) diff --git a/crates/ui2/src/tokens.rs b/crates/ui2/src/tokens.rs deleted file mode 100644 index 1f77b3c2d5cd848b2cf429e1b57cc10e8ac1280d..0000000000000000000000000000000000000000 --- a/crates/ui2/src/tokens.rs +++ /dev/null @@ -1,24 +0,0 @@ -use gpui3::{hsla, rems, AbsoluteLength, Hsla}; - -#[derive(Clone, Copy)] -pub struct Token { - pub list_indent_depth: AbsoluteLength, - pub default_panel_size: AbsoluteLength, - pub state_hover_background: Hsla, - pub state_active_background: Hsla, -} - -impl Default for Token { - fn default() -> Self { - Self { - list_indent_depth: AbsoluteLength::Rems(rems(0.5)), - default_panel_size: AbsoluteLength::Rems(rems(16.)), - state_hover_background: hsla(0.0, 0.0, 0.0, 0.08), - state_active_background: hsla(0.0, 0.0, 0.0, 0.16), - } - } -} - -pub fn token() -> Token { - Token::default() -}