dockview-core 4.0.1 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/cjs/api/component.api.d.ts +3 -1
  2. package/dist/cjs/api/component.api.js +14 -0
  3. package/dist/cjs/dockview/components/popupService.js +1 -1
  4. package/dist/cjs/dockview/dockviewComponent.d.ts +16 -0
  5. package/dist/cjs/dockview/dockviewComponent.js +27 -10
  6. package/dist/cjs/dom.d.ts +6 -4
  7. package/dist/cjs/dom.js +90 -49
  8. package/dist/cjs/events.d.ts +1 -1
  9. package/dist/cjs/events.js +1 -10
  10. package/dist/cjs/overlay/overlay.js +4 -4
  11. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +13 -2
  12. package/dist/cjs/paneview/draggablePaneviewPanel.js +14 -4
  13. package/dist/cjs/paneview/paneviewComponent.d.ts +5 -0
  14. package/dist/cjs/paneview/paneviewComponent.js +25 -3
  15. package/dist/cjs/paneview/paneviewPanel.d.ts +13 -4
  16. package/dist/cjs/paneview/paneviewPanel.js +9 -13
  17. package/dist/cjs/popoutWindow.js +2 -2
  18. package/dist/cjs/splitview/splitviewComponent.js +3 -0
  19. package/dist/dockview-core.amd.js +154 -62
  20. package/dist/dockview-core.amd.js.map +1 -1
  21. package/dist/dockview-core.amd.min.js +2 -2
  22. package/dist/dockview-core.amd.min.js.map +1 -1
  23. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  24. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  25. package/dist/dockview-core.amd.noStyle.js +154 -62
  26. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  27. package/dist/dockview-core.cjs.js +154 -62
  28. package/dist/dockview-core.cjs.js.map +1 -1
  29. package/dist/dockview-core.esm.js +154 -62
  30. package/dist/dockview-core.esm.js.map +1 -1
  31. package/dist/dockview-core.esm.min.js +2 -2
  32. package/dist/dockview-core.esm.min.js.map +1 -1
  33. package/dist/dockview-core.js +154 -62
  34. package/dist/dockview-core.js.map +1 -1
  35. package/dist/dockview-core.min.js +2 -2
  36. package/dist/dockview-core.min.js.map +1 -1
  37. package/dist/dockview-core.min.noStyle.js +2 -2
  38. package/dist/dockview-core.min.noStyle.js.map +1 -1
  39. package/dist/dockview-core.noStyle.js +154 -62
  40. package/dist/dockview-core.noStyle.js.map +1 -1
  41. package/dist/esm/api/component.api.d.ts +3 -1
  42. package/dist/esm/api/component.api.js +6 -0
  43. package/dist/esm/dockview/components/popupService.js +2 -2
  44. package/dist/esm/dockview/dockviewComponent.d.ts +16 -0
  45. package/dist/esm/dockview/dockviewComponent.js +29 -12
  46. package/dist/esm/dom.d.ts +6 -4
  47. package/dist/esm/dom.js +65 -16
  48. package/dist/esm/events.d.ts +1 -1
  49. package/dist/esm/events.js +0 -8
  50. package/dist/esm/overlay/overlay.js +5 -5
  51. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +13 -2
  52. package/dist/esm/paneview/draggablePaneviewPanel.js +14 -4
  53. package/dist/esm/paneview/paneviewComponent.d.ts +5 -0
  54. package/dist/esm/paneview/paneviewComponent.js +25 -3
  55. package/dist/esm/paneview/paneviewPanel.d.ts +13 -4
  56. package/dist/esm/paneview/paneviewPanel.js +9 -13
  57. package/dist/esm/popoutWindow.js +3 -3
  58. package/dist/esm/splitview/splitviewComponent.js +3 -0
  59. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { DockviewMaximizedGroupChanged, FloatingGroupOptions, IDockviewComponent, MovePanelEvent, SerializedDockview } from '../dockview/dockviewComponent';
1
+ import { DockviewMaximizedGroupChanged, FloatingGroupOptions, IDockviewComponent, MovePanelEvent, PopoutGroupChangePositionEvent, PopoutGroupChangeSizeEvent, SerializedDockview } from '../dockview/dockviewComponent';
2
2
  import { AddGroupOptions, AddPanelOptions, DockviewComponentOptions, DockviewDndOverlayEvent, MovementOptions } from '../dockview/options';
3
3
  import { Parameters } from '../panel/types';
4
4
  import { Direction } from '../gridview/baseComponentGridview';
