dockview-core 1.7.0 → 1.7.2

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