#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum Role {
Generic,
Button,
Checkbox,
Radio,
TextInput,
TextArea,
Select,
List,
ListItem,
Tree,
TreeItem,
Tab,
TabPanel,
Menu,
MenuItem,
Dialog,
Alert,
Status,
Progress,
Slider,
Navigation,
Main,
Header,
Footer,
Search,
Form,
Table,
Row,
Cell,
ColumnHeader,
RowHeader,
Group,
Tooltip,
Image,
Link,
Separator,
Toolbar,
}
impl Role {
pub fn name(&self) -> &'static str {
match self {
Role::Generic => "generic",
Role::Button => "button",
Role::Checkbox => "checkbox",
Role::Radio => "radio",
Role::TextInput => "textbox",
Role::TextArea => "textbox",
Role::Select => "combobox",
Role::List => "list",
Role::ListItem => "listitem",
Role::Tree => "tree",
Role::TreeItem => "treeitem",
Role::Tab => "tab",
Role::TabPanel => "tabpanel",
Role::Menu => "menu",
Role::MenuItem => "menuitem",
Role::Dialog => "dialog",
Role::Alert => "alert",
Role::Status => "status",
Role::Progress => "progressbar",
Role::Slider => "slider",
Role::Navigation => "navigation",
Role::Main => "main",
Role::Header => "banner",
Role::Footer => "contentinfo",
Role::Search => "search",
Role::Form => "form",
Role::Table => "table",
Role::Row => "row",
Role::Cell => "cell",
Role::ColumnHeader => "columnheader",
Role::RowHeader => "rowheader",
Role::Group => "group",
Role::Tooltip => "tooltip",
Role::Image => "img",
Role::Link => "link",
Role::Separator => "separator",
Role::Toolbar => "toolbar",
}
}
pub fn is_interactive(&self) -> bool {
matches!(
self,
Role::Button
| Role::Checkbox
| Role::Radio
| Role::TextInput
| Role::TextArea
| Role::Select
| Role::ListItem
| Role::TreeItem
| Role::Tab
| Role::MenuItem
| Role::Slider
| Role::Link
)
}
pub fn is_landmark(&self) -> bool {
matches!(
self,
Role::Navigation | Role::Main | Role::Header | Role::Footer | Role::Search | Role::Form
)
}
}