dockview 1.5.1 → 1.5.2

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 (329) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +52 -52
  3. package/dist/cjs/actionbar/actionsContainer.d.ts +7 -7
  4. package/dist/cjs/actionbar/actionsContainer.js +26 -26
  5. package/dist/cjs/api/component.api.d.ts +144 -144
  6. package/dist/cjs/api/component.api.js +571 -571
  7. package/dist/cjs/api/gridviewPanelApi.d.ts +36 -36
  8. package/dist/cjs/api/gridviewPanelApi.js +47 -47
  9. package/dist/cjs/api/groupPanelApi.d.ts +34 -34
  10. package/dist/cjs/api/groupPanelApi.js +85 -85
  11. package/dist/cjs/api/panelApi.d.ts +81 -81
  12. package/dist/cjs/api/panelApi.js +121 -121
  13. package/dist/cjs/api/paneviewPanelApi.d.ts +26 -26
  14. package/dist/cjs/api/paneviewPanelApi.js +57 -57
  15. package/dist/cjs/api/splitviewPanelApi.d.ts +32 -32
  16. package/dist/cjs/api/splitviewPanelApi.js +47 -47
  17. package/dist/cjs/array.d.ts +13 -13
  18. package/dist/cjs/array.js +77 -77
  19. package/dist/cjs/dnd/abstractDragHandler.d.ts +11 -11
  20. package/dist/cjs/dnd/abstractDragHandler.js +115 -115
  21. package/dist/cjs/dnd/dataTransfer.d.ts +31 -31
  22. package/dist/cjs/dnd/dataTransfer.js +100 -100
  23. package/dist/cjs/dnd/dnd.d.ts +27 -27
  24. package/dist/cjs/dnd/dnd.js +64 -64
  25. package/dist/cjs/dnd/droptarget.d.ts +37 -37
  26. package/dist/cjs/dnd/droptarget.js +201 -201
  27. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +27 -27
  28. package/dist/cjs/dockview/components/tab/defaultTab.js +121 -121
  29. package/dist/cjs/dockview/components/watermark/watermark.d.ts +20 -20
  30. package/dist/cjs/dockview/components/watermark/watermark.js +101 -101
  31. package/dist/cjs/dockview/defaultGroupPanelView.d.ts +29 -29
  32. package/dist/cjs/dockview/defaultGroupPanelView.js +68 -68
  33. package/dist/cjs/dockview/deserializer.d.ts +5 -5
  34. package/dist/cjs/dockview/deserializer.js +2 -2
  35. package/dist/cjs/dockview/dockviewComponent.d.ts +125 -125
  36. package/dist/cjs/dockview/dockviewComponent.js +614 -614
  37. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  38. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +31 -31
  39. package/dist/cjs/dockview/dockviewGroupPanel.js +156 -156
  40. package/dist/cjs/dockview/options.d.ts +88 -88
  41. package/dist/cjs/dockview/options.js +2 -2
  42. package/dist/cjs/dom.d.ts +14 -14
  43. package/dist/cjs/dom.js +182 -182
  44. package/dist/cjs/events.d.ts +30 -30
  45. package/dist/cjs/events.js +129 -129
  46. package/dist/cjs/gridview/baseComponentGridview.d.ts +87 -87
  47. package/dist/cjs/gridview/baseComponentGridview.js +279 -279
  48. package/dist/cjs/gridview/basePanelView.d.ts +43 -43
  49. package/dist/cjs/gridview/basePanelView.js +123 -123
  50. package/dist/cjs/gridview/branchNode.d.ts +49 -46
  51. package/dist/cjs/gridview/branchNode.js +342 -342
  52. package/dist/cjs/gridview/branchNode.js.map +1 -1
  53. package/dist/cjs/gridview/gridview.d.ts +126 -123
  54. package/dist/cjs/gridview/gridview.js +479 -479
  55. package/dist/cjs/gridview/gridview.js.map +1 -1
  56. package/dist/cjs/gridview/gridviewComponent.d.ts +85 -85
  57. package/dist/cjs/gridview/gridviewComponent.js +325 -325
  58. package/dist/cjs/gridview/gridviewPanel.d.ts +60 -60
  59. package/dist/cjs/gridview/gridviewPanel.js +202 -202
  60. package/dist/cjs/gridview/leafNode.d.ts +34 -31
  61. package/dist/cjs/gridview/leafNode.js +170 -165
  62. package/dist/cjs/gridview/leafNode.js.map +1 -1
  63. package/dist/cjs/gridview/options.d.ts +18 -18
  64. package/dist/cjs/gridview/options.js +2 -2
  65. package/dist/cjs/gridview/types.d.ts +3 -3
  66. package/dist/cjs/gridview/types.js +2 -2
  67. package/dist/cjs/groupview/dnd.d.ts +5 -5
  68. package/dist/cjs/groupview/dnd.js +9 -9
  69. package/dist/cjs/groupview/groupPanel.d.ts +32 -32
  70. package/dist/cjs/groupview/groupPanel.js +2 -2
  71. package/dist/cjs/groupview/groupview.d.ts +177 -177
  72. package/dist/cjs/groupview/groupview.js +589 -589
  73. package/dist/cjs/groupview/groupviewPanel.d.ts +35 -35
  74. package/dist/cjs/groupview/groupviewPanel.js +128 -128
  75. package/dist/cjs/groupview/panel/content.d.ts +30 -30
  76. package/dist/cjs/groupview/panel/content.js +100 -100
  77. package/dist/cjs/groupview/tab.d.ts +41 -41
  78. package/dist/cjs/groupview/tab.js +120 -120
  79. package/dist/cjs/groupview/titlebar/tabsContainer.d.ts +68 -68
  80. package/dist/cjs/groupview/titlebar/tabsContainer.js +258 -258
  81. package/dist/cjs/groupview/types.d.ts +52 -52
  82. package/dist/cjs/groupview/types.js +2 -2
  83. package/dist/cjs/hostedContainer.d.ts +23 -23
  84. package/dist/cjs/hostedContainer.js +73 -73
  85. package/dist/cjs/index.d.ts +30 -30
  86. package/dist/cjs/index.js +46 -46
  87. package/dist/cjs/lifecycle.d.ts +22 -22
  88. package/dist/cjs/lifecycle.js +88 -88
  89. package/dist/cjs/math.d.ts +4 -4
  90. package/dist/cjs/math.js +15 -15
  91. package/dist/cjs/panel/componentFactory.d.ts +8 -8
  92. package/dist/cjs/panel/componentFactory.js +30 -30
  93. package/dist/cjs/panel/types.d.ts +33 -33
  94. package/dist/cjs/panel/types.js +2 -2
  95. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +21 -21
  96. package/dist/cjs/paneview/defaultPaneviewHeader.js +90 -90
  97. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +19 -19
  98. package/dist/cjs/paneview/draggablePaneviewPanel.js +129 -129
  99. package/dist/cjs/paneview/options.d.ts +27 -27
  100. package/dist/cjs/paneview/options.js +2 -2
  101. package/dist/cjs/paneview/paneview.d.ts +40 -40
  102. package/dist/cjs/paneview/paneview.js +201 -201
  103. package/dist/cjs/paneview/paneviewComponent.d.ts +129 -129
  104. package/dist/cjs/paneview/paneviewComponent.js +394 -394
  105. package/dist/cjs/paneview/paneviewPanel.d.ts +92 -89
  106. package/dist/cjs/paneview/paneviewPanel.js +274 -274
  107. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  108. package/dist/cjs/react/deserializer.d.ts +9 -9
  109. package/dist/cjs/react/deserializer.js +43 -43
  110. package/dist/cjs/react/dockview/defaultTab.d.ts +4 -4
  111. package/dist/cjs/react/dockview/defaultTab.js +72 -72
  112. package/dist/cjs/react/dockview/dockview.d.ts +34 -34
  113. package/dist/cjs/react/dockview/dockview.js +212 -212
  114. package/dist/cjs/react/dockview/groupControlsRenderer.d.ts +43 -43
  115. package/dist/cjs/react/dockview/groupControlsRenderer.js +86 -86
  116. package/dist/cjs/react/dockview/reactContentPart.d.ts +30 -30
  117. package/dist/cjs/react/dockview/reactContentPart.js +58 -58
  118. package/dist/cjs/react/dockview/reactHeaderPart.d.ts +26 -26
  119. package/dist/cjs/react/dockview/reactHeaderPart.js +55 -55
  120. package/dist/cjs/react/dockview/reactWatermarkPart.d.ts +29 -29
  121. package/dist/cjs/react/dockview/reactWatermarkPart.js +65 -65
  122. package/dist/cjs/react/dockview/v2/reactContentRenderer.d.ts +29 -29
  123. package/dist/cjs/react/dockview/v2/reactContentRenderer.js +87 -87
  124. package/dist/cjs/react/dockview/v2/reactGroupPanelView.d.ts +7 -7
  125. package/dist/cjs/react/dockview/v2/reactGroupPanelView.js +34 -34
  126. package/dist/cjs/react/dockview/v2/webviewContentRenderer.d.ts +18 -18
  127. package/dist/cjs/react/dockview/v2/webviewContentRenderer.js +45 -45
  128. package/dist/cjs/react/gridview/gridview.d.ts +24 -24
  129. package/dist/cjs/react/gridview/gridview.js +112 -112
  130. package/dist/cjs/react/gridview/view.d.ts +11 -11
  131. package/dist/cjs/react/gridview/view.js +40 -40
  132. package/dist/cjs/react/index.d.ts +9 -9
  133. package/dist/cjs/react/index.js +23 -23
  134. package/dist/cjs/react/paneview/paneview.d.ts +30 -30
  135. package/dist/cjs/react/paneview/paneview.js +155 -155
  136. package/dist/cjs/react/paneview/view.d.ts +20 -20
  137. package/dist/cjs/react/paneview/view.js +44 -44
  138. package/dist/cjs/react/react.d.ts +36 -36
  139. package/dist/cjs/react/react.js +194 -194
  140. package/dist/cjs/react/splitview/splitview.d.ts +24 -24
  141. package/dist/cjs/react/splitview/splitview.js +108 -108
  142. package/dist/cjs/react/splitview/view.d.ts +10 -10
  143. package/dist/cjs/react/splitview/view.js +40 -40
  144. package/dist/cjs/react/svg.d.ts +3 -3
  145. package/dist/cjs/react/svg.js +35 -35
  146. package/dist/cjs/react/types.d.ts +7 -7
  147. package/dist/cjs/react/types.js +2 -2
  148. package/dist/cjs/splitview/core/options.d.ts +26 -26
  149. package/dist/cjs/splitview/core/options.js +2 -2
  150. package/dist/cjs/splitview/core/splitview.d.ts +127 -124
  151. package/dist/cjs/splitview/core/splitview.js +908 -908
  152. package/dist/cjs/splitview/core/splitview.js.map +1 -1
  153. package/dist/cjs/splitview/core/viewItem.d.ts +25 -25
  154. package/dist/cjs/splitview/core/viewItem.js +124 -124
  155. package/dist/cjs/splitview/splitviewComponent.d.ts +101 -101
  156. package/dist/cjs/splitview/splitviewComponent.js +373 -373
  157. package/dist/cjs/splitview/splitviewPanel.d.ts +45 -42
  158. package/dist/cjs/splitview/splitviewPanel.js +178 -178
  159. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  160. package/dist/cjs/svg.d.ts +3 -3
  161. package/dist/cjs/svg.js +43 -43
  162. package/dist/cjs/types.d.ts +7 -7
  163. package/dist/cjs/types.js +2 -2
  164. package/dist/dockview.amd.js +6737 -6732
  165. package/dist/dockview.amd.min.js +2 -2
  166. package/dist/dockview.amd.min.noStyle.js +2 -2
  167. package/dist/dockview.amd.noStyle.js +6743 -6738
  168. package/dist/dockview.cjs.js +6736 -6731
  169. package/dist/dockview.esm.js +6731 -6726
  170. package/dist/dockview.esm.min.js +2 -2
  171. package/dist/dockview.js +6737 -6732
  172. package/dist/dockview.min.js +2 -2
  173. package/dist/dockview.min.noStyle.js +2 -2
  174. package/dist/dockview.noStyle.js +6743 -6738
  175. package/dist/esm/actionbar/actionsContainer.d.ts +7 -7
  176. package/dist/esm/actionbar/actionsContainer.js +17 -17
  177. package/dist/esm/api/component.api.d.ts +144 -144
  178. package/dist/esm/api/component.api.js +326 -326
  179. package/dist/esm/api/gridviewPanelApi.d.ts +36 -36
  180. package/dist/esm/api/gridviewPanelApi.js +25 -25
  181. package/dist/esm/api/groupPanelApi.d.ts +34 -34
  182. package/dist/esm/api/groupPanelApi.js +50 -50
  183. package/dist/esm/api/panelApi.d.ts +81 -81
  184. package/dist/esm/api/panelApi.js +79 -79
  185. package/dist/esm/api/paneviewPanelApi.d.ts +26 -26
  186. package/dist/esm/api/paneviewPanelApi.js +27 -27
  187. package/dist/esm/api/splitviewPanelApi.d.ts +32 -32
  188. package/dist/esm/api/splitviewPanelApi.js +25 -25
  189. package/dist/esm/array.d.ts +13 -13
  190. package/dist/esm/array.js +67 -67
  191. package/dist/esm/dnd/abstractDragHandler.d.ts +11 -11
  192. package/dist/esm/dnd/abstractDragHandler.js +37 -37
  193. package/dist/esm/dnd/dataTransfer.d.ts +31 -31
  194. package/dist/esm/dnd/dataTransfer.js +69 -69
  195. package/dist/esm/dnd/dnd.d.ts +27 -27
  196. package/dist/esm/dnd/dnd.js +41 -41
  197. package/dist/esm/dnd/droptarget.d.ts +37 -37
  198. package/dist/esm/dnd/droptarget.js +167 -167
  199. package/dist/esm/dockview/components/tab/defaultTab.d.ts +27 -27
  200. package/dist/esm/dockview/components/tab/defaultTab.js +79 -79
  201. package/dist/esm/dockview/components/watermark/watermark.d.ts +20 -20
  202. package/dist/esm/dockview/components/watermark/watermark.js +70 -70
  203. package/dist/esm/dockview/defaultGroupPanelView.d.ts +29 -29
  204. package/dist/esm/dockview/defaultGroupPanelView.js +44 -44
  205. package/dist/esm/dockview/deserializer.d.ts +5 -5
  206. package/dist/esm/dockview/deserializer.js +1 -1
  207. package/dist/esm/dockview/dockviewComponent.d.ts +125 -125
  208. package/dist/esm/dockview/dockviewComponent.js +468 -468
  209. package/dist/esm/dockview/dockviewGroupPanel.d.ts +31 -31
  210. package/dist/esm/dockview/dockviewGroupPanel.js +107 -107
  211. package/dist/esm/dockview/options.d.ts +88 -88
  212. package/dist/esm/dockview/options.js +1 -1
  213. package/dist/esm/dom.d.ts +14 -14
  214. package/dist/esm/dom.js +113 -113
  215. package/dist/esm/events.d.ts +30 -30
  216. package/dist/esm/events.js +88 -88
  217. package/dist/esm/gridview/baseComponentGridview.d.ts +87 -87
  218. package/dist/esm/gridview/baseComponentGridview.js +189 -189
  219. package/dist/esm/gridview/basePanelView.d.ts +43 -43
  220. package/dist/esm/gridview/basePanelView.js +74 -74
  221. package/dist/esm/gridview/branchNode.d.ts +49 -46
  222. package/dist/esm/gridview/branchNode.js +218 -218
  223. package/dist/esm/gridview/gridview.d.ts +126 -123
  224. package/dist/esm/gridview/gridview.js +397 -397
  225. package/dist/esm/gridview/gridviewComponent.d.ts +85 -85
  226. package/dist/esm/gridview/gridviewComponent.js +238 -238
  227. package/dist/esm/gridview/gridviewPanel.d.ts +60 -60
  228. package/dist/esm/gridview/gridviewPanel.js +138 -138
  229. package/dist/esm/gridview/leafNode.d.ts +34 -31
  230. package/dist/esm/gridview/leafNode.js +103 -98
  231. package/dist/esm/gridview/options.d.ts +18 -18
  232. package/dist/esm/gridview/options.js +1 -1
  233. package/dist/esm/gridview/types.d.ts +3 -3
  234. package/dist/esm/gridview/types.js +1 -1
  235. package/dist/esm/groupview/dnd.d.ts +5 -5
  236. package/dist/esm/groupview/dnd.js +6 -6
  237. package/dist/esm/groupview/groupPanel.d.ts +32 -32
  238. package/dist/esm/groupview/groupPanel.js +1 -1
  239. package/dist/esm/groupview/groupview.d.ts +177 -177
  240. package/dist/esm/groupview/groupview.js +444 -444
  241. package/dist/esm/groupview/groupviewPanel.d.ts +35 -35
  242. package/dist/esm/groupview/groupviewPanel.js +61 -61
  243. package/dist/esm/groupview/panel/content.d.ts +30 -30
  244. package/dist/esm/groupview/panel/content.js +73 -73
  245. package/dist/esm/groupview/tab.d.ts +41 -41
  246. package/dist/esm/groupview/tab.js +90 -90
  247. package/dist/esm/groupview/titlebar/tabsContainer.d.ts +68 -68
  248. package/dist/esm/groupview/titlebar/tabsContainer.js +190 -190
  249. package/dist/esm/groupview/types.d.ts +52 -52
  250. package/dist/esm/groupview/types.js +1 -1
  251. package/dist/esm/hostedContainer.d.ts +23 -23
  252. package/dist/esm/hostedContainer.js +63 -63
  253. package/dist/esm/index.d.ts +30 -30
  254. package/dist/esm/index.js +23 -23
  255. package/dist/esm/lifecycle.d.ts +22 -22
  256. package/dist/esm/lifecycle.js +39 -39
  257. package/dist/esm/math.d.ts +4 -4
  258. package/dist/esm/math.js +10 -10
  259. package/dist/esm/panel/componentFactory.d.ts +8 -8
  260. package/dist/esm/panel/componentFactory.js +24 -24
  261. package/dist/esm/panel/types.d.ts +33 -33
  262. package/dist/esm/panel/types.js +1 -1
  263. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +21 -21
  264. package/dist/esm/paneview/defaultPaneviewHeader.js +63 -63
  265. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +19 -19
  266. package/dist/esm/paneview/draggablePaneviewPanel.js +90 -90
  267. package/dist/esm/paneview/options.d.ts +27 -27
  268. package/dist/esm/paneview/options.js +1 -1
  269. package/dist/esm/paneview/paneview.d.ts +40 -40
  270. package/dist/esm/paneview/paneview.js +145 -145
  271. package/dist/esm/paneview/paneviewComponent.d.ts +129 -129
  272. package/dist/esm/paneview/paneviewComponent.js +270 -270
  273. package/dist/esm/paneview/paneviewPanel.d.ts +92 -89
  274. package/dist/esm/paneview/paneviewPanel.js +191 -191
  275. package/dist/esm/react/deserializer.d.ts +9 -9
  276. package/dist/esm/react/deserializer.js +38 -38
  277. package/dist/esm/react/dockview/defaultTab.d.ts +4 -4
  278. package/dist/esm/react/dockview/defaultTab.js +34 -34
  279. package/dist/esm/react/dockview/dockview.d.ts +34 -34
  280. package/dist/esm/react/dockview/dockview.js +157 -157
  281. package/dist/esm/react/dockview/groupControlsRenderer.d.ts +43 -43
  282. package/dist/esm/react/dockview/groupControlsRenderer.js +68 -68
  283. package/dist/esm/react/dockview/reactContentPart.d.ts +30 -30
  284. package/dist/esm/react/dockview/reactContentPart.js +49 -49
  285. package/dist/esm/react/dockview/reactHeaderPart.d.ts +26 -26
  286. package/dist/esm/react/dockview/reactHeaderPart.js +46 -46
  287. package/dist/esm/react/dockview/reactWatermarkPart.d.ts +29 -29
  288. package/dist/esm/react/dockview/reactWatermarkPart.js +55 -55
  289. package/dist/esm/react/dockview/v2/reactContentRenderer.d.ts +29 -29
  290. package/dist/esm/react/dockview/v2/reactContentRenderer.js +69 -69
  291. package/dist/esm/react/dockview/v2/reactGroupPanelView.d.ts +7 -7
  292. package/dist/esm/react/dockview/v2/reactGroupPanelView.js +12 -12
  293. package/dist/esm/react/dockview/v2/webviewContentRenderer.d.ts +18 -18
  294. package/dist/esm/react/dockview/v2/webviewContentRenderer.js +36 -36
  295. package/dist/esm/react/gridview/gridview.d.ts +24 -24
  296. package/dist/esm/react/gridview/gridview.js +70 -70
  297. package/dist/esm/react/gridview/view.d.ts +11 -11
  298. package/dist/esm/react/gridview/view.js +18 -18
  299. package/dist/esm/react/index.d.ts +9 -9
  300. package/dist/esm/react/index.js +7 -7
  301. package/dist/esm/react/paneview/paneview.d.ts +30 -30
  302. package/dist/esm/react/paneview/paneview.js +100 -100
  303. package/dist/esm/react/paneview/view.d.ts +20 -20
  304. package/dist/esm/react/paneview/view.js +35 -35
  305. package/dist/esm/react/react.d.ts +36 -36
  306. package/dist/esm/react/react.js +125 -125
  307. package/dist/esm/react/splitview/splitview.d.ts +24 -24
  308. package/dist/esm/react/splitview/splitview.js +66 -66
  309. package/dist/esm/react/splitview/view.d.ts +10 -10
  310. package/dist/esm/react/splitview/view.js +18 -18
  311. package/dist/esm/react/svg.d.ts +3 -3
  312. package/dist/esm/react/svg.js +7 -7
  313. package/dist/esm/react/types.d.ts +7 -7
  314. package/dist/esm/react/types.js +1 -1
  315. package/dist/esm/splitview/core/options.d.ts +26 -26
  316. package/dist/esm/splitview/core/options.js +1 -1
  317. package/dist/esm/splitview/core/splitview.d.ts +127 -124
  318. package/dist/esm/splitview/core/splitview.js +689 -689
  319. package/dist/esm/splitview/core/viewItem.d.ts +25 -25
  320. package/dist/esm/splitview/core/viewItem.js +79 -79
  321. package/dist/esm/splitview/splitviewComponent.d.ts +101 -101
  322. package/dist/esm/splitview/splitviewComponent.js +249 -249
  323. package/dist/esm/splitview/splitviewPanel.d.ts +45 -42
  324. package/dist/esm/splitview/splitviewPanel.js +107 -107
  325. package/dist/esm/svg.d.ts +3 -3
  326. package/dist/esm/svg.js +31 -31
  327. package/dist/esm/types.d.ts +7 -7
  328. package/dist/esm/types.js +1 -1
  329. package/package.json +2 -2
