1use crate::runtime::ElementId;
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
4#[non_exhaustive]
5pub enum AccessibleRole {
6 Button,
7 Text,
8 TextField,
9 Checkbox,
10 Switch,
11 Slider,
12 List,
13 ListItem,
14 Table,
15 Tree,
16 TreeItem,
17 Dialog,
18 Menu,
19 MenuItem,
20 Progress,
21 Image,
22 Group,
23 Radio,
24 RadioGroup,
25}
26
27#[derive(Clone, Debug, PartialEq, Eq)]
28pub struct Accessible {
29 pub role: AccessibleRole,
30 pub label: String,
31}
32
33impl Accessible {
34 pub fn new(role: AccessibleRole, label: impl Into<String>) -> Self {
35 Self {
36 role,
37 label: label.into(),
38 }
39 }
40}
41
42#[derive(Clone, Debug, PartialEq, Eq)]
43pub struct AccessibleNode {
44 pub element: ElementId,
45 pub role: AccessibleRole,
46 pub label: String,
47 pub children: Vec<AccessibleNode>,
48}
49
50impl AccessibleNode {
51 pub fn flat_labels(&self) -> Vec<String> {
52 let mut out = vec![self.label.clone()];
53 for c in &self.children {
54 out.extend(c.flat_labels());
55 }
56 out
57 }
58}