You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: button.rs
    path of file: ./repos/azul/azul-dll/src/widgets
    
    the code of the file until where you have to start completion: use azul_desktop::{
    css::*,
    css::AzString,
    dom::{
        TabIndex, Dom, IdOrClass, IdOrClass::Class, NodeDataInlineCssPropertyVec, IdOrClassVec,
        NodeDataInlineCssProperty, NodeDataInlineCssProperty::{Normal, Active, Hover, Focus},
    },
    resources::{ImageRef, OptionImageRef},
    callbacks::{RefAny, Update, CallbackInfo},
};
use std::vec::Vec;

#[repr(C)]
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct Button {
    /// Content (image or text) of this button, centered by default
    pub label: AzString,
    /// Optional image that is displayed next to the label
    pub image: OptionImageRef,
    /// Style for this button container
    pub container_style: NodeDataInlineCssPropertyVec,
    /// Style of the label
    pub label_style: NodeDataInlineCssPropertyVec,
   
    
    pub fn dom(self) -> Dom {

        use azul_desktop::dom::{
            EventFilter, HoverEventFilter,
            CallbackData,
        };
        use azul_desktop::callbacks::Callback;

        let callbacks = match self.on_click.into_option() {
            Some(ButtonOnClick { data, callback }) => vec![
                CallbackData {
                    event: EventFilter::Hover(HoverEventFilter::MouseUp),
                    callback: Callback { cb: callback.cb },
                    data,
                }
            ],
            None => Vec::new(),
        };

        static CONTAINER_CLASS: &[IdOrClass] = &[Class(AzString::from_const_str("__azul-native-button-container"))];
        static LABEL_CLASS: &[IdOrClass] = &[Class(AzString::from_const_str("__azul-native-button-content"))];

        Dom::div()
        .with_ids_and_classes(IdOrClassVec::from_const_slice(CONTAINER_CLASS))
        .with_inline_css_props(self.container_style)
        .with_callbacks(callbacks.into())
        .with_tab_index(TabIndex::Auto)
        .with_children(vec![
            Dom::text(self.label)
            .with_ids_and_classes(IdOrClassVec::from_const_slice(LABEL_CLASS))
            .with_inline_css_props(self.label_style)
        ].into())
    }