dockview-core 1.6.0 → 1.7.1

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