chore: reduce component overhead (#3)

Reviewed-on: #3
This commit was merged in pull request #3.
This commit is contained in:
2026-11-09 10:09:56 +00:00
parent 6815585528
commit 1c091db699
44 changed files with 1376 additions and 1241 deletions
+184 -274
View File
@@ -424,294 +424,204 @@ impl Gallery {
})
.into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("button", "Button", |_, cx| {
cx.new(|_| ButtonDemo { clicks: 0 }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("input", "Input", |_, cx| cx.new(InputDemo::new).into()),
cx,
);
dock.register_panel(
PanelDescriptor::new("field", "Field", |window, cx| {
cx.new(|cx| FieldDemo::new(window, cx)).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("combobox", "Combobox", |window, cx| {
cx.new(|cx| ComboboxDemo::new(window, cx)).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("status-dot", "Status dot", |_, cx| {
cx.new(|_| StatusDotDemo).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("checkbox", "Checkbox", |_, cx| {
cx.new(|_| CheckboxDemo { checked: false }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("radio", "Radio", |_, cx| {
cx.new(|_| RadioDemo {
plan: SharedString::from("starter"),
dock.register_panel(PanelDescriptor::new("button", "Button", |_, cx| {
cx.new(|_| ButtonDemo { clicks: 0 }).into()
}));
dock.register_panel(PanelDescriptor::new("input", "Input", |_, cx| {
cx.new(InputDemo::new).into()
}));
dock.register_panel(PanelDescriptor::new("field", "Field", |window, cx| {
cx.new(|cx| FieldDemo::new(window, cx)).into()
}));
dock.register_panel(PanelDescriptor::new(
"combobox",
"Combobox",
|window, cx| cx.new(|cx| ComboboxDemo::new(window, cx)).into(),
));
dock.register_panel(PanelDescriptor::new("status-dot", "Status dot", |_, cx| {
cx.new(|_| StatusDotDemo).into()
}));
dock.register_panel(PanelDescriptor::new("checkbox", "Checkbox", |_, cx| {
cx.new(|_| CheckboxDemo { checked: false }).into()
}));
dock.register_panel(PanelDescriptor::new("radio", "Radio", |_, cx| {
cx.new(|_| RadioDemo {
plan: SharedString::from("starter"),
})
.into()
}));
dock.register_panel(PanelDescriptor::new("switch", "Switch", |_, cx| {
cx.new(|_| SwitchDemo { checked: true }).into()
}));
dock.register_panel(PanelDescriptor::new("toggle", "Toggle", |_, cx| {
cx.new(|_| ToggleDemo { pressed: false }).into()
}));
dock.register_panel(PanelDescriptor::new("slider", "Slider", |_, cx| {
cx.new(|_| SliderDemo { volume: 40.0 }).into()
}));
dock.register_panel(PanelDescriptor::new("segmented", "Segmented", |_, cx| {
cx.new(|_| SegmentedDemo {
filter: ExploreFilter::default(),
})
.into()
}));
dock.register_panel(PanelDescriptor::new("select", "Select", |_, cx| {
cx.new(|_| SelectDemo {
strategy: Some(Strategy::Curated),
})
.into()
}));
dock.register_panel(PanelDescriptor::new("link", "Link", |_, cx| {
cx.new(|_| LinkDemo { clicks: 0 }).into()
}));
dock.register_panel(PanelDescriptor::new("clipboard", "Clipboard", |_, cx| {
cx.new(|_| ClipboardDemo).into()
}));
dock.register_panel(PanelDescriptor::new("badge", "Badge", |_, cx| {
cx.new(|_| BadgeDemo).into()
}));
dock.register_panel(PanelDescriptor::new("avatar", "Avatar", |_, cx| {
cx.new(|_| AvatarDemo).into()
}));
dock.register_panel(PanelDescriptor::new("progress", "Progress", |_, cx| {
cx.new(|_| ProgressDemo).into()
}));
dock.register_panel(PanelDescriptor::new("spinner", "Spinner", |_, cx| {
cx.new(|_| SpinnerDemo).into()
}));
dock.register_panel(PanelDescriptor::new("list", "List", |_, cx| {
cx.new(|_| ListDemo { selected: None }).into()
}));
dock.register_panel(PanelDescriptor::new("tree", "Tree", |_, cx| {
cx.new(|_| TreeDemo {
nodes: TreeDemo::demo(),
selected: None,
})
.into()
}));
dock.register_panel(PanelDescriptor::new("tabs", "Tabs", |_, cx| {
cx.new(|_| TabsDemo {
selected: 0,
pill_tabs: vec![
SharedString::from("Explorer"),
SharedString::from("Syncing"),
SharedString::from("Blame"),
],
pill_selected: 0,
})
.into()
}));
dock.register_panel(PanelDescriptor::new("alert", "Alert", {
let alerts = alerts.clone();
move |_, cx| {
cx.new(|_| AlertDemo {
alerts: alerts.clone(),
dismissed: false,
})
.into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("switch", "Switch", |_, cx| {
cx.new(|_| SwitchDemo { checked: true }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("toggle", "Toggle", |_, cx| {
cx.new(|_| ToggleDemo { pressed: false }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("slider", "Slider", |_, cx| {
cx.new(|_| SliderDemo { volume: 40.0 }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("segmented", "Segmented", |_, cx| {
cx.new(|_| SegmentedDemo {
filter: ExploreFilter::default(),
}
}));
dock.register_panel(PanelDescriptor::new("toast", "Toast", {
let toasts = toasts.clone();
move |_, cx| {
cx.new(|_| ToastDemo {
toasts: toasts.clone(),
})
.into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("select", "Select", |_, cx| {
cx.new(|_| SelectDemo {
strategy: Some(Strategy::Curated),
}
}));
dock.register_panel(PanelDescriptor::new("dialog", "Dialog", {
let gallery = gallery.clone();
move |_, cx| {
cx.new(|_| DialogDemo {
gallery: gallery.clone(),
})
.into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("link", "Link", |_, cx| {
cx.new(|_| LinkDemo { clicks: 0 }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("clipboard", "Clipboard", |_, cx| {
cx.new(|_| ClipboardDemo).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("badge", "Badge", |_, cx| cx.new(|_| BadgeDemo).into()),
cx,
);
dock.register_panel(
PanelDescriptor::new("avatar", "Avatar", |_, cx| cx.new(|_| AvatarDemo).into()),
cx,
);
dock.register_panel(
PanelDescriptor::new("progress", "Progress", |_, cx| {
cx.new(|_| ProgressDemo).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("spinner", "Spinner", |_, cx| cx.new(|_| SpinnerDemo).into()),
cx,
);
dock.register_panel(
PanelDescriptor::new("list", "List", |_, cx| {
cx.new(|_| ListDemo { selected: None }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("tree", "Tree", |_, cx| {
cx.new(|_| TreeDemo {
nodes: TreeDemo::demo(),
selected: None,
})
.into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("tabs", "Tabs", |_, cx| {
cx.new(|_| TabsDemo {
selected: 0,
pill_tabs: vec![
SharedString::from("Explorer"),
SharedString::from("Syncing"),
SharedString::from("Blame"),
],
pill_selected: 0,
})
.into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("alert", "Alert", {
let alerts = alerts.clone();
move |_, cx| {
cx.new(|_| AlertDemo {
alerts: alerts.clone(),
dismissed: false,
})
.into()
}
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("toast", "Toast", {
let toasts = toasts.clone();
move |_, cx| {
cx.new(|_| ToastDemo {
toasts: toasts.clone(),
})
.into()
}
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("dialog", "Dialog", {
let gallery = gallery.clone();
move |_, cx| {
cx.new(|_| DialogDemo {
gallery: gallery.clone(),
})
.into()
}
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("command-palette", "Command palette", {
}
}));
dock.register_panel(PanelDescriptor::new(
"command-palette",
"Command palette",
{
let palette = palette.clone();
move |_, cx| {
cx.new(|cx| CommandPaletteDemo::new(gallery.clone(), palette.clone(), cx))
.into()
}
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("menu", "Menu", |_, cx| {
cx.new(|_| MenuDemo { open: false }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("dropdown-menu", "Dropdown menu", |_, cx| {
},
));
dock.register_panel(PanelDescriptor::new("menu", "Menu", |_, cx| {
cx.new(|_| MenuDemo { open: false }).into()
}));
dock.register_panel(PanelDescriptor::new(
"dropdown-menu",
"Dropdown menu",
|_, cx| {
cx.new(|_| DropdownMenuDemo {
open_menu: None,
status: None,
})
.into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("context-menu", "Context menu", |_, cx| {
},
));
dock.register_panel(PanelDescriptor::new(
"context-menu",
"Context menu",
|_, cx| {
cx.new(|_| ContextMenuDemo {
action: SharedString::from("Right-click the card"),
})
.into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("popover", "Popover", |_, cx| {
cx.new(|_| PopoverDemo { open: false }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("tooltip", "Tooltip", |_, cx| cx.new(|_| TooltipDemo).into()),
cx,
);
dock.register_panel(
PanelDescriptor::new("empty-state", "Empty state", |_, cx| {
cx.new(|_| EmptyStateDemo).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("scroll-area", "Scroll area", |_, cx| {
cx.new(|_| ScrollAreaDemo).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("scrollbar", "Scrollbar", |_, cx| {
cx.new(|_| ScrollbarDemo::new()).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("code-view", "Code view", |_, cx| {
cx.new(CodeViewDemo::new).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("diff-view", "Diff view", |_, cx| {
cx.new(DiffViewDemo::new).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("markdown-view", "Markdown view", |_, cx| {
cx.new(MarkdownViewDemo::new).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("sidebar", "Sidebar", |_, cx| {
cx.new(|_| SidebarDemo { selected: None }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("resize-handle", "Resize handle", |_, cx| {
cx.new(|_| ResizeDemo { width: px(200.) }).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("resizable", "Resizable", |_, cx| {
cx.new(ResizableDemo::new).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("separator", "Separator", |_, cx| {
cx.new(|_| SeparatorDemo).into()
}),
cx,
);
dock.register_panel(
PanelDescriptor::new("theme", "Theme", |_, cx| cx.new(|_| ThemeDemo).into()),
cx,
);
},
));
dock.register_panel(PanelDescriptor::new("popover", "Popover", |_, cx| {
cx.new(|_| PopoverDemo { open: false }).into()
}));
dock.register_panel(PanelDescriptor::new("tooltip", "Tooltip", |_, cx| {
cx.new(|_| TooltipDemo).into()
}));
dock.register_panel(PanelDescriptor::new(
"empty-state",
"Empty state",
|_, cx| cx.new(|_| EmptyStateDemo).into(),
));
dock.register_panel(PanelDescriptor::new(
"scroll-area",
"Scroll area",
|_, cx| cx.new(|_| ScrollAreaDemo).into(),
));
dock.register_panel(PanelDescriptor::new("scrollbar", "Scrollbar", |_, cx| {
cx.new(|_| ScrollbarDemo::new()).into()
}));
dock.register_panel(PanelDescriptor::new("code-view", "Code view", |_, cx| {
cx.new(CodeViewDemo::new).into()
}));
dock.register_panel(PanelDescriptor::new("diff-view", "Diff view", |_, cx| {
cx.new(DiffViewDemo::new).into()
}));
dock.register_panel(PanelDescriptor::new(
"markdown-view",
"Markdown view",
|_, cx| cx.new(MarkdownViewDemo::new).into(),
));
dock.register_panel(PanelDescriptor::new("sidebar", "Sidebar", |_, cx| {
cx.new(|_| SidebarDemo { selected: None }).into()
}));
dock.register_panel(PanelDescriptor::new(
"resize-handle",
"Resize handle",
|_, cx| cx.new(|_| ResizeDemo { width: px(200.) }).into(),
));
dock.register_panel(PanelDescriptor::new("resizable", "Resizable", |_, cx| {
cx.new(ResizableDemo::new).into()
}));
dock.register_panel(PanelDescriptor::new("separator", "Separator", |_, cx| {
cx.new(|_| SeparatorDemo).into()
}));
dock.register_panel(PanelDescriptor::new("theme", "Theme", |_, cx| {
cx.new(|_| ThemeDemo).into()
}));
}
}
@@ -2309,10 +2219,10 @@ impl Render for TabsDemo {
})
.tabs(|_, _| {
vec![
Tab::new("Overview"),
Tab::new("Details"),
Tab::new("Settings"),
Tab::new("Locked").disabled(true),
Tab::new("overview", "Overview"),
Tab::new("details", "Details"),
Tab::new("settings", "Settings"),
Tab::new("locked", "Locked").disabled(true),
]
}),
))
@@ -2356,7 +2266,7 @@ impl Render for TabsDemo {
labels
.iter()
.map(|label| {
Tab::new(label.clone())
Tab::new(label.clone(), label.clone())
.closeable(true)
.busy(label == "Syncing")
})
@@ -3228,7 +3138,7 @@ impl Render for ScrollbarDemo {
.h_full()
.w_full(),
)
.child(Scrollbar::vertical(self.uniform.clone()).visibility(visibility)),
.child(Scrollbar::vertical("uniform", self.uniform.clone()).visibility(visibility)),
))
.child(demo_section(
"list",
@@ -3254,7 +3164,7 @@ impl Render for ScrollbarDemo {
.h_full()
.w_full(),
)
.child(Scrollbar::vertical(self.list.clone()).visibility(visibility)),
.child(Scrollbar::vertical("list", self.list.clone()).visibility(visibility)),
))
.child(
div()