Skip to main content

bevy_feathers/controls/
dialog.rs

1use bevy_app::Propagate;
2use bevy_color::{Alpha, Srgba};
3use bevy_ecs::{
4    event::EntityEvent, hierarchy::Children, observer::On, reflect::ReflectComponent,
5    system::Commands,
6};
7use bevy_reflect::{prelude::ReflectDefault, Reflect};
8use bevy_scene::{bsn, bsn_list, on, Scene, SceneComponent, SceneList};
9use bevy_text::FontWeight;
10use bevy_ui::{
11    px, vh, vw, widget::Text, AlignItems, BorderRadius, BoxShadow, Display, FixedNode,
12    FlexDirection, GlobalZIndex, JustifyContent, Node, OverrideClip, PositionType, UiRect, Val,
13};
14use bevy_ui_widgets::{
15    Activate, Dialog, DialogDragHandle, ModalDialog, ModalDialogBarrier, RequestClose,
16};
17
18use crate::{
19    constants::{fonts, icons, size},
20    controls::{ButtonVariant, FeathersToolButton},
21    display::icon,
22    font_styles::InheritableFont,
23    theme::{
24        InheritableThemeTextColor, SurfaceLevel, ThemeBackgroundColor, ThemeBorderColor,
25        ThemeContext, ThemedText,
26    },
27    tokens,
28};
29
30/// Props used to construct a [`FeathersDialog`] scene.
31pub struct FeathersDialogProps {
32    /// Content of this dialog box.
33    pub contents: Box<dyn SceneList>,
34    /// How wide this dialog box should be.
35    pub width: Val,
36}
37
38impl Default for FeathersDialogProps {
39    fn default() -> Self {
40        Self {
41            contents: Box::new(bevy_scene::SceneListScope(())bsn_list! {}),
42            width: Val::Auto,
43        }
44    }
45}
46
47/// A modal dialog box
48#[derive(impl bevy_ecs::component::Component for FeathersDialog where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {
        required_components.register_required(||
                bevy_scene::SceneComponentInfo::new::<FeathersDialog>(false));
    }
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}
impl bevy_scene::SceneComponent for FeathersDialog where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    type Props = FeathersDialogProps;
    fn scene(props: Self::Props) -> impl bevy_scene::Scene {
        (Self::scene(props),
            <bevy_scene::InitTemplate<<FeathersDialog as
                    bevy_ecs::template::FromTemplate>::Template> as
                    ::core::default::Default>::default(),
            bevy_scene::template_value(bevy_scene::SceneComponentInfo::new::<FeathersDialog>(true)))
    }
}SceneComponent, #[automatically_derived]impl ::core::default::Default for FeathersDialog {
    #[inline]
    fn default() -> Self { FeathersDialog {} }
}Default, #[automatically_derived]impl ::core::clone::Clone for FeathersDialog {
    #[inline]
    fn clone(&self) -> Self { FeathersDialog }
}Clone, const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for FeathersDialog where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert(<bevy_reflect::ReflectFromPtr as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.insert(<bevy_reflect::ReflectFromReflect as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.register_type_data_with::<ReflectComponent, Self,
                    _>(());
                registration.register_type_data_with::<ReflectDefault, Self,
                    _>(());
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for FeathersDialog where  {
            #[inline(never)]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(#[inline(never)] ||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for FeathersDialog where  {
            fn type_path() -> &'static str {
                "bevy_feathers::controls::dialog::FeathersDialog"
            }
            fn short_type_path() -> &'static str { "FeathersDialog" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("FeathersDialog")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog")
            }
        }
        impl bevy_reflect::Reflect for FeathersDialog where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<FeathersDialog
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for FeathersDialog where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index { _ => ::core::option::Option::None, }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_len(&self) -> usize { 0usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                ->
                    ::core::result::Result<bevy_reflect::structs::DynamicStruct,
                    bevy_reflect::ReflectCloneError> {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                ::core::result::Result::Ok(dynamic)
            }
        }
        impl bevy_reflect::PartialReflect for FeathersDialog where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for FeathersDialog where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect)]
