dockview-core 1.8.3 → 1.8.5

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