dockview-core 1.17.2 → 2.0.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 (122) hide show
  1. package/dist/cjs/api/component.api.d.ts +1 -1
  2. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +10 -8
  3. package/dist/cjs/api/dockviewGroupPanelApi.js +1 -0
  4. package/dist/cjs/api/dockviewPanelApi.d.ts +6 -14
  5. package/dist/cjs/api/dockviewPanelApi.js +5 -3
  6. package/dist/cjs/dnd/abstractDragHandler.js +1 -1
  7. package/dist/cjs/dnd/dnd.d.ts +2 -2
  8. package/dist/cjs/dnd/droptarget.js +4 -4
  9. package/dist/cjs/dockview/components/panel/content.d.ts +2 -2
  10. package/dist/cjs/dockview/components/panel/content.js +3 -1
  11. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +3 -3
  12. package/dist/cjs/dockview/components/tab/tab.js +4 -4
  13. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +5 -9
  14. package/dist/cjs/dockview/components/titlebar/voidContainer.js +1 -1
  15. package/dist/cjs/dockview/components/watermark/watermark.d.ts +1 -1
  16. package/dist/cjs/dockview/components/watermark/watermark.js +6 -6
  17. package/dist/cjs/dockview/dockviewComponent.d.ts +2 -3
  18. package/dist/cjs/dockview/dockviewComponent.js +66 -35
  19. package/dist/cjs/dockview/dockviewGroupPanel.js +16 -12
  20. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +3 -3
  21. package/dist/cjs/dockview/dockviewGroupPanelModel.js +7 -7
  22. package/dist/cjs/dockview/dockviewPanel.d.ts +4 -4
  23. package/dist/cjs/dockview/dockviewPanelModel.d.ts +1 -1
  24. package/dist/cjs/dockview/options.d.ts +8 -0
  25. package/dist/cjs/dom.d.ts +11 -1
  26. package/dist/cjs/dom.js +19 -1
  27. package/dist/cjs/gridview/basePanelView.d.ts +1 -1
  28. package/dist/cjs/gridview/branchNode.d.ts +1 -1
  29. package/dist/cjs/gridview/branchNode.js +1 -1
  30. package/dist/cjs/gridview/gridview.js +2 -2
  31. package/dist/cjs/gridview/gridviewPanel.d.ts +4 -0
  32. package/dist/cjs/gridview/gridviewPanel.js +60 -32
  33. package/dist/cjs/gridview/leafNode.d.ts +1 -1
  34. package/dist/cjs/index.d.ts +8 -9
  35. package/dist/cjs/index.js +14 -7
  36. package/dist/cjs/overlay/overlay.d.ts +3 -3
  37. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +1 -1
  38. package/dist/cjs/paneview/defaultPaneviewHeader.js +5 -3
  39. package/dist/cjs/paneview/paneview.d.ts +3 -3
  40. package/dist/cjs/paneview/paneview.js +3 -3
  41. package/dist/cjs/paneview/paneviewComponent.d.ts +2 -2
  42. package/dist/cjs/paneview/paneviewPanel.d.ts +2 -2
  43. package/dist/cjs/paneview/paneviewPanel.js +3 -3
  44. package/dist/cjs/popoutWindow.js +23 -16
  45. package/dist/cjs/splitview/splitview.d.ts +6 -6
  46. package/dist/cjs/splitview/splitview.js +18 -17
  47. package/dist/cjs/splitview/splitviewComponent.d.ts +2 -2
  48. package/dist/cjs/splitview/viewItem.d.ts +1 -1
  49. package/dist/cjs/svg.js +1 -1
  50. package/dist/dockview-core.amd.js +241 -169
  51. package/dist/dockview-core.amd.js.map +1 -1
  52. package/dist/dockview-core.amd.min.js +2 -2
  53. package/dist/dockview-core.amd.min.js.map +1 -1
  54. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  55. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  56. package/dist/dockview-core.amd.noStyle.js +240 -168
  57. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  58. package/dist/dockview-core.cjs.js +241 -169
  59. package/dist/dockview-core.cjs.js.map +1 -1
  60. package/dist/dockview-core.esm.js +242 -168
  61. package/dist/dockview-core.esm.js.map +1 -1
  62. package/dist/dockview-core.esm.min.js +2 -2
  63. package/dist/dockview-core.esm.min.js.map +1 -1
  64. package/dist/dockview-core.js +241 -169
  65. package/dist/dockview-core.js.map +1 -1
  66. package/dist/dockview-core.min.js +2 -2
  67. package/dist/dockview-core.min.js.map +1 -1
  68. package/dist/dockview-core.min.noStyle.js +2 -2
  69. package/dist/dockview-core.min.noStyle.js.map +1 -1
  70. package/dist/dockview-core.noStyle.js +240 -168
  71. package/dist/dockview-core.noStyle.js.map +1 -1
  72. package/dist/esm/api/component.api.d.ts +1 -1
  73. package/dist/esm/api/dockviewGroupPanelApi.d.ts +10 -8
  74. package/dist/esm/api/dockviewGroupPanelApi.js +1 -0
  75. package/dist/esm/api/dockviewPanelApi.d.ts +6 -14
  76. package/dist/esm/api/dockviewPanelApi.js +5 -3
  77. package/dist/esm/dnd/abstractDragHandler.js +1 -1
  78. package/dist/esm/dnd/dnd.d.ts +2 -2
  79. package/dist/esm/dnd/droptarget.js +4 -4
  80. package/dist/esm/dockview/components/panel/content.d.ts +2 -2
  81. package/dist/esm/dockview/components/panel/content.js +4 -2
  82. package/dist/esm/dockview/components/tab/defaultTab.d.ts +3 -3
  83. package/dist/esm/dockview/components/tab/tab.js +4 -4
  84. package/dist/esm/dockview/components/titlebar/tabsContainer.js +5 -9
  85. package/dist/esm/dockview/components/titlebar/voidContainer.js +1 -1
  86. package/dist/esm/dockview/components/watermark/watermark.d.ts +1 -1
  87. package/dist/esm/dockview/components/watermark/watermark.js +6 -6
  88. package/dist/esm/dockview/dockviewComponent.d.ts +2 -3
  89. package/dist/esm/dockview/dockviewComponent.js +65 -34
  90. package/dist/esm/dockview/dockviewGroupPanel.js +16 -12
  91. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +3 -3
  92. package/dist/esm/dockview/dockviewGroupPanelModel.js +7 -7
  93. package/dist/esm/dockview/dockviewPanel.d.ts +4 -4
  94. package/dist/esm/dockview/dockviewPanelModel.d.ts +1 -1
  95. package/dist/esm/dockview/options.d.ts +8 -0
  96. package/dist/esm/dom.d.ts +11 -1
  97. package/dist/esm/dom.js +14 -0
  98. package/dist/esm/gridview/basePanelView.d.ts +1 -1
  99. package/dist/esm/gridview/branchNode.d.ts +1 -1
  100. package/dist/esm/gridview/branchNode.js +1 -1
  101. package/dist/esm/gridview/gridview.js +2 -2
  102. package/dist/esm/gridview/gridviewPanel.d.ts +4 -0
  103. package/dist/esm/gridview/gridviewPanel.js +40 -12
  104. package/dist/esm/gridview/leafNode.d.ts +1 -1
  105. package/dist/esm/index.d.ts +8 -9
  106. package/dist/esm/index.js +5 -6
  107. package/dist/esm/overlay/overlay.d.ts +3 -3
  108. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +1 -1
  109. package/dist/esm/paneview/defaultPaneviewHeader.js +5 -3
  110. package/dist/esm/paneview/paneview.d.ts +3 -3
  111. package/dist/esm/paneview/paneview.js +3 -3
  112. package/dist/esm/paneview/paneviewComponent.d.ts +2 -2
  113. package/dist/esm/paneview/paneviewPanel.d.ts +2 -2
  114. package/dist/esm/paneview/paneviewPanel.js +3 -3
  115. package/dist/esm/popoutWindow.js +24 -17
  116. package/dist/esm/splitview/splitview.d.ts +6 -6
  117. package/dist/esm/splitview/splitview.js +18 -17
  118. package/dist/esm/splitview/splitviewComponent.d.ts +2 -2
  119. package/dist/esm/splitview/viewItem.d.ts +1 -1
  120. package/dist/esm/svg.js +1 -1
  121. package/dist/styles/dockview.css +114 -125
  122. package/package.json +1 -1
