dockview 1.4.3 → 1.5.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/README.md +1 -1
  2. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +1 -0
  3. package/dist/cjs/dockview/components/tab/defaultTab.js +6 -3
  4. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
  5. package/dist/cjs/dockview/components/watermark/watermark.js +3 -1
  6. package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -1
  7. package/dist/cjs/dockview/defaultGroupPanelView.d.ts +1 -5
  8. package/dist/cjs/dockview/defaultGroupPanelView.js +5 -20
  9. package/dist/cjs/dockview/defaultGroupPanelView.js.map +1 -1
  10. package/dist/cjs/dockview/dockviewComponent.d.ts +1 -1
  11. package/dist/cjs/dockview/dockviewComponent.js +7 -18
  12. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  13. package/dist/cjs/dockview/options.d.ts +5 -0
  14. package/dist/cjs/groupview/groupview.d.ts +16 -15
  15. package/dist/cjs/groupview/groupview.js +24 -33
  16. package/dist/cjs/groupview/groupview.js.map +1 -1
  17. package/dist/cjs/groupview/tab.d.ts +1 -0
  18. package/dist/cjs/groupview/tab.js +2 -1
  19. package/dist/cjs/groupview/tab.js.map +1 -1
  20. package/dist/cjs/groupview/titlebar/tabsContainer.js +1 -1
  21. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  22. package/dist/cjs/groupview/types.d.ts +0 -4
  23. package/dist/cjs/index.d.ts +1 -0
  24. package/dist/cjs/index.js.map +1 -1
  25. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +3 -0
  26. package/dist/cjs/paneview/defaultPaneviewHeader.js +29 -5
  27. package/dist/cjs/paneview/defaultPaneviewHeader.js.map +1 -1
  28. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +3 -1
  29. package/dist/cjs/paneview/draggablePaneviewPanel.js +24 -9
  30. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  31. package/dist/cjs/paneview/options.d.ts +2 -0
  32. package/dist/cjs/paneview/paneviewComponent.d.ts +12 -1
  33. package/dist/cjs/paneview/paneviewComponent.js +13 -1
  34. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  35. package/dist/cjs/react/deserializer.js +13 -5
  36. package/dist/cjs/react/deserializer.js.map +1 -1
  37. package/dist/cjs/react/dockview/defaultTab.d.ts +4 -0
  38. package/dist/cjs/react/dockview/defaultTab.js +73 -0
  39. package/dist/cjs/react/dockview/defaultTab.js.map +1 -0
  40. package/dist/cjs/react/dockview/dockview.d.ts +3 -0
  41. package/dist/cjs/react/dockview/dockview.js +45 -3
  42. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  43. package/dist/cjs/react/dockview/groupControlsRenderer.d.ts +43 -0
  44. package/dist/cjs/react/dockview/groupControlsRenderer.js +87 -0
  45. package/dist/cjs/react/dockview/groupControlsRenderer.js.map +1 -0
  46. package/dist/cjs/react/dockview/reactContentPart.d.ts +1 -16
  47. package/dist/cjs/react/dockview/reactContentPart.js +2 -18
  48. package/dist/cjs/react/dockview/reactContentPart.js.map +1 -1
  49. package/dist/cjs/react/dockview/reactHeaderPart.d.ts +2 -0
  50. package/dist/cjs/react/dockview/reactHeaderPart.js +4 -0
  51. package/dist/cjs/react/dockview/reactHeaderPart.js.map +1 -1
  52. package/dist/cjs/react/index.d.ts +2 -2
  53. package/dist/cjs/react/index.js +1 -2
  54. package/dist/cjs/react/index.js.map +1 -1
  55. package/dist/cjs/react/paneview/paneview.d.ts +2 -0
  56. package/dist/cjs/react/paneview/paneview.js +9 -0
  57. package/dist/cjs/react/paneview/paneview.js.map +1 -1
  58. package/dist/cjs/react/react.d.ts +1 -0
  59. package/dist/cjs/react/react.js +12 -2
  60. package/dist/cjs/react/react.js.map +1 -1
  61. package/dist/cjs/react/svg.d.ts +3 -0
  62. package/dist/cjs/react/svg.js +36 -0
  63. package/dist/cjs/react/svg.js.map +1 -0
  64. package/dist/cjs/svg.d.ts +3 -0
  65. package/dist/cjs/svg.js +44 -0
  66. package/dist/cjs/svg.js.map +1 -0
  67. package/dist/dockview.amd.js +327 -113
  68. package/dist/dockview.amd.min.js +2 -2
  69. package/dist/dockview.amd.min.noStyle.js +2 -2
  70. package/dist/dockview.amd.noStyle.js +326 -112
  71. package/dist/dockview.cjs.js +327 -113
  72. package/dist/dockview.esm.js +327 -112
  73. package/dist/dockview.esm.min.js +2 -2
  74. package/dist/dockview.js +327 -113
  75. package/dist/dockview.min.js +2 -2
  76. package/dist/dockview.min.noStyle.js +2 -2
  77. package/dist/dockview.noStyle.js +326 -112
  78. package/dist/esm/dockview/components/tab/defaultTab.d.ts +1 -0
  79. package/dist/esm/dockview/components/tab/defaultTab.js +5 -2
  80. package/dist/esm/dockview/components/watermark/watermark.js +3 -1
  81. package/dist/esm/dockview/defaultGroupPanelView.d.ts +1 -5
  82. package/dist/esm/dockview/defaultGroupPanelView.js +5 -16
  83. package/dist/esm/dockview/dockviewComponent.d.ts +1 -1
  84. package/dist/esm/dockview/dockviewComponent.js +7 -18
  85. package/dist/esm/dockview/options.d.ts +5 -0
  86. package/dist/esm/groupview/groupview.d.ts +16 -15
  87. package/dist/esm/groupview/groupview.js +23 -32
  88. package/dist/esm/groupview/tab.d.ts +1 -0
  89. package/dist/esm/groupview/tab.js +2 -1
  90. package/dist/esm/groupview/titlebar/tabsContainer.js +1 -1
  91. package/dist/esm/groupview/types.d.ts +0 -4
  92. package/dist/esm/index.d.ts +1 -0
  93. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +3 -0
  94. package/dist/esm/paneview/defaultPaneviewHeader.js +29 -5
  95. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +3 -1
  96. package/dist/esm/paneview/draggablePaneviewPanel.js +24 -9
  97. package/dist/esm/paneview/options.d.ts +2 -0
  98. package/dist/esm/paneview/paneviewComponent.d.ts +12 -1
  99. package/dist/esm/paneview/paneviewComponent.js +9 -1
  100. package/dist/esm/react/deserializer.js +13 -5
  101. package/dist/esm/react/dockview/defaultTab.d.ts +4 -0
  102. package/dist/esm/react/dockview/defaultTab.js +34 -0
  103. package/dist/esm/react/dockview/dockview.d.ts +3 -0
  104. package/dist/esm/react/dockview/dockview.js +30 -1
  105. package/dist/esm/react/dockview/groupControlsRenderer.d.ts +43 -0
  106. package/dist/esm/react/dockview/groupControlsRenderer.js +68 -0
  107. package/dist/esm/react/dockview/reactContentPart.d.ts +1 -16
  108. package/dist/esm/react/dockview/reactContentPart.js +2 -14
  109. package/dist/esm/react/dockview/reactHeaderPart.d.ts +2 -0
  110. package/dist/esm/react/dockview/reactHeaderPart.js +4 -0
  111. package/dist/esm/react/index.d.ts +2 -2
  112. package/dist/esm/react/index.js +1 -2
  113. package/dist/esm/react/paneview/paneview.d.ts +2 -0
  114. package/dist/esm/react/paneview/paneview.js +9 -0
  115. package/dist/esm/react/react.d.ts +1 -0
  116. package/dist/esm/react/react.js +12 -2
  117. package/dist/esm/react/svg.d.ts +3 -0
  118. package/dist/esm/react/svg.js +7 -0
  119. package/dist/esm/svg.d.ts +3 -0
  120. package/dist/esm/svg.js +31 -0
  121. package/dist/styles/dockview.css +155 -42
  122. package/package.json +2 -2