@@ -417,6 +417,8 @@ export declare class DockviewApi implements CommonApi<SerializedDockview> {
417
417
  */
418
418
  get onWillDragPanel(): Event<TabDragEvent>;
419
419
  get onUnhandledDragOverEvent(): Event<DockviewDndOverlayEvent>;
420
+ get onDidPopoutGroupSizeChange(): Event<PopoutGroupChangeSizeEvent>;
421
+ get onDidPopoutGroupPositionChange(): Event<PopoutGroupChangePositionEvent>;
420
422
  /**
421
423
  * All panel objects.
422
424
  */
@@ -568,6 +568,12 @@ export class DockviewApi {
568
568
  get onUnhandledDragOverEvent() {
569
569
  return this.component.onUnhandledDragOverEvent;
570
570
  }
571
+ get onDidPopoutGroupSizeChange() {
572
+ return this.component.onDidPopoutGroupSizeChange;
573
+ }
574
+ get onDidPopoutGroupPositionChange() {
575
+ return this.component.onDidPopoutGroupPositionChange;
576
+ }
571
577
  /**
572
578
  * All panel objects.
573
579
  */
@@ -1,4 +1,4 @@
1
- import { addDisposableWindowListener } from '../../events';
1
+ import { addDisposableListener } from '../../events';
2
2
  import { CompositeDisposable, Disposable, MutableDisposable, } from '../../lifecycle';
3
3
  export class PopupService extends CompositeDisposable {
4
4
  constructor(root) {
@@ -27,7 +27,7 @@ export class PopupService extends CompositeDisposable {
27
27
  wrapper.style.left = `${position.x - offsetX}px`;
28
28
  this._element.appendChild(wrapper);
29
29
  this._active = wrapper;
30
- this._activeDisposable.value = new CompositeDisposable(addDisposableWindowListener(window, 'pointerdown', (event) => {
30
+ this._activeDisposable.value = new CompositeDisposable(addDisposableListener(window, 'pointerdown', (event) => {
31
31
  var _a;
32
32
  const target = event.target;
33
33
  if (!(target instanceof HTMLElement)) {
@@ -107,6 +107,16 @@ export interface DockviewMaximizedGroupChanged {
107
107
  group: DockviewGroupPanel;
108
108
  isMaximized: boolean;
109
109
  }
110
+ export interface PopoutGroupChangeSizeEvent {
111
+ width: number;
112
+ height: number;
113
+ group: DockviewGroupPanel;
114
+ }
115
+ export interface PopoutGroupChangePositionEvent {
116
+ screenX: number;
117
+ screenY: number;
118
+ group: DockviewGroupPanel;
119
+ }
110
120
  export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
111
121
  readonly activePanel: IDockviewPanel | undefined;
112
122
  readonly totalPanels: number;
@@ -127,6 +137,8 @@ export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
127
137
  readonly onUnhandledDragOverEvent: Event<DockviewDndOverlayEvent>;
128
138
  readonly onDidMovePanel: Event<MovePanelEvent>;
129
139
  readonly onDidMaximizedGroupChange: Event<DockviewMaximizedGroupChanged>;
140
+ readonly onDidPopoutGroupSizeChange: Event<PopoutGroupChangeSizeEvent>;
141
+ readonly onDidPopoutGroupPositionChange: Event<PopoutGroupChangePositionEvent>;
130
142
  readonly options: DockviewComponentOptions;
131
143
  updateOptions(options: DockviewOptions): void;
132
144
  moveGroupOrPanel(options: MoveGroupOrPanelOptions): void;
@@ -185,6 +197,10 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
185
197
  readonly onDidRemovePanel: Event<IDockviewPanel>;
186
198
  private readonly _onDidAddPanel;
187
199
  readonly onDidAddPanel: Event<IDockviewPanel>;
200
+ private readonly _onDidPopoutGroupSizeChange;
201
+ readonly onDidPopoutGroupSizeChange: Event<PopoutGroupChangeSizeEvent>;
202
+ private readonly _onDidPopoutGroupPositionChange;
203
+ readonly onDidPopoutGroupPositionChange: Event<PopoutGroupChangePositionEvent>;
188
204
  private readonly _onDidLayoutFromJSON;
189
205
  readonly onDidLayoutFromJSON: Event<void>;
190
206
  private readonly _onDidActivePanelChange;
@@ -3,7 +3,7 @@ import { directionToPosition, Droptarget, } from '../dnd/droptarget';
3
3
  import { tail, sequenceEquals, remove } from '../array';
4
4
  import { DockviewPanel } from './dockviewPanel';
5
5
  import { CompositeDisposable, Disposable } from '../lifecycle';
6
- import { Event, Emitter, addDisposableWindowListener } from '../events';
6
+ import { Event, Emitter, addDisposableListener } from '../events';
7
7
  import { Watermark } from './components/watermark/watermark';
8
8
  import { sequentialNumberGenerator } from '../math';
9
9
  import { DefaultDockviewDeserialzier } from './deserializer';
@@ -16,7 +16,7 @@ import { DockviewGroupPanel } from './dockviewGroupPanel';
16
16
  import { DockviewPanelModel } from './dockviewPanelModel';
17
17
  import { getPanelData } from '../dnd/dataTransfer';
18
18
  import { Overlay } from '../overlay/overlay';
19
- import { addTestId, Classnames, getDockviewTheme, toggleClass, watchElementResize, } from '../dom';
19
+ import { addTestId, Classnames, getDockviewTheme, onDidWindowResizeEnd, onDidWindowMoveEnd, toggleClass, watchElementResize, } from '../dom';
20
20
  import { DockviewFloatingGroupPanel } from './dockviewFloatingGroupPanel';
21
21
  import { DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE, DEFAULT_FLOATING_GROUP_POSITION, } from '../constants';
22
22
  import { OverlayRenderContainer, } from '../overlay/overlayRenderContainer';
@@ -105,6 +105,10 @@ export class DockviewComponent extends BaseGrid {
105
105
  this.onDidRemovePanel = this._onDidRemovePanel.event;
106
106
  this._onDidAddPanel = new Emitter();
107
107
  this.onDidAddPanel = this._onDidAddPanel.event;
108
+ this._onDidPopoutGroupSizeChange = new Emitter();
109
+ this.onDidPopoutGroupSizeChange = this._onDidPopoutGroupSizeChange.event;
110
+ this._onDidPopoutGroupPositionChange = new Emitter();
111
+ this.onDidPopoutGroupPositionChange = this._onDidPopoutGroupPositionChange.event;
108
112
  this._onDidLayoutFromJSON = new Emitter();
109
113
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
110
114
  this._onDidActivePanelChange = new Emitter();
@@ -134,7 +138,7 @@ export class DockviewComponent extends BaseGrid {
134
138
  if (options.debug) {
135
139
  this.addDisposables(new StrictEventsSequencing(this));
136
140
  }
137
- this.addDisposables(this.rootDropTargetContainer, this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this._onDidMaximizedGroupChange, this._onDidOptionsChange, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
141
+ this.addDisposables(this.rootDropTargetContainer, this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this._onDidMaximizedGroupChange, this._onDidOptionsChange, this._onDidPopoutGroupSizeChange, this._onDidPopoutGroupPositionChange, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
138
142
  this.updateWatermark();
139
143
  }), this.onDidAdd((event) => {
140
144
  if (!this._moving) {
@@ -155,7 +159,7 @@ export class DockviewComponent extends BaseGrid {
155
159
  });
156
160
  }), Event.any(this.onDidAdd, this.onDidRemove)(() => {
157
161
  this.updateWatermark();
158
- }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidAddGroup, this.onDidRemove, this.onDidMovePanel, this.onDidActivePanelChange)(() => {
162
+ }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidAddGroup, this.onDidRemove, this.onDidMovePanel, this.onDidActivePanelChange, this.onDidPopoutGroupPositionChange, this.onDidPopoutGroupSizeChange)(() => {
159
163
  this._bufferOnDidLayoutChange.fire();
160
164
  }), Disposable.from(() => {
161
165
  // iterate over a copy of the array since .dispose() mutates the original array
@@ -416,13 +420,26 @@ export class DockviewComponent extends BaseGrid {
416
420
  },
417
421
  },
418
422
  };
419
- popoutWindowDisposable.addDisposables(
423
+ const _onDidWindowPositionChange = onDidWindowMoveEnd(_window.window);
424
+ popoutWindowDisposable.addDisposables(_onDidWindowPositionChange, onDidWindowResizeEnd(_window.window, () => {
425
+ this._onDidPopoutGroupSizeChange.fire({
426
+ width: _window.window.innerWidth,
427
+ height: _window.window.innerHeight,
428
+ group,
429
+ });
430
+ }), _onDidWindowPositionChange.event(() => {
431
+ this._onDidPopoutGroupPositionChange.fire({
432
+ screenX: _window.window.screenX,
433
+ screenY: _window.window.screenX,
434
+ group,
435
+ });
436
+ }),
420
437
  /**
421
438
  * ResizeObserver seems slow here, I do not know why but we don't need it
422
439
  * since we can reply on the window resize event as we will occupy the full
423
440
  * window dimensions
424
441
  */
425
- addDisposableWindowListener(_window.window, 'resize', () => {
442
+ addDisposableListener(_window.window, 'resize', () => {
426
443
  group.layout(_window.window.innerWidth, _window.window.innerHeight);
427
444
  }), overlayRenderContainer, Disposable.from(() => {
428
445
  if (this.isDisposed) {
@@ -636,7 +653,7 @@ export class DockviewComponent extends BaseGrid {
636
653
  }
637
654
  this.updateWatermark();
638
655
  }
639
- orthogonalize(position) {
656
+ orthogonalize(position, options) {
640
657
  switch (position) {
641
658
  case 'top':
642
659
  case 'bottom':
@@ -661,10 +678,10 @@ export class DockviewComponent extends BaseGrid {
661
678
  case 'top':
662
679
  case 'left':
663
680
  case 'center':
664
- return this.createGroupAtLocation([0]); // insert into first position
681
+ return this.createGroupAtLocation([0], undefined, options); // insert into first position
665
682
  case 'bottom':
666
683
  case 'right':
667
- return this.createGroupAtLocation([this.gridview.length]); // insert into last position
684
+ return this.createGroupAtLocation([this.gridview.length], undefined, options); // insert into last position
668
685
  default:
669
686
  throw new Error(`unsupported position ${position}`);
670
687
  }
@@ -1160,7 +1177,7 @@ export class DockviewComponent extends BaseGrid {
1160
1177
  }
1161
1178
  }
1162
1179
  else {
1163
- const group = this.orthogonalize(directionToPosition(options.direction));
1180
+ const group = this.orthogonalize(directionToPosition(options.direction), options);
1164
1181
  if (!options.skipSetActive) {
1165
1182
  this.doSetGroupAndPanelActive(group);
1166
1183
  }
@@ -1602,8 +1619,8 @@ export class DockviewComponent extends BaseGrid {
1602
1619
  });
1603
1620
  return panel;
1604
1621
  }
1605
- createGroupAtLocation(location, size) {
1606
- const group = this.createGroup();
1622
+ createGroupAtLocation(location, size, options) {
1623
+ const group = this.createGroup(options);
1607
1624
  this.doAddGroup(group, location, size);
1608
1625
  return group;
1609
1626
  }
package/dist/esm/dom.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Event as DockviewEvent } from './events';
1
+ import { Event as DockviewEvent, Emitter } from './events';
2
2
  import { IDisposable, CompositeDisposable } from './lifecycle';
3
3
  export interface OverflowEvent {
4
4
  hasScrollX: boolean;
@@ -15,13 +15,13 @@ export declare const removeClasses: (element: HTMLElement, ...classes: string[])
15
15
  export declare const addClasses: (element: HTMLElement, ...classes: string[]) => void;
16
16
  export declare const toggleClass: (element: HTMLElement, className: string, isToggled: boolean) => void;
17
17
  export declare function isAncestor(testChild: Node | null, testAncestor: Node | null): boolean;
18
- export declare function getElementsByTagName(tag: string): HTMLElement[];
18
+ export declare function getElementsByTagName(tag: string, document: ParentNode): HTMLElement[];
19
19
  export interface IFocusTracker extends IDisposable {
20
20
  readonly onDidFocus: DockviewEvent<void>;
21
21
  readonly onDidBlur: DockviewEvent<void>;
22
22
  refreshState?(): void;
23
23
  }
24
- export declare function trackFocus(element: HTMLElement | Window): IFocusTracker;
24
+ export declare function trackFocus(element: HTMLElement): IFocusTracker;
25
25
  export declare function quasiPreventDefault(event: Event): void;
26
26
  export declare function quasiDefaultPrevented(event: Event): boolean;
27
27
  export declare function addStyles(document: Document, styleSheetList: StyleSheetList): void;
@@ -37,7 +37,7 @@ export declare function getDomNodePagePosition(domNode: Element): {
37
37
  */
38
38
  export declare function isInDocument(element: Element): boolean;
39
39
  export declare function addTestId(element: HTMLElement, id: string): void;
40
- export declare function disableIframePointEvents(): {
40
+ export declare function disableIframePointEvents(rootNode?: ParentNode): {
41
41
  release: () => void;
42
42
  };
43
43
  export declare function getDockviewTheme(element: HTMLElement): string | undefined;
@@ -48,3 +48,5 @@ export declare class Classnames {
48
48
  setClassNames(classNames: string): void;
49
49
  }
50
50
  export declare function isChildEntirelyVisibleWithinParent(child: HTMLElement, parent: HTMLElement): boolean;
51
+ export declare function onDidWindowMoveEnd(window: Window): Emitter<void>;
52
+ export declare function onDidWindowResizeEnd(element: Window, cb: () => void): CompositeDisposable;
package/dist/esm/dom.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Emitter, addDisposableListener, addDisposableWindowListener, } from './events';
1
+ import { Emitter, addDisposableListener, } from './events';
2
2
  import { CompositeDisposable } from './lifecycle';
3
3
  export class OverflowObserver extends CompositeDisposable {
4
4
  constructor(el) {
@@ -66,8 +66,8 @@ export function isAncestor(testChild, testAncestor) {
66
66
  }
67
67
  return false;
68
68
  }
69
- export function getElementsByTagName(tag) {
70
- return Array.prototype.slice.call(document.getElementsByTagName(tag), 0);
69
+ export function getElementsByTagName(tag, document) {
70
+ return Array.prototype.slice.call(document.querySelectorAll(tag), 0);
71
71
  }
72
72
  export function trackFocus(element) {
73
73
  return new FocusTracker(element);
@@ -115,14 +115,8 @@ class FocusTracker extends CompositeDisposable {
115
115
  }
116
116
  }
117
117
  };
118
- if (element instanceof HTMLElement) {
119
- this.addDisposables(addDisposableListener(element, 'focus', onFocus, true));
120
- this.addDisposables(addDisposableListener(element, 'blur', onBlur, true));
121
- }
122
- else {
123
- this.addDisposables(addDisposableWindowListener(element, 'focus', onFocus, true));
124
- this.addDisposables(addDisposableWindowListener(element, 'blur', onBlur, true));
125
- }
118
+ this.addDisposables(addDisposableListener(element, 'focus', onFocus, true));
119
+ this.addDisposables(addDisposableListener(element, 'blur', onBlur, true));
126
120
  }
127
121
  refreshState() {
128
122
  this._refreshStateHandler();
@@ -196,11 +190,30 @@ export function isInDocument(element) {
196
190
  export function addTestId(element, id) {
197
191
  element.setAttribute('data-testid', id);
198
192
  }
199
- export function disableIframePointEvents() {
200
- const iframes = [
201
- ...getElementsByTagName('iframe'),
202
- ...getElementsByTagName('webview'),
203
- ];
193
+ /**
194
+ * Should be more efficient than element.querySelectorAll("*") since there
195
+ * is no need to store every element in-memory using this approach
196
+ */
197
+ function allTagsNamesInclusiveOfShadowDoms(tagNames) {
198
+ const iframes = [];
199
+ function findIframesInNode(node) {
200
+ if (node.nodeType === Node.ELEMENT_NODE) {
201
+ if (tagNames.includes(node.tagName)) {
202
+ iframes.push(node);
203
+ }
204
+ if (node.shadowRoot) {
205
+ findIframesInNode(node.shadowRoot);
206
+ }
207
+ for (const child of node.children) {
208
+ findIframesInNode(child);
209
+ }
210
+ }
211
+ }
212
+ findIframesInNode(document.documentElement);
213
+ return iframes;
214
+ }
215
+ export function disableIframePointEvents(rootNode = document) {
216
+ const iframes = allTagsNamesInclusiveOfShadowDoms(['IFRAME', 'WEBVIEW']);
204
217
  const original = new WeakMap(); // don't hold onto HTMLElement references longer than required
205
218
  for (const iframe of iframes) {
206
219
  original.set(iframe, iframe.style.pointerEvents);
@@ -252,6 +265,7 @@ export class Classnames {
252
265
  }
253
266
  }
254
267
  }
268
+ const DEBOUCE_DELAY = 100;
255
269
  export function isChildEntirelyVisibleWithinParent(child, parent) {
256
270
  //
257
271
  const childPosition = getDomNodePagePosition(child);
@@ -265,3 +279,38 @@ export function isChildEntirelyVisibleWithinParent(child, parent) {
265
279
  }
266
280
  return true;
267
281
  }
282
+ export function onDidWindowMoveEnd(window) {
283
+ const emitter = new Emitter();
284
+ let previousScreenX = window.screenX;
285
+ let previousScreenY = window.screenY;
286
+ let timeout;
287
+ const checkMovement = () => {
288
+ if (window.closed) {
289
+ return;
290
+ }
291
+ const currentScreenX = window.screenX;
292
+ const currentScreenY = window.screenY;
293
+ if (currentScreenX !== previousScreenX ||
294
+ currentScreenY !== previousScreenY) {
295
+ clearTimeout(timeout);
296
+ timeout = setTimeout(() => {
297
+ emitter.fire();
298
+ }, DEBOUCE_DELAY);
299
+ previousScreenX = currentScreenX;
300
+ previousScreenY = currentScreenY;
301
+ }
302
+ requestAnimationFrame(checkMovement);
303
+ };
304
+ checkMovement();
305
+ return emitter;
306
+ }
307
+ export function onDidWindowResizeEnd(element, cb) {
308
+ let resizeTimeout;
309
+ const disposable = new CompositeDisposable(addDisposableListener(element, 'resize', () => {
310
+ clearTimeout(resizeTimeout);
311
+ resizeTimeout = setTimeout(() => {
312
+ cb();
313
+ }, DEBOUCE_DELAY);
314
+ }));
315
+ return disposable;
316
+ }
@@ -54,7 +54,7 @@ export declare class Emitter<T> implements IDisposable {
54
54
  fire(e: T): void;
55
55
  dispose(): void;
56
56
  }
57
- export declare function addDisposableWindowListener<K extends keyof WindowEventMap>(element: Window, type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
57
+ export declare function addDisposableListener<K extends keyof WindowEventMap>(element: Window, type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
58
58
  export declare function addDisposableListener<K extends keyof HTMLElementEventMap>(element: HTMLElement, type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
59
59
  /**
60
60
  *
@@ -145,14 +145,6 @@ export class Emitter {
145
145
  }
146
146
  Emitter.ENABLE_TRACKING = false;
147
147
  Emitter.MEMORY_LEAK_WATCHER = new LeakageMonitor();
148
- export function addDisposableWindowListener(element, type, listener, options) {
149
- element.addEventListener(type, listener, options);
150
- return {
151
- dispose: () => {
152
- element.removeEventListener(type, listener, options);
153
- },
154
- };
155
- }
156
148
  export function addDisposableListener(element, type, listener, options) {
157
149
  element.addEventListener(type, listener, options);
158
150
  return {
@@ -1,5 +1,5 @@
1
1
  import { disableIframePointEvents, quasiDefaultPrevented, toggleClass, } from '../dom';
2
- import { Emitter, addDisposableListener, addDisposableWindowListener, } from '../events';
2
+ import { Emitter, addDisposableListener, } from '../events';
3
3
  import { CompositeDisposable, MutableDisposable } from '../lifecycle';
4
4
  import { clamp } from '../math';
5
5
  class AriaLevelTracker {
@@ -164,7 +164,7 @@ export class Overlay extends CompositeDisposable {
164
164
  dispose: () => {
165
165
  iframes.release();
166
166
  },
167
- }, addDisposableWindowListener(window, 'pointermove', (e) => {
167
+ }, addDisposableListener(window, 'pointermove', (e) => {
168
168
  const containerRect = this.options.container.getBoundingClientRect();
169
169
  const x = e.clientX - containerRect.left;
170
170
  const y = e.clientY - containerRect.top;
@@ -201,7 +201,7 @@ export class Overlay extends CompositeDisposable {
201
201
  bounds.right = right;
202
202
  }
203
203
  this.setBounds(bounds);
204
- }), addDisposableWindowListener(window, 'pointerup', () => {
204
+ }), addDisposableListener(window, 'pointerup', () => {
205
205
  toggleClass(this._element, 'dv-resize-container-dragging', false);
206
206
  move.dispose();
207
207
  this._onDidChangeEnd.fire();
@@ -246,7 +246,7 @@ export class Overlay extends CompositeDisposable {
246
246
  e.preventDefault();
247
247
  let startPosition = null;
248
248
  const iframes = disableIframePointEvents();
249
- move.value = new CompositeDisposable(addDisposableWindowListener(window, 'pointermove', (e) => {
249
+ move.value = new CompositeDisposable(addDisposableListener(window, 'pointermove', (e) => {
250
250
  const containerRect = this.options.container.getBoundingClientRect();
251
251
  const overlayRect = this._element.getBoundingClientRect();
252
252
  const y = e.clientY - containerRect.top;
@@ -370,7 +370,7 @@ export class Overlay extends CompositeDisposable {
370
370
  dispose: () => {
371
371
  iframes.release();
372
372
  },
373
- }, addDisposableWindowListener(window, 'pointerup', () => {
373
+ }, addDisposableListener(window, 'pointerup', () => {
374
374
  move.dispose();
375
375
  this._onDidChangeEnd.fire();
376
376
  }));
@@ -12,14 +12,25 @@ export interface PaneviewDidDropEvent extends DroptargetEvent {
12
12
  api: PaneviewApi;
13
13
  }
14
14
  export declare abstract class DraggablePaneviewPanel extends PaneviewPanel {
15
- private readonly accessor;
16
15
  private handler;
17
16
  private target;
18
17
  private readonly _onDidDrop;
19
18
  readonly onDidDrop: Event<PaneviewDidDropEvent>;
20
19
  private readonly _onUnhandledDragOverEvent;
21
20
  readonly onUnhandledDragOverEvent: Event<PaneviewDndOverlayEvent>;
22
- constructor(accessor: IPaneviewComponent, id: string, component: string, headerComponent: string | undefined, orientation: Orientation, isExpanded: boolean, disableDnd: boolean);
21
+ readonly accessor: IPaneviewComponent;
22
+ constructor(options: {
23
+ accessor: IPaneviewComponent;
24
+ id: string;
25
+ component: string;
26
+ headerComponent: string | undefined;
27
+ orientation: Orientation;
28
+ isExpanded: boolean;
29
+ disableDnd: boolean;
30
+ headerSize: number;
31
+ minimumBodySize: number;
32
+ maximumBodySize: number;
33
+ });
23
34
  private initDragFeatures;
24
35
  private onDrop;
25
36
  }
@@ -6,15 +6,25 @@ import { Emitter } from '../events';
6
6
  import { PaneviewUnhandledDragOverEvent, } from './options';
7
7
  import { PaneviewPanel, } from './paneviewPanel';
8
8
  export class DraggablePaneviewPanel extends PaneviewPanel {
9
- constructor(accessor, id, component, headerComponent, orientation, isExpanded, disableDnd) {
10
- super(id, component, headerComponent, orientation, isExpanded, true);
11
- this.accessor = accessor;
9
+ constructor(options) {
10
+ super({
11
+ id: options.id,
12
+ component: options.component,
13
+ headerComponent: options.headerComponent,
14
+ orientation: options.orientation,
15
+ isExpanded: options.isExpanded,
16
+ isHeaderVisible: true,
17
+ headerSize: options.headerSize,
18
+ minimumBodySize: options.minimumBodySize,
19
+ maximumBodySize: options.maximumBodySize,
20
+ });
12
21
  this._onDidDrop = new Emitter();
13
22
  this.onDidDrop = this._onDidDrop.event;
14
23
  this._onUnhandledDragOverEvent = new Emitter();
15
24
  this.onUnhandledDragOverEvent = this._onUnhandledDragOverEvent.event;
25
+ this.accessor = options.accessor;
16
26
  this.addDisposables(this._onDidDrop, this._onUnhandledDragOverEvent);
17
- if (!disableDnd) {
27
+ if (!options.disableDnd) {
18
28
  this.initDragFeatures();
19
29
  }
20
30
  }
@@ -12,6 +12,7 @@ export interface SerializedPaneviewPanel {
12
12
  priority?: LayoutPriority;
13
13
  minimumSize?: number;
14
14
  maximumSize?: number;
15
+ headerSize?: number;
15
16
  data: {
16
17
  id: string;
17
18
  component: string;
@@ -40,6 +41,9 @@ export declare class PaneFramework extends DraggablePaneviewPanel {
40
41
  isExpanded: boolean;
41
42
  disableDnd: boolean;
42
43
  accessor: IPaneviewComponent;
44
+ headerSize: number;
45
+ minimumBodySize: number;
46
+ maximumBodySize: number;
43
47
  });
44
48
  getBodyComponent(): IPanePart;
45
49
  getHeaderComponent(): IPanePart;
@@ -51,6 +55,7 @@ export interface AddPaneviewComponentOptions<T extends object = Parameters> {
51
55
  params?: T;
52
56
  minimumBodySize?: number;
53
57
  maximumBodySize?: number;
58
+ headerSize?: number;
54
59
  isExpanded?: boolean;
55
60
  title: string;
56
61
  index?: number;
@@ -9,9 +9,23 @@ import { sequentialNumberGenerator } from '../math';
9
9
  import { Resizable } from '../resizable';
10
10
  import { Classnames } from '../dom';
11
11
  const nextLayoutId = sequentialNumberGenerator();
12
+ const HEADER_SIZE = 22;
13
+ const MINIMUM_BODY_SIZE = 0;
14
+ const MAXIMUM_BODY_SIZE = Number.MAX_SAFE_INTEGER;
12
15
  export class PaneFramework extends DraggablePaneviewPanel {
13
16
  constructor(options) {
14
- super(options.accessor, options.id, options.component, options.headerComponent, options.orientation, options.isExpanded, options.disableDnd);
17
+ super({
18
+ accessor: options.accessor,
19
+ id: options.id,
20
+ component: options.component,
21
+ headerComponent: options.headerComponent,
22
+ orientation: options.orientation,
23
+ isExpanded: options.isExpanded,
24
+ disableDnd: options.disableDnd,
25
+ headerSize: options.headerSize,
26
+ minimumBodySize: options.minimumBodySize,
27
+ maximumBodySize: options.maximumBodySize,
28
+ });
15
29
  this.options = options;
16
30
  }
17
31
  getBodyComponent() {
@@ -106,7 +120,7 @@ export class PaneviewComponent extends Resizable {
106
120
  this._options = Object.assign(Object.assign({}, this.options), options);
107
121
  }
108
122
  addPanel(options) {
109
- var _a;
123
+ var _a, _b;
110
124
  const body = this.options.createComponent({
111
125
  id: options.id,
112
126
  name: options.component,
@@ -131,12 +145,15 @@ export class PaneviewComponent extends Resizable {
131
145
  isExpanded: !!options.isExpanded,
132
146
  disableDnd: !!this.options.disableDnd,
133
147
  accessor: this,
148
+ headerSize: (_a = options.headerSize) !== null && _a !== void 0 ? _a : HEADER_SIZE,
149
+ minimumBodySize: MINIMUM_BODY_SIZE,
150
+ maximumBodySize: MAXIMUM_BODY_SIZE,
134
151
  });
135
152
  this.doAddPanel(view);
136
153
  const size = typeof options.size === 'number' ? options.size : Sizing.Distribute;
137
154
  const index = typeof options.index === 'number' ? options.index : undefined;
138
155
  view.init({
139
- params: (_a = options.params) !== null && _a !== void 0 ? _a : {},
156
+ params: (_b = options.params) !== null && _b !== void 0 ? _b : {},
140
157
  minimumBodySize: options.minimumBodySize,
141
158
  maximumBodySize: options.maximumBodySize,
142
159
  isExpanded: options.isExpanded,
@@ -181,6 +198,7 @@ export class PaneviewComponent extends Resizable {
181
198
  data: view.toJSON(),
182
199
  minimumSize: minimum(view.minimumBodySize),
183
200
  maximumSize: maximum(view.maximumBodySize),
201
+ headerSize: view.headerSize,
184
202
  expanded: view.isExpanded(),
185
203
  };
186
204
  });
@@ -201,6 +219,7 @@ export class PaneviewComponent extends Resizable {
201
219
  descriptor: {
202
220
  size,
203
221
  views: views.map((view) => {
222
+ var _a, _b, _c;
204
223
  const data = view.data;
205
224
  const body = this.options.createComponent({
206
225
  id: data.id,
@@ -227,6 +246,9 @@ export class PaneviewComponent extends Resizable {
227
246
  isExpanded: !!view.expanded,
228
247
  disableDnd: !!this.options.disableDnd,
229
248
  accessor: this,
249
+ headerSize: (_a = view.headerSize) !== null && _a !== void 0 ? _a : HEADER_SIZE,
250
+ minimumBodySize: (_b = view.minimumSize) !== null && _b !== void 0 ? _b : MINIMUM_BODY_SIZE,
251
+ maximumBodySize: (_c = view.maximumSize) !== null && _c !== void 0 ? _c : MAXIMUM_BODY_SIZE,
230
252
  });
231
253
  this.doAddPanel(panel);
232
254
  queue.push(() => {
@@ -39,7 +39,6 @@ export interface IPaneviewPanel extends BasePanelViewExported<PaneviewPanelApiIm
39
39
  headerVisible: boolean;
40
40
  }
41
41
  export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelApiImpl> implements IPaneview, IPaneviewPanel {
42
- private readonly headerComponent;
43
42
  private readonly _onDidChangeExpansionState;
44
43
  onDidChangeExpansionState: Event<boolean>;
45
44
  private readonly _onDidChange;
@@ -47,7 +46,6 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
47
46
  size?: number;
48
47
  orthogonalSize?: number;
49
48
  }>;
50
- private readonly headerSize;
51
49
  private _orthogonalSize;
52
50
  private _size;
53
51
  private _minimumBodySize;
@@ -57,10 +55,11 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
57
55
  protected body?: HTMLElement;
58
56
  private bodyPart?;
59
57
  private headerPart?;
60
- private expandedSize;
61
58
  private animationTimer;
62
59
  private _orientation;
63
60
  private _headerVisible;
61
+ readonly headerSize: number;
62
+ readonly headerComponent: string | undefined;
64
63
  set orientation(value: Orientation);
65
64
  get orientation(): Orientation;
66
65
  get minimumSize(): number;
@@ -74,7 +73,17 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
74
73
  set maximumBodySize(value: number);
75
74
  get headerVisible(): boolean;
76
75
  set headerVisible(value: boolean);
77
- constructor(id: string, component: string, headerComponent: string | undefined, orientation: Orientation, isExpanded: boolean, isHeaderVisible: boolean);
76
+ constructor(options: {
77
+ id: string;
78
+ component: string;
79
+ headerComponent: string | undefined;
80
+ orientation: Orientation;
81
+ isExpanded: boolean;
82
+ isHeaderVisible: boolean;
83
+ headerSize: number;
84
+ minimumBodySize: number;
85
+ maximumBodySize: number;
86
+ });
78
87
  setVisible(isVisible: boolean): void;
79
88
  setActive(isActive: boolean): void;
80
89
  isExpanded(): boolean;