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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
//! # Focus State Management
//!
//! This module provides focus state management for the Tessera UI framework.
//!
//! ## Overview
//!
//! Focus is a common requirement in UI frameworks. As a functional UI framework,
//! `tessera` lacks a stable method for locating specific components by reference.
//! Treating focus as an independent, shared state aligns better with `tessera`'s
//! design philosophy and provides greater flexibility.
//!
//! ## Design Philosophy
//!
//! The focus system is designed around the following principles:
//! - **Decentralized**: Each component can create its own [`Focus`] instance
//! - **Thread-safe**: Focus state is managed using atomic operations and locks
//! - **Automatic cleanup**: Focus is automatically cleared when a [`Focus`] instance is dropped
//! - **Unique identification**: Each focus instance has a unique UUID to prevent conflicts
//!
//! ## Usage
//!
//! ```
//! use tessera_ui::Focus;
//!
//! // Create a new focus instance
//! let focus = Focus::new();
//!
//! // Check if this focus is currently active
//! if focus.is_focused() {
//! // Handle focused state
//! }
//!
//! // Request focus for this component
//! focus.request_focus();
//!
//! // Clear focus when no longer needed
//! focus.unfocus();
//! ```
//!
//! ## Thread Safety
//!
//! The focus state is managed through a global static variable protected by
//! read-write locks, making it safe to use across multiple threads. This is
//! essential for Tessera's parallelized design.
use OnceLock;
use ;
use Uuid;
/// Global focus state storage.
///
/// This static variable holds the shared focus state across the entire application.
/// It's initialized lazily on first access and protected by a read-write lock
/// for thread-safe access.
static FOCUS_STATE: = new;
/// Internal focus state representation.
///
/// This structure holds the current focus state, tracking which component
/// (if any) currently has focus through its unique identifier.
/// Acquires a read lock on the global focus state.
///
/// This function provides thread-safe read access to the focus state.
/// Multiple readers can access the state simultaneously, but writers
/// will be blocked until all readers are finished.
///
/// # Returns
///
/// A read guard that provides access to the focus state. The guard
/// automatically releases the lock when dropped.
/// Acquires a write lock on the global focus state.
///
/// This function provides thread-safe write access to the focus state.
/// Only one writer can access the state at a time, and all readers
/// will be blocked until the writer is finished.
///
/// # Returns
///
/// A write guard that provides mutable access to the focus state.
/// The guard automatically releases the lock when dropped.
/// A focus handle that represents a focusable component.
///
/// Each `Focus` instance has a unique identifier and can be used to manage
/// focus state for a specific component. The focus system ensures that only
/// one component can have focus at a time across the entire application.
///
/// # Examples
///
/// ```
/// use tessera_ui::Focus;
///
/// // Create a focus instance for a component
/// let button_focus = Focus::new();
///
/// // Request focus for this component
/// button_focus.request_focus();
///
/// // Check if this component currently has focus
/// if button_focus.is_focused() {
/// println!("Button is focused!");
/// }
///
/// // Focus is automatically cleared when the instance is dropped
/// drop(button_focus);
/// ```