dockview-core 1.8.4 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/README.md +58 -51
  2. package/dist/cjs/api/component.api.d.ts +467 -152
  3. package/dist/cjs/api/component.api.d.ts.map +1 -1
  4. package/dist/cjs/api/component.api.js +917 -592
  5. package/dist/cjs/api/component.api.js.map +1 -1
  6. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +36 -29
  7. package/dist/cjs/api/dockviewGroupPanelApi.d.ts.map +1 -1
  8. package/dist/cjs/api/dockviewGroupPanelApi.js +83 -53
  9. package/dist/cjs/api/dockviewGroupPanelApi.js.map +1 -1
  10. package/dist/cjs/api/dockviewPanelApi.d.ts +64 -47
  11. package/dist/cjs/api/dockviewPanelApi.d.ts.map +1 -1
  12. package/dist/cjs/api/dockviewPanelApi.js +108 -88
  13. package/dist/cjs/api/dockviewPanelApi.js.map +1 -1
  14. package/dist/cjs/api/gridviewPanelApi.d.ts +37 -37
  15. package/dist/cjs/api/gridviewPanelApi.js +47 -47
  16. package/dist/cjs/api/gridviewPanelApi.js.map +1 -1
  17. package/dist/cjs/api/panelApi.d.ts +88 -88
  18. package/dist/cjs/api/panelApi.js +135 -135
  19. package/dist/cjs/api/panelApi.js.map +1 -1
  20. package/dist/cjs/api/paneviewPanelApi.d.ts +26 -26
  21. package/dist/cjs/api/paneviewPanelApi.js +57 -57
  22. package/dist/cjs/api/paneviewPanelApi.js.map +1 -1
  23. package/dist/cjs/api/splitviewPanelApi.d.ts +32 -32
  24. package/dist/cjs/api/splitviewPanelApi.js +47 -47
  25. package/dist/cjs/api/splitviewPanelApi.js.map +1 -1
  26. package/dist/cjs/array.d.ts +13 -13
  27. package/dist/cjs/array.js +67 -67
  28. package/dist/cjs/array.js.map +1 -1
  29. package/dist/cjs/constants.d.ts +6 -0
  30. package/dist/cjs/constants.d.ts.map +1 -0
  31. package/dist/cjs/constants.js +6 -0
  32. package/dist/cjs/constants.js.map +1 -0
  33. package/dist/cjs/dnd/abstractDragHandler.d.ts +12 -12
  34. package/dist/cjs/dnd/abstractDragHandler.js +141 -141
  35. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  36. package/dist/cjs/dnd/dataTransfer.d.ts +30 -31
  37. package/dist/cjs/dnd/dataTransfer.d.ts.map +1 -1
  38. package/dist/cjs/dnd/dataTransfer.js +99 -100
  39. package/dist/cjs/dnd/dataTransfer.js.map +1 -1
  40. package/dist/cjs/dnd/dnd.d.ts +32 -27
  41. package/dist/cjs/dnd/dnd.d.ts.map +1 -1
  42. package/dist/cjs/dnd/dnd.js +74 -59
  43. package/dist/cjs/dnd/dnd.js.map +1 -1
  44. package/dist/cjs/dnd/droptarget.d.ts +55 -53
  45. package/dist/cjs/dnd/droptarget.d.ts.map +1 -1
  46. package/dist/cjs/dnd/droptarget.js +305 -304
  47. package/dist/cjs/dnd/droptarget.js.map +1 -1
  48. package/dist/cjs/dnd/ghost.d.ts +1 -1
  49. package/dist/cjs/dnd/ghost.js +15 -15
  50. package/dist/cjs/dnd/groupDragHandler.d.ts +12 -12
  51. package/dist/cjs/dnd/groupDragHandler.js +77 -77
  52. package/dist/cjs/dnd/groupDragHandler.js.map +1 -1
  53. package/dist/cjs/dnd/overlay.d.ts +30 -43
  54. package/dist/cjs/dnd/overlay.d.ts.map +1 -1
  55. package/dist/cjs/dnd/overlay.js +412 -412
  56. package/dist/cjs/dnd/overlay.js.map +1 -1
  57. package/dist/cjs/dockview/components/panel/content.d.ts +43 -30
  58. package/dist/cjs/dockview/components/panel/content.d.ts.map +1 -1
  59. package/dist/cjs/dockview/components/panel/content.js +159 -100
  60. package/dist/cjs/dockview/components/panel/content.js.map +1 -1
  61. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +21 -21
  62. package/dist/cjs/dockview/components/tab/defaultTab.js +105 -105
  63. package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
  64. package/dist/cjs/dockview/components/tab/tab.d.ts +34 -34
  65. package/dist/cjs/dockview/components/tab/tab.js +120 -120
  66. package/dist/cjs/dockview/components/tab/tab.js.map +1 -1
  67. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +81 -81
  68. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +325 -325
  69. package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -1
  70. package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +17 -17
  71. package/dist/cjs/dockview/components/titlebar/voidContainer.js +77 -77
  72. package/dist/cjs/dockview/components/titlebar/voidContainer.js.map +1 -1
  73. package/dist/cjs/dockview/components/watermark/watermark.d.ts +18 -18
  74. package/dist/cjs/dockview/components/watermark/watermark.js +87 -87
  75. package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -1
  76. package/dist/cjs/dockview/deserializer.d.ts +12 -12
  77. package/dist/cjs/dockview/deserializer.d.ts.map +1 -1
  78. package/dist/cjs/dockview/deserializer.js +35 -33
  79. package/dist/cjs/dockview/deserializer.js.map +1 -1
  80. package/dist/cjs/dockview/dockviewComponent.d.ts +171 -159
  81. package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
  82. package/dist/cjs/dockview/dockviewComponent.js +1354 -1156
  83. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  84. package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +23 -23
  85. package/dist/cjs/dockview/dockviewFloatingGroupPanel.js +34 -34
  86. package/dist/cjs/dockview/dockviewFloatingGroupPanel.js.map +1 -1
  87. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +30 -30
  88. package/dist/cjs/dockview/dockviewGroupPanel.d.ts.map +1 -1
  89. package/dist/cjs/dockview/dockviewGroupPanel.js +99 -97
  90. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  91. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +186 -185
  92. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  93. package/dist/cjs/dockview/dockviewGroupPanelModel.js +626 -631
  94. package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
  95. package/dist/cjs/dockview/dockviewPanel.d.ts +48 -41
  96. package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -1
  97. package/dist/cjs/dockview/dockviewPanel.js +194 -171
  98. package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
  99. package/dist/cjs/dockview/dockviewPanelModel.d.ts +35 -35
  100. package/dist/cjs/dockview/dockviewPanelModel.js +98 -98
  101. package/dist/cjs/dockview/dockviewPanelModel.js.map +1 -1
  102. package/dist/cjs/dockview/dockviewPopoutGroupPanel.d.ts +16 -0
  103. package/dist/cjs/dockview/dockviewPopoutGroupPanel.d.ts.map +1 -0
  104. package/dist/cjs/dockview/dockviewPopoutGroupPanel.js +50 -0
  105. package/dist/cjs/dockview/dockviewPopoutGroupPanel.js.map +1 -0
  106. package/dist/cjs/dockview/options.d.ts +138 -136
  107. package/dist/cjs/dockview/options.d.ts.map +1 -1
  108. package/dist/cjs/dockview/options.js +31 -31
  109. package/dist/cjs/dockview/options.js.map +1 -1
  110. package/dist/cjs/dockview/types.d.ts +65 -63
  111. package/dist/cjs/dockview/types.d.ts.map +1 -1
  112. package/dist/cjs/dockview/types.js +10 -10
  113. package/dist/cjs/dockview/types.js.map +1 -1
  114. package/dist/cjs/dom.d.ts +28 -16
  115. package/dist/cjs/dom.d.ts.map +1 -1
  116. package/dist/cjs/dom.js +276 -197
  117. package/dist/cjs/dom.js.map +1 -1
  118. package/dist/cjs/events.d.ts +47 -47
  119. package/dist/cjs/events.js +216 -216
  120. package/dist/cjs/events.js.map +1 -1
  121. package/dist/cjs/gridview/baseComponentGridview.d.ts +98 -87
  122. package/dist/cjs/gridview/baseComponentGridview.d.ts.map +1 -1
  123. package/dist/cjs/gridview/baseComponentGridview.js +289 -270
  124. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  125. package/dist/cjs/gridview/basePanelView.d.ts +40 -40
  126. package/dist/cjs/gridview/basePanelView.js +156 -156
  127. package/dist/cjs/gridview/basePanelView.js.map +1 -1
  128. package/dist/cjs/gridview/branchNode.d.ts +51 -49
  129. package/dist/cjs/gridview/branchNode.d.ts.map +1 -1
  130. package/dist/cjs/gridview/branchNode.js +370 -343
  131. package/dist/cjs/gridview/branchNode.js.map +1 -1
  132. package/dist/cjs/gridview/gridview.d.ts +140 -133
  133. package/dist/cjs/gridview/gridview.d.ts.map +1 -1
  134. package/dist/cjs/gridview/gridview.js +627 -547
  135. package/dist/cjs/gridview/gridview.js.map +1 -1
  136. package/dist/cjs/gridview/gridviewComponent.d.ts +80 -80
  137. package/dist/cjs/gridview/gridviewComponent.d.ts.map +1 -1
  138. package/dist/cjs/gridview/gridviewComponent.js +362 -360
  139. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  140. package/dist/cjs/gridview/gridviewPanel.d.ts +65 -65
  141. package/dist/cjs/gridview/gridviewPanel.js +214 -214
  142. package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
  143. package/dist/cjs/gridview/leafNode.d.ts +34 -34
  144. package/dist/cjs/gridview/leafNode.d.ts.map +1 -1
  145. package/dist/cjs/gridview/leafNode.js +169 -170
  146. package/dist/cjs/gridview/leafNode.js.map +1 -1
  147. package/dist/cjs/gridview/options.d.ts +17 -18
  148. package/dist/cjs/gridview/options.d.ts.map +1 -1
  149. package/dist/cjs/gridview/options.js +2 -2
  150. package/dist/cjs/gridview/types.d.ts +3 -3
  151. package/dist/cjs/gridview/types.js +2 -2
  152. package/dist/cjs/index.d.ts +43 -42
  153. package/dist/cjs/index.d.ts.map +1 -1
  154. package/dist/cjs/index.js +61 -61
  155. package/dist/cjs/index.js.map +1 -1
  156. package/dist/cjs/lifecycle.d.ts +24 -23
  157. package/dist/cjs/lifecycle.d.ts.map +1 -1
  158. package/dist/cjs/lifecycle.js +73 -65
  159. package/dist/cjs/lifecycle.js.map +1 -1
  160. package/dist/cjs/math.d.ts +5 -5
  161. package/dist/cjs/math.js +34 -34
  162. package/dist/cjs/math.js.map +1 -1
  163. package/dist/cjs/overlayRenderContainer.d.ts +19 -0
  164. package/dist/cjs/overlayRenderContainer.d.ts.map +1 -0
  165. package/dist/cjs/overlayRenderContainer.js +170 -0
  166. package/dist/cjs/overlayRenderContainer.js.map +1 -0
  167. package/dist/cjs/panel/componentFactory.d.ts +11 -10
  168. package/dist/cjs/panel/componentFactory.d.ts.map +1 -1
  169. package/dist/cjs/panel/componentFactory.js +30 -30
  170. package/dist/cjs/panel/componentFactory.js.map +1 -1
  171. package/dist/cjs/panel/types.d.ts +33 -33
  172. package/dist/cjs/panel/types.js +2 -2
  173. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +21 -21
  174. package/dist/cjs/paneview/defaultPaneviewHeader.js +90 -90
  175. package/dist/cjs/paneview/defaultPaneviewHeader.js.map +1 -1
  176. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +21 -21
  177. package/dist/cjs/paneview/draggablePaneviewPanel.js +131 -131
  178. package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
  179. package/dist/cjs/paneview/options.d.ts +25 -28
  180. package/dist/cjs/paneview/options.d.ts.map +1 -1
  181. package/dist/cjs/paneview/options.js +2 -2
  182. package/dist/cjs/paneview/paneview.d.ts +40 -40
  183. package/dist/cjs/paneview/paneview.d.ts.map +1 -1
  184. package/dist/cjs/paneview/paneview.js +200 -201
  185. package/dist/cjs/paneview/paneview.js.map +1 -1
  186. package/dist/cjs/paneview/paneviewComponent.d.ts +128 -128
  187. package/dist/cjs/paneview/paneviewComponent.js +400 -397
  188. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  189. package/dist/cjs/paneview/paneviewPanel.d.ts +92 -92
  190. package/dist/cjs/paneview/paneviewPanel.d.ts.map +1 -1
  191. package/dist/cjs/paneview/paneviewPanel.js +275 -275
  192. package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
  193. package/dist/cjs/popoutWindow.d.ts +18 -0
  194. package/dist/cjs/popoutWindow.d.ts.map +1 -0
  195. package/dist/cjs/popoutWindow.js +130 -0
  196. package/dist/cjs/popoutWindow.js.map +1 -0
  197. package/dist/cjs/resizable.d.ts +10 -7
  198. package/dist/cjs/resizable.d.ts.map +1 -1
  199. package/dist/cjs/resizable.js +79 -64
  200. package/dist/cjs/resizable.js.map +1 -1
  201. package/dist/cjs/splitview/options.d.ts +26 -27
  202. package/dist/cjs/splitview/options.d.ts.map +1 -1
  203. package/dist/cjs/splitview/options.js +2 -2
  204. package/dist/cjs/splitview/splitview.d.ts +129 -128
  205. package/dist/cjs/splitview/splitview.d.ts.map +1 -1
  206. package/dist/cjs/splitview/splitview.js +959 -936
  207. package/dist/cjs/splitview/splitview.js.map +1 -1
  208. package/dist/cjs/splitview/splitviewComponent.d.ts +101 -101
  209. package/dist/cjs/splitview/splitviewComponent.js +395 -392
  210. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  211. package/dist/cjs/splitview/splitviewPanel.d.ts +45 -45
  212. package/dist/cjs/splitview/splitviewPanel.d.ts.map +1 -1
  213. package/dist/cjs/splitview/splitviewPanel.js +179 -179
  214. package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
  215. package/dist/cjs/splitview/viewItem.d.ts +25 -25
  216. package/dist/cjs/splitview/viewItem.js +119 -119
  217. package/dist/cjs/splitview/viewItem.js.map +1 -1
  218. package/dist/cjs/svg.d.ts +3 -3
  219. package/dist/cjs/svg.js +43 -43
  220. package/dist/cjs/types.d.ts +8 -2
  221. package/dist/cjs/types.d.ts.map +1 -1
  222. package/dist/cjs/types.js +2 -2
  223. package/dist/dockview-core.amd.js +8374 -7314
  224. package/dist/dockview-core.amd.js.map +1 -1
  225. package/dist/dockview-core.amd.min.js +2 -2
  226. package/dist/dockview-core.amd.min.js.map +1 -1
  227. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  228. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  229. package/dist/dockview-core.amd.noStyle.js +8328 -7268
  230. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  231. package/dist/dockview-core.cjs.js +8374 -7314
  232. package/dist/dockview-core.cjs.js.map +1 -1
  233. package/dist/dockview-core.esm.js +8374 -7314
  234. package/dist/dockview-core.esm.js.map +1 -1
  235. package/dist/dockview-core.esm.min.js +2 -2
  236. package/dist/dockview-core.esm.min.js.map +1 -1
  237. package/dist/dockview-core.js +8374 -7314
  238. package/dist/dockview-core.js.map +1 -1
  239. package/dist/dockview-core.min.js +2 -2
  240. package/dist/dockview-core.min.js.map +1 -1
  241. package/dist/dockview-core.min.noStyle.js +2 -2
  242. package/dist/dockview-core.min.noStyle.js.map +1 -1
  243. package/dist/dockview-core.noStyle.js +8328 -7268
  244. package/dist/dockview-core.noStyle.js.map +1 -1
  245. package/dist/esm/api/component.api.d.ts +467 -152
  246. package/dist/esm/api/component.api.d.ts.map +1 -1
  247. package/dist/esm/api/component.api.js +656 -335
  248. package/dist/esm/api/component.api.js.map +1 -1
  249. package/dist/esm/api/dockviewGroupPanelApi.d.ts +36 -29
  250. package/dist/esm/api/dockviewGroupPanelApi.d.ts.map +1 -1
  251. package/dist/esm/api/dockviewGroupPanelApi.js +57 -27
  252. package/dist/esm/api/dockviewGroupPanelApi.js.map +1 -1
  253. package/dist/esm/api/dockviewPanelApi.d.ts +64 -47
  254. package/dist/esm/api/dockviewPanelApi.d.ts.map +1 -1
  255. package/dist/esm/api/dockviewPanelApi.js +69 -53
  256. package/dist/esm/api/dockviewPanelApi.js.map +1 -1
  257. package/dist/esm/api/gridviewPanelApi.d.ts +37 -37
  258. package/dist/esm/api/gridviewPanelApi.js +25 -25
  259. package/dist/esm/api/gridviewPanelApi.js.map +1 -1
  260. package/dist/esm/api/panelApi.d.ts +88 -88
  261. package/dist/esm/api/panelApi.js +93 -93
  262. package/dist/esm/api/paneviewPanelApi.d.ts +26 -26
  263. package/dist/esm/api/paneviewPanelApi.js +27 -27
  264. package/dist/esm/api/splitviewPanelApi.d.ts +32 -32
  265. package/dist/esm/api/splitviewPanelApi.js +25 -25
  266. package/dist/esm/array.d.ts +13 -13
  267. package/dist/esm/array.js +57 -57
  268. package/dist/esm/array.js.map +1 -1
  269. package/dist/esm/constants.d.ts +6 -0
  270. package/dist/esm/constants.d.ts.map +1 -0
  271. package/dist/esm/constants.js +3 -0
  272. package/dist/esm/constants.js.map +1 -0
  273. package/dist/esm/dnd/abstractDragHandler.d.ts +12 -12
  274. package/dist/esm/dnd/abstractDragHandler.js +63 -63
  275. package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
  276. package/dist/esm/dnd/dataTransfer.d.ts +30 -31
  277. package/dist/esm/dnd/dataTransfer.d.ts.map +1 -1
  278. package/dist/esm/dnd/dataTransfer.js +66 -69
  279. package/dist/esm/dnd/dataTransfer.js.map +1 -1
  280. package/dist/esm/dnd/dnd.d.ts +32 -27
  281. package/dist/esm/dnd/dnd.d.ts.map +1 -1
  282. package/dist/esm/dnd/dnd.js +51 -36
  283. package/dist/esm/dnd/dnd.js.map +1 -1
  284. package/dist/esm/dnd/droptarget.d.ts +55 -53
  285. package/dist/esm/dnd/droptarget.d.ts.map +1 -1
  286. package/dist/esm/dnd/droptarget.js +275 -274
  287. package/dist/esm/dnd/droptarget.js.map +1 -1
  288. package/dist/esm/dnd/ghost.d.ts +1 -1
  289. package/dist/esm/dnd/ghost.js +11 -11
  290. package/dist/esm/dnd/groupDragHandler.d.ts +12 -12
  291. package/dist/esm/dnd/groupDragHandler.js +54 -54
  292. package/dist/esm/dnd/groupDragHandler.js.map +1 -1
  293. package/dist/esm/dnd/overlay.d.ts +30 -43
  294. package/dist/esm/dnd/overlay.d.ts.map +1 -1
  295. package/dist/esm/dnd/overlay.js +304 -304
  296. package/dist/esm/dnd/overlay.js.map +1 -1
  297. package/dist/esm/dockview/components/panel/content.d.ts +43 -30
  298. package/dist/esm/dockview/components/panel/content.d.ts.map +1 -1
  299. package/dist/esm/dockview/components/panel/content.js +131 -73
  300. package/dist/esm/dockview/components/panel/content.js.map +1 -1
  301. package/dist/esm/dockview/components/tab/defaultTab.d.ts +21 -21
  302. package/dist/esm/dockview/components/tab/defaultTab.js +67 -67
  303. package/dist/esm/dockview/components/tab/defaultTab.js.map +1 -1
  304. package/dist/esm/dockview/components/tab/tab.d.ts +34 -34
  305. package/dist/esm/dockview/components/tab/tab.js +90 -90
  306. package/dist/esm/dockview/components/tab/tab.js.map +1 -1
  307. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +81 -81
  308. package/dist/esm/dockview/components/titlebar/tabsContainer.js +239 -239
  309. package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
  310. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +17 -17
  311. package/dist/esm/dockview/components/titlebar/voidContainer.js +51 -51
  312. package/dist/esm/dockview/components/titlebar/voidContainer.js.map +1 -1
  313. package/dist/esm/dockview/components/watermark/watermark.d.ts +18 -18
  314. package/dist/esm/dockview/components/watermark/watermark.js +61 -61
  315. package/dist/esm/dockview/components/watermark/watermark.js.map +1 -1
  316. package/dist/esm/dockview/deserializer.d.ts +12 -12
  317. package/dist/esm/dockview/deserializer.d.ts.map +1 -1
  318. package/dist/esm/dockview/deserializer.js +30 -28
  319. package/dist/esm/dockview/deserializer.js.map +1 -1
  320. package/dist/esm/dockview/dockviewComponent.d.ts +171 -159
  321. package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
  322. package/dist/esm/dockview/dockviewComponent.js +1078 -918
  323. package/dist/esm/dockview/dockviewComponent.js.map +1 -1
  324. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +23 -23
  325. package/dist/esm/dockview/dockviewFloatingGroupPanel.js +12 -12
  326. package/dist/esm/dockview/dockviewGroupPanel.d.ts +30 -30
  327. package/dist/esm/dockview/dockviewGroupPanel.d.ts.map +1 -1
  328. package/dist/esm/dockview/dockviewGroupPanel.js +53 -51
  329. package/dist/esm/dockview/dockviewGroupPanel.js.map +1 -1
  330. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +186 -185
  331. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts.map +1 -1
  332. package/dist/esm/dockview/dockviewGroupPanelModel.js +493 -498
  333. package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
  334. package/dist/esm/dockview/dockviewPanel.d.ts +48 -41
  335. package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
  336. package/dist/esm/dockview/dockviewPanel.js +123 -104
  337. package/dist/esm/dockview/dockviewPanel.js.map +1 -1
  338. package/dist/esm/dockview/dockviewPanelModel.d.ts +35 -35
  339. package/dist/esm/dockview/dockviewPanelModel.js +74 -74
  340. package/dist/esm/dockview/dockviewPanelModel.js.map +1 -1
  341. package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts +16 -0
  342. package/dist/esm/dockview/dockviewPopoutGroupPanel.d.ts.map +1 -0
  343. package/dist/esm/dockview/dockviewPopoutGroupPanel.js +28 -0
  344. package/dist/esm/dockview/dockviewPopoutGroupPanel.js.map +1 -0
  345. package/dist/esm/dockview/options.d.ts +138 -136
  346. package/dist/esm/dockview/options.d.ts.map +1 -1
  347. package/dist/esm/dockview/options.js +24 -24
  348. package/dist/esm/dockview/options.js.map +1 -1
  349. package/dist/esm/dockview/types.d.ts +65 -63
  350. package/dist/esm/dockview/types.d.ts.map +1 -1
  351. package/dist/esm/dockview/types.js +7 -7
  352. package/dist/esm/dockview/types.js.map +1 -1
  353. package/dist/esm/dom.d.ts +28 -16
  354. package/dist/esm/dom.d.ts.map +1 -1
  355. package/dist/esm/dom.js +181 -126
  356. package/dist/esm/dom.js.map +1 -1
  357. package/dist/esm/events.d.ts +47 -47
  358. package/dist/esm/events.js +156 -156
  359. package/dist/esm/events.js.map +1 -1
  360. package/dist/esm/gridview/baseComponentGridview.d.ts +98 -87
  361. package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -1
  362. package/dist/esm/gridview/baseComponentGridview.js +199 -184
  363. package/dist/esm/gridview/baseComponentGridview.js.map +1 -1
  364. package/dist/esm/gridview/basePanelView.d.ts +40 -40
  365. package/dist/esm/gridview/basePanelView.js +85 -85
  366. package/dist/esm/gridview/basePanelView.js.map +1 -1
  367. package/dist/esm/gridview/branchNode.d.ts +51 -49
  368. package/dist/esm/gridview/branchNode.d.ts.map +1 -1
  369. package/dist/esm/gridview/branchNode.js +240 -219
  370. package/dist/esm/gridview/branchNode.js.map +1 -1
  371. package/dist/esm/gridview/gridview.d.ts +140 -133
  372. package/dist/esm/gridview/gridview.d.ts.map +1 -1
  373. package/dist/esm/gridview/gridview.js +541 -461
  374. package/dist/esm/gridview/gridview.js.map +1 -1
  375. package/dist/esm/gridview/gridviewComponent.d.ts +80 -80
  376. package/dist/esm/gridview/gridviewComponent.d.ts.map +1 -1
  377. package/dist/esm/gridview/gridviewComponent.js +264 -262
  378. package/dist/esm/gridview/gridviewComponent.js.map +1 -1
  379. package/dist/esm/gridview/gridviewPanel.d.ts +65 -65
  380. package/dist/esm/gridview/gridviewPanel.js +151 -151
  381. package/dist/esm/gridview/gridviewPanel.js.map +1 -1
  382. package/dist/esm/gridview/leafNode.d.ts +34 -34
  383. package/dist/esm/gridview/leafNode.d.ts.map +1 -1
  384. package/dist/esm/gridview/leafNode.js +102 -103
  385. package/dist/esm/gridview/leafNode.js.map +1 -1
  386. package/dist/esm/gridview/options.d.ts +17 -18
  387. package/dist/esm/gridview/options.d.ts.map +1 -1
  388. package/dist/esm/gridview/options.js +1 -1
  389. package/dist/esm/gridview/types.d.ts +3 -3
  390. package/dist/esm/gridview/types.js +1 -1
  391. package/dist/esm/index.d.ts +43 -42
  392. package/dist/esm/index.d.ts.map +1 -1
  393. package/dist/esm/index.js +34 -34
  394. package/dist/esm/index.js.map +1 -1
  395. package/dist/esm/lifecycle.d.ts +24 -23
  396. package/dist/esm/lifecycle.d.ts.map +1 -1
  397. package/dist/esm/lifecycle.js +49 -41
  398. package/dist/esm/lifecycle.js.map +1 -1
  399. package/dist/esm/math.d.ts +5 -5
  400. package/dist/esm/math.js +28 -28
  401. package/dist/esm/math.js.map +1 -1
  402. package/dist/esm/overlayRenderContainer.d.ts +19 -0
  403. package/dist/esm/overlayRenderContainer.d.ts.map +1 -0
  404. package/dist/esm/overlayRenderContainer.js +125 -0
  405. package/dist/esm/overlayRenderContainer.js.map +1 -0
  406. package/dist/esm/panel/componentFactory.d.ts +11 -10
  407. package/dist/esm/panel/componentFactory.d.ts.map +1 -1
  408. package/dist/esm/panel/componentFactory.js +24 -24
  409. package/dist/esm/panel/componentFactory.js.map +1 -1
  410. package/dist/esm/panel/types.d.ts +33 -33
  411. package/dist/esm/panel/types.js +1 -1
  412. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +21 -21
  413. package/dist/esm/paneview/defaultPaneviewHeader.js +63 -63
  414. package/dist/esm/paneview/defaultPaneviewHeader.js.map +1 -1
  415. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +21 -21
  416. package/dist/esm/paneview/draggablePaneviewPanel.js +92 -92
  417. package/dist/esm/paneview/draggablePaneviewPanel.js.map +1 -1
  418. package/dist/esm/paneview/options.d.ts +25 -28
  419. package/dist/esm/paneview/options.d.ts.map +1 -1
  420. package/dist/esm/paneview/options.js +1 -1
  421. package/dist/esm/paneview/paneview.d.ts +40 -40
  422. package/dist/esm/paneview/paneview.d.ts.map +1 -1
  423. package/dist/esm/paneview/paneview.js +145 -145
  424. package/dist/esm/paneview/paneview.js.map +1 -1
  425. package/dist/esm/paneview/paneviewComponent.d.ts +128 -128
  426. package/dist/esm/paneview/paneviewComponent.js +276 -273
  427. package/dist/esm/paneview/paneviewComponent.js.map +1 -1
  428. package/dist/esm/paneview/paneviewPanel.d.ts +92 -92
  429. package/dist/esm/paneview/paneviewPanel.d.ts.map +1 -1
  430. package/dist/esm/paneview/paneviewPanel.js +192 -192
  431. package/dist/esm/paneview/paneviewPanel.js.map +1 -1
  432. package/dist/esm/popoutWindow.d.ts +18 -0
  433. package/dist/esm/popoutWindow.d.ts.map +1 -0
  434. package/dist/esm/popoutWindow.js +88 -0
  435. package/dist/esm/popoutWindow.js.map +1 -0
  436. package/dist/esm/resizable.d.ts +10 -7
  437. package/dist/esm/resizable.d.ts.map +1 -1
  438. package/dist/esm/resizable.js +48 -38
  439. package/dist/esm/resizable.js.map +1 -1
  440. package/dist/esm/splitview/options.d.ts +26 -27
  441. package/dist/esm/splitview/options.d.ts.map +1 -1
  442. package/dist/esm/splitview/options.js +1 -1
  443. package/dist/esm/splitview/splitview.d.ts +129 -128
  444. package/dist/esm/splitview/splitview.d.ts.map +1 -1
  445. package/dist/esm/splitview/splitview.js +721 -704
  446. package/dist/esm/splitview/splitview.js.map +1 -1
  447. package/dist/esm/splitview/splitviewComponent.d.ts +101 -101
  448. package/dist/esm/splitview/splitviewComponent.js +261 -258
  449. package/dist/esm/splitview/splitviewComponent.js.map +1 -1
  450. package/dist/esm/splitview/splitviewPanel.d.ts +45 -45
  451. package/dist/esm/splitview/splitviewPanel.d.ts.map +1 -1
  452. package/dist/esm/splitview/splitviewPanel.js +108 -108
  453. package/dist/esm/splitview/splitviewPanel.js.map +1 -1
  454. package/dist/esm/splitview/viewItem.d.ts +25 -25
  455. package/dist/esm/splitview/viewItem.js +74 -74
  456. package/dist/esm/splitview/viewItem.js.map +1 -1
  457. package/dist/esm/svg.d.ts +3 -3
  458. package/dist/esm/svg.js +31 -31
  459. package/dist/esm/types.d.ts +8 -2
  460. package/dist/esm/types.d.ts.map +1 -1
  461. package/dist/esm/types.js +1 -1
  462. package/dist/styles/dockview.css +33 -2
  463. package/package.json +30 -42
  464. package/LICENSE +0 -21
