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