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
@@ -0,0 +1,113 @@
1
+ import * as React from "react";
2
+ import { I18nLabel } from "../I18nLabel";
3
+ import { Rect } from "../Rect";
4
+ import { Action } from "../model/Action";
5
+ import { BorderNode } from "../model/BorderNode";
6
+ import { IJsonTabNode } from "../model/IJsonModel";
7
+ import { Model } from "../model/Model";
8
+ import { Node } from "../model/Node";
9
+ import { TabNode } from "../model/TabNode";
10
+ import { TabSetNode } from "../model/TabSetNode";
11
+ export interface ILayoutProps {
12
+ model: Model;
13
+ factory: (node: TabNode) => React.ReactNode;
14
+ icons?: IIcons;
15
+ onAction?: (action: Action) => Action | undefined;
16
+ onRenderTab?: (node: TabNode, renderValues: ITabRenderValues) => void;
17
+ onRenderTabSet?: (tabSetNode: TabSetNode | BorderNode, renderValues: ITabSetRenderValues) => void;
18
+ onModelChange?: (model: Model, action: Action) => void;
19
+ onExternalDrag?: (event: React.DragEvent<HTMLElement>) => undefined | {
20
+ json: any;
21
+ onDrop?: (node?: Node, event?: React.DragEvent<HTMLElement>) => void;
22
+ };
23
+ classNameMapper?: (defaultClassName: string) => string;
24
+ i18nMapper?: (id: I18nLabel, param?: string) => string | undefined;
25
+ supportsPopout?: boolean | undefined;
26
+ popoutURL?: string | undefined;
27
+ realtimeResize?: boolean | undefined;
28
+ onRenderDragRect?: DragRectRenderCallback;
29
+ onContextMenu?: NodeMouseEvent;
30
+ onAuxMouseClick?: NodeMouseEvent;
31
+ onShowOverflowMenu?: ShowOverflowMenuCallback;
32
+ onTabSetPlaceHolder?: TabSetPlaceHolderCallback;
33
+ windowId?: string;
34
+ parentLayout?: Layout;
35
+ }
36
+ interface ILayoutState {
37
+ rect: Rect;
38
+ editingTab?: TabNode;
39
+ portal?: React.ReactPortal;
40
+ showEdges?: boolean;
41
+ showOverlay: boolean;
42
+ modelRevision: number;
43
+ }
44
+ /**
45
+ * A React component that hosts a multi-tabbed layout
46
+ */
47
+ export declare class Layout extends React.Component<ILayoutProps, ILayoutState> {
48
+ constructor(props: ILayoutProps);
49
+ sortPortals(portals: Map<string, React.ReactNode>): React.ReactNode[];
50
+ renderEdgeIndicators(): React.ReactNode[];
51
+ renderWindows(): React.ReactNode[];
52
+ renderTabs(): {
53
+ portals: Map<string, React.ReactNode>;
54
+ tabStamps: React.ReactNode[];
55
+ };
56
+ renderHoistedTabs(): React.ReactNode[];
57
+ getFactory(): (node: TabNode) => React.ReactNode;
58
+ /**
59
+ * Adds a new tab to the given tabset
60
+ * @param tabsetId the id of the tabset where the new tab will be added
61
+ * @param json the json for the new tab node
62
+ * @returns the added tab node or undefined
63
+ */
64
+ addTabToTabSet(tabsetId: string, json: IJsonTabNode): TabNode | undefined;
65
+ /**
66
+ * Adds a new tab to the active tabset (if there is one)
67
+ * @param json the json for the new tab node
68
+ * @returns the added tab node or undefined
69
+ */
70
+ addTabToActiveTabSet(json: IJsonTabNode): TabNode | undefined;
71
+ getIcons: () => IIcons;
72
+ showOverlay(show: boolean): void;
73
+ setDraggingOverWindow(overWindow: boolean): void;
74
+ }
75
+ export type DragRectRenderCallback = (content: React.ReactElement | undefined, node?: Node, json?: IJsonTabNode) => React.ReactElement | undefined;
76
+ export type FloatingTabPlaceholderRenderCallback = (dockPopout: () => void, showPopout: () => void) => React.ReactElement | undefined;
77
+ export type NodeMouseEvent = (node: TabNode | TabSetNode | BorderNode, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
78
+ export type ShowOverflowMenuCallback = (node: TabSetNode | BorderNode, mouseEvent: React.MouseEvent<HTMLElement, MouseEvent>, items: {
79
+ index: number;
80
+ node: TabNode;
81
+ }[], onSelect: (item: {
82
+ index: number;
83
+ node: TabNode;
84
+ }) => void) => void;
85
+ export type TabSetPlaceHolderCallback = (node: TabSetNode) => React.ReactNode;
86
+ export interface ITabSetRenderValues {
87
+ stickyButtons: React.ReactNode[];
88
+ buttons: React.ReactNode[];
89
+ overflowPosition: number | undefined;
90
+ }
91
+ export interface ITabRenderValues {
92
+ leading: React.ReactNode;
93
+ content: React.ReactNode;
94
+ name: string;
95
+ buttons: React.ReactNode[];
96
+ }
97
+ export interface ITitleObject {
98
+ titleContent: React.ReactNode;
99
+ name: string;
100
+ }
101
+ export interface IIcons {
102
+ close?: (React.ReactNode | ((tabNode: TabNode) => React.ReactNode));
103
+ closeTabset?: (React.ReactNode | ((tabSetNode: TabSetNode) => React.ReactNode));
104
+ popout?: (React.ReactNode | ((tabNode: TabNode) => React.ReactNode));
105
+ maximize?: (React.ReactNode | ((tabSetNode: TabSetNode) => React.ReactNode));
106
+ restore?: (React.ReactNode | ((tabSetNode: TabSetNode) => React.ReactNode));
107
+ more?: (React.ReactNode | ((tabSetNode: (TabSetNode | BorderNode), hiddenTabs: {
108
+ node: TabNode;
109
+ index: number;
110
+ }[]) => React.ReactNode));
111
+ edgeArrow?: React.ReactNode;
112
+ }
113
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ export declare function enablePointerOnIFrames(enable: boolean): void;
3
+ export declare function getElementsByTagName(tag: string): Element[];
4
+ export declare function startDrag(doc: Document, event: React.PointerEvent<HTMLElement>, drag: (x: number, y: number) => void, dragEnd: () => void, dragCancel: () => void): void;
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import * as React from "react";
2
+ export declare function BorderTab(props: IBorderTabProps): React.JSX.Element;
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * This can be used to replace the global ResizeObserver with a proxy that
3
+ * will work in popout windows by listening to document resize instead
4
+ *
5
+ * To us it just include the following line:
6
+ *
7
+ * import "./ExtendedResizeObserver";
8
+ *
9
+ * Note: this code was written by chat gpt!
10
+ */
11
+ declare const OriginalResizeObserver: {
12
+ new (callback: ResizeObserverCallback): ResizeObserver;
13
+ prototype: ResizeObserver;
14
+ };
15
+ interface ExtendedResizeObserver extends ResizeObserver {
16
+ __element?: Element;
17
+ __document?: Document;
18
+ __cleanup?: () => void;
19
+ }
20
+ declare const ResizeObserverProxy: {
21
+ new (callback: ResizeObserverCallback): ResizeObserver;
22
+ prototype: ResizeObserver;
23
+ };
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1,6 +1,8 @@
1
- /// <reference types="react" />
2
- export declare const CloseIcon: () => JSX.Element;
3
- export declare const MaximizeIcon: () => JSX.Element;
4
- export declare const OverflowIcon: () => JSX.Element;
5
- export declare const PopoutIcon: () => JSX.Element;
6
- export declare const RestoreIcon: () => JSX.Element;
1
+ import * as React from "react";
2
+ export declare const CloseIcon: () => React.JSX.Element;
3
+ export declare const MaximizeIcon: () => React.JSX.Element;
4
+ export declare const OverflowIcon: () => React.JSX.Element;
5
+ export declare const EdgeIcon: () => React.JSX.Element;
6
+ export declare const PopoutIcon: () => React.JSX.Element;
7
+ export declare const RestoreIcon: () => React.JSX.Element;
8
+ export declare const AsterickIcon: () => React.JSX.Element;
@@ -1,160 +1,139 @@
1
- import * as React from "react";
2
- import { DockLocation } from "../DockLocation";
3
- import { I18nLabel } from "../I18nLabel";
4
- import { Action } from "../model/Action";
5
- import { BorderNode } from "../model/BorderNode";
6
- import { Model } from "../model/Model";
7
- import { Node } from "../model/Node";
8
- import { TabNode } from "../model/TabNode";
9
- import { TabSetNode } from "../model/TabSetNode";
10
- import { Rect } from "../Rect";
11
- import { IJsonTabNode } from "../model/IJsonModel";
12
- export type CustomDragCallback = (dragging: TabNode | IJsonTabNode, over: TabNode, x: number, y: number, location: DockLocation) => void;
13
- export type DragRectRenderCallback = (content: React.ReactElement | undefined, node?: Node, json?: IJsonTabNode) => React.ReactElement | undefined;
14
- export type FloatingTabPlaceholderRenderCallback = (dockPopout: () => void, showPopout: () => void) => React.ReactElement | undefined;
15
- export type NodeMouseEvent = (node: TabNode | TabSetNode | BorderNode, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
16
- export type ShowOverflowMenuCallback = (node: TabSetNode | BorderNode, mouseEvent: React.MouseEvent<HTMLElement, MouseEvent>, items: {
17
- index: number;
18
- node: TabNode;
19
- }[], onSelect: (item: {
20
- index: number;
21
- node: TabNode;
22
- }) => void) => void;
23
- export type TabSetPlaceHolderCallback = (node: TabSetNode) => React.ReactNode;
24
- export type IconFactory = (node: TabNode) => React.ReactNode;
25
- export type TitleFactory = (node: TabNode) => ITitleObject | React.ReactNode;
26
- export interface ILayoutProps {
27
- model: Model;
28
- factory: (node: TabNode) => React.ReactNode;
29
- font?: IFontValues;
30
- fontFamily?: string;
31
- iconFactory?: IconFactory;
32
- titleFactory?: TitleFactory;
33
- icons?: IIcons;
34
- onAction?: (action: Action) => Action | undefined;
35
- onRenderTab?: (node: TabNode, renderValues: ITabRenderValues) => void;
36
- onRenderTabSet?: (tabSetNode: TabSetNode | BorderNode, renderValues: ITabSetRenderValues) => void;
37
- onModelChange?: (model: Model, action: Action) => void;
38
- onExternalDrag?: (event: React.DragEvent<HTMLDivElement>) => undefined | {
39
- dragText: string;
40
- json: any;
41
- onDrop?: (node?: Node, event?: Event) => void;
42
- };
43
- classNameMapper?: (defaultClassName: string) => string;
44
- i18nMapper?: (id: I18nLabel, param?: string) => string | undefined;
45
- supportsPopout?: boolean | undefined;
46
- popoutURL?: string | undefined;
47
- realtimeResize?: boolean | undefined;
48
- onTabDrag?: (dragging: TabNode | IJsonTabNode, over: TabNode, x: number, y: number, location: DockLocation, refresh: () => void) => undefined | {
49
- x: number;
50
- y: number;
51
- width: number;
52
- height: number;
53
- callback: CustomDragCallback;
54
- invalidated?: () => void;
55
- cursor?: string | undefined;
56
- };
57
- onRenderDragRect?: DragRectRenderCallback;
58
- onRenderFloatingTabPlaceholder?: FloatingTabPlaceholderRenderCallback;
59
- onContextMenu?: NodeMouseEvent;
60
- onAuxMouseClick?: NodeMouseEvent;
61
- onShowOverflowMenu?: ShowOverflowMenuCallback;
62
- onTabSetPlaceHolder?: TabSetPlaceHolderCallback;
63
- }
64
- export interface IFontValues {
65
- size?: string;
66
- family?: string;
67
- style?: string;
68
- weight?: string;
69
- }
70
- export interface ITabSetRenderValues {
71
- headerContent?: React.ReactNode;
72
- centerContent?: React.ReactNode;
73
- stickyButtons: React.ReactNode[];
74
- buttons: React.ReactNode[];
75
- headerButtons: React.ReactNode[];
76
- overflowPosition: number | undefined;
77
- }
78
- export interface ITabRenderValues {
79
- leading: React.ReactNode;
80
- content: React.ReactNode;
81
- name: string;
82
- buttons: React.ReactNode[];
83
- }
84
- export interface ITitleObject {
85
- titleContent: React.ReactNode;
86
- name: string;
87
- }
88
- export interface ILayoutState {
89
- rect: Rect;
90
- calculatedHeaderBarSize: number;
91
- calculatedTabBarSize: number;
92
- calculatedBorderBarSize: number;
93
- editingTab?: TabNode;
94
- showHiddenBorder: DockLocation;
95
- portal?: React.ReactPortal;
96
- showEdges?: boolean;
97
- }
98
- export interface IIcons {
99
- close?: (React.ReactNode | ((tabNode: TabNode) => React.ReactNode));
100
- closeTabset?: (React.ReactNode | ((tabSetNode: TabSetNode) => React.ReactNode));
101
- popout?: (React.ReactNode | ((tabNode: TabNode) => React.ReactNode));
102
- maximize?: (React.ReactNode | ((tabSetNode: TabSetNode) => React.ReactNode));
103
- restore?: (React.ReactNode | ((tabSetNode: TabSetNode) => React.ReactNode));
104
- more?: (React.ReactNode | ((tabSetNode: (TabSetNode | BorderNode), hiddenTabs: {
105
- node: TabNode;
106
- index: number;
107
- }[]) => React.ReactNode));
108
- }
109
- export interface ICustomDropDestination {
110
- rect: Rect;
111
- callback: CustomDragCallback;
112
- invalidated: (() => void) | undefined;
113
- dragging: TabNode | IJsonTabNode;
114
- over: TabNode;
115
- x: number;
116
- y: number;
117
- location: DockLocation;
118
- cursor: string | undefined;
119
- }
120
- /**
121
- * A React component that hosts a multi-tabbed layout
122
- */
123
- export declare class Layout extends React.Component<ILayoutProps, ILayoutState> {
124
- constructor(props: ILayoutProps);
125
- /**
126
- * Adds a new tab to the given tabset
127
- * @param tabsetId the id of the tabset where the new tab will be added
128
- * @param json the json for the new tab node
129
- * @returns the added tab node or undefined
130
- */
131
- addTabToTabSet(tabsetId: string, json: IJsonTabNode): TabNode | undefined;
132
- /**
133
- * Adds a new tab to the active tabset (if there is one)
134
- * @param json the json for the new tab node
135
- * @returns the added tab node or undefined
136
- */
137
- addTabToActiveTabSet(json: IJsonTabNode): TabNode | undefined;
138
- /**
139
- * Adds a new tab by dragging a labeled panel to the drop location, dragging starts immediatelly
140
- * @param dragText the text to show on the drag panel
141
- * @param json the json for the new tab node
142
- * @param onDrop a callback to call when the drag is complete (node and event will be undefined if the drag was cancelled)
143
- */
144
- addTabWithDragAndDrop(dragText: string | undefined, json: IJsonTabNode, onDrop?: (node?: Node, event?: Event) => void): void;
145
- /**
146
- * Move a tab/tabset using drag and drop
147
- * @param node the tab or tabset to drag
148
- * @param dragText the text to show on the drag panel
149
- */
150
- moveTabWithDragAndDrop(node: (TabNode | TabSetNode), dragText?: string): void;
151
- /**
152
- * Adds a new tab by dragging a labeled panel to the drop location, dragging starts when you
153
- * mouse down on the panel
154
- *
155
- * @param dragText the text to show on the drag panel
156
- * @param json the json for the new tab node
157
- * @param onDrop a callback to call when the drag is complete (node and event will be undefined if the drag was cancelled)
158
- */
159
- addTabWithDragAndDropIndirect(dragText: string | undefined, json: IJsonTabNode, onDrop?: (node?: Node, event?: Event) => void): void;
160
- }
1
+ import * as React from "react";
2
+ import { I18nLabel } from "../I18nLabel";
3
+ import { Action } from "../model/Action";
4
+ import { BorderNode } from "../model/BorderNode";
5
+ import { IJsonTabNode } from "../model/IJsonModel";
6
+ import { Model } from "../model/Model";
7
+ import { Node } from "../model/Node";
8
+ import { TabNode } from "../model/TabNode";
9
+ import { TabSetNode } from "../model/TabSetNode";
10
+ export interface ILayoutProps {
11
+ /** the model for this layout */
12
+ model: Model;
13
+ /** factory function for creating the tab components */
14
+ factory: (node: TabNode) => React.ReactNode;
15
+ /** object mapping keys among close, maximize, restore, more, popout to React nodes to use in place of the default icons, can alternatively return functions for creating the React nodes */
16
+ icons?: IIcons;
17
+ /** function called whenever the layout generates an action to update the model (allows for intercepting actions before they are dispatched to the model, for example, asking the user to confirm a tab close.) Returning undefined from the function will halt the action, otherwise return the action to continue */
18
+ onAction?: (action: Action) => Action | undefined;
19
+ /** function called when rendering a tab, allows leading (icon), content section, buttons and name used in overflow menu to be customized */
20
+ onRenderTab?: (node: TabNode, renderValues: ITabRenderValues) => void;
21
+ /** function called when rendering a tabset, allows header and buttons to be customized */
22
+ onRenderTabSet?: (tabSetNode: TabSetNode | BorderNode, renderValues: ITabSetRenderValues) => void;
23
+ /** function called when model has changed */
24
+ onModelChange?: (model: Model, action: Action) => void;
25
+ /** function called when an external object (not a tab) gets dragged onto the layout, with a single dragenter argument. Should return either undefined to reject the drag/drop or an object with keys dragText, jsonDrop, to create a tab via drag (similar to a call to addTabToTabSet). Function onDropis passed the added tabNodeand thedrop DragEvent`, unless the drag was canceled. */
26
+ onExternalDrag?: (event: React.DragEvent<HTMLElement>) => undefined | {
27
+ json: any;
28
+ onDrop?: (node?: Node, event?: React.DragEvent<HTMLElement>) => void;
29
+ };
30
+ /** function called with default css class name, return value is class name that will be used. Mainly for use with css modules. */
31
+ classNameMapper?: (defaultClassName: string) => string;
32
+ /** function called for each I18nLabel to allow user translation, currently used for tab and tabset move messages, return undefined to use default values */
33
+ i18nMapper?: (id: I18nLabel, param?: string) => string | undefined;
34
+ /** if left undefined will do simple check based on userAgent */
35
+ supportsPopout?: boolean | undefined;
36
+ /** URL of popout window relative to origin, defaults to popout.html */
37
+ popoutURL?: string | undefined;
38
+ /** boolean value, defaults to false, resize tabs as splitters are dragged. Warning: this can cause resizing to become choppy when tabs are slow to draw */
39
+ realtimeResize?: boolean | undefined;
40
+ /** callback for rendering the drag rectangles */
41
+ onRenderDragRect?: DragRectRenderCallback;
42
+ /** callback for handling context actions on tabs and tabsets */
43
+ onContextMenu?: NodeMouseEvent;
44
+ /** callback for handling mouse clicks on tabs and tabsets with alt, meta, shift keys, also handles center mouse clicks */
45
+ onAuxMouseClick?: NodeMouseEvent;
46
+ /** callback for handling the display of the tab overflow menu */
47
+ onShowOverflowMenu?: ShowOverflowMenuCallback;
48
+ /** callback for rendering a placeholder when a tabset is empty */
49
+ onTabSetPlaceHolder?: TabSetPlaceHolderCallback;
50
+ /** Name given to popout windows, defaults to 'Popout Window' */
51
+ popoutWindowName?: string;
52
+ }
53
+ /**
54
+ * A React component that hosts a multi-tabbed layout
55
+ */
56
+ export declare class Layout extends React.Component<ILayoutProps> {
57
+ /** re-render the layout */
58
+ redraw(): void;
59
+ /**
60
+ * Adds a new tab to the given tabset
61
+ * @param tabsetId the id of the tabset where the new tab will be added
62
+ * @param json the json for the new tab node
63
+ * @returns the added tab node or undefined
64
+ */
65
+ addTabToTabSet(tabsetId: string, json: IJsonTabNode): TabNode | undefined;
66
+ /**
67
+ * Adds a new tab by dragging an item to the drop location, must be called from within an HTML
68
+ * drag start handler. You can use the setDragComponent() method to set the drag image before calling this
69
+ * method.
70
+ * @param event the drag start event
71
+ * @param json the json for the new tab node
72
+ * @param onDrop a callback to call when the drag is complete
73
+ */
74
+ addTabWithDragAndDrop(event: DragEvent, json: IJsonTabNode, onDrop?: (node?: Node, event?: React.DragEvent<HTMLElement>) => void): void;
75
+ /**
76
+ * Move a tab/tabset using drag and drop, must be called from within an HTML
77
+ * drag start handler
78
+ * @param event the drag start event
79
+ * @param node the tab or tabset to drag
80
+ */
81
+ moveTabWithDragAndDrop(event: DragEvent, node: (TabNode | TabSetNode)): void;
82
+ /**
83
+ * Adds a new tab to the active tabset (if there is one)
84
+ * @param json the json for the new tab node
85
+ * @returns the added tab node or undefined
86
+ */
87
+ addTabToActiveTabSet(json: IJsonTabNode): TabNode | undefined;
88
+ /**
89
+ * Sets the drag image from a react component for a drag event
90
+ * @param event the drag event
91
+ * @param component the react component to be used for the drag image
92
+ * @param x the x position of the drag cursor on the image
93
+ * @param y the x position of the drag cursor on the image
94
+ */
95
+ setDragComponent(event: DragEvent, component: React.ReactNode, x: number, y: number): void;
96
+ /** Get the root div element of the layout */
97
+ getRootDiv(): HTMLDivElement | null;
98
+ }
99
+ export type DragRectRenderCallback = (content: React.ReactNode | undefined, node?: Node, json?: IJsonTabNode) => React.ReactNode | undefined;
100
+ export type NodeMouseEvent = (node: TabNode | TabSetNode | BorderNode, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
101
+ export type ShowOverflowMenuCallback = (node: TabSetNode | BorderNode, mouseEvent: React.MouseEvent<HTMLElement, MouseEvent>, items: {
102
+ index: number;
103
+ node: TabNode;
104
+ }[], onSelect: (item: {
105
+ index: number;
106
+ node: TabNode;
107
+ }) => void) => void;
108
+ export type TabSetPlaceHolderCallback = (node: TabSetNode) => React.ReactNode;
109
+ export interface ITabSetRenderValues {
110
+ /** components that will be added after the tabs */
111
+ stickyButtons: React.ReactNode[];
112
+ /** components that will be added at the end of the tabset */
113
+ buttons: React.ReactNode[];
114
+ /** position to insert overflow button within [...stickyButtons, ...buttons]
115
+ * if left undefined position will be after the sticky buttons (if any)
116
+ */
117
+ overflowPosition: number | undefined;
118
+ }
119
+ export interface ITabRenderValues {
120
+ /** the icon or other leading component */
121
+ leading: React.ReactNode;
122
+ /** the main tab text/component */
123
+ content: React.ReactNode;
124
+ /** a set of react components to add to the tab after the content */
125
+ buttons: React.ReactNode[];
126
+ }
127
+ export interface IIcons {
128
+ close?: (React.ReactNode | ((tabNode: TabNode) => React.ReactNode));
129
+ closeTabset?: (React.ReactNode | ((tabSetNode: TabSetNode) => React.ReactNode));
130
+ popout?: (React.ReactNode | ((tabNode: TabNode) => React.ReactNode));
131
+ maximize?: (React.ReactNode | ((tabSetNode: TabSetNode) => React.ReactNode));
132
+ restore?: (React.ReactNode | ((tabSetNode: TabSetNode) => React.ReactNode));
133
+ more?: (React.ReactNode | ((tabSetNode: (TabSetNode | BorderNode), hiddenTabs: {
134
+ node: TabNode;
135
+ index: number;
136
+ }[]) => React.ReactNode));
137
+ edgeArrow?: React.ReactNode;
138
+ activeTabset?: (React.ReactNode | ((tabSetNode: TabSetNode) => React.ReactNode));
139
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import { Rect } from "../Rect";
3
+ export interface ISizeTrackerProps {
4
+ rect: Rect;
5
+ selected: boolean;
6
+ forceRevision: number;
7
+ tabsRevision: number;
8
+ children: React.ReactNode;
9
+ }
10
+ export declare const SizeTracker: React.MemoExoticComponent<({ children }: ISizeTrackerProps) => React.JSX.Element>;
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1 +1,11 @@
1
- export {};
1
+ import * as React from "react";
2
+ import { Node } from "../model/Node";
3
+ import { Rect } from "../Rect";
4
+ export declare function enablePointerOnIFrames(enable: boolean, currentDocument: Document): void;
5
+ export declare function getElementsByTagName(tag: string, currentDocument: Document): Element[];
6
+ export declare function startDrag(doc: Document, event: React.PointerEvent<HTMLElement>, drag: (x: number, y: number) => void, dragEnd: () => void, dragCancel: () => void): void;
7
+ export declare function canDockToWindow(node: Node): boolean;
8
+ export declare function keepOnScreen(rect: Rect): Rect;
9
+ export declare function isOnScreen(rect: Rect): boolean;
10
+ export declare function copyInlineStyles(source: HTMLElement, target: HTMLElement): boolean;
11
+ export declare function isSafari(): boolean;