// GENERATED CONTENT - DO NOT EDIT
// Content was automatically extracted by Reffy into reffy-reports
// (https://github.com/tidoust/reffy-reports)
// Source: Picture-in-Picture (https://w3c.github.io/picture-in-picture/)

partial interface HTMLVideoElement {
  [NewObject] Promise<PictureInPictureWindow> requestPictureInPicture();

  attribute EventHandler onenterpictureinpicture;
  attribute EventHandler onleavepictureinpicture;

  [CEReactions] attribute boolean autoPictureInPicture;
  [CEReactions] attribute boolean disablePictureInPicture;
};

partial interface Document {
  readonly attribute boolean pictureInPictureEnabled;

  [NewObject] Promise<void> exitPictureInPicture();
};

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

[Exposed=Window]
interface PictureInPictureWindow : EventTarget {
  readonly attribute long width;
  readonly attribute long height;

  attribute EventHandler onresize;
};

[
    Constructor(DOMString type, EnterPictureInPictureEventInit eventInitDict),
    Exposed=Window
]
interface EnterPictureInPictureEvent : Event {
    [SameObject] readonly attribute PictureInPictureWindow pictureInPictureWindow;
};

dictionary EnterPictureInPictureEventInit : EventInit {
    required PictureInPictureWindow pictureInPictureWindow;
};
