Skip to main content

guise/
lib.rs

1//! # guise
2//!
3//! A component library for [gpui](https://github.com/zed-industries/zed),
4//! Zed's GPU-accelerated UI framework.
5//!
6//! `guise` provides a themed palette, sizing tokens, and a growing set of
7//! ready-to-use components built on gpui's `RenderOnce` builder pattern.
8//!
9//! ```ignore
10//! use guise::prelude::*;
11//!
12//! Stack::new().gap(Size::Md).child(
13//!     Button::new("save", "Save").variant(Variant::Filled),
14//! )
15//! ```
16//!
17//! Install a [`Theme`] once at startup, then read it from any component:
18//!
19//! ```ignore
20//! guise::theme::Theme::dark().init(cx);
21//! ```
22
23#[macro_use]
24mod macros;
25
26#[cfg(test)]
27mod apptests;
28
29pub mod style;
30pub mod theme;
31
32/// Re-exported so the layout macros can bring `.child()` into scope without
33/// requiring callers to import gpui's `ParentElement`.
34#[doc(hidden)]
35pub use gpui::ParentElement as __ParentElement;
36
37/// Re-exported so the `style!` macro can reference gpui (`px`, `FontWeight`, …)
38/// via `$crate::gpui::…` without the caller importing gpui.
39#[doc(hidden)]
40pub use ::gpui;
41
42pub mod ai;
43pub mod anim;
44pub mod chart;
45pub mod data;
46pub mod devtools;
47pub mod dnd;
48pub mod editor;
49pub mod feedback;
50pub mod flex;
51pub mod input;
52pub mod layout;
53pub mod markdown;
54pub mod nav;
55pub mod overlay;
56pub mod reactive;
57pub mod settings;
58pub mod update;
59
60mod about;
61mod actionicon;
62mod anchor;
63mod badge;
64mod blockquote;
65mod button;
66mod card;
67mod carousel;
68mod chip;
69mod closebutton;
70mod code;
71mod copybutton;
72mod divider;
73mod icon;
74mod image;
75mod indicator;
76mod kbd;
77mod mark;
78pub mod panegroup;
79mod panel;
80mod paper;
81mod scrollarea;
82mod skeleton;
83mod splitpanel;
84mod spoiler;
85mod text;
86mod themeicon;
87mod title;
88mod transition;
89mod webview;
90mod windowcontrols;
91
92pub use about::{About, BuildKind};
93pub use actionicon::ActionIcon;
94pub use ai::{
95    format_cost, AIChatView, AIChatViewEvent, AICitation, AIComposer, AIComposerEvent, AICost,
96    AIMessage, AIModel, AIModelPicker, AIModelPickerEvent, AIPricing, AIReasoning, AIRole,
97    AISettings, AISettingsEvent, AISource, AISources, AIStreamingText, AIThinking, AITokenMeter,
98    AIToolCall, AIToolStatus, AITurn, AITurnTool, AIUsage,
99};
100pub use anchor::Anchor;
101pub use anim::{Easing, Presence, PresenceEvent, Spring};
102pub use badge::Badge;
103pub use blockquote::Blockquote;
104pub use button::Button;
105pub use card::Card;
106pub use carousel::{Carousel, CarouselEvent};
107pub use chip::Chip;
108pub use closebutton::CloseButton;
109pub use code::Code;
110pub use copybutton::CopyButton;
111pub use divider::{Divider, Orientation};
112pub use dnd::{apply_reorder, Draggable, DropTarget, SortableList};
113pub use icon::{Glyph, Icon, IconName, LUCIDE_VERSION};
114pub use image::{Image, ObjectFit};
115pub use indicator::Indicator;
116pub use kbd::Kbd;
117pub use mark::Mark;
118pub use panegroup::{PaneGroup, PaneGroupEvent};
119pub use panel::Panel;
120pub use paper::Paper;
121pub use scrollarea::ScrollArea;
122pub use skeleton::Skeleton;
123pub use splitpanel::{SplitDirection, SplitPanel, SplitPanelEvent};
124pub use spoiler::Spoiler;
125pub use text::Text;
126pub use themeicon::ThemeIcon;
127pub use title::Title;
128pub use transition::{Collapse, Transition, TransitionKind};
129pub use webview::{WebView, WebViewEvent};
130pub use windowcontrols::{ResizeHandles, WindowControls, TRAFFIC_LIGHT_INSET};
131
132pub use chart::{AreaChart, BarChart, LineChart, PieChart, ScatterChart, Sparkline};
133pub use data::{
134    Accordion, Avatar, AvatarGroup, Column, DataView, DataViewEvent, DataViewLayout, List,
135    SelectionMode, SortDir, TabBar, TabBarEvent, Table, TableView, TableViewEvent, Tabs, Timeline,
136    TreeNode, TreeView, TreeViewEvent, VirtualList,
137};
138#[cfg(feature = "treesitter")]
139pub use editor::TreeSitterHighlighter;
140pub use editor::{
141    Diagnostic, DocumentHighlighter, Editor, EditorEvent, EditorModel, EditorStyle, Highlighter,
142    Language, Pos, Severity, TokenKind,
143};
144pub use feedback::{
145    Alert, Loader, LoaderVariant, Notification, Progress, RingProgress, ToastStack,
146};
147pub use input::{
148    apply_key, days_in_month, is_leap_year, month_grid, Autocomplete, AutocompleteEvent, Calendar,
149    Checkbox, CheckboxGroup, ColorInput, ColorInputEvent, Combobox, ComboboxEvent, Date,
150    DatePicker, DatePickerEvent, Dropzone, Field, FileInput, FileInputEvent, KeyOutcome,
151    NumberInput, NumberInputEvent, PasswordInput, PasswordInputEvent, PinInput, PinInputEvent,
152    Radio, RadioGroup, RangeSlider, RangeSliderEvent, Rating, SegmentedControl,
153    SegmentedControlEvent, Select, SelectEvent, Slider, SliderEvent, Switch, TagsInput,
154    TagsInputEvent, TextArea, TextAreaEvent, TextAreaSubmit, TextEdit, TextInput, TextInputEvent,
155    Time, TimePicker, TimePickerEvent, Transfer, TransferEvent, Weekday, MONTH_NAMES,
156};
157pub use layout::{
158    Align, AppShell, Breakpoint, Center, Container, Group, Justify, Responsive, SimpleGrid, Space,
159    Stack,
160};
161pub use markdown::{Markdown, MarkdownEditor, MarkdownEditorEvent, MarkdownStyle};
162pub use nav::{
163    Breadcrumbs, NavLink, NavigationMenu, NavigationMenuEvent, Pagination, PaginationEvent,
164    StatusBar, Stepper,
165};
166pub use overlay::{
167    tooltip, ConfirmModal, ContextMenu, Drawer, HoverCard, LoadingOverlay, Menu, MenuBar,
168    MenuColumn, Modal, ModalCloser, OverlayHost, Placement, Popover, Side, Spotlight, Tooltip,
169    Tour, TourEvent,
170};
171pub use reactive::{
172    provide, use_context, use_effect, use_form, use_memo, use_state, validators, watch, Binding,
173    Form, FormState, FormValues, Rule, Signal, Validator,
174};
175pub use style::{surface, ColorValue, StyleExt, Surface, Variant};
176pub use theme::{
177    css, hsl, hsla, rgb, rgba, theme, Color, ColorName, ColorScheme, CssColorError, Palette, Scale,
178    Shades, Size, Theme, ThemeJsonError, PRESET_NAMES,
179};
180// The free functions (`start`, `check_now`, `detect`, `is_newer`, …) stay behind
181// `update::` — their names only read clearly next to the module.
182pub use update::{
183    InstallKind, Relaunch, Release, ReleaseAsset, UpdateCheck, UpdateConfig, UpdateNotice,
184    UpdateNoticeEvent, UpdateOutcome, UpdatePrompt, UpdatePromptEvent, UpdateSource, UpdateStage,
185    Updater,
186};
187
188pub mod prelude {
189    //! Common imports for building with `guise`.
190    pub use crate::ai::{
191        AIChatView, AIChatViewEvent, AICitation, AIComposer, AIComposerEvent, AICost, AIMessage,
192        AIModel, AIModelPicker, AIModelPickerEvent, AIPricing, AIReasoning, AIRole, AISettings,
193        AISettingsEvent, AISource, AISources, AIStreamingText, AIThinking, AITokenMeter,
194        AIToolCall, AIToolStatus, AITurn, AITurnTool, AIUsage,
195    };
196    pub use crate::chart::{AreaChart, BarChart, LineChart, PieChart, ScatterChart, Sparkline};
197    pub use crate::data::{
198        Accordion, Avatar, AvatarGroup, Column, DataView, DataViewEvent, DataViewLayout, List,
199        SelectionMode, SortDir, TabBar, TabBarEvent, Table, TableView, TableViewEvent, Tabs,
200        Timeline, TreeNode, TreeView, TreeViewEvent, VirtualList,
201    };
202    pub use crate::devtools::{
203        DevTools, DevToolsEvent, DevToolsState, DevToolsTab, Dock, LogLevel, LogRecord,
204        NetworkRecord, Probed, ProbedAny, RequestState, ResourceKind, SourceRef, StorageDomain,
205        StorageEntry, StorageKind, TimelineEvent, TimelineKind, Timings,
206    };
207    pub use crate::dnd::{apply_reorder, Draggable, DropTarget, SortableList};
208    pub use crate::editor::{
209        Diagnostic, Editor, EditorEvent, EditorModel, EditorStyle, Language, Pos, Severity,
210    };
211    pub use crate::feedback::{
212        Alert, Loader, LoaderVariant, Notification, Progress, RingProgress, ToastStack,
213    };
214    pub use crate::input::{
215        apply_key, apply_nav, Autocomplete, AutocompleteEvent, Calendar, Checkbox, CheckboxGroup,
216        ColorInput, ColorInputEvent, Combobox, ComboboxEvent, Date, DatePicker, DatePickerEvent,
217        Dropzone, Field, FileInput, FileInputEvent, KeyOutcome, NumberInput, NumberInputEvent,
218        PasswordInput, PasswordInputEvent, PinInput, PinInputEvent, Radio, RadioGroup, RangeSlider,
219        RangeSliderEvent, Rating, Select, SelectEvent, Slider, SliderEvent, Switch, TagsInput,
220        TagsInputEvent, TextArea, TextAreaEvent, TextAreaSubmit, TextEdit, TextInput,
221        TextInputEvent, Time, TimePicker, TimePickerEvent, Transfer, TransferEvent, Weekday,
222    };
223    pub use crate::input::{SegmentedControl, SegmentedControlEvent};
224    pub use crate::layout::SimpleGrid;
225    pub use crate::layout::{
226        Align, AppShell, Breakpoint, Center, Container, Group, Justify, Responsive, Space, Stack,
227    };
228    pub use crate::markdown::{Markdown, MarkdownEditor, MarkdownEditorEvent, MarkdownStyle};
229    pub use crate::nav::{
230        Breadcrumbs, NavLink, NavigationMenu, NavigationMenuEvent, Pagination, PaginationEvent,
231        StatusBar, Stepper,
232    };
233    pub use crate::overlay::{
234        tooltip, ConfirmModal, ContextMenu, Drawer, HoverCard, LoadingOverlay, Menu, MenuBar,
235        MenuColumn, Modal, ModalCloser, OverlayHost, Placement, Popover, Side, Spotlight, Tooltip,
236        Tour, TourEvent,
237    };
238    pub use crate::reactive::{
239        provide, use_context, use_effect, use_form, use_memo, use_state, validators, watch,
240        Binding, Form, FormState, FormValues, Rule, Signal, Validator,
241    };
242    pub use crate::settings::{
243        SettingsPage, SettingsRow, SettingsSection, SettingsView, SettingsViewEvent,
244    };
245    pub use crate::style::{ColorValue, StyleExt, Variant};
246    pub use crate::theme::{
247        css, hsl, hsla, rgb, rgba, theme, Color, ColorName, ColorScheme, Size, Theme,
248    };
249    pub use crate::update::{
250        InstallKind, Relaunch, Release, ReleaseAsset, UpdateCheck, UpdateConfig, UpdateNotice,
251        UpdateNoticeEvent, UpdateOutcome, UpdatePrompt, UpdatePromptEvent, UpdateSource,
252        UpdateStage, Updater,
253    };
254    pub use crate::{badge, button, code, kbd, text, title};
255    pub use crate::{card, center, col, hstack, modal, paper, row, vstack, wrap, zstack};
256    pub use crate::{color, style};
257    pub use crate::{About, BuildKind, ResizeHandles, WindowControls};
258    pub use crate::{
259        ActionIcon, Anchor, Chip, CloseButton, Code, CopyButton, Glyph, Icon, IconName, Indicator,
260        Kbd, ScrollArea, Skeleton, ThemeIcon,
261    };
262    pub use crate::{
263        Badge, Button, Card, Carousel, CarouselEvent, Divider, Panel, Paper, Text, Title,
264    };
265    pub use crate::{Blockquote, Image, Mark, ObjectFit, Spoiler};
266    pub use crate::{Collapse, Transition, TransitionKind};
267    pub use crate::{Easing, Presence, PresenceEvent, Spring};
268    pub use crate::{SplitDirection, SplitPanel, SplitPanelEvent};
269    pub use crate::{WebView, WebViewEvent};
270}