dockview 1.5.1 → 1.6.0

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 (378) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +52 -52
  3. package/dist/cjs/actionbar/actionsContainer.d.ts +7 -7
  4. package/dist/cjs/actionbar/actionsContainer.js +26 -26
  5. package/dist/cjs/api/component.api.d.ts +145 -144
  6. package/dist/cjs/api/component.api.js +578 -571
  7. package/dist/cjs/api/component.api.js.map +1 -1
  8. package/dist/cjs/api/{groupPanelApi.d.ts → dockviewPanelApi.d.ts} +34 -34
  9. package/dist/cjs/api/{groupPanelApi.js → dockviewPanelApi.js} +84 -86
  10. package/dist/cjs/api/dockviewPanelApi.js.map +1 -0
  11. package/dist/cjs/api/gridviewPanelApi.d.ts +37 -36
  12. package/dist/cjs/api/gridviewPanelApi.js +47 -47
  13. package/dist/cjs/api/gridviewPanelApi.js.map +1 -1
  14. package/dist/cjs/api/panelApi.d.ts +88 -81
  15. package/dist/cjs/api/panelApi.js +137 -121
  16. package/dist/cjs/api/panelApi.js.map +1 -1
  17. package/dist/cjs/api/paneviewPanelApi.d.ts +26 -26
  18. package/dist/cjs/api/paneviewPanelApi.js +57 -57
  19. package/dist/cjs/api/splitviewPanelApi.d.ts +32 -32
  20. package/dist/cjs/api/splitviewPanelApi.js +47 -47
  21. package/dist/cjs/array.d.ts +13 -13
  22. package/dist/cjs/array.js +77 -77
  23. package/dist/cjs/dnd/abstractDragHandler.d.ts +11 -11
  24. package/dist/cjs/dnd/abstractDragHandler.js +115 -115
  25. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  26. package/dist/cjs/dnd/dataTransfer.d.ts +31 -31
  27. package/dist/cjs/dnd/dataTransfer.js +100 -100
  28. package/dist/cjs/dnd/dataTransfer.js.map +1 -1
  29. package/dist/cjs/dnd/dnd.d.ts +27 -27
  30. package/dist/cjs/dnd/dnd.js +59 -64
  31. package/dist/cjs/dnd/dnd.js.map +1 -1
  32. package/dist/cjs/dnd/droptarget.d.ts +42 -37
  33. package/dist/cjs/dnd/droptarget.js +279 -201
  34. package/dist/cjs/dnd/droptarget.js.map +1 -1
  35. package/dist/cjs/dnd/ghost.d.ts +1 -0
  36. package/dist/cjs/dnd/ghost.js +15 -0
  37. package/dist/cjs/dnd/ghost.js.map +1 -0
  38. package/dist/cjs/dnd/groupDragHandler.d.ts +11 -0
  39. package/dist/cjs/dnd/groupDragHandler.js +62 -0
  40. package/dist/cjs/dnd/groupDragHandler.js.map +1 -0
  41. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +27 -27
  42. package/dist/cjs/dockview/components/tab/defaultTab.js +121 -121
  43. package/dist/cjs/dockview/components/watermark/watermark.d.ts +20 -20
  44. package/dist/cjs/dockview/components/watermark/watermark.js +101 -101
  45. package/dist/cjs/dockview/defaultGroupPanelView.d.ts +29 -29
  46. package/dist/cjs/dockview/defaultGroupPanelView.js +68 -68
  47. package/dist/cjs/dockview/deserializer.d.ts +6 -5
  48. package/dist/cjs/dockview/deserializer.js +2 -2
  49. package/dist/cjs/dockview/dockviewComponent.d.ts +133 -125
  50. package/dist/cjs/dockview/dockviewComponent.js +795 -614
  51. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  52. package/dist/{esm/dockview/dockviewGroupPanel.d.ts → cjs/dockview/dockviewPanel.d.ts} +42 -31
  53. package/dist/cjs/dockview/{dockviewGroupPanel.js → dockviewPanel.js} +161 -157
  54. package/dist/cjs/dockview/dockviewPanel.js.map +1 -0
  55. package/dist/cjs/dockview/options.d.ts +110 -88
  56. package/dist/cjs/dockview/options.js +31 -2
  57. package/dist/cjs/dockview/options.js.map +1 -1
  58. package/dist/cjs/dockview/validation.d.ts +2 -0
  59. package/dist/cjs/dockview/validation.js +135 -0
  60. package/dist/cjs/dockview/validation.js.map +1 -0
  61. package/dist/cjs/dom.d.ts +14 -14
  62. package/dist/cjs/dom.js +182 -182
  63. package/dist/cjs/events.d.ts +30 -30
  64. package/dist/cjs/events.js +129 -129
  65. package/dist/cjs/gridview/baseComponentGridview.d.ts +87 -87
  66. package/dist/cjs/gridview/baseComponentGridview.js +278 -279
  67. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  68. package/dist/cjs/gridview/basePanelView.d.ts +43 -43
  69. package/dist/cjs/gridview/basePanelView.js +123 -123
  70. package/dist/cjs/gridview/branchNode.d.ts +49 -46
  71. package/dist/cjs/gridview/branchNode.js +342 -342
  72. package/dist/cjs/gridview/branchNode.js.map +1 -1
  73. package/dist/cjs/gridview/gridview.d.ts +132 -123
  74. package/dist/cjs/gridview/gridview.js +510 -479
  75. package/dist/cjs/gridview/gridview.js.map +1 -1
  76. package/dist/cjs/gridview/gridviewComponent.d.ts +85 -85
  77. package/dist/cjs/gridview/gridviewComponent.js +324 -325
  78. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  79. package/dist/cjs/gridview/gridviewPanel.d.ts +60 -60
  80. package/dist/cjs/gridview/gridviewPanel.js +201 -202
  81. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  82. package/dist/cjs/gridview/leafNode.d.ts +34 -31
  83. package/dist/cjs/gridview/leafNode.js +170 -165
  84. package/dist/cjs/gridview/leafNode.js.map +1 -1
  85. package/dist/cjs/gridview/options.d.ts +18 -18
  86. package/dist/cjs/gridview/options.js +2 -2
  87. package/dist/cjs/gridview/types.d.ts +3 -3
  88. package/dist/cjs/gridview/types.js +2 -2
  89. package/dist/cjs/groupview/dnd.d.ts +6 -5
  90. package/dist/cjs/groupview/dnd.js +10 -9
  91. package/dist/cjs/groupview/dnd.js.map +1 -1
  92. package/dist/cjs/groupview/groupview.d.ts +177 -177
  93. package/dist/cjs/groupview/groupview.js +607 -589
  94. package/dist/cjs/groupview/groupview.js.map +1 -1
  95. package/dist/cjs/groupview/groupviewPanel.d.ts +35 -35
  96. package/dist/cjs/groupview/groupviewPanel.js +128 -128
  97. package/dist/cjs/groupview/panel/content.d.ts +30 -30
  98. package/dist/cjs/groupview/panel/content.js +100 -100
  99. package/dist/cjs/groupview/tab.d.ts +31 -41
  100. package/dist/cjs/groupview/tab.js +124 -120
  101. package/dist/cjs/groupview/tab.js.map +1 -1
  102. package/dist/cjs/groupview/titlebar/tabsContainer.d.ts +65 -68
  103. package/dist/cjs/groupview/titlebar/tabsContainer.js +251 -258
  104. package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
  105. package/dist/cjs/groupview/titlebar/voidContainer.d.ts +15 -0
  106. package/dist/cjs/groupview/titlebar/voidContainer.js +74 -0
  107. package/dist/cjs/groupview/titlebar/voidContainer.js.map +1 -0
  108. package/dist/cjs/groupview/types.d.ts +68 -52
  109. package/dist/cjs/groupview/types.js +2 -2
  110. package/dist/cjs/hostedContainer.d.ts +23 -23
  111. package/dist/cjs/hostedContainer.js +73 -73
  112. package/dist/cjs/index.d.ts +30 -30
  113. package/dist/cjs/index.js +47 -46
  114. package/dist/cjs/index.js.map +1 -1
  115. package/dist/cjs/lifecycle.d.ts +22 -22
  116. package/dist/cjs/lifecycle.js +88 -88
  117. package/dist/cjs/math.d.ts +4 -4
  118. package/dist/cjs/math.js +15 -15
  119. package/dist/cjs/panel/componentFactory.d.ts +8 -8
  120. package/dist/cjs/panel/componentFactory.js +30 -30
  121. package/dist/cjs/panel/types.d.ts +33 -33
  122. package/dist/cjs/panel/types.js +2 -2
  123. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +21 -21
  124. package/dist/cjs/paneview/defaultPaneviewHeader.js +90 -90
  125. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +19 -19
  126. package/dist/cjs/paneview/draggablePaneviewPanel.js +130 -129
  127. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  128. package/dist/cjs/paneview/options.d.ts +27 -27
  129. package/dist/cjs/paneview/options.js +2 -2
  130. package/dist/cjs/paneview/paneview.d.ts +40 -40
  131. package/dist/cjs/paneview/paneview.js +201 -201
  132. package/dist/cjs/paneview/paneviewComponent.d.ts +129 -129
  133. package/dist/cjs/paneview/paneviewComponent.js +394 -394
  134. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  135. package/dist/cjs/paneview/paneviewPanel.d.ts +92 -89
  136. package/dist/cjs/paneview/paneviewPanel.js +275 -274
  137. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  138. package/dist/cjs/react/deserializer.d.ts +10 -9
  139. package/dist/cjs/react/deserializer.js +43 -43
  140. package/dist/cjs/react/deserializer.js.map +1 -1
  141. package/dist/cjs/react/dockview/defaultTab.d.ts +4 -4
  142. package/dist/cjs/react/dockview/defaultTab.js +72 -72
  143. package/dist/cjs/react/dockview/dockview.d.ts +35 -34
  144. package/dist/cjs/react/dockview/dockview.js +213 -212
  145. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  146. package/dist/cjs/react/dockview/groupControlsRenderer.d.ts +43 -43
  147. package/dist/cjs/react/dockview/groupControlsRenderer.js +86 -86
  148. package/dist/cjs/react/dockview/reactContentPart.d.ts +30 -30
  149. package/dist/cjs/react/dockview/reactContentPart.js +58 -58
  150. package/dist/cjs/react/dockview/reactHeaderPart.d.ts +26 -26
  151. package/dist/cjs/react/dockview/reactHeaderPart.js +55 -55
  152. package/dist/cjs/react/dockview/reactWatermarkPart.d.ts +29 -29
  153. package/dist/cjs/react/dockview/reactWatermarkPart.js +65 -65
  154. package/dist/cjs/react/dockview/v2/reactContentRenderer.d.ts +29 -29
  155. package/dist/cjs/react/dockview/v2/reactContentRenderer.js +87 -87
  156. package/dist/cjs/react/dockview/v2/reactGroupPanelView.d.ts +7 -7
  157. package/dist/cjs/react/dockview/v2/reactGroupPanelView.js +34 -34
  158. package/dist/cjs/react/dockview/v2/webviewContentRenderer.d.ts +18 -18
  159. package/dist/cjs/react/dockview/v2/webviewContentRenderer.js +45 -45
  160. package/dist/cjs/react/gridview/gridview.d.ts +24 -24
  161. package/dist/cjs/react/gridview/gridview.js +112 -112
  162. package/dist/cjs/react/gridview/view.d.ts +11 -11
  163. package/dist/cjs/react/gridview/view.js +41 -40
  164. package/dist/cjs/react/gridview/view.js.map +1 -1
  165. package/dist/cjs/react/index.d.ts +9 -9
  166. package/dist/cjs/react/index.js +23 -23
  167. package/dist/cjs/react/paneview/paneview.d.ts +30 -30
  168. package/dist/cjs/react/paneview/paneview.js +155 -155
  169. package/dist/cjs/react/paneview/view.d.ts +20 -20
  170. package/dist/cjs/react/paneview/view.js +44 -44
  171. package/dist/cjs/react/react.d.ts +36 -36
  172. package/dist/cjs/react/react.js +194 -194
  173. package/dist/cjs/react/splitview/splitview.d.ts +24 -24
  174. package/dist/cjs/react/splitview/splitview.js +108 -108
  175. package/dist/cjs/react/splitview/view.d.ts +10 -10
  176. package/dist/cjs/react/splitview/view.js +40 -40
  177. package/dist/cjs/react/svg.d.ts +3 -3
  178. package/dist/cjs/react/svg.js +35 -35
  179. package/dist/cjs/react/types.d.ts +7 -7
  180. package/dist/cjs/react/types.js +2 -2
  181. package/dist/cjs/splitview/core/options.d.ts +26 -26
  182. package/dist/cjs/splitview/core/options.js +2 -2
  183. package/dist/cjs/splitview/core/splitview.d.ts +127 -124
  184. package/dist/cjs/splitview/core/splitview.js +908 -908
  185. package/dist/cjs/splitview/core/splitview.js.map +1 -1
  186. package/dist/cjs/splitview/core/viewItem.d.ts +25 -25
  187. package/dist/cjs/splitview/core/viewItem.js +124 -124
  188. package/dist/cjs/splitview/splitviewComponent.d.ts +101 -101
  189. package/dist/cjs/splitview/splitviewComponent.js +373 -373
  190. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  191. package/dist/cjs/splitview/splitviewPanel.d.ts +45 -42
  192. package/dist/cjs/splitview/splitviewPanel.js +179 -178
  193. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  194. package/dist/cjs/svg.d.ts +3 -3
  195. package/dist/cjs/svg.js +43 -43
  196. package/dist/cjs/types.d.ts +8 -7
  197. package/dist/cjs/types.js +7 -2
  198. package/dist/cjs/types.js.map +1 -1
  199. package/dist/dockview.amd.js +7168 -6739
  200. package/dist/dockview.amd.min.js +2 -2
  201. package/dist/dockview.amd.min.noStyle.js +2 -2
  202. package/dist/dockview.amd.noStyle.js +7176 -6747
  203. package/dist/dockview.cjs.js +7167 -6738
  204. package/dist/dockview.esm.js +7152 -6726
  205. package/dist/dockview.esm.min.js +2 -2
  206. package/dist/dockview.js +7168 -6739
  207. package/dist/dockview.min.js +2 -2
  208. package/dist/dockview.min.noStyle.js +2 -2
  209. package/dist/dockview.noStyle.js +7176 -6747
  210. package/dist/esm/actionbar/actionsContainer.d.ts +7 -7
  211. package/dist/esm/actionbar/actionsContainer.js +17 -17
  212. package/dist/esm/api/component.api.d.ts +145 -144
  213. package/dist/esm/api/component.api.js +329 -326
  214. package/dist/esm/api/{groupPanelApi.d.ts → dockviewPanelApi.d.ts} +34 -34
  215. package/dist/esm/api/{groupPanelApi.js → dockviewPanelApi.js} +48 -50
  216. package/dist/esm/api/gridviewPanelApi.d.ts +37 -36
  217. package/dist/esm/api/gridviewPanelApi.js +25 -25
  218. package/dist/esm/api/panelApi.d.ts +88 -81
  219. package/dist/esm/api/panelApi.js +95 -79
  220. package/dist/esm/api/paneviewPanelApi.d.ts +26 -26
  221. package/dist/esm/api/paneviewPanelApi.js +27 -27
  222. package/dist/esm/api/splitviewPanelApi.d.ts +32 -32
  223. package/dist/esm/api/splitviewPanelApi.js +25 -25
  224. package/dist/esm/array.d.ts +13 -13
  225. package/dist/esm/array.js +67 -67
  226. package/dist/esm/dnd/abstractDragHandler.d.ts +11 -11
  227. package/dist/esm/dnd/abstractDragHandler.js +37 -37
  228. package/dist/esm/dnd/dataTransfer.d.ts +31 -31
  229. package/dist/esm/dnd/dataTransfer.js +69 -69
  230. package/dist/esm/dnd/dnd.d.ts +27 -27
  231. package/dist/esm/dnd/dnd.js +36 -41
  232. package/dist/esm/dnd/droptarget.d.ts +42 -37
  233. package/dist/esm/dnd/droptarget.js +249 -167
  234. package/dist/esm/dnd/ghost.d.ts +1 -0
  235. package/dist/esm/dnd/ghost.js +10 -0
  236. package/dist/esm/dnd/groupDragHandler.d.ts +11 -0
  237. package/dist/esm/dnd/groupDragHandler.js +38 -0
  238. package/dist/esm/dockview/components/tab/defaultTab.d.ts +27 -27
  239. package/dist/esm/dockview/components/tab/defaultTab.js +79 -79
  240. package/dist/esm/dockview/components/watermark/watermark.d.ts +20 -20
  241. package/dist/esm/dockview/components/watermark/watermark.js +70 -70
  242. package/dist/esm/dockview/defaultGroupPanelView.d.ts +29 -29
  243. package/dist/esm/dockview/defaultGroupPanelView.js +44 -44
  244. package/dist/esm/dockview/deserializer.d.ts +6 -5
  245. package/dist/esm/dockview/deserializer.js +1 -1
  246. package/dist/esm/dockview/dockviewComponent.d.ts +133 -125
  247. package/dist/esm/dockview/dockviewComponent.js +632 -468
  248. package/dist/{cjs/dockview/dockviewGroupPanel.d.ts → esm/dockview/dockviewPanel.d.ts} +42 -31
  249. package/dist/esm/dockview/{dockviewGroupPanel.js → dockviewPanel.js} +111 -107
  250. package/dist/esm/dockview/options.d.ts +110 -88
  251. package/dist/esm/dockview/options.js +24 -1
  252. package/dist/esm/dockview/validation.d.ts +2 -0
  253. package/dist/esm/dockview/validation.js +86 -0
  254. package/dist/esm/dom.d.ts +14 -14
  255. package/dist/esm/dom.js +113 -113
  256. package/dist/esm/events.d.ts +30 -30
  257. package/dist/esm/events.js +88 -88
  258. package/dist/esm/gridview/baseComponentGridview.d.ts +87 -87
  259. package/dist/esm/gridview/baseComponentGridview.js +188 -189
  260. package/dist/esm/gridview/basePanelView.d.ts +43 -43
  261. package/dist/esm/gridview/basePanelView.js +74 -74
  262. package/dist/esm/gridview/branchNode.d.ts +49 -46
  263. package/dist/esm/gridview/branchNode.js +218 -218
  264. package/dist/esm/gridview/gridview.d.ts +132 -123
  265. package/dist/esm/gridview/gridview.js +423 -397
  266. package/dist/esm/gridview/gridviewComponent.d.ts +85 -85
  267. package/dist/esm/gridview/gridviewComponent.js +237 -238
  268. package/dist/esm/gridview/gridviewPanel.d.ts +60 -60
  269. package/dist/esm/gridview/gridviewPanel.js +138 -138
  270. package/dist/esm/gridview/leafNode.d.ts +34 -31
  271. package/dist/esm/gridview/leafNode.js +103 -98
  272. package/dist/esm/gridview/options.d.ts +18 -18
  273. package/dist/esm/gridview/options.js +1 -1
  274. package/dist/esm/gridview/types.d.ts +3 -3
  275. package/dist/esm/gridview/types.js +1 -1
  276. package/dist/esm/groupview/dnd.d.ts +6 -5
  277. package/dist/esm/groupview/dnd.js +7 -6
  278. package/dist/esm/groupview/groupview.d.ts +177 -177
  279. package/dist/esm/groupview/groupview.js +462 -444
  280. package/dist/esm/groupview/groupviewPanel.d.ts +35 -35
  281. package/dist/esm/groupview/groupviewPanel.js +61 -61
  282. package/dist/esm/groupview/panel/content.d.ts +30 -30
  283. package/dist/esm/groupview/panel/content.js +73 -73
  284. package/dist/esm/groupview/tab.d.ts +31 -41
  285. package/dist/esm/groupview/tab.js +94 -90
  286. package/dist/esm/groupview/titlebar/tabsContainer.d.ts +65 -68
  287. package/dist/esm/groupview/titlebar/tabsContainer.js +183 -190
  288. package/dist/esm/groupview/titlebar/voidContainer.d.ts +15 -0
  289. package/dist/esm/groupview/titlebar/voidContainer.js +47 -0
  290. package/dist/esm/groupview/types.d.ts +68 -52
  291. package/dist/esm/groupview/types.js +1 -1
  292. package/dist/esm/hostedContainer.d.ts +23 -23
  293. package/dist/esm/hostedContainer.js +63 -63
  294. package/dist/esm/index.d.ts +30 -30
  295. package/dist/esm/index.js +23 -23
  296. package/dist/esm/lifecycle.d.ts +22 -22
  297. package/dist/esm/lifecycle.js +39 -39
  298. package/dist/esm/math.d.ts +4 -4
  299. package/dist/esm/math.js +10 -10
  300. package/dist/esm/panel/componentFactory.d.ts +8 -8
  301. package/dist/esm/panel/componentFactory.js +24 -24
  302. package/dist/esm/panel/types.d.ts +33 -33
  303. package/dist/esm/panel/types.js +1 -1
  304. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +21 -21
  305. package/dist/esm/paneview/defaultPaneviewHeader.js +63 -63
  306. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +19 -19
  307. package/dist/esm/paneview/draggablePaneviewPanel.js +91 -90
  308. package/dist/esm/paneview/options.d.ts +27 -27
  309. package/dist/esm/paneview/options.js +1 -1
  310. package/dist/esm/paneview/paneview.d.ts +40 -40
  311. package/dist/esm/paneview/paneview.js +145 -145
  312. package/dist/esm/paneview/paneviewComponent.d.ts +129 -129
  313. package/dist/esm/paneview/paneviewComponent.js +270 -270
  314. package/dist/esm/paneview/paneviewPanel.d.ts +92 -89
  315. package/dist/esm/paneview/paneviewPanel.js +192 -191
  316. package/dist/esm/react/deserializer.d.ts +10 -9
  317. package/dist/esm/react/deserializer.js +38 -38
  318. package/dist/esm/react/dockview/defaultTab.d.ts +4 -4
  319. package/dist/esm/react/dockview/defaultTab.js +34 -34
  320. package/dist/esm/react/dockview/dockview.d.ts +35 -34
  321. package/dist/esm/react/dockview/dockview.js +158 -157
  322. package/dist/esm/react/dockview/groupControlsRenderer.d.ts +43 -43
  323. package/dist/esm/react/dockview/groupControlsRenderer.js +68 -68
  324. package/dist/esm/react/dockview/reactContentPart.d.ts +30 -30
  325. package/dist/esm/react/dockview/reactContentPart.js +49 -49
  326. package/dist/esm/react/dockview/reactHeaderPart.d.ts +26 -26
  327. package/dist/esm/react/dockview/reactHeaderPart.js +46 -46
  328. package/dist/esm/react/dockview/reactWatermarkPart.d.ts +29 -29
  329. package/dist/esm/react/dockview/reactWatermarkPart.js +55 -55
  330. package/dist/esm/react/dockview/v2/reactContentRenderer.d.ts +29 -29
  331. package/dist/esm/react/dockview/v2/reactContentRenderer.js +69 -69
  332. package/dist/esm/react/dockview/v2/reactGroupPanelView.d.ts +7 -7
  333. package/dist/esm/react/dockview/v2/reactGroupPanelView.js +12 -12
  334. package/dist/esm/react/dockview/v2/webviewContentRenderer.d.ts +18 -18
  335. package/dist/esm/react/dockview/v2/webviewContentRenderer.js +36 -36
  336. package/dist/esm/react/gridview/gridview.d.ts +24 -24
  337. package/dist/esm/react/gridview/gridview.js +70 -70
  338. package/dist/esm/react/gridview/view.d.ts +11 -11
  339. package/dist/esm/react/gridview/view.js +19 -18
  340. package/dist/esm/react/index.d.ts +9 -9
  341. package/dist/esm/react/index.js +7 -7
  342. package/dist/esm/react/paneview/paneview.d.ts +30 -30
  343. package/dist/esm/react/paneview/paneview.js +100 -100
  344. package/dist/esm/react/paneview/view.d.ts +20 -20
  345. package/dist/esm/react/paneview/view.js +35 -35
  346. package/dist/esm/react/react.d.ts +36 -36
  347. package/dist/esm/react/react.js +125 -125
  348. package/dist/esm/react/splitview/splitview.d.ts +24 -24
  349. package/dist/esm/react/splitview/splitview.js +66 -66
  350. package/dist/esm/react/splitview/view.d.ts +10 -10
  351. package/dist/esm/react/splitview/view.js +18 -18
  352. package/dist/esm/react/svg.d.ts +3 -3
  353. package/dist/esm/react/svg.js +7 -7
  354. package/dist/esm/react/types.d.ts +7 -7
  355. package/dist/esm/react/types.js +1 -1
  356. package/dist/esm/splitview/core/options.d.ts +26 -26
  357. package/dist/esm/splitview/core/options.js +1 -1
  358. package/dist/esm/splitview/core/splitview.d.ts +127 -124
  359. package/dist/esm/splitview/core/splitview.js +689 -689
  360. package/dist/esm/splitview/core/viewItem.d.ts +25 -25
  361. package/dist/esm/splitview/core/viewItem.js +79 -79
  362. package/dist/esm/splitview/splitviewComponent.d.ts +101 -101
  363. package/dist/esm/splitview/splitviewComponent.js +249 -249
  364. package/dist/esm/splitview/splitviewPanel.d.ts +45 -42
  365. package/dist/esm/splitview/splitviewPanel.js +108 -107
  366. package/dist/esm/svg.d.ts +3 -3
  367. package/dist/esm/svg.js +31 -31
  368. package/dist/esm/types.d.ts +8 -7
  369. package/dist/esm/types.js +3 -1
  370. package/dist/styles/dockview.css +23 -26
  371. package/package.json +12 -16
  372. package/dist/cjs/api/groupPanelApi.js.map +0 -1
  373. package/dist/cjs/dockview/dockviewGroupPanel.js.map +0 -1
  374. package/dist/cjs/groupview/groupPanel.d.ts +0 -32
  375. package/dist/cjs/groupview/groupPanel.js +0 -3
  376. package/dist/cjs/groupview/groupPanel.js.map +0 -1
  377. package/dist/esm/groupview/groupPanel.d.ts +0 -32
  378. package/dist/esm/groupview/groupPanel.js +0 -1
