flexlayout-react 0.7.15 → 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 +23 -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 +139 -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 +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 -45
  155. package/lib/view/Icons.js.map +1 -1
  156. package/lib/view/Layout.js +918 -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 +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 +6 -0
  206. package/src/view/Layout.tsx +1051 -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 +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 +140 -34
  220. package/style/dark.css +685 -580
  221. package/style/dark.css.map +1 -1
  222. package/style/dark.scss +3 -1
  223. package/style/gray.css +668 -563
  224. package/style/gray.css.map +1 -1
  225. package/style/gray.scss +2 -0
  226. package/style/light.css +669 -564
  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 +690 -585
  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,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
  }
@@ -68,48 +136,58 @@
68
136
  }
69
137
 
70
138
  &__drag_rect {
71
- position: absolute;
72
- cursor: move;
73
139
  color: var(--color-drag-rect);
74
140
  background-color: var(--color-drag-rect-background);
75
141
  border: 2px solid var(--color-drag-rect-border);
76
- // box-shadow: inset 0 0 60px rgba(0, 0, 0, 0.3);
77
142
  border-radius: 5px;
78
- z-index: 1000;
79
143
  box-sizing: border-box;
80
- opacity: 0.9;
81
- text-align: center;
144
+ // text-align: center;
82
145
 
83
146
  display: flex;
84
147
  justify-content: center;
85
148
  flex-direction: column;
86
149
  overflow: hidden;
87
- padding: 0.3em 1em;
150
+ padding: 0.3em .8em;
88
151
  word-wrap: break-word;
89
152
  font-size: var(--font-size);
90
153
  font-family: var(--font-family);
91
154
  }
92
155
 
156
+ &__row {
157
+ @include flexFix;
158
+ position: relative;
159
+ box-sizing: border-box;
160
+ overflow: hidden;
161
+ }
162
+
93
163
  &__tabset {
94
- display: flex;
164
+ display:flex;
95
165
  flex-direction: column;
96
- overflow: hidden;
166
+ position: relative;
97
167
  background-color: var(--color-tabset-background);
98
168
  box-sizing: border-box;
99
- font-size: var(--font-size);
100
169
  font-family: var(--font-family);
170
+ overflow: hidden;
171
+ flex-grow:1;
101
172
  @include tabset_mixin;
102
173
 
174
+ &_container {
175
+ @include flexFix;
176
+ flex-direction: column;
177
+ overflow: hidden;
178
+ flex-grow:1;
179
+ }
180
+
103
181
  &_tab_divider {
104
182
  width: 4px;
105
183
  @include tabset_tab_divider_mixin;
106
184
  }
107
185
 
108
186
  &_content {
109
- display: flex;
187
+ @include flexFix;
110
188
  flex-grow: 1;
111
- align-items: center;
112
- justify-content: center;
189
+ box-sizing: border-box;
190
+ position: relative;
113
191
  }
114
192
 
115
193
  &_header {
@@ -121,6 +199,7 @@
121
199
  border-bottom: 1px solid var(--color-tabset-divider-line);
122
200
  color: var(--color-tabset-header);
123
201
  background-color: var(--color-tabset-header-background);
202
+ font-size: var(--font-size);
124
203
  @include tabset_header_mixin;
125
204
 
126
205
  &_content {
@@ -135,14 +214,17 @@
135
214
  background-color: var(--color-tabset-background);
136
215
  overflow: hidden;
137
216
  display: flex;
217
+ font-size: var(--font-size);
138
218
  @include tabset_tabbar_mixin;
139
219
  }
140
220
 
141
221
  &_outer_top {
222
+ padding:0px 2px 0px 2px;
142
223
  border-bottom: 1px solid var(--color-tabset-divider-line);
143
224
  }
144
225
 
145
226
  &_outer_bottom {
227
+ padding: 0px 2px 0px 2px;
146
228
  border-top: 1px solid var(--color-tabset-divider-line);
147
229
  }
148
230
 
@@ -155,15 +237,13 @@
155
237
  overflow: hidden;
156
238
 
157
239
  &_tab_container {
240
+ position: relative;
158
241
  display: flex;
159
242
  padding-left: 4px;
160
243
  padding-right: 4px;
161
244
  box-sizing: border-box;
162
- position: absolute;
163
- top: 0;
164
- bottom: 0;
165
- width: 10000px;
166
-
245
+ white-space: nowrap;
246
+
167
247
  &_top {
168
248
  border-top: 2px solid transparent; // if you change this, update the _sizer above
169
249
  }
@@ -194,11 +274,30 @@
194
274
  }
195
275
 
196
276
  &__tab {
197
- overflow: auto;
198
- position: absolute;
277
+ overflow: hidden;
199
278
  box-sizing: border-box;
200
- background-color: var(--color-background);
279
+ background-color: var(--color-tab-content);
201
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
+ }
202
301
 
203
302
  &_button {
204
303
  display: flex;
@@ -264,6 +363,7 @@
264
363
 
265
364
  &_content {
266
365
  display: flex;
366
+ text-wrap: nowrap;
267
367
  }
268
368
 
269
369
  &_textbox {
@@ -320,6 +420,15 @@
320
420
  padding-left: .5em;
321
421
  padding-right: .3em;
322
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
+
323
432
  &_button {
324
433
  border: none;
325
434
  outline: none;
@@ -394,6 +503,12 @@
394
503
  background-color: var(--color-border-background);
395
504
  @include border_mixin;
396
505
 
506
+ &_tab_contents {
507
+ box-sizing: border-box;
508
+ overflow:hidden;
509
+ background-color: var(--color-border-tab-content);
510
+ }
511
+
397
512
  &_top {
398
513
  border-bottom: 1px solid var(--color-border-divider-line);
399
514
  align-items: center;
@@ -430,8 +545,6 @@
430
545
  padding-right: 2px;
431
546
  box-sizing: border-box;
432
547
  position: absolute;
433
- top: 0;
434
- bottom: 0;
435
548
  width: 10000px;
436
549
 
437
550
  &_right {
@@ -606,15 +719,6 @@
606
719
  &_content {
607
720
  @include absoluteFill;
608
721
  }
609
-
610
- &_tab {
611
- overflow: auto;
612
- @include absoluteFill;
613
-
614
- box-sizing: border-box;
615
- background-color: var(--color-background);
616
- color: var(--color-text);
617
- }
618
722
  }
619
723
 
620
724
  &__error_boundary_container {
@@ -646,6 +750,8 @@
646
750
  }
647
751
 
648
752
  &__border_sizer {
753
+ position:absolute;
754
+ top:-30000px; // offscreen
649
755
  padding-top: 6px;
650
756
  padding-bottom: 5px;
651
757
  font-size: var(--font-size);