flexlayout-react 0.7.14 → 0.8.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 (252) hide show
  1. package/ChangeLog.txt +26 -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 -6
  82. package/declarations/view/Layout.d.ts +139 -160
  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 +457 -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 +124 -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 -40
  155. package/lib/view/Icons.js.map +1 -1
  156. package/lib/view/Layout.js +918 -901
  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 +122 -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 +267 -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 +300 -242
  200. package/src/model/Utils.ts +6 -32
  201. package/src/view/BorderButton.tsx +32 -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 +13 -0
  206. package/src/view/Layout.tsx +1071 -1047
  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 +36 -55
  215. package/src/view/TabButtonStamp.tsx +5 -9
  216. package/src/view/TabOverflowHook.tsx +14 -9
  217. package/src/view/TabSet.tsx +217 -176
  218. package/src/view/Utils.tsx +119 -39
  219. package/style/_base.scss +143 -35
  220. package/style/dark.css +685 -577
  221. package/style/dark.css.map +1 -1
  222. package/style/dark.scss +4 -1
  223. package/style/gray.css +668 -560
  224. package/style/gray.css.map +1 -1
  225. package/style/gray.scss +4 -1
  226. package/style/light.css +669 -561
  227. package/style/light.css.map +1 -1
  228. package/style/light.scss +6 -3
  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 +690 -582
  233. package/style/underline.css.map +1 -1
  234. package/style/underline.scss +4 -1
  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,46 +1,33 @@
1
1
  import * as React from "react";
2
+ import { Node } from "../model/Node";
2
3
  import { TabNode } from "../model/TabNode";
3
- import { IconFactory, ILayoutCallbacks, ITitleObject, TitleFactory } from "./Layout";
4
+ import { LayoutInternal } from "./Layout";
5
+ import { TabSetNode } from "../model/TabSetNode";
6
+ import { Rect } from "../Rect";
4
7
 
8
+ /** @internal */
9
+ export function isDesktop() {
10
+ const desktop = typeof window !== "undefined" && window.matchMedia && window.matchMedia("(hover: hover) and (pointer: fine)").matches;
11
+ return desktop;
12
+ }
5
13
  /** @internal */