@@ -1,462 +1,542 @@
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/grid
4
- *--------------------------------------------------------------------------------------------*/
5
- import { Orientation, Sizing, } from '../splitview/splitview';
6
- import { tail } from '../array';
7
- import { LeafNode } from './leafNode';
8
- import { BranchNode } from './branchNode';
9
- import { Emitter } from '../events';
10
- import { MutableDisposable } from '../lifecycle';
11
- function findLeaf(candiateNode, last) {
12
- if (candiateNode instanceof LeafNode) {
13
- return candiateNode;
14
- }
15
- if (candiateNode instanceof BranchNode) {
16
- return findLeaf(candiateNode.children[last ? candiateNode.children.length - 1 : 0], last);
17
- }
18
- throw new Error('invalid node');
19
- }
20
- function flipNode(node, size, orthogonalSize) {
21
- if (node instanceof BranchNode) {
22
- const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize);
23
- let totalSize = 0;
24
- for (let i = node.children.length - 1; i >= 0; i--) {
25
- const child = node.children[i];
26
- const childSize = child instanceof BranchNode ? child.orthogonalSize : child.size;
27
- let newSize = node.size === 0
28
- ? 0
29
- : Math.round((size * childSize) / node.size);
30
- totalSize += newSize;
31
- // The last view to add should adjust to rounding errors
32
- if (i === 0) {
33
- newSize += size - totalSize;
34
- }
35
- result.addChild(flipNode(child, orthogonalSize, newSize), newSize, 0, true);
36
- }
37
- return result;
38
- }
39
- else {
40
- return new LeafNode(node.view, orthogonal(node.orientation), orthogonalSize);
41
- }
42
- }
43
- export function indexInParent(element) {
44
- const parentElement = element.parentElement;
45
- if (!parentElement) {
46
- throw new Error('Invalid grid element');
47
- }
48
- let el = parentElement.firstElementChild;
49
- let index = 0;
50
- while (el !== element && el !== parentElement.lastElementChild && el) {
51
- el = el.nextElementSibling;
52
- index++;
53
- }
54
- return index;
55
- }
56
- /**
57
- * Find the grid location of a specific DOM element by traversing the parent
58
- * chain and finding each child index on the way.
59
- *
60
- * This will break as soon as DOM structures of the Splitview or Gridview change.
61
- */
62
- export function getGridLocation(element) {
63
- const parentElement = element.parentElement;
64
- if (!parentElement) {
65
- throw new Error('Invalid grid element');
66
- }
67
- if (/\bgrid-view\b/.test(parentElement.className)) {
68
- return [];
69
- }
70
- const index = indexInParent(parentElement);
71
- const ancestor = parentElement.parentElement.parentElement.parentElement;
72
- return [...getGridLocation(ancestor), index];
73
- }
74
- export function getRelativeLocation(rootOrientation, location, direction) {
75
- const orientation = getLocationOrientation(rootOrientation, location);
76
- const directionOrientation = getDirectionOrientation(direction);
77
- if (orientation === directionOrientation) {
78
- const [rest, _index] = tail(location);
79
- let index = _index;
80
- if (direction === 'right' || direction === 'bottom') {
81
- index += 1;
82
- }
83
- return [...rest, index];
84
- }
85
- else {
86
- const index = direction === 'right' || direction === 'bottom' ? 1 : 0;
87
- return [...location, index];
88
- }
89
- }
90
- export function getDirectionOrientation(direction) {
91
- return direction === 'top' || direction === 'bottom'
92
- ? Orientation.VERTICAL
93
- : Orientation.HORIZONTAL;
94
- }
95
- export function getLocationOrientation(rootOrientation, location) {
96
- return location.length % 2 === 0
97
- ? orthogonal(rootOrientation)
98
- : rootOrientation;
99
- }
100
- export const orthogonal = (orientation) => orientation === Orientation.HORIZONTAL
101
- ? Orientation.VERTICAL
102
- : Orientation.HORIZONTAL;
103
- export function isGridBranchNode(node) {
104
- return !!node.children;
105
- }
106
- const serializeBranchNode = (node, orientation) => {
107
- const size = orientation === Orientation.VERTICAL ? node.box.width : node.box.height;
108
- if (!isGridBranchNode(node)) {
109
- if (typeof node.cachedVisibleSize === 'number') {
110
- return {
111
- type: 'leaf',
112
- data: node.view.toJSON(),
113
- size: node.cachedVisibleSize,
114
- visible: false,
115
- };
116
- }
117
- return { type: 'leaf', data: node.view.toJSON(), size };
118
- }
119
- return {
120
- type: 'branch',
121
- data: node.children.map((c) => serializeBranchNode(c, orthogonal(orientation))),
122
- size,
123
- };
124
- };
125
- export class Gridview {
126
- get length() {
127
- return this._root ? this._root.children.length : 0;
128
- }
129
- get orientation() {
130
- return this.root.orientation;
131
- }
132
- set orientation(orientation) {
133
- if (this.root.orientation === orientation) {
134
- return;
135
- }
136
- const { size, orthogonalSize } = this.root;
137
- this.root = flipNode(this.root, orthogonalSize, size);
138
- this.root.layout(size, orthogonalSize);
139
- }
140
- get width() {
141
- return this.root.width;
142
- }
143
- get height() {
144
- return this.root.height;
145
- }
146
- get minimumWidth() {
147
- return this.root.minimumWidth;
148
- }
149
- get minimumHeight() {
150
- return this.root.minimumHeight;
151
- }
152
- get maximumWidth() {
153
- return this.root.maximumHeight;
154
- }
155
- get maximumHeight() {
156
- return this.root.maximumHeight;
157
- }
158
- serialize() {
159
- const root = serializeBranchNode(this.getView(), this.orientation);
160
- return {
161
- root,
162
- width: this.width,
163
- height: this.height,
164
- orientation: this.orientation,
165
- };
166
- }
167
- dispose() {
168
- this.disposable.dispose();
169
- this._onDidChange.dispose();
170
- this.root.dispose();
171
- this.element.remove();
172
- }
173
- clear() {
174
- const orientation = this.root.orientation;
175
- this.root = new BranchNode(orientation, this.proportionalLayout, this.styles, this.root.size, this.root.orthogonalSize);
176
- }
177
- deserialize(json, deserializer) {
178
- const orientation = json.orientation;
179
- const height = orientation === Orientation.VERTICAL ? json.height : json.width;
180
- this._deserialize(json.root, orientation, deserializer, height);
181
- }
182
- _deserialize(root, orientation, deserializer, orthogonalSize) {
183
- this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize);
184
- }
185
- _deserializeNode(node, orientation, deserializer, orthogonalSize) {
186
- let result;
187
- if (node.type === 'branch') {
188
- const serializedChildren = node.data;
189
- const children = serializedChildren.map((serializedChild) => {
190
- return {
191
- node: this._deserializeNode(serializedChild, orthogonal(orientation), deserializer, node.size),
192
- visible: serializedChild.visible,
193
- };
194
- });
195
- result = new BranchNode(orientation, this.proportionalLayout, this.styles, node.size, // <- orthogonal size - flips at each depth
196
- orthogonalSize, // <- size - flips at each depth
197
- children);
198
- }
199
- else {
200
- result = new LeafNode(deserializer.fromJSON(node), orientation, orthogonalSize, node.size);
201
- }
202
- return result;
203
- }
204
- get root() {
205
- return this._root;
206
- }
207
- set root(root) {
208
- const oldRoot = this._root;
209
- if (oldRoot) {
210
- oldRoot.dispose();
211
- this.element.removeChild(oldRoot.element);
212
- }
213
- this._root = root;
214
- this.element.appendChild(this._root.element);
215
- this.disposable.value = this._root.onDidChange((e) => {
216
- this._onDidChange.fire(e);
217
- });
218
- }
219
- /**
220
- * If the root is orientated as a VERTICAL node then nest the existing root within a new HORIZIONTAL root node
221
- * If the root is orientated as a HORIZONTAL node then nest the existing root within a new VERITCAL root node
222
- */
223
- insertOrthogonalSplitviewAtRoot() {
224
- if (!this._root) {
225
- return;
226
- }
227
- const oldRoot = this.root;
228
- oldRoot.element.remove();
229
- this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size);
230
- if (oldRoot.children.length === 0) {
231
- // no data so no need to add anything back in
232
- }
233
- else if (oldRoot.children.length === 1) {
234
- // can remove one level of redundant branching if there is only a single child
235
- const childReference = oldRoot.children[0];
236
- const child = oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
237
- child.dispose();
238
- oldRoot.dispose();
239
- this._root.addChild(
240
- /**
241
- * the child node will have the same orientation as the new root since
242
- * we are removing the inbetween node.
243
- * the entire 'tree' must be flipped recursively to ensure that the orientation
244
- * flips at each level
245
- */
246
- flipNode(childReference, childReference.orthogonalSize, childReference.size), Sizing.Distribute, 0);
247
- }
248
- else {
249
- this._root.addChild(oldRoot, Sizing.Distribute, 0);
250
- }
251
- this.element.appendChild(this._root.element);
252
- this.disposable.value = this._root.onDidChange((e) => {
253
- this._onDidChange.fire(e);
254
- });
255
- }
256
- next(location) {
257
- return this.progmaticSelect(location);
258
- }
259
- previous(location) {
260
- return this.progmaticSelect(location, true);
261
- }
262
- getView(location) {
263
- const node = location ? this.getNode(location)[1] : this.root;
264
- return this._getViews(node, this.orientation);
265
- }
266
- _getViews(node, orientation, cachedVisibleSize) {
267
- const box = { height: node.height, width: node.width };
268
- if (node instanceof LeafNode) {
269
- return { box, view: node.view, cachedVisibleSize };
270
- }
271
- const children = [];
272
- for (let i = 0; i < node.children.length; i++) {
273
- const child = node.children[i];
274
- const nodeCachedVisibleSize = node.getChildCachedVisibleSize(i);
275
- children.push(this._getViews(child, orthogonal(orientation), nodeCachedVisibleSize));
276
- }
277
- return { box, children };
278
- }
279
- progmaticSelect(location, reverse = false) {
280
- const [path, node] = this.getNode(location);
281
- if (!(node instanceof LeafNode)) {
282
- throw new Error('invalid location');
283
- }
284
- for (let i = path.length - 1; i > -1; i--) {
285
- const n = path[i];
286
- const l = location[i] || 0;
287
- const canProgressInCurrentLevel = reverse
288
- ? l - 1 > -1
289
- : l + 1 < n.children.length;
290
- if (canProgressInCurrentLevel) {
291
- return findLeaf(n.children[reverse ? l - 1 : l + 1], reverse);
292
- }
293
- }
294
- return findLeaf(this.root, reverse);
295
- }
296
- constructor(proportionalLayout, styles, orientation) {
297
- this.proportionalLayout = proportionalLayout;
298
- this.styles = styles;
299
- this.disposable = new MutableDisposable();
300
- this._onDidChange = new Emitter();
301
- this.onDidChange = this._onDidChange.event;
302
- this.element = document.createElement('div');
303
- this.element.className = 'grid-view';
304
- this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
305
- }
306
- isViewVisible(location) {
307
- const [rest, index] = tail(location);
308
- const [, parent] = this.getNode(rest);
309
- if (!(parent instanceof BranchNode)) {
310
- throw new Error('Invalid from location');
311
- }
312
- return parent.isChildVisible(index);
313
- }
314
- setViewVisible(location, visible) {
315
- const [rest, index] = tail(location);
316
- const [, parent] = this.getNode(rest);
317
- if (!(parent instanceof BranchNode)) {
318
- throw new Error('Invalid from location');
319
- }
320
- parent.setChildVisible(index, visible);
321
- }
322
- moveView(parentLocation, from, to) {
323
- const [, parent] = this.getNode(parentLocation);
324
- if (!(parent instanceof BranchNode)) {
325
- throw new Error('Invalid location');
326
- }
327
- parent.moveChild(from, to);
328
- }
329
- addView(view, size, location) {
330
- const [rest, index] = tail(location);
331
- const [pathToParent, parent] = this.getNode(rest);
332
- if (parent instanceof BranchNode) {
333
- const node = new LeafNode(view, orthogonal(parent.orientation), parent.orthogonalSize);
334
- parent.addChild(node, size, index);
335
- }
336
- else {
337
- const [grandParent, ..._] = [...pathToParent].reverse();
338
- const [parentIndex, ...__] = [...rest].reverse();
339
- let newSiblingSize = 0;
340
- const newSiblingCachedVisibleSize = grandParent.getChildCachedVisibleSize(parentIndex);
341
- if (typeof newSiblingCachedVisibleSize === 'number') {
342
- newSiblingSize = Sizing.Invisible(newSiblingCachedVisibleSize);
343
- }
344
- const child = grandParent.removeChild(parentIndex);
345
- child.dispose();
346
- const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize);
347
- grandParent.addChild(newParent, parent.size, parentIndex);
348
- const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
349
- newParent.addChild(newSibling, newSiblingSize, 0);
350
- if (typeof size !== 'number' && size.type === 'split') {
351
- size = { type: 'split', index: 0 };
352
- }
353
- const node = new LeafNode(view, grandParent.orientation, parent.size);
354
- newParent.addChild(node, size, index);
355
- }
356
- }
357
- remove(view, sizing) {
358
- const location = getGridLocation(view.element);
359
- return this.removeView(location, sizing);
360
- }
361
- removeView(location, sizing) {
362
- const [rest, index] = tail(location);
363
- const [pathToParent, parent] = this.getNode(rest);
364
- if (!(parent instanceof BranchNode)) {
365
- throw new Error('Invalid location');
366
- }
367
- const nodeToRemove = parent.children[index];
368
- if (!(nodeToRemove instanceof LeafNode)) {
369
- throw new Error('Invalid location');
370
- }
371
- parent.removeChild(index, sizing);
372
- nodeToRemove.dispose();
373
- if (parent.children.length !== 1) {
374
- return nodeToRemove.view;
375
- }
376
- // if the parent has only one child and we know the parent is a BranchNode we can make the tree
377
- // more efficiently spaced by replacing the parent BranchNode with the child.
378
- // if that child is a LeafNode then we simply replace the BranchNode with the child otherwise if the child
379
- // is a BranchNode too we should spread it's children into the grandparent.
380
- // refer to the remaining child as the sibling
381
- const sibling = parent.children[0];
382
- if (pathToParent.length === 0) {
383
- // if the parent is root
384
- if (sibling instanceof LeafNode) {
385
- // if the sibling is a leaf node no action is required
386
- return nodeToRemove.view;
387
- }
388
- // otherwise the sibling is a branch node. since the parent is the root and the root has only one child
389
- // which is a branch node we can just set this branch node to be the new root node
390
- // for good housekeeping we'll removing the sibling from it's existing tree
391
- parent.removeChild(0, sizing);
392
- // and set that sibling node to be root
393
- this.root = sibling;
394
- return nodeToRemove.view;
395
- }
396
- // otherwise the parent is apart of a large sub-tree
397
- const [grandParent, ..._] = [...pathToParent].reverse();
398
- const [parentIndex, ...__] = [...rest].reverse();
399
- const isSiblingVisible = parent.isChildVisible(0);
400
- // either way we need to remove the sibling from it's existing tree
401
- parent.removeChild(0, sizing);
402
- // note the sizes of all of the grandparents children
403
- const sizes = grandParent.children.map((_size, i) => grandParent.getChildSize(i));
404
- // remove the parent from the grandparent since we are moving the sibling to take the parents place
405
- // this parent is no longer used and can be disposed of
406
- grandParent.removeChild(parentIndex, sizing).dispose();
407
- if (sibling instanceof BranchNode) {
408
- // replace the parent with the siblings children
409
- sizes.splice(parentIndex, 1, ...sibling.children.map((c) => c.size));
410
- // and add those siblings to the grandparent
411
- for (let i = 0; i < sibling.children.length; i++) {
412
- const child = sibling.children[i];
413
- grandParent.addChild(child, child.size, parentIndex + i);
414
- }
415
- /**
416
- * clean down the branch node since we need to dipose of it and
417
- * when .dispose() it called on a branch it will dispose of any
418
- * views it is holding onto.
419
- */
420
- while (sibling.children.length > 0) {
421
- sibling.removeChild(0);
422
- }
423
- }
424
- else {
425
- // otherwise create a new leaf node and add that to the grandparent
426
- const newSibling = new LeafNode(sibling.view, orthogonal(sibling.orientation), sibling.size);
427
- const siblingSizing = isSiblingVisible
428
- ? sibling.orthogonalSize
429
- : Sizing.Invisible(sibling.orthogonalSize);
430
- grandParent.addChild(newSibling, siblingSizing, parentIndex);
431
- }
432
- // the containing node of the sibling is no longer required and can be disposed of
433
- sibling.dispose();
434
- // resize everything
435
- for (let i = 0; i < sizes.length; i++) {
436
- grandParent.resizeChild(i, sizes[i]);
437
- }
438
- return nodeToRemove.view;
439
- }
440
- layout(width, height) {
441
- const [size, orthogonalSize] = this.root.orientation === Orientation.HORIZONTAL
442
- ? [height, width]
443
- : [width, height];
444
- this.root.layout(size, orthogonalSize);
445
- }
446
- getNode(location, node = this.root, path = []) {
447
- if (location.length === 0) {
448
- return [path, node];
449
- }
450
- if (!(node instanceof BranchNode)) {
451
- throw new Error('Invalid location');
452
- }
453
- const [index, ...rest] = location;
454
- if (index < 0 || index >= node.children.length) {
455
- throw new Error('Invalid location');
456
- }
457
- const child = node.children[index];
458
- path.push(node);
459
- return this.getNode(rest, child, path);
460
- }
461
- }
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/grid
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { Orientation, Sizing, } from '../splitview/splitview';
6
+ import { tail } from '../array';
7
+ import { LeafNode } from './leafNode';
8
+ import { BranchNode } from './branchNode';
9
+ import { Emitter } from '../events';
10
+ import { MutableDisposable } from '../lifecycle';
11
+ function findLeaf(candiateNode, last) {
12
+ if (candiateNode instanceof LeafNode) {
13
+ return candiateNode;
14
+ }
15
+ if (candiateNode instanceof BranchNode) {
16
+ return findLeaf(candiateNode.children[last ? candiateNode.children.length - 1 : 0], last);
17
+ }
18
+ throw new Error('invalid node');
19
+ }
20
+ function flipNode(node, size, orthogonalSize) {
21
+ if (node instanceof BranchNode) {
22
+ const result = new BranchNode(orthogonal(node.orientation), node.proportionalLayout, node.styles, size, orthogonalSize);
23
+ let totalSize = 0;
24
+ for (let i = node.children.length - 1; i >= 0; i--) {
25
+ const child = node.children[i];
26
+ const childSize = child instanceof BranchNode ? child.orthogonalSize : child.size;
27
+ let newSize = node.size === 0
28
+ ? 0
29
+ : Math.round((size * childSize) / node.size);
30
+ totalSize += newSize;
31
+ // The last view to add should adjust to rounding errors
32
+ if (i === 0) {
33
+ newSize += size - totalSize;
34
+ }
35
+ result.addChild(flipNode(child, orthogonalSize, newSize), newSize, 0, true);
36
+ }
37
+ return result;
38
+ }
39
+ else {
40
+ return new LeafNode(node.view, orthogonal(node.orientation), orthogonalSize);
41
+ }
42
+ }
43
+ export function indexInParent(element) {
44
+ const parentElement = element.parentElement;
45
+ if (!parentElement) {
46
+ throw new Error('Invalid grid element');
47
+ }
48
+ let el = parentElement.firstElementChild;
49
+ let index = 0;
50
+ while (el !== element && el !== parentElement.lastElementChild && el) {
51
+ el = el.nextElementSibling;
52
+ index++;
53
+ }
54
+ return index;
55
+ }
56
+ /**
57
+ * Find the grid location of a specific DOM element by traversing the parent
58
+ * chain and finding each child index on the way.
59
+ *
60
+ * This will break as soon as DOM structures of the Splitview or Gridview change.
61
+ */
62
+ export function getGridLocation(element) {
63
+ const parentElement = element.parentElement;
64
+ if (!parentElement) {
65
+ throw new Error('Invalid grid element');
66
+ }
67
+ if (/\bgrid-view\b/.test(parentElement.className)) {
68
+ return [];
69
+ }
70
+ const index = indexInParent(parentElement);
71
+ const ancestor = parentElement.parentElement.parentElement.parentElement;
72
+ return [...getGridLocation(ancestor), index];
73
+ }
74
+ export function getRelativeLocation(rootOrientation, location, direction) {
75
+ const orientation = getLocationOrientation(rootOrientation, location);
76
+ const directionOrientation = getDirectionOrientation(direction);
77
+ if (orientation === directionOrientation) {
78
+ const [rest, _index] = tail(location);
79
+ let index = _index;
80
+ if (direction === 'right' || direction === 'bottom') {
81
+ index += 1;
82
+ }
83
+ return [...rest, index];
84
+ }
85
+ else {
86
+ const index = direction === 'right' || direction === 'bottom' ? 1 : 0;
87
+ return [...location, index];
88
+ }
89
+ }
90
+ export function getDirectionOrientation(direction) {
91
+ return direction === 'top' || direction === 'bottom'
92
+ ? Orientation.VERTICAL
93
+ : Orientation.HORIZONTAL;
94
+ }
95
+ export function getLocationOrientation(rootOrientation, location) {
96
+ return location.length % 2 === 0
97
+ ? orthogonal(rootOrientation)
98
+ : rootOrientation;
99
+ }
100
+ export const orthogonal = (orientation) => orientation === Orientation.HORIZONTAL
101
+ ? Orientation.VERTICAL
102
+ : Orientation.HORIZONTAL;
103
+ export function isGridBranchNode(node) {
104
+ return !!node.children;
105
+ }
106
+ const serializeBranchNode = (node, orientation) => {
107
+ const size = orientation === Orientation.VERTICAL ? node.box.width : node.box.height;
108
+ if (!isGridBranchNode(node)) {
109
+ if (typeof node.cachedVisibleSize === 'number') {
110
+ return {
111
+ type: 'leaf',
112
+ data: node.view.toJSON(),
113
+ size: node.cachedVisibleSize,
114
+ visible: false,
115
+ };
116
+ }
117
+ return { type: 'leaf', data: node.view.toJSON(), size };
118
+ }
119
+ return {
120
+ type: 'branch',
121
+ data: node.children.map((c) => serializeBranchNode(c, orthogonal(orientation))),
122
+ size,
123
+ };
124
+ };
125
+ export class Gridview {
126
+ get length() {
127
+ return this._root ? this._root.children.length : 0;
128
+ }
129
+ get orientation() {
130
+ return this.root.orientation;
131
+ }
132
+ set orientation(orientation) {
133
+ if (this.root.orientation === orientation) {
134
+ return;
135
+ }
136
+ const { size, orthogonalSize } = this.root;
137
+ this.root = flipNode(this.root, orthogonalSize, size);
138
+ this.root.layout(size, orthogonalSize);
139
+ }
140
+ get width() {
141
+ return this.root.width;
142
+ }
143
+ get height() {
144
+ return this.root.height;
145
+ }
146
+ get minimumWidth() {
147
+ return this.root.minimumWidth;
148
+ }
149
+ get minimumHeight() {
150
+ return this.root.minimumHeight;
151
+ }
152
+ get maximumWidth() {
153
+ return this.root.maximumHeight;
154
+ }
155
+ get maximumHeight() {
156
+ return this.root.maximumHeight;
157
+ }
158
+ maximizedView() {
159
+ var _a;
160
+ return (_a = this._maximizedNode) === null || _a === void 0 ? void 0 : _a.view;
161
+ }
162
+ hasMaximizedView() {
163
+ return this._maximizedNode !== undefined;
164
+ }
165
+ maximizeView(view) {
166
+ const location = getGridLocation(view.element);
167
+ const [_, node] = this.getNode(location);
168
+ if (!(node instanceof LeafNode)) {
169
+ return;
170
+ }
171
+ if (this._maximizedNode === node) {
172
+ return;
173
+ }
174
+ if (this.hasMaximizedView()) {
175
+ this.exitMaximizedView();
176
+ }
177
+ function hideAllViewsBut(parent, exclude) {
178
+ for (let i = 0; i < parent.children.length; i++) {
179
+ const child = parent.children[i];
180
+ if (child instanceof LeafNode) {
181
+ if (child !== exclude) {
182
+ parent.setChildVisible(i, false);
183
+ }
184
+ }
185
+ else {
186
+ hideAllViewsBut(child, exclude);
187
+ }
188
+ }
189
+ }
190
+ hideAllViewsBut(this.root, node);
191
+ this._maximizedNode = node;
192
+ this._onDidMaxmizedNodeChange.fire();
193
+ }
194
+ exitMaximizedView() {
195
+ if (!this._maximizedNode) {
196
+ return;
197
+ }
198
+ function showViewsInReverseOrder(parent) {
199
+ for (let index = parent.children.length - 1; index >= 0; index--) {
200
+ const child = parent.children[index];
201
+ if (child instanceof LeafNode) {
202
+ parent.setChildVisible(index, true);
203
+ }
204
+ else {
205
+ showViewsInReverseOrder(child);
206
+ }
207
+ }
208
+ }
209
+ showViewsInReverseOrder(this.root);
210
+ this._maximizedNode = undefined;
211
+ this._onDidMaxmizedNodeChange.fire();
212
+ }
213
+ serialize() {
214
+ if (this.hasMaximizedView()) {
215
+ /**
216
+ * do not persist maximized view state but we must first exit any maximized views
217
+ * before serialization to ensure the correct dimensions are persisted
218
+ */
219
+ this.exitMaximizedView();
220
+ }
221
+ const root = serializeBranchNode(this.getView(), this.orientation);
222
+ return {
223
+ root,
224
+ width: this.width,
225
+ height: this.height,
226
+ orientation: this.orientation,
227
+ };
228
+ }
229
+ dispose() {
230
+ this.disposable.dispose();
231
+ this._onDidChange.dispose();
232
+ this._onDidMaxmizedNodeChange.dispose();
233
+ this.root.dispose();
234
+ this._maximizedNode = undefined;
235
+ this.element.remove();
236
+ }
237
+ clear() {
238
+ const orientation = this.root.orientation;
239
+ this.root = new BranchNode(orientation, this.proportionalLayout, this.styles, this.root.size, this.root.orthogonalSize);
240
+ }
241
+ deserialize(json, deserializer) {
242
+ const orientation = json.orientation;
243
+ const height = orientation === Orientation.VERTICAL ? json.height : json.width;
244
+ this._deserialize(json.root, orientation, deserializer, height);
245
+ }
246
+ _deserialize(root, orientation, deserializer, orthogonalSize) {
247
+ this.root = this._deserializeNode(root, orientation, deserializer, orthogonalSize);
248
+ }
249
+ _deserializeNode(node, orientation, deserializer, orthogonalSize) {
250
+ let result;
251
+ if (node.type === 'branch') {
252
+ const serializedChildren = node.data;
253
+ const children = serializedChildren.map((serializedChild) => {
254
+ return {
255
+ node: this._deserializeNode(serializedChild, orthogonal(orientation), deserializer, node.size),
256
+ visible: serializedChild.visible,
257
+ };
258
+ });
259
+ result = new BranchNode(orientation, this.proportionalLayout, this.styles, node.size, // <- orthogonal size - flips at each depth
260
+ orthogonalSize, // <- size - flips at each depth
261
+ children);
262
+ }
263
+ else {
264
+ result = new LeafNode(deserializer.fromJSON(node), orientation, orthogonalSize, node.size);
265
+ }
266
+ return result;
267
+ }
268
+ get root() {
269
+ return this._root;
270
+ }
271
+ set root(root) {
272
+ const oldRoot = this._root;
273
+ if (oldRoot) {
274
+ oldRoot.dispose();
275
+ this._maximizedNode = undefined;
276
+ this.element.removeChild(oldRoot.element);
277
+ }
278
+ this._root = root;
279
+ this.element.appendChild(this._root.element);
280
+ this.disposable.value = this._root.onDidChange((e) => {
281
+ this._onDidChange.fire(e);
282
+ });
283
+ }
284
+ /**
285
+ * If the root is orientated as a VERTICAL node then nest the existing root within a new HORIZIONTAL root node
286
+ * If the root is orientated as a HORIZONTAL node then nest the existing root within a new VERITCAL root node
287
+ */
288
+ insertOrthogonalSplitviewAtRoot() {
289
+ if (!this._root) {
290
+ return;
291
+ }
292
+ const oldRoot = this.root;
293
+ oldRoot.element.remove();
294
+ this._root = new BranchNode(orthogonal(oldRoot.orientation), this.proportionalLayout, this.styles, this.root.orthogonalSize, this.root.size);
295
+ if (oldRoot.children.length === 0) {
296
+ // no data so no need to add anything back in
297
+ }
298
+ else if (oldRoot.children.length === 1) {
299
+ // can remove one level of redundant branching if there is only a single child
300
+ const childReference = oldRoot.children[0];
301
+ const child = oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
302
+ child.dispose();
303
+ oldRoot.dispose();
304
+ this._root.addChild(
305
+ /**
306
+ * the child node will have the same orientation as the new root since
307
+ * we are removing the inbetween node.
308
+ * the entire 'tree' must be flipped recursively to ensure that the orientation
309
+ * flips at each level
310
+ */
311
+ flipNode(childReference, childReference.orthogonalSize, childReference.size), Sizing.Distribute, 0);
312
+ }
313
+ else {
314
+ this._root.addChild(oldRoot, Sizing.Distribute, 0);
315
+ }
316
+ this.element.appendChild(this._root.element);
317
+ this.disposable.value = this._root.onDidChange((e) => {
318
+ this._onDidChange.fire(e);
319
+ });
320
+ }
321
+ next(location) {
322
+ return this.progmaticSelect(location);
323
+ }
324
+ previous(location) {
325
+ return this.progmaticSelect(location, true);
326
+ }
327
+ getView(location) {
328
+ const node = location ? this.getNode(location)[1] : this.root;
329
+ return this._getViews(node, this.orientation);
330
+ }
331
+ _getViews(node, orientation, cachedVisibleSize) {
332
+ const box = { height: node.height, width: node.width };
333
+ if (node instanceof LeafNode) {
334
+ return { box, view: node.view, cachedVisibleSize };
335
+ }
336
+ const children = [];
337
+ for (let i = 0; i < node.children.length; i++) {
338
+ const child = node.children[i];
339
+ const nodeCachedVisibleSize = node.getChildCachedVisibleSize(i);
340
+ children.push(this._getViews(child, orthogonal(orientation), nodeCachedVisibleSize));
341
+ }
342
+ return { box, children };
343
+ }
344
+ progmaticSelect(location, reverse = false) {
345
+ const [path, node] = this.getNode(location);
346
+ if (!(node instanceof LeafNode)) {
347
+ throw new Error('invalid location');
348
+ }
349
+ for (let i = path.length - 1; i > -1; i--) {
350
+ const n = path[i];
351
+ const l = location[i] || 0;
352
+ const canProgressInCurrentLevel = reverse
353
+ ? l - 1 > -1
354
+ : l + 1 < n.children.length;
355
+ if (canProgressInCurrentLevel) {
356
+ return findLeaf(n.children[reverse ? l - 1 : l + 1], reverse);
357
+ }
358
+ }
359
+ return findLeaf(this.root, reverse);
360
+ }
361
+ constructor(proportionalLayout, styles, orientation) {
362
+ this.proportionalLayout = proportionalLayout;
363
+ this.styles = styles;
364
+ this._maximizedNode = undefined;
365
+ this.disposable = new MutableDisposable();
366
+ this._onDidChange = new Emitter();
367
+ this.onDidChange = this._onDidChange.event;
368
+ this._onDidMaxmizedNodeChange = new Emitter();
369
+ this.onDidMaxmizedNodeChange = this._onDidMaxmizedNodeChange.event;
370
+ this.element = document.createElement('div');
371
+ this.element.className = 'grid-view';
372
+ this.root = new BranchNode(orientation, proportionalLayout, styles, 0, 0);
373
+ }
374
+ isViewVisible(location) {
375
+ const [rest, index] = tail(location);
376
+ const [, parent] = this.getNode(rest);
377
+ if (!(parent instanceof BranchNode)) {
378
+ throw new Error('Invalid from location');
379
+ }
380
+ return parent.isChildVisible(index);
381
+ }
382
+ setViewVisible(location, visible) {
383
+ if (this.hasMaximizedView()) {
384
+ this.exitMaximizedView();
385
+ }
386
+ const [rest, index] = tail(location);
387
+ const [, parent] = this.getNode(rest);
388
+ if (!(parent instanceof BranchNode)) {
389
+ throw new Error('Invalid from location');
390
+ }
391
+ parent.setChildVisible(index, visible);
392
+ }
393
+ moveView(parentLocation, from, to) {
394
+ if (this.hasMaximizedView()) {
395
+ this.exitMaximizedView();
396
+ }
397
+ const [, parent] = this.getNode(parentLocation);
398
+ if (!(parent instanceof BranchNode)) {
399
+ throw new Error('Invalid location');
400
+ }
401
+ parent.moveChild(from, to);
402
+ }
403
+ addView(view, size, location) {
404
+ if (this.hasMaximizedView()) {
405
+ this.exitMaximizedView();
406
+ }
407
+ const [rest, index] = tail(location);
408
+ const [pathToParent, parent] = this.getNode(rest);
409
+ if (parent instanceof BranchNode) {
410
+ const node = new LeafNode(view, orthogonal(parent.orientation), parent.orthogonalSize);
411
+ parent.addChild(node, size, index);
412
+ }
413
+ else {
414
+ const [grandParent, ..._] = [...pathToParent].reverse();
415
+ const [parentIndex, ...__] = [...rest].reverse();
416
+ let newSiblingSize = 0;
417
+ const newSiblingCachedVisibleSize = grandParent.getChildCachedVisibleSize(parentIndex);
418
+ if (typeof newSiblingCachedVisibleSize === 'number') {
419
+ newSiblingSize = Sizing.Invisible(newSiblingCachedVisibleSize);
420
+ }
421
+ const child = grandParent.removeChild(parentIndex);
422
+ child.dispose();
423
+ const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize);
424
+ grandParent.addChild(newParent, parent.size, parentIndex);
425
+ const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
426
+ newParent.addChild(newSibling, newSiblingSize, 0);
427
+ if (typeof size !== 'number' && size.type === 'split') {
428
+ size = { type: 'split', index: 0 };
429
+ }
430
+ const node = new LeafNode(view, grandParent.orientation, parent.size);
431
+ newParent.addChild(node, size, index);
432
+ }
433
+ }
434
+ remove(view, sizing) {
435
+ const location = getGridLocation(view.element);
436
+ return this.removeView(location, sizing);
437
+ }
438
+ removeView(location, sizing) {
439
+ if (this.hasMaximizedView()) {
440
+ this.exitMaximizedView();
441
+ }
442
+ const [rest, index] = tail(location);
443
+ const [pathToParent, parent] = this.getNode(rest);
444
+ if (!(parent instanceof BranchNode)) {
445
+ throw new Error('Invalid location');
446
+ }
447
+ const nodeToRemove = parent.children[index];
448
+ if (!(nodeToRemove instanceof LeafNode)) {
449
+ throw new Error('Invalid location');
450
+ }
451
+ parent.removeChild(index, sizing);
452
+ nodeToRemove.dispose();
453
+ if (parent.children.length !== 1) {
454
+ return nodeToRemove.view;
455
+ }
456
+ // if the parent has only one child and we know the parent is a BranchNode we can make the tree
457
+ // more efficiently spaced by replacing the parent BranchNode with the child.
458
+ // if that child is a LeafNode then we simply replace the BranchNode with the child otherwise if the child
459
+ // is a BranchNode too we should spread it's children into the grandparent.
460
+ // refer to the remaining child as the sibling
461
+ const sibling = parent.children[0];
462
+ if (pathToParent.length === 0) {
463
+ // if the parent is root
464
+ if (sibling instanceof LeafNode) {
465
+ // if the sibling is a leaf node no action is required
466
+ return nodeToRemove.view;
467
+ }
468
+ // otherwise the sibling is a branch node. since the parent is the root and the root has only one child
469
+ // which is a branch node we can just set this branch node to be the new root node
470
+ // for good housekeeping we'll removing the sibling from it's existing tree
471
+ parent.removeChild(0, sizing);
472
+ // and set that sibling node to be root
473
+ this.root = sibling;
474
+ return nodeToRemove.view;
475
+ }
476
+ // otherwise the parent is apart of a large sub-tree
477
+ const [grandParent, ..._] = [...pathToParent].reverse();
478
+ const [parentIndex, ...__] = [...rest].reverse();
479
+ const isSiblingVisible = parent.isChildVisible(0);
480
+ // either way we need to remove the sibling from it's existing tree
481
+ parent.removeChild(0, sizing);
482
+ // note the sizes of all of the grandparents children
483
+ const sizes = grandParent.children.map((_size, i) => grandParent.getChildSize(i));
484
+ // remove the parent from the grandparent since we are moving the sibling to take the parents place
485
+ // this parent is no longer used and can be disposed of
486
+ grandParent.removeChild(parentIndex, sizing).dispose();
487
+ if (sibling instanceof BranchNode) {
488
+ // replace the parent with the siblings children
489
+ sizes.splice(parentIndex, 1, ...sibling.children.map((c) => c.size));
490
+ // and add those siblings to the grandparent
491
+ for (let i = 0; i < sibling.children.length; i++) {
492
+ const child = sibling.children[i];
493
+ grandParent.addChild(child, child.size, parentIndex + i);
494
+ }
495
+ /**
496
+ * clean down the branch node since we need to dipose of it and
497
+ * when .dispose() it called on a branch it will dispose of any
498
+ * views it is holding onto.
499
+ */
500
+ while (sibling.children.length > 0) {
501
+ sibling.removeChild(0);
502
+ }
503
+ }
504
+ else {
505
+ // otherwise create a new leaf node and add that to the grandparent
506
+ const newSibling = new LeafNode(sibling.view, orthogonal(sibling.orientation), sibling.size);
507
+ const siblingSizing = isSiblingVisible
508
+ ? sibling.orthogonalSize
509
+ : Sizing.Invisible(sibling.orthogonalSize);
510
+ grandParent.addChild(newSibling, siblingSizing, parentIndex);
511
+ }
512
+ // the containing node of the sibling is no longer required and can be disposed of
513
+ sibling.dispose();
514
+ // resize everything
515
+ for (let i = 0; i < sizes.length; i++) {
516
+ grandParent.resizeChild(i, sizes[i]);
517
+ }
518
+ return nodeToRemove.view;
519
+ }
520
+ layout(width, height) {
521
+ const [size, orthogonalSize] = this.root.orientation === Orientation.HORIZONTAL
522
+ ? [height, width]
523
+ : [width, height];
524
+ this.root.layout(size, orthogonalSize);
525
+ }
526
+ getNode(location, node = this.root, path = []) {
527
+ if (location.length === 0) {
528
+ return [path, node];
529
+ }
530
+ if (!(node instanceof BranchNode)) {
531
+ throw new Error('Invalid location');
532
+ }
533
+ const [index, ...rest] = location;
534
+ if (index < 0 || index >= node.children.length) {
535
+ throw new Error('Invalid location');
536
+ }
537
+ const child = node.children[index];
538
+ path.push(node);
539
+ return this.getNode(rest, child, path);
540
+ }
541
+ }
462
542
  //# sourceMappingURL=gridview.js.map