///|
pub(all) enum SemanticsRole {
  None
  Text
  Button
  Checkbox
  TextField
  List
  ListItem
  Grid
  ScrollView
  Switch
  Radio
  Slider
  Progress
  Tab
  Dialog
  Tooltip
  Menu
  ButtonGroup
  Form
  FormField
  Tree
  TreeItem
  Group
  WebView
} derive(Eq, Debug, ToJson)

///|
pub(all) enum SemanticsAction {
  Activate
  Focus
  SetText
  Submit
  Scroll
  Select
  Expand
  Collapse
  Dismiss
} derive(Eq, Debug, ToJson)

///|
pub(all) struct SemanticsState {
  focused : Bool
  disabled : Bool
  selected : Bool
  pressed : Bool
  checked : Bool
  expanded : Bool
  invalid : Bool
  required : Bool
} derive(Eq, Debug, ToJson)

///|
pub(all) struct SemanticsNode {
  element_id : ElementId
  role : SemanticsRole
  label : String
  value : String
  description : String
  state : SemanticsState
  actions : Array[SemanticsAction]
  focus_order : Int?
  frame : Rect
  children : Array[SemanticsNode]
} derive(Eq, Debug, ToJson)

///|
pub fn SemanticsState::default() -> SemanticsState {
  {
    focused: false,
    disabled: false,
    selected: false,
    pressed: false,
    checked: false,
    expanded: false,
    invalid: false,
    required: false,
  }
}