dockview 1.5.2 → 1.6.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 (220) hide show
  1. package/dist/cjs/api/component.api.d.ts +3 -2
  2. package/dist/cjs/api/component.api.js +9 -2
  3. package/dist/cjs/api/component.api.js.map +1 -1
  4. package/dist/cjs/api/{groupPanelApi.d.ts → dockviewPanelApi.d.ts} +2 -2
  5. package/dist/cjs/api/{groupPanelApi.js → dockviewPanelApi.js} +4 -6
  6. package/dist/cjs/api/dockviewPanelApi.js.map +1 -0
  7. package/dist/cjs/api/gridviewPanelApi.d.ts +4 -3
  8. package/dist/cjs/api/gridviewPanelApi.js +4 -4
  9. package/dist/cjs/api/gridviewPanelApi.js.map +1 -1
  10. package/dist/cjs/api/panelApi.d.ts +7 -0
  11. package/dist/cjs/api/panelApi.js +17 -1
  12. package/dist/cjs/api/panelApi.js.map +1 -1
  13. package/dist/cjs/array.d.ts +1 -1
  14. package/dist/cjs/dnd/abstractDragHandler.d.ts +2 -2
  15. package/dist/cjs/dnd/abstractDragHandler.js +3 -3
  16. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  17. package/dist/cjs/dnd/dataTransfer.d.ts +2 -2
  18. package/dist/cjs/dnd/dataTransfer.js.map +1 -1
  19. package/dist/cjs/dnd/dnd.d.ts +1 -1
  20. package/dist/cjs/dnd/dnd.js +7 -12
  21. package/dist/cjs/dnd/dnd.js.map +1 -1
  22. package/dist/cjs/dnd/droptarget.d.ts +20 -15
  23. package/dist/cjs/dnd/droptarget.js +152 -74
  24. package/dist/cjs/dnd/droptarget.js.map +1 -1
  25. package/dist/cjs/dnd/ghost.d.ts +1 -0
  26. package/dist/cjs/dnd/ghost.js +15 -0
  27. package/dist/cjs/dnd/ghost.js.map +1 -0
  28. package/dist/cjs/dnd/groupDragHandler.d.ts +11 -0
  29. package/dist/cjs/dnd/groupDragHandler.js +62 -0
  30. package/dist/cjs/dnd/groupDragHandler.js.map +1 -0
  31. package/dist/cjs/dockview/defaultGroupPanelView.d.ts +1 -1
  32. package/dist/cjs/dockview/deserializer.d.ts +2 -1
  33. package/dist/cjs/dockview/dockviewComponent.d.ts +15 -7
  34. package/dist/cjs/dockview/dockviewComponent.js +215 -34
  35. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  36. package/dist/{esm/dockview/dockviewGroupPanel.d.ts → cjs/dockview/dockviewPanel.d.ts} +16 -5
  37. package/dist/cjs/dockview/{dockviewGroupPanel.js → dockviewPanel.js} +25 -21
  38. package/dist/cjs/dockview/dockviewPanel.js.map +1 -0
  39. package/dist/cjs/dockview/options.d.ts +32 -10
  40. package/dist/cjs/dockview/options.js +29 -0
  41. package/dist/cjs/dockview/options.js.map +1 -1
  42. package/dist/cjs/dockview/validation.d.ts +2 -0
  43. package/dist/cjs/dockview/validation.js +135 -0
  44. package/dist/cjs/dockview/validation.js.map +1 -0
  45. package/dist/cjs/gridview/baseComponentGridview.d.ts +1 -1
  46. package/dist/cjs/gridview/baseComponentGridview.js +5 -6
  47. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  48. package/dist/cjs/gridview/basePanelView.d.ts +2 -2
  49. package/dist/cjs/gridview/gridview.d.ts +9 -3
  50. package/dist/cjs/gridview/gridview.js +38 -7
  51. package/dist/cjs/gridview/gridview.js.map +1 -1
  52. package/dist/cjs/gridview/gridviewComponent.d.ts +2 -2
  53. package/dist/cjs/gridview/gridviewComponent.js +2 -3
  54. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  55. package/dist/cjs/gridview/gridviewPanel.d.ts +3 -3
  56. package/dist/cjs/gridview/gridviewPanel.js +1 -2
  57. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  58. package/dist/cjs/gridview/types.d.ts +1 -1
  59. package/dist/cjs/groupview/dnd.d.ts +2 -1
  60. package/dist/cjs/groupview/dnd.js +1 -0
  61. package/dist/cjs/groupview/dnd.js.map +1 -1
  62. package/dist/cjs/groupview/groupview.d.ts +6 -6
  63. package/dist/cjs/groupview/groupview.js +43 -25
  64. package/dist/cjs/groupview/groupview.js.map +1 -1
  65. package/dist/cjs/groupview/groupviewPanel.d.ts +3 -3
  66. package/dist/cjs/groupview/panel/content.d.ts +1 -1
  67. package/dist/cjs/groupview/tab.d.ts +2 -12
  68. package/dist/cjs/groupview/tab.js +13 -9
  69. package/dist/cjs/groupview/tab.js.map +1 -1
  70. package/dist/cjs/groupview/titlebar/tabsContainer.d.ts +5 -8
  71. package/dist/cjs/groupview/titlebar/tabsContainer.js +23 -30
  72. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  73. package/dist/cjs/groupview/titlebar/voidContainer.d.ts +15 -0
  74. package/dist/cjs/groupview/titlebar/voidContainer.js +74 -0
  75. package/dist/cjs/groupview/titlebar/voidContainer.js.map +1 -0
  76. package/dist/cjs/groupview/types.d.ts +18 -2
  77. package/dist/cjs/index.d.ts +3 -3
  78. package/dist/cjs/index.js +4 -3
  79. package/dist/cjs/index.js.map +1 -1
  80. package/dist/cjs/paneview/draggablePaneviewPanel.js +6 -5
  81. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  82. package/dist/cjs/paneview/paneviewComponent.js +2 -2
  83. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  84. package/dist/cjs/paneview/paneviewPanel.js +1 -0
  85. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  86. package/dist/cjs/react/deserializer.d.ts +2 -1
  87. package/dist/cjs/react/deserializer.js +2 -2
  88. package/dist/cjs/react/deserializer.js.map +1 -1
  89. package/dist/cjs/react/dockview/defaultTab.d.ts +1 -1
  90. package/dist/cjs/react/dockview/dockview.d.ts +5 -4
  91. package/dist/cjs/react/dockview/dockview.js +1 -0
  92. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  93. package/dist/cjs/react/dockview/groupControlsRenderer.d.ts +1 -1
  94. package/dist/cjs/react/gridview/view.js +2 -1
  95. package/dist/cjs/react/gridview/view.js.map +1 -1
  96. package/dist/cjs/react/react.d.ts +1 -1
  97. package/dist/cjs/splitview/core/splitview.d.ts +4 -4
  98. package/dist/cjs/splitview/splitviewComponent.d.ts +1 -1
  99. package/dist/cjs/splitview/splitviewComponent.js +2 -2
  100. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  101. package/dist/cjs/splitview/splitviewPanel.js +1 -0
  102. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  103. package/dist/cjs/types.d.ts +2 -1
  104. package/dist/cjs/types.js +5 -0
  105. package/dist/cjs/types.js.map +1 -1
  106. package/dist/dockview.amd.js +1411 -987
  107. package/dist/dockview.amd.min.js +2 -2
  108. package/dist/dockview.amd.min.noStyle.js +2 -2
  109. package/dist/dockview.amd.noStyle.js +1410 -986
  110. package/dist/dockview.cjs.js +1394 -970
  111. package/dist/dockview.esm.js +1385 -964
  112. package/dist/dockview.esm.min.js +2 -2
  113. package/dist/dockview.js +1411 -987
  114. package/dist/dockview.min.js +2 -2
  115. package/dist/dockview.min.noStyle.js +2 -2
  116. package/dist/dockview.noStyle.js +1410 -986
  117. package/dist/esm/actionbar/actionsContainer.js +3 -3
  118. package/dist/esm/api/component.api.d.ts +3 -2
  119. package/dist/esm/api/component.api.js +16 -13
  120. package/dist/esm/api/{groupPanelApi.d.ts → dockviewPanelApi.d.ts} +2 -2
  121. package/dist/esm/api/{groupPanelApi.js → dockviewPanelApi.js} +16 -18
  122. package/dist/esm/api/gridviewPanelApi.d.ts +4 -3
  123. package/dist/esm/api/gridviewPanelApi.js +4 -4
  124. package/dist/esm/api/panelApi.d.ts +7 -0
  125. package/dist/esm/api/panelApi.js +33 -17
  126. package/dist/esm/api/paneviewPanelApi.js +3 -3
  127. package/dist/esm/array.d.ts +1 -1
  128. package/dist/esm/dnd/abstractDragHandler.d.ts +2 -2
  129. package/dist/esm/dnd/abstractDragHandler.js +3 -3
  130. package/dist/esm/dnd/dataTransfer.d.ts +2 -2
  131. package/dist/esm/dnd/dnd.d.ts +1 -1
  132. package/dist/esm/dnd/dnd.js +7 -12
  133. package/dist/esm/dnd/droptarget.d.ts +20 -15
  134. package/dist/esm/dnd/droptarget.js +149 -67
  135. package/dist/esm/dnd/ghost.d.ts +1 -0
  136. package/dist/esm/dnd/ghost.js +10 -0
  137. package/dist/esm/dnd/groupDragHandler.d.ts +11 -0
  138. package/dist/esm/dnd/groupDragHandler.js +38 -0
  139. package/dist/esm/dockview/components/tab/defaultTab.js +6 -6
  140. package/dist/esm/dockview/components/watermark/watermark.js +3 -3
  141. package/dist/esm/dockview/defaultGroupPanelView.d.ts +1 -1
  142. package/dist/esm/dockview/defaultGroupPanelView.js +5 -5
  143. package/dist/esm/dockview/deserializer.d.ts +2 -1
  144. package/dist/esm/dockview/dockviewComponent.d.ts +15 -7
  145. package/dist/esm/dockview/dockviewComponent.js +229 -65
  146. package/dist/{cjs/dockview/dockviewGroupPanel.d.ts → esm/dockview/dockviewPanel.d.ts} +16 -5
  147. package/dist/esm/dockview/{dockviewGroupPanel.js → dockviewPanel.js} +19 -15
  148. package/dist/esm/dockview/options.d.ts +32 -10
  149. package/dist/esm/dockview/options.js +24 -1
  150. package/dist/esm/dockview/validation.d.ts +2 -0
  151. package/dist/esm/dockview/validation.js +86 -0
  152. package/dist/esm/gridview/baseComponentGridview.d.ts +1 -1
  153. package/dist/esm/gridview/baseComponentGridview.js +31 -32
  154. package/dist/esm/gridview/basePanelView.d.ts +2 -2
  155. package/dist/esm/gridview/basePanelView.js +13 -13
  156. package/dist/esm/gridview/branchNode.js +47 -47
  157. package/dist/esm/gridview/gridview.d.ts +9 -3
  158. package/dist/esm/gridview/gridview.js +41 -15
  159. package/dist/esm/gridview/gridviewComponent.d.ts +2 -2
  160. package/dist/esm/gridview/gridviewComponent.js +17 -18
  161. package/dist/esm/gridview/gridviewPanel.d.ts +3 -3
  162. package/dist/esm/gridview/gridviewPanel.js +45 -45
  163. package/dist/esm/gridview/leafNode.js +23 -23
  164. package/dist/esm/gridview/types.d.ts +1 -1
  165. package/dist/esm/groupview/dnd.d.ts +2 -1
  166. package/dist/esm/groupview/dnd.js +1 -0
  167. package/dist/esm/groupview/groupview.d.ts +6 -6
  168. package/dist/esm/groupview/groupview.js +90 -72
  169. package/dist/esm/groupview/groupviewPanel.d.ts +3 -3
  170. package/dist/esm/groupview/groupviewPanel.js +4 -4
  171. package/dist/esm/groupview/panel/content.d.ts +1 -1
  172. package/dist/esm/groupview/panel/content.js +3 -3
  173. package/dist/esm/groupview/tab.d.ts +2 -12
  174. package/dist/esm/groupview/tab.js +15 -11
  175. package/dist/esm/groupview/titlebar/tabsContainer.d.ts +5 -8
  176. package/dist/esm/groupview/titlebar/tabsContainer.js +54 -61
  177. package/dist/esm/groupview/titlebar/voidContainer.d.ts +15 -0
  178. package/dist/esm/groupview/titlebar/voidContainer.js +47 -0
  179. package/dist/esm/groupview/types.d.ts +18 -2
  180. package/dist/esm/hostedContainer.js +3 -3
  181. package/dist/esm/index.d.ts +3 -3
  182. package/dist/esm/index.js +2 -2
  183. package/dist/esm/lifecycle.js +3 -3
  184. package/dist/esm/paneview/defaultPaneviewHeader.js +3 -3
  185. package/dist/esm/paneview/draggablePaneviewPanel.js +7 -6
  186. package/dist/esm/paneview/paneview.js +21 -21
  187. package/dist/esm/paneview/paneviewComponent.js +30 -30
  188. package/dist/esm/paneview/paneviewPanel.js +45 -44
  189. package/dist/esm/react/deserializer.d.ts +2 -1
  190. package/dist/esm/react/deserializer.js +2 -2
  191. package/dist/esm/react/dockview/defaultTab.d.ts +1 -1
  192. package/dist/esm/react/dockview/dockview.d.ts +5 -4
  193. package/dist/esm/react/dockview/dockview.js +1 -0
  194. package/dist/esm/react/dockview/groupControlsRenderer.d.ts +1 -1
  195. package/dist/esm/react/dockview/groupControlsRenderer.js +8 -8
  196. package/dist/esm/react/dockview/reactContentPart.js +3 -3
  197. package/dist/esm/react/dockview/reactHeaderPart.js +3 -3
  198. package/dist/esm/react/dockview/reactWatermarkPart.js +3 -3
  199. package/dist/esm/react/dockview/v2/reactContentRenderer.js +9 -9
  200. package/dist/esm/react/dockview/v2/webviewContentRenderer.js +3 -3
  201. package/dist/esm/react/gridview/view.js +2 -1
  202. package/dist/esm/react/paneview/view.js +3 -3
  203. package/dist/esm/react/react.d.ts +1 -1
  204. package/dist/esm/splitview/core/splitview.d.ts +4 -4
  205. package/dist/esm/splitview/core/splitview.js +59 -59
  206. package/dist/esm/splitview/core/viewItem.js +15 -15
  207. package/dist/esm/splitview/splitviewComponent.d.ts +1 -1
  208. package/dist/esm/splitview/splitviewComponent.js +23 -23
  209. package/dist/esm/splitview/splitviewPanel.js +31 -30
  210. package/dist/esm/types.d.ts +2 -1
  211. package/dist/esm/types.js +3 -1
  212. package/dist/styles/dockview.css +23 -26
  213. package/package.json +12 -16
  214. package/dist/cjs/api/groupPanelApi.js.map +0 -1
  215. package/dist/cjs/dockview/dockviewGroupPanel.js.map +0 -1
  216. package/dist/cjs/groupview/groupPanel.d.ts +0 -32
  217. package/dist/cjs/groupview/groupPanel.js +0 -3
  218. package/dist/cjs/groupview/groupPanel.js.map +0 -1
  219. package/dist/esm/groupview/groupPanel.d.ts +0 -32
  220. package/dist/esm/groupview/groupPanel.js +0 -1