49#[scene(FeathersDialogProps)]
50#[reflect(Component, Clone, Default)]
51pub struct FeathersDialog;
52
53impl FeathersDialog {
54    /// Scene function for modal dialog.
55    pub fn scene(props: FeathersDialogProps) -> impl Scene {
56        bevy_scene::SceneScope({
        let _expr0 = { px(0) }.into();
        let _expr1 = { px(0) }.into();
        let _expr2 = { px(0) }.into();
        let _expr3 = { px(0) }.into();
        let _expr4 = { UiRect::axes(vw(0.05), vh(0.05)) }.into();
        let _expr5 = { BorderRadius::all(px(4)) }.into();
        let _expr6 = { UiRect::all(px(6.0)) }.into();
        let _expr7 = { UiRect::all(px(1.0)) }.into();
        let _expr8 = { px(6.0) }.into();
        let _expr9 = { props.width }.into();
        let _expr10 = { tokens::DIALOG_BG }.into();
        let _expr11 = { tokens::DIALOG_BORDER }.into();
        let _expr12 = { tokens::DIALOG_TEXT }.into();
        (bevy_scene::SceneFunction(move |_context, _scene|
                    {
                        let __value =
                            _scene.get_or_insert_from_template::<Node>(_context);
                        __value.display = Display::Flex.into();
                        __value.position_type = PositionType::Absolute.into();
                        __value.left = _expr0;
                        __value.right = _expr1;
                        __value.top = _expr2;
                        __value.bottom = _expr3;
                        __value.align_items = AlignItems::Center.into();
                        __value.justify_content = JustifyContent::Center.into();
                        __value.padding = _expr4;
                        let _ =
                            _scene.get_or_insert_from_template::<ModalDialogBarrier>(_context);
                        let _ =
                            _scene.get_or_insert_from_template::<FixedNode>(_context);
                        let _ =
                            _scene.get_or_insert_from_template::<OverrideClip>(_context);
                        let __value =
                            _scene.get_or_insert_from_template::<GlobalZIndex>(_context);
                        __value.0 = 99;
                    }),
            bevy_scene::RelatedScenes::<Children>::new(bevy_scene::EntityScene((bevy_scene::SceneFunction(move
                                |_context, _scene|
                                {
                                    let __value =
                                        _scene.get_or_insert_from_template::<Node>(_context);
                                    __value.display = Display::Flex.into();
                                    __value.flex_direction = FlexDirection::Column.into();
                                    __value.align_items = AlignItems::Stretch.into();
                                    __value.border_radius = _expr5;
                                    __value.padding = _expr6;
                                    __value.border = _expr7;
                                    __value.row_gap = _expr8;
                                    __value.width = _expr9;
                                    let _ =
                                        _scene.get_or_insert_from_template::<ModalDialog>(_context);
                                    let __value =
                                        _scene.get_or_insert_from_template::<ThemeBackgroundColor>(_context);
                                    __value.0 = _expr10;
                                    let __value =
                                        _scene.get_or_insert_from_template::<ThemeBorderColor>(_context);
                                    __value.0 = _expr11;
                                    let __value =
                                        _scene.get_or_insert_from_template::<InheritableThemeTextColor>(_context);
                                    __value.0 = _expr12;
                                    _scene.insert_template(<BoxShadow as
                                                bevy_ecs::template::FromTemplate>::Template::new(Srgba::BLACK.with_alpha(0.9).into(),
                                            px(0), px(0), px(1), px(4)));
                                }),
                        bevy_scene::RelatedScenes::<Children>::new(props.contents)))))
    });bsn! {
57            Node {
58                display: Display::Flex,
59                position_type: PositionType::Absolute,
60                left: px(0),
61                right: px(0),
62                top: px(0),
63                bottom: px(0),
64                align_items: AlignItems::Center,
65                justify_content: JustifyContent::Center,
66                padding: UiRect::axes(vw(0.05), vh(0.05)),
67            }
68            ModalDialogBarrier
69            FixedNode
70            OverrideClip
71            GlobalZIndex(99) // One less than menu layer
72            Children [
73                Node {
74                    display: Display::Flex,
75                    flex_direction: FlexDirection::Column,
76                    align_items: AlignItems::Stretch,
77                    border_radius: BorderRadius::all(px(4)),
78                    padding: UiRect::all(px(6.0)),
79                    border: UiRect::all(px(1.0)),
80                    row_gap: px(6.0),
81                    width: {props.width},
82                }
83                ModalDialog
84                ThemeBackgroundColor(tokens::DIALOG_BG)
85                ThemeBorderColor(tokens::DIALOG_BORDER)
86                InheritableThemeTextColor(tokens::DIALOG_TEXT)
87                BoxShadow::new(
88                    Srgba::BLACK.with_alpha(0.9).into(),
89                    px(0),
90                    px(0),
91                    px(1),
92                    px(4),
93                )
94                Children [
95                    {props.contents}
96                ]
97            ]
98        }
99    }
100}
101
102/// Props used to construct a [`FeathersFloatingDialog`] scene.
103pub struct FeathersFloatingDialogProps {
104    /// Title shown in the window's drag bar.
105    pub title: String,
106    /// Body content of the window.
107    pub contents: Box<dyn SceneList>,
108    /// How wide the window should be.
109    pub width: Val,
110    /// Initial left offset (the window is absolutely positioned).
111    pub left: Val,
112    /// Initial top offset.
113    pub top: Val,
114}
115
116impl Default for FeathersFloatingDialogProps {
117    fn default() -> Self {
118        Self {
119            title: String::new(),
120            contents: Box::new(bevy_scene::SceneListScope(())bsn_list! {}),
121            width: Val::Auto,
122            left: px(120),
123            top: px(120),
124        }
125    }
126}
127
128/// A non-modal, movable floating dialog with a draggable title bar and a close button.
129#[derive(impl bevy_ecs::component::Component for FeathersFloatingDialog where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {
        required_components.register_required(||
                bevy_scene::SceneComponentInfo::new::<FeathersFloatingDialog>(false));
    }
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}
impl bevy_scene::SceneComponent for FeathersFloatingDialog where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    type Props = FeathersFloatingDialogProps;
    fn scene(props: Self::Props) -> impl bevy_scene::Scene {
        (Self::scene(props),
            <bevy_scene::InitTemplate<<FeathersFloatingDialog as
                    bevy_ecs::template::FromTemplate>::Template> as
                    ::core::default::Default>::default(),
            bevy_scene::template_value(bevy_scene::SceneComponentInfo::new::<FeathersFloatingDialog>(true)))
    }
}SceneComponent, #[automatically_derived]impl ::core::default::Default for
    FeathersFloatingDialog {
    #[inline]
    fn default() -> Self { FeathersFloatingDialog {} }
}Default, #[automatically_derived]impl ::core::clone::Clone for FeathersFloatingDialog {
    #[inline]
    fn clone(&self) -> Self { FeathersFloatingDialog }
}Clone, const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for FeathersFloatingDialog
            where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert(<bevy_reflect::ReflectFromPtr as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.insert(<bevy_reflect::ReflectFromReflect as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.register_type_data_with::<ReflectComponent, Self,
                    _>(());
                registration.register_type_data_with::<ReflectDefault, Self,
                    _>(());
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for FeathersFloatingDialog where  {
            #[inline(never)]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(#[inline(never)] ||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for FeathersFloatingDialog where  {
            fn type_path() -> &'static str {
                "bevy_feathers::controls::dialog::FeathersFloatingDialog"
            }
            fn short_type_path() -> &'static str { "FeathersFloatingDialog" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("FeathersFloatingDialog")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog")
            }
        }
        impl bevy_reflect::Reflect for FeathersFloatingDialog where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<FeathersFloatingDialog
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for FeathersFloatingDialog where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index { _ => ::core::option::Option::None, }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_len(&self) -> usize { 0usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                ->
                    ::core::result::Result<bevy_reflect::structs::DynamicStruct,
                    bevy_reflect::ReflectCloneError> {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                ::core::result::Result::Ok(dynamic)
            }
        }
        impl bevy_reflect::PartialReflect for FeathersFloatingDialog where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for FeathersFloatingDialog where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect)]
