dockview-core 1.7.0 → 1.7.1

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 (428) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -52
  3. package/dist/cjs/api/component.api.d.ts +144 -145
  4. package/dist/cjs/api/component.api.d.ts.map +1 -0
  5. package/dist/cjs/api/component.api.js +572 -578
  6. package/dist/cjs/api/component.api.js.map +1 -1
  7. package/dist/cjs/api/dockviewPanelApi.d.ts +35 -34
  8. package/dist/cjs/api/dockviewPanelApi.d.ts.map +1 -0
  9. package/dist/cjs/api/dockviewPanelApi.js +83 -83
  10. package/dist/cjs/api/gridviewPanelApi.d.ts +38 -37
  11. package/dist/cjs/api/gridviewPanelApi.d.ts.map +1 -0
  12. package/dist/cjs/api/gridviewPanelApi.js +47 -47
  13. package/dist/cjs/api/panelApi.d.ts +89 -88
  14. package/dist/cjs/api/panelApi.d.ts.map +1 -0
  15. package/dist/cjs/api/panelApi.js +137 -137
  16. package/dist/cjs/api/paneviewPanelApi.d.ts +27 -26
  17. package/dist/cjs/api/paneviewPanelApi.d.ts.map +1 -0
  18. package/dist/cjs/api/paneviewPanelApi.js +57 -57
  19. package/dist/cjs/api/splitviewPanelApi.d.ts +33 -32
  20. package/dist/cjs/api/splitviewPanelApi.d.ts.map +1 -0
  21. package/dist/cjs/api/splitviewPanelApi.js +47 -47
  22. package/dist/cjs/array.d.ts +13 -12
  23. package/dist/cjs/array.d.ts.map +1 -0
  24. package/dist/cjs/array.js +58 -58
  25. package/dist/cjs/dnd/abstractDragHandler.d.ts +12 -11
  26. package/dist/cjs/dnd/abstractDragHandler.d.ts.map +1 -0
  27. package/dist/cjs/dnd/abstractDragHandler.js +125 -125
  28. package/dist/cjs/dnd/dataTransfer.d.ts +32 -31
  29. package/dist/cjs/dnd/dataTransfer.d.ts.map +1 -0
  30. package/dist/cjs/dnd/dataTransfer.js +100 -100
  31. package/dist/cjs/dnd/dnd.d.ts +28 -27
  32. package/dist/cjs/dnd/dnd.d.ts.map +1 -0
  33. package/dist/cjs/dnd/dnd.js +59 -59
  34. package/dist/cjs/dnd/droptarget.d.ts +43 -42
  35. package/dist/cjs/dnd/droptarget.d.ts.map +1 -0
  36. package/dist/cjs/dnd/droptarget.js +280 -280
  37. package/dist/cjs/dnd/ghost.d.ts +2 -1
  38. package/dist/cjs/dnd/ghost.d.ts.map +1 -0
  39. package/dist/cjs/dnd/ghost.js +15 -15
  40. package/dist/cjs/dnd/groupDragHandler.d.ts +12 -11
  41. package/dist/cjs/dnd/groupDragHandler.d.ts.map +1 -0
  42. package/dist/cjs/dnd/groupDragHandler.js +61 -61
  43. package/dist/cjs/dockview/components/panel/content.d.ts +31 -30
  44. package/dist/cjs/dockview/components/panel/content.d.ts.map +1 -0
  45. package/dist/cjs/dockview/components/panel/content.js +100 -100
  46. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +22 -21
  47. package/dist/cjs/dockview/components/tab/defaultTab.d.ts.map +1 -0
  48. package/dist/cjs/dockview/components/tab/defaultTab.js +105 -105
  49. package/dist/cjs/dockview/components/tab/tab.d.ts +32 -31
  50. package/dist/cjs/dockview/components/tab/tab.d.ts.map +1 -0
  51. package/dist/cjs/dockview/components/tab/tab.js +124 -124
  52. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +60 -63
  53. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts.map +1 -0
  54. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +230 -247
  55. package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -1
  56. package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +16 -15
  57. package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts.map +1 -0
  58. package/dist/cjs/dockview/components/titlebar/voidContainer.js +73 -73
  59. package/dist/cjs/dockview/components/watermark/watermark.d.ts +19 -18
  60. package/dist/cjs/dockview/components/watermark/watermark.d.ts.map +1 -0
  61. package/dist/cjs/dockview/components/watermark/watermark.js +87 -86
  62. package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -1
  63. package/dist/cjs/dockview/deserializer.d.ts +13 -12
  64. package/dist/cjs/dockview/deserializer.d.ts.map +1 -0
  65. package/dist/cjs/dockview/deserializer.js +45 -45
  66. package/dist/cjs/dockview/dockviewComponent.d.ts +121 -126
  67. package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -0
  68. package/dist/cjs/dockview/dockviewComponent.js +749 -771
  69. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  70. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +32 -31
  71. package/dist/cjs/dockview/dockviewGroupPanel.d.ts.map +1 -0
  72. package/dist/cjs/dockview/dockviewGroupPanel.js +96 -96
  73. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +175 -176
  74. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts.map +1 -0
  75. package/dist/cjs/dockview/dockviewGroupPanelModel.js +578 -578
  76. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
  77. package/dist/cjs/dockview/dockviewPanel.d.ts +41 -40
  78. package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -0
  79. package/dist/cjs/dockview/dockviewPanel.js +146 -149
  80. package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
  81. package/dist/cjs/dockview/dockviewPanelModel.d.ts +35 -34
  82. package/dist/cjs/dockview/dockviewPanelModel.d.ts.map +1 -0
  83. package/dist/cjs/dockview/dockviewPanelModel.js +92 -92
  84. package/dist/cjs/dockview/options.d.ts +117 -116
  85. package/dist/cjs/dockview/options.d.ts.map +1 -0
  86. package/dist/cjs/dockview/options.js +31 -31
  87. package/dist/cjs/dockview/types.d.ts +68 -67
  88. package/dist/cjs/dockview/types.d.ts.map +1 -0
  89. package/dist/cjs/dockview/types.js +10 -10
  90. package/dist/cjs/dom.d.ts +15 -14
  91. package/dist/cjs/dom.d.ts.map +1 -0
  92. package/dist/cjs/dom.js +189 -182
  93. package/dist/cjs/dom.js.map +1 -1
  94. package/dist/cjs/events.d.ts +31 -30
  95. package/dist/cjs/events.d.ts.map +1 -0
  96. package/dist/cjs/events.js +129 -129
  97. package/dist/cjs/gridview/baseComponentGridview.d.ts +88 -87
  98. package/dist/cjs/gridview/baseComponentGridview.d.ts.map +1 -0
  99. package/dist/cjs/gridview/baseComponentGridview.js +271 -279
  100. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  101. package/dist/cjs/gridview/basePanelView.d.ts +41 -40
  102. package/dist/cjs/gridview/basePanelView.d.ts.map +1 -0
  103. package/dist/cjs/gridview/basePanelView.js +123 -123
  104. package/dist/cjs/gridview/branchNode.d.ts +50 -49
  105. package/dist/cjs/gridview/branchNode.d.ts.map +1 -0
  106. package/dist/cjs/gridview/branchNode.js +342 -342
  107. package/dist/cjs/gridview/gridview.d.ts +134 -133
  108. package/dist/cjs/gridview/gridview.d.ts.map +1 -0
  109. package/dist/cjs/gridview/gridview.js +517 -510
  110. package/dist/cjs/gridview/gridview.js.map +1 -1
  111. package/dist/cjs/gridview/gridviewComponent.d.ts +81 -80
  112. package/dist/cjs/gridview/gridviewComponent.d.ts.map +1 -0
  113. package/dist/cjs/gridview/gridviewComponent.js +325 -324
  114. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  115. package/dist/cjs/gridview/gridviewPanel.d.ts +66 -65
  116. package/dist/cjs/gridview/gridviewPanel.d.ts.map +1 -0
  117. package/dist/cjs/gridview/gridviewPanel.js +214 -214
  118. package/dist/cjs/gridview/leafNode.d.ts +35 -34
  119. package/dist/cjs/gridview/leafNode.d.ts.map +1 -0
  120. package/dist/cjs/gridview/leafNode.js +170 -170
  121. package/dist/cjs/gridview/options.d.ts +19 -18
  122. package/dist/cjs/gridview/options.d.ts.map +1 -0
  123. package/dist/cjs/gridview/options.js +2 -2
  124. package/dist/cjs/gridview/types.d.ts +4 -3
  125. package/dist/cjs/gridview/types.d.ts.map +1 -0
  126. package/dist/cjs/gridview/types.js +2 -2
  127. package/dist/cjs/index.d.ts +42 -41
  128. package/dist/cjs/index.d.ts.map +1 -0
  129. package/dist/cjs/index.js +63 -63
  130. package/dist/cjs/lifecycle.d.ts +25 -22
  131. package/dist/cjs/lifecycle.d.ts.map +1 -0
  132. package/dist/cjs/lifecycle.js +97 -88
  133. package/dist/cjs/lifecycle.js.map +1 -1
  134. package/dist/cjs/math.d.ts +6 -5
  135. package/dist/cjs/math.d.ts.map +1 -0
  136. package/dist/cjs/math.js +34 -34
  137. package/dist/cjs/panel/componentFactory.d.ts +11 -10
  138. package/dist/cjs/panel/componentFactory.d.ts.map +1 -0
  139. package/dist/cjs/panel/componentFactory.js +30 -30
  140. package/dist/cjs/panel/types.d.ts +34 -33
  141. package/dist/cjs/panel/types.d.ts.map +1 -0
  142. package/dist/cjs/panel/types.js +2 -2
  143. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +22 -21
  144. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts.map +1 -0
  145. package/dist/cjs/paneview/defaultPaneviewHeader.js +90 -90
  146. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +22 -21
  147. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts.map +1 -0
  148. package/dist/cjs/paneview/draggablePaneviewPanel.js +131 -131
  149. package/dist/cjs/paneview/options.d.ts +29 -27
  150. package/dist/cjs/paneview/options.d.ts.map +1 -0
  151. package/dist/cjs/paneview/options.js +2 -2
  152. package/dist/cjs/paneview/paneview.d.ts +41 -40
  153. package/dist/cjs/paneview/paneview.d.ts.map +1 -0
  154. package/dist/cjs/paneview/paneview.js +201 -201
  155. package/dist/cjs/paneview/paneviewComponent.d.ts +130 -129
  156. package/dist/cjs/paneview/paneviewComponent.d.ts.map +1 -0
  157. package/dist/cjs/paneview/paneviewComponent.js +394 -394
  158. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  159. package/dist/cjs/paneview/paneviewPanel.d.ts +93 -92
  160. package/dist/cjs/paneview/paneviewPanel.d.ts.map +1 -0
  161. package/dist/cjs/paneview/paneviewPanel.js +275 -275
  162. package/dist/cjs/resizable.d.ts +8 -0
  163. package/dist/cjs/resizable.d.ts.map +1 -0
  164. package/dist/cjs/resizable.js +57 -0
  165. package/dist/cjs/resizable.js.map +1 -0
  166. package/dist/cjs/splitview/options.d.ts +28 -26
  167. package/dist/cjs/splitview/options.d.ts.map +1 -0
  168. package/dist/cjs/splitview/options.js +2 -2
  169. package/dist/cjs/splitview/splitview.d.ts +128 -127
  170. package/dist/cjs/splitview/splitview.d.ts.map +1 -0
  171. package/dist/cjs/splitview/splitview.js +908 -908
  172. package/dist/cjs/splitview/splitviewComponent.d.ts +102 -101
  173. package/dist/cjs/splitview/splitviewComponent.d.ts.map +1 -0
  174. package/dist/cjs/splitview/splitviewComponent.js +373 -373
  175. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  176. package/dist/cjs/splitview/splitviewPanel.d.ts +46 -45
  177. package/dist/cjs/splitview/splitviewPanel.d.ts.map +1 -0
  178. package/dist/cjs/splitview/splitviewPanel.js +179 -179
  179. package/dist/cjs/splitview/viewItem.d.ts +26 -25
  180. package/dist/cjs/splitview/viewItem.d.ts.map +1 -0
  181. package/dist/cjs/splitview/viewItem.js +119 -119
  182. package/dist/cjs/svg.d.ts +4 -3
  183. package/dist/cjs/svg.d.ts.map +1 -0
  184. package/dist/cjs/svg.js +43 -43
  185. package/dist/cjs/types.d.ts +3 -2
  186. package/dist/cjs/types.d.ts.map +1 -0
  187. package/dist/cjs/types.js +2 -2
  188. package/dist/dockview-core.amd.js +6343 -6339
  189. package/dist/dockview-core.amd.min.js +2 -2
  190. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  191. package/dist/dockview-core.amd.noStyle.js +6310 -6306
  192. package/dist/dockview-core.cjs.js +6339 -6335
  193. package/dist/dockview-core.esm.js +6339 -6335
  194. package/dist/dockview-core.esm.min.js +2 -2
  195. package/dist/dockview-core.js +6343 -6339
  196. package/dist/dockview-core.min.js +2 -2
  197. package/dist/dockview-core.min.noStyle.js +2 -2
  198. package/dist/dockview-core.noStyle.js +6310 -6306
  199. package/dist/esm/api/component.api.d.ts +144 -145
  200. package/dist/esm/api/component.api.d.ts.map +1 -0
  201. package/dist/esm/api/component.api.js +324 -329
  202. package/dist/esm/api/component.api.js.map +1 -0
  203. package/dist/esm/api/dockviewPanelApi.d.ts +35 -34
  204. package/dist/esm/api/dockviewPanelApi.d.ts.map +1 -0
  205. package/dist/esm/api/dockviewPanelApi.js +49 -48
  206. package/dist/esm/api/dockviewPanelApi.js.map +1 -0
  207. package/dist/esm/api/gridviewPanelApi.d.ts +38 -37
  208. package/dist/esm/api/gridviewPanelApi.d.ts.map +1 -0
  209. package/dist/esm/api/gridviewPanelApi.js +26 -25
  210. package/dist/esm/api/gridviewPanelApi.js.map +1 -0
  211. package/dist/esm/api/panelApi.d.ts +89 -88
  212. package/dist/esm/api/panelApi.d.ts.map +1 -0
  213. package/dist/esm/api/panelApi.js +96 -95
  214. package/dist/esm/api/panelApi.js.map +1 -0
  215. package/dist/esm/api/paneviewPanelApi.d.ts +27 -26
  216. package/dist/esm/api/paneviewPanelApi.d.ts.map +1 -0
  217. package/dist/esm/api/paneviewPanelApi.js +28 -27
  218. package/dist/esm/api/paneviewPanelApi.js.map +1 -0
  219. package/dist/esm/api/splitviewPanelApi.d.ts +33 -32
  220. package/dist/esm/api/splitviewPanelApi.d.ts.map +1 -0
  221. package/dist/esm/api/splitviewPanelApi.js +26 -25
  222. package/dist/esm/api/splitviewPanelApi.js.map +1 -0
  223. package/dist/esm/array.d.ts +13 -12
  224. package/dist/esm/array.d.ts.map +1 -0
  225. package/dist/esm/array.js +50 -49
  226. package/dist/esm/array.js.map +1 -0
  227. package/dist/esm/dnd/abstractDragHandler.d.ts +12 -11
  228. package/dist/esm/dnd/abstractDragHandler.d.ts.map +1 -0
  229. package/dist/esm/dnd/abstractDragHandler.js +48 -47
  230. package/dist/esm/dnd/abstractDragHandler.js.map +1 -0
  231. package/dist/esm/dnd/dataTransfer.d.ts +32 -31
  232. package/dist/esm/dnd/dataTransfer.d.ts.map +1 -0
  233. package/dist/esm/dnd/dataTransfer.js +70 -69
  234. package/dist/esm/dnd/dataTransfer.js.map +1 -0
  235. package/dist/esm/dnd/dnd.d.ts +28 -27
  236. package/dist/esm/dnd/dnd.d.ts.map +1 -0
  237. package/dist/esm/dnd/dnd.js +37 -36
  238. package/dist/esm/dnd/dnd.js.map +1 -0
  239. package/dist/esm/dnd/droptarget.d.ts +43 -42
  240. package/dist/esm/dnd/droptarget.d.ts.map +1 -0
  241. package/dist/esm/dnd/droptarget.js +251 -250
  242. package/dist/esm/dnd/droptarget.js.map +1 -0
  243. package/dist/esm/dnd/ghost.d.ts +2 -1
  244. package/dist/esm/dnd/ghost.d.ts.map +1 -0
  245. package/dist/esm/dnd/ghost.js +12 -11
  246. package/dist/esm/dnd/ghost.js.map +1 -0
  247. package/dist/esm/dnd/groupDragHandler.d.ts +12 -11
  248. package/dist/esm/dnd/groupDragHandler.d.ts.map +1 -0
  249. package/dist/esm/dnd/groupDragHandler.js +39 -38
  250. package/dist/esm/dnd/groupDragHandler.js.map +1 -0
  251. package/dist/esm/dockview/components/panel/content.d.ts +31 -30
  252. package/dist/esm/dockview/components/panel/content.d.ts.map +1 -0
  253. package/dist/esm/dockview/components/panel/content.js +74 -73
  254. package/dist/esm/dockview/components/panel/content.js.map +1 -0
  255. package/dist/esm/dockview/components/tab/defaultTab.d.ts +22 -21
  256. package/dist/esm/dockview/components/tab/defaultTab.d.ts.map +1 -0
  257. package/dist/esm/dockview/components/tab/defaultTab.js +68 -67
  258. package/dist/esm/dockview/components/tab/defaultTab.js.map +1 -0
  259. package/dist/esm/dockview/components/tab/tab.d.ts +32 -31
  260. package/dist/esm/dockview/components/tab/tab.d.ts.map +1 -0
  261. package/dist/esm/dockview/components/tab/tab.js +95 -94
  262. package/dist/esm/dockview/components/tab/tab.js.map +1 -0
  263. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +60 -63
  264. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts.map +1 -0
  265. package/dist/esm/dockview/components/titlebar/tabsContainer.js +167 -179
  266. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -0
  267. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +16 -15
  268. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts.map +1 -0
  269. package/dist/esm/dockview/components/titlebar/voidContainer.js +48 -47
  270. package/dist/esm/dockview/components/titlebar/voidContainer.js.map +1 -0
  271. package/dist/esm/dockview/components/watermark/watermark.d.ts +19 -18
  272. package/dist/esm/dockview/components/watermark/watermark.d.ts.map +1 -0
  273. package/dist/esm/dockview/components/watermark/watermark.js +62 -60
  274. package/dist/esm/dockview/components/watermark/watermark.js.map +1 -0
  275. package/dist/esm/dockview/deserializer.d.ts +13 -12
  276. package/dist/esm/dockview/deserializer.d.ts.map +1 -0
  277. package/dist/esm/dockview/deserializer.js +41 -40
  278. package/dist/esm/dockview/deserializer.js.map +1 -0
  279. package/dist/esm/dockview/dockviewComponent.d.ts +121 -126
  280. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -0
  281. package/dist/esm/dockview/dockviewComponent.js +595 -612
  282. package/dist/esm/dockview/dockviewComponent.js.map +1 -0
  283. package/dist/esm/dockview/dockviewGroupPanel.d.ts +32 -31
  284. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -0
  285. package/dist/esm/dockview/dockviewGroupPanel.js +51 -50
  286. package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -0
  287. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +175 -176
  288. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -0
  289. package/dist/esm/dockview/dockviewGroupPanelModel.js +450 -449
  290. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -0
  291. package/dist/esm/dockview/dockviewPanel.d.ts +41 -40
  292. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -0
  293. package/dist/esm/dockview/dockviewPanel.js +102 -104
  294. package/dist/esm/dockview/dockviewPanel.js.map +1 -0
  295. package/dist/esm/dockview/dockviewPanelModel.d.ts +35 -34
  296. package/dist/esm/dockview/dockviewPanelModel.d.ts.map +1 -0
  297. package/dist/esm/dockview/dockviewPanelModel.js +69 -68
  298. package/dist/esm/dockview/dockviewPanelModel.js.map +1 -0
  299. package/dist/esm/dockview/options.d.ts +117 -116
  300. package/dist/esm/dockview/options.d.ts.map +1 -0
  301. package/dist/esm/dockview/options.js +25 -24
  302. package/dist/esm/dockview/options.js.map +1 -0
  303. package/dist/esm/dockview/types.d.ts +68 -67
  304. package/dist/esm/dockview/types.d.ts.map +1 -0
  305. package/dist/esm/dockview/types.js +8 -7
  306. package/dist/esm/dockview/types.js.map +1 -0
  307. package/dist/esm/dom.d.ts +15 -14
  308. package/dist/esm/dom.d.ts.map +1 -0
  309. package/dist/esm/dom.js +121 -113
  310. package/dist/esm/dom.js.map +1 -0
  311. package/dist/esm/events.d.ts +31 -30
  312. package/dist/esm/events.d.ts.map +1 -0
  313. package/dist/esm/events.js +89 -88
  314. package/dist/esm/events.js.map +1 -0
  315. package/dist/esm/gridview/baseComponentGridview.d.ts +88 -87
  316. package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -0
  317. package/dist/esm/gridview/baseComponentGridview.js +186 -189
  318. package/dist/esm/gridview/baseComponentGridview.js.map +1 -0
  319. package/dist/esm/gridview/basePanelView.d.ts +41 -40
  320. package/dist/esm/gridview/basePanelView.d.ts.map +1 -0
  321. package/dist/esm/gridview/basePanelView.js +75 -74
  322. package/dist/esm/gridview/basePanelView.js.map +1 -0
  323. package/dist/esm/gridview/branchNode.d.ts +50 -49
  324. package/dist/esm/gridview/branchNode.d.ts.map +1 -0
  325. package/dist/esm/gridview/branchNode.js +219 -218
  326. package/dist/esm/gridview/branchNode.js.map +1 -0
  327. package/dist/esm/gridview/gridview.d.ts +134 -133
  328. package/dist/esm/gridview/gridview.d.ts.map +1 -0
  329. package/dist/esm/gridview/gridview.js +431 -423
  330. package/dist/esm/gridview/gridview.js.map +1 -0
  331. package/dist/esm/gridview/gridviewComponent.d.ts +81 -80
  332. package/dist/esm/gridview/gridviewComponent.d.ts.map +1 -0
  333. package/dist/esm/gridview/gridviewComponent.js +239 -237
  334. package/dist/esm/gridview/gridviewComponent.js.map +1 -0
  335. package/dist/esm/gridview/gridviewPanel.d.ts +66 -65
  336. package/dist/esm/gridview/gridviewPanel.d.ts.map +1 -0
  337. package/dist/esm/gridview/gridviewPanel.js +152 -151
  338. package/dist/esm/gridview/gridviewPanel.js.map +1 -0
  339. package/dist/esm/gridview/leafNode.d.ts +35 -34
  340. package/dist/esm/gridview/leafNode.d.ts.map +1 -0
  341. package/dist/esm/gridview/leafNode.js +104 -103
  342. package/dist/esm/gridview/leafNode.js.map +1 -0
  343. package/dist/esm/gridview/options.d.ts +19 -18
  344. package/dist/esm/gridview/options.d.ts.map +1 -0
  345. package/dist/esm/gridview/options.js +2 -1
  346. package/dist/esm/gridview/options.js.map +1 -0
  347. package/dist/esm/gridview/types.d.ts +4 -3
  348. package/dist/esm/gridview/types.d.ts.map +1 -0
  349. package/dist/esm/gridview/types.js +2 -1
  350. package/dist/esm/gridview/types.js.map +1 -0
  351. package/dist/esm/index.d.ts +42 -41
  352. package/dist/esm/index.d.ts.map +1 -0
  353. package/dist/esm/index.js +36 -35
  354. package/dist/esm/index.js.map +1 -0
  355. package/dist/esm/lifecycle.d.ts +25 -22
  356. package/dist/esm/lifecycle.d.ts.map +1 -0
  357. package/dist/esm/lifecycle.js +45 -39
  358. package/dist/esm/lifecycle.js.map +1 -0
  359. package/dist/esm/math.d.ts +6 -5
  360. package/dist/esm/math.d.ts.map +1 -0
  361. package/dist/esm/math.js +29 -28
  362. package/dist/esm/math.js.map +1 -0
  363. package/dist/esm/panel/componentFactory.d.ts +11 -10
  364. package/dist/esm/panel/componentFactory.d.ts.map +1 -0
  365. package/dist/esm/panel/componentFactory.js +25 -24
  366. package/dist/esm/panel/componentFactory.js.map +1 -0
  367. package/dist/esm/panel/types.d.ts +34 -33
  368. package/dist/esm/panel/types.d.ts.map +1 -0
  369. package/dist/esm/panel/types.js +2 -1
  370. package/dist/esm/panel/types.js.map +1 -0
  371. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +22 -21
  372. package/dist/esm/paneview/defaultPaneviewHeader.d.ts.map +1 -0
  373. package/dist/esm/paneview/defaultPaneviewHeader.js +64 -63
  374. package/dist/esm/paneview/defaultPaneviewHeader.js.map +1 -0
  375. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +22 -21
  376. package/dist/esm/paneview/draggablePaneviewPanel.d.ts.map +1 -0
  377. package/dist/esm/paneview/draggablePaneviewPanel.js +93 -92
  378. package/dist/esm/paneview/draggablePaneviewPanel.js.map +1 -0
  379. package/dist/esm/paneview/options.d.ts +29 -27
  380. package/dist/esm/paneview/options.d.ts.map +1 -0
  381. package/dist/esm/paneview/options.js +2 -1
  382. package/dist/esm/paneview/options.js.map +1 -0
  383. package/dist/esm/paneview/paneview.d.ts +41 -40
  384. package/dist/esm/paneview/paneview.d.ts.map +1 -0
  385. package/dist/esm/paneview/paneview.js +146 -145
  386. package/dist/esm/paneview/paneview.js.map +1 -0
  387. package/dist/esm/paneview/paneviewComponent.d.ts +130 -129
  388. package/dist/esm/paneview/paneviewComponent.d.ts.map +1 -0
  389. package/dist/esm/paneview/paneviewComponent.js +271 -270
  390. package/dist/esm/paneview/paneviewComponent.js.map +1 -0
  391. package/dist/esm/paneview/paneviewPanel.d.ts +93 -92
  392. package/dist/esm/paneview/paneviewPanel.d.ts.map +1 -0
  393. package/dist/esm/paneview/paneviewPanel.js +193 -192
  394. package/dist/esm/paneview/paneviewPanel.js.map +1 -0
  395. package/dist/esm/resizable.d.ts +8 -0
  396. package/dist/esm/resizable.d.ts.map +1 -0
  397. package/dist/esm/resizable.js +31 -0
  398. package/dist/esm/resizable.js.map +1 -0
  399. package/dist/esm/splitview/options.d.ts +28 -26
  400. package/dist/esm/splitview/options.d.ts.map +1 -0
  401. package/dist/esm/splitview/options.js +2 -1
  402. package/dist/esm/splitview/options.js.map +1 -0
  403. package/dist/esm/splitview/splitview.d.ts +128 -127
  404. package/dist/esm/splitview/splitview.d.ts.map +1 -0
  405. package/dist/esm/splitview/splitview.js +690 -689
  406. package/dist/esm/splitview/splitview.js.map +1 -0
  407. package/dist/esm/splitview/splitviewComponent.d.ts +102 -101
  408. package/dist/esm/splitview/splitviewComponent.d.ts.map +1 -0
  409. package/dist/esm/splitview/splitviewComponent.js +250 -249
  410. package/dist/esm/splitview/splitviewComponent.js.map +1 -0
  411. package/dist/esm/splitview/splitviewPanel.d.ts +46 -45
  412. package/dist/esm/splitview/splitviewPanel.d.ts.map +1 -0
  413. package/dist/esm/splitview/splitviewPanel.js +109 -108
  414. package/dist/esm/splitview/splitviewPanel.js.map +1 -0
  415. package/dist/esm/splitview/viewItem.d.ts +26 -25
  416. package/dist/esm/splitview/viewItem.d.ts.map +1 -0
  417. package/dist/esm/splitview/viewItem.js +75 -74
  418. package/dist/esm/splitview/viewItem.js.map +1 -0
  419. package/dist/esm/svg.d.ts +4 -3
  420. package/dist/esm/svg.d.ts.map +1 -0
  421. package/dist/esm/svg.js +32 -31
  422. package/dist/esm/svg.js.map +1 -0
  423. package/dist/esm/types.d.ts +3 -2
  424. package/dist/esm/types.d.ts.map +1 -0
  425. package/dist/esm/types.js +2 -1
  426. package/dist/esm/types.js.map +1 -0
  427. package/dist/styles/dockview.css +54 -54
  428. package/package.json +4 -4