@@ -1,444 +1,444 @@
1
- import { DockviewApi } from '../api/component.api';
2
- import { getPanelData } from '../dnd/dataTransfer';
3
- import { Droptarget, Position } from '../dnd/droptarget';
4
- import { isAncestor, toggleClass } from '../dom';
5
- import { addDisposableListener, Emitter } from '../events';
6
- import { CompositeDisposable } from '../lifecycle';
7
- import { ContentContainer } from './panel/content';
8
- import { TabsContainer } from './titlebar/tabsContainer';
9
- import { DockviewDropTargets } from './dnd';
10
- export class Groupview extends CompositeDisposable {
11
- constructor(container, accessor, id, options, parent) {
12
- super();
13
- this.container = container;
14
- this.accessor = accessor;
15
- this.id = id;
16
- this.options = options;
17
- this.parent = parent;
18
- this._isGroupActive = false;
19
- this._locked = false;
20
- this.mostRecentlyUsed = [];
21
- this._onDidChange = new Emitter();
22
- this.onDidChange = this._onDidChange.event;
23
- this._width = 0;
24
- this._height = 0;
25
- this._panels = [];
26
- this._onMove = new Emitter();
27
- this.onMove = this._onMove.event;
28
- this._onDidDrop = new Emitter();
29
- this.onDidDrop = this._onDidDrop.event;
30
- this._onDidAddPanel = new Emitter();
31
- this.onDidAddPanel = this._onDidAddPanel.event;
32
- this._onDidRemovePanel = new Emitter();
33
- this.onDidRemovePanel = this._onDidRemovePanel.event;
34
- this._onDidActivePanelChange = new Emitter();
35
- this.onDidActivePanelChange = this._onDidActivePanelChange.event;
36
- this.container.classList.add('groupview');
37
- this.tabsContainer = new TabsContainer(this.accessor, this.parent, {
38
- tabHeight: options.tabHeight,
39
- });
40
- this.contentContainer = new ContentContainer();
41
- this.dropTarget = new Droptarget(this.contentContainer.element, {
42
- validOverlays: 'all',
43
- canDisplayOverlay: (event, quadrant) => {
44
- if (this.locked && !quadrant) {
45
- return false;
46
- }
47
- const data = getPanelData();
48
- if (data && data.viewId === this.accessor.id) {
49
- const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
50
- return !groupHasOnePanelAndIsActiveDragElement;
51
- }
52
- return this.canDisplayOverlay(event, DockviewDropTargets.Panel);
53
- },
54
- });
55
- container.append(this.tabsContainer.element, this.contentContainer.element);
56
- this.header.hidden = !!options.hideHeader;
57
- this.locked = !!options.locked;
58
- this.addDisposables(this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.tabsContainer.onDrop((event) => {
59
- this.handleDropEvent(event.event, Position.Center, event.index);
60
- }), this.contentContainer.onDidFocus(() => {
61
- this.accessor.doSetGroupActive(this.parent, true);
62
- }), this.contentContainer.onDidBlur(() => {
63
- // noop
64
- }), this.dropTarget.onDrop((event) => {
65
- this.handleDropEvent(event.nativeEvent, event.position);
66
- }));
67
- }
68
- get element() {
69
- throw new Error('not supported');
70
- }
71
- get activePanel() {
72
- return this._activePanel;
73
- }
74
- get locked() {
75
- return this._locked;
76
- }
77
- set locked(value) {
78
- this._locked = value;
79
- }
80
- get isActive() {
81
- return this._isGroupActive;
82
- }
83
- get panels() {
84
- return this._panels;
85
- }
86
- get size() {
87
- return this._panels.length;
88
- }
89
- get isEmpty() {
90
- return this._panels.length === 0;
91
- }
92
- get minimumHeight() {
93
- return 100;
94
- }
95
- get maximumHeight() {
96
- return Number.MAX_SAFE_INTEGER;
97
- }
98
- get minimumWidth() {
99
- return 100;
100
- }
101
- get maximumWidth() {
102
- return Number.MAX_SAFE_INTEGER;
103
- }
104
- get hasWatermark() {
105
- return !!(this.watermark && this.container.contains(this.watermark.element));
106
- }
107
- get header() {
108
- return this.tabsContainer;
109
- }
110
- get isContentFocused() {
111
- if (!document.activeElement) {
112
- return false;
113
- }
114
- return isAncestor(document.activeElement, this.contentContainer.element);
115
- }
116
- initialize() {
117
- var _a, _b;
118
- if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.panels) {
119
- this.options.panels.forEach((panel) => {
120
- this.doAddPanel(panel);
121
- });
122
- }
123
- if ((_b = this.options) === null || _b === void 0 ? void 0 : _b.activePanel) {
124
- this.openPanel(this.options.activePanel);
125
- }
126
- // must be run after the constructor otherwise this.parent may not be
127
- // correctly initialized
128
- this.setActive(this.isActive, true, true);
129
- this.updateContainer();
130
- if (this.accessor.options.createGroupControlElement) {
131
- this._control = this.accessor.options.createGroupControlElement(this.parent);
132
- this.addDisposables(this._control);
133
- this._control.init({
134
- containerApi: new DockviewApi(this.accessor),
135
- api: this.parent.api,
136
- });
137
- this.tabsContainer.setActionElement(this._control.element);
138
- }
139
- }
140
- indexOf(panel) {
141
- return this.tabsContainer.indexOf(panel.id);
142
- }
143
- toJSON() {
144
- var _a;
145
- const result = {
146
- views: this.tabsContainer.panels,
147
- activeView: (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.id,
148
- id: this.id,
149
- };
150
- if (this.locked) {
151
- result.locked = true;
152
- }
153
- if (this.header.hidden) {
154
- result.hideHeader = true;
155
- }
156
- return result;
157
- }
158
- moveToNext(options) {
159
- if (!options) {
160
- options = {};
161
- }
162
- if (!options.panel) {
163
- options.panel = this.activePanel;
164
- }
165
- const index = options.panel ? this.panels.indexOf(options.panel) : -1;
166
- let normalizedIndex;
167
- if (index < this.panels.length - 1) {
168
- normalizedIndex = index + 1;
169
- }
170
- else if (!options.suppressRoll) {
171
- normalizedIndex = 0;
172
- }
173
- else {
174
- return;
175
- }
176
- this.openPanel(this.panels[normalizedIndex]);
177
- }
178
- moveToPrevious(options) {
179
- if (!options) {
180
- options = {};
181
- }
182
- if (!options.panel) {
183
- options.panel = this.activePanel;
184
- }
185
- if (!options.panel) {
186
- return;
187
- }
188
- const index = this.panels.indexOf(options.panel);
189
- let normalizedIndex;
190
- if (index > 0) {
191
- normalizedIndex = index - 1;
192
- }
193
- else if (!options.suppressRoll) {
194
- normalizedIndex = this.panels.length - 1;
195
- }
196
- else {
197
- return;
198
- }
199
- this.openPanel(this.panels[normalizedIndex]);
200
- }
201
- containsPanel(panel) {
202
- return this.panels.includes(panel);
203
- }
204
- init(_params) {
205
- //noop
206
- }
207
- update(_params) {
208
- //noop
209
- }
210
- focus() {
211
- var _a;
212
- (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus();
213
- }
214
- openPanel(panel, options = {}) {
215
- if (typeof options.index !== 'number' ||
216
- options.index > this.panels.length) {
217
- options.index = this.panels.length;
218
- }
219
- const skipSetPanelActive = !!options.skipSetPanelActive;
220
- const skipSetGroupActive = !!options.skipSetGroupActive;
221
- // ensure the group is updated before we fire any events
222
- panel.updateParentGroup(this.parent, true);
223
- if (this._activePanel === panel) {
224
- if (!skipSetGroupActive) {
225
- this.accessor.doSetGroupActive(this.parent);
226
- }
227
- return;
228
- }
229
- this.doAddPanel(panel, options.index, skipSetPanelActive);
230
- if (!skipSetPanelActive) {
231
- this.doSetActivePanel(panel);
232
- }
233
- if (!skipSetGroupActive) {
234
- this.accessor.doSetGroupActive(this.parent, !!options.skipFocus);
235
- }
236
- this.updateContainer();
237
- }
238
- removePanel(groupItemOrId) {
239
- const id = typeof groupItemOrId === 'string'
240
- ? groupItemOrId
241
- : groupItemOrId.id;
242
- const panelToRemove = this._panels.find((panel) => panel.id === id);
243
- if (!panelToRemove) {
244
- throw new Error('invalid operation');
245
- }
246
- return this._removePanel(panelToRemove);
247
- }
248
- closeAllPanels() {
249
- if (this.panels.length > 0) {
250
- // take a copy since we will be edting the array as we iterate through
251
- const arrPanelCpy = [...this.panels];
252
- for (const panel of arrPanelCpy) {
253
- this.doClose(panel);
254
- }
255
- }
256
- else {
257
- this.accessor.removeGroup(this.parent);
258
- }
259
- }
260
- closePanel(panel) {
261
- this.doClose(panel);
262
- }
263
- doClose(panel) {
264
- this.accessor.removePanel(panel);
265
- }
266
- isPanelActive(panel) {
267
- return this._activePanel === panel;
268
- }
269
- updateActions(element) {
270
- this.tabsContainer.setActionElement(element);
271
- }
272
- setActive(isGroupActive, skipFocus = false, force = false) {
273
- var _a, _b;
274
- if (!force && this.isActive === isGroupActive) {
275
- if (!skipFocus) {
276
- (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus();
277
- }
278
- return;
279
- }
280
- this._isGroupActive = isGroupActive;
281
- toggleClass(this.container, 'active-group', isGroupActive);
282
- toggleClass(this.container, 'inactive-group', !isGroupActive);
283
- this.tabsContainer.setActive(this.isActive);
284
- if (!this._activePanel && this.panels.length > 0) {
285
- this.doSetActivePanel(this.panels[0]);
286
- }
287
- this.updateContainer();
288
- if (isGroupActive) {
289
- if (!skipFocus) {
290
- (_b = this._activePanel) === null || _b === void 0 ? void 0 : _b.focus();
291
- }
292
- }
293
- }
294
- layout(width, height) {
295
- var _a;
296
- this._width = width;
297
- this._height = height;
298
- this.contentContainer.layout(this._width, this._height);
299
- if ((_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.layout) {
300
- this._activePanel.layout(this._width, this._height);
301
- }
302
- }
303
- _removePanel(panel) {
304
- const isActivePanel = this._activePanel === panel;
305
- this.doRemovePanel(panel);
306
- if (isActivePanel && this.panels.length > 0) {
307
- const nextPanel = this.mostRecentlyUsed[0];
308
- this.openPanel(nextPanel);
309
- }
310
- if (this._activePanel && this.panels.length === 0) {
311
- this.doSetActivePanel(undefined);
312
- }
313
- this.updateContainer();
314
- return panel;
315
- }
316
- doRemovePanel(panel) {
317
- const index = this.panels.indexOf(panel);
318
- if (this._activePanel === panel) {
319
- this.contentContainer.closePanel();
320
- }
321
- this.tabsContainer.delete(panel.id);
322
- this._panels.splice(index, 1);
323
- if (this.mostRecentlyUsed.includes(panel)) {
324
- this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
325
- }
326
- this._onDidRemovePanel.fire({ panel });
327
- }
328
- doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
329
- const existingPanel = this._panels.indexOf(panel);
330
- const hasExistingPanel = existingPanel > -1;
331
- this.tabsContainer.openPanel(panel, index);
332
- if (!skipSetActive) {
333
- this.contentContainer.openPanel(panel);
334
- }
335
- this.tabsContainer.show();
336
- this.contentContainer.show();
337
- if (hasExistingPanel) {
338
- // TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
339
- return;
340
- }
341
- this.updateMru(panel);
342
- this.panels.splice(index, 0, panel);
343
- this._onDidAddPanel.fire({ panel });
344
- }
345
- doSetActivePanel(panel) {
346
- this._activePanel = panel;
347
- if (panel) {
348
- this.tabsContainer.setActivePanel(panel);
349
- panel.layout(this._width, this._height);
350
- this.updateMru(panel);
351
- this._onDidActivePanelChange.fire({ panel });
352
- }
353
- }
354
- updateMru(panel) {
355
- if (this.mostRecentlyUsed.includes(panel)) {
356
- this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
357
- }
358
- this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
359
- }
360
- updateContainer() {
361
- toggleClass(this.container, 'empty', this.isEmpty);
362
- this.panels.forEach((panel) => panel.updateParentGroup(this.parent, this.isActive));
363
- if (this.isEmpty && !this.watermark) {
364
- const watermark = this.accessor.createWatermarkComponent();
365
- watermark.init({
366
- containerApi: new DockviewApi(this.accessor),
367
- params: {},
368
- title: '',
369
- api: null,
370
- });
371
- this.watermark = watermark;
372
- addDisposableListener(this.watermark.element, 'click', () => {
373
- if (!this.isActive) {
374
- this.accessor.doSetGroupActive(this.parent);
375
- }
376
- });
377
- this.contentContainer.hide();
378
- this.tabsContainer.hide();
379
- this.container.appendChild(this.watermark.element);
380
- this.watermark.updateParentGroup(this.parent, true);
381
- }
382
- if (!this.isEmpty && this.watermark) {
383
- this.watermark.element.remove();
384
- this.watermark.dispose();
385
- this.watermark = undefined;
386
- this.contentContainer.show();
387
- this.tabsContainer.show();
388
- }
389
- }
390
- canDisplayOverlay(event, target) {
391
- // custom overlay handler
392
- if (this.accessor.options.showDndOverlay) {
393
- return this.accessor.options.showDndOverlay({
394
- nativeEvent: event,
395
- target,
396
- group: this.accessor.getPanel(this.id),
397
- getData: getPanelData,
398
- });
399
- }
400
- return false;
401
- }
402
- handleDropEvent(event, position, index) {
403
- const data = getPanelData();
404
- if (data) {
405
- const fromSameGroup = this.tabsContainer.indexOf(data.panelId) !== -1;
406
- if (fromSameGroup && this.tabsContainer.size === 1) {
407
- return;
408
- }
409
- const { groupId, panelId } = data;
410
- const isSameGroup = this.id === groupId;
411
- if (isSameGroup && !position) {
412
- const oldIndex = this.tabsContainer.indexOf(panelId);
413
- if (oldIndex === index) {
414
- return;
415
- }
416
- }
417
- this._onMove.fire({
418
- target: position,
419
- groupId: data.groupId,
420
- itemId: data.panelId,
421
- index,
422
- });
423
- }
424
- else {
425
- this._onDidDrop.fire({
426
- nativeEvent: event,
427
- position,
428
- index,
429
- getData: () => getPanelData(),
430
- });
431
- }
432
- }
433
- dispose() {
434
- var _a;
435
- super.dispose();
436
- (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.dispose();
437
- for (const panel of this.panels) {
438
- panel.dispose();
439
- }
440
- this.dropTarget.dispose();
441
- this.tabsContainer.dispose();
442
- this.contentContainer.dispose();
443
- }
444
- }
1
+ import { DockviewApi } from '../api/component.api';
2
+ import { getPanelData } from '../dnd/dataTransfer';
3
+ import { Droptarget, Position } from '../dnd/droptarget';
4
+ import { isAncestor, toggleClass } from '../dom';
5
+ import { addDisposableListener, Emitter } from '../events';
6
+ import { CompositeDisposable } from '../lifecycle';
7
+ import { ContentContainer } from './panel/content';
8
+ import { TabsContainer } from './titlebar/tabsContainer';
9
+ import { DockviewDropTargets } from './dnd';
10
+ export class Groupview extends CompositeDisposable {
11
+ constructor(container, accessor, id, options, parent) {
12
+ super();
13
+ this.container = container;
14
+ this.accessor = accessor;
15
+ this.id = id;
16
+ this.options = options;
17
+ this.parent = parent;
18
+ this._isGroupActive = false;
19
+ this._locked = false;
20
+ this.mostRecentlyUsed = [];
21
+ this._onDidChange = new Emitter();
22
+ this.onDidChange = this._onDidChange.event;
23
+ this._width = 0;
24
+ this._height = 0;
25
+ this._panels = [];
26
+ this._onMove = new Emitter();
27
+ this.onMove = this._onMove.event;
28
+ this._onDidDrop = new Emitter();
29
+ this.onDidDrop = this._onDidDrop.event;
30
+ this._onDidAddPanel = new Emitter();
31
+ this.onDidAddPanel = this._onDidAddPanel.event;
32
+ this._onDidRemovePanel = new Emitter();
33
+ this.onDidRemovePanel = this._onDidRemovePanel.event;
34
+ this._onDidActivePanelChange = new Emitter();
35
+ this.onDidActivePanelChange = this._onDidActivePanelChange.event;
36
+ this.container.classList.add('groupview');
37
+ this.tabsContainer = new TabsContainer(this.accessor, this.parent, {
38
+ tabHeight: options.tabHeight,
39
+ });
40
+ this.contentContainer = new ContentContainer();
41
+ this.dropTarget = new Droptarget(this.contentContainer.element, {
42
+ validOverlays: 'all',
43
+ canDisplayOverlay: (event, quadrant) => {
44
+ if (this.locked && !quadrant) {
45
+ return false;
46
+ }
47
+ const data = getPanelData();
48
+ if (data && data.viewId === this.accessor.id) {
49
+ const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id;
50
+ return !groupHasOnePanelAndIsActiveDragElement;
51
+ }
52
+ return this.canDisplayOverlay(event, DockviewDropTargets.Panel);
53
+ },
54
+ });
55
+ container.append(this.tabsContainer.element, this.contentContainer.element);
56
+ this.header.hidden = !!options.hideHeader;
57
+ this.locked = !!options.locked;
58
+ this.addDisposables(this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.tabsContainer.onDrop((event) => {
59
+ this.handleDropEvent(event.event, Position.Center, event.index);
60
+ }), this.contentContainer.onDidFocus(() => {
61
+ this.accessor.doSetGroupActive(this.parent, true);
62
+ }), this.contentContainer.onDidBlur(() => {
63
+ // noop
64
+ }), this.dropTarget.onDrop((event) => {
65
+ this.handleDropEvent(event.nativeEvent, event.position);
66
+ }));
67
+ }
68
+ get element() {
69
+ throw new Error('not supported');
70
+ }
71
+ get activePanel() {
72
+ return this._activePanel;
73
+ }
74
+ get locked() {
75
+ return this._locked;
76
+ }
77
+ set locked(value) {
78
+ this._locked = value;
79
+ }
80
+ get isActive() {
81
+ return this._isGroupActive;
82
+ }
83
+ get panels() {
84
+ return this._panels;
85
+ }
86
+ get size() {
87
+ return this._panels.length;
88
+ }
89
+ get isEmpty() {
90
+ return this._panels.length === 0;
91
+ }
92
+ get minimumHeight() {
93
+ return 100;
94
+ }
95
+ get maximumHeight() {
96
+ return Number.MAX_SAFE_INTEGER;
97
+ }
98
+ get minimumWidth() {
99
+ return 100;
100
+ }
101
+ get maximumWidth() {
102
+ return Number.MAX_SAFE_INTEGER;
103
+ }
104
+ get hasWatermark() {
105
+ return !!(this.watermark && this.container.contains(this.watermark.element));
106
+ }
107
+ get header() {
108
+ return this.tabsContainer;
109
+ }
110
+ get isContentFocused() {
111
+ if (!document.activeElement) {
112
+ return false;
113
+ }
114
+ return isAncestor(document.activeElement, this.contentContainer.element);
115
+ }
116
+ initialize() {
117
+ var _a, _b;
118
+ if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.panels) {
119
+ this.options.panels.forEach((panel) => {
120
+ this.doAddPanel(panel);
121
+ });
122
+ }
123
+ if ((_b = this.options) === null || _b === void 0 ? void 0 : _b.activePanel) {
124
+ this.openPanel(this.options.activePanel);
125
+ }
126
+ // must be run after the constructor otherwise this.parent may not be
127
+ // correctly initialized
128
+ this.setActive(this.isActive, true, true);
129
+ this.updateContainer();
130
+ if (this.accessor.options.createGroupControlElement) {
131
+ this._control = this.accessor.options.createGroupControlElement(this.parent);
132
+ this.addDisposables(this._control);
133
+ this._control.init({
134
+ containerApi: new DockviewApi(this.accessor),
135
+ api: this.parent.api,
136
+ });
137
+ this.tabsContainer.setActionElement(this._control.element);
138
+ }
139
+ }
140
+ indexOf(panel) {
141
+ return this.tabsContainer.indexOf(panel.id);
142
+ }
143
+ toJSON() {
144
+ var _a;
145
+ const result = {
146
+ views: this.tabsContainer.panels,
147
+ activeView: (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.id,
148
+ id: this.id,
149
+ };
150
+ if (this.locked) {
151
+ result.locked = true;
152
+ }
153
+ if (this.header.hidden) {
154
+ result.hideHeader = true;
155
+ }
156
+ return result;
157
+ }
158
+ moveToNext(options) {
159
+ if (!options) {
160
+ options = {};
161
+ }
162
+ if (!options.panel) {
163
+ options.panel = this.activePanel;
164
+ }
165
+ const index = options.panel ? this.panels.indexOf(options.panel) : -1;
166
+ let normalizedIndex;
167
+ if (index < this.panels.length - 1) {
168
+ normalizedIndex = index + 1;
169
+ }
170
+ else if (!options.suppressRoll) {
171
+ normalizedIndex = 0;
172
+ }
173
+ else {
174
+ return;
175
+ }
176
+ this.openPanel(this.panels[normalizedIndex]);
177
+ }
178
+ moveToPrevious(options) {
179
+ if (!options) {
180
+ options = {};
181
+ }
182
+ if (!options.panel) {
183
+ options.panel = this.activePanel;
184
+ }
185
+ if (!options.panel) {
186
+ return;
187
+ }
188
+ const index = this.panels.indexOf(options.panel);
189
+ let normalizedIndex;
190
+ if (index > 0) {
191
+ normalizedIndex = index - 1;
192
+ }
193
+ else if (!options.suppressRoll) {
194
+ normalizedIndex = this.panels.length - 1;
195
+ }
196
+ else {
197
+ return;
198
+ }
199
+ this.openPanel(this.panels[normalizedIndex]);
200
+ }
201
+ containsPanel(panel) {
202
+ return this.panels.includes(panel);
203
+ }
204
+ init(_params) {
205
+ //noop
206
+ }
207
+ update(_params) {
208
+ //noop
209
+ }
210
+ focus() {
211
+ var _a;
212
+ (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus();
213
+ }
214
+ openPanel(panel, options = {}) {
215
+ if (typeof options.index !== 'number' ||
216
+ options.index > this.panels.length) {
217
+ options.index = this.panels.length;
218
+ }
219
+ const skipSetPanelActive = !!options.skipSetPanelActive;
220
+ const skipSetGroupActive = !!options.skipSetGroupActive;
221
+ // ensure the group is updated before we fire any events
222
+ panel.updateParentGroup(this.parent, true);
223
+ if (this._activePanel === panel) {
224
+ if (!skipSetGroupActive) {
225
+ this.accessor.doSetGroupActive(this.parent);
226
+ }
227
+ return;
228
+ }
229
+ this.doAddPanel(panel, options.index, skipSetPanelActive);
230
+ if (!skipSetPanelActive) {
231
+ this.doSetActivePanel(panel);
232
+ }
233
+ if (!skipSetGroupActive) {
234
+ this.accessor.doSetGroupActive(this.parent, !!options.skipFocus);
235
+ }
236
+ this.updateContainer();
237
+ }
238
+ removePanel(groupItemOrId) {
239
+ const id = typeof groupItemOrId === 'string'
240
+ ? groupItemOrId
241
+ : groupItemOrId.id;
242
+ const panelToRemove = this._panels.find((panel) => panel.id === id);
243
+ if (!panelToRemove) {
244
+ throw new Error('invalid operation');
245
+ }
246
+ return this._removePanel(panelToRemove);
247
+ }
248
+ closeAllPanels() {
249
+ if (this.panels.length > 0) {
250
+ // take a copy since we will be edting the array as we iterate through
251
+ const arrPanelCpy = [...this.panels];
252
+ for (const panel of arrPanelCpy) {
253
+ this.doClose(panel);
254
+ }
255
+ }
256
+ else {
257
+ this.accessor.removeGroup(this.parent);
258
+ }
259
+ }
260
+ closePanel(panel) {
261
+ this.doClose(panel);
262
+ }
263
+ doClose(panel) {
264
+ this.accessor.removePanel(panel);
265
+ }
266
+ isPanelActive(panel) {
267
+ return this._activePanel === panel;
268
+ }
269
+ updateActions(element) {
270
+ this.tabsContainer.setActionElement(element);
271
+ }
272
+ setActive(isGroupActive, skipFocus = false, force = false) {
273
+ var _a, _b;
274
+ if (!force && this.isActive === isGroupActive) {
275
+ if (!skipFocus) {
276
+ (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus();
277
+ }
278
+ return;
279
+ }
280
+ this._isGroupActive = isGroupActive;
281
+ toggleClass(this.container, 'active-group', isGroupActive);
282
+ toggleClass(this.container, 'inactive-group', !isGroupActive);
283
+ this.tabsContainer.setActive(this.isActive);
284
+ if (!this._activePanel && this.panels.length > 0) {
285
+ this.doSetActivePanel(this.panels[0]);
286
+ }
287
+ this.updateContainer();
288
+ if (isGroupActive) {
289
+ if (!skipFocus) {
290
+ (_b = this._activePanel) === null || _b === void 0 ? void 0 : _b.focus();
291
+ }
292
+ }
293
+ }
294
+ layout(width, height) {
295
+ var _a;
296
+ this._width = width;
297
+ this._height = height;
298
+ this.contentContainer.layout(this._width, this._height);
299
+ if ((_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.layout) {
300
+ this._activePanel.layout(this._width, this._height);
301
+ }
302
+ }
303
+ _removePanel(panel) {
304
+ const isActivePanel = this._activePanel === panel;
305
+ this.doRemovePanel(panel);
306
+ if (isActivePanel && this.panels.length > 0) {
307
+ const nextPanel = this.mostRecentlyUsed[0];
308
+ this.openPanel(nextPanel);
309
+ }
310
+ if (this._activePanel && this.panels.length === 0) {
311
+ this.doSetActivePanel(undefined);
312
+ }
313
+ this.updateContainer();
314
+ return panel;
315
+ }
316
+ doRemovePanel(panel) {
317
+ const index = this.panels.indexOf(panel);
318
+ if (this._activePanel === panel) {
319
+ this.contentContainer.closePanel();
320
+ }
321
+ this.tabsContainer.delete(panel.id);
322
+ this._panels.splice(index, 1);
323
+ if (this.mostRecentlyUsed.includes(panel)) {
324
+ this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
325
+ }
326
+ this._onDidRemovePanel.fire({ panel });
327
+ }
328
+ doAddPanel(panel, index = this.panels.length, skipSetActive = false) {
329
+ const existingPanel = this._panels.indexOf(panel);
330
+ const hasExistingPanel = existingPanel > -1;
331
+ this.tabsContainer.openPanel(panel, index);
332
+ if (!skipSetActive) {
333
+ this.contentContainer.openPanel(panel);
334
+ }
335
+ this.tabsContainer.show();
336
+ this.contentContainer.show();
337
+ if (hasExistingPanel) {
338
+ // TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
339
+ return;
340
+ }
341
+ this.updateMru(panel);
342
+ this.panels.splice(index, 0, panel);
343
+ this._onDidAddPanel.fire({ panel });
344
+ }
345
+ doSetActivePanel(panel) {
346
+ this._activePanel = panel;
347
+ if (panel) {
348
+ this.tabsContainer.setActivePanel(panel);
349
+ panel.layout(this._width, this._height);
350
+ this.updateMru(panel);
351
+ this._onDidActivePanelChange.fire({ panel });
352
+ }
353
+ }
354
+ updateMru(panel) {
355
+ if (this.mostRecentlyUsed.includes(panel)) {
356
+ this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
357
+ }
358
+ this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
359
+ }
360
+ updateContainer() {
361
+ toggleClass(this.container, 'empty', this.isEmpty);
362
+ this.panels.forEach((panel) => panel.updateParentGroup(this.parent, this.isActive));
363
+ if (this.isEmpty && !this.watermark) {
364
+ const watermark = this.accessor.createWatermarkComponent();
365
+ watermark.init({
366
+ containerApi: new DockviewApi(this.accessor),
367
+ params: {},
368
+ title: '',
369
+ api: null,
370
+ });
371
+ this.watermark = watermark;
372
+ addDisposableListener(this.watermark.element, 'click', () => {
373
+ if (!this.isActive) {
374
+ this.accessor.doSetGroupActive(this.parent);
375
+ }
376
+ });
377
+ this.contentContainer.hide();
378
+ this.tabsContainer.hide();
379
+ this.container.appendChild(this.watermark.element);
380
+ this.watermark.updateParentGroup(this.parent, true);
381
+ }
382
+ if (!this.isEmpty && this.watermark) {
383
+ this.watermark.element.remove();
384
+ this.watermark.dispose();
385
+ this.watermark = undefined;
386
+ this.contentContainer.show();
387
+ this.tabsContainer.show();
388
+ }
389
+ }
390
+ canDisplayOverlay(event, target) {
391
+ // custom overlay handler
392
+ if (this.accessor.options.showDndOverlay) {
393
+ return this.accessor.options.showDndOverlay({
394
+ nativeEvent: event,
395
+ target,
396
+ group: this.accessor.getPanel(this.id),
397
+ getData: getPanelData,
398
+ });
399
+ }
400
+ return false;
401
+ }
402
+ handleDropEvent(event, position, index) {
403
+ const data = getPanelData();
404
+ if (data) {
405
+ const fromSameGroup = this.tabsContainer.indexOf(data.panelId) !== -1;
406
+ if (fromSameGroup && this.tabsContainer.size === 1) {
407
+ return;
408
+ }
409
+ const { groupId, panelId } = data;
410
+ const isSameGroup = this.id === groupId;
411
+ if (isSameGroup && !position) {
412
+ const oldIndex = this.tabsContainer.indexOf(panelId);
413
+ if (oldIndex === index) {
414
+ return;
415
+ }
416
+ }
417
+ this._onMove.fire({
418
+ target: position,
419
+ groupId: data.groupId,
420
+ itemId: data.panelId,
421
+ index,
422
+ });
423
+ }
424
+ else {
425
+ this._onDidDrop.fire({
426
+ nativeEvent: event,
427
+ position,
428
+ index,
429
+ getData: () => getPanelData(),
430
+ });
431
+ }
432
+ }
433
+ dispose() {
434
+ var _a;
435
+ super.dispose();
436
+ (_a = this.watermark) === null || _a === void 0 ? void 0 : _a.dispose();
437
+ for (const panel of this.panels) {
438
+ panel.dispose();
439
+ }
440
+ this.dropTarget.dispose();
441
+ this.tabsContainer.dispose();
442
+ this.contentContainer.dispose();
443
+ }
444
+ }