dockview 1.5.0 → 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 (339) 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 -41
  10. package/dist/cjs/api/groupPanelApi.js +85 -96
  11. package/dist/cjs/api/groupPanelApi.js.map +1 -1
  12. package/dist/cjs/api/panelApi.d.ts +81 -81
  13. package/dist/cjs/api/panelApi.js +121 -121
  14. package/dist/cjs/api/paneviewPanelApi.d.ts +26 -26
  15. package/dist/cjs/api/paneviewPanelApi.js +57 -57
  16. package/dist/cjs/api/splitviewPanelApi.d.ts +32 -32
  17. package/dist/cjs/api/splitviewPanelApi.js +47 -47
  18. package/dist/cjs/array.d.ts +13 -13
  19. package/dist/cjs/array.js +77 -77
  20. package/dist/cjs/dnd/abstractDragHandler.d.ts +11 -11
  21. package/dist/cjs/dnd/abstractDragHandler.js +115 -115
  22. package/dist/cjs/dnd/dataTransfer.d.ts +31 -31
  23. package/dist/cjs/dnd/dataTransfer.js +100 -100
  24. package/dist/cjs/dnd/dnd.d.ts +27 -27
  25. package/dist/cjs/dnd/dnd.js +64 -64
  26. package/dist/cjs/dnd/droptarget.d.ts +37 -37
  27. package/dist/cjs/dnd/droptarget.js +201 -201
  28. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +27 -27
  29. package/dist/cjs/dockview/components/tab/defaultTab.js +121 -126
  30. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
  31. package/dist/cjs/dockview/components/watermark/watermark.d.ts +20 -20
  32. package/dist/cjs/dockview/components/watermark/watermark.js +101 -101
  33. package/dist/cjs/dockview/defaultGroupPanelView.d.ts +29 -29
  34. package/dist/cjs/dockview/defaultGroupPanelView.js +68 -68
  35. package/dist/cjs/dockview/deserializer.d.ts +5 -5
  36. package/dist/cjs/dockview/deserializer.js +2 -2
  37. package/dist/cjs/dockview/dockviewComponent.d.ts +125 -130
  38. package/dist/cjs/dockview/dockviewComponent.js +614 -629
  39. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  40. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +31 -33
  41. package/dist/cjs/dockview/dockviewGroupPanel.js +156 -175
  42. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  43. package/dist/cjs/dockview/options.d.ts +88 -89
  44. package/dist/cjs/dockview/options.js +2 -2
  45. package/dist/cjs/dom.d.ts +14 -14
  46. package/dist/cjs/dom.js +182 -182
  47. package/dist/cjs/events.d.ts +30 -30
  48. package/dist/cjs/events.js +129 -129
  49. package/dist/cjs/gridview/baseComponentGridview.d.ts +87 -87
  50. package/dist/cjs/gridview/baseComponentGridview.js +279 -279
  51. package/dist/cjs/gridview/basePanelView.d.ts +43 -43
  52. package/dist/cjs/gridview/basePanelView.js +123 -123
  53. package/dist/cjs/gridview/branchNode.d.ts +49 -46
  54. package/dist/cjs/gridview/branchNode.js +342 -342
  55. package/dist/cjs/gridview/branchNode.js.map +1 -1
  56. package/dist/cjs/gridview/gridview.d.ts +126 -123
  57. package/dist/cjs/gridview/gridview.js +479 -479
  58. package/dist/cjs/gridview/gridview.js.map +1 -1
  59. package/dist/cjs/gridview/gridviewComponent.d.ts +85 -85
  60. package/dist/cjs/gridview/gridviewComponent.js +325 -325
  61. package/dist/cjs/gridview/gridviewPanel.d.ts +60 -60
  62. package/dist/cjs/gridview/gridviewPanel.js +202 -202
  63. package/dist/cjs/gridview/leafNode.d.ts +34 -31
  64. package/dist/cjs/gridview/leafNode.js +170 -165
  65. package/dist/cjs/gridview/leafNode.js.map +1 -1
  66. package/dist/cjs/gridview/options.d.ts +18 -18
  67. package/dist/cjs/gridview/options.js +2 -2
  68. package/dist/cjs/gridview/types.d.ts +3 -3
  69. package/dist/cjs/gridview/types.js +2 -2
  70. package/dist/cjs/groupview/dnd.d.ts +5 -5
  71. package/dist/cjs/groupview/dnd.js +9 -9
  72. package/dist/cjs/groupview/groupPanel.d.ts +32 -35
  73. package/dist/cjs/groupview/groupPanel.js +2 -2
  74. package/dist/cjs/groupview/groupview.d.ts +177 -177
  75. package/dist/cjs/groupview/groupview.js +589 -589
  76. package/dist/cjs/groupview/groupviewPanel.d.ts +35 -35
  77. package/dist/cjs/groupview/groupviewPanel.js +128 -128
  78. package/dist/cjs/groupview/panel/content.d.ts +30 -30
  79. package/dist/cjs/groupview/panel/content.js +100 -100
  80. package/dist/cjs/groupview/tab.d.ts +41 -42
  81. package/dist/cjs/groupview/tab.js +120 -126
  82. package/dist/cjs/groupview/tab.js.map +1 -1
  83. package/dist/cjs/groupview/titlebar/tabsContainer.d.ts +68 -68
  84. package/dist/cjs/groupview/titlebar/tabsContainer.js +258 -270
  85. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  86. package/dist/cjs/groupview/types.d.ts +52 -53
  87. package/dist/cjs/groupview/types.js +2 -2
  88. package/dist/cjs/hostedContainer.d.ts +23 -23
  89. package/dist/cjs/hostedContainer.js +73 -73
  90. package/dist/cjs/index.d.ts +30 -30
  91. package/dist/cjs/index.js +46 -46
  92. package/dist/cjs/index.js.map +1 -1
  93. package/dist/cjs/lifecycle.d.ts +22 -22
  94. package/dist/cjs/lifecycle.js +88 -88
  95. package/dist/cjs/math.d.ts +4 -4
  96. package/dist/cjs/math.js +15 -15
  97. package/dist/cjs/panel/componentFactory.d.ts +8 -8
  98. package/dist/cjs/panel/componentFactory.js +30 -30
  99. package/dist/cjs/panel/types.d.ts +33 -33
  100. package/dist/cjs/panel/types.js +2 -2
  101. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +21 -21
  102. package/dist/cjs/paneview/defaultPaneviewHeader.js +90 -90
  103. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +19 -19
  104. package/dist/cjs/paneview/draggablePaneviewPanel.js +129 -129
  105. package/dist/cjs/paneview/options.d.ts +27 -27
  106. package/dist/cjs/paneview/options.js +2 -2
  107. package/dist/cjs/paneview/paneview.d.ts +40 -40
  108. package/dist/cjs/paneview/paneview.js +201 -201
  109. package/dist/cjs/paneview/paneviewComponent.d.ts +129 -129
  110. package/dist/cjs/paneview/paneviewComponent.js +394 -394
  111. package/dist/cjs/paneview/paneviewPanel.d.ts +92 -89
  112. package/dist/cjs/paneview/paneviewPanel.js +274 -274
  113. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  114. package/dist/cjs/react/deserializer.d.ts +9 -9
  115. package/dist/cjs/react/deserializer.js +43 -45
  116. package/dist/cjs/react/deserializer.js.map +1 -1
  117. package/dist/cjs/react/dockview/defaultTab.d.ts +4 -4
  118. package/dist/cjs/react/dockview/defaultTab.js +72 -72
  119. package/dist/cjs/react/dockview/defaultTab.js.map +1 -1
  120. package/dist/cjs/react/dockview/dockview.d.ts +34 -35
  121. package/dist/cjs/react/dockview/dockview.js +212 -227
  122. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  123. package/dist/cjs/react/dockview/groupControlsRenderer.d.ts +43 -43
  124. package/dist/cjs/react/dockview/groupControlsRenderer.js +86 -86
  125. package/dist/cjs/react/dockview/reactContentPart.d.ts +30 -30
  126. package/dist/cjs/react/dockview/reactContentPart.js +58 -58
  127. package/dist/cjs/react/dockview/reactHeaderPart.d.ts +26 -26
  128. package/dist/cjs/react/dockview/reactHeaderPart.js +55 -55
  129. package/dist/cjs/react/dockview/reactWatermarkPart.d.ts +29 -29
  130. package/dist/cjs/react/dockview/reactWatermarkPart.js +65 -65
  131. package/dist/cjs/react/dockview/v2/reactContentRenderer.d.ts +29 -29
  132. package/dist/cjs/react/dockview/v2/reactContentRenderer.js +87 -87
  133. package/dist/cjs/react/dockview/v2/reactGroupPanelView.d.ts +7 -7
  134. package/dist/cjs/react/dockview/v2/reactGroupPanelView.js +34 -34
  135. package/dist/cjs/react/dockview/v2/webviewContentRenderer.d.ts +18 -18
  136. package/dist/cjs/react/dockview/v2/webviewContentRenderer.js +45 -45
  137. package/dist/cjs/react/gridview/gridview.d.ts +24 -24
  138. package/dist/cjs/react/gridview/gridview.js +112 -112
  139. package/dist/cjs/react/gridview/view.d.ts +11 -11
  140. package/dist/cjs/react/gridview/view.js +40 -40
  141. package/dist/cjs/react/index.d.ts +9 -9
  142. package/dist/cjs/react/index.js +23 -23
  143. package/dist/cjs/react/paneview/paneview.d.ts +30 -30
  144. package/dist/cjs/react/paneview/paneview.js +155 -155
  145. package/dist/cjs/react/paneview/view.d.ts +20 -20
  146. package/dist/cjs/react/paneview/view.js +44 -44
  147. package/dist/cjs/react/react.d.ts +36 -36
  148. package/dist/cjs/react/react.js +194 -194
  149. package/dist/cjs/react/splitview/splitview.d.ts +24 -24
  150. package/dist/cjs/react/splitview/splitview.js +108 -108
  151. package/dist/cjs/react/splitview/view.d.ts +10 -10
  152. package/dist/cjs/react/splitview/view.js +40 -40
  153. package/dist/cjs/react/svg.d.ts +3 -3
  154. package/dist/cjs/react/svg.js +35 -35
  155. package/dist/cjs/react/types.d.ts +7 -7
  156. package/dist/cjs/react/types.js +2 -2
  157. package/dist/cjs/splitview/core/options.d.ts +26 -26
  158. package/dist/cjs/splitview/core/options.js +2 -2
  159. package/dist/cjs/splitview/core/splitview.d.ts +127 -124
  160. package/dist/cjs/splitview/core/splitview.js +908 -908
  161. package/dist/cjs/splitview/core/splitview.js.map +1 -1
  162. package/dist/cjs/splitview/core/viewItem.d.ts +25 -25
  163. package/dist/cjs/splitview/core/viewItem.js +124 -124
  164. package/dist/cjs/splitview/splitviewComponent.d.ts +101 -101
  165. package/dist/cjs/splitview/splitviewComponent.js +373 -373
  166. package/dist/cjs/splitview/splitviewPanel.d.ts +45 -42
  167. package/dist/cjs/splitview/splitviewPanel.js +178 -178
  168. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  169. package/dist/cjs/svg.d.ts +3 -3
  170. package/dist/cjs/svg.js +43 -43
  171. package/dist/cjs/types.d.ts +7 -7
  172. package/dist/cjs/types.js +2 -2
  173. package/dist/dockview.amd.js +6737 -6797
  174. package/dist/dockview.amd.min.js +2 -2
  175. package/dist/dockview.amd.min.noStyle.js +2 -2
  176. package/dist/dockview.amd.noStyle.js +6743 -6803
  177. package/dist/dockview.cjs.js +6737 -6797
  178. package/dist/dockview.esm.js +6731 -6791
  179. package/dist/dockview.esm.min.js +2 -2
  180. package/dist/dockview.js +6737 -6797
  181. package/dist/dockview.min.js +2 -2
  182. package/dist/dockview.min.noStyle.js +2 -2
  183. package/dist/dockview.noStyle.js +6743 -6803
  184. package/dist/esm/actionbar/actionsContainer.d.ts +7 -7
  185. package/dist/esm/actionbar/actionsContainer.js +17 -17
  186. package/dist/esm/api/component.api.d.ts +144 -144
  187. package/dist/esm/api/component.api.js +326 -326
  188. package/dist/esm/api/gridviewPanelApi.d.ts +36 -36
  189. package/dist/esm/api/gridviewPanelApi.js +25 -25
  190. package/dist/esm/api/groupPanelApi.d.ts +34 -41
  191. package/dist/esm/api/groupPanelApi.js +50 -57
  192. package/dist/esm/api/panelApi.d.ts +81 -81
  193. package/dist/esm/api/panelApi.js +79 -79
  194. package/dist/esm/api/paneviewPanelApi.d.ts +26 -26
  195. package/dist/esm/api/paneviewPanelApi.js +27 -27
  196. package/dist/esm/api/splitviewPanelApi.d.ts +32 -32
  197. package/dist/esm/api/splitviewPanelApi.js +25 -25
  198. package/dist/esm/array.d.ts +13 -13
  199. package/dist/esm/array.js +67 -67
  200. package/dist/esm/dnd/abstractDragHandler.d.ts +11 -11
  201. package/dist/esm/dnd/abstractDragHandler.js +37 -37
  202. package/dist/esm/dnd/dataTransfer.d.ts +31 -31
  203. package/dist/esm/dnd/dataTransfer.js +69 -69
  204. package/dist/esm/dnd/dnd.d.ts +27 -27
  205. package/dist/esm/dnd/dnd.js +41 -41
  206. package/dist/esm/dnd/droptarget.d.ts +37 -37
  207. package/dist/esm/dnd/droptarget.js +167 -167
  208. package/dist/esm/dockview/components/tab/defaultTab.d.ts +27 -27
  209. package/dist/esm/dockview/components/tab/defaultTab.js +79 -84
  210. package/dist/esm/dockview/components/watermark/watermark.d.ts +20 -20
  211. package/dist/esm/dockview/components/watermark/watermark.js +70 -70
  212. package/dist/esm/dockview/defaultGroupPanelView.d.ts +29 -29
  213. package/dist/esm/dockview/defaultGroupPanelView.js +44 -44
  214. package/dist/esm/dockview/deserializer.d.ts +5 -5
  215. package/dist/esm/dockview/deserializer.js +1 -1
  216. package/dist/esm/dockview/dockviewComponent.d.ts +125 -130
  217. package/dist/esm/dockview/dockviewComponent.js +468 -483
  218. package/dist/esm/dockview/dockviewGroupPanel.d.ts +31 -33
  219. package/dist/esm/dockview/dockviewGroupPanel.js +107 -122
  220. package/dist/esm/dockview/options.d.ts +88 -89
  221. package/dist/esm/dockview/options.js +1 -1
  222. package/dist/esm/dom.d.ts +14 -14
  223. package/dist/esm/dom.js +113 -113
  224. package/dist/esm/events.d.ts +30 -30
  225. package/dist/esm/events.js +88 -88
  226. package/dist/esm/gridview/baseComponentGridview.d.ts +87 -87
  227. package/dist/esm/gridview/baseComponentGridview.js +189 -189
  228. package/dist/esm/gridview/basePanelView.d.ts +43 -43
  229. package/dist/esm/gridview/basePanelView.js +74 -74
  230. package/dist/esm/gridview/branchNode.d.ts +49 -46
  231. package/dist/esm/gridview/branchNode.js +218 -218
  232. package/dist/esm/gridview/gridview.d.ts +126 -123
  233. package/dist/esm/gridview/gridview.js +397 -397
  234. package/dist/esm/gridview/gridviewComponent.d.ts +85 -85
  235. package/dist/esm/gridview/gridviewComponent.js +238 -238
  236. package/dist/esm/gridview/gridviewPanel.d.ts +60 -60
  237. package/dist/esm/gridview/gridviewPanel.js +138 -138
  238. package/dist/esm/gridview/leafNode.d.ts +34 -31
  239. package/dist/esm/gridview/leafNode.js +103 -98
  240. package/dist/esm/gridview/options.d.ts +18 -18
  241. package/dist/esm/gridview/options.js +1 -1
  242. package/dist/esm/gridview/types.d.ts +3 -3
  243. package/dist/esm/gridview/types.js +1 -1
  244. package/dist/esm/groupview/dnd.d.ts +5 -5
  245. package/dist/esm/groupview/dnd.js +6 -6
  246. package/dist/esm/groupview/groupPanel.d.ts +32 -35
  247. package/dist/esm/groupview/groupPanel.js +1 -1
  248. package/dist/esm/groupview/groupview.d.ts +177 -177
  249. package/dist/esm/groupview/groupview.js +444 -444
  250. package/dist/esm/groupview/groupviewPanel.d.ts +35 -35
  251. package/dist/esm/groupview/groupviewPanel.js +61 -61
  252. package/dist/esm/groupview/panel/content.d.ts +30 -30
  253. package/dist/esm/groupview/panel/content.js +73 -73
  254. package/dist/esm/groupview/tab.d.ts +41 -42
  255. package/dist/esm/groupview/tab.js +90 -96
  256. package/dist/esm/groupview/titlebar/tabsContainer.d.ts +68 -68
  257. package/dist/esm/groupview/titlebar/tabsContainer.js +190 -191
  258. package/dist/esm/groupview/types.d.ts +52 -53
  259. package/dist/esm/groupview/types.js +1 -1
  260. package/dist/esm/hostedContainer.d.ts +23 -23
  261. package/dist/esm/hostedContainer.js +63 -63
  262. package/dist/esm/index.d.ts +30 -30
  263. package/dist/esm/index.js +23 -23
  264. package/dist/esm/lifecycle.d.ts +22 -22
  265. package/dist/esm/lifecycle.js +39 -39
  266. package/dist/esm/math.d.ts +4 -4
  267. package/dist/esm/math.js +10 -10
  268. package/dist/esm/panel/componentFactory.d.ts +8 -8
  269. package/dist/esm/panel/componentFactory.js +24 -24
  270. package/dist/esm/panel/types.d.ts +33 -33
  271. package/dist/esm/panel/types.js +1 -1
  272. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +21 -21
  273. package/dist/esm/paneview/defaultPaneviewHeader.js +63 -63
  274. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +19 -19
  275. package/dist/esm/paneview/draggablePaneviewPanel.js +90 -90
  276. package/dist/esm/paneview/options.d.ts +27 -27
  277. package/dist/esm/paneview/options.js +1 -1
  278. package/dist/esm/paneview/paneview.d.ts +40 -40
  279. package/dist/esm/paneview/paneview.js +145 -145
  280. package/dist/esm/paneview/paneviewComponent.d.ts +129 -129
  281. package/dist/esm/paneview/paneviewComponent.js +270 -270
  282. package/dist/esm/paneview/paneviewPanel.d.ts +92 -89
  283. package/dist/esm/paneview/paneviewPanel.js +191 -191
  284. package/dist/esm/react/deserializer.d.ts +9 -9
  285. package/dist/esm/react/deserializer.js +38 -40
  286. package/dist/esm/react/dockview/defaultTab.d.ts +4 -4
  287. package/dist/esm/react/dockview/defaultTab.js +34 -34
  288. package/dist/esm/react/dockview/dockview.d.ts +34 -35
  289. package/dist/esm/react/dockview/dockview.js +157 -172
  290. package/dist/esm/react/dockview/groupControlsRenderer.d.ts +43 -43
  291. package/dist/esm/react/dockview/groupControlsRenderer.js +68 -68
  292. package/dist/esm/react/dockview/reactContentPart.d.ts +30 -30
  293. package/dist/esm/react/dockview/reactContentPart.js +49 -49
  294. package/dist/esm/react/dockview/reactHeaderPart.d.ts +26 -26
  295. package/dist/esm/react/dockview/reactHeaderPart.js +46 -46
  296. package/dist/esm/react/dockview/reactWatermarkPart.d.ts +29 -29
  297. package/dist/esm/react/dockview/reactWatermarkPart.js +55 -55
  298. package/dist/esm/react/dockview/v2/reactContentRenderer.d.ts +29 -29
  299. package/dist/esm/react/dockview/v2/reactContentRenderer.js +69 -69
  300. package/dist/esm/react/dockview/v2/reactGroupPanelView.d.ts +7 -7
  301. package/dist/esm/react/dockview/v2/reactGroupPanelView.js +12 -12
  302. package/dist/esm/react/dockview/v2/webviewContentRenderer.d.ts +18 -18
  303. package/dist/esm/react/dockview/v2/webviewContentRenderer.js +36 -36
  304. package/dist/esm/react/gridview/gridview.d.ts +24 -24
  305. package/dist/esm/react/gridview/gridview.js +70 -70
  306. package/dist/esm/react/gridview/view.d.ts +11 -11
  307. package/dist/esm/react/gridview/view.js +18 -18
  308. package/dist/esm/react/index.d.ts +9 -9
  309. package/dist/esm/react/index.js +7 -7
  310. package/dist/esm/react/paneview/paneview.d.ts +30 -30
  311. package/dist/esm/react/paneview/paneview.js +100 -100
  312. package/dist/esm/react/paneview/view.d.ts +20 -20
  313. package/dist/esm/react/paneview/view.js +35 -35
  314. package/dist/esm/react/react.d.ts +36 -36
  315. package/dist/esm/react/react.js +125 -125
  316. package/dist/esm/react/splitview/splitview.d.ts +24 -24
  317. package/dist/esm/react/splitview/splitview.js +66 -66
  318. package/dist/esm/react/splitview/view.d.ts +10 -10
  319. package/dist/esm/react/splitview/view.js +18 -18
  320. package/dist/esm/react/svg.d.ts +3 -3
  321. package/dist/esm/react/svg.js +7 -7
  322. package/dist/esm/react/types.d.ts +7 -7
  323. package/dist/esm/react/types.js +1 -1
  324. package/dist/esm/splitview/core/options.d.ts +26 -26
  325. package/dist/esm/splitview/core/options.js +1 -1
  326. package/dist/esm/splitview/core/splitview.d.ts +127 -124
  327. package/dist/esm/splitview/core/splitview.js +689 -689
  328. package/dist/esm/splitview/core/viewItem.d.ts +25 -25
  329. package/dist/esm/splitview/core/viewItem.js +79 -79
  330. package/dist/esm/splitview/splitviewComponent.d.ts +101 -101
  331. package/dist/esm/splitview/splitviewComponent.js +249 -249
  332. package/dist/esm/splitview/splitviewPanel.d.ts +45 -42
  333. package/dist/esm/splitview/splitviewPanel.js +107 -107
  334. package/dist/esm/svg.d.ts +3 -3
  335. package/dist/esm/svg.js +31 -31
  336. package/dist/esm/types.d.ts +7 -7
  337. package/dist/esm/types.js +1 -1
  338. package/dist/styles/dockview.css +0 -3
  339. package/package.json +2 -2