@@ -1,612 +1,595 @@
1
- import { getRelativeLocation, getGridLocation, } from '../gridview/gridview';
2
- import { directionToPosition, Droptarget } from '../dnd/droptarget';
3
- import { tail, sequenceEquals } from '../array';
4
- import { DockviewPanel } from './dockviewPanel';
5
- import { CompositeDisposable } from '../lifecycle';
6
- import { Event, Emitter } from '../events';
7
- import { Watermark } from './components/watermark/watermark';
8
- import { DockviewDropTargets, } from './types';
9
- import { sequentialNumberGenerator } from '../math';
10
- import { DefaultDockviewDeserialzier } from './deserializer';
11
- import { createComponent } from '../panel/componentFactory';
12
- import { isGroupOptionsWithGroup, isGroupOptionsWithPanel, isPanelOptionsWithGroup, isPanelOptionsWithPanel, } from './options';
13
- import { BaseGrid, toTarget, } from '../gridview/baseComponentGridview';
14
- import { DockviewApi } from '../api/component.api';
15
- import { Orientation, Sizing } from '../splitview/splitview';
16
- import { DockviewGroupPanel } from './dockviewGroupPanel';
17
- import { DockviewPanelModel } from './dockviewPanelModel';
18
- import { getPanelData } from '../dnd/dataTransfer';
19
- export class DockviewComponent extends BaseGrid {
20
- get orientation() {
21
- return this.gridview.orientation;
22
- }
23
- get totalPanels() {
24
- return this.panels.length;
25
- }
26
- get panels() {
27
- return this.groups.flatMap((group) => group.panels);
28
- }
29
- get options() {
30
- return this._options;
31
- }
32
- get activePanel() {
33
- const activeGroup = this.activeGroup;
34
- if (!activeGroup) {
35
- return undefined;
36
- }
37
- return activeGroup.activePanel;
38
- }
39
- set tabHeight(height) {
40
- this.options.tabHeight = height;
41
- this._groups.forEach((value) => {
42
- value.value.model.header.height = height;
43
- });
44
- }
45
- get tabHeight() {
46
- return this.options.tabHeight;
47
- }
48
- constructor(element, options) {
49
- super(element, {
50
- proportionalLayout: true,
51
- orientation: options.orientation || Orientation.HORIZONTAL,
52
- styles: options.styles,
53
- });
54
- this.nextGroupId = sequentialNumberGenerator();
55
- this._deserializer = new DefaultDockviewDeserialzier(this);
56
- this.watermark = null;
57
- this._onDidDrop = new Emitter();
58
- this.onDidDrop = this._onDidDrop.event;
59
- this._onDidRemovePanel = new Emitter();
60
- this.onDidRemovePanel = this._onDidRemovePanel.event;
61
- this._onDidAddPanel = new Emitter();
62
- this.onDidAddPanel = this._onDidAddPanel.event;
63
- this._onDidLayoutFromJSON = new Emitter();
64
- this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
65
- this._onDidActivePanelChange = new Emitter();
66
- this.onDidActivePanelChange = this._onDidActivePanelChange.event;
67
- this.element.classList.add('dv-dockview');
68
- this.addDisposables(this._onDidDrop, Event.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
69
- this.updateWatermark();
70
- }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
71
- this._bufferOnDidLayoutChange.fire();
72
- }));
73
- this._options = options;
74
- if (!this.options.components) {
75
- this.options.components = {};
76
- }
77
- if (!this.options.frameworkComponents) {
78
- this.options.frameworkComponents = {};
79
- }
80
- if (!this.options.frameworkTabComponents) {
81
- this.options.frameworkTabComponents = {};
82
- }
83
- if (!this.options.tabComponents) {
84
- this.options.tabComponents = {};
85
- }
86
- if (!this.options.watermarkComponent &&
87
- !this.options.watermarkFrameworkComponent) {
88
- this.options.watermarkComponent = Watermark;
89
- }
90
- const dropTarget = new Droptarget(this.element, {
91
- canDisplayOverlay: (event, position) => {
92
- const data = getPanelData();
93
- if (data) {
94
- if (data.viewId !== this.id) {
95
- return false;
96
- }
97
- return true;
98
- }
99
- if (this.options.showDndOverlay) {
100
- return this.options.showDndOverlay({
101
- nativeEvent: event,
102
- position: position,
103
- target: DockviewDropTargets.Edge,
104
- getData: getPanelData,
105
- });
106
- }
107
- return false;
108
- },
109
- acceptedTargetZones: ['top', 'bottom', 'left', 'right'],
110
- overlayModel: {
111
- activationSize: { type: 'pixels', value: 10 },
112
- size: { type: 'pixels', value: 20 },
113
- },
114
- });
115
- this.addDisposables(dropTarget, dropTarget.onDrop((event) => {
116
- const data = getPanelData();
117
- if (data) {
118
- this.moveGroupOrPanel(this.orthogonalize(event.position), data.groupId, data.panelId || undefined, 'center');
119
- }
120
- else {
121
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
122
- }
123
- }));
124
- this._api = new DockviewApi(this);
125
- this.updateWatermark();
126
- }
127
- orthogonalize(position) {
128
- switch (position) {
129
- case 'top':
130
- case 'bottom':
131
- if (this.gridview.orientation === Orientation.HORIZONTAL) {
132
- // we need to add to a vertical splitview but the current root is a horizontal splitview.
133
- // insert a vertical splitview at the root level and add the existing view as a child
134
- this.gridview.insertOrthogonalSplitviewAtRoot();
135
- }
136
- break;
137
- case 'left':
138
- case 'right':
139
- if (this.gridview.orientation === Orientation.VERTICAL) {
140
- // we need to add to a horizontal splitview but the current root is a vertical splitview.
141
- // insert a horiziontal splitview at the root level and add the existing view as a child
142
- this.gridview.insertOrthogonalSplitviewAtRoot();
143
- }
144
- break;
145
- default:
146
- break;
147
- }
148
- switch (position) {
149
- case 'top':
150
- case 'left':
151
- return this.createGroupAtLocation([0]); // insert into first position
152
- case 'bottom':
153
- case 'right':
154
- return this.createGroupAtLocation([this.gridview.length]); // insert into last position
155
- default:
156
- throw new Error(`unsupported position ${position}`);
157
- }
158
- }
159
- updateOptions(options) {
160
- const hasOrientationChanged = typeof options.orientation === 'string' &&
161
- this.gridview.orientation !== options.orientation;
162
- this._options = Object.assign(Object.assign({}, this.options), options);
163
- if (hasOrientationChanged) {
164
- this.gridview.orientation = options.orientation;
165
- }
166
- this.layout(this.gridview.width, this.gridview.height, true);
167
- }
168
- focus() {
169
- var _a;
170
- (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
171
- }
172
- getGroupPanel(id) {
173
- return this.panels.find((panel) => panel.id === id);
174
- }
175
- setActivePanel(panel) {
176
- this.doSetGroupActive(panel.group);
177
- panel.group.model.openPanel(panel);
178
- }
179
- moveToNext(options = {}) {
180
- var _a;
181
- if (!options.group) {
182
- if (!this.activeGroup) {
183
- return;
184
- }
185
- options.group = this.activeGroup;
186
- }
187
- if (options.includePanel && options.group) {
188
- if (options.group.activePanel !==
189
- options.group.panels[options.group.panels.length - 1]) {
190
- options.group.model.moveToNext({ suppressRoll: true });
191
- return;
192
- }
193
- }
194
- const location = getGridLocation(options.group.element);
195
- const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
196
- this.doSetGroupActive(next);
197
- }
198
- moveToPrevious(options = {}) {
199
- var _a;
200
- if (!options.group) {
201
- if (!this.activeGroup) {
202
- return;
203
- }
204
- options.group = this.activeGroup;
205
- }
206
- if (options.includePanel && options.group) {
207
- if (options.group.activePanel !== options.group.panels[0]) {
208
- options.group.model.moveToPrevious({ suppressRoll: true });
209
- return;
210
- }
211
- }
212
- const location = getGridLocation(options.group.element);
213
- const next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
214
- if (next) {
215
- this.doSetGroupActive(next);
216
- }
217
- }
218
- /**
219
- * Serialize the current state of the layout
220
- *
221
- * @returns A JSON respresentation of the layout
222
- */
223
- toJSON() {
224
- var _a;
225
- const data = this.gridview.serialize();
226
- const panels = this.panels.reduce((collection, panel) => {
227
- collection[panel.id] = panel.toJSON();
228
- return collection;
229
- }, {});
230
- return {
231
- grid: data,
232
- panels,
233
- activeGroup: (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id,
234
- options: { tabHeight: this.tabHeight },
235
- };
236
- }
237
- fromJSON(data) {
238
- this.clear();
239
- const { grid, panels, options, activeGroup } = data;
240
- if (typeof (options === null || options === void 0 ? void 0 : options.tabHeight) === 'number') {
241
- this.tabHeight = options.tabHeight;
242
- }
243
- if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
244
- throw new Error('root must be of type branch');
245
- }
246
- this.gridview.deserialize(grid, {
247
- fromJSON: (node) => {
248
- const { id, locked, hideHeader, views, activeView } = node.data;
249
- const group = this.createGroup({
250
- id,
251
- locked: !!locked,
252
- hideHeader: !!hideHeader,
253
- });
254
- this._onDidAddGroup.fire(group);
255
- for (const child of views) {
256
- const panel = this._deserializer.fromJSON(panels[child], group);
257
- const isActive = typeof activeView === 'string' &&
258
- activeView === panel.id;
259
- group.model.openPanel(panel, {
260
- skipSetPanelActive: !isActive,
261
- skipSetGroupActive: true,
262
- });
263
- }
264
- if (!group.activePanel && group.panels.length > 0) {
265
- group.model.openPanel(group.panels[group.panels.length - 1], {
266
- skipSetGroupActive: true,
267
- });
268
- }
269
- return group;
270
- },
271
- });
272
- if (typeof activeGroup === 'string') {
273
- const panel = this.getPanel(activeGroup);
274
- if (panel) {
275
- this.doSetGroupActive(panel);
276
- }
277
- }
278
- this.gridview.layout(this.width, this.height);
279
- this._onDidLayoutFromJSON.fire();
280
- }
281
- clear() {
282
- const groups = Array.from(this._groups.values()).map((_) => _.value);
283
- const hasActiveGroup = !!this.activeGroup;
284
- const hasActivePanel = !!this.activePanel;
285
- for (const group of groups) {
286
- // remove the group will automatically remove the panels
287
- this.removeGroup(group, true);
288
- }
289
- if (hasActiveGroup) {
290
- this.doSetGroupActive(undefined);
291
- }
292
- if (hasActivePanel) {
293
- this._onDidActivePanelChange.fire(undefined);
294
- }
295
- this.gridview.clear();
296
- }
297
- closeAllGroups() {
298
- for (const entry of this._groups.entries()) {
299
- const [_, group] = entry;
300
- group.value.model.closeAllPanels();
301
- }
302
- }
303
- addPanel(options) {
304
- var _a, _b;
305
- if (this.panels.find((_) => _.id === options.id)) {
306
- throw new Error(`panel with id ${options.id} already exists`);
307
- }
308
- let referenceGroup;
309
- if (options.position) {
310
- if (isPanelOptionsWithPanel(options.position)) {
311
- const referencePanel = typeof options.position.referencePanel === 'string'
312
- ? this.getGroupPanel(options.position.referencePanel)
313
- : options.position.referencePanel;
314
- if (!referencePanel) {
315
- throw new Error(`referencePanel ${options.position.referencePanel} does not exist`);
316
- }
317
- referenceGroup = this.findGroup(referencePanel);
318
- }
319
- else if (isPanelOptionsWithGroup(options.position)) {
320
- referenceGroup =
321
- typeof options.position.referenceGroup === 'string'
322
- ? (_a = this._groups.get(options.position.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
323
- : options.position.referenceGroup;
324
- if (!referenceGroup) {
325
- throw new Error(`referencePanel ${options.position.referenceGroup} does not exist`);
326
- }
327
- }
328
- else {
329
- const group = this.orthogonalize(directionToPosition(options.position.direction));
330
- const panel = this.createPanel(options, group);
331
- group.model.openPanel(panel);
332
- return panel;
333
- }
334
- }
335
- else {
336
- referenceGroup = this.activeGroup;
337
- }
338
- let panel;
339
- if (referenceGroup) {
340
- const target = toTarget(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
341
- if (target === 'center') {
342
- panel = this.createPanel(options, referenceGroup);
343
- referenceGroup.model.openPanel(panel);
344
- }
345
- else {
346
- const location = getGridLocation(referenceGroup.element);
347
- const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
348
- const group = this.createGroupAtLocation(relativeLocation);
349
- panel = this.createPanel(options, group);
350
- group.model.openPanel(panel);
351
- }
352
- }
353
- else {
354
- const group = this.createGroupAtLocation();
355
- panel = this.createPanel(options, group);
356
- group.model.openPanel(panel);
357
- }
358
- return panel;
359
- }
360
- removePanel(panel, options = {
361
- removeEmptyGroup: true,
362
- skipDispose: false,
363
- }) {
364
- const group = panel.group;
365
- if (!group) {
366
- throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
367
- }
368
- group.model.removePanel(panel);
369
- panel.dispose();
370
- if (group.size === 0 && options.removeEmptyGroup) {
371
- this.removeGroup(group);
372
- }
373
- }
374
- createWatermarkComponent() {
375
- var _a;
376
- return createComponent('watermark-id', 'watermark-name', this.options.watermarkComponent
377
- ? { 'watermark-name': this.options.watermarkComponent }
378
- : {}, this.options.watermarkFrameworkComponent
379
- ? { 'watermark-name': this.options.watermarkFrameworkComponent }
380
- : {}, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.watermark);
381
- }
382
- updateWatermark() {
383
- var _a, _b;
384
- if (this.groups.length === 0) {
385
- if (!this.watermark) {
386
- this.watermark = this.createWatermarkComponent();
387
- this.watermark.init({
388
- containerApi: new DockviewApi(this),
389
- });
390
- const watermarkContainer = document.createElement('div');
391
- watermarkContainer.className = 'dv-watermark-container';
392
- watermarkContainer.appendChild(this.watermark.element);
393
- this.element.appendChild(watermarkContainer);
394
- }
395
- }
396
- else if (this.watermark) {
397
- this.watermark.element.parentElement.remove();
398
- (_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
399
- this.watermark = null;
400
- }
401
- }
402
- addGroup(options) {
403
- var _a;
404
- const group = this.createGroup();
405
- if (options) {
406
- let referenceGroup;
407
- if (isGroupOptionsWithPanel(options)) {
408
- const referencePanel = typeof options.referencePanel === 'string'
409
- ? this.panels.find((panel) => panel.id === options.referencePanel)
410
- : options.referencePanel;
411
- if (!referencePanel) {
412
- throw new Error(`reference panel ${options.referencePanel} does not exist`);
413
- }
414
- referenceGroup = this.findGroup(referencePanel);
415
- if (!referenceGroup) {
416
- throw new Error(`reference group for reference panel ${options.referencePanel} does not exist`);
417
- }
418
- }
419
- else if (isGroupOptionsWithGroup(options)) {
420
- referenceGroup =
421
- typeof options.referenceGroup === 'string'
422
- ? (_a = this._groups.get(options.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
423
- : options.referenceGroup;
424
- if (!referenceGroup) {
425
- throw new Error(`reference group ${options.referenceGroup} does not exist`);
426
- }
427
- }
428
- else {
429
- const group = this.orthogonalize(directionToPosition(options.direction));
430
- return group;
431
- }
432
- const target = toTarget(options.direction || 'within');
433
- const location = getGridLocation(referenceGroup.element);
434
- const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
435
- this.doAddGroup(group, relativeLocation);
436
- return group;
437
- }
438
- else {
439
- this.doAddGroup(group);
440
- return group;
441
- }
442
- }
443
- removeGroup(group, skipActive = false) {
444
- const panels = [...group.panels]; // reassign since group panels will mutate
445
- for (const panel of panels) {
446
- this.removePanel(panel, {
447
- removeEmptyGroup: false,
448
- skipDispose: false,
449
- });
450
- }
451
- super.doRemoveGroup(group, { skipActive });
452
- }
453
- moveGroupOrPanel(referenceGroup, groupId, itemId, target, index) {
454
- var _a;
455
- const sourceGroup = groupId
456
- ? (_a = this._groups.get(groupId)) === null || _a === void 0 ? void 0 : _a.value
457
- : undefined;
458
- if (itemId === undefined) {
459
- if (sourceGroup) {
460
- this.moveGroup(sourceGroup, referenceGroup, target);
461
- }
462
- return;
463
- }
464
- if (!target || target === 'center') {
465
- const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
466
- this.panels.find((panel) => panel.id === itemId);
467
- if (!groupItem) {
468
- throw new Error(`No panel with id ${itemId}`);
469
- }
470
- if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
471
- this.doRemoveGroup(sourceGroup);
472
- }
473
- referenceGroup.model.openPanel(groupItem, { index });
474
- }
475
- else {
476
- const referenceLocation = getGridLocation(referenceGroup.element);
477
- const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
478
- if (sourceGroup && sourceGroup.size < 2) {
479
- const [targetParentLocation, to] = tail(targetLocation);
480
- const sourceLocation = getGridLocation(sourceGroup.element);
481
- const [sourceParentLocation, from] = tail(sourceLocation);
482
- if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
483
- // special case when 'swapping' two views within same grid location
484
- // if a group has one tab - we are essentially moving the 'group'
485
- // which is equivalent to swapping two views in this case
486
- this.gridview.moveView(sourceParentLocation, from, to);
487
- }
488
- else {
489
- // source group will become empty so delete the group
490
- const targetGroup = this.doRemoveGroup(sourceGroup, {
491
- skipActive: true,
492
- skipDispose: true,
493
- });
494
- // after deleting the group we need to re-evaulate the ref location
495
- const updatedReferenceLocation = getGridLocation(referenceGroup.element);
496
- const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, target);
497
- this.doAddGroup(targetGroup, location);
498
- }
499
- }
500
- else {
501
- const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
502
- this.panels.find((panel) => panel.id === itemId);
503
- if (!groupItem) {
504
- throw new Error(`No panel with id ${itemId}`);
505
- }
506
- const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
507
- const group = this.createGroupAtLocation(dropLocation);
508
- group.model.openPanel(groupItem);
509
- }
510
- }
511
- }
512
- moveGroup(sourceGroup, referenceGroup, target) {
513
- if (sourceGroup) {
514
- if (!target || target === 'center') {
515
- const activePanel = sourceGroup.activePanel;
516
- const panels = [...sourceGroup.panels].map((p) => sourceGroup.model.removePanel(p.id));
517
- if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
518
- this.doRemoveGroup(sourceGroup);
519
- }
520
- for (const panel of panels) {
521
- referenceGroup.model.openPanel(panel, {
522
- skipSetPanelActive: panel !== activePanel,
523
- });
524
- }
525
- }
526
- else {
527
- this.gridview.removeView(getGridLocation(sourceGroup.element));
528
- const referenceLocation = getGridLocation(referenceGroup.element);
529
- const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
530
- this.gridview.addView(sourceGroup, Sizing.Distribute, dropLocation);
531
- }
532
- }
533
- }
534
- doSetGroupActive(group, skipFocus) {
535
- var _a, _b;
536
- const isGroupAlreadyFocused = this._activeGroup === group;
537
- super.doSetGroupActive(group, skipFocus);
538
- if (!isGroupAlreadyFocused && ((_a = this._activeGroup) === null || _a === void 0 ? void 0 : _a.activePanel)) {
539
- this._onDidActivePanelChange.fire((_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.activePanel);
540
- }
541
- }
542
- createGroup(options) {
543
- if (!options) {
544
- options = { tabHeight: this.tabHeight };
545
- }
546
- if (typeof options.tabHeight !== 'number') {
547
- options.tabHeight = this.tabHeight;
548
- }
549
- let id = options === null || options === void 0 ? void 0 : options.id;
550
- if (id && this._groups.has(options.id)) {
551
- console.warn(`Duplicate group id ${options === null || options === void 0 ? void 0 : options.id}. reassigning group id to avoid errors`);
552
- id = undefined;
553
- }
554
- if (!id) {
555
- id = this.nextGroupId.next();
556
- while (this._groups.has(id)) {
557
- id = this.nextGroupId.next();
558
- }
559
- }
560
- const view = new DockviewGroupPanel(this, id, options);
561
- view.init({ params: {}, accessor: null }); // required to initialized .part and allow for correct disposal of group
562
- if (!this._groups.has(view.id)) {
563
- const disposable = new CompositeDisposable(view.model.onMove((event) => {
564
- const { groupId, itemId, target, index } = event;
565
- this.moveGroupOrPanel(view, groupId, itemId, target, index);
566
- }), view.model.onDidDrop((event) => {
567
- this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: view }));
568
- }), view.model.onDidAddPanel((event) => {
569
- this._onDidAddPanel.fire(event.panel);
570
- }), view.model.onDidRemovePanel((event) => {
571
- this._onDidRemovePanel.fire(event.panel);
572
- }), view.model.onDidActivePanelChange((event) => {
573
- this._onDidActivePanelChange.fire(event.panel);
574
- }));
575
- this._groups.set(view.id, { value: view, disposable });
576
- }
577
- // TODO: must be called after the above listeners have been setup,
578
- // not an ideal pattern
579
- view.initialize();
580
- if (typeof this.options.tabHeight === 'number') {
581
- view.model.header.height = this.options.tabHeight;
582
- }
583
- return view;
584
- }
585
- createPanel(options, group) {
586
- const contentComponent = options.component;
587
- const tabComponent = options.tabComponent || this.options.defaultTabComponent;
588
- const view = new DockviewPanelModel(this, options.id, contentComponent, tabComponent);
589
- const panel = new DockviewPanel(options.id, this, this._api, group, view);
590
- panel.init({
591
- title: options.title || options.id,
592
- params: (options === null || options === void 0 ? void 0 : options.params) || {},
593
- });
594
- return panel;
595
- }
596
- createGroupAtLocation(location = [0]) {
597
- const group = this.createGroup();
598
- this.doAddGroup(group, location);
599
- return group;
600
- }
601
- findGroup(panel) {
602
- var _a;
603
- return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
604
- }
605
- dispose() {
606
- super.dispose();
607
- this._onDidActivePanelChange.dispose();
608
- this._onDidAddPanel.dispose();
609
- this._onDidRemovePanel.dispose();
610
- this._onDidLayoutFromJSON.dispose();
611
- }
612
- }
1
+ import { getRelativeLocation, getGridLocation, } from '../gridview/gridview';
2
+ import { directionToPosition, Droptarget } from '../dnd/droptarget';
3
+ import { tail, sequenceEquals } from '../array';
4
+ import { DockviewPanel } from './dockviewPanel';
5
+ import { CompositeDisposable } from '../lifecycle';
6
+ import { Event, Emitter } from '../events';
7
+ import { Watermark } from './components/watermark/watermark';
8
+ import { DockviewDropTargets, } from './types';
9
+ import { sequentialNumberGenerator } from '../math';
10
+ import { DefaultDockviewDeserialzier } from './deserializer';
11
+ import { createComponent } from '../panel/componentFactory';
12
+ import { isGroupOptionsWithGroup, isGroupOptionsWithPanel, isPanelOptionsWithGroup, isPanelOptionsWithPanel, } from './options';
13
+ import { BaseGrid, toTarget, } from '../gridview/baseComponentGridview';
14
+ import { DockviewApi } from '../api/component.api';
15
+ import { Orientation, Sizing } from '../splitview/splitview';
16
+ import { DockviewGroupPanel } from './dockviewGroupPanel';
17
+ import { DockviewPanelModel } from './dockviewPanelModel';
18
+ import { getPanelData } from '../dnd/dataTransfer';
19
+ export class DockviewComponent extends BaseGrid {
20
+ get orientation() {
21
+ return this.gridview.orientation;
22
+ }
23
+ get totalPanels() {
24
+ return this.panels.length;
25
+ }
26
+ get panels() {
27
+ return this.groups.flatMap((group) => group.panels);
28
+ }
29
+ get options() {
30
+ return this._options;
31
+ }
32
+ get activePanel() {
33
+ const activeGroup = this.activeGroup;
34
+ if (!activeGroup) {
35
+ return undefined;
36
+ }
37
+ return activeGroup.activePanel;
38
+ }
39
+ constructor(options) {
40
+ super({
41
+ proportionalLayout: true,
42
+ orientation: options.orientation || Orientation.HORIZONTAL,
43
+ styles: options.styles,
44
+ parentElement: options.parentElement,
45
+ });
46
+ this.nextGroupId = sequentialNumberGenerator();
47
+ this._deserializer = new DefaultDockviewDeserialzier(this);
48
+ this.watermark = null;
49
+ this._onDidDrop = new Emitter();
50
+ this.onDidDrop = this._onDidDrop.event;
51
+ this._onDidRemovePanel = new Emitter();
52
+ this.onDidRemovePanel = this._onDidRemovePanel.event;
53
+ this._onDidAddPanel = new Emitter();
54
+ this.onDidAddPanel = this._onDidAddPanel.event;
55
+ this._onDidLayoutFromJSON = new Emitter();
56
+ this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
57
+ this._onDidActivePanelChange = new Emitter();
58
+ this.onDidActivePanelChange = this._onDidActivePanelChange.event;
59
+ this.element.classList.add('dv-dockview');
60
+ this.addDisposables(this._onDidDrop, Event.any(this.onDidAddGroup, this.onDidRemoveGroup)(() => {
61
+ this.updateWatermark();
62
+ }), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
63
+ this._bufferOnDidLayoutChange.fire();
64
+ }));
65
+ this._options = options;
66
+ if (!this.options.components) {
67
+ this.options.components = {};
68
+ }
69
+ if (!this.options.frameworkComponents) {
70
+ this.options.frameworkComponents = {};
71
+ }
72
+ if (!this.options.frameworkTabComponents) {
73
+ this.options.frameworkTabComponents = {};
74
+ }
75
+ if (!this.options.tabComponents) {
76
+ this.options.tabComponents = {};
77
+ }
78
+ if (!this.options.watermarkComponent &&
79
+ !this.options.watermarkFrameworkComponent) {
80
+ this.options.watermarkComponent = Watermark;
81
+ }
82
+ const dropTarget = new Droptarget(this.element, {
83
+ canDisplayOverlay: (event, position) => {
84
+ const data = getPanelData();
85
+ if (data) {
86
+ if (data.viewId !== this.id) {
87
+ return false;
88
+ }
89
+ return true;
90
+ }
91
+ if (this.options.showDndOverlay) {
92
+ return this.options.showDndOverlay({
93
+ nativeEvent: event,
94
+ position: position,
95
+ target: DockviewDropTargets.Edge,
96
+ getData: getPanelData,
97
+ });
98
+ }
99
+ return false;
100
+ },
101
+ acceptedTargetZones: ['top', 'bottom', 'left', 'right'],
102
+ overlayModel: {
103
+ activationSize: { type: 'pixels', value: 10 },
104
+ size: { type: 'pixels', value: 20 },
105
+ },
106
+ });
107
+ this.addDisposables(dropTarget, dropTarget.onDrop((event) => {
108
+ const data = getPanelData();
109
+ if (data) {
110
+ this.moveGroupOrPanel(this.orthogonalize(event.position), data.groupId, data.panelId || undefined, 'center');
111
+ }
112
+ else {
113
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
114
+ }
115
+ }));
116
+ this._api = new DockviewApi(this);
117
+ this.updateWatermark();
118
+ }
119
+ orthogonalize(position) {
120
+ switch (position) {
121
+ case 'top':
122
+ case 'bottom':
123
+ if (this.gridview.orientation === Orientation.HORIZONTAL) {
124
+ // we need to add to a vertical splitview but the current root is a horizontal splitview.
125
+ // insert a vertical splitview at the root level and add the existing view as a child
126
+ this.gridview.insertOrthogonalSplitviewAtRoot();
127
+ }
128
+ break;
129
+ case 'left':
130
+ case 'right':
131
+ if (this.gridview.orientation === Orientation.VERTICAL) {
132
+ // we need to add to a horizontal splitview but the current root is a vertical splitview.
133
+ // insert a horiziontal splitview at the root level and add the existing view as a child
134
+ this.gridview.insertOrthogonalSplitviewAtRoot();
135
+ }
136
+ break;
137
+ default:
138
+ break;
139
+ }
140
+ switch (position) {
141
+ case 'top':
142
+ case 'left':
143
+ return this.createGroupAtLocation([0]); // insert into first position
144
+ case 'bottom':
145
+ case 'right':
146
+ return this.createGroupAtLocation([this.gridview.length]); // insert into last position
147
+ default:
148
+ throw new Error(`unsupported position ${position}`);
149
+ }
150
+ }
151
+ updateOptions(options) {
152
+ const hasOrientationChanged = typeof options.orientation === 'string' &&
153
+ this.gridview.orientation !== options.orientation;
154
+ this._options = Object.assign(Object.assign({}, this.options), options);
155
+ if (hasOrientationChanged) {
156
+ this.gridview.orientation = options.orientation;
157
+ }
158
+ this.layout(this.gridview.width, this.gridview.height, true);
159
+ }
160
+ focus() {
161
+ var _a;
162
+ (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
163
+ }
164
+ getGroupPanel(id) {
165
+ return this.panels.find((panel) => panel.id === id);
166
+ }
167
+ setActivePanel(panel) {
168
+ this.doSetGroupActive(panel.group);
169
+ panel.group.model.openPanel(panel);
170
+ }
171
+ moveToNext(options = {}) {
172
+ var _a;
173
+ if (!options.group) {
174
+ if (!this.activeGroup) {
175
+ return;
176
+ }
177
+ options.group = this.activeGroup;
178
+ }
179
+ if (options.includePanel && options.group) {
180
+ if (options.group.activePanel !==
181
+ options.group.panels[options.group.panels.length - 1]) {
182
+ options.group.model.moveToNext({ suppressRoll: true });
183
+ return;
184
+ }
185
+ }
186
+ const location = getGridLocation(options.group.element);
187
+ const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
188
+ this.doSetGroupActive(next);
189
+ }
190
+ moveToPrevious(options = {}) {
191
+ var _a;
192
+ if (!options.group) {
193
+ if (!this.activeGroup) {
194
+ return;
195
+ }
196
+ options.group = this.activeGroup;
197
+ }
198
+ if (options.includePanel && options.group) {
199
+ if (options.group.activePanel !== options.group.panels[0]) {
200
+ options.group.model.moveToPrevious({ suppressRoll: true });
201
+ return;
202
+ }
203
+ }
204
+ const location = getGridLocation(options.group.element);
205
+ const next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
206
+ if (next) {
207
+ this.doSetGroupActive(next);
208
+ }
209
+ }
210
+ /**
211
+ * Serialize the current state of the layout
212
+ *
213
+ * @returns A JSON respresentation of the layout
214
+ */
215
+ toJSON() {
216
+ var _a;
217
+ const data = this.gridview.serialize();
218
+ const panels = this.panels.reduce((collection, panel) => {
219
+ collection[panel.id] = panel.toJSON();
220
+ return collection;
221
+ }, {});
222
+ return {
223
+ grid: data,
224
+ panels,
225
+ activeGroup: (_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id,
226
+ };
227
+ }
228
+ fromJSON(data) {
229
+ this.clear();
230
+ const { grid, panels, activeGroup } = data;
231
+ if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
232
+ throw new Error('root must be of type branch');
233
+ }
234
+ this.gridview.deserialize(grid, {
235
+ fromJSON: (node) => {
236
+ const { id, locked, hideHeader, views, activeView } = node.data;
237
+ const group = this.createGroup({
238
+ id,
239
+ locked: !!locked,
240
+ hideHeader: !!hideHeader,
241
+ });
242
+ this._onDidAddGroup.fire(group);
243
+ for (const child of views) {
244
+ const panel = this._deserializer.fromJSON(panels[child], group);
245
+ const isActive = typeof activeView === 'string' &&
246
+ activeView === panel.id;
247
+ group.model.openPanel(panel, {
248
+ skipSetPanelActive: !isActive,
249
+ skipSetGroupActive: true,
250
+ });
251
+ }
252
+ if (!group.activePanel && group.panels.length > 0) {
253
+ group.model.openPanel(group.panels[group.panels.length - 1], {
254
+ skipSetGroupActive: true,
255
+ });
256
+ }
257
+ return group;
258
+ },
259
+ });
260
+ if (typeof activeGroup === 'string') {
261
+ const panel = this.getPanel(activeGroup);
262
+ if (panel) {
263
+ this.doSetGroupActive(panel);
264
+ }
265
+ }
266
+ this.gridview.layout(this.width, this.height);
267
+ this._onDidLayoutFromJSON.fire();
268
+ }
269
+ clear() {
270
+ const groups = Array.from(this._groups.values()).map((_) => _.value);
271
+ const hasActiveGroup = !!this.activeGroup;
272
+ const hasActivePanel = !!this.activePanel;
273
+ for (const group of groups) {
274
+ // remove the group will automatically remove the panels
275
+ this.removeGroup(group, true);
276
+ }
277
+ if (hasActiveGroup) {
278
+ this.doSetGroupActive(undefined);
279
+ }
280
+ if (hasActivePanel) {
281
+ this._onDidActivePanelChange.fire(undefined);
282
+ }
283
+ this.gridview.clear();
284
+ }
285
+ closeAllGroups() {
286
+ for (const entry of this._groups.entries()) {
287
+ const [_, group] = entry;
288
+ group.value.model.closeAllPanels();
289
+ }
290
+ }
291
+ addPanel(options) {
292
+ var _a, _b;
293
+ if (this.panels.find((_) => _.id === options.id)) {
294
+ throw new Error(`panel with id ${options.id} already exists`);
295
+ }
296
+ let referenceGroup;
297
+ if (options.position) {
298
+ if (isPanelOptionsWithPanel(options.position)) {
299
+ const referencePanel = typeof options.position.referencePanel === 'string'
300
+ ? this.getGroupPanel(options.position.referencePanel)
301
+ : options.position.referencePanel;
302
+ if (!referencePanel) {
303
+ throw new Error(`referencePanel ${options.position.referencePanel} does not exist`);
304
+ }
305
+ referenceGroup = this.findGroup(referencePanel);
306
+ }
307
+ else if (isPanelOptionsWithGroup(options.position)) {
308
+ referenceGroup =
309
+ typeof options.position.referenceGroup === 'string'
310
+ ? (_a = this._groups.get(options.position.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
311
+ : options.position.referenceGroup;
312
+ if (!referenceGroup) {
313
+ throw new Error(`referencePanel ${options.position.referenceGroup} does not exist`);
314
+ }
315
+ }
316
+ else {
317
+ const group = this.orthogonalize(directionToPosition(options.position.direction));
318
+ const panel = this.createPanel(options, group);
319
+ group.model.openPanel(panel);
320
+ return panel;
321
+ }
322
+ }
323
+ else {
324
+ referenceGroup = this.activeGroup;
325
+ }
326
+ let panel;
327
+ if (referenceGroup) {
328
+ const target = toTarget(((_b = options.position) === null || _b === void 0 ? void 0 : _b.direction) || 'within');
329
+ if (target === 'center') {
330
+ panel = this.createPanel(options, referenceGroup);
331
+ referenceGroup.model.openPanel(panel);
332
+ }
333
+ else {
334
+ const location = getGridLocation(referenceGroup.element);
335
+ const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
336
+ const group = this.createGroupAtLocation(relativeLocation);
337
+ panel = this.createPanel(options, group);
338
+ group.model.openPanel(panel);
339
+ }
340
+ }
341
+ else {
342
+ const group = this.createGroupAtLocation();
343
+ panel = this.createPanel(options, group);
344
+ group.model.openPanel(panel);
345
+ }
346
+ return panel;
347
+ }
348
+ removePanel(panel, options = {
349
+ removeEmptyGroup: true,
350
+ skipDispose: false,
351
+ }) {
352
+ const group = panel.group;
353
+ if (!group) {
354
+ throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
355
+ }
356
+ group.model.removePanel(panel);
357
+ panel.dispose();
358
+ if (group.size === 0 && options.removeEmptyGroup) {
359
+ this.removeGroup(group);
360
+ }
361
+ }
362
+ createWatermarkComponent() {
363
+ var _a;
364
+ return createComponent('watermark-id', 'watermark-name', this.options.watermarkComponent
365
+ ? { 'watermark-name': this.options.watermarkComponent }
366
+ : {}, this.options.watermarkFrameworkComponent
367
+ ? { 'watermark-name': this.options.watermarkFrameworkComponent }
368
+ : {}, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.watermark);
369
+ }
370
+ updateWatermark() {
371
+ var _a, _b;
372
+ if (this.groups.length === 0) {
373
+ if (!this.watermark) {
374
+ this.watermark = this.createWatermarkComponent();
375
+ this.watermark.init({
376
+ containerApi: new DockviewApi(this),
377
+ });
378
+ const watermarkContainer = document.createElement('div');
379
+ watermarkContainer.className = 'dv-watermark-container';
380
+ watermarkContainer.appendChild(this.watermark.element);
381
+ this.element.appendChild(watermarkContainer);
382
+ }
383
+ }
384
+ else if (this.watermark) {
385
+ this.watermark.element.parentElement.remove();
386
+ (_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
387
+ this.watermark = null;
388
+ }
389
+ }
390
+ addGroup(options) {
391
+ var _a;
392
+ const group = this.createGroup();
393
+ if (options) {
394
+ let referenceGroup;
395
+ if (isGroupOptionsWithPanel(options)) {
396
+ const referencePanel = typeof options.referencePanel === 'string'
397
+ ? this.panels.find((panel) => panel.id === options.referencePanel)
398
+ : options.referencePanel;
399
+ if (!referencePanel) {
400
+ throw new Error(`reference panel ${options.referencePanel} does not exist`);
401
+ }
402
+ referenceGroup = this.findGroup(referencePanel);
403
+ if (!referenceGroup) {
404
+ throw new Error(`reference group for reference panel ${options.referencePanel} does not exist`);
405
+ }
406
+ }
407
+ else if (isGroupOptionsWithGroup(options)) {
408
+ referenceGroup =
409
+ typeof options.referenceGroup === 'string'
410
+ ? (_a = this._groups.get(options.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
411
+ : options.referenceGroup;
412
+ if (!referenceGroup) {
413
+ throw new Error(`reference group ${options.referenceGroup} does not exist`);
414
+ }
415
+ }
416
+ else {
417
+ const group = this.orthogonalize(directionToPosition(options.direction));
418
+ return group;
419
+ }
420
+ const target = toTarget(options.direction || 'within');
421
+ const location = getGridLocation(referenceGroup.element);
422
+ const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
423
+ this.doAddGroup(group, relativeLocation);
424
+ return group;
425
+ }
426
+ else {
427
+ this.doAddGroup(group);
428
+ return group;
429
+ }
430
+ }
431
+ removeGroup(group, skipActive = false) {
432
+ const panels = [...group.panels]; // reassign since group panels will mutate
433
+ for (const panel of panels) {
434
+ this.removePanel(panel, {
435
+ removeEmptyGroup: false,
436
+ skipDispose: false,
437
+ });
438
+ }
439
+ super.doRemoveGroup(group, { skipActive });
440
+ }
441
+ moveGroupOrPanel(referenceGroup, groupId, itemId, target, index) {
442
+ var _a;
443
+ const sourceGroup = groupId
444
+ ? (_a = this._groups.get(groupId)) === null || _a === void 0 ? void 0 : _a.value
445
+ : undefined;
446
+ if (itemId === undefined) {
447
+ if (sourceGroup) {
448
+ this.moveGroup(sourceGroup, referenceGroup, target);
449
+ }
450
+ return;
451
+ }
452
+ if (!target || target === 'center') {
453
+ const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
454
+ this.panels.find((panel) => panel.id === itemId);
455
+ if (!groupItem) {
456
+ throw new Error(`No panel with id ${itemId}`);
457
+ }
458
+ if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
459
+ this.doRemoveGroup(sourceGroup);
460
+ }
461
+ referenceGroup.model.openPanel(groupItem, { index });
462
+ }
463
+ else {
464
+ const referenceLocation = getGridLocation(referenceGroup.element);
465
+ const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
466
+ if (sourceGroup && sourceGroup.size < 2) {
467
+ const [targetParentLocation, to] = tail(targetLocation);
468
+ const sourceLocation = getGridLocation(sourceGroup.element);
469
+ const [sourceParentLocation, from] = tail(sourceLocation);
470
+ if (sequenceEquals(sourceParentLocation, targetParentLocation)) {
471
+ // special case when 'swapping' two views within same grid location
472
+ // if a group has one tab - we are essentially moving the 'group'
473
+ // which is equivalent to swapping two views in this case
474
+ this.gridview.moveView(sourceParentLocation, from, to);
475
+ }
476
+ else {
477
+ // source group will become empty so delete the group
478
+ const targetGroup = this.doRemoveGroup(sourceGroup, {
479
+ skipActive: true,
480
+ skipDispose: true,
481
+ });
482
+ // after deleting the group we need to re-evaulate the ref location
483
+ const updatedReferenceLocation = getGridLocation(referenceGroup.element);
484
+ const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, target);
485
+ this.doAddGroup(targetGroup, location);
486
+ }
487
+ }
488
+ else {
489
+ const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
490
+ this.panels.find((panel) => panel.id === itemId);
491
+ if (!groupItem) {
492
+ throw new Error(`No panel with id ${itemId}`);
493
+ }
494
+ const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
495
+ const group = this.createGroupAtLocation(dropLocation);
496
+ group.model.openPanel(groupItem);
497
+ }
498
+ }
499
+ }
500
+ moveGroup(sourceGroup, referenceGroup, target) {
501
+ if (sourceGroup) {
502
+ if (!target || target === 'center') {
503
+ const activePanel = sourceGroup.activePanel;
504
+ const panels = [...sourceGroup.panels].map((p) => sourceGroup.model.removePanel(p.id));
505
+ if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
506
+ this.doRemoveGroup(sourceGroup);
507
+ }
508
+ for (const panel of panels) {
509
+ referenceGroup.model.openPanel(panel, {
510
+ skipSetPanelActive: panel !== activePanel,
511
+ });
512
+ }
513
+ }
514
+ else {
515
+ this.gridview.removeView(getGridLocation(sourceGroup.element));
516
+ const referenceLocation = getGridLocation(referenceGroup.element);
517
+ const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
518
+ this.gridview.addView(sourceGroup, Sizing.Distribute, dropLocation);
519
+ }
520
+ }
521
+ }
522
+ doSetGroupActive(group, skipFocus) {
523
+ var _a, _b;
524
+ const isGroupAlreadyFocused = this._activeGroup === group;
525
+ super.doSetGroupActive(group, skipFocus);
526
+ if (!isGroupAlreadyFocused && ((_a = this._activeGroup) === null || _a === void 0 ? void 0 : _a.activePanel)) {
527
+ this._onDidActivePanelChange.fire((_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.activePanel);
528
+ }
529
+ }
530
+ createGroup(options) {
531
+ if (!options) {
532
+ options = {};
533
+ }
534
+ let id = options === null || options === void 0 ? void 0 : options.id;
535
+ if (id && this._groups.has(options.id)) {
536
+ console.warn(`Duplicate group id ${options === null || options === void 0 ? void 0 : options.id}. reassigning group id to avoid errors`);
537
+ id = undefined;
538
+ }
539
+ if (!id) {
540
+ id = this.nextGroupId.next();
541
+ while (this._groups.has(id)) {
542
+ id = this.nextGroupId.next();
543
+ }
544
+ }
545
+ const view = new DockviewGroupPanel(this, id, options);
546
+ view.init({ params: {}, accessor: null }); // required to initialized .part and allow for correct disposal of group
547
+ if (!this._groups.has(view.id)) {
548
+ const disposable = new CompositeDisposable(view.model.onMove((event) => {
549
+ const { groupId, itemId, target, index } = event;
550
+ this.moveGroupOrPanel(view, groupId, itemId, target, index);
551
+ }), view.model.onDidDrop((event) => {
552
+ this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: view }));
553
+ }), view.model.onDidAddPanel((event) => {
554
+ this._onDidAddPanel.fire(event.panel);
555
+ }), view.model.onDidRemovePanel((event) => {
556
+ this._onDidRemovePanel.fire(event.panel);
557
+ }), view.model.onDidActivePanelChange((event) => {
558
+ this._onDidActivePanelChange.fire(event.panel);
559
+ }));
560
+ this._groups.set(view.id, { value: view, disposable });
561
+ }
562
+ // TODO: must be called after the above listeners have been setup,
563
+ // not an ideal pattern
564
+ view.initialize();
565
+ return view;
566
+ }
567
+ createPanel(options, group) {
568
+ const contentComponent = options.component;
569
+ const tabComponent = options.tabComponent || this.options.defaultTabComponent;
570
+ const view = new DockviewPanelModel(this, options.id, contentComponent, tabComponent);
571
+ const panel = new DockviewPanel(options.id, this, this._api, group, view);
572
+ panel.init({
573
+ title: options.title || options.id,
574
+ params: (options === null || options === void 0 ? void 0 : options.params) || {},
575
+ });
576
+ return panel;
577
+ }
578
+ createGroupAtLocation(location = [0]) {
579
+ const group = this.createGroup();
580
+ this.doAddGroup(group, location);
581
+ return group;
582
+ }
583
+ findGroup(panel) {
584
+ var _a;
585
+ return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
586
+ }
587
+ dispose() {
588
+ super.dispose();
589
+ this._onDidActivePanelChange.dispose();
590
+ this._onDidAddPanel.dispose();
591
+ this._onDidRemovePanel.dispose();
592
+ this._onDidLayoutFromJSON.dispose();
593
+ }
594
+ }
595
+ //# sourceMappingURL=dockviewComponent.js.map