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
//! # Dewey — Agentic-First GUI Framework
//!
//! Dewey is a backend-agnostic Rust GUI framework that provides a complete
//! **ontology** over every widget, enabling AI agents to discover, inspect,
//! and control GUI applications through a structured protocol — no
//! screen-scraping required.
//!
//! All rendering goes through the [`Painter`](paint::Painter) trait, making
//! backends fully pluggable. The default `egui-backend` feature provides
//! GPU-accelerated rendering via egui/wgpu.
//!
//! ## Architecture (Elm-style)
//!
//! ```text
//! ┌──────────┐ Event ┌──────────┐ Command ┌──────────┐
//! │ Backend │ ────────→ │ Model │ ────────→ │ Runtime │
//! │ (Painter)│ │ (update) │ │ (Program)│
//! │ │ ←──────── │ (view) │ ←──────── │ │
//! └──────────┘ Frame └──────────┘ └──────────┘
//! ↕ ↕
//! ┌──────────┐ ┌──────────────┐
//! │ Widgets │ │ Ontology │
//! │ (30) │ │ (Registry) │
//! └──────────┘ └──────────────┘
//! ↕
//! ┌──────────┐
//! │ Agent │
//! │ Protocol │
//! └──────────┘
//! ```
//!
//! ## Quick Start
//!
//! ```rust,no_run
//! use dewey::prelude::*;
//!
//! struct App { count: i32 }
//!
//! enum Msg { Increment, Decrement }
//!
//! impl Model for App {
//! type Msg = Msg;
//!
//! fn update(&mut self, msg: Msg) -> Command<Msg> {
//! match msg {
//! Msg::Increment => self.count += 1,
//! Msg::Decrement => self.count -= 1,
//! }
//! Command::None
//! }
//!
//! fn view(&self, frame: &mut Frame<'_>) {
//! // Render widgets to frame
//! let area = frame.area;
//! Label::new(format!("Count: {}", self.count)).render(area, frame);
//! }
//!
//! fn handle_event(&self, _event: Event) -> Option<Msg> {
//! None
//! }
//! }
//! ```
//!
//! ## Modules
//!
//! | Module | Purpose |
//! |-------------|--------------------------------------------------|
//! | `core` | Rect, Position, Size, Color, Style primitives |
//! | `widget` | 27 widgets (Button, Label, TextInput, Table...) |
//! | `ontology` | Schema, capabilities, actions, registry |
//! | `agent` | JSON Lines protocol, RPC, headless driver |
//! | `runtime` | Model trait, Command, Program runner |
//! | `event` | Keyboard, mouse, touch, file-drop events |
//! | `layout` | Constraint-based layout engine |
//! | `animation` | Easing, Tween, Spring, Timeline, Keyframes |
//! | `backend` | egui/eframe (wgpu) + test backend |
//! | `focus` | Tab navigation focus management |
//! | `overlay` | Modal/dialog overlay stack |
//! | `theme` | Token-based theming with dark/light presets |
//! | `util` | Fuzzy matching, undo/redo, state persistence |
// Re-export derive macro
pub use Widget;
/// Convenience prelude — import everything needed for a typical app.