diff --git a/packages/dockview/src/api/component.api.ts b/packages/dockview/src/api/component.api.ts index 60998cdbb..b8a359092 100644 --- a/packages/dockview/src/api/component.api.ts +++ b/packages/dockview/src/api/component.api.ts @@ -20,7 +20,7 @@ import { SerializedPaneview, IPaneviewComponent, } from '../paneview/paneviewComponent'; -import { IPaneviewPanel } from '../paneview/paneviewPanel'; +import { IPaneviewPanel, PaneviewPanel } from '../paneview/paneviewPanel'; import { AddSplitviewComponentOptions, ISplitviewComponent, @@ -30,8 +30,9 @@ import { import { Orientation, Sizing } from '../splitview/core/splitview'; import { ISplitviewPanel } from '../splitview/splitviewPanel'; import { GroupviewPanel } from '../groupview/groupviewPanel'; -import { Event } from '../events'; +import { Emitter, Event } from '../events'; import { IDisposable } from '../lifecycle'; +import { PaneviewDropEvent } from '../react'; export interface CommonApi { readonly height: number; @@ -147,6 +148,29 @@ export class PaneviewApi implements CommonApi { return this.component.onDidLayoutChange; } + get onDidAddView(): Event { + return this.component.onDidAddView; + } + + get onDidRemoveView(): Event { + return this.component.onDidRemoveView; + } + + get onDidDrop(): Event { + const emitter = new Emitter(); + + const disposable = this.component.onDidDrop((e) => { + emitter.fire({ ...e, api: this }); + }); + + emitter.dispose = () => { + disposable.dispose(); + emitter.dispose(); + }; + + return emitter.event; + } + constructor(private readonly component: IPaneviewComponent) {} getPanels(): IPaneviewPanel[] { diff --git a/packages/dockview/src/paneview/paneview.ts b/packages/dockview/src/paneview/paneview.ts index fe4a689f8..b04ed9643 100644 --- a/packages/dockview/src/paneview/paneview.ts +++ b/packages/dockview/src/paneview/paneview.ts @@ -20,6 +20,7 @@ export class Paneview extends CompositeDisposable implements IDisposable { private paneItems: PaneItem[] = []; private _orientation: Orientation; private animationTimer: any | undefined; + private skipAnimation = false; private readonly _onDidChange = new Emitter(); readonly onDidChange: Event = this._onDidChange.event; @@ -147,8 +148,6 @@ export class Paneview extends CompositeDisposable implements IDisposable { return paneItem; } - private skipAnimation = false; - public moveView(from: number, to: number) { if (from === to) { return; diff --git a/packages/dockview/src/paneview/paneviewComponent.ts b/packages/dockview/src/paneview/paneviewComponent.ts index e239b649d..790b578ad 100644 --- a/packages/dockview/src/paneview/paneviewComponent.ts +++ b/packages/dockview/src/paneview/paneviewComponent.ts @@ -99,6 +99,8 @@ export interface IPaneviewComponent extends IDisposable { readonly height: number; readonly minimumSize: number; readonly maximumSize: number; + readonly onDidAddView: Event; + readonly onDidRemoveView: Event; readonly onDidDrop: Event; readonly onDidLayoutChange: Event; addPanel(options: AddPaneviewCompponentOptions): IDisposable;