@@ -2,6 +2,7 @@ import { CompositeDisposable } from '../../../lifecycle';
2
2
  import { ITabRenderer, GroupPanelPartInitParameters } from '../../../groupview/types';
3
3
  import { PanelUpdateEvent } from '../../../panel/types';
4
4
  import { GroupPanel } from '../../../groupview/groupviewPanel';
5
+ export declare const DEFAULT_TAB_IDENTIFIER = "__default__tab__";
5
6
  export declare class DefaultTab extends CompositeDisposable implements ITabRenderer {
6
7
  private _element;
7
8
  private _isPanelVisible;
@@ -1,5 +1,7 @@
1
1
  import { CompositeDisposable } from '../../../lifecycle';
2
2
  import { addDisposableListener } from '../../../events';
3
+ import { createCloseButton } from '../../../svg';
4
+ export const DEFAULT_TAB_IDENTIFIER = '__default__tab__';
3
5
  export class DefaultTab extends CompositeDisposable {
4
6
  constructor() {
5
7
  super();
@@ -19,8 +21,9 @@ export class DefaultTab extends CompositeDisposable {
19
21
  this._list = document.createElement('ul');
20
22
  this._list.className = 'tab-list';
21
23
  //
22
- this.action = document.createElement('a');
24
+ this.action = document.createElement('div');
23
25
  this.action.className = 'tab-action';
26
+ this.action.appendChild(createCloseButton());
24
27
  //
25
28
  this._element.appendChild(this._content);
26
29
  this._element.appendChild(this._actionContainer);
@@ -36,7 +39,7 @@ export class DefaultTab extends CompositeDisposable {
36
39
  return this._element;
37
40
  }
38
41
  get id() {
39
- return '__DEFAULT_TAB__';
42
+ return DEFAULT_TAB_IDENTIFIER;
40
43
  }
41
44
  update(event) {
42
45
  this.params = Object.assign(Object.assign({}, this.params), event.params);
@@ -2,6 +2,7 @@ import { ActionContainer } from '../../../actionbar/actionsContainer';
2
2
  import { addDisposableListener } from '../../../events';
3
3
  import { toggleClass } from '../../../dom';
4
4
  import { CompositeDisposable } from '../../../lifecycle';
5
+ import { createCloseButton } from '../../../svg';
5
6
  export class Watermark extends CompositeDisposable {
6
7
  constructor() {
7
8
  super();
@@ -18,8 +19,9 @@ export class Watermark extends CompositeDisposable {
18
19
  const actions = new ActionContainer();
19
20
  title.appendChild(emptySpace);
20
21
  title.appendChild(actions.element);
21
- const closeAnchor = document.createElement('a');
22
+ const closeAnchor = document.createElement('div');
22
23
  closeAnchor.className = 'close-action';
24
+ closeAnchor.appendChild(createCloseButton());
23
25
  actions.add(closeAnchor);
24
26
  this.addDisposables(addDisposableListener(closeAnchor, 'click', (ev) => {
25
27
  var _a;
@@ -1,11 +1,10 @@
1
- import { GroupPanelPartInitParameters, IActionsRenderer, IContentRenderer, ITabRenderer } from '../groupview/types';
1
+ import { GroupPanelPartInitParameters, IContentRenderer, ITabRenderer } from '../groupview/types';
2
2
  import { GroupPanel } from '../groupview/groupviewPanel';
3
3
  import { IDisposable } from '../lifecycle';
4
4
  import { GroupPanelUpdateEvent } from '../groupview/groupPanel';
5
5
  export interface IGroupPanelView extends IDisposable {
6
6
  readonly content: IContentRenderer;
7
7
  readonly tab?: ITabRenderer;
8
- readonly actions?: IActionsRenderer;
9
8
  update(event: GroupPanelUpdateEvent): void;
10
9
  layout(width: number, height: number): void;
11
10
  init(params: GroupPanelPartInitParameters): void;
@@ -15,14 +14,11 @@ export interface IGroupPanelView extends IDisposable {
15
14
  export declare class DefaultGroupPanelView implements IGroupPanelView {
16
15
  private readonly _content;
17
16
  private readonly _tab;
18
- private readonly _actions;
19
17
  get content(): IContentRenderer;
20
18
  get tab(): ITabRenderer;
21
- get actions(): IActionsRenderer | undefined;
22
19
  constructor(renderers: {
23
20
  content: IContentRenderer;
24
21
  tab?: ITabRenderer;
25
- actions?: IActionsRenderer;
26
22
  });
27
23
  init(params: GroupPanelPartInitParameters): void;
28
24
  updateParentGroup(group: GroupPanel, isPanelVisible: boolean): void;
@@ -4,16 +4,6 @@ export class DefaultGroupPanelView {
4
4
  var _a;
5
5
  this._content = renderers.content;
6
6
  this._tab = (_a = renderers.tab) !== null && _a !== void 0 ? _a : new DefaultTab();
7
- this._actions =
8
- renderers.actions ||
9
- (this.content.actions
10
- ? {
11
- element: this.content.actions,
12
- dispose: () => {
13
- //
14
- },
15
- }
16
- : undefined);
17
7
  }
18
8
  get content() {
19
9
  return this._content;
@@ -21,9 +11,6 @@ export class DefaultGroupPanelView {
21
11
  get tab() {
22
12
  return this._tab;
23
13
  }
24
- get actions() {
25
- return this._actions;
26
- }
27
14
  init(params) {
28
15
  this.content.init(Object.assign(Object.assign({}, params), { tab: this.tab }));
29
16
  this.tab.init(params);
@@ -41,15 +28,17 @@ export class DefaultGroupPanelView {
41
28
  this.tab.update(event);
42
29
  }
43
30
  toJSON() {
31
+ let tab = this.tab instanceof DefaultTab ? undefined : this.tab.toJSON();
32
+ if (tab && Object.keys(tab).length === 0) {
33
+ tab = undefined;
34
+ }
44
35
  return {
45
36
  content: this.content.toJSON(),
46
- tab: this.tab instanceof DefaultTab ? undefined : this.tab.toJSON(),
37
+ tab,
47
38
  };
48
39
  }
49
40
  dispose() {
50
- var _a;
51
41
  this.content.dispose();
52
42
  this.tab.dispose();
53
- (_a = this.actions) === null || _a === void 0 ? void 0 : _a.dispose();
54
43
  }
55
44
  }
@@ -34,7 +34,7 @@ export interface SerializedDockview {
34
34
  tabHeight?: number;
35
35
  };
36
36
  }
37
- export declare type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents' | 'showDndOverlay' | 'watermarkFrameworkComponent'>;
37
+ export declare type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents' | 'showDndOverlay' | 'watermarkFrameworkComponent' | 'defaultTabComponent' | 'createGroupControlElement'>;
38
38
  export interface DockviewDropEvent extends GroupviewDropEvent {
39
39
  api: DockviewApi;
40
40
  group: GroupPanel;
@@ -12,7 +12,6 @@ import { DockviewApi } from '../api/component.api';
12
12
  import { MouseEventKind } from '../groupview/tab';
13
13
  import { Orientation } from '../splitview/core/splitview';
14
14
  import { DefaultTab } from './components/tab/defaultTab';
15
- import { GroupChangeKind2, } from '../groupview/groupview';
16
15
  import { GroupPanel } from '../groupview/groupviewPanel';
17
16
  import { DefaultGroupPanelView } from './defaultGroupPanelView';
18
17
  const nextGroupId = sequentialNumberGenerator();
@@ -426,22 +425,12 @@ export class DockviewComponent extends BaseGrid {
426
425
  this.moveGroupOrPanel(view, groupId, itemId, target, index);
427
426
  }), view.model.onDidDrop((event) => {
428
427
  this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: view }));
429
- }), view.model.onDidGroupChange((event) => {
430
- switch (event.kind) {
431
- case GroupChangeKind2.ADD_PANEL:
432
- if (event.panel) {
433
- this._onDidAddPanel.fire(event.panel);
434
- }
435
- break;
436
- case GroupChangeKind2.REMOVE_PANEL:
437
- if (event.panel) {
438
- this._onDidRemovePanel.fire(event.panel);
439
- }
440
- break;
441
- case GroupChangeKind2.PANEL_ACTIVE:
442
- this._onDidActivePanelChange.fire(event.panel);
443
- break;
444
- }
428
+ }), view.model.onDidAddPanel((event) => {
429
+ this._onDidAddPanel.fire(event.panel);
430
+ }), view.model.onDidRemovePanel((event) => {
431
+ this._onDidRemovePanel.fire(event.panel);
432
+ }), view.model.onDidActivePanelChange((event) => {
433
+ this._onDidActivePanelChange.fire(event.panel);
445
434
  }));
446
435
  this._groups.set(view.id, { value: view, disposable });
447
436
  }
@@ -456,7 +445,7 @@ export class DockviewComponent extends BaseGrid {
456
445
  createPanel(options, group) {
457
446
  const view = new DefaultGroupPanelView({
458
447
  content: this.createContentComponent(options.id, options.component),
459
- tab: this.createTabComponent(options.id, options.tabComponent),
448
+ tab: this.createTabComponent(options.id, options.tabComponent || this.options.defaultTabComponent),
460
449
  });
461
450
  const panel = new DockviewGroupPanel(options.id, this, this._api, group);
462
451
  panel.init({
@@ -7,6 +7,8 @@ import { GroupPanel } from '../groupview/groupviewPanel';
7
7
  import { ISplitviewStyles, Orientation } from '../splitview/core/splitview';
8
8
  import { FrameworkFactory } from '../types';
9
9
  import { DockviewDropTargets } from '../groupview/dnd';
10
+ import { PanelTransfer } from '../dnd/dataTransfer';
11
+ import { IGroupControlRenderer } from '../react/dockview/groupControlsRenderer';
10
12
  export interface GroupPanelFrameworkComponentFactory {
11
13
  content: FrameworkFactory<IContentRenderer>;
12
14
  tab: FrameworkFactory<ITabRenderer>;
@@ -43,6 +45,7 @@ export interface DockviewDndOverlayEvent {
43
45
  nativeEvent: DragEvent;
44
46
  target: DockviewDropTargets;
45
47
  group: GroupPanel;
48
+ getData: () => PanelTransfer | undefined;
46
49
  }
47
50
  export interface DockviewComponentOptions extends DockviewRenderFunctions {
48
51
  watermarkComponent?: WatermarkConstructor;
@@ -51,7 +54,9 @@ export interface DockviewComponentOptions extends DockviewRenderFunctions {
51
54
  tabHeight?: number;
52
55
  orientation?: Orientation;
53
56
  styles?: ISplitviewStyles;
57
+ defaultTabComponent?: string;
54
58
  showDndOverlay?: (event: DockviewDndOverlayEvent) => boolean;
59
+ createGroupControlElement?: (group: GroupPanel) => IGroupControlRenderer;
55
60
  }
56
61
  export interface PanelOptions {
57
62
  component: string;
@@ -9,11 +9,6 @@ import { PanelInitParameters, PanelUpdateEvent } from '../panel/types';
9
9
  import { IDockviewPanel } from './groupPanel';
10
10
  import { GroupPanel } from './groupviewPanel';
11
11
  import { DockviewDropTargets } from './dnd';
12
- export declare enum GroupChangeKind2 {
13
- ADD_PANEL = "ADD_PANEL",
14
- REMOVE_PANEL = "REMOVE_PANEL",
15
- PANEL_ACTIVE = "PANEL_ACTIVE"
16
- }
17
12
  export interface DndService {
18
13
  canDisplayOverlay(group: IGroupview, event: DragEvent, target: DockviewDropTargets): boolean;
19
14
  onDrop(group: IGroupview, event: DragEvent, position: Position, index?: number): void;
@@ -49,14 +44,13 @@ export interface GroupPanelViewState extends CoreGroupOptions {
49
44
  id: string;
50
45
  }
51
46
  export interface GroupviewChangeEvent {
52
- readonly kind: GroupChangeKind2;
53
- readonly panel?: IDockviewPanel;
47
+ readonly panel: IDockviewPanel;
54
48
  }
55
49
  export interface GroupviewDropEvent {
56
- nativeEvent: DragEvent;
57
- position: Position;
50
+ readonly nativeEvent: DragEvent;
51
+ readonly position: Position;
52
+ readonly index?: number;
58
53
  getData(): PanelTransfer | undefined;
59
- index?: number;
60
54
  }
61
55
  export interface IHeader {
62
56
  hidden: boolean;
@@ -70,7 +64,9 @@ export interface IGroupview extends IDisposable, IGridPanelView {
70
64
  readonly header: IHeader;
71
65
  readonly isContentFocused: boolean;
72
66
  readonly onDidDrop: Event<GroupviewDropEvent>;
73
- readonly onDidGroupChange: Event<GroupviewChangeEvent>;
67
+ readonly onDidAddPanel: Event<GroupviewChangeEvent>;
68
+ readonly onDidRemovePanel: Event<GroupviewChangeEvent>;
69
+ readonly onDidActivePanelChange: Event<GroupviewChangeEvent>;
74
70
  readonly onMove: Event<GroupMoveEvent>;
75
71
  locked: boolean;
76
72
  isPanelActive: (panel: IDockviewPanel) => boolean;
@@ -102,10 +98,11 @@ export declare class Groupview extends CompositeDisposable implements IGroupview
102
98
  private readonly tabsContainer;
103
99
  private readonly contentContainer;
104
100
  private readonly dropTarget;
105
- private _activePanel?;
101
+ private _activePanel;
106
102
  private watermark?;
107
103
  private _isGroupActive;
108
104
  private _locked;
105
+ private _control;
109
106
  private mostRecentlyUsed;
110
107
  private readonly _onDidChange;
111
108
  readonly onDidChange: Event<IViewSize | undefined>;
@@ -114,10 +111,14 @@ export declare class Groupview extends CompositeDisposable implements IGroupview
114
111
  private _panels;
115
112
  private readonly _onMove;
116
113
  readonly onMove: Event<GroupMoveEvent>;
117
- private readonly _onDidGroupChange;
118
- readonly onDidGroupChange: Event<GroupviewChangeEvent>;
119
114
  private readonly _onDidDrop;
120
115
  readonly onDidDrop: Event<GroupviewDropEvent>;
116
+ private readonly _onDidAddPanel;
117
+ readonly onDidAddPanel: Event<GroupviewChangeEvent>;
118
+ private readonly _onDidRemovePanel;
119
+ readonly onDidRemovePanel: Event<GroupviewChangeEvent>;
120
+ private readonly _onDidActivePanelChange;
121
+ readonly onDidActivePanelChange: Event<GroupviewChangeEvent>;
121
122
  get element(): HTMLElement;
122
123
  get activePanel(): IDockviewPanel | undefined;
123
124
  get locked(): boolean;
@@ -160,7 +161,7 @@ export declare class Groupview extends CompositeDisposable implements IGroupview
160
161
  closePanel(panel: IDockviewPanel): void;
161
162
  private doClose;
162
163
  isPanelActive(panel: IDockviewPanel): boolean;
163
- updateActions(): void;
164
+ updateActions(element: HTMLElement | undefined): void;
164
165
  setActive(isGroupActive: boolean, skipFocus?: boolean, force?: boolean): void;
165
166
  layout(width: number, height: number): void;
166
167
  private _removePanel;
@@ -7,12 +7,6 @@ import { CompositeDisposable } from '../lifecycle';
7
7
  import { ContentContainer } from './panel/content';
8
8
  import { TabsContainer } from './titlebar/tabsContainer';
9
9
  import { DockviewDropTargets } from './dnd';
10
- export var GroupChangeKind2;
11
- (function (GroupChangeKind2) {
12
- GroupChangeKind2["ADD_PANEL"] = "ADD_PANEL";
13
- GroupChangeKind2["REMOVE_PANEL"] = "REMOVE_PANEL";
14
- GroupChangeKind2["PANEL_ACTIVE"] = "PANEL_ACTIVE";
15
- })(GroupChangeKind2 || (GroupChangeKind2 = {}));
16
10
  export class Groupview extends CompositeDisposable {
17
11
  constructor(container, accessor, id, options, parent) {
18
12
  super();
@@ -31,12 +25,15 @@ export class Groupview extends CompositeDisposable {
31
25
  this._panels = [];
32
26
  this._onMove = new Emitter();
33
27
  this.onMove = this._onMove.event;
34
- this._onDidGroupChange = new Emitter();
35
- this.onDidGroupChange = this._onDidGroupChange.event;
36
28
  this._onDidDrop = new Emitter();
37
29
  this.onDidDrop = this._onDidDrop.event;
30
+ this._onDidAddPanel = new Emitter();
31
+ this.onDidAddPanel = this._onDidAddPanel.event;
32
+ this._onDidRemovePanel = new Emitter();
33
+ this.onDidRemovePanel = this._onDidRemovePanel.event;
34
+ this._onDidActivePanelChange = new Emitter();
35
+ this.onDidActivePanelChange = this._onDidActivePanelChange.event;
38
36
  this.container.classList.add('groupview');
39
- this.addDisposables(this._onMove, this._onDidGroupChange, this._onDidChange, this._onDidDrop);
40
37
  this.tabsContainer = new TabsContainer(this.accessor, this.parent, {
41
38
  tabHeight: options.tabHeight,
42
39
  });
@@ -48,7 +45,7 @@ export class Groupview extends CompositeDisposable {
48
45
  return false;
49
46
  }
50
47
  const data = getPanelData();
51
- if (data) {
48
+ if (data && data.viewId === this.accessor.id) {
52
49
  const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
53
50
  return !groupHasOnePanelAndIsActiveDragElement;
54
51
  }
@@ -58,7 +55,7 @@ export class Groupview extends CompositeDisposable {
58
55
  container.append(this.tabsContainer.element, this.contentContainer.element);
59
56
  this.header.hidden = !!options.hideHeader;
60
57
  this.locked = !!options.locked;
61
- this.addDisposables(this._onMove, this._onDidGroupChange, this.tabsContainer.onDrop((event) => {
58
+ this.addDisposables(this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.tabsContainer.onDrop((event) => {
62
59
  this.handleDropEvent(event.event, Position.Center, event.index);
63
60
  }), this.contentContainer.onDidFocus(() => {
64
61
  this.accessor.doSetGroupActive(this.parent, true);
@@ -130,6 +127,15 @@ export class Groupview extends CompositeDisposable {
130
127
  // correctly initialized
131
128
  this.setActive(this.isActive, true, true);
132
129
  this.updateContainer();
130
+ if (this.accessor.options.createGroupControlElement) {
131
+ this._control = this.accessor.options.createGroupControlElement(this.parent);
132
+ this.addDisposables(this._control);
133
+ this._control.init({
134
+ containerApi: new DockviewApi(this.accessor),
135
+ api: this.parent.api,
136
+ });
137
+ this.tabsContainer.setActionElement(this._control.element);
138
+ }
133
139
  }
134
140
  indexOf(panel) {
135
141
  return this.tabsContainer.indexOf(panel.id);
@@ -260,14 +266,8 @@ export class Groupview extends CompositeDisposable {
260
266
  isPanelActive(panel) {
261
267
  return this._activePanel === panel;
262
268
  }
263
- updateActions() {
264
- var _a, _b;
265
- if (this.isActive && ((_b = (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.view) === null || _b === void 0 ? void 0 : _b.actions)) {
266
- this.tabsContainer.setActionElement(this._activePanel.view.actions.element);
267
- }
268
- else {
269
- this.tabsContainer.setActionElement(undefined);
270
- }
269
+ updateActions(element) {
270
+ this.tabsContainer.setActionElement(element);
271
271
  }
272
272
  setActive(isGroupActive, skipFocus = false, force = false) {
273
273
  var _a, _b;
@@ -323,10 +323,7 @@ export class Groupview extends CompositeDisposable {
323
323
  if (this.mostRecentlyUsed.includes(panel)) {
324
324
  this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
325
325
  }
326
- this._onDidGroupChange.fire({
327
- kind: GroupChangeKind2.REMOVE_PANEL,
328
- panel,
329
- });
326
+ this._onDidRemovePanel.fire({ panel });
330
327
  }
331
328
  doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
332
329
  const existingPanel = this._panels.indexOf(panel);
@@ -343,10 +340,7 @@ export class Groupview extends CompositeDisposable {
343
340
  }
344
341
  this.updateMru(panel);
345
342
  this.panels.splice(index, 0, panel);
346
- this._onDidGroupChange.fire({
347
- kind: GroupChangeKind2.ADD_PANEL,
348
- panel,
349
- });
343
+ this._onDidAddPanel.fire({ panel });
350
344
  }
351
345
  doSetActivePanel(panel) {
352
346
  this._activePanel = panel;
@@ -354,10 +348,7 @@ export class Groupview extends CompositeDisposable {
354
348
  this.tabsContainer.setActivePanel(panel);
355
349
  panel.layout(this._width, this._height);
356
350
  this.updateMru(panel);
357
- this._onDidGroupChange.fire({
358
- kind: GroupChangeKind2.PANEL_ACTIVE,
359
- panel,
360
- });
351
+ this._onDidActivePanelChange.fire({ panel });
361
352
  }
362
353
  }
363
354
  updateMru(panel) {
@@ -367,7 +358,6 @@ export class Groupview extends CompositeDisposable {
367
358
  this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
368
359
  }
369
360
  updateContainer() {
370
- this.updateActions();
371
361
  toggleClass(this.container, 'empty', this.isEmpty);
372
362
  this.panels.forEach((panel) => panel.updateParentGroup(this.parent, this.isActive));
373
363
  if (this.isEmpty && !this.watermark) {
@@ -404,6 +394,7 @@ export class Groupview extends CompositeDisposable {
404
394
  nativeEvent: event,
405
395
  target,
406
396
  group: this.accessor.getPanel(this.id),
397
+ getData: getPanelData,
407
398
  });
408
399
  }
409
400
  return false;
@@ -25,6 +25,7 @@ export interface ITab {
25
25
  }
26
26
  export declare class Tab extends CompositeDisposable implements ITab {
27
27
  readonly panelId: string;
28
+ private readonly accessor;
28
29
  private readonly group;
29
30
  private readonly _element;
30
31
  private readonly droptarget;
@@ -14,6 +14,7 @@ export class Tab extends CompositeDisposable {
14
14
  constructor(panelId, accessor, group) {
15
15
  super();
16
16
  this.panelId = panelId;
17
+ this.accessor = accessor;
17
18
  this.group = group;
18
19
  this._onChanged = new Emitter();
19
20
  this.onChanged = this._onChanged.event;
@@ -64,7 +65,7 @@ export class Tab extends CompositeDisposable {
64
65
  validOverlays: 'none',
65
66
  canDisplayOverlay: (event) => {
66
67
  const data = getPanelData();
67
- if (data) {
68
+ if (data && this.accessor.id === data.viewId) {
68
69
  return this.panelId !== data.panelId;
69
70
  }
70
71
  return this.group.model.canDisplayOverlay(event, DockviewDropTargets.Tab);
@@ -33,7 +33,7 @@ export class TabsContainer extends CompositeDisposable {
33
33
  canDisplayOverlay: (event) => {
34
34
  var _a;
35
35
  const data = getPanelData();
36
- if (data) {
36
+ if (data && this.accessor.id === data.viewId) {
37
37
  // don't show the overlay if the tab being dragged is the last panel of this group
38
38
  return ((_a = last(this.tabs)) === null || _a === void 0 ? void 0 : _a.value.panelId) !== data.panelId;
39
39
  }
@@ -1,4 +1,3 @@
1
- import { IDisposable } from '../lifecycle';
2
1
  import { IDockviewComponent } from '../dockview/dockviewComponent';
3
2
  import { DockviewPanelApi } from '../api/groupPanelApi';
4
3
  import { PanelInitParameters, IPanel } from '../panel/types';
@@ -32,9 +31,6 @@ export interface ITabRenderer extends IPanel {
32
31
  init(parameters: GroupPanelPartInitParameters): void;
33
32
  updateParentGroup(group: GroupPanel, isPanelVisible: boolean): void;
34
33
  }
35
- export interface IActionsRenderer extends IDisposable {
36
- readonly element: HTMLElement;
37
- }
38
34
  export interface IContentRenderer extends IPanel {
39
35
  readonly element: HTMLElement;
40
36
  readonly actions?: HTMLElement;
@@ -13,6 +13,7 @@ export * from './dockview/dockviewComponent';
13
13
  export * from './gridview/gridviewComponent';
14
14
  export * from './splitview/splitviewComponent';
15
15
  export * from './paneview/paneviewComponent';
16
+ export { PaneviewComponentOptions } from './paneview/options';
16
17
  export * from './gridview/gridviewPanel';
17
18
  export * from './splitview/splitviewPanel';
18
19
  export * from './paneview/paneviewPanel';
@@ -3,6 +3,8 @@ import { CompositeDisposable } from '../lifecycle';
3
3
  import { PanelUpdateEvent } from '../panel/types';
4
4
  import { IPaneHeaderPart, PanePanelInitParameter } from './paneviewPanel';
5
5
  export declare class DefaultHeader extends CompositeDisposable implements IPaneHeaderPart {
6
+ private readonly _expandedIcon;
7
+ private readonly _collapsedIcon;
6
8
  private readonly disposable;
7
9
  private readonly _element;
8
10
  private readonly _content;
@@ -13,6 +15,7 @@ export declare class DefaultHeader extends CompositeDisposable implements IPaneH
13
15
  init(params: PanePanelInitParameter & {
14
16
  api: PaneviewPanelApiImpl;
15
17
  }): void;
18
+ private updateIcon;
16
19
  update(_params: PanelUpdateEvent): void;
17
20
  dispose(): void;
18
21
  }
@@ -1,15 +1,19 @@
1
1
  import { addDisposableListener } from '../events';
2
2
  import { CompositeDisposable, MutableDisposable } from '../lifecycle';
3
3
  import { toggleClass } from '../dom';
4
+ import { createChevronRightButton, createExpandMoreButton } from '../svg';
4
5
  export class DefaultHeader extends CompositeDisposable {
5
6
  constructor() {
6
7
  super();
8
+ this._expandedIcon = createExpandMoreButton();
9
+ this._collapsedIcon = createChevronRightButton();
7
10
  this.disposable = new MutableDisposable();
8
11
  this.apiRef = { api: null };
9
12
  this._element = document.createElement('div');
10
13
  this.element.className = 'default-header';
11
14
  this._content = document.createElement('span');
12
- this._expander = document.createElement('a');
15
+ this._expander = document.createElement('div');
16
+ this._expander.className = 'dockview-pane-header-icon';
13
17
  this.element.appendChild(this._expander);
14
18
  this.element.appendChild(this._content);
15
19
  this.addDisposables(addDisposableListener(this._element, 'click', () => {
@@ -23,12 +27,32 @@ export class DefaultHeader extends CompositeDisposable {
23
27
  init(params) {
24
28
  this.apiRef.api = params.api;
25
29
  this._content.textContent = params.title;
26
- this._expander.textContent = '▼';
27
- toggleClass(this._expander, 'collapsed', !params.api.isExpanded);
28
- this.disposable.value = params.api.onDidExpansionChange((e) => {
29
- toggleClass(this._expander, 'collapsed', !e.isExpanded);
30
+ this.updateIcon();
31
+ this.disposable.value = params.api.onDidExpansionChange(() => {
32
+ this.updateIcon();
30
33
  });
31
34
  }
35
+ updateIcon() {
36
+ var _a;
37
+ const isExpanded = !!((_a = this.apiRef.api) === null || _a === void 0 ? void 0 : _a.isExpanded);
38
+ toggleClass(this._expander, 'collapsed', !isExpanded);
39
+ if (isExpanded) {
40
+ if (this._expander.contains(this._collapsedIcon)) {
41
+ this._collapsedIcon.remove();
42
+ }
43
+ if (!this._expander.contains(this._expandedIcon)) {
44
+ this._expander.appendChild(this._expandedIcon);
45
+ }
46
+ }
47
+ else {
48
+ if (this._expander.contains(this._expandedIcon)) {
49
+ this._expandedIcon.remove();
50
+ }
51
+ if (!this._expander.contains(this._collapsedIcon)) {
52
+ this._expander.appendChild(this._collapsedIcon);
53
+ }
54
+ }
55
+ }
32
56
  update(_params) {
33
57
  //
34
58
  }
@@ -1,17 +1,19 @@
1
1
  import { PaneTransfer } from '../dnd/dataTransfer';
2
2
  import { DroptargetEvent } from '../dnd/droptarget';
3
3
  import { Orientation } from '../splitview/core/splitview';
4
+ import { IPaneviewComponent } from './paneviewComponent';
4
5
  import { IPaneviewPanel, PaneviewPanel } from './paneviewPanel';
5
6
  export interface PaneviewDropEvent2 extends DroptargetEvent {
6
7
  panel: IPaneviewPanel;
7
8
  getData: () => PaneTransfer | undefined;
8
9
  }
9
10
  export declare abstract class DraggablePaneviewPanel extends PaneviewPanel {
11
+ private readonly accessor;
10
12
  private handler;
11
13
  private target;
12
14
  private readonly _onDidDrop;
13
15
  readonly onDidDrop: import("../events").Event<PaneviewDropEvent2>;
14
- constructor(id: string, component: string, headerComponent: string | undefined, orientation: Orientation, isExpanded: boolean, disableDnd: boolean);
16
+ constructor(accessor: IPaneviewComponent, id: string, component: string, headerComponent: string | undefined, orientation: Orientation, isExpanded: boolean, disableDnd: boolean);
15
17
  private initDragFeatures;
16
18
  private onDrop;
17
19
  }