@@ -512,7 +512,7 @@ export declare class DockviewApi implements CommonApi<SerializedDockview> {
512
512
  id: string;
513
513
  window: Window;
514
514
  }) => void;
515
- }): Promise<void>;
515
+ }): Promise<boolean>;
516
516
  setGap(gap: number | undefined): void;
517
517
  updateOptions(options: Partial<DockviewComponentOptions>): void;
518
518
  /**
@@ -4,6 +4,14 @@ import { DockviewGroupPanel } from '../dockview/dockviewGroupPanel';
4
4
  import { DockviewGroupChangeEvent, DockviewGroupLocation } from '../dockview/dockviewGroupPanelModel';
5
5
  import { Emitter, Event } from '../events';
6
6
  import { GridviewPanelApi, GridviewPanelApiImpl } from './gridviewPanelApi';
7
+ export interface DockviewGroupMoveParams {
8
+ group?: DockviewGroupPanel;
9
+ position?: Position;
10
+ /**
11
+ * The index to place the panel within a group, only applicable if the placement is within an existing group
12
+ */
13
+ index?: number;
14
+ }
7
15
  export interface DockviewGroupPanelApi extends GridviewPanelApi {
8
16
  readonly onDidLocationChange: Event<DockviewGroupPanelFloatingChangeEvent>;
9
17
  readonly onDidActivePanelChange: Event<DockviewGroupChangeEvent>;
@@ -12,10 +20,7 @@ export interface DockviewGroupPanelApi extends GridviewPanelApi {
12
20
  * If you require the Window object
13
21
  */
14
22
  getWindow(): Window;
15
- moveTo(options: {
16
- group?: DockviewGroupPanel;
17
- position?: Position;
18
- }): void;
23
+ moveTo(options: DockviewGroupMoveParams): void;
19
24
  maximize(): void;
20
25
  isMaximized(): boolean;
21
26
  exitMaximized(): void;
@@ -36,10 +41,7 @@ export declare class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
36
41
  constructor(id: string, accessor: DockviewComponent);
37
42
  close(): void;
38
43
  getWindow(): Window;
39
- moveTo(options: {
40
- group?: DockviewGroupPanel;
41
- position?: Position;
42
- }): void;
44
+ moveTo(options: DockviewGroupMoveParams): void;
43
45
  maximize(): void;
44
46
  isMaximized(): boolean;
45
47
  exitMaximized(): void;
@@ -47,6 +47,7 @@ export class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
47
47
  position: options.group
48
48
  ? (_c = options.position) !== null && _c !== void 0 ? _c : 'center'
49
49
  : 'center',
50
+ index: options.index,
50
51
  },
51
52
  });
