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}
24
25#[derive(Clone, Debug, PartialEq, Eq)]
26pub struct Accessible {
27 pub role: AccessibleRole,
28 pub label: String,
29}
30
31impl Accessible {
32 pub fn new(role: AccessibleRole, label: impl Into<String>) -> Self {
33 Self {
34 role,
35 label: label.into(),
36 }
37 }
38}
39
40#[derive(Clone, Debug, PartialEq, Eq)]
41pub struct AccessibleNode {
42 pub element: ElementId,
43 pub role: AccessibleRole,
44 pub label: String,
45 pub children: Vec<AccessibleNode>,
46}
47
48impl AccessibleNode {
49 pub fn flat_labels(&self) -> Vec<String> {
50 let mut out = vec![self.label.clone()];
51 for c in &self.children {
52 out.extend(c.flat_labels());
53 }
54 out
55 }
56}