130#[scene(FeathersFloatingDialogProps)]
131#[reflect(Component, Clone, Default)]
132pub struct FeathersFloatingDialog;
133
134impl FeathersFloatingDialog {
135    /// Scene function for a floating window.
136    pub fn scene(props: FeathersFloatingDialogProps) -> impl Scene {
137        bevy_scene::SceneScope({
        let _expr0 = { props.left }.into();
        let _expr1 = { props.top }.into();
        let _expr2 = { BorderRadius::all(px(4)) }.into();
        let _expr3 = { UiRect::all(px(1.0)) }.into();
        let _expr4 = { props.width }.into();
        let _expr5 = { tokens::DIALOG_BG }.into();
        let _expr6 = { tokens::DIALOG_BORDER }.into();
        let _expr7 = { tokens::DIALOG_TEXT }.into();
        let _expr8 = { UiRect::all(px(6.0)) }.into();
        let _expr9 = { tokens::DIALOG_HEADER_TEXT }.into();
        let _expr10 = { tokens::DIALOG_HEADER_BG }.into();
        let _expr11 = { fonts::REGULAR }.into();
        let _expr12 = { size::HEADER_FONT }.into();
        let _expr13 = { props.title }.into();
        (bevy_scene::SceneFunction(move |_context, _scene|
                    {
                        let __value =
                            _scene.get_or_insert_from_template::<Node>(_context);
                        __value.display = Display::Flex.into();
                        __value.flex_direction = FlexDirection::Column.into();
                        __value.align_items = AlignItems::Stretch.into();
                        __value.position_type = PositionType::Absolute.into();
                        __value.left = _expr0;
                        __value.top = _expr1;
                        __value.border_radius = _expr2;
                        __value.border = _expr3;
                        __value.width = _expr4;
                        let _ =
                            _scene.get_or_insert_from_template::<Dialog>(_context);
                        let __value =
                            _scene.get_or_insert_from_template::<ThemeBackgroundColor>(_context);
                        __value.0 = _expr5;
                        let __value =
                            _scene.get_or_insert_from_template::<ThemeBorderColor>(_context);
                        __value.0 = _expr6;
                        let __value =
                            _scene.get_or_insert_from_template::<InheritableThemeTextColor>(_context);
                        __value.0 = _expr7;
                        _scene.insert_template(<BoxShadow as
                                    bevy_ecs::template::FromTemplate>::Template::new(Srgba::BLACK.with_alpha(0.9).into(),
                                px(0), px(0), px(1), px(4)));
                        _scene.insert_template(on(|close: On<RequestClose>,
                                    mut commands: Commands|
                                    { commands.entity(close.event_target()).despawn(); }));
                    }),
            bevy_scene::RelatedScenes::<Children>::new((bevy_scene::EntityScene((bevy_scene::SceneFunction(move
                                    |_context, _scene|
                                    {
                                        let __value =
                                            _scene.get_or_insert_from_template::<Node>(_context);
                                        __value.display = Display::Flex.into();
                                        __value.flex_direction = FlexDirection::Row.into();
                                        __value.align_items = AlignItems::Center.into();
                                        __value.justify_content =
                                            JustifyContent::SpaceBetween.into();
                                        __value.padding = _expr8;
                                        let _ =
                                            _scene.get_or_insert_from_template::<DialogDragHandle>(_context);
                                        let __value =
                                            _scene.get_or_insert_from_template::<InheritableThemeTextColor>(_context);
                                        __value.0 = _expr9;
                                        let __value =
                                            _scene.get_or_insert_from_template::<ThemeBackgroundColor>(_context);
                                        __value.0 = _expr10;
                                        let __value =
                                            _scene.get_or_insert_from_template::<Propagate<ThemeContext>>(_context);
                                        bevy_scene::macro_utils::touch_type::<ThemeContext>();
                                        __value.0.0 = SurfaceLevel::Higher.into();
                                        let __value =
                                            _scene.get_or_insert_from_template::<InheritableFont>(_context);
                                        __value.font = _expr11;
                                        __value.font_size = _expr12;
                                        __value.weight = FontWeight::BOLD.into();
                                    }),
                            bevy_scene::RelatedScenes::<Children>::new((bevy_scene::EntityScene(bevy_scene::SceneFunction(move
                                                |_context, _scene|
                                                {
                                                    let __value =
                                                        _scene.get_or_insert_from_template::<Text>(_context);
                                                    __value.0 = _expr13;
                                                    let _ =
                                                        _scene.get_or_insert_from_template::<ThemedText>(_context);
                                                })),
                                    bevy_scene::EntityScene({
                                            let mut __props =
                                                <<FeathersDialogClose as bevy_scene::SceneComponent>::Props
                                                        as ::core::default::Default>::default();
                                            let __props_ref = &mut __props;
                                            bevy_scene::macro_utils::touch_type::<FeathersDialogClose>();
                                            <FeathersDialogClose as
                                                    bevy_scene::SceneComponent>::scene(__props)
                                        }))))),
                    bevy_scene::EntityScene(({
                                let mut __props =
                                    <<FeathersDialogBody as bevy_scene::SceneComponent>::Props
                                            as ::core::default::Default>::default();
                                let __props_ref = &mut __props;
                                bevy_scene::macro_utils::touch_type::<FeathersDialogBody>();
                                <FeathersDialogBody as
                                        bevy_scene::SceneComponent>::scene(__props)
                            },
                            bevy_scene::RelatedScenes::<Children>::new(props.contents))))))
    });bsn! {
138            Node {
139                display: Display::Flex,
140                flex_direction: FlexDirection::Column,
141                align_items: AlignItems::Stretch,
142                position_type: PositionType::Absolute,
143                left: {props.left},
144                top: {props.top},
145                border_radius: BorderRadius::all(px(4)),
146                border: UiRect::all(px(1.0)),
147                width: {props.width},
148            }
149            Dialog
150            ThemeBackgroundColor(tokens::DIALOG_BG)
151            ThemeBorderColor(tokens::DIALOG_BORDER)
152            InheritableThemeTextColor(tokens::DIALOG_TEXT)
153            BoxShadow::new(
154                Srgba::BLACK.with_alpha(0.9).into(),
155                px(0),
156                px(0),
157                px(1),
158                px(4),
159            )
160            // Closing despawns the window.
161            on(|close: On<RequestClose>, mut commands: Commands| {
162                commands.entity(close.event_target()).despawn();
163            })
164            Children [
165                // Title bar; dragging it moves the window.
166                Node {
167                    display: Display::Flex,
168                    flex_direction: FlexDirection::Row,
169                    align_items: AlignItems::Center,
170                    justify_content: JustifyContent::SpaceBetween,
171                    padding: UiRect::all(px(6.0)),
172                }
173                DialogDragHandle
174                InheritableThemeTextColor(tokens::DIALOG_HEADER_TEXT)
175                ThemeBackgroundColor(tokens::DIALOG_HEADER_BG)
176                Propagate::<ThemeContext>(ThemeContext(SurfaceLevel::Higher))
177                InheritableFont {
178                    font: fonts::REGULAR,
179                    font_size: size::HEADER_FONT,
180                    weight: FontWeight::BOLD,
181                }
182                Children [
183                    Text({props.title}) ThemedText
184                    --
185                    @FeathersDialogClose
186                ]
187                --
188                @FeathersDialogBody
189                Children [
190                    {props.contents}
191                ]
192            ]
193        }
194    }
195}
196
197/// Header section for a modal dialog
198#[derive(impl bevy_ecs::component::Component for FeathersDialogHeader where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {
        required_components.register_required(||
                bevy_scene::SceneComponentInfo::new::<FeathersDialogHeader>(false));
    }
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}
impl bevy_scene::SceneComponent for FeathersDialogHeader where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    type Props = ();
    fn scene(props: Self::Props) -> impl bevy_scene::Scene {
        (Self::scene(),
            <bevy_scene::InitTemplate<<FeathersDialogHeader as
                    bevy_ecs::template::FromTemplate>::Template> as
                    ::core::default::Default>::default(),
            bevy_scene::template_value(bevy_scene::SceneComponentInfo::new::<FeathersDialogHeader>(true)))
    }
}SceneComponent, #[automatically_derived]impl ::core::default::Default for FeathersDialogHeader
    {
    #[inline]
    fn default() -> Self { FeathersDialogHeader {} }
}Default, #[automatically_derived]impl ::core::clone::Clone for FeathersDialogHeader {
    #[inline]
    fn clone(&self) -> Self { FeathersDialogHeader }
}Clone, const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for FeathersDialogHeader where
            {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert(<bevy_reflect::ReflectFromPtr as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.insert(<bevy_reflect::ReflectFromReflect as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.register_type_data_with::<ReflectComponent, Self,
                    _>(());
                registration.register_type_data_with::<ReflectDefault, Self,
                    _>(());
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for FeathersDialogHeader where  {
            #[inline(never)]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(#[inline(never)] ||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for FeathersDialogHeader where  {
            fn type_path() -> &'static str {
                "bevy_feathers::controls::dialog::FeathersDialogHeader"
            }
            fn short_type_path() -> &'static str { "FeathersDialogHeader" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("FeathersDialogHeader")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog")
            }
        }
        impl bevy_reflect::Reflect for FeathersDialogHeader where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<FeathersDialogHeader
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for FeathersDialogHeader where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index { _ => ::core::option::Option::None, }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_len(&self) -> usize { 0usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                ->
                    ::core::result::Result<bevy_reflect::structs::DynamicStruct,
                    bevy_reflect::ReflectCloneError> {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                ::core::result::Result::Ok(dynamic)
            }
        }
        impl bevy_reflect::PartialReflect for FeathersDialogHeader where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for FeathersDialogHeader where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect)]
