dockview-core 4.3.1 → 4.4.1

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 (51) hide show
  1. package/dist/cjs/api/component.api.d.ts +1 -0
  2. package/dist/cjs/api/component.api.js +7 -0
  3. package/dist/cjs/dockview/components/tab/tab.d.ts +1 -0
  4. package/dist/cjs/dockview/components/tab/tab.js +4 -1
  5. package/dist/cjs/dockview/components/titlebar/tabs.d.ts +1 -0
  6. package/dist/cjs/dockview/components/titlebar/tabs.js +16 -0
  7. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +2 -0
  8. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +4 -0
  9. package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +1 -0
  10. package/dist/cjs/dockview/components/titlebar/voidContainer.js +4 -1
  11. package/dist/cjs/dockview/dockviewComponent.d.ts +4 -0
  12. package/dist/cjs/dockview/dockviewComponent.js +81 -42
  13. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +10 -8
  14. package/dist/cjs/dockview/dockviewGroupPanelModel.js +3 -0
  15. package/dist/dockview-core.amd.js +61 -14
  16. package/dist/dockview-core.amd.js.map +1 -1
  17. package/dist/dockview-core.amd.min.js +2 -2
  18. package/dist/dockview-core.amd.min.js.map +1 -1
  19. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  20. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  21. package/dist/dockview-core.amd.noStyle.js +61 -14
  22. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  23. package/dist/dockview-core.cjs.js +61 -14
  24. package/dist/dockview-core.cjs.js.map +1 -1
  25. package/dist/dockview-core.esm.js +61 -14
  26. package/dist/dockview-core.esm.js.map +1 -1
  27. package/dist/dockview-core.esm.min.js +2 -2
  28. package/dist/dockview-core.esm.min.js.map +1 -1
  29. package/dist/dockview-core.js +61 -14
  30. package/dist/dockview-core.js.map +1 -1
  31. package/dist/dockview-core.min.js +2 -2
  32. package/dist/dockview-core.min.js.map +1 -1
  33. package/dist/dockview-core.min.noStyle.js +2 -2
  34. package/dist/dockview-core.min.noStyle.js.map +1 -1
  35. package/dist/dockview-core.noStyle.js +61 -14
  36. package/dist/dockview-core.noStyle.js.map +1 -1
  37. package/dist/esm/api/component.api.d.ts +1 -0
  38. package/dist/esm/api/component.api.js +3 -0
  39. package/dist/esm/dockview/components/tab/tab.d.ts +1 -0
  40. package/dist/esm/dockview/components/tab/tab.js +4 -1
  41. package/dist/esm/dockview/components/titlebar/tabs.d.ts +1 -0
  42. package/dist/esm/dockview/components/titlebar/tabs.js +5 -0
  43. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +2 -0
  44. package/dist/esm/dockview/components/titlebar/tabsContainer.js +4 -0
  45. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +1 -0
  46. package/dist/esm/dockview/components/titlebar/voidContainer.js +4 -1
  47. package/dist/esm/dockview/dockviewComponent.d.ts +4 -0
  48. package/dist/esm/dockview/dockviewComponent.js +37 -11
  49. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +10 -8
  50. package/dist/esm/dockview/dockviewGroupPanelModel.js +3 -0
  51. package/package.json +1 -1
