Skip to main content

gpui_kit_material/components/
mod.rs

1//! Material components. Each module documents the M3 component it
2//! implements and what remains for M3 Expressive (`docs/ROADMAP.md`).
3mod button;
4pub use button::{
5    ButtonDirection, ButtonIconPosition, ButtonProgressPlayback, ButtonShape, ButtonSize,
6    ButtonTransitionInputs, ButtonTransitionPlayback, ButtonVariant, FabSize, IconButtonWidth,
7    MaterialButton, material_button,
8};
9mod fab;
10pub use fab::{ExtendedFab, Fab, FabColor};
11mod fab_menu;
12pub use fab_menu::{FabMenu, FabMenuAlign, FabMenuColor, FabMenuItem, FabMenuPresentation};
13mod icon_button;
14mod split_button;
15mod standard_button_group;
16pub use icon_button::{IconButton, IconButtonVariant};
17pub use split_button::{SplitButton, SplitButtonPart};
18pub use standard_button_group::{ButtonDensity, ButtonGroup, EXPANDED_RATIO, standard_group_gap};
19// Forced accessibility trees in tests (GPUI_A11Y_ACTIVE) exist only in GPUI Fast.
20#[cfg(all(test, feature = "gpui-fast"))]
21mod a11y_tests;
22mod app_bar;
23mod avatar;
24mod badge;
25pub use badge::{Badge, BadgeColor, BadgePosition, badge_label};
26mod button_group;
27#[cfg(test)]
28mod color_guard_tests;
29#[cfg(test)]
30mod controls;
31mod divider;
32mod slider;
33mod snackbar;
34mod switch;
35mod toolbar;
36pub use divider::{
37    DividerContext, DividerDirection, DividerOrientation, DividerVariant, MaterialDivider,
38};
39pub use search::{
40    SEARCH_BAR_HEIGHT, SEARCH_SUGGESTION_HEIGHT, SearchField, SearchSuggestion, SearchView,
41    SearchViewLayout, SearchViewStyle,
42};
43pub use slider::{MaterialSlider, SliderAppearance, SliderColor, SliderSize};
44pub use snackbar::{SNACKBAR_CLOSE_ICON, Snackbar};
45pub use switch::{MaterialSwitch, SwitchIcons};
46mod caption;
47mod carousel;
48mod date_parts;
49mod date_picker;
50mod time_picker;
51pub use chrono::{Datelike, NaiveDate, NaiveTime, Timelike, Weekday};
52pub use date_parts::{
53    CalendarDay, DAY_CELL, DayRange, PickerListItem, PickerMenuButton, YearChip, add_months,
54    first_of_month, month_weeks, week_days,
55};
56pub use date_picker::{
57    DATE_INPUT_PICKER_WIDTH, DATE_PICKER_WIDTH, DateInputMode, DateMatcher, DatePicker,
58    DatePickerEvent, DatePickerLabels, DatePickerState, DatePickerVariant, DatePickerView,
59    DateSelection, PickerDialog, today,
60};
61pub use time_picker::{
62    ClockDial, DIAL_SIZE, PeriodSelector, TimeFormat, TimeInputMode, TimeOrientation, TimePicker,
63    TimePickerEvent, TimePickerLabels, TimePickerState, TimeSelector, TimeUnit,
64};
65mod checkbox;
66mod chips;
67mod choice;
68mod dialog;
69mod feedback;
70mod focus;
71mod list;
72mod loading_indicator;
73mod menu;
74mod navigation;
75mod navigation_drawer;
76mod preview;
77mod progress;
78mod radio;
79mod roving;
80mod search;
81mod sheets;
82mod tabs;
83mod text;
84mod text_field;
85mod tile;
86mod title_bar;
87mod tooltip;
88
89pub use app_bar::{
90    BOTTOM_APP_BAR_HEIGHT, BottomAppBar, TOP_APP_BAR_HEIGHT, TopAppBar, TopAppBarVariant,
91    collapsed_title_alpha,
92};
93pub use avatar::{AVATAR_SIZE, Avatar, AvatarContent, monogram_initials};
94pub use button_group::{ConnectedButtonGroup, GroupLabels, GroupSelection};
95pub use caption::{Caption, CaptionButton, CaptionButtons, CaptionLabels, title_bar_control};
96pub use carousel::{
97    CAROUSEL_ITEM_RADIUS, CAROUSEL_SMALL_ITEM, CarouselItem, CarouselLayout, Keyline, Keylines,
98    MaterialCarousel,
99};
100pub use checkbox::{CheckboxState, MaterialCheckbox};
101pub use chips::{AssistChip, CHIP_HEIGHT, ChipStyle, FilterChip, InputChip, SuggestionChip, chip};
102pub use choice::{ChoiceGroup, ChoiceTile, Tint, choice_radio, tinted_icon};
103pub use dialog::{
104    DIALOG_WIDTH, DialogActionAlignment, DialogAnimation, DialogSize, MaterialDialog, SCRIM_OPACITY,
105};
106pub use feedback::{
107    BADGE_CONTAINER, BADGE_LABEL, CARD_PADDING, CardState, CardSurface, CardVariant,
108    LARGE_BADGE_PADDING, LARGE_BADGE_SIZE, MaterialCard, NoticeKind, SMALL_BADGE_SIZE, StatusKind,
109    card, card_surface, large_badge, notice_banner, outlined_status_chip, small_badge, status_chip,
110};
111#[allow(deprecated)]
112pub use feedback::{BadgeKind, badge, outlined_badge};
113pub use focus::{FocusRing, RevealFocus, RingedButton, contain_scroll};
114pub use list::{
115    LIST_SEGMENT_GAP, LIST_SEGMENT_INNER_RADIUS, LIST_SEGMENT_RADIUS, ListDensity, ListItem,
116    ListLeading, ListLines, ListTrailing, list_subheader, segmented_list,
117};
118pub use loading_indicator::{
119    LOADING_INDICATOR_SIZE, LoadingFrame, LoadingIndicator, LoadingShape, loading_indicator_frame,
120};
121pub use menu::{
122    ExposedDropdown, MaterialMenu, MaterialMenuItem, MenuDensity, MenuGroup, MenuPopup, MenuStyle,
123};
124pub use navigation::{
125    MEDIUM_WIDTH, NavBadge, NavIcon, NavItem, NavItemLayout, NavigationBar, NavigationItem,
126    NavigationRail, RAIL_COLLAPSED_WIDTH, RAIL_EXPANDED_WIDTH, RailAlignment, navigation_scrim,
127};
128pub use navigation_drawer::{DRAWER_WIDTH, DrawerPosition, NavigationDrawer};
129mod adaptive;
130pub use adaptive::{
131    SizedContent, WindowHeightClass, WindowSizeClass, WindowWidthClass, sized_content,
132};
133mod pane_logic;
134mod pane_scaffold;
135pub use pane_logic::{
136    AdaptStrategies, AdaptStrategy, BackNavigationBehavior, DEFAULT_PANE_ANCHORS,
137    LIST_DETAIL_ORDER, LIST_DETAIL_STRATEGIES, PaneAdaptedValue, PaneAnchor, PaneDestination,
138    PaneDirective, PaneLayout, PaneLayoutInput, PaneMotion, PaneNavigator, PaneRect, PaneRole,
139    PaneRule, PaneTransition, SUPPORTING_PANE_ORDER, SUPPORTING_PANE_STRATEGIES, ThreePaneValue,
140    closest_pane_anchor, next_pane_anchor, pane_directive, pane_motions, pane_transitions,
141    previous_pane_anchor, three_pane_layout, three_pane_value,
142};
143pub use pane_scaffold::{
144    FEED_COLUMN_MIN_WIDTH, FEED_GAP, FEED_MARGIN, FEED_MARGIN_COMPACT, FeedLayout, FeedMetrics,
145    PaneScaffold, feed_metrics,
146};
147mod pull_to_refresh;
148pub use pull_to_refresh::{
149    PULL_TO_REFRESH_DRAG_MULTIPLIER, PULL_TO_REFRESH_INDICATOR_SIZE,
150    PULL_TO_REFRESH_LOADING_INDICATOR_SIZE, PULL_TO_REFRESH_MAX_DISTANCE,
151    PULL_TO_REFRESH_MIN_ALPHA, PULL_TO_REFRESH_SPINNER_SIZE, PULL_TO_REFRESH_THRESHOLD, PullArrow,
152    PullModel, PullToRefresh, PullToRefreshIndicator, pull_arrow, pull_loading_rotation,
153    pull_vertical_offset,
154};
155mod navigation_suite;
156pub use navigation_suite::{
157    NavigationSuite, NavigationSuiteType, SUITE_PRIMARY_ACTION_PADDING, navigation_suite_type,
158};
159pub use preview::InteractionPreview;
160pub use progress::{
161    CircularProgress, CircularProgressFrame, CircularProgressPlayback, LINEAR_INDETERMINATE_MS,
162    LinearProgress, PROGRESS_THICK_THICKNESS, PROGRESS_THICKNESS, ProgressShape,
163    circular_indeterminate_frame, circular_progress, circular_progress_size, icon_spinner,
164    icon_spinner_with_playback, indeterminate_circular_progress,
165    indeterminate_circular_progress_with_playback, indeterminate_linear_progress_with_playback,
166    indeterminate_progress, indeterminate_progress_with_label,
167    indeterminate_progress_with_playback, linear_indeterminate_lines, linear_progress, progress,
168    progress_with_label, sample_circular_progress, spinner, spinner_with_playback,
169};
170pub use radio::{MaterialRadio, MaterialRadioGroup};
171pub use sheets::{BottomSheetDetent, MaterialBottomSheet, MaterialSideSheet, SideSheetEdge};
172pub use tabs::{MaterialTabs, TabItem, TabsVariant};
173pub use text::{
174    accessible_text, error_text, info_callout, page_heading, section_heading, section_title,
175    semantic_label, supporting_info,
176};
177pub use text_field::{
178    TEXT_FIELD_HEIGHT, TEXT_FIELD_WIDTH, TextField, TextFieldDensity, TextFieldVariant,
179};
180pub use tile::{
181    TileGroup, TileScale, disclosure_chevron, list_tile, tile, tile_chevron, tile_info,
182};
183pub use title_bar::{
184    TitleBar, title_bar_leading, title_bar_window_options, traffic_light_position,
185};
186pub use toolbar::{
187    TOOLBAR_FAB_GAP, TOOLBAR_MARGIN, TOOLBAR_SIZE, Toolbar, ToolbarButton, ToolbarColor,
188    ToolbarConfiguration, ToolbarOrientation,
189};
190pub use tooltip::{MaterialTooltip, PLAIN_TOOLTIP_MAX_WIDTH, RICH_TOOLTIP_WIDTH};
191
192pub(crate) fn init(cx: &mut gpui::App) {
193    roving::init(cx);
194    menu::init(cx);
195    date_picker::init(cx);
196}