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
//! One-stop import for the common API. `use rdom_tui::prelude::*;`
//! brings in the types a typical app needs: `TuiDom`, the node
//! accessor traits, the core style types, and extension traits whose
//! methods (`cascade`, `set_width`, `computed`, ...) would otherwise
//! be invisible until imported.
//!
//! ## M4 accessor surface
//!
//! The prelude re-exports the M4b accessor traits so a single
//! `use rdom_tui::prelude::*;` brings them in scope:
//!
//! - [`TuiAccessors`](crate::TuiAccessors) — per-element read
//! methods (`value`, `checked`, `style`, per-tag accessors).
//! - [`TuiAccessorsMut`](crate::TuiAccessorsMut) — per-element
//! write methods (`set_value`, `style_mut`, `focus`, `click`,
//! …).
//! - [`TuiDocAccessors`](crate::TuiDocAccessors) — document-level
//! read methods (`element_from_point`,
//! `caret_position_from_point`).
//!
//! ### Smart vs narrow accessors
//!
//! Every form-control reading method ships in two shapes:
//!
//! - **Smart** (e.g. [`value()`](crate::TuiAccessors::value)) —
//! dispatches on tag at runtime. `dom.node(id).value()` works
//! whether `id` is an `<input>`, `<textarea>`, or `<select>`;
//! returns `None` on any other tag.
//! - **Narrow** (e.g.
//! [`input_value()`](crate::TuiAccessors::input_value),
//! [`select_value()`](crate::TuiAccessors::select_value),
//! [`option_value()`](crate::TuiAccessors::option_value), and
//! the rest of the per-tag set) —
//! returns `None` for any tag *other than the named one*.
//!
//! Reach for the narrow variant when you already know the tag
//! (or want a compile-time-readable assertion at the call site
//! that "this should be an input"); reach for the smart variant
//! at generic walk-the-tree code where the tag is dynamic.
//!
//! ## `NodeMutHtml` (not in the prelude)
//!
//! The `set_inner_html` / `set_outer_html` / `insert_adjacent_html`
//! extension trait lives in `rdom-parser` and is intentionally
//! NOT re-exported here — `rdom-tui` doesn't depend on
//! `rdom-parser`. Apps that need it write
//! `use rdom_parser::NodeMutHtml;` alongside the prelude
//! import.
//!
//! For the full surface use `rdom_tui::*` directly; for access to
//! `rdom-core` internals use `rdom_tui::core_api::…`.
pub use crate::;