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
@@ -2,24 +2,55 @@ import { toggleClass } from '../dom';
2
2
  import { Emitter } from '../events';
3
3
  import { CompositeDisposable } from '../lifecycle';
4
4
  import { DragAndDropObserver } from './dnd';
5
- export var Position;
6
- (function (Position) {
7
- Position["Top"] = "Top";
8
- Position["Left"] = "Left";
9
- Position["Bottom"] = "Bottom";
10
- Position["Right"] = "Right";
11
- Position["Center"] = "Center";
12
- })(Position || (Position = {}));
13
- function isBooleanValue(canDisplayOverlay) {
14
- return typeof canDisplayOverlay === 'boolean';
5
+ import { clamp } from '../math';
6
+ import { isBooleanValue } from '../types';
7
+ function numberOrFallback(maybeNumber, fallback) {
8
+ return typeof maybeNumber === 'number' ? maybeNumber : fallback;
9
+ }
10
+ export function directionToPosition(direction) {
11
+ switch (direction) {
12
+ case 'above':
13
+ return 'top';
14
+ case 'below':
15
+ return 'bottom';
16
+ case 'left':
17
+ return 'left';
18
+ case 'right':
19
+ return 'right';
20
+ case 'within':
21
+ return 'center';
22
+ default:
23
+ throw new Error(`invalid direction '${direction}'`);
24
+ }
25
+ }
26
+ export function positionToDirection(position) {
27
+ switch (position) {
28
+ case 'top':
29
+ return 'above';
30
+ case 'bottom':
31
+ return 'below';
32
+ case 'left':
33
+ return 'left';
34
+ case 'right':
35
+ return 'right';
36
+ case 'center':
37
+ return 'within';
38
+ default:
39
+ throw new Error(`invalid position '${position}'`);
40
+ }
15
41
  }
16
42
  export class Droptarget extends CompositeDisposable {
43
+ get state() {
44
+ return this._state;
45
+ }
17
46
  constructor(element, options) {
18
47
  super();
19
48
  this.element = element;
20
49
  this.options = options;
21
50
  this._onDrop = new Emitter();
22
51
  this.onDrop = this._onDrop.event;
52
+ // use a set to take advantage of #<set>.has
53
+ const acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
23
54
  this.addDisposables(this._onDrop, new DragAndDropObserver(this.element, {
24
55
  onDragEnter: () => undefined,
25
56
  onDragOver: (e) => {
@@ -28,11 +59,15 @@ export class Droptarget extends CompositeDisposable {
28
59
  if (width === 0 || height === 0) {
29
60
  return; // avoid div!0
30
61
  }
31
- const x = e.offsetX;
32
- const y = e.offsetY;
33
- const xp = (100 * x) / width;
34
- const yp = (100 * y) / height;
35
- const quadrant = this.calculateQuadrant(this.options.validOverlays, xp, yp);
62
+ const rect = e.currentTarget.getBoundingClientRect();
63
+ const x = e.clientX - rect.left;
64
+ const y = e.clientY - rect.top;
65
+ const quadrant = this.calculateQuadrant(acceptedTargetZonesSet, x, y, width, height);
66
+ if (quadrant === null) {
67
+ // no drop target should be displayed
68
+ this.removeDropTarget();
69
+ return;
70
+ }
36
71
  if (isBooleanValue(this.options.canDisplayOverlay)) {
37
72
  if (!this.options.canDisplayOverlay) {
38
73
  return;
@@ -46,20 +81,18 @@ export class Droptarget extends CompositeDisposable {
46
81
  this.target.className = 'drop-target-dropzone';
47
82
  this.overlay = document.createElement('div');
48
83
  this.overlay.className = 'drop-target-selection';
49
- this._state = Position.Center;
84
+ this._state = 'center';
50
85
  this.target.appendChild(this.overlay);
51
86
  this.element.classList.add('drop-target');
52
87
  this.element.append(this.target);
53
88
  }
54
- if (this.options.validOverlays === 'none') {
89
+ if (this.options.acceptedTargetZones.length === 0) {
55
90
  return;
56
91
  }
57
92
  if (!this.target || !this.overlay) {
58
93
  return;
59
94
  }
60
- const isSmallX = width < 100;
61
- const isSmallY = height < 100;
62
- this.toggleClasses(quadrant, isSmallX, isSmallY);
95
+ this.toggleClasses(quadrant, width, height);
63
96
  this.setState(quadrant);
64
97
  },
65
98
  onDragLeave: () => {
@@ -79,30 +112,59 @@ export class Droptarget extends CompositeDisposable {
79
112
  },
80
113
  }));
81
114
  }
82
- get state() {
83
- return this._state;
84
- }
85
- set validOverlays(value) {
86
- this.options.validOverlays = value;
87
- }
88
- set canDisplayOverlay(value) {
89
- this.options.canDisplayOverlay = value;
90
- }
91
115
  dispose() {
92
116
  this.removeDropTarget();
93
117
  }
94
- toggleClasses(quadrant, isSmallX, isSmallY) {
118
+ toggleClasses(quadrant, width, height) {
119
+ var _a, _b, _c, _d;
95
120
  if (!this.overlay) {
96
121
  return;
97
122
  }
123
+ const isSmallX = width < 100;
124
+ const isSmallY = height < 100;
98
125
  const isLeft = quadrant === 'left';
99
126
  const isRight = quadrant === 'right';
100
127
  const isTop = quadrant === 'top';
101
128
  const isBottom = quadrant === 'bottom';
102
- toggleClass(this.overlay, 'right', !isSmallX && isRight);
103
- toggleClass(this.overlay, 'left', !isSmallX && isLeft);
104
- toggleClass(this.overlay, 'top', !isSmallY && isTop);
105
- toggleClass(this.overlay, 'bottom', !isSmallY && isBottom);
129
+ const rightClass = !isSmallX && isRight;
130
+ const leftClass = !isSmallX && isLeft;
131
+ const topClass = !isSmallY && isTop;
132
+ const bottomClass = !isSmallY && isBottom;
133
+ let size = 0.5;
134
+ if (((_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.size) === null || _b === void 0 ? void 0 : _b.type) === 'percentage') {
135
+ size = clamp(this.options.overlayModel.size.value, 0, 100) / 100;
136
+ }
137
+ if (((_d = (_c = this.options.overlayModel) === null || _c === void 0 ? void 0 : _c.size) === null || _d === void 0 ? void 0 : _d.type) === 'pixels') {
138
+ if (rightClass || leftClass) {
139
+ size =
140
+ clamp(0, this.options.overlayModel.size.value, width) /
141
+ width;
142
+ }
143
+ if (topClass || bottomClass) {
144
+ size =
145
+ clamp(0, this.options.overlayModel.size.value, height) /
146
+ height;
147
+ }
148
+ }
149
+ const translate = (1 - size) / 2;
150
+ const scale = size;
151
+ let transform;
152
+ if (rightClass) {
153
+ transform = `translateX(${100 * translate}%) scaleX(${scale})`;
154
+ }
155
+ else if (leftClass) {
156
+ transform = `translateX(-${100 * translate}%) scaleX(${scale})`;
157
+ }
158
+ else if (topClass) {
159
+ transform = `translateY(-${100 * translate}%) scaleY(${scale})`;
160
+ }
161
+ else if (bottomClass) {
162
+ transform = `translateY(${100 * translate}%) scaleY(${scale})`;
163
+ }
164
+ else {
165
+ transform = '';
166
+ }
167
+ this.overlay.style.transform = transform;
106
168
  toggleClass(this.overlay, 'small-right', isSmallX && isRight);
107
169
  toggleClass(this.overlay, 'small-left', isSmallX && isLeft);
108
170
  toggleClass(this.overlay, 'small-top', isSmallY && isTop);
@@ -111,57 +173,77 @@ export class Droptarget extends CompositeDisposable {
111
173
  setState(quadrant) {
112
174
  switch (quadrant) {
113
175
  case 'top':
114
- this._state = Position.Top;
176
+ this._state = 'top';
115
177
  break;
116
178
  case 'left':
117
- this._state = Position.Left;
179
+ this._state = 'left';
118
180
  break;
119
181
  case 'bottom':
120
- this._state = Position.Bottom;
182
+ this._state = 'bottom';
121
183
  break;
122
184
  case 'right':
123
- this._state = Position.Right;
185
+ this._state = 'right';
124
186
  break;
125
- default:
126
- this._state = Position.Center;
187
+ case 'center':
188
+ this._state = 'center';
127
189
  break;
128
190
  }
129
191
  }
130
- calculateQuadrant(overlayType, xp, yp) {
131
- switch (overlayType) {
132
- case 'all':
133
- if (xp < 20) {
134
- return 'left';
135
- }
136
- if (xp > 80) {
137
- return 'right';
138
- }
139
- if (yp < 20) {
140
- return 'top';
141
- }
142
- if (yp > 80) {
143
- return 'bottom';
144
- }
145
- break;
146
- case 'vertical':
147
- if (yp < 50) {
148
- return 'top';
149
- }
150
- return 'bottom';
151
- case 'horizontal':
152
- if (xp < 50) {
153
- return 'left';
154
- }
155
- return 'right';
192
+ calculateQuadrant(overlayType, x, y, width, height) {
193
+ var _a, _b, _c, _d, _e, _f;
194
+ const isPercentage = ((_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.activationSize) === undefined ||
195
+ ((_c = (_b = this.options.overlayModel) === null || _b === void 0 ? void 0 : _b.activationSize) === null || _c === void 0 ? void 0 : _c.type) === 'percentage';
196
+ const value = numberOrFallback((_f = (_e = (_d = this.options) === null || _d === void 0 ? void 0 : _d.overlayModel) === null || _e === void 0 ? void 0 : _e.activationSize) === null || _f === void 0 ? void 0 : _f.value, 20);
197
+ if (isPercentage) {
198
+ return calculateQuadrantAsPercentage(overlayType, x, y, width, height, value);
156
199
  }
157
- return null;
200
+ return calculateQuadrantAsPixels(overlayType, x, y, width, height, value);
158
201
  }
159
202
  removeDropTarget() {
160
203
  if (this.target) {
161
204
  this._state = undefined;
162
205
  this.element.removeChild(this.target);
163
206
  this.target = undefined;
207
+ this.overlay = undefined;
164
208
  this.element.classList.remove('drop-target');
165
209
  }
166
210
  }
167
211
  }
212
+ export function calculateQuadrantAsPercentage(overlayType, x, y, width, height, threshold) {
213
+ const xp = (100 * x) / width;
214
+ const yp = (100 * y) / height;
215
+ if (overlayType.has('left') && xp < threshold) {
216
+ return 'left';
217
+ }
218
+ if (overlayType.has('right') && xp > 100 - threshold) {
219
+ return 'right';
220
+ }
221
+ if (overlayType.has('top') && yp < threshold) {
222
+ return 'top';
223
+ }
224
+ if (overlayType.has('bottom') && yp > 100 - threshold) {
225
+ return 'bottom';
226
+ }
227
+ if (!overlayType.has('center')) {
228
+ return null;
229
+ }
230
+ return 'center';
231
+ }
232
+ export function calculateQuadrantAsPixels(overlayType, x, y, width, height, threshold) {
233
+ if (overlayType.has('left') && x < threshold) {
234
+ return 'left';
235
+ }
236
+ if (overlayType.has('right') && x > width - threshold) {
237
+ return 'right';
238
+ }
239
+ if (overlayType.has('top') && y < threshold) {
240
+ return 'top';
241
+ }
242
+ if (overlayType.has('bottom') && y > height - threshold) {
243
+ return 'bottom';
244
+ }
245
+ if (!overlayType.has('center')) {
246
+ return null;
247
+ }
248
+ return 'center';
249
+ }
@@ -0,0 +1 @@
1
+ export declare function addGhostImage(dataTransfer: DataTransfer, ghostElement: HTMLElement): void;
@@ -0,0 +1,10 @@
1
+ import { addClasses } from '../dom';
2
+ export function addGhostImage(dataTransfer, ghostElement) {
3
+ // class dockview provides to force ghost image to be drawn on a different layer and prevent weird rendering issues
4
+ addClasses(ghostElement, 'dv-dragged');
5
+ document.body.appendChild(ghostElement);
6
+ dataTransfer.setDragImage(ghostElement, 0, 0);
7
+ setTimeout(() => {
8
+ ghostElement.remove();
9
+ }, 0);
10
+ }
@@ -0,0 +1,11 @@
1
+ import { GroupPanel } from '../groupview/groupviewPanel';
2
+ import { IDisposable } from '../lifecycle';
3
+ import { DragHandler } from './abstractDragHandler';
4
+ export declare class GroupDragHandler extends DragHandler {
5
+ private readonly accessorId;
6
+ private readonly group;
7
+ private readonly panelTransfer;
8
+ constructor(element: HTMLElement, accessorId: string, group: GroupPanel);
9
+ getData(dataTransfer: DataTransfer | null): IDisposable;
10
+ dispose(): void;
11
+ }
@@ -0,0 +1,38 @@
1
+ import { DragHandler } from './abstractDragHandler';
2
+ import { LocalSelectionTransfer, PanelTransfer } from './dataTransfer';
3
+ import { addGhostImage } from './ghost';
4
+ export class GroupDragHandler extends DragHandler {
5
+ constructor(element, accessorId, group) {
6
+ super(element);
7
+ this.accessorId = accessorId;
8
+ this.group = group;
9
+ this.panelTransfer = LocalSelectionTransfer.getInstance();
10
+ }
11
+ getData(dataTransfer) {
12
+ this.panelTransfer.setData([new PanelTransfer(this.accessorId, this.group.id, null)], PanelTransfer.prototype);
13
+ const style = window.getComputedStyle(this.el);
14
+ const bgColor = style.getPropertyValue('--dv-activegroup-visiblepanel-tab-background-color');
15
+ const color = style.getPropertyValue('--dv-activegroup-visiblepanel-tab-color');
16
+ if (dataTransfer) {
17
+ const ghostElement = document.createElement('div');
18
+ ghostElement.style.backgroundColor = bgColor;
19
+ ghostElement.style.color = color;
20
+ ghostElement.style.padding = '2px 8px';
21
+ ghostElement.style.height = '24px';
22
+ ghostElement.style.fontSize = '11px';
23
+ ghostElement.style.lineHeight = '20px';
24
+ ghostElement.style.borderRadius = '12px';
25
+ ghostElement.style.position = 'absolute';
26
+ ghostElement.textContent = `Multiple Panels (${this.group.size})`;
27
+ addGhostImage(dataTransfer, ghostElement);
28
+ }
29
+ return {
30
+ dispose: () => {
31
+ this.panelTransfer.clearData(PanelTransfer.prototype);
32
+ },
33
+ };
34
+ }
35
+ dispose() {
36
+ //
37
+ }
38
+ }
@@ -3,6 +3,12 @@ import { addDisposableListener } from '../../../events';
3
3
  import { createCloseButton } from '../../../svg';
4
4
  export const DEFAULT_TAB_IDENTIFIER = '__default__tab__';
5
5
  export class DefaultTab extends CompositeDisposable {
6
+ get element() {
7
+ return this._element;
8
+ }
9
+ get id() {
10
+ return DEFAULT_TAB_IDENTIFIER;
11
+ }
6
12
  constructor() {
7
13
  super();
8
14
  this._isPanelVisible = false;
@@ -35,12 +41,6 @@ export class DefaultTab extends CompositeDisposable {
35
41
  }));
36
42
  this.render();
37
43
  }
38
- get element() {
39
- return this._element;
40
- }
41
- get id() {
42
- return DEFAULT_TAB_IDENTIFIER;
43
- }
44
44
  update(event) {
45
45
  this.params = Object.assign(Object.assign({}, this.params), event.params);
46
46
  this.render();
@@ -4,6 +4,9 @@ import { toggleClass } from '../../../dom';
4
4
  import { CompositeDisposable } from '../../../lifecycle';
5
5
  import { createCloseButton } from '../../../svg';
6
6
  export class Watermark extends CompositeDisposable {
7
+ get id() {
8
+ return 'watermark';
9
+ }
7
10
  constructor() {
8
11
  super();
9
12
  this._element = document.createElement('div');
@@ -31,9 +34,6 @@ export class Watermark extends CompositeDisposable {
31
34
  }
32
35
  }));
33
36
  }
34
- get id() {
35
- return 'watermark';
36
- }
37
37
  update(_event) {
38
38
  // noop
39
39
  }
@@ -1,7 +1,7 @@
1
1
  import { GroupPanelPartInitParameters, IContentRenderer, ITabRenderer } from '../groupview/types';
2
2
  import { GroupPanel } from '../groupview/groupviewPanel';
3
3
  import { IDisposable } from '../lifecycle';
4
- import { GroupPanelUpdateEvent } from '../groupview/groupPanel';
4
+ import { GroupPanelUpdateEvent } from '../groupview/types';
5
5
  export interface IGroupPanelView extends IDisposable {
6
6
  readonly content: IContentRenderer;
7
7
  readonly tab?: ITabRenderer;
@@ -1,16 +1,16 @@
1
1
  import { DefaultTab } from './components/tab/defaultTab';
2
2
  export class DefaultGroupPanelView {
3
- constructor(renderers) {
4
- var _a;
5
- this._content = renderers.content;
6
- this._tab = (_a = renderers.tab) !== null && _a !== void 0 ? _a : new DefaultTab();
7
- }
8
3
  get content() {
9
4
  return this._content;
10
5
  }
11
6
  get tab() {
12
7
  return this._tab;
13
8
  }
9
+ constructor(renderers) {
10
+ var _a;
11
+ this._content = renderers.content;
12
+ this._tab = (_a = renderers.tab) !== null && _a !== void 0 ? _a : new DefaultTab();
13
+ }
14
14
  init(params) {
15
15
  this.content.init(Object.assign(Object.assign({}, params), { tab: this.tab }));
16
16
  this.tab.init(params);
@@ -1,5 +1,6 @@
1
- import { GroupviewPanelState, IDockviewPanel } from '../groupview/groupPanel';
1
+ import { GroupviewPanelState } from '../groupview/types';
2
2
  import { GroupPanel } from '../groupview/groupviewPanel';
3
+ import { IDockviewPanel } from './dockviewPanel';
3
4
  export interface IPanelDeserializer {
4
5
  fromJSON(panelData: GroupviewPanelState, group: GroupPanel): IDockviewPanel;
5
6
  }
@@ -1,6 +1,7 @@
1
1
  import { SerializedGridObject } from '../gridview/gridview';
2
2
  import { Position } from '../dnd/droptarget';
3
- import { GroupviewPanelState, IDockviewPanel } from '../groupview/groupPanel';
3
+ import { GroupviewPanelState } from '../groupview/types';
4
+ import { IDockviewPanel } from './dockviewPanel';
4
5
  import { Event } from '../events';
5
6
  import { IWatermarkRenderer } from '../groupview/types';
6
7
  import { IPanelDeserializer } from './deserializer';
@@ -9,7 +10,7 @@ import { BaseGrid, IBaseGrid } from '../gridview/baseComponentGridview';
9
10
  import { DockviewApi } from '../api/component.api';
10
11
  import { Orientation } from '../splitview/core/splitview';
11
12
  import { GroupOptions, GroupPanelViewState, GroupviewDropEvent } from '../groupview/groupview';
12
- import { GroupPanel } from '../groupview/groupviewPanel';
13
+ import { GroupPanel, IGroupviewPanel } from '../groupview/groupviewPanel';
13
14
  export interface PanelReference {
14
15
  update: (event: {
15
16
  params: {
@@ -33,16 +34,17 @@ export interface SerializedDockview {
33
34
  tabHeight?: number;
34
35
  };
35
36
  }
36
- export declare type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents' | 'showDndOverlay' | 'watermarkFrameworkComponent' | 'defaultTabComponent' | 'createGroupControlElement'>;
37
+ export type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents' | 'showDndOverlay' | 'watermarkFrameworkComponent' | 'defaultTabComponent' | 'createGroupControlElement'>;
37
38
  export interface DockviewDropEvent extends GroupviewDropEvent {
38
39
  api: DockviewApi;
39
- group: GroupPanel;
40
+ group: GroupPanel | null;
40
41
  }
41
42
  export interface IDockviewComponent extends IBaseGrid<GroupPanel> {
42
43
  readonly activePanel: IDockviewPanel | undefined;
43
44
  readonly totalPanels: number;
44
45
  readonly panels: IDockviewPanel[];
45
46
  readonly onDidDrop: Event<DockviewDropEvent>;
47
+ readonly orientation: Orientation;
46
48
  tabHeight: number | undefined;
47
49
  deserializer: IPanelDeserializer | undefined;
48
50
  updateOptions(options: DockviewComponentUpdateOptions): void;
@@ -54,7 +56,7 @@ export interface IDockviewComponent extends IBaseGrid<GroupPanel> {
54
56
  removePanel(panel: IDockviewPanel): void;
55
57
  getGroupPanel: (id: string) => IDockviewPanel | undefined;
56
58
  createWatermarkComponent(): IWatermarkRenderer;
57
- addEmptyGroup(options?: AddGroupOptions): void;
59
+ addGroup(options?: AddGroupOptions): IGroupviewPanel;
58
60
  closeAllGroups(): void;
59
61
  moveToNext(options?: MovementOptions): void;
60
62
  moveToPrevious(options?: MovementOptions): void;
@@ -68,9 +70,11 @@ export interface IDockviewComponent extends IBaseGrid<GroupPanel> {
68
70
  readonly onDidActivePanelChange: Event<IDockviewPanel | undefined>;
69
71
  }
70
72
  export declare class DockviewComponent extends BaseGrid<GroupPanel> implements IDockviewComponent {
73
+ private readonly nextGroupId;
71
74
  private _deserializer;
72
75
  private _api;
73
76
  private _options;
77
+ private watermark;
74
78
  private readonly _onDidDrop;
75
79
  readonly onDidDrop: Event<DockviewDropEvent>;
76
80
  private readonly _onDidRemovePanel;
@@ -81,6 +85,7 @@ export declare class DockviewComponent extends BaseGrid<GroupPanel> implements I
81
85
  readonly onDidLayoutFromJSON: Event<void>;
82
86
  private readonly _onDidActivePanelChange;
83
87
  readonly onDidActivePanelChange: Event<IDockviewPanel | undefined>;
88
+ get orientation(): Orientation;
84
89
  get totalPanels(): number;
85
90
  get panels(): IDockviewPanel[];
86
91
  get deserializer(): IPanelDeserializer | undefined;
@@ -90,6 +95,7 @@ export declare class DockviewComponent extends BaseGrid<GroupPanel> implements I
90
95
  set tabHeight(height: number | undefined);
91
96
  get tabHeight(): number | undefined;
92
97
  constructor(element: HTMLElement, options: DockviewComponentOptions);
98
+ private orthogonalize;
93
99
  updateOptions(options: DockviewComponentUpdateOptions): void;
94
100
  focus(): void;
95
101
  getGroupPanel(id: string): IDockviewPanel | undefined;
@@ -111,9 +117,11 @@ export declare class DockviewComponent extends BaseGrid<GroupPanel> implements I
111
117
  skipDispose: boolean;
112
118
  }): void;
113
119
  createWatermarkComponent(): IWatermarkRenderer;
114
- addEmptyGroup(options: AddGroupOptions): void;
120
+ private updateWatermark;
121
+ addGroup(options?: AddGroupOptions): GroupPanel;
115
122
  removeGroup(group: GroupPanel, skipActive?: boolean): void;
116
- moveGroupOrPanel(referenceGroup: GroupPanel, groupId: string, itemId: string, target: Position, index?: number): void;
123
+ moveGroupOrPanel(referenceGroup: GroupPanel, groupId: string, itemId: string | undefined, target: Position, index?: number): void;
124
+ private moveGroup;
117
125
  doSetGroupActive(group: GroupPanel | undefined, skipFocus?: boolean): void;
118
126
  createGroup(options?: GroupOptions): GroupPanel;
119
127
  private createPanel;