199#[reflect(Component, Clone, Default)]
200pub struct FeathersDialogHeader;
201
202impl FeathersDialogHeader {
203    /// Scene function for modal dialog header.
204    pub fn scene() -> impl Scene {
205        bevy_scene::SceneScope({
        let _expr0 = { UiRect::all(px(6.0)) }.into();
        let _expr1 = { tokens::DIALOG_HEADER_BG }.into();
        let _expr2 = { fonts::REGULAR }.into();
        let _expr3 = { size::HEADER_FONT }.into();
        bevy_scene::SceneFunction(move |_context, _scene|
                {
                    let __value =
                        _scene.get_or_insert_from_template::<Node>(_context);
                    __value.display = Display::Flex.into();
                    __value.flex_direction = FlexDirection::Row.into();
                    __value.align_items = AlignItems::Center.into();
                    __value.justify_content =
                        JustifyContent::SpaceBetween.into();
                    __value.padding = _expr0;
                    let __value =
                        _scene.get_or_insert_from_template::<Propagate<ThemeContext>>(_context);
                    bevy_scene::macro_utils::touch_type::<ThemeContext>();
                    __value.0.0 = SurfaceLevel::Higher.into();
                    let __value =
                        _scene.get_or_insert_from_template::<ThemeBackgroundColor>(_context);
                    __value.0 = _expr1;
                    let __value =
                        _scene.get_or_insert_from_template::<InheritableFont>(_context);
                    __value.font = _expr2;
                    __value.font_size = _expr3;
                    __value.weight = FontWeight::BOLD.into();
                })
    });bsn! {
206            Node {
207                display: Display::Flex,
208                flex_direction: FlexDirection::Row,
209                align_items: AlignItems::Center,
210                justify_content: JustifyContent::SpaceBetween,
211                padding: UiRect::all(px(6.0)),
212            }
213            Propagate::<ThemeContext>(ThemeContext(SurfaceLevel::Higher))
214            ThemeBackgroundColor(tokens::DIALOG_HEADER_BG)
215            InheritableFont {
216                font: fonts::REGULAR,
217                font_size: size::HEADER_FONT,
218                weight: FontWeight::BOLD,
219            }
220        }
221    }
222}
223
224/// Close button for dialog header
225#[derive(impl bevy_ecs::component::Component for FeathersDialogClose where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {
        required_components.register_required(||
                bevy_scene::SceneComponentInfo::new::<FeathersDialogClose>(false));
    }
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}
impl bevy_scene::SceneComponent for FeathersDialogClose where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    type Props = ();
    fn scene(props: Self::Props) -> impl bevy_scene::Scene {
        (Self::scene(),
            <bevy_scene::InitTemplate<<FeathersDialogClose as
                    bevy_ecs::template::FromTemplate>::Template> as
                    ::core::default::Default>::default(),
            bevy_scene::template_value(bevy_scene::SceneComponentInfo::new::<FeathersDialogClose>(true)))
    }
}SceneComponent, #[automatically_derived]impl ::core::default::Default for FeathersDialogClose
    {
    #[inline]
    fn default() -> Self { FeathersDialogClose {} }
}Default, #[automatically_derived]impl ::core::clone::Clone for FeathersDialogClose {
    #[inline]
    fn clone(&self) -> Self { FeathersDialogClose }
}Clone, const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for FeathersDialogClose where
            {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert(<bevy_reflect::ReflectFromPtr as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.insert(<bevy_reflect::ReflectFromReflect as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.register_type_data_with::<ReflectComponent, Self,
                    _>(());
                registration.register_type_data_with::<ReflectDefault, Self,
                    _>(());
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for FeathersDialogClose where  {
            #[inline(never)]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(#[inline(never)] ||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for FeathersDialogClose where  {
            fn type_path() -> &'static str {
                "bevy_feathers::controls::dialog::FeathersDialogClose"
            }
            fn short_type_path() -> &'static str { "FeathersDialogClose" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("FeathersDialogClose")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog")
            }
        }
        impl bevy_reflect::Reflect for FeathersDialogClose where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<FeathersDialogClose
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for FeathersDialogClose where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index { _ => ::core::option::Option::None, }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_len(&self) -> usize { 0usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                ->
                    ::core::result::Result<bevy_reflect::structs::DynamicStruct,
                    bevy_reflect::ReflectCloneError> {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                ::core::result::Result::Ok(dynamic)
            }
        }
        impl bevy_reflect::PartialReflect for FeathersDialogClose where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for FeathersDialogClose where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect)]