@@ -419,6 +419,7 @@ export declare class DockviewApi implements CommonApi<SerializedDockview> {
419
419
  get onUnhandledDragOverEvent(): Event<DockviewDndOverlayEvent>;
420
420
  get onDidPopoutGroupSizeChange(): Event<PopoutGroupChangeSizeEvent>;
421
421
  get onDidPopoutGroupPositionChange(): Event<PopoutGroupChangePositionEvent>;
422
+ get onDidOpenPopoutWindowFail(): Event<void>;
422
423
  /**
423
424
  * All panel objects.
424
425
  */
@@ -574,6 +574,9 @@ export class DockviewApi {
574
574
  get onDidPopoutGroupPositionChange() {
575
575
  return this.component.onDidPopoutGroupPositionChange;
576
576
  }
577
+ get onDidOpenPopoutWindowFail() {
578
+ return this.component.onDidOpenPopoutWindowFail;
579
+ }
577
580
  /**
578
581
  * All panel objects.
579
582
  */
@@ -23,5 +23,6 @@ export declare class Tab extends CompositeDisposable {
23
23
  constructor(panel: IDockviewPanel, accessor: DockviewComponent, group: DockviewGroupPanel);
24
24
  setActive(isActive: boolean): void;
25
25
  setContent(part: ITabRenderer): void;
26
+ updateDragAndDropState(): void;
26
27
  dispose(): void;
27
28
  }
@@ -41,7 +41,7 @@ export class Tab extends CompositeDisposable {
41
41
  this._element = document.createElement('div');
42
42
  this._element.className = 'dv-tab';
43
43
  this._element.tabIndex = 0;
44
- this._element.draggable = true;
44
+ this._element.draggable = !this.accessor.options.disableDnd;
45
45
  toggleClass(this.element, 'dv-inactive-tab', true);
46
46
  const dragHandler = new TabDragHandler(this._element, this.accessor, this.group, this.panel);
47
47
  this.dropTarget = new Droptarget(this._element, {
@@ -89,6 +89,9 @@ export class Tab extends CompositeDisposable {
89
89
  this.content = part;
90
90
  this._element.appendChild(this.content.element);
91
91
  }
92
+ updateDragAndDropState() {
93
+ this._element.draggable = !this.accessor.options.disableDnd;
94
+ }
92
95
  dispose() {
93
96
  super.dispose();
94
97
  }
@@ -42,4 +42,5 @@ export declare class Tabs extends CompositeDisposable {
42
42
  delete(id: string): void;
43
43
  private addTab;
44
44
  private toggleDropdown;
45
+ updateDragAndDropState(): void;
45
46
  }
@@ -186,4 +186,9 @@ export class Tabs extends CompositeDisposable {
186
186
  .map((x) => x.value.panel.id);
187
187
  this._onOverflowTabsChange.fire({ tabs, reset: options.reset });
188
188
  }
189
+ updateDragAndDropState() {
190
+ for (const tab of this._tabs) {
191
+ tab.value.updateDragAndDropState();
192
+ }
193
+ }
189
194
  }
@@ -38,6 +38,7 @@ export interface ITabsContainer extends IDisposable {
38
38
  setPrefixActionsElement(element: HTMLElement | undefined): void;
39
39
  show(): void;
40
40
  hide(): void;
41
+ updateDragAndDropState(): void;
41
42
  }
42
43
  export declare class TabsContainer extends CompositeDisposable implements ITabsContainer {
43
44
  private readonly accessor;
@@ -82,4 +83,5 @@ export declare class TabsContainer extends CompositeDisposable implements ITabsC
82
83
  closePanel(panel: IDockviewPanel): void;
83
84
  private updateClassnames;
84
85
  private toggleDropdown;
86
+ updateDragAndDropState(): void;
85
87
  }
@@ -228,4 +228,8 @@ export class TabsContainer extends CompositeDisposable {
228
228
  });
229
229
  }));
230
230
  }
231
+ updateDragAndDropState() {
232
+ this.tabs.updateDragAndDropState();
233
+ this.voidContainer.updateDragAndDropState();
234
+ }
231
235
  }
@@ -15,4 +15,5 @@ export declare class VoidContainer extends CompositeDisposable {
15
15
  readonly onWillShowOverlay: Event<WillShowOverlayEvent>;
16
16
  get element(): HTMLElement;
17
17
  constructor(accessor: DockviewComponent, group: DockviewGroupPanel);
18
+ updateDragAndDropState(): void;
18
19
  }
@@ -17,7 +17,7 @@ export class VoidContainer extends CompositeDisposable {
17
17
  this.onDragStart = this._onDragStart.event;
18
18
  this._element = document.createElement('div');
19
19
  this._element.className = 'dv-void-container';
20
- this._element.draggable = true;
20
+ this._element.draggable = !this.accessor.options.disableDnd;
21
21
  this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'pointerdown', () => {
22
22
  this.accessor.doSetGroupActive(this.group);
23
23
  }));
@@ -40,4 +40,7 @@ export class VoidContainer extends CompositeDisposable {
40
40
  this._onDrop.fire(event);
41
41
  }), this.dropTarget);
42
42
  }
43
+ updateDragAndDropState() {
44
+ this._element.draggable = !this.accessor.options.disableDnd;
45
+ }
43
46
  }
@@ -140,6 +140,7 @@ export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
140
140
  readonly onDidMaximizedGroupChange: Event<DockviewMaximizedGroupChanged>;
141
141
  readonly onDidPopoutGroupSizeChange: Event<PopoutGroupChangeSizeEvent>;
142
142
  readonly onDidPopoutGroupPositionChange: Event<PopoutGroupChangePositionEvent>;
143
+ readonly onDidOpenPopoutWindowFail: Event<void>;
143
144
  readonly options: DockviewComponentOptions;
