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