@datagrok-libraries/dock-spawn-dg 0.0.2 → 0.0.3

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 (261) hide show
  1. package/README.md +0 -3
  2. package/index.d.ts +33 -0
  3. package/index.d.ts.map +1 -0
  4. package/index.js +32 -0
  5. package/package.json +10 -17
  6. package/src/BrowserDialogHelper.d.ts.map +1 -0
  7. package/{lib → src}/BrowserDialogHelper.js +18 -12
  8. package/src/BrowserDialogHelper.ts +48 -47
  9. package/src/ContainerType.d.ts.map +1 -0
  10. package/src/ContainerType.ts +1 -1
  11. package/{lib → src}/Dialog.d.ts +7 -7
  12. package/src/Dialog.d.ts.map +1 -0
  13. package/{lib → src}/Dialog.js +46 -58
  14. package/src/Dialog.ts +253 -250
  15. package/src/DockConfig.d.ts.map +1 -0
  16. package/{lib → src}/DockConfig.js +0 -5
  17. package/src/DockConfig.ts +1 -1
  18. package/{lib → src}/DockGraphDeserializer.d.ts +6 -6
  19. package/src/DockGraphDeserializer.d.ts.map +1 -0
  20. package/src/DockGraphDeserializer.js +133 -0
  21. package/src/DockGraphDeserializer.ts +113 -108
  22. package/src/DockGraphSerializer.d.ts +14 -0
  23. package/src/DockGraphSerializer.d.ts.map +1 -0
  24. package/{lib → src}/DockGraphSerializer.js +11 -11
  25. package/src/DockGraphSerializer.ts +48 -47
  26. package/{lib → src}/DockLayoutEngine.d.ts +12 -12
  27. package/src/DockLayoutEngine.d.ts.map +1 -0
  28. package/{lib → src}/DockLayoutEngine.js +49 -53
  29. package/src/DockLayoutEngine.ts +351 -346
  30. package/{lib → src}/DockManager.d.ts +34 -34
  31. package/src/DockManager.d.ts.map +1 -0
  32. package/{lib → src}/DockManager.js +168 -151
  33. package/src/DockManager.ts +860 -834
  34. package/{lib → src}/DockManagerContext.d.ts +3 -3
  35. package/src/DockManagerContext.d.ts.map +1 -0
  36. package/{lib → src}/DockManagerContext.js +2 -5
  37. package/src/DockManagerContext.ts +5 -5
  38. package/{lib → src}/DockModel.d.ts +2 -2
  39. package/src/DockModel.d.ts.map +1 -0
  40. package/{lib → src}/DockModel.js +0 -3
  41. package/src/DockModel.ts +2 -2
  42. package/{lib → src}/DockNode.d.ts +1 -1
  43. package/src/DockNode.d.ts.map +1 -0
  44. package/{lib → src}/DockNode.js +0 -3
  45. package/src/DockNode.ts +2 -2
  46. package/{lib → src}/DockWheel.d.ts +5 -5
  47. package/src/DockWheel.d.ts.map +1 -0
  48. package/{lib → src}/DockWheel.js +3 -11
  49. package/src/DockWheel.ts +6 -6
  50. package/{lib → src}/DockWheelItem.d.ts +3 -3
  51. package/src/DockWheelItem.d.ts.map +1 -0
  52. package/{lib → src}/DockWheelItem.js +1 -8
  53. package/src/DockWheelItem.ts +4 -4
  54. package/{lib → src}/DocumentManagerContainer.d.ts +4 -4
  55. package/src/DocumentManagerContainer.d.ts.map +1 -0
  56. package/{lib → src}/DocumentManagerContainer.js +3 -3
  57. package/src/DocumentManagerContainer.ts +9 -9
  58. package/{lib → src}/DocumentTabPage.d.ts +3 -3
  59. package/src/DocumentTabPage.d.ts.map +1 -0
  60. package/{lib → src}/DocumentTabPage.js +2 -2
  61. package/src/DocumentTabPage.ts +6 -6
  62. package/{lib → src}/DraggableContainer.d.ts +7 -7
  63. package/src/DraggableContainer.d.ts.map +1 -0
  64. package/{lib → src}/DraggableContainer.js +3 -16
  65. package/src/DraggableContainer.ts +10 -10
  66. package/src/EventHandler.d.ts.map +1 -0
  67. package/{lib → src}/EventHandler.js +0 -3
  68. package/src/EventHandler.ts +1 -1
  69. package/{lib → src}/FillDockContainer.d.ts +8 -8
  70. package/src/FillDockContainer.d.ts.map +1 -0
  71. package/{lib → src}/FillDockContainer.js +4 -14
  72. package/src/FillDockContainer.ts +10 -10
  73. package/src/HorizontalDockContainer.d.ts +7 -0
  74. package/src/HorizontalDockContainer.d.ts.map +1 -0
  75. package/{lib → src}/HorizontalDockContainer.js +3 -3
  76. package/src/HorizontalDockContainer.ts +6 -6
  77. package/{lib → src}/PanelContainer.d.ts +21 -20
  78. package/src/PanelContainer.d.ts.map +1 -0
  79. package/{lib → src}/PanelContainer.js +144 -148
  80. package/src/PanelContainer.ts +590 -577
  81. package/src/Point.d.ts.map +1 -0
  82. package/{lib → src}/Point.js +0 -2
  83. package/{lib → src}/ResizableContainer.d.ts +8 -8
  84. package/src/ResizableContainer.d.ts.map +1 -0
  85. package/{lib → src}/ResizableContainer.js +4 -17
  86. package/src/ResizableContainer.ts +11 -11
  87. package/{lib → src}/ResizeHandle.d.ts +1 -1
  88. package/src/ResizeHandle.d.ts.map +1 -0
  89. package/{lib → src}/ResizeHandle.js +0 -10
  90. package/src/ResizeHandle.ts +2 -2
  91. package/{lib → src}/SplitterBar.d.ts +3 -3
  92. package/src/SplitterBar.d.ts.map +1 -0
  93. package/{lib → src}/SplitterBar.js +2 -14
  94. package/src/SplitterBar.ts +5 -5
  95. package/{lib → src}/SplitterDockContainer.d.ts +7 -7
  96. package/src/SplitterDockContainer.d.ts.map +1 -0
  97. package/{lib → src}/SplitterDockContainer.js +1 -11
  98. package/src/SplitterDockContainer.ts +8 -8
  99. package/{lib → src}/SplitterPanel.d.ts +2 -2
  100. package/src/SplitterPanel.d.ts.map +1 -0
  101. package/{lib → src}/SplitterPanel.js +2 -6
  102. package/src/SplitterPanel.ts +4 -4
  103. package/{lib → src}/TabHandle.d.ts +5 -5
  104. package/src/TabHandle.d.ts.map +1 -0
  105. package/{lib → src}/TabHandle.js +81 -95
  106. package/src/TabHandle.ts +314 -311
  107. package/{lib → src}/TabHost.d.ts +6 -6
  108. package/src/TabHost.d.ts.map +1 -0
  109. package/{lib → src}/TabHost.js +4 -19
  110. package/src/TabHost.ts +9 -9
  111. package/{lib → src}/TabPage.d.ts +4 -4
  112. package/src/TabPage.d.ts.map +1 -0
  113. package/{lib → src}/TabPage.js +3 -10
  114. package/src/TabPage.ts +6 -6
  115. package/{lib → src}/UndockInitiator.d.ts +4 -4
  116. package/src/UndockInitiator.d.ts.map +1 -0
  117. package/{lib → src}/UndockInitiator.js +2 -14
  118. package/src/UndockInitiator.ts +7 -7
  119. package/src/Utils.d.ts.map +1 -0
  120. package/{lib → src}/Utils.js +1 -1
  121. package/src/Utils.ts +1 -1
  122. package/src/VerticalDockContainer.d.ts +7 -0
  123. package/src/VerticalDockContainer.d.ts.map +1 -0
  124. package/{lib → src}/VerticalDockContainer.js +3 -3
  125. package/src/VerticalDockContainer.ts +7 -7
  126. package/src/enums/PanelType.d.ts.map +1 -0
  127. package/src/enums/PanelType.ts +1 -1
  128. package/src/enums/TabHostDirection.d.ts.map +1 -0
  129. package/src/enums/TabHostDirection.ts +1 -1
  130. package/src/enums/WheelTypes.d.ts.map +1 -0
  131. package/src/enums/WheelTypes.ts +1 -1
  132. package/src/i18n/Defaults.d.ts.map +1 -0
  133. package/src/i18n/Defaults.ts +2 -2
  134. package/{lib → src}/i18n/Localizer.d.ts +1 -1
  135. package/src/i18n/Localizer.d.ts.map +1 -0
  136. package/{lib → src}/i18n/Localizer.js +3 -3
  137. package/src/i18n/Localizer.ts +2 -2
  138. package/src/index.d.ts.map +1 -0
  139. package/{lib → src}/interfaces/IDockContainer.d.ts +4 -4
  140. package/src/interfaces/IDockContainer.d.ts.map +1 -0
  141. package/src/interfaces/IDockContainer.ts +7 -7
  142. package/src/interfaces/IDockContainerWithSize.d.ts +6 -0
  143. package/src/interfaces/IDockContainerWithSize.d.ts.map +1 -0
  144. package/src/interfaces/IDockContainerWithSize.ts +3 -3
  145. package/{lib → src}/interfaces/ILayoutEventListener.d.ts +6 -6
  146. package/src/interfaces/ILayoutEventListener.d.ts.map +1 -0
  147. package/src/interfaces/ILayoutEventListener.ts +7 -7
  148. package/src/interfaces/IMouseOrTouchEvent.d.ts.map +1 -0
  149. package/src/interfaces/IMouseOrTouchEvent.ts +1 -1
  150. package/src/interfaces/INodeInfo.d.ts +8 -0
  151. package/src/interfaces/INodeInfo.d.ts.map +1 -0
  152. package/src/interfaces/INodeInfo.ts +2 -2
  153. package/src/interfaces/IPanelInfo.d.ts +10 -0
  154. package/src/interfaces/IPanelInfo.d.ts.map +1 -0
  155. package/src/interfaces/IPanelInfo.ts +3 -3
  156. package/src/interfaces/IRectangle.d.ts.map +1 -0
  157. package/src/interfaces/IRectangle.ts +1 -1
  158. package/src/interfaces/ISize.d.ts.map +1 -0
  159. package/{lib → src}/interfaces/IState.d.ts +1 -0
  160. package/src/interfaces/IState.d.ts.map +1 -0
  161. package/src/interfaces/IState.ts +1 -0
  162. package/src/interfaces/IThickness.d.ts.map +1 -0
  163. package/src/interfaces/IThickness.ts +1 -1
  164. package/{lib → src}/webcomponent/DockSpawnTsWebcomponent.d.ts +4 -4
  165. package/src/webcomponent/DockSpawnTsWebcomponent.d.ts.map +1 -0
  166. package/{lib → src}/webcomponent/DockSpawnTsWebcomponent.js +69 -61
  167. package/src/webcomponent/DockSpawnTsWebcomponent.ts +239 -241
  168. package/src/webcomponent/styles.d.ts.map +1 -0
  169. package/{lib → src}/webcomponent/styles.js +2 -1
  170. package/tsconfig.json +13 -26
  171. package/.eslintrc.json +0 -47
  172. package/lib/BrowserDialogHelper.d.ts.map +0 -1
  173. package/lib/ContainerType.d.ts.map +0 -1
  174. package/lib/Dialog.d.ts.map +0 -1
  175. package/lib/DockConfig.d.ts.map +0 -1
  176. package/lib/DockGraphDeserializer.d.ts.map +0 -1
  177. package/lib/DockGraphDeserializer.js +0 -114
  178. package/lib/DockGraphSerializer.d.ts +0 -14
  179. package/lib/DockGraphSerializer.d.ts.map +0 -1
  180. package/lib/DockLayoutEngine.d.ts.map +0 -1
  181. package/lib/DockManager.d.ts.map +0 -1
  182. package/lib/DockManagerContext.d.ts.map +0 -1
  183. package/lib/DockModel.d.ts.map +0 -1
  184. package/lib/DockNode.d.ts.map +0 -1
  185. package/lib/DockWheel.d.ts.map +0 -1
  186. package/lib/DockWheelItem.d.ts.map +0 -1
  187. package/lib/DocumentManagerContainer.d.ts.map +0 -1
  188. package/lib/DocumentTabPage.d.ts.map +0 -1
  189. package/lib/DraggableContainer.d.ts.map +0 -1
  190. package/lib/EventHandler.d.ts.map +0 -1
  191. package/lib/FillDockContainer.d.ts.map +0 -1
  192. package/lib/HorizontalDockContainer.d.ts +0 -7
  193. package/lib/HorizontalDockContainer.d.ts.map +0 -1
  194. package/lib/PanelContainer.d.ts.map +0 -1
  195. package/lib/Point.d.ts.map +0 -1
  196. package/lib/ResizableContainer.d.ts.map +0 -1
  197. package/lib/ResizeHandle.d.ts.map +0 -1
  198. package/lib/SplitterBar.d.ts.map +0 -1
  199. package/lib/SplitterDockContainer.d.ts.map +0 -1
  200. package/lib/SplitterPanel.d.ts.map +0 -1
  201. package/lib/TabHandle.d.ts.map +0 -1
  202. package/lib/TabHost.d.ts.map +0 -1
  203. package/lib/TabPage.d.ts.map +0 -1
  204. package/lib/UndockInitiator.d.ts.map +0 -1
  205. package/lib/Utils.d.ts.map +0 -1
  206. package/lib/VerticalDockContainer.d.ts +0 -7
  207. package/lib/VerticalDockContainer.d.ts.map +0 -1
  208. package/lib/enums/PanelType.d.ts.map +0 -1
  209. package/lib/enums/TabHostDirection.d.ts.map +0 -1
  210. package/lib/enums/WheelTypes.d.ts.map +0 -1
  211. package/lib/i18n/Defaults.d.ts.map +0 -1
  212. package/lib/i18n/Localizer.d.ts.map +0 -1
  213. package/lib/index.d.ts.map +0 -1
  214. package/lib/interfaces/IDockContainer.d.ts.map +0 -1
  215. package/lib/interfaces/IDockContainerWithSize.d.ts +0 -6
  216. package/lib/interfaces/IDockContainerWithSize.d.ts.map +0 -1
  217. package/lib/interfaces/ILayoutEventListener.d.ts.map +0 -1
  218. package/lib/interfaces/IMouseOrTouchEvent.d.ts.map +0 -1
  219. package/lib/interfaces/INodeInfo.d.ts +0 -8
  220. package/lib/interfaces/INodeInfo.d.ts.map +0 -1
  221. package/lib/interfaces/IPanelInfo.d.ts +0 -10
  222. package/lib/interfaces/IPanelInfo.d.ts.map +0 -1
  223. package/lib/interfaces/IRectangle.d.ts.map +0 -1
  224. package/lib/interfaces/ISize.d.ts.map +0 -1
  225. package/lib/interfaces/IState.d.ts.map +0 -1
  226. package/lib/interfaces/IThickness.d.ts.map +0 -1
  227. package/lib/webcomponent/DockSpawnTsWebcomponent.d.ts.map +0 -1
  228. package/lib/webcomponent/styles.d.ts.map +0 -1
  229. package/tsconfig.tsbuildinfo +0 -1
  230. /package/{lib → src}/BrowserDialogHelper.d.ts +0 -0
  231. /package/{lib → src}/ContainerType.d.ts +0 -0
  232. /package/{lib → src}/ContainerType.js +0 -0
  233. /package/{lib → src}/DockConfig.d.ts +0 -0
  234. /package/{lib → src}/EventHandler.d.ts +0 -0
  235. /package/{lib → src}/Point.d.ts +0 -0
  236. /package/{lib → src}/Utils.d.ts +0 -0
  237. /package/{lib → src}/enums/PanelType.d.ts +0 -0
  238. /package/{lib → src}/enums/PanelType.js +0 -0
  239. /package/{lib → src}/enums/TabHostDirection.d.ts +0 -0
  240. /package/{lib → src}/enums/TabHostDirection.js +0 -0
  241. /package/{lib → src}/enums/WheelTypes.d.ts +0 -0
  242. /package/{lib → src}/enums/WheelTypes.js +0 -0
  243. /package/{lib → src}/i18n/Defaults.d.ts +0 -0
  244. /package/{lib → src}/i18n/Defaults.js +0 -0
  245. /package/{lib → src}/index.d.ts +0 -0
  246. /package/{lib → src}/index.js +0 -0
  247. /package/{lib → src}/interfaces/IDockContainer.js +0 -0
  248. /package/{lib → src}/interfaces/IDockContainerWithSize.js +0 -0
  249. /package/{lib → src}/interfaces/ILayoutEventListener.js +0 -0
  250. /package/{lib → src}/interfaces/IMouseOrTouchEvent.d.ts +0 -0
  251. /package/{lib → src}/interfaces/IMouseOrTouchEvent.js +0 -0
  252. /package/{lib → src}/interfaces/INodeInfo.js +0 -0
  253. /package/{lib → src}/interfaces/IPanelInfo.js +0 -0
  254. /package/{lib → src}/interfaces/IRectangle.d.ts +0 -0
  255. /package/{lib → src}/interfaces/IRectangle.js +0 -0
  256. /package/{lib → src}/interfaces/ISize.d.ts +0 -0
  257. /package/{lib → src}/interfaces/ISize.js +0 -0
  258. /package/{lib → src}/interfaces/IState.js +0 -0
  259. /package/{lib → src}/interfaces/IThickness.d.ts +0 -0
  260. /package/{lib → src}/interfaces/IThickness.js +0 -0
  261. /package/{lib → src}/webcomponent/styles.d.ts +0 -0