226#[reflect(Component, Clone, Default)]
227pub struct FeathersDialogClose;
228
229impl FeathersDialogClose {
230    /// Scene function for dialog close button.
231    pub fn scene() -> impl Scene {
232        bevy_scene::SceneScope({
        let _expr0 =
            {
                    bevy_scene::SceneScope(bevy_scene::SceneScope(icon(icons::X)))
                }.into();
        ({
                let mut __props =
                    <<FeathersToolButton as bevy_scene::SceneComponent>::Props
                            as ::core::default::Default>::default();
                let __props_ref = &mut __props;
                bevy_scene::macro_utils::touch_type::<FeathersToolButton>();
                __props.variant = ButtonVariant::Plain.into();
                __props.caption = _expr0;
                <FeathersToolButton as
                        bevy_scene::SceneComponent>::scene(__props)
            },
            bevy_scene::SceneFunction(move |_context, _scene|
                    {
                        _scene.insert_template(on(|activate: On<Activate>,
                                    mut commands: Commands|
                                    {
                                        commands.trigger(RequestClose {
                                                source: activate.event_target(),
                                            });
                                    }));
                    }))
    });bsn! {
233            @FeathersToolButton {
234                @variant: ButtonVariant::Plain,
235                @caption: bsn! { @icon(icons::X) }
236            }
237            on(|activate: On<Activate>, mut commands: Commands| {
238                commands.trigger(RequestClose { source: activate.event_target() });
239            })
240        }
241    }
242}
243
244/// Central body section for a modal dialog
245#[derive(impl bevy_ecs::component::Component for FeathersDialogBody where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {
        required_components.register_required(||
                bevy_scene::SceneComponentInfo::new::<FeathersDialogBody>(false));
    }
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}
impl bevy_scene::SceneComponent for FeathersDialogBody where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    type Props = ();
    fn scene(props: Self::Props) -> impl bevy_scene::Scene {
        (Self::scene(),
            <bevy_scene::InitTemplate<<FeathersDialogBody as
                    bevy_ecs::template::FromTemplate>::Template> as
                    ::core::default::Default>::default(),
            bevy_scene::template_value(bevy_scene::SceneComponentInfo::new::<FeathersDialogBody>(true)))
    }
}SceneComponent, #[automatically_derived]impl ::core::default::Default for FeathersDialogBody {
    #[inline]
    fn default() -> Self { FeathersDialogBody {} }
}Default, #[automatically_derived]impl ::core::clone::Clone for FeathersDialogBody {
    #[inline]
    fn clone(&self) -> Self { FeathersDialogBody }
}Clone, const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for FeathersDialogBody where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert(<bevy_reflect::ReflectFromPtr as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.insert(<bevy_reflect::ReflectFromReflect as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.register_type_data_with::<ReflectComponent, Self,
                    _>(());
                registration.register_type_data_with::<ReflectDefault, Self,
                    _>(());
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for FeathersDialogBody where  {
            #[inline(never)]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(#[inline(never)] ||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for FeathersDialogBody where  {
            fn type_path() -> &'static str {
                "bevy_feathers::controls::dialog::FeathersDialogBody"
            }
            fn short_type_path() -> &'static str { "FeathersDialogBody" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("FeathersDialogBody")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog")
            }
        }
        impl bevy_reflect::Reflect for FeathersDialogBody where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<FeathersDialogBody
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for FeathersDialogBody where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index { _ => ::core::option::Option::None, }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_len(&self) -> usize { 0usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                ->
                    ::core::result::Result<bevy_reflect::structs::DynamicStruct,
                    bevy_reflect::ReflectCloneError> {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                ::core::result::Result::Ok(dynamic)
            }
        }
        impl bevy_reflect::PartialReflect for FeathersDialogBody where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for FeathersDialogBody where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect)]
