#![allow(clippy::type_complexity)]
#![allow(clippy::too_many_arguments)]
use bevy::prelude::*;
pub mod theme;
pub mod locale;
pub mod i18n;
pub mod color;
pub mod icons;
pub mod typography;
pub mod tokens;
pub mod elevation;
pub mod focus;
pub mod ripple;
pub mod telemetry;
pub mod button;
pub mod button_group;
pub mod icon_button;
pub mod fab;
pub mod card;
pub mod checkbox;
pub mod radio;
pub mod switch;
pub mod slider;
pub mod text_field;
pub mod progress;
pub mod dialog;
pub mod date_picker;
pub mod time_picker;
pub mod list;
pub mod menu;
pub mod tabs;
pub mod divider;
pub mod select;
pub mod adaptive;
pub mod layout;
pub mod motion;
pub mod snackbar;
pub mod chip;
pub mod app_bar;
pub mod badge;
pub mod tooltip;
pub mod scroll;
pub mod search;
pub mod toolbar;
pub mod loading_indicator;
pub mod prelude {
pub use bevy::ui::{
BackgroundGradient, BorderGradient, ColorStop, ConicGradient, Gradient, LinearGradient,
RadialGradient,
};
pub use bevy::ui::{BoxShadow, Outline, ShadowStyle};
pub use crate::elevation::{Elevation, ElevationShadow};
pub use crate::focus::{
create_native_focus_outline, FocusGained, FocusLost, FocusPlugin, FocusRing, Focusable,
};
pub use crate::i18n::{
LocalizedText, MaterialI18n, MaterialI18nPlugin, MaterialLanguage,
MaterialLanguageOverride, MaterialTranslations,
};
pub use crate::ripple::{Ripple, RippleHost, RipplePlugin, SpawnRipple};
pub use crate::telemetry::{
test_id_if_enabled, ElementBounds, InsertTestId, TelemetryConfig, TelemetryPlugin, TestId,
};
pub use crate::theme::{ColorScheme, MaterialTheme};
pub use crate::tokens::{CornerRadius, Duration, Easing, Spacing};
pub use crate::typography::Typography;
pub use crate::color::{Hct, MaterialColorScheme, TonalPalette};
pub use crate::icons::{material_icons, MaterialIcon, MaterialIconsPlugin};
pub use crate::button::{
material_button_bundle, spawn_material_button, ButtonClickEvent, ButtonLabel, ButtonPlugin,
ButtonVariant, MaterialButton, MaterialButtonBuilder, SpawnButtonChild,
};
pub use crate::button_group::{
ButtonGroupBuilder, ButtonGroupOrientation, ButtonGroupPlugin, MaterialButtonGroup,
};
pub use crate::icon_button::{
IconButtonBuilder, IconButtonClickEvent, IconButtonPlugin, IconButtonVariant,
MaterialIconButton, SpawnIconButtonChild, ICON_BUTTON_SIZE, ICON_SIZE,
};
pub use crate::fab::{
FabBuilder, FabClickEvent, FabColor, FabLabel, FabPlugin, FabSize, MaterialFab,
SpawnFabChild,
};
pub use crate::card::{
CardBuilder, CardClickEvent, CardPlugin, CardVariant, MaterialCard, SpawnCardChild,
};
pub use crate::checkbox::{
CheckboxBox, CheckboxBuilder, CheckboxChangeEvent, CheckboxIcon, CheckboxPlugin,
CheckboxState, MaterialCheckbox, SpawnCheckbox, SpawnCheckboxChild, CHECKBOX_SIZE,
CHECKBOX_TOUCH_TARGET,
};
pub use crate::radio::{
MaterialRadio, RadioBuilder, RadioChangeEvent, RadioGroup, RadioInner, RadioOuter,
RadioPlugin, RadioStateLayer, SpawnRadio, SpawnRadioChild, RADIO_DOT_SIZE, RADIO_SIZE,
RADIO_TOUCH_TARGET,
};
pub use crate::switch::{
MaterialSwitch, SpawnSwitch, SpawnSwitchChild, SwitchBuilder, SwitchChangeEvent,
SwitchHandle, SwitchPlugin, SwitchStateLayer, SWITCH_HANDLE_SIZE_PRESSED,
SWITCH_HANDLE_SIZE_SELECTED, SWITCH_HANDLE_SIZE_UNSELECTED, SWITCH_TRACK_HEIGHT,
SWITCH_TRACK_WIDTH,
};
pub use crate::slider::{
MaterialSlider, SliderActiveTrack, SliderBuilder, SliderChangeEvent, SliderHandle,
SliderLabel, SliderPlugin, SliderTraceSettings, SliderTrack, SpawnSliderChild,
SLIDER_HANDLE_SIZE, SLIDER_HANDLE_SIZE_PRESSED, SLIDER_LABEL_HEIGHT, SLIDER_TICK_SIZE,
SLIDER_TRACK_HEIGHT, SLIDER_TRACK_HEIGHT_ACTIVE,
};
pub use crate::text_field::{
MaterialTextField, SpawnTextFieldChild, TextFieldBuilder, TextFieldChangeEvent,
TextFieldFormatter, TextFieldInput, TextFieldLabel, TextFieldPlugin, TextFieldSubmitEvent,
TextFieldSupportingText, TextFieldVariant, TEXT_FIELD_HEIGHT, TEXT_FIELD_MIN_WIDTH,
};
pub use crate::progress::{
CircularProgressBuilder, LinearProgressBuilder, MaterialCircularProgress,
MaterialLinearProgress, ProgressIndicator, ProgressMode, ProgressPlugin, ProgressTrack,
ProgressVariant, SpawnProgressChild, CIRCULAR_PROGRESS_SIZE, CIRCULAR_PROGRESS_TRACK_WIDTH,
LINEAR_PROGRESS_HEIGHT,
};
pub use crate::dialog::{
create_dialog_scrim, create_dialog_scrim_for, DialogActions, DialogBuilder,
DialogCloseEvent, DialogConfirmEvent, DialogContent, DialogHeadline, DialogOpenEvent,
DialogPlugin, DialogScrim, DialogType, MaterialDialog, MaterialDialogAnchor,
MaterialDialogPlacement, SpawnDialogChild, DIALOG_MAX_WIDTH, DIALOG_MIN_WIDTH,
};
pub use crate::date_picker::{
CalendarConstraints, Date, DateInputMode, DatePickerBuilder, DatePickerCancelEvent,
DatePickerMode, DatePickerSubmitEvent, DateSelection, DateSelector, DateValidator,
MaterialDatePicker, Month, RangeDateSelector, SingleDateSelector, SpawnDatePicker, Weekday,
};
pub use crate::time_picker::{
MaterialTimePicker, SpawnTimePicker, TimeFormat, TimeInputMode, TimePeriod,
TimePickerBuilder, TimePickerCancelEvent, TimePickerSubmitEvent,
};
pub use crate::list::{
create_list_divider, ListBuilder, ListDivider, ListItemBody, ListItemBuilder,
ListItemClickEvent, ListItemHeadline, ListItemLeading, ListItemSupportingText,
ListItemTrailing, ListItemVariant, ListPlugin, ListSelectionMode, MaterialList,
MaterialListItem, ScrollableList, SpawnListChild,
};
pub use crate::menu::{
create_menu_divider, MaterialMenu, MaterialMenuItem, MenuAnchor, MenuBuilder,
MenuCloseEvent, MenuDivider, MenuItemBuilder, MenuItemSelectEvent, MenuOpenEvent,
MenuPlugin, SpawnMenuChild, MENU_ITEM_HEIGHT, MENU_MAX_WIDTH, MENU_MIN_WIDTH,
};
pub use crate::tabs::{
create_tab_indicator, MaterialTab, MaterialTabs, SpawnTabsChild, TabBuilder,
TabChangeEvent, TabContent, TabIndicator, TabLabelText, TabVariant, TabsBuilder,
TabsPlugin, TAB_HEIGHT_PRIMARY, TAB_HEIGHT_PRIMARY_ICON_ONLY, TAB_HEIGHT_SECONDARY,
TAB_INDICATOR_HEIGHT,
};
pub use crate::divider::{
horizontal_divider, inset_divider, vertical_divider, DividerBuilder, DividerVariant,
MaterialDivider, SpawnDividerChild, DIVIDER_INSET, DIVIDER_THICKNESS,
};
pub use crate::select::{
MaterialSelect, SelectBuilder, SelectChangeEvent, SelectContainer, SelectDisplayText,
SelectDropdown, SelectOption, SelectOptionItem, SelectPlugin, SelectTrigger, SelectVariant,
SpawnSelectChild, SELECT_HEIGHT, SELECT_OPTION_HEIGHT,
};
pub use crate::adaptive::{
WindowHeightClass, WindowSizeClass, WindowSizeClassChanged, WindowSizeClassPlugin,
WindowWidthClass,
};
pub use crate::layout::{
spawn_adaptive_navigation_scaffold, spawn_bottom_navigation_scaffold,
spawn_list_detail_scaffold, spawn_modal_drawer_scaffold,
spawn_navigation_bar_scaffold, spawn_navigation_rail_scaffold,
spawn_navigation_suite_scaffold, spawn_permanent_drawer_scaffold,
spawn_standard_drawer_scaffold, spawn_supporting_panes_scaffold,
AdaptiveNavigationScaffold, BottomNavigationScaffold, ListDetailScaffold,
ModalDrawerScaffold, NavigationBarScaffold, NavigationRailScaffold,
NavigationSuiteScaffold, PaneEntities, PaneTestIds, PermanentDrawerScaffold,
ScaffoldEntities, ScaffoldTestIds, StandardDrawerScaffold, SupportingPanesScaffold,
};
pub use crate::search::{
MaterialSearchBar, SearchBarAction, SearchBarBuilder, SearchBarClickEvent,
SearchBarNavigation, SearchPlugin, SearchQueryEvent, SpawnSearchBarChild,
SEARCH_BAR_HEIGHT,
};
pub use crate::toolbar::{
MaterialToolbar, SpawnToolbarChild, ToolbarAction, ToolbarActionEvent, ToolbarBuilder,
ToolbarNavigationEvent, ToolbarPlugin, TOOLBAR_HEIGHT, TOOLBAR_ICON_SIZE,
};
pub use crate::loading_indicator::{
LoadingIndicatorBuilder, LoadingIndicatorPlugin, LoadingShape, MaterialLoadingIndicator,
ShapeMorphMaterial, SpawnLoadingIndicatorChild, LOADING_INDICATOR_SIZE,
};
pub use crate::motion::{
ease_emphasized, ease_emphasized_accelerate, ease_emphasized_decelerate, ease_standard,
ease_standard_accelerate, ease_standard_decelerate, AnimatedValue, MotionPlugin,
SpringConfig, StateLayer,
};
pub use crate::snackbar::{
spawn_snackbar, DismissSnackbar, ShowSnackbar, Snackbar, SnackbarActionEvent,
SnackbarAnimationState, SnackbarBuilder, SnackbarHostBuilder, SnackbarPlugin,
SnackbarPosition, SnackbarQueue, SpawnSnackbarChild, SNACKBAR_MAX_WIDTH,
};
pub use crate::chip::{
ChipBuilder, ChipClickEvent, ChipDeleteButton, ChipDeleteEvent, ChipLabel, ChipLeadingIcon,
ChipPlugin, ChipVariant, MaterialChip, SpawnChipChild, CHIP_HEIGHT,
};
pub use crate::app_bar::{
AppBarPlugin, BottomAppBar, BottomAppBarBuilder, SpawnAppBarChild, TopAppBar,
TopAppBarBuilder, TopAppBarVariant, BOTTOM_APP_BAR_HEIGHT, TOP_APP_BAR_HEIGHT_LARGE,
TOP_APP_BAR_HEIGHT_MEDIUM, TOP_APP_BAR_HEIGHT_SMALL,
};
pub use crate::badge::{
BadgeBuilder, BadgeContent, BadgePlugin, MaterialBadge, SpawnBadgeChild, BADGE_SIZE_LARGE,
BADGE_SIZE_SMALL,
};
pub use crate::tooltip::{
spawn_rich_tooltip, spawn_tooltip, RichTooltip, SpawnTooltipChild, Tooltip,
TooltipAnimationState, TooltipPlugin, TooltipPosition, TooltipText, TooltipTrigger,
TooltipTriggerBuilder, TooltipVariant, TOOLTIP_DELAY_DEFAULT, TOOLTIP_DELAY_SHORT,
TOOLTIP_HEIGHT_PLAIN, TOOLTIP_MAX_WIDTH, TOOLTIP_OFFSET,
};
pub use crate::scroll::{
spawn_scrollbars, ScrollContainer, ScrollContainerBuilder, ScrollContent, ScrollDirection,
ScrollPlugin, ScrollbarThumbHorizontal, ScrollbarThumbVertical, ScrollbarTrackHorizontal,
ScrollbarTrackVertical,
};
pub use crate::MaterialUiPlugin;
}
pub struct MaterialUiPlugin;
impl Plugin for MaterialUiPlugin {
fn build(&self, app: &mut App) {
app.add_plugins(MaterialUiCorePlugin);
app.add_plugins((
button::ButtonPlugin,
icon_button::IconButtonPlugin,
fab::FabPlugin,
card::CardPlugin,
checkbox::CheckboxPlugin,
radio::RadioPlugin,
switch::SwitchPlugin,
slider::SliderPlugin,
text_field::TextFieldPlugin,
progress::ProgressPlugin,
dialog::DialogPlugin,
list::ListPlugin,
menu::MenuPlugin,
tabs::TabsPlugin,
select::SelectPlugin,
));
app.add_plugins(button_group::ButtonGroupPlugin);
app.add_plugins((
motion::MotionPlugin,
snackbar::SnackbarPlugin,
chip::ChipPlugin,
app_bar::AppBarPlugin,
badge::BadgePlugin,
tooltip::TooltipPlugin,
scroll::ScrollPlugin,
date_picker::DatePickerPlugin,
time_picker::TimePickerPlugin,
search::SearchPlugin,
toolbar::ToolbarPlugin,
loading_indicator::LoadingIndicatorPlugin,
));
app.add_plugins(adaptive::WindowSizeClassPlugin);
}
}
pub struct MaterialUiCorePlugin;
impl Plugin for MaterialUiCorePlugin {
fn build(&self, app: &mut App) {
app.init_resource::<theme::MaterialTheme>();
app.init_resource::<locale::MaterialLocale>();
if !app.is_plugin_added::<i18n::MaterialI18nPlugin>() {
app.add_plugins(i18n::MaterialI18nPlugin);
}
if !app.is_plugin_added::<focus::FocusPlugin>() {
app.add_plugins(focus::FocusPlugin);
}
if !app.is_plugin_added::<ripple::RipplePlugin>() {
app.add_plugins(ripple::RipplePlugin);
}
if !app.is_plugin_added::<icons::MaterialIconsPlugin>() {
app.add_plugins(icons::MaterialIconsPlugin);
}
}
}
pub struct MaterialUiPlugins;
impl PluginGroup for MaterialUiPlugins {
fn build(self) -> bevy::app::PluginGroupBuilder {
bevy::app::PluginGroupBuilder::start::<Self>().add(MaterialUiPlugin)
}
}