blob: 31c52677b286b078401d7b7d9b5eec340e466665 [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// API docs from [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web).
// Attributions and copyright licensing by Mozilla Contributors is licensed
// under [CC-BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/.
// Generated from Web IDL definitions.
// ignore_for_file: unintended_html_in_doc_comment
@JS()
library;
import 'dart:js_interop';
import 'dom.dart';
import 'hr_time.dart';
import 'html.dart';
typedef MIDIPortType = String;
typedef MIDIPortDeviceState = String;
typedef MIDIPortConnectionState = String;
extension type MIDIOptions._(JSObject _) implements JSObject {
external factory MIDIOptions({
bool sysex,
bool software,
});
external bool get sysex;
external set sysex(bool value);
external bool get software;
external set software(bool value);
}
/// The **`MIDIInputMap`** read-only interface of the
/// [Web MIDI API](https://developer.mozilla.org/en-US/docs/Web/API/Web_MIDI_API)
/// provides the set of MIDI input ports that are currently available.
///
/// A `MIDIInputMap` instance is a read-only
/// [`Map`-like object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#map-like_browser_apis),
/// in which each key is the ID string for MIDI input, and the associated value
/// is the corresponding [MIDIInput] object.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/MIDIInputMap).
extension type MIDIInputMap._(JSObject _) implements JSObject {}
/// The **`MIDIOutputMap`** read-only interface of the
/// [Web MIDI API](https://developer.mozilla.org/en-US/docs/Web/API/Web_MIDI_API)
/// provides the set of MIDI output ports that are currently available.
///
/// A `MIDIOutputMap` instance is a read-only
/// [`Map`-like object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#map-like_browser_apis),
/// in which each key is the ID string for MIDI output, and the associated value
/// is the corresponding [MIDIOutput] object.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/MIDIOutputMap).
extension type MIDIOutputMap._(JSObject _) implements JSObject {}
/// The **`MIDIAccess`** interface of the
/// [Web MIDI API](https://developer.mozilla.org/en-US/docs/Web/API/Web_MIDI_API)
/// provides methods for listing MIDI input and output devices, and obtaining
/// access to those devices.
///
/// `MIDIAccess` is a
/// [transferable object](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Transferable_objects).
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/MIDIAccess).
extension type MIDIAccess._(JSObject _) implements EventTarget, JSObject {
/// The **`inputs`** read-only property of the [MIDIAccess] interface provides
/// access to any available MIDI input ports.
external MIDIInputMap get inputs;
/// The **`outputs`** read-only property of the [MIDIAccess] interface
/// provides access to any available MIDI output ports.
external MIDIOutputMap get outputs;
external EventHandler get onstatechange;
external set onstatechange(EventHandler value);
/// The **`sysexEnabled`** read-only property of the [MIDIAccess] interface
/// indicates whether system exclusive support is enabled on the current
/// MIDIAccess instance.
external bool get sysexEnabled;
}
/// The **`MIDIPort`** interface of the [Web MIDI API] represents a MIDI input
/// or output port.
///
/// A `MIDIPort` instance is created when a new MIDI device is connected.
/// Therefore it has no constructor.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/MIDIPort).
extension type MIDIPort._(JSObject _) implements EventTarget, JSObject {
/// The **`open()`** method of the [MIDIPort] interface makes the MIDI device
/// connected to this `MIDIPort` explicitly available.
///
/// If the port is successfully opened a new [MIDIConnectionEvent] is queued
/// to the `MIDIPort` [MIDIPort.statechange_event] and `MIDIAccess`
/// [MIDIAccess.statechange_event] events, and the [MIDIPort.connection]
/// property is changed to `"open"`.
///
/// If the port is already open when this method is called, then the promise
/// will resolve successfully.
external JSPromise<MIDIPort> open();
/// The **`close()`** method of the [MIDIPort] interface makes the access to
/// the MIDI device connected to this `MIDIPort` unavailable.
///
/// If the port is successfully closed a new [MIDIConnectionEvent] is queued
/// to the `MIDIPort` [MIDIPort.statechange_event] and `MIDIAccess`
/// [MIDIAccess.statechange_event] events, and the [MIDIPort.connection]
/// property is changed to `"closed"`.
external JSPromise<MIDIPort> close();
/// The **`id`** read-only property of the [MIDIPort] interface returns the
/// unique ID of the port.
external String get id;
/// The **`manufacturer`** read-only property of the [MIDIPort] interface
/// returns the manufacturer of the port.
external String? get manufacturer;
/// The **`name`** read-only property of the [MIDIPort] interface returns the
/// system name of the port.
external String? get name;
/// The **`type`** read-only property of the [MIDIPort] interface returns the
/// type of the port, indicating whether this is an input or output MIDI port.
external MIDIPortType get type;
/// The **`version`** read-only property of the [MIDIPort] interface returns
/// the version of the port.
external String? get version;
/// The **`state`** read-only property of the [MIDIPort] interface returns the
/// state of the port.
external MIDIPortDeviceState get state;
/// The **`connection`** read-only property of the [MIDIPort] interface
/// returns the connection state of the port.
external MIDIPortConnectionState get connection;
external EventHandler get onstatechange;
external set onstatechange(EventHandler value);
}
/// The **`MIDIInput`** interface of the
/// [Web MIDI API](https://developer.mozilla.org/en-US/docs/Web/API/Web_MIDI_API)
/// receives messages from a MIDI input port.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/MIDIInput).
extension type MIDIInput._(JSObject _) implements MIDIPort, JSObject {
external EventHandler get onmidimessage;
external set onmidimessage(EventHandler value);
}
/// The **`MIDIOutput`** interface of the [Web MIDI API] provides methods to add
/// messages to the queue of an output device, and to clear the queue of
/// messages.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/MIDIOutput).
extension type MIDIOutput._(JSObject _) implements MIDIPort, JSObject {
/// The **`send()`** method of the [MIDIOutput] interface queues messages for
/// the corresponding MIDI port. The message can be sent immediately, or with
/// an optional timestamp to delay sending.
external void send(
JSArray<JSNumber> data, [
DOMHighResTimeStamp timestamp,
]);
/// The **`clear()`** method of the [MIDIOutput] interface clears the queue of
/// messages being sent to the output device.
external void clear();
}
/// The **`MIDIMessageEvent`** interface of the
/// [Web MIDI API](https://developer.mozilla.org/en-US/docs/Web/API/Web_MIDI_API)
/// represents the event passed to the [MIDIInput.midimessage_event] event of
/// the [MIDIInput] interface. A `midimessage` event is fired every time a MIDI
/// message is sent from a device represented by a [MIDIInput], for example when
/// a MIDI keyboard key is pressed, a knob is tweaked, or a slider is moved.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/MIDIMessageEvent).
extension type MIDIMessageEvent._(JSObject _) implements Event, JSObject {
external factory MIDIMessageEvent(
String type, [
MIDIMessageEventInit eventInitDict,
]);
/// The **`data`** read-only property of the [MIDIMessageEvent] interface
/// returns the MIDI data bytes of a single MIDI message.
external JSUint8Array? get data;
}
extension type MIDIMessageEventInit._(JSObject _)
implements EventInit, JSObject {
external factory MIDIMessageEventInit({
bool bubbles,
bool cancelable,
bool composed,
JSUint8Array data,
});
external JSUint8Array get data;
external set data(JSUint8Array value);
}
/// The **`MIDIConnectionEvent`** interface of the
/// [Web MIDI API](https://developer.mozilla.org/en-US/docs/Web/API/Web_MIDI_API)
/// is the event passed to the [MIDIAccess.statechange_event] event of the
/// [MIDIAccess] interface and the [MIDIPort.statechange_event] event of the
/// [MIDIPort] interface. This occurs any time a new port becomes available, or
/// when a previously available port becomes unavailable. For example, this
/// event is fired whenever a MIDI device is either plugged in to or unplugged
/// from a computer.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/MIDIConnectionEvent).
extension type MIDIConnectionEvent._(JSObject _) implements Event, JSObject {
external factory MIDIConnectionEvent(
String type, [
MIDIConnectionEventInit eventInitDict,
]);
/// The **`port`** read-only property of the [MIDIConnectionEvent] interface
/// returns the port that has been disconnected or connected.
external MIDIPort? get port;
}
extension type MIDIConnectionEventInit._(JSObject _)
implements EventInit, JSObject {
external factory MIDIConnectionEventInit({
bool bubbles,
bool cancelable,
bool composed,
MIDIPort port,
});
external MIDIPort get port;
external set port(MIDIPort value);
}