UNPKG

dockview

Version:

Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support

72 lines (71 loc) 2.27 kB
export var Event; (function (Event) { Event.any = (...children) => { return (listener) => { const disposables = children.map((child) => child(listener)); return { dispose: () => { disposables.forEach((d) => { d.dispose(); }); }, }; }; }; })(Event || (Event = {})); // dumb event emitter with better typings than nodes event emitter // https://github.com/microsoft/vscode/blob/master/src/vs/base/common/event.ts export class Emitter { constructor(options) { this.options = options; this._listeners = []; this._disposed = false; } get event() { if (!this._event) { this._event = (listener) => { var _a; if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.replay) && this._last !== undefined) { listener(this._last); } const firstListener = this._listeners.length === 0; this._listeners.push(listener); return { dispose: () => { const index = this._listeners.indexOf(listener); if (index > -1) { this._listeners.splice(index, 1); } }, }; }; } return this._event; } fire(e) { this._last = e; this._listeners.forEach((listener) => { listener(e); }); } dispose() { this._listeners = []; this._disposed = true; } } export function addDisposableWindowListener(element, type, listener, options) { element.addEventListener(type, listener, options); return { dispose: () => { element.removeEventListener(type, listener); }, }; } export function addDisposableListener(element, type, listener, options) { element.addEventListener(type, listener, options); return { dispose: () => { element.removeEventListener(type, listener); }, }; }