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
// devela/src/ui/widget/_.rs
//
// public
//!
//! Widgets compose UI primitives into semantic controls.
//! They report interaction results for resolved identities.
//!
//! - [`UiResponse`] provides a common per-identity result for controls.
//! - Its [`UiResponseFlags`] distinguish current interaction state
//! from outcomes produced during the frame.
//!
//! ```text
//! UiResponse
//! ├── UiId
//! └── UiResponseFlags
//! ├── current state ── HOT | ACTIVE | FOCUSED
//! └── frame outcome ── ACTIVATED | CHANGED
//! ```
//!
//! The module is intentionally incomplete. [`UiButton`] is its first concrete
//! control, not an exhaustive widget set. Additional controls and shared
//! composition patterns remain to be established.
//!
//! [`UiButton`] carries an author-provided [`UiKey`] with its human-facing
//! label and description. Once resolved, it can produce the corresponding
//! [`UiEntry`] and [`UiText`] semantic records.
//!
//! ```text
//! UiButton
//! ├── UiKey ── resolved by UiFrame ──> UiId
//! ├── label
//! └── description
//!
//! UiButton + UiId ──> UiEntry + UiText
//! ```
//!
//! A response reports the result of interaction processing; it does not
//! perform hit testing or determine ownership.
//!
//! # Boundaries
//!
//! This module composes established UI concepts
//! rather than replacing their respective systems.
//!
//! - Keys are resolved into identities by [`ui::frame`][crate::ui::frame].
//! - Roles, actions, and human-facing text belong to [`ui::semantic`][crate::ui::semantic].
//! - Hit regions and interaction ownership belong to [`ui::route`][crate::ui::route].
//! - Geometry and presentation belong to [`ui::layout`][crate::ui::layout]
//! and [`ui::view`][crate::ui::view].
//!
//! No widget tree, retained control store, renderer, or event loop is implied.
//!
//! [`UiKey`]: crate::UiKey
//! [`UiEntry`]: crate::UiEntry
//! [`UiText`]: crate::UiText
//
cratemods_in!
cratemods_out!