1#![warn(missing_docs)]
16
17pub use bevy::prelude::*;
19use bevy_plugin_builder::define_plugin;
20
21mod styles;
23mod systems;
24mod utils;
25pub mod relationships;
26pub mod validation;
27
28#[cfg(feature = "button")]
30pub mod button;
31#[cfg(feature = "slider")]
32pub mod slider;
33#[cfg(feature = "form")]
34pub mod form;
35#[cfg(feature = "dialog")]
36pub mod dialog;
37#[cfg(feature = "text_input")]
38pub mod text_input;
39#[cfg(feature = "progress")]
40pub mod progress;
41#[cfg(feature = "label")]
42pub mod label;
43#[cfg(feature = "panel")]
44pub mod panel;
45#[cfg(feature = "separator")]
46pub mod separator;
47#[cfg(feature = "checkbox")]
48pub mod checkbox;
49#[cfg(feature = "number_input")]
50pub mod number_input;
51#[cfg(feature = "dropdown")]
52pub mod dropdown;
53
54pub mod scroll_view;
56
57pub use styles::{ButtonStyle, ButtonSize, colors, dimensions};
63pub use systems::cleanup::{despawn_entities, despawn_ui_entities};
64pub use systems::hover::HoverPlugin;
65pub use scroll_view::{ScrollViewBuilder, ScrollView, ScrollConfig, ScrollDirection, ScrollViewPlugin, scroll_view};
66pub use relationships::{
67 BelongsToDialog, DialogElements,
68 SliderPart, SliderParts,
69 BelongsToForm, FormFields,
70 InButtonGroup, ButtonGroupMembers,
71 PanelContent, PanelContents,
72 TextInputPart, TextInputParts,
73 ProgressBarPart, ProgressBarParts,
74 BelongsToDropdown, DropdownElements,
75 UIRelationshipsPlugin,
76};
77pub use validation::{Validated, ValidationState, ValidationPlugin};
78
79#[cfg(feature = "button")]
81pub use button::{
82 ButtonBuilder, StyledButton,
83 primary_button, secondary_button, success_button, danger_button, ghost_button,
84};
85
86#[cfg(feature = "slider")]
87pub use slider::{SliderBuilder, SliderBuilderWithMarker, Slider, SliderHandle, SliderTrack, ValueFormat};
88
89#[cfg(feature = "form")]
90pub use form::{FormBuilder, FieldType, ValidationRule};
91
92#[cfg(feature = "dialog")]
93pub use dialog::{
94 DialogBuilder, DialogButtonEvent, DialogType, DialogOverlay, DialogButtonMarker,
95 ConfirmButton, CancelButton, SaveButton, DiscardButton,
97 OkButton, YesButton, NoButton,
98 ExitConfirmationDialog, UnsavedChangesDialog, ResolutionDialog,
100 ErrorDialog, InfoDialog, WarningDialog, SuccessDialog
101};
102
103#[cfg(feature = "text_input")]
104pub use text_input::{TextInputBuilder, InputFilter, InputTransform, FocusGroupId, text_input};
105
106#[cfg(feature = "progress")]
107pub use progress::{ProgressBarBuilder, ProgressBar, ProgressBarStyle, progress};
108
109#[cfg(feature = "label")]
110pub use label::{LabelBuilder, Label, LabelStyle, label};
111
112#[cfg(feature = "panel")]
113pub use panel::{PanelBuilder, Panel, PanelStyle, panel};
114
115#[cfg(feature = "separator")]
116pub use separator::{SeparatorBuilder, Separator, SeparatorStyle, Orientation, separator};
117
118#[cfg(feature = "checkbox")]
119pub use checkbox::{CheckboxBuilder, Checkbox, CheckboxState, CheckboxStyle};
120
121#[cfg(feature = "number_input")]
122pub use number_input::{NumberInputBuilder, NumberInput, NumberInputConfig};
123
124#[cfg(feature = "dropdown")]
125pub use dropdown::{DropdownBuilder, Dropdown, DropdownState, DropdownData};
126
127pub mod prelude {
129 #[doc(hidden)]
130 pub use crate::{
131 despawn_ui_entities, despawn_entities,
132 };
133
134 pub use crate::{Validated, ValidationState, ValidationRule};
136
137 #[cfg(feature = "button")]
138 pub use crate::{ButtonBuilder, ButtonStyle, ButtonSize};
139
140 #[cfg(feature = "slider")]
141 pub use crate::{SliderBuilder, ValueFormat};
142
143 #[cfg(feature = "form")]
144 pub use crate::{FormBuilder, FieldType};
145
146 #[cfg(feature = "dialog")]
147 pub use crate::{
148 DialogBuilder, DialogType, DialogButtonMarker,
149 ConfirmButton, CancelButton, SaveButton, DiscardButton,
151 OkButton, YesButton, NoButton,
152 };
153
154 #[cfg(feature = "text_input")]
155 pub use crate::{TextInputBuilder, InputFilter};
156
157 #[cfg(feature = "progress")]
158 pub use crate::{ProgressBarBuilder, ProgressBarStyle};
159
160 #[cfg(feature = "label")]
161 pub use crate::{LabelBuilder, LabelStyle};
162
163 #[cfg(feature = "panel")]
164 pub use crate::{PanelBuilder, PanelStyle};
165
166 #[cfg(feature = "separator")]
167 pub use crate::{SeparatorBuilder, Orientation};
168
169 #[cfg(feature = "checkbox")]
170 pub use crate::{CheckboxBuilder, CheckboxState, CheckboxStyle};
171
172 #[cfg(feature = "number_input")]
173 pub use crate::{NumberInputBuilder};
174
175 #[cfg(feature = "dropdown")]
176 pub use crate::{DropdownBuilder, DropdownState};
177}
178
179define_plugin!(UiBuilderPlugin {
180 plugins: [HoverPlugin, UIRelationshipsPlugin, ScrollViewPlugin, ValidationPlugin],
181 custom_init: |app: &mut App| {
182 if !app.is_plugin_added::<bevy::picking::input::PointerInputPlugin>() {
185 app.add_plugins(bevy::picking::DefaultPickingPlugins);
186 }
187 #[cfg(feature = "button")]
188 app.add_plugins(button::ButtonPlugin);
189
190 #[cfg(feature = "slider")]
191 app.add_plugins(slider::SliderPlugin);
192
193 #[cfg(feature = "dialog")]
194 app.add_plugins(dialog::DialogPlugin);
195
196 #[cfg(feature = "text_input")]
197 app.add_plugins(text_input::TextInputPlugin);
198
199 #[cfg(feature = "progress")]
200 app.add_plugins(progress::ProgressBarPlugin);
201
202 #[cfg(feature = "checkbox")]
203 app.add_plugins(checkbox::CheckboxPlugin);
204
205 #[cfg(feature = "dropdown")]
206 app.add_plugins(dropdown::DropdownPlugin);
207 }
208});