52
53
  }
@@ -3,9 +3,8 @@ import { GridviewPanelApiImpl, GridviewPanelApi } from './gridviewPanelApi';
3
3
  import { DockviewGroupPanel } from '../dockview/dockviewGroupPanel';
4
4
  import { DockviewPanel } from '../dockview/dockviewPanel';
5
5
  import { DockviewComponent } from '../dockview/dockviewComponent';
6
- import { Position } from '../dnd/droptarget';
7
6
  import { DockviewPanelRenderer } from '../overlay/overlayRenderContainer';
8
- import { DockviewGroupPanelFloatingChangeEvent } from './dockviewGroupPanelApi';
7
+ import { DockviewGroupMoveParams, DockviewGroupPanelFloatingChangeEvent } from './dockviewGroupPanelApi';
9
8
  import { DockviewGroupLocation } from '../dockview/dockviewGroupPanelModel';
10
9
  export interface TitleEvent {
11
10
  readonly title: string;
@@ -18,6 +17,7 @@ export interface ActiveGroupEvent {
18
17
  }
19
18
  export interface GroupChangedEvent {
20
19
  }
20
+ export type DockviewPanelMoveParams = DockviewGroupMoveParams;
21
21
  export interface DockviewPanelApi extends Omit<GridviewPanelApi, 'setVisible' | 'onDidConstraintsChange' | 'setConstraints'> {
22
22
  /**
23
23
  * The id of the tab component renderer
@@ -38,11 +38,7 @@ export interface DockviewPanelApi extends Omit<GridviewPanelApi, 'setVisible' |
38
38
  close(): void;
39
39
  setTitle(title: string): void;
40
40
  setRenderer(renderer: DockviewPanelRenderer): void;
41
- moveTo(options: {
42
- group: DockviewGroupPanel;
43
- position?: Position;
44
- index?: number;
45
- }): void;
41
+ moveTo(options: DockviewPanelMoveParams): void;
46
42
  maximize(): void;
47
43
  isMaximized(): boolean;
48
44
  exitMaximized(): void;
@@ -52,10 +48,10 @@ export interface DockviewPanelApi extends Omit<GridviewPanelApi, 'setVisible' |
52
48
  getWindow(): Window;
53
49
  }
54
50
  export declare class DockviewPanelApiImpl extends GridviewPanelApiImpl implements DockviewPanelApi {
55
- private panel;
51
+ private readonly panel;
56
52
  private readonly accessor;
57
53
  private _group;
58
- private _tabComponent;
54
+ private readonly _tabComponent;
59
55
  readonly _onDidTitleChange: Emitter<TitleEvent>;
60
56
  readonly onDidTitleChange: Event<TitleEvent>;
61
57
  private readonly _onDidActiveGroupChange;
@@ -76,11 +72,7 @@ export declare class DockviewPanelApiImpl extends GridviewPanelApiImpl implement
76
72
  get tabComponent(): string | undefined;
77
73
  constructor(panel: DockviewPanel, group: DockviewGroupPanel, accessor: DockviewComponent, component: string, tabComponent?: string);
78
74
  getWindow(): Window;
79
- moveTo(options: {
80
- group: DockviewGroupPanel;
81
- position?: Position;
82
- index?: number;
83
- }): void;
75
+ moveTo(options: DockviewPanelMoveParams): void;
84
76
  setTitle(title: string): void;
85
77
  setRenderer(renderer: DockviewPanelRenderer): void;
86
78
  close(): void;
@@ -56,12 +56,14 @@ export class DockviewPanelApiImpl extends GridviewPanelApiImpl {
56
56
  return this.group.api.getWindow();
57
57
  }
58
58
  moveTo(options) {
59
- var _a;
59
+ var _a, _b;
60
60
  this.accessor.moveGroupOrPanel({
61
61
  from: { groupId: this._group.id, panelId: this.panel.id },
62
62
  to: {
63
- group: options.group,
64
- position: (_a = options.position) !== null && _a !== void 0 ? _a : 'center',
63
+ group: (_a = options.group) !== null && _a !== void 0 ? _a : this._group,
64
+ position: options.group
65
+ ? (_b = options.position) !== null && _b !== void 0 ? _b : 'center'
66
+ : 'center',
65
67
  index: options.index,
66
68
  },
67
69
  });
@@ -44,7 +44,7 @@ export class DragHandler extends CompositeDisposable {
44
44
  * dnd logic. You can see the code at
45
45
  * https://github.com/react-dnd/react-dnd/blob/main/packages/backend-html5/src/HTML5BackendImpl.ts#L542
46
46
  */
47
- event.dataTransfer.setData('text/plain', '__dockview_internal_drag_event__');
47
+ event.dataTransfer.setData('text/plain', '');
48
48
  }
49
49
  }
