// GENERATED CONTENT - DO NOT EDIT
// Content was automatically extracted by Reffy into reffy-reports
// (https://github.com/tidoust/reffy-reports)
// Source: Pointer Lock 2.0 (https://w3c.github.io/pointerlock/)

partial interface Element {
  void requestPointerLock();
};

partial interface Document {
  attribute EventHandler onpointerlockchange;
  attribute EventHandler onpointerlockerror;
  void exitPointerLock();
};

partial interface mixin DocumentOrShadowRoot {
  readonly attribute Element ? pointerLockElement;
};

partial interface MouseEvent {
  readonly attribute long movementX;
  readonly attribute long movementY;
};

partial dictionary MouseEventInit {
  long movementX = 0;
  long movementY = 0;
};
