flexlayout-react 0.8.9 → 0.8.11

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 (312) hide show
  1. package/ChangeLog.txt +12 -0
  2. package/README.md +30 -24
  3. package/declarations/view/BorderTab.d.ts +1 -2
  4. package/declarations/view/Icons.d.ts +7 -8
  5. package/declarations/view/Layout.d.ts +1 -1
  6. package/declarations/view/SizeTracker.d.ts +1 -1
  7. package/dist/flexlayout.js +51 -31
  8. package/dist/flexlayout_min.js +1 -1
  9. package/dist/flexlayout_min.js.LICENSE.txt +10 -0
  10. package/dist/src/Attribute.js +43 -0
  11. package/dist/src/Attribute.js.map +1 -0
  12. package/dist/src/AttributeDefinitions.js +132 -0
  13. package/dist/src/AttributeDefinitions.js.map +1 -0
  14. package/dist/src/DockLocation.js +121 -0
  15. package/dist/src/DockLocation.js.map +1 -0
  16. package/dist/src/DropInfo.js +10 -0
  17. package/dist/src/DropInfo.js.map +1 -0
  18. package/dist/src/I18nLabel.js +14 -0
  19. package/dist/src/I18nLabel.js.map +1 -0
  20. package/dist/src/Orientation.js +23 -0
  21. package/dist/src/Orientation.js.map +1 -0
  22. package/dist/src/Rect.js +111 -0
  23. package/dist/src/Rect.js.map +1 -0
  24. package/dist/src/Types.js +95 -0
  25. package/dist/src/Types.js.map +1 -0
  26. package/dist/src/index.js +22 -0
  27. package/dist/src/index.js.map +1 -0
  28. package/dist/src/model/Action.js +7 -0
  29. package/dist/src/model/Action.js.map +1 -0
  30. package/dist/src/model/Actions.js +170 -0
  31. package/dist/src/model/Actions.js.map +1 -0
  32. package/dist/src/model/BorderNode.js +390 -0
  33. package/dist/src/model/BorderNode.js.map +1 -0
  34. package/dist/src/model/BorderSet.js +67 -0
  35. package/dist/src/model/BorderSet.js.map +1 -0
  36. package/dist/src/model/ICloseType.js +7 -0
  37. package/dist/src/model/ICloseType.js.map +1 -0
  38. package/dist/src/model/IDraggable.js +2 -0
  39. package/dist/src/model/IDraggable.js.map +1 -0
  40. package/dist/src/model/IDropTarget.js +2 -0
  41. package/dist/src/model/IDropTarget.js.map +1 -0
  42. package/dist/src/model/IJsonModel.js +2 -0
  43. package/dist/src/model/IJsonModel.js.map +1 -0
  44. package/dist/src/model/LayoutWindow.js +81 -0
  45. package/dist/src/model/LayoutWindow.js.map +1 -0
  46. package/dist/src/model/Model.js +608 -0
  47. package/dist/src/model/Model.js.map +1 -0
  48. package/dist/src/model/Node.js +218 -0
  49. package/dist/src/model/Node.js.map +1 -0
  50. package/dist/src/model/RowNode.js +492 -0
  51. package/dist/src/model/RowNode.js.map +1 -0
  52. package/dist/src/model/TabNode.js +293 -0
  53. package/dist/src/model/TabNode.js.map +1 -0
  54. package/dist/src/model/TabSetNode.js +469 -0
  55. package/dist/src/model/TabSetNode.js.map +1 -0
  56. package/dist/src/model/Utils.js +48 -0
  57. package/dist/src/model/Utils.js.map +1 -0
  58. package/dist/src/view/BorderButton.js +126 -0
  59. package/dist/src/view/BorderButton.js.map +1 -0
  60. package/dist/src/view/BorderTab.js +44 -0
  61. package/dist/src/view/BorderTab.js.map +1 -0
  62. package/dist/src/view/BorderTabSet.js +138 -0
  63. package/dist/src/view/BorderTabSet.js.map +1 -0
  64. package/dist/src/view/DragContainer.js +16 -0
  65. package/dist/src/view/DragContainer.js.map +1 -0
  66. package/dist/src/view/ErrorBoundary.js +24 -0
  67. package/dist/src/view/ErrorBoundary.js.map +1 -0
  68. package/dist/src/view/Icons.js +29 -0
  69. package/dist/src/view/Icons.js.map +1 -0
  70. package/dist/src/view/Layout.js +881 -0
  71. package/dist/src/view/Layout.js.map +1 -0
  72. package/dist/src/view/Overlay.js +9 -0
  73. package/dist/src/view/Overlay.js.map +1 -0
  74. package/dist/src/view/PopoutWindow.js +129 -0
  75. package/dist/src/view/PopoutWindow.js.map +1 -0
  76. package/dist/src/view/PopupMenu.js +89 -0
  77. package/dist/src/view/PopupMenu.js.map +1 -0
  78. package/dist/src/view/Row.js +46 -0
  79. package/dist/src/view/Row.js.map +1 -0
  80. package/dist/src/view/SizeTracker.js +12 -0
  81. package/dist/src/view/SizeTracker.js.map +1 -0
  82. package/dist/src/view/Splitter.js +192 -0
  83. package/dist/src/view/Splitter.js.map +1 -0
  84. package/dist/src/view/Tab.js +91 -0
  85. package/dist/src/view/Tab.js.map +1 -0
  86. package/dist/src/view/TabButton.js +124 -0
  87. package/dist/src/view/TabButton.js.map +1 -0
  88. package/dist/src/view/TabButtonStamp.js +15 -0
  89. package/dist/src/view/TabButtonStamp.js.map +1 -0
  90. package/dist/src/view/TabOverflowHook.js +266 -0
  91. package/dist/src/view/TabOverflowHook.js.map +1 -0
  92. package/dist/src/view/TabSet.js +256 -0
  93. package/dist/src/view/TabSet.js.map +1 -0
  94. package/dist/src/view/Utils.js +110 -0
  95. package/dist/src/view/Utils.js.map +1 -0
  96. package/lib/AttributeDefinitions.js +2 -2
  97. package/lib/AttributeDefinitions.js.map +1 -1
  98. package/lib/Rect.js +1 -1
  99. package/lib/Rect.js.map +1 -1
  100. package/lib/view/BorderButton.js +7 -9
  101. package/lib/view/BorderButton.js.map +1 -1
  102. package/lib/view/BorderTab.js +18 -9
  103. package/lib/view/BorderTab.js.map +1 -1
  104. package/lib/view/BorderTabSet.js +11 -17
  105. package/lib/view/BorderTabSet.js.map +1 -1
  106. package/lib/view/DragContainer.js +2 -2
  107. package/lib/view/DragContainer.js.map +1 -1
  108. package/lib/view/ErrorBoundary.js +2 -2
  109. package/lib/view/ErrorBoundary.js.map +1 -1
  110. package/lib/view/Icons.js +8 -20
  111. package/lib/view/Icons.js.map +1 -1
  112. package/lib/view/Layout.js +44 -84
  113. package/lib/view/Layout.js.map +1 -1
  114. package/lib/view/Overlay.js +2 -2
  115. package/lib/view/Overlay.js.map +1 -1
  116. package/lib/view/PopupMenu.js +4 -5
  117. package/lib/view/PopupMenu.js.map +1 -1
  118. package/lib/view/Row.js +5 -4
  119. package/lib/view/Row.js.map +1 -1
  120. package/lib/view/SizeTracker.js +2 -1
  121. package/lib/view/SizeTracker.js.map +1 -1
  122. package/lib/view/Splitter.js +9 -4
  123. package/lib/view/Splitter.js.map +1 -1
  124. package/lib/view/Tab.js +3 -4
  125. package/lib/view/Tab.js.map +1 -1
  126. package/lib/view/TabButton.js +7 -9
  127. package/lib/view/TabButton.js.map +1 -1
  128. package/lib/view/TabButtonStamp.js +4 -6
  129. package/lib/view/TabButtonStamp.js.map +1 -1
  130. package/lib/view/TabSet.js +38 -42
  131. package/lib/view/TabSet.js.map +1 -1
  132. package/lib/view/Utils.js +3 -3
  133. package/lib/view/Utils.js.map +1 -1
  134. package/package.json +87 -77
  135. package/playwright-report/data/01f8ff379b7b7c06b0f8dbd65cbd55e95f8ca470.zip +0 -0
  136. package/playwright-report/data/02a706b995d751dee8ac0429e29eafb796a23f96.zip +0 -0
  137. package/playwright-report/data/04468c5a7304bad1acbe32d3376bfc5038e172d9.zip +0 -0
  138. package/playwright-report/data/04ffe14721deea0c6402bb96c78055475f6cd687.zip +0 -0
  139. package/playwright-report/data/07e1bb8bd6407ceafa7a1051839d398f34b41a52.zip +0 -0
  140. package/playwright-report/data/0d17b99e2ddd975da4868f295b370a9fc9b55993.zip +0 -0
  141. package/playwright-report/data/108805618d29c7800d55d7dd8da36829fec366bd.zip +0 -0
  142. package/playwright-report/data/1271fd2bc76809c25b62351f4321b396e745a199.zip +0 -0
  143. package/playwright-report/data/16bd316f5e3e9ad6c9dc2a6a0388f3425c1a61d9.zip +0 -0
  144. package/playwright-report/data/1a1b06cebe59d981e21198164093230b0a1704fd.zip +0 -0
  145. package/playwright-report/data/1b3b6bba4aca415bc586b2a0abb18410af26fbf1.zip +0 -0
  146. package/playwright-report/data/1ce927369a55edf14ec99e0029d1a342cb0fcfa4.zip +0 -0
  147. package/playwright-report/data/20a694648a90f0a805a4397b73699142e5dd50c1.zip +0 -0
  148. package/playwright-report/data/211f1c8fc3f5d052d935906201f29a1e42a2fbd8.zip +0 -0
  149. package/playwright-report/data/2176124681e769fbba593a272e67331fd69e56ef.zip +0 -0
  150. package/playwright-report/data/2487db6273b09acd9a62a9ecfa8f1e411cc769df.zip +0 -0
  151. package/playwright-report/data/25abefed6606e15cac6dc83e3ea4e85896233020.zip +0 -0
  152. package/playwright-report/data/2752051b8593d432be1a623813f2dbee043dc959.zip +0 -0
  153. package/playwright-report/data/2d72001a7f57a11282fe741ca22501b34f7576a2.zip +0 -0
  154. package/playwright-report/data/308de4d252afe1db5aeda783ea3eaf09368aa812.zip +0 -0
  155. package/playwright-report/data/30f265807a34ee9bb2ddd931970be6f572a42ffe.zip +0 -0
  156. package/playwright-report/data/326599ace543d3340403f5eaa0f28ef73f7d3cfc.zip +0 -0
  157. package/playwright-report/data/3662fcf1839c6bb164e1aceea5e25b410bae6286.zip +0 -0
  158. package/playwright-report/data/38cdebbb090386af04f96f13bf45b2a23feb6cf5.zip +0 -0
  159. package/playwright-report/data/3b45c7876ca7a4208061f69fa0cce9f9e619557c.zip +0 -0
  160. package/playwright-report/data/3c6115f8ff03527f3b888e8c6626d086146bb961.zip +0 -0
  161. package/playwright-report/data/3e976a69f9bc188048c96969507a28fc5411da40.zip +0 -0
  162. package/playwright-report/data/420bd6c0ed97c53e6ee5108c11c337690ed9dd71.zip +0 -0
  163. package/playwright-report/data/424c925f1d020f7918c5b1d4e93a3aff4ffd0d35.zip +0 -0
  164. package/playwright-report/data/4459657c233583f0bb5f541ba2a56d14fc04324f.zip +0 -0
  165. package/playwright-report/data/45dbca16424f69b6af3f201fd918186e66e6a921.zip +0 -0
  166. package/playwright-report/data/4c7242437d15e34066b69d5f3a71e21f436d81bb.zip +0 -0
  167. package/playwright-report/data/56f84e2288e6485b68f0f78f79af97016d066eea.zip +0 -0
  168. package/playwright-report/data/679d4cfcb398dd2d19703be59bbf1de72f73fa3e.zip +0 -0
  169. package/playwright-report/data/686279f3ccdca1213fe91a9901f1ca469a41db4b.zip +0 -0
  170. package/playwright-report/data/69403980b98daeb052c732f3d984b7ccc51022aa.zip +0 -0
  171. package/playwright-report/data/6d91e10cd5dc95944881ea0f875bf0e531c63164.zip +0 -0
  172. package/playwright-report/data/6f362695f59905c3acdcafb6eeacfa4b068bc030.zip +0 -0
  173. package/playwright-report/data/71dd5897288168b0f7fb2e187f2b543e880733b1.zip +0 -0
  174. package/playwright-report/data/7540a41a9c123cffc1750447ccb69d9fb8cc8ba5.zip +0 -0
  175. package/playwright-report/data/78f8483a26c47ca761f43b1f142a9fb9d001b27e.zip +0 -0
  176. package/playwright-report/data/7e8bd5ba547094dcf303d450853b2f74f41749b2.zip +0 -0
  177. package/playwright-report/data/7fbec8e63ea2ee1702a94fe4d837067192e661f0.zip +0 -0
  178. package/playwright-report/data/87f2ea42a46cbd21813358d7d6e31d9999fca953.zip +0 -0
  179. package/playwright-report/data/8db527a1f9b753036cf63bb4afc96a765007fe82.zip +0 -0
  180. package/playwright-report/data/8e5ccd4bd56f3843f4e788c5e9842165221c2748.zip +0 -0
  181. package/playwright-report/data/8fc12e2795e02ee2ad773ec7be25f94b6ca697ed.zip +0 -0
  182. package/playwright-report/data/9d10ab1649ded4751d19014847e110b0b03ad126.zip +0 -0
  183. package/playwright-report/data/ab82c3994c6614fa6873fc92fd44ca78cb45f9d6.zip +0 -0
  184. package/playwright-report/data/ac554655d509fe64199a053e715def4ce4bbd618.zip +0 -0
  185. package/playwright-report/data/ad8e5a0cec5ec3369478099a58b7652c0dd636f1.zip +0 -0
  186. package/playwright-report/data/ae30baf5dea2dc0dd2ca87ffa08afb936b27fef1.zip +0 -0
  187. package/playwright-report/data/bc7631ffd4df693573a3233ec403a1f9cbcb00a9.zip +0 -0
  188. package/playwright-report/data/bcfe71e7532702969ecdde584a294907ed21525e.zip +0 -0
  189. package/playwright-report/data/bf020e09e20d0cd6e1b8aa82153e84f9d40c7f74.zip +0 -0
  190. package/playwright-report/data/c3452f499f82ef644c3d314626d3d9c762ff5c20.zip +0 -0
  191. package/playwright-report/data/c5dfbb00ea0965a4214f02cde22245958bb31c86.zip +0 -0
  192. package/playwright-report/data/c716ede7c5174d8a83653a6862605eca04783bad.zip +0 -0
  193. package/playwright-report/data/c95ca5869740edf6d1d627d120aa9ba26b1d3415.zip +0 -0
  194. package/playwright-report/data/cc17390169d327b4dfc2a9b3a8279e74ff975b1d.zip +0 -0
  195. package/playwright-report/data/d0ff6b9f342d792119f1513cc53c9f315a56251b.zip +0 -0
  196. package/playwright-report/data/d26377153bff611b5ba5a1148fc8858f7bb2cb7b.zip +0 -0
  197. package/playwright-report/data/dc0608de1b624a691f2f393bf450fc01591076ef.zip +0 -0
  198. package/playwright-report/data/dee4c585c248f4827601afbde02d3732761bdd8b.zip +0 -0
  199. package/playwright-report/data/e4cdfceef70735028de78f94f7e07a1e65fa317d.zip +0 -0
  200. package/playwright-report/data/e64d89424643af3f746a091f7567db49b0b45f3c.zip +0 -0
  201. package/playwright-report/data/e70483c7d13bb871f5c5b4aa54149172d58bf0c0.zip +0 -0
  202. package/playwright-report/data/e8333b653df262d800ee7b5329503b975d420e87.zip +0 -0
  203. package/playwright-report/data/ed1bd19a957a6165ba73a644af4959590b23eed9.zip +0 -0
  204. package/playwright-report/data/f35cf046cdf897abd96f318f79443407e58b8f0b.zip +0 -0
  205. package/playwright-report/data/f8793a7c69b939ac07422cf41aac45ebe4a86908.zip +0 -0
  206. package/playwright-report/data/fb2a383b96839380e90e0137363a574e665aed38.zip +0 -0
  207. package/playwright-report/data/fede8e774c66e329bdac055d6d67e73aa75b14fc.zip +0 -0
  208. package/playwright-report/index.html +71 -0
  209. package/playwright-report/trace/assets/codeMirrorModule-DpJ-EmBQ.js +24 -0
  210. package/playwright-report/trace/assets/defaultSettingsView-DTenqiGw.js +259 -0
  211. package/playwright-report/trace/codeMirrorModule.C3UTv-Ge.css +1 -0
  212. package/playwright-report/trace/codicon.DCmgc-ay.ttf +0 -0
  213. package/playwright-report/trace/defaultSettingsView.5fN5lw10.css +1 -0
  214. package/playwright-report/trace/index.CFOW-Ezb.css +1 -0
  215. package/playwright-report/trace/index.CUq7VgrV.js +2 -0
  216. package/playwright-report/trace/index.html +43 -0
  217. package/playwright-report/trace/playwright-logo.svg +9 -0
  218. package/playwright-report/trace/snapshot.html +21 -0
  219. package/playwright-report/trace/sw.bundle.js +3 -0
  220. package/playwright-report/trace/uiMode.BatfzHMG.css +1 -0
  221. package/playwright-report/trace/uiMode.CHJSAD7F.js +5 -0
  222. package/playwright-report/trace/uiMode.html +17 -0
  223. package/playwright-report/trace/xtermModule.Beg8tuEN.css +32 -0
  224. package/playwright.config.ts +79 -0
  225. package/screenshots/PlaywrightUI.png +0 -0
  226. package/src/AttributeDefinitions.ts +2 -2
  227. package/src/Rect.ts +1 -1
  228. package/src/view/BorderButton.tsx +1 -1
  229. package/src/view/BorderTab.tsx +18 -7
  230. package/src/view/Icons.tsx +0 -2
  231. package/src/view/Layout.tsx +14 -10
  232. package/src/view/Overlay.tsx +0 -1
  233. package/src/view/Splitter.tsx +6 -0
  234. package/src/view/TabButton.tsx +1 -1
  235. package/src/view/TabButtonStamp.tsx +0 -1
  236. package/src/view/TabSet.tsx +16 -7
  237. package/test-results/view-Add-methods-add-to-active-tabset-chromium/trace.zip +0 -0
  238. package/test-results/view-Add-methods-drag-to-border-chromium/trace.zip +0 -0
  239. package/test-results/view-Add-methods-drag-to-tabset-chromium/trace.zip +0 -0
  240. package/test-results/view-Delete-methods-delete-all-tabs-chromium/trace.zip +0 -0
  241. package/test-results/view-Delete-methods-delete-tab-chromium/trace.zip +0 -0
  242. package/test-results/view-Extended-App-onRenderTab-chromium/trace.zip +0 -0
  243. package/test-results/view-Extended-App-onRenderTab-in-border-chromium/trace.zip +0 -0
  244. package/test-results/view-Extended-App-onRenderTabSet-chromium/trace.zip +0 -0
  245. package/test-results/view-Extended-App-onRenderTabSet-for-border-chromium/trace.zip +0 -0
  246. package/test-results/view-Extended-App-onRenderTabSet-sticky-buttons-chromium/trace.zip +0 -0
  247. package/test-results/view-Extended-layout2-borders-autohide-left-chromium/trace.zip +0 -0
  248. package/test-results/view-Extended-layout2-borders-autohide-top-chromium/trace.zip +0 -0
  249. package/test-results/view-Extended-layout2-check-border-bottom-min-size-chromium/trace.zip +0 -0
  250. package/test-results/view-Extended-layout2-check-border-left-min-size-chromium/trace.zip +0 -0
  251. package/test-results/view-Extended-layout2-check-border-right-min-size-chromium/trace.zip +0 -0
  252. package/test-results/view-Extended-layout2-check-border-top-min-size-chromium/trace.zip +0 -0
  253. package/test-results/view-Extended-layout2-check-tabset-min-size-chromium/trace.zip +0 -0
  254. package/test-results/view-Extended-layout2-tabset-close-chromium/trace.zip +0 -0
  255. package/test-results/view-Maximize-methods-maximize-tabset-using-double-click-chromium/trace.zip +0 -0
  256. package/test-results/view-Maximize-methods-maximize-tabset-using-max-button-chromium/trace.zip +0 -0
  257. package/test-results/view-Others-click-on-tab-button-causes-tabset-activate-chromium/trace.zip +0 -0
  258. package/test-results/view-Others-click-on-tab-contents-causes-tabset-activate-chromium/trace.zip +0 -0
  259. package/test-results/view-Others-click-on-tabstrip-causes-tabset-activate-chromium/trace.zip +0 -0
  260. package/test-results/view-Others-rename-tab-cancelled-with-esc-chromium/trace.zip +0 -0
  261. package/test-results/view-Others-rename-tab-chromium/trace.zip +0 -0
  262. package/test-results/view-Overflow-menu-show-menu-chromium/trace.zip +0 -0
  263. package/test-results/view-Splitters-horizontal--5a358-ter-to-bottom-edge-and-back-chromium/trace.zip +0 -0
  264. package/test-results/view-Splitters-horizontal--f02d2-litter-to-top-edge-and-back-chromium/trace.zip +0 -0
  265. package/test-results/view-Splitters-horizontal-resizes-with-hsplitter-chromium/trace.zip +0 -0
  266. package/test-results/view-Splitters-vsplitter-chromium/trace.zip +0 -0
  267. package/test-results/view-Splitters-vsplitter-to-edge-chromium/trace.zip +0 -0
  268. package/test-results/view-Splitters-vsplitter-to-edge-left-chromium/trace.zip +0 -0
  269. package/test-results/view-borders-border-bottom-to-tab-chromium/trace.zip +0 -0
  270. package/test-results/view-borders-border-left-to-tab-chromium/trace.zip +0 -0
  271. package/test-results/view-borders-border-right-to-tab-chromium/trace.zip +0 -0
  272. package/test-results/view-borders-border-top-to-tab-chromium/trace.zip +0 -0
  273. package/test-results/view-borders-move-tab-in-border-bottom-chromium/trace.zip +0 -0
  274. package/test-results/view-borders-move-tab-in-border-left-chromium/trace.zip +0 -0
  275. package/test-results/view-borders-move-tab-in-border-right-chromium/trace.zip +0 -0
  276. package/test-results/view-borders-move-tab-in-border-top-chromium/trace.zip +0 -0
  277. package/test-results/view-borders-tab-to-border-bottom-chromium/trace.zip +0 -0
  278. package/test-results/view-borders-tab-to-border-left-chromium/trace.zip +0 -0
  279. package/test-results/view-borders-tab-to-border-right-chromium/trace.zip +0 -0
  280. package/test-results/view-borders-tab-to-border-top-chromium/trace.zip +0 -0
  281. package/test-results/view-borders-tab-to-open-border-bottom-center-chromium/trace.zip +0 -0
  282. package/test-results/view-borders-tab-to-open-border-bottom-chromium/trace.zip +0 -0
  283. package/test-results/view-borders-tab-to-open-border-left-center-chromium/trace.zip +0 -0
  284. package/test-results/view-borders-tab-to-open-border-left-chromium/trace.zip +0 -0
  285. package/test-results/view-borders-tab-to-open-border-right-center-chromium/trace.zip +0 -0
  286. package/test-results/view-borders-tab-to-open-border-right-chromium/trace.zip +0 -0
  287. package/test-results/view-borders-tab-to-open-border-top-center-chromium/trace.zip +0 -0
  288. package/test-results/view-borders-tab-to-open-border-top-chromium/trace.zip +0 -0
  289. package/test-results/view-drag-tests-two-tabs-tab-to-edge-chromium/trace.zip +0 -0
  290. package/test-results/view-drag-tests-two-tabs-tab-to-tab-bottom-chromium/trace.zip +0 -0
  291. package/test-results/view-drag-tests-two-tabs-tab-to-tab-center-chromium/trace.zip +0 -0
  292. package/test-results/view-drag-tests-two-tabs-tab-to-tab-left-chromium/trace.zip +0 -0
  293. package/test-results/view-drag-tests-two-tabs-tab-to-tab-right-chromium/trace.zip +0 -0
  294. package/test-results/view-drag-tests-two-tabs-tab-to-tab-top-chromium/trace.zip +0 -0
  295. package/test-results/view-tab-can-have-icon-chromium/trace.zip +0 -0
  296. package/test-results/view-three-tabs-move-tab-in-tabstrip-chromium/trace.zip +0 -0
  297. package/test-results/view-three-tabs-move-tabstrip-chromium/trace.zip +0 -0
  298. package/test-results/view-three-tabs-row-to-column-chromium/trace.zip +0 -0
  299. package/test-results/view-three-tabs-row-to-single-tabset-chromium/trace.zip +0 -0
  300. package/test-results/view-three-tabs-tab-to-edge-bottom-chromium/trace.zip +0 -0
  301. package/test-results/view-three-tabs-tab-to-edge-left-chromium/trace.zip +0 -0
  302. package/test-results/view-three-tabs-tab-to-edge-right-chromium/trace.zip +0 -0
  303. package/test-results/view-three-tabs-tab-to-edge-top-chromium/trace.zip +0 -0
  304. package/test-results/view-three-tabs-tab-to-tab-bottom-chromium/trace.zip +0 -0
  305. package/test-results/view-three-tabs-tab-to-tab-center-chromium/trace.zip +0 -0
  306. package/test-results/view-three-tabs-tab-to-tab-left-chromium/trace.zip +0 -0
  307. package/test-results/view-three-tabs-tab-to-tab-right-chromium/trace.zip +0 -0
  308. package/test-results/view-three-tabs-tab-to-tab-top-chromium/trace.zip +0 -0
  309. package/test-results/view-three-tabs-tab-to-tabset-chromium/trace.zip +0 -0
  310. package/tests-playwright/helpers.ts +124 -0
  311. package/tests-playwright/view.spec.ts +911 -0
  312. package/declarations/examples/demo/Utils.d.ts +0 -4
