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.
- package/ChangeLog.txt +26 -0
- package/README.md +157 -330
- package/Screenshot_light.png +0 -0
- package/Screenshot_rounded.png +0 -0
- package/declarations/Attribute.d.ts +1 -1
- package/declarations/AttributeDefinitions.d.ts +1 -1
- package/declarations/DockLocation.d.ts +12 -12
- package/declarations/DropInfo.d.ts +12 -12
- package/declarations/I18nLabel.d.ts +12 -14
- package/declarations/Orientation.d.ts +7 -7
- package/declarations/PopupMenu.d.ts +1 -1
- package/declarations/Rect.d.ts +41 -28
- package/declarations/Types.d.ts +95 -79
- package/declarations/examples/demo/Utils.d.ts +4 -0
- package/declarations/index.d.ts +21 -22
- package/declarations/model/Action.d.ts +5 -5
- package/declarations/model/Actions.d.ts +127 -110
- package/declarations/model/BorderNode.d.ts +30 -34
- package/declarations/model/BorderSet.d.ts +3 -4
- package/declarations/model/ICloseType.d.ts +5 -5
- package/declarations/model/IDraggable.d.ts +2 -2
- package/declarations/model/IDropTarget.d.ts +2 -2
- package/declarations/model/IJsonModel.d.ts +811 -149
- package/declarations/model/LayoutWindow.d.ts +28 -0
- package/declarations/model/Model.d.ts +91 -86
- package/declarations/model/Node.d.ts +17 -17
- package/declarations/model/RowNode.d.ts +10 -11
- package/declarations/model/TabNode.d.ts +44 -37
- package/declarations/model/TabSetNode.d.ts +44 -41
- package/declarations/model/Utils.d.ts +1 -1
- package/declarations/model/WindowLayout.d.ts +24 -0
- package/declarations/src/Attribute.d.ts +1 -0
- package/declarations/src/AttributeDefinitions.d.ts +1 -0
- package/declarations/src/DockLocation.d.ts +12 -0
- package/declarations/src/DropInfo.d.ts +12 -0
- package/declarations/src/I18nLabel.d.ts +10 -0
- package/declarations/src/Orientation.d.ts +7 -0
- package/declarations/src/PopupMenu.d.ts +1 -0
- package/declarations/src/Rect.d.ts +31 -0
- package/declarations/src/Types.d.ts +92 -0
- package/declarations/src/index.d.ts +20 -0
- package/declarations/src/model/Action.d.ts +5 -0
- package/declarations/src/model/Actions.d.ts +110 -0
- package/declarations/src/model/BorderNode.d.ts +28 -0
- package/declarations/src/model/BorderSet.d.ts +3 -0
- package/declarations/src/model/ICloseType.d.ts +5 -0
- package/declarations/src/model/IDraggable.d.ts +2 -0
- package/declarations/src/model/IDropTarget.d.ts +2 -0
- package/declarations/src/model/IJsonModel.d.ts +153 -0
- package/declarations/src/model/Model.d.ts +98 -0
- package/declarations/src/model/Node.d.ts +16 -0
- package/declarations/src/model/RowNode.d.ts +11 -0
- package/declarations/src/model/TabNode.d.ts +36 -0
- package/declarations/src/model/TabSetNode.d.ts +37 -0
- package/declarations/src/model/Utils.d.ts +1 -0
- package/declarations/src/view/BorderButton.d.ts +1 -0
- package/declarations/src/view/BorderTab.d.ts +2 -0
- package/declarations/src/view/BorderTabSet.d.ts +1 -0
- package/declarations/src/view/DragContainer.d.ts +1 -0
- package/declarations/src/view/ErrorBoundary.d.ts +1 -0
- package/declarations/src/view/FloatingWindow.d.ts +1 -0
- package/declarations/src/view/Icons.d.ts +7 -0
- package/declarations/src/view/Layout.d.ts +113 -0
- package/declarations/src/view/Overlay.d.ts +1 -0
- package/declarations/src/view/PopupMenu.d.ts +1 -0
- package/declarations/src/view/Row.d.ts +1 -0
- package/declarations/src/view/Splitter.d.ts +1 -0
- package/declarations/src/view/Tab.d.ts +1 -0
- package/declarations/src/view/TabButton.d.ts +1 -0
- package/declarations/src/view/TabButtonStamp.d.ts +1 -0
- package/declarations/src/view/TabOverflowHook.d.ts +1 -0
- package/declarations/src/view/TabSet.d.ts +1 -0
- package/declarations/src/view/Utils.d.ts +4 -0
- package/declarations/view/BorderButton.d.ts +1 -1
- package/declarations/view/BorderTab.d.ts +2 -0
- package/declarations/view/BorderTabSet.d.ts +1 -1
- package/declarations/view/DragContainer.d.ts +1 -0
- package/declarations/view/ErrorBoundary.d.ts +1 -1
- package/declarations/view/ExtendedResizeObserver.d.ts +23 -0
- package/declarations/view/FloatingWindow.d.ts +1 -1
- package/declarations/view/Icons.d.ts +8 -6
- package/declarations/view/Layout.d.ts +139 -160
- package/declarations/view/Overlay.d.ts +1 -0
- package/declarations/view/PopoutWindow.d.ts +1 -0
- package/declarations/view/PopupMenu.d.ts +1 -0
- package/declarations/view/Row.d.ts +1 -0
- package/declarations/view/SizeTracker.d.ts +10 -0
- package/declarations/view/Splitter.d.ts +1 -1
- package/declarations/view/Tab.d.ts +1 -1
- package/declarations/view/TabButton.d.ts +1 -1
- package/declarations/view/TabButtonStamp.d.ts +1 -1
- package/declarations/view/TabOverflowHook.d.ts +1 -1
- package/declarations/view/TabSet.d.ts +1 -1
- package/declarations/view/Utils.d.ts +11 -1
- package/dist/bundles/demo.js +232052 -0
- package/dist/bundles/demo.js.map +1 -0
- package/dist/flexlayout.js +122 -92
- package/dist/flexlayout_min.js +1 -1
- package/lib/Attribute.js +42 -31
- package/lib/Attribute.js.map +1 -1
- package/lib/AttributeDefinitions.js +131 -108
- package/lib/AttributeDefinitions.js.map +1 -1
- package/lib/DockLocation.js +120 -124
- package/lib/DockLocation.js.map +1 -1
- package/lib/DropInfo.js +9 -13
- package/lib/DropInfo.js.map +1 -1
- package/lib/I18nLabel.js +13 -18
- package/lib/I18nLabel.js.map +1 -1
- package/lib/Orientation.js +22 -26
- package/lib/Orientation.js.map +1 -1
- package/lib/Rect.js +104 -72
- package/lib/Rect.js.map +1 -1
- package/lib/Types.js +96 -83
- package/lib/Types.js.map +1 -1
- package/lib/index.js +21 -38
- package/lib/index.js.map +1 -1
- package/lib/model/Action.js +6 -10
- package/lib/model/Action.js.map +1 -1
- package/lib/model/Actions.js +169 -155
- package/lib/model/Actions.js.map +1 -1
- package/lib/model/BorderNode.js +385 -406
- package/lib/model/BorderNode.js.map +1 -1
- package/lib/model/BorderSet.js +66 -121
- package/lib/model/BorderSet.js.map +1 -1
- package/lib/model/ICloseType.js +6 -9
- package/lib/model/ICloseType.js.map +1 -1
- package/lib/model/IDraggable.js +1 -2
- package/lib/model/IDropTarget.js +1 -2
- package/lib/model/IJsonModel.js +1 -2
- package/lib/model/LayoutWindow.js +83 -0
- package/lib/model/LayoutWindow.js.map +1 -0
- package/lib/model/Model.js +614 -496
- package/lib/model/Model.js.map +1 -1
- package/lib/model/Node.js +217 -228
- package/lib/model/Node.js.map +1 -1
- package/lib/model/RowNode.js +491 -504
- package/lib/model/RowNode.js.map +1 -1
- package/lib/model/TabNode.js +289 -184
- package/lib/model/TabNode.js.map +1 -1
- package/lib/model/TabSetNode.js +457 -446
- package/lib/model/TabSetNode.js.map +1 -1
- package/lib/model/Utils.js +47 -82
- package/lib/model/Utils.js.map +1 -1
- package/lib/view/BorderButton.js +124 -138
- package/lib/view/BorderButton.js.map +1 -1
- package/lib/view/BorderTab.js +47 -0
- package/lib/view/BorderTab.js.map +1 -0
- package/lib/view/BorderTabSet.js +134 -128
- package/lib/view/BorderTabSet.js.map +1 -1
- package/lib/view/DragContainer.js +16 -0
- package/lib/view/DragContainer.js.map +1 -0
- package/lib/view/ErrorBoundary.js +23 -27
- package/lib/view/ErrorBoundary.js.map +1 -1
- package/lib/view/Icons.js +40 -40
- package/lib/view/Icons.js.map +1 -1
- package/lib/view/Layout.js +918 -901
- package/lib/view/Layout.js.map +1 -1
- package/lib/view/Overlay.js +9 -0
- package/lib/view/Overlay.js.map +1 -0
- package/lib/view/PopoutWindow.js +129 -0
- package/lib/view/PopoutWindow.js.map +1 -0
- package/lib/view/PopupMenu.js +71 -0
- package/lib/view/PopupMenu.js.map +1 -0
- package/lib/view/Row.js +45 -0
- package/lib/view/Row.js.map +1 -0
- package/lib/view/SizeTracker.js +11 -0
- package/lib/view/SizeTracker.js.map +1 -0
- package/lib/view/Splitter.js +191 -147
- package/lib/view/Splitter.js.map +1 -1
- package/lib/view/Tab.js +86 -60
- package/lib/view/Tab.js.map +1 -1
- package/lib/view/TabButton.js +122 -135
- package/lib/view/TabButton.js.map +1 -1
- package/lib/view/TabButtonStamp.js +16 -21
- package/lib/view/TabButtonStamp.js.map +1 -1
- package/lib/view/TabOverflowHook.js +150 -149
- package/lib/view/TabOverflowHook.js.map +1 -1
- package/lib/view/TabSet.js +267 -234
- package/lib/view/TabSet.js.map +1 -1
- package/lib/view/Utils.js +126 -68
- package/lib/view/Utils.js.map +1 -1
- package/package.json +36 -30
- package/src/Attribute.ts +23 -0
- package/src/AttributeDefinitions.ts +38 -15
- package/src/DockLocation.ts +13 -13
- package/src/I18nLabel.ts +7 -9
- package/src/Rect.ts +53 -1
- package/src/Types.ts +16 -0
- package/src/index.ts +1 -2
- package/src/model/Actions.ts +49 -29
- package/src/model/BorderNode.ts +208 -214
- package/src/model/BorderSet.ts +42 -91
- package/src/model/IJsonModel.ts +883 -103
- package/src/model/LayoutWindow.ts +121 -0
- package/src/model/Model.ts +488 -366
- package/src/model/Node.ts +98 -111
- package/src/model/RowNode.ts +323 -319
- package/src/model/TabNode.ts +294 -110
- package/src/model/TabSetNode.ts +300 -242
- package/src/model/Utils.ts +6 -32
- package/src/view/BorderButton.tsx +32 -52
- package/src/view/BorderTab.tsx +70 -0
- package/src/view/BorderTabSet.tsx +64 -52
- package/src/view/DragContainer.tsx +32 -0
- package/src/view/Icons.tsx +13 -0
- package/src/view/Layout.tsx +1071 -1047
- package/src/view/Overlay.tsx +22 -0
- package/src/view/PopoutWindow.tsx +152 -0
- package/src/{PopupMenu.tsx → view/PopupMenu.tsx} +36 -31
- package/src/view/Row.tsx +68 -0
- package/src/view/SizeTracker.tsx +20 -0
- package/src/view/Splitter.tsx +167 -112
- package/src/view/Tab.tsx +76 -42
- package/src/view/TabButton.tsx +36 -55
- package/src/view/TabButtonStamp.tsx +5 -9
- package/src/view/TabOverflowHook.tsx +14 -9
- package/src/view/TabSet.tsx +217 -176
- package/src/view/Utils.tsx +119 -39
- package/style/_base.scss +143 -35
- package/style/dark.css +685 -577
- package/style/dark.css.map +1 -1
- package/style/dark.scss +4 -1
- package/style/gray.css +668 -560
- package/style/gray.css.map +1 -1
- package/style/gray.scss +4 -1
- package/style/light.css +669 -561
- package/style/light.css.map +1 -1
- package/style/light.scss +6 -3
- package/style/rounded.css +697 -0
- package/style/rounded.css.map +1 -0
- package/style/rounded.scss +194 -0
- package/style/underline.css +690 -582
- package/style/underline.css.map +1 -1
- package/style/underline.scss +4 -1
- package/cypress.config.ts +0 -16
- package/lib/DragDrop.js +0 -316
- package/lib/DragDrop.js.map +0 -1
- package/lib/PopupMenu.js +0 -68
- package/lib/PopupMenu.js.map +0 -1
- package/lib/model/SplitterNode.js +0 -72
- package/lib/model/SplitterNode.js.map +0 -1
- package/lib/view/FloatingWindow.js +0 -123
- package/lib/view/FloatingWindow.js.map +0 -1
- package/lib/view/FloatingWindowTab.js +0 -19
- package/lib/view/FloatingWindowTab.js.map +0 -1
- package/lib/view/TabFloating.js +0 -66
- package/lib/view/TabFloating.js.map +0 -1
- package/src/DragDrop.ts +0 -392
- package/src/model/SplitterNode.ts +0 -78
- package/src/view/FloatingWindow.tsx +0 -140
- package/src/view/FloatingWindowTab.tsx +0 -29
- package/src/view/TabFloating.tsx +0 -101
package/src/view/Utils.tsx
CHANGED
|
@@ -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 {
|
|
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:
|
|
15
|
+
layout: LayoutInternal,
|
|
8
16
|
node: TabNode,
|
|
9
|
-
iconFactory?: IconFactory,
|
|
10
|
-
titleFactory?: TitleFactory,
|
|
11
17
|
iconAngle?: number
|
|
12
18
|
) {
|
|
13
|
-
let leadingContent =
|
|
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
|
-
|
|
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.
|
|
40
|
+
node.setRenderedName(renderState.name);
|
|
54
41
|
|
|
55
42
|
return renderState;
|
|
56
|
-
|
|
57
43
|
}
|
|
58
44
|
|
|
59
45
|
/** @internal */
|
|
60
|
-
export function
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
164
|
+
display:flex;
|
|
93
165
|
flex-direction: column;
|
|
94
|
-
|
|
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
|
-
|
|
187
|
+
@include flexFix;
|
|
108
188
|
flex-grow: 1;
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
161
|
-
|
|
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:
|
|
196
|
-
position: absolute;
|
|
277
|
+
overflow: hidden;
|
|
197
278
|
box-sizing: border-box;
|
|
198
|
-
background-color: var(--color-
|
|
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);
|