flexlayout-react 0.7.15 → 0.8.1

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 (252) hide show
  1. package/ChangeLog.txt +28 -0
  2. package/README.md +157 -330
  3. package/Screenshot_light.png +0 -0
  4. package/Screenshot_rounded.png +0 -0
  5. package/declarations/Attribute.d.ts +1 -1
  6. package/declarations/AttributeDefinitions.d.ts +1 -1
  7. package/declarations/DockLocation.d.ts +12 -12
  8. package/declarations/DropInfo.d.ts +12 -12
  9. package/declarations/I18nLabel.d.ts +12 -14
  10. package/declarations/Orientation.d.ts +7 -7
  11. package/declarations/PopupMenu.d.ts +1 -1
  12. package/declarations/Rect.d.ts +41 -28
  13. package/declarations/Types.d.ts +95 -79
  14. package/declarations/examples/demo/Utils.d.ts +4 -0
  15. package/declarations/index.d.ts +21 -22
  16. package/declarations/model/Action.d.ts +5 -5
  17. package/declarations/model/Actions.d.ts +127 -110
  18. package/declarations/model/BorderNode.d.ts +30 -34
  19. package/declarations/model/BorderSet.d.ts +3 -4
  20. package/declarations/model/ICloseType.d.ts +5 -5
  21. package/declarations/model/IDraggable.d.ts +2 -2
  22. package/declarations/model/IDropTarget.d.ts +2 -2
  23. package/declarations/model/IJsonModel.d.ts +811 -149
  24. package/declarations/model/LayoutWindow.d.ts +28 -0
  25. package/declarations/model/Model.d.ts +91 -86
  26. package/declarations/model/Node.d.ts +17 -17
  27. package/declarations/model/RowNode.d.ts +10 -11
  28. package/declarations/model/TabNode.d.ts +44 -37
  29. package/declarations/model/TabSetNode.d.ts +44 -41
  30. package/declarations/model/Utils.d.ts +1 -1
  31. package/declarations/model/WindowLayout.d.ts +24 -0
  32. package/declarations/src/Attribute.d.ts +1 -0
  33. package/declarations/src/AttributeDefinitions.d.ts +1 -0
  34. package/declarations/src/DockLocation.d.ts +12 -0
  35. package/declarations/src/DropInfo.d.ts +12 -0
  36. package/declarations/src/I18nLabel.d.ts +10 -0
  37. package/declarations/src/Orientation.d.ts +7 -0
  38. package/declarations/src/PopupMenu.d.ts +1 -0
  39. package/declarations/src/Rect.d.ts +31 -0
  40. package/declarations/src/Types.d.ts +92 -0
  41. package/declarations/src/index.d.ts +20 -0
  42. package/declarations/src/model/Action.d.ts +5 -0
  43. package/declarations/src/model/Actions.d.ts +110 -0
  44. package/declarations/src/model/BorderNode.d.ts +28 -0
  45. package/declarations/src/model/BorderSet.d.ts +3 -0
  46. package/declarations/src/model/ICloseType.d.ts +5 -0
  47. package/declarations/src/model/IDraggable.d.ts +2 -0
  48. package/declarations/src/model/IDropTarget.d.ts +2 -0
  49. package/declarations/src/model/IJsonModel.d.ts +153 -0
  50. package/declarations/src/model/Model.d.ts +98 -0
  51. package/declarations/src/model/Node.d.ts +16 -0
  52. package/declarations/src/model/RowNode.d.ts +11 -0
  53. package/declarations/src/model/TabNode.d.ts +36 -0
  54. package/declarations/src/model/TabSetNode.d.ts +37 -0
  55. package/declarations/src/model/Utils.d.ts +1 -0
  56. package/declarations/src/view/BorderButton.d.ts +1 -0
  57. package/declarations/src/view/BorderTab.d.ts +2 -0
  58. package/declarations/src/view/BorderTabSet.d.ts +1 -0
  59. package/declarations/src/view/DragContainer.d.ts +1 -0
  60. package/declarations/src/view/ErrorBoundary.d.ts +1 -0
  61. package/declarations/src/view/FloatingWindow.d.ts +1 -0
  62. package/declarations/src/view/Icons.d.ts +7 -0
  63. package/declarations/src/view/Layout.d.ts +113 -0
  64. package/declarations/src/view/Overlay.d.ts +1 -0
  65. package/declarations/src/view/PopupMenu.d.ts +1 -0
  66. package/declarations/src/view/Row.d.ts +1 -0
  67. package/declarations/src/view/Splitter.d.ts +1 -0
  68. package/declarations/src/view/Tab.d.ts +1 -0
  69. package/declarations/src/view/TabButton.d.ts +1 -0
  70. package/declarations/src/view/TabButtonStamp.d.ts +1 -0
  71. package/declarations/src/view/TabOverflowHook.d.ts +1 -0
  72. package/declarations/src/view/TabSet.d.ts +1 -0
  73. package/declarations/src/view/Utils.d.ts +4 -0
  74. package/declarations/view/BorderButton.d.ts +1 -1
  75. package/declarations/view/BorderTab.d.ts +2 -0
  76. package/declarations/view/BorderTabSet.d.ts +1 -1
  77. package/declarations/view/DragContainer.d.ts +1 -0
  78. package/declarations/view/ErrorBoundary.d.ts +1 -1
  79. package/declarations/view/ExtendedResizeObserver.d.ts +23 -0
  80. package/declarations/view/FloatingWindow.d.ts +1 -1
  81. package/declarations/view/Icons.d.ts +8 -7
  82. package/declarations/view/Layout.d.ts +140 -161
  83. package/declarations/view/Overlay.d.ts +1 -0
  84. package/declarations/view/PopoutWindow.d.ts +1 -0
  85. package/declarations/view/PopupMenu.d.ts +1 -0
  86. package/declarations/view/Row.d.ts +1 -0
  87. package/declarations/view/SizeTracker.d.ts +10 -0
  88. package/declarations/view/Splitter.d.ts +1 -1
  89. package/declarations/view/Tab.d.ts +1 -1
  90. package/declarations/view/TabButton.d.ts +1 -1
  91. package/declarations/view/TabButtonStamp.d.ts +1 -1
  92. package/declarations/view/TabOverflowHook.d.ts +1 -1
  93. package/declarations/view/TabSet.d.ts +1 -1
  94. package/declarations/view/Utils.d.ts +11 -1
  95. package/dist/bundles/demo.js +232052 -0
  96. package/dist/bundles/demo.js.map +1 -0
  97. package/dist/flexlayout.js +122 -92
  98. package/dist/flexlayout_min.js +1 -1
  99. package/lib/Attribute.js +42 -31
  100. package/lib/Attribute.js.map +1 -1
  101. package/lib/AttributeDefinitions.js +131 -108
  102. package/lib/AttributeDefinitions.js.map +1 -1
  103. package/lib/DockLocation.js +120 -124
  104. package/lib/DockLocation.js.map +1 -1
  105. package/lib/DropInfo.js +9 -13
  106. package/lib/DropInfo.js.map +1 -1
  107. package/lib/I18nLabel.js +13 -18
  108. package/lib/I18nLabel.js.map +1 -1
  109. package/lib/Orientation.js +22 -26
  110. package/lib/Orientation.js.map +1 -1
  111. package/lib/Rect.js +104 -72
  112. package/lib/Rect.js.map +1 -1
  113. package/lib/Types.js +96 -83
  114. package/lib/Types.js.map +1 -1
  115. package/lib/index.js +21 -38
  116. package/lib/index.js.map +1 -1
  117. package/lib/model/Action.js +6 -10
  118. package/lib/model/Action.js.map +1 -1
  119. package/lib/model/Actions.js +169 -155
  120. package/lib/model/Actions.js.map +1 -1
  121. package/lib/model/BorderNode.js +385 -406
  122. package/lib/model/BorderNode.js.map +1 -1
  123. package/lib/model/BorderSet.js +66 -121
  124. package/lib/model/BorderSet.js.map +1 -1
  125. package/lib/model/ICloseType.js +6 -9
  126. package/lib/model/ICloseType.js.map +1 -1
  127. package/lib/model/IDraggable.js +1 -2
  128. package/lib/model/IDropTarget.js +1 -2
  129. package/lib/model/IJsonModel.js +1 -2
  130. package/lib/model/LayoutWindow.js +83 -0
  131. package/lib/model/LayoutWindow.js.map +1 -0
  132. package/lib/model/Model.js +614 -496
  133. package/lib/model/Model.js.map +1 -1
  134. package/lib/model/Node.js +217 -228
  135. package/lib/model/Node.js.map +1 -1
  136. package/lib/model/RowNode.js +491 -504
  137. package/lib/model/RowNode.js.map +1 -1
  138. package/lib/model/TabNode.js +289 -184
  139. package/lib/model/TabNode.js.map +1 -1
  140. package/lib/model/TabSetNode.js +459 -446
  141. package/lib/model/TabSetNode.js.map +1 -1
  142. package/lib/model/Utils.js +47 -82
  143. package/lib/model/Utils.js.map +1 -1
  144. package/lib/view/BorderButton.js +129 -138
  145. package/lib/view/BorderButton.js.map +1 -1
  146. package/lib/view/BorderTab.js +47 -0
  147. package/lib/view/BorderTab.js.map +1 -0
  148. package/lib/view/BorderTabSet.js +134 -128
  149. package/lib/view/BorderTabSet.js.map +1 -1
  150. package/lib/view/DragContainer.js +16 -0
  151. package/lib/view/DragContainer.js.map +1 -0
  152. package/lib/view/ErrorBoundary.js +23 -27
  153. package/lib/view/ErrorBoundary.js.map +1 -1
  154. package/lib/view/Icons.js +40 -45
  155. package/lib/view/Icons.js.map +1 -1
  156. package/lib/view/Layout.js +919 -907
  157. package/lib/view/Layout.js.map +1 -1
  158. package/lib/view/Overlay.js +9 -0
  159. package/lib/view/Overlay.js.map +1 -0
  160. package/lib/view/PopoutWindow.js +129 -0
  161. package/lib/view/PopoutWindow.js.map +1 -0
  162. package/lib/view/PopupMenu.js +71 -0
  163. package/lib/view/PopupMenu.js.map +1 -0
  164. package/lib/view/Row.js +45 -0
  165. package/lib/view/Row.js.map +1 -0
  166. package/lib/view/SizeTracker.js +11 -0
  167. package/lib/view/SizeTracker.js.map +1 -0
  168. package/lib/view/Splitter.js +191 -147
  169. package/lib/view/Splitter.js.map +1 -1
  170. package/lib/view/Tab.js +86 -60
  171. package/lib/view/Tab.js.map +1 -1
  172. package/lib/view/TabButton.js +127 -135
  173. package/lib/view/TabButton.js.map +1 -1
  174. package/lib/view/TabButtonStamp.js +16 -21
  175. package/lib/view/TabButtonStamp.js.map +1 -1
  176. package/lib/view/TabOverflowHook.js +150 -149
  177. package/lib/view/TabOverflowHook.js.map +1 -1
  178. package/lib/view/TabSet.js +272 -234
  179. package/lib/view/TabSet.js.map +1 -1
  180. package/lib/view/Utils.js +126 -68
  181. package/lib/view/Utils.js.map +1 -1
  182. package/package.json +36 -30
  183. package/src/Attribute.ts +23 -0
  184. package/src/AttributeDefinitions.ts +38 -15
  185. package/src/DockLocation.ts +13 -13
  186. package/src/I18nLabel.ts +7 -9
  187. package/src/Rect.ts +53 -1
  188. package/src/Types.ts +16 -0
  189. package/src/index.ts +1 -2
  190. package/src/model/Actions.ts +49 -29
  191. package/src/model/BorderNode.ts +208 -214
  192. package/src/model/BorderSet.ts +42 -91
  193. package/src/model/IJsonModel.ts +883 -103
  194. package/src/model/LayoutWindow.ts +121 -0
  195. package/src/model/Model.ts +488 -366
  196. package/src/model/Node.ts +98 -111
  197. package/src/model/RowNode.ts +323 -319
  198. package/src/model/TabNode.ts +294 -110
  199. package/src/model/TabSetNode.ts +303 -242
  200. package/src/model/Utils.ts +6 -32
  201. package/src/view/BorderButton.tsx +36 -52
  202. package/src/view/BorderTab.tsx +70 -0
  203. package/src/view/BorderTabSet.tsx +64 -52
  204. package/src/view/DragContainer.tsx +32 -0
  205. package/src/view/Icons.tsx +6 -0
  206. package/src/view/Layout.tsx +1053 -1046
  207. package/src/view/Overlay.tsx +22 -0
  208. package/src/view/PopoutWindow.tsx +152 -0
  209. package/src/{PopupMenu.tsx → view/PopupMenu.tsx} +36 -31
  210. package/src/view/Row.tsx +68 -0
  211. package/src/view/SizeTracker.tsx +20 -0
  212. package/src/view/Splitter.tsx +167 -112
  213. package/src/view/Tab.tsx +76 -42
  214. package/src/view/TabButton.tsx +39 -54
  215. package/src/view/TabButtonStamp.tsx +5 -9
  216. package/src/view/TabOverflowHook.tsx +14 -9
  217. package/src/view/TabSet.tsx +221 -176
  218. package/src/view/Utils.tsx +119 -39
  219. package/style/_base.scss +140 -34
  220. package/style/dark.css +140 -35
  221. package/style/dark.css.map +1 -1
  222. package/style/dark.scss +3 -1
  223. package/style/gray.css +139 -34
  224. package/style/gray.css.map +1 -1
  225. package/style/gray.scss +2 -0
  226. package/style/light.css +141 -36
  227. package/style/light.css.map +1 -1
  228. package/style/light.scss +4 -2
  229. package/style/rounded.css +697 -0
  230. package/style/rounded.css.map +1 -0
  231. package/style/rounded.scss +194 -0
  232. package/style/underline.css +139 -34
  233. package/style/underline.css.map +1 -1
  234. package/style/underline.scss +2 -0
  235. package/cypress.config.ts +0 -16
  236. package/lib/DragDrop.js +0 -316
  237. package/lib/DragDrop.js.map +0 -1
  238. package/lib/PopupMenu.js +0 -68
  239. package/lib/PopupMenu.js.map +0 -1
  240. package/lib/model/SplitterNode.js +0 -72
  241. package/lib/model/SplitterNode.js.map +0 -1
  242. package/lib/view/FloatingWindow.js +0 -123
  243. package/lib/view/FloatingWindow.js.map +0 -1
  244. package/lib/view/FloatingWindowTab.js +0 -19
  245. package/lib/view/FloatingWindowTab.js.map +0 -1
  246. package/lib/view/TabFloating.js +0 -66
  247. package/lib/view/TabFloating.js.map +0 -1
  248. package/src/DragDrop.ts +0 -392
  249. package/src/model/SplitterNode.ts +0 -78
  250. package/src/view/FloatingWindow.tsx +0 -140
  251. package/src/view/FloatingWindowTab.tsx +0 -29
  252. package/src/view/TabFloating.tsx +0 -101
