dockview-core 1.7.0 → 1.7.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 (430) 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 +33 -45
  66. package/dist/cjs/dockview/deserializer.js.map +1 -1
  67. package/dist/cjs/dockview/dockviewComponent.d.ts +121 -126
  68. package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -0
  69. package/dist/cjs/dockview/dockviewComponent.js +749 -771
  70. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  71. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +32 -31
  72. package/dist/cjs/dockview/dockviewGroupPanel.d.ts.map +1 -0
  73. package/dist/cjs/dockview/dockviewGroupPanel.js +96 -96
  74. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +175 -176
  75. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts.map +1 -0
  76. package/dist/cjs/dockview/dockviewGroupPanelModel.js +578 -578
  77. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
  78. package/dist/cjs/dockview/dockviewPanel.d.ts +41 -40
  79. package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -0
  80. package/dist/cjs/dockview/dockviewPanel.js +146 -149
  81. package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
  82. package/dist/cjs/dockview/dockviewPanelModel.d.ts +35 -34
  83. package/dist/cjs/dockview/dockviewPanelModel.d.ts.map +1 -0
  84. package/dist/cjs/dockview/dockviewPanelModel.js +98 -92
  85. package/dist/cjs/dockview/dockviewPanelModel.js.map +1 -1
  86. package/dist/cjs/dockview/options.d.ts +117 -116
  87. package/dist/cjs/dockview/options.d.ts.map +1 -0
  88. package/dist/cjs/dockview/options.js +31 -31
  89. package/dist/cjs/dockview/types.d.ts +68 -67
  90. package/dist/cjs/dockview/types.d.ts.map +1 -0
  91. package/dist/cjs/dockview/types.js +10 -10
  92. package/dist/cjs/dom.d.ts +15 -14
  93. package/dist/cjs/dom.d.ts.map +1 -0
  94. package/dist/cjs/dom.js +189 -182
  95. package/dist/cjs/dom.js.map +1 -1
  96. package/dist/cjs/events.d.ts +31 -30
  97. package/dist/cjs/events.d.ts.map +1 -0
  98. package/dist/cjs/events.js +129 -129
  99. package/dist/cjs/gridview/baseComponentGridview.d.ts +88 -87
  100. package/dist/cjs/gridview/baseComponentGridview.d.ts.map +1 -0
  101. package/dist/cjs/gridview/baseComponentGridview.js +271 -279
  102. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  103. package/dist/cjs/gridview/basePanelView.d.ts +41 -40
  104. package/dist/cjs/gridview/basePanelView.d.ts.map +1 -0
  105. package/dist/cjs/gridview/basePanelView.js +123 -123
  106. package/dist/cjs/gridview/branchNode.d.ts +50 -49
  107. package/dist/cjs/gridview/branchNode.d.ts.map +1 -0
  108. package/dist/cjs/gridview/branchNode.js +342 -342
  109. package/dist/cjs/gridview/gridview.d.ts +134 -133
  110. package/dist/cjs/gridview/gridview.d.ts.map +1 -0
  111. package/dist/cjs/gridview/gridview.js +517 -510
  112. package/dist/cjs/gridview/gridview.js.map +1 -1
  113. package/dist/cjs/gridview/gridviewComponent.d.ts +81 -80
  114. package/dist/cjs/gridview/gridviewComponent.d.ts.map +1 -0
  115. package/dist/cjs/gridview/gridviewComponent.js +325 -324
  116. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  117. package/dist/cjs/gridview/gridviewPanel.d.ts +66 -65
  118. package/dist/cjs/gridview/gridviewPanel.d.ts.map +1 -0
  119. package/dist/cjs/gridview/gridviewPanel.js +214 -214
  120. package/dist/cjs/gridview/leafNode.d.ts +35 -34
  121. package/dist/cjs/gridview/leafNode.d.ts.map +1 -0
  122. package/dist/cjs/gridview/leafNode.js +170 -170
  123. package/dist/cjs/gridview/options.d.ts +19 -18
  124. package/dist/cjs/gridview/options.d.ts.map +1 -0
  125. package/dist/cjs/gridview/options.js +2 -2
  126. package/dist/cjs/gridview/types.d.ts +4 -3
  127. package/dist/cjs/gridview/types.d.ts.map +1 -0
  128. package/dist/cjs/gridview/types.js +2 -2
  129. package/dist/cjs/index.d.ts +42 -41
  130. package/dist/cjs/index.d.ts.map +1 -0
  131. package/dist/cjs/index.js +63 -63
  132. package/dist/cjs/lifecycle.d.ts +25 -22
  133. package/dist/cjs/lifecycle.d.ts.map +1 -0
  134. package/dist/cjs/lifecycle.js +97 -88
  135. package/dist/cjs/lifecycle.js.map +1 -1
  136. package/dist/cjs/math.d.ts +6 -5
  137. package/dist/cjs/math.d.ts.map +1 -0
  138. package/dist/cjs/math.js +34 -34
  139. package/dist/cjs/panel/componentFactory.d.ts +11 -10
  140. package/dist/cjs/panel/componentFactory.d.ts.map +1 -0
  141. package/dist/cjs/panel/componentFactory.js +30 -30
  142. package/dist/cjs/panel/types.d.ts +34 -33
  143. package/dist/cjs/panel/types.d.ts.map +1 -0
  144. package/dist/cjs/panel/types.js +2 -2
  145. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +22 -21
  146. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts.map +1 -0
  147. package/dist/cjs/paneview/defaultPaneviewHeader.js +90 -90
  148. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +22 -21
  149. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts.map +1 -0
  150. package/dist/cjs/paneview/draggablePaneviewPanel.js +131 -131
  151. package/dist/cjs/paneview/options.d.ts +29 -27
  152. package/dist/cjs/paneview/options.d.ts.map +1 -0
  153. package/dist/cjs/paneview/options.js +2 -2
  154. package/dist/cjs/paneview/paneview.d.ts +41 -40
  155. package/dist/cjs/paneview/paneview.d.ts.map +1 -0
  156. package/dist/cjs/paneview/paneview.js +201 -201
  157. package/dist/cjs/paneview/paneviewComponent.d.ts +130 -129
  158. package/dist/cjs/paneview/paneviewComponent.d.ts.map +1 -0
  159. package/dist/cjs/paneview/paneviewComponent.js +394 -394
  160. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  161. package/dist/cjs/paneview/paneviewPanel.d.ts +93 -92
  162. package/dist/cjs/paneview/paneviewPanel.d.ts.map +1 -0
  163. package/dist/cjs/paneview/paneviewPanel.js +275 -275
  164. package/dist/cjs/resizable.d.ts +8 -0
  165. package/dist/cjs/resizable.d.ts.map +1 -0
  166. package/dist/cjs/resizable.js +57 -0
  167. package/dist/cjs/resizable.js.map +1 -0
  168. package/dist/cjs/splitview/options.d.ts +28 -26
  169. package/dist/cjs/splitview/options.d.ts.map +1 -0
  170. package/dist/cjs/splitview/options.js +2 -2
  171. package/dist/cjs/splitview/splitview.d.ts +128 -127
  172. package/dist/cjs/splitview/splitview.d.ts.map +1 -0
  173. package/dist/cjs/splitview/splitview.js +908 -908
  174. package/dist/cjs/splitview/splitviewComponent.d.ts +102 -101
  175. package/dist/cjs/splitview/splitviewComponent.d.ts.map +1 -0
  176. package/dist/cjs/splitview/splitviewComponent.js +373 -373
  177. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  178. package/dist/cjs/splitview/splitviewPanel.d.ts +46 -45
  179. package/dist/cjs/splitview/splitviewPanel.d.ts.map +1 -0
  180. package/dist/cjs/splitview/splitviewPanel.js +179 -179
  181. package/dist/cjs/splitview/viewItem.d.ts +26 -25
  182. package/dist/cjs/splitview/viewItem.d.ts.map +1 -0
  183. package/dist/cjs/splitview/viewItem.js +119 -119
  184. package/dist/cjs/svg.d.ts +4 -3
  185. package/dist/cjs/svg.d.ts.map +1 -0
  186. package/dist/cjs/svg.js +43 -43
  187. package/dist/cjs/types.d.ts +3 -2
  188. package/dist/cjs/types.d.ts.map +1 -0
  189. package/dist/cjs/types.js +2 -2
  190. package/dist/dockview-core.amd.js +6340 -6339
  191. package/dist/dockview-core.amd.min.js +2 -2
  192. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  193. package/dist/dockview-core.amd.noStyle.js +6307 -6306
  194. package/dist/dockview-core.cjs.js +6336 -6335
  195. package/dist/dockview-core.esm.js +6336 -6335
  196. package/dist/dockview-core.esm.min.js +2 -2
  197. package/dist/dockview-core.js +6340 -6339
  198. package/dist/dockview-core.min.js +2 -2
  199. package/dist/dockview-core.min.noStyle.js +2 -2
  200. package/dist/dockview-core.noStyle.js +6307 -6306
  201. package/dist/esm/api/component.api.d.ts +144 -145
  202. package/dist/esm/api/component.api.d.ts.map +1 -0
  203. package/dist/esm/api/component.api.js +324 -329
  204. package/dist/esm/api/component.api.js.map +1 -0
  205. package/dist/esm/api/dockviewPanelApi.d.ts +35 -34
  206. package/dist/esm/api/dockviewPanelApi.d.ts.map +1 -0
  207. package/dist/esm/api/dockviewPanelApi.js +49 -48
  208. package/dist/esm/api/dockviewPanelApi.js.map +1 -0
  209. package/dist/esm/api/gridviewPanelApi.d.ts +38 -37
  210. package/dist/esm/api/gridviewPanelApi.d.ts.map +1 -0
  211. package/dist/esm/api/gridviewPanelApi.js +26 -25
  212. package/dist/esm/api/gridviewPanelApi.js.map +1 -0
  213. package/dist/esm/api/panelApi.d.ts +89 -88
  214. package/dist/esm/api/panelApi.d.ts.map +1 -0
  215. package/dist/esm/api/panelApi.js +96 -95
  216. package/dist/esm/api/panelApi.js.map +1 -0
  217. package/dist/esm/api/paneviewPanelApi.d.ts +27 -26
  218. package/dist/esm/api/paneviewPanelApi.d.ts.map +1 -0
  219. package/dist/esm/api/paneviewPanelApi.js +28 -27
  220. package/dist/esm/api/paneviewPanelApi.js.map +1 -0
  221. package/dist/esm/api/splitviewPanelApi.d.ts +33 -32
  222. package/dist/esm/api/splitviewPanelApi.d.ts.map +1 -0
  223. package/dist/esm/api/splitviewPanelApi.js +26 -25
  224. package/dist/esm/api/splitviewPanelApi.js.map +1 -0
  225. package/dist/esm/array.d.ts +13 -12
  226. package/dist/esm/array.d.ts.map +1 -0
  227. package/dist/esm/array.js +50 -49
  228. package/dist/esm/array.js.map +1 -0
  229. package/dist/esm/dnd/abstractDragHandler.d.ts +12 -11
  230. package/dist/esm/dnd/abstractDragHandler.d.ts.map +1 -0
  231. package/dist/esm/dnd/abstractDragHandler.js +48 -47
  232. package/dist/esm/dnd/abstractDragHandler.js.map +1 -0
  233. package/dist/esm/dnd/dataTransfer.d.ts +32 -31
  234. package/dist/esm/dnd/dataTransfer.d.ts.map +1 -0
  235. package/dist/esm/dnd/dataTransfer.js +70 -69
  236. package/dist/esm/dnd/dataTransfer.js.map +1 -0
  237. package/dist/esm/dnd/dnd.d.ts +28 -27
  238. package/dist/esm/dnd/dnd.d.ts.map +1 -0
  239. package/dist/esm/dnd/dnd.js +37 -36
  240. package/dist/esm/dnd/dnd.js.map +1 -0
  241. package/dist/esm/dnd/droptarget.d.ts +43 -42
  242. package/dist/esm/dnd/droptarget.d.ts.map +1 -0
  243. package/dist/esm/dnd/droptarget.js +251 -250
  244. package/dist/esm/dnd/droptarget.js.map +1 -0
  245. package/dist/esm/dnd/ghost.d.ts +2 -1
  246. package/dist/esm/dnd/ghost.d.ts.map +1 -0
  247. package/dist/esm/dnd/ghost.js +12 -11
  248. package/dist/esm/dnd/ghost.js.map +1 -0
  249. package/dist/esm/dnd/groupDragHandler.d.ts +12 -11
  250. package/dist/esm/dnd/groupDragHandler.d.ts.map +1 -0
  251. package/dist/esm/dnd/groupDragHandler.js +39 -38
  252. package/dist/esm/dnd/groupDragHandler.js.map +1 -0
  253. package/dist/esm/dockview/components/panel/content.d.ts +31 -30
  254. package/dist/esm/dockview/components/panel/content.d.ts.map +1 -0
  255. package/dist/esm/dockview/components/panel/content.js +74 -73
  256. package/dist/esm/dockview/components/panel/content.js.map +1 -0
  257. package/dist/esm/dockview/components/tab/defaultTab.d.ts +22 -21
  258. package/dist/esm/dockview/components/tab/defaultTab.d.ts.map +1 -0
  259. package/dist/esm/dockview/components/tab/defaultTab.js +68 -67
  260. package/dist/esm/dockview/components/tab/defaultTab.js.map +1 -0
  261. package/dist/esm/dockview/components/tab/tab.d.ts +32 -31
  262. package/dist/esm/dockview/components/tab/tab.d.ts.map +1 -0
  263. package/dist/esm/dockview/components/tab/tab.js +95 -94
  264. package/dist/esm/dockview/components/tab/tab.js.map +1 -0
  265. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +60 -63
  266. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts.map +1 -0
  267. package/dist/esm/dockview/components/titlebar/tabsContainer.js +167 -179
  268. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -0
  269. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +16 -15
  270. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts.map +1 -0
  271. package/dist/esm/dockview/components/titlebar/voidContainer.js +48 -47
  272. package/dist/esm/dockview/components/titlebar/voidContainer.js.map +1 -0
  273. package/dist/esm/dockview/components/watermark/watermark.d.ts +19 -18
  274. package/dist/esm/dockview/components/watermark/watermark.d.ts.map +1 -0
  275. package/dist/esm/dockview/components/watermark/watermark.js +62 -60
  276. package/dist/esm/dockview/components/watermark/watermark.js.map +1 -0
  277. package/dist/esm/dockview/deserializer.d.ts +13 -12
  278. package/dist/esm/dockview/deserializer.d.ts.map +1 -0
  279. package/dist/esm/dockview/deserializer.js +29 -40
  280. package/dist/esm/dockview/deserializer.js.map +1 -0
  281. package/dist/esm/dockview/dockviewComponent.d.ts +121 -126
  282. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -0
  283. package/dist/esm/dockview/dockviewComponent.js +595 -612
  284. package/dist/esm/dockview/dockviewComponent.js.map +1 -0
  285. package/dist/esm/dockview/dockviewGroupPanel.d.ts +32 -31
  286. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -0
  287. package/dist/esm/dockview/dockviewGroupPanel.js +51 -50
  288. package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -0
  289. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +175 -176
  290. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -0
  291. package/dist/esm/dockview/dockviewGroupPanelModel.js +450 -449
  292. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -0
  293. package/dist/esm/dockview/dockviewPanel.d.ts +41 -40
  294. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -0
  295. package/dist/esm/dockview/dockviewPanel.js +102 -104
  296. package/dist/esm/dockview/dockviewPanel.js.map +1 -0
  297. package/dist/esm/dockview/dockviewPanelModel.d.ts +35 -34
  298. package/dist/esm/dockview/dockviewPanelModel.d.ts.map +1 -0
  299. package/dist/esm/dockview/dockviewPanelModel.js +75 -68
  300. package/dist/esm/dockview/dockviewPanelModel.js.map +1 -0
  301. package/dist/esm/dockview/options.d.ts +117 -116
  302. package/dist/esm/dockview/options.d.ts.map +1 -0
  303. package/dist/esm/dockview/options.js +25 -24
  304. package/dist/esm/dockview/options.js.map +1 -0
  305. package/dist/esm/dockview/types.d.ts +68 -67
  306. package/dist/esm/dockview/types.d.ts.map +1 -0
  307. package/dist/esm/dockview/types.js +8 -7
  308. package/dist/esm/dockview/types.js.map +1 -0
  309. package/dist/esm/dom.d.ts +15 -14
  310. package/dist/esm/dom.d.ts.map +1 -0
  311. package/dist/esm/dom.js +121 -113
  312. package/dist/esm/dom.js.map +1 -0
  313. package/dist/esm/events.d.ts +31 -30
  314. package/dist/esm/events.d.ts.map +1 -0
  315. package/dist/esm/events.js +89 -88
  316. package/dist/esm/events.js.map +1 -0
  317. package/dist/esm/gridview/baseComponentGridview.d.ts +88 -87
  318. package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -0
  319. package/dist/esm/gridview/baseComponentGridview.js +186 -189
  320. package/dist/esm/gridview/baseComponentGridview.js.map +1 -0
  321. package/dist/esm/gridview/basePanelView.d.ts +41 -40
  322. package/dist/esm/gridview/basePanelView.d.ts.map +1 -0
  323. package/dist/esm/gridview/basePanelView.js +75 -74
  324. package/dist/esm/gridview/basePanelView.js.map +1 -0
  325. package/dist/esm/gridview/branchNode.d.ts +50 -49
  326. package/dist/esm/gridview/branchNode.d.ts.map +1 -0
  327. package/dist/esm/gridview/branchNode.js +219 -218
  328. package/dist/esm/gridview/branchNode.js.map +1 -0
  329. package/dist/esm/gridview/gridview.d.ts +134 -133
  330. package/dist/esm/gridview/gridview.d.ts.map +1 -0
  331. package/dist/esm/gridview/gridview.js +431 -423
  332. package/dist/esm/gridview/gridview.js.map +1 -0
  333. package/dist/esm/gridview/gridviewComponent.d.ts +81 -80
  334. package/dist/esm/gridview/gridviewComponent.d.ts.map +1 -0
  335. package/dist/esm/gridview/gridviewComponent.js +239 -237
  336. package/dist/esm/gridview/gridviewComponent.js.map +1 -0
  337. package/dist/esm/gridview/gridviewPanel.d.ts +66 -65
  338. package/dist/esm/gridview/gridviewPanel.d.ts.map +1 -0
  339. package/dist/esm/gridview/gridviewPanel.js +152 -151
  340. package/dist/esm/gridview/gridviewPanel.js.map +1 -0
  341. package/dist/esm/gridview/leafNode.d.ts +35 -34
  342. package/dist/esm/gridview/leafNode.d.ts.map +1 -0
  343. package/dist/esm/gridview/leafNode.js +104 -103
  344. package/dist/esm/gridview/leafNode.js.map +1 -0
  345. package/dist/esm/gridview/options.d.ts +19 -18
  346. package/dist/esm/gridview/options.d.ts.map +1 -0
  347. package/dist/esm/gridview/options.js +2 -1
  348. package/dist/esm/gridview/options.js.map +1 -0
  349. package/dist/esm/gridview/types.d.ts +4 -3
  350. package/dist/esm/gridview/types.d.ts.map +1 -0
  351. package/dist/esm/gridview/types.js +2 -1
  352. package/dist/esm/gridview/types.js.map +1 -0
  353. package/dist/esm/index.d.ts +42 -41
  354. package/dist/esm/index.d.ts.map +1 -0
  355. package/dist/esm/index.js +36 -35
  356. package/dist/esm/index.js.map +1 -0
  357. package/dist/esm/lifecycle.d.ts +25 -22
  358. package/dist/esm/lifecycle.d.ts.map +1 -0
  359. package/dist/esm/lifecycle.js +45 -39
  360. package/dist/esm/lifecycle.js.map +1 -0
  361. package/dist/esm/math.d.ts +6 -5
  362. package/dist/esm/math.d.ts.map +1 -0
  363. package/dist/esm/math.js +29 -28
  364. package/dist/esm/math.js.map +1 -0
  365. package/dist/esm/panel/componentFactory.d.ts +11 -10
  366. package/dist/esm/panel/componentFactory.d.ts.map +1 -0
  367. package/dist/esm/panel/componentFactory.js +25 -24
  368. package/dist/esm/panel/componentFactory.js.map +1 -0
  369. package/dist/esm/panel/types.d.ts +34 -33
  370. package/dist/esm/panel/types.d.ts.map +1 -0
  371. package/dist/esm/panel/types.js +2 -1
  372. package/dist/esm/panel/types.js.map +1 -0
  373. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +22 -21
  374. package/dist/esm/paneview/defaultPaneviewHeader.d.ts.map +1 -0
  375. package/dist/esm/paneview/defaultPaneviewHeader.js +64 -63
  376. package/dist/esm/paneview/defaultPaneviewHeader.js.map +1 -0
  377. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +22 -21
  378. package/dist/esm/paneview/draggablePaneviewPanel.d.ts.map +1 -0
  379. package/dist/esm/paneview/draggablePaneviewPanel.js +93 -92
  380. package/dist/esm/paneview/draggablePaneviewPanel.js.map +1 -0
  381. package/dist/esm/paneview/options.d.ts +29 -27
  382. package/dist/esm/paneview/options.d.ts.map +1 -0
  383. package/dist/esm/paneview/options.js +2 -1
  384. package/dist/esm/paneview/options.js.map +1 -0
  385. package/dist/esm/paneview/paneview.d.ts +41 -40
  386. package/dist/esm/paneview/paneview.d.ts.map +1 -0
  387. package/dist/esm/paneview/paneview.js +146 -145
  388. package/dist/esm/paneview/paneview.js.map +1 -0
  389. package/dist/esm/paneview/paneviewComponent.d.ts +130 -129
  390. package/dist/esm/paneview/paneviewComponent.d.ts.map +1 -0
  391. package/dist/esm/paneview/paneviewComponent.js +271 -270
  392. package/dist/esm/paneview/paneviewComponent.js.map +1 -0
  393. package/dist/esm/paneview/paneviewPanel.d.ts +93 -92
  394. package/dist/esm/paneview/paneviewPanel.d.ts.map +1 -0
  395. package/dist/esm/paneview/paneviewPanel.js +193 -192
  396. package/dist/esm/paneview/paneviewPanel.js.map +1 -0
  397. package/dist/esm/resizable.d.ts +8 -0
  398. package/dist/esm/resizable.d.ts.map +1 -0
  399. package/dist/esm/resizable.js +31 -0
  400. package/dist/esm/resizable.js.map +1 -0
  401. package/dist/esm/splitview/options.d.ts +28 -26
  402. package/dist/esm/splitview/options.d.ts.map +1 -0
  403. package/dist/esm/splitview/options.js +2 -1
  404. package/dist/esm/splitview/options.js.map +1 -0
  405. package/dist/esm/splitview/splitview.d.ts +128 -127
  406. package/dist/esm/splitview/splitview.d.ts.map +1 -0
  407. package/dist/esm/splitview/splitview.js +690 -689
  408. package/dist/esm/splitview/splitview.js.map +1 -0
  409. package/dist/esm/splitview/splitviewComponent.d.ts +102 -101
  410. package/dist/esm/splitview/splitviewComponent.d.ts.map +1 -0
  411. package/dist/esm/splitview/splitviewComponent.js +250 -249
  412. package/dist/esm/splitview/splitviewComponent.js.map +1 -0
  413. package/dist/esm/splitview/splitviewPanel.d.ts +46 -45
  414. package/dist/esm/splitview/splitviewPanel.d.ts.map +1 -0
  415. package/dist/esm/splitview/splitviewPanel.js +109 -108
  416. package/dist/esm/splitview/splitviewPanel.js.map +1 -0
  417. package/dist/esm/splitview/viewItem.d.ts +26 -25
  418. package/dist/esm/splitview/viewItem.d.ts.map +1 -0
  419. package/dist/esm/splitview/viewItem.js +75 -74
  420. package/dist/esm/splitview/viewItem.js.map +1 -0
  421. package/dist/esm/svg.d.ts +4 -3
  422. package/dist/esm/svg.d.ts.map +1 -0
  423. package/dist/esm/svg.js +32 -31
  424. package/dist/esm/svg.js.map +1 -0
  425. package/dist/esm/types.d.ts +3 -2
  426. package/dist/esm/types.d.ts.map +1 -0
  427. package/dist/esm/types.js +2 -1
  428. package/dist/esm/types.js.map +1 -0
  429. package/dist/styles/dockview.css +4 -0
  430. 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