@@ -1,483 +1,468 @@
1
- import { getRelativeLocation, getGridLocation, } from '../gridview/gridview';
2
- import { Position } from '../dnd/droptarget';
3
- import { tail, sequenceEquals } from '../array';
4
- import { DockviewGroupPanel } from './dockviewGroupPanel';
5
- import { CompositeDisposable } from '../lifecycle';
6
- import { Event, Emitter } from '../events';
7
- import { Watermark } from './components/watermark/watermark';
8
- import { sequentialNumberGenerator } from '../math';
9
- import { createComponent } from '../panel/componentFactory';
10
- import { BaseGrid, toTarget, } from '../gridview/baseComponentGridview';
11
- import { DockviewApi } from '../api/component.api';
12
- import { MouseEventKind } from '../groupview/tab';
13
- import { Orientation } from '../splitview/core/splitview';
14
- import { DefaultTab } from './components/tab/defaultTab';
15
- import { GroupPanel } from '../groupview/groupviewPanel';
16
- import { DefaultGroupPanelView } from './defaultGroupPanelView';
17
- const nextGroupId = sequentialNumberGenerator();
18
- export class DockviewComponent extends BaseGrid {
19
- constructor(element, options) {
20
- super(element, {
21
- proportionalLayout: true,
22
- orientation: options.orientation || Orientation.HORIZONTAL,
23
- styles: options.styles,
24
- });
25
- this._onTabContextMenu = new Emitter();
26
- this.onTabContextMenu = this._onTabContextMenu.event;
27
- this._onDidDrop = new Emitter();
28
- this.onDidDrop = this._onDidDrop.event;
29
- this._onDidRemovePanel = new Emitter();
30
- this.onDidRemovePanel = this._onDidRemovePanel.event;
31
- this._onDidAddPanel = new Emitter();
32
- this.onDidAddPanel = this._onDidAddPanel.event;
33
- this._onDidLayoutFromJSON = new Emitter();
34
- this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
35
- this._onDidActivePanelChange = new Emitter();
36
- this.onDidActivePanelChange = this._onDidActivePanelChange.event;
37
- this.addDisposables(this._onTabContextMenu, this._onDidDrop, Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
38
- this._bufferOnDidLayoutChange.fire();
39
- }));
40
- this._options = options;
41
- if (!this.options.components) {
42
- this.options.components = {};
43
- }
44
- if (!this.options.frameworkComponents) {
45
- this.options.frameworkComponents = {};
46
- }
47
- if (!this.options.frameworkTabComponents) {
48
- this.options.frameworkTabComponents = {};
49
- }
50
- if (!this.options.tabComponents) {
51
- this.options.tabComponents = {};
52
- }
53
- if (!this.options.watermarkComponent &&
54
- !this.options.watermarkFrameworkComponent) {
55
- this.options.watermarkComponent = Watermark;
56
- }
57
- this._api = new DockviewApi(this);
58
- }
59
- get totalPanels() {
60
- return this.panels.length;
61
- }
62
- get panels() {
63
- return this.groups.flatMap((group) => group.panels);
64
- }
65
- get deserializer() {
66
- return this._deserializer;
67
- }
68
- set deserializer(value) {
69
- this._deserializer = value;
70
- }
71
- get options() {
72
- return this._options;
73
- }
74
- get activePanel() {
75
- const activeGroup = this.activeGroup;
76
- if (!activeGroup) {
77
- return undefined;
78
- }
79
- return activeGroup.activePanel;
80
- }
81
- set tabHeight(height) {
82
- this.options.tabHeight = height;
83
- this._groups.forEach((value) => {
84
- value.value.model.header.height = height;
85
- });
86
- }
87
- get tabHeight() {
88
- return this.options.tabHeight;
89
- }
90
- updateOptions(options) {
91
- const hasOrientationChanged = typeof options.orientation === 'string' &&
92
- this.gridview.orientation !== options.orientation;
93
- this._options = Object.assign(Object.assign({}, this.options), options);
94
- if (hasOrientationChanged) {
95
- this.gridview.orientation = options.orientation;
96
- }
97
- this.layout(this.gridview.width, this.gridview.height, true);
98
- }
99
- focus() {
100
- var _a;
101
- (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
102
- }
103
- getGroupPanel(id) {
104
- return this.panels.find((panel) => panel.id === id);
105
- }
106
- setActivePanel(panel) {
107
- this.doSetGroupActive(panel.group);
108
- panel.group.model.openPanel(panel);
109
- }
110
- moveToNext(options = {}) {
111
- var _a;
112
- if (!options.group) {
113
- if (!this.activeGroup) {
114
- return;
115
- }
116
- options.group = this.activeGroup;
117
- }
118
- if (options.includePanel && options.group) {
119
- if (options.group.activePanel !==
120
- options.group.panels[options.group.panels.length - 1]) {
121
- options.group.model.moveToNext({ suppressRoll: true });
122
- return;
123
- }
124
- }
125
- const location = getGridLocation(options.group.element);
126
- const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
127
- this.doSetGroupActive(next);
128
- }
129
- moveToPrevious(options = {}) {
130
- var _a;
131
- if (!options.group) {
132
- if (!this.activeGroup) {
133
- return;
134
- }
135
- options.group = this.activeGroup;
136
- }
137
- if (options.includePanel && options.group) {
138
- if (options.group.activePanel !==
139
- options.group.panels[0]) {
140
- options.group.model.moveToPrevious({ suppressRoll: true });
141
- return;
142
- }
143
- }
144
- const location = getGridLocation(options.group.element);
145
- const next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
146
- if (next) {
147
- this.doSetGroupActive(next);
148
- }
149
- }
150
- /**
151
- * Serialize the current state of the layout
152
- *
153
- * @returns A JSON respresentation of the layout
154
- */
155
- toJSON() {
156
- var _a;
157
- const data = this.gridview.serialize();
158
- const panels = this.panels.reduce((collection, panel) => {
159
- collection[panel.id] = panel.toJSON();
160
- return collection;
161
- }, {});
162
- return {
163
- grid: data,
164
- panels,
165
- activeGroup: (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id,
166
- options: { tabHeight: this.tabHeight },
167
- };
168
- }
169
- fromJSON(data) {
170
- this.clear();
171
- if (!this.deserializer) {
172
- throw new Error('invalid deserializer');
173
- }
174
- const { grid, panels, options, activeGroup } = data;
175
- if (typeof (options === null || options === void 0 ? void 0 : options.tabHeight) === 'number') {
176
- this.tabHeight = options.tabHeight;
177
- }
178
- if (!this.deserializer) {
179
- throw new Error('no deserializer provided');
180
- }
181
- this.gridview.deserialize(grid, {
182
- fromJSON: (node) => {
183
- const { id, locked, hideHeader, views, activeView } = node.data;
184
- const group = this.createGroup({
185
- id,
186
- locked: !!locked,
187
- hideHeader: !!hideHeader,
188
- });
189
- this._onDidAddGroup.fire(group);
190
- for (const child of views) {
191
- const panel = this.deserializer.fromJSON(panels[child], group);
192
- const isActive = typeof activeView === 'string' && activeView === panel.id;
193
- group.model.openPanel(panel, {
194
- skipSetPanelActive: !isActive,
195
- skipSetGroupActive: true
196
- });
197
- }
198
- if (!group.activePanel && group.panels.length > 0) {
199
- group.model.openPanel(group.panels[group.panels.length - 1], {
200
- skipSetGroupActive: true
201
- });
202
- }
203
- return group;
204
- }
205
- });
206
- if (typeof activeGroup === 'string') {
207
- const panel = this.getPanel(activeGroup);
208
- if (panel) {
209
- this.doSetGroupActive(panel);
210
- }
211
- }
212
- this.gridview.layout(this.width, this.height);
213
- this._onDidLayoutFromJSON.fire();
214
- }
215
- clear() {
216
- const groups = Array.from(this._groups.values()).map((_) => _.value);
217
- const hasActiveGroup = !!this.activeGroup;
218
- const hasActivePanel = !!this.activePanel;
219
- for (const group of groups) {
220
- // remove the group will automatically remove the panels
221
- this.removeGroup(group, true);
222
- }
223
- if (hasActiveGroup) {
224
- this.doSetGroupActive(undefined);
225
- }
226
- if (hasActivePanel) {
227
- this._onDidActivePanelChange.fire(undefined);
228
- }
229
- this.gridview.clear();
230
- }
231
- closeAllGroups() {
232
- for (const entry of this._groups.entries()) {
233
- const [_, group] = entry;
234
- group.value.model.closeAllPanels();
235
- }
236
- }
237
- fireMouseEvent(event) {
238
- if (event.kind === MouseEventKind.CONTEXT_MENU) {
239
- if (event.tab && event.panel) {
240
- this._onTabContextMenu.fire({
241
- event: event.event,
242
- api: this._api,
243
- panel: event.panel,
244
- });
245
- }
246
- }
247
- }
248
- addPanel(options) {
249
- var _a, _b;
250
- if (this.panels.find((_) => _.id === options.id)) {
251
- throw new Error(`panel with id ${options.id} already exists`);
252
- }
253
- let referenceGroup;
254
- if ((_a = options.position) === null || _a === void 0 ? void 0 : _a.referencePanel) {
255
- const referencePanel = this.getGroupPanel(options.position.referencePanel);
256
- if (!referencePanel) {
257
- throw new Error(`referencePanel ${options.position.referencePanel} does not exist`);
258
- }
259
- referenceGroup = this.findGroup(referencePanel);
260
- }
261
- else {
262
- referenceGroup = this.activeGroup;
263
- }
264
- let panel;
265
- if (referenceGroup) {
266
- const target = toTarget(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
267
- if (target === Position.Center) {
268
- panel = this.createPanel(options, referenceGroup);
269
- referenceGroup.model.openPanel(panel);
270
- }
271
- else {
272
- const location = getGridLocation(referenceGroup.element);
273
- const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
274
- const group = this.createGroupAtLocation(relativeLocation);
275
- panel = this.createPanel(options, group);
276
- group.model.openPanel(panel);
277
- }
278
- }
279
- else {
280
- const group = this.createGroupAtLocation();
281
- panel = this.createPanel(options, group);
282
- group.model.openPanel(panel);
283
- }
284
- return panel;
285
- }
286
- removePanel(panel, options = {
287
- removeEmptyGroup: true,
288
- skipDispose: false,
289
- }) {
290
- const group = panel.group;
291
- if (!group) {
292
- throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
293
- }
294
- group.model.removePanel(panel);
295
- panel.dispose();
296
- const retainGroupForWatermark = this.size === 1;
297
- if (!retainGroupForWatermark &&
298
- group.size === 0 &&
299
- options.removeEmptyGroup) {
300
- this.removeGroup(group);
301
- }
302
- }
303
- createWatermarkComponent() {
304
- var _a;
305
- return createComponent('watermark-id', 'watermark-name', this.options.watermarkComponent
306
- ? { 'watermark-name': this.options.watermarkComponent }
307
- : {}, this.options.watermarkFrameworkComponent
308
- ? { 'watermark-name': this.options.watermarkFrameworkComponent }
309
- : {}, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.watermark);
310
- }
311
- addEmptyGroup(options) {
312
- const group = this.createGroup();
313
- if (options) {
314
- const referencePanel = this.panels.find((panel) => panel.id === options.referencePanel);
315
- if (!referencePanel) {
316
- throw new Error(`reference panel ${options.referencePanel} does not exist`);
317
- }
318
- const referenceGroup = this.findGroup(referencePanel);
319
- if (!referenceGroup) {
320
- throw new Error(`reference group for reference panel ${options.referencePanel} does not exist`);
321
- }
322
- const target = toTarget(options.direction || 'within');
323
- const location = getGridLocation(referenceGroup.element);
324
- const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
325
- this.doAddGroup(group, relativeLocation);
326
- }
327
- else {
328
- this.doAddGroup(group);
329
- }
330
- }
331
- removeGroup(group, skipActive = false) {
332
- const panels = [...group.panels]; // reassign since group panels will mutate
333
- for (const panel of panels) {
334
- this.removePanel(panel, {
335
- removeEmptyGroup: false,
336
- skipDispose: false,
337
- });
338
- }
339
- super.doRemoveGroup(group, { skipActive });
340
- }
341
- moveGroupOrPanel(referenceGroup, groupId, itemId, target, index) {
342
- var _a;
343
- const sourceGroup = groupId
344
- ? (_a = this._groups.get(groupId)) === null || _a === void 0 ? void 0 : _a.value
345
- : undefined;
346
- if (!target || target === Position.Center) {
347
- const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
348
- this.panels.find((panel) => panel.id === itemId);
349
- if (!groupItem) {
350
- throw new Error(`No panel with id ${itemId}`);
351
- }
352
- if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
353
- this.doRemoveGroup(sourceGroup);
354
- }
355
- referenceGroup.model.openPanel(groupItem, { index });
356
- }
357
- else {
358
- const referenceLocation = getGridLocation(referenceGroup.element);
359
- const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
360
- if (sourceGroup && sourceGroup.size < 2) {
361
- const [targetParentLocation, to] = tail(targetLocation);
362
- const sourceLocation = getGridLocation(sourceGroup.element);
363
- const [sourceParentLocation, from] = tail(sourceLocation);
364
- if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
365
- // special case when 'swapping' two views within same grid location
366
- // if a group has one tab - we are essentially moving the 'group'
367
- // which is equivalent to swapping two views in this case
368
- this.gridview.moveView(sourceParentLocation, from, to);
369
- }
370
- else {
371
- // source group will become empty so delete the group
372
- const targetGroup = this.doRemoveGroup(sourceGroup, {
373
- skipActive: true,
374
- skipDispose: true,
375
- });
376
- // after deleting the group we need to re-evaulate the ref location
377
- const updatedReferenceLocation = getGridLocation(referenceGroup.element);
378
- const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, target);
379
- this.doAddGroup(targetGroup, location);
380
- }
381
- }
382
- else {
383
- const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
384
- this.panels.find((panel) => panel.id === itemId);
385
- if (!groupItem) {
386
- throw new Error(`No panel with id ${itemId}`);
387
- }
388
- const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
389
- const group = this.createGroupAtLocation(dropLocation);
390
- group.model.openPanel(groupItem);
391
- }
392
- }
393
- }
394
- doSetGroupActive(group, skipFocus) {
395
- var _a, _b;
396
- const isGroupAlreadyFocused = this._activeGroup === group;
397
- super.doSetGroupActive(group, skipFocus);
398
- if (!isGroupAlreadyFocused && ((_a = this._activeGroup) === null || _a === void 0 ? void 0 : _a.activePanel)) {
399
- this._onDidActivePanelChange.fire((_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.activePanel);
400
- }
401
- }
402
- createGroup(options) {
403
- if (!options) {
404
- options = { tabHeight: this.tabHeight };
405
- }
406
- if (typeof options.tabHeight !== 'number') {
407
- options.tabHeight = this.tabHeight;
408
- }
409
- let id = options === null || options === void 0 ? void 0 : options.id;
410
- if (id && this._groups.has(options.id)) {
411
- console.warn(`Duplicate group id ${options === null || options === void 0 ? void 0 : options.id}. reassigning group id to avoid errors`);
412
- id = undefined;
413
- }
414
- if (!id) {
415
- id = nextGroupId.next();
416
- while (this._groups.has(id)) {
417
- id = nextGroupId.next();
418
- }
419
- }
420
- const view = new GroupPanel(this, id, options);
421
- view.init({ params: {}, accessor: null }); // required to initialized .part and allow for correct disposal of group
422
- if (!this._groups.has(view.id)) {
423
- const disposable = new CompositeDisposable(view.model.onMove((event) => {
424
- const { groupId, itemId, target, index } = event;
425
- this.moveGroupOrPanel(view, groupId, itemId, target, index);
426
- }), view.model.onDidDrop((event) => {
427
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: view }));
428
- }), view.model.onDidAddPanel((event) => {
429
- this._onDidAddPanel.fire(event.panel);
430
- }), view.model.onDidRemovePanel((event) => {
431
- this._onDidRemovePanel.fire(event.panel);
432
- }), view.model.onDidActivePanelChange((event) => {
433
- this._onDidActivePanelChange.fire(event.panel);
434
- }));
435
- this._groups.set(view.id, { value: view, disposable });
436
- }
437
- // TODO: must be called after the above listeners have been setup,
438
- // not an ideal pattern
439
- view.initialize();
440
- if (typeof this.options.tabHeight === 'number') {
441
- view.model.header.height = this.options.tabHeight;
442
- }
443
- return view;
444
- }
445
- createPanel(options, group) {
446
- const view = new DefaultGroupPanelView({
447
- content: this.createContentComponent(options.id, options.component),
448
- tab: this.createTabComponent(options.id, options.tabComponent || this.options.defaultTabComponent),
449
- });
450
- const panel = new DockviewGroupPanel(options.id, this, this._api, group);
451
- panel.init({
452
- view,
453
- title: options.title || options.id,
454
- suppressClosable: options === null || options === void 0 ? void 0 : options.suppressClosable,
455
- params: (options === null || options === void 0 ? void 0 : options.params) || {},
456
- });
457
- return panel;
458
- }
459
- createContentComponent(id, componentName) {
460
- var _a;
461
- return createComponent(id, componentName, this.options.components || {}, this.options.frameworkComponents, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.content);
462
- }
463
- createTabComponent(id, componentName) {
464
- var _a;
465
- return createComponent(id, componentName, this.options.tabComponents || {}, this.options.frameworkTabComponents, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.tab, () => new DefaultTab());
466
- }
467
- createGroupAtLocation(location = [0]) {
468
- const group = this.createGroup();
469
- this.doAddGroup(group, location);
470
- return group;
471
- }
472
- findGroup(panel) {
473
- var _a;
474
- return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
475
- }
476
- dispose() {
477
- super.dispose();
478
- this._onDidActivePanelChange.dispose();
479
- this._onDidAddPanel.dispose();
480
- this._onDidRemovePanel.dispose();
481
- this._onDidLayoutFromJSON.dispose();
482
- }
483
- }
1
+ import { getRelativeLocation, getGridLocation, } from '../gridview/gridview';
2
+ import { Position } from '../dnd/droptarget';
3
+ import { tail, sequenceEquals } from '../array';
4
+ import { DockviewGroupPanel } from './dockviewGroupPanel';
5
+ import { CompositeDisposable } from '../lifecycle';
6
+ import { Event, Emitter } from '../events';
7
+ import { Watermark } from './components/watermark/watermark';
8
+ import { sequentialNumberGenerator } from '../math';
9
+ import { createComponent } from '../panel/componentFactory';
10
+ import { BaseGrid, toTarget, } from '../gridview/baseComponentGridview';
11
+ import { DockviewApi } from '../api/component.api';
12
+ import { Orientation } from '../splitview/core/splitview';
13
+ import { DefaultTab } from './components/tab/defaultTab';
14
+ import { GroupPanel } from '../groupview/groupviewPanel';
15
+ import { DefaultGroupPanelView } from './defaultGroupPanelView';
16
+ const nextGroupId = sequentialNumberGenerator();
17
+ export class DockviewComponent extends BaseGrid {
18
+ constructor(element, options) {
19
+ super(element, {
20
+ proportionalLayout: true,
21
+ orientation: options.orientation || Orientation.HORIZONTAL,
22
+ styles: options.styles,
23
+ });
24
+ this._onDidDrop = new Emitter();
25
+ this.onDidDrop = this._onDidDrop.event;
26
+ this._onDidRemovePanel = new Emitter();
27
+ this.onDidRemovePanel = this._onDidRemovePanel.event;
28
+ this._onDidAddPanel = new Emitter();
29
+ this.onDidAddPanel = this._onDidAddPanel.event;
30
+ this._onDidLayoutFromJSON = new Emitter();
31
+ this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
32
+ this._onDidActivePanelChange = new Emitter();
33
+ this.onDidActivePanelChange = this._onDidActivePanelChange.event;
34
+ this.addDisposables(this._onDidDrop, Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
35
+ this._bufferOnDidLayoutChange.fire();
36
+ }));
37
+ this._options = options;
38
+ if (!this.options.components) {
39
+ this.options.components = {};
40
+ }
41
+ if (!this.options.frameworkComponents) {
42
+ this.options.frameworkComponents = {};
43
+ }
44
+ if (!this.options.frameworkTabComponents) {
45
+ this.options.frameworkTabComponents = {};
46
+ }
47
+ if (!this.options.tabComponents) {
48
+ this.options.tabComponents = {};
49
+ }
50
+ if (!this.options.watermarkComponent &&
51
+ !this.options.watermarkFrameworkComponent) {
52
+ this.options.watermarkComponent = Watermark;
53
+ }
54
+ this._api = new DockviewApi(this);
55
+ }
56
+ get totalPanels() {
57
+ return this.panels.length;
58
+ }
59
+ get panels() {
60
+ return this.groups.flatMap((group) => group.panels);
61
+ }
62
+ get deserializer() {
63
+ return this._deserializer;
64
+ }
65
+ set deserializer(value) {
66
+ this._deserializer = value;
67
+ }
68
+ get options() {
69
+ return this._options;
70
+ }
71
+ get activePanel() {
72
+ const activeGroup = this.activeGroup;
73
+ if (!activeGroup) {
74
+ return undefined;
75
+ }
76
+ return activeGroup.activePanel;
77
+ }
78
+ set tabHeight(height) {
79
+ this.options.tabHeight = height;
80
+ this._groups.forEach((value) => {
81
+ value.value.model.header.height = height;
82
+ });
83
+ }
84
+ get tabHeight() {
85
+ return this.options.tabHeight;
86
+ }
87
+ updateOptions(options) {
88
+ const hasOrientationChanged = typeof options.orientation === 'string' &&
89
+ this.gridview.orientation !== options.orientation;
90
+ this._options = Object.assign(Object.assign({}, this.options), options);
91
+ if (hasOrientationChanged) {
92
+ this.gridview.orientation = options.orientation;
93
+ }
94
+ this.layout(this.gridview.width, this.gridview.height, true);
95
+ }
96
+ focus() {
97
+ var _a;
98
+ (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
99
+ }
100
+ getGroupPanel(id) {
101
+ return this.panels.find((panel) => panel.id === id);
102
+ }
103
+ setActivePanel(panel) {
104
+ this.doSetGroupActive(panel.group);
105
+ panel.group.model.openPanel(panel);
106
+ }
107
+ moveToNext(options = {}) {
108
+ var _a;
109
+ if (!options.group) {
110
+ if (!this.activeGroup) {
111
+ return;
112
+ }
113
+ options.group = this.activeGroup;
114
+ }
115
+ if (options.includePanel && options.group) {
116
+ if (options.group.activePanel !==
117
+ options.group.panels[options.group.panels.length - 1]) {
118
+ options.group.model.moveToNext({ suppressRoll: true });
119
+ return;
120
+ }
121
+ }
122
+ const location = getGridLocation(options.group.element);
123
+ const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
124
+ this.doSetGroupActive(next);
125
+ }
126
+ moveToPrevious(options = {}) {
127
+ var _a;
128
+ if (!options.group) {
129
+ if (!this.activeGroup) {
130
+ return;
131
+ }
132
+ options.group = this.activeGroup;
133
+ }
134
+ if (options.includePanel && options.group) {
135
+ if (options.group.activePanel !==
136
+ options.group.panels[0]) {
137
+ options.group.model.moveToPrevious({ suppressRoll: true });
138
+ return;
139
+ }
140
+ }
141
+ const location = getGridLocation(options.group.element);
142
+ const next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
143
+ if (next) {
144
+ this.doSetGroupActive(next);
145
+ }
146
+ }
147
+ /**
148
+ * Serialize the current state of the layout
149
+ *
150
+ * @returns A JSON respresentation of the layout
151
+ */
152
+ toJSON() {
153
+ var _a;
154
+ const data = this.gridview.serialize();
155
+ const panels = this.panels.reduce((collection, panel) => {
156
+ collection[panel.id] = panel.toJSON();
157
+ return collection;
158
+ }, {});
159
+ return {
160
+ grid: data,
161
+ panels,
162
+ activeGroup: (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id,
163
+ options: { tabHeight: this.tabHeight },
164
+ };
165
+ }
166
+ fromJSON(data) {
167
+ this.clear();
168
+ if (!this.deserializer) {
169
+ throw new Error('invalid deserializer');
170
+ }
171
+ const { grid, panels, options, activeGroup } = data;
172
+ if (typeof (options === null || options === void 0 ? void 0 : options.tabHeight) === 'number') {
173
+ this.tabHeight = options.tabHeight;
174
+ }
175
+ if (!this.deserializer) {
176
+ throw new Error('no deserializer provided');
177
+ }
178
+ this.gridview.deserialize(grid, {
179
+ fromJSON: (node) => {
180
+ const { id, locked, hideHeader, views, activeView } = node.data;
181
+ const group = this.createGroup({
182
+ id,
183
+ locked: !!locked,
184
+ hideHeader: !!hideHeader,
185
+ });
186
+ this._onDidAddGroup.fire(group);
187
+ for (const child of views) {
188
+ const panel = this.deserializer.fromJSON(panels[child], group);
189
+ const isActive = typeof activeView === 'string' && activeView === panel.id;
190
+ group.model.openPanel(panel, {
191
+ skipSetPanelActive: !isActive,
192
+ skipSetGroupActive: true
193
+ });
194
+ }
195
+ if (!group.activePanel && group.panels.length > 0) {
196
+ group.model.openPanel(group.panels[group.panels.length - 1], {
197
+ skipSetGroupActive: true
198
+ });
199
+ }
200
+ return group;
201
+ }
202
+ });
203
+ if (typeof activeGroup === 'string') {
204
+ const panel = this.getPanel(activeGroup);
205
+ if (panel) {
206
+ this.doSetGroupActive(panel);
207
+ }
208
+ }
209
+ this.gridview.layout(this.width, this.height);
210
+ this._onDidLayoutFromJSON.fire();
211
+ }
212
+ clear() {
213
+ const groups = Array.from(this._groups.values()).map((_) => _.value);
214
+ const hasActiveGroup = !!this.activeGroup;
215
+ const hasActivePanel = !!this.activePanel;
216
+ for (const group of groups) {
217
+ // remove the group will automatically remove the panels
218
+ this.removeGroup(group, true);
219
+ }
220
+ if (hasActiveGroup) {
221
+ this.doSetGroupActive(undefined);
222
+ }
223
+ if (hasActivePanel) {
224
+ this._onDidActivePanelChange.fire(undefined);
225
+ }
226
+ this.gridview.clear();
227
+ }
228
+ closeAllGroups() {
229
+ for (const entry of this._groups.entries()) {
230
+ const [_, group] = entry;
231
+ group.value.model.closeAllPanels();
232
+ }
233
+ }
234
+ addPanel(options) {
235
+ var _a, _b;
236
+ if (this.panels.find((_) => _.id === options.id)) {
237
+ throw new Error(`panel with id ${options.id} already exists`);
238
+ }
239
+ let referenceGroup;
240
+ if ((_a = options.position) === null || _a === void 0 ? void 0 : _a.referencePanel) {
241
+ const referencePanel = this.getGroupPanel(options.position.referencePanel);
242
+ if (!referencePanel) {
243
+ throw new Error(`referencePanel ${options.position.referencePanel} does not exist`);
244
+ }
245
+ referenceGroup = this.findGroup(referencePanel);
246
+ }
247
+ else {
248
+ referenceGroup = this.activeGroup;
249
+ }
250
+ let panel;
251
+ if (referenceGroup) {
252
+ const target = toTarget(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
253
+ if (target === Position.Center) {
254
+ panel = this.createPanel(options, referenceGroup);
255
+ referenceGroup.model.openPanel(panel);
256
+ }
257
+ else {
258
+ const location = getGridLocation(referenceGroup.element);
259
+ const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
260
+ const group = this.createGroupAtLocation(relativeLocation);
261
+ panel = this.createPanel(options, group);
262
+ group.model.openPanel(panel);
263
+ }
264
+ }
265
+ else {
266
+ const group = this.createGroupAtLocation();
267
+ panel = this.createPanel(options, group);
268
+ group.model.openPanel(panel);
269
+ }
270
+ return panel;
271
+ }
272
+ removePanel(panel, options = {
273
+ removeEmptyGroup: true,
274
+ skipDispose: false,
275
+ }) {
276
+ const group = panel.group;
277
+ if (!group) {
278
+ throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
279
+ }
280
+ group.model.removePanel(panel);
281
+ panel.dispose();
282
+ const retainGroupForWatermark = this.size === 1;
283
+ if (!retainGroupForWatermark &&
284
+ group.size === 0 &&
285
+ options.removeEmptyGroup) {
286
+ this.removeGroup(group);
287
+ }
288
+ }
289
+ createWatermarkComponent() {
290
+ var _a;
291
+ return createComponent('watermark-id', 'watermark-name', this.options.watermarkComponent
292
+ ? { 'watermark-name': this.options.watermarkComponent }
293
+ : {}, this.options.watermarkFrameworkComponent
294
+ ? { 'watermark-name': this.options.watermarkFrameworkComponent }
295
+ : {}, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.watermark);
296
+ }
297
+ addEmptyGroup(options) {
298
+ const group = this.createGroup();
299
+ if (options) {
300
+ const referencePanel = this.panels.find((panel) => panel.id === options.referencePanel);
301
+ if (!referencePanel) {
302
+ throw new Error(`reference panel ${options.referencePanel} does not exist`);
303
+ }
304
+ const referenceGroup = this.findGroup(referencePanel);
305
+ if (!referenceGroup) {
306
+ throw new Error(`reference group for reference panel ${options.referencePanel} does not exist`);
307
+ }
308
+ const target = toTarget(options.direction || 'within');
309
+ const location = getGridLocation(referenceGroup.element);
310
+ const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
311
+ this.doAddGroup(group, relativeLocation);
312
+ }
313
+ else {
314
+ this.doAddGroup(group);
315
+ }
316
+ }
317
+ removeGroup(group, skipActive = false) {
318
+ const panels = [...group.panels]; // reassign since group panels will mutate
319
+ for (const panel of panels) {
320
+ this.removePanel(panel, {
321
+ removeEmptyGroup: false,
322
+ skipDispose: false,
323
+ });
324
+ }
325
+ super.doRemoveGroup(group, { skipActive });
326
+ }
327
+ moveGroupOrPanel(referenceGroup, groupId, itemId, target, index) {
328
+ var _a;
329
+ const sourceGroup = groupId
330
+ ? (_a = this._groups.get(groupId)) === null || _a === void 0 ? void 0 : _a.value
331
+ : undefined;
332
+ if (!target || target === Position.Center) {
333
+ const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
334
+ this.panels.find((panel) => panel.id === itemId);
335
+ if (!groupItem) {
336
+ throw new Error(`No panel with id ${itemId}`);
337
+ }
338
+ if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
339
+ this.doRemoveGroup(sourceGroup);
340
+ }
341
+ referenceGroup.model.openPanel(groupItem, { index });
342
+ }
343
+ else {
344
+ const referenceLocation = getGridLocation(referenceGroup.element);
345
+ const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
346
+ if (sourceGroup && sourceGroup.size < 2) {
347
+ const [targetParentLocation, to] = tail(targetLocation);
348
+ const sourceLocation = getGridLocation(sourceGroup.element);
349
+ const [sourceParentLocation, from] = tail(sourceLocation);
350
+ if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
351
+ // special case when 'swapping' two views within same grid location
352
+ // if a group has one tab - we are essentially moving the 'group'
353
+ // which is equivalent to swapping two views in this case
354
+ this.gridview.moveView(sourceParentLocation, from, to);
355
+ }
356
+ else {
357
+ // source group will become empty so delete the group
358
+ const targetGroup = this.doRemoveGroup(sourceGroup, {
359
+ skipActive: true,
360
+ skipDispose: true,
361
+ });
362
+ // after deleting the group we need to re-evaulate the ref location
363
+ const updatedReferenceLocation = getGridLocation(referenceGroup.element);
364
+ const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, target);
365
+ this.doAddGroup(targetGroup, location);
366
+ }
367
+ }
368
+ else {
369
+ const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
370
+ this.panels.find((panel) => panel.id === itemId);
371
+ if (!groupItem) {
372
+ throw new Error(`No panel with id ${itemId}`);
373
+ }
374
+ const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
375
+ const group = this.createGroupAtLocation(dropLocation);
376
+ group.model.openPanel(groupItem);
377
+ }
378
+ }
379
+ }
380
+ doSetGroupActive(group, skipFocus) {
381
+ var _a, _b;
382
+ const isGroupAlreadyFocused = this._activeGroup === group;
383
+ super.doSetGroupActive(group, skipFocus);
384
+ if (!isGroupAlreadyFocused && ((_a = this._activeGroup) === null || _a === void 0 ? void 0 : _a.activePanel)) {
385
+ this._onDidActivePanelChange.fire((_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.activePanel);
386
+ }
387
+ }
388
+ createGroup(options) {
389
+ if (!options) {
390
+ options = { tabHeight: this.tabHeight };
391
+ }
392
+ if (typeof options.tabHeight !== 'number') {
393
+ options.tabHeight = this.tabHeight;
394
+ }
395
+ let id = options === null || options === void 0 ? void 0 : options.id;
396
+ if (id && this._groups.has(options.id)) {
397
+ console.warn(`Duplicate group id ${options === null || options === void 0 ? void 0 : options.id}. reassigning group id to avoid errors`);
398
+ id = undefined;
399
+ }
400
+ if (!id) {
401
+ id = nextGroupId.next();
402
+ while (this._groups.has(id)) {
403
+ id = nextGroupId.next();
404
+ }
405
+ }
406
+ const view = new GroupPanel(this, id, options);
407
+ view.init({ params: {}, accessor: null }); // required to initialized .part and allow for correct disposal of group
408
+ if (!this._groups.has(view.id)) {
409
+ const disposable = new CompositeDisposable(view.model.onMove((event) => {
410
+ const { groupId, itemId, target, index } = event;
411
+ this.moveGroupOrPanel(view, groupId, itemId, target, index);
412
+ }), view.model.onDidDrop((event) => {
413
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: view }));
414
+ }), view.model.onDidAddPanel((event) => {
415
+ this._onDidAddPanel.fire(event.panel);
416
+ }), view.model.onDidRemovePanel((event) => {
417
+ this._onDidRemovePanel.fire(event.panel);
418
+ }), view.model.onDidActivePanelChange((event) => {
419
+ this._onDidActivePanelChange.fire(event.panel);
420
+ }));
421
+ this._groups.set(view.id, { value: view, disposable });
422
+ }
423
+ // TODO: must be called after the above listeners have been setup,
424
+ // not an ideal pattern
425
+ view.initialize();
426
+ if (typeof this.options.tabHeight === 'number') {
427
+ view.model.header.height = this.options.tabHeight;
428
+ }
429
+ return view;
430
+ }
431
+ createPanel(options, group) {
432
+ const view = new DefaultGroupPanelView({
433
+ content: this.createContentComponent(options.id, options.component),
434
+ tab: this.createTabComponent(options.id, options.tabComponent || this.options.defaultTabComponent),
435
+ });
436
+ const panel = new DockviewGroupPanel(options.id, this, this._api, group);
437
+ panel.init({
438
+ view,
439
+ title: options.title || options.id,
440
+ params: (options === null || options === void 0 ? void 0 : options.params) || {},
441
+ });
442
+ return panel;
443
+ }
444
+ createContentComponent(id, componentName) {
445
+ var _a;
446
+ return createComponent(id, componentName, this.options.components || {}, this.options.frameworkComponents, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.content);
447
+ }
448
+ createTabComponent(id, componentName) {
449
+ var _a;
450
+ return createComponent(id, componentName, this.options.tabComponents || {}, this.options.frameworkTabComponents, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.tab, () => new DefaultTab());
451
+ }
452
+ createGroupAtLocation(location = [0]) {
453
+ const group = this.createGroup();
454
+ this.doAddGroup(group, location);
455
+ return group;
456
+ }
457
+ findGroup(panel) {
458
+ var _a;
459
+ return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
460
+ }
461
+ dispose() {
462
+ super.dispose();
463
+ this._onDidActivePanelChange.dispose();
464
+ this._onDidAddPanel.dispose();
465
+ this._onDidRemovePanel.dispose();
466
+ this._onDidLayoutFromJSON.dispose();
467
+ }
468
+ }