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;
69pub mod panegroup;
70mod splitpanel;
71mod spoiler;
72mod text;
73mod themeicon;
74mod title;
75mod transition;
76mod webview;
77
78pub use actionicon::ActionIcon;
79pub use anchor::Anchor;
80pub use badge::Badge;
81pub use blockquote::Blockquote;
82pub use button::Button;
83pub use card::Card;
84pub use chip::Chip;
85pub use closebutton::CloseButton;
86pub use code::Code;
87pub use copybutton::CopyButton;
88pub use divider::{Divider, Orientation};
89pub use icon::{Icon, IconName};
90pub use image::{Image, ObjectFit};
91pub use indicator::Indicator;
92pub use kbd::Kbd;
93pub use mark::Mark;
94pub use panel::Panel;
95pub use paper::Paper;
96pub use scrollarea::ScrollArea;
97pub use skeleton::Skeleton;
98pub use panegroup::{PaneGroup, PaneGroupEvent};
99pub use splitpanel::{SplitDirection, SplitPanel, SplitPanelEvent};
100pub use spoiler::Spoiler;
101pub use text::Text;
102pub use themeicon::ThemeIcon;
103pub use title::Title;
104pub use transition::{Collapse, Transition, TransitionKind};
105pub use webview::{WebView, WebViewEvent};
106
107pub use chart::{BarChart, LineChart, PieChart, Sparkline};
108pub use data::{
109    Accordion, Avatar, AvatarGroup, Column, DataView, DataViewEvent, DataViewLayout, List,
110    SelectionMode, SortDir, TabBar, TabBarEvent, Table, TableView, TableViewEvent, Tabs, Timeline,
111    TreeNode, TreeView, TreeViewEvent,
112};
113pub use editor::{Editor, EditorEvent, EditorModel, EditorStyle, Highlighter, Language, Pos, TokenKind};
114pub use feedback::{
115    Alert, Loader, LoaderVariant, Notification, Progress, RingProgress, ToastStack,
116};
117pub use input::{
118    apply_key, Checkbox, CheckboxGroup, ColorInput, ColorInputEvent, Combobox, ComboboxEvent,
119    Field, KeyOutcome, NumberInput, NumberInputEvent, PasswordInput, PasswordInputEvent, PinInput,
120    PinInputEvent, Radio, RadioGroup, RangeSlider, RangeSliderEvent, Rating, SegmentedControl,
121    SegmentedControlEvent, Select, SelectEvent, Slider, SliderEvent, Switch, TagsInput,
122    TagsInputEvent, TextArea, TextAreaEvent, TextEdit, TextInput, TextInputEvent,
123};
124pub use layout::{Align, AppShell, Center, Container, Group, Justify, SimpleGrid, Space, Stack};
125pub use nav::{Breadcrumbs, NavLink, Pagination, PaginationEvent, StatusBar, Stepper};
126pub use overlay::{
127    tooltip, ConfirmModal, ContextMenu, Drawer, HoverCard, LoadingOverlay, Menu, MenuBar,
128    MenuColumn, Modal, Placement, Popover, Side, Spotlight, Tooltip,
129};
130pub use reactive::{
131    provide, use_context, use_effect, use_form, use_memo, use_state, watch, Binding, FormState,
132    Signal,
133};
134pub use style::{surface, ColorValue, StyleExt, Surface, Variant};
135pub use theme::{
136    css, hsl, hsla, rgb, rgba, theme, Color, ColorName, ColorScheme, CssColorError, Palette, Scale,
137    Shades, Size, Theme,
138};
139
140pub mod prelude {
141    //! Common imports for building with `guise`.
142    pub use crate::chart::{BarChart, LineChart, PieChart, Sparkline};
143    pub use crate::data::{
144        Accordion, Avatar, AvatarGroup, Column, DataView, DataViewEvent, DataViewLayout, List,
145        SelectionMode, SortDir, TabBar, TabBarEvent, Table, TableView, TableViewEvent, Tabs,
146        Timeline, TreeNode, TreeView, TreeViewEvent,
147    };
148    pub use crate::editor::{Editor, EditorEvent, EditorModel, EditorStyle, Language, Pos};
149    pub use crate::feedback::{
150        Alert, Loader, LoaderVariant, Notification, Progress, RingProgress, ToastStack,
151    };
152    pub use crate::input::{
153        apply_key, Checkbox, CheckboxGroup, ColorInput, ColorInputEvent, Combobox, ComboboxEvent,
154        Field, KeyOutcome, NumberInput, NumberInputEvent, PasswordInput, PasswordInputEvent,
155        PinInput, PinInputEvent, Radio, RadioGroup, RangeSlider, RangeSliderEvent, Rating, Select,
156        SelectEvent, Slider, SliderEvent, Switch, TagsInput, TagsInputEvent, TextArea,
157        TextAreaEvent, TextEdit, TextInput, TextInputEvent,
158    };
159    pub use crate::input::{SegmentedControl, SegmentedControlEvent};
160    pub use crate::layout::SimpleGrid;
161    pub use crate::layout::{Align, AppShell, Center, Container, Group, Justify, Space, Stack};
162    pub use crate::nav::{Breadcrumbs, NavLink, Pagination, PaginationEvent, StatusBar, Stepper};
163    pub use crate::overlay::{
164        tooltip, ConfirmModal, ContextMenu, Drawer, HoverCard, LoadingOverlay, Menu, MenuBar,
165        MenuColumn, Modal, Placement, Popover, Side, Spotlight, Tooltip,
166    };
167    pub use crate::reactive::{
168        provide, use_context, use_effect, use_form, use_memo, use_state, watch, Binding, FormState,
169        Signal,
170    };
171    pub use crate::style::{ColorValue, StyleExt, Variant};
172    pub use crate::theme::{
173        css, hsl, hsla, rgb, rgba, theme, Color, ColorName, ColorScheme, Size, Theme,
174    };
175    pub use crate::{badge, button, code, kbd, text, title};
176    pub use crate::{card, center, col, hstack, modal, paper, row, vstack, wrap, zstack};
177    pub use crate::{color, style};
178    pub use crate::{
179        ActionIcon, Anchor, Chip, CloseButton, Code, CopyButton, Icon, IconName, Indicator, Kbd,
180        ScrollArea, Skeleton, ThemeIcon,
181    };
182    pub use crate::{Badge, Button, Card, Divider, Panel, Paper, Text, Title};
183    pub use crate::{Blockquote, Image, Mark, ObjectFit, Spoiler};
184    pub use crate::{Collapse, Transition, TransitionKind};
185    pub use crate::{SplitDirection, SplitPanel, SplitPanelEvent};
186    pub use crate::{WebView, WebViewEvent};
187}