6
14
  export function getRenderStateEx(
7
- layout: ILayoutCallbacks,
15
+ layout: LayoutInternal,
8
16
  node: TabNode,
9
- iconFactory?: IconFactory,
10
- titleFactory?: TitleFactory,
11
17
  iconAngle?: number
12
18
  ) {
13
- let leadingContent = iconFactory ? iconFactory(node) : undefined;
19
+ let leadingContent = undefined;
14
20
  let titleContent: React.ReactNode = node.getName();
15
21
  let name = node.getName();
16
22
  if (iconAngle === undefined) {
17
23
  iconAngle = 0;
18
24
  }
19
25
 
20
- function isTitleObject(obj: any): obj is ITitleObject {
21
- return obj.titleContent !== undefined
22
- }
23
-
24
- if (titleFactory !== undefined) {
25
- const titleObj = titleFactory(node);
26
- if (titleObj !== undefined) {
27
- if (typeof titleObj === "string") {
28
- titleContent = titleObj as string;
29
- name = titleObj as string;
30
- } else if (isTitleObject(titleObj)) {
31
- titleContent = titleObj.titleContent;
32
- name = titleObj.name;
33
- } else {
34
- titleContent = titleObj;
35
- }
36
- }
37
- }
38
-
39
26
  if (leadingContent === undefined && node.getIcon() !== undefined) {
40
27
  if (iconAngle !== 0) {
41
- leadingContent = <img style={{ width: "1em", height: "1em", transform: "rotate(" + iconAngle + "deg)" }} src={node.getIcon()} alt="leadingContent" />;
28
+ leadingContent = <img style={{ width: "1em", height: "1em", transform: "rotate(" + iconAngle + "deg)" }} src={node.getIcon()} alt="leadingContent" />;
42
29
  } else {
43
- leadingContent = <img style={{ width: "1em", height: "1em" }} src={node.getIcon()} alt="leadingContent" />;
30
+ leadingContent = <img style={{ width: "1em", height: "1em" }} src={node.getIcon()} alt="leadingContent" />;
44
31
  }
45
32
  }
46
33
 
@@ -50,24 +37,13 @@ export function getRenderStateEx(
50
37
  const renderState = { leading: leadingContent, content: titleContent, name, buttons };
51
38
  layout.customizeTab(node, renderState);
52
39
 
53
- node._setRenderedName(renderState.name);
40
+ node.setRenderedName(renderState.name);
54
41
 
55
42
  return renderState;
56
-
57
43
  }
58
44
 
59
45
  /** @internal */
60
- export function hideElement(style: Record<string, any>, useVisibility: ConstrainBoolean) {
61
- if (useVisibility) {
62
- style.visibility = "hidden";
63
- } else {
64
- style.display = "none";
65
- }
66
- }
67
-
68
-
69
- /** @internal */
70
- export function isAuxMouseEvent(event: React.MouseEvent<HTMLDivElement, MouseEvent> | React.TouchEvent<HTMLDivElement>) {
46
+ export function isAuxMouseEvent(event: React.MouseEvent<HTMLElement, MouseEvent> | React.TouchEvent<HTMLElement>) {
71
47
  let auxEvent = false;
72
48
  if (event.nativeEvent instanceof MouseEvent) {
73
49
  if (event.nativeEvent.button !== 0 || event.ctrlKey || event.altKey || event.metaKey || event.shiftKey) {
@@ -77,3 +53,107 @@ export function isAuxMouseEvent(event: React.MouseEvent<HTMLDivElement, MouseEve
77
53
  return auxEvent;
78
54
  }
79
55
 
56
+ export function enablePointerOnIFrames(enable: boolean, currentDocument: Document) {
57
+ const iframes = [
58
+ ...getElementsByTagName('iframe', currentDocument),
59
+ ...getElementsByTagName('webview', currentDocument),
60
+ ];
61
+
62
+ for (const iframe of iframes) {
63
+ (iframe as HTMLElement).style.pointerEvents = enable ? 'auto' : 'none';
64
+ }
65
+ };
66
+
67
+ export function getElementsByTagName(tag: string, currentDocument: Document): Element[] {
68
+ return [...currentDocument.getElementsByTagName(tag)];
69
+ }
70
+
71
+ export function startDrag(
72
+ doc: Document,
73
+ event: React.PointerEvent<HTMLElement>,
74
+ drag: (x: number, y: number) => void,
75
+ dragEnd: () => void,
76
+ dragCancel: () => void) {
77
+
78
+ event.preventDefault();
79
+
80
+ const pointerMove = (ev: PointerEvent) => {
81
+ ev.preventDefault();
82
+ drag(ev.clientX, ev.clientY);
83
+ };
84
+
85
+ const pointerCancel = (ev: PointerEvent) => {
86
+ ev.preventDefault();
87
+ dragCancel();
88
+ };
89
+ const pointerUp = () => {
90
+ doc.removeEventListener("pointermove", pointerMove);
91
+ doc.removeEventListener("pointerup", pointerUp);
92
+ doc.removeEventListener("pointercancel", pointerCancel);
93
+ dragEnd();
94
+ };
95
+
96
+ doc.addEventListener("pointermove", pointerMove);
97
+ doc.addEventListener("pointerup", pointerUp);
98
+ doc.addEventListener('pointercancel', pointerCancel);
99
+ }
100
+
101
+ export function canDockToWindow(node: Node) {
102
+ if (node instanceof TabNode) {
103
+ return node.isEnablePopout();
104
+ } else if (node instanceof TabSetNode) {
105
+ for (const child of node.getChildren()) {
106
+ if ((child as TabNode).isEnablePopout() === false) {
107
+ return false;
108
+ }
109
+ }
110
+ return true;
111
+ }
112
+ return false;
113
+ }
114
+
115
+ export function keepOnScreen(rect: Rect) {
116
+ rect.snap(10);
117
+
118
+ const availableScreenWidth = window.screen.availWidth;
119
+ const availableScreenHeight = window.screen.availHeight;
120
+
121
+ if (rect.x + rect.width > availableScreenWidth || rect.y + rect.height > availableScreenHeight) {
122
+ // Adjust the rectangle to fit within the available screen space
123
+ rect.x = Math.max(0, Math.min(rect.x, availableScreenWidth - rect.width));
124
+ rect.y = Math.max(0, Math.min(rect.y, availableScreenHeight - rect.height));
125
+ }
126
+
127
+ return rect;
128
+ }
129
+
130
+ export function isOnScreen(rect: Rect) {
131
+ const availableScreenWidth = window.screen.availWidth;
132
+ const availableScreenHeight = window.screen.availHeight;
133
+
134
+ return (rect.x >= 0 && rect.getRight() <= availableScreenWidth &&
135
+ rect.y >= 0 || rect.getBottom() <= availableScreenHeight);
136
+ }
137
+
138
+ export function copyInlineStyles(source: HTMLElement, target: HTMLElement): boolean {
139
+ // Get the inline style attribute from the source element
140
+ const sourceStyle = source.getAttribute('style');
141
+ const targetStyle = target.getAttribute('style');
142
+ if (sourceStyle === targetStyle) return false;
143
+
144
+ // console.log("copyInlineStyles", sourceStyle);
145
+
146
+ if (sourceStyle) {
147
+ // Set the style attribute on the target element
148
+ target.setAttribute('style', sourceStyle);
149
+ } else {
150
+ // If the source has no inline style, clear the target's style attribute
151
+ target.removeAttribute('style');
152
+ }
153
+ return true;
154
+ }
155
+
156
+ export function isSafari() {
157
+ const userAgent = navigator.userAgent;
158
+ return userAgent.includes("Safari") && !userAgent.includes("Chrome") && !userAgent.includes("Chromium");
159
+ }
package/style/_base.scss CHANGED
@@ -6,14 +6,64 @@
6
6
  position: absolute;
7
7
  }
8
8
 
9
+ @mixin flexFix {
10
+ display: flex;
11
+ flex-basis: 0px;
12
+ min-width: 0;
13
+ min-height: 0;
14
+ }
15
+
9
16
  .flexlayout {
10
17
  &__layout {
11
18
  @include absoluteFill;
12
- overflow: hidden;
19
+ display:flex;
20
+
21
+ &_overlay {
22
+ @include absoluteFill;
23
+ z-index: 1000;
24
+ }
25
+
26
+ &_tab_stamps {
27
+ position:absolute;
28
+ top:-10000px; // offscreen
29
+ z-index:100;
30
+ display: flex;
31
+ flex-direction: column;
32
+ align-items: start;
33
+ }
34
+
35
+ &_moveables {
36
+ visibility: hidden;
37
+ position:absolute;
38
+ width: 100px; // size is needed to tabs have something to draw into
39
+ height: 100px;
40
+ top:-20000px; // offscreen
41
+ }
42
+
43
+ &_main {
44
+ @include flexFix;
45
+ flex-grow:1;
46
+ position:relative;
47
+ }
48
+ }
49
+
50
+ &__layout_border_container {
51
+ @include flexFix;
52
+ flex-grow:1;
53
+ }
54
+
55
+ &__layout_border_container_inner {
56
+ @include flexFix;
57
+ flex-grow: 1;
13
58
  }
14
59
 
15
60
  &__splitter {
61
+ display: flex;
62
+ align-items: center;
63
+ justify-content: center;
16
64
  background-color: var(--color-splitter);
65
+ touch-action: none;
66
+ z-index: 10;
17
67
  @include splitter_mixin;
18
68
 
19
69
  @media (hover: hover) {
@@ -25,15 +75,33 @@
25
75
  }
26
76
  }
27
77
  &_border {
28
- z-index: 10;
29
78
  @include splitter_border_mixin;
30
79
  }
31
80
  &_drag {
81
+ position:absolute;
82
+ display:flex;
83
+ align-items: center;
84
+ justify-content: center;
32
85
  z-index: 1000;
33
86
  background-color: var(--color-splitter-drag);
34
87
  @include splitter_drag_mixin;
35
88
  }
89
+ &_handle {
90
+ background-color:#ccc;
91
+ border-radius:3px;
92
+
93
+ &_horz {
94
+ width: 3px;
95
+ height:30px;
96
+ }
97
+ &_vert {
98
+ width: 30px;
99
+ height:3px;
100
+ }
101
+ }
102
+
36
103
  &_extra {
104
+ touch-action: none;
37
105
  background-color: transparent;
38
106
  }
39
107
  }
@@ -60,54 +128,66 @@
60
128
  &__edge_rect {
61
129
  position: absolute;
62
130
  z-index: 1000;
63
- box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
64
131
  background-color: var(--color-edge-marker);
65
132
  pointer-events: none;
133
+ display:flex;
134
+ align-items: center;
135
+ justify-content: center;
66
136
  }
67
137
 
68
138
  &__drag_rect {
69
- position: absolute;
70
- cursor: move;
71
139
  color: var(--color-drag-rect);
72
140
  background-color: var(--color-drag-rect-background);
73
141
  border: 2px solid var(--color-drag-rect-border);
74
- // box-shadow: inset 0 0 60px rgba(0, 0, 0, 0.3);
75
142
  border-radius: 5px;
76
- z-index: 1000;
77
143
  box-sizing: border-box;
78
- opacity: 0.9;
79
- text-align: center;
144
+ // text-align: center;
80
145
 
81
146
  display: flex;
82
147
  justify-content: center;
83
148
  flex-direction: column;
84
149
  overflow: hidden;
85
- padding: 0.3em 1em;
150
+ padding: 0.3em .8em;
86
151
  word-wrap: break-word;
87
152
  font-size: var(--font-size);
88
153
  font-family: var(--font-family);
89
154
  }
90
155
 
156
+ &__row {
157
+ @include flexFix;
158
+ position: relative;
159
+ box-sizing: border-box;
160
+ overflow: hidden;
161
+ }
162
+
91
163
  &__tabset {
92
- display: flex;
164
+ display:flex;
93
165
  flex-direction: column;
94
- overflow: hidden;
166
+ position: relative;
95
167
  background-color: var(--color-tabset-background);
96
168
  box-sizing: border-box;
97
- font-size: var(--font-size);
98
169
  font-family: var(--font-family);
170
+ overflow: hidden;
171
+ flex-grow:1;
99
172
  @include tabset_mixin;
100
173
 
174
+ &_container {
175
+ @include flexFix;
176
+ flex-direction: column;
177
+ overflow: hidden;
178
+ flex-grow:1;
179
+ }
180
+
101
181
  &_tab_divider {
102
182
  width: 4px;
103
183
  @include tabset_tab_divider_mixin;
104
184
  }
105
185
 
106
186
  &_content {
107
- display: flex;
187
+ @include flexFix;
108
188
  flex-grow: 1;
109
- align-items: center;
110
- justify-content: center;
189
+ box-sizing: border-box;
190
+ position: relative;
111
191
  }
112
192
 
113
193
  &_header {
@@ -119,6 +199,7 @@
119
199
  border-bottom: 1px solid var(--color-tabset-divider-line);
120
200
  color: var(--color-tabset-header);
121
201
  background-color: var(--color-tabset-header-background);
202
+ font-size: var(--font-size);
122
203
  @include tabset_header_mixin;
123
204
 
124
205
  &_content {
@@ -133,14 +214,17 @@
133
214
  background-color: var(--color-tabset-background);
134
215
  overflow: hidden;
135
216
  display: flex;
217
+ font-size: var(--font-size);
136
218
  @include tabset_tabbar_mixin;
137
219
  }
138
220
 
139
221
  &_outer_top {
222
+ padding:0px 2px 0px 2px;
140
223
  border-bottom: 1px solid var(--color-tabset-divider-line);
141
224
  }
142
225
 
143
226
  &_outer_bottom {
227
+ padding: 0px 2px 0px 2px;
144
228
  border-top: 1px solid var(--color-tabset-divider-line);
145
229
  }
146
230
 
@@ -153,15 +237,13 @@
153
237
  overflow: hidden;
154
238
 
155
239
  &_tab_container {
240
+ position: relative;
156
241
  display: flex;
157
242
  padding-left: 4px;
158
243
  padding-right: 4px;
159
244
  box-sizing: border-box;
160
- position: absolute;
161
- top: 0;
162
- bottom: 0;
163
- width: 10000px;
164
-
245
+ white-space: nowrap;
246
+
165
247
  &_top {
166
248
  border-top: 2px solid transparent; // if you change this, update the _sizer above
167
249
  }
@@ -192,11 +274,30 @@
192
274
  }
193
275
 
194
276
  &__tab {
195
- overflow: auto;
196
- position: absolute;
277
+ overflow: hidden;
197
278
  box-sizing: border-box;
198
- background-color: var(--color-background);
279
+ background-color: var(--color-tab-content);
199
280
  color: var(--color-text);
281
+ position: relative;
282
+
283
+ &_moveable {
284
+ position:relative;
285
+ height:100%;
286
+ min-width:1px;
287
+ min-height:1px;
288
+ overflow:auto;
289
+ box-sizing: border-box;
290
+ }
291
+
292
+ &_overlay {
293
+ z-index: 20;
294
+ position: absolute;
295
+ top: 0;
296
+ left: 0;
297
+ right: 0;
298
+ bottom: 0;
299
+ background-color: #0000003d;
300
+ }
200
301
 
201
302
  &_button {
202
303
  display: flex;
@@ -262,6 +363,7 @@
262
363
 
263
364
  &_content {
264
365
  display: flex;
366
+ text-wrap: nowrap;
265
367
  }
266
368
 
267
369
  &_textbox {
@@ -318,6 +420,15 @@
318
420
  padding-left: .5em;
319
421
  padding-right: .3em;
320
422
 
423
+ &_icon {
424
+ border: none;
425
+ outline: none;
426
+ font-size: inherit;
427
+ margin: 0px;
428
+ background-color: transparent;
429
+ padding: 1px;
430
+ }
431
+
321
432
  &_button {
322
433
  border: none;
323
434
  outline: none;
@@ -392,6 +503,12 @@
392
503
  background-color: var(--color-border-background);
393
504
  @include border_mixin;
394
505
 
506
+ &_tab_contents {
507
+ box-sizing: border-box;
508
+ overflow:hidden;
509
+ background-color: var(--color-border-tab-content);
510
+ }
511
+
395
512
  &_top {
396
513
  border-bottom: 1px solid var(--color-border-divider-line);
397
514
  align-items: center;
@@ -428,8 +545,6 @@
428
545
  padding-right: 2px;
429
546
  box-sizing: border-box;
430
547
  position: absolute;
431
- top: 0;
432
- bottom: 0;
433
548
  width: 10000px;
434
549
 
435
550
  &_right {
@@ -604,15 +719,6 @@
604
719
  &_content {
605
720
  @include absoluteFill;
606
721
  }
607
-
608
- &_tab {
609
- overflow: auto;
610
- @include absoluteFill;
611
-
612
- box-sizing: border-box;
613
- background-color: var(--color-background);
614
- color: var(--color-text);
615
- }
616
722
  }
617
723
 
618
724
  &__error_boundary_container {
@@ -644,6 +750,8 @@
644
750
  }
645
751
 
646
752
  &__border_sizer {
753
+ position:absolute;
754
+ top:-30000px; // offscreen
647
755
  padding-top: 6px;
648
756
  padding-bottom: 5px;
649
757
  font-size: var(--font-size);