246#[reflect(Component, Clone, Default)]
247pub struct FeathersDialogBody;
248
249impl FeathersDialogBody {
250    /// Scene function for modal dialog body.
251    pub fn scene() -> impl Scene {
252        bevy_scene::SceneScope({
        let _expr0 = { UiRect::all(px(6.0)) }.into();
        let _expr1 = { fonts::REGULAR }.into();
        let _expr2 = { size::MEDIUM_FONT }.into();
        bevy_scene::SceneFunction(move |_context, _scene|
                {
                    let __value =
                        _scene.get_or_insert_from_template::<Node>(_context);
                    __value.display = Display::Flex.into();
                    __value.flex_direction = FlexDirection::Column.into();
                    __value.align_items = AlignItems::Stretch.into();
                    __value.padding = _expr0;
                    let __value =
                        _scene.get_or_insert_from_template::<Propagate<ThemeContext>>(_context);
                    bevy_scene::macro_utils::touch_type::<ThemeContext>();
                    __value.0.0 = SurfaceLevel::Floating.into();
                    let __value =
                        _scene.get_or_insert_from_template::<InheritableFont>(_context);
                    __value.font = _expr1;
                    __value.font_size = _expr2;
                    __value.weight = FontWeight::NORMAL.into();
                })
    });bsn! {
253            Node {
254                display: Display::Flex,
255                flex_direction: FlexDirection::Column,
256                align_items: AlignItems::Stretch,
257                padding: UiRect::all(px(6.0)),
258            }
259            Propagate::<ThemeContext>(ThemeContext(SurfaceLevel::Floating))
260            InheritableFont {
261                font: fonts::REGULAR,
262                font_size: size::MEDIUM_FONT,
263                weight: FontWeight::NORMAL,
264            }
265        }
266    }
267}
268
269/// Footer section for a modal dialog
270#[derive(impl bevy_ecs::component::Component for FeathersDialogFooter where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {
        required_components.register_required(||
                bevy_scene::SceneComponentInfo::new::<FeathersDialogFooter>(false));
    }
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}
impl bevy_scene::SceneComponent for FeathersDialogFooter where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    type Props = ();
    fn scene(props: Self::Props) -> impl bevy_scene::Scene {
        (Self::scene(),
            <bevy_scene::InitTemplate<<FeathersDialogFooter as
                    bevy_ecs::template::FromTemplate>::Template> as
                    ::core::default::Default>::default(),
            bevy_scene::template_value(bevy_scene::SceneComponentInfo::new::<FeathersDialogFooter>(true)))
    }
}SceneComponent, #[automatically_derived]impl ::core::default::Default for FeathersDialogFooter
    {
    #[inline]
    fn default() -> Self { FeathersDialogFooter {} }
}Default, #[automatically_derived]impl ::core::clone::Clone for FeathersDialogFooter {
    #[inline]
    fn clone(&self) -> Self { FeathersDialogFooter }
}Clone, const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for FeathersDialogFooter where
            {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert(<bevy_reflect::ReflectFromPtr as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.insert(<bevy_reflect::ReflectFromReflect as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.register_type_data_with::<ReflectComponent, Self,
                    _>(());
                registration.register_type_data_with::<ReflectDefault, Self,
                    _>(());
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for FeathersDialogFooter where  {
            #[inline(never)]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(#[inline(never)] ||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for FeathersDialogFooter where  {
            fn type_path() -> &'static str {
                "bevy_feathers::controls::dialog::FeathersDialogFooter"
            }
            fn short_type_path() -> &'static str { "FeathersDialogFooter" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("FeathersDialogFooter")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_feathers::controls::dialog")
            }
        }
        impl bevy_reflect::Reflect for FeathersDialogFooter where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<FeathersDialogFooter
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for FeathersDialogFooter where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index { _ => ::core::option::Option::None, }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_len(&self) -> usize { 0usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                ->
                    ::core::result::Result<bevy_reflect::structs::DynamicStruct,
                    bevy_reflect::ReflectCloneError> {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                ::core::result::Result::Ok(dynamic)
            }
        }
        impl bevy_reflect::PartialReflect for FeathersDialogFooter where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for FeathersDialogFooter where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let mut __this =
                        <Self as ::core::default::Default>::default();
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect)]
271#[reflect(Component, Clone, Default)]
272pub struct FeathersDialogFooter;
273
274impl FeathersDialogFooter {
275    /// Scene function for modal dialog footer.
276    pub fn scene() -> impl Scene {
277        bevy_scene::SceneScope({
        let _expr0 = { px(6.0) }.into();
        let _expr1 = { UiRect::all(px(6.0)) }.into();
        let _expr2 = { fonts::REGULAR }.into();
        let _expr3 = { size::MEDIUM_FONT }.into();
        bevy_scene::SceneFunction(move |_context, _scene|
                {
                    let __value =
                        _scene.get_or_insert_from_template::<Node>(_context);
                    __value.display = Display::Flex.into();
                    __value.flex_direction = FlexDirection::Row.into();
                    __value.align_items = AlignItems::Center.into();
                    __value.justify_content = JustifyContent::FlexEnd.into();
                    __value.column_gap = _expr0;
                    __value.padding = _expr1;
                    let __value =
                        _scene.get_or_insert_from_template::<Propagate<ThemeContext>>(_context);
                    bevy_scene::macro_utils::touch_type::<ThemeContext>();
                    __value.0.0 = SurfaceLevel::Floating.into();
                    let __value =
                        _scene.get_or_insert_from_template::<InheritableFont>(_context);
                    __value.font = _expr2;
                    __value.font_size = _expr3;
                    __value.weight = FontWeight::NORMAL.into();
                })
    });bsn! {
278            Node {
279                display: Display::Flex,
280                flex_direction: FlexDirection::Row,
281                align_items: AlignItems::Center,
282                justify_content: JustifyContent::FlexEnd,
283                column_gap: px(6.0),
284                padding: UiRect::all(px(6.0)),
285            }
286            Propagate::<ThemeContext>(ThemeContext(SurfaceLevel::Floating))
287            InheritableFont {
288                font: fonts::REGULAR,
289                font_size: size::MEDIUM_FONT,
290                weight: FontWeight::NORMAL,
291            }
292        }
293    }
294}