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    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}