@teaui/core
Version:
A high-level terminal UI library for Node
46 lines • 1.33 kB
JavaScript
import { Container } from '../Container.js';
/**
* A non-visual container that receives mouse events as a fallback. Children that
* register for mouse events on the same pixels will take priority (since they
* render after this view and override the registration).
*
* By default listens for all button and wheel events. Pass `mouse` to restrict
* which events to listen for.
*/
export class Mouse extends Container {
#mouse;
#onMouse;
constructor(props) {
super(props);
this.#mouse = [];
this.#update(props);
}
update(props) {
this.#update(props);
super.update(props);
}
#update({ mouse, onMouse }) {
if (mouse === undefined) {
this.#mouse = ['mouse.button.all', 'mouse.wheel', 'mouse.move'];
}
else if (typeof mouse === 'string') {
this.#mouse = [mouse];
}
else {
this.#mouse = mouse;
}
this.#onMouse = onMouse;
}
naturalSize(available) {
return super.naturalSize(available);
}
receiveMouse(event, system) {
super.receiveMouse(event, system);
this.#onMouse?.(event, system);
}
render(viewport) {
viewport.registerMouse(this.#mouse);
super.render(viewport);
}
}
//# sourceMappingURL=Mouse.js.map