Skip to main content

sequoia_view/
a11y.rs

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}