// GENERATED CONTENT - DO NOT EDIT
// Content was automatically extracted by Reffy into reffy-reports
// (https://github.com/tidoust/reffy-reports)
// Source: Web MIDI API (http://webaudio.github.io/web-midi-api/)

partial interface Navigator {
  [SecureContext] Promise <MIDIAccess> requestMIDIAccess(optional MIDIOptions options = {});
};

dictionary MIDIOptions {
  boolean sysex;
  boolean software;
};

[SecureContext, Exposed=Window] interface MIDIInputMap {
  readonly maplike<DOMString, MIDIInput>;
};

[SecureContext, Exposed=Window] interface MIDIOutputMap {
  readonly maplike<DOMString, MIDIOutput>;
};

[SecureContext, Exposed=Window] interface MIDIAccess : EventTarget {
  readonly attribute MIDIInputMap inputs;
  readonly attribute MIDIOutputMap outputs;
  attribute EventHandler onstatechange;
  readonly attribute boolean sysexEnabled;
};

[SecureContext, Exposed=Window] interface MIDIPort : EventTarget {
  readonly attribute DOMString id;
  readonly attribute DOMString? manufacturer;
  readonly attribute DOMString? name;
  readonly attribute MIDIPortType type;
  readonly attribute DOMString? version;
  readonly attribute MIDIPortDeviceState state;
  readonly attribute MIDIPortConnectionState connection;
  attribute EventHandler onstatechange;
  Promise<MIDIPort> open();
  Promise<MIDIPort> close();
};

[SecureContext, Exposed=Window] interface MIDIInput : MIDIPort {
  attribute EventHandler onmidimessage;
};

[SecureContext, Exposed=Window] interface MIDIOutput : MIDIPort {
  void send(sequence<octet> data, optional DOMHighResTimeStamp timestamp = 0);
  void clear();
};

enum MIDIPortType {
  "input",
  "output",
};

enum MIDIPortDeviceState {
  "disconnected",
  "connected",
};

enum MIDIPortConnectionState {
  "open",
  "closed",
  "pending",
};

[SecureContext, Exposed=Window, Constructor(DOMString type, optional MIDIMessageEventInit eventInitDict = {})]
interface MIDIMessageEvent : Event {
  readonly attribute Uint8Array data;
};

dictionary MIDIMessageEventInit : EventInit {
  Uint8Array data;
};

[SecureContext, Exposed=Window, Constructor(DOMString type, optional MIDIConnectionEventInit eventInitDict = {})]
interface MIDIConnectionEvent : Event {
  readonly attribute MIDIPort port;
};

dictionary MIDIConnectionEventInit : EventInit {
  MIDIPort port;
};