144
145
  updateOptions(options: DockviewOptions): void;
145
146
  moveGroupOrPanel(options: MoveGroupOrPanelOptions): void;
@@ -202,6 +203,8 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
202
203
  readonly onDidPopoutGroupSizeChange: Event<PopoutGroupChangeSizeEvent>;
203
204
  private readonly _onDidPopoutGroupPositionChange;
204
205
  readonly onDidPopoutGroupPositionChange: Event<PopoutGroupChangePositionEvent>;
206
+ private readonly _onDidOpenPopoutWindowFail;
207
+ readonly onDidOpenPopoutWindowFail: Event<void>;
205
208
  private readonly _onDidLayoutFromJSON;
206
209
  readonly onDidLayoutFromJSON: Event<void>;
207
210
  private readonly _onDidActivePanelChange;
@@ -236,6 +239,7 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
236
239
  private orthogonalize;
237
240
  updateOptions(options: Partial<DockviewComponentOptions>): void;
238
241
  layout(width: number, height: number, forceResize?: boolean | undefined): void;
242
+ private updateDragAndDropState;
239
243
  focus(): void;
240
244
  getGroupPanel(id: string): IDockviewPanel | undefined;
241
245
  setActivePanel(panel: IDockviewPanel): void;
@@ -109,6 +109,8 @@ export class DockviewComponent extends BaseGrid {
109
109
  this.onDidPopoutGroupSizeChange = this._onDidPopoutGroupSizeChange.event;
110
110
  this._onDidPopoutGroupPositionChange = new Emitter();
111
111
  this.onDidPopoutGroupPositionChange = this._onDidPopoutGroupPositionChange.event;
112
+ this._onDidOpenPopoutWindowFail = new Emitter();
113
+ this.onDidOpenPopoutWindowFail = this._onDidOpenPopoutWindowFail.event;
112
114
  this._onDidLayoutFromJSON = new Emitter();
113
115
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
114
116
  this._onDidActivePanelChange = new Emitter({ replay: true });
@@ -173,7 +175,7 @@ export class DockviewComponent extends BaseGrid {
173
175
  if (options.debug) {
174
176
  this.addDisposables(new StrictEventsSequencing(this));
175
177
  }
176
- 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(() => {
178
+ 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._onDidOpenPopoutWindowFail, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
177
179
  this.updateWatermark();
178
180
  }), this.onDidAdd((event) => {
179
181
  if (!this._moving) {
@@ -319,13 +321,6 @@ export class DockviewComponent extends BaseGrid {
319
321
  if (_window.isDisposed) {
320
322
  return false;
321
323
  }
322
- if (popoutContainer === null) {
323
- popoutWindowDisposable.dispose();
324
- return false;
325
- }
326
- const gready = document.createElement('div');
327
- gready.className = 'dv-overlay-render-container';
328
- const overlayRenderContainer = new OverlayRenderContainer(gready, this);
329
324
  const referenceGroup = (options === null || options === void 0 ? void 0 : options.referenceGroup)
330
325
  ? options.referenceGroup
331
326
  : itemToPopout instanceof DockviewPanel
@@ -333,7 +328,7 @@ export class DockviewComponent extends BaseGrid {
333
328
  : itemToPopout;
334
329
  const referenceLocation = itemToPopout.api.location.type;
335
330
  /**
336
- * The group that is being added doesn't already exist within the DOM, the most likely occurance
331
+ * The group that is being added doesn't already exist within the DOM, the most likely occurrence
337
332
  * of this case is when being called from the `fromJSON(...)` method
338
333
  */
339
334
  const isGroupAddedToDom = referenceGroup.element.parentElement !== null;
@@ -346,8 +341,28 @@ export class DockviewComponent extends BaseGrid {
346
341
  }
347
342
  else {
348
343
  group = this.createGroup({ id: groupId });
349
- this._onDidAddGroup.fire(group);
344
+ if (popoutContainer) {
345
+ this._onDidAddGroup.fire(group);
346
+ }
350
347
  }
348
+ if (popoutContainer === null) {
349
+ console.error('dockview: failed to create popout. perhaps you need to allow pop-ups for this website');
350
+ popoutWindowDisposable.dispose();
351
+ this._onDidOpenPopoutWindowFail.fire();
352
+ // if the popout window was blocked, we need to move the group back to the reference group
353
+ // and set it to visible
354
+ this.movingLock(() => moveGroupWithoutDestroying({
355
+ from: group,
356
+ to: referenceGroup,
357
+ }));
358
+ if (!referenceGroup.api.isVisible) {
359
+ referenceGroup.api.setVisible(true);
360
+ }
361
+ return false;
362
+ }
363
+ const gready = document.createElement('div');
364
+ gready.className = 'dv-overlay-render-container';
365
+ const overlayRenderContainer = new OverlayRenderContainer(gready, this);
351
366
  group.model.renderContainer = overlayRenderContainer;
352
367
  group.layout(_window.window.innerWidth, _window.window.innerHeight);
353
368
  let floatingBox;
@@ -504,7 +519,7 @@ export class DockviewComponent extends BaseGrid {
504
519
  return true;
505
520
  })
506
521
  .catch((err) => {
507
- console.error('dockview: failed to create popout window', err);
522
+ console.error('dockview: failed to create popout.', err);
508
523
  return false;
509
524
  });
510
525
  }
@@ -713,7 +728,12 @@ export class DockviewComponent extends BaseGrid {
713
728
  }
714
729
  }
715
730
  this.updateDropTargetModel(options);
731
+ const oldDisableDnd = this.options.disableDnd;
716
732
  this._options = Object.assign(Object.assign({}, this.options), options);
733
+ const newDisableDnd = this.options.disableDnd;
734
+ if (oldDisableDnd !== newDisableDnd) {
735
+ this.updateDragAndDropState();
736
+ }
717
737
  if ('theme' in options) {
718
738
  this.updateTheme();
719
739
  }
@@ -728,6 +748,12 @@ export class DockviewComponent extends BaseGrid {
728
748
  }
729
749
  }
730
750
  }
751
+ updateDragAndDropState() {
752
+ // Update draggable state for all tabs and void containers
753
+ for (const group of this.groups) {
754
+ group.model.updateDragAndDropState();
755
+ }
756
+ }
731
757
  focus() {
732
758
  var _a;
733
759
  (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
@@ -123,9 +123,16 @@ export type DockviewGroupLocation = {
123
123
  getWindow: () => Window;
124
124
  popoutUrl?: string;
125
125
  };
126
+ export interface WillShowOverlayLocationEventOptions {
127
+ readonly kind: DockviewGroupDropLocation;
128
+ readonly panel: IDockviewPanel | undefined;
129
+ readonly api: DockviewApi;
130
+ readonly group: DockviewGroupPanel | undefined;
131
+ getData: () => PanelTransfer | undefined;
132
+ }
126
133
  export declare class WillShowOverlayLocationEvent implements IDockviewEvent {
127
134
  private readonly event;
128
- private readonly options;
135
+ readonly options: WillShowOverlayLocationEventOptions;
129
136
  get kind(): DockviewGroupDropLocation;
130
137
  get nativeEvent(): DragEvent;
131
138
  get position(): Position;
@@ -135,13 +142,7 @@ export declare class WillShowOverlayLocationEvent implements IDockviewEvent {
135
142
  get group(): DockviewGroupPanel | undefined;
136
143
  preventDefault(): void;
137
144
  getData(): PanelTransfer | undefined;
138
- constructor(event: WillShowOverlayEvent, options: {
139
- kind: DockviewGroupDropLocation;
140
- panel: IDockviewPanel | undefined;
141
- api: DockviewApi;
142
- group: DockviewGroupPanel | undefined;
143
- getData: () => PanelTransfer | undefined;
144
- });
145
+ constructor(event: WillShowOverlayEvent, options: WillShowOverlayLocationEventOptions);
145
146
  }
146
147
  export declare class DockviewGroupPanelModel extends CompositeDisposable implements IDockviewGroupPanelModel {
147
148
  private readonly container;
@@ -252,6 +253,7 @@ export declare class DockviewGroupPanelModel extends CompositeDisposable impleme
252
253
  private updateContainer;
253
254
  canDisplayOverlay(event: DragEvent, position: Position, target: DockviewGroupDropLocation): boolean;
254
255
  private handleDropEvent;
256
+ updateDragAndDropState(): void;
255
257
  dispose(): void;
256
258
  }
257
259
  export {};
@@ -648,6 +648,9 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
648
648
  }));
649
649
  }
650
650
  }
651
+ updateDragAndDropState() {
652
+ this.tabsContainer.updateDragAndDropState();
653
+ }
651
654
  dispose() {
652
655
  var _a, _b, _c;
653
656
  super.dispose();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dockview-core",
3
- "version": "4.3.1",
3
+ "version": "4.4.1",
4
4
  "description": "Zero dependency layout manager supporting tabs, grids and splitviews",
5
5
  "keywords": [
6
6
  "splitview",