@@ -0,0 +1,86 @@
1
+ import { Orientation } from '../splitview/core/splitview';
2
+ function validateGroupViewPanelState(value) {
3
+ if (typeof value.id !== 'string') {
4
+ throw new Error('invalid layout');
5
+ }
6
+ if (typeof value.title !== 'string') {
7
+ throw new Error('invalid layout');
8
+ }
9
+ if (value.params !== undefined && typeof value.params !== 'object') {
10
+ throw new Error('invalid layout');
11
+ }
12
+ }
13
+ function validateGroupPanelViewState(value) {
14
+ if (typeof value.id !== 'string') {
15
+ throw new Error('invalid layout');
16
+ }
17
+ if (value.locked !== undefined && typeof value.locked !== 'boolean') {
18
+ throw new Error('invalid layout');
19
+ }
20
+ if (value.hideHeader !== undefined && typeof value.locked !== 'boolean') {
21
+ throw new Error('invalid layout');
22
+ }
23
+ if (value.activeView !== undefined &&
24
+ typeof value.activeView !== 'string') {
25
+ throw new Error('invalid layout');
26
+ }
27
+ if (!Array.isArray(value.views)) {
28
+ throw new Error('invalid layout');
29
+ }
30
+ for (const child of value.views) {
31
+ if (typeof child !== 'string') {
32
+ if (!Array.isArray(value.views)) {
33
+ throw new Error('invalid layout');
34
+ }
35
+ }
36
+ }
37
+ }
38
+ function validateSerializedGridObject(value) {
39
+ if (value.size !== undefined && typeof value.size !== 'number') {
40
+ throw new Error('invalid layout');
41
+ }
42
+ if (value.visible !== undefined && typeof value.size !== 'boolean') {
43
+ throw new Error('invalid layout');
44
+ }
45
+ if (value.type !== 'branch' && value.type !== 'leaf') {
46
+ throw new Error('invalid layout');
47
+ }
48
+ if (Array.isArray(value.data)) {
49
+ for (const child of value.data) {
50
+ validateSerializedGridObject(child);
51
+ }
52
+ }
53
+ else {
54
+ validateGroupPanelViewState(value.data);
55
+ }
56
+ }
57
+ export function validateSerializedDockview(data) {
58
+ if (typeof data !== 'object') {
59
+ throw new Error('invalid layout');
60
+ }
61
+ const { grid, panels, options, activeGroup } = data;
62
+ if (typeof grid !== 'object') {
63
+ throw new Error('invalid layout');
64
+ }
65
+ if (typeof grid.height !== 'number') {
66
+ throw new Error('invalid layout');
67
+ }
68
+ if (typeof grid.width !== 'number') {
69
+ throw new Error('invalid layout');
70
+ }
71
+ if (grid.orientation !== Orientation.HORIZONTAL &&
72
+ grid.orientation !== Orientation.VERTICAL) {
73
+ throw new Error('invalid layout');
74
+ }
75
+ validateSerializedGridObject(grid.root);
76
+ if (data.activeGroup !== undefined &&
77
+ typeof data.activeGroup !== 'string') {
78
+ throw new Error('invalid layout');
79
+ }
80
+ if (typeof data.panels !== 'object') {
81
+ throw new Error('invalid layout');
82
+ }
83
+ for (const value of Object.values(data.panels)) {
84
+ validateGroupViewPanelState(value);
85
+ }
86
+ }
@@ -5,7 +5,7 @@ import { CompositeDisposable, IValueDisposable } from '../lifecycle';
5
5
  import { ISplitviewStyles, Orientation } from '../splitview/core/splitview';