@@ -1,150 +1,151 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useTabOverflow = void 0;
4
- const React = require("react");
5
- const Rect_1 = require("../Rect");
6
- const TabSetNode_1 = require("../model/TabSetNode");
7
- const Orientation_1 = require("../Orientation");
8
- /** @internal */
9
- const useTabOverflow = (node, orientation, toolbarRef, stickyButtonsRef) => {
10
- const firstRender = React.useRef(true);
11
- const tabsTruncated = React.useRef(false);
12
- const lastRect = React.useRef(new Rect_1.Rect(0, 0, 0, 0));
13
- const selfRef = React.useRef(null);
14
- const [position, setPosition] = React.useState(0);
15
- const userControlledLeft = React.useRef(false);
16
- const [hiddenTabs, setHiddenTabs] = React.useState([]);
17
- const lastHiddenCount = React.useRef(0);
18
- // if selected node or tabset/border rectangle change then unset usercontrolled (so selected tab will be kept in view)
19
- React.useLayoutEffect(() => {
20
- userControlledLeft.current = false;
21
- }, [node.getSelectedNode(), node.getRect().width, node.getRect().height]);
22
- React.useLayoutEffect(() => {
23
- updateVisibleTabs();
24
- });
25
- const instance = selfRef.current;
26
- React.useEffect(() => {
27
- if (!instance) {
28
- return;
29
- }
30
- instance.addEventListener("wheel", onWheel, { passive: false });
31
- return () => {
32
- instance.removeEventListener("wheel", onWheel);
33
- };
34
- }, [instance]);
35
- // needed to prevent default mouse wheel over tabset/border (cannot do with react event?)
36
- const onWheel = (event) => {
37
- event.preventDefault();
38
- };
39
- const getNear = (rect) => {
40
- if (orientation === Orientation_1.Orientation.HORZ) {
41
- return rect.x;
42
- }
43
- else {
44
- return rect.y;
45
- }
46
- };
47
- const getFar = (rect) => {
48
- if (orientation === Orientation_1.Orientation.HORZ) {
49
- return rect.getRight();
50
- }
51
- else {
52
- return rect.getBottom();
53
- }
54
- };
55
- const getSize = (rect) => {
56
- if (orientation === Orientation_1.Orientation.HORZ) {
57
- return rect.width;
58
- }
59
- else {
60
- return rect.height;
61
- }
62
- };
63
- const updateVisibleTabs = () => {
64
- const tabMargin = 2;
65
- if (firstRender.current === true) {
66
- tabsTruncated.current = false;
67
- }
68
- const nodeRect = node instanceof TabSetNode_1.TabSetNode ? node.getRect() : node.getTabHeaderRect();
69
- let lastChild = node.getChildren()[node.getChildren().length - 1];
70
- const stickyButtonsSize = stickyButtonsRef.current === null ? 0 : getSize(stickyButtonsRef.current.getBoundingClientRect());
71
- if (firstRender.current === true ||
72
- (lastHiddenCount.current === 0 && hiddenTabs.length !== 0) ||
73
- nodeRect.width !== lastRect.current.width || // incase rect changed between first render and second
74
- nodeRect.height !== lastRect.current.height) {
75
- lastHiddenCount.current = hiddenTabs.length;
76
- lastRect.current = nodeRect;
77
- const enabled = node instanceof TabSetNode_1.TabSetNode ? node.isEnableTabStrip() === true : true;
78
- let endPos = getFar(nodeRect) - stickyButtonsSize;
79
- if (toolbarRef.current !== null) {
80
- endPos -= getSize(toolbarRef.current.getBoundingClientRect());
81
- }
82
- if (enabled && node.getChildren().length > 0) {
83
- if (hiddenTabs.length === 0 && position === 0 && getFar(lastChild.getTabRect()) + tabMargin < endPos) {
84
- return; // nothing to do all tabs are shown in available space
85
- }
86
- let shiftPos = 0;
87
- const selectedTab = node.getSelectedNode();
88
- if (selectedTab && !userControlledLeft.current) {
89
- const selectedRect = selectedTab.getTabRect();
90
- const selectedStart = getNear(selectedRect) - tabMargin;
91
- const selectedEnd = getFar(selectedRect) + tabMargin;
92
- // when selected tab is larger than available space then align left
93
- if (getSize(selectedRect) + 2 * tabMargin >= endPos - getNear(nodeRect)) {
94
- shiftPos = getNear(nodeRect) - selectedStart;
95
- }
96
- else {
97
- if (selectedEnd > endPos || selectedStart < getNear(nodeRect)) {
98
- if (selectedStart < getNear(nodeRect)) {
99
- shiftPos = getNear(nodeRect) - selectedStart;
100
- }
101
- // use second if statement to prevent tab moving back then forwards if not enough space for single tab
102
- if (selectedEnd + shiftPos > endPos) {
103
- shiftPos = endPos - selectedEnd;
104
- }
105
- }
106
- }
107
- }
108
- const extraSpace = Math.max(0, endPos - (getFar(lastChild.getTabRect()) + tabMargin + shiftPos));
109
- const newPosition = Math.min(0, position + shiftPos + extraSpace);
110
- // find hidden tabs
111
- const diff = newPosition - position;
112
- const hidden = [];
113
- for (let i = 0; i < node.getChildren().length; i++) {
114
- const child = node.getChildren()[i];
115
- if (getNear(child.getTabRect()) + diff < getNear(nodeRect) || getFar(child.getTabRect()) + diff > endPos) {
116
- hidden.push({ node: child, index: i });
117
- }
118
- }
119
- if (hidden.length > 0) {
120
- tabsTruncated.current = true;
121
- }
122
- firstRender.current = false; // need to do a second render
123
- setHiddenTabs(hidden);
124
- setPosition(newPosition);
125
- }
126
- }
127
- else {
128
- firstRender.current = true;
129
- }
130
- };
131
- const onMouseWheel = (event) => {
132
- let delta = 0;
133
- if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) {
134
- delta = -event.deltaX;
135
- }
136
- else {
137
- delta = -event.deltaY;
138
- }
139
- if (event.deltaMode === 1) {
140
- // DOM_DELTA_LINE 0x01 The delta values are specified in lines.
141
- delta *= 40;
142
- }
143
- setPosition(position + delta);
144
- userControlledLeft.current = true;
145
- event.stopPropagation();
146
- };
147
- return { selfRef, position, userControlledLeft, hiddenTabs, onMouseWheel, tabsTruncated: tabsTruncated.current };
148
- };
149
- exports.useTabOverflow = useTabOverflow;
1
+ import * as React from "react";
2
+ import { Rect } from "../Rect";
3
+ import { TabSetNode } from "../model/TabSetNode";
4
+ import { Orientation } from "../Orientation";
5
+ /** @internal */
6
+ export const useTabOverflow = (node, orientation, toolbarRef, stickyButtonsRef) => {
7
+ const firstRender = React.useRef(true);
8
+ const tabsTruncated = React.useRef(false);
9
+ const lastRect = React.useRef(Rect.empty());
10
+ const selfRef = React.useRef(null);
11
+ const [position, setPosition] = React.useState(0);
12
+ const userControlledLeft = React.useRef(false);
13
+ const [hiddenTabs, setHiddenTabs] = React.useState([]);
14
+ const lastHiddenCount = React.useRef(0);
15
+ // if selected node or tabset/border rectangle change then unset usercontrolled (so selected tab will be kept in view)
16
+ React.useLayoutEffect(() => {
17
+ userControlledLeft.current = false;
18
+ }, [node.getSelectedNode(), node.getRect().width, node.getRect().height]);
19
+ React.useLayoutEffect(() => {
20
+ const nodeRect = node instanceof TabSetNode ? node.getRect() : node.getTabHeaderRect();
21
+ if (nodeRect.width > 0 && nodeRect.height > 0) {
22
+ updateVisibleTabs();
23
+ }
24
+ });
25
+ const instance = toolbarRef.current;
26
+ React.useEffect(() => {
27
+ if (!instance) {
28
+ return;
29
+ }
30
+ instance.addEventListener("wheel", onWheel, { passive: false });
31
+ return () => {
32
+ instance.removeEventListener("wheel", onWheel);
33
+ };
34
+ }, [instance]);
35
+ // needed to prevent default mouse wheel over tabset/border (cannot do with react event?)
36
+ const onWheel = (event) => {
37
+ event.preventDefault();
38
+ };
39
+ const getNear = (rect) => {
40
+ if (orientation === Orientation.HORZ) {
41
+ return rect.x;
42
+ }
43
+ else {
44
+ return rect.y;
45
+ }
46
+ };
47
+ const getFar = (rect) => {
48
+ if (orientation === Orientation.HORZ) {
49
+ return rect.getRight();
50
+ }
51
+ else {
52
+ return rect.getBottom();
53
+ }
54
+ };
55
+ const getSize = (rect) => {
56
+ if (orientation === Orientation.HORZ) {
57
+ return rect.width;
58
+ }
59
+ else {
60
+ return rect.height;
61
+ }
62
+ };
63
+ const updateVisibleTabs = () => {
64
+ const tabMargin = 2;
65
+ if (firstRender.current === true) {
66
+ tabsTruncated.current = false;
67
+ }
68
+ const nodeRect = node instanceof TabSetNode ? node.getRect() : node.getTabHeaderRect();
69
+ let lastChild = node.getChildren()[node.getChildren().length - 1];
70
+ const stickyButtonsSize = stickyButtonsRef.current === null ? 0 : getSize(stickyButtonsRef.current.getBoundingClientRect());
71
+ if (firstRender.current === true ||
72
+ (lastHiddenCount.current === 0 && hiddenTabs.length !== 0) ||
73
+ nodeRect.width !== lastRect.current.width || // incase rect changed between first render and second
74
+ nodeRect.height !== lastRect.current.height) {
75
+ lastHiddenCount.current = hiddenTabs.length;
76
+ lastRect.current = nodeRect;
77
+ const enabled = node instanceof TabSetNode ? node.isEnableTabStrip() === true : true;
78
+ let endPos = getFar(nodeRect) - stickyButtonsSize;
79
+ if (toolbarRef.current !== null) {
80
+ endPos -= getSize(toolbarRef.current.getBoundingClientRect());
81
+ }
82
+ if (enabled && node.getChildren().length > 0) {
83
+ if (hiddenTabs.length === 0 && position === 0 && getFar(lastChild.getTabRect()) + tabMargin < endPos) {
84
+ return; // nothing to do all tabs are shown in available space
85
+ }
86
+ let shiftPos = 0;
87
+ const selectedTab = node.getSelectedNode();
88
+ if (selectedTab && !userControlledLeft.current) {
89
+ const selectedRect = selectedTab.getTabRect();
90
+ const selectedStart = getNear(selectedRect) - tabMargin;
91
+ const selectedEnd = getFar(selectedRect) + tabMargin;
92
+ // when selected tab is larger than available space then align left
93
+ if (getSize(selectedRect) + 2 * tabMargin >= endPos - getNear(nodeRect)) {
94
+ shiftPos = getNear(nodeRect) - selectedStart;
95
+ // console.log("shiftPos1", shiftPos, getNear(nodeRect), selectedStart);
96
+ }
97
+ else {
98
+ if (selectedEnd > endPos || selectedStart < getNear(nodeRect)) {
99
+ if (selectedStart < getNear(nodeRect)) {
100
+ shiftPos = getNear(nodeRect) - selectedStart;
101
+ // console.log("shiftPos2", shiftPos, getNear(nodeRect), selectedStart);
102
+ }
103
+ // use second if statement to prevent tab moving back then forwards if not enough space for single tab
104
+ if (selectedEnd + shiftPos > endPos) {
105
+ shiftPos = endPos - selectedEnd;
106
+ }
107
+ }
108
+ }
109
+ }
110
+ const extraSpace = Math.max(0, endPos - (getFar(lastChild.getTabRect()) + tabMargin + shiftPos));
111
+ const newPosition = Math.min(0, position + shiftPos + extraSpace);
112
+ // console.log("newPosition", newPosition, position, shiftPos, extraSpace);
113
+ // find hidden tabs
114
+ const diff = newPosition - position;
115
+ const hidden = [];
116
+ for (let i = 0; i < node.getChildren().length; i++) {
117
+ const child = node.getChildren()[i];
118
+ if (getNear(child.getTabRect()) + diff < getNear(nodeRect) || getFar(child.getTabRect()) + diff > endPos) {
119
+ hidden.push({ node: child, index: i });
120
+ }
121
+ }
122
+ tabsTruncated.current = hidden.length > 0;
123
+ firstRender.current = false; // need to do a second render
124
+ setHiddenTabs(hidden);
125
+ // console.log(newPosition);
126
+ setPosition(newPosition);
127
+ }
128
+ }
129
+ else {
130
+ firstRender.current = true;
131
+ }
132
+ };
133
+ const onMouseWheel = (event) => {
134
+ let delta = 0;
135
+ if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) {
136
+ delta = -event.deltaX;
137
+ }
138
+ else {
139
+ delta = -event.deltaY;
140
+ }
141
+ if (event.deltaMode === 1) {
142
+ // DOM_DELTA_LINE 0x01 The delta values are specified in lines.
143
+ delta *= 40;
144
+ }
145
+ setPosition(position + delta);
146
+ userControlledLeft.current = true;
147
+ event.stopPropagation();
148
+ };
149
+ return { selfRef, position, userControlledLeft, hiddenTabs, onMouseWheel, tabsTruncated: tabsTruncated.current };
150
+ };
150
151
  //# sourceMappingURL=TabOverflowHook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabOverflowHook.js","sourceRoot":"","sources":["../../src/view/TabOverflowHook.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TabOverflowHook.js","sourceRoot":"","sources":["../../src/view/TabOverflowHook.tsx"],"names":[],"mappings":"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"}