1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#![doc(
    html_logo_url = "https://freyaui.dev/logo.svg",
    html_favicon_url = "https://freyaui.dev/logo.svg"
)]
//! # Freya
//!
//! Build native & cross-platform GUI applications using 🦀 Rust.
//!
//! Powered by [🧬 Dioxus](https://dioxuslabs.com) and [🎨 Skia](https://skia.org/).
//!
//! - [Elements API reference](freya_elements::elements#structs)
//! - [Events API reference](freya_elements::elements#functions)
//! - [Elements guides](freya_elements::_docs)
//! - [Components](freya_components)
//! - [Hooks](freya_hooks)
//! - [Theming](self::_docs::theming)
//! - [Hot reload](self::_docs::hot_reload)
//! - [Testing](freya_testing)
//! - [Animating](freya_hooks::use_animation)
//! - [Devtools](self::_docs::devtools)
//!
//! ```rust,no_run
//! use freya::prelude::*;
//!
//! fn main(){
//!     launch(app);
//! }
//!
//! fn app() -> Element {
//!    let mut count = use_signal(|| 0);
//!
//!    rsx!(
//!        rect {
//!            height: "100%",
//!            width: "100%",
//!            background: "rgb(35, 35, 35)",
//!            color: "white",
//!            padding: "12",
//!            onclick: move |_| count += 1,
//!            label { "Click to increase -> {count}" }
//!        }
//!    )
//! }
//! ```
//!
//! ## Features flags
//!
//! - `devtools`: enables a side panel to inspect your App tree, styles and computed layout.
//! - `use_camera`: enables the `use_camera` hook.
//! - `log`: enables internal logs.

/// Freya docs.
#[cfg(doc)]
pub mod _docs;

/// Dioxus library.
pub use dioxus;
pub use dioxus_core;
#[cfg(doc)]
pub use freya_elements::_docs as elements_docs;

/// Launch your app.
pub mod launch;

/// Collection of basic components.
pub mod components {
    pub use freya_components::*;
}

/// Useful utilities.
pub mod hooks {
    pub use freya_hooks::*;
}

/// Common data structures and utils.
pub mod common {
    pub use freya_common::*;
}

/// Core APIs.
pub mod core {
    pub use freya_core::*;
}

/// Elements, attributes and events definitions.
pub use freya_elements::elements;
/// Events data.
pub use freya_elements::events;

/// Hot reload configuration.
pub mod hotreload {
    pub use freya_elements::elements::FreyaCtx;
}

pub use torin;

pub mod plugins;

/// Useful imports.
pub mod prelude {
    pub use dioxus_core::{
        prelude::*,
        {
            self,
        },
    };
    pub use dioxus_core_macro::*;
    pub use dioxus_hooks::*;
    pub use dioxus_hot_reload::{
        self,
        hot_reload_init,
        Config,
    };
    pub use dioxus_signals::*;
    pub use freya_components::*;
    pub use freya_core::prelude::PreferredTheme;
    pub use freya_elements::{
        elements as dioxus_elements,
        events::*,
    };
    pub use freya_hooks::*;
    pub use freya_node_state::{
        dynamic_bytes,
        static_bytes,
        CustomAttributeValues,
    };
    pub use freya_renderer::*;
    pub use torin::prelude::*;

    pub use crate::{
        launch::*,
        plugins::*,
    };
}