6
6
  import { IPanel } from '../panel/types';
7
7
  import { MovementOptions2 } from '../dockview/options';
8
- export declare type Direction = 'left' | 'right' | 'above' | 'below' | 'within';
8
+ export type Direction = 'left' | 'right' | 'above' | 'below' | 'within';
9
9
  export declare function toTarget(direction: Direction): Position;
10
10
  export interface BaseGridOptions {
11
11
  readonly proportionalLayout: boolean;
@@ -1,6 +1,5 @@
1
1
  import { Emitter, Event, TickDelayedEvent } from '../events';
2
2
  import { getGridLocation, Gridview } from './gridview';
3
- import { Position } from '../dnd/droptarget';
4
3
  import { CompositeDisposable } from '../lifecycle';
5
4
  import { sequentialNumberGenerator } from '../math';
6
5
  import { Sizing, } from '../splitview/core/splitview';
@@ -8,45 +7,19 @@ const nextLayoutId = sequentialNumberGenerator();
8
7
  export function toTarget(direction) {
9
8
  switch (direction) {
10
9
  case 'left':
11
- return Position.Left;
10
+ return 'left';
12
11
  case 'right':
13
- return Position.Right;
12
+ return 'right';
14
13
  case 'above':
15
- return Position.Top;
14
+ return 'top';
16
15
  case 'below':
17
- return Position.Bottom;
16
+ return 'bottom';
18
17
  case 'within':
19
18
  default:
20
- return Position.Center;
19
+ return 'center';
21
20
  }
22
21
  }
23
22
  export class BaseGrid extends CompositeDisposable {
24
- constructor(_element, options) {
25
- super();
26
- this._element = _element;
27
- this._id = nextLayoutId.next();
28
- this._groups = new Map();
29
- this._onDidLayoutChange = new Emitter();
30
- this.onDidLayoutChange = this._onDidLayoutChange.event;
31
- this._onDidRemoveGroup = new Emitter();
32
- this.onDidRemoveGroup = this._onDidRemoveGroup.event;
33
- this._onDidAddGroup = new Emitter();
34
- this.onDidAddGroup = this._onDidAddGroup.event;
35
- this._onDidActiveGroupChange = new Emitter();
36
- this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
37
- this._bufferOnDidLayoutChange = new TickDelayedEvent();
38
- this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
39
- this.element.appendChild(this.gridview.element);
40
- this.layout(0, 0, true); // set some elements height/widths
41
- this.addDisposables(this.gridview.onDidChange(() => {
42
- this._bufferOnDidLayoutChange.fire();
43
- }));
44
- this.addDisposables(Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
45
- this._bufferOnDidLayoutChange.fire();
46
- }), this._bufferOnDidLayoutChange.onEvent(() => {
47
- this._onDidLayoutChange.fire();
48
- }), this._bufferOnDidLayoutChange);
49
- }
50
23
  get id() {
51
24
  return this._id;
52
25
  }
