Skip to main content

guise/
lib.rs

1//! # guise
2//!
3//! A Mantine-inspired component library for [gpui](https://github.com/zed-industries/zed).
4//!
5//! `guise` provides a themed palette, sizing tokens, and a growing set of
6//! ready-to-use components built on gpui's `RenderOnce` builder pattern.
7//!
8//! ```ignore
9//! use guise::prelude::*;
10//!
11//! Stack::new().gap(Size::Md).child(
12//!     Button::new("save", "Save").variant(Variant::Filled),
13//! )
14//! ```
15//!
16//! Install a [`Theme`] once at startup, then read it from any component:
17//!
18//! ```ignore
19//! guise::theme::Theme::dark().init(cx);
20//! ```
21
22#[macro_use]
23mod macros;
24
25pub mod style;
26pub mod theme;
27
28/// Re-exported so the layout macros can bring `.child()` into scope without
29/// requiring callers to import gpui's `ParentElement`.
30#[doc(hidden)]
31pub use gpui::ParentElement as __ParentElement;
32
33/// Re-exported so the `style!` macro can reference gpui (`px`, `FontWeight`, …)
34/// via `$crate::gpui::…` without the caller importing gpui.
35#[doc(hidden)]
36pub use ::gpui;
37
38pub mod chart;
39pub mod data;
40pub mod editor;
41pub mod feedback;
42pub mod flex;
43pub mod input;
44pub mod layout;
45pub mod nav;
46pub mod overlay;
47pub mod reactive;
48
49mod actionicon;
50mod anchor;
51mod badge;
52mod blockquote;
53mod button;
54mod card;
55mod chip;
56mod closebutton;
57mod code;
58mod copybutton;
59mod divider;
60mod icon;
61mod image;
62mod indicator;
63mod kbd;
64mod mark;
65mod panel;
66mod paper;
67mod scrollarea;
68mod skeleton;
69mod splitpanel;
70mod spoiler;
71mod text;
72mod themeicon;
73mod title;
74mod transition;
75mod webview;
76
77pub use actionicon::ActionIcon;
78pub use anchor::Anchor;
79pub use badge::Badge;
80pub use blockquote::Blockquote;
81pub use button::Button;
82pub use card::Card;
83pub use chip::Chip;
84pub use closebutton::CloseButton;
85pub use code::Code;
86pub use copybutton::CopyButton;
87pub use divider::{Divider, Orientation};
88pub use icon::{Icon, IconName};
89pub use image::{Image, ObjectFit};
90pub use indicator::Indicator;
91pub use kbd::Kbd;
92pub use mark::Mark;
93pub use panel::Panel;
94pub use paper::Paper;
95pub use scrollarea::ScrollArea;
96pub use skeleton::Skeleton;
97pub use splitpanel::{SplitDirection, SplitPanel, SplitPanelEvent};
98pub use spoiler::Spoiler;
99pub use text::Text;
100pub use themeicon::ThemeIcon;
101pub use title::Title;
102pub use transition::{Collapse, Transition, TransitionKind};
103pub use webview::{WebView, WebViewEvent};
104
105pub use chart::{BarChart, LineChart, PieChart, Sparkline};
106pub use data::{
107    Accordion, Avatar, AvatarGroup, Column, DataView, DataViewEvent, DataViewLayout, List,
108    SelectionMode, SortDir, TabBar, TabBarEvent, Table, TableView, TableViewEvent, Tabs, Timeline,
109    TreeNode, TreeView, TreeViewEvent,
110};
111pub use editor::{Editor, EditorEvent, EditorModel, EditorStyle, Highlighter, Language, Pos, TokenKind};
112pub use feedback::{
113    Alert, Loader, LoaderVariant, Notification, Progress, RingProgress, ToastStack,
114};
115pub use input::{
116    apply_key, Checkbox, CheckboxGroup, ColorInput, ColorInputEvent, Combobox, ComboboxEvent,
117    Field, KeyOutcome, NumberInput, NumberInputEvent, PasswordInput, PasswordInputEvent, PinInput,
118    PinInputEvent, Radio, RadioGroup, RangeSlider, RangeSliderEvent, Rating, SegmentedControl,
119    SegmentedControlEvent, Select, SelectEvent, Slider, SliderEvent, Switch, TagsInput,
120    TagsInputEvent, TextArea, TextAreaEvent, TextEdit, TextInput, TextInputEvent,
121};
122pub use layout::{Align, AppShell, Center, Container, Group, Justify, SimpleGrid, Space, Stack};
123pub use nav::{Breadcrumbs, NavLink, Pagination, PaginationEvent, StatusBar, Stepper};
124pub use overlay::{
125    tooltip, ConfirmModal, ContextMenu, Drawer, HoverCard, LoadingOverlay, Menu, MenuBar,
126    MenuColumn, Modal, Placement, Popover, Side, Spotlight, Tooltip,
127};
128pub use reactive::{
129    provide, use_context, use_effect, use_form, use_memo, use_state, watch, Binding, FormState,
130    Signal,
131};
132pub use style::{surface, ColorValue, StyleExt, Surface, Variant};
133pub use theme::{
134    css, hsl, hsla, rgb, rgba, theme, Color, ColorName, ColorScheme, CssColorError, Palette, Scale,
135    Shades, Size, Theme,
136};
137
138pub mod prelude {
139    //! Common imports for building with `guise`.
140    pub use crate::chart::{BarChart, LineChart, PieChart, Sparkline};
141    pub use crate::data::{
142        Accordion, Avatar, AvatarGroup, Column, DataView, DataViewEvent, DataViewLayout, List,
143        SelectionMode, SortDir, TabBar, TabBarEvent, Table, TableView, TableViewEvent, Tabs,
144        Timeline, TreeNode, TreeView, TreeViewEvent,
145    };
146    pub use crate::editor::{Editor, EditorEvent, EditorModel, EditorStyle, Language, Pos};
147    pub use crate::feedback::{
148        Alert, Loader, LoaderVariant, Notification, Progress, RingProgress, ToastStack,
149    };
150    pub use crate::input::{
151        apply_key, Checkbox, CheckboxGroup, ColorInput, ColorInputEvent, Combobox, ComboboxEvent,
152        Field, KeyOutcome, NumberInput, NumberInputEvent, PasswordInput, PasswordInputEvent,
153        PinInput, PinInputEvent, Radio, RadioGroup, RangeSlider, RangeSliderEvent, Rating, Select,
154        SelectEvent, Slider, SliderEvent, Switch, TagsInput, TagsInputEvent, TextArea,
155        TextAreaEvent, TextEdit, TextInput, TextInputEvent,
156    };
157    pub use crate::input::{SegmentedControl, SegmentedControlEvent};
158    pub use crate::layout::SimpleGrid;
159    pub use crate::layout::{Align, AppShell, Center, Container, Group, Justify, Space, Stack};
160    pub use crate::nav::{Breadcrumbs, NavLink, Pagination, PaginationEvent, StatusBar, Stepper};
161    pub use crate::overlay::{
162        tooltip, ConfirmModal, ContextMenu, Drawer, HoverCard, LoadingOverlay, Menu, MenuBar,
163        MenuColumn, Modal, Placement, Popover, Side, Spotlight, Tooltip,
164    };
165    pub use crate::reactive::{
166        provide, use_context, use_effect, use_form, use_memo, use_state, watch, Binding, FormState,
167        Signal,
168    };
169    pub use crate::style::{ColorValue, StyleExt, Variant};
170    pub use crate::theme::{
171        css, hsl, hsla, rgb, rgba, theme, Color, ColorName, ColorScheme, Size, Theme,
172    };
173    pub use crate::{badge, button, code, kbd, text, title};
174    pub use crate::{card, center, col, hstack, modal, paper, row, vstack, wrap, zstack};
175    pub use crate::{color, style};
176    pub use crate::{
177        ActionIcon, Anchor, Chip, CloseButton, Code, CopyButton, Icon, IconName, Indicator, Kbd,
178        ScrollArea, Skeleton, ThemeIcon,
179    };
180    pub use crate::{Badge, Button, Card, Divider, Panel, Paper, Text, Title};
181    pub use crate::{Blockquote, Image, Mark, ObjectFit, Spoiler};
182    pub use crate::{Collapse, Transition, TransitionKind};
183    pub use crate::{SplitDirection, SplitPanel, SplitPanelEvent};
184    pub use crate::{WebView, WebViewEvent};
185}