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
//! # snora
//!
//! The iced engine for the Snora GUI framework.
//!
//! This crate binds [`snora_core`] vocabulary to iced. It exposes a single
//! entry point, [`render`], plus a small set of direction-aware widget
//! helpers and a toast-lifecycle utility.
//!
//! # Layering
//!
//! ```text
//! Your application
//! │
//! ▼
//! snora::render(AppLayout<Element, Message>) -> Element
//! │
//! ▼ consumes vocabulary from …
//! snora_core (Toast, Dialog, SheetHeight, LayoutDirection, Icon, …)
//! ```
//!
//! `snora-core` owns the **vocabulary** (what choices exist); `snora`
//! owns the **engine** (how those choices become pixels). The split is
//! intentionally keyed on iced-dependence: snora-core has none, so an
//! alternative engine (test double, WGPU frontend, HTML frontend) can be
//! built against the same vocabulary without touching iced.
//!
//! # A minimal application view
//!
//! ```ignore
//! use iced::{Element, widget::text};
//! use snora::{AppLayout, render, LayoutDirection};
//!
//! fn view(state: &MyState) -> Element<'_, Message> {
//! let body: Element<'_, Message> = text("Hello, snora!").into();
//!
//! let layout = AppLayout::new(body)
//! .direction(LayoutDirection::Ltr);
//!
//! render(layout)
//! }
//! ```
//!
//! See the `widget` module for prefab header / footer / sidebar helpers,
//! and the `toast` module for the lifecycle subscription.
// ---- Re-export the vocabulary from snora-core --------------------------
//
// Users should only need to import from `snora`. We forward the whole
// contract surface so that a single `use snora::*` (or targeted imports)
// suffices.
pub use ;
// ---- Our own modules ---------------------------------------------------
/// Direction-aware row helpers — write logical rows without per-call match
/// statements on [`LayoutDirection`].
/// The single rendering entry point: [`render`].
/// Shared style functions used by the prefab widgets.
/// Toast rendering and lifecycle helpers
/// ([`subscription`](toast::subscription), [`sweep_expired`](toast::sweep_expired)).
/// Optional prefab `iced::Element` builders for header / sidebar / footer / menu / icon.
pub use render;
/// Convenience re-export of the Lucide icon constants, for callers using
/// the `lucide-icons` feature.