@@ -80,6 +53,32 @@ export class BaseGrid extends CompositeDisposable {
80
53
  get activeGroup() {
81
54
  return this._activeGroup;
82
55
  }
56
+ constructor(_element, options) {
57
+ super();
58
+ this._element = _element;
59
+ this._id = nextLayoutId.next();
60
+ this._groups = new Map();
61
+ this._onDidLayoutChange = new Emitter();
62
+ this.onDidLayoutChange = this._onDidLayoutChange.event;
63
+ this._onDidRemoveGroup = new Emitter();
64
+ this.onDidRemoveGroup = this._onDidRemoveGroup.event;
65
+ this._onDidAddGroup = new Emitter();
66
+ this.onDidAddGroup = this._onDidAddGroup.event;
67
+ this._onDidActiveGroupChange = new Emitter();
68
+ this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
69
+ this._bufferOnDidLayoutChange = new TickDelayedEvent();
70
+ this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
71
+ this.element.appendChild(this.gridview.element);
72
+ this.layout(0, 0, true); // set some elements height/widths
73
+ this.addDisposables(this.gridview.onDidChange(() => {
74
+ this._bufferOnDidLayoutChange.fire();
75
+ }));
76
+ this.addDisposables(Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
77
+ this._bufferOnDidLayoutChange.fire();
78
+ }), this._bufferOnDidLayoutChange.onEvent(() => {
79
+ this._onDidLayoutChange.fire();
80
+ }), this._bufferOnDidLayoutChange);
81
+ }
83
82
  setVisible(panel, visible) {
84
83
  this.gridview.setViewVisible(getGridLocation(panel.element), visible);
85
84
  this._onDidLayoutChange.fire();
@@ -1,12 +1,12 @@
1
1
  import { CompositeDisposable } from '../lifecycle';
2
2
  import { IFrameworkPart, PanelUpdateEvent, PanelInitParameters, IPanel } from '../panel/types';
3
- import { PanelApiImpl } from '../api/panelApi';
3
+ import { PanelApi, PanelApiImpl } from '../api/panelApi';
4
4
  export interface BasePanelViewState {
5
5
  id: string;
6
6
  component: string;
7
7
  params?: Record<string, any>;
8
8
  }
9
- export interface BasePanelViewExported<T extends PanelApiImpl> {
9
+ export interface BasePanelViewExported<T extends PanelApi> {
10
10
  readonly id: string;
11
11
  readonly api: T;
12
12
  readonly width: number;
@@ -1,6 +1,19 @@
1
1
  import { trackFocus } from '../dom';
2
2
  import { CompositeDisposable } from '../lifecycle';
3
3
  export class BasePanelView extends CompositeDisposable {
4
+ get element() {
5
+ return this._element;
6
+ }
7
+ get width() {
8
+ return this._width;
9
+ }
10
+ get height() {
11
+ return this._height;
12
+ }
13
+ get params() {
14
+ var _a;
15
+ return (_a = this._params) === null || _a === void 0 ? void 0 : _a.params;
16
+ }
4
17
  constructor(id, component, api) {
5
18
  super();
6
19
  this.id = id;
@@ -21,19 +34,6 @@ export class BasePanelView extends CompositeDisposable {
21
34
  this.api._onDidChangeFocus.fire({ isFocused: false });
22
35
  }));
23
36
  }
24
- get element() {
25
- return this._element;
26
- }
27
- get width() {
28
- return this._width;
29
- }
30
- get height() {
31
- return this._height;
32
- }
33
- get params() {
34
- var _a;
35
- return (_a = this._params) === null || _a === void 0 ? void 0 : _a.params;
36
- }
37
37
  focus() {
38
38
  this.api._onFocusEvent.fire();
39
39
  }
@@ -7,53 +7,6 @@ import { Emitter, Event } from '../events';
7
7
  import { LeafNode } from './leafNode';
8
8
  import { CompositeDisposable, Disposable } from '../lifecycle';
9
9
  export class BranchNode extends CompositeDisposable {
10
- constructor(orientation, proportionalLayout, styles, size, orthogonalSize, childDescriptors) {
11
- super();
12
- this.orientation = orientation;
13
- this.proportionalLayout = proportionalLayout;
14
- this.styles = styles;
15
- this.children = [];
16
- this._onDidChange = new Emitter();
17
- this.onDidChange = this._onDidChange.event;
18
- this._childrenDisposable = Disposable.NONE;
19
- this._orthogonalSize = orthogonalSize;
20
- this._size = size;
21
- this.element = document.createElement('div');
22
- this.element.className = 'branch-node';
23
- if (!childDescriptors) {
24
- this.splitview = new Splitview(this.element, {
25
- orientation: this.orientation,
26
- proportionalLayout,
27
- styles,
28
- });
29
- this.splitview.layout(this.size, this.orthogonalSize);
30
- }
31
- else {
32
- const descriptor = {
33
- views: childDescriptors.map((childDescriptor) => {
34
- return {
35
- view: childDescriptor.node,
36
- size: childDescriptor.node.size,
37
- visible: childDescriptor.node instanceof LeafNode &&
38
- childDescriptor.visible !== undefined
39
- ? childDescriptor.visible
40
- : true,
41
- };
42
- }),
43
- size: this.size,
44
- };
45
- this.children = childDescriptors.map((c) => c.node);
46
- this.splitview = new Splitview(this.element, {
47
- orientation: this.orientation,
48
- descriptor,
49
- proportionalLayout,
50
- });
51
- }
52
- this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
53
- this._onDidChange.fire({});
54
- }));
55
- this.setupChildrenEvents();
56
- }
57
10
  get width() {
58
11
  return this.orientation === Orientation.HORIZONTAL
59
12
  ? this.size
@@ -119,6 +72,53 @@ export class BranchNode extends CompositeDisposable {
119
72
  }
120
73
  return LayoutPriority.Normal;
121
74
  }