@@ -1,689 +1,689 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Accreditation: This file is largly based upon the MIT licenced VSCode sourcecode found at:
3
- * https://github.com/microsoft/vscode/tree/main/src/vs/base/browser/ui/splitview
4
- *--------------------------------------------------------------------------------------------*/
5
- import { removeClasses, addClasses, toggleClass, getElementsByTagName, } from '../../dom';
6
- import { clamp } from '../../math';
7
- import { Emitter } from '../../events';
8
- import { pushToStart, pushToEnd, range, firstIndex } from '../../array';
9
- import { ViewItem } from './viewItem';
10
- export var Orientation;
11
- (function (Orientation) {
12
- Orientation["HORIZONTAL"] = "HORIZONTAL";
13
- Orientation["VERTICAL"] = "VERTICAL";
14
- })(Orientation || (Orientation = {}));
15
- export var SashState;
16
- (function (SashState) {
17
- SashState[SashState["MAXIMUM"] = 0] = "MAXIMUM";
18
- SashState[SashState["MINIMUM"] = 1] = "MINIMUM";
19
- SashState[SashState["DISABLED"] = 2] = "DISABLED";
20
- SashState[SashState["ENABLED"] = 3] = "ENABLED";
21
- })(SashState || (SashState = {}));
22
- export var LayoutPriority;
23
- (function (LayoutPriority) {
24
- LayoutPriority["Low"] = "low";
25
- LayoutPriority["High"] = "high";
26
- LayoutPriority["Normal"] = "normal";
27
- })(LayoutPriority || (LayoutPriority = {}));
28
- export var Sizing;
29
- (function (Sizing) {
30
- Sizing.Distribute = { type: 'distribute' };
31
- function Split(index) {
32
- return { type: 'split', index };
33
- }
34
- Sizing.Split = Split;
35
- function Invisible(cachedVisibleSize) {
36
- return { type: 'invisible', cachedVisibleSize };
37
- }
38
- Sizing.Invisible = Invisible;
39
- })(Sizing || (Sizing = {}));
40
- export class Splitview {
41
- constructor(container, options) {
42
- this.container = container;
43
- this.views = [];
44
- this.sashes = [];
45
- this._size = 0;
46
- this._orthogonalSize = 0;
47
- this.contentSize = 0;
48
- this._proportions = undefined;
49
- this._onDidSashEnd = new Emitter();
50
- this.onDidSashEnd = this._onDidSashEnd.event;
51
- this._onDidAddView = new Emitter();
52
- this.onDidAddView = this._onDidAddView.event;
53
- this._onDidRemoveView = new Emitter();
54
- this.onDidRemoveView = this._onDidRemoveView.event;
55
- this._startSnappingEnabled = true;
56
- this._endSnappingEnabled = true;
57
- this.resize = (index, delta, sizes = this.views.map((x) => x.size), lowPriorityIndexes, highPriorityIndexes, overloadMinDelta = Number.NEGATIVE_INFINITY, overloadMaxDelta = Number.POSITIVE_INFINITY, snapBefore, snapAfter) => {
58
- if (index < 0 || index > this.views.length) {
59
- return 0;
60
- }
61
- const upIndexes = range(index, -1);
62
- const downIndexes = range(index + 1, this.views.length);
63
- //
64
- if (highPriorityIndexes) {
65
- for (const i of highPriorityIndexes) {
66
- pushToStart(upIndexes, i);
67
- pushToStart(downIndexes, i);
68
- }
69
- }
70
- if (lowPriorityIndexes) {
71
- for (const i of lowPriorityIndexes) {
72
- pushToEnd(upIndexes, i);
73
- pushToEnd(downIndexes, i);
74
- }
75
- }
76
- //
77
- const upItems = upIndexes.map((i) => this.views[i]);
78
- const upSizes = upIndexes.map((i) => sizes[i]);
79
- //
80
- const downItems = downIndexes.map((i) => this.views[i]);
81
- const downSizes = downIndexes.map((i) => sizes[i]);
82
- //
83
- const minDeltaUp = upIndexes.reduce((_, i) => _ + this.views[i].minimumSize - sizes[i], 0);
84
- const maxDeltaUp = upIndexes.reduce((_, i) => _ + this.views[i].maximumSize - sizes[i], 0);
85
- //
86
- const maxDeltaDown = downIndexes.length === 0
87
- ? Number.POSITIVE_INFINITY
88
- : downIndexes.reduce((_, i) => _ + sizes[i] - this.views[i].minimumSize, 0);
89
- const minDeltaDown = downIndexes.length === 0
90
- ? Number.NEGATIVE_INFINITY
91
- : downIndexes.reduce((_, i) => _ + sizes[i] - this.views[i].maximumSize, 0);
92
- //
93
- const minDelta = Math.max(minDeltaUp, minDeltaDown);
94
- const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
95
- //
96
- let snapped = false;
97
- if (snapBefore) {
98
- const snapView = this.views[snapBefore.index];
99
- const visible = delta >= snapBefore.limitDelta;
100
- snapped = visible !== snapView.visible;
101
- snapView.setVisible(visible, snapBefore.size);
102
- }
103
- if (!snapped && snapAfter) {
104
- const snapView = this.views[snapAfter.index];
105
- const visible = delta < snapAfter.limitDelta;
106
- snapped = visible !== snapView.visible;
107
- snapView.setVisible(visible, snapAfter.size);
108
- }
109
- if (snapped) {
110
- return this.resize(index, delta, sizes, lowPriorityIndexes, highPriorityIndexes, overloadMinDelta, overloadMaxDelta);
111
- }
112
- //
113
- const tentativeDelta = clamp(delta, minDelta, maxDelta);
114
- let actualDelta = 0;
115
- //
116
- let deltaUp = tentativeDelta;
117
- for (let i = 0; i < upItems.length; i++) {
118
- const item = upItems[i];
119
- const size = clamp(upSizes[i] + deltaUp, item.minimumSize, item.maximumSize);
120
- const viewDelta = size - upSizes[i];
121
- actualDelta += viewDelta;
122
- deltaUp -= viewDelta;
123
- item.size = size;
124
- }
125
- //
126
- let deltaDown = actualDelta;
127
- for (let i = 0; i < downItems.length; i++) {
128
- const item = downItems[i];
129
- const size = clamp(downSizes[i] - deltaDown, item.minimumSize, item.maximumSize);
130
- const viewDelta = size - downSizes[i];
131
- deltaDown += viewDelta;
132
- item.size = size;
133
- }
134
- //
135
- return delta;
136
- };
137
- this._orientation = options.orientation;
138
- this.element = this.createContainer();
139
- this.proportionalLayout =
140
- options.proportionalLayout === undefined
141
- ? true
142
- : !!options.proportionalLayout;
143
- this.viewContainer = this.createViewContainer();
144
- this.sashContainer = this.createSashContainer();
145
- this.element.appendChild(this.sashContainer);
146
- this.element.appendChild(this.viewContainer);
147
- this.container.appendChild(this.element);
148
- this.style(options.styles);
149
- // We have an existing set of view, add them now
150
- if (options.descriptor) {
151
- this._size = options.descriptor.size;
152
- options.descriptor.views.forEach((viewDescriptor, index) => {
153
- const sizing = viewDescriptor.visible === undefined ||
154
- viewDescriptor.visible
155
- ? viewDescriptor.size
156
- : {
157
- type: 'invisible',
158
- cachedVisibleSize: viewDescriptor.size,
159
- };
160
- const view = viewDescriptor.view;
161
- this.addView(view, sizing, index, true
162
- // true skip layout
163
- );
164
- });
165
- // Initialize content size and proportions for first layout
166
- this.contentSize = this.views.reduce((r, i) => r + i.size, 0);
167
- this.saveProportions();
168
- }
169
- }
170
- get size() {
171
- return this._size;
172
- }
173
- set size(value) {
174
- this._size = value;
175
- }
176
- get orthogonalSize() {
177
- return this._orthogonalSize;
178
- }
179
- set orthogonalSize(value) {
180
- this._orthogonalSize = value;
181
- }
182
- get length() {
183
- return this.views.length;
184
- }
185
- get proportions() {
186
- return this._proportions ? [...this._proportions] : undefined;
187
- }
188
- get orientation() {
189
- return this._orientation;
190
- }
191
- set orientation(value) {
192
- this._orientation = value;
193
- const tmp = this.size;
194
- this.size = this.orthogonalSize;
195
- this.orthogonalSize = tmp;
196
- removeClasses(this.element, 'horizontal', 'vertical');
197
- this.element.classList.add(this.orientation == Orientation.HORIZONTAL
198
- ? 'horizontal'
199
- : 'vertical');
200
- }
201
- get minimumSize() {
202
- return this.views.reduce((r, item) => r + item.minimumSize, 0);
203
- }
204
- get maximumSize() {
205
- return this.length === 0
206
- ? Number.POSITIVE_INFINITY
207
- : this.views.reduce((r, item) => r + item.maximumSize, 0);
208
- }
209
- get startSnappingEnabled() {
210
- return this._startSnappingEnabled;
211
- }
212
- set startSnappingEnabled(startSnappingEnabled) {
213
- if (this._startSnappingEnabled === startSnappingEnabled) {
214
- return;
215
- }
216
- this._startSnappingEnabled = startSnappingEnabled;
217
- this.updateSashEnablement();
218
- }
219
- get endSnappingEnabled() {
220
- return this._endSnappingEnabled;
221
- }
222
- set endSnappingEnabled(endSnappingEnabled) {
223
- if (this._endSnappingEnabled === endSnappingEnabled) {
224
- return;
225
- }
226
- this._endSnappingEnabled = endSnappingEnabled;
227
- this.updateSashEnablement();
228
- }
229
- style(styles) {
230
- if ((styles === null || styles === void 0 ? void 0 : styles.separatorBorder) === 'transparent') {
231
- removeClasses(this.element, 'separator-border');
232
- this.element.style.removeProperty('--dv-separator-border');
233
- }
234
- else {
235
- addClasses(this.element, 'separator-border');
236
- if (styles === null || styles === void 0 ? void 0 : styles.separatorBorder) {
237
- this.element.style.setProperty('--dv-separator-border', styles.separatorBorder);
238
- }
239
- }
240
- }
241
- isViewVisible(index) {
242
- if (index < 0 || index >= this.views.length) {
243
- throw new Error('Index out of bounds');
244
- }
245
- const viewItem = this.views[index];
246
- return viewItem.visible;
247
- }
248
- setViewVisible(index, visible) {
249
- if (index < 0 || index >= this.views.length) {
250
- throw new Error('Index out of bounds');
251
- }
252
- toggleClass(this.container, 'visible', visible);
253
- const viewItem = this.views[index];
254
- toggleClass(this.container, 'visible', visible);
255
- viewItem.setVisible(visible, viewItem.size);
256
- this.distributeEmptySpace(index);
257
- this.layoutViews();
258
- this.saveProportions();
259
- }
260
- getViewSize(index) {
261
- if (index < 0 || index >= this.views.length) {
262
- return -1;
263
- }
264
- return this.views[index].size;
265
- }
266
- resizeView(index, size) {
267
- if (index < 0 || index >= this.views.length) {
268
- return;
269
- }
270
- const indexes = range(this.views.length).filter((i) => i !== index);
271
- const lowPriorityIndexes = [
272
- ...indexes.filter((i) => this.views[i].priority === LayoutPriority.Low),
273
- index,
274
- ];
275
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
276
- const item = this.views[index];
277
- size = Math.round(size);
278
- size = clamp(size, item.minimumSize, Math.min(item.maximumSize, this._size));
279
- item.size = size;
280
- this.relayout(lowPriorityIndexes, highPriorityIndexes);
281
- }
282
- getViews() {
283
- return this.views.map((x) => x.view);
284
- }
285
- onDidChange(item, size) {
286
- const index = this.views.indexOf(item);
287
- if (index < 0 || index >= this.views.length) {
288
- return;
289
- }
290
- size = typeof size === 'number' ? size : item.size;
291
- size = clamp(size, item.minimumSize, item.maximumSize);
292
- item.size = size;
293
- this.relayout([index]);
294
- }
295
- addView(view, size = { type: 'distribute' }, index = this.views.length, skipLayout) {
296
- const container = document.createElement('div');
297
- container.className = 'view';
298
- container.appendChild(view.element);
299
- let viewSize;
300
- if (typeof size === 'number') {
301
- viewSize = size;
302
- }
303
- else if (size.type === 'split') {
304
- viewSize = this.getViewSize(size.index) / 2;
305
- }
306
- else if (size.type === 'invisible') {
307
- viewSize = { cachedVisibleSize: size.cachedVisibleSize };
308
- }
309
- else {
310
- viewSize = view.minimumSize;
311
- }
312
- const disposable = view.onDidChange((newSize) => this.onDidChange(viewItem, newSize));
313
- const dispose = () => {
314
- disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
315
- this.viewContainer.removeChild(container);
316
- };
317
- const viewItem = new ViewItem(container, view, viewSize, { dispose });
318
- if (index === this.views.length) {
319
- this.viewContainer.appendChild(container);
320
- }
321
- else {
322
- this.viewContainer.insertBefore(container, this.viewContainer.children.item(index));
323
- }
324
- this.views.splice(index, 0, viewItem);
325
- if (this.views.length > 1) {
326
- //add sash
327
- const sash = document.createElement('div');
328
- sash.className = 'sash';
329
- const onStart = (event) => {
330
- for (const item of this.views) {
331
- item.enabled = false;
332
- }
333
- const iframes = [
334
- ...getElementsByTagName('iframe'),
335
- ...getElementsByTagName('webview'),
336
- ];
337
- for (const iframe of iframes) {
338
- iframe.style.pointerEvents = 'none';
339
- }
340
- const start = this._orientation === Orientation.HORIZONTAL
341
- ? event.clientX
342
- : event.clientY;
343
- const sashIndex = firstIndex(this.sashes, (s) => s.container === sash);
344
- //
345
- const sizes = this.views.map((x) => x.size);
346
- //
347
- let snapBefore;
348
- let snapAfter;
349
- const upIndexes = range(sashIndex, -1);
350
- const downIndexes = range(sashIndex + 1, this.views.length);
351
- const minDeltaUp = upIndexes.reduce((r, i) => r + (this.views[i].minimumSize - sizes[i]), 0);
352
- const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.views[i].viewMaximumSize - sizes[i]), 0);
353
- const maxDeltaDown = downIndexes.length === 0
354
- ? Number.POSITIVE_INFINITY
355
- : downIndexes.reduce((r, i) => r + (sizes[i] - this.views[i].minimumSize), 0);
356
- const minDeltaDown = downIndexes.length === 0
357
- ? Number.NEGATIVE_INFINITY
358
- : downIndexes.reduce((r, i) => r +
359
- (sizes[i] - this.views[i].viewMaximumSize), 0);
360
- const minDelta = Math.max(minDeltaUp, minDeltaDown);
361
- const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
362
- const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
363
- const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
364
- if (typeof snapBeforeIndex === 'number') {
365
- const snappedViewItem = this.views[snapBeforeIndex];
366
- const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
367
- snapBefore = {
368
- index: snapBeforeIndex,
369
- limitDelta: snappedViewItem.visible
370
- ? minDelta - halfSize
371
- : minDelta + halfSize,
372
- size: snappedViewItem.size,
373
- };
374
- }
375
- if (typeof snapAfterIndex === 'number') {
376
- const snappedViewItem = this.views[snapAfterIndex];
377
- const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
378
- snapAfter = {
379
- index: snapAfterIndex,
380
- limitDelta: snappedViewItem.visible
381
- ? maxDelta + halfSize
382
- : maxDelta - halfSize,
383
- size: snappedViewItem.size,
384
- };
385
- }
386
- //
387
- const mousemove = (mousemoveEvent) => {
388
- const current = this._orientation === Orientation.HORIZONTAL
389
- ? mousemoveEvent.clientX
390
- : mousemoveEvent.clientY;
391
- const delta = current - start;
392
- this.resize(sashIndex, delta, sizes, undefined, undefined, minDelta, maxDelta, snapBefore, snapAfter);
393
- this.distributeEmptySpace();
394
- this.layoutViews();
395
- };
396
- const end = () => {
397
- for (const item of this.views) {
398
- item.enabled = true;
399
- }
400
- for (const iframe of iframes) {
401
- iframe.style.pointerEvents = 'auto';
402
- }
403
- this.saveProportions();
404
- document.removeEventListener('mousemove', mousemove);
405
- document.removeEventListener('mouseup', end);
406
- document.removeEventListener('mouseend', end);
407
- this._onDidSashEnd.fire(undefined);
408
- };
409
- document.addEventListener('mousemove', mousemove);
410
- document.addEventListener('mouseup', end);
411
- document.addEventListener('mouseend', end);
412
- };
413
- sash.addEventListener('mousedown', onStart);
414
- const sashItem = {
415
- container: sash,
416
- disposable: () => {
417
- sash.removeEventListener('mousedown', onStart);
418
- this.sashContainer.removeChild(sash);
419
- },
420
- };
421
- this.sashContainer.appendChild(sash);
422
- this.sashes.push(sashItem);
423
- }
424
- if (!skipLayout) {
425
- this.relayout([index]);
426
- }
427
- if (!skipLayout &&
428
- typeof size !== 'number' &&
429
- size.type === 'distribute') {
430
- this.distributeViewSizes();
431
- }
432
- this._onDidAddView.fire(view);
433
- }
434
- distributeViewSizes() {
435
- const flexibleViewItems = [];
436
- let flexibleSize = 0;
437
- for (const item of this.views) {
438
- if (item.maximumSize - item.minimumSize > 0) {
439
- flexibleViewItems.push(item);
440
- flexibleSize += item.size;
441
- }
442
- }
443
- const size = Math.floor(flexibleSize / flexibleViewItems.length);
444
- for (const item of flexibleViewItems) {
445
- item.size = clamp(size, item.minimumSize, item.maximumSize);
446
- }
447
- const indexes = range(this.views.length);
448
- const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.Low);
449
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
450
- this.relayout(lowPriorityIndexes, highPriorityIndexes);
451
- }
452
- removeView(index, sizing, skipLayout = false) {
453
- // Remove view
454
- const viewItem = this.views.splice(index, 1)[0];
455
- viewItem.dispose();
456
- // Remove sash
457
- if (this.views.length >= 1) {
458
- const sashIndex = Math.max(index - 1, 0);
459
- const sashItem = this.sashes.splice(sashIndex, 1)[0];
460
- sashItem.disposable();
461
- }
462
- if (!skipLayout) {
463
- this.relayout();
464
- }
465
- if (sizing && sizing.type === 'distribute') {
466
- this.distributeViewSizes();
467
- }
468
- this._onDidRemoveView.fire(viewItem.view);
469
- return viewItem.view;
470
- }
471
- getViewCachedVisibleSize(index) {
472
- if (index < 0 || index >= this.views.length) {
473
- throw new Error('Index out of bounds');
474
- }
475
- const viewItem = this.views[index];
476
- return viewItem.cachedVisibleSize;
477
- }
478
- moveView(from, to) {
479
- const cachedVisibleSize = this.getViewCachedVisibleSize(from);
480
- const sizing = typeof cachedVisibleSize === 'undefined'
481
- ? this.getViewSize(from)
482
- : Sizing.Invisible(cachedVisibleSize);
483
- const view = this.removeView(from, undefined, true);
484
- this.addView(view, sizing, to);
485
- }
486
- layout(size, orthogonalSize) {
487
- const previousSize = Math.max(this.size, this.contentSize);
488
- this.size = size;
489
- this.orthogonalSize = orthogonalSize;
490
- if (!this.proportions) {
491
- const indexes = range(this.views.length);
492
- const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.Low);
493
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
494
- this.resize(this.views.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
495
- }
496
- else {
497
- for (let i = 0; i < this.views.length; i++) {
498
- const item = this.views[i];
499
- item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
500
- }
501
- }
502
- this.distributeEmptySpace();
503
- this.layoutViews();
504
- }
505
- relayout(lowPriorityIndexes, highPriorityIndexes) {
506
- const contentSize = this.views.reduce((r, i) => r + i.size, 0);
507
- this.resize(this.views.length - 1, this._size - contentSize, undefined, lowPriorityIndexes, highPriorityIndexes);
508
- this.distributeEmptySpace();
509
- this.layoutViews();
510
- this.saveProportions();
511
- }
512
- distributeEmptySpace(lowPriorityIndex) {
513
- const contentSize = this.views.reduce((r, i) => r + i.size, 0);
514
- let emptyDelta = this.size - contentSize;
515
- const indexes = range(this.views.length - 1, -1);
516
- const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.Low);
517
- const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
518
- for (const index of highPriorityIndexes) {
519
- pushToStart(indexes, index);
520
- }
521
- for (const index of lowPriorityIndexes) {
522
- pushToEnd(indexes, index);
523
- }
524
- if (typeof lowPriorityIndex === 'number') {
525
- pushToEnd(indexes, lowPriorityIndex);
526
- }
527
- for (let i = 0; emptyDelta !== 0 && i < indexes.length; i++) {
528
- const item = this.views[indexes[i]];
529
- const size = clamp(item.size + emptyDelta, item.minimumSize, item.maximumSize);
530
- const viewDelta = size - item.size;
531
- emptyDelta -= viewDelta;
532
- item.size = size;
533
- }
534
- }
535
- saveProportions() {
536
- if (this.proportionalLayout && this.contentSize > 0) {
537
- this._proportions = this.views.map((i) => i.size / this.contentSize);
538
- }
539
- }
540
- layoutViews() {
541
- this.contentSize = this.views.reduce((r, i) => r + i.size, 0);
542
- let sum = 0;
543
- const x = [];
544
- this.updateSashEnablement();
545
- for (let i = 0; i < this.views.length - 1; i++) {
546
- sum += this.views[i].size;
547
- x.push(sum);
548
- const offset = Math.min(Math.max(0, sum - 2), this.size - 4);
549
- if (this._orientation === Orientation.HORIZONTAL) {
550
- this.sashes[i].container.style.left = `${offset}px`;
551
- this.sashes[i].container.style.top = `0px`;
552
- }
553
- if (this._orientation === Orientation.VERTICAL) {
554
- this.sashes[i].container.style.left = `0px`;
555
- this.sashes[i].container.style.top = `${offset}px`;
556
- }
557
- }
558
- this.views.forEach((view, i) => {
559
- if (this._orientation === Orientation.HORIZONTAL) {
560
- view.container.style.width = `${view.size}px`;
561
- view.container.style.left = i == 0 ? '0px' : `${x[i - 1]}px`;
562
- view.container.style.top = '';
563
- view.container.style.height = '';
564
- }
565
- if (this._orientation === Orientation.VERTICAL) {
566
- view.container.style.height = `${view.size}px`;
567
- view.container.style.top = i == 0 ? '0px' : `${x[i - 1]}px`;
568
- view.container.style.width = '';
569
- view.container.style.left = '';
570
- }
571
- view.view.layout(view.size, this._orthogonalSize);
572
- });
573
- }
574
- findFirstSnapIndex(indexes) {
575
- // visible views first
576
- for (const index of indexes) {
577
- const viewItem = this.views[index];
578
- if (!viewItem.visible) {
579
- continue;
580
- }
581
- if (viewItem.snap) {
582
- return index;
583
- }
584
- }
585
- // then, hidden views
586
- for (const index of indexes) {
587
- const viewItem = this.views[index];
588
- if (viewItem.visible &&
589
- viewItem.maximumSize - viewItem.minimumSize > 0) {
590
- return undefined;
591
- }
592
- if (!viewItem.visible && viewItem.snap) {
593
- return index;
594
- }
595
- }
596
- return undefined;
597
- }
598
- updateSashEnablement() {
599
- let previous = false;
600
- const collapsesDown = this.views.map((i) => (previous = i.size - i.minimumSize > 0 || previous));
601
- previous = false;
602
- const expandsDown = this.views.map((i) => (previous = i.maximumSize - i.size > 0 || previous));
603
- const reverseViews = [...this.views].reverse();
604
- previous = false;
605
- const collapsesUp = reverseViews
606
- .map((i) => (previous = i.size - i.minimumSize > 0 || previous))
607
- .reverse();
608
- previous = false;
609
- const expandsUp = reverseViews
610
- .map((i) => (previous = i.maximumSize - i.size > 0 || previous))
611
- .reverse();
612
- let position = 0;
613
- for (let index = 0; index < this.sashes.length; index++) {
614
- const sash = this.sashes[index];
615
- const viewItem = this.views[index];
616
- position += viewItem.size;
617
- const min = !(collapsesDown[index] && expandsUp[index + 1]);
618
- const max = !(expandsDown[index] && collapsesUp[index + 1]);
619
- if (min && max) {
620
- const upIndexes = range(index, -1);
621
- const downIndexes = range(index + 1, this.views.length);
622
- const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
623
- const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
624
- const snappedBefore = typeof snapBeforeIndex === 'number' &&
625
- !this.views[snapBeforeIndex].visible;
626
- const snappedAfter = typeof snapAfterIndex === 'number' &&
627
- !this.views[snapAfterIndex].visible;
628
- if (snappedBefore &&
629
- collapsesUp[index] &&
630
- (position > 0 || this.startSnappingEnabled)) {
631
- this.updateSash(sash, SashState.MINIMUM);
632
- }
633
- else if (snappedAfter &&
634
- collapsesDown[index] &&
635
- (position < this.contentSize || this.endSnappingEnabled)) {
636
- this.updateSash(sash, SashState.MAXIMUM);
637
- }
638
- else {
639
- this.updateSash(sash, SashState.DISABLED);
640
- }
641
- }
642
- else if (min && !max) {
643
- this.updateSash(sash, SashState.MINIMUM);
644
- }
645
- else if (!min && max) {
646
- this.updateSash(sash, SashState.MAXIMUM);
647
- }
648
- else {
649
- this.updateSash(sash, SashState.ENABLED);
650
- }
651
- }
652
- }
653
- updateSash(sash, state) {
654
- toggleClass(sash.container, 'disabled', state === SashState.DISABLED);
655
- toggleClass(sash.container, 'enabled', state === SashState.ENABLED);
656
- toggleClass(sash.container, 'maximum', state === SashState.MAXIMUM);
657
- toggleClass(sash.container, 'minimum', state === SashState.MINIMUM);
658
- }
659
- createViewContainer() {
660
- const element = document.createElement('div');
661
- element.className = 'view-container';
662
- return element;
663
- }
664
- createSashContainer() {
665
- const element = document.createElement('div');
666
- element.className = 'sash-container';
667
- return element;
668
- }
669
- createContainer() {
670
- const element = document.createElement('div');
671
- const orientationClassname = this._orientation === Orientation.HORIZONTAL
672
- ? 'horizontal'
673
- : 'vertical';
674
- element.className = `split-view-container ${orientationClassname}`;
675
- return element;
676
- }
677
- dispose() {
678
- this._onDidSashEnd.dispose();
679
- this._onDidAddView.dispose();
680
- this._onDidRemoveView.dispose();
681
- for (let i = 0; i < this.element.children.length; i++) {
682
- if (this.element.children.item(i) === this.element) {
683
- this.element.removeChild(this.element);
684
- break;
685
- }
686
- }
687
- this.element.remove();
688
- }
689
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Accreditation: This file is largly based upon the MIT licenced VSCode sourcecode found at:
3
+ * https://github.com/microsoft/vscode/tree/main/src/vs/base/browser/ui/splitview
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { removeClasses, addClasses, toggleClass, getElementsByTagName, } from '../../dom';
6
+ import { clamp } from '../../math';
7
+ import { Emitter } from '../../events';
8
+ import { pushToStart, pushToEnd, range, firstIndex } from '../../array';
9
+ import { ViewItem } from './viewItem';
10
+ export var Orientation;
11
+ (function (Orientation) {
12
+ Orientation["HORIZONTAL"] = "HORIZONTAL";
13
+ Orientation["VERTICAL"] = "VERTICAL";
14
+ })(Orientation || (Orientation = {}));
15
+ export var SashState;
16
+ (function (SashState) {
17
+ SashState[SashState["MAXIMUM"] = 0] = "MAXIMUM";
18
+ SashState[SashState["MINIMUM"] = 1] = "MINIMUM";
19
+ SashState[SashState["DISABLED"] = 2] = "DISABLED";
20
+ SashState[SashState["ENABLED"] = 3] = "ENABLED";
21
+ })(SashState || (SashState = {}));
22
+ export var LayoutPriority;
23
+ (function (LayoutPriority) {
24
+ LayoutPriority["Low"] = "low";
25
+ LayoutPriority["High"] = "high";
26
+ LayoutPriority["Normal"] = "normal";
27
+ })(LayoutPriority || (LayoutPriority = {}));
28
+ export var Sizing;
29
+ (function (Sizing) {
30
+ Sizing.Distribute = { type: 'distribute' };
31
+ function Split(index) {
32
+ return { type: 'split', index };
33
+ }
34
+ Sizing.Split = Split;
35
+ function Invisible(cachedVisibleSize) {
36
+ return { type: 'invisible', cachedVisibleSize };
37
+ }
38
+ Sizing.Invisible = Invisible;
39
+ })(Sizing || (Sizing = {}));
40
+ export class Splitview {
41
+ get size() {
42
+ return this._size;
43
+ }
44
+ set size(value) {
45
+ this._size = value;
46
+ }
47
+ get orthogonalSize() {
48
+ return this._orthogonalSize;
49
+ }
50
+ set orthogonalSize(value) {
51
+ this._orthogonalSize = value;
52
+ }
53
+ get length() {
54
+ return this.views.length;
55
+ }
56
+ get proportions() {
57
+ return this._proportions ? [...this._proportions] : undefined;
58
+ }
59
+ get orientation() {
60
+ return this._orientation;
61
+ }
62
+ set orientation(value) {
63
+ this._orientation = value;
64
+ const tmp = this.size;
65
+ this.size = this.orthogonalSize;
66
+ this.orthogonalSize = tmp;
67
+ removeClasses(this.element, 'horizontal', 'vertical');
68
+ this.element.classList.add(this.orientation == Orientation.HORIZONTAL
69
+ ? 'horizontal'
70
+ : 'vertical');
71
+ }
72
+ get minimumSize() {
73
+ return this.views.reduce((r, item) => r + item.minimumSize, 0);
74
+ }
75
+ get maximumSize() {
76
+ return this.length === 0
77
+ ? Number.POSITIVE_INFINITY
78
+ : this.views.reduce((r, item) => r + item.maximumSize, 0);
79
+ }
80
+ get startSnappingEnabled() {
81
+ return this._startSnappingEnabled;
82
+ }
83
+ set startSnappingEnabled(startSnappingEnabled) {
84
+ if (this._startSnappingEnabled === startSnappingEnabled) {
85
+ return;
86
+ }
87
+ this._startSnappingEnabled = startSnappingEnabled;
88
+ this.updateSashEnablement();
89
+ }
90
+ get endSnappingEnabled() {
91
+ return this._endSnappingEnabled;
92
+ }
93
+ set endSnappingEnabled(endSnappingEnabled) {
94
+ if (this._endSnappingEnabled === endSnappingEnabled) {
95
+ return;
96
+ }
97
+ this._endSnappingEnabled = endSnappingEnabled;
98
+ this.updateSashEnablement();
99
+ }
100
+ constructor(container, options) {
101
+ this.container = container;
102
+ this.views = [];
103
+ this.sashes = [];
104
+ this._size = 0;
105
+ this._orthogonalSize = 0;
106
+ this.contentSize = 0;
107
+ this._proportions = undefined;
108
+ this._onDidSashEnd = new Emitter();
109
+ this.onDidSashEnd = this._onDidSashEnd.event;
110
+ this._onDidAddView = new Emitter();
111
+ this.onDidAddView = this._onDidAddView.event;
112
+ this._onDidRemoveView = new Emitter();
113
+ this.onDidRemoveView = this._onDidRemoveView.event;
114
+ this._startSnappingEnabled = true;
115
+ this._endSnappingEnabled = true;
116
+ this.resize = (index, delta, sizes = this.views.map((x) => x.size), lowPriorityIndexes, highPriorityIndexes, overloadMinDelta = Number.NEGATIVE_INFINITY, overloadMaxDelta = Number.POSITIVE_INFINITY, snapBefore, snapAfter) => {
117
+ if (index < 0 || index > this.views.length) {
118
+ return 0;
119
+ }
120
+ const upIndexes = range(index, -1);
121
+ const downIndexes = range(index + 1, this.views.length);
122
+ //
123
+ if (highPriorityIndexes) {
124
+ for (const i of highPriorityIndexes) {
125
+ pushToStart(upIndexes, i);
126
+ pushToStart(downIndexes, i);
127
+ }
128
+ }
129
+ if (lowPriorityIndexes) {
130
+ for (const i of lowPriorityIndexes) {
131
+ pushToEnd(upIndexes, i);
132
+ pushToEnd(downIndexes, i);
133
+ }
134
+ }
135
+ //
136
+ const upItems = upIndexes.map((i) => this.views[i]);
137
+ const upSizes = upIndexes.map((i) => sizes[i]);
138
+ //
139
+ const downItems = downIndexes.map((i) => this.views[i]);
140
+ const downSizes = downIndexes.map((i) => sizes[i]);
141
+ //
142
+ const minDeltaUp = upIndexes.reduce((_, i) => _ + this.views[i].minimumSize - sizes[i], 0);
143
+ const maxDeltaUp = upIndexes.reduce((_, i) => _ + this.views[i].maximumSize - sizes[i], 0);
144
+ //
145
+ const maxDeltaDown = downIndexes.length === 0
146
+ ? Number.POSITIVE_INFINITY
147
+ : downIndexes.reduce((_, i) => _ + sizes[i] - this.views[i].minimumSize, 0);
148
+ const minDeltaDown = downIndexes.length === 0
149
+ ? Number.NEGATIVE_INFINITY
150
+ : downIndexes.reduce((_, i) => _ + sizes[i] - this.views[i].maximumSize, 0);
151
+ //
152
+ const minDelta = Math.max(minDeltaUp, minDeltaDown);
153
+ const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
154
+ //
155
+ let snapped = false;
156
+ if (snapBefore) {
157
+ const snapView = this.views[snapBefore.index];
158
+ const visible = delta >= snapBefore.limitDelta;
159
+ snapped = visible !== snapView.visible;
160
+ snapView.setVisible(visible, snapBefore.size);
161
+ }
162
+ if (!snapped && snapAfter) {
163
+ const snapView = this.views[snapAfter.index];
164
+ const visible = delta < snapAfter.limitDelta;
165
+ snapped = visible !== snapView.visible;
166
+ snapView.setVisible(visible, snapAfter.size);
167
+ }
168
+ if (snapped) {
169
+ return this.resize(index, delta, sizes, lowPriorityIndexes, highPriorityIndexes, overloadMinDelta, overloadMaxDelta);
170
+ }
171
+ //
172
+ const tentativeDelta = clamp(delta, minDelta, maxDelta);
173
+ let actualDelta = 0;
174
+ //
175
+ let deltaUp = tentativeDelta;
176
+ for (let i = 0; i < upItems.length; i++) {
177
+ const item = upItems[i];
178
+ const size = clamp(upSizes[i] + deltaUp, item.minimumSize, item.maximumSize);
179
+ const viewDelta = size - upSizes[i];
180
+ actualDelta += viewDelta;
181
+ deltaUp -= viewDelta;
182
+ item.size = size;
183
+ }
184
+ //
185
+ let deltaDown = actualDelta;
186
+ for (let i = 0; i < downItems.length; i++) {
187
+ const item = downItems[i];
188
+ const size = clamp(downSizes[i] - deltaDown, item.minimumSize, item.maximumSize);
189
+ const viewDelta = size - downSizes[i];
190
+ deltaDown += viewDelta;
191
+ item.size = size;
192
+ }
193
+ //
194
+ return delta;
195
+ };
196
+ this._orientation = options.orientation;
197
+ this.element = this.createContainer();
198
+ this.proportionalLayout =
199
+ options.proportionalLayout === undefined
200
+ ? true
201
+ : !!options.proportionalLayout;
202
+ this.viewContainer = this.createViewContainer();
203
+ this.sashContainer = this.createSashContainer();
204
+ this.element.appendChild(this.sashContainer);
205
+ this.element.appendChild(this.viewContainer);
206
+ this.container.appendChild(this.element);
207
+ this.style(options.styles);
208
+ // We have an existing set of view, add them now
209
+ if (options.descriptor) {
210
+ this._size = options.descriptor.size;
211
+ options.descriptor.views.forEach((viewDescriptor, index) => {
212
+ const sizing = viewDescriptor.visible === undefined ||
213
+ viewDescriptor.visible
214
+ ? viewDescriptor.size
215
+ : {
216
+ type: 'invisible',
217
+ cachedVisibleSize: viewDescriptor.size,
218
+ };
219
+ const view = viewDescriptor.view;
220
+ this.addView(view, sizing, index, true
221
+ // true skip layout
222
+ );
223
+ });
224
+ // Initialize content size and proportions for first layout
225
+ this.contentSize = this.views.reduce((r, i) => r + i.size, 0);
226
+ this.saveProportions();
227
+ }
228
+ }
229
+ style(styles) {
230
+ if ((styles === null || styles === void 0 ? void 0 : styles.separatorBorder) === 'transparent') {
231
+ removeClasses(this.element, 'separator-border');
232
+ this.element.style.removeProperty('--dv-separator-border');
233
+ }
234
+ else {
235
+ addClasses(this.element, 'separator-border');
236
+ if (styles === null || styles === void 0 ? void 0 : styles.separatorBorder) {
237
+ this.element.style.setProperty('--dv-separator-border', styles.separatorBorder);
238
+ }
239
+ }
240
+ }
241
+ isViewVisible(index) {
242
+ if (index < 0 || index >= this.views.length) {
243
+ throw new Error('Index out of bounds');
244
+ }
245
+ const viewItem = this.views[index];
246
+ return viewItem.visible;
247
+ }
248
+ setViewVisible(index, visible) {
249
+ if (index < 0 || index >= this.views.length) {
250
+ throw new Error('Index out of bounds');
251
+ }
252
+ toggleClass(this.container, 'visible', visible);
253
+ const viewItem = this.views[index];
254
+ toggleClass(this.container, 'visible', visible);
255
+ viewItem.setVisible(visible, viewItem.size);
256
+ this.distributeEmptySpace(index);
257
+ this.layoutViews();
258
+ this.saveProportions();
259
+ }
260
+ getViewSize(index) {
261
+ if (index < 0 || index >= this.views.length) {
262
+ return -1;
263
+ }
264
+ return this.views[index].size;
265
+ }
266
+ resizeView(index, size) {
267
+ if (index < 0 || index >= this.views.length) {
268
+ return;
269
+ }
270
+ const indexes = range(this.views.length).filter((i) => i !== index);
271
+ const lowPriorityIndexes = [
272
+ ...indexes.filter((i) => this.views[i].priority === LayoutPriority.Low),
273
+ index,
274
+ ];
275
+ const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
276
+ const item = this.views[index];
277
+ size = Math.round(size);
278
+ size = clamp(size, item.minimumSize, Math.min(item.maximumSize, this._size));
279
+ item.size = size;
280
+ this.relayout(lowPriorityIndexes, highPriorityIndexes);
281
+ }
282
+ getViews() {
283
+ return this.views.map((x) => x.view);
284
+ }
285
+ onDidChange(item, size) {
286
+ const index = this.views.indexOf(item);
287
+ if (index < 0 || index >= this.views.length) {
288
+ return;
289
+ }
290
+ size = typeof size === 'number' ? size : item.size;
291
+ size = clamp(size, item.minimumSize, item.maximumSize);
292
+ item.size = size;
293
+ this.relayout([index]);
294
+ }
295
+ addView(view, size = { type: 'distribute' }, index = this.views.length, skipLayout) {
296
+ const container = document.createElement('div');
297
+ container.className = 'view';
298
+ container.appendChild(view.element);
299
+ let viewSize;
300
+ if (typeof size === 'number') {
301
+ viewSize = size;
302
+ }
303
+ else if (size.type === 'split') {
304
+ viewSize = this.getViewSize(size.index) / 2;
305
+ }
306
+ else if (size.type === 'invisible') {
307
+ viewSize = { cachedVisibleSize: size.cachedVisibleSize };
308
+ }
309
+ else {
310
+ viewSize = view.minimumSize;
311
+ }
312
+ const disposable = view.onDidChange((newSize) => this.onDidChange(viewItem, newSize.size));
313
+ const dispose = () => {
314
+ disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
315
+ this.viewContainer.removeChild(container);
316
+ };
317
+ const viewItem = new ViewItem(container, view, viewSize, { dispose });
318
+ if (index === this.views.length) {
319
+ this.viewContainer.appendChild(container);
320
+ }
321
+ else {
322
+ this.viewContainer.insertBefore(container, this.viewContainer.children.item(index));
323
+ }
324
+ this.views.splice(index, 0, viewItem);
325
+ if (this.views.length > 1) {
326
+ //add sash
327
+ const sash = document.createElement('div');
328
+ sash.className = 'sash';
329
+ const onStart = (event) => {
330
+ for (const item of this.views) {
331
+ item.enabled = false;
332
+ }
333
+ const iframes = [
334
+ ...getElementsByTagName('iframe'),
335
+ ...getElementsByTagName('webview'),
336
+ ];
337
+ for (const iframe of iframes) {
338
+ iframe.style.pointerEvents = 'none';
339
+ }
340
+ const start = this._orientation === Orientation.HORIZONTAL
341
+ ? event.clientX
342
+ : event.clientY;
343
+ const sashIndex = firstIndex(this.sashes, (s) => s.container === sash);
344
+ //
345
+ const sizes = this.views.map((x) => x.size);
346
+ //
347
+ let snapBefore;
348
+ let snapAfter;
349
+ const upIndexes = range(sashIndex, -1);
350
+ const downIndexes = range(sashIndex + 1, this.views.length);
351
+ const minDeltaUp = upIndexes.reduce((r, i) => r + (this.views[i].minimumSize - sizes[i]), 0);
352
+ const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.views[i].viewMaximumSize - sizes[i]), 0);
353
+ const maxDeltaDown = downIndexes.length === 0
354
+ ? Number.POSITIVE_INFINITY
355
+ : downIndexes.reduce((r, i) => r + (sizes[i] - this.views[i].minimumSize), 0);
356
+ const minDeltaDown = downIndexes.length === 0
357
+ ? Number.NEGATIVE_INFINITY
358
+ : downIndexes.reduce((r, i) => r +
359
+ (sizes[i] - this.views[i].viewMaximumSize), 0);
360
+ const minDelta = Math.max(minDeltaUp, minDeltaDown);
361
+ const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
362
+ const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
363
+ const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
364
+ if (typeof snapBeforeIndex === 'number') {
365
+ const snappedViewItem = this.views[snapBeforeIndex];
366
+ const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
367
+ snapBefore = {
368
+ index: snapBeforeIndex,
369
+ limitDelta: snappedViewItem.visible
370
+ ? minDelta - halfSize
371
+ : minDelta + halfSize,
372
+ size: snappedViewItem.size,
373
+ };
374
+ }
375
+ if (typeof snapAfterIndex === 'number') {
376
+ const snappedViewItem = this.views[snapAfterIndex];
377
+ const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
378
+ snapAfter = {
379
+ index: snapAfterIndex,
380
+ limitDelta: snappedViewItem.visible
381
+ ? maxDelta + halfSize
382
+ : maxDelta - halfSize,
383
+ size: snappedViewItem.size,
384
+ };
385
+ }
386
+ //
387
+ const mousemove = (mousemoveEvent) => {
388
+ const current = this._orientation === Orientation.HORIZONTAL
389
+ ? mousemoveEvent.clientX
390
+ : mousemoveEvent.clientY;
391
+ const delta = current - start;
392
+ this.resize(sashIndex, delta, sizes, undefined, undefined, minDelta, maxDelta, snapBefore, snapAfter);
393
+ this.distributeEmptySpace();
394
+ this.layoutViews();
395
+ };
396
+ const end = () => {
397
+ for (const item of this.views) {
398
+ item.enabled = true;
399
+ }
400
+ for (const iframe of iframes) {
401
+ iframe.style.pointerEvents = 'auto';
402
+ }
403
+ this.saveProportions();
404
+ document.removeEventListener('mousemove', mousemove);
405
+ document.removeEventListener('mouseup', end);
406
+ document.removeEventListener('mouseend', end);
407
+ this._onDidSashEnd.fire(undefined);
408
+ };
409
+ document.addEventListener('mousemove', mousemove);
410
+ document.addEventListener('mouseup', end);
411
+ document.addEventListener('mouseend', end);
412
+ };
413
+ sash.addEventListener('mousedown', onStart);
414
+ const sashItem = {
415
+ container: sash,
416
+ disposable: () => {
417
+ sash.removeEventListener('mousedown', onStart);
418
+ this.sashContainer.removeChild(sash);
419
+ },
420
+ };
421
+ this.sashContainer.appendChild(sash);
422
+ this.sashes.push(sashItem);
423
+ }
424
+ if (!skipLayout) {
425
+ this.relayout([index]);
426
+ }
427
+ if (!skipLayout &&
428
+ typeof size !== 'number' &&
429
+ size.type === 'distribute') {
430
+ this.distributeViewSizes();
431
+ }
432
+ this._onDidAddView.fire(view);
433
+ }
434
+ distributeViewSizes() {
435
+ const flexibleViewItems = [];
436
+ let flexibleSize = 0;
437
+ for (const item of this.views) {
438
+ if (item.maximumSize - item.minimumSize > 0) {
439
+ flexibleViewItems.push(item);
440
+ flexibleSize += item.size;
441
+ }
442
+ }
443
+ const size = Math.floor(flexibleSize / flexibleViewItems.length);
444
+ for (const item of flexibleViewItems) {
445
+ item.size = clamp(size, item.minimumSize, item.maximumSize);
446
+ }
447
+ const indexes = range(this.views.length);
448
+ const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.Low);
449
+ const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
450
+ this.relayout(lowPriorityIndexes, highPriorityIndexes);
451
+ }
452
+ removeView(index, sizing, skipLayout = false) {
453
+ // Remove view
454
+ const viewItem = this.views.splice(index, 1)[0];
455
+ viewItem.dispose();
456
+ // Remove sash
457
+ if (this.views.length >= 1) {
458
+ const sashIndex = Math.max(index - 1, 0);
459
+ const sashItem = this.sashes.splice(sashIndex, 1)[0];
460
+ sashItem.disposable();
461
+ }
462
+ if (!skipLayout) {
463
+ this.relayout();
464
+ }
465
+ if (sizing && sizing.type === 'distribute') {
466
+ this.distributeViewSizes();
467
+ }
468
+ this._onDidRemoveView.fire(viewItem.view);
469
+ return viewItem.view;
470
+ }
471
+ getViewCachedVisibleSize(index) {
472
+ if (index < 0 || index >= this.views.length) {
473
+ throw new Error('Index out of bounds');
474
+ }
475
+ const viewItem = this.views[index];
476
+ return viewItem.cachedVisibleSize;
477
+ }
478
+ moveView(from, to) {
479
+ const cachedVisibleSize = this.getViewCachedVisibleSize(from);
480
+ const sizing = typeof cachedVisibleSize === 'undefined'
481
+ ? this.getViewSize(from)
482
+ : Sizing.Invisible(cachedVisibleSize);
483
+ const view = this.removeView(from, undefined, true);
484
+ this.addView(view, sizing, to);
485
+ }
486
+ layout(size, orthogonalSize) {
487
+ const previousSize = Math.max(this.size, this.contentSize);
488
+ this.size = size;
489
+ this.orthogonalSize = orthogonalSize;
490
+ if (!this.proportions) {
491
+ const indexes = range(this.views.length);
492
+ const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.Low);
493
+ const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
494
+ this.resize(this.views.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
495
+ }
496
+ else {
497
+ for (let i = 0; i < this.views.length; i++) {
498
+ const item = this.views[i];
499
+ item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
500
+ }
501
+ }
502
+ this.distributeEmptySpace();
503
+ this.layoutViews();
504
+ }
505
+ relayout(lowPriorityIndexes, highPriorityIndexes) {
506
+ const contentSize = this.views.reduce((r, i) => r + i.size, 0);
507
+ this.resize(this.views.length - 1, this._size - contentSize, undefined, lowPriorityIndexes, highPriorityIndexes);
508
+ this.distributeEmptySpace();
509
+ this.layoutViews();
510
+ this.saveProportions();
511
+ }
512
+ distributeEmptySpace(lowPriorityIndex) {
513
+ const contentSize = this.views.reduce((r, i) => r + i.size, 0);
514
+ let emptyDelta = this.size - contentSize;
515
+ const indexes = range(this.views.length - 1, -1);
516
+ const lowPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.Low);
517
+ const highPriorityIndexes = indexes.filter((i) => this.views[i].priority === LayoutPriority.High);
518
+ for (const index of highPriorityIndexes) {
519
+ pushToStart(indexes, index);
520
+ }
521
+ for (const index of lowPriorityIndexes) {
522
+ pushToEnd(indexes, index);
523
+ }
524
+ if (typeof lowPriorityIndex === 'number') {
525
+ pushToEnd(indexes, lowPriorityIndex);
526
+ }
527
+ for (let i = 0; emptyDelta !== 0 && i < indexes.length; i++) {
528
+ const item = this.views[indexes[i]];
529
+ const size = clamp(item.size + emptyDelta, item.minimumSize, item.maximumSize);
530
+ const viewDelta = size - item.size;
531
+ emptyDelta -= viewDelta;
532
+ item.size = size;
533
+ }
534
+ }
535
+ saveProportions() {
536
+ if (this.proportionalLayout && this.contentSize > 0) {
537
+ this._proportions = this.views.map((i) => i.size / this.contentSize);
538
+ }
539
+ }
540
+ layoutViews() {
541
+ this.contentSize = this.views.reduce((r, i) => r + i.size, 0);
542
+ let sum = 0;
543
+ const x = [];
544
+ this.updateSashEnablement();
545
+ for (let i = 0; i < this.views.length - 1; i++) {
546
+ sum += this.views[i].size;
547
+ x.push(sum);
548
+ const offset = Math.min(Math.max(0, sum - 2), this.size - 4);
549
+ if (this._orientation === Orientation.HORIZONTAL) {
550
+ this.sashes[i].container.style.left = `${offset}px`;
551
+ this.sashes[i].container.style.top = `0px`;
552
+ }
553
+ if (this._orientation === Orientation.VERTICAL) {
554
+ this.sashes[i].container.style.left = `0px`;
555
+ this.sashes[i].container.style.top = `${offset}px`;
556
+ }
557
+ }
558
+ this.views.forEach((view, i) => {
559
+ if (this._orientation === Orientation.HORIZONTAL) {
560
+ view.container.style.width = `${view.size}px`;
561
+ view.container.style.left = i == 0 ? '0px' : `${x[i - 1]}px`;
562
+ view.container.style.top = '';
563
+ view.container.style.height = '';
564
+ }
565
+ if (this._orientation === Orientation.VERTICAL) {
566
+ view.container.style.height = `${view.size}px`;
567
+ view.container.style.top = i == 0 ? '0px' : `${x[i - 1]}px`;
568
+ view.container.style.width = '';
569
+ view.container.style.left = '';
570
+ }
571
+ view.view.layout(view.size, this._orthogonalSize);
572
+ });
573
+ }
574
+ findFirstSnapIndex(indexes) {
575
+ // visible views first
576
+ for (const index of indexes) {
577
+ const viewItem = this.views[index];
578
+ if (!viewItem.visible) {
579
+ continue;
580
+ }
581
+ if (viewItem.snap) {
582
+ return index;
583
+ }
584
+ }
585
+ // then, hidden views
586
+ for (const index of indexes) {
587
+ const viewItem = this.views[index];
588
+ if (viewItem.visible &&
589
+ viewItem.maximumSize - viewItem.minimumSize > 0) {
590
+ return undefined;
591
+ }
592
+ if (!viewItem.visible && viewItem.snap) {
593
+ return index;
594
+ }
595
+ }
596
+ return undefined;
597
+ }
598
+ updateSashEnablement() {
599
+ let previous = false;
600
+ const collapsesDown = this.views.map((i) => (previous = i.size - i.minimumSize > 0 || previous));
601
+ previous = false;
602
+ const expandsDown = this.views.map((i) => (previous = i.maximumSize - i.size > 0 || previous));
603
+ const reverseViews = [...this.views].reverse();
604
+ previous = false;
605
+ const collapsesUp = reverseViews
606
+ .map((i) => (previous = i.size - i.minimumSize > 0 || previous))
607
+ .reverse();
608
+ previous = false;
609
+ const expandsUp = reverseViews
610
+ .map((i) => (previous = i.maximumSize - i.size > 0 || previous))
611
+ .reverse();
612
+ let position = 0;
613
+ for (let index = 0; index < this.sashes.length; index++) {
614
+ const sash = this.sashes[index];
615
+ const viewItem = this.views[index];
616
+ position += viewItem.size;
617
+ const min = !(collapsesDown[index] && expandsUp[index + 1]);
618
+ const max = !(expandsDown[index] && collapsesUp[index + 1]);
619
+ if (min && max) {
620
+ const upIndexes = range(index, -1);
621
+ const downIndexes = range(index + 1, this.views.length);
622
+ const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
623
+ const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
624
+ const snappedBefore = typeof snapBeforeIndex === 'number' &&
625
+ !this.views[snapBeforeIndex].visible;
626
+ const snappedAfter = typeof snapAfterIndex === 'number' &&
627
+ !this.views[snapAfterIndex].visible;
628
+ if (snappedBefore &&
629
+ collapsesUp[index] &&
630
+ (position > 0 || this.startSnappingEnabled)) {
631
+ this.updateSash(sash, SashState.MINIMUM);
632
+ }
633
+ else if (snappedAfter &&
634
+ collapsesDown[index] &&
635
+ (position < this.contentSize || this.endSnappingEnabled)) {
636
+ this.updateSash(sash, SashState.MAXIMUM);
637
+ }
638
+ else {
639
+ this.updateSash(sash, SashState.DISABLED);
640
+ }
641
+ }
642
+ else if (min && !max) {
643
+ this.updateSash(sash, SashState.MINIMUM);
644
+ }
645
+ else if (!min && max) {
646
+ this.updateSash(sash, SashState.MAXIMUM);
647
+ }
648
+ else {
649
+ this.updateSash(sash, SashState.ENABLED);
650
+ }
651
+ }
652
+ }
653
+ updateSash(sash, state) {
654
+ toggleClass(sash.container, 'disabled', state === SashState.DISABLED);
655
+ toggleClass(sash.container, 'enabled', state === SashState.ENABLED);
656
+ toggleClass(sash.container, 'maximum', state === SashState.MAXIMUM);
657
+ toggleClass(sash.container, 'minimum', state === SashState.MINIMUM);
658
+ }
659
+ createViewContainer() {
660
+ const element = document.createElement('div');
661
+ element.className = 'view-container';
662
+ return element;
663
+ }
664
+ createSashContainer() {
665
+ const element = document.createElement('div');
666
+ element.className = 'sash-container';
667
+ return element;
668
+ }
669
+ createContainer() {
670
+ const element = document.createElement('div');
671
+ const orientationClassname = this._orientation === Orientation.HORIZONTAL
672
+ ? 'horizontal'
673
+ : 'vertical';
674
+ element.className = `split-view-container ${orientationClassname}`;
675
+ return element;
676
+ }
677
+ dispose() {
678
+ this._onDidSashEnd.dispose();
679
+ this._onDidAddView.dispose();
680
+ this._onDidRemoveView.dispose();
681
+ for (let i = 0; i < this.element.children.length; i++) {
682
+ if (this.element.children.item(i) === this.element) {
683
+ this.element.removeChild(this.element);
684
+ break;
685
+ }
686
+ }
687
+ this.element.remove();
688
+ }
689
+ }