// 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;
};

interface MIDIInputMap {
  readonly maplike<DOMString, MIDIInput>;
};

interface MIDIOutputMap {
  readonly maplike<DOMString, MIDIOutput>;
};

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

[SecureContext] 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] interface MIDIInput : MIDIPort {
  attribute EventHandler onmidimessage;
};

[SecureContext] 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, Constructor(DOMString type, optional MIDIMessageEventInit eventInitDict)]
interface MIDIMessageEvent : Event {
  readonly attribute Uint8Array data;
};

dictionary MIDIMessageEventInit : EventInit {
  Uint8Array data;
};

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

dictionary MIDIConnectionEventInit : EventInit {
  MIDIPort port;
};