@@ -0,0 +1,79 @@
1
+ import { defineConfig, devices } from '@playwright/test';
2
+
3
+ /**
4
+ * Read environment variables from file.
5
+ * https://github.com/motdotla/dotenv
6
+ */
7
+ // import dotenv from 'dotenv';
8
+ // import path from 'path';
9
+ // dotenv.config({ path: path.resolve(__dirname, '.env') });
10
+
11
+ /**
12
+ * See https://playwright.dev/docs/test-configuration.
13
+ */
14
+ export default defineConfig({
15
+ testDir: './tests-playwright',
16
+ /* Run tests in files in parallel */
17
+ fullyParallel: true,
18
+ /* Fail the build on CI if you accidentally left test.only in the source code. */
19
+ forbidOnly: !!process.env.CI,
20
+ /* Retry on CI only */
21
+ retries: process.env.CI ? 2 : 0,
22
+ /* Opt out of parallel tests on CI. */
23
+ workers: process.env.CI ? 1 : undefined,
24
+ /* Reporter to use. See https://playwright.dev/docs/test-reporters */
25
+ reporter: 'html',
26
+ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
27
+ use: {
28
+ /* Base URL to use in actions like `await page.goto('/')`. */
29
+ // baseURL: 'http://127.0.0.1:3000',
30
+
31
+ /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
32
+ trace: 'on-first-retry',
33
+ },
34
+
35
+ /* Configure projects for major browsers */
36
+ projects: [
37
+ {
38
+ name: 'chromium',
39
+ use: { ...devices['Desktop Chrome'] },
40
+ },
41
+
42
+ // {
43
+ // name: 'firefox',
44
+ // use: { ...devices['Desktop Firefox'] },
45
+ // },
46
+
47
+ {
48
+ name: 'webkit',
49
+ use: { ...devices['Desktop Safari'] },
50
+ },
51
+
52
+ /* Test against mobile viewports. */
53
+ // {
54
+ // name: 'Mobile Chrome',
55
+ // use: { ...devices['Pixel 5'] },
56
+ // },
57
+ // {
58
+ // name: 'Mobile Safari',
59
+ // use: { ...devices['iPhone 12'] },
60
+ // },
61
+
62
+ /* Test against branded browsers. */
63
+ // {
64
+ // name: 'Microsoft Edge',
65
+ // use: { ...devices['Desktop Edge'], channel: 'msedge' },
66
+ // },
67
+ // {
68
+ // name: 'Google Chrome',
69
+ // use: { ...devices['Desktop Chrome'], channel: 'chrome' },
70
+ // },
71
+ ],
72
+
73
+ /* Run your local dev server before starting the tests */
74
+ // webServer: {
75
+ // command: 'npm run start',
76
+ // url: 'http://127.0.0.1:3000',
77
+ // reuseExistingServer: !process.env.CI,
78
+ // },
79
+ });
Binary file
@@ -62,7 +62,7 @@ export class AttributeDefinitions {
62
62
 
63
63
  update(jsonObj: any, obj: any) {
64
64
  for (const attr of this.attributes) {
65
- if (jsonObj.hasOwnProperty(attr.name)) {
65
+ if (Object.prototype.hasOwnProperty.call(jsonObj, attr.name)) {
66
66
  const fromValue = jsonObj[attr.name];
67
67
  if (fromValue === undefined) {
68
68
  delete obj[attr.name];
@@ -113,7 +113,7 @@ export class AttributeDefinitions {
113
113
  type = attr.type;
114
114
  }
115
115
 
116
- let defValue = JSON.stringify(defaultValue);
116
+ const defValue = JSON.stringify(defaultValue);
117
117
 
118
118
  const required = attr.required ? "" : "?";
119
119
 
package/src/Rect.ts CHANGED
@@ -34,7 +34,7 @@ export class Rect {
34
34
  }
35
35
 
36
36
  static getBoundingClientRect(element: Element) {
37
- let { x, y, width, height } = element.getBoundingClientRect();
37
+ const { x, y, width, height } = element.getBoundingClientRect();
38
38
  return new Rect(x, y, width, height);
39
39
  }
40
40
 
@@ -109,7 +109,7 @@ export const BorderButton = (props: IBorderButtonProps) => {
109
109
  if (event.code === 'Escape') {
110
110
  // esc
111
111
  layout.setEditingTab(undefined);
112
- } else if (event.code === 'Enter') {
112
+ } else if (event.code === 'Enter' || event.code === 'NumpadEnter') {
113
113
  // enter
114
114
  layout.setEditingTab(undefined);
115
115
  layout.doAction(Actions.renameTab(node.getId(), (event.target as HTMLInputElement).value));
@@ -3,7 +3,7 @@ import { Orientation } from "../Orientation";
3
3
  import { LayoutInternal } from "./Layout";
4
4
  import { BorderNode } from "../model/BorderNode";
5
5
  import { Rect } from "../Rect";
6
- import { Splitter } from "./Splitter";
6
+ import { Splitter, splitterDragging } from "./Splitter";
7
7
  import { DockLocation } from "../DockLocation";
8
8
  import { CLASSES } from "../Types";
9
9
 
@@ -17,15 +17,26 @@ export interface IBorderTabProps {
17
17
  export function BorderTab(props: IBorderTabProps) {
18
18
  const { layout, border, show } = props;
19
19
  const selfRef = React.useRef<HTMLDivElement | null>(null);
20
+ const timer = React.useRef<NodeJS.Timeout | undefined>(undefined);
20
21
 
21
22
  React.useLayoutEffect(() => {
22
23
  const outerRect = layout.getBoundingClientRect(selfRef.current!);
23
24
  const contentRect = Rect.getContentRect(selfRef.current!).relativeTo(layout.getDomRect()!);
24
25
  if (outerRect.width > 0) {
25
26
  border.setOuterRect(outerRect);
26
- if (!border.getContentRect().equals(contentRect)) {
27
+ if (!border.getContentRect().equals(contentRect) && !isNaN(contentRect.x)) {
27
28
  border.setContentRect(contentRect);
28
- layout.redrawInternal("border content rect");
29
+ if (splitterDragging) { // next movement will draw tabs again, only redraw after pause/end
30
+ if (timer.current) {
31
+ clearTimeout(timer.current);
32
+ }
33
+ timer.current = setTimeout(() => {
34
+ layout.redrawInternal("border content rect " + contentRect);
35
+ timer.current = undefined;
36
+ }, 50);
37
+ } else {
38
+ layout.redrawInternal("border content rect " + contentRect);
39
+ }
29
40
  }
30
41
  }
31
42
 
@@ -45,7 +56,7 @@ export function BorderTab(props: IBorderTabProps) {
45
56
  horizontal = false;
46
57
  }
47
58
 
48
- style.display = show ? "flex":"none";
59
+ style.display = show ? "flex" : "none";
49
60
 
50
61
  const className = layout.getClassName(CLASSES.FLEXLAYOUT__BORDER_TAB_CONTENTS);
51
62
 
@@ -54,14 +65,14 @@ export function BorderTab(props: IBorderTabProps) {
54
65
  <>
55
66
  <div ref={selfRef} style={style} className={className}>
56
67
  </div>
57
- {show && <Splitter layout={layout} node={border} index={0} horizontal={horizontal} />}
68
+ {show && <Splitter layout={layout} node={border} index={0} horizontal={horizontal} />}
58
69
  </>
59
70
  );
60
71
  } else {
61
72
  return (
62
73
  <>
63
- {show && <Splitter layout={layout} node={border} index={0} horizontal={horizontal} />}
64
- <div ref={selfRef} style={style} className={className}>
74
+ {show && <Splitter layout={layout} node={border} index={0} horizontal={horizontal} />}
75
+ <div ref={selfRef} style={style} className={className}>
65
76
  </div>
66
77
  </>
67
78
  );
@@ -1,5 +1,3 @@
1
- import * as React from "react";
2
-
3
1
  const style = { width: "1em", height: "1em", display: "flex", alignItems: "center" };
4
2
 
5
3
  export const CloseIcon = () => {
@@ -197,7 +197,8 @@ export class LayoutInternal extends React.Component<ILayoutInternalProps, ILayou
197
197
  private findBorderBarSizeRef: React.RefObject<HTMLDivElement | null>;
198
198
  private mainRef: React.RefObject<HTMLDivElement | null>;
199
199
  private previousModel?: Model;
200
- private orderedIds: string[];
200
+ private orderedTabIds: string[];
201
+ private orderedTabMoveableIds: string[];
201
202
  private moveableElementMap = new Map<string, HTMLElement>();
202
203
  private dropInfo: DropInfo | undefined;
203
204
  private outlineDiv?: HTMLElement;
@@ -222,7 +223,8 @@ export class LayoutInternal extends React.Component<ILayoutInternalProps, ILayou
222
223
  constructor(props: ILayoutInternalProps) {
223
224
  super(props);
224
225
 
225
- this.orderedIds = [];
226
+ this.orderedTabIds = [];
227
+ this.orderedTabMoveableIds = [];
226
228
  this.selfRef = React.createRef<HTMLDivElement>();
227
229
  this.moveablesRef = React.createRef<HTMLDivElement>();
228
230
  this.mainRef = React.createRef<HTMLDivElement>();
@@ -356,17 +358,18 @@ export class LayoutInternal extends React.Component<ILayoutInternalProps, ILayou
356
358
  const outer = this.renderBorders(inner);
357
359
 
358
360
  const tabs = this.renderTabs();
359
- const reorderedTabs = this.reorderComponents(tabs, this.orderedIds);
361
+ const reorderedTabs = this.reorderComponents(tabs, this.orderedTabIds);
360
362
 
361
363
  let floatingWindows = null;
362
- let tabMoveables = null;
364
+ let reorderedTabMoveables = null;
363
365
  let tabStamps = null;
364
366
  let metricElements = null;
365
367
 
366
368
  if (this.isMainWindow) {
367
369
  floatingWindows = this.renderWindows();
368
370
  metricElements = this.renderMetricsElements();
369
- tabMoveables = this.renderTabMoveables();
371
+ const tabMoveables = this.renderTabMoveables();
372
+ reorderedTabMoveables = this.reorderComponents(tabMoveables, this.orderedTabMoveableIds);
370
373
  tabStamps = <div key="__tabStamps__" className={this.getClassName(CLASSES.FLEXLAYOUT__LAYOUT_TAB_STAMPS)}>
371
374
  {this.renderTabStamps()}
372
375
  </div>;
@@ -386,7 +389,7 @@ export class LayoutInternal extends React.Component<ILayoutInternalProps, ILayou
386
389
  <Overlay key="__overlay__" layout={this} show={this.state.showOverlay} />
387
390
  {outer}
388
391
  {reorderedTabs}
389
- {tabMoveables}
392
+ {reorderedTabMoveables}
390
393
  {tabStamps}
391
394
  {this.state.portal}
392
395
  {floatingWindows}
@@ -553,7 +556,8 @@ export class LayoutInternal extends React.Component<ILayoutInternalProps, ILayou
553
556
  }
554
557
 
555
558
  renderTabMoveables() {
556
- const tabMoveables: React.ReactNode[] = [];
559
+ // const tabMoveables: React.ReactNode[] = [];
560
+ const tabMoveables = new Map<string, React.ReactNode>();
557
561
 
558
562
  this.props.model.visitNodes((node) => {
559
563
  if (node instanceof TabNode) {
@@ -570,7 +574,7 @@ export class LayoutInternal extends React.Component<ILayoutInternalProps, ILayou
570
574
  if (renderTab) {
571
575
  // console.log("rendertab", child.getName(), this.props.renderRevision);
572
576
  const key = child.getId() + (child.isEnableWindowReMount() ? child.getWindowId() : "");
573
- tabMoveables.push(createPortal(
577
+ tabMoveables.set(node.getId(), createPortal(
574
578
  <SizeTracker rect={rect} selected={child.isSelected()} forceRevision={this.state.forceRevision} tabsRevision={this.props.renderRevision} key={key}>
575
579
  <ErrorBoundary message={this.i18nName(I18nLabel.Error_rendering_component)}>
576
580
  {this.props.factory(child)}
@@ -1228,7 +1232,7 @@ export class LayoutInternal extends React.Component<ILayoutInternalProps, ILayou
1228
1232
  // *************************** End Drag Drop *************************************
1229
1233
  }
1230
1234
 
1231
- export const FlexLayoutVersion = "0.8.9";
1235
+ export const FlexLayoutVersion = "0.8.11";
1232
1236
 
1233
1237
  export type DragRectRenderCallback = (
1234
1238
  content: React.ReactNode | undefined,
@@ -1327,4 +1331,4 @@ class DragState {
1327
1331
  this.dragJson = dragJson;
1328
1332
  this.fnNewNodeDropped = fnNewNodeDropped;
1329
1333
  }
1330
- }
1334
+ }
@@ -1,4 +1,3 @@
1
- import * as React from "react";
2
1
  import { LayoutInternal } from "./Layout";
3
2
  import { CLASSES } from "../Types";
4
3
 
@@ -16,6 +16,9 @@ export interface ISplitterProps {
16
16
  horizontal: boolean;
17
17
  }
18
18
 
19
+ /** @internal */
20
+ export let splitterDragging:boolean = false; // used in tabset & borderTab
21
+
19
22
  /** @internal */
20
23
  export const Splitter = (props: ISplitterProps) => {
21
24
  const { layout, node, index, horizontal } = props;
@@ -94,6 +97,7 @@ export const Splitter = (props: ISplitterProps) => {
94
97
  }
95
98
 
96
99
  setDragging(true);
100
+ splitterDragging = true;
97
101
  };
98
102
 
99
103
  const onDragCancel = () => {
@@ -103,6 +107,7 @@ export const Splitter = (props: ISplitterProps) => {
103
107
  }
104
108
  outlineDiv.current = undefined;
105
109
  setDragging(false);
110
+ splitterDragging = false;
106
111
  };
107
112
 
108
113
  const onDragMove = (x: number, y: number) => {
@@ -136,6 +141,7 @@ export const Splitter = (props: ISplitterProps) => {
136
141
  }
137
142
  enablePointerOnIFrames(true, layout.getCurrentDocument()!);
138
143
  setDragging(false);
144
+ splitterDragging = false;
139
145
  };
140
146
 
141
147
  const updateLayout = (realtime: boolean) => {
@@ -109,7 +109,7 @@ export const TabButton = (props: ITabButtonProps) => {
109
109
  if (event.code === 'Escape') {
110
110
  // esc
111
111
  layout.setEditingTab(undefined);
112
- } else if (event.code === 'Enter') {
112
+ } else if (event.code === 'Enter' || event.code === 'NumpadEnter') {
113
113
  // enter
114
114
  layout.setEditingTab(undefined);
115
115
  layout.doAction(Actions.renameTab(node.getId(), (event.target as HTMLInputElement).value));
@@ -1,4 +1,3 @@
1
- import * as React from "react";
2
1
  import { TabNode } from "../model/TabNode";
3
2
  import { LayoutInternal } from "./Layout";
4
3
  import { CLASSES } from "../Types";
@@ -12,6 +12,7 @@ import { CLASSES } from "../Types";
12
12
  import { isAuxMouseEvent } from "./Utils";
13
13
  import { createPortal } from "react-dom";
14
14
  import { Rect } from "../Rect";
15
+ import { splitterDragging } from "./Splitter";
15
16
 
16
17
  /** @internal */
17
18
  export interface ITabSetProps {
@@ -30,11 +31,11 @@ export const TabSet = (props: ITabSetProps) => {
30
31
  const buttonBarRef = React.useRef<HTMLDivElement | null>(null);
31
32
  const overflowbuttonRef = React.useRef<HTMLButtonElement | null>(null);
32
33
  const stickyButtonsRef = React.useRef<HTMLDivElement | null>(null);
34
+ const timer = React.useRef<NodeJS.Timeout | undefined>(undefined);
33
35
 
34
36
  const icons = layout.getIcons();
35
37
 
36
- // must use useEffect (rather than useLayoutEffect) otherwise contentrect not set correctly (has height 0 when changing theme in demo)
37
- React.useEffect(() => {
38
+ React.useLayoutEffect(() => {
38
39
  node.setRect(layout.getBoundingClientRect(selfRef.current!));
39
40
 
40
41
  if (tabStripRef.current) {
@@ -42,11 +43,19 @@ export const TabSet = (props: ITabSetProps) => {
42
43
  }
43
44
 
44
45
  const newContentRect = Rect.getContentRect(contentRef.current!).relativeTo(layout.getDomRect()!);
45
- if (!node.getContentRect().equals(newContentRect)) {
46
+ if (!node.getContentRect().equals(newContentRect) && !isNaN(newContentRect.x)) {
46
47
  node.setContentRect(newContentRect);
47
- setTimeout(() => { //prevent Maximum update depth exceeded error
48
- layout.redrawInternal("tabset content rect " + newContentRect);
49
- }, 0);
48
+ if (splitterDragging) { // next movement will draw tabs again, only redraw after pause/end
49
+ if (timer.current) {
50
+ clearTimeout(timer.current);
51
+ }
52
+ timer.current = setTimeout(() => {
53
+ layout.redrawInternal("border content rect " + newContentRect);
54
+ timer.current = undefined;
55
+ }, 50);
56
+ } else {
57
+ layout.redrawInternal("border content rect " + newContentRect);
58
+ }
50
59
  }
51
60
  });
52
61
 
@@ -211,7 +220,7 @@ export const TabSet = (props: ITabSetProps) => {
211
220
  } else {
212
221
  overflowContent = (<>
213
222
  {icons.more}
214
- <div className={cm(CLASSES.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT)}>{hiddenTabs.length>0?hiddenTabs.length: ""}</div>
223
+ <div className={cm(CLASSES.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT)}>{hiddenTabs.length > 0 ? hiddenTabs.length : ""}</div>
215
224
  </>);
216
225
  }
217
226
  buttons.splice(Math.min(renderState.overflowPosition, buttons.length), 0,