@@ -1,370 +1,375 @@
1
- import {DockManager} from './DockManager.js';
2
- import {DockNode} from './DockNode.js';
3
- import {Utils} from './Utils.js';
4
- import {HorizontalDockContainer} from './HorizontalDockContainer.js';
5
- import {VerticalDockContainer} from './VerticalDockContainer.js';
6
- import {FillDockContainer} from './FillDockContainer.js';
7
- import {IRectangle} from './interfaces/IRectangle.js';
8
- import {IDockContainer} from './interfaces/IDockContainer.js';
9
- import {TabHandle} from './TabHandle.js';
1
+ import { DockManager } from "./DockManager";
2
+ import { DockNode } from "./DockNode";
3
+ import { Utils } from "./Utils";
4
+ import { HorizontalDockContainer } from "./HorizontalDockContainer";
5
+ import { VerticalDockContainer } from "./VerticalDockContainer";
6
+ import { FillDockContainer } from "./FillDockContainer";
7
+ import { IRectangle } from "./interfaces/IRectangle";
8
+ import { IDockContainer } from "./interfaces/IDockContainer";
9
+ import { TabHandle } from "./TabHandle";
10
10
 
11
11
  export class DockLayoutEngine {
12
- dockManager: DockManager;
13
-
14
- constructor(dockManager: DockManager) {
15
- this.dockManager = dockManager;
16
- }
17
-
18
- /** docks the [newNode] to the left of [referenceNode] */
19
- dockLeft(referenceNode: DockNode, newNode: DockNode) {
20
- this._performDock(referenceNode, newNode, 'horizontal', true);
21
- }
22
-
23
- /** docks the [newNode] to the right of [referenceNode] */
24
- dockRight(referenceNode: DockNode, newNode: DockNode) {
25
- this._performDock(referenceNode, newNode, 'horizontal', false);
26
- }
27
-
28
- /** docks the [newNode] to the top of [referenceNode] */
29
- dockUp(referenceNode: DockNode, newNode: DockNode) {
30
- this._performDock(referenceNode, newNode, 'vertical', true);
31
- }
32
-
33
- /** docks the [newNode] to the bottom of [referenceNode] */
34
- dockDown(referenceNode: DockNode, newNode: DockNode) {
35
- this._performDock(referenceNode, newNode, 'vertical', false);
36
- }
37
-
38
- /** docks the [newNode] by creating a new tab inside [referenceNode] */
39
- dockFill(referenceNode: DockNode, newNode: DockNode) {
40
- this._performDock(referenceNode, newNode, 'fill', false);
41
- }
42
-
43
- undock(node: DockNode) {
44
- const parentNode = node.parent;
45
- if (!parentNode)
46
- throw new Error('Cannot undock. panel is not a leaf node');
47
-
48
- // Get the position of the node relative to it's siblings
49
- const siblingIndex = parentNode.children.indexOf(node);
50
-
51
- // Detach the node from the dock manager's tree hierarchy
52
- node.detachFromParent();
53
-
54
- // Fix the node's parent hierarchy
55
- if (parentNode.children.length < parentNode.container.minimumAllowedChildNodes) {
56
- // If the child count falls below the minimum threshold, destroy the parent and merge
57
- // the children with their grandparents
58
- const grandParent = parentNode.parent;
59
- for (let i = 0; i < parentNode.children.length; i++) {
60
- const otherChild = parentNode.children[i];
61
- if (grandParent) {
62
- // parent node is not a root node
63
- grandParent.addChildAfter(parentNode, otherChild);
64
- parentNode.detachFromParent();
65
- const width = parentNode.container.containerElement.clientWidth;
66
- const height = parentNode.container.containerElement.clientHeight;
67
- parentNode.container.destroy();
68
-
69
- otherChild.container.resize(width, height);
70
- grandParent.performLayout(false);
71
- } else {
72
- // Parent is a root node.
73
- // Make the other child the root node
74
- parentNode.detachFromParent();
75
- parentNode.container.destroy();
76
- this.dockManager.setRootNode(otherChild);
77
- }
78
- }
79
- } else {
80
- // the node to be removed has 2 or more other siblings. So it is safe to continue
81
- // using the parent composite container.
82
- parentNode.performLayout(false);
83
-
84
- // Set the next sibling as the active child (e.g. for a Tab host, it would select it as the active tab)
85
- if (parentNode.children.length > 0) {
86
- const nextActiveSibling = parentNode.children[Math.max(0, siblingIndex - 1)];
87
- parentNode.container.setActiveChild(nextActiveSibling.container);
88
- }
12
+
13
+ dockManager: DockManager;
14
+
15
+ constructor(dockManager: DockManager) {
16
+ this.dockManager = dockManager;
17
+ }
18
+
19
+ /** docks the [newNode] to the left of [referenceNode] */
20
+ dockLeft(referenceNode: DockNode, newNode: DockNode) {
21
+ this._performDock(referenceNode, newNode, 'horizontal', true);
22
+ }
23
+
24
+ /** docks the [newNode] to the right of [referenceNode] */
25
+ dockRight(referenceNode: DockNode, newNode: DockNode) {
26
+ this._performDock(referenceNode, newNode, 'horizontal', false);
27
+ }
28
+
29
+ /** docks the [newNode] to the top of [referenceNode] */
30
+ dockUp(referenceNode: DockNode, newNode: DockNode) {
31
+ this._performDock(referenceNode, newNode, 'vertical', true);
32
+ }
33
+
34
+ /** docks the [newNode] to the bottom of [referenceNode] */
35
+ dockDown(referenceNode: DockNode, newNode: DockNode) {
36
+ this._performDock(referenceNode, newNode, 'vertical', false);
37
+ }
38
+
39
+ /** docks the [newNode] by creating a new tab inside [referenceNode] */
40
+ dockFill(referenceNode: DockNode, newNode: DockNode) {
41
+ this._performDock(referenceNode, newNode, 'fill', false);
89
42
  }
90
- this.dockManager.invalidate();
91
-
92
- this.dockManager.notifyOnUnDock(node);
93
- }
94
-
95
- close(node: DockNode) {
96
- const parentNode = node?.parent;
97
- if (!parentNode)
98
- throw new Error('Cannot undock. panel is not a leaf node');
99
-
100
- //check if closed tab was the active one
101
- let activetabClosed = false;
102
- if (parentNode.children.length > 0) {
103
- if ((<FillDockContainer>parentNode.container).tabHost != null) {
104
- const activeTab = (<FillDockContainer>parentNode.container).tabHost.getActiveTab();
105
- activetabClosed = activeTab.container == node.container;
106
- }
43
+
44
+ undock(node: DockNode) {
45
+ let parentNode = node.parent;
46
+ if (!parentNode)
47
+ throw new Error('Cannot undock. panel is not a leaf node');
48
+
49
+ // Get the position of the node relative to it's siblings
50
+ let siblingIndex = parentNode.children.indexOf(node);
51
+
52
+ // Detach the node from the dock manager's tree hierarchy
53
+ node.detachFromParent();
54
+
55
+ // Fix the node's parent hierarchy
56
+ if (parentNode.children.length < parentNode.container.minimumAllowedChildNodes) {
57
+ // If the child count falls below the minimum threshold, destroy the parent and merge
58
+ // the children with their grandparents
59
+ let grandParent = parentNode.parent;
60
+ for (let i = 0; i < parentNode.children.length; i++) {
61
+ let otherChild = parentNode.children[i];
62
+ if (grandParent) {
63
+ // parent node is not a root node
64
+ grandParent.addChildAfter(parentNode, otherChild);
65
+ parentNode.detachFromParent();
66
+ let width = parentNode.container.containerElement.clientWidth;
67
+ let height = parentNode.container.containerElement.clientHeight;
68
+ parentNode.container.destroy();
69
+
70
+ otherChild.container.resize(width, height);
71
+ grandParent.performLayout(false);
72
+ } else {
73
+ // Parent is a root node.
74
+ // Make the other child the root node
75
+ parentNode.detachFromParent();
76
+ parentNode.container.destroy();
77
+ this.dockManager.setRootNode(otherChild);
78
+ }
79
+ }
80
+ }
81
+ else {
82
+ // the node to be removed has 2 or more other siblings. So it is safe to continue
83
+ // using the parent composite container.
84
+ parentNode.performLayout(false);
85
+
86
+ // Set the next sibling as the active child (e.g. for a Tab host, it would select it as the active tab)
87
+ if (parentNode.children.length > 0) {
88
+ let nextActiveSibling = parentNode.children[Math.max(0, siblingIndex - 1)];
89
+ parentNode.container.setActiveChild(nextActiveSibling.container);
90
+ }
91
+ }
92
+ this.dockManager.invalidate();
93
+
94
+ this.dockManager.notifyOnUnDock(node);
107
95
  }
108
96
 
109
- // Get the position of the node relative to it's siblings
110
- const siblingIndex = parentNode.children.indexOf(node);
111
-
112
- // Detach the node from the dock manager's tree hierarchy
113
- node.detachFromParent();
114
-
115
- if (parentNode.children.length < parentNode.container.minimumAllowedChildNodes) {
116
- // If the child count falls below the minimum threshold, destroy the parent and merge
117
- // the children with their grandparents
118
- const grandParent = parentNode.parent;
119
- for (let i = 0; i < parentNode.children.length; i++) {
120
- const otherChild = parentNode.children[i];
121
- if (grandParent) {
122
- // parent node is not a root node
123
- grandParent.addChildAfter(parentNode, otherChild);
124
- parentNode.detachFromParent();
125
- const width = parentNode.container.containerElement.clientWidth;
126
- const height = parentNode.container.containerElement.clientHeight;
127
- otherChild.container.resize(width, height);
128
- parentNode.container.destroy();
129
- grandParent.performLayout(false);
97
+ close(node: DockNode) {
98
+ let parentNode = node?.parent;
99
+ if (!parentNode)
100
+ throw new Error('Cannot undock. panel is not a leaf node');
101
+
102
+ //check if closed tab was the active one
103
+ let activetabClosed = false;
104
+ if (parentNode.children.length > 0) {
105
+ if ((<FillDockContainer>parentNode.container).tabHost != null) {
106
+ let activeTab = (<FillDockContainer>parentNode.container).tabHost.getActiveTab();
107
+ activetabClosed = activeTab.container == node.container;
108
+ }
109
+ }
110
+
111
+ // Get the position of the node relative to it's siblings
112
+ let siblingIndex = parentNode.children.indexOf(node);
113
+
114
+ // Detach the node from the dock manager's tree hierarchy
115
+ node.detachFromParent();
116
+
117
+ if (parentNode.children.length < parentNode.container.minimumAllowedChildNodes) {
118
+ // If the child count falls below the minimum threshold, destroy the parent and merge
119
+ // the children with their grandparents
120
+ let grandParent = parentNode.parent;
121
+ for (let i = 0; i < parentNode.children.length; i++) {
122
+ let otherChild = parentNode.children[i];
123
+ if (grandParent) {
124
+ // parent node is not a root node
125
+ grandParent.addChildAfter(parentNode, otherChild);
126
+ parentNode.detachFromParent();
127
+ let width = parentNode.container.containerElement.clientWidth;
128
+ let height = parentNode.container.containerElement.clientHeight;
129
+ otherChild.container.resize(width, height);
130
+ parentNode.container.destroy();
131
+ grandParent.performLayout(false);
132
+ } else {
133
+ // Parent is a root node.
134
+ // Make the other child the root node
135
+ parentNode.detachFromParent();
136
+ parentNode.container.destroy();
137
+ this.dockManager.setRootNode(otherChild);
138
+ }
139
+ }
130
140
  } else {
131
- // Parent is a root node.
132
- // Make the other child the root node
133
- parentNode.detachFromParent();
134
- parentNode.container.destroy();
135
- this.dockManager.setRootNode(otherChild);
141
+ // the node to be removed has 2 or more other siblings. So it is safe to continue
142
+ // using the parent composite container.
143
+ parentNode.performLayout(false);
144
+
145
+ if (activetabClosed) {
146
+ let nextActiveSibling = parentNode.children[Math.max(0, siblingIndex - 1)];
147
+ if (nextActiveSibling != null)
148
+ parentNode.container.setActiveChild(nextActiveSibling.container);
149
+ }
136
150
  }
137
- }
138
- } else {
139
- // the node to be removed has 2 or more other siblings. So it is safe to continue
140
- // using the parent composite container.
141
- parentNode.performLayout(false);
142
-
143
- if (activetabClosed) {
144
- const nextActiveSibling = parentNode.children[Math.max(0, siblingIndex - 1)];
145
- if (nextActiveSibling != null)
146
- parentNode.container.setActiveChild(nextActiveSibling.container);
147
- }
151
+ this.dockManager.invalidate();
152
+
153
+ this.dockManager.notifyOnUnDock(node);
148
154
  }
149
- this.dockManager.invalidate();
150
-
151
- this.dockManager.notifyOnUnDock(node);
152
- }
153
-
154
- reorderTabs(node: DockNode, handle: TabHandle, state: string, index: number) {
155
- const N = node.children.length;
156
- const nodeIndexToDelete = state === 'left' ? index : index + 1;
157
- if (state == 'right' && nodeIndexToDelete >= node.children.length)
158
- return;
159
- if (state == 'left' && nodeIndexToDelete == 0)
160
- return;
161
-
162
- const indexes = Array.apply(null, {length: N}).map(Number.call, Number);
163
- const indexValue = indexes.splice(nodeIndexToDelete, 1)[0]; //remove element
164
- indexes.splice(state === 'left' ? index - 1 : index, 0, indexValue); //insert
165
-
166
- node.children = Utils.orderByIndexes(node.children, indexes); //apply
167
- (<FillDockContainer>node.container).tabHost.performTabsLayout(indexes);
168
- this.dockManager.notifyOnTabsReorder(node);
169
- }
170
-
171
- _performDock(referenceNode: DockNode, newNode: DockNode, direction: string, insertBeforeReference: boolean) {
172
- if (referenceNode.parent && referenceNode.parent.container.containerType === 'fill')
173
- referenceNode = referenceNode.parent;
174
-
175
- if (direction === 'fill' && referenceNode.container.containerType === 'fill') {
176
- referenceNode.addChild(newNode);
177
- referenceNode.performLayout(false);
178
- referenceNode.container.setActiveChild(newNode.container);
179
- this.dockManager.invalidate();
180
- this.dockManager.notifyOnDock(newNode);
181
- return;
155
+
156
+ reorderTabs(node: DockNode, handle: TabHandle, state: string, index: number) {
157
+ let N = node.children.length;
158
+ let nodeIndexToDelete = state === 'left' ? index : index + 1;
159
+ if (state == 'right' && nodeIndexToDelete >= node.children.length)
160
+ return;
161
+ if (state == 'left' && nodeIndexToDelete == 0)
162
+ return;
163
+
164
+ let indexes = Array.apply(null, { length: N }).map(Number.call, Number);
165
+ let indexValue = indexes.splice(nodeIndexToDelete, 1)[0]; //remove element
166
+ indexes.splice(state === 'left' ? index - 1 : index, 0, indexValue); //insert
167
+
168
+ node.children = Utils.orderByIndexes(node.children, indexes); //apply
169
+ (<FillDockContainer>node.container).tabHost.performTabsLayout(indexes);
170
+ this.dockManager.notifyOnTabsReorder(node);
182
171
  }
183
172
 
184
- // Check if reference node is root node
185
- const model = this.dockManager.context.model;
186
- let compositeContainer: IDockContainer;
187
- let compositeNode: DockNode;
188
- let referenceParent: DockNode;
189
-
190
- if (referenceNode === model.rootNode) {
191
- if (insertBeforeReference) {
192
- compositeContainer = this._createDockContainer(direction, newNode, referenceNode);
193
- compositeNode = new DockNode(compositeContainer);
194
- compositeNode.addChild(newNode);
195
- compositeNode.addChild(referenceNode);
196
- } else {
197
- compositeContainer = this._createDockContainer(direction, referenceNode, newNode);
198
- compositeNode = new DockNode(compositeContainer);
199
- compositeNode.addChild(referenceNode);
200
- compositeNode.addChild(newNode);
201
- }
202
-
203
- // Attach the root node to the dock manager's DOM
204
- this.dockManager.setRootNode(compositeNode);
205
- this.dockManager.rebuildLayout(this.dockManager.context.model.rootNode);
206
- compositeNode.container.setActiveChild(newNode.container);
207
- this.dockManager.invalidate();
208
- this.dockManager.notifyOnDock(newNode);
209
- return;
173
+ _performDock(referenceNode: DockNode, newNode: DockNode, direction: string, insertBeforeReference: boolean) {
174
+ if (referenceNode.parent && referenceNode.parent.container.containerType === 'fill')
175
+ referenceNode = referenceNode.parent;
176
+
177
+ if (direction === 'fill' && referenceNode.container.containerType === 'fill') {
178
+ referenceNode.addChild(newNode);
179
+ referenceNode.performLayout(false);
180
+ referenceNode.container.setActiveChild(newNode.container);
181
+ this.dockManager.invalidate();
182
+ this.dockManager.notifyOnDock(newNode);
183
+ return;
184
+ }
185
+
186
+ // Check if reference node is root node
187
+ let model = this.dockManager.context.model,
188
+ compositeContainer: IDockContainer,
189
+ compositeNode: DockNode,
190
+ referenceParent: DockNode;
191
+
192
+ if (referenceNode === model.rootNode) {
193
+ if (insertBeforeReference) {
194
+ compositeContainer = this._createDockContainer(direction, newNode, referenceNode);
195
+ compositeNode = new DockNode(compositeContainer);
196
+ compositeNode.addChild(newNode);
197
+ compositeNode.addChild(referenceNode);
198
+ }
199
+ else {
200
+ compositeContainer = this._createDockContainer(direction, referenceNode, newNode);
201
+ compositeNode = new DockNode(compositeContainer);
202
+ compositeNode.addChild(referenceNode);
203
+ compositeNode.addChild(newNode);
204
+ }
205
+
206
+ // Attach the root node to the dock manager's DOM
207
+ this.dockManager.setRootNode(compositeNode);
208
+ this.dockManager.rebuildLayout(this.dockManager.context.model.rootNode);
209
+ compositeNode.container.setActiveChild(newNode.container);
210
+ this.dockManager.invalidate();
211
+ this.dockManager.notifyOnDock(newNode);
212
+ return;
213
+ }
214
+
215
+ if (referenceNode.parent.container.containerType !== direction) {
216
+ referenceParent = referenceNode.parent;
217
+
218
+ // Get the dimensions of the reference node, for resizing later on
219
+ let referenceNodeWidth = referenceNode.container.containerElement.clientWidth;
220
+ let referenceNodeHeight = referenceNode.container.containerElement.clientHeight;
221
+
222
+ // Get the dimensions of the reference node, for resizing later on
223
+ let referenceNodeParentWidth = referenceParent.container.containerElement.clientWidth;
224
+ let referenceNodeParentHeight = referenceParent.container.containerElement.clientHeight;
225
+
226
+ // Replace the reference node with a new composite node with the reference and new node as it's children
227
+ compositeContainer = this._createDockContainer(direction, newNode, referenceNode);
228
+ compositeNode = new DockNode(compositeContainer);
229
+
230
+ referenceParent.addChildAfter(referenceNode, compositeNode);
231
+ referenceNode.detachFromParent();
232
+ Utils.removeNode(referenceNode.container.containerElement);
233
+
234
+ if (insertBeforeReference) {
235
+ compositeNode.addChild(newNode);
236
+ compositeNode.addChild(referenceNode);
237
+ }
238
+ else {
239
+ compositeNode.addChild(referenceNode);
240
+ compositeNode.addChild(newNode);
241
+ }
242
+
243
+ referenceParent.performLayout(false);
244
+ compositeNode.performLayout(true);
245
+
246
+ compositeNode.container.setActiveChild(newNode.container);
247
+ compositeNode.container.resize(referenceNodeWidth, referenceNodeHeight);
248
+ referenceParent.container.resize(referenceNodeParentWidth, referenceNodeParentHeight);
249
+ }
250
+ else {
251
+ // Add as a sibling, since the parent of the reference node is of the right composite type
252
+ referenceParent = referenceNode.parent;
253
+ if (insertBeforeReference)
254
+ referenceParent.addChildBefore(referenceNode, newNode);
255
+ else
256
+ referenceParent.addChildAfter(referenceNode, newNode);
257
+ referenceParent.performLayout(false);
258
+ referenceParent.container.setActiveChild(newNode.container);
259
+ }
260
+
261
+ // force resize the panel
262
+ let containerWidth = newNode.container.containerElement.clientWidth;
263
+ let containerHeight = newNode.container.containerElement.clientHeight;
264
+ newNode.container.resize(containerWidth, containerHeight);
265
+
266
+ this.dockManager.invalidate();
267
+ this.dockManager.notifyOnDock(newNode);
268
+ }
269
+
270
+ _forceResizeCompositeContainer = (container: IDockContainer) => {
271
+ let width = container.containerElement.clientWidth;
272
+ let height = container.containerElement.clientHeight;
273
+ container.resize(width, height);
210
274
  }
211
275
 
212
- if (referenceNode.parent.container.containerType !== direction) {
213
- referenceParent = referenceNode.parent;
214
-
215
- // Get the dimensions of the reference node, for resizing later on
216
- const referenceNodeWidth = referenceNode.container.containerElement.clientWidth;
217
- const referenceNodeHeight = referenceNode.container.containerElement.clientHeight;
218
-
219
- // Get the dimensions of the reference node, for resizing later on
220
- const referenceNodeParentWidth = referenceParent.container.containerElement.clientWidth;
221
- const referenceNodeParentHeight = referenceParent.container.containerElement.clientHeight;
222
-
223
- // Replace the reference node with a new composite node with the reference and new node as it's children
224
- compositeContainer = this._createDockContainer(direction, newNode, referenceNode);
225
- compositeNode = new DockNode(compositeContainer);
226
-
227
- referenceParent.addChildAfter(referenceNode, compositeNode);
228
- referenceNode.detachFromParent();
229
- Utils.removeNode(referenceNode.container.containerElement);
230
-
231
- if (insertBeforeReference) {
232
- compositeNode.addChild(newNode);
233
- compositeNode.addChild(referenceNode);
234
- } else {
235
- compositeNode.addChild(referenceNode);
236
- compositeNode.addChild(newNode);
237
- }
238
-
239
- referenceParent.performLayout(false);
240
- compositeNode.performLayout(true);
241
-
242
- compositeNode.container.setActiveChild(newNode.container);
243
- compositeNode.container.resize(referenceNodeWidth, referenceNodeHeight);
244
- referenceParent.container.resize(referenceNodeParentWidth, referenceNodeParentHeight);
245
- } else {
246
- // Add as a sibling, since the parent of the reference node is of the right composite type
247
- referenceParent = referenceNode.parent;
248
- if (insertBeforeReference)
249
- referenceParent.addChildBefore(referenceNode, newNode);
250
- else
251
- referenceParent.addChildAfter(referenceNode, newNode);
252
- referenceParent.performLayout(false);
253
- referenceParent.container.setActiveChild(newNode.container);
276
+ _createDockContainer(containerType: string, newNode: DockNode, referenceNode: DockNode) {
277
+ if (containerType === 'horizontal')
278
+ return new HorizontalDockContainer(this.dockManager, [newNode.container, referenceNode.container]);
279
+ if (containerType === 'vertical')
280
+ return new VerticalDockContainer(this.dockManager, [newNode.container, referenceNode.container]);
281
+ if (containerType === 'fill')
282
+ return new FillDockContainer(this.dockManager);
283
+ throw new Error('Failed to create dock container of type: ' + containerType);
254
284
  }
255
285
 
256
- // force resize the panel
257
- const containerWidth = newNode.container.containerElement.clientWidth;
258
- const containerHeight = newNode.container.containerElement.clientHeight;
259
- newNode.container.resize(containerWidth, containerHeight);
260
-
261
- this.dockManager.invalidate();
262
- this.dockManager.notifyOnDock(newNode);
263
- }
264
-
265
- _forceResizeCompositeContainer = (container: IDockContainer) => {
266
- const width = container.containerElement.clientWidth;
267
- const height = container.containerElement.clientHeight;
268
- container.resize(width, height);
269
- };
270
-
271
- _createDockContainer(containerType: string, newNode: DockNode, referenceNode: DockNode) {
272
- if (containerType === 'horizontal')
273
- return new HorizontalDockContainer(this.dockManager, [newNode.container, referenceNode.container]);
274
- if (containerType === 'vertical')
275
- return new VerticalDockContainer(this.dockManager, [newNode.container, referenceNode.container]);
276
- if (containerType === 'fill')
277
- return new FillDockContainer(this.dockManager);
278
- throw new Error('Failed to create dock container of type: ' + containerType);
279
- }
280
-
281
-
282
- /**
286
+
287
+ /**
283
288
  * Gets the bounds of the new node if it were to dock with the specified configuration
284
289
  * The state is not modified in this function. It is used for showing a preview of where
285
290
  * the panel would be docked when hovered over a dock wheel button
286
291
  */
287
- getDockBounds(referenceNode: DockNode, containerToDock: IDockContainer, direction: string, insertBeforeReference: boolean): IRectangle {
288
- let compositeNode; // The node that contains the splitter / fill node
289
- let childCount;
290
- let childPosition;
291
- let bounds: IRectangle;
292
-
293
- if (direction === 'fill') {
294
- // Since this is a fill operation, the highlight bounds is the same as the reference node
295
- // TODO: Create a tab handle highlight to show that it's going to be docked in a tab
296
- const targetElement = referenceNode.container.containerElement;
297
- const outerRect = this.dockManager.element.getBoundingClientRect();
298
- const targetElementRect = targetElement.getBoundingClientRect();
299
- return {x: targetElementRect.left - outerRect.left, y: targetElementRect.top - outerRect.top, width: targetElement.clientWidth, height: targetElement.clientHeight};
300
- }
292
+ getDockBounds(referenceNode: DockNode, containerToDock: IDockContainer, direction: string, insertBeforeReference: boolean): IRectangle {
293
+ let compositeNode; // The node that contains the splitter / fill node
294
+ let childCount;
295
+ let childPosition;
296
+ let bounds: IRectangle;
297
+
298
+ if (direction === 'fill') {
299
+ // Since this is a fill operation, the highlight bounds is the same as the reference node
300
+ // TODO: Create a tab handle highlight to show that it's going to be docked in a tab
301
+ let targetElement = referenceNode.container.containerElement;
302
+ let outerRect = this.dockManager.element.getBoundingClientRect();
303
+ let targetElementRect = targetElement.getBoundingClientRect();
304
+ return { x: targetElementRect.left - outerRect.left, y: targetElementRect.top - outerRect.top, width: targetElement.clientWidth, height: targetElement.clientHeight };
305
+ }
301
306
 
302
- if (referenceNode.parent && referenceNode.parent.container.containerType === 'fill')
303
- // Ignore the fill container's child and move one level up
304
- referenceNode = referenceNode.parent;
305
-
306
- // Flag to indicate of the renference node was replaced with a new composite node with 2 children
307
- let hierarchyModified = false;
308
- if (referenceNode.parent && referenceNode.parent.container.containerType === direction) {
309
- // The parent already is of the desired composite type. Will be inserted as sibling to the reference node
310
- compositeNode = referenceNode.parent;
311
- childCount = compositeNode.children.length;
312
- childPosition = compositeNode.children.indexOf(referenceNode) + (insertBeforeReference ? 0 : 1);
313
- } else {
314
- // The reference node will be replaced with a new composite node of the desired type with 2 children
315
- compositeNode = referenceNode;
316
- childCount = 1; // The newly inserted composite node will contain the reference node
317
- childPosition = (insertBeforeReference ? 0 : 1);
318
- hierarchyModified = true;
319
- }
307
+ if (referenceNode.parent && referenceNode.parent.container.containerType === 'fill')
308
+ // Ignore the fill container's child and move one level up
309
+ referenceNode = referenceNode.parent;
310
+
311
+ // Flag to indicate of the renference node was replaced with a new composite node with 2 children
312
+ let hierarchyModified = false;
313
+ if (referenceNode.parent && referenceNode.parent.container.containerType === direction) {
314
+ // The parent already is of the desired composite type. Will be inserted as sibling to the reference node
315
+ compositeNode = referenceNode.parent;
316
+ childCount = compositeNode.children.length;
317
+ childPosition = compositeNode.children.indexOf(referenceNode) + (insertBeforeReference ? 0 : 1);
318
+ } else {
319
+ // The reference node will be replaced with a new composite node of the desired type with 2 children
320
+ compositeNode = referenceNode;
321
+ childCount = 1; // The newly inserted composite node will contain the reference node
322
+ childPosition = (insertBeforeReference ? 0 : 1);
323
+ hierarchyModified = true;
324
+ }
320
325
 
321
- const splitBarSize = 5; // TODO: Get from DOM
322
- let targetPanelSize = 0;
323
- let targetPanelStart = 0;
324
- if (direction === 'vertical' || direction === 'horizontal') {
325
- // Existing size of the composite container (without the splitter bars).
326
- // This will also be the final size of the composite (splitter / fill)
327
- // container after the new panel has been docked
328
- const compositeSize = this._getVaringDimension(compositeNode.container, direction) - (childCount - 1) * splitBarSize;
329
-
330
- // size of the newly added panel
331
- const newPanelOriginalSize = this._getVaringDimension(containerToDock, direction);
332
- const scaleMultiplier = compositeSize / (compositeSize + newPanelOriginalSize);
333
-
334
- // Size of the panel after it has been docked and scaled
335
- targetPanelSize = newPanelOriginalSize * scaleMultiplier;
336
- if (hierarchyModified)
337
- targetPanelStart = insertBeforeReference ? 0 : compositeSize * scaleMultiplier;
338
- else {
339
- for (let i = 0; i < childPosition; i++)
340
- targetPanelStart += this._getVaringDimension(compositeNode.children[i].container, direction);
341
- targetPanelStart *= scaleMultiplier;
342
- }
343
- }
326
+ let splitBarSize = 5; // TODO: Get from DOM
327
+ let targetPanelSize = 0;
328
+ let targetPanelStart = 0;
329
+ if (direction === 'vertical' || direction === 'horizontal') {
330
+ // Existing size of the composite container (without the splitter bars).
331
+ // This will also be the final size of the composite (splitter / fill)
332
+ // container after the new panel has been docked
333
+ let compositeSize = this._getVaringDimension(compositeNode.container, direction) - (childCount - 1) * splitBarSize;
334
+
335
+ // size of the newly added panel
336
+ let newPanelOriginalSize = this._getVaringDimension(containerToDock, direction);
337
+ let scaleMultiplier = compositeSize / (compositeSize + newPanelOriginalSize);
338
+
339
+ // Size of the panel after it has been docked and scaled
340
+ targetPanelSize = newPanelOriginalSize * scaleMultiplier;
341
+ if (hierarchyModified)
342
+ targetPanelStart = insertBeforeReference ? 0 : compositeSize * scaleMultiplier;
343
+ else {
344
+ for (let i = 0; i < childPosition; i++)
345
+ targetPanelStart += this._getVaringDimension(compositeNode.children[i].container, direction);
346
+ targetPanelStart *= scaleMultiplier;
347
+ }
348
+ }
344
349
 
345
- bounds = {};
346
- const outerRect = this.dockManager.element.getBoundingClientRect();
347
- const rect = compositeNode.container.containerElement.getBoundingClientRect();
348
- if (direction === 'vertical') {
349
- bounds.x = rect.left - outerRect.left;
350
- bounds.y = rect.top - outerRect.top + targetPanelStart;
351
- bounds.width = compositeNode.container.width;
352
- bounds.height = targetPanelSize;
353
- } else if (direction === 'horizontal') {
354
- bounds.x = rect.left - outerRect.left + targetPanelStart;
355
- bounds.y = rect.top - outerRect.top;
356
- bounds.width = targetPanelSize;
357
- bounds.height = compositeNode.container.height;
358
- }
350
+ bounds = {};
351
+ let outerRect = this.dockManager.element.getBoundingClientRect();
352
+ let rect = compositeNode.container.containerElement.getBoundingClientRect();
353
+ if (direction === 'vertical') {
354
+ bounds.x = rect.left - outerRect.left;
355
+ bounds.y = rect.top - outerRect.top + targetPanelStart;
356
+ bounds.width = compositeNode.container.width;
357
+ bounds.height = targetPanelSize;
358
+ } else if (direction === 'horizontal') {
359
+ bounds.x = rect.left - outerRect.left + targetPanelStart;
360
+ bounds.y = rect.top - outerRect.top;
361
+ bounds.width = targetPanelSize;
362
+ bounds.height = compositeNode.container.height;
363
+ }
359
364
 
360
- return bounds;
361
- }
365
+ return bounds;
366
+ }
362
367
 
363
- _getVaringDimension(container: IDockContainer, direction: string): number {
364
- if (direction === 'vertical')
365
- return container.height;
366
- if (direction === 'horizontal')
367
- return container.width;
368
- return 0;
369
- }
368
+ _getVaringDimension(container: IDockContainer, direction: string): number {
369
+ if (direction === 'vertical')
370
+ return container.height;
371
+ if (direction === 'horizontal')
372
+ return container.width;
373
+ return 0;
374
+ }
370
375
  }