75
+ constructor(orientation, proportionalLayout, styles, size, orthogonalSize, childDescriptors) {
76
+ super();
77
+ this.orientation = orientation;
78
+ this.proportionalLayout = proportionalLayout;
79
+ this.styles = styles;
80
+ this.children = [];
81
+ this._onDidChange = new Emitter();
82
+ this.onDidChange = this._onDidChange.event;
83
+ this._childrenDisposable = Disposable.NONE;
84
+ this._orthogonalSize = orthogonalSize;
85
+ this._size = size;
86
+ this.element = document.createElement('div');
87
+ this.element.className = 'branch-node';
88
+ if (!childDescriptors) {
89
+ this.splitview = new Splitview(this.element, {
90
+ orientation: this.orientation,
91
+ proportionalLayout,
92
+ styles,
93
+ });
94
+ this.splitview.layout(this.size, this.orthogonalSize);
95
+ }
96
+ else {
97
+ const descriptor = {
98
+ views: childDescriptors.map((childDescriptor) => {
99
+ return {
100
+ view: childDescriptor.node,
101
+ size: childDescriptor.node.size,
102
+ visible: childDescriptor.node instanceof LeafNode &&
103
+ childDescriptor.visible !== undefined
104
+ ? childDescriptor.visible
105
+ : true,
106
+ };
107
+ }),
108
+ size: this.size,
109
+ };
110
+ this.children = childDescriptors.map((c) => c.node);
111
+ this.splitview = new Splitview(this.element, {
112
+ orientation: this.orientation,
113
+ descriptor,
114
+ proportionalLayout,
115
+ });
116
+ }
117
+ this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
118
+ this._onDidChange.fire({});
119
+ }));
120
+ this.setupChildrenEvents();
121
+ }
122
122
  setVisible(visible) {
123
123
  for (const child of this.children) {
124
124
  child.setVisible(visible);
@@ -1,9 +1,9 @@
1
1
  import { ISplitviewStyles, LayoutPriority, Orientation, Sizing } from '../splitview/core/splitview';
2
- import { Position } from '../dnd/droptarget';
3
2
  import { LeafNode } from './leafNode';
4
3
  import { Node } from './types';
5
4
  import { Event } from '../events';
6
5
  import { IDisposable } from '../lifecycle';
6
+ import { Position } from '../dnd/droptarget';
7
7
  export declare function indexInParent(element: HTMLElement): number;
8
8
  /**
9
9
  * Find the grid location of a specific DOM element by traversing the parent
@@ -49,7 +49,7 @@ export interface GridBranchNode<T extends IGridView> {
49
49
  height: number;
50
50
  };
51
51
  }
52
- export declare type GridNode<T extends IGridView> = GridLeafNode<T> | GridBranchNode<T>;
52
+ export type GridNode<T extends IGridView> = GridLeafNode<T> | GridBranchNode<T>;
53
53
  export declare function isGridBranchNode<T extends IGridView>(node: GridNode<T>): node is GridBranchNode<T>;
54
54
  export interface SerializedGridObject<T> {
55
55
  type: 'leaf' | 'branch';
@@ -68,7 +68,7 @@ export interface ISerializedBranchNode {
68
68
  data: ISerializedNode[];
69
69
  size: number;
70
70
  }
71
- export declare type ISerializedNode = ISerializedLeafNode | ISerializedBranchNode;
71
+ export type ISerializedNode = ISerializedLeafNode | ISerializedBranchNode;
72
72
  export interface INodeDescriptor {
73
73
  node: Node;
74
74
  visible?: boolean;
@@ -87,6 +87,7 @@ export declare class Gridview implements IDisposable {
87
87
  size?: number;
88
88
  orthogonalSize?: number;
89
89
  }>;
90
+ get length(): number;
90
91
  serialize(): {
91
92
  root: SerializedGridObject<any>;
92
93
  width: number;
@@ -102,6 +103,11 @@ export declare class Gridview implements IDisposable {
102
103
  set orientation(orientation: Orientation);
103
104
  private get root();
104
105
  private set root(value);
106
+ /**
107
+ * If the root is orientated as a VERTICAL node then nest the existing root within a new HORIZIONTAL root node
108
+ * If the root is orientated as a HORIZONTAL node then nest the existing root within a new VERITCAL root node
109
+ */
110
+ insertOrthogonalSplitviewAtRoot(): void;
105
111
  next(location: number[]): LeafNode;
106
112
  previous(location: number[]): LeafNode;
107
113
  getView(): GridBranchNode<IGridView>;
@@ -3,7 +3,6 @@
3
3
  * https://github.com/microsoft/vscode/tree/main/src/vs/base/browser/ui/grid
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { Orientation, Sizing, } from '../splitview/core/splitview';
6
- import { Position } from '../dnd/droptarget';
7
6
  import { tail } from '../array';
8
7
  import { LeafNode } from './leafNode';
9
8
  import { BranchNode } from './branchNode';
@@ -78,20 +77,18 @@ export function getRelativeLocation(rootOrientation, location, direction) {
78
77
  if (orientation === directionOrientation) {
79
78
  const [rest, _index] = tail(location);
80
79
  let index = _index;
81
- if (direction === Position.Right || direction === Position.Bottom) {
80
+ if (direction === 'right' || direction === 'bottom') {
82
81
  index += 1;
83
82
  }
84
83
  return [...rest, index];
85
84
  }
86
85
  else {
87
- const index = direction === Position.Right || direction === Position.Bottom
88
- ? 1
89
- : 0;
86
+ const index = direction === 'right' || direction === 'bottom' ? 1 : 0;
90
87
  return [...location, index];
91
88
  }
92
89
  }
93
90
  export function getDirectionOrientation(direction) {
94
- return direction === Position.Top || direction === Position.Bottom
91
+ return direction === 'top' || direction === 'bottom'
95
92
  ? Orientation.VERTICAL
96
93
  : Orientation.HORIZONTAL;
97
94
  }
@@ -126,15 +123,8 @@ const serializeBranchNode = (node, orientation) => {
126
123
  };
127
124
  };
128
125
  export class Gridview {
129
- constructor(proportionalLayout, styles, orientation) {
130
- this.proportionalLayout = proportionalLayout;
131
- this.styles = styles;
132
- this.disposable = new MutableDisposable();
133
- this._onDidChange = new Emitter();
134
- this.onDidChange = this._onDidChange.event;
135
- this.element = document.createElement('div');
136
- this.element.className = 'grid-view';
137
- this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
126
+ get length() {
127
+ return this._root ? this._root.children.length : 0;
138
128
  }
139
129
  serialize() {
140
130
  const root = serializeBranchNode(this.getView(), this.orientation);
@@ -208,6 +198,32 @@ export class Gridview {
208
198
  this._onDidChange.fire(e);
209
199
  });
210
200
  }
201
+ /**
202
+ * If the root is orientated as a VERTICAL node then nest the existing root within a new HORIZIONTAL root node
203
+ * If the root is orientated as a HORIZONTAL node then nest the existing root within a new VERITCAL root node
204
+ */
205
+ insertOrthogonalSplitviewAtRoot() {
206
+ if (!this._root) {
207
+ return;
208
+ }
209
+ const oldRoot = this.root;
210
+ oldRoot.element.remove();
211
+ this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size);
212
+ if (oldRoot.children.length === 1) {
213
+ // can remove one level of redundant branching if there is only a single child
214
+ const childReference = oldRoot.children[0];
215
+ oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
216
+ oldRoot.dispose();
217
+ this._root.addChild(childReference, Sizing.Distribute, 0);
218
+ }
219
+ else {
220
+ this._root.addChild(oldRoot, Sizing.Distribute, 0);
221
+ }
222
+ this.element.appendChild(this._root.element);
223
+ this.disposable.value = this._root.onDidChange((e) => {
224
+ this._onDidChange.fire(e);
225
+ });
226
+ }
211
227
  next(location) {
212
228
  return this.progmaticSelect(location);
213
229
  }
@@ -266,6 +282,16 @@ export class Gridview {
266
282
  get maximumHeight() {
267
283
  return this.root.maximumHeight;
268
284
  }
285
+ constructor(proportionalLayout, styles, orientation) {
286
+ this.proportionalLayout = proportionalLayout;
287
+ this.styles = styles;
288
+ this.disposable = new MutableDisposable();
289
+ this._onDidChange = new Emitter();
290
+ this.onDidChange = this._onDidChange.event;
291
+ this.element = document.createElement('div');
292
+ this.element.className = 'grid-view';
293
+ this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
294
+ }
269
295
  isViewVisible(location) {
270
296
  const [rest, index] = tail(location);
271
297
  const [, parent] = this.getNode(rest);
@@ -1,5 +1,4 @@
1
1
  import { SerializedGridObject } from './gridview';
2
- import { Position } from '../dnd/droptarget';
3
2
  import { IPanelDeserializer } from '../dockview/deserializer';
4
3
  import { GridviewComponentOptions } from './options';
5
4
  import { BaseGrid, Direction, IBaseGrid, IGridPanelView } from './baseComponentGridview';
@@ -7,6 +6,7 @@ import { GridviewPanel, GridviewInitParameters, GridPanelViewState, IGridviewPan
7
6
  import { BaseComponentOptions } from '../panel/types';
8
7
  import { Orientation, Sizing } from '../splitview/core/splitview';
9
8
  import { Event } from '../events';
9
+ import { Position } from '../dnd/droptarget';
10
10
  export interface SerializedGridview {
11
11
  grid: {
12
12
  height: number;
@@ -30,7 +30,7 @@ export interface AddComponentOptions extends BaseComponentOptions {
30
30
  export interface IGridPanelComponentView extends IGridPanelView {
31
31
  init: (params: GridviewInitParameters) => void;
32
32
  }
33
- export declare type GridviewComponentUpdateOptions = Pick<GridviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents'>;
33
+ export type GridviewComponentUpdateOptions = Pick<GridviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents'>;
34
34
  export interface IGridviewComponent extends IBaseGrid<GridviewPanel> {
35
35
  readonly orientation: Orientation;
36
36
  readonly onDidLayoutFromJSON: Event<void>;
@@ -1,11 +1,25 @@
1
1
  import { getRelativeLocation, getGridLocation, } from './gridview';
2
- import { Position } from '../dnd/droptarget';
3
2
  import { tail, sequenceEquals } from '../array';
4
3
  import { CompositeDisposable } from '../lifecycle';
5
4
  import { BaseGrid, toTarget, } from './baseComponentGridview';
6
5
  import { createComponent } from '../panel/componentFactory';
7
6
  import { Emitter } from '../events';
8
7
  export class GridviewComponent extends BaseGrid {
8
+ get orientation() {
9
+ return this.gridview.orientation;
10
+ }
11
+ set orientation(value) {
12
+ this.gridview.orientation = value;
13
+ }
14
+ get options() {
15
+ return this._options;
16
+ }
17
+ get deserializer() {
18
+ return this._deserializer;
19
+ }
20
+ set deserializer(value) {
21
+ this._deserializer = value;
22
+ }
9
23
  constructor(element, options) {
10
24
  super(element, {
11
25
  proportionalLayout: options.proportionalLayout,
@@ -22,21 +36,6 @@ export class GridviewComponent extends BaseGrid {
22
36
  this.options.frameworkComponents = {};
23
37
  }
24
38
  }
25
- get orientation() {
26
- return this.gridview.orientation;
27
- }
28
- set orientation(value) {
29
- this.gridview.orientation = value;
30
- }
31
- get options() {
32
- return this._options;
33
- }
34
- get deserializer() {
35
- return this._deserializer;
36
- }
37
- set deserializer(value) {
38
- this._deserializer = value;
39
- }
40
39
  updateOptions(options) {
41
40
  const hasOrientationChanged = typeof options.orientation === 'string' &&
42
41
  this.gridview.orientation !== options.orientation;
@@ -134,7 +133,7 @@ export class GridviewComponent extends BaseGrid {
134
133
  throw new Error(`reference group ${options.reference} does not exist`);
135
134
  }
136
135
  const target = toTarget(options.direction);
137
- if (target === Position.Center) {
136
+ if (target === 'center') {
138
137
  throw new Error(`${target} not supported as an option`);
139
138
  }
140
139
  else {
@@ -152,7 +151,7 @@ export class GridviewComponent extends BaseGrid {
152
151
  throw new Error(`reference group ${options.position.referencePanel} does not exist`);
153
152
  }
154
153
  const target = toTarget(options.position.direction);
155
- if (target === Position.Center) {
154
+ if (target === 'center') {
156
155
  throw new Error(`${target} not supported as an option`);
157
156
  }
158
157
  else {
@@ -1,7 +1,7 @@
1
1
  import { PanelInitParameters } from '../panel/types';
2
2
  import { GridviewComponent, IGridPanelComponentView } from './gridviewComponent';
3
3
  import { BasePanelView, BasePanelViewExported, BasePanelViewState } from './basePanelView';
4
- import { GridviewPanelApiImpl } from '../api/gridviewPanelApi';
4
+ import { GridviewPanelApi, GridviewPanelApiImpl } from '../api/gridviewPanelApi';
5
5
  import { LayoutPriority } from '../splitview/core/splitview';
6
6
  import { Event } from '../events';
7
7
  import { IViewSize } from './gridview';
@@ -15,7 +15,7 @@ export interface GridviewInitParameters extends PanelInitParameters {
15
15
  accessor: GridviewComponent;
16
16
  isVisible?: boolean;
17
17
  }
18
- export interface IGridviewPanel extends BasePanelViewExported<GridviewPanelApiImpl> {
18
+ export interface IGridviewPanel extends BasePanelViewExported<GridviewPanelApi> {
19
19
  readonly minimumWidth: number;
20
20
  readonly maximumWidth: number;
21
21
  readonly minimumHeight: number;
@@ -43,7 +43,7 @@ export declare abstract class GridviewPanel extends BasePanelView<GridviewPanelA
43
43
  get maximumHeight(): number;
44
44
  get maximumWidth(): number;
45
45
  get isActive(): boolean;
46
- constructor(id: string, component: string, api?: GridviewPanelApiImpl);
46
+ constructor(id: string, component: string, api: GridviewPanelApiImpl);
47
47
  setVisible(isVisible: boolean): void;
48
48
  setActive(isActive: boolean): void;
49
49
  init(parameters: GridviewInitParameters): void;