mod avatar;
mod badge;
mod button;
mod command;
mod icon;
mod input;
mod label;
mod looping;
mod menu;
mod nav;
mod popover;
mod progress;
mod root;
mod scroll_area;
mod select;
mod sidebar;
mod skeleton;
mod spinner;
mod switch;
mod tabs;
mod tag;
pub mod theme;
mod theme_mode_picker;
mod title_bar;
mod tooltip;
mod tooltip_host;
mod touch_selection;
pub use avatar::{Avatar, AvatarGroup, AvatarSize};
pub use badge::Badge;
pub use button::{Button, ButtonSize, ButtonVariant};
pub use command::{
Command, CommandEntry, CommandEvent, CommandGroup, CommandItem, CommandRow,
CommandSearchHandler, CommandState,
};
pub use gpui_kit;
pub use gpui_kit::base::input::{InputEvent, InputState, TextareaState};
pub use icon::{Icon, IconSource};
pub use input::{Field, Input, Textarea};
pub use label::Label;
pub use menu::{
ContextMenu, DropdownMenu, MenuAnchor, MenuBar, MenuBarMenu, MenuBarState, MenuEntry,
MenuEvent, MenuItem, MenuRowState, MenuState, MenuSubmenu,
};
pub use nav::{
NavButtons, NavMotion, NavOperation, NavPage, NavStack, NavStackEvent, NavStackExt,
NavStackState,
};
pub use popover::Popover;
pub use progress::Progress;
pub use scroll_area::ScrollArea;
pub use select::{
SearchHandler, Select, SelectEntry, SelectEvent, SelectItem, SelectRow, SelectState,
SelectValue,
};
pub use sidebar::{
Sidebar, SidebarCollapsible, SidebarEvent, SidebarGroup, SidebarLayout, SidebarMenuButton,
SidebarMenuSize, SidebarMenuSkeleton, SidebarMenuSub, SidebarSeparator, SidebarSide,
SidebarState, SidebarTrigger,
};
pub use skeleton::Skeleton;
pub use spinner::Spinner;
pub use switch::Switch;
pub use tabs::{Tab, Tabs, TabsEvent, TabsState};
pub use tag::{Tag, TagVariant};
pub use theme::{
ActiveTheme, MetricTokens, ReduceMotion, Theme, ThemeConfig, ThemeMode, ThemeTokens,
};
pub use theme_mode_picker::ThemeModePicker;
pub use title_bar::TitleBar;
pub use tooltip::{Tooltip, TooltipExt, TooltipTrigger};
pub use tooltip_host::TooltipHost;
use gpui_kit::{App, Global};
pub mod prelude {
pub use crate::{
ActiveTheme, Avatar, AvatarGroup, AvatarSize, Badge, Button, ButtonSize, ButtonVariant,
Command, CommandEntry, CommandGroup, CommandItem, CommandState, ContextMenu, DropdownMenu,
Field, Icon, Input, InputState, Label, MenuBar, MenuBarMenu, MenuBarState, MenuEntry,
MenuItem, MenuState, MenuSubmenu, NavButtons, NavMotion, NavStack, NavStackExt,
NavStackState, Popover, Progress, ReduceMotion, ScrollArea, Select, SelectEntry,
SelectItem, SelectState, Sidebar, SidebarCollapsible, SidebarGroup, SidebarLayout,
SidebarMenuButton, SidebarMenuSub, SidebarSeparator, SidebarSide, SidebarState,
SidebarTrigger, Spinner, Switch, Tab, Tabs, TabsEvent, TabsState, Tag, TagVariant,
Textarea, TextareaState, Theme, ThemeMode, ThemeModePicker, TitleBar, TooltipExt,
};
pub use gpui_kit::base::{Disableable, Placement, Selectable, StyledExt};
pub use gpui_kit::prelude::FluentBuilder;
}
struct Initialized;
impl Global for Initialized {}
pub fn init(cx: &mut App) {
if cx.has_global::<Initialized>() {
return;
}
assert!(
base_initialized(cx),
"gpui_cn::init needs gpui_base::init first; call gpui_kit::init(cx) before it"
);
theme::fonts::register(cx);
Theme::init(cx);
root::init(cx);
select::init(cx);
menu::init(cx);
command::init(cx);
cx.set_global(Initialized);
}
fn base_initialized(cx: &App) -> bool {
cx.has_global::<gpui_kit::base::GlobalState>()
}
#[cfg(test)]
mod tests {
use gpui_kit::TestAppContext;
#[gpui_kit::test]
fn init_is_idempotent_and_skips_base_when_already_initialized(cx: &mut TestAppContext) {
cx.update(|cx| {
assert!(!super::base_initialized(cx));
gpui_kit::init(cx);
assert!(super::base_initialized(cx));
super::init(cx);
super::init(cx);
assert!(cx.has_global::<super::Initialized>());
});
}
#[gpui_kit::test]
#[should_panic(expected = "needs gpui_base::init first")]
fn init_refuses_to_run_before_base(cx: &mut TestAppContext) {
cx.update(super::init);
}
}