50
50
  }), addDisposableListener(this.el, 'dragend', () => {
@@ -7,8 +7,8 @@ export interface IDragAndDropObserverCallbacks {
7
7
  onDragOver?: (e: DragEvent) => void;
8
8
  }
9
9
  export declare class DragAndDropObserver extends CompositeDisposable {
10
- private element;
11
- private callbacks;
10
+ private readonly element;
11
+ private readonly callbacks;
12
12
  private target;
13
13
  constructor(element: HTMLElement, callbacks: IDragAndDropObserverCallbacks);
14
14
  onDragEnter(e: DragEvent): void;
@@ -117,12 +117,12 @@ export class Droptarget extends CompositeDisposable {
117
117
  this.markAsUsed(e);
118
118
  if (!this.targetElement) {
119
119
  this.targetElement = document.createElement('div');
120
- this.targetElement.className = 'drop-target-dropzone';
120
+ this.targetElement.className = 'dv-drop-target-dropzone';
121
121
  this.overlayElement = document.createElement('div');
122
- this.overlayElement.className = 'drop-target-selection';
122
+ this.overlayElement.className = 'dv-drop-target-selection';
123
123
  this._state = 'center';
124
124
  this.targetElement.appendChild(this.overlayElement);
125
- this.element.classList.add('drop-target');
125
+ this.element.classList.add('dv-drop-target');
126
126
  this.element.append(this.targetElement);
127
127
  }
128
128
  this.toggleClasses(quadrant, width, height);
@@ -260,7 +260,7 @@ export class Droptarget extends CompositeDisposable {
260
260
  this.element.removeChild(this.targetElement);
261
261
  this.targetElement = undefined;
262
262
  this.overlayElement = undefined;
263
- this.element.classList.remove('drop-target');
263
+ this.element.classList.remove('dv-drop-target');
264
264
  }
265
265
  }
266
266
  }
@@ -21,9 +21,9 @@ export interface IContentContainer extends IDisposable {
21
21
  export declare class ContentContainer extends CompositeDisposable implements IContentContainer {
22
22
  private readonly accessor;
23
23
  private readonly group;
24
- private _element;
24
+ private readonly _element;
25
25
  private panel;
26
- private disposable;
26
+ private readonly disposable;
27
27
  private readonly _onDidFocus;
28
28
  readonly onDidFocus: Event<void>;
29
29
  private readonly _onDidBlur;
@@ -1,5 +1,5 @@
1
1
  import { CompositeDisposable, MutableDisposable, } from '../../../lifecycle';
2
- import { Emitter, } from '../../../events';
2
+ import { Emitter } from '../../../events';
3
3
  import { trackFocus } from '../../../dom';
4
4
  import { Droptarget } from '../../../dnd/droptarget';
5
5
  import { getPanelData } from '../../../dnd/dataTransfer';
@@ -17,7 +17,7 @@ export class ContentContainer extends CompositeDisposable {
17
17
  this._onDidBlur = new Emitter();
18
18
  this.onDidBlur = this._onDidBlur.event;
19
19
  this._element = document.createElement('div');
20
- this._element.className = 'content-container';
20
+ this._element.className = 'dv-content-container';
21
21
  this._element.tabIndex = -1;
22
22
  this.addDisposables(this._onDidFocus, this._onDidBlur);
23
23
  this.dropTarget = new Droptarget(this.element, {
@@ -90,6 +90,8 @@ export class ContentContainer extends CompositeDisposable {
90
90
  referenceContainer: this,
91
91
  });
92
92
  break;
93
+ default:
94
+ throw new Error(`dockview: invalid renderer type '${panel.api.renderer}'`);
93
95
  }
94
96
  if (doRender) {
95
97
  const focusTracker = trackFocus(container);
@@ -1,9 +1,9 @@
1
1
  import { CompositeDisposable } from '../../../lifecycle';
2
2
  import { ITabRenderer, GroupPanelPartInitParameters } from '../../types';
3
3
  export declare class DefaultTab extends CompositeDisposable implements ITabRenderer {
4
- private _element;
5
- private _content;
6
- private action;
4
+ private readonly _element;
5
+ private readonly _content;
6
+ private readonly action;
7
7
  private _title;
8
8
  get element(): HTMLElement;
9
9
  constructor();
@@ -38,10 +38,10 @@ export class Tab extends CompositeDisposable {
38
38
  this._onDragStart = new Emitter();
39
39
  this.onDragStart = this._onDragStart.event;
40
40
  this._element = document.createElement('div');
41
- this._element.className = 'tab';
41
+ this._element.className = 'dv-tab';
42
42
  this._element.tabIndex = 0;
43
43
  this._element.draggable = true;
44
- toggleClass(this.element, 'inactive-tab', true);
44
+ toggleClass(this.element, 'dv-inactive-tab', true);
45
45
  const dragHandler = new TabDragHandler(this._element, this.accessor, this.group, this.panel);
46
46
  this.dropTarget = new Droptarget(this._element, {
47
47
  acceptedTargetZones: ['center'],
@@ -74,8 +74,8 @@ export class Tab extends CompositeDisposable {
74
74
  }), this.dropTarget);
75
75
  }
76
76
  setActive(isActive) {
77
- toggleClass(this.element, 'active-tab', isActive);
78
- toggleClass(this.element, 'inactive-tab', !isActive);
77
+ toggleClass(this.element, 'dv-active-tab', isActive);
78
+ toggleClass(this.element, 'dv-inactive-tab', !isActive);
79
79
  }
80
80
  setContent(part) {
81
81
  if (this.content) {
@@ -92,16 +92,16 @@ export class TabsContainer extends CompositeDisposable {
92
92
  this._onWillShowOverlay = new Emitter();
93
93
  this.onWillShowOverlay = this._onWillShowOverlay.event;
94
94
  this._element = document.createElement('div');
95
- this._element.className = 'tabs-and-actions-container';
95
+ this._element.className = 'dv-tabs-and-actions-container';
96
96
  toggleClass(this._element, 'dv-full-width-single-tab', this.accessor.options.singleTabMode === 'fullwidth');
97
97
  this.rightActionsContainer = document.createElement('div');
98
- this.rightActionsContainer.className = 'right-actions-container';
98
+ this.rightActionsContainer.className = 'dv-right-actions-container';
99
99
  this.leftActionsContainer = document.createElement('div');
100
- this.leftActionsContainer.className = 'left-actions-container';
100
+ this.leftActionsContainer.className = 'dv-left-actions-container';
101
101
  this.preActionsContainer = document.createElement('div');
102
- this.preActionsContainer.className = 'pre-actions-container';
102
+ this.preActionsContainer.className = 'dv-pre-actions-container';
103
103
  this.tabContainer = document.createElement('div');
104
- this.tabContainer.className = 'tabs-container';
104
+ this.tabContainer.className = 'dv-tabs-container';
105
105
  this.voidContainer = new VoidContainer(this.accessor, this.group);
106
106
  this._element.appendChild(this.preActionsContainer);
107
107
  this._element.appendChild(this.tabContainer);
@@ -190,14 +190,10 @@ export class TabsContainer extends CompositeDisposable {
190
190
  });
191
191
  }
192
192
  openPanel(panel, index = this.tabs.length) {
193
- var _a;
194
193
  if (this.tabs.find((tab) => tab.value.panel.id === panel.id)) {
195
194
  return;
196
195
  }
197
196
  const tab = new Tab(panel, this.accessor, this.group);
198
- if (!((_a = panel.view) === null || _a === void 0 ? void 0 : _a.tab)) {
199
- throw new Error('invalid header component');
200
- }
201
197
  tab.setContent(panel.view.tab);
202
198
  const disposable = new CompositeDisposable(tab.onDragStart((event) => {
203
199
  this._onTabDragStart.fire({ nativeEvent: event, panel });
@@ -17,7 +17,7 @@ export class VoidContainer extends CompositeDisposable {
17
17
  this._onDragStart = new Emitter();
18
18
  this.onDragStart = this._onDragStart.event;
19
19
  this._element = document.createElement('div');
20
- this._element.className = 'void-container';
20
+ this._element.className = 'dv-void-container';
21
21
  this._element.tabIndex = 0;
22
22
  this._element.draggable = true;
23
23
  this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'pointerdown', () => {
@@ -1,7 +1,7 @@
1
1
  import { IWatermarkRenderer, WatermarkRendererInitParameters } from '../../types';
2
2
  import { CompositeDisposable } from '../../../lifecycle';
3
3
  export declare class Watermark extends CompositeDisposable implements IWatermarkRenderer {
4
- private _element;
4
+ private readonly _element;
5
5
  private _group;
6
6
  private _api;
7
7
  get element(): HTMLElement;
@@ -9,19 +9,19 @@ export class Watermark extends CompositeDisposable {
9
9
  constructor() {
10
10
  super();
11
11
  this._element = document.createElement('div');
12
- this._element.className = 'watermark';
12
+ this._element.className = 'dv-watermark';
13
13
  const title = document.createElement('div');
14
- title.className = 'watermark-title';
14
+ title.className = 'dv-watermark-title';
15
15
  const emptySpace = document.createElement('span');
16
16
  emptySpace.style.flexGrow = '1';
17
17
  const content = document.createElement('div');
18
- content.className = 'watermark-content';
18
+ content.className = 'dv-watermark-content';
19
19
  this._element.appendChild(title);
20
20
  this._element.appendChild(content);
21
21
  const actionsContainer = document.createElement('div');
22
- actionsContainer.className = 'actions-container';
22
+ actionsContainer.className = 'dv-actions-container';
23
23
  const closeAnchor = document.createElement('div');
24
- closeAnchor.className = 'close-action';
24
+ closeAnchor.className = 'dv-close-action';
25
25
  closeAnchor.appendChild(createCloseButton());
26
26
  actionsContainer.appendChild(closeAnchor);
27
27
  title.appendChild(emptySpace);
@@ -41,6 +41,6 @@ export class Watermark extends CompositeDisposable {
41
41
  }
42
42
  render() {
43
43
  const isOneGroup = !!(this._api && this._api.size <= 1);
44
- toggleClass(this.element, 'has-actions', isOneGroup);
44
+ toggleClass(this.element, 'dv-has-actions', isOneGroup);
45
45
  }
46
46
  }
@@ -129,7 +129,7 @@ export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
129
129
  id: string;
130
130
  window: Window;
131
131
  }) => void;
132
- }): Promise<void>;
132
+ }): Promise<boolean>;
133
133
  }
134
134
  export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> implements IDockviewComponent {
135
135
  private readonly nextGroupId;
@@ -180,7 +180,6 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
180
180
  get floatingGroups(): DockviewFloatingGroupPanel[];
181
181
  constructor(parentElement: HTMLElement, options: DockviewComponentOptions);
182
182
  addPopoutGroup(itemToPopout: DockviewPanel | DockviewGroupPanel, options?: {
183
- skipRemoveGroup?: boolean;
184
183
  position?: Box;
185
184
  popoutUrl?: string;
186
185
  onDidOpen?: (event: {
@@ -192,7 +191,7 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
192
191
  window: Window;
193
192
  }) => void;
194
193
  overridePopoutGroup?: DockviewGroupPanel;
195
- }): Promise<void>;
194
+ }): Promise<boolean>;
196
195
  addFloatingGroup(item: DockviewPanel | DockviewGroupPanel, options?: FloatingGroupOptionsInternal): void;
197
196
  private orthogonalize;
198
197
  updateOptions(options: Partial<DockviewComponentOptions>): void;
@@ -256,9 +256,6 @@ export class DockviewComponent extends BaseGrid {
256
256
  }
257
257
  const box = getBox();
258
258
  const groupId = (_b = (_a = options === null || options === void 0 ? void 0 : options.overridePopoutGroup) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : this.getNextGroupId();
259
- if (itemToPopout.api.location.type === 'grid') {
260
- itemToPopout.api.setVisible(false);
261
- }
262
259
  const _window = new PopoutWindow(`${this.id}-${groupId}`, // unique id
263
260
  theme !== null && theme !== void 0 ? theme : '', {
264
261
  url: (_c = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _c !== void 0 ? _c : '/popout.html',
@@ -277,11 +274,11 @@ export class DockviewComponent extends BaseGrid {
277
274
  .then((popoutContainer) => {
278
275
  var _a;
279
276
  if (_window.isDisposed) {
280
- return;
277
+ return false;
281
278
  }
282
279
  if (popoutContainer === null) {
283
280
  popoutWindowDisposable.dispose();
284
- return;
281
+ return false;
285
282
  }
286
283
  const gready = document.createElement('div');
287
284
  gready.className = 'dv-overlay-render-container';
@@ -290,30 +287,40 @@ export class DockviewComponent extends BaseGrid {
290
287
  ? itemToPopout.group
291
288
  : itemToPopout;
292
289
  const referenceLocation = itemToPopout.api.location.type;
293
- const group = (_a = options === null || options === void 0 ? void 0 : options.overridePopoutGroup) !== null && _a !== void 0 ? _a : this.createGroup({ id: groupId });
290
+ /**
291
+ * The group that is being added doesn't already exist within the DOM, the most likely occurance
292
+ * of this case is when being called from the `fromJSON(...)` method
293
+ */
294
+ const isGroupAddedToDom = referenceGroup.element.parentElement !== null;
295
+ const group = !isGroupAddedToDom
296
+ ? referenceGroup
297
+ : (_a = options === null || options === void 0 ? void 0 : options.overridePopoutGroup) !== null && _a !== void 0 ? _a : this.createGroup({ id: groupId });
294
298
  group.model.renderContainer = overlayRenderContainer;
295
- if (!(options === null || options === void 0 ? void 0 : options.overridePopoutGroup)) {
299
+ group.layout(_window.window.innerWidth, _window.window.innerHeight);
300
+ if (!this._groups.has(group.api.id)) {
296
301
  this._onDidAddGroup.fire(group);
297
302
  }
298
- if (itemToPopout instanceof DockviewPanel) {
299
- this.movingLock(() => {
300
- const panel = referenceGroup.model.removePanel(itemToPopout);
301
- group.model.openPanel(panel);
302
- });
303
- }
304
- else {
305
- this.movingLock(() => moveGroupWithoutDestroying({
306
- from: referenceGroup,
307
- to: group,
308
- }));
309
- switch (referenceLocation) {
310
- case 'grid':
311
- referenceGroup.api.setVisible(false);
312
- break;
313
- case 'floating':
314
- case 'popout':
315
- this.removeGroup(referenceGroup);
316
- break;
303
+ if (!(options === null || options === void 0 ? void 0 : options.overridePopoutGroup) && isGroupAddedToDom) {
304
+ if (itemToPopout instanceof DockviewPanel) {
305
+ this.movingLock(() => {
306
+ const panel = referenceGroup.model.removePanel(itemToPopout);
307
+ group.model.openPanel(panel);
308
+ });
309
+ }
310
+ else {
311
+ this.movingLock(() => moveGroupWithoutDestroying({
312
+ from: referenceGroup,
313
+ to: group,
314
+ }));
315
+ switch (referenceLocation) {
316
+ case 'grid':
317
+ referenceGroup.api.setVisible(false);
318
+ break;
319
+ case 'floating':
320
+ case 'popout':
321
+ this.removeGroup(referenceGroup);
322
+ break;
323
+ }
317
324
  }
318
325
  }
319
326
  popoutContainer.classList.add('dv-dockview');
@@ -324,6 +331,10 @@ export class DockviewComponent extends BaseGrid {
324
331
  type: 'popout',
325
332
  getWindow: () => _window.window,
326
333
  };
334
+ if (isGroupAddedToDom &&
335
+ itemToPopout.api.location.type === 'grid') {
336
+ itemToPopout.api.setVisible(false);
337
+ }
327
338
  this.doSetGroupAndPanelActive(group);
328
339
  popoutWindowDisposable.addDisposables(group.api.onDidActiveChange((event) => {
329
340
  var _a;
@@ -338,9 +349,13 @@ export class DockviewComponent extends BaseGrid {
338
349
  const value = {
339
350
  window: _window,
340
351
  popoutGroup: group,
341
- referenceGroup: this.getPanel(referenceGroup.id)
342
- ? referenceGroup.id
343
- : undefined,
352
+ referenceGroup: !isGroupAddedToDom
353
+ ? undefined
354
+ : referenceGroup
355
+ ? this.getPanel(referenceGroup.id)
356
+ ? referenceGroup.id
357
+ : undefined
358
+ : undefined,
344
359
  disposable: {
345
360
  dispose: () => {
346
361
  popoutWindowDisposable.dispose();
@@ -355,9 +370,10 @@ export class DockviewComponent extends BaseGrid {
355
370
  * window dimensions
356
371
  */
357
372
  addDisposableWindowListener(_window.window, 'resize', () => {
358
- group.layout(window.innerWidth, window.innerHeight);
373
+ group.layout(_window.window.innerWidth, _window.window.innerHeight);
359
374
  }), overlayRenderContainer, Disposable.from(() => {
360
- if (this.getPanel(referenceGroup.id)) {
375
+ if (isGroupAddedToDom &&
376
+ this.getPanel(referenceGroup.id)) {
361
377
  this.movingLock(() => moveGroupWithoutDestroying({
362
378
  from: group,
363
379
  to: referenceGroup,
@@ -372,21 +388,27 @@ export class DockviewComponent extends BaseGrid {
372
388
  }
373
389
  }
374
390
  else if (this.getPanel(group.id)) {
375
- const removedGroup = this.doRemoveGroup(group, {
391
+ this.doRemoveGroup(group, {
376
392
  skipDispose: true,
377
393
  skipActive: true,
394
+ skipPopoutReturn: true,
378
395
  });
396
+ const removedGroup = group;
379
397
  removedGroup.model.renderContainer =
380
398
  this.overlayRenderContainer;
381
399
  removedGroup.model.location = { type: 'grid' };
382
400
  returnedGroup = removedGroup;
401
+ this.doAddGroup(removedGroup, [0]);
402
+ this.doSetGroupAndPanelActive(removedGroup);
383
403
  }
384
404
  }));
385
405
  this._popoutGroups.push(value);
386
406
  this.updateWatermark();
407
+ return true;
387
408
  })
388
409
  .catch((err) => {
389
410
  console.error('dockview: failed to create popout window', err);
411
+ return false;
390
412
  });
391
413
  }
392
414
  addFloatingGroup(item, options) {
@@ -490,7 +512,7 @@ export class DockviewComponent extends BaseGrid {
490
512
  : (_c = (_b = this.options.floatingGroupBounds) === null || _b === void 0 ? void 0 : _b.minimumWidthWithinViewport) !== null && _c !== void 0 ? _c : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE, minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
491
513
  ? undefined
492
514
  : (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumHeightWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE }));
493
- const el = group.element.querySelector('.void-container');
515
+ const el = group.element.querySelector('.dv-void-container');
494
516
  if (!el) {
495
517
  throw new Error('failed to find drag handle');
496
518
  }
@@ -775,7 +797,6 @@ export class DockviewComponent extends BaseGrid {
775
797
  this.addPopoutGroup((_c = (gridReferenceGroup
776
798
  ? this.getPanel(gridReferenceGroup)
777
799
  : undefined)) !== null && _c !== void 0 ? _c : group, {
778
- skipRemoveGroup: true,
779
800
  position: position !== null && position !== void 0 ? position : undefined,
780
801
  overridePopoutGroup: gridReferenceGroup
781
802
  ? group
@@ -793,6 +814,7 @@ export class DockviewComponent extends BaseGrid {
793
814
  }
794
815
  }
795
816
  catch (err) {
817
+ console.error('dockview: failed to deserialize layout. Reverting changes', err);
796
818
  /**
797
819
  * Takes all the successfully created groups and remove all of their panels.
798
820
  */
@@ -860,11 +882,13 @@ export class DockviewComponent extends BaseGrid {
860
882
  width: options.initialWidth,
861
883
  height: options.initialHeight,
862
884
  };
885
+ let index;
863
886
  if (options.position) {
864
887
  if (isPanelOptionsWithPanel(options.position)) {
865
888
  const referencePanel = typeof options.position.referencePanel === 'string'
866
889
  ? this.getGroupPanel(options.position.referencePanel)
867
890
  : options.position.referencePanel;
891
+ index = options.position.index;
868
892
  if (!referencePanel) {
869
893
  throw new Error(`referencePanel '${options.position.referencePanel}' does not exist`);
870
894
  }
@@ -875,6 +899,7 @@ export class DockviewComponent extends BaseGrid {
875
899
  typeof options.position.referenceGroup === 'string'
876
900
  ? (_a = this._groups.get(options.position.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
877
901
  : options.position.referenceGroup;
902
+ index = options.position.index;
878
903
  if (!referenceGroup) {
879
904
  throw new Error(`referenceGroup '${options.position.referenceGroup}' does not exist`);
880
905
  }
@@ -885,6 +910,7 @@ export class DockviewComponent extends BaseGrid {
885
910
  group.model.openPanel(panel, {
886
911
  skipSetActive: options.inactive,
887
912
  skipSetGroupActive: options.inactive,
913
+ index,
888
914
  });
889
915
  if (!options.inactive) {
890
916
  this.doSetGroupAndPanelActive(group);
@@ -914,6 +940,7 @@ export class DockviewComponent extends BaseGrid {
914
940
  group.model.openPanel(panel, {
915
941
  skipSetActive: options.inactive,
916
942
  skipSetGroupActive: options.inactive,
943
+ index,
917
944
  });
918
945
  }
919
946
  else if (referenceGroup.api.location.type === 'floating' ||
@@ -922,6 +949,7 @@ export class DockviewComponent extends BaseGrid {
922
949
  referenceGroup.model.openPanel(panel, {
923
950
  skipSetActive: options.inactive,
924
951
  skipSetGroupActive: options.inactive,
952
+ index,
925
953
  });
926
954
  referenceGroup.api.setSize({
927
955
  width: initial === null || initial === void 0 ? void 0 : initial.width,
@@ -942,6 +970,7 @@ export class DockviewComponent extends BaseGrid {
942
970
  group.model.openPanel(panel, {
943
971
  skipSetActive: options.inactive,
944
972
  skipSetGroupActive: options.inactive,
973
+ index,
945
974
  });
946
975
  if (!options.inactive) {
947
976
  this.doSetGroupAndPanelActive(group);
@@ -960,6 +989,7 @@ export class DockviewComponent extends BaseGrid {
960
989
  group.model.openPanel(panel, {
961
990
  skipSetActive: options.inactive,
962
991
  skipSetGroupActive: options.inactive,
992
+ index,
963
993
  });
964
994
  }
965
995
  else {
@@ -970,6 +1000,7 @@ export class DockviewComponent extends BaseGrid {
970
1000
  group.model.openPanel(panel, {
971
1001
  skipSetActive: options.inactive,
972
1002
  skipSetGroupActive: options.inactive,
1003
+ index,
973
1004
  });
974
1005
  if (!options.inactive) {
975
1006
  this.doSetGroupAndPanelActive(group);