1#![allow(clippy::default_constructed_unit_structs, clippy::type_complexity)]
2#![doc = r#"
3`beuvy-runtime` is a compact UI kit for Bevy.
4
5It provides a small set of reusable controls and utility-class parsing for
6declarative styling. The stable v1 surface is:
7
8- [`UiKitPlugin`]
9- [`text::AddText`]
10- [`button::AddButton`]
11- [`input::AddInput`]
12- [`utility::parse_utility_classes`]
13
14The crate also exposes a few lower-level modules used by GPMO. Those remain
15public for compatibility, but they are intentionally hidden from the main docs
16and should be treated as less stable.
17"#]
18
19#[doc(hidden)]
20pub mod backdrop;
21#[doc(hidden)]
22pub mod build_pending;
23pub mod button;
24#[doc(hidden)]
25pub mod focus;
26#[doc(hidden)]
27pub mod form_item;
28pub mod image;
29pub mod input;
30#[path = "state_style/mod.rs"]
31#[doc(hidden)]
32pub mod interaction_style;
33pub mod link;
34pub mod scroll;
35pub mod select;
36#[doc(hidden)]
37pub mod style;
38pub mod stylesheet;
39pub mod text;
40mod theme_config;
41pub mod utility;
42
43pub use button::{AddButton, ButtonType};
44pub use input::{AddInput, InputRuntimeValue, InputSubmitMessage};
45pub use image::AddImage;
46pub use interaction_style as state_style;
47pub use link::{AddLink, LinkActivatedMessage};
48pub use scroll::{MouseWheelScroll, scroll_container_node};
49pub use select::{AddSelect, AddSelectOption};
50pub use select::{
51 Select, SelectPanel, SelectValueChangedMessage, default_select_node, selected_option,
52 sync_select_label, trigger_label_entity,
53};
54pub use stylesheet::{
55 RuntimeStyleSource, StyleSheetError, UiStyleSheet, compose_style_sheet, default_style_sheet,
56 font_size_for_tag as stylesheet_font_size_for_tag, parse_style_classes_with_sheet,
57 parse_style_sheet, replace_runtime_style_source, runtime_style_sheet, runtime_style_source,
58};
59pub use text::AddText;
60pub use utility::parse_utility_classes;
61
62use bevy::prelude::*;
63
64pub struct UiKitPlugin;
67
68impl Plugin for UiKitPlugin {
69 fn build(&self, app: &mut App) {
70 app.add_plugins(backdrop::BackdropPlugin)
71 .add_plugins(focus::FocusableUiPlugin)
72 .add_plugins(text::TextPlugin)
73 .add_plugins(form_item::FormItem::default())
74 .add_plugins(button::ButtonPlugin::default())
75 .add_plugins(image::ImagePlugin)
76 .add_plugins(input::InputPlugin)
77 .add_plugins(link::LinkPlugin)
78 .add_plugins(select::SelectPlugin)
79 .add_plugins(interaction_style::UiStateStylePlugin)
80 .add_systems(Update, scroll::materialize_scroll_containers)
81 .add_observer(scroll::handle_mouse_wheel_scroll)
82 .register_required_components::<AddText, build_pending::UiBuildPending>()
83 .register_required_components::<AddButton, build_pending::UiBuildPending>()
84 .register_required_components::<image::AddImage, build_pending::UiBuildPending>()
85 .register_required_components::<AddInput, build_pending::UiBuildPending>()
86 .register_required_components::<link::AddLink, build_pending::UiBuildPending>()
87 .register_required_components::<select::AddSelect, build_pending::UiBuildPending>()
88 .register_required_components::<form_item::AddFormItem, build_pending::UiBuildPending>(
89 );
90 }
91}