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
135
136
137
138
139
140
141
142
143
144
145
146
//! # Aura UI
//!
//! Interfaces nativas aceleradas por GPU para **macOS, Windows, Linux, Android e iOS** con un solo código:
//! estilo encadenado al estilo Tailwind, componentes al estilo shadcn, sombras y animaciones.
//!
//! Eficiente por defecto: el bucle duerme cuando no pasa nada (CPU en reposo ≈ 0), pinta solo lo que se ve, usa
//! la GPU integrada de bajo consumo con un único frame en cola y suelta cachés al pasar a segundo plano o cuando
//! el sistema avisa de poca memoria.
//!
//! ```no_run
//! use aura_ui::prelude::*;
//!
//! fn main() {
//! run_app("Contador", |ui| {
//! let clics = ui.state("clics", 0u32);
//! ui.page().center().gap_4()
//! .child(ui.card().p_6().child(format!("Clics: {}", clics.get())))
//! .child(ui.button("Sumar").on_click(clics.update(|n| *n += 1)))
//! });
//! }
//! ```
//!
//! La app es una closure; el estado vive en `ui.state("clave", valor)` y los manejadores se crean con
//! `state.update(...)`, `state.set(...)` o `state.toggle()`. No hay `impl` ni `AppOptions` en el camino
//! normal. Los componentes y recetas usan los tokens del tema, así que la interfaz se ve coherente sin elegir
//! colores a mano.
//!
//! ## Licencia
//!
//! Doble licencia: **AGPL-3.0** (gratis; tu app también debe publicarse bajo AGPL-3.0) o la
//! **licencia comercial** de Aura UI para apps cerradas, con regalías del 10% de los ingresos. Ver
//! `LICENSE-COMMERCIAL.md`.
/// Agentes de IA: proveedores HTTP, ACP y MCP, sesión OAuth y almacén de claves. Feature `ai` (activa por defecto).
/// Ventana, bucle de eventos, gestos táctiles y ciclo de vida en escritorio y móvil.
/// Núcleo: entidades, tareas, temporizadores, geometría, color, animaciones y capa de sistema.
/// Renderizador sobre wgpu (Metal, Vulkan, DirectX 12, OpenGL ES) con respaldo por CPU.
/// Elementos, estilo y recetas (`.page()`, `.card()`…), layout, foco, teclado, temas y accesibilidad.
/// Componentes listos: botones, insignias, pestañas, entradas, menús, selectores, avisos y estructura de pantalla.
pub use ;
/// Todo lo necesario para escribir una app con un solo `use aura_ui::prelude::*;`.
/// Acepta cierres que devuelven algo (`window.set_root(..)` devuelve el handle) y lo descarta.
+ 'static
/// Punto de entrada multiplataforma. Genera `pub fn main()` en escritorio e iOS y `android_main` en Android
/// (la crate se compila como `cdylib`), así que el mismo código sirve para todos los sistemas.
///
/// Recibe un cierre que prepara la ventana (keymap, entidades compartidas…) y monta la vista raíz. Para una app
/// normal usa [`run_app`]; este macro queda para el arranque avanzado y para Android.
///
/// ```ignore
/// aura_ui::main!(AppOptions::new("Mi app"), |window| window.set_root(MiVista));
/// ```
/// Columna con hijos, sin repetir `.child(...)`: `column![titulo, boton]`.
///
/// Devuelve un `Div` con `flex_col`; se encadena como cualquier elemento (`.gap_4()`, `.p_6()`…).
/// Fila con hijos, sin repetir `.child(...)`: `row![icono, texto]`.
/// Registra una vista escrita como función, sin escribir `impl`.
///
/// Es el puente para las apps que ya tienen estado en entidades (`Handle`/`ViewContext`): se mueve el cuerpo del
/// antiguo `impl` a una función y se registra con esta macro. La app no escribe `impl`; la API de closure sigue
/// siendo la recomendada para apps nuevas.
///
/// ```ignore
/// fn panel_view(this: &mut Panel, cx: &mut ViewContext<Panel>) -> AnyElement { ... }
/// aura_ui::component!(